aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/DMA-mapping.txt18
-rw-r--r--Documentation/DocBook/kernel-api.tmpl2
-rw-r--r--Documentation/DocBook/writing-an-alsa-driver.tmpl8
-rw-r--r--Documentation/blockdev/00-INDEX2
-rw-r--r--Documentation/blockdev/mflash.txt84
-rw-r--r--Documentation/devices.txt6
-rw-r--r--Documentation/fb/uvesafb.txt7
-rw-r--r--Documentation/feature-removal-schedule.txt3
-rw-r--r--Documentation/filesystems/00-INDEX2
-rw-r--r--Documentation/filesystems/knfsd-stats.txt159
-rw-r--r--Documentation/filesystems/nfs41-server.txt161
-rw-r--r--Documentation/filesystems/nilfs2.txt200
-rw-r--r--Documentation/hwmon/g760a36
-rw-r--r--Documentation/isdn/README.gigaset52
-rw-r--r--Documentation/kernel-parameters.txt481
-rw-r--r--Documentation/kprobes.txt38
-rw-r--r--Documentation/powerpc/dts-bindings/fsl/upm-nand.txt39
-rw-r--r--Documentation/powerpc/dts-bindings/gpio/led.txt46
-rw-r--r--Documentation/scsi/aacraid.txt15
-rw-r--r--Documentation/sound/alsa/soc/jack.txt71
-rw-r--r--Documentation/sysctl/vm.txt28
-rw-r--r--Documentation/video4linux/pxa_camera.txt125
-rw-r--r--Documentation/video4linux/v4l2-framework.txt21
-rw-r--r--MAINTAINERS8
-rw-r--r--arch/arm/mach-davinci/board-evm.c4
-rw-r--r--arch/arm/mach-davinci/include/mach/nand.h80
-rw-r--r--arch/arm/mach-davinci/usb.c4
-rw-r--r--arch/arm/mach-iop13xx/setup.c8
-rw-r--r--arch/arm/mach-iop13xx/tpmi.c10
-rw-r--r--arch/arm/mach-kirkwood/common.c10
-rw-r--r--arch/arm/mach-mx1/Makefile3
-rw-r--r--arch/arm/mach-mx1/devices.c2
-rw-r--r--arch/arm/mach-mx1/ksym_mx1.c18
-rw-r--r--arch/arm/mach-mx1/mx1_camera_fiq.S35
-rw-r--r--arch/arm/mach-mx3/clock.c2
-rw-r--r--arch/arm/mach-orion5x/common.c6
-rw-r--r--arch/arm/mach-pxa/include/mach/pxa2xx_spi.h1
-rw-r--r--arch/arm/mach-pxa/include/mach/pxa3xx_nand.h3
-rw-r--r--arch/arm/mach-s3c2410/mach-bast.c3
-rw-r--r--arch/arm/mach-s3c2410/mach-n30.c3
-rw-r--r--arch/arm/mach-s3c2412/mach-jive.c3
-rw-r--r--arch/arm/plat-iop/adma.c8
-rw-r--r--arch/arm/plat-mxc/include/mach/i2c.h25
-rw-r--r--arch/arm/plat-mxc/include/mach/memory.h8
-rw-r--r--arch/arm/plat-mxc/include/mach/mx1_camera.h35
-rw-r--r--arch/arm/plat-s3c/dev-i2c0.c7
-rw-r--r--arch/arm/plat-s3c/dev-i2c1.c7
-rw-r--r--arch/arm/plat-s3c/include/plat/iic.h33
-rw-r--r--arch/avr32/boards/hammerhead/flash.c4
-rw-r--r--arch/avr32/mach-at32ap/at32ap700x.c8
-rw-r--r--arch/blackfin/include/asm/bfin5xx_spi.h5
-rw-r--r--arch/blackfin/kernel/process.c2
-rw-r--r--arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h10
-rw-r--r--arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h36
-rw-r--r--arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h29
-rw-r--r--arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h37
-rw-r--r--arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h10
-rw-r--r--arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h117
-rw-r--r--arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h29
-rw-r--r--arch/cris/include/asm/ioctls.h5
-rw-r--r--arch/cris/include/asm/rs485.h8
-rw-r--r--arch/cris/include/asm/termios.h1
-rw-r--r--arch/frv/mm/tlb-miss.S1
-rw-r--r--arch/ia64/kernel/pci-dma.c6
-rw-r--r--arch/ia64/sn/pci/pci_dma.c2
-rw-r--r--arch/mips/alchemy/common/platform.c30
-rw-r--r--arch/mips/alchemy/devboards/pb1200/platform.c4
-rw-r--r--arch/mips/include/asm/txx9/ndfmc.h30
-rw-r--r--arch/mips/include/asm/txx9/rbtx4939.h9
-rw-r--r--arch/mips/include/asm/txx9/tx4938.h1
-rw-r--r--arch/mips/include/asm/txx9/tx4939.h2
-rw-r--r--arch/mips/nxp/pnx833x/common/platform.c12
-rw-r--r--arch/mips/nxp/pnx8550/common/platform.c8
-rw-r--r--arch/mips/pmc-sierra/msp71xx/msp_usb.c8
-rw-r--r--arch/mips/txx9/generic/setup.c21
-rw-r--r--arch/mips/txx9/generic/setup_tx4938.c21
-rw-r--r--arch/mips/txx9/generic/setup_tx4939.c17
-rw-r--r--arch/mips/txx9/rbtx4938/setup.c2
-rw-r--r--arch/mips/txx9/rbtx4939/setup.c161
-rw-r--r--arch/powerpc/Kconfig3
-rw-r--r--arch/powerpc/boot/dts/ksi8560.dts4
-rw-r--r--arch/powerpc/boot/dts/pq2fads.dts20
-rw-r--r--arch/powerpc/boot/dts/sbc8548.dts4
-rw-r--r--arch/powerpc/boot/dts/sbc8560.dts4
-rw-r--r--arch/powerpc/boot/dts/socrates.dts9
-rw-r--r--arch/powerpc/boot/dts/stx_gp3_8560.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8540.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8541.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8548-bigflash.dts7
-rw-r--r--arch/powerpc/boot/dts/tqm8548.dts7
-rw-r--r--arch/powerpc/boot/dts/tqm8555.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8560.dts4
-rw-r--r--arch/powerpc/configs/pseries_defconfig2
-rw-r--r--arch/powerpc/include/asm/lppaca.h2
-rw-r--r--arch/powerpc/include/asm/mpic.h12
-rw-r--r--arch/powerpc/include/asm/ps3fb.h1
-rw-r--r--arch/powerpc/include/asm/pte-common.h6
-rw-r--r--arch/powerpc/include/asm/reg.h30
-rw-r--r--arch/powerpc/include/asm/reg_booke.h30
-rw-r--r--arch/powerpc/include/asm/rtas.h3
-rw-r--r--arch/powerpc/include/asm/sfp-machine.h6
-rw-r--r--arch/powerpc/include/asm/systbl.h3
-rw-r--r--arch/powerpc/include/asm/unistd.h4
-rw-r--r--arch/powerpc/kernel/dma.c2
-rw-r--r--arch/powerpc/kernel/fpu.S5
-rw-r--r--arch/powerpc/kernel/ftrace.c4
-rw-r--r--arch/powerpc/kernel/irq.c4
-rw-r--r--arch/powerpc/kernel/lparcfg.c16
-rw-r--r--arch/powerpc/kernel/misc_64.S8
-rw-r--r--arch/powerpc/kernel/of_platform.c2
-rw-r--r--arch/powerpc/kernel/prom_init.c18
-rw-r--r--arch/powerpc/kernel/ptrace32.c15
-rw-r--r--arch/powerpc/kernel/setup-common.c1
-rw-r--r--arch/powerpc/platforms/cell/iommu.c2
-rw-r--r--arch/powerpc/platforms/iseries/iommu.c4
-rw-r--r--arch/powerpc/platforms/ps3/system-bus.c2
-rw-r--r--arch/powerpc/sysdev/fsl_lbc.c2
-rw-r--r--arch/powerpc/sysdev/mpic.c34
-rw-r--r--arch/x86/Kconfig2
-rw-r--r--arch/x86/include/asm/apic.h3
-rw-r--r--arch/x86/include/asm/dma-mapping.h6
-rw-r--r--arch/x86/include/asm/io_apic.h11
-rw-r--r--arch/x86/kernel/apic/apic.c70
-rw-r--r--arch/x86/kernel/apic/io_apic.c140
-rw-r--r--arch/x86/kernel/pci-dma.c8
-rw-r--r--arch/x86/kernel/pci-nommu.c2
-rw-r--r--block/blk-core.c100
-rw-r--r--block/blk-merge.c29
-rw-r--r--block/blk-settings.c2
-rw-r--r--block/blk-sysfs.c44
-rw-r--r--block/blk.h14
-rw-r--r--block/cfq-iosched.c206
-rw-r--r--block/elevator.c44
-rw-r--r--drivers/acpi/acpica/nsxfeval.c3
-rw-r--r--drivers/ata/ahci.c27
-rw-r--r--drivers/ata/ata_piix.c7
-rw-r--r--drivers/ata/pata_cs5520.c4
-rw-r--r--drivers/ata/pata_ixp4xx_cf.c2
-rw-r--r--drivers/ata/pata_octeon_cf.c6
-rw-r--r--drivers/ata/pdc_adma.c4
-rw-r--r--drivers/ata/sata_inic162x.c4
-rw-r--r--drivers/ata/sata_mv.c497
-rw-r--r--drivers/ata/sata_qstor.c10
-rw-r--r--drivers/ata/sata_sil24.c10
-rw-r--r--drivers/ata/sata_vsc.c4
-rw-r--r--drivers/atm/he.c2
-rw-r--r--drivers/atm/lanai.c4
-rw-r--r--drivers/base/isa.c2
-rw-r--r--drivers/block/DAC960.c12
-rw-r--r--drivers/block/Kconfig17
-rw-r--r--drivers/block/Makefile1
-rw-r--r--drivers/block/cciss.c121
-rw-r--r--drivers/block/cciss.h2
-rw-r--r--drivers/block/cciss_cmd.h23
-rw-r--r--drivers/block/loop.c7
-rw-r--r--drivers/block/mg_disk.c1005
-rw-r--r--drivers/block/sx8.c6
-rw-r--r--drivers/block/umem.c4
-rw-r--r--drivers/char/applicom.c1
-rw-r--r--drivers/char/cyclades.c2
-rw-r--r--drivers/char/esp.c2
-rw-r--r--drivers/char/isicom.c1
-rw-r--r--drivers/char/moxa.c9
-rw-r--r--drivers/char/mxser.c1
-rw-r--r--drivers/char/rio/rio_linux.c2
-rw-r--r--drivers/char/riscom8.c2
-rw-r--r--drivers/char/specialix.c1
-rw-r--r--drivers/crypto/hifn_795x.c2
-rw-r--r--drivers/crypto/ixp4xx_crypto.c2
-rw-r--r--drivers/dma/ioat.c8
-rw-r--r--drivers/firmware/dcdbas.c2
-rw-r--r--drivers/hwmon/Kconfig22
-rw-r--r--drivers/hwmon/Makefile2
-rw-r--r--drivers/hwmon/asus_atk0110.c1009
-rw-r--r--drivers/hwmon/g760a.c272
-rw-r--r--drivers/hwmon/lm95241.c112
-rw-r--r--drivers/i2c/algos/Kconfig4
-rw-r--r--drivers/i2c/algos/Makefile1
-rw-r--r--drivers/i2c/algos/i2c-algo-sgi.c179
-rw-r--r--drivers/i2c/busses/Kconfig20
-rw-r--r--drivers/i2c/busses/Makefile2
-rw-r--r--drivers/i2c/busses/i2c-imx.c624
-rw-r--r--drivers/i2c/busses/i2c-mpc.c322
-rw-r--r--drivers/i2c/busses/i2c-s3c2410.c77
-rw-r--r--drivers/i2c/busses/i2c-s6000.c407
-rw-r--r--drivers/i2c/busses/i2c-s6000.h79
-rw-r--r--drivers/ide/cs5520.c2
-rw-r--r--drivers/ide/setup-pci.c2
-rw-r--r--drivers/idle/i7300_idle.c2
-rw-r--r--drivers/ieee1394/pcilynx.c2
-rw-r--r--drivers/infiniband/hw/amso1100/c2.c4
-rw-r--r--drivers/infiniband/hw/ipath/ipath_driver.c8
-rw-r--r--drivers/infiniband/hw/mthca/mthca_main.c8
-rw-r--r--drivers/infiniband/hw/nes/nes.c8
-rw-r--r--drivers/isdn/gigaset/bas-gigaset.c4
-rw-r--r--drivers/isdn/gigaset/interface.c58
-rw-r--r--drivers/leds/Kconfig75
-rw-r--r--drivers/leds/Makefile7
-rw-r--r--drivers/leds/led-class.c21
-rw-r--r--drivers/leds/led-triggers.c10
-rw-r--r--drivers/leds/leds-bd2802.c765
-rw-r--r--drivers/leds/leds-dac124s085.c150
-rw-r--r--drivers/leds/leds-gpio.c225
-rw-r--r--drivers/leds/leds-h1940.c2
-rw-r--r--drivers/leds/leds-pca9532.c2
-rw-r--r--drivers/leds/leds-pwm.c153
-rw-r--r--drivers/leds/leds-rb532.c77
-rw-r--r--drivers/leds/leds-s3c24xx.c7
-rw-r--r--drivers/leds/leds.h4
-rw-r--r--drivers/leds/ledtrig-default-on.c2
-rw-r--r--drivers/leds/ledtrig-gpio.c239
-rw-r--r--drivers/leds/ledtrig-heartbeat.c4
-rw-r--r--drivers/leds/ledtrig-ide-disk.c3
-rw-r--r--drivers/leds/ledtrig-timer.c2
-rw-r--r--drivers/md/raid1.c9
-rw-r--r--drivers/media/dvb/dm1105/dm1105.c2
-rw-r--r--drivers/media/dvb/dvb-usb/Kconfig4
-rw-r--r--drivers/media/dvb/dvb-usb/af9015.c63
-rw-r--r--drivers/media/dvb/dvb-usb/af9015.h75
-rw-r--r--drivers/media/dvb/dvb-usb/ce6230.c8
-rw-r--r--drivers/media/dvb/dvb-usb/dvb-usb-ids.h4
-rw-r--r--drivers/media/dvb/firewire/firedtv-avc.c2
-rw-r--r--drivers/media/dvb/frontends/Kconfig7
-rw-r--r--drivers/media/dvb/frontends/Makefile1
-rw-r--r--drivers/media/dvb/frontends/au8522_decoder.c12
-rw-r--r--drivers/media/dvb/frontends/lgs8gxx.c816
-rw-r--r--drivers/media/dvb/frontends/lgs8gxx.h90
-rw-r--r--drivers/media/dvb/frontends/lgs8gxx_priv.h70
-rw-r--r--drivers/media/dvb/pluto2/pluto2.c2
-rw-r--r--drivers/media/radio/dsbr100.c88
-rw-r--r--drivers/media/radio/radio-aimslab.c12
-rw-r--r--drivers/media/radio/radio-aztech.c12
-rw-r--r--drivers/media/radio/radio-gemtek-pci.c12
-rw-r--r--drivers/media/radio/radio-gemtek.c11
-rw-r--r--drivers/media/radio/radio-maestro.c12
-rw-r--r--drivers/media/radio/radio-maxiradio.c12
-rw-r--r--drivers/media/radio/radio-mr800.c85
-rw-r--r--drivers/media/radio/radio-rtrack2.c12
-rw-r--r--drivers/media/radio/radio-sf16fmi.c12
-rw-r--r--drivers/media/radio/radio-sf16fmr2.c12
-rw-r--r--drivers/media/radio/radio-si470x.c9
-rw-r--r--drivers/media/radio/radio-terratec.c12
-rw-r--r--drivers/media/radio/radio-trust.c12
-rw-r--r--drivers/media/radio/radio-typhoon.c12
-rw-r--r--drivers/media/radio/radio-zoltrix.c12
-rw-r--r--drivers/media/video/Kconfig15
-rw-r--r--drivers/media/video/Makefile4
-rw-r--r--drivers/media/video/adv7170.c19
-rw-r--r--drivers/media/video/adv7175.c17
-rw-r--r--drivers/media/video/au0828/Kconfig1
-rw-r--r--drivers/media/video/au0828/au0828-cards.c19
-rw-r--r--drivers/media/video/au0828/au0828-core.c9
-rw-r--r--drivers/media/video/au0828/au0828-i2c.c72
-rw-r--r--drivers/media/video/au0828/au0828-reg.h35
-rw-r--r--drivers/media/video/au0828/au0828-video.c12
-rw-r--r--drivers/media/video/au0828/au0828.h1
-rw-r--r--drivers/media/video/bt819.c15
-rw-r--r--drivers/media/video/bt856.c11
-rw-r--r--drivers/media/video/bt866.c11
-rw-r--r--drivers/media/video/bt8xx/bttv-cards.c70
-rw-r--r--drivers/media/video/bt8xx/bttv-driver.c27
-rw-r--r--drivers/media/video/bt8xx/bttvp.h2
-rw-r--r--drivers/media/video/cafe_ccic.c2
-rw-r--r--drivers/media/video/cs5345.c11
-rw-r--r--drivers/media/video/cs53l32a.c9
-rw-r--r--drivers/media/video/cx18/cx18-audio.c9
-rw-r--r--drivers/media/video/cx18/cx18-av-core.c70
-rw-r--r--drivers/media/video/cx18/cx18-av-core.h5
-rw-r--r--drivers/media/video/cx18/cx18-driver.c4
-rw-r--r--drivers/media/video/cx18/cx18-fileops.c2
-rw-r--r--drivers/media/video/cx18/cx18-gpio.c6
-rw-r--r--drivers/media/video/cx18/cx18-i2c.c14
-rw-r--r--drivers/media/video/cx18/cx18-ioctl.c12
-rw-r--r--drivers/media/video/cx18/cx18-video.c16
-rw-r--r--drivers/media/video/cx231xx/Kconfig35
-rw-r--r--drivers/media/video/cx231xx/Makefile14
-rw-r--r--drivers/media/video/cx231xx/cx231xx-audio.c586
-rw-r--r--drivers/media/video/cx231xx/cx231xx-avcore.c2581
-rw-r--r--drivers/media/video/cx231xx/cx231xx-cards.c914
-rw-r--r--drivers/media/video/cx231xx/cx231xx-conf-reg.h494
-rw-r--r--drivers/media/video/cx231xx/cx231xx-core.c1200
-rw-r--r--drivers/media/video/cx231xx/cx231xx-dvb.c559
-rw-r--r--drivers/media/video/cx231xx/cx231xx-i2c.c555
-rw-r--r--drivers/media/video/cx231xx/cx231xx-input.c246
-rw-r--r--drivers/media/video/cx231xx/cx231xx-pcb-cfg.c795
-rw-r--r--drivers/media/video/cx231xx/cx231xx-pcb-cfg.h231
-rw-r--r--drivers/media/video/cx231xx/cx231xx-reg.h1564
-rw-r--r--drivers/media/video/cx231xx/cx231xx-vbi.c701
-rw-r--r--drivers/media/video/cx231xx/cx231xx-vbi.h65
-rw-r--r--drivers/media/video/cx231xx/cx231xx-video.c2434
-rw-r--r--drivers/media/video/cx231xx/cx231xx.h779
-rw-r--r--drivers/media/video/cx23885/cx23885-cards.c5
-rw-r--r--drivers/media/video/cx23885/cx23885-core.c2
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c2
-rw-r--r--drivers/media/video/cx23885/cx23885-video.c16
-rw-r--r--drivers/media/video/cx23885/cx23885.h2
-rw-r--r--drivers/media/video/cx25840/cx25840-audio.c66
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c185
-rw-r--r--drivers/media/video/cx25840/cx25840-core.h1
-rw-r--r--drivers/media/video/cx25840/cx25840-firmware.c11
-rw-r--r--drivers/media/video/cx88/cx88-alsa.c2
-rw-r--r--drivers/media/video/cx88/cx88-cards.c17
-rw-r--r--drivers/media/video/cx88/cx88-core.c2
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c2
-rw-r--r--drivers/media/video/cx88/cx88-mpeg.c2
-rw-r--r--drivers/media/video/cx88/cx88-video.c27
-rw-r--r--drivers/media/video/cx88/cx88.h2
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c150
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c12
-rw-r--r--drivers/media/video/em28xx/em28xx-i2c.c71
-rw-r--r--drivers/media/video/em28xx/em28xx-video.c83
-rw-r--r--drivers/media/video/em28xx/em28xx.h10
-rw-r--r--drivers/media/video/gspca/gspca.c1
-rw-r--r--drivers/media/video/gspca/gspca.h1
-rw-r--r--drivers/media/video/gspca/m5602/Makefile3
-rw-r--r--drivers/media/video/gspca/m5602/m5602_bridge.h8
-rw-r--r--drivers/media/video/gspca/m5602/m5602_core.c36
-rw-r--r--drivers/media/video/gspca/m5602/m5602_mt9m111.c77
-rw-r--r--drivers/media/video/gspca/m5602/m5602_mt9m111.h61
-rw-r--r--drivers/media/video/gspca/m5602/m5602_ov9650.c570
-rw-r--r--drivers/media/video/gspca/m5602/m5602_ov9650.h239
-rw-r--r--drivers/media/video/gspca/m5602/m5602_po1030.c114
-rw-r--r--drivers/media/video/gspca/m5602/m5602_po1030.h98
-rw-r--r--drivers/media/video/gspca/m5602/m5602_s5k4aa.c173
-rw-r--r--drivers/media/video/gspca/m5602/m5602_s5k4aa.h134
-rw-r--r--drivers/media/video/gspca/m5602/m5602_s5k83a.c154
-rw-r--r--drivers/media/video/gspca/m5602/m5602_s5k83a.h94
-rw-r--r--drivers/media/video/gspca/m5602/m5602_sensor.h17
-rw-r--r--drivers/media/video/gspca/sq905.c6
-rw-r--r--drivers/media/video/gspca/vc032x.c403
-rw-r--r--drivers/media/video/ivtv/ivtv-driver.c9
-rw-r--r--drivers/media/video/ivtv/ivtv-fileops.c17
-rw-r--r--drivers/media/video/ivtv/ivtv-gpio.c18
-rw-r--r--drivers/media/video/ivtv/ivtv-i2c.c17
-rw-r--r--drivers/media/video/ivtv/ivtv-ioctl.c16
-rw-r--r--drivers/media/video/ivtv/ivtv-routing.c66
-rw-r--r--drivers/media/video/ks0127.c21
-rw-r--r--drivers/media/video/m52790.c7
-rw-r--r--drivers/media/video/meye.c2
-rw-r--r--drivers/media/video/msp3400-driver.c40
-rw-r--r--drivers/media/video/msp3400-driver.h3
-rw-r--r--drivers/media/video/msp3400-kthreads.c6
-rw-r--r--drivers/media/video/mt9m001.c2
-rw-r--r--drivers/media/video/mt9t031.c21
-rw-r--r--drivers/media/video/mx1_camera.c827
-rw-r--r--drivers/media/video/mx3_camera.c2
-rw-r--r--drivers/media/video/mxb.c144
-rw-r--r--drivers/media/video/ov772x.c65
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-audio.c8
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c7
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-ctrl.c12
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c9
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw.c11
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-i2c-core.c12
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-sysfs.c14
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-video-v4l.c8
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-wm8775.c12
-rw-r--r--drivers/media/video/pwc/Kconfig2
-rw-r--r--drivers/media/video/pxa_camera.c511
-rw-r--r--drivers/media/video/s2255drv.c8
-rw-r--r--drivers/media/video/saa7110.c17
-rw-r--r--drivers/media/video/saa7115.c61
-rw-r--r--drivers/media/video/saa7127.c11
-rw-r--r--drivers/media/video/saa7134/saa6752hs.c4
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c41
-rw-r--r--drivers/media/video/saa7134/saa7134-core.c13
-rw-r--r--drivers/media/video/saa7134/saa7134-video.c6
-rw-r--r--drivers/media/video/saa7134/saa7134.h2
-rw-r--r--drivers/media/video/saa717x.c25
-rw-r--r--drivers/media/video/saa7185.c9
-rw-r--r--drivers/media/video/saa7191.c10
-rw-r--r--drivers/media/video/soc_camera.c6
-rw-r--r--drivers/media/video/tda9840.c1
-rw-r--r--drivers/media/video/tea6415c.c6
-rw-r--r--drivers/media/video/tea6420.c18
-rw-r--r--drivers/media/video/tuner-core.c81
-rw-r--r--drivers/media/video/tvaudio.c44
-rw-r--r--drivers/media/video/tvp5150.c40
-rw-r--r--drivers/media/video/upd64031a.c11
-rw-r--r--drivers/media/video/upd64083.c9
-rw-r--r--drivers/media/video/usbvision/usbvision-core.c5
-rw-r--r--drivers/media/video/usbvision/usbvision-i2c.c10
-rw-r--r--drivers/media/video/usbvision/usbvision-video.c14
-rw-r--r--drivers/media/video/uvc/Kconfig2
-rw-r--r--drivers/media/video/v4l1-compat.c9
-rw-r--r--drivers/media/video/v4l2-common.c62
-rw-r--r--drivers/media/video/v4l2-dev.c11
-rw-r--r--drivers/media/video/v4l2-ioctl.c34
-rw-r--r--drivers/media/video/v4l2-subdev.c128
-rw-r--r--drivers/media/video/vino.c33
-rw-r--r--drivers/media/video/vp27smpx.c2
-rw-r--r--drivers/media/video/vpx3220.c23
-rw-r--r--drivers/media/video/w9968cf.c5
-rw-r--r--drivers/media/video/w9968cf.h2
-rw-r--r--drivers/media/video/wm8775.c9
-rw-r--r--drivers/media/video/zoran/zoran.h4
-rw-r--r--drivers/media/video/zoran/zoran_card.c12
-rw-r--r--drivers/media/video/zoran/zoran_device.c22
-rw-r--r--drivers/media/video/zoran/zoran_driver.c26
-rw-r--r--drivers/media/video/zr364xx.c1
-rw-r--r--drivers/memstick/host/jmb38x_ms.c2
-rw-r--r--drivers/message/fusion/mptbase.c8
-rw-r--r--drivers/message/fusion/mptsas.c5
-rw-r--r--drivers/message/i2o/memory.c6
-rw-r--r--drivers/message/i2o/pci.c4
-rw-r--r--drivers/misc/tifm_7xx1.c2
-rw-r--r--drivers/mmc/host/sdhci-pci.c2
-rw-r--r--drivers/mtd/Makefile2
-rw-r--r--drivers/mtd/ar7part.c6
-rw-r--r--drivers/mtd/chips/cfi_cmdset_0001.c8
-rw-r--r--drivers/mtd/chips/cfi_cmdset_0002.c11
-rw-r--r--drivers/mtd/chips/jedec_probe.c16
-rw-r--r--drivers/mtd/chips/map_ram.c17
-rw-r--r--drivers/mtd/chips/map_rom.c17
-rw-r--r--drivers/mtd/cmdlinepart.c6
-rw-r--r--drivers/mtd/devices/doc2000.c1
-rw-r--r--drivers/mtd/devices/doc2001.c1
-rw-r--r--drivers/mtd/devices/doc2001plus.c1
-rw-r--r--drivers/mtd/devices/docecc.c1
-rw-r--r--drivers/mtd/devices/m25p80.c19
-rw-r--r--drivers/mtd/devices/mtd_dataflash.c18
-rw-r--r--drivers/mtd/devices/mtdram.c14
-rw-r--r--drivers/mtd/inftlmount.c1
-rw-r--r--drivers/mtd/internal.h17
-rw-r--r--drivers/mtd/maps/Kconfig12
-rw-r--r--drivers/mtd/maps/Makefile2
-rw-r--r--drivers/mtd/maps/omap_nor.c2
-rw-r--r--drivers/mtd/maps/physmap.c1
-rw-r--r--drivers/mtd/maps/physmap_of.c1
-rw-r--r--drivers/mtd/maps/plat-ram.c1
-rw-r--r--drivers/mtd/maps/rbtx4939-flash.c208
-rw-r--r--drivers/mtd/maps/sa1100-flash.c2
-rw-r--r--drivers/mtd/maps/sharpsl-flash.c116
-rw-r--r--drivers/mtd/mtd_blkdevs.c4
-rw-r--r--drivers/mtd/mtdbdi.c43
-rw-r--r--drivers/mtd/mtdchar.c111
-rw-r--r--drivers/mtd/mtdconcat.c47
-rw-r--r--drivers/mtd/mtdcore.c208
-rw-r--r--drivers/mtd/mtdoops.c16
-rw-r--r--drivers/mtd/mtdpart.c31
-rw-r--r--drivers/mtd/nand/Kconfig21
-rw-r--r--drivers/mtd/nand/Makefile3
-rw-r--r--drivers/mtd/nand/bf5xx_nand.c18
-rw-r--r--drivers/mtd/nand/cafe_nand.c1
-rw-r--r--drivers/mtd/nand/davinci_nand.c570
-rw-r--r--drivers/mtd/nand/fsl_upm.c119
-rw-r--r--drivers/mtd/nand/mxc_nand.c1
-rw-r--r--drivers/mtd/nand/nand_base.c125
-rw-r--r--drivers/mtd/nand/plat_nand.c2
-rw-r--r--drivers/mtd/nand/pxa3xx_nand.c119
-rw-r--r--drivers/mtd/nand/sh_flctl.c18
-rw-r--r--drivers/mtd/nand/socrates_nand.c325
-rw-r--r--drivers/mtd/nand/txx9ndfmc.c428
-rw-r--r--drivers/mtd/nftlcore.c3
-rw-r--r--drivers/mtd/ofpart.c7
-rw-r--r--drivers/mtd/onenand/omap2.c6
-rw-r--r--drivers/mtd/onenand/onenand_base.c145
-rw-r--r--drivers/mtd/ubi/cdev.c11
-rw-r--r--drivers/net/8139cp.c10
-rw-r--r--drivers/net/Kconfig2
-rw-r--r--drivers/net/acenic.c4
-rw-r--r--drivers/net/amd8111e.c2
-rw-r--r--drivers/net/atl1e/atl1e_main.c4
-rw-r--r--drivers/net/atlx/atl1.c2
-rw-r--r--drivers/net/atlx/atl2.c4
-rw-r--r--drivers/net/b44.c22
-rw-r--r--drivers/net/bnx2.c357
-rw-r--r--drivers/net/bnx2.h71
-rw-r--r--drivers/net/bnx2_fw.h4378
-rw-r--r--drivers/net/bnx2_fw2.h4547
-rw-r--r--drivers/net/bnx2x_main.c6
-rw-r--r--drivers/net/cassini.c6
-rw-r--r--drivers/net/chelsio/cxgb2.c6
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c6
-rw-r--r--drivers/net/dl2k.c2
-rw-r--r--drivers/net/e100.c2
-rw-r--r--drivers/net/e1000/e1000_main.c42
-rw-r--r--drivers/net/e1000e/netdev.c12
-rw-r--r--drivers/net/enic/enic_main.c8
-rw-r--r--drivers/net/forcedeth.c7
-rw-r--r--drivers/net/hp100.c2
-rw-r--r--drivers/net/ibm_newemac/core.c2
-rw-r--r--drivers/net/igb/igb_main.c8
-rw-r--r--drivers/net/ioc3-eth.c6
-rw-r--r--drivers/net/ipg.c4
-rw-r--r--drivers/net/ixgb/ixgb_main.c8
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c12
-rw-r--r--drivers/net/jme.c4
-rw-r--r--drivers/net/mlx4/main.c8
-rw-r--r--drivers/net/myri10ge/myri10ge.c8
-rw-r--r--drivers/net/myri_code.h5006
-rw-r--r--drivers/net/myri_sbus.c37
-rw-r--r--drivers/net/netxen/netxen_nic_main.c8
-rw-r--r--drivers/net/niu.c4
-rw-r--r--drivers/net/ns83820.c4
-rw-r--r--drivers/net/pcmcia/axnet_cs.c9
-rw-r--r--drivers/net/qla3xxx.c8
-rw-r--r--drivers/net/qlge/qlge_main.c8
-rw-r--r--drivers/net/r6040.c4
-rw-r--r--drivers/net/r8169.c10
-rw-r--r--drivers/net/s2io.c6
-rw-r--r--drivers/net/sc92031.c4
-rw-r--r--drivers/net/sis190.c2
-rw-r--r--drivers/net/sis900.c2
-rw-r--r--drivers/net/skge.c8
-rw-r--r--drivers/net/sky2.c6
-rw-r--r--drivers/net/smsc911x.c1
-rw-r--r--drivers/net/smsc9420.c2
-rw-r--r--drivers/net/sungem.c4
-rw-r--r--drivers/net/tehuti.c8
-rw-r--r--drivers/net/tehuti.h9
-rw-r--r--drivers/net/tg3.c20
-rw-r--r--drivers/net/tlan.c2
-rw-r--r--drivers/net/tokenring/lanstreamer.c2
-rw-r--r--drivers/net/tulip/dmfe.c2
-rw-r--r--drivers/net/tulip/uli526x.c2
-rw-r--r--drivers/net/tulip/winbond-840.c2
-rw-r--r--drivers/net/typhoon.c2
-rw-r--r--drivers/net/usb/usbnet.c2
-rw-r--r--drivers/net/via-rhine.c2
-rw-r--r--drivers/net/virtio_net.c10
-rw-r--r--drivers/net/vxge/vxge-main.c1
-rw-r--r--drivers/net/wan/wanxl.c8
-rw-r--r--drivers/net/wireless/adm8211.c4
-rw-r--r--drivers/net/wireless/ath5k/base.c2
-rw-r--r--drivers/net/wireless/b43/dma.c20
-rw-r--r--drivers/net/wireless/b43legacy/dma.c20
-rw-r--r--drivers/net/wireless/ipw2x00/ipw2100.c2
-rw-r--r--drivers/net/wireless/ipw2x00/ipw2200.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c4
-rw-r--r--drivers/net/wireless/prism54/islpci_hotplug.c2
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00pci.c2
-rw-r--r--drivers/parport/parport_cs.c3
-rw-r--r--drivers/parport/parport_pc.c57
-rw-r--r--drivers/parport/parport_serial.c20
-rw-r--r--drivers/pci/dmar.c71
-rw-r--r--drivers/pci/intel-iommu.c249
-rw-r--r--drivers/pci/intr_remapping.c84
-rw-r--r--drivers/pnp/card.c2
-rw-r--r--drivers/pnp/core.c2
-rw-r--r--drivers/rapidio/rio-scan.c4
-rw-r--r--drivers/scsi/3w-9xxx.c8
-rw-r--r--drivers/scsi/3w-xxxx.h2
-rw-r--r--drivers/scsi/BusLogic.c6
-rw-r--r--drivers/scsi/Kconfig17
-rw-r--r--drivers/scsi/Makefile1
-rw-r--r--drivers/scsi/a100u2w.c2
-rw-r--r--drivers/scsi/a2091.c6
-rw-r--r--drivers/scsi/a2091.h3
-rw-r--r--drivers/scsi/a3000.c6
-rw-r--r--drivers/scsi/a3000.h3
-rw-r--r--drivers/scsi/aacraid/aachba.c48
-rw-r--r--drivers/scsi/aacraid/aacraid.h9
-rw-r--r--drivers/scsi/aacraid/comminit.c14
-rw-r--r--drivers/scsi/aacraid/commsup.c10
-rw-r--r--drivers/scsi/aacraid/linit.c18
-rw-r--r--drivers/scsi/advansys.c1731
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_core.c12
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_inline.h32
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm.h102
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm_pci.c12
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_pci.c8
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_inline.h5
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm.h104
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm_pci.c4
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_pci.c10
-rw-r--r--drivers/scsi/aic7xxx/aiclib.h4
-rw-r--r--drivers/scsi/aic94xx/aic94xx_init.c8
-rw-r--r--drivers/scsi/arcmsr/arcmsr_hba.c4
-rw-r--r--drivers/scsi/atp870u.c2
-rw-r--r--drivers/scsi/cxgb3i/Kbuild4
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i.h10
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_ddp.c275
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_ddp.h6
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_init.c31
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_iscsi.c129
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_offload.c101
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_offload.h13
-rw-r--r--drivers/scsi/dpt_i2o.c8
-rw-r--r--drivers/scsi/eata.c2
-rw-r--r--drivers/scsi/fcoe/Makefile8
-rw-r--r--drivers/scsi/fcoe/fc_transport_fcoe.c443
-rw-r--r--drivers/scsi/fcoe/fcoe.c1878
-rw-r--r--drivers/scsi/fcoe/fcoe.h75
-rw-r--r--drivers/scsi/fcoe/fcoe_sw.c561
-rw-r--r--drivers/scsi/fcoe/libfcoe.c2216
-rw-r--r--drivers/scsi/gdth.c6
-rw-r--r--drivers/scsi/hptiop.c4
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.c126
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.h16
-rw-r--r--drivers/scsi/initio.c2
-rw-r--r--drivers/scsi/ipr.c2
-rw-r--r--drivers/scsi/ips.c4
-rw-r--r--drivers/scsi/lasi700.c2
-rw-r--r--drivers/scsi/libfc/fc_fcp.c10
-rw-r--r--drivers/scsi/libfc/fc_lport.c11
-rw-r--r--drivers/scsi/libiscsi.c4
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c4
-rw-r--r--drivers/scsi/megaraid.c6
-rw-r--r--drivers/scsi/megaraid/megaraid_mbox.c6
-rw-r--r--drivers/scsi/megaraid/megaraid_sas.c6
-rw-r--r--drivers/scsi/mvsas.c10
-rw-r--r--drivers/scsi/nsp32.c2
-rw-r--r--drivers/scsi/osd/osd_initiator.c42
-rw-r--r--drivers/scsi/osd/osd_uld.c6
-rw-r--r--drivers/scsi/ql1040_fw.h2130
-rw-r--r--drivers/scsi/ql12160_fw.h1811
-rw-r--r--drivers/scsi/ql1280_fw.h2048
-rw-r--r--drivers/scsi/qla1280.c120
-rw-r--r--drivers/scsi/qla1280.h6
-rw-r--r--drivers/scsi/qla2xxx/qla_attr.c295
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h136
-rw-r--r--drivers/scsi/qla2xxx/qla_dfs.c4
-rw-r--r--drivers/scsi/qla2xxx/qla_fw.h42
-rw-r--r--drivers/scsi/qla2xxx/qla_gbl.h25
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c136
-rw-r--r--drivers/scsi/qla2xxx/qla_iocb.c37
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c32
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c238
-rw-r--r--drivers/scsi/qla2xxx/qla_mid.c12
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c266
-rw-r--r--drivers/scsi/qla2xxx/qla_sup.c103
-rw-r--r--drivers/scsi/qla2xxx/qla_version.h4
-rw-r--r--drivers/scsi/qla4xxx/ql4_os.c8
-rw-r--r--drivers/scsi/qlogicpti.c63
-rw-r--r--drivers/scsi/qlogicpti_asm.c1160
-rw-r--r--drivers/scsi/scsi.c4
-rw-r--r--drivers/scsi/scsi_lib.c17
-rw-r--r--drivers/scsi/sd.c6
-rw-r--r--drivers/scsi/ses.c2
-rw-r--r--drivers/scsi/sg.c37
-rw-r--r--drivers/scsi/sni_53c710.c2
-rw-r--r--drivers/scsi/sr.c9
-rw-r--r--drivers/scsi/stex.c750
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_glue.c2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_glue.h6
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.c2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.h12
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_malloc.c2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_misc.h18
-rw-r--r--drivers/serial/8250_pci.c412
-rw-r--r--drivers/serial/8250_pnp.c7
-rw-r--r--drivers/serial/Kconfig49
-rw-r--r--drivers/serial/Makefile1
-rw-r--r--drivers/serial/bfin_5xx.c297
-rw-r--r--drivers/serial/cpm_uart/cpm_uart_core.c14
-rw-r--r--drivers/serial/crisv10.c79
-rw-r--r--drivers/serial/crisv10.h2
-rw-r--r--drivers/serial/icom.c14
-rw-r--r--drivers/serial/jsm/jsm_driver.c9
-rw-r--r--drivers/serial/jsm/jsm_neo.c14
-rw-r--r--drivers/serial/jsm/jsm_tty.c23
-rw-r--r--drivers/serial/pmac_zilog.c15
-rw-r--r--drivers/serial/ucc_uart.c1
-rw-r--r--drivers/sn/ioc3.c4
-rw-r--r--drivers/spi/pxa2xx_spi.c98
-rw-r--r--drivers/spi/spi_bfin5xx.c645
-rw-r--r--drivers/spi/spi_imx.c5
-rw-r--r--drivers/staging/agnx/pci.c4
-rw-r--r--drivers/staging/altpciechdma/altpciechdma.c8
-rw-r--r--drivers/staging/serqt_usb/serqt_usb.c449
-rw-r--r--drivers/staging/slicoss/slicoss.c4
-rw-r--r--drivers/staging/sxg/sxg.c8
-rw-r--r--drivers/usb/class/cdc-acm.c5
-rw-r--r--drivers/usb/host/ehci-hcd.c2
-rw-r--r--drivers/usb/host/ehci-pci.c2
-rw-r--r--drivers/usb/host/ehci-ps3.c2
-rw-r--r--drivers/usb/host/ohci-ps3.c2
-rw-r--r--drivers/usb/serial/pl2303.c1
-rw-r--r--drivers/usb/serial/pl2303.h4
-rw-r--r--drivers/usb/serial/symbolserial.c67
-rw-r--r--drivers/uwb/whci.c8
-rw-r--r--drivers/video/Kconfig9
-rw-r--r--drivers/video/backlight/Kconfig18
-rw-r--r--drivers/video/backlight/Makefile2
-rw-r--r--drivers/video/backlight/jornada720_bl.c161
-rw-r--r--drivers/video/backlight/jornada720_lcd.c153
-rw-r--r--drivers/video/backlight/mbp_nvidia_bl.c191
-rw-r--r--drivers/video/backlight/pwm_bl.c4
-rw-r--r--drivers/video/fsl-diu-fb.c34
-rw-r--r--drivers/video/mx3fb.c56
-rw-r--r--drivers/video/tdfxfb.c267
-rw-r--r--drivers/watchdog/wdrtas.c13
-rw-r--r--firmware/Makefile10
-rw-r--r--firmware/WHENCE66
-rw-r--r--firmware/advansys/3550.bin.ihex317
-rw-r--r--firmware/advansys/38C0800.bin.ihex336
-rw-r--r--firmware/advansys/38C1600.bin.ihex398
-rw-r--r--firmware/advansys/mcode.bin.ihex147
-rw-r--r--firmware/bnx2/bnx2-mips-06-4.6.16.fw.ihex5805
-rw-r--r--firmware/bnx2/bnx2-mips-09-4.6.17.fw.ihex5816
-rw-r--r--firmware/bnx2/bnx2-rv2p-06-4.6.16.fw.ihex441
-rw-r--r--firmware/bnx2/bnx2-rv2p-09-4.6.15.fw.ihex490
-rw-r--r--firmware/myricom/lanai.bin.ihex4771
-rw-r--r--firmware/qlogic/1040.bin.ihex2111
-rw-r--r--firmware/qlogic/12160.bin.ihex1771
-rw-r--r--firmware/qlogic/1280.bin.ihex2008
-rw-r--r--firmware/qlogic/isp1000.bin.ihex1158
-rw-r--r--fs/Kconfig27
-rw-r--r--fs/Makefile1
-rw-r--r--fs/befs/debug.c1
-rw-r--r--fs/buffer.c22
-rw-r--r--fs/direct-io.c2
-rw-r--r--fs/ext3/Kconfig19
-rw-r--r--fs/ext3/super.c8
-rw-r--r--fs/jbd/commit.c7
-rw-r--r--fs/jbd2/commit.c13
-rw-r--r--fs/jffs2/acl.c4
-rw-r--r--fs/jffs2/malloc.c6
-rw-r--r--fs/libfs.c16
-rw-r--r--fs/lockd/svclock.c13
-rw-r--r--fs/nfs/super.c2
-rw-r--r--fs/nfsd/Kconfig1
-rw-r--r--fs/nfsd/nfs3proc.c10
-rw-r--r--fs/nfsd/nfs4callback.c47
-rw-r--r--fs/nfsd/nfs4proc.c246
-rw-r--r--fs/nfsd/nfs4recover.c74
-rw-r--r--fs/nfsd/nfs4state.c1196
-rw-r--r--fs/nfsd/nfs4xdr.c633
-rw-r--r--fs/nfsd/nfsctl.c38
-rw-r--r--fs/nfsd/nfsproc.c3
-rw-r--r--fs/nfsd/nfssvc.c88
-rw-r--r--fs/nfsd/vfs.c37
-rw-r--r--fs/nilfs2/Makefile5
-rw-r--r--fs/nilfs2/alloc.c504
-rw-r--r--fs/nilfs2/alloc.h72
-rw-r--r--fs/nilfs2/bmap.c783
-rw-r--r--fs/nilfs2/bmap.h244
-rw-r--r--fs/nilfs2/bmap_union.h42
-rw-r--r--fs/nilfs2/btnode.c316
-rw-r--r--fs/nilfs2/btnode.h58
-rw-r--r--fs/nilfs2/btree.c2269
-rw-r--r--fs/nilfs2/btree.h117
-rw-r--r--fs/nilfs2/cpfile.c925
-rw-r--r--fs/nilfs2/cpfile.h45
-rw-r--r--fs/nilfs2/dat.c430
-rw-r--r--fs/nilfs2/dat.h52
-rw-r--r--fs/nilfs2/dir.c711
-rw-r--r--fs/nilfs2/direct.c436
-rw-r--r--fs/nilfs2/direct.h78
-rw-r--r--fs/nilfs2/file.c160
-rw-r--r--fs/nilfs2/gcdat.c84
-rw-r--r--fs/nilfs2/gcinode.c288
-rw-r--r--fs/nilfs2/ifile.c150
-rw-r--r--fs/nilfs2/ifile.h53
-rw-r--r--fs/nilfs2/inode.c785
-rw-r--r--fs/nilfs2/ioctl.c654
-rw-r--r--fs/nilfs2/mdt.c563
-rw-r--r--fs/nilfs2/mdt.h125
-rw-r--r--fs/nilfs2/namei.c474
-rw-r--r--fs/nilfs2/nilfs.h318
-rw-r--r--fs/nilfs2/page.c540
-rw-r--r--fs/nilfs2/page.h76
-rw-r--r--fs/nilfs2/recovery.c929
-rw-r--r--fs/nilfs2/sb.h102
-rw-r--r--fs/nilfs2/segbuf.c439
-rw-r--r--fs/nilfs2/segbuf.h201
-rw-r--r--fs/nilfs2/seglist.h85
-rw-r--r--fs/nilfs2/segment.c2977
-rw-r--r--fs/nilfs2/segment.h243
-rw-r--r--fs/nilfs2/sufile.c640
-rw-r--r--fs/nilfs2/sufile.h54
-rw-r--r--fs/nilfs2/super.c1323
-rw-r--r--fs/nilfs2/the_nilfs.c637
-rw-r--r--fs/nilfs2/the_nilfs.h298
-rw-r--r--fs/ocfs2/file.c8
-rw-r--r--fs/proc/task_mmu.c4
-rw-r--r--fs/proc/task_nommu.c4
-rw-r--r--fs/ramfs/inode.c19
-rw-r--r--fs/romfs/Kconfig48
-rw-r--r--fs/romfs/Makefile9
-rw-r--r--fs/romfs/inode.c665
-rw-r--r--fs/romfs/internal.h47
-rw-r--r--fs/romfs/mmap-nommu.c75
-rw-r--r--fs/romfs/storage.c261
-rw-r--r--fs/romfs/super.c653
-rw-r--r--fs/splice.c25
-rw-r--r--fs/squashfs/export.c1
-rw-r--r--fs/super.c40
-rw-r--r--fs/ubifs/budget.c37
-rw-r--r--fs/ubifs/debug.c6
-rw-r--r--fs/ubifs/file.c16
-rw-r--r--fs/ubifs/find.c12
-rw-r--r--fs/ubifs/gc.c428
-rw-r--r--fs/ubifs/journal.c7
-rw-r--r--fs/ubifs/key.h6
-rw-r--r--fs/ubifs/log.c5
-rw-r--r--fs/ubifs/lpt_commit.c34
-rw-r--r--fs/ubifs/recovery.c70
-rw-r--r--fs/ubifs/replay.c2
-rw-r--r--fs/ubifs/sb.c36
-rw-r--r--fs/ubifs/shrinker.c6
-rw-r--r--fs/ubifs/super.c37
-rw-r--r--fs/ubifs/tnc.c2
-rw-r--r--fs/ubifs/ubifs-media.h30
-rw-r--r--fs/ubifs/ubifs.h13
-rw-r--r--include/acpi/acpixf.h2
-rw-r--r--include/linux/ata.h41
-rw-r--r--include/linux/backing-dev.h12
-rw-r--r--include/linux/bio.h19
-rw-r--r--include/linux/blkdev.h57
-rw-r--r--include/linux/compiler.h4
-rw-r--r--include/linux/dma-mapping.h2
-rw-r--r--include/linux/dmar.h11
-rw-r--r--include/linux/elevator.h1
-rw-r--r--include/linux/fdtable.h4
-rw-r--r--include/linux/fs.h46
-rw-r--r--include/linux/fsl_devices.h22
-rw-r--r--include/linux/hrtimer.h5
-rw-r--r--include/linux/i2c-algo-sgi.h26
-rw-r--r--include/linux/i2c-id.h38
-rw-r--r--include/linux/i2c.h4
-rw-r--r--include/linux/i2c/s6000.h10
-rw-r--r--include/linux/intel-iommu.h13
-rw-r--r--include/linux/interrupt.h1
-rw-r--r--include/linux/ipc_namespace.h65
-rw-r--r--include/linux/key.h1
-rw-r--r--include/linux/kprobes.h52
-rw-r--r--include/linux/leds-bd2802.h26
-rw-r--r--include/linux/leds.h4
-rw-r--r--include/linux/leds_pwm.h21
-rw-r--r--include/linux/lockd/xdr.h12
-rw-r--r--include/linux/lockd/xdr4.h10
-rw-r--r--include/linux/mg_disk.h206
-rw-r--r--include/linux/mtd/mtd.h21
-rw-r--r--include/linux/mtd/nand.h4
-rw-r--r--include/linux/mtd/partitions.h12
-rw-r--r--include/linux/nfs.h1
-rw-r--r--include/linux/nfs4.h138
-rw-r--r--include/linux/nfsd/cache.h8
-rw-r--r--include/linux/nfsd/nfsd.h225
-rw-r--r--include/linux/nfsd/nfsfh.h7
-rw-r--r--include/linux/nfsd/state.h84
-rw-r--r--include/linux/nfsd/stats.h9
-rw-r--r--include/linux/nfsd/xdr4.h129
-rw-r--r--include/linux/nilfs2_fs.h801
-rw-r--r--include/linux/parport_pc.h11
-rw-r--r--include/linux/pci_ids.h26
-rw-r--r--include/linux/rcuclassic.h16
-rw-r--r--include/linux/rcupdate.h1
-rw-r--r--include/linux/rcupreempt.h53
-rw-r--r--include/linux/rcutree.h27
-rw-r--r--include/linux/security.h24
-rw-r--r--include/linux/serial_core.h5
-rw-r--r--include/linux/slab_def.h10
-rw-r--r--include/linux/slub_def.h12
-rw-r--r--include/linux/spi/spi.h6
-rw-r--r--include/linux/sunrpc/svc.h16
-rw-r--r--include/linux/sunrpc/xdr.h42
-rw-r--r--include/linux/tty_driver.h3
-rw-r--r--include/linux/videodev2.h5
-rw-r--r--include/linux/writeback.h2
-rw-r--r--include/media/msp3400.h4
-rw-r--r--include/media/ov772x.h35
-rw-r--r--include/media/saa7146.h2
-rw-r--r--include/media/tvaudio.h19
-rw-r--r--include/media/v4l2-common.h141
-rw-r--r--include/media/v4l2-i2c-drv-legacy.h152
-rw-r--r--include/media/v4l2-i2c-drv.h6
-rw-r--r--include/media/v4l2-subdev.h115
-rw-r--r--include/scsi/fc/fc_fip.h237
-rw-r--r--include/scsi/fc_transport_fcoe.h54
-rw-r--r--include/scsi/libfc.h45
-rw-r--r--include/scsi/libfcoe.h227
-rw-r--r--include/trace/kmemtrace.h92
-rw-r--r--include/video/tdfx.h26
-rw-r--r--init/Kconfig14
-rw-r--r--ipc/Makefile1
-rw-r--r--ipc/mq_sysctl.c116
-rw-r--r--ipc/mqueue.c256
-rw-r--r--ipc/msgutil.c19
-rw-r--r--ipc/namespace.c39
-rw-r--r--ipc/util.c9
-rw-r--r--ipc/util.h18
-rw-r--r--kernel/exit.c3
-rw-r--r--kernel/hrtimer.c55
-rw-r--r--kernel/kprobes.c281
-rw-r--r--kernel/lockdep.c5
-rw-r--r--kernel/module.c3
-rw-r--r--kernel/rcuclassic.c23
-rw-r--r--kernel/rcupreempt.c48
-rw-r--r--kernel/rcutree.c20
-rw-r--r--kernel/rcutree.h10
-rw-r--r--kernel/rcutree_trace.c2
-rw-r--r--kernel/sched.c14
-rw-r--r--kernel/softirq.c2
-rw-r--r--kernel/sysctl.c27
-rw-r--r--kernel/trace/kmemtrace.c319
-rw-r--r--kernel/trace/trace.h6
-rw-r--r--lib/decompress_bunzip2.c1
-rw-r--r--lib/decompress_inflate.c1
-rw-r--r--lib/decompress_unlzma.c1
-rw-r--r--lib/swiotlb.c2
-rw-r--r--mm/allocpercpu.c2
-rw-r--r--mm/backing-dev.c10
-rw-r--r--mm/failslab.c1
-rw-r--r--mm/pdflush.c47
-rw-r--r--mm/slab.c26
-rw-r--r--mm/slob.c30
-rw-r--r--mm/slub.c32
-rw-r--r--mm/util.c16
-rw-r--r--net/802/fddi.c2
-rw-r--r--net/ipv6/xfrm6_output.c1
-rw-r--r--net/socket.c6
-rw-r--r--net/sunrpc/svc.c3
-rw-r--r--net/sunrpc/svc_xprt.c127
-rw-r--r--net/sunrpc/svcsock.c35
-rw-r--r--security/tomoyo/common.c7
-rw-r--r--security/tomoyo/common.h8
-rw-r--r--security/tomoyo/domain.c90
-rw-r--r--sound/arm/pxa2xx-ac97-lib.c15
-rw-r--r--sound/atmel/abdac.c4
-rw-r--r--sound/atmel/ac97c.c128
-rw-r--r--sound/atmel/ac97c.h14
-rw-r--r--sound/core/oss/mixer_oss.c8
-rw-r--r--sound/isa/opl3sa2.c1
-rw-r--r--sound/pci/ad1889.c4
-rw-r--r--sound/pci/ali5451/ali5451.c4
-rw-r--r--sound/pci/als300.c4
-rw-r--r--sound/pci/als4000.c4
-rw-r--r--sound/pci/au88x0/au88x0.c4
-rw-r--r--sound/pci/aw2/aw2-alsa.c4
-rw-r--r--sound/pci/azt3328.c4
-rw-r--r--sound/pci/ca0106/ca0106_main.c4
-rw-r--r--sound/pci/cs5535audio/cs5535audio.c4
-rw-r--r--sound/pci/emu10k1/emu10k1x.c4
-rw-r--r--sound/pci/es1938.c4
-rw-r--r--sound/pci/es1968.c4
-rw-r--r--sound/pci/hda/patch_analog.c2
-rw-r--r--sound/pci/hda/patch_realtek.c5
-rw-r--r--sound/pci/hda/patch_sigmatel.c20
-rw-r--r--sound/pci/ice1712/ice1712.c4
-rw-r--r--sound/pci/maestro3.c4
-rw-r--r--sound/pci/mixart/mixart.c2
-rw-r--r--sound/pci/pcxhr/pcxhr.c2
-rw-r--r--sound/pci/sis7019.c2
-rw-r--r--sound/pci/sonicvibes.c4
-rw-r--r--sound/pci/trident/trident_main.c4
-rw-r--r--sound/ppc/powermac.c2
-rw-r--r--sound/soc/blackfin/bf5xx-ac97-pcm.c4
-rw-r--r--sound/soc/blackfin/bf5xx-i2s-pcm.c4
-rw-r--r--sound/soc/codecs/ak4535.c3
-rw-r--r--sound/soc/codecs/twl4030.c61
-rw-r--r--sound/soc/codecs/twl4030.h1
-rw-r--r--sound/soc/codecs/wm9705.c37
-rw-r--r--sound/soc/fsl/fsl_dma.c29
-rw-r--r--sound/soc/fsl/fsl_ssi.c99
-rw-r--r--sound/soc/omap/omap-mcbsp.c11
-rw-r--r--sound/soc/omap/omap-pcm.c2
-rw-r--r--sound/soc/pxa/Kconfig10
-rw-r--r--sound/soc/pxa/Makefile2
-rw-r--r--sound/soc/pxa/magician.c560
-rw-r--r--sound/soc/pxa/pxa-ssp.c12
-rw-r--r--sound/soc/pxa/pxa2xx-pcm.c4
-rw-r--r--sound/soc/s3c24xx/s3c24xx-pcm.c2
-rw-r--r--sound/soc/soc-core.c20
-rw-r--r--sound/usb/usbaudio.c255
957 files changed, 91696 insertions, 35884 deletions
diff --git a/Documentation/DMA-mapping.txt b/Documentation/DMA-mapping.txt
index b2a4d6d244d9..01f24e94bdb6 100644
--- a/Documentation/DMA-mapping.txt
+++ b/Documentation/DMA-mapping.txt
@@ -136,7 +136,7 @@ exactly why.
136The standard 32-bit addressing PCI device would do something like 136The standard 32-bit addressing PCI device would do something like
137this: 137this:
138 138
139 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 139 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
140 printk(KERN_WARNING 140 printk(KERN_WARNING
141 "mydev: No suitable DMA available.\n"); 141 "mydev: No suitable DMA available.\n");
142 goto ignore_this_device; 142 goto ignore_this_device;
@@ -155,9 +155,9 @@ all 64-bits when accessing streaming DMA:
155 155
156 int using_dac; 156 int using_dac;
157 157
158 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 158 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
159 using_dac = 1; 159 using_dac = 1;
160 } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 160 } else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
161 using_dac = 0; 161 using_dac = 0;
162 } else { 162 } else {
163 printk(KERN_WARNING 163 printk(KERN_WARNING
@@ -170,14 +170,14 @@ the case would look like this:
170 170
171 int using_dac, consistent_using_dac; 171 int using_dac, consistent_using_dac;
172 172
173 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 173 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
174 using_dac = 1; 174 using_dac = 1;
175 consistent_using_dac = 1; 175 consistent_using_dac = 1;
176 pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 176 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
177 } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 177 } else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
178 using_dac = 0; 178 using_dac = 0;
179 consistent_using_dac = 0; 179 consistent_using_dac = 0;
180 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 180 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
181 } else { 181 } else {
182 printk(KERN_WARNING 182 printk(KERN_WARNING
183 "mydev: No suitable DMA available.\n"); 183 "mydev: No suitable DMA available.\n");
@@ -192,7 +192,7 @@ check the return value from pci_set_consistent_dma_mask().
192Finally, if your device can only drive the low 24-bits of 192Finally, if your device can only drive the low 24-bits of
193address during PCI bus mastering you might do something like: 193address during PCI bus mastering you might do something like:
194 194
195 if (pci_set_dma_mask(pdev, DMA_24BIT_MASK)) { 195 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(24))) {
196 printk(KERN_WARNING 196 printk(KERN_WARNING
197 "mydev: 24-bit DMA addressing not available.\n"); 197 "mydev: 24-bit DMA addressing not available.\n");
198 goto ignore_this_device; 198 goto ignore_this_device;
@@ -213,7 +213,7 @@ most specific mask.
213 213
214Here is pseudo-code showing how this might be done: 214Here is pseudo-code showing how this might be done:
215 215
216 #define PLAYBACK_ADDRESS_BITS DMA_32BIT_MASK 216 #define PLAYBACK_ADDRESS_BITS DMA_BIT_MASK(32)
217 #define RECORD_ADDRESS_BITS 0x00ffffff 217 #define RECORD_ADDRESS_BITS 0x00ffffff
218 218
219 struct my_sound_card *card; 219 struct my_sound_card *card;
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl
index 58c194572c76..d6ac5d61820e 100644
--- a/Documentation/DocBook/kernel-api.tmpl
+++ b/Documentation/DocBook/kernel-api.tmpl
@@ -259,7 +259,7 @@ X!Earch/x86/kernel/mca_32.c
259!Eblock/blk-tag.c 259!Eblock/blk-tag.c
260!Iblock/blk-tag.c 260!Iblock/blk-tag.c
261!Eblock/blk-integrity.c 261!Eblock/blk-integrity.c
262!Iblock/blktrace.c 262!Ikernel/trace/blktrace.c
263!Iblock/genhd.c 263!Iblock/genhd.c
264!Eblock/genhd.c 264!Eblock/genhd.c
265 </chapter> 265 </chapter>
diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl
index 46b08fef3744..7a2e0e98986a 100644
--- a/Documentation/DocBook/writing-an-alsa-driver.tmpl
+++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl
@@ -1137,8 +1137,8 @@
1137 if (err < 0) 1137 if (err < 0)
1138 return err; 1138 return err;
1139 /* check PCI availability (28bit DMA) */ 1139 /* check PCI availability (28bit DMA) */
1140 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 1140 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
1141 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 1141 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
1142 printk(KERN_ERR "error to set 28bit mask DMA\n"); 1142 printk(KERN_ERR "error to set 28bit mask DMA\n");
1143 pci_disable_device(pci); 1143 pci_disable_device(pci);
1144 return -ENXIO; 1144 return -ENXIO;
@@ -1252,8 +1252,8 @@
1252 err = pci_enable_device(pci); 1252 err = pci_enable_device(pci);
1253 if (err < 0) 1253 if (err < 0)
1254 return err; 1254 return err;
1255 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 1255 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
1256 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 1256 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
1257 printk(KERN_ERR "error to set 28bit mask DMA\n"); 1257 printk(KERN_ERR "error to set 28bit mask DMA\n");
1258 pci_disable_device(pci); 1258 pci_disable_device(pci);
1259 return -ENXIO; 1259 return -ENXIO;
diff --git a/Documentation/blockdev/00-INDEX b/Documentation/blockdev/00-INDEX
index 86f054c47013..c08df56dd91b 100644
--- a/Documentation/blockdev/00-INDEX
+++ b/Documentation/blockdev/00-INDEX
@@ -8,6 +8,8 @@ cpqarray.txt
8 - info on using Compaq's SMART2 Intelligent Disk Array Controllers. 8 - info on using Compaq's SMART2 Intelligent Disk Array Controllers.
9floppy.txt 9floppy.txt
10 - notes and driver options for the floppy disk driver. 10 - notes and driver options for the floppy disk driver.
11mflash.txt
12 - info on mGine m(g)flash driver for linux.
11nbd.txt 13nbd.txt
12 - info on a TCP implementation of a network block device. 14 - info on a TCP implementation of a network block device.
13paride.txt 15paride.txt
diff --git a/Documentation/blockdev/mflash.txt b/Documentation/blockdev/mflash.txt
new file mode 100644
index 000000000000..1f610ecf698a
--- /dev/null
+++ b/Documentation/blockdev/mflash.txt
@@ -0,0 +1,84 @@
1This document describes m[g]flash support in linux.
2
3Contents
4 1. Overview
5 2. Reserved area configuration
6 3. Example of mflash platform driver registration
7
81. Overview
9
10Mflash and gflash are embedded flash drive. The only difference is mflash is
11MCP(Multi Chip Package) device. These two device operate exactly same way.
12So the rest mflash repersents mflash and gflash altogether.
13
14Internally, mflash has nand flash and other hardware logics and supports
152 different operation (ATA, IO) modes. ATA mode doesn't need any new
16driver and currently works well under standard IDE subsystem. Actually it's
17one chip SSD. IO mode is ATA-like custom mode for the host that doesn't have
18IDE interface.
19
20Followings are brief descriptions about IO mode.
21A. IO mode based on ATA protocol and uses some custom command. (read confirm,
22write confirm)
23B. IO mode uses SRAM bus interface.
24C. IO mode supports 4kB boot area, so host can boot from mflash.
25
262. Reserved area configuration
27If host boot from mflash, usually needs raw area for boot loader image. All of
28the mflash's block device operation will be taken this value as start offset.
29Note that boot loader's size of reserved area and kernel configuration value
30must be same.
31
323. Example of mflash platform driver registration
33Working mflash is very straight forward. Adding platform device stuff to board
34configuration file is all. Here is some pseudo example.
35
36static struct mg_drv_data mflash_drv_data = {
37 /* If you want to polling driver set to 1 */
38 .use_polling = 0,
39 /* device attribution */
40 .dev_attr = MG_BOOT_DEV
41};
42
43static struct resource mg_mflash_rsc[] = {
44 /* Base address of mflash */
45 [0] = {
46 .start = 0x08000000,
47 .end = 0x08000000 + SZ_64K - 1,
48 .flags = IORESOURCE_MEM
49 },
50 /* mflash interrupt pin */
51 [1] = {
52 .start = IRQ_GPIO(84),
53 .end = IRQ_GPIO(84),
54 .flags = IORESOURCE_IRQ
55 },
56 /* mflash reset pin */
57 [2] = {
58 .start = 43,
59 .end = 43,
60 .name = MG_RST_PIN,
61 .flags = IORESOURCE_IO
62 },
63 /* mflash reset-out pin
64 * If you use mflash as storage device (i.e. other than MG_BOOT_DEV),
65 * should assign this */
66 [3] = {
67 .start = 51,
68 .end = 51,
69 .name = MG_RSTOUT_PIN,
70 .flags = IORESOURCE_IO
71 }
72};
73
74static struct platform_device mflash_dev = {
75 .name = MG_DEV_NAME,
76 .id = -1,
77 .dev = {
78 .platform_data = &mflash_drv_data,
79 },
80 .num_resources = ARRAY_SIZE(mg_mflash_rsc),
81 .resource = mg_mflash_rsc
82};
83
84platform_device_register(&mflash_dev);
diff --git a/Documentation/devices.txt b/Documentation/devices.txt
index 327de1624759..53d64d382343 100644
--- a/Documentation/devices.txt
+++ b/Documentation/devices.txt
@@ -3,7 +3,7 @@
3 3
4 Maintained by Alan Cox <device@lanana.org> 4 Maintained by Alan Cox <device@lanana.org>
5 5
6 Last revised: 29 November 2006 6 Last revised: 6th April 2009
7 7
8This list is the Linux Device List, the official registry of allocated 8This list is the Linux Device List, the official registry of allocated
9device numbers and /dev directory nodes for the Linux operating 9device numbers and /dev directory nodes for the Linux operating
@@ -2797,6 +2797,10 @@ Your cooperation is appreciated.
2797 206 = /dev/ttySC1 SC26xx serial port 1 2797 206 = /dev/ttySC1 SC26xx serial port 1
2798 207 = /dev/ttySC2 SC26xx serial port 2 2798 207 = /dev/ttySC2 SC26xx serial port 2
2799 208 = /dev/ttySC3 SC26xx serial port 3 2799 208 = /dev/ttySC3 SC26xx serial port 3
2800 209 = /dev/ttyMAX0 MAX3100 serial port 0
2801 210 = /dev/ttyMAX1 MAX3100 serial port 1
2802 211 = /dev/ttyMAX2 MAX3100 serial port 2
2803 212 = /dev/ttyMAX3 MAX3100 serial port 3
2800 2804
2801205 char Low-density serial ports (alternate device) 2805205 char Low-density serial ports (alternate device)
2802 0 = /dev/culu0 Callout device for ttyLU0 2806 0 = /dev/culu0 Callout device for ttyLU0
diff --git a/Documentation/fb/uvesafb.txt b/Documentation/fb/uvesafb.txt
index 7ac3c4078ff9..eefdd91d298a 100644
--- a/Documentation/fb/uvesafb.txt
+++ b/Documentation/fb/uvesafb.txt
@@ -59,7 +59,8 @@ Accepted options:
59ypan Enable display panning using the VESA protected mode 59ypan Enable display panning using the VESA protected mode
60 interface. The visible screen is just a window of the 60 interface. The visible screen is just a window of the
61 video memory, console scrolling is done by changing the 61 video memory, console scrolling is done by changing the
62 start of the window. Available on x86 only. 62 start of the window. This option is available on x86
63 only and is the default option on that architecture.
63 64
64ywrap Same as ypan, but assumes your gfx board can wrap-around 65ywrap Same as ypan, but assumes your gfx board can wrap-around
65 the video memory (i.e. starts reading from top if it 66 the video memory (i.e. starts reading from top if it
@@ -67,7 +68,7 @@ ywrap Same as ypan, but assumes your gfx board can wrap-around
67 Available on x86 only. 68 Available on x86 only.
68 69
69redraw Scroll by redrawing the affected part of the screen, this 70redraw Scroll by redrawing the affected part of the screen, this
70 is the safe (and slow) default. 71 is the default on non-x86.
71 72
72(If you're using uvesafb as a module, the above three options are 73(If you're using uvesafb as a module, the above three options are
73 used a parameter of the scroll option, e.g. scroll=ypan.) 74 used a parameter of the scroll option, e.g. scroll=ypan.)
@@ -182,7 +183,7 @@ from the Video BIOS if you set pixclock to 0 in fb_var_screeninfo.
182 183
183-- 184--
184 Michal Januszewski <spock@gentoo.org> 185 Michal Januszewski <spock@gentoo.org>
185 Last updated: 2007-06-16 186 Last updated: 2009-03-30
186 187
187 Documentation of the uvesafb options is loosely based on vesafb.txt. 188 Documentation of the uvesafb options is loosely based on vesafb.txt.
188 189
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt
index 39246fc11257..7e2af10e8264 100644
--- a/Documentation/feature-removal-schedule.txt
+++ b/Documentation/feature-removal-schedule.txt
@@ -354,7 +354,8 @@ Who: Krzysztof Piotr Oledzki <ole@ans.pl>
354 354
355--------------------------- 355---------------------------
356 356
357What: i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client() 357What: i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client(),
358 i2c_adapter->client_register(), i2c_adapter->client_unregister
358When: 2.6.30 359When: 2.6.30
359Check: i2c_attach_client i2c_detach_client 360Check: i2c_attach_client i2c_detach_client
360Why: Deprecated by the new (standard) device driver binding model. Use 361Why: Deprecated by the new (standard) device driver binding model. Use
diff --git a/Documentation/filesystems/00-INDEX b/Documentation/filesystems/00-INDEX
index 52cd611277a3..8dd6db76171d 100644
--- a/Documentation/filesystems/00-INDEX
+++ b/Documentation/filesystems/00-INDEX
@@ -68,6 +68,8 @@ ncpfs.txt
68 - info on Novell Netware(tm) filesystem using NCP protocol. 68 - info on Novell Netware(tm) filesystem using NCP protocol.
69nfsroot.txt 69nfsroot.txt
70 - short guide on setting up a diskless box with NFS root filesystem. 70 - short guide on setting up a diskless box with NFS root filesystem.
71nilfs2.txt
72 - info and mount options for the NILFS2 filesystem.
71ntfs.txt 73ntfs.txt
72 - info and mount options for the NTFS filesystem (Windows NT). 74 - info and mount options for the NTFS filesystem (Windows NT).
73ocfs2.txt 75ocfs2.txt
diff --git a/Documentation/filesystems/knfsd-stats.txt b/Documentation/filesystems/knfsd-stats.txt
new file mode 100644
index 000000000000..64ced5149d37
--- /dev/null
+++ b/Documentation/filesystems/knfsd-stats.txt
@@ -0,0 +1,159 @@
1
2Kernel NFS Server Statistics
3============================
4
5This document describes the format and semantics of the statistics
6which the kernel NFS server makes available to userspace. These
7statistics are available in several text form pseudo files, each of
8which is described separately below.
9
10In most cases you don't need to know these formats, as the nfsstat(8)
11program from the nfs-utils distribution provides a helpful command-line
12interface for extracting and printing them.
13
14All the files described here are formatted as a sequence of text lines,
15separated by newline '\n' characters. Lines beginning with a hash
16'#' character are comments intended for humans and should be ignored
17by parsing routines. All other lines contain a sequence of fields
18separated by whitespace.
19
20/proc/fs/nfsd/pool_stats
21------------------------
22
23This file is available in kernels from 2.6.30 onwards, if the
24/proc/fs/nfsd filesystem is mounted (it almost always should be).
25
26The first line is a comment which describes the fields present in
27all the other lines. The other lines present the following data as
28a sequence of unsigned decimal numeric fields. One line is shown
29for each NFS thread pool.
30
31All counters are 64 bits wide and wrap naturally. There is no way
32to zero these counters, instead applications should do their own
33rate conversion.
34
35pool
36 The id number of the NFS thread pool to which this line applies.
37 This number does not change.
38
39 Thread pool ids are a contiguous set of small integers starting
40 at zero. The maximum value depends on the thread pool mode, but
41 currently cannot be larger than the number of CPUs in the system.
42 Note that in the default case there will be a single thread pool
43 which contains all the nfsd threads and all the CPUs in the system,
44 and thus this file will have a single line with a pool id of "0".
45
46packets-arrived
47 Counts how many NFS packets have arrived. More precisely, this
48 is the number of times that the network stack has notified the
49 sunrpc server layer that new data may be available on a transport
50 (e.g. an NFS or UDP socket or an NFS/RDMA endpoint).
51
52 Depending on the NFS workload patterns and various network stack
53 effects (such as Large Receive Offload) which can combine packets
54 on the wire, this may be either more or less than the number
55 of NFS calls received (which statistic is available elsewhere).
56 However this is a more accurate and less workload-dependent measure
57 of how much CPU load is being placed on the sunrpc server layer
58 due to NFS network traffic.
59
60sockets-enqueued
61 Counts how many times an NFS transport is enqueued to wait for
62 an nfsd thread to service it, i.e. no nfsd thread was considered
63 available.
64
65 The circumstance this statistic tracks indicates that there was NFS
66 network-facing work to be done but it couldn't be done immediately,
67 thus introducing a small delay in servicing NFS calls. The ideal
68 rate of change for this counter is zero; significantly non-zero
69 values may indicate a performance limitation.
70
71 This can happen either because there are too few nfsd threads in the
72 thread pool for the NFS workload (the workload is thread-limited),
73 or because the NFS workload needs more CPU time than is available in
74 the thread pool (the workload is CPU-limited). In the former case,
75 configuring more nfsd threads will probably improve the performance
76 of the NFS workload. In the latter case, the sunrpc server layer is
77 already choosing not to wake idle nfsd threads because there are too
78 many nfsd threads which want to run but cannot, so configuring more
79 nfsd threads will make no difference whatsoever. The overloads-avoided
80 statistic (see below) can be used to distinguish these cases.
81
82threads-woken
83 Counts how many times an idle nfsd thread is woken to try to
84 receive some data from an NFS transport.
85
86 This statistic tracks the circumstance where incoming
87 network-facing NFS work is being handled quickly, which is a good
88 thing. The ideal rate of change for this counter will be close
89 to but less than the rate of change of the packets-arrived counter.
90
91overloads-avoided
92 Counts how many times the sunrpc server layer chose not to wake an
93 nfsd thread, despite the presence of idle nfsd threads, because
94 too many nfsd threads had been recently woken but could not get
95 enough CPU time to actually run.
96
97 This statistic counts a circumstance where the sunrpc layer
98 heuristically avoids overloading the CPU scheduler with too many
99 runnable nfsd threads. The ideal rate of change for this counter
100 is zero. Significant non-zero values indicate that the workload
101 is CPU limited. Usually this is associated with heavy CPU usage
102 on all the CPUs in the nfsd thread pool.
103
104 If a sustained large overloads-avoided rate is detected on a pool,
105 the top(1) utility should be used to check for the following
106 pattern of CPU usage on all the CPUs associated with the given
107 nfsd thread pool.
108
109 - %us ~= 0 (as you're *NOT* running applications on your NFS server)
110
111 - %wa ~= 0
112
113 - %id ~= 0
114
115 - %sy + %hi + %si ~= 100
116
117 If this pattern is seen, configuring more nfsd threads will *not*
118 improve the performance of the workload. If this patten is not
119 seen, then something more subtle is wrong.
120
121threads-timedout
122 Counts how many times an nfsd thread triggered an idle timeout,
123 i.e. was not woken to handle any incoming network packets for
124 some time.
125
126 This statistic counts a circumstance where there are more nfsd
127 threads configured than can be used by the NFS workload. This is
128 a clue that the number of nfsd threads can be reduced without
129 affecting performance. Unfortunately, it's only a clue and not
130 a strong indication, for a couple of reasons:
131
132 - Currently the rate at which the counter is incremented is quite
133 slow; the idle timeout is 60 minutes. Unless the NFS workload
134 remains constant for hours at a time, this counter is unlikely
135 to be providing information that is still useful.
136
137 - It is usually a wise policy to provide some slack,
138 i.e. configure a few more nfsds than are currently needed,
139 to allow for future spikes in load.
140
141
142Note that incoming packets on NFS transports will be dealt with in
143one of three ways. An nfsd thread can be woken (threads-woken counts
144this case), or the transport can be enqueued for later attention
145(sockets-enqueued counts this case), or the packet can be temporarily
146deferred because the transport is currently being used by an nfsd
147thread. This last case is not very interesting and is not explicitly
148counted, but can be inferred from the other counters thus:
149
150packets-deferred = packets-arrived - ( sockets-enqueued + threads-woken )
151
152
153More
154----
155Descriptions of the other statistics file should go here.
156
157
158Greg Banks <gnb@sgi.com>
15926 Mar 2009
diff --git a/Documentation/filesystems/nfs41-server.txt b/Documentation/filesystems/nfs41-server.txt
new file mode 100644
index 000000000000..05d81cbcb2e1
--- /dev/null
+++ b/Documentation/filesystems/nfs41-server.txt
@@ -0,0 +1,161 @@
1NFSv4.1 Server Implementation
2
3Server support for minorversion 1 can be controlled using the
4/proc/fs/nfsd/versions control file. The string output returned
5by reading this file will contain either "+4.1" or "-4.1"
6correspondingly.
7
8Currently, server support for minorversion 1 is disabled by default.
9It can be enabled at run time by writing the string "+4.1" to
10the /proc/fs/nfsd/versions control file. Note that to write this
11control file, the nfsd service must be taken down. Use your user-mode
12nfs-utils to set this up; see rpc.nfsd(8)
13
14The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based
15on the latest NFSv4.1 Internet Draft:
16http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-29
17
18From the many new features in NFSv4.1 the current implementation
19focuses on the mandatory-to-implement NFSv4.1 Sessions, providing
20"exactly once" semantics and better control and throttling of the
21resources allocated for each client.
22
23Other NFSv4.1 features, Parallel NFS operations in particular,
24are still under development out of tree.
25See http://wiki.linux-nfs.org/wiki/index.php/PNFS_prototype_design
26for more information.
27
28The table below, taken from the NFSv4.1 document, lists
29the operations that are mandatory to implement (REQ), optional
30(OPT), and NFSv4.0 operations that are required not to implement (MNI)
31in minor version 1. The first column indicates the operations that
32are not supported yet by the linux server implementation.
33
34The OPTIONAL features identified and their abbreviations are as follows:
35 pNFS Parallel NFS
36 FDELG File Delegations
37 DDELG Directory Delegations
38
39The following abbreviations indicate the linux server implementation status.
40 I Implemented NFSv4.1 operations.
41 NS Not Supported.
42 NS* unimplemented optional feature.
43 P pNFS features implemented out of tree.
44 PNS pNFS features that are not supported yet (out of tree).
45
46Operations
47
48 +----------------------+------------+--------------+----------------+
49 | Operation | REQ, REC, | Feature | Definition |
50 | | OPT, or | (REQ, REC, | |
51 | | MNI | or OPT) | |
52 +----------------------+------------+--------------+----------------+
53 | ACCESS | REQ | | Section 18.1 |
54NS | BACKCHANNEL_CTL | REQ | | Section 18.33 |
55NS | BIND_CONN_TO_SESSION | REQ | | Section 18.34 |
56 | CLOSE | REQ | | Section 18.2 |
57 | COMMIT | REQ | | Section 18.3 |
58 | CREATE | REQ | | Section 18.4 |
59I | CREATE_SESSION | REQ | | Section 18.36 |
60NS*| DELEGPURGE | OPT | FDELG (REQ) | Section 18.5 |
61 | DELEGRETURN | OPT | FDELG, | Section 18.6 |
62 | | | DDELG, pNFS | |
63 | | | (REQ) | |
64NS | DESTROY_CLIENTID | REQ | | Section 18.50 |
65I | DESTROY_SESSION | REQ | | Section 18.37 |
66I | EXCHANGE_ID | REQ | | Section 18.35 |
67NS | FREE_STATEID | REQ | | Section 18.38 |
68 | GETATTR | REQ | | Section 18.7 |
69P | GETDEVICEINFO | OPT | pNFS (REQ) | Section 18.40 |
70P | GETDEVICELIST | OPT | pNFS (OPT) | Section 18.41 |
71 | GETFH | REQ | | Section 18.8 |
72NS*| GET_DIR_DELEGATION | OPT | DDELG (REQ) | Section 18.39 |
73P | LAYOUTCOMMIT | OPT | pNFS (REQ) | Section 18.42 |
74P | LAYOUTGET | OPT | pNFS (REQ) | Section 18.43 |
75P | LAYOUTRETURN | OPT | pNFS (REQ) | Section 18.44 |
76 | LINK | OPT | | Section 18.9 |
77 | LOCK | REQ | | Section 18.10 |
78 | LOCKT | REQ | | Section 18.11 |
79 | LOCKU | REQ | | Section 18.12 |
80 | LOOKUP | REQ | | Section 18.13 |
81 | LOOKUPP | REQ | | Section 18.14 |
82 | NVERIFY | REQ | | Section 18.15 |
83 | OPEN | REQ | | Section 18.16 |
84NS*| OPENATTR | OPT | | Section 18.17 |
85 | OPEN_CONFIRM | MNI | | N/A |
86 | OPEN_DOWNGRADE | REQ | | Section 18.18 |
87 | PUTFH | REQ | | Section 18.19 |
88 | PUTPUBFH | REQ | | Section 18.20 |
89 | PUTROOTFH | REQ | | Section 18.21 |
90 | READ | REQ | | Section 18.22 |
91 | READDIR | REQ | | Section 18.23 |
92 | READLINK | OPT | | Section 18.24 |
93NS | RECLAIM_COMPLETE | REQ | | Section 18.51 |
94 | RELEASE_LOCKOWNER | MNI | | N/A |
95 | REMOVE | REQ | | Section 18.25 |
96 | RENAME | REQ | | Section 18.26 |
97 | RENEW | MNI | | N/A |
98 | RESTOREFH | REQ | | Section 18.27 |
99 | SAVEFH | REQ | | Section 18.28 |
100 | SECINFO | REQ | | Section 18.29 |
101NS | SECINFO_NO_NAME | REC | pNFS files | Section 18.45, |
102 | | | layout (REQ) | Section 13.12 |
103I | SEQUENCE | REQ | | Section 18.46 |
104 | SETATTR | REQ | | Section 18.30 |
105 | SETCLIENTID | MNI | | N/A |
106 | SETCLIENTID_CONFIRM | MNI | | N/A |
107NS | SET_SSV | REQ | | Section 18.47 |
108NS | TEST_STATEID | REQ | | Section 18.48 |
109 | VERIFY | REQ | | Section 18.31 |
110NS*| WANT_DELEGATION | OPT | FDELG (OPT) | Section 18.49 |
111 | WRITE | REQ | | Section 18.32 |
112
113Callback Operations
114
115 +-------------------------+-----------+-------------+---------------+
116 | Operation | REQ, REC, | Feature | Definition |
117 | | OPT, or | (REQ, REC, | |
118 | | MNI | or OPT) | |
119 +-------------------------+-----------+-------------+---------------+
120 | CB_GETATTR | OPT | FDELG (REQ) | Section 20.1 |
121P | CB_LAYOUTRECALL | OPT | pNFS (REQ) | Section 20.3 |
122NS*| CB_NOTIFY | OPT | DDELG (REQ) | Section 20.4 |
123P | CB_NOTIFY_DEVICEID | OPT | pNFS (OPT) | Section 20.12 |
124NS*| CB_NOTIFY_LOCK | OPT | | Section 20.11 |
125NS*| CB_PUSH_DELEG | OPT | FDELG (OPT) | Section 20.5 |
126 | CB_RECALL | OPT | FDELG, | Section 20.2 |
127 | | | DDELG, pNFS | |
128 | | | (REQ) | |
129NS*| CB_RECALL_ANY | OPT | FDELG, | Section 20.6 |
130 | | | DDELG, pNFS | |
131 | | | (REQ) | |
132NS | CB_RECALL_SLOT | REQ | | Section 20.8 |
133NS*| CB_RECALLABLE_OBJ_AVAIL | OPT | DDELG, pNFS | Section 20.7 |
134 | | | (REQ) | |
135I | CB_SEQUENCE | OPT | FDELG, | Section 20.9 |
136 | | | DDELG, pNFS | |
137 | | | (REQ) | |
138NS*| CB_WANTS_CANCELLED | OPT | FDELG, | Section 20.10 |
139 | | | DDELG, pNFS | |
140 | | | (REQ) | |
141 +-------------------------+-----------+-------------+---------------+
142
143Implementation notes:
144
145EXCHANGE_ID:
146* only SP4_NONE state protection supported
147* implementation ids are ignored
148
149CREATE_SESSION:
150* backchannel attributes are ignored
151* backchannel security parameters are ignored
152
153SEQUENCE:
154* no support for dynamic slot table renegotiation (optional)
155
156nfsv4.1 COMPOUND rules:
157The following cases aren't supported yet:
158* Enforcing of NFS4ERR_NOT_ONLY_OP for: BIND_CONN_TO_SESSION, CREATE_SESSION,
159 DESTROY_CLIENTID, DESTROY_SESSION, EXCHANGE_ID.
160* DESTROY_SESSION MUST be the final operation in the COMPOUND request.
161
diff --git a/Documentation/filesystems/nilfs2.txt b/Documentation/filesystems/nilfs2.txt
new file mode 100644
index 000000000000..55c4300abfcb
--- /dev/null
+++ b/Documentation/filesystems/nilfs2.txt
@@ -0,0 +1,200 @@
1NILFS2
2------
3
4NILFS2 is a log-structured file system (LFS) supporting continuous
5snapshotting. In addition to versioning capability of the entire file
6system, users can even restore files mistakenly overwritten or
7destroyed just a few seconds ago. Since NILFS2 can keep consistency
8like conventional LFS, it achieves quick recovery after system
9crashes.
10
11NILFS2 creates a number of checkpoints every few seconds or per
12synchronous write basis (unless there is no change). Users can select
13significant versions among continuously created checkpoints, and can
14change them into snapshots which will be preserved until they are
15changed back to checkpoints.
16
17There is no limit on the number of snapshots until the volume gets
18full. Each snapshot is mountable as a read-only file system
19concurrently with its writable mount, and this feature is convenient
20for online backup.
21
22The userland tools are included in nilfs-utils package, which is
23available from the following download page. At least "mkfs.nilfs2",
24"mount.nilfs2", "umount.nilfs2", and "nilfs_cleanerd" (so called
25cleaner or garbage collector) are required. Details on the tools are
26described in the man pages included in the package.
27
28Project web page: http://www.nilfs.org/en/
29Download page: http://www.nilfs.org/en/download.html
30Git tree web page: http://www.nilfs.org/git/
31NILFS mailing lists: http://www.nilfs.org/mailman/listinfo/users
32
33Caveats
34=======
35
36Features which NILFS2 does not support yet:
37
38 - atime
39 - extended attributes
40 - POSIX ACLs
41 - quotas
42 - writable snapshots
43 - remote backup (CDP)
44 - data integrity
45 - defragmentation
46
47Mount options
48=============
49
50NILFS2 supports the following mount options:
51(*) == default
52
53barrier=on(*) This enables/disables barriers. barrier=off disables
54 it, barrier=on enables it.
55errors=continue(*) Keep going on a filesystem error.
56errors=remount-ro Remount the filesystem read-only on an error.
57errors=panic Panic and halt the machine if an error occurs.
58cp=n Specify the checkpoint-number of the snapshot to be
59 mounted. Checkpoints and snapshots are listed by lscp
60 user command. Only the checkpoints marked as snapshot
61 are mountable with this option. Snapshot is read-only,
62 so a read-only mount option must be specified together.
63order=relaxed(*) Apply relaxed order semantics that allows modified data
64 blocks to be written to disk without making a
65 checkpoint if no metadata update is going. This mode
66 is equivalent to the ordered data mode of the ext3
67 filesystem except for the updates on data blocks still
68 conserve atomicity. This will improve synchronous
69 write performance for overwriting.
70order=strict Apply strict in-order semantics that preserves sequence
71 of all file operations including overwriting of data
72 blocks. That means, it is guaranteed that no
73 overtaking of events occurs in the recovered file
74 system after a crash.
75
76NILFS2 usage
77============
78
79To use nilfs2 as a local file system, simply:
80
81 # mkfs -t nilfs2 /dev/block_device
82 # mount -t nilfs2 /dev/block_device /dir
83
84This will also invoke the cleaner through the mount helper program
85(mount.nilfs2).
86
87Checkpoints and snapshots are managed by the following commands.
88Their manpages are included in the nilfs-utils package above.
89
90 lscp list checkpoints or snapshots.
91 mkcp make a checkpoint or a snapshot.
92 chcp change an existing checkpoint to a snapshot or vice versa.
93 rmcp invalidate specified checkpoint(s).
94
95To mount a snapshot,
96
97 # mount -t nilfs2 -r -o cp=<cno> /dev/block_device /snap_dir
98
99where <cno> is the checkpoint number of the snapshot.
100
101To unmount the NILFS2 mount point or snapshot, simply:
102
103 # umount /dir
104
105Then, the cleaner daemon is automatically shut down by the umount
106helper program (umount.nilfs2).
107
108Disk format
109===========
110
111A nilfs2 volume is equally divided into a number of segments except
112for the super block (SB) and segment #0. A segment is the container
113of logs. Each log is composed of summary information blocks, payload
114blocks, and an optional super root block (SR):
115
116 ______________________________________________________
117 | |SB| | Segment | Segment | Segment | ... | Segment | |
118 |_|__|_|____0____|____1____|____2____|_____|____N____|_|
119 0 +1K +4K +8M +16M +24M +(8MB x N)
120 . . (Typical offsets for 4KB-block)
121 . .
122 .______________________.
123 | log | log |... | log |
124 |__1__|__2__|____|__m__|
125 . .
126 . .
127 . .
128 .______________________________.
129 | Summary | Payload blocks |SR|
130 |_blocks__|_________________|__|
131
132The payload blocks are organized per file, and each file consists of
133data blocks and B-tree node blocks:
134
135 |<--- File-A --->|<--- File-B --->|
136 _______________________________________________________________
137 | Data blocks | B-tree blocks | Data blocks | B-tree blocks | ...
138 _|_____________|_______________|_____________|_______________|_
139
140
141Since only the modified blocks are written in the log, it may have
142files without data blocks or B-tree node blocks.
143
144The organization of the blocks is recorded in the summary information
145blocks, which contains a header structure (nilfs_segment_summary), per
146file structures (nilfs_finfo), and per block structures (nilfs_binfo):
147
148 _________________________________________________________________________
149 | Summary | finfo | binfo | ... | binfo | finfo | binfo | ... | binfo |...
150 |_blocks__|___A___|_(A,1)_|_____|(A,Na)_|___B___|_(B,1)_|_____|(B,Nb)_|___
151
152
153The logs include regular files, directory files, symbolic link files
154and several meta data files. The mata data files are the files used
155to maintain file system meta data. The current version of NILFS2 uses
156the following meta data files:
157
158 1) Inode file (ifile) -- Stores on-disk inodes
159 2) Checkpoint file (cpfile) -- Stores checkpoints
160 3) Segment usage file (sufile) -- Stores allocation state of segments
161 4) Data address translation file -- Maps virtual block numbers to usual
162 (DAT) block numbers. This file serves to
163 make on-disk blocks relocatable.
164
165The following figure shows a typical organization of the logs:
166
167 _________________________________________________________________________
168 | Summary | regular file | file | ... | ifile | cpfile | sufile | DAT |SR|
169 |_blocks__|_or_directory_|_______|_____|_______|________|________|_____|__|
170
171
172To stride over segment boundaries, this sequence of files may be split
173into multiple logs. The sequence of logs that should be treated as
174logically one log, is delimited with flags marked in the segment
175summary. The recovery code of nilfs2 looks this boundary information
176to ensure atomicity of updates.
177
178The super root block is inserted for every checkpoints. It includes
179three special inodes, inodes for the DAT, cpfile, and sufile. Inodes
180of regular files, directories, symlinks and other special files, are
181included in the ifile. The inode of ifile itself is included in the
182corresponding checkpoint entry in the cpfile. Thus, the hierarchy
183among NILFS2 files can be depicted as follows:
184
185 Super block (SB)
186 |
187 v
188 Super root block (the latest cno=xx)
189 |-- DAT
190 |-- sufile
191 `-- cpfile
192 |-- ifile (cno=c1)
193 |-- ifile (cno=c2) ---- file (ino=i1)
194 : : |-- file (ino=i2)
195 `-- ifile (cno=xx) |-- file (ino=i3)
196 : :
197 `-- file (ino=yy)
198 ( regular file, directory, or symlink )
199
200For detail on the format of each file, please see include/linux/nilfs2_fs.h.
diff --git a/Documentation/hwmon/g760a b/Documentation/hwmon/g760a
new file mode 100644
index 000000000000..e032eeb75629
--- /dev/null
+++ b/Documentation/hwmon/g760a
@@ -0,0 +1,36 @@
1Kernel driver g760a
2===================
3
4Supported chips:
5 * Global Mixed-mode Technology Inc. G760A
6 Prefix: 'g760a'
7 Datasheet: Publicly available at the GMT website
8 http://www.gmt.com.tw/datasheet/g760a.pdf
9
10Author: Herbert Valerio Riedel <hvr@gnu.org>
11
12Description
13-----------
14
15The GMT G760A Fan Speed PWM Controller is connected directly to a fan
16and performs closed-loop control of the fan speed.
17
18The fan speed is programmed by setting the period via 'pwm1' of two
19consecutive speed pulses. The period is defined in terms of clock
20cycle counts of an assumed 32kHz clock source.
21
22Setting a period of 0 stops the fan; setting the period to 255 sets
23fan to maximum speed.
24
25The measured fan rotation speed returned via 'fan1_input' is derived
26from the measured speed pulse period by assuming again a 32kHz clock
27source and a 2 pulse-per-revolution fan.
28
29The 'alarms' file provides access to the two alarm bits provided by
30the G760A chip's status register: Bit 0 is set when the actual fan
31speed differs more than 20% with respect to the programmed fan speed;
32bit 1 is set when fan speed is below 1920 RPM.
33
34The g760a driver will not update its values more frequently than every
35other second; reading them more often will do no harm, but will return
36'old' values.
diff --git a/Documentation/isdn/README.gigaset b/Documentation/isdn/README.gigaset
index 55b2852904a4..02c0e9341dd8 100644
--- a/Documentation/isdn/README.gigaset
+++ b/Documentation/isdn/README.gigaset
@@ -61,24 +61,28 @@ GigaSet 307x Device Driver
61 --------------------- 61 ---------------------
622.1. Modules 622.1. Modules
63 ------- 63 -------
64 To get the device working, you have to load the proper kernel module. You 64 For the devices to work, the proper kernel modules have to be loaded.
65 can do this using 65 This normally happens automatically when the system detects the USB
66 modprobe modulename 66 device (base, M105) or when the line discipline is attached (M101). It
67 where modulename is ser_gigaset (M101), usb_gigaset (M105), or 67 can also be triggered manually using the modprobe(8) command, for example
68 bas_gigaset (direct USB connection to the base). 68 for troubleshooting or to pass module parameters.
69 69
70 The module ser_gigaset provides a serial line discipline N_GIGASET_M101 70 The module ser_gigaset provides a serial line discipline N_GIGASET_M101
71 which drives the device through the regular serial line driver. To use it, 71 which drives the device through the regular serial line driver. It must
72 run the Gigaset M101 daemon "gigasetm101d" (also available from 72 be attached to the serial line to which the M101 is connected with the
73 http://sourceforge.net/projects/gigaset307x/) with the device file of the 73 ldattach(8) command (requires util-linux-ng release 2.14 or later), for
74 RS232 port to the M101 as an argument, for example: 74 example:
75 gigasetm101d /dev/ttyS1 75 ldattach GIGASET_M101 /dev/ttyS1
76 This will open the device file, set its line discipline to N_GIGASET_M101, 76 This will open the device file, attach the line discipline to it, and
77 and then sleep in the background, keeping the device open so that the 77 then sleep in the background, keeping the device open so that the line
78 line discipline remains active. To deactivate it, kill the daemon, for 78 discipline remains active. To deactivate it, kill the daemon, for example
79 example with 79 with
80 killall gigasetm101d 80 killall ldattach
81 before disconnecting the device. 81 before disconnecting the device. To have this happen automatically at
82 system startup/shutdown on an LSB compatible system, create and activate
83 an appropriate LSB startup script /etc/init.d/gigaset. (The init name
84 'gigaset' is officially assigned to this project by LANANA.)
85 Alternatively, just add the 'ldattach' command line to /etc/rc.local.
82 86
832.2. Device nodes for user space programs 872.2. Device nodes for user space programs
84 ------------------------------------ 88 ------------------------------------
@@ -194,10 +198,11 @@ GigaSet 307x Device Driver
194 operation (for wireless access to the base), but are needed for access 198 operation (for wireless access to the base), but are needed for access
195 to the M105's own configuration mode (registration to the base, baudrate 199 to the M105's own configuration mode (registration to the base, baudrate
196 and line format settings, device status queries) via the gigacontr 200 and line format settings, device status queries) via the gigacontr
197 utility. Their use is disabled in the driver by default for safety 201 utility. Their use is controlled by the kernel configuration option
198 reasons but can be enabled by setting the kernel configuration option 202 "Support for undocumented USB requests" (CONFIG_GIGASET_UNDOCREQ). If you
199 "Support for undocumented USB requests" (GIGASET_UNDOCREQ) to "Y" and 203 encounter error code -ENOTTY when trying to use some features of the
200 recompiling. 204 M105, try setting that option to "y" via 'make {x,menu}config' and
205 recompiling the driver.
201 206
202 207
2033. Troubleshooting 2083. Troubleshooting
@@ -228,6 +233,13 @@ GigaSet 307x Device Driver
228 Solution: 233 Solution:
229 Select Unimodem mode for all DECT data adapters. (see section 2.4.) 234 Select Unimodem mode for all DECT data adapters. (see section 2.4.)
230 235
236 Problem:
237 You want to configure your USB DECT data adapter (M105) but gigacontr
238 reports an error: "/dev/ttyGU0: Inappropriate ioctl for device".
239 Solution:
240 Recompile the usb_gigaset driver with the kernel configuration option
241 CONFIG_GIGASET_UNDOCREQ set to 'y'. (see section 2.6.)
242
2313.2. Telling the driver to provide more information 2433.2. Telling the driver to provide more information
232 ---------------------------------------------- 244 ----------------------------------------------
233 Building the driver with the "Gigaset debugging" kernel configuration 245 Building the driver with the "Gigaset debugging" kernel configuration
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 2895ce29dea5..6172e4360f60 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -153,60 +153,6 @@ and is between 256 and 4096 characters. It is defined in the file
153 1,0: use 1st APIC table 153 1,0: use 1st APIC table
154 default: 0 154 default: 0
155 155
156 acpi_sleep= [HW,ACPI] Sleep options
157 Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
158 old_ordering, s4_nonvs }
159 See Documentation/power/video.txt for information on
160 s3_bios and s3_mode.
161 s3_beep is for debugging; it makes the PC's speaker beep
162 as soon as the kernel's real-mode entry point is called.
163 s4_nohwsig prevents ACPI hardware signature from being
164 used during resume from hibernation.
165 old_ordering causes the ACPI 1.0 ordering of the _PTS
166 control method, with respect to putting devices into
167 low power states, to be enforced (the ACPI 2.0 ordering
168 of _PTS is used by default).
169 s4_nonvs prevents the kernel from saving/restoring the
170 ACPI NVS memory during hibernation.
171
172 acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
173 Format: { level | edge | high | low }
174
175 acpi_irq_balance [HW,ACPI]
176 ACPI will balance active IRQs
177 default in APIC mode
178
179 acpi_irq_nobalance [HW,ACPI]
180 ACPI will not move active IRQs (default)
181 default in PIC mode
182
183 acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for
184 use by PCI
185 Format: <irq>,<irq>...
186
187 acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
188 Format: <irq>,<irq>...
189
190 acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT
191
192 acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS
193 Format: To spoof as Windows 98: ="Microsoft Windows"
194
195 acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
196 acpi_osi="string1" # add string1 -- only one string
197 acpi_osi="!string2" # remove built-in string2
198 acpi_osi= # disable all strings
199
200 acpi_serialize [HW,ACPI] force serialization of AML methods
201
202 acpi_skip_timer_override [HW,ACPI]
203 Recognize and ignore IRQ0/pin2 Interrupt Override.
204 For broken nForce2 BIOS resulting in XT-PIC timer.
205 acpi_use_timer_override [HW,ACPI]
206 Use timer override. For some broken Nvidia NF5 boards
207 that require a timer override, but don't have
208 HPET
209
210 acpi_backlight= [HW,ACPI] 156 acpi_backlight= [HW,ACPI]
211 acpi_backlight=vendor 157 acpi_backlight=vendor
212 acpi_backlight=video 158 acpi_backlight=video
@@ -214,11 +160,6 @@ and is between 256 and 4096 characters. It is defined in the file
214 (e.g. thinkpad_acpi, sony_acpi, etc.) instead 160 (e.g. thinkpad_acpi, sony_acpi, etc.) instead
215 of the ACPI video.ko driver. 161 of the ACPI video.ko driver.
216 162
217 acpi_display_output= [HW,ACPI]
218 acpi_display_output=vendor
219 acpi_display_output=video
220 See above.
221
222 acpi.debug_layer= [HW,ACPI,ACPI_DEBUG] 163 acpi.debug_layer= [HW,ACPI,ACPI_DEBUG]
223 acpi.debug_level= [HW,ACPI,ACPI_DEBUG] 164 acpi.debug_level= [HW,ACPI,ACPI_DEBUG]
224 Format: <int> 165 Format: <int>
@@ -247,6 +188,41 @@ and is between 256 and 4096 characters. It is defined in the file
247 unusable. The "log_buf_len" parameter may be useful 188 unusable. The "log_buf_len" parameter may be useful
248 if you need to capture more output. 189 if you need to capture more output.
249 190
191 acpi_display_output= [HW,ACPI]
192 acpi_display_output=vendor
193 acpi_display_output=video
194 See above.
195
196 acpi_irq_balance [HW,ACPI]
197 ACPI will balance active IRQs
198 default in APIC mode
199
200 acpi_irq_nobalance [HW,ACPI]
201 ACPI will not move active IRQs (default)
202 default in PIC mode
203
204 acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
205 Format: <irq>,<irq>...
206
207 acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for
208 use by PCI
209 Format: <irq>,<irq>...
210
211 acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT
212
213 acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS
214 Format: To spoof as Windows 98: ="Microsoft Windows"
215
216 acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
217 acpi_osi="string1" # add string1 -- only one string
218 acpi_osi="!string2" # remove built-in string2
219 acpi_osi= # disable all strings
220
221 acpi_pm_good [X86-32,X86-64]
222 Override the pmtimer bug detection: force the kernel
223 to assume that this machine's pmtimer latches its value
224 and always returns good values.
225
250 acpi.power_nocheck= [HW,ACPI] 226 acpi.power_nocheck= [HW,ACPI]
251 Format: 1/0 enable/disable the check of power state. 227 Format: 1/0 enable/disable the check of power state.
252 On some bogus BIOS the _PSC object/_STA object of 228 On some bogus BIOS the _PSC object/_STA object of
@@ -255,11 +231,6 @@ and is between 256 and 4096 characters. It is defined in the file
255 power state again in power transition. 231 power state again in power transition.
256 1 : disable the power state check 232 1 : disable the power state check
257 233
258 acpi_pm_good [X86-32,X86-64]
259 Override the pmtimer bug detection: force the kernel
260 to assume that this machine's pmtimer latches its value
261 and always returns good values.
262
263 acpi_enforce_resources= [ACPI] 234 acpi_enforce_resources= [ACPI]
264 { strict | lax | no } 235 { strict | lax | no }
265 Check for resource conflicts between native drivers 236 Check for resource conflicts between native drivers
@@ -276,22 +247,6 @@ and is between 256 and 4096 characters. It is defined in the file
276 no: ACPI OperationRegions are not marked as reserved, 247 no: ACPI OperationRegions are not marked as reserved,
277 no further checks are performed. 248 no further checks are performed.
278 249
279 agp= [AGP]
280 { off | try_unsupported }
281 off: disable AGP support
282 try_unsupported: try to drive unsupported chipsets
283 (may crash computer or cause data corruption)
284
285 enable_timer_pin_1 [i386,x86-64]
286 Enable PIN 1 of APIC timer
287 Can be useful to work around chipset bugs
288 (in particular on some ATI chipsets).
289 The kernel tries to set a reasonable default.
290
291 disable_timer_pin_1 [i386,x86-64]
292 Disable PIN 1 of APIC timer
293 Can be useful to work around chipset bugs.
294
295 ad1848= [HW,OSS] 250 ad1848= [HW,OSS]
296 Format: <io>,<irq>,<dma>,<dma2>,<type> 251 Format: <io>,<irq>,<dma>,<dma2>,<type>
297 252
@@ -305,6 +260,12 @@ and is between 256 and 4096 characters. It is defined in the file
305 Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> 260 Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
306 See also header of sound/oss/aedsp16.c. 261 See also header of sound/oss/aedsp16.c.
307 262
263 agp= [AGP]
264 { off | try_unsupported }
265 off: disable AGP support
266 try_unsupported: try to drive unsupported chipsets
267 (may crash computer or cause data corruption)
268
308 aha152x= [HW,SCSI] 269 aha152x= [HW,SCSI]
309 See Documentation/scsi/aha152x.txt. 270 See Documentation/scsi/aha152x.txt.
310 271
@@ -432,12 +393,6 @@ and is between 256 and 4096 characters. It is defined in the file
432 possible to determine what the correct size should be. 393 possible to determine what the correct size should be.
433 This option provides an override for these situations. 394 This option provides an override for these situations.
434 395
435 security= [SECURITY] Choose a security module to enable at boot.
436 If this boot parameter is not specified, only the first
437 security module asking for security registration will be
438 loaded. An invalid security module name will be treated
439 as if no module has been chosen.
440
441 capability.disable= 396 capability.disable=
442 [SECURITY] Disable capabilities. This would normally 397 [SECURITY] Disable capabilities. This would normally
443 be used only if an alternative security model is to be 398 be used only if an alternative security model is to be
@@ -509,24 +464,6 @@ and is between 256 and 4096 characters. It is defined in the file
509 Range: 0 - 8192 464 Range: 0 - 8192
510 Default: 64 465 Default: 64
511 466
512 dma_debug=off If the kernel is compiled with DMA_API_DEBUG support
513 this option disables the debugging code at boot.
514
515 dma_debug_entries=<number>
516 This option allows to tune the number of preallocated
517 entries for DMA-API debugging code. One entry is
518 required per DMA-API allocation. Use this if the
519 DMA-API debugging code disables itself because the
520 architectural default is too low.
521
522 hpet= [X86-32,HPET] option to control HPET usage
523 Format: { enable (default) | disable | force |
524 verbose }
525 disable: disable HPET and use PIT instead
526 force: allow force enabled of undocumented chips (ICH4,
527 VIA, nVidia)
528 verbose: show contents of HPET registers during setup
529
530 com20020= [HW,NET] ARCnet - COM20020 chipset 467 com20020= [HW,NET] ARCnet - COM20020 chipset
531 Format: 468 Format:
532 <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] 469 <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
@@ -570,23 +507,6 @@ and is between 256 and 4096 characters. It is defined in the file
570 console=brl,ttyS0 507 console=brl,ttyS0
571 For now, only VisioBraille is supported. 508 For now, only VisioBraille is supported.
572 509
573 earlycon= [KNL] Output early console device and options.
574 uart[8250],io,<addr>[,options]
575 uart[8250],mmio,<addr>[,options]
576 Start an early, polled-mode console on the 8250/16550
577 UART at the specified I/O port or MMIO address.
578 The options are the same as for ttyS, above.
579
580 no_console_suspend
581 [HW] Never suspend the console
582 Disable suspending of consoles during suspend and
583 hibernate operations. Once disabled, debugging
584 messages can reach various consoles while the rest
585 of the system is being put to sleep (ie, while
586 debugging driver suspend/resume hooks). This may
587 not work reliably with all consoles, but is known
588 to work with serial and VGA consoles.
589
590 coredump_filter= 510 coredump_filter=
591 [KNL] Change the default value for 511 [KNL] Change the default value for
592 /proc/<pid>/coredump_filter. 512 /proc/<pid>/coredump_filter.
@@ -643,30 +563,13 @@ and is between 256 and 4096 characters. It is defined in the file
643 Format: <area>[,<node>] 563 Format: <area>[,<node>]
644 See also Documentation/networking/decnet.txt. 564 See also Documentation/networking/decnet.txt.
645 565
646 vt.default_blu= [VT] 566 default_hugepagesz=
647 Format: <blue0>,<blue1>,<blue2>,...,<blue15> 567 [same as hugepagesz=] The size of the default
648 Change the default blue palette of the console. 568 HugeTLB page size. This is the size represented by
649 This is a 16-member array composed of values 569 the legacy /proc/ hugepages APIs, used for SHM, and
650 ranging from 0-255. 570 default size when mounting hugetlbfs filesystems.
651 571 Defaults to the default architecture's huge page size
652 vt.default_grn= [VT] 572 if not specified.
653 Format: <green0>,<green1>,<green2>,...,<green15>
654 Change the default green palette of the console.
655 This is a 16-member array composed of values
656 ranging from 0-255.
657
658 vt.default_red= [VT]
659 Format: <red0>,<red1>,<red2>,...,<red15>
660 Change the default red palette of the console.
661 This is a 16-member array composed of values
662 ranging from 0-255.
663
664 vt.default_utf8=
665 [VT]
666 Format=<0|1>
667 Set system-wide default UTF-8 mode for all tty's.
668 Default is 1, i.e. UTF-8 mode is enabled for all
669 newly opened terminals.
670 573
671 dhash_entries= [KNL] 574 dhash_entries= [KNL]
672 Set number of hash buckets for dentry cache. 575 Set number of hash buckets for dentry cache.
@@ -679,27 +582,9 @@ and is between 256 and 4096 characters. It is defined in the file
679 Documentation/serial/digiepca.txt. 582 Documentation/serial/digiepca.txt.
680 583
681 disable_mtrr_cleanup [X86] 584 disable_mtrr_cleanup [X86]
682 enable_mtrr_cleanup [X86]
683 The kernel tries to adjust MTRR layout from continuous 585 The kernel tries to adjust MTRR layout from continuous
684 to discrete, to make X server driver able to add WB 586 to discrete, to make X server driver able to add WB
685 entry later. This parameter enables/disables that. 587 entry later. This parameter disables that.
686
687 mtrr_chunk_size=nn[KMG] [X86]
688 used for mtrr cleanup. It is largest continous chunk
689 that could hold holes aka. UC entries.
690
691 mtrr_gran_size=nn[KMG] [X86]
692 Used for mtrr cleanup. It is granularity of mtrr block.
693 Default is 1.
694 Large value could prevent small alignment from
695 using up MTRRs.
696
697 mtrr_spare_reg_nr=n [X86]
698 Format: <integer>
699 Range: 0,7 : spare reg number
700 Default : 1
701 Used for mtrr cleanup. It is spare mtrr entries number.
702 Set to 2 or more if your graphical card needs more.
703 588
704 disable_mtrr_trim [X86, Intel and AMD only] 589 disable_mtrr_trim [X86, Intel and AMD only]
705 By default the kernel will trim any uncacheable 590 By default the kernel will trim any uncacheable
@@ -707,12 +592,38 @@ and is between 256 and 4096 characters. It is defined in the file
707 MTRR settings. This parameter disables that behavior, 592 MTRR settings. This parameter disables that behavior,
708 possibly causing your machine to run very slowly. 593 possibly causing your machine to run very slowly.
709 594
595 disable_timer_pin_1 [i386,x86-64]
596 Disable PIN 1 of APIC timer
597 Can be useful to work around chipset bugs.
598
710 dmasound= [HW,OSS] Sound subsystem buffers 599 dmasound= [HW,OSS] Sound subsystem buffers
711 600
601 dma_debug=off If the kernel is compiled with DMA_API_DEBUG support,
602 this option disables the debugging code at boot.
603
604 dma_debug_entries=<number>
605 This option allows to tune the number of preallocated
606 entries for DMA-API debugging code. One entry is
607 required per DMA-API allocation. Use this if the
608 DMA-API debugging code disables itself because the
609 architectural default is too low.
610
712 dscc4.setup= [NET] 611 dscc4.setup= [NET]
713 612
714 dtc3181e= [HW,SCSI] 613 dtc3181e= [HW,SCSI]
715 614
615 dynamic_printk Enables pr_debug()/dev_dbg() calls if
616 CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
617 These can also be switched on/off via
618 <debugfs>/dynamic_printk/modules
619
620 earlycon= [KNL] Output early console device and options.
621 uart[8250],io,<addr>[,options]
622 uart[8250],mmio,<addr>[,options]
623 Start an early, polled-mode console on the 8250/16550
624 UART at the specified I/O port or MMIO address.
625 The options are the same as for ttyS, above.
626
716 earlyprintk= [X86-32,X86-64,SH,BLACKFIN] 627 earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
717 earlyprintk=vga 628 earlyprintk=vga
718 earlyprintk=serial[,ttySn[,baudrate]] 629 earlyprintk=serial[,ttySn[,baudrate]]
@@ -754,6 +665,17 @@ and is between 256 and 4096 characters. It is defined in the file
754 pass this option to capture kernel. 665 pass this option to capture kernel.
755 See Documentation/kdump/kdump.txt for details. 666 See Documentation/kdump/kdump.txt for details.
756 667
668 enable_mtrr_cleanup [X86]
669 The kernel tries to adjust MTRR layout from continuous
670 to discrete, to make X server driver able to add WB
671 entry later. This parameter enables that.
672
673 enable_timer_pin_1 [i386,x86-64]
674 Enable PIN 1 of APIC timer
675 Can be useful to work around chipset bugs
676 (in particular on some ATI chipsets).
677 The kernel tries to set a reasonable default.
678
757 enforcing [SELINUX] Set initial enforcing status. 679 enforcing [SELINUX] Set initial enforcing status.
758 Format: {"0" | "1"} 680 Format: {"0" | "1"}
759 See security/selinux/Kconfig help text. 681 See security/selinux/Kconfig help text.
@@ -841,6 +763,16 @@ and is between 256 and 4096 characters. It is defined in the file
841 hisax= [HW,ISDN] 763 hisax= [HW,ISDN]
842 See Documentation/isdn/README.HiSax. 764 See Documentation/isdn/README.HiSax.
843 765
766 hlt [BUGS=ARM,SH]
767
768 hpet= [X86-32,HPET] option to control HPET usage
769 Format: { enable (default) | disable | force |
770 verbose }
771 disable: disable HPET and use PIT instead
772 force: allow force enabled of undocumented chips (ICH4,
773 VIA, nVidia)
774 verbose: show contents of HPET registers during setup
775
844 hugepages= [HW,X86-32,IA-64] HugeTLB pages to allocate at boot. 776 hugepages= [HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
845 hugepagesz= [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages. 777 hugepagesz= [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
846 On x86-64 and powerpc, this option can be specified 778 On x86-64 and powerpc, this option can be specified
@@ -850,15 +782,6 @@ and is between 256 and 4096 characters. It is defined in the file
850 (when the CPU supports the "pdpe1gb" cpuinfo flag) 782 (when the CPU supports the "pdpe1gb" cpuinfo flag)
851 Note that 1GB pages can only be allocated at boot time 783 Note that 1GB pages can only be allocated at boot time
852 using hugepages= and not freed afterwards. 784 using hugepages= and not freed afterwards.
853 default_hugepagesz=
854 [same as hugepagesz=] The size of the default
855 HugeTLB page size. This is the size represented by
856 the legacy /proc/ hugepages APIs, used for SHM, and
857 default size when mounting hugetlbfs filesystems.
858 Defaults to the default architecture's huge page size
859 if not specified.
860
861 hlt [BUGS=ARM,SH]
862 785
863 hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC) 786 hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC)
864 terminal devices. Valid values: 0..8 787 terminal devices. Valid values: 0..8
@@ -919,6 +842,9 @@ and is between 256 and 4096 characters. It is defined in the file
919 idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed 842 idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
920 See Documentation/ide/ide.txt. 843 See Documentation/ide/ide.txt.
921 844
845 ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
846 Claim all unknown PCI IDE storage controllers.
847
922 idle= [X86] 848 idle= [X86]
923 Format: idle=poll, idle=mwait, idle=halt, idle=nomwait 849 Format: idle=poll, idle=mwait, idle=halt, idle=nomwait
924 Poll forces a polling idle loop that can slightly 850 Poll forces a polling idle loop that can slightly
@@ -934,9 +860,6 @@ and is between 256 and 4096 characters. It is defined in the file
934 In such case C2/C3 won't be used again. 860 In such case C2/C3 won't be used again.
935 idle=nomwait: Disable mwait for CPU C-states 861 idle=nomwait: Disable mwait for CPU C-states
936 862
937 ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
938 Claim all unknown PCI IDE storage controllers.
939
940 ignore_loglevel [KNL] 863 ignore_loglevel [KNL]
941 Ignore loglevel setting - this will print /all/ 864 Ignore loglevel setting - this will print /all/
942 kernel messages to the console. Useful for debugging. 865 kernel messages to the console. Useful for debugging.
@@ -970,25 +893,6 @@ and is between 256 and 4096 characters. It is defined in the file
970 inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver 893 inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver
971 Format: <irq> 894 Format: <irq>
972 895
973 inttest= [IA64]
974
975 iomem= Disable strict checking of access to MMIO memory
976 strict regions from userspace.
977 relaxed
978
979 iommu= [x86]
980 off
981 force
982 noforce
983 biomerge
984 panic
985 nopanic
986 merge
987 nomerge
988 forcesac
989 soft
990
991
992 intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option 896 intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
993 on 897 on
994 Enable intel iommu driver. 898 Enable intel iommu driver.
@@ -1012,6 +916,28 @@ and is between 256 and 4096 characters. It is defined in the file
1012 result in a hardware IOTLB flush operation as opposed 916 result in a hardware IOTLB flush operation as opposed
1013 to batching them for performance. 917 to batching them for performance.
1014 918
919 inttest= [IA64]
920
921 iomem= Disable strict checking of access to MMIO memory
922 strict regions from userspace.
923 relaxed
924
925 iommu= [x86]
926 off
927 force
928 noforce
929 biomerge
930 panic
931 nopanic
932 merge
933 nomerge
934 forcesac
935 soft
936
937 io7= [HW] IO7 for Marvel based alpha systems
938 See comment before marvel_specify_io7 in
939 arch/alpha/kernel/core_marvel.c.
940
1015 io_delay= [X86-32,X86-64] I/O delay method 941 io_delay= [X86-32,X86-64] I/O delay method
1016 0x80 942 0x80
1017 Standard port 0x80 based delay 943 Standard port 0x80 based delay
@@ -1022,10 +948,6 @@ and is between 256 and 4096 characters. It is defined in the file
1022 none 948 none
1023 No delay 949 No delay
1024 950
1025 io7= [HW] IO7 for Marvel based alpha systems
1026 See comment before marvel_specify_io7 in
1027 arch/alpha/kernel/core_marvel.c.
1028
1029 ip= [IP_PNP] 951 ip= [IP_PNP]
1030 See Documentation/filesystems/nfsroot.txt. 952 See Documentation/filesystems/nfsroot.txt.
1031 953
@@ -1036,12 +958,6 @@ and is between 256 and 4096 characters. It is defined in the file
1036 ips= [HW,SCSI] Adaptec / IBM ServeRAID controller 958 ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
1037 See header of drivers/scsi/ips.c. 959 See header of drivers/scsi/ips.c.
1038 960
1039 ports= [IP_VS_FTP] IPVS ftp helper module
1040 Default is 21.
1041 Up to 8 (IP_VS_APP_MAX_PORTS) ports
1042 may be specified.
1043 Format: <port>,<port>....
1044
1045 irqfixup [HW] 961 irqfixup [HW]
1046 When an interrupt is not handled search all handlers 962 When an interrupt is not handled search all handlers
1047 for it. Intended to get systems with badly broken 963 for it. Intended to get systems with badly broken
@@ -1082,6 +998,8 @@ and is between 256 and 4096 characters. It is defined in the file
1082 js= [HW,JOY] Analog joystick 998 js= [HW,JOY] Analog joystick
1083 See Documentation/input/joystick.txt. 999 See Documentation/input/joystick.txt.
1084 1000
1001 keepinitrd [HW,ARM]
1002
1085 kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter 1003 kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
1086 specifies the amount of memory usable by the kernel 1004 specifies the amount of memory usable by the kernel
1087 for non-movable allocations. The requested amount is 1005 for non-movable allocations. The requested amount is
@@ -1107,21 +1025,6 @@ and is between 256 and 4096 characters. It is defined in the file
1107 higher than default (KMEMTRACE_N_SUBBUFS in code) if 1025 higher than default (KMEMTRACE_N_SUBBUFS in code) if
1108 you experience buffer overruns. 1026 you experience buffer overruns.
1109 1027
1110 movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
1111 is similar to kernelcore except it specifies the
1112 amount of memory used for migratable allocations.
1113 If both kernelcore and movablecore is specified,
1114 then kernelcore will be at *least* the specified
1115 value but may be more. If movablecore on its own
1116 is specified, the administrator must be careful
1117 that the amount of memory usable for all allocations
1118 is not too small.
1119
1120 keepinitrd [HW,ARM]
1121
1122 kstack=N [X86-32,X86-64] Print N words from the kernel stack
1123 in oops dumps.
1124
1125 kgdboc= [HW] kgdb over consoles. 1028 kgdboc= [HW] kgdb over consoles.
1126 Requires a tty driver that supports console polling. 1029 Requires a tty driver that supports console polling.
1127 (only serial suported for now) 1030 (only serial suported for now)
@@ -1131,6 +1034,9 @@ and is between 256 and 4096 characters. It is defined in the file
1131 Configure the RouterBoard 532 series on-chip 1034 Configure the RouterBoard 532 series on-chip
1132 Ethernet adapter MAC address. 1035 Ethernet adapter MAC address.
1133 1036
1037 kstack=N [X86-32,X86-64] Print N words from the kernel stack
1038 in oops dumps.
1039
1134 l2cr= [PPC] 1040 l2cr= [PPC]
1135 1041
1136 l3cr= [PPC] 1042 l3cr= [PPC]
@@ -1276,9 +1182,8 @@ and is between 256 and 4096 characters. It is defined in the file
1276 (machvec) in a generic kernel. 1182 (machvec) in a generic kernel.
1277 Example: machvec=hpzx1_swiotlb 1183 Example: machvec=hpzx1_swiotlb
1278 1184
1279 max_loop= [LOOP] Maximum number of loopback devices that can 1185 max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater
1280 be mounted 1186 than or equal to this physical address is ignored.
1281 Format: <1-256>
1282 1187
1283 maxcpus= [SMP] Maximum number of processors that an SMP kernel 1188 maxcpus= [SMP] Maximum number of processors that an SMP kernel
1284 should make use of. maxcpus=n : n >= 0 limits the 1189 should make use of. maxcpus=n : n >= 0 limits the
@@ -1286,8 +1191,9 @@ and is between 256 and 4096 characters. It is defined in the file
1286 it is equivalent to "nosmp", which also disables 1191 it is equivalent to "nosmp", which also disables
1287 the IO APIC. 1192 the IO APIC.
1288 1193
1289 max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater than 1194 max_loop= [LOOP] Maximum number of loopback devices that can
1290 or equal to this physical address is ignored. 1195 be mounted
1196 Format: <1-256>
1291 1197
1292 max_luns= [SCSI] Maximum number of LUNs to probe. 1198 max_luns= [SCSI] Maximum number of LUNs to probe.
1293 Should be between 1 and 2^32-1. 1199 Should be between 1 and 2^32-1.
@@ -1414,6 +1320,16 @@ and is between 256 and 4096 characters. It is defined in the file
1414 mousedev.yres= [MOUSE] Vertical screen resolution, used for devices 1320 mousedev.yres= [MOUSE] Vertical screen resolution, used for devices
1415 reporting absolute coordinates, such as tablets 1321 reporting absolute coordinates, such as tablets
1416 1322
1323 movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
1324 is similar to kernelcore except it specifies the
1325 amount of memory used for migratable allocations.
1326 If both kernelcore and movablecore is specified,
1327 then kernelcore will be at *least* the specified
1328 value but may be more. If movablecore on its own
1329 is specified, the administrator must be careful
1330 that the amount of memory usable for all allocations
1331 is not too small.
1332
1417 mpu401= [HW,OSS] 1333 mpu401= [HW,OSS]
1418 Format: <io>,<irq> 1334 Format: <io>,<irq>
1419 1335
@@ -1435,6 +1351,23 @@ and is between 256 and 4096 characters. It is defined in the file
1435 [HW] Make the MicroTouch USB driver use raw coordinates 1351 [HW] Make the MicroTouch USB driver use raw coordinates
1436 ('y', default) or cooked coordinates ('n') 1352 ('y', default) or cooked coordinates ('n')
1437 1353
1354 mtrr_chunk_size=nn[KMG] [X86]
1355 used for mtrr cleanup. It is largest continous chunk
1356 that could hold holes aka. UC entries.
1357
1358 mtrr_gran_size=nn[KMG] [X86]
1359 Used for mtrr cleanup. It is granularity of mtrr block.
1360 Default is 1.
1361 Large value could prevent small alignment from
1362 using up MTRRs.
1363
1364 mtrr_spare_reg_nr=n [X86]
1365 Format: <integer>
1366 Range: 0,7 : spare reg number
1367 Default : 1
1368 Used for mtrr cleanup. It is spare mtrr entries number.
1369 Set to 2 or more if your graphical card needs more.
1370
1438 n2= [NET] SDL Inc. RISCom/N2 synchronous serial card 1371 n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
1439 1372
1440 NCR_D700= [HW,SCSI] 1373 NCR_D700= [HW,SCSI]
@@ -1495,11 +1428,13 @@ and is between 256 and 4096 characters. It is defined in the file
1495 0 - turn nmi_watchdog off 1428 0 - turn nmi_watchdog off
1496 1 - use the IO-APIC timer for the NMI watchdog 1429 1 - use the IO-APIC timer for the NMI watchdog
1497 2 - use the local APIC for the NMI watchdog using 1430 2 - use the local APIC for the NMI watchdog using
1498 a performance counter. Note: This will use one performance 1431 a performance counter. Note: This will use one
1499 counter and the local APIC's performance vector. 1432 performance counter and the local APIC's performance
1500 When panic is specified panic when an NMI watchdog timeout occurs. 1433 vector.
1501 This is useful when you use a panic=... timeout and need the box 1434 When panic is specified, panic when an NMI watchdog
1502 quickly up again. 1435 timeout occurs.
1436 This is useful when you use a panic=... timeout and
1437 need the box quickly up again.
1503 Instead of 1 and 2 it is possible to use the following 1438 Instead of 1 and 2 it is possible to use the following
1504 symbolic names: lapic and ioapic 1439 symbolic names: lapic and ioapic
1505 Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic 1440 Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
@@ -1508,6 +1443,16 @@ and is between 256 and 4096 characters. It is defined in the file
1508 emulation library even if a 387 maths coprocessor 1443 emulation library even if a 387 maths coprocessor
1509 is present. 1444 is present.
1510 1445
1446 no_console_suspend
1447 [HW] Never suspend the console
1448 Disable suspending of consoles during suspend and
1449 hibernate operations. Once disabled, debugging
1450 messages can reach various consoles while the rest
1451 of the system is being put to sleep (ie, while
1452 debugging driver suspend/resume hooks). This may
1453 not work reliably with all consoles, but is known
1454 to work with serial and VGA consoles.
1455
1511 noaliencache [MM, NUMA, SLAB] Disables the allocation of alien 1456 noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
1512 caches in the slab allocator. Saves per-node memory, 1457 caches in the slab allocator. Saves per-node memory,
1513 but will impact performance. 1458 but will impact performance.
@@ -1522,6 +1467,8 @@ and is between 256 and 4096 characters. It is defined in the file
1522 1467
1523 nocache [ARM] 1468 nocache [ARM]
1524 1469
1470 noclflush [BUGS=X86] Don't use the CLFLUSH instruction
1471
1525 nodelayacct [KNL] Disable per-task delay accounting 1472 nodelayacct [KNL] Disable per-task delay accounting
1526 1473
1527 nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. 1474 nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
@@ -1550,8 +1497,6 @@ and is between 256 and 4096 characters. It is defined in the file
1550 register save and restore. The kernel will only save 1497 register save and restore. The kernel will only save
1551 legacy floating-point registers on task switch. 1498 legacy floating-point registers on task switch.
1552 1499
1553 noclflush [BUGS=X86] Don't use the CLFLUSH instruction
1554
1555 nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or 1500 nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
1556 wfi(ARM) instruction doesn't work correctly and not to 1501 wfi(ARM) instruction doesn't work correctly and not to
1557 use it. This is also useful when using JTAG debugger. 1502 use it. This is also useful when using JTAG debugger.
@@ -1596,12 +1541,6 @@ and is between 256 and 4096 characters. It is defined in the file
1596 1541
1597 nolapic_timer [X86-32,APIC] Do not use the local APIC timer. 1542 nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
1598 1543
1599 nox2apic [X86-64,APIC] Do not enable x2APIC mode.
1600
1601 x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
1602 default x2apic cluster mode on platforms
1603 supporting x2apic.
1604
1605 noltlbs [PPC] Do not use large page/tlb entries for kernel 1544 noltlbs [PPC] Do not use large page/tlb entries for kernel
1606 lowmem mapping on PPC40x. 1545 lowmem mapping on PPC40x.
1607 1546
@@ -1612,6 +1551,9 @@ and is between 256 and 4096 characters. It is defined in the file
1612 nomfgpt [X86-32] Disable Multi-Function General Purpose 1551 nomfgpt [X86-32] Disable Multi-Function General Purpose
1613 Timer usage (for AMD Geode machines). 1552 Timer usage (for AMD Geode machines).
1614 1553
1554 norandmaps Don't use address space randomization. Equivalent to
1555 echo 0 > /proc/sys/kernel/randomize_va_space
1556
1615 noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops 1557 noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops
1616 1558
1617 noreplace-smp [X86-32,SMP] Don't replace SMP instructions 1559 noreplace-smp [X86-32,SMP] Don't replace SMP instructions
@@ -1650,13 +1592,13 @@ and is between 256 and 4096 characters. It is defined in the file
1650 purges which is reported from either PAL_VM_SUMMARY or 1592 purges which is reported from either PAL_VM_SUMMARY or
1651 SAL PALO. 1593 SAL PALO.
1652 1594
1595 nr_uarts= [SERIAL] maximum number of UARTs to be registered.
1596
1653 numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA. 1597 numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
1654 one of ['zone', 'node', 'default'] can be specified 1598 one of ['zone', 'node', 'default'] can be specified
1655 This can be set from sysctl after boot. 1599 This can be set from sysctl after boot.
1656 See Documentation/sysctl/vm.txt for details. 1600 See Documentation/sysctl/vm.txt for details.
1657 1601
1658 nr_uarts= [SERIAL] maximum number of UARTs to be registered.
1659
1660 ohci1394_dma=early [HW] enable debugging via the ohci1394 driver. 1602 ohci1394_dma=early [HW] enable debugging via the ohci1394 driver.
1661 See Documentation/debugging-via-ohci1394.txt for more 1603 See Documentation/debugging-via-ohci1394.txt for more
1662 info. 1604 info.
@@ -1905,6 +1847,14 @@ and is between 256 and 4096 characters. It is defined in the file
1905 printk.time= Show timing data prefixed to each printk message line 1847 printk.time= Show timing data prefixed to each printk message line
1906 Format: <bool> (1/Y/y=enable, 0/N/n=disable) 1848 Format: <bool> (1/Y/y=enable, 0/N/n=disable)
1907 1849
1850 processor.max_cstate= [HW,ACPI]
1851 Limit processor to maximum C-state
1852 max_cstate=9 overrides any DMI blacklist limit.
1853
1854 processor.nocst [HW,ACPI]
1855 Ignore the _CST method to determine C-states,
1856 instead using the legacy FADT method
1857
1908 profile= [KNL] Enable kernel profiling via /proc/profile 1858 profile= [KNL] Enable kernel profiling via /proc/profile
1909 Format: [schedule,]<number> 1859 Format: [schedule,]<number>
1910 Param: "schedule" - profile schedule points. 1860 Param: "schedule" - profile schedule points.
@@ -1914,14 +1864,6 @@ and is between 256 and 4096 characters. It is defined in the file
1914 Requires CONFIG_SCHEDSTATS 1864 Requires CONFIG_SCHEDSTATS
1915 Param: "kvm" - profile VM exits. 1865 Param: "kvm" - profile VM exits.
1916 1866
1917 processor.max_cstate= [HW,ACPI]
1918 Limit processor to maximum C-state
1919 max_cstate=9 overrides any DMI blacklist limit.
1920
1921 processor.nocst [HW,ACPI]
1922 Ignore the _CST method to determine C-states,
1923 instead using the legacy FADT method
1924
1925 prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk 1867 prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
1926 before loading. 1868 before loading.
1927 See Documentation/blockdev/ramdisk.txt. 1869 See Documentation/blockdev/ramdisk.txt.
@@ -2075,7 +2017,13 @@ and is between 256 and 4096 characters. It is defined in the file
2075 allowing boot to proceed. none ignores them, expecting 2017 allowing boot to proceed. none ignores them, expecting
2076 user space to do the scan. 2018 user space to do the scan.
2077 2019
2078 selinux [SELINUX] Disable or enable SELinux at boot time. 2020 security= [SECURITY] Choose a security module to enable at boot.
2021 If this boot parameter is not specified, only the first
2022 security module asking for security registration will be
2023 loaded. An invalid security module name will be treated
2024 as if no module has been chosen.
2025
2026 selinux= [SELINUX] Disable or enable SELinux at boot time.
2079 Format: { "0" | "1" } 2027 Format: { "0" | "1" }
2080 See security/selinux/Kconfig help text. 2028 See security/selinux/Kconfig help text.
2081 0 -- disable. 2029 0 -- disable.
@@ -2499,9 +2447,6 @@ and is between 256 and 4096 characters. It is defined in the file
2499 medium is write-protected). 2447 medium is write-protected).
2500 Example: quirks=0419:aaf5:rl,0421:0433:rc 2448 Example: quirks=0419:aaf5:rl,0421:0433:rc
2501 2449
2502 add_efi_memmap [EFI; x86-32,X86-64] Include EFI memory map in
2503 kernel's map of available physical RAM.
2504
2505 vdso= [X86-32,SH,x86-64] 2450 vdso= [X86-32,SH,x86-64]
2506 vdso=2: enable compat VDSO (default with COMPAT_VDSO) 2451 vdso=2: enable compat VDSO (default with COMPAT_VDSO)
2507 vdso=1: enable VDSO (default) 2452 vdso=1: enable VDSO (default)
@@ -2540,6 +2485,31 @@ and is between 256 and 4096 characters. It is defined in the file
2540 vmpoff= [KNL,S390] Perform z/VM CP command after power off. 2485 vmpoff= [KNL,S390] Perform z/VM CP command after power off.
2541 Format: <command> 2486 Format: <command>
2542 2487
2488 vt.default_blu= [VT]
2489 Format: <blue0>,<blue1>,<blue2>,...,<blue15>
2490 Change the default blue palette of the console.
2491 This is a 16-member array composed of values
2492 ranging from 0-255.
2493
2494 vt.default_grn= [VT]
2495 Format: <green0>,<green1>,<green2>,...,<green15>
2496 Change the default green palette of the console.
2497 This is a 16-member array composed of values
2498 ranging from 0-255.
2499
2500 vt.default_red= [VT]
2501 Format: <red0>,<red1>,<red2>,...,<red15>
2502 Change the default red palette of the console.
2503 This is a 16-member array composed of values
2504 ranging from 0-255.
2505
2506 vt.default_utf8=
2507 [VT]
2508 Format=<0|1>
2509 Set system-wide default UTF-8 mode for all tty's.
2510 Default is 1, i.e. UTF-8 mode is enabled for all
2511 newly opened terminals.
2512
2543 waveartist= [HW,OSS] 2513 waveartist= [HW,OSS]
2544 Format: <io>,<irq>,<dma>,<dma2> 2514 Format: <io>,<irq>,<dma>,<dma2>
2545 2515
@@ -2552,6 +2522,10 @@ and is between 256 and 4096 characters. It is defined in the file
2552 wdt= [WDT] Watchdog 2522 wdt= [WDT] Watchdog
2553 See Documentation/watchdog/wdt.txt. 2523 See Documentation/watchdog/wdt.txt.
2554 2524
2525 x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
2526 default x2apic cluster mode on platforms
2527 supporting x2apic.
2528
2555 xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. 2529 xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
2556 xd_geo= See header of drivers/block/xd.c. 2530 xd_geo= See header of drivers/block/xd.c.
2557 2531
@@ -2559,9 +2533,6 @@ and is between 256 and 4096 characters. It is defined in the file
2559 Format: 2533 Format:
2560 <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] 2534 <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
2561 2535
2562 norandmaps Don't use address space randomization. Equivalent to
2563 echo 0 > /proc/sys/kernel/randomize_va_space
2564
2565______________________________________________________________________ 2536______________________________________________________________________
2566 2537
2567TODO: 2538TODO:
diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt
index 48b3de90eb1e..1e7a769a10f9 100644
--- a/Documentation/kprobes.txt
+++ b/Documentation/kprobes.txt
@@ -212,7 +212,9 @@ hit, Kprobes calls kp->pre_handler. After the probed instruction
212is single-stepped, Kprobe calls kp->post_handler. If a fault 212is single-stepped, Kprobe calls kp->post_handler. If a fault
213occurs during execution of kp->pre_handler or kp->post_handler, 213occurs during execution of kp->pre_handler or kp->post_handler,
214or during single-stepping of the probed instruction, Kprobes calls 214or during single-stepping of the probed instruction, Kprobes calls
215kp->fault_handler. Any or all handlers can be NULL. 215kp->fault_handler. Any or all handlers can be NULL. If kp->flags
216is set KPROBE_FLAG_DISABLED, that kp will be registered but disabled,
217so, it's handlers aren't hit until calling enable_kprobe(kp).
216 218
217NOTE: 219NOTE:
2181. With the introduction of the "symbol_name" field to struct kprobe, 2201. With the introduction of the "symbol_name" field to struct kprobe,
@@ -363,6 +365,26 @@ probes) in the specified array, they clear the addr field of those
363incorrect probes. However, other probes in the array are 365incorrect probes. However, other probes in the array are
364unregistered correctly. 366unregistered correctly.
365 367
3684.7 disable_*probe
369
370#include <linux/kprobes.h>
371int disable_kprobe(struct kprobe *kp);
372int disable_kretprobe(struct kretprobe *rp);
373int disable_jprobe(struct jprobe *jp);
374
375Temporarily disables the specified *probe. You can enable it again by using
376enable_*probe(). You must specify the probe which has been registered.
377
3784.8 enable_*probe
379
380#include <linux/kprobes.h>
381int enable_kprobe(struct kprobe *kp);
382int enable_kretprobe(struct kretprobe *rp);
383int enable_jprobe(struct jprobe *jp);
384
385Enables *probe which has been disabled by disable_*probe(). You must specify
386the probe which has been registered.
387
3665. Kprobes Features and Limitations 3885. Kprobes Features and Limitations
367 389
368Kprobes allows multiple probes at the same address. Currently, 390Kprobes allows multiple probes at the same address. Currently,
@@ -500,10 +522,14 @@ the probe. If the probed function belongs to a module, the module name
500is also specified. Following columns show probe status. If the probe is on 522is also specified. Following columns show probe status. If the probe is on
501a virtual address that is no longer valid (module init sections, module 523a virtual address that is no longer valid (module init sections, module
502virtual addresses that correspond to modules that've been unloaded), 524virtual addresses that correspond to modules that've been unloaded),
503such probes are marked with [GONE]. 525such probes are marked with [GONE]. If the probe is temporarily disabled,
526such probes are marked with [DISABLED].
504 527
505/debug/kprobes/enabled: Turn kprobes ON/OFF 528/debug/kprobes/enabled: Turn kprobes ON/OFF forcibly.
506 529
507Provides a knob to globally turn registered kprobes ON or OFF. By default, 530Provides a knob to globally and forcibly turn registered kprobes ON or OFF.
508all kprobes are enabled. By echoing "0" to this file, all registered probes 531By default, all kprobes are enabled. By echoing "0" to this file, all
509will be disarmed, till such time a "1" is echoed to this file. 532registered probes will be disarmed, till such time a "1" is echoed to this
533file. Note that this knob just disarms and arms all kprobes and doesn't
534change each probe's disabling state. This means that disabled kprobes (marked
535[DISABLED]) will be not enabled if you turn ON all kprobes by this knob.
diff --git a/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt b/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt
index 84a04d5eb8e6..a48b2cadc7f0 100644
--- a/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt
+++ b/Documentation/powerpc/dts-bindings/fsl/upm-nand.txt
@@ -5,9 +5,21 @@ Required properties:
5- reg : should specify localbus chip select and size used for the chip. 5- reg : should specify localbus chip select and size used for the chip.
6- fsl,upm-addr-offset : UPM pattern offset for the address latch. 6- fsl,upm-addr-offset : UPM pattern offset for the address latch.
7- fsl,upm-cmd-offset : UPM pattern offset for the command latch. 7- fsl,upm-cmd-offset : UPM pattern offset for the command latch.
8- gpios : may specify optional GPIO connected to the Ready-Not-Busy pin.
9 8
10Example: 9Optional properties:
10- fsl,upm-wait-flags : add chip-dependent short delays after running the
11 UPM pattern (0x1), after writing a data byte (0x2) or after
12 writing out a buffer (0x4).
13- fsl,upm-addr-line-cs-offsets : address offsets for multi-chip support.
14 The corresponding address lines are used to select the chip.
15- gpios : may specify optional GPIOs connected to the Ready-Not-Busy pins
16 (R/B#). For multi-chip devices, "n" GPIO definitions are required
17 according to the number of chips.
18- chip-delay : chip dependent delay for transfering data from array to
19 read registers (tR). Required if property "gpios" is not used
20 (R/B# pins not connected).
21
22Examples:
11 23
12upm@1,0 { 24upm@1,0 {
13 compatible = "fsl,upm-nand"; 25 compatible = "fsl,upm-nand";
@@ -26,3 +38,26 @@ upm@1,0 {
26 }; 38 };
27 }; 39 };
28}; 40};
41
42upm@3,0 {
43 #address-cells = <0>;
44 #size-cells = <0>;
45 compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
46 reg = <3 0x0 0x800>;
47 fsl,upm-addr-offset = <0x10>;
48 fsl,upm-cmd-offset = <0x08>;
49 /* Multi-chip NAND device */
50 fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
51 fsl,upm-wait-flags = <0x5>;
52 chip-delay = <25>; // in micro-seconds
53
54 nand@0 {
55 #address-cells = <1>;
56 #size-cells = <1>;
57
58 partition@0 {
59 label = "fs";
60 reg = <0x00000000 0x10000000>;
61 };
62 };
63};
diff --git a/Documentation/powerpc/dts-bindings/gpio/led.txt b/Documentation/powerpc/dts-bindings/gpio/led.txt
index ff51f4c0fa9d..4fe14deedc0a 100644
--- a/Documentation/powerpc/dts-bindings/gpio/led.txt
+++ b/Documentation/powerpc/dts-bindings/gpio/led.txt
@@ -1,15 +1,43 @@
1LED connected to GPIO 1LEDs connected to GPIO lines
2 2
3Required properties: 3Required properties:
4- compatible : should be "gpio-led". 4- compatible : should be "gpio-leds".
5- label : (optional) the label for this LED. If omitted, the label is 5
6Each LED is represented as a sub-node of the gpio-leds device. Each
7node's name represents the name of the corresponding LED.
8
9LED sub-node properties:
10- gpios : Should specify the LED's GPIO, see "Specifying GPIO information
11 for devices" in Documentation/powerpc/booting-without-of.txt. Active
12 low LEDs should be indicated using flags in the GPIO specifier.
13- label : (optional) The label for this LED. If omitted, the label is
6 taken from the node name (excluding the unit address). 14 taken from the node name (excluding the unit address).
7- gpios : should specify LED GPIO. 15- linux,default-trigger : (optional) This parameter, if present, is a
16 string defining the trigger assigned to the LED. Current triggers are:
17 "backlight" - LED will act as a back-light, controlled by the framebuffer
18 system
19 "default-on" - LED will turn on
20 "heartbeat" - LED "double" flashes at a load average based rate
21 "ide-disk" - LED indicates disk activity
22 "timer" - LED flashes at a fixed, configurable rate
8 23
9Example: 24Examples:
10 25
11led@0 { 26leds {
12 compatible = "gpio-led"; 27 compatible = "gpio-leds";
13 label = "hdd"; 28 hdd {
14 gpios = <&mcu_pio 0 1>; 29 label = "IDE Activity";
30 gpios = <&mcu_pio 0 1>; /* Active low */
31 linux,default-trigger = "ide-disk";
32 };
15}; 33};
34
35run-control {
36 compatible = "gpio-leds";
37 red {
38 gpios = <&mpc8572 6 0>;
39 };
40 green {
41 gpios = <&mpc8572 7 0>;
42 };
43}
diff --git a/Documentation/scsi/aacraid.txt b/Documentation/scsi/aacraid.txt
index ddace3afc83b..30f643f611b2 100644
--- a/Documentation/scsi/aacraid.txt
+++ b/Documentation/scsi/aacraid.txt
@@ -60,17 +60,9 @@ Supported Cards/Chipsets
60 9005:0285:9005:02d5 Adaptec ASR-2405 (Voodoo40 Lite) 60 9005:0285:9005:02d5 Adaptec ASR-2405 (Voodoo40 Lite)
61 9005:0285:9005:02d6 Adaptec ASR-2445 (Voodoo44 Lite) 61 9005:0285:9005:02d6 Adaptec ASR-2445 (Voodoo44 Lite)
62 9005:0285:9005:02d7 Adaptec ASR-2805 (Voodoo80 Lite) 62 9005:0285:9005:02d7 Adaptec ASR-2805 (Voodoo80 Lite)
63 9005:0285:9005:02d8 Adaptec 5405G (Voodoo40 PM) 63 9005:0285:9005:02d8 Adaptec 5405Z (Voodoo40 BLBU)
64 9005:0285:9005:02d9 Adaptec 5445G (Voodoo44 PM) 64 9005:0285:9005:02d9 Adaptec 5445Z (Voodoo44 BLBU)
65 9005:0285:9005:02da Adaptec 5805G (Voodoo80 PM) 65 9005:0285:9005:02da Adaptec 5805Z (Voodoo80 BLBU)
66 9005:0285:9005:02db Adaptec 5085G (Voodoo08 PM)
67 9005:0285:9005:02dc Adaptec 51245G (Voodoo124 PM)
68 9005:0285:9005:02dd Adaptec 51645G (Voodoo164 PM)
69 9005:0285:9005:02de Adaptec 52445G (Voodoo244 PM)
70 9005:0285:9005:02df Adaptec ASR-2045G (Voodoo04 Lite PM)
71 9005:0285:9005:02e0 Adaptec ASR-2405G (Voodoo40 Lite PM)
72 9005:0285:9005:02e1 Adaptec ASR-2445G (Voodoo44 Lite PM)
73 9005:0285:9005:02e2 Adaptec ASR-2805G (Voodoo80 Lite PM)
74 1011:0046:9005:0364 Adaptec 5400S (Mustang) 66 1011:0046:9005:0364 Adaptec 5400S (Mustang)
75 1011:0046:9005:0365 Adaptec 5400S (Mustang) 67 1011:0046:9005:0365 Adaptec 5400S (Mustang)
76 9005:0287:9005:0800 Adaptec Themisto (Jupiter) 68 9005:0287:9005:0800 Adaptec Themisto (Jupiter)
@@ -140,6 +132,7 @@ Deanna Bonds (non-DASD support, PAE fibs and 64 bit,
140 where fibs that go to the hardware are consistently called hw_fibs and 132 where fibs that go to the hardware are consistently called hw_fibs and
141 not just fibs like the name of the driver tracking structure) 133 not just fibs like the name of the driver tracking structure)
142Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations. 134Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations.
135Achim Leubner <Achim_Leubner@adaptec.com>
143 136
144Original Driver 137Original Driver
145------------------------- 138-------------------------
diff --git a/Documentation/sound/alsa/soc/jack.txt b/Documentation/sound/alsa/soc/jack.txt
new file mode 100644
index 000000000000..fcf82a417293
--- /dev/null
+++ b/Documentation/sound/alsa/soc/jack.txt
@@ -0,0 +1,71 @@
1ASoC jack detection
2===================
3
4ALSA has a standard API for representing physical jacks to user space,
5the kernel side of which can be seen in include/sound/jack.h. ASoC
6provides a version of this API adding two additional features:
7
8 - It allows more than one jack detection method to work together on one
9 user visible jack. In embedded systems it is common for multiple
10 to be present on a single jack but handled by separate bits of
11 hardware.
12
13 - Integration with DAPM, allowing DAPM endpoints to be updated
14 automatically based on the detected jack status (eg, turning off the
15 headphone outputs if no headphones are present).
16
17This is done by splitting the jacks up into three things working
18together: the jack itself represented by a struct snd_soc_jack, sets of
19snd_soc_jack_pins representing DAPM endpoints to update and blocks of
20code providing jack reporting mechanisms.
21
22For example, a system may have a stereo headset jack with two reporting
23mechanisms, one for the headphone and one for the microphone. Some
24systems won't be able to use their speaker output while a headphone is
25connected and so will want to make sure to update both speaker and
26headphone when the headphone jack status changes.
27
28The jack - struct snd_soc_jack
29==============================
30
31This represents a physical jack on the system and is what is visible to
32user space. The jack itself is completely passive, it is set up by the
33machine driver and updated by jack detection methods.
34
35Jacks are created by the machine driver calling snd_soc_jack_new().
36
37snd_soc_jack_pin
38================
39
40These represent a DAPM pin to update depending on some of the status
41bits supported by the jack. Each snd_soc_jack has zero or more of these
42which are updated automatically. They are created by the machine driver
43and associated with the jack using snd_soc_jack_add_pins(). The status
44of the endpoint may configured to be the opposite of the jack status if
45required (eg, enabling a built in microphone if a microphone is not
46connected via a jack).
47
48Jack detection methods
49======================
50
51Actual jack detection is done by code which is able to monitor some
52input to the system and update a jack by calling snd_soc_jack_report(),
53specifying a subset of bits to update. The jack detection code should
54be set up by the machine driver, taking configuration for the jack to
55update and the set of things to report when the jack is connected.
56
57Often this is done based on the status of a GPIO - a handler for this is
58provided by the snd_soc_jack_add_gpio() function. Other methods are
59also available, for example integrated into CODECs. One example of
60CODEC integrated jack detection can be see in the WM8350 driver.
61
62Each jack may have multiple reporting mechanisms, though it will need at
63least one to be useful.
64
65Machine drivers
66===============
67
68These are all hooked together by the machine driver depending on the
69system hardware. The machine driver will set up the snd_soc_jack and
70the list of pins to update then set up one or more jack detection
71mechanisms to update that jack based on their current status.
diff --git a/Documentation/sysctl/vm.txt b/Documentation/sysctl/vm.txt
index 3197fc83bc51..97c4b3284329 100644
--- a/Documentation/sysctl/vm.txt
+++ b/Documentation/sysctl/vm.txt
@@ -39,6 +39,8 @@ Currently, these files are in /proc/sys/vm:
39- nr_hugepages 39- nr_hugepages
40- nr_overcommit_hugepages 40- nr_overcommit_hugepages
41- nr_pdflush_threads 41- nr_pdflush_threads
42- nr_pdflush_threads_min
43- nr_pdflush_threads_max
42- nr_trim_pages (only if CONFIG_MMU=n) 44- nr_trim_pages (only if CONFIG_MMU=n)
43- numa_zonelist_order 45- numa_zonelist_order
44- oom_dump_tasks 46- oom_dump_tasks
@@ -463,6 +465,32 @@ The default value is 0.
463 465
464============================================================== 466==============================================================
465 467
468nr_pdflush_threads_min
469
470This value controls the minimum number of pdflush threads.
471
472At boot time, the kernel will create and maintain 'nr_pdflush_threads_min'
473threads for the kernel's lifetime.
474
475The default value is 2. The minimum value you can specify is 1, and
476the maximum value is the current setting of 'nr_pdflush_threads_max'.
477
478See 'nr_pdflush_threads_max' below for more information.
479
480==============================================================
481
482nr_pdflush_threads_max
483
484This value controls the maximum number of pdflush threads that can be
485created. The pdflush algorithm will create a new pdflush thread (up to
486this maximum) if no pdflush threads have been available for >= 1 second.
487
488The default value is 8. The minimum value you can specify is the
489current value of 'nr_pdflush_threads_min' and the
490maximum is 1000.
491
492==============================================================
493
466overcommit_memory: 494overcommit_memory:
467 495
468This value contains a flag that enables memory overcommitment. 496This value contains a flag that enables memory overcommitment.
diff --git a/Documentation/video4linux/pxa_camera.txt b/Documentation/video4linux/pxa_camera.txt
new file mode 100644
index 000000000000..b1137f9a53eb
--- /dev/null
+++ b/Documentation/video4linux/pxa_camera.txt
@@ -0,0 +1,125 @@
1 PXA-Camera Host Driver
2 ======================
3
4Constraints
5-----------
6 a) Image size for YUV422P format
7 All YUV422P images are enforced to have width x height % 16 = 0.
8 This is due to DMA constraints, which transfers only planes of 8 byte
9 multiples.
10
11
12Global video workflow
13---------------------
14 a) QCI stopped
15 Initialy, the QCI interface is stopped.
16 When a buffer is queued (pxa_videobuf_ops->buf_queue), the QCI starts.
17
18 b) QCI started
19 More buffers can be queued while the QCI is started without halting the
20 capture. The new buffers are "appended" at the tail of the DMA chain, and
21 smoothly captured one frame after the other.
22
23 Once a buffer is filled in the QCI interface, it is marked as "DONE" and
24 removed from the active buffers list. It can be then requeud or dequeued by
25 userland application.
26
27 Once the last buffer is filled in, the QCI interface stops.
28
29
30DMA usage
31---------
32 a) DMA flow
33 - first buffer queued for capture
34 Once a first buffer is queued for capture, the QCI is started, but data
35 transfer is not started. On "End Of Frame" interrupt, the irq handler
36 starts the DMA chain.
37 - capture of one videobuffer
38 The DMA chain starts transfering data into videobuffer RAM pages.
39 When all pages are transfered, the DMA irq is raised on "ENDINTR" status
40 - finishing one videobuffer
41 The DMA irq handler marks the videobuffer as "done", and removes it from
42 the active running queue
43 Meanwhile, the next videobuffer (if there is one), is transfered by DMA
44 - finishing the last videobuffer
45 On the DMA irq of the last videobuffer, the QCI is stopped.
46
47 b) DMA prepared buffer will have this structure
48
49 +------------+-----+---------------+-----------------+
50 | desc-sg[0] | ... | desc-sg[last] | finisher/linker |
51 +------------+-----+---------------+-----------------+
52
53 This structure is pointed by dma->sg_cpu.
54 The descriptors are used as follows :
55 - desc-sg[i]: i-th descriptor, transfering the i-th sg
56 element to the video buffer scatter gather
57 - finisher: has ddadr=DADDR_STOP, dcmd=ENDIRQEN
58 - linker: has ddadr= desc-sg[0] of next video buffer, dcmd=0
59
60 For the next schema, let's assume d0=desc-sg[0] .. dN=desc-sg[N],
61 "f" stands for finisher and "l" for linker.
62 A typical running chain is :
63
64 Videobuffer 1 Videobuffer 2
65 +---------+----+---+ +----+----+----+---+
66 | d0 | .. | dN | l | | d0 | .. | dN | f |
67 +---------+----+-|-+ ^----+----+----+---+
68 | |
69 +----+
70
71 After the chaining is finished, the chain looks like :
72
73 Videobuffer 1 Videobuffer 2 Videobuffer 3
74 +---------+----+---+ +----+----+----+---+ +----+----+----+---+
75 | d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f |
76 +---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+
77 | | | |
78 +----+ +----+
79 new_link
80
81 c) DMA hot chaining timeslice issue
82
83 As DMA chaining is done while DMA _is_ running, the linking may be done
84 while the DMA jumps from one Videobuffer to another. On the schema, that
85 would be a problem if the following sequence is encountered :
86
87 - DMA chain is Videobuffer1 + Videobuffer2
88 - pxa_videobuf_queue() is called to queue Videobuffer3
89 - DMA controller finishes Videobuffer2, and DMA stops
90 =>
91 Videobuffer 1 Videobuffer 2
92 +---------+----+---+ +----+----+----+---+
93 | d0 | .. | dN | l | | d0 | .. | dN | f |
94 +---------+----+-|-+ ^----+----+----+-^-+
95 | | |
96 +----+ +-- DMA DDADR loads DDADR_STOP
97
98 - pxa_dma_add_tail_buf() is called, the Videobuffer2 "finisher" is
99 replaced by a "linker" to Videobuffer3 (creation of new_link)
100 - pxa_videobuf_queue() finishes
101 - the DMA irq handler is called, which terminates Videobuffer2
102 - Videobuffer3 capture is not scheduled on DMA chain (as it stopped !!!)
103
104 Videobuffer 1 Videobuffer 2 Videobuffer 3
105 +---------+----+---+ +----+----+----+---+ +----+----+----+---+
106 | d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f |
107 +---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+
108 | | | |
109 +----+ +----+
110 new_link
111 DMA DDADR still is DDADR_STOP
112
113 - pxa_camera_check_link_miss() is called
114 This checks if the DMA is finished and a buffer is still on the
115 pcdev->capture list. If that's the case, the capture will be restarted,
116 and Videobuffer3 is scheduled on DMA chain.
117 - the DMA irq handler finishes
118
119 Note: if DMA stops just after pxa_camera_check_link_miss() reads DDADR()
120 value, we have the guarantee that the DMA irq handler will be called back
121 when the DMA will finish the buffer, and pxa_camera_check_link_miss() will
122 be called again, to reschedule Videobuffer3.
123
124--
125Author: Robert Jarzmik <robert.jarzmik@free.fr>
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
index a31177390e55..854808b67fae 100644
--- a/Documentation/video4linux/v4l2-framework.txt
+++ b/Documentation/video4linux/v4l2-framework.txt
@@ -90,7 +90,7 @@ up before calling v4l2_device_register then it will be untouched. If dev is
90NULL, then you *must* setup v4l2_dev->name before calling v4l2_device_register. 90NULL, then you *must* setup v4l2_dev->name before calling v4l2_device_register.
91 91
92The first 'dev' argument is normally the struct device pointer of a pci_dev, 92The first 'dev' argument is normally the struct device pointer of a pci_dev,
93usb_device or platform_device. It is rare for dev to be NULL, but it happens 93usb_interface or platform_device. It is rare for dev to be NULL, but it happens
94with ISA devices or when one device creates multiple PCI devices, thus making 94with ISA devices or when one device creates multiple PCI devices, thus making
95it impossible to associate v4l2_dev with a particular parent. 95it impossible to associate v4l2_dev with a particular parent.
96 96
@@ -351,17 +351,6 @@ And this to go from an i2c_client to a v4l2_subdev struct:
351 351
352 struct v4l2_subdev *sd = i2c_get_clientdata(client); 352 struct v4l2_subdev *sd = i2c_get_clientdata(client);
353 353
354Finally you need to make a command function to make driver->command()
355call the right subdev_ops functions:
356
357static int subdev_command(struct i2c_client *client, unsigned cmd, void *arg)
358{
359 return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
360}
361
362If driver->command is never used then you can leave this out. Eventually the
363driver->command usage should be removed from v4l.
364
365Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback 354Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback
366is called. This will unregister the sub-device from the bridge driver. It is 355is called. This will unregister the sub-device from the bridge driver. It is
367safe to call this even if the sub-device was never registered. 356safe to call this even if the sub-device was never registered.
@@ -375,14 +364,12 @@ from the remove() callback ensures that this is always done correctly.
375 364
376The bridge driver also has some helper functions it can use: 365The bridge driver also has some helper functions it can use:
377 366
378struct v4l2_subdev *sd = v4l2_i2c_new_subdev(adapter, "module_foo", "chipid", 0x36); 367struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter,
368 "module_foo", "chipid", 0x36);
379 369
380This loads the given module (can be NULL if no module needs to be loaded) and 370This loads the given module (can be NULL if no module needs to be loaded) and
381calls i2c_new_device() with the given i2c_adapter and chip/address arguments. 371calls i2c_new_device() with the given i2c_adapter and chip/address arguments.
382If all goes well, then it registers the subdev with the v4l2_device. It gets 372If all goes well, then it registers the subdev with the v4l2_device.
383the v4l2_device by calling i2c_get_adapdata(adapter), so you should make sure
384to call i2c_set_adapdata(adapter, v4l2_device) when you setup the i2c_adapter
385in your driver.
386 373
387You can also use v4l2_i2c_new_probed_subdev() which is very similar to 374You can also use v4l2_i2c_new_probed_subdev() which is very similar to
388v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses 375v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses
diff --git a/MAINTAINERS b/MAINTAINERS
index 9673cd28a69b..c3b215970f7b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1544,7 +1544,6 @@ S: Maintained
1544DVB SUBSYSTEM AND DRIVERS 1544DVB SUBSYSTEM AND DRIVERS
1545P: LinuxTV.org Project 1545P: LinuxTV.org Project
1546M: linux-media@vger.kernel.org 1546M: linux-media@vger.kernel.org
1547L: linux-dvb@linuxtv.org (subscription required)
1548W: http://linuxtv.org/ 1547W: http://linuxtv.org/
1549T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 1548T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
1550S: Maintained 1549S: Maintained
@@ -3245,6 +3244,13 @@ M: andi@lisas.de
3245L: netdev@vger.kernel.org 3244L: netdev@vger.kernel.org
3246S: Maintained 3245S: Maintained
3247 3246
3247NILFS2 FILESYSTEM
3248P: KONISHI Ryusuke
3249M: konishi.ryusuke@lab.ntt.co.jp
3250L: users@nilfs.org
3251W: http://www.nilfs.org/en/
3252S: Supported
3253
3248NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER 3254NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
3249P: YOKOTA Hiroshi 3255P: YOKOTA Hiroshi
3250M: yokota@netlab.is.tsukuba.ac.jp 3256M: yokota@netlab.is.tsukuba.ac.jp
diff --git a/arch/arm/mach-davinci/board-evm.c b/arch/arm/mach-davinci/board-evm.c
index 38b6a9ce2a93..0b97a528902b 100644
--- a/arch/arm/mach-davinci/board-evm.c
+++ b/arch/arm/mach-davinci/board-evm.c
@@ -118,7 +118,7 @@ static struct resource ide_resources[] = {
118 }, 118 },
119}; 119};
120 120
121static u64 ide_dma_mask = DMA_32BIT_MASK; 121static u64 ide_dma_mask = DMA_BIT_MASK(32);
122 122
123static struct platform_device ide_dev = { 123static struct platform_device ide_dev = {
124 .name = "palm_bk3710", 124 .name = "palm_bk3710",
@@ -127,7 +127,7 @@ static struct platform_device ide_dev = {
127 .num_resources = ARRAY_SIZE(ide_resources), 127 .num_resources = ARRAY_SIZE(ide_resources),
128 .dev = { 128 .dev = {
129 .dma_mask = &ide_dma_mask, 129 .dma_mask = &ide_dma_mask,
130 .coherent_dma_mask = DMA_32BIT_MASK, 130 .coherent_dma_mask = DMA_BIT_MASK(32),
131 }, 131 },
132}; 132};
133 133
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h
new file mode 100644
index 000000000000..aa482841270b
--- /dev/null
+++ b/arch/arm/mach-davinci/include/mach/nand.h
@@ -0,0 +1,80 @@
1/*
2 * mach-davinci/nand.h
3 *
4 * Copyright © 2006 Texas Instruments.
5 *
6 * Ported to 2.6.23 Copyright © 2008 by
7 * Sander Huijsen <Shuijsen@optelecom-nkf.com>
8 * Troy Kisky <troy.kisky@boundarydevices.com>
9 * Dirk Behme <Dirk.Behme@gmail.com>
10 *
11 * --------------------------------------------------------------------------
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 */
27
28#ifndef __ARCH_ARM_DAVINCI_NAND_H
29#define __ARCH_ARM_DAVINCI_NAND_H
30
31#include <linux/mtd/nand.h>
32
33#define NRCSR_OFFSET 0x00
34#define AWCCR_OFFSET 0x04
35#define A1CR_OFFSET 0x10
36#define NANDFCR_OFFSET 0x60
37#define NANDFSR_OFFSET 0x64
38#define NANDF1ECC_OFFSET 0x70
39
40/* 4-bit ECC syndrome registers */
41#define NAND_4BIT_ECC_LOAD_OFFSET 0xbc
42#define NAND_4BIT_ECC1_OFFSET 0xc0
43#define NAND_4BIT_ECC2_OFFSET 0xc4
44#define NAND_4BIT_ECC3_OFFSET 0xc8
45#define NAND_4BIT_ECC4_OFFSET 0xcc
46#define NAND_ERR_ADD1_OFFSET 0xd0
47#define NAND_ERR_ADD2_OFFSET 0xd4
48#define NAND_ERR_ERRVAL1_OFFSET 0xd8
49#define NAND_ERR_ERRVAL2_OFFSET 0xdc
50
51/* NOTE: boards don't need to use these address bits
52 * for ALE/CLE unless they support booting from NAND.
53 * They're used unless platform data overrides them.
54 */
55#define MASK_ALE 0x08
56#define MASK_CLE 0x10
57
58struct davinci_nand_pdata { /* platform_data */
59 uint32_t mask_ale;
60 uint32_t mask_cle;
61
62 /* for packages using two chipselects */
63 uint32_t mask_chipsel;
64
65 /* board's default static partition info */
66 struct mtd_partition *parts;
67 unsigned nr_parts;
68
69 /* none == NAND_ECC_NONE (strongly *not* advised!!)
70 * soft == NAND_ECC_SOFT
71 * 1-bit == NAND_ECC_HW
72 * 4-bit == NAND_ECC_HW_SYNDROME (not on all chips)
73 */
74 nand_ecc_modes_t ecc_mode;
75
76 /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
77 unsigned options;
78};
79
80#endif /* __ARCH_ARM_DAVINCI_NAND_H */
diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c
index 69680784448a..2429b79f6da2 100644
--- a/arch/arm/mach-davinci/usb.c
+++ b/arch/arm/mach-davinci/usb.c
@@ -64,7 +64,7 @@ static struct resource usb_resources[] = {
64 }, 64 },
65}; 65};
66 66
67static u64 usb_dmamask = DMA_32BIT_MASK; 67static u64 usb_dmamask = DMA_BIT_MASK(32);
68 68
69static struct platform_device usb_dev = { 69static struct platform_device usb_dev = {
70 .name = "musb_hdrc", 70 .name = "musb_hdrc",
@@ -72,7 +72,7 @@ static struct platform_device usb_dev = {
72 .dev = { 72 .dev = {
73 .platform_data = &usb_data, 73 .platform_data = &usb_data,
74 .dma_mask = &usb_dmamask, 74 .dma_mask = &usb_dmamask,
75 .coherent_dma_mask = DMA_32BIT_MASK, 75 .coherent_dma_mask = DMA_BIT_MASK(32),
76 }, 76 },
77 .resource = usb_resources, 77 .resource = usb_resources,
78 .num_resources = ARRAY_SIZE(usb_resources), 78 .num_resources = ARRAY_SIZE(usb_resources),
diff --git a/arch/arm/mach-iop13xx/setup.c b/arch/arm/mach-iop13xx/setup.c
index cfd4d2e6dacd..bee42c609df6 100644
--- a/arch/arm/mach-iop13xx/setup.c
+++ b/arch/arm/mach-iop13xx/setup.c
@@ -307,7 +307,7 @@ static struct resource iop13xx_adma_2_resources[] = {
307 } 307 }
308}; 308};
309 309
310static u64 iop13xx_adma_dmamask = DMA_64BIT_MASK; 310static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(64);
311static struct iop_adma_platform_data iop13xx_adma_0_data = { 311static struct iop_adma_platform_data iop13xx_adma_0_data = {
312 .hw_id = 0, 312 .hw_id = 0,
313 .pool_size = PAGE_SIZE, 313 .pool_size = PAGE_SIZE,
@@ -331,7 +331,7 @@ static struct platform_device iop13xx_adma_0_channel = {
331 .resource = iop13xx_adma_0_resources, 331 .resource = iop13xx_adma_0_resources,
332 .dev = { 332 .dev = {
333 .dma_mask = &iop13xx_adma_dmamask, 333 .dma_mask = &iop13xx_adma_dmamask,
334 .coherent_dma_mask = DMA_64BIT_MASK, 334 .coherent_dma_mask = DMA_BIT_MASK(64),
335 .platform_data = (void *) &iop13xx_adma_0_data, 335 .platform_data = (void *) &iop13xx_adma_0_data,
336 }, 336 },
337}; 337};
@@ -343,7 +343,7 @@ static struct platform_device iop13xx_adma_1_channel = {
343 .resource = iop13xx_adma_1_resources, 343 .resource = iop13xx_adma_1_resources,
344 .dev = { 344 .dev = {
345 .dma_mask = &iop13xx_adma_dmamask, 345 .dma_mask = &iop13xx_adma_dmamask,
346 .coherent_dma_mask = DMA_64BIT_MASK, 346 .coherent_dma_mask = DMA_BIT_MASK(64),
347 .platform_data = (void *) &iop13xx_adma_1_data, 347 .platform_data = (void *) &iop13xx_adma_1_data,
348 }, 348 },
349}; 349};
@@ -355,7 +355,7 @@ static struct platform_device iop13xx_adma_2_channel = {
355 .resource = iop13xx_adma_2_resources, 355 .resource = iop13xx_adma_2_resources,
356 .dev = { 356 .dev = {
357 .dma_mask = &iop13xx_adma_dmamask, 357 .dma_mask = &iop13xx_adma_dmamask,
358 .coherent_dma_mask = DMA_64BIT_MASK, 358 .coherent_dma_mask = DMA_BIT_MASK(64),
359 .platform_data = (void *) &iop13xx_adma_2_data, 359 .platform_data = (void *) &iop13xx_adma_2_data,
360 }, 360 },
361}; 361};
diff --git a/arch/arm/mach-iop13xx/tpmi.c b/arch/arm/mach-iop13xx/tpmi.c
index c6af1e1bee32..6fdad7a0425a 100644
--- a/arch/arm/mach-iop13xx/tpmi.c
+++ b/arch/arm/mach-iop13xx/tpmi.c
@@ -151,7 +151,7 @@ static struct resource iop13xx_tpmi_3_resources[] = {
151 } 151 }
152}; 152};
153 153
154u64 iop13xx_tpmi_mask = DMA_64BIT_MASK; 154u64 iop13xx_tpmi_mask = DMA_BIT_MASK(64);
155static struct platform_device iop13xx_tpmi_0_device = { 155static struct platform_device iop13xx_tpmi_0_device = {
156 .name = "iop-tpmi", 156 .name = "iop-tpmi",
157 .id = 0, 157 .id = 0,
@@ -159,7 +159,7 @@ static struct platform_device iop13xx_tpmi_0_device = {
159 .resource = iop13xx_tpmi_0_resources, 159 .resource = iop13xx_tpmi_0_resources,
160 .dev = { 160 .dev = {
161 .dma_mask = &iop13xx_tpmi_mask, 161 .dma_mask = &iop13xx_tpmi_mask,
162 .coherent_dma_mask = DMA_64BIT_MASK, 162 .coherent_dma_mask = DMA_BIT_MASK(64),
163 }, 163 },
164}; 164};
165 165
@@ -170,7 +170,7 @@ static struct platform_device iop13xx_tpmi_1_device = {
170 .resource = iop13xx_tpmi_1_resources, 170 .resource = iop13xx_tpmi_1_resources,
171 .dev = { 171 .dev = {
172 .dma_mask = &iop13xx_tpmi_mask, 172 .dma_mask = &iop13xx_tpmi_mask,
173 .coherent_dma_mask = DMA_64BIT_MASK, 173 .coherent_dma_mask = DMA_BIT_MASK(64),
174 }, 174 },
175}; 175};
176 176
@@ -181,7 +181,7 @@ static struct platform_device iop13xx_tpmi_2_device = {
181 .resource = iop13xx_tpmi_2_resources, 181 .resource = iop13xx_tpmi_2_resources,
182 .dev = { 182 .dev = {
183 .dma_mask = &iop13xx_tpmi_mask, 183 .dma_mask = &iop13xx_tpmi_mask,
184 .coherent_dma_mask = DMA_64BIT_MASK, 184 .coherent_dma_mask = DMA_BIT_MASK(64),
185 }, 185 },
186}; 186};
187 187
@@ -192,7 +192,7 @@ static struct platform_device iop13xx_tpmi_3_device = {
192 .resource = iop13xx_tpmi_3_resources, 192 .resource = iop13xx_tpmi_3_resources,
193 .dev = { 193 .dev = {
194 .dma_mask = &iop13xx_tpmi_mask, 194 .dma_mask = &iop13xx_tpmi_mask,
195 .coherent_dma_mask = DMA_64BIT_MASK, 195 .coherent_dma_mask = DMA_BIT_MASK(64),
196 }, 196 },
197}; 197};
198 198
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
index 3d2fae846512..16dc9ea08393 100644
--- a/arch/arm/mach-kirkwood/common.c
+++ b/arch/arm/mach-kirkwood/common.c
@@ -508,7 +508,7 @@ static struct mv_xor_platform_shared_data kirkwood_xor_shared_data = {
508 .dram = &kirkwood_mbus_dram_info, 508 .dram = &kirkwood_mbus_dram_info,
509}; 509};
510 510
511static u64 kirkwood_xor_dmamask = DMA_32BIT_MASK; 511static u64 kirkwood_xor_dmamask = DMA_BIT_MASK(32);
512 512
513 513
514/***************************************************************************** 514/*****************************************************************************
@@ -559,7 +559,7 @@ static struct platform_device kirkwood_xor00_channel = {
559 .resource = kirkwood_xor00_resources, 559 .resource = kirkwood_xor00_resources,
560 .dev = { 560 .dev = {
561 .dma_mask = &kirkwood_xor_dmamask, 561 .dma_mask = &kirkwood_xor_dmamask,
562 .coherent_dma_mask = DMA_64BIT_MASK, 562 .coherent_dma_mask = DMA_BIT_MASK(64),
563 .platform_data = (void *)&kirkwood_xor00_data, 563 .platform_data = (void *)&kirkwood_xor00_data,
564 }, 564 },
565}; 565};
@@ -585,7 +585,7 @@ static struct platform_device kirkwood_xor01_channel = {
585 .resource = kirkwood_xor01_resources, 585 .resource = kirkwood_xor01_resources,
586 .dev = { 586 .dev = {
587 .dma_mask = &kirkwood_xor_dmamask, 587 .dma_mask = &kirkwood_xor_dmamask,
588 .coherent_dma_mask = DMA_64BIT_MASK, 588 .coherent_dma_mask = DMA_BIT_MASK(64),
589 .platform_data = (void *)&kirkwood_xor01_data, 589 .platform_data = (void *)&kirkwood_xor01_data,
590 }, 590 },
591}; 591};
@@ -657,7 +657,7 @@ static struct platform_device kirkwood_xor10_channel = {
657 .resource = kirkwood_xor10_resources, 657 .resource = kirkwood_xor10_resources,
658 .dev = { 658 .dev = {
659 .dma_mask = &kirkwood_xor_dmamask, 659 .dma_mask = &kirkwood_xor_dmamask,
660 .coherent_dma_mask = DMA_64BIT_MASK, 660 .coherent_dma_mask = DMA_BIT_MASK(64),
661 .platform_data = (void *)&kirkwood_xor10_data, 661 .platform_data = (void *)&kirkwood_xor10_data,
662 }, 662 },
663}; 663};
@@ -683,7 +683,7 @@ static struct platform_device kirkwood_xor11_channel = {
683 .resource = kirkwood_xor11_resources, 683 .resource = kirkwood_xor11_resources,
684 .dev = { 684 .dev = {
685 .dma_mask = &kirkwood_xor_dmamask, 685 .dma_mask = &kirkwood_xor_dmamask,
686 .coherent_dma_mask = DMA_64BIT_MASK, 686 .coherent_dma_mask = DMA_BIT_MASK(64),
687 .platform_data = (void *)&kirkwood_xor11_data, 687 .platform_data = (void *)&kirkwood_xor11_data,
688 }, 688 },
689}; 689};
diff --git a/arch/arm/mach-mx1/Makefile b/arch/arm/mach-mx1/Makefile
index 82f1309568ef..7f86fe073ec6 100644
--- a/arch/arm/mach-mx1/Makefile
+++ b/arch/arm/mach-mx1/Makefile
@@ -6,6 +6,9 @@
6 6
7obj-y += generic.o clock.o devices.o 7obj-y += generic.o clock.o devices.o
8 8
9# Support for CMOS sensor interface
10obj-$(CONFIG_MX1_VIDEO) += ksym_mx1.o mx1_camera_fiq.o
11
9# Specific board support 12# Specific board support
10obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o 13obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o
11obj-$(CONFIG_MACH_SCB9328) += scb9328.o \ No newline at end of file 14obj-$(CONFIG_MACH_SCB9328) += scb9328.o \ No newline at end of file
diff --git a/arch/arm/mach-mx1/devices.c b/arch/arm/mach-mx1/devices.c
index 97f42d96d7a1..76d1ffb48079 100644
--- a/arch/arm/mach-mx1/devices.c
+++ b/arch/arm/mach-mx1/devices.c
@@ -44,7 +44,7 @@ static struct resource imx_csi_resources[] = {
44static u64 imx_csi_dmamask = 0xffffffffUL; 44static u64 imx_csi_dmamask = 0xffffffffUL;
45 45
46struct platform_device imx_csi_device = { 46struct platform_device imx_csi_device = {
47 .name = "imx-csi", 47 .name = "mx1-camera",
48 .id = 0, /* This is used to put cameras on this interface */ 48 .id = 0, /* This is used to put cameras on this interface */
49 .dev = { 49 .dev = {
50 .dma_mask = &imx_csi_dmamask, 50 .dma_mask = &imx_csi_dmamask,
diff --git a/arch/arm/mach-mx1/ksym_mx1.c b/arch/arm/mach-mx1/ksym_mx1.c
new file mode 100644
index 000000000000..b09ee12a4ff0
--- /dev/null
+++ b/arch/arm/mach-mx1/ksym_mx1.c
@@ -0,0 +1,18 @@
1/*
2 * Exported ksyms of ARCH_MX1
3 *
4 * Copyright (C) 2008, Darius Augulis <augulis.darius@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/platform_device.h>
12#include <linux/module.h>
13
14#include <mach/mx1_camera.h>
15
16/* IMX camera FIQ handler */
17EXPORT_SYMBOL(mx1_camera_sof_fiq_start);
18EXPORT_SYMBOL(mx1_camera_sof_fiq_end);
diff --git a/arch/arm/mach-mx1/mx1_camera_fiq.S b/arch/arm/mach-mx1/mx1_camera_fiq.S
new file mode 100644
index 000000000000..9c69aa65bf17
--- /dev/null
+++ b/arch/arm/mach-mx1/mx1_camera_fiq.S
@@ -0,0 +1,35 @@
1/*
2 * Copyright (C) 2008 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
3 *
4 * Based on linux/arch/arm/lib/floppydma.S
5 * Copyright (C) 1995, 1996 Russell King
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#include <linux/linkage.h>
12#include <asm/assembler.h>
13
14 .text
15 .global mx1_camera_sof_fiq_end
16 .global mx1_camera_sof_fiq_start
17mx1_camera_sof_fiq_start:
18 @ enable dma
19 ldr r12, [r9]
20 orr r12, r12, #0x00000001
21 str r12, [r9]
22 @ unmask DMA interrupt
23 ldr r12, [r8]
24 bic r12, r12, r13
25 str r12, [r8]
26 @ disable SOF interrupt
27 ldr r12, [r10]
28 bic r12, r12, #0x00010000
29 str r12, [r10]
30 @ clear SOF flag
31 mov r12, #0x00010000
32 str r12, [r11]
33 @ return from FIQ
34 subs pc, lr, #4
35mx1_camera_sof_fiq_end:
diff --git a/arch/arm/mach-mx3/clock.c b/arch/arm/mach-mx3/clock.c
index ca46f4801c3d..9957a11533a4 100644
--- a/arch/arm/mach-mx3/clock.c
+++ b/arch/arm/mach-mx3/clock.c
@@ -533,7 +533,7 @@ static struct clk_lookup lookups[] __initdata = {
533 _REGISTER_CLOCK(NULL, "kpp", kpp_clk) 533 _REGISTER_CLOCK(NULL, "kpp", kpp_clk)
534 _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1) 534 _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1)
535 _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2) 535 _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2)
536 _REGISTER_CLOCK("mx3-camera.0", "csi", csi_clk) 536 _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk)
537 _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) 537 _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk)
538 _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) 538 _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk)
539 _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) 539 _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c
index 68cc3efae567..6af99ddabdfb 100644
--- a/arch/arm/mach-orion5x/common.c
+++ b/arch/arm/mach-orion5x/common.c
@@ -463,7 +463,7 @@ static struct platform_device orion5x_xor_shared = {
463 .resource = orion5x_xor_shared_resources, 463 .resource = orion5x_xor_shared_resources,
464}; 464};
465 465
466static u64 orion5x_xor_dmamask = DMA_32BIT_MASK; 466static u64 orion5x_xor_dmamask = DMA_BIT_MASK(32);
467 467
468static struct resource orion5x_xor0_resources[] = { 468static struct resource orion5x_xor0_resources[] = {
469 [0] = { 469 [0] = {
@@ -486,7 +486,7 @@ static struct platform_device orion5x_xor0_channel = {
486 .resource = orion5x_xor0_resources, 486 .resource = orion5x_xor0_resources,
487 .dev = { 487 .dev = {
488 .dma_mask = &orion5x_xor_dmamask, 488 .dma_mask = &orion5x_xor_dmamask,
489 .coherent_dma_mask = DMA_64BIT_MASK, 489 .coherent_dma_mask = DMA_BIT_MASK(64),
490 .platform_data = (void *)&orion5x_xor0_data, 490 .platform_data = (void *)&orion5x_xor0_data,
491 }, 491 },
492}; 492};
@@ -512,7 +512,7 @@ static struct platform_device orion5x_xor1_channel = {
512 .resource = orion5x_xor1_resources, 512 .resource = orion5x_xor1_resources,
513 .dev = { 513 .dev = {
514 .dma_mask = &orion5x_xor_dmamask, 514 .dma_mask = &orion5x_xor_dmamask,
515 .coherent_dma_mask = DMA_64BIT_MASK, 515 .coherent_dma_mask = DMA_BIT_MASK(64),
516 .platform_data = (void *)&orion5x_xor1_data, 516 .platform_data = (void *)&orion5x_xor1_data,
517 }, 517 },
518}; 518};
diff --git a/arch/arm/mach-pxa/include/mach/pxa2xx_spi.h b/arch/arm/mach-pxa/include/mach/pxa2xx_spi.h
index 2206cb61a9f9..b87cecd9bbdc 100644
--- a/arch/arm/mach-pxa/include/mach/pxa2xx_spi.h
+++ b/arch/arm/mach-pxa/include/mach/pxa2xx_spi.h
@@ -38,6 +38,7 @@ struct pxa2xx_spi_chip {
38 u8 dma_burst_size; 38 u8 dma_burst_size;
39 u32 timeout; 39 u32 timeout;
40 u8 enable_loopback; 40 u8 enable_loopback;
41 int gpio_cs;
41 void (*cs_control)(u32 command); 42 void (*cs_control)(u32 command);
42}; 43};
43 44
diff --git a/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h b/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h
index eb35fca9aea5..3478eae32d8a 100644
--- a/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h
+++ b/arch/arm/mach-pxa/include/mach/pxa3xx_nand.h
@@ -49,6 +49,9 @@ struct pxa3xx_nand_platform_data {
49 */ 49 */
50 int enable_arbiter; 50 int enable_arbiter;
51 51
52 /* allow platform code to keep OBM/bootloader defined NFC config */
53 int keep_config;
54
52 const struct mtd_partition *parts; 55 const struct mtd_partition *parts;
53 unsigned int nr_parts; 56 unsigned int nr_parts;
54 57
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c
index 01bd76725b92..4389c160f7d0 100644
--- a/arch/arm/mach-s3c2410/mach-bast.c
+++ b/arch/arm/mach-s3c2410/mach-bast.c
@@ -409,8 +409,7 @@ static struct platform_device bast_sio = {
409static struct s3c2410_platform_i2c __initdata bast_i2c_info = { 409static struct s3c2410_platform_i2c __initdata bast_i2c_info = {
410 .flags = 0, 410 .flags = 0,
411 .slave_addr = 0x10, 411 .slave_addr = 0x10,
412 .bus_freq = 100*1000, 412 .frequency = 100*1000,
413 .max_freq = 130*1000,
414}; 413};
415 414
416/* Asix AX88796 10/100 ethernet controller */ 415/* Asix AX88796 10/100 ethernet controller */
diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c
index 05a5e877b49b..2b83f8707710 100644
--- a/arch/arm/mach-s3c2410/mach-n30.c
+++ b/arch/arm/mach-s3c2410/mach-n30.c
@@ -340,8 +340,7 @@ static struct platform_device *n35_devices[] __initdata = {
340static struct s3c2410_platform_i2c n30_i2ccfg = { 340static struct s3c2410_platform_i2c n30_i2ccfg = {
341 .flags = 0, 341 .flags = 0,
342 .slave_addr = 0x10, 342 .slave_addr = 0x10,
343 .bus_freq = 10*1000, 343 .frequency = 10*1000,
344 .max_freq = 10*1000,
345}; 344};
346 345
347/* Lots of hardcoded stuff, but it sets up the hardware in a useful 346/* Lots of hardcoded stuff, but it sets up the hardware in a useful
diff --git a/arch/arm/mach-s3c2412/mach-jive.c b/arch/arm/mach-s3c2412/mach-jive.c
index 72c266aee141..332bd3263eaf 100644
--- a/arch/arm/mach-s3c2412/mach-jive.c
+++ b/arch/arm/mach-s3c2412/mach-jive.c
@@ -453,8 +453,7 @@ static struct spi_board_info __initdata jive_spi_devs[] = {
453/* I2C bus and device configuration. */ 453/* I2C bus and device configuration. */
454 454
455static struct s3c2410_platform_i2c jive_i2c_cfg __initdata = { 455static struct s3c2410_platform_i2c jive_i2c_cfg __initdata = {
456 .max_freq = 80 * 1000, 456 .frequency = 80 * 1000,
457 .bus_freq = 50 * 1000,
458 .flags = S3C_IICFLG_FILTER, 457 .flags = S3C_IICFLG_FILTER,
459 .sda_delay = 2, 458 .sda_delay = 2,
460}; 459};
diff --git a/arch/arm/plat-iop/adma.c b/arch/arm/plat-iop/adma.c
index f72420821619..3c127aabe214 100644
--- a/arch/arm/plat-iop/adma.c
+++ b/arch/arm/plat-iop/adma.c
@@ -119,7 +119,7 @@ static struct resource iop3xx_aau_resources[] = {
119 } 119 }
120}; 120};
121 121
122static u64 iop3xx_adma_dmamask = DMA_32BIT_MASK; 122static u64 iop3xx_adma_dmamask = DMA_BIT_MASK(32);
123 123
124static struct iop_adma_platform_data iop3xx_dma_0_data = { 124static struct iop_adma_platform_data iop3xx_dma_0_data = {
125 .hw_id = DMA0_ID, 125 .hw_id = DMA0_ID,
@@ -143,7 +143,7 @@ struct platform_device iop3xx_dma_0_channel = {
143 .resource = iop3xx_dma_0_resources, 143 .resource = iop3xx_dma_0_resources,
144 .dev = { 144 .dev = {
145 .dma_mask = &iop3xx_adma_dmamask, 145 .dma_mask = &iop3xx_adma_dmamask,
146 .coherent_dma_mask = DMA_64BIT_MASK, 146 .coherent_dma_mask = DMA_BIT_MASK(64),
147 .platform_data = (void *) &iop3xx_dma_0_data, 147 .platform_data = (void *) &iop3xx_dma_0_data,
148 }, 148 },
149}; 149};
@@ -155,7 +155,7 @@ struct platform_device iop3xx_dma_1_channel = {
155 .resource = iop3xx_dma_1_resources, 155 .resource = iop3xx_dma_1_resources,
156 .dev = { 156 .dev = {
157 .dma_mask = &iop3xx_adma_dmamask, 157 .dma_mask = &iop3xx_adma_dmamask,
158 .coherent_dma_mask = DMA_64BIT_MASK, 158 .coherent_dma_mask = DMA_BIT_MASK(64),
159 .platform_data = (void *) &iop3xx_dma_1_data, 159 .platform_data = (void *) &iop3xx_dma_1_data,
160 }, 160 },
161}; 161};
@@ -167,7 +167,7 @@ struct platform_device iop3xx_aau_channel = {
167 .resource = iop3xx_aau_resources, 167 .resource = iop3xx_aau_resources,
168 .dev = { 168 .dev = {
169 .dma_mask = &iop3xx_adma_dmamask, 169 .dma_mask = &iop3xx_adma_dmamask,
170 .coherent_dma_mask = DMA_64BIT_MASK, 170 .coherent_dma_mask = DMA_BIT_MASK(64),
171 .platform_data = (void *) &iop3xx_aau_data, 171 .platform_data = (void *) &iop3xx_aau_data,
172 }, 172 },
173}; 173};
diff --git a/arch/arm/plat-mxc/include/mach/i2c.h b/arch/arm/plat-mxc/include/mach/i2c.h
new file mode 100644
index 000000000000..4a5dc5c6d8e8
--- /dev/null
+++ b/arch/arm/plat-mxc/include/mach/i2c.h
@@ -0,0 +1,25 @@
1/*
2 * i2c.h - i.MX I2C driver header file
3 *
4 * Copyright (c) 2008, Darius Augulis <augulis.darius@gmail.com>
5 *
6 * This file is released under the GPLv2
7 */
8
9#ifndef __ASM_ARCH_I2C_H_
10#define __ASM_ARCH_I2C_H_
11
12/**
13 * struct imxi2c_platform_data - structure of platform data for MXC I2C driver
14 * @init: Initialise gpio's and other board specific things
15 * @exit: Free everything initialised by @init
16 * @bitrate: Bus speed measured in Hz
17 *
18 **/
19struct imxi2c_platform_data {
20 int (*init)(struct device *dev);
21 void (*exit)(struct device *dev);
22 int bitrate;
23};
24
25#endif /* __ASM_ARCH_I2C_H_ */
diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h
index e0783e619580..eca37d09f3f8 100644
--- a/arch/arm/plat-mxc/include/mach/memory.h
+++ b/arch/arm/plat-mxc/include/mach/memory.h
@@ -24,4 +24,12 @@
24#define PHYS_OFFSET UL(0x80000000) 24#define PHYS_OFFSET UL(0x80000000)
25#endif 25#endif
26 26
27#if defined(CONFIG_MX1_VIDEO)
28/*
29 * Increase size of DMA-consistent memory region.
30 * This is required for i.MX camera driver to capture at least four VGA frames.
31 */
32#define CONSISTENT_DMA_SIZE SZ_4M
33#endif /* CONFIG_MX1_VIDEO */
34
27#endif /* __ASM_ARCH_MXC_MEMORY_H__ */ 35#endif /* __ASM_ARCH_MXC_MEMORY_H__ */
diff --git a/arch/arm/plat-mxc/include/mach/mx1_camera.h b/arch/arm/plat-mxc/include/mach/mx1_camera.h
new file mode 100644
index 000000000000..4fd6c70314b4
--- /dev/null
+++ b/arch/arm/plat-mxc/include/mach/mx1_camera.h
@@ -0,0 +1,35 @@
1/*
2 * mx1_camera.h - i.MX1/i.MXL camera driver header file
3 *
4 * Copyright (c) 2008, Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
5 * Copyright (C) 2009, Darius Augulis <augulis.darius@gmail.com>
6 *
7 * Based on PXA camera.h file:
8 * Copyright (C) 2003, Intel Corporation
9 * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#ifndef __ASM_ARCH_CAMERA_H_
17#define __ASM_ARCH_CAMERA_H_
18
19#define MX1_CAMERA_DATA_HIGH 1
20#define MX1_CAMERA_PCLK_RISING 2
21#define MX1_CAMERA_VSYNC_HIGH 4
22
23extern unsigned char mx1_camera_sof_fiq_start, mx1_camera_sof_fiq_end;
24
25/**
26 * struct mx1_camera_pdata - i.MX1/i.MXL camera platform data
27 * @mclk_10khz: master clock frequency in 10kHz units
28 * @flags: MX1 camera platform flags
29 */
30struct mx1_camera_pdata {
31 unsigned long mclk_10khz;
32 unsigned long flags;
33};
34
35#endif /* __ASM_ARCH_CAMERA_H_ */
diff --git a/arch/arm/plat-s3c/dev-i2c0.c b/arch/arm/plat-s3c/dev-i2c0.c
index fe327074037e..428372868fbb 100644
--- a/arch/arm/plat-s3c/dev-i2c0.c
+++ b/arch/arm/plat-s3c/dev-i2c0.c
@@ -1,6 +1,6 @@
1/* linux/arch/arm/plat-s3c/dev-i2c0.c 1/* linux/arch/arm/plat-s3c/dev-i2c0.c
2 * 2 *
3 * Copyright 2008 Simtec Electronics 3 * Copyright 2008,2009 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk> 4 * Ben Dooks <ben@simtec.co.uk>
5 * http://armlinux.simtec.co.uk/ 5 * http://armlinux.simtec.co.uk/
6 * 6 *
@@ -50,9 +50,8 @@ struct platform_device s3c_device_i2c0 = {
50static struct s3c2410_platform_i2c default_i2c_data0 __initdata = { 50static struct s3c2410_platform_i2c default_i2c_data0 __initdata = {
51 .flags = 0, 51 .flags = 0,
52 .slave_addr = 0x10, 52 .slave_addr = 0x10,
53 .bus_freq = 100*1000, 53 .frequency = 100*1000,
54 .max_freq = 400*1000, 54 .sda_delay = 100,
55 .sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
56}; 55};
57 56
58void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd) 57void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd)
diff --git a/arch/arm/plat-s3c/dev-i2c1.c b/arch/arm/plat-s3c/dev-i2c1.c
index 2387fbf57af6..8349c462788c 100644
--- a/arch/arm/plat-s3c/dev-i2c1.c
+++ b/arch/arm/plat-s3c/dev-i2c1.c
@@ -1,6 +1,6 @@
1/* linux/arch/arm/plat-s3c/dev-i2c1.c 1/* linux/arch/arm/plat-s3c/dev-i2c1.c
2 * 2 *
3 * Copyright 2008 Simtec Electronics 3 * Copyright 2008,2009 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk> 4 * Ben Dooks <ben@simtec.co.uk>
5 * http://armlinux.simtec.co.uk/ 5 * http://armlinux.simtec.co.uk/
6 * 6 *
@@ -47,9 +47,8 @@ static struct s3c2410_platform_i2c default_i2c_data1 __initdata = {
47 .flags = 0, 47 .flags = 0,
48 .bus_num = 1, 48 .bus_num = 1,
49 .slave_addr = 0x10, 49 .slave_addr = 0x10,
50 .bus_freq = 100*1000, 50 .frequency = 100*1000,
51 .max_freq = 400*1000, 51 .sda_delay = 100,
52 .sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
53}; 52};
54 53
55void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd) 54void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd)
diff --git a/arch/arm/plat-s3c/include/plat/iic.h b/arch/arm/plat-s3c/include/plat/iic.h
index dc1dfcb9bc6c..67450f115748 100644
--- a/arch/arm/plat-s3c/include/plat/iic.h
+++ b/arch/arm/plat-s3c/include/plat/iic.h
@@ -1,9 +1,9 @@
1/* arch/arm/mach-s3c2410/include/mach/iic.h 1/* arch/arm/plat-s3c/include/plat/iic.h
2 * 2 *
3 * Copyright (c) 2004 Simtec Electronics 3 * Copyright 2004,2009 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk> 4 * Ben Dooks <ben@simtec.co.uk>
5 * 5 *
6 * S3C2410 - I2C Controller platfrom_device info 6 * S3C - I2C Controller platform_device info
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
@@ -15,19 +15,24 @@
15 15
16#define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */ 16#define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */
17 17
18/* Notes: 18/**
19 * 1) All frequencies are expressed in Hz 19 * struct s3c2410_platform_i2c - Platform data for s3c I2C.
20 * 2) A value of zero is `do not care` 20 * @bus_num: The bus number to use (if possible).
21*/ 21 * @flags: Any flags for the I2C bus (E.g. S3C_IICFLK_FILTER).
22 22 * @slave_addr: The I2C address for the slave device (if enabled).
23 * @frequency: The desired frequency in Hz of the bus. This is
24 * guaranteed to not be exceeded. If the caller does
25 * not care, use zero and the driver will select a
26 * useful default.
27 * @sda_delay: The delay (in ns) applied to SDA edges.
28 * @cfg_gpio: A callback to configure the pins for I2C operation.
29 */
23struct s3c2410_platform_i2c { 30struct s3c2410_platform_i2c {
24 int bus_num; /* bus number to use */ 31 int bus_num;
25 unsigned int flags; 32 unsigned int flags;
26 unsigned int slave_addr; /* slave address for controller */ 33 unsigned int slave_addr;
27 unsigned long bus_freq; /* standard bus frequency */ 34 unsigned long frequency;
28 unsigned long max_freq; /* max frequency for the bus */ 35 unsigned int sda_delay;
29 unsigned long min_freq; /* min frequency for the bus */
30 unsigned int sda_delay; /* pclks (s3c2440 only) */
31 36
32 void (*cfg_gpio)(struct platform_device *dev); 37 void (*cfg_gpio)(struct platform_device *dev);
33}; 38};
diff --git a/arch/avr32/boards/hammerhead/flash.c b/arch/avr32/boards/hammerhead/flash.c
index 559bbcb03f9b..776c3cb9b6e4 100644
--- a/arch/avr32/boards/hammerhead/flash.c
+++ b/arch/avr32/boards/hammerhead/flash.c
@@ -280,13 +280,13 @@ static struct resource hh_fpga0_resource[] = {
280 }, 280 },
281}; 281};
282 282
283static u64 hh_fpga0_dma_mask = DMA_32BIT_MASK; 283static u64 hh_fpga0_dma_mask = DMA_BIT_MASK(32);
284static struct platform_device hh_fpga0_device = { 284static struct platform_device hh_fpga0_device = {
285 .name = "hh_fpga", 285 .name = "hh_fpga",
286 .id = 0, 286 .id = 0,
287 .dev = { 287 .dev = {
288 .dma_mask = &hh_fpga0_dma_mask, 288 .dma_mask = &hh_fpga0_dma_mask,
289 .coherent_dma_mask = DMA_32BIT_MASK, 289 .coherent_dma_mask = DMA_BIT_MASK(32),
290 }, 290 },
291 .resource = hh_fpga0_resource, 291 .resource = hh_fpga0_resource,
292 .num_resources = ARRAY_SIZE(hh_fpga0_resource), 292 .num_resources = ARRAY_SIZE(hh_fpga0_resource),
diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c
index 7cc653798327..eb9d4dc2e86d 100644
--- a/arch/avr32/mach-at32ap/at32ap700x.c
+++ b/arch/avr32/mach-at32ap/at32ap700x.c
@@ -60,26 +60,26 @@
60 * don't ... tc, smc, pio, rtc, watchdog, pwm, ps2, and more. 60 * don't ... tc, smc, pio, rtc, watchdog, pwm, ps2, and more.
61 */ 61 */
62#define DEFINE_DEV(_name, _id) \ 62#define DEFINE_DEV(_name, _id) \
63static u64 _name##_id##_dma_mask = DMA_32BIT_MASK; \ 63static u64 _name##_id##_dma_mask = DMA_BIT_MASK(32); \
64static struct platform_device _name##_id##_device = { \ 64static struct platform_device _name##_id##_device = { \
65 .name = #_name, \ 65 .name = #_name, \
66 .id = _id, \ 66 .id = _id, \
67 .dev = { \ 67 .dev = { \
68 .dma_mask = &_name##_id##_dma_mask, \ 68 .dma_mask = &_name##_id##_dma_mask, \
69 .coherent_dma_mask = DMA_32BIT_MASK, \ 69 .coherent_dma_mask = DMA_BIT_MASK(32), \
70 }, \ 70 }, \
71 .resource = _name##_id##_resource, \ 71 .resource = _name##_id##_resource, \
72 .num_resources = ARRAY_SIZE(_name##_id##_resource), \ 72 .num_resources = ARRAY_SIZE(_name##_id##_resource), \
73} 73}
74#define DEFINE_DEV_DATA(_name, _id) \ 74#define DEFINE_DEV_DATA(_name, _id) \
75static u64 _name##_id##_dma_mask = DMA_32BIT_MASK; \ 75static u64 _name##_id##_dma_mask = DMA_BIT_MASK(32); \
76static struct platform_device _name##_id##_device = { \ 76static struct platform_device _name##_id##_device = { \
77 .name = #_name, \ 77 .name = #_name, \
78 .id = _id, \ 78 .id = _id, \
79 .dev = { \ 79 .dev = { \
80 .dma_mask = &_name##_id##_dma_mask, \ 80 .dma_mask = &_name##_id##_dma_mask, \
81 .platform_data = &_name##_id##_data, \ 81 .platform_data = &_name##_id##_data, \
82 .coherent_dma_mask = DMA_32BIT_MASK, \ 82 .coherent_dma_mask = DMA_BIT_MASK(32), \
83 }, \ 83 }, \
84 .resource = _name##_id##_resource, \ 84 .resource = _name##_id##_resource, \
85 .num_resources = ARRAY_SIZE(_name##_id##_resource), \ 85 .num_resources = ARRAY_SIZE(_name##_id##_resource), \
diff --git a/arch/blackfin/include/asm/bfin5xx_spi.h b/arch/blackfin/include/asm/bfin5xx_spi.h
index 0292d58f9362..aaeb4df10d57 100644
--- a/arch/blackfin/include/asm/bfin5xx_spi.h
+++ b/arch/blackfin/include/asm/bfin5xx_spi.h
@@ -11,6 +11,8 @@
11#ifndef _SPI_CHANNEL_H_ 11#ifndef _SPI_CHANNEL_H_
12#define _SPI_CHANNEL_H_ 12#define _SPI_CHANNEL_H_
13 13
14#define MIN_SPI_BAUD_VAL 2
15
14#define SPI_READ 0 16#define SPI_READ 0
15#define SPI_WRITE 1 17#define SPI_WRITE 1
16 18
@@ -122,6 +124,9 @@ struct bfin5xx_spi_chip {
122 u8 bits_per_word; 124 u8 bits_per_word;
123 u8 cs_change_per_word; 125 u8 cs_change_per_word;
124 u16 cs_chg_udelay; /* Some devices require 16-bit delays */ 126 u16 cs_chg_udelay; /* Some devices require 16-bit delays */
127 u32 cs_gpio;
128 /* Value to send if no TX value is supplied, usually 0x0 or 0xFFFF */
129 u16 idle_tx_val;
125}; 130};
126 131
127#endif /* _SPI_CHANNEL_H_ */ 132#endif /* _SPI_CHANNEL_H_ */
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c
index f49427293ca1..e040e03335ea 100644
--- a/arch/blackfin/kernel/process.c
+++ b/arch/blackfin/kernel/process.c
@@ -337,7 +337,7 @@ int _access_ok(unsigned long addr, unsigned long size)
337 if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end) 337 if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end)
338 return 1; 338 return 1;
339 339
340#ifdef CONFIG_ROMFS_MTD_FS 340#ifdef CONFIG_ROMFS_ON_MTD
341 /* For XIP, allow user space to use pointers within the ROMFS. */ 341 /* For XIP, allow user space to use pointers within the ROMFS. */
342 if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end) 342 if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end)
343 return 1; 343 return 1;
diff --git a/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h
index e21c1c3e4ec7..0fb2ce5d840e 100644
--- a/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h
@@ -53,9 +53,9 @@
53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) 53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) 54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
55 55
56#define UART_GET_CTS(x) gpio_get_value(x->cts_pin) 56#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
57#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1) 57#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
58#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0) 58#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) 59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0) 60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
61 61
@@ -87,6 +87,7 @@
87struct bfin_serial_port { 87struct bfin_serial_port {
88 struct uart_port port; 88 struct uart_port port;
89 unsigned int old_status; 89 unsigned int old_status;
90 int status_irq;
90 unsigned int lsr; 91 unsigned int lsr;
91#ifdef CONFIG_SERIAL_BFIN_DMA 92#ifdef CONFIG_SERIAL_BFIN_DMA
92 int tx_done; 93 int tx_done;
@@ -125,6 +126,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
125struct bfin_serial_res { 126struct bfin_serial_res {
126 unsigned long uart_base_addr; 127 unsigned long uart_base_addr;
127 int uart_irq; 128 int uart_irq;
129 int uart_status_irq;
128#ifdef CONFIG_SERIAL_BFIN_DMA 130#ifdef CONFIG_SERIAL_BFIN_DMA
129 unsigned int uart_tx_dma_channel; 131 unsigned int uart_tx_dma_channel;
130 unsigned int uart_rx_dma_channel; 132 unsigned int uart_rx_dma_channel;
@@ -140,6 +142,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
140 { 142 {
141 0xFFC00400, 143 0xFFC00400,
142 IRQ_UART0_RX, 144 IRQ_UART0_RX,
145 IRQ_UART0_ERROR,
143#ifdef CONFIG_SERIAL_BFIN_DMA 146#ifdef CONFIG_SERIAL_BFIN_DMA
144 CH_UART0_TX, 147 CH_UART0_TX,
145 CH_UART0_RX, 148 CH_UART0_RX,
@@ -154,6 +157,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
154 { 157 {
155 0xFFC02000, 158 0xFFC02000,
156 IRQ_UART1_RX, 159 IRQ_UART1_RX,
160 IRQ_UART1_ERROR,
157#ifdef CONFIG_SERIAL_BFIN_DMA 161#ifdef CONFIG_SERIAL_BFIN_DMA
158 CH_UART1_TX, 162 CH_UART1_TX,
159 CH_UART1_RX, 163 CH_UART1_RX,
diff --git a/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h
index e8c41fd842b5..a625659dd67f 100644
--- a/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h
@@ -53,9 +53,9 @@
53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) 53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) 54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
55 55
56#define UART_GET_CTS(x) gpio_get_value(x->cts_pin) 56#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
57#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1) 57#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
58#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0) 58#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) 59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0) 60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
61 61
@@ -87,6 +87,7 @@
87struct bfin_serial_port { 87struct bfin_serial_port {
88 struct uart_port port; 88 struct uart_port port;
89 unsigned int old_status; 89 unsigned int old_status;
90 int status_irq;
90 unsigned int lsr; 91 unsigned int lsr;
91#ifdef CONFIG_SERIAL_BFIN_DMA 92#ifdef CONFIG_SERIAL_BFIN_DMA
92 int tx_done; 93 int tx_done;
@@ -125,6 +126,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
125struct bfin_serial_res { 126struct bfin_serial_res {
126 unsigned long uart_base_addr; 127 unsigned long uart_base_addr;
127 int uart_irq; 128 int uart_irq;
129 int uart_status_irq;
128#ifdef CONFIG_SERIAL_BFIN_DMA 130#ifdef CONFIG_SERIAL_BFIN_DMA
129 unsigned int uart_tx_dma_channel; 131 unsigned int uart_tx_dma_channel;
130 unsigned int uart_rx_dma_channel; 132 unsigned int uart_rx_dma_channel;
@@ -140,6 +142,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
140 { 142 {
141 0xFFC00400, 143 0xFFC00400,
142 IRQ_UART0_RX, 144 IRQ_UART0_RX,
145 IRQ_UART0_ERROR,
143#ifdef CONFIG_SERIAL_BFIN_DMA 146#ifdef CONFIG_SERIAL_BFIN_DMA
144 CH_UART0_TX, 147 CH_UART0_TX,
145 CH_UART0_RX, 148 CH_UART0_RX,
@@ -154,6 +157,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
154 { 157 {
155 0xFFC02000, 158 0xFFC02000,
156 IRQ_UART1_RX, 159 IRQ_UART1_RX,
160 IRQ_UART1_ERROR,
157#ifdef CONFIG_SERIAL_BFIN_DMA 161#ifdef CONFIG_SERIAL_BFIN_DMA
158 CH_UART1_TX, 162 CH_UART1_TX,
159 CH_UART1_RX, 163 CH_UART1_RX,
@@ -167,29 +171,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
167}; 171};
168 172
169#define DRIVER_NAME "bfin-uart" 173#define DRIVER_NAME "bfin-uart"
170
171static void bfin_serial_hw_init(struct bfin_serial_port *uart)
172{
173
174#ifdef CONFIG_SERIAL_BFIN_UART0
175 peripheral_request(P_UART0_TX, DRIVER_NAME);
176 peripheral_request(P_UART0_RX, DRIVER_NAME);
177#endif
178
179#ifdef CONFIG_SERIAL_BFIN_UART1
180 peripheral_request(P_UART1_TX, DRIVER_NAME);
181 peripheral_request(P_UART1_RX, DRIVER_NAME);
182#endif
183
184#ifdef CONFIG_SERIAL_BFIN_CTSRTS
185 if (uart->cts_pin >= 0) {
186 gpio_request(uart->cts_pin, DRIVER_NAME);
187 gpio_direction_input(uart->cts_pin);
188 }
189
190 if (uart->rts_pin >= 0) {
191 gpio_request(uart->rts_pin, DRIVER_NAME);
192 gpio_direction_output(uart->rts_pin, 0);
193 }
194#endif
195}
diff --git a/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h
index 5f517f53b0fd..a3789d7ccf8c 100644
--- a/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h
@@ -53,9 +53,9 @@
53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) 53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) 54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
55 55
56#define UART_GET_CTS(x) gpio_get_value(x->cts_pin) 56#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
57#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1) 57#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
58#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0) 58#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) 59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0) 60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
61 61
@@ -74,6 +74,7 @@
74struct bfin_serial_port { 74struct bfin_serial_port {
75 struct uart_port port; 75 struct uart_port port;
76 unsigned int old_status; 76 unsigned int old_status;
77 int status_irq;
77 unsigned int lsr; 78 unsigned int lsr;
78#ifdef CONFIG_SERIAL_BFIN_DMA 79#ifdef CONFIG_SERIAL_BFIN_DMA
79 int tx_done; 80 int tx_done;
@@ -116,6 +117,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
116struct bfin_serial_res { 117struct bfin_serial_res {
117 unsigned long uart_base_addr; 118 unsigned long uart_base_addr;
118 int uart_irq; 119 int uart_irq;
120 int uart_status_irq;
119#ifdef CONFIG_SERIAL_BFIN_DMA 121#ifdef CONFIG_SERIAL_BFIN_DMA
120 unsigned int uart_tx_dma_channel; 122 unsigned int uart_tx_dma_channel;
121 unsigned int uart_rx_dma_channel; 123 unsigned int uart_rx_dma_channel;
@@ -130,6 +132,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
130 { 132 {
131 0xFFC00400, 133 0xFFC00400,
132 IRQ_UART_RX, 134 IRQ_UART_RX,
135 IRQ_UART_ERROR,
133#ifdef CONFIG_SERIAL_BFIN_DMA 136#ifdef CONFIG_SERIAL_BFIN_DMA
134 CH_UART_TX, 137 CH_UART_TX,
135 CH_UART_RX, 138 CH_UART_RX,
@@ -142,23 +145,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
142}; 145};
143 146
144#define DRIVER_NAME "bfin-uart" 147#define DRIVER_NAME "bfin-uart"
145
146static void bfin_serial_hw_init(struct bfin_serial_port *uart)
147{
148
149#ifdef CONFIG_SERIAL_BFIN_UART0
150 peripheral_request(P_UART0_TX, DRIVER_NAME);
151 peripheral_request(P_UART0_RX, DRIVER_NAME);
152#endif
153
154#ifdef CONFIG_SERIAL_BFIN_CTSRTS
155 if (uart->cts_pin >= 0) {
156 gpio_request(uart->cts_pin, DRIVER_NAME);
157 gpio_direction_input(uart->cts_pin);
158 }
159 if (uart->rts_pin >= 0) {
160 gpio_request(uart->rts_pin, DRIVER_NAME);
161 gpio_direction_output(uart->rts_pin, 0);
162 }
163#endif
164}
diff --git a/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h
index 9e34700844a2..b86662fb9de7 100644
--- a/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h
@@ -53,9 +53,9 @@
53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) 53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) 54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
55 55
56#define UART_GET_CTS(x) gpio_get_value(x->cts_pin) 56#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
57#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1) 57#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
58#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0) 58#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) 59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0) 60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
61 61
@@ -87,6 +87,7 @@
87struct bfin_serial_port { 87struct bfin_serial_port {
88 struct uart_port port; 88 struct uart_port port;
89 unsigned int old_status; 89 unsigned int old_status;
90 int status_irq;
90 unsigned int lsr; 91 unsigned int lsr;
91#ifdef CONFIG_SERIAL_BFIN_DMA 92#ifdef CONFIG_SERIAL_BFIN_DMA
92 int tx_done; 93 int tx_done;
@@ -99,7 +100,6 @@ struct bfin_serial_port {
99 struct work_struct tx_dma_workqueue; 100 struct work_struct tx_dma_workqueue;
100#endif 101#endif
101#ifdef CONFIG_SERIAL_BFIN_CTSRTS 102#ifdef CONFIG_SERIAL_BFIN_CTSRTS
102 struct timer_list cts_timer;
103 int cts_pin; 103 int cts_pin;
104 int rts_pin; 104 int rts_pin;
105#endif 105#endif
@@ -125,6 +125,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
125struct bfin_serial_res { 125struct bfin_serial_res {
126 unsigned long uart_base_addr; 126 unsigned long uart_base_addr;
127 int uart_irq; 127 int uart_irq;
128 int uart_status_irq;
128#ifdef CONFIG_SERIAL_BFIN_DMA 129#ifdef CONFIG_SERIAL_BFIN_DMA
129 unsigned int uart_tx_dma_channel; 130 unsigned int uart_tx_dma_channel;
130 unsigned int uart_rx_dma_channel; 131 unsigned int uart_rx_dma_channel;
@@ -140,6 +141,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
140 { 141 {
141 0xFFC00400, 142 0xFFC00400,
142 IRQ_UART0_RX, 143 IRQ_UART0_RX,
144 IRQ_UART0_ERROR,
143#ifdef CONFIG_SERIAL_BFIN_DMA 145#ifdef CONFIG_SERIAL_BFIN_DMA
144 CH_UART0_TX, 146 CH_UART0_TX,
145 CH_UART0_RX, 147 CH_UART0_RX,
@@ -154,6 +156,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
154 { 156 {
155 0xFFC02000, 157 0xFFC02000,
156 IRQ_UART1_RX, 158 IRQ_UART1_RX,
159 IRQ_UART1_ERROR,
157#ifdef CONFIG_SERIAL_BFIN_DMA 160#ifdef CONFIG_SERIAL_BFIN_DMA
158 CH_UART1_TX, 161 CH_UART1_TX,
159 CH_UART1_RX, 162 CH_UART1_RX,
@@ -167,29 +170,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
167}; 170};
168 171
169#define DRIVER_NAME "bfin-uart" 172#define DRIVER_NAME "bfin-uart"
170
171static void bfin_serial_hw_init(struct bfin_serial_port *uart)
172{
173
174#ifdef CONFIG_SERIAL_BFIN_UART0
175 peripheral_request(P_UART0_TX, DRIVER_NAME);
176 peripheral_request(P_UART0_RX, DRIVER_NAME);
177#endif
178
179#ifdef CONFIG_SERIAL_BFIN_UART1
180 peripheral_request(P_UART1_TX, DRIVER_NAME);
181 peripheral_request(P_UART1_RX, DRIVER_NAME);
182#endif
183
184#ifdef CONFIG_SERIAL_BFIN_CTSRTS
185 if (uart->cts_pin >= 0) {
186 gpio_request(uart->cts_pin, DRIVER_NAME);
187 gpio_direction_input(uart->cts_pin);
188 }
189
190 if (uart->rts_pin >= 0) {
191 gpio_request(uart->rts_pin, DRIVER_NAME);
192 gpio_direction_output(uart->rts_pin, 0);
193 }
194#endif
195}
diff --git a/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h
index 3c2811ebecdd..c536551eb4b8 100644
--- a/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h
@@ -53,9 +53,9 @@
53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) 53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) 54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
55 55
56#define UART_GET_CTS(x) gpio_get_value(x->cts_pin) 56#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
57#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1) 57#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
58#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0) 58#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) 59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0) 60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
61 61
@@ -87,6 +87,7 @@
87struct bfin_serial_port { 87struct bfin_serial_port {
88 struct uart_port port; 88 struct uart_port port;
89 unsigned int old_status; 89 unsigned int old_status;
90 int status_irq;
90 unsigned int lsr; 91 unsigned int lsr;
91#ifdef CONFIG_SERIAL_BFIN_DMA 92#ifdef CONFIG_SERIAL_BFIN_DMA
92 int tx_done; 93 int tx_done;
@@ -125,6 +126,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
125struct bfin_serial_res { 126struct bfin_serial_res {
126 unsigned long uart_base_addr; 127 unsigned long uart_base_addr;
127 int uart_irq; 128 int uart_irq;
129 int uart_status_irq;
128#ifdef CONFIG_SERIAL_BFIN_DMA 130#ifdef CONFIG_SERIAL_BFIN_DMA
129 unsigned int uart_tx_dma_channel; 131 unsigned int uart_tx_dma_channel;
130 unsigned int uart_rx_dma_channel; 132 unsigned int uart_rx_dma_channel;
@@ -140,6 +142,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
140 { 142 {
141 0xFFC00400, 143 0xFFC00400,
142 IRQ_UART0_RX, 144 IRQ_UART0_RX,
145 IRQ_UART0_ERROR,
143#ifdef CONFIG_SERIAL_BFIN_DMA 146#ifdef CONFIG_SERIAL_BFIN_DMA
144 CH_UART0_TX, 147 CH_UART0_TX,
145 CH_UART0_RX, 148 CH_UART0_RX,
@@ -154,6 +157,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
154 { 157 {
155 0xFFC02000, 158 0xFFC02000,
156 IRQ_UART1_RX, 159 IRQ_UART1_RX,
160 IRQ_UART1_ERROR,
157#ifdef CONFIG_SERIAL_BFIN_DMA 161#ifdef CONFIG_SERIAL_BFIN_DMA
158 CH_UART1_TX, 162 CH_UART1_TX,
159 CH_UART1_RX, 163 CH_UART1_RX,
diff --git a/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h
index c05e79cba257..2d1b5fa3cca0 100644
--- a/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h
@@ -46,41 +46,27 @@
46#define UART_PUT_CHAR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_THR),v) 46#define UART_PUT_CHAR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_THR),v)
47#define UART_PUT_DLL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLL),v) 47#define UART_PUT_DLL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLL),v)
48#define UART_SET_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_SET),v) 48#define UART_SET_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_SET),v)
49#define UART_CLEAR_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_CLEAR),v) 49#define UART_CLEAR_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_CLEAR),v)
50#define UART_PUT_DLH(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLH),v) 50#define UART_PUT_DLH(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLH),v)
51#define UART_PUT_LSR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LSR),v) 51#define UART_PUT_LSR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LSR),v)
52#define UART_PUT_LCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LCR),v) 52#define UART_PUT_LCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LCR),v)
53#define UART_CLEAR_LSR(uart) bfin_write16(((uart)->port.membase + OFFSET_LSR), -1) 53#define UART_CLEAR_LSR(uart) bfin_write16(((uart)->port.membase + OFFSET_LSR), -1)
54#define UART_PUT_GCTL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_GCTL),v) 54#define UART_PUT_GCTL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_GCTL),v)
55#define UART_PUT_MCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_MCR),v) 55#define UART_PUT_MCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_MCR),v)
56#define UART_CLEAR_SCTS(uart) bfin_write16(((uart)->port.membase + OFFSET_MSR),SCTS)
56 57
57#define UART_SET_DLAB(uart) /* MMRs not muxed on BF54x */ 58#define UART_SET_DLAB(uart) /* MMRs not muxed on BF54x */
58#define UART_CLEAR_DLAB(uart) /* MMRs not muxed on BF54x */ 59#define UART_CLEAR_DLAB(uart) /* MMRs not muxed on BF54x */
59 60
60#define UART_GET_CTS(x) (UART_GET_MSR(x) & CTS) 61#define UART_GET_CTS(x) (UART_GET_MSR(x) & CTS)
61#define UART_SET_RTS(x) (UART_PUT_MCR(x, UART_GET_MCR(x) | MRTS)) 62#define UART_DISABLE_RTS(x) UART_PUT_MCR(x, UART_GET_MCR(x) & ~(ARTS|MRTS))
62#define UART_CLEAR_RTS(x) (UART_PUT_MCR(x, UART_GET_MCR(x) & ~MRTS)) 63#define UART_ENABLE_RTS(x) UART_PUT_MCR(x, UART_GET_MCR(x) | MRTS | ARTS)
63#define UART_ENABLE_INTS(x, v) UART_SET_IER(x, v) 64#define UART_ENABLE_INTS(x, v) UART_SET_IER(x, v)
64#define UART_DISABLE_INTS(x) UART_CLEAR_IER(x, 0xF) 65#define UART_DISABLE_INTS(x) UART_CLEAR_IER(x, 0xF)
65 66
66#if defined(CONFIG_BFIN_UART0_CTSRTS) || defined(CONFIG_BFIN_UART2_CTSRTS) 67#if defined(CONFIG_BFIN_UART0_CTSRTS) || defined(CONFIG_BFIN_UART1_CTSRTS) || \
67# define CONFIG_SERIAL_BFIN_CTSRTS 68 defined(CONFIG_BFIN_UART2_CTSRTS) || defined(CONFIG_BFIN_UART3_CTSRTS)
68 69# define CONFIG_SERIAL_BFIN_HARD_CTSRTS
69# ifndef CONFIG_UART0_CTS_PIN
70# define CONFIG_UART0_CTS_PIN -1
71# endif
72
73# ifndef CONFIG_UART0_RTS_PIN
74# define CONFIG_UART0_RTS_PIN -1
75# endif
76
77# ifndef CONFIG_UART2_CTS_PIN
78# define CONFIG_UART2_CTS_PIN -1
79# endif
80
81# ifndef CONFIG_UART2_RTS_PIN
82# define CONFIG_UART2_RTS_PIN -1
83# endif
84#endif 70#endif
85 71
86#define BFIN_UART_TX_FIFO_SIZE 2 72#define BFIN_UART_TX_FIFO_SIZE 2
@@ -91,6 +77,7 @@
91struct bfin_serial_port { 77struct bfin_serial_port {
92 struct uart_port port; 78 struct uart_port port;
93 unsigned int old_status; 79 unsigned int old_status;
80 int status_irq;
94#ifdef CONFIG_SERIAL_BFIN_DMA 81#ifdef CONFIG_SERIAL_BFIN_DMA
95 int tx_done; 82 int tx_done;
96 int tx_count; 83 int tx_count;
@@ -101,23 +88,24 @@ struct bfin_serial_port {
101 unsigned int rx_dma_channel; 88 unsigned int rx_dma_channel;
102 struct work_struct tx_dma_workqueue; 89 struct work_struct tx_dma_workqueue;
103#endif 90#endif
104#ifdef CONFIG_SERIAL_BFIN_CTSRTS 91#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
105 struct timer_list cts_timer; 92 int scts;
106 int cts_pin; 93 int cts_pin;
107 int rts_pin; 94 int rts_pin;
108#endif 95#endif
109}; 96};
110 97
111struct bfin_serial_res { 98struct bfin_serial_res {
112 unsigned long uart_base_addr; 99 unsigned long uart_base_addr;
113 int uart_irq; 100 int uart_irq;
101 int uart_status_irq;
114#ifdef CONFIG_SERIAL_BFIN_DMA 102#ifdef CONFIG_SERIAL_BFIN_DMA
115 unsigned int uart_tx_dma_channel; 103 unsigned int uart_tx_dma_channel;
116 unsigned int uart_rx_dma_channel; 104 unsigned int uart_rx_dma_channel;
117#endif 105#endif
118#ifdef CONFIG_SERIAL_BFIN_CTSRTS 106#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
119 int uart_cts_pin; 107 int uart_cts_pin;
120 int uart_rts_pin; 108 int uart_rts_pin;
121#endif 109#endif
122}; 110};
123 111
@@ -126,13 +114,14 @@ struct bfin_serial_res bfin_serial_resource[] = {
126 { 114 {
127 0xFFC00400, 115 0xFFC00400,
128 IRQ_UART0_RX, 116 IRQ_UART0_RX,
117 IRQ_UART0_ERROR,
129#ifdef CONFIG_SERIAL_BFIN_DMA 118#ifdef CONFIG_SERIAL_BFIN_DMA
130 CH_UART0_TX, 119 CH_UART0_TX,
131 CH_UART0_RX, 120 CH_UART0_RX,
132#endif 121#endif
133#ifdef CONFIG_SERIAL_BFIN_CTSRTS 122#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
134 CONFIG_UART0_CTS_PIN, 123 0,
135 CONFIG_UART0_RTS_PIN, 124 0,
136#endif 125#endif
137 }, 126 },
138#endif 127#endif
@@ -140,13 +129,14 @@ struct bfin_serial_res bfin_serial_resource[] = {
140 { 129 {
141 0xFFC02000, 130 0xFFC02000,
142 IRQ_UART1_RX, 131 IRQ_UART1_RX,
132 IRQ_UART1_ERROR,
143#ifdef CONFIG_SERIAL_BFIN_DMA 133#ifdef CONFIG_SERIAL_BFIN_DMA
144 CH_UART1_TX, 134 CH_UART1_TX,
145 CH_UART1_RX, 135 CH_UART1_RX,
146#endif 136#endif
147#ifdef CONFIG_SERIAL_BFIN_CTSRTS 137#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
148 0, 138 GPIO_PE10,
149 0, 139 GPIO_PE9,
150#endif 140#endif
151 }, 141 },
152#endif 142#endif
@@ -154,13 +144,14 @@ struct bfin_serial_res bfin_serial_resource[] = {
154 { 144 {
155 0xFFC02100, 145 0xFFC02100,
156 IRQ_UART2_RX, 146 IRQ_UART2_RX,
147 IRQ_UART2_ERROR,
157#ifdef CONFIG_SERIAL_BFIN_DMA 148#ifdef CONFIG_SERIAL_BFIN_DMA
158 CH_UART2_TX, 149 CH_UART2_TX,
159 CH_UART2_RX, 150 CH_UART2_RX,
160#endif 151#endif
161#ifdef CONFIG_SERIAL_BFIN_CTSRTS 152#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
162 CONFIG_UART2_CTS_PIN, 153 0,
163 CONFIG_UART2_RTS_PIN, 154 0,
164#endif 155#endif
165 }, 156 },
166#endif 157#endif
@@ -168,61 +159,17 @@ struct bfin_serial_res bfin_serial_resource[] = {
168 { 159 {
169 0xFFC03100, 160 0xFFC03100,
170 IRQ_UART3_RX, 161 IRQ_UART3_RX,
162 IRQ_UART3_ERROR,
171#ifdef CONFIG_SERIAL_BFIN_DMA 163#ifdef CONFIG_SERIAL_BFIN_DMA
172 CH_UART3_TX, 164 CH_UART3_TX,
173 CH_UART3_RX, 165 CH_UART3_RX,
174#endif 166#endif
175#ifdef CONFIG_SERIAL_BFIN_CTSRTS 167#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
176 0, 168 GPIO_PB3,
177 0, 169 GPIO_PB2,
178#endif 170#endif
179 }, 171 },
180#endif 172#endif
181}; 173};
182 174
183#define DRIVER_NAME "bfin-uart" 175#define DRIVER_NAME "bfin-uart"
184
185static void bfin_serial_hw_init(struct bfin_serial_port *uart)
186{
187#ifdef CONFIG_SERIAL_BFIN_UART0
188 peripheral_request(P_UART0_TX, DRIVER_NAME);
189 peripheral_request(P_UART0_RX, DRIVER_NAME);
190#endif
191
192#ifdef CONFIG_SERIAL_BFIN_UART1
193 peripheral_request(P_UART1_TX, DRIVER_NAME);
194 peripheral_request(P_UART1_RX, DRIVER_NAME);
195
196#ifdef CONFIG_BFIN_UART1_CTSRTS
197 peripheral_request(P_UART1_RTS, DRIVER_NAME);
198 peripheral_request(P_UART1_CTS, DRIVER_NAME);
199#endif
200#endif
201
202#ifdef CONFIG_SERIAL_BFIN_UART2
203 peripheral_request(P_UART2_TX, DRIVER_NAME);
204 peripheral_request(P_UART2_RX, DRIVER_NAME);
205#endif
206
207#ifdef CONFIG_SERIAL_BFIN_UART3
208 peripheral_request(P_UART3_TX, DRIVER_NAME);
209 peripheral_request(P_UART3_RX, DRIVER_NAME);
210
211#ifdef CONFIG_BFIN_UART3_CTSRTS
212 peripheral_request(P_UART3_RTS, DRIVER_NAME);
213 peripheral_request(P_UART3_CTS, DRIVER_NAME);
214#endif
215#endif
216 SSYNC();
217#ifdef CONFIG_SERIAL_BFIN_CTSRTS
218 if (uart->cts_pin >= 0) {
219 gpio_request(uart->cts_pin, DRIVER_NAME);
220 gpio_direction_input(uart->cts_pin);
221 }
222
223 if (uart->rts_pin >= 0) {
224 gpio_request(uart->rts_pin, DRIVER_NAME);
225 gpio_direction_output(uart->rts_pin, 0);
226 }
227#endif
228}
diff --git a/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h
index ca8c5f645209..a1b50878553f 100644
--- a/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h
+++ b/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h
@@ -53,9 +53,9 @@
53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) 53#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) 54#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
55 55
56#define UART_GET_CTS(x) gpio_get_value(x->cts_pin) 56#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
57#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1) 57#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
58#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0) 58#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) 59#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0) 60#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
61 61
@@ -74,6 +74,7 @@
74struct bfin_serial_port { 74struct bfin_serial_port {
75 struct uart_port port; 75 struct uart_port port;
76 unsigned int old_status; 76 unsigned int old_status;
77 int status_irq;
77 unsigned int lsr; 78 unsigned int lsr;
78#ifdef CONFIG_SERIAL_BFIN_DMA 79#ifdef CONFIG_SERIAL_BFIN_DMA
79 int tx_done; 80 int tx_done;
@@ -116,6 +117,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
116struct bfin_serial_res { 117struct bfin_serial_res {
117 unsigned long uart_base_addr; 118 unsigned long uart_base_addr;
118 int uart_irq; 119 int uart_irq;
120 int uart_status_irq;
119#ifdef CONFIG_SERIAL_BFIN_DMA 121#ifdef CONFIG_SERIAL_BFIN_DMA
120 unsigned int uart_tx_dma_channel; 122 unsigned int uart_tx_dma_channel;
121 unsigned int uart_rx_dma_channel; 123 unsigned int uart_rx_dma_channel;
@@ -130,6 +132,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
130 { 132 {
131 0xFFC00400, 133 0xFFC00400,
132 IRQ_UART_RX, 134 IRQ_UART_RX,
135 IRQ_UART_ERROR,
133#ifdef CONFIG_SERIAL_BFIN_DMA 136#ifdef CONFIG_SERIAL_BFIN_DMA
134 CH_UART_TX, 137 CH_UART_TX,
135 CH_UART_RX, 138 CH_UART_RX,
@@ -142,23 +145,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
142}; 145};
143 146
144#define DRIVER_NAME "bfin-uart" 147#define DRIVER_NAME "bfin-uart"
145
146static void bfin_serial_hw_init(struct bfin_serial_port *uart)
147{
148
149#ifdef CONFIG_SERIAL_BFIN_UART0
150 peripheral_request(P_UART0_TX, DRIVER_NAME);
151 peripheral_request(P_UART0_RX, DRIVER_NAME);
152#endif
153
154#ifdef CONFIG_SERIAL_BFIN_CTSRTS
155 if (uart->cts_pin >= 0) {
156 gpio_request(uart->cts_pin, DRIVER_NAME);
157 gpio_direction_input(uart->cts_pin);
158 }
159 if (uart->rts_pin >= 0) {
160 gpio_request(uart->rts_pin, DRIVER_NAME);
161 gpio_direction_output(uart->rts_pin, 0);
162 }
163#endif
164}
diff --git a/arch/cris/include/asm/ioctls.h b/arch/cris/include/asm/ioctls.h
index 4f4e52531fa0..35bbc181598a 100644
--- a/arch/cris/include/asm/ioctls.h
+++ b/arch/cris/include/asm/ioctls.h
@@ -74,8 +74,9 @@
74#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ 74#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
75#define FIOQSIZE 0x5460 75#define FIOQSIZE 0x5460
76 76
77#define TIOCSERSETRS485 0x5461 /* enable rs-485 */ 77#define TIOCSERSETRS485 0x5461 /* enable rs-485 (deprecated) */
78#define TIOCSERWRRS485 0x5462 /* write rs-485 */ 78#define TIOCSERWRRS485 0x5462 /* write rs-485 */
79#define TIOCSRS485 0x5463 /* enable rs-485 */
79 80
80/* Used for packet mode */ 81/* Used for packet mode */
81#define TIOCPKT_DATA 0 82#define TIOCPKT_DATA 0
diff --git a/arch/cris/include/asm/rs485.h b/arch/cris/include/asm/rs485.h
index c331c51b0c2b..ad40f9fbcb8a 100644
--- a/arch/cris/include/asm/rs485.h
+++ b/arch/cris/include/asm/rs485.h
@@ -1,15 +1,13 @@
1/* RS-485 structures */ 1/* RS-485 structures */
2 2
3/* RS-485 support */ 3/* Used with ioctl() TIOCSERSETRS485 for backward compatibility!
4/* Used with ioctl() TIOCSERSETRS485 */ 4 * XXX: Do not use it for new code!
5 */
5struct rs485_control { 6struct rs485_control {
6 unsigned short rts_on_send; 7 unsigned short rts_on_send;
7 unsigned short rts_after_sent; 8 unsigned short rts_after_sent;
8 unsigned long delay_rts_before_send; 9 unsigned long delay_rts_before_send;
9 unsigned short enabled; 10 unsigned short enabled;
10#ifdef __KERNEL__
11 int disable_serial_loopback;
12#endif
13}; 11};
14 12
15/* Used with ioctl() TIOCSERWRRS485 */ 13/* Used with ioctl() TIOCSERWRRS485 */
diff --git a/arch/cris/include/asm/termios.h b/arch/cris/include/asm/termios.h
index b0124e6c2e41..1265109f4ce3 100644
--- a/arch/cris/include/asm/termios.h
+++ b/arch/cris/include/asm/termios.h
@@ -4,6 +4,7 @@
4#include <asm/termbits.h> 4#include <asm/termbits.h>
5#include <asm/ioctls.h> 5#include <asm/ioctls.h>
6#include <asm/rs485.h> 6#include <asm/rs485.h>
7#include <linux/serial.h>
7 8
8struct winsize { 9struct winsize {
9 unsigned short ws_row; 10 unsigned short ws_row;
diff --git a/arch/frv/mm/tlb-miss.S b/arch/frv/mm/tlb-miss.S
index 07643482cad2..7f392bc651a3 100644
--- a/arch/frv/mm/tlb-miss.S
+++ b/arch/frv/mm/tlb-miss.S
@@ -13,7 +13,6 @@
13#include <linux/linkage.h> 13#include <linux/linkage.h>
14#include <asm/page.h> 14#include <asm/page.h>
15#include <asm/pgtable.h> 15#include <asm/pgtable.h>
16#include <asm/highmem.h>
17#include <asm/spr-regs.h> 16#include <asm/spr-regs.h>
18 17
19 .section .text.tlbmiss 18 .section .text.tlbmiss
diff --git a/arch/ia64/kernel/pci-dma.c b/arch/ia64/kernel/pci-dma.c
index e4cb443bb988..eb987386f691 100644
--- a/arch/ia64/kernel/pci-dma.c
+++ b/arch/ia64/kernel/pci-dma.c
@@ -37,7 +37,7 @@ int force_iommu __read_mostly;
37 to i386. */ 37 to i386. */
38struct device fallback_dev = { 38struct device fallback_dev = {
39 .init_name = "fallback device", 39 .init_name = "fallback device",
40 .coherent_dma_mask = DMA_32BIT_MASK, 40 .coherent_dma_mask = DMA_BIT_MASK(32),
41 .dma_mask = &fallback_dev.coherent_dma_mask, 41 .dma_mask = &fallback_dev.coherent_dma_mask,
42}; 42};
43 43
@@ -75,7 +75,7 @@ int iommu_dma_supported(struct device *dev, u64 mask)
75 /* Copied from i386. Doesn't make much sense, because it will 75 /* Copied from i386. Doesn't make much sense, because it will
76 only work for pci_alloc_coherent. 76 only work for pci_alloc_coherent.
77 The caller just has to use GFP_DMA in this case. */ 77 The caller just has to use GFP_DMA in this case. */
78 if (mask < DMA_24BIT_MASK) 78 if (mask < DMA_BIT_MASK(24))
79 return 0; 79 return 0;
80 80
81 /* Tell the device to use SAC when IOMMU force is on. This 81 /* Tell the device to use SAC when IOMMU force is on. This
@@ -90,7 +90,7 @@ int iommu_dma_supported(struct device *dev, u64 mask)
90 SAC for these. Assume all masks <= 40 bits are of this 90 SAC for these. Assume all masks <= 40 bits are of this
91 type. Normally this doesn't make any difference, but gives 91 type. Normally this doesn't make any difference, but gives
92 more gentle handling of IOMMU overflow. */ 92 more gentle handling of IOMMU overflow. */
93 if (iommu_sac_force && (mask >= DMA_40BIT_MASK)) { 93 if (iommu_sac_force && (mask >= DMA_BIT_MASK(40))) {
94 dev_info(dev, "Force SAC with mask %lx\n", mask); 94 dev_info(dev, "Force SAC with mask %lx\n", mask);
95 return 0; 95 return 0;
96 } 96 }
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c
index 8c130e8f00e1..d876423e4e75 100644
--- a/arch/ia64/sn/pci/pci_dma.c
+++ b/arch/ia64/sn/pci/pci_dma.c
@@ -349,7 +349,7 @@ static int sn_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
349 349
350u64 sn_dma_get_required_mask(struct device *dev) 350u64 sn_dma_get_required_mask(struct device *dev)
351{ 351{
352 return DMA_64BIT_MASK; 352 return DMA_BIT_MASK(64);
353} 353}
354EXPORT_SYMBOL_GPL(sn_dma_get_required_mask); 354EXPORT_SYMBOL_GPL(sn_dma_get_required_mask);
355 355
diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c
index 5c76c6448e04..117f99f70649 100644
--- a/arch/mips/alchemy/common/platform.c
+++ b/arch/mips/alchemy/common/platform.c
@@ -80,14 +80,14 @@ static struct resource au1xxx_usb_ohci_resources[] = {
80}; 80};
81 81
82/* The dmamask must be set for OHCI to work */ 82/* The dmamask must be set for OHCI to work */
83static u64 ohci_dmamask = DMA_32BIT_MASK; 83static u64 ohci_dmamask = DMA_BIT_MASK(32);
84 84
85static struct platform_device au1xxx_usb_ohci_device = { 85static struct platform_device au1xxx_usb_ohci_device = {
86 .name = "au1xxx-ohci", 86 .name = "au1xxx-ohci",
87 .id = 0, 87 .id = 0,
88 .dev = { 88 .dev = {
89 .dma_mask = &ohci_dmamask, 89 .dma_mask = &ohci_dmamask,
90 .coherent_dma_mask = DMA_32BIT_MASK, 90 .coherent_dma_mask = DMA_BIT_MASK(32),
91 }, 91 },
92 .num_resources = ARRAY_SIZE(au1xxx_usb_ohci_resources), 92 .num_resources = ARRAY_SIZE(au1xxx_usb_ohci_resources),
93 .resource = au1xxx_usb_ohci_resources, 93 .resource = au1xxx_usb_ohci_resources,
@@ -109,14 +109,14 @@ static struct resource au1100_lcd_resources[] = {
109 } 109 }
110}; 110};
111 111
112static u64 au1100_lcd_dmamask = DMA_32BIT_MASK; 112static u64 au1100_lcd_dmamask = DMA_BIT_MASK(32);
113 113
114static struct platform_device au1100_lcd_device = { 114static struct platform_device au1100_lcd_device = {
115 .name = "au1100-lcd", 115 .name = "au1100-lcd",
116 .id = 0, 116 .id = 0,
117 .dev = { 117 .dev = {
118 .dma_mask = &au1100_lcd_dmamask, 118 .dma_mask = &au1100_lcd_dmamask,
119 .coherent_dma_mask = DMA_32BIT_MASK, 119 .coherent_dma_mask = DMA_BIT_MASK(32),
120 }, 120 },
121 .num_resources = ARRAY_SIZE(au1100_lcd_resources), 121 .num_resources = ARRAY_SIZE(au1100_lcd_resources),
122 .resource = au1100_lcd_resources, 122 .resource = au1100_lcd_resources,
@@ -138,14 +138,14 @@ static struct resource au1xxx_usb_ehci_resources[] = {
138 }, 138 },
139}; 139};
140 140
141static u64 ehci_dmamask = DMA_32BIT_MASK; 141static u64 ehci_dmamask = DMA_BIT_MASK(32);
142 142
143static struct platform_device au1xxx_usb_ehci_device = { 143static struct platform_device au1xxx_usb_ehci_device = {
144 .name = "au1xxx-ehci", 144 .name = "au1xxx-ehci",
145 .id = 0, 145 .id = 0,
146 .dev = { 146 .dev = {
147 .dma_mask = &ehci_dmamask, 147 .dma_mask = &ehci_dmamask,
148 .coherent_dma_mask = DMA_32BIT_MASK, 148 .coherent_dma_mask = DMA_BIT_MASK(32),
149 }, 149 },
150 .num_resources = ARRAY_SIZE(au1xxx_usb_ehci_resources), 150 .num_resources = ARRAY_SIZE(au1xxx_usb_ehci_resources),
151 .resource = au1xxx_usb_ehci_resources, 151 .resource = au1xxx_usb_ehci_resources,
@@ -165,14 +165,14 @@ static struct resource au1xxx_usb_gdt_resources[] = {
165 }, 165 },
166}; 166};
167 167
168static u64 udc_dmamask = DMA_32BIT_MASK; 168static u64 udc_dmamask = DMA_BIT_MASK(32);
169 169
170static struct platform_device au1xxx_usb_gdt_device = { 170static struct platform_device au1xxx_usb_gdt_device = {
171 .name = "au1xxx-udc", 171 .name = "au1xxx-udc",
172 .id = 0, 172 .id = 0,
173 .dev = { 173 .dev = {
174 .dma_mask = &udc_dmamask, 174 .dma_mask = &udc_dmamask,
175 .coherent_dma_mask = DMA_32BIT_MASK, 175 .coherent_dma_mask = DMA_BIT_MASK(32),
176 }, 176 },
177 .num_resources = ARRAY_SIZE(au1xxx_usb_gdt_resources), 177 .num_resources = ARRAY_SIZE(au1xxx_usb_gdt_resources),
178 .resource = au1xxx_usb_gdt_resources, 178 .resource = au1xxx_usb_gdt_resources,
@@ -192,14 +192,14 @@ static struct resource au1xxx_usb_otg_resources[] = {
192 }, 192 },
193}; 193};
194 194
195static u64 uoc_dmamask = DMA_32BIT_MASK; 195static u64 uoc_dmamask = DMA_BIT_MASK(32);
196 196
197static struct platform_device au1xxx_usb_otg_device = { 197static struct platform_device au1xxx_usb_otg_device = {
198 .name = "au1xxx-uoc", 198 .name = "au1xxx-uoc",
199 .id = 0, 199 .id = 0,
200 .dev = { 200 .dev = {
201 .dma_mask = &uoc_dmamask, 201 .dma_mask = &uoc_dmamask,
202 .coherent_dma_mask = DMA_32BIT_MASK, 202 .coherent_dma_mask = DMA_BIT_MASK(32),
203 }, 203 },
204 .num_resources = ARRAY_SIZE(au1xxx_usb_otg_resources), 204 .num_resources = ARRAY_SIZE(au1xxx_usb_otg_resources),
205 .resource = au1xxx_usb_otg_resources, 205 .resource = au1xxx_usb_otg_resources,
@@ -218,20 +218,20 @@ static struct resource au1200_lcd_resources[] = {
218 } 218 }
219}; 219};
220 220
221static u64 au1200_lcd_dmamask = DMA_32BIT_MASK; 221static u64 au1200_lcd_dmamask = DMA_BIT_MASK(32);
222 222
223static struct platform_device au1200_lcd_device = { 223static struct platform_device au1200_lcd_device = {
224 .name = "au1200-lcd", 224 .name = "au1200-lcd",
225 .id = 0, 225 .id = 0,
226 .dev = { 226 .dev = {
227 .dma_mask = &au1200_lcd_dmamask, 227 .dma_mask = &au1200_lcd_dmamask,
228 .coherent_dma_mask = DMA_32BIT_MASK, 228 .coherent_dma_mask = DMA_BIT_MASK(32),
229 }, 229 },
230 .num_resources = ARRAY_SIZE(au1200_lcd_resources), 230 .num_resources = ARRAY_SIZE(au1200_lcd_resources),
231 .resource = au1200_lcd_resources, 231 .resource = au1200_lcd_resources,
232}; 232};
233 233
234static u64 au1xxx_mmc_dmamask = DMA_32BIT_MASK; 234static u64 au1xxx_mmc_dmamask = DMA_BIT_MASK(32);
235 235
236extern struct au1xmmc_platform_data au1xmmc_platdata[2]; 236extern struct au1xmmc_platform_data au1xmmc_platdata[2];
237 237
@@ -263,7 +263,7 @@ static struct platform_device au1200_mmc0_device = {
263 .id = 0, 263 .id = 0,
264 .dev = { 264 .dev = {
265 .dma_mask = &au1xxx_mmc_dmamask, 265 .dma_mask = &au1xxx_mmc_dmamask,
266 .coherent_dma_mask = DMA_32BIT_MASK, 266 .coherent_dma_mask = DMA_BIT_MASK(32),
267 .platform_data = &au1xmmc_platdata[0], 267 .platform_data = &au1xmmc_platdata[0],
268 }, 268 },
269 .num_resources = ARRAY_SIZE(au1200_mmc0_resources), 269 .num_resources = ARRAY_SIZE(au1200_mmc0_resources),
@@ -299,7 +299,7 @@ static struct platform_device au1200_mmc1_device = {
299 .id = 1, 299 .id = 1,
300 .dev = { 300 .dev = {
301 .dma_mask = &au1xxx_mmc_dmamask, 301 .dma_mask = &au1xxx_mmc_dmamask,
302 .coherent_dma_mask = DMA_32BIT_MASK, 302 .coherent_dma_mask = DMA_BIT_MASK(32),
303 .platform_data = &au1xmmc_platdata[1], 303 .platform_data = &au1xmmc_platdata[1],
304 }, 304 },
305 .num_resources = ARRAY_SIZE(au1200_mmc1_resources), 305 .num_resources = ARRAY_SIZE(au1200_mmc1_resources),
diff --git a/arch/mips/alchemy/devboards/pb1200/platform.c b/arch/mips/alchemy/devboards/pb1200/platform.c
index 0d68e1985ffd..b93dff4a6789 100644
--- a/arch/mips/alchemy/devboards/pb1200/platform.c
+++ b/arch/mips/alchemy/devboards/pb1200/platform.c
@@ -119,14 +119,14 @@ static struct resource ide_resources[] = {
119 } 119 }
120}; 120};
121 121
122static u64 ide_dmamask = DMA_32BIT_MASK; 122static u64 ide_dmamask = DMA_BIT_MASK(32);
123 123
124static struct platform_device ide_device = { 124static struct platform_device ide_device = {
125 .name = "au1200-ide", 125 .name = "au1200-ide",
126 .id = 0, 126 .id = 0,
127 .dev = { 127 .dev = {
128 .dma_mask = &ide_dmamask, 128 .dma_mask = &ide_dmamask,
129 .coherent_dma_mask = DMA_32BIT_MASK, 129 .coherent_dma_mask = DMA_BIT_MASK(32),
130 }, 130 },
131 .num_resources = ARRAY_SIZE(ide_resources), 131 .num_resources = ARRAY_SIZE(ide_resources),
132 .resource = ide_resources 132 .resource = ide_resources
diff --git a/arch/mips/include/asm/txx9/ndfmc.h b/arch/mips/include/asm/txx9/ndfmc.h
new file mode 100644
index 000000000000..fa67f3df78fc
--- /dev/null
+++ b/arch/mips/include/asm/txx9/ndfmc.h
@@ -0,0 +1,30 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License version 2 as
4 * published by the Free Software Foundation.
5 *
6 * (C) Copyright TOSHIBA CORPORATION 2007
7 */
8#ifndef __ASM_TXX9_NDFMC_H
9#define __ASM_TXX9_NDFMC_H
10
11#define NDFMC_PLAT_FLAG_USE_BSPRT 0x01
12#define NDFMC_PLAT_FLAG_NO_RSTR 0x02
13#define NDFMC_PLAT_FLAG_HOLDADD 0x04
14#define NDFMC_PLAT_FLAG_DUMMYWRITE 0x08
15
16struct txx9ndfmc_platform_data {
17 unsigned int shift;
18 unsigned int gbus_clock;
19 unsigned int hold; /* hold time in nanosecond */
20 unsigned int spw; /* strobe pulse width in nanosecond */
21 unsigned int flags;
22 unsigned char ch_mask; /* available channel bitmask */
23 unsigned char wp_mask; /* write-protect bitmask */
24 unsigned char wide_mask; /* 16bit-nand bitmask */
25};
26
27void txx9_ndfmc_init(unsigned long baseaddr,
28 const struct txx9ndfmc_platform_data *plat_data);
29
30#endif /* __ASM_TXX9_NDFMC_H */
diff --git a/arch/mips/include/asm/txx9/rbtx4939.h b/arch/mips/include/asm/txx9/rbtx4939.h
index 1acf428c0b4f..e517899794a8 100644
--- a/arch/mips/include/asm/txx9/rbtx4939.h
+++ b/arch/mips/include/asm/txx9/rbtx4939.h
@@ -130,4 +130,13 @@
130void rbtx4939_prom_init(void); 130void rbtx4939_prom_init(void);
131void rbtx4939_irq_setup(void); 131void rbtx4939_irq_setup(void);
132 132
133struct mtd_partition;
134struct map_info;
135struct rbtx4939_flash_data {
136 unsigned int width;
137 unsigned int nr_parts;
138 struct mtd_partition *parts;
139 void (*map_init)(struct map_info *map);
140};
141
133#endif /* __ASM_TXX9_RBTX4939_H */ 142#endif /* __ASM_TXX9_RBTX4939_H */
diff --git a/arch/mips/include/asm/txx9/tx4938.h b/arch/mips/include/asm/txx9/tx4938.h
index 0b068154054c..cd8bc2021755 100644
--- a/arch/mips/include/asm/txx9/tx4938.h
+++ b/arch/mips/include/asm/txx9/tx4938.h
@@ -291,6 +291,7 @@ int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot);
291void tx4938_setup_pcierr_irq(void); 291void tx4938_setup_pcierr_irq(void);
292void tx4938_irq_init(void); 292void tx4938_irq_init(void);
293void tx4938_mtd_init(int ch); 293void tx4938_mtd_init(int ch);
294void tx4938_ndfmc_init(unsigned int hold, unsigned int spw);
294 295
295struct tx4938ide_platform_info { 296struct tx4938ide_platform_info {
296 /* 297 /*
diff --git a/arch/mips/include/asm/txx9/tx4939.h b/arch/mips/include/asm/txx9/tx4939.h
index 964ef7ede268..f02c50b3abfb 100644
--- a/arch/mips/include/asm/txx9/tx4939.h
+++ b/arch/mips/include/asm/txx9/tx4939.h
@@ -542,5 +542,7 @@ int tx4939_irq(void);
542void tx4939_mtd_init(int ch); 542void tx4939_mtd_init(int ch);
543void tx4939_ata_init(void); 543void tx4939_ata_init(void);
544void tx4939_rtc_init(void); 544void tx4939_rtc_init(void);
545void tx4939_ndfmc_init(unsigned int hold, unsigned int spw,
546 unsigned char ch_mask, unsigned char wide_mask);
545 547
546#endif /* __ASM_TXX9_TX4939_H */ 548#endif /* __ASM_TXX9_TX4939_H */
diff --git a/arch/mips/nxp/pnx833x/common/platform.c b/arch/mips/nxp/pnx833x/common/platform.c
index b1ccbcc18f78..01f8345a2069 100644
--- a/arch/mips/nxp/pnx833x/common/platform.c
+++ b/arch/mips/nxp/pnx833x/common/platform.c
@@ -42,7 +42,7 @@
42#include <irq-mapping.h> 42#include <irq-mapping.h>
43#include <pnx833x.h> 43#include <pnx833x.h>
44 44
45static u64 uart_dmamask = DMA_32BIT_MASK; 45static u64 uart_dmamask = DMA_BIT_MASK(32);
46 46
47static struct resource pnx833x_uart_resources[] = { 47static struct resource pnx833x_uart_resources[] = {
48 [0] = { 48 [0] = {
@@ -101,14 +101,14 @@ static struct platform_device pnx833x_uart_device = {
101 .id = -1, 101 .id = -1,
102 .dev = { 102 .dev = {
103 .dma_mask = &uart_dmamask, 103 .dma_mask = &uart_dmamask,
104 .coherent_dma_mask = DMA_32BIT_MASK, 104 .coherent_dma_mask = DMA_BIT_MASK(32),
105 .platform_data = pnx8xxx_ports, 105 .platform_data = pnx8xxx_ports,
106 }, 106 },
107 .num_resources = ARRAY_SIZE(pnx833x_uart_resources), 107 .num_resources = ARRAY_SIZE(pnx833x_uart_resources),
108 .resource = pnx833x_uart_resources, 108 .resource = pnx833x_uart_resources,
109}; 109};
110 110
111static u64 ehci_dmamask = DMA_32BIT_MASK; 111static u64 ehci_dmamask = DMA_BIT_MASK(32);
112 112
113static struct resource pnx833x_usb_ehci_resources[] = { 113static struct resource pnx833x_usb_ehci_resources[] = {
114 [0] = { 114 [0] = {
@@ -128,7 +128,7 @@ static struct platform_device pnx833x_usb_ehci_device = {
128 .id = -1, 128 .id = -1,
129 .dev = { 129 .dev = {
130 .dma_mask = &ehci_dmamask, 130 .dma_mask = &ehci_dmamask,
131 .coherent_dma_mask = DMA_32BIT_MASK, 131 .coherent_dma_mask = DMA_BIT_MASK(32),
132 }, 132 },
133 .num_resources = ARRAY_SIZE(pnx833x_usb_ehci_resources), 133 .num_resources = ARRAY_SIZE(pnx833x_usb_ehci_resources),
134 .resource = pnx833x_usb_ehci_resources, 134 .resource = pnx833x_usb_ehci_resources,
@@ -198,7 +198,7 @@ static struct platform_device pnx833x_i2c1_device = {
198}; 198};
199#endif 199#endif
200 200
201static u64 ethernet_dmamask = DMA_32BIT_MASK; 201static u64 ethernet_dmamask = DMA_BIT_MASK(32);
202 202
203static struct resource pnx833x_ethernet_resources[] = { 203static struct resource pnx833x_ethernet_resources[] = {
204 [0] = { 204 [0] = {
@@ -218,7 +218,7 @@ static struct platform_device pnx833x_ethernet_device = {
218 .id = -1, 218 .id = -1,
219 .dev = { 219 .dev = {
220 .dma_mask = &ethernet_dmamask, 220 .dma_mask = &ethernet_dmamask,
221 .coherent_dma_mask = DMA_32BIT_MASK, 221 .coherent_dma_mask = DMA_BIT_MASK(32),
222 }, 222 },
223 .num_resources = ARRAY_SIZE(pnx833x_ethernet_resources), 223 .num_resources = ARRAY_SIZE(pnx833x_ethernet_resources),
224 .resource = pnx833x_ethernet_resources, 224 .resource = pnx833x_ethernet_resources,
diff --git a/arch/mips/nxp/pnx8550/common/platform.c b/arch/mips/nxp/pnx8550/common/platform.c
index 21d2955359b3..5264cc09a27b 100644
--- a/arch/mips/nxp/pnx8550/common/platform.c
+++ b/arch/mips/nxp/pnx8550/common/platform.c
@@ -92,16 +92,16 @@ struct pnx8xxx_port pnx8xxx_ports[] = {
92}; 92};
93 93
94/* The dmamask must be set for OHCI to work */ 94/* The dmamask must be set for OHCI to work */
95static u64 ohci_dmamask = DMA_32BIT_MASK; 95static u64 ohci_dmamask = DMA_BIT_MASK(32);
96 96
97static u64 uart_dmamask = DMA_32BIT_MASK; 97static u64 uart_dmamask = DMA_BIT_MASK(32);
98 98
99static struct platform_device pnx8550_usb_ohci_device = { 99static struct platform_device pnx8550_usb_ohci_device = {
100 .name = "pnx8550-ohci", 100 .name = "pnx8550-ohci",
101 .id = -1, 101 .id = -1,
102 .dev = { 102 .dev = {
103 .dma_mask = &ohci_dmamask, 103 .dma_mask = &ohci_dmamask,
104 .coherent_dma_mask = DMA_32BIT_MASK, 104 .coherent_dma_mask = DMA_BIT_MASK(32),
105 }, 105 },
106 .num_resources = ARRAY_SIZE(pnx8550_usb_ohci_resources), 106 .num_resources = ARRAY_SIZE(pnx8550_usb_ohci_resources),
107 .resource = pnx8550_usb_ohci_resources, 107 .resource = pnx8550_usb_ohci_resources,
@@ -112,7 +112,7 @@ static struct platform_device pnx8550_uart_device = {
112 .id = -1, 112 .id = -1,
113 .dev = { 113 .dev = {
114 .dma_mask = &uart_dmamask, 114 .dma_mask = &uart_dmamask,
115 .coherent_dma_mask = DMA_32BIT_MASK, 115 .coherent_dma_mask = DMA_BIT_MASK(32),
116 .platform_data = pnx8xxx_ports, 116 .platform_data = pnx8xxx_ports,
117 }, 117 },
118 .num_resources = ARRAY_SIZE(pnx8550_uart_resources), 118 .num_resources = ARRAY_SIZE(pnx8550_uart_resources),
diff --git a/arch/mips/pmc-sierra/msp71xx/msp_usb.c b/arch/mips/pmc-sierra/msp71xx/msp_usb.c
index f7ca4f582331..0ee01e359dd8 100644
--- a/arch/mips/pmc-sierra/msp71xx/msp_usb.c
+++ b/arch/mips/pmc-sierra/msp71xx/msp_usb.c
@@ -49,14 +49,14 @@ static struct resource msp_usbhost_resources [] = {
49 }, 49 },
50}; 50};
51 51
52static u64 msp_usbhost_dma_mask = DMA_32BIT_MASK; 52static u64 msp_usbhost_dma_mask = DMA_BIT_MASK(32);
53 53
54static struct platform_device msp_usbhost_device = { 54static struct platform_device msp_usbhost_device = {
55 .name = "pmcmsp-ehci", 55 .name = "pmcmsp-ehci",
56 .id = 0, 56 .id = 0,
57 .dev = { 57 .dev = {
58 .dma_mask = &msp_usbhost_dma_mask, 58 .dma_mask = &msp_usbhost_dma_mask,
59 .coherent_dma_mask = DMA_32BIT_MASK, 59 .coherent_dma_mask = DMA_BIT_MASK(32),
60 }, 60 },
61 .num_resources = ARRAY_SIZE(msp_usbhost_resources), 61 .num_resources = ARRAY_SIZE(msp_usbhost_resources),
62 .resource = msp_usbhost_resources, 62 .resource = msp_usbhost_resources,
@@ -77,14 +77,14 @@ static struct resource msp_usbdev_resources [] = {
77 }, 77 },
78}; 78};
79 79
80static u64 msp_usbdev_dma_mask = DMA_32BIT_MASK; 80static u64 msp_usbdev_dma_mask = DMA_BIT_MASK(32);
81 81
82static struct platform_device msp_usbdev_device = { 82static struct platform_device msp_usbdev_device = {
83 .name = "msp71xx_udc", 83 .name = "msp71xx_udc",
84 .id = 0, 84 .id = 0,
85 .dev = { 85 .dev = {
86 .dma_mask = &msp_usbdev_dma_mask, 86 .dma_mask = &msp_usbdev_dma_mask,
87 .coherent_dma_mask = DMA_32BIT_MASK, 87 .coherent_dma_mask = DMA_BIT_MASK(32),
88 }, 88 },
89 .num_resources = ARRAY_SIZE(msp_usbdev_resources), 89 .num_resources = ARRAY_SIZE(msp_usbdev_resources),
90 .resource = msp_usbdev_resources, 90 .resource = msp_usbdev_resources,
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c
index a13a08b8c9ec..8a266c6a3f58 100644
--- a/arch/mips/txx9/generic/setup.c
+++ b/arch/mips/txx9/generic/setup.c
@@ -32,6 +32,7 @@
32#include <asm/txx9/generic.h> 32#include <asm/txx9/generic.h>
33#include <asm/txx9/pci.h> 33#include <asm/txx9/pci.h>
34#include <asm/txx9tmr.h> 34#include <asm/txx9tmr.h>
35#include <asm/txx9/ndfmc.h>
35#ifdef CONFIG_CPU_TX49XX 36#ifdef CONFIG_CPU_TX49XX
36#include <asm/txx9/tx4938.h> 37#include <asm/txx9/tx4938.h>
37#endif 38#endif
@@ -691,6 +692,26 @@ void __init txx9_physmap_flash_init(int no, unsigned long addr,
691#endif 692#endif
692} 693}
693 694
695void __init txx9_ndfmc_init(unsigned long baseaddr,
696 const struct txx9ndfmc_platform_data *pdata)
697{
698#if defined(CONFIG_MTD_NAND_TXX9NDFMC) || \
699 defined(CONFIG_MTD_NAND_TXX9NDFMC_MODULE)
700 struct resource res = {
701 .start = baseaddr,
702 .end = baseaddr + 0x1000 - 1,
703 .flags = IORESOURCE_MEM,
704 };
705 struct platform_device *pdev = platform_device_alloc("txx9ndfmc", -1);
706
707 if (!pdev ||
708 platform_device_add_resources(pdev, &res, 1) ||
709 platform_device_add_data(pdev, pdata, sizeof(*pdata)) ||
710 platform_device_add(pdev))
711 platform_device_put(pdev);
712#endif
713}
714
694#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) 715#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
695static DEFINE_SPINLOCK(txx9_iocled_lock); 716static DEFINE_SPINLOCK(txx9_iocled_lock);
696 717
diff --git a/arch/mips/txx9/generic/setup_tx4938.c b/arch/mips/txx9/generic/setup_tx4938.c
index 25819ff1c350..f0844f891f0b 100644
--- a/arch/mips/txx9/generic/setup_tx4938.c
+++ b/arch/mips/txx9/generic/setup_tx4938.c
@@ -23,6 +23,7 @@
23#include <asm/txx9tmr.h> 23#include <asm/txx9tmr.h>
24#include <asm/txx9pio.h> 24#include <asm/txx9pio.h>
25#include <asm/txx9/generic.h> 25#include <asm/txx9/generic.h>
26#include <asm/txx9/ndfmc.h>
26#include <asm/txx9/tx4938.h> 27#include <asm/txx9/tx4938.h>
27 28
28static void __init tx4938_wdr_init(void) 29static void __init tx4938_wdr_init(void)
@@ -382,6 +383,26 @@ void __init tx4938_ata_init(unsigned int irq, unsigned int shift, int tune)
382 platform_device_put(pdev); 383 platform_device_put(pdev);
383} 384}
384 385
386void __init tx4938_ndfmc_init(unsigned int hold, unsigned int spw)
387{
388 struct txx9ndfmc_platform_data plat_data = {
389 .shift = 1,
390 .gbus_clock = txx9_gbus_clock,
391 .hold = hold,
392 .spw = spw,
393 .ch_mask = 1,
394 };
395 unsigned long baseaddr = TX4938_NDFMC_REG & 0xfffffffffULL;
396
397#ifdef __BIG_ENDIAN
398 baseaddr += 4;
399#endif
400 if ((__raw_readq(&tx4938_ccfgptr->pcfg) &
401 (TX4938_PCFG_ATA_SEL|TX4938_PCFG_ISA_SEL|TX4938_PCFG_NDF_SEL)) ==
402 TX4938_PCFG_NDF_SEL)
403 txx9_ndfmc_init(baseaddr, &plat_data);
404}
405
385static void __init tx4938_stop_unused_modules(void) 406static void __init tx4938_stop_unused_modules(void)
386{ 407{
387 __u64 pcfg, rst = 0, ckd = 0; 408 __u64 pcfg, rst = 0, ckd = 0;
diff --git a/arch/mips/txx9/generic/setup_tx4939.c b/arch/mips/txx9/generic/setup_tx4939.c
index 55440967b3a8..7a25b573e9b0 100644
--- a/arch/mips/txx9/generic/setup_tx4939.c
+++ b/arch/mips/txx9/generic/setup_tx4939.c
@@ -27,6 +27,7 @@
27#include <asm/txx9irq.h> 27#include <asm/txx9irq.h>
28#include <asm/txx9tmr.h> 28#include <asm/txx9tmr.h>
29#include <asm/txx9/generic.h> 29#include <asm/txx9/generic.h>
30#include <asm/txx9/ndfmc.h>
30#include <asm/txx9/tx4939.h> 31#include <asm/txx9/tx4939.h>
31 32
32static void __init tx4939_wdr_init(void) 33static void __init tx4939_wdr_init(void)
@@ -457,6 +458,22 @@ void __init tx4939_rtc_init(void)
457 platform_device_register(&rtc_dev); 458 platform_device_register(&rtc_dev);
458} 459}
459 460
461void __init tx4939_ndfmc_init(unsigned int hold, unsigned int spw,
462 unsigned char ch_mask, unsigned char wide_mask)
463{
464 struct txx9ndfmc_platform_data plat_data = {
465 .shift = 1,
466 .gbus_clock = txx9_gbus_clock,
467 .hold = hold,
468 .spw = spw,
469 .flags = NDFMC_PLAT_FLAG_NO_RSTR | NDFMC_PLAT_FLAG_HOLDADD |
470 NDFMC_PLAT_FLAG_DUMMYWRITE,
471 .ch_mask = ch_mask,
472 .wide_mask = wide_mask,
473 };
474 txx9_ndfmc_init(TX4939_NDFMC_REG & 0xfffffffffULL, &plat_data);
475}
476
460static void __init tx4939_stop_unused_modules(void) 477static void __init tx4939_stop_unused_modules(void)
461{ 478{
462 __u64 pcfg, rst = 0, ckd = 0; 479 __u64 pcfg, rst = 0, ckd = 0;
diff --git a/arch/mips/txx9/rbtx4938/setup.c b/arch/mips/txx9/rbtx4938/setup.c
index 547ff2920bf0..65d13df8878a 100644
--- a/arch/mips/txx9/rbtx4938/setup.c
+++ b/arch/mips/txx9/rbtx4938/setup.c
@@ -352,6 +352,8 @@ static void __init rbtx4938_device_init(void)
352 rbtx4938_ne_init(); 352 rbtx4938_ne_init();
353 tx4938_wdt_init(); 353 tx4938_wdt_init();
354 rbtx4938_mtd_init(); 354 rbtx4938_mtd_init();
355 /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */
356 tx4938_ndfmc_init(10, 35);
355 tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1); 357 tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1);
356 txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL); 358 txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL);
357} 359}
diff --git a/arch/mips/txx9/rbtx4939/setup.c b/arch/mips/txx9/rbtx4939/setup.c
index 656603b85b71..011e1e332f47 100644
--- a/arch/mips/txx9/rbtx4939/setup.c
+++ b/arch/mips/txx9/rbtx4939/setup.c
@@ -16,6 +16,9 @@
16#include <linux/leds.h> 16#include <linux/leds.h>
17#include <linux/interrupt.h> 17#include <linux/interrupt.h>
18#include <linux/smc91x.h> 18#include <linux/smc91x.h>
19#include <linux/mtd/mtd.h>
20#include <linux/mtd/partitions.h>
21#include <linux/mtd/map.h>
19#include <asm/reboot.h> 22#include <asm/reboot.h>
20#include <asm/txx9/generic.h> 23#include <asm/txx9/generic.h>
21#include <asm/txx9/pci.h> 24#include <asm/txx9/pci.h>
@@ -282,6 +285,159 @@ static void rbtx4939_7segled_putc(unsigned int pos, unsigned char val)
282 __rbtx4939_7segled_putc(pos, val); 285 __rbtx4939_7segled_putc(pos, val);
283} 286}
284 287
288#if defined(CONFIG_MTD_RBTX4939) || defined(CONFIG_MTD_RBTX4939_MODULE)
289/* special mapping for boot rom */
290static unsigned long rbtx4939_flash_fixup_ofs(unsigned long ofs)
291{
292 u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f;
293 unsigned char shift;
294
295 if (bdipsw & 8) {
296 /* BOOT Mode: USER ROM1 / USER ROM2 */
297 shift = bdipsw & 3;
298 /* rotate A[23:22] */
299 return (ofs & ~0xc00000) | ((((ofs >> 22) + shift) & 3) << 22);
300 }
301#ifdef __BIG_ENDIAN
302 if (bdipsw == 0)
303 /* BOOT Mode: Monitor ROM */
304 ofs ^= 0x400000; /* swap A[22] */
305#endif
306 return ofs;
307}
308
309static map_word rbtx4939_flash_read16(struct map_info *map, unsigned long ofs)
310{
311 map_word r;
312
313 ofs = rbtx4939_flash_fixup_ofs(ofs);
314 r.x[0] = __raw_readw(map->virt + ofs);
315 return r;
316}
317
318static void rbtx4939_flash_write16(struct map_info *map, const map_word datum,
319 unsigned long ofs)
320{
321 ofs = rbtx4939_flash_fixup_ofs(ofs);
322 __raw_writew(datum.x[0], map->virt + ofs);
323 mb(); /* see inline_map_write() in mtd/map.h */
324}
325
326static void rbtx4939_flash_copy_from(struct map_info *map, void *to,
327 unsigned long from, ssize_t len)
328{
329 u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f;
330 unsigned char shift;
331 ssize_t curlen;
332
333 from += (unsigned long)map->virt;
334 if (bdipsw & 8) {
335 /* BOOT Mode: USER ROM1 / USER ROM2 */
336 shift = bdipsw & 3;
337 while (len) {
338 curlen = min_t(unsigned long, len,
339 0x400000 - (from & (0x400000 - 1)));
340 memcpy(to,
341 (void *)((from & ~0xc00000) |
342 ((((from >> 22) + shift) & 3) << 22)),
343 curlen);
344 len -= curlen;
345 from += curlen;
346 to += curlen;
347 }
348 return;
349 }
350#ifdef __BIG_ENDIAN
351 if (bdipsw == 0) {
352 /* BOOT Mode: Monitor ROM */
353 while (len) {
354 curlen = min_t(unsigned long, len,
355 0x400000 - (from & (0x400000 - 1)));
356 memcpy(to, (void *)(from ^ 0x400000), curlen);
357 len -= curlen;
358 from += curlen;
359 to += curlen;
360 }
361 return;
362 }
363#endif
364 memcpy(to, (void *)from, len);
365}
366
367static void rbtx4939_flash_map_init(struct map_info *map)
368{
369 map->read = rbtx4939_flash_read16;
370 map->write = rbtx4939_flash_write16;
371 map->copy_from = rbtx4939_flash_copy_from;
372}
373
374static void __init rbtx4939_mtd_init(void)
375{
376 static struct {
377 struct platform_device dev;
378 struct resource res;
379 struct rbtx4939_flash_data data;
380 } pdevs[4];
381 int i;
382 static char names[4][8];
383 static struct mtd_partition parts[4];
384 struct rbtx4939_flash_data *boot_pdata = &pdevs[0].data;
385 u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f;
386
387 if (bdipsw & 8) {
388 /* BOOT Mode: USER ROM1 / USER ROM2 */
389 boot_pdata->nr_parts = 4;
390 for (i = 0; i < boot_pdata->nr_parts; i++) {
391 sprintf(names[i], "img%d", 4 - i);
392 parts[i].name = names[i];
393 parts[i].size = 0x400000;
394 parts[i].offset = MTDPART_OFS_NXTBLK;
395 }
396 } else if (bdipsw == 0) {
397 /* BOOT Mode: Monitor ROM */
398 boot_pdata->nr_parts = 2;
399 strcpy(names[0], "big");
400 strcpy(names[1], "little");
401 for (i = 0; i < boot_pdata->nr_parts; i++) {
402 parts[i].name = names[i];
403 parts[i].size = 0x400000;
404 parts[i].offset = MTDPART_OFS_NXTBLK;
405 }
406 } else {
407 /* BOOT Mode: ROM Emulator */
408 boot_pdata->nr_parts = 2;
409 parts[0].name = "boot";
410 parts[0].offset = 0xc00000;
411 parts[0].size = 0x400000;
412 parts[1].name = "user";
413 parts[1].offset = 0;
414 parts[1].size = 0xc00000;
415 }
416 boot_pdata->parts = parts;
417 boot_pdata->map_init = rbtx4939_flash_map_init;
418
419 for (i = 0; i < ARRAY_SIZE(pdevs); i++) {
420 struct resource *r = &pdevs[i].res;
421 struct platform_device *dev = &pdevs[i].dev;
422
423 r->start = 0x1f000000 - i * 0x1000000;
424 r->end = r->start + 0x1000000 - 1;
425 r->flags = IORESOURCE_MEM;
426 pdevs[i].data.width = 2;
427 dev->num_resources = 1;
428 dev->resource = r;
429 dev->id = i;
430 dev->name = "rbtx4939-flash";
431 dev->dev.platform_data = &pdevs[i].data;
432 platform_device_register(dev);
433 }
434}
435#else
436static void __init rbtx4939_mtd_init(void)
437{
438}
439#endif
440
285static void __init rbtx4939_arch_init(void) 441static void __init rbtx4939_arch_init(void)
286{ 442{
287 rbtx4939_pci_setup(); 443 rbtx4939_pci_setup();
@@ -333,6 +489,11 @@ static void __init rbtx4939_device_init(void)
333 platform_device_add_data(pdev, &smc_pdata, sizeof(smc_pdata)) || 489 platform_device_add_data(pdev, &smc_pdata, sizeof(smc_pdata)) ||
334 platform_device_add(pdev)) 490 platform_device_add(pdev))
335 platform_device_put(pdev); 491 platform_device_put(pdev);
492 rbtx4939_mtd_init();
493 /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */
494 tx4939_ndfmc_init(10, 35,
495 (1 << 1) | (1 << 2),
496 (1 << 2)); /* ch1:8bit, ch2:16bit */
336 rbtx4939_led_setup(); 497 rbtx4939_led_setup();
337 tx4939_wdt_init(); 498 tx4939_wdt_init();
338 tx4939_ata_init(); 499 tx4939_ata_init();
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9e08d8a69fdf..5b50e1ac6179 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -316,7 +316,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
316 316
317config KEXEC 317config KEXEC
318 bool "kexec system call (EXPERIMENTAL)" 318 bool "kexec system call (EXPERIMENTAL)"
319 depends on BOOK3S && EXPERIMENTAL 319 depends on PPC_BOOK3S && EXPERIMENTAL
320 help 320 help
321 kexec is a system call that implements the ability to shutdown your 321 kexec is a system call that implements the ability to shutdown your
322 current kernel, and to start another kernel. It is like a reboot 322 current kernel, and to start another kernel. It is like a reboot
@@ -775,6 +775,7 @@ config LOWMEM_CAM_NUM_BOOL
775 Say N here unless you know what you are doing. 775 Say N here unless you know what you are doing.
776 776
777config LOWMEM_CAM_NUM 777config LOWMEM_CAM_NUM
778 depends on FSL_BOOKE
778 int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL 779 int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL
779 default 3 780 default 3
780 781
diff --git a/arch/powerpc/boot/dts/ksi8560.dts b/arch/powerpc/boot/dts/ksi8560.dts
index 308fe7c29dea..c9cfd374bffb 100644
--- a/arch/powerpc/boot/dts/ksi8560.dts
+++ b/arch/powerpc/boot/dts/ksi8560.dts
@@ -57,14 +57,14 @@
57 bus-frequency = <0>; /* Fixed by bootwrapper */ 57 bus-frequency = <0>; /* Fixed by bootwrapper */
58 58
59 memory-controller@2000 { 59 memory-controller@2000 {
60 compatible = "fsl,8540-memory-controller"; 60 compatible = "fsl,mpc8540-memory-controller";
61 reg = <0x2000 0x1000>; 61 reg = <0x2000 0x1000>;
62 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
63 interrupts = <0x12 0x2>; 63 interrupts = <0x12 0x2>;
64 }; 64 };
65 65
66 L2: l2-cache-controller@20000 { 66 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,mpc8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 68 reg = <0x20000 0x1000>;
69 cache-line-size = <0x20>; /* 32 bytes */ 69 cache-line-size = <0x20>; /* 32 bytes */
70 cache-size = <0x40000>; /* L2, 256K */ 70 cache-size = <0x40000>; /* L2, 256K */
diff --git a/arch/powerpc/boot/dts/pq2fads.dts b/arch/powerpc/boot/dts/pq2fads.dts
index b2d61091b36d..0bb669376743 100644
--- a/arch/powerpc/boot/dts/pq2fads.dts
+++ b/arch/powerpc/boot/dts/pq2fads.dts
@@ -17,6 +17,14 @@
17 #address-cells = <1>; 17 #address-cells = <1>;
18 #size-cells = <1>; 18 #size-cells = <1>;
19 19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
27
20 cpus { 28 cpus {
21 #address-cells = <1>; 29 #address-cells = <1>;
22 #size-cells = <0>; 30 #size-cells = <0>;
@@ -45,7 +53,7 @@
45 #size-cells = <1>; 53 #size-cells = <1>;
46 reg = <0xf0010100 0x60>; 54 reg = <0xf0010100 0x60>;
47 55
48 ranges = <0x0 0x0 0xfe000000 0x800000 56 ranges = <0x0 0x0 0xff800000 0x800000
49 0x1 0x0 0xf4500000 0x8000 57 0x1 0x0 0xf4500000 0x8000
50 0x8 0x0 0xf8200000 0x8000>; 58 0x8 0x0 0xf8200000 0x8000>;
51 59
@@ -71,7 +79,7 @@
71 }; 79 };
72 }; 80 };
73 81
74 pci@f0010800 { 82 pci0: pci@f0010800 {
75 device_type = "pci"; 83 device_type = "pci";
76 reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>; 84 reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>;
77 compatible = "fsl,mpc8280-pci", "fsl,pq2-pci"; 85 compatible = "fsl,mpc8280-pci", "fsl,pq2-pci";
@@ -142,7 +150,7 @@
142 reg = <0x119f0 0x10 0x115f0 0x10>; 150 reg = <0x119f0 0x10 0x115f0 0x10>;
143 }; 151 };
144 152
145 serial@11a00 { 153 serial0: serial@11a00 {
146 device_type = "serial"; 154 device_type = "serial";
147 compatible = "fsl,mpc8280-scc-uart", 155 compatible = "fsl,mpc8280-scc-uart",
148 "fsl,cpm2-scc-uart"; 156 "fsl,cpm2-scc-uart";
@@ -153,7 +161,7 @@
153 fsl,cpm-command = <0x800000>; 161 fsl,cpm-command = <0x800000>;
154 }; 162 };
155 163
156 serial@11a20 { 164 serial1: serial@11a20 {
157 device_type = "serial"; 165 device_type = "serial";
158 compatible = "fsl,mpc8280-scc-uart", 166 compatible = "fsl,mpc8280-scc-uart",
159 "fsl,cpm2-scc-uart"; 167 "fsl,cpm2-scc-uart";
@@ -164,7 +172,7 @@
164 fsl,cpm-command = <0x4a00000>; 172 fsl,cpm-command = <0x4a00000>;
165 }; 173 };
166 174
167 ethernet@11320 { 175 enet0: ethernet@11320 {
168 device_type = "network"; 176 device_type = "network";
169 compatible = "fsl,mpc8280-fcc-enet", 177 compatible = "fsl,mpc8280-fcc-enet",
170 "fsl,cpm2-fcc-enet"; 178 "fsl,cpm2-fcc-enet";
@@ -176,7 +184,7 @@
176 fsl,cpm-command = <0x16200300>; 184 fsl,cpm-command = <0x16200300>;
177 }; 185 };
178 186
179 ethernet@11340 { 187 enet1: ethernet@11340 {
180 device_type = "network"; 188 device_type = "network";
181 compatible = "fsl,mpc8280-fcc-enet", 189 compatible = "fsl,mpc8280-fcc-enet",
182 "fsl,cpm2-fcc-enet"; 190 "fsl,cpm2-fcc-enet";
diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts
index 9c5079fec4f2..b1f1416ac998 100644
--- a/arch/powerpc/boot/dts/sbc8548.dts
+++ b/arch/powerpc/boot/dts/sbc8548.dts
@@ -156,14 +156,14 @@
156 compatible = "simple-bus"; 156 compatible = "simple-bus";
157 157
158 memory-controller@2000 { 158 memory-controller@2000 {
159 compatible = "fsl,8548-memory-controller"; 159 compatible = "fsl,mpc8548-memory-controller";
160 reg = <0x2000 0x1000>; 160 reg = <0x2000 0x1000>;
161 interrupt-parent = <&mpic>; 161 interrupt-parent = <&mpic>;
162 interrupts = <0x12 0x2>; 162 interrupts = <0x12 0x2>;
163 }; 163 };
164 164
165 L2: l2-cache-controller@20000 { 165 L2: l2-cache-controller@20000 {
166 compatible = "fsl,8548-l2-cache-controller"; 166 compatible = "fsl,mpc8548-l2-cache-controller";
167 reg = <0x20000 0x1000>; 167 reg = <0x20000 0x1000>;
168 cache-line-size = <0x20>; // 32 bytes 168 cache-line-size = <0x20>; // 32 bytes
169 cache-size = <0x80000>; // L2, 512K 169 cache-size = <0x80000>; // L2, 512K
diff --git a/arch/powerpc/boot/dts/sbc8560.dts b/arch/powerpc/boot/dts/sbc8560.dts
index b772405a9a0a..c4564b81e473 100644
--- a/arch/powerpc/boot/dts/sbc8560.dts
+++ b/arch/powerpc/boot/dts/sbc8560.dts
@@ -61,14 +61,14 @@
61 clock-frequency = <0>; 61 clock-frequency = <0>;
62 62
63 memory-controller@2000 { 63 memory-controller@2000 {
64 compatible = "fsl,8560-memory-controller"; 64 compatible = "fsl,mpc8560-memory-controller";
65 reg = <0x2000 0x1000>; 65 reg = <0x2000 0x1000>;
66 interrupt-parent = <&mpic>; 66 interrupt-parent = <&mpic>;
67 interrupts = <0x12 0x2>; 67 interrupts = <0x12 0x2>;
68 }; 68 };
69 69
70 L2: l2-cache-controller@20000 { 70 L2: l2-cache-controller@20000 {
71 compatible = "fsl,8560-l2-cache-controller"; 71 compatible = "fsl,mpc8560-l2-cache-controller";
72 reg = <0x20000 0x1000>; 72 reg = <0x20000 0x1000>;
73 cache-line-size = <0x20>; // 32 bytes 73 cache-line-size = <0x20>; // 32 bytes
74 cache-size = <0x40000>; // L2, 256K 74 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/socrates.dts b/arch/powerpc/boot/dts/socrates.dts
index b8d0fc6f0042..7a6ae75a1e57 100644
--- a/arch/powerpc/boot/dts/socrates.dts
+++ b/arch/powerpc/boot/dts/socrates.dts
@@ -52,6 +52,7 @@
52 soc8544@e0000000 { 52 soc8544@e0000000 {
53 #address-cells = <1>; 53 #address-cells = <1>;
54 #size-cells = <1>; 54 #size-cells = <1>;
55 device_type = "soc";
55 56
56 ranges = <0x00000000 0xe0000000 0x00100000>; 57 ranges = <0x00000000 0xe0000000 0x00100000>;
57 reg = <0xe0000000 0x00001000>; // CCSRBAR 1M 58 reg = <0xe0000000 0x00001000>; // CCSRBAR 1M
@@ -78,11 +79,11 @@
78 #address-cells = <1>; 79 #address-cells = <1>;
79 #size-cells = <0>; 80 #size-cells = <0>;
80 cell-index = <0>; 81 cell-index = <0>;
81 compatible = "fsl-i2c"; 82 compatible = "fsl,mpc8544-i2c", "fsl-i2c";
82 reg = <0x3000 0x100>; 83 reg = <0x3000 0x100>;
83 interrupts = <43 2>; 84 interrupts = <43 2>;
84 interrupt-parent = <&mpic>; 85 interrupt-parent = <&mpic>;
85 dfsrr; 86 fsl,preserve-clocking;
86 87
87 dtt@28 { 88 dtt@28 {
88 compatible = "winbond,w83782d"; 89 compatible = "winbond,w83782d";
@@ -110,11 +111,11 @@
110 #address-cells = <1>; 111 #address-cells = <1>;
111 #size-cells = <0>; 112 #size-cells = <0>;
112 cell-index = <1>; 113 cell-index = <1>;
113 compatible = "fsl-i2c"; 114 compatible = "fsl,mpc8544-i2c", "fsl-i2c";
114 reg = <0x3100 0x100>; 115 reg = <0x3100 0x100>;
115 interrupts = <43 2>; 116 interrupts = <43 2>;
116 interrupt-parent = <&mpic>; 117 interrupt-parent = <&mpic>;
117 dfsrr; 118 fsl,preserve-clocking;
118 }; 119 };
119 120
120 enet0: ethernet@24000 { 121 enet0: ethernet@24000 {
diff --git a/arch/powerpc/boot/dts/stx_gp3_8560.dts b/arch/powerpc/boot/dts/stx_gp3_8560.dts
index 8b173957fb5f..ea6b15152de3 100644
--- a/arch/powerpc/boot/dts/stx_gp3_8560.dts
+++ b/arch/powerpc/boot/dts/stx_gp3_8560.dts
@@ -57,14 +57,14 @@
57 compatible = "fsl,mpc8560-immr", "simple-bus"; 57 compatible = "fsl,mpc8560-immr", "simple-bus";
58 58
59 memory-controller@2000 { 59 memory-controller@2000 {
60 compatible = "fsl,8540-memory-controller"; 60 compatible = "fsl,mpc8540-memory-controller";
61 reg = <0x2000 0x1000>; 61 reg = <0x2000 0x1000>;
62 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
63 interrupts = <18 2>; 63 interrupts = <18 2>;
64 }; 64 };
65 65
66 L2: l2-cache-controller@20000 { 66 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,mpc8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 68 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; 69 cache-line-size = <32>;
70 cache-size = <0x40000>; // L2, 256K 70 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts
index ac9413a29f9f..231bae756637 100644
--- a/arch/powerpc/boot/dts/tqm8540.dts
+++ b/arch/powerpc/boot/dts/tqm8540.dts
@@ -59,14 +59,14 @@
59 compatible = "fsl,mpc8540-immr", "simple-bus"; 59 compatible = "fsl,mpc8540-immr", "simple-bus";
60 60
61 memory-controller@2000 { 61 memory-controller@2000 {
62 compatible = "fsl,8540-memory-controller"; 62 compatible = "fsl,mpc8540-memory-controller";
63 reg = <0x2000 0x1000>; 63 reg = <0x2000 0x1000>;
64 interrupt-parent = <&mpic>; 64 interrupt-parent = <&mpic>;
65 interrupts = <18 2>; 65 interrupts = <18 2>;
66 }; 66 };
67 67
68 L2: l2-cache-controller@20000 { 68 L2: l2-cache-controller@20000 {
69 compatible = "fsl,8540-l2-cache-controller"; 69 compatible = "fsl,mpc8540-l2-cache-controller";
70 reg = <0x20000 0x1000>; 70 reg = <0x20000 0x1000>;
71 cache-line-size = <32>; 71 cache-line-size = <32>;
72 cache-size = <0x40000>; // L2, 256K 72 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts
index c71bb5dd5e5e..4356a1f08295 100644
--- a/arch/powerpc/boot/dts/tqm8541.dts
+++ b/arch/powerpc/boot/dts/tqm8541.dts
@@ -58,14 +58,14 @@
58 compatible = "fsl,mpc8541-immr", "simple-bus"; 58 compatible = "fsl,mpc8541-immr", "simple-bus";
59 59
60 memory-controller@2000 { 60 memory-controller@2000 {
61 compatible = "fsl,8540-memory-controller"; 61 compatible = "fsl,mpc8540-memory-controller";
62 reg = <0x2000 0x1000>; 62 reg = <0x2000 0x1000>;
63 interrupt-parent = <&mpic>; 63 interrupt-parent = <&mpic>;
64 interrupts = <18 2>; 64 interrupts = <18 2>;
65 }; 65 };
66 66
67 L2: l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,mpc8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; 70 cache-line-size = <32>;
71 cache-size = <0x40000>; // L2, 256K 71 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
index 28b1a95257cd..19aa72301c83 100644
--- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts
+++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
@@ -397,10 +397,13 @@
397 upm@3,0 { 397 upm@3,0 {
398 #address-cells = <0>; 398 #address-cells = <0>;
399 #size-cells = <0>; 399 #size-cells = <0>;
400 compatible = "fsl,upm-nand"; 400 compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
401 reg = <3 0x0 0x800>; 401 reg = <3 0x0 0x800>;
402 fsl,upm-addr-offset = <0x10>; 402 fsl,upm-addr-offset = <0x10>;
403 fsl,upm-cmd-offset = <0x08>; 403 fsl,upm-cmd-offset = <0x08>;
404 /* Micron MT29F8G08FAB multi-chip device */
405 fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
406 fsl,upm-wait-flags = <0x5>;
404 chip-delay = <25>; // in micro-seconds 407 chip-delay = <25>; // in micro-seconds
405 408
406 nand@0 { 409 nand@0 {
@@ -409,7 +412,7 @@
409 412
410 partition@0 { 413 partition@0 {
411 label = "fs"; 414 label = "fs";
412 reg = <0x00000000 0x01000000>; 415 reg = <0x00000000 0x10000000>;
413 }; 416 };
414 }; 417 };
415 }; 418 };
diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts
index 826fb622cd3c..49145a04fc6c 100644
--- a/arch/powerpc/boot/dts/tqm8548.dts
+++ b/arch/powerpc/boot/dts/tqm8548.dts
@@ -397,10 +397,13 @@
397 upm@3,0 { 397 upm@3,0 {
398 #address-cells = <0>; 398 #address-cells = <0>;
399 #size-cells = <0>; 399 #size-cells = <0>;
400 compatible = "fsl,upm-nand"; 400 compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
401 reg = <3 0x0 0x800>; 401 reg = <3 0x0 0x800>;
402 fsl,upm-addr-offset = <0x10>; 402 fsl,upm-addr-offset = <0x10>;
403 fsl,upm-cmd-offset = <0x08>; 403 fsl,upm-cmd-offset = <0x08>;
404 /* Micron MT29F8G08FAB multi-chip device */
405 fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
406 fsl,upm-wait-flags = <0x5>;
404 chip-delay = <25>; // in micro-seconds 407 chip-delay = <25>; // in micro-seconds
405 408
406 nand@0 { 409 nand@0 {
@@ -409,7 +412,7 @@
409 412
410 partition@0 { 413 partition@0 {
411 label = "fs"; 414 label = "fs";
412 reg = <0x00000000 0x01000000>; 415 reg = <0x00000000 0x10000000>;
413 }; 416 };
414 }; 417 };
415 }; 418 };
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts
index a133ded6dddb..06d366ebbda3 100644
--- a/arch/powerpc/boot/dts/tqm8555.dts
+++ b/arch/powerpc/boot/dts/tqm8555.dts
@@ -58,14 +58,14 @@
58 compatible = "fsl,mpc8555-immr", "simple-bus"; 58 compatible = "fsl,mpc8555-immr", "simple-bus";
59 59
60 memory-controller@2000 { 60 memory-controller@2000 {
61 compatible = "fsl,8540-memory-controller"; 61 compatible = "fsl,mpc8540-memory-controller";
62 reg = <0x2000 0x1000>; 62 reg = <0x2000 0x1000>;
63 interrupt-parent = <&mpic>; 63 interrupt-parent = <&mpic>;
64 interrupts = <18 2>; 64 interrupts = <18 2>;
65 }; 65 };
66 66
67 L2: l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,mpc8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; 70 cache-line-size = <32>;
71 cache-size = <0x40000>; // L2, 256K 71 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8560.dts b/arch/powerpc/boot/dts/tqm8560.dts
index 649e2e576267..feff915e0492 100644
--- a/arch/powerpc/boot/dts/tqm8560.dts
+++ b/arch/powerpc/boot/dts/tqm8560.dts
@@ -60,14 +60,14 @@
60 compatible = "fsl,mpc8560-immr", "simple-bus"; 60 compatible = "fsl,mpc8560-immr", "simple-bus";
61 61
62 memory-controller@2000 { 62 memory-controller@2000 {
63 compatible = "fsl,8540-memory-controller"; 63 compatible = "fsl,mpc8540-memory-controller";
64 reg = <0x2000 0x1000>; 64 reg = <0x2000 0x1000>;
65 interrupt-parent = <&mpic>; 65 interrupt-parent = <&mpic>;
66 interrupts = <18 2>; 66 interrupts = <18 2>;
67 }; 67 };
68 68
69 L2: l2-cache-controller@20000 { 69 L2: l2-cache-controller@20000 {
70 compatible = "fsl,8540-l2-cache-controller"; 70 compatible = "fsl,mpc8540-l2-cache-controller";
71 reg = <0x20000 0x1000>; 71 reg = <0x20000 0x1000>;
72 cache-line-size = <32>; 72 cache-line-size = <32>;
73 cache-size = <0x40000>; // L2, 256K 73 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index 61b100849715..f1889abb89b1 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -95,7 +95,7 @@ CONFIG_CGROUP_CPUACCT=y
95CONFIG_SYSFS_DEPRECATED=y 95CONFIG_SYSFS_DEPRECATED=y
96CONFIG_SYSFS_DEPRECATED_V2=y 96CONFIG_SYSFS_DEPRECATED_V2=y
97CONFIG_PROC_PID_CPUSET=y 97CONFIG_PROC_PID_CPUSET=y
98# CONFIG_RELAY is not set 98CONFIG_RELAY=y
99CONFIG_NAMESPACES=y 99CONFIG_NAMESPACES=y
100# CONFIG_UTS_NS is not set 100# CONFIG_UTS_NS is not set
101# CONFIG_IPC_NS is not set 101# CONFIG_IPC_NS is not set
diff --git a/arch/powerpc/include/asm/lppaca.h b/arch/powerpc/include/asm/lppaca.h
index 68235f7e4a8f..d2a65e8ca6ae 100644
--- a/arch/powerpc/include/asm/lppaca.h
+++ b/arch/powerpc/include/asm/lppaca.h
@@ -125,7 +125,7 @@ struct lppaca {
125 // NOTE: This value will ALWAYS be zero for dedicated processors and 125 // NOTE: This value will ALWAYS be zero for dedicated processors and
126 // will NEVER be zero for shared processors (ie, initialized to a 1). 126 // will NEVER be zero for shared processors (ie, initialized to a 1).
127 volatile u32 yield_count; // PLIC increments each dispatchx00-x03 127 volatile u32 yield_count; // PLIC increments each dispatchx00-x03
128 u32 reserved6; 128 volatile u32 dispersion_count; // dispatch changed phys cpu x04-x07
129 volatile u64 cmo_faults; // CMO page fault count x08-x0F 129 volatile u64 cmo_faults; // CMO page fault count x08-x0F
130 volatile u64 cmo_fault_time; // CMO page fault time x10-x17 130 volatile u64 cmo_fault_time; // CMO page fault time x10-x17
131 u8 reserved7[104]; // Reserved x18-x7F 131 u8 reserved7[104]; // Reserved x18-x7F
diff --git a/arch/powerpc/include/asm/mpic.h b/arch/powerpc/include/asm/mpic.h
index c2ccca53b991..a002682f3a6d 100644
--- a/arch/powerpc/include/asm/mpic.h
+++ b/arch/powerpc/include/asm/mpic.h
@@ -22,6 +22,14 @@
22#define MPIC_GREG_FEATURE_1 0x00010 22#define MPIC_GREG_FEATURE_1 0x00010
23#define MPIC_GREG_GLOBAL_CONF_0 0x00020 23#define MPIC_GREG_GLOBAL_CONF_0 0x00020
24#define MPIC_GREG_GCONF_RESET 0x80000000 24#define MPIC_GREG_GCONF_RESET 0x80000000
25/* On the FSL mpic implementations the Mode field is expand to be
26 * 2 bits wide:
27 * 0b00 = pass through (interrupts routed to IRQ0)
28 * 0b01 = Mixed mode
29 * 0b10 = reserved
30 * 0b11 = External proxy / coreint
31 */
32#define MPIC_GREG_GCONF_COREINT 0x60000000
25#define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000 33#define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000
26#define MPIC_GREG_GCONF_NO_BIAS 0x10000000 34#define MPIC_GREG_GCONF_NO_BIAS 0x10000000
27#define MPIC_GREG_GCONF_BASE_MASK 0x000fffff 35#define MPIC_GREG_GCONF_BASE_MASK 0x000fffff
@@ -357,6 +365,8 @@ struct mpic
357#define MPIC_BROKEN_FRR_NIRQS 0x00000800 365#define MPIC_BROKEN_FRR_NIRQS 0x00000800
358/* Destination only supports a single CPU at a time */ 366/* Destination only supports a single CPU at a time */
359#define MPIC_SINGLE_DEST_CPU 0x00001000 367#define MPIC_SINGLE_DEST_CPU 0x00001000
368/* Enable CoreInt delivery of interrupts */
369#define MPIC_ENABLE_COREINT 0x00002000
360 370
361/* MPIC HW modification ID */ 371/* MPIC HW modification ID */
362#define MPIC_REGSET_MASK 0xf0000000 372#define MPIC_REGSET_MASK 0xf0000000
@@ -470,6 +480,8 @@ extern void mpic_end_irq(unsigned int irq);
470extern unsigned int mpic_get_one_irq(struct mpic *mpic); 480extern unsigned int mpic_get_one_irq(struct mpic *mpic);
471/* This one gets from the primary mpic */ 481/* This one gets from the primary mpic */
472extern unsigned int mpic_get_irq(void); 482extern unsigned int mpic_get_irq(void);
483/* This one gets from the primary mpic via CoreInt*/
484extern unsigned int mpic_get_coreint_irq(void);
473/* Fetch Machine Check interrupt from primary mpic */ 485/* Fetch Machine Check interrupt from primary mpic */
474extern unsigned int mpic_get_mcirq(void); 486extern unsigned int mpic_get_mcirq(void);
475 487
diff --git a/arch/powerpc/include/asm/ps3fb.h b/arch/powerpc/include/asm/ps3fb.h
index 90dbefb8cfc4..e7233a849680 100644
--- a/arch/powerpc/include/asm/ps3fb.h
+++ b/arch/powerpc/include/asm/ps3fb.h
@@ -21,7 +21,6 @@
21 21
22#include <linux/types.h> 22#include <linux/types.h>
23#include <linux/ioctl.h> 23#include <linux/ioctl.h>
24#include <linux/types.h>
25 24
26/* ioctl */ 25/* ioctl */
27#define PS3FB_IOCTL_SETMODE _IOW('r', 1, int) /* set video mode */ 26#define PS3FB_IOCTL_SETMODE _IOW('r', 1, int) /* set video mode */
diff --git a/arch/powerpc/include/asm/pte-common.h b/arch/powerpc/include/asm/pte-common.h
index d9740e886801..a7e210b6b48c 100644
--- a/arch/powerpc/include/asm/pte-common.h
+++ b/arch/powerpc/include/asm/pte-common.h
@@ -151,9 +151,11 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
151 _PAGE_NO_CACHE) 151 _PAGE_NO_CACHE)
152#define PAGE_KERNEL_NCG __pgprot(_PAGE_BASE_NC | _PAGE_KERNEL_RW | \ 152#define PAGE_KERNEL_NCG __pgprot(_PAGE_BASE_NC | _PAGE_KERNEL_RW | \
153 _PAGE_NO_CACHE | _PAGE_GUARDED) 153 _PAGE_NO_CACHE | _PAGE_GUARDED)
154#define PAGE_KERNEL_X __pgprot(_PAGE_BASE | _PAGE_KERNEL_RW | _PAGE_EXEC) 154#define PAGE_KERNEL_X __pgprot(_PAGE_BASE | _PAGE_KERNEL_RW | _PAGE_EXEC | \
155 _PAGE_HWEXEC)
155#define PAGE_KERNEL_RO __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO) 156#define PAGE_KERNEL_RO __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO)
156#define PAGE_KERNEL_ROX __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO | _PAGE_EXEC) 157#define PAGE_KERNEL_ROX __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO | _PAGE_EXEC | \
158 _PAGE_HWEXEC)
157 159
158/* Protection used for kernel text. We want the debuggers to be able to 160/* Protection used for kernel text. We want the debuggers to be able to
159 * set breakpoints anywhere, so don't write protect the kernel text 161 * set breakpoints anywhere, so don't write protect the kernel text
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index c9ff1ec97479..e8018d540e87 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -143,6 +143,36 @@
143#define FPSCR_NI 0x00000004 /* FPU non IEEE-Mode */ 143#define FPSCR_NI 0x00000004 /* FPU non IEEE-Mode */
144#define FPSCR_RN 0x00000003 /* FPU rounding control */ 144#define FPSCR_RN 0x00000003 /* FPU rounding control */
145 145
146/* Bit definitions for SPEFSCR. */
147#define SPEFSCR_SOVH 0x80000000 /* Summary integer overflow high */
148#define SPEFSCR_OVH 0x40000000 /* Integer overflow high */
149#define SPEFSCR_FGH 0x20000000 /* Embedded FP guard bit high */
150#define SPEFSCR_FXH 0x10000000 /* Embedded FP sticky bit high */
151#define SPEFSCR_FINVH 0x08000000 /* Embedded FP invalid operation high */
152#define SPEFSCR_FDBZH 0x04000000 /* Embedded FP div by zero high */
153#define SPEFSCR_FUNFH 0x02000000 /* Embedded FP underflow high */
154#define SPEFSCR_FOVFH 0x01000000 /* Embedded FP overflow high */
155#define SPEFSCR_FINXS 0x00200000 /* Embedded FP inexact sticky */
156#define SPEFSCR_FINVS 0x00100000 /* Embedded FP invalid op. sticky */
157#define SPEFSCR_FDBZS 0x00080000 /* Embedded FP div by zero sticky */
158#define SPEFSCR_FUNFS 0x00040000 /* Embedded FP underflow sticky */
159#define SPEFSCR_FOVFS 0x00020000 /* Embedded FP overflow sticky */
160#define SPEFSCR_MODE 0x00010000 /* Embedded FP mode */
161#define SPEFSCR_SOV 0x00008000 /* Integer summary overflow */
162#define SPEFSCR_OV 0x00004000 /* Integer overflow */
163#define SPEFSCR_FG 0x00002000 /* Embedded FP guard bit */
164#define SPEFSCR_FX 0x00001000 /* Embedded FP sticky bit */
165#define SPEFSCR_FINV 0x00000800 /* Embedded FP invalid operation */
166#define SPEFSCR_FDBZ 0x00000400 /* Embedded FP div by zero */
167#define SPEFSCR_FUNF 0x00000200 /* Embedded FP underflow */
168#define SPEFSCR_FOVF 0x00000100 /* Embedded FP overflow */
169#define SPEFSCR_FINXE 0x00000040 /* Embedded FP inexact enable */
170#define SPEFSCR_FINVE 0x00000020 /* Embedded FP invalid op. enable */
171#define SPEFSCR_FDBZE 0x00000010 /* Embedded FP div by zero enable */
172#define SPEFSCR_FUNFE 0x00000008 /* Embedded FP underflow enable */
173#define SPEFSCR_FOVFE 0x00000004 /* Embedded FP overflow enable */
174#define SPEFSCR_FRMC 0x00000003 /* Embedded FP rounding mode control */
175
146/* Special Purpose Registers (SPRNs)*/ 176/* Special Purpose Registers (SPRNs)*/
147#define SPRN_CTR 0x009 /* Count Register */ 177#define SPRN_CTR 0x009 /* Count Register */
148#define SPRN_DSCR 0x11 178#define SPRN_DSCR 0x11
diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h
index a56f4d61aa72..601ddbc46002 100644
--- a/arch/powerpc/include/asm/reg_booke.h
+++ b/arch/powerpc/include/asm/reg_booke.h
@@ -423,36 +423,6 @@
423#define SGR_NORMAL 0 /* Speculative fetching allowed. */ 423#define SGR_NORMAL 0 /* Speculative fetching allowed. */
424#define SGR_GUARDED 1 /* Speculative fetching disallowed. */ 424#define SGR_GUARDED 1 /* Speculative fetching disallowed. */
425 425
426/* Bit definitions for SPEFSCR. */
427#define SPEFSCR_SOVH 0x80000000 /* Summary integer overflow high */
428#define SPEFSCR_OVH 0x40000000 /* Integer overflow high */
429#define SPEFSCR_FGH 0x20000000 /* Embedded FP guard bit high */
430#define SPEFSCR_FXH 0x10000000 /* Embedded FP sticky bit high */
431#define SPEFSCR_FINVH 0x08000000 /* Embedded FP invalid operation high */
432#define SPEFSCR_FDBZH 0x04000000 /* Embedded FP div by zero high */
433#define SPEFSCR_FUNFH 0x02000000 /* Embedded FP underflow high */
434#define SPEFSCR_FOVFH 0x01000000 /* Embedded FP overflow high */
435#define SPEFSCR_FINXS 0x00200000 /* Embedded FP inexact sticky */
436#define SPEFSCR_FINVS 0x00100000 /* Embedded FP invalid op. sticky */
437#define SPEFSCR_FDBZS 0x00080000 /* Embedded FP div by zero sticky */
438#define SPEFSCR_FUNFS 0x00040000 /* Embedded FP underflow sticky */
439#define SPEFSCR_FOVFS 0x00020000 /* Embedded FP overflow sticky */
440#define SPEFSCR_MODE 0x00010000 /* Embedded FP mode */
441#define SPEFSCR_SOV 0x00008000 /* Integer summary overflow */
442#define SPEFSCR_OV 0x00004000 /* Integer overflow */
443#define SPEFSCR_FG 0x00002000 /* Embedded FP guard bit */
444#define SPEFSCR_FX 0x00001000 /* Embedded FP sticky bit */
445#define SPEFSCR_FINV 0x00000800 /* Embedded FP invalid operation */
446#define SPEFSCR_FDBZ 0x00000400 /* Embedded FP div by zero */
447#define SPEFSCR_FUNF 0x00000200 /* Embedded FP underflow */
448#define SPEFSCR_FOVF 0x00000100 /* Embedded FP overflow */
449#define SPEFSCR_FINXE 0x00000040 /* Embedded FP inexact enable */
450#define SPEFSCR_FINVE 0x00000020 /* Embedded FP invalid op. enable */
451#define SPEFSCR_FDBZE 0x00000010 /* Embedded FP div by zero enable */
452#define SPEFSCR_FUNFE 0x00000008 /* Embedded FP underflow enable */
453#define SPEFSCR_FOVFE 0x00000004 /* Embedded FP overflow enable */
454#define SPEFSCR_FRMC 0x00000003 /* Embedded FP rounding mode control */
455
456/* 426/*
457 * The IBM-403 is an even more odd special case, as it is much 427 * The IBM-403 is an even more odd special case, as it is much
458 * older than the IBM-405 series. We put these down here incase someone 428 * older than the IBM-405 series. We put these down here incase someone
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h
index 0aa0315fb7e8..01c12339b304 100644
--- a/arch/powerpc/include/asm/rtas.h
+++ b/arch/powerpc/include/asm/rtas.h
@@ -68,7 +68,8 @@ struct rtas_t {
68#define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */ 68#define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */
69#define RTAS_POWERMGM_EVENTS 0x20000000 /* set bit 2 */ 69#define RTAS_POWERMGM_EVENTS 0x20000000 /* set bit 2 */
70#define RTAS_HOTPLUG_EVENTS 0x10000000 /* set bit 3 */ 70#define RTAS_HOTPLUG_EVENTS 0x10000000 /* set bit 3 */
71#define RTAS_EVENT_SCAN_ALL_EVENTS 0xf0000000 71#define RTAS_IO_EVENTS 0x08000000 /* set bit 4 */
72#define RTAS_EVENT_SCAN_ALL_EVENTS 0xffffffff
72 73
73/* RTAS event severity */ 74/* RTAS event severity */
74#define RTAS_SEVERITY_FATAL 0x5 75#define RTAS_SEVERITY_FATAL 0x5
diff --git a/arch/powerpc/include/asm/sfp-machine.h b/arch/powerpc/include/asm/sfp-machine.h
index 3d9f831c3c55..3a7a67a0d006 100644
--- a/arch/powerpc/include/asm/sfp-machine.h
+++ b/arch/powerpc/include/asm/sfp-machine.h
@@ -29,9 +29,9 @@
29 29
30/* basic word size definitions */ 30/* basic word size definitions */
31#define _FP_W_TYPE_SIZE 32 31#define _FP_W_TYPE_SIZE 32
32#define _FP_W_TYPE unsigned long 32#define _FP_W_TYPE unsigned int
33#define _FP_WS_TYPE signed long 33#define _FP_WS_TYPE signed int
34#define _FP_I_TYPE long 34#define _FP_I_TYPE int
35 35
36#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) 36#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
37#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) 37#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h
index fe166491e9dc..d98a30dfd41c 100644
--- a/arch/powerpc/include/asm/systbl.h
+++ b/arch/powerpc/include/asm/systbl.h
@@ -322,3 +322,6 @@ SYSCALL_SPU(epoll_create1)
322SYSCALL_SPU(dup3) 322SYSCALL_SPU(dup3)
323SYSCALL_SPU(pipe2) 323SYSCALL_SPU(pipe2)
324SYSCALL(inotify_init1) 324SYSCALL(inotify_init1)
325SYSCALL(ni_syscall)
326COMPAT_SYS_SPU(preadv)
327COMPAT_SYS_SPU(pwritev)
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
index e07d0c76ed77..3f06f8ec81c5 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h
@@ -341,10 +341,12 @@
341#define __NR_dup3 316 341#define __NR_dup3 316
342#define __NR_pipe2 317 342#define __NR_pipe2 317
343#define __NR_inotify_init1 318 343#define __NR_inotify_init1 318
344#define __NR_preadv 320
345#define __NR_pwritev 321
344 346
345#ifdef __KERNEL__ 347#ifdef __KERNEL__
346 348
347#define __NR_syscalls 319 349#define __NR_syscalls 322
348 350
349#define __NR__exit __NR_exit 351#define __NR__exit __NR_exit
350#define NR_syscalls __NR_syscalls 352#define NR_syscalls __NR_syscalls
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 1c5c8a6fc129..53c7788cba78 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -94,7 +94,7 @@ static int dma_direct_dma_supported(struct device *dev, u64 mask)
94 * done via some global so platforms can set the limit in case 94 * done via some global so platforms can set the limit in case
95 * they have limited DMA windows 95 * they have limited DMA windows
96 */ 96 */
97 return mask >= DMA_32BIT_MASK; 97 return mask >= DMA_BIT_MASK(32);
98#else 98#else
99 return 1; 99 return 1;
100#endif 100#endif
diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S
index a088c064ae40..2436df33c6f4 100644
--- a/arch/powerpc/kernel/fpu.S
+++ b/arch/powerpc/kernel/fpu.S
@@ -145,6 +145,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
145 beq 1f 145 beq 1f
146 PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 146 PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5)
147 li r3,MSR_FP|MSR_FE0|MSR_FE1 147 li r3,MSR_FP|MSR_FE0|MSR_FE1
148#ifdef CONFIG_VSX
149BEGIN_FTR_SECTION
150 oris r3,r3,MSR_VSX@h
151END_FTR_SECTION_IFSET(CPU_FTR_VSX)
152#endif
148 andc r4,r4,r3 /* disable FP for previous task */ 153 andc r4,r4,r3 /* disable FP for previous task */
149 PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 154 PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5)
1501: 1551:
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
index 5455943f16aa..70e2a736be1f 100644
--- a/arch/powerpc/kernel/ftrace.c
+++ b/arch/powerpc/kernel/ftrace.c
@@ -293,7 +293,7 @@ __ftrace_make_nop(struct module *mod,
293 if (tramp & 0x8000) 293 if (tramp & 0x8000)
294 tramp -= 0x10000; 294 tramp -= 0x10000;
295 295
296 pr_debug(" %x ", tramp); 296 pr_debug(" %lx ", tramp);
297 297
298 if (tramp != addr) { 298 if (tramp != addr) {
299 printk(KERN_ERR 299 printk(KERN_ERR
@@ -564,7 +564,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
564 if (unlikely(atomic_read(&current->tracing_graph_pause))) 564 if (unlikely(atomic_read(&current->tracing_graph_pause)))
565 return; 565 return;
566 566
567#if CONFIG_PPC64 567#ifdef CONFIG_PPC64
568 /* non core kernel code needs to save and restore the TOC */ 568 /* non core kernel code needs to save and restore the TOC */
569 if (REGION_ID(self_addr) != KERNEL_REGION_ID) 569 if (REGION_ID(self_addr) != KERNEL_REGION_ID)
570 return_hooker = (unsigned long)&mod_return_to_handler; 570 return_hooker = (unsigned long)&mod_return_to_handler;
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 5576147e57b6..8c1a4966867e 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -672,11 +672,13 @@ unsigned int irq_create_mapping(struct irq_host *host,
672 return NO_IRQ; 672 return NO_IRQ;
673 } 673 }
674 } 674 }
675 pr_debug("irq: -> obtained virq %d\n", virq);
676 675
677 if (irq_setup_virq(host, virq, hwirq)) 676 if (irq_setup_virq(host, virq, hwirq))
678 return NO_IRQ; 677 return NO_IRQ;
679 678
679 printk(KERN_DEBUG "irq: irq %lu on host %s mapped to virtual irq %u\n",
680 hwirq, host->of_node ? host->of_node->full_name : "null", virq);
681
680 return virq; 682 return virq;
681} 683}
682EXPORT_SYMBOL_GPL(irq_create_mapping); 684EXPORT_SYMBOL_GPL(irq_create_mapping);
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index 182e0f642f36..78b3f7840ade 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -434,6 +434,21 @@ static void pseries_cmo_data(struct seq_file *m)
434 seq_printf(m, "cmo_page_size=%lu\n", cmo_get_page_size()); 434 seq_printf(m, "cmo_page_size=%lu\n", cmo_get_page_size());
435} 435}
436 436
437static void splpar_dispatch_data(struct seq_file *m)
438{
439 int cpu;
440 unsigned long dispatches = 0;
441 unsigned long dispatch_dispersions = 0;
442
443 for_each_possible_cpu(cpu) {
444 dispatches += lppaca[cpu].yield_count;
445 dispatch_dispersions += lppaca[cpu].dispersion_count;
446 }
447
448 seq_printf(m, "dispatches=%lu\n", dispatches);
449 seq_printf(m, "dispatch_dispersions=%lu\n", dispatch_dispersions);
450}
451
437static int pseries_lparcfg_data(struct seq_file *m, void *v) 452static int pseries_lparcfg_data(struct seq_file *m, void *v)
438{ 453{
439 int partition_potential_processors; 454 int partition_potential_processors;
@@ -460,6 +475,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
460 parse_ppp_data(m); 475 parse_ppp_data(m);
461 parse_mpp_data(m); 476 parse_mpp_data(m);
462 pseries_cmo_data(m); 477 pseries_cmo_data(m);
478 splpar_dispatch_data(m);
463 479
464 seq_printf(m, "purr=%ld\n", get_purr()); 480 seq_printf(m, "purr=%ld\n", get_purr());
465 } else { /* non SPLPAR case */ 481 } else { /* non SPLPAR case */
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
index 3053fe5c62f2..b9530b2395a2 100644
--- a/arch/powerpc/kernel/misc_64.S
+++ b/arch/powerpc/kernel/misc_64.S
@@ -495,7 +495,15 @@ _GLOBAL(giveup_altivec)
495 stvx vr0,r4,r3 495 stvx vr0,r4,r3
496 beq 1f 496 beq 1f
497 ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 497 ld r4,_MSR-STACK_FRAME_OVERHEAD(r5)
498#ifdef CONFIG_VSX
499BEGIN_FTR_SECTION
500 lis r3,(MSR_VEC|MSR_VSX)@h
501FTR_SECTION_ELSE
502 lis r3,MSR_VEC@h
503ALT_FTR_SECTION_END_IFSET(CPU_FTR_VSX)
504#else
498 lis r3,MSR_VEC@h 505 lis r3,MSR_VEC@h
506#endif
499 andc r4,r4,r3 /* disable FP for previous task */ 507 andc r4,r4,r3 /* disable FP for previous task */
500 std r4,_MSR-STACK_FRAME_OVERHEAD(r5) 508 std r4,_MSR-STACK_FRAME_OVERHEAD(r5)
5011: 5091:
diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c
index 3f37a6e62771..87df428e3588 100644
--- a/arch/powerpc/kernel/of_platform.c
+++ b/arch/powerpc/kernel/of_platform.c
@@ -76,7 +76,7 @@ struct of_device* of_platform_device_create(struct device_node *np,
76 return NULL; 76 return NULL;
77 77
78 dev->dma_mask = 0xffffffffUL; 78 dev->dma_mask = 0xffffffffUL;
79 dev->dev.coherent_dma_mask = DMA_32BIT_MASK; 79 dev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
80 80
81 dev->dev.bus = &of_platform_bus_type; 81 dev->dev.bus = &of_platform_bus_type;
82 82
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 2e026c0407d4..2f0e64b53642 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -614,7 +614,7 @@ static unsigned char ibm_architecture_vec[] = {
614 W(0xffffffff), /* virt_base */ 614 W(0xffffffff), /* virt_base */
615 W(0xffffffff), /* virt_size */ 615 W(0xffffffff), /* virt_size */
616 W(0xffffffff), /* load_base */ 616 W(0xffffffff), /* load_base */
617 W(64), /* 128MB min RMA */ 617 W(64), /* 64MB min RMA */
618 W(0xffffffff), /* full client load */ 618 W(0xffffffff), /* full client load */
619 0, /* min RMA percentage of total RAM */ 619 0, /* min RMA percentage of total RAM */
620 48, /* max log_2(hash table size) */ 620 48, /* max log_2(hash table size) */
@@ -732,15 +732,17 @@ static void __init prom_send_capabilities(void)
732 root = call_prom("open", 1, 1, ADDR("/")); 732 root = call_prom("open", 1, 1, ADDR("/"));
733 if (root != 0) { 733 if (root != 0) {
734 /* try calling the ibm,client-architecture-support method */ 734 /* try calling the ibm,client-architecture-support method */
735 prom_printf("Calling ibm,client-architecture...");
735 if (call_prom_ret("call-method", 3, 2, &ret, 736 if (call_prom_ret("call-method", 3, 2, &ret,
736 ADDR("ibm,client-architecture-support"), 737 ADDR("ibm,client-architecture-support"),
737 root, 738 root,
738 ADDR(ibm_architecture_vec)) == 0) { 739 ADDR(ibm_architecture_vec)) == 0) {
739 /* the call exists... */ 740 /* the call exists... */
740 if (ret) 741 if (ret)
741 prom_printf("WARNING: ibm,client-architecture" 742 prom_printf("\nWARNING: ibm,client-architecture"
742 "-support call FAILED!\n"); 743 "-support call FAILED!\n");
743 call_prom("close", 1, 0, root); 744 call_prom("close", 1, 0, root);
745 prom_printf(" done\n");
744 return; 746 return;
745 } 747 }
746 call_prom("close", 1, 0, root); 748 call_prom("close", 1, 0, root);
@@ -1083,7 +1085,7 @@ static void __init prom_instantiate_rtas(void)
1083 return; 1085 return;
1084 } 1086 }
1085 1087
1086 prom_printf("instantiating rtas at 0x%x ...", base); 1088 prom_printf("instantiating rtas at 0x%x...", base);
1087 1089
1088 if (call_prom_ret("call-method", 3, 2, &entry, 1090 if (call_prom_ret("call-method", 3, 2, &entry,
1089 ADDR("instantiate-rtas"), 1091 ADDR("instantiate-rtas"),
@@ -1495,7 +1497,7 @@ static int __init prom_find_machine_type(void)
1495 return PLATFORM_GENERIC; 1497 return PLATFORM_GENERIC;
1496 x = prom_getproplen(rtas, "ibm,hypertas-functions"); 1498 x = prom_getproplen(rtas, "ibm,hypertas-functions");
1497 if (x != PROM_ERROR) { 1499 if (x != PROM_ERROR) {
1498 prom_printf("Hypertas detected, assuming LPAR !\n"); 1500 prom_debug("Hypertas detected, assuming LPAR !\n");
1499 return PLATFORM_PSERIES_LPAR; 1501 return PLATFORM_PSERIES_LPAR;
1500 } 1502 }
1501 return PLATFORM_PSERIES; 1503 return PLATFORM_PSERIES;
@@ -1544,7 +1546,7 @@ static void __init prom_check_displays(void)
1544 }; 1546 };
1545 const unsigned char *clut; 1547 const unsigned char *clut;
1546 1548
1547 prom_printf("Looking for displays\n"); 1549 prom_debug("Looking for displays\n");
1548 for (node = 0; prom_next_node(&node); ) { 1550 for (node = 0; prom_next_node(&node); ) {
1549 memset(type, 0, sizeof(type)); 1551 memset(type, 0, sizeof(type));
1550 prom_getprop(node, "device_type", type, sizeof(type)); 1552 prom_getprop(node, "device_type", type, sizeof(type));
@@ -1562,7 +1564,7 @@ static void __init prom_check_displays(void)
1562 if (call_prom("package-to-path", 3, 1, node, path, 1564 if (call_prom("package-to-path", 3, 1, node, path,
1563 PROM_SCRATCH_SIZE-10) == PROM_ERROR) 1565 PROM_SCRATCH_SIZE-10) == PROM_ERROR)
1564 continue; 1566 continue;
1565 prom_printf("found display : %s, opening ... ", path); 1567 prom_printf("found display : %s, opening... ", path);
1566 1568
1567 ih = call_prom("open", 1, 1, path); 1569 ih = call_prom("open", 1, 1, path);
1568 if (ih == 0) { 1570 if (ih == 0) {
@@ -2387,7 +2389,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2387 /* 2389 /*
2388 * Now finally create the flattened device-tree 2390 * Now finally create the flattened device-tree
2389 */ 2391 */
2390 prom_printf("copying OF device tree ...\n"); 2392 prom_printf("copying OF device tree...\n");
2391 flatten_device_tree(); 2393 flatten_device_tree();
2392 2394
2393 /* 2395 /*
@@ -2402,7 +2404,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2402 * Call OF "quiesce" method to shut down pending DMA's from 2404 * Call OF "quiesce" method to shut down pending DMA's from
2403 * devices etc... 2405 * devices etc...
2404 */ 2406 */
2405 prom_printf("Calling quiesce ...\n"); 2407 prom_printf("Calling quiesce...\n");
2406 call_prom("quiesce", 0, 0); 2408 call_prom("quiesce", 0, 0);
2407 2409
2408 /* 2410 /*
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c
index 197d49c790ad..297632cba047 100644
--- a/arch/powerpc/kernel/ptrace32.c
+++ b/arch/powerpc/kernel/ptrace32.c
@@ -67,7 +67,8 @@ static long compat_ptrace_old(struct task_struct *child, long request,
67/* Macros to workout the correct index for the FPR in the thread struct */ 67/* Macros to workout the correct index for the FPR in the thread struct */
68#define FPRNUMBER(i) (((i) - PT_FPR0) >> 1) 68#define FPRNUMBER(i) (((i) - PT_FPR0) >> 1)
69#define FPRHALF(i) (((i) - PT_FPR0) & 1) 69#define FPRHALF(i) (((i) - PT_FPR0) & 1)
70#define FPRINDEX(i) TS_FPRWIDTH * FPRNUMBER(i) + FPRHALF(i) 70#define FPRINDEX(i) TS_FPRWIDTH * FPRNUMBER(i) * 2 + FPRHALF(i)
71#define FPRINDEX_3264(i) (TS_FPRWIDTH * ((i) - PT_FPR0))
71 72
72long compat_arch_ptrace(struct task_struct *child, compat_long_t request, 73long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
73 compat_ulong_t caddr, compat_ulong_t cdata) 74 compat_ulong_t caddr, compat_ulong_t cdata)
@@ -168,8 +169,9 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
168 CHECK_FULL_REGS(child->thread.regs); 169 CHECK_FULL_REGS(child->thread.regs);
169 if (numReg >= PT_FPR0) { 170 if (numReg >= PT_FPR0) {
170 flush_fp_to_thread(child); 171 flush_fp_to_thread(child);
171 tmp = ((unsigned long int *)child->thread.fpr) 172 /* get 64 bit FPR */
172 [FPRINDEX(numReg)]; 173 tmp = ((u64 *)child->thread.fpr)
174 [FPRINDEX_3264(numReg)];
173 } else { /* register within PT_REGS struct */ 175 } else { /* register within PT_REGS struct */
174 tmp = ptrace_get_reg(child, numReg); 176 tmp = ptrace_get_reg(child, numReg);
175 } 177 }
@@ -262,8 +264,13 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
262 freg = (freg & 0xfffffffful) | (data << 32); 264 freg = (freg & 0xfffffffful) | (data << 32);
263 ret = ptrace_put_reg(child, numReg, freg); 265 ret = ptrace_put_reg(child, numReg, freg);
264 } else { 266 } else {
267 u64 *tmp;
265 flush_fp_to_thread(child); 268 flush_fp_to_thread(child);
266 ((unsigned int *)child->thread.regs)[index] = data; 269 /* get 64 bit FPR ... */
270 tmp = &(((u64 *)child->thread.fpr)
271 [FPRINDEX_3264(numReg)]);
272 /* ... write the 32 bit part we want */
273 ((u32 *)tmp)[index % 2] = data;
267 ret = 0; 274 ret = 0;
268 } 275 }
269 break; 276 break;
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 9774f9fed96e..02fed27af7f6 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -36,7 +36,6 @@
36#include <linux/percpu.h> 36#include <linux/percpu.h>
37#include <linux/lmb.h> 37#include <linux/lmb.h>
38#include <linux/of_platform.h> 38#include <linux/of_platform.h>
39#include <linux/platform_device.h>
40#include <asm/io.h> 39#include <asm/io.h>
41#include <asm/prom.h> 40#include <asm/prom.h>
42#include <asm/processor.h> 41#include <asm/processor.h>
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index 5744527a7f2a..bed4690de394 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -644,7 +644,7 @@ static void dma_fixed_unmap_sg(struct device *dev, struct scatterlist *sg,
644 644
645static int dma_fixed_dma_supported(struct device *dev, u64 mask) 645static int dma_fixed_dma_supported(struct device *dev, u64 mask)
646{ 646{
647 return mask == DMA_64BIT_MASK; 647 return mask == DMA_BIT_MASK(64);
648} 648}
649 649
650static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask); 650static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask);
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c
index 6ed75bffc8ab..ff43f1fd8343 100644
--- a/arch/powerpc/platforms/iseries/iommu.c
+++ b/arch/powerpc/platforms/iseries/iommu.c
@@ -202,7 +202,7 @@ static struct iommu_table vio_iommu_table;
202void *iseries_hv_alloc(size_t size, dma_addr_t *dma_handle, gfp_t flag) 202void *iseries_hv_alloc(size_t size, dma_addr_t *dma_handle, gfp_t flag)
203{ 203{
204 return iommu_alloc_coherent(NULL, &vio_iommu_table, size, dma_handle, 204 return iommu_alloc_coherent(NULL, &vio_iommu_table, size, dma_handle,
205 DMA_32BIT_MASK, flag, -1); 205 DMA_BIT_MASK(32), flag, -1);
206} 206}
207EXPORT_SYMBOL_GPL(iseries_hv_alloc); 207EXPORT_SYMBOL_GPL(iseries_hv_alloc);
208 208
@@ -217,7 +217,7 @@ dma_addr_t iseries_hv_map(void *vaddr, size_t size,
217{ 217{
218 return iommu_map_page(NULL, &vio_iommu_table, virt_to_page(vaddr), 218 return iommu_map_page(NULL, &vio_iommu_table, virt_to_page(vaddr),
219 (unsigned long)vaddr % PAGE_SIZE, size, 219 (unsigned long)vaddr % PAGE_SIZE, size,
220 DMA_32BIT_MASK, direction, NULL); 220 DMA_BIT_MASK(32), direction, NULL);
221} 221}
222 222
223void iseries_hv_unmap(dma_addr_t dma_handle, size_t size, 223void iseries_hv_unmap(dma_addr_t dma_handle, size_t size,
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index a705fffbb498..9a73d0238639 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -689,7 +689,7 @@ static void ps3_ioc0_unmap_sg(struct device *_dev, struct scatterlist *sg,
689 689
690static int ps3_dma_supported(struct device *_dev, u64 mask) 690static int ps3_dma_supported(struct device *_dev, u64 mask)
691{ 691{
692 return mask >= DMA_32BIT_MASK; 692 return mask >= DMA_BIT_MASK(32);
693} 693}
694 694
695static struct dma_mapping_ops ps3_sb_dma_ops = { 695static struct dma_mapping_ops ps3_sb_dma_ops = {
diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c
index 0494ee55920f..dceb8d1a843d 100644
--- a/arch/powerpc/sysdev/fsl_lbc.c
+++ b/arch/powerpc/sysdev/fsl_lbc.c
@@ -150,7 +150,7 @@ int fsl_upm_run_pattern(struct fsl_upm *upm, void __iomem *io_base, u32 mar)
150 150
151 spin_lock_irqsave(&fsl_lbc_lock, flags); 151 spin_lock_irqsave(&fsl_lbc_lock, flags);
152 152
153 out_be32(&fsl_lbc_regs->mar, mar << (32 - upm->width)); 153 out_be32(&fsl_lbc_regs->mar, mar);
154 154
155 switch (upm->width) { 155 switch (upm->width) {
156 case 8: 156 case 8:
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 532e205303a2..21b956701596 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -1170,6 +1170,12 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1170 mb(); 1170 mb();
1171 } 1171 }
1172 1172
1173 /* CoreInt */
1174 if (flags & MPIC_ENABLE_COREINT)
1175 mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0),
1176 mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0))
1177 | MPIC_GREG_GCONF_COREINT);
1178
1173 if (flags & MPIC_ENABLE_MCK) 1179 if (flags & MPIC_ENABLE_MCK)
1174 mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0), 1180 mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0),
1175 mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0)) 1181 mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0))
@@ -1525,6 +1531,34 @@ unsigned int mpic_get_irq(void)
1525 return mpic_get_one_irq(mpic); 1531 return mpic_get_one_irq(mpic);
1526} 1532}
1527 1533
1534unsigned int mpic_get_coreint_irq(void)
1535{
1536#ifdef CONFIG_BOOKE
1537 struct mpic *mpic = mpic_primary;
1538 u32 src;
1539
1540 BUG_ON(mpic == NULL);
1541
1542 src = mfspr(SPRN_EPR);
1543
1544 if (unlikely(src == mpic->spurious_vec)) {
1545 if (mpic->flags & MPIC_SPV_EOI)
1546 mpic_eoi(mpic);
1547 return NO_IRQ;
1548 }
1549 if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
1550 if (printk_ratelimit())
1551 printk(KERN_WARNING "%s: Got protected source %d !\n",
1552 mpic->name, (int)src);
1553 return NO_IRQ;
1554 }
1555
1556 return irq_linear_revmap(mpic->irqhost, src);
1557#else
1558 return NO_IRQ;
1559#endif
1560}
1561
1528unsigned int mpic_get_mcirq(void) 1562unsigned int mpic_get_mcirq(void)
1529{ 1563{
1530 struct mpic *mpic = mpic_primary; 1564 struct mpic *mpic = mpic_primary;
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 5b2196ab8168..4b3408206091 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -253,6 +253,7 @@ config SMP
253config X86_X2APIC 253config X86_X2APIC
254 bool "Support x2apic" 254 bool "Support x2apic"
255 depends on X86_LOCAL_APIC && X86_64 255 depends on X86_LOCAL_APIC && X86_64
256 select INTR_REMAP
256 ---help--- 257 ---help---
257 This enables x2apic support on CPUs that have this feature. 258 This enables x2apic support on CPUs that have this feature.
258 259
@@ -1881,7 +1882,6 @@ config DMAR_FLOPPY_WA
1881config INTR_REMAP 1882config INTR_REMAP
1882 bool "Support for Interrupt Remapping (EXPERIMENTAL)" 1883 bool "Support for Interrupt Remapping (EXPERIMENTAL)"
1883 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL 1884 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL
1884 select X86_X2APIC
1885 ---help--- 1885 ---help---
1886 Supports Interrupt remapping for IO-APIC and MSI devices. 1886 Supports Interrupt remapping for IO-APIC and MSI devices.
1887 To use x2apic mode in the CPU's which support x2APIC enhancements or 1887 To use x2apic mode in the CPU's which support x2APIC enhancements or
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index df8a300dfe6c..42f2f8377422 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -107,6 +107,9 @@ extern u32 native_safe_apic_wait_icr_idle(void);
107extern void native_apic_icr_write(u32 low, u32 id); 107extern void native_apic_icr_write(u32 low, u32 id);
108extern u64 native_apic_icr_read(void); 108extern u64 native_apic_icr_read(void);
109 109
110#define EIM_8BIT_APIC_ID 0
111#define EIM_32BIT_APIC_ID 1
112
110#ifdef CONFIG_X86_X2APIC 113#ifdef CONFIG_X86_X2APIC
111/* 114/*
112 * Make previous memory operations globally visible before 115 * Make previous memory operations globally visible before
diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
index cea7b74963e9..f82fdc412c64 100644
--- a/arch/x86/include/asm/dma-mapping.h
+++ b/arch/x86/include/asm/dma-mapping.h
@@ -238,7 +238,7 @@ static inline unsigned long dma_alloc_coherent_mask(struct device *dev,
238 238
239 dma_mask = dev->coherent_dma_mask; 239 dma_mask = dev->coherent_dma_mask;
240 if (!dma_mask) 240 if (!dma_mask)
241 dma_mask = (gfp & GFP_DMA) ? DMA_24BIT_MASK : DMA_32BIT_MASK; 241 dma_mask = (gfp & GFP_DMA) ? DMA_BIT_MASK(24) : DMA_BIT_MASK(32);
242 242
243 return dma_mask; 243 return dma_mask;
244} 244}
@@ -247,10 +247,10 @@ static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp)
247{ 247{
248 unsigned long dma_mask = dma_alloc_coherent_mask(dev, gfp); 248 unsigned long dma_mask = dma_alloc_coherent_mask(dev, gfp);
249 249
250 if (dma_mask <= DMA_24BIT_MASK) 250 if (dma_mask <= DMA_BIT_MASK(24))
251 gfp |= GFP_DMA; 251 gfp |= GFP_DMA;
252#ifdef CONFIG_X86_64 252#ifdef CONFIG_X86_64
253 if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA)) 253 if (dma_mask <= DMA_BIT_MASK(32) && !(gfp & GFP_DMA))
254 gfp |= GFP_DMA32; 254 gfp |= GFP_DMA32;
255#endif 255#endif
256 return gfp; 256 return gfp;
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
index 373cc2bbcad2..9d826e436010 100644
--- a/arch/x86/include/asm/io_apic.h
+++ b/arch/x86/include/asm/io_apic.h
@@ -162,10 +162,13 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq);
162extern void ioapic_init_mappings(void); 162extern void ioapic_init_mappings(void);
163 163
164#ifdef CONFIG_X86_64 164#ifdef CONFIG_X86_64
165extern int save_IO_APIC_setup(void); 165extern struct IO_APIC_route_entry **alloc_ioapic_entries(void);
166extern void mask_IO_APIC_setup(void); 166extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries);
167extern void restore_IO_APIC_setup(void); 167extern int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
168extern void reinit_intr_remapped_IO_APIC(int); 168extern void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
169extern int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
170extern void reinit_intr_remapped_IO_APIC(int intr_remapping,
171 struct IO_APIC_route_entry **ioapic_entries);
169#endif 172#endif
170 173
171extern void probe_nr_irqs_gsi(void); 174extern void probe_nr_irqs_gsi(void);
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 85eb8e100818..098ec84b8c00 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -1304,6 +1304,7 @@ void __init enable_IR_x2apic(void)
1304#ifdef CONFIG_INTR_REMAP 1304#ifdef CONFIG_INTR_REMAP
1305 int ret; 1305 int ret;
1306 unsigned long flags; 1306 unsigned long flags;
1307 struct IO_APIC_route_entry **ioapic_entries = NULL;
1307 1308
1308 if (!cpu_has_x2apic) 1309 if (!cpu_has_x2apic)
1309 return; 1310 return;
@@ -1334,17 +1335,23 @@ void __init enable_IR_x2apic(void)
1334 return; 1335 return;
1335 } 1336 }
1336 1337
1337 ret = save_IO_APIC_setup(); 1338 ioapic_entries = alloc_ioapic_entries();
1339 if (!ioapic_entries) {
1340 pr_info("Allocate ioapic_entries failed: %d\n", ret);
1341 goto end;
1342 }
1343
1344 ret = save_IO_APIC_setup(ioapic_entries);
1338 if (ret) { 1345 if (ret) {
1339 pr_info("Saving IO-APIC state failed: %d\n", ret); 1346 pr_info("Saving IO-APIC state failed: %d\n", ret);
1340 goto end; 1347 goto end;
1341 } 1348 }
1342 1349
1343 local_irq_save(flags); 1350 local_irq_save(flags);
1344 mask_IO_APIC_setup(); 1351 mask_IO_APIC_setup(ioapic_entries);
1345 mask_8259A(); 1352 mask_8259A();
1346 1353
1347 ret = enable_intr_remapping(1); 1354 ret = enable_intr_remapping(EIM_32BIT_APIC_ID);
1348 1355
1349 if (ret && x2apic_preenabled) { 1356 if (ret && x2apic_preenabled) {
1350 local_irq_restore(flags); 1357 local_irq_restore(flags);
@@ -1364,9 +1371,9 @@ end_restore:
1364 /* 1371 /*
1365 * IR enabling failed 1372 * IR enabling failed
1366 */ 1373 */
1367 restore_IO_APIC_setup(); 1374 restore_IO_APIC_setup(ioapic_entries);
1368 else 1375 else
1369 reinit_intr_remapped_IO_APIC(x2apic_preenabled); 1376 reinit_intr_remapped_IO_APIC(x2apic_preenabled, ioapic_entries);
1370 1377
1371 unmask_8259A(); 1378 unmask_8259A();
1372 local_irq_restore(flags); 1379 local_irq_restore(flags);
@@ -1379,6 +1386,8 @@ end:
1379 pr_info("Enabled Interrupt-remapping\n"); 1386 pr_info("Enabled Interrupt-remapping\n");
1380 } else 1387 } else
1381 pr_err("Failed to enable Interrupt-remapping and x2apic\n"); 1388 pr_err("Failed to enable Interrupt-remapping and x2apic\n");
1389 if (ioapic_entries)
1390 free_ioapic_entries(ioapic_entries);
1382#else 1391#else
1383 if (!cpu_has_x2apic) 1392 if (!cpu_has_x2apic)
1384 return; 1393 return;
@@ -1954,6 +1963,10 @@ static int lapic_suspend(struct sys_device *dev, pm_message_t state)
1954 1963
1955 local_irq_save(flags); 1964 local_irq_save(flags);
1956 disable_local_APIC(); 1965 disable_local_APIC();
1966#ifdef CONFIG_INTR_REMAP
1967 if (intr_remapping_enabled)
1968 disable_intr_remapping();
1969#endif
1957 local_irq_restore(flags); 1970 local_irq_restore(flags);
1958 return 0; 1971 return 0;
1959} 1972}
@@ -1964,15 +1977,41 @@ static int lapic_resume(struct sys_device *dev)
1964 unsigned long flags; 1977 unsigned long flags;
1965 int maxlvt; 1978 int maxlvt;
1966 1979
1980#ifdef CONFIG_INTR_REMAP
1981 int ret;
1982 struct IO_APIC_route_entry **ioapic_entries = NULL;
1983
1967 if (!apic_pm_state.active) 1984 if (!apic_pm_state.active)
1968 return 0; 1985 return 0;
1969 1986
1970 maxlvt = lapic_get_maxlvt();
1971
1972 local_irq_save(flags); 1987 local_irq_save(flags);
1988 if (x2apic) {
1989 ioapic_entries = alloc_ioapic_entries();
1990 if (!ioapic_entries) {
1991 WARN(1, "Alloc ioapic_entries in lapic resume failed.");
1992 return -ENOMEM;
1993 }
1994
1995 ret = save_IO_APIC_setup(ioapic_entries);
1996 if (ret) {
1997 WARN(1, "Saving IO-APIC state failed: %d\n", ret);
1998 free_ioapic_entries(ioapic_entries);
1999 return ret;
2000 }
2001
2002 mask_IO_APIC_setup(ioapic_entries);
2003 mask_8259A();
2004 enable_x2apic();
2005 }
2006#else
2007 if (!apic_pm_state.active)
2008 return 0;
1973 2009
2010 local_irq_save(flags);
1974 if (x2apic) 2011 if (x2apic)
1975 enable_x2apic(); 2012 enable_x2apic();
2013#endif
2014
1976 else { 2015 else {
1977 /* 2016 /*
1978 * Make sure the APICBASE points to the right address 2017 * Make sure the APICBASE points to the right address
@@ -1986,6 +2025,7 @@ static int lapic_resume(struct sys_device *dev)
1986 wrmsr(MSR_IA32_APICBASE, l, h); 2025 wrmsr(MSR_IA32_APICBASE, l, h);
1987 } 2026 }
1988 2027
2028 maxlvt = lapic_get_maxlvt();
1989 apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED); 2029 apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED);
1990 apic_write(APIC_ID, apic_pm_state.apic_id); 2030 apic_write(APIC_ID, apic_pm_state.apic_id);
1991 apic_write(APIC_DFR, apic_pm_state.apic_dfr); 2031 apic_write(APIC_DFR, apic_pm_state.apic_dfr);
@@ -2009,8 +2049,20 @@ static int lapic_resume(struct sys_device *dev)
2009 apic_write(APIC_ESR, 0); 2049 apic_write(APIC_ESR, 0);
2010 apic_read(APIC_ESR); 2050 apic_read(APIC_ESR);
2011 2051
2052#ifdef CONFIG_INTR_REMAP
2053 if (intr_remapping_enabled)
2054 reenable_intr_remapping(EIM_32BIT_APIC_ID);
2055
2056 if (x2apic) {
2057 unmask_8259A();
2058 restore_IO_APIC_setup(ioapic_entries);
2059 free_ioapic_entries(ioapic_entries);
2060 }
2061#endif
2062
2012 local_irq_restore(flags); 2063 local_irq_restore(flags);
2013 2064
2065
2014 return 0; 2066 return 0;
2015} 2067}
2016 2068
@@ -2048,7 +2100,9 @@ static int __init init_lapic_sysfs(void)
2048 error = sysdev_register(&device_lapic); 2100 error = sysdev_register(&device_lapic);
2049 return error; 2101 return error;
2050} 2102}
2051device_initcall(init_lapic_sysfs); 2103
2104/* local apic needs to resume before other devices access its registers. */
2105core_initcall(init_lapic_sysfs);
2052 2106
2053#else /* CONFIG_PM */ 2107#else /* CONFIG_PM */
2054 2108
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 1bb5c6cee3eb..767fe7e46d68 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -851,63 +851,74 @@ __setup("pirq=", ioapic_pirq_setup);
851#endif /* CONFIG_X86_32 */ 851#endif /* CONFIG_X86_32 */
852 852
853#ifdef CONFIG_INTR_REMAP 853#ifdef CONFIG_INTR_REMAP
854/* I/O APIC RTE contents at the OS boot up */ 854struct IO_APIC_route_entry **alloc_ioapic_entries(void)
855static struct IO_APIC_route_entry *early_ioapic_entries[MAX_IO_APICS]; 855{
856 int apic;
857 struct IO_APIC_route_entry **ioapic_entries;
858
859 ioapic_entries = kzalloc(sizeof(*ioapic_entries) * nr_ioapics,
860 GFP_ATOMIC);
861 if (!ioapic_entries)
862 return 0;
863
864 for (apic = 0; apic < nr_ioapics; apic++) {
865 ioapic_entries[apic] =
866 kzalloc(sizeof(struct IO_APIC_route_entry) *
867 nr_ioapic_registers[apic], GFP_ATOMIC);
868 if (!ioapic_entries[apic])
869 goto nomem;
870 }
871
872 return ioapic_entries;
873
874nomem:
875 while (--apic >= 0)
876 kfree(ioapic_entries[apic]);
877 kfree(ioapic_entries);
878
879 return 0;
880}
856 881
857/* 882/*
858 * Saves all the IO-APIC RTE's 883 * Saves all the IO-APIC RTE's
859 */ 884 */
860int save_IO_APIC_setup(void) 885int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
861{ 886{
862 union IO_APIC_reg_01 reg_01;
863 unsigned long flags;
864 int apic, pin; 887 int apic, pin;
865 888
866 /* 889 if (!ioapic_entries)
867 * The number of IO-APIC IRQ registers (== #pins): 890 return -ENOMEM;
868 */
869 for (apic = 0; apic < nr_ioapics; apic++) {
870 spin_lock_irqsave(&ioapic_lock, flags);
871 reg_01.raw = io_apic_read(apic, 1);
872 spin_unlock_irqrestore(&ioapic_lock, flags);
873 nr_ioapic_registers[apic] = reg_01.bits.entries+1;
874 }
875 891
876 for (apic = 0; apic < nr_ioapics; apic++) { 892 for (apic = 0; apic < nr_ioapics; apic++) {
877 early_ioapic_entries[apic] = 893 if (!ioapic_entries[apic])
878 kzalloc(sizeof(struct IO_APIC_route_entry) * 894 return -ENOMEM;
879 nr_ioapic_registers[apic], GFP_KERNEL);
880 if (!early_ioapic_entries[apic])
881 goto nomem;
882 }
883 895
884 for (apic = 0; apic < nr_ioapics; apic++)
885 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) 896 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
886 early_ioapic_entries[apic][pin] = 897 ioapic_entries[apic][pin] =
887 ioapic_read_entry(apic, pin); 898 ioapic_read_entry(apic, pin);
899 }
888 900
889 return 0; 901 return 0;
890
891nomem:
892 while (apic >= 0)
893 kfree(early_ioapic_entries[apic--]);
894 memset(early_ioapic_entries, 0,
895 ARRAY_SIZE(early_ioapic_entries));
896
897 return -ENOMEM;
898} 902}
899 903
900void mask_IO_APIC_setup(void) 904/*
905 * Mask all IO APIC entries.
906 */
907void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
901{ 908{
902 int apic, pin; 909 int apic, pin;
903 910
911 if (!ioapic_entries)
912 return;
913
904 for (apic = 0; apic < nr_ioapics; apic++) { 914 for (apic = 0; apic < nr_ioapics; apic++) {
905 if (!early_ioapic_entries[apic]) 915 if (!ioapic_entries[apic])
906 break; 916 break;
917
907 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { 918 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
908 struct IO_APIC_route_entry entry; 919 struct IO_APIC_route_entry entry;
909 920
910 entry = early_ioapic_entries[apic][pin]; 921 entry = ioapic_entries[apic][pin];
911 if (!entry.mask) { 922 if (!entry.mask) {
912 entry.mask = 1; 923 entry.mask = 1;
913 ioapic_write_entry(apic, pin, entry); 924 ioapic_write_entry(apic, pin, entry);
@@ -916,22 +927,30 @@ void mask_IO_APIC_setup(void)
916 } 927 }
917} 928}
918 929
919void restore_IO_APIC_setup(void) 930/*
931 * Restore IO APIC entries which was saved in ioapic_entries.
932 */
933int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
920{ 934{
921 int apic, pin; 935 int apic, pin;
922 936
937 if (!ioapic_entries)
938 return -ENOMEM;
939
923 for (apic = 0; apic < nr_ioapics; apic++) { 940 for (apic = 0; apic < nr_ioapics; apic++) {
924 if (!early_ioapic_entries[apic]) 941 if (!ioapic_entries[apic])
925 break; 942 return -ENOMEM;
943
926 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) 944 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
927 ioapic_write_entry(apic, pin, 945 ioapic_write_entry(apic, pin,
928 early_ioapic_entries[apic][pin]); 946 ioapic_entries[apic][pin]);
929 kfree(early_ioapic_entries[apic]);
930 early_ioapic_entries[apic] = NULL;
931 } 947 }
948 return 0;
932} 949}
933 950
934void reinit_intr_remapped_IO_APIC(int intr_remapping) 951void reinit_intr_remapped_IO_APIC(int intr_remapping,
952 struct IO_APIC_route_entry **ioapic_entries)
953
935{ 954{
936 /* 955 /*
937 * for now plain restore of previous settings. 956 * for now plain restore of previous settings.
@@ -940,7 +959,17 @@ void reinit_intr_remapped_IO_APIC(int intr_remapping)
940 * table entries. for now, do a plain restore, and wait for 959 * table entries. for now, do a plain restore, and wait for
941 * the setup_IO_APIC_irqs() to do proper initialization. 960 * the setup_IO_APIC_irqs() to do proper initialization.
942 */ 961 */
943 restore_IO_APIC_setup(); 962 restore_IO_APIC_setup(ioapic_entries);
963}
964
965void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries)
966{
967 int apic;
968
969 for (apic = 0; apic < nr_ioapics; apic++)
970 kfree(ioapic_entries[apic]);
971
972 kfree(ioapic_entries);
944} 973}
945#endif 974#endif
946 975
@@ -2495,7 +2524,7 @@ static void irq_complete_move(struct irq_desc **descp)
2495static inline void irq_complete_move(struct irq_desc **descp) {} 2524static inline void irq_complete_move(struct irq_desc **descp) {}
2496#endif 2525#endif
2497 2526
2498#ifdef CONFIG_INTR_REMAP 2527#ifdef CONFIG_X86_X2APIC
2499static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg) 2528static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg)
2500{ 2529{
2501 int apic, pin; 2530 int apic, pin;
@@ -2540,7 +2569,6 @@ static void ack_x2apic_edge(unsigned int irq)
2540{ 2569{
2541 ack_x2APIC_irq(); 2570 ack_x2APIC_irq();
2542} 2571}
2543
2544#endif 2572#endif
2545 2573
2546static void ack_apic_edge(unsigned int irq) 2574static void ack_apic_edge(unsigned int irq)
@@ -2651,6 +2679,26 @@ static void ack_apic_level(unsigned int irq)
2651#endif 2679#endif
2652} 2680}
2653 2681
2682#ifdef CONFIG_INTR_REMAP
2683static void ir_ack_apic_edge(unsigned int irq)
2684{
2685#ifdef CONFIG_X86_X2APIC
2686 if (x2apic_enabled())
2687 return ack_x2apic_edge(irq);
2688#endif
2689 return ack_apic_edge(irq);
2690}
2691
2692static void ir_ack_apic_level(unsigned int irq)
2693{
2694#ifdef CONFIG_X86_X2APIC
2695 if (x2apic_enabled())
2696 return ack_x2apic_level(irq);
2697#endif
2698 return ack_apic_level(irq);
2699}
2700#endif /* CONFIG_INTR_REMAP */
2701
2654static struct irq_chip ioapic_chip __read_mostly = { 2702static struct irq_chip ioapic_chip __read_mostly = {
2655 .name = "IO-APIC", 2703 .name = "IO-APIC",
2656 .startup = startup_ioapic_irq, 2704 .startup = startup_ioapic_irq,
@@ -2670,8 +2718,8 @@ static struct irq_chip ir_ioapic_chip __read_mostly = {
2670 .mask = mask_IO_APIC_irq, 2718 .mask = mask_IO_APIC_irq,
2671 .unmask = unmask_IO_APIC_irq, 2719 .unmask = unmask_IO_APIC_irq,
2672#ifdef CONFIG_INTR_REMAP 2720#ifdef CONFIG_INTR_REMAP
2673 .ack = ack_x2apic_edge, 2721 .ack = ir_ack_apic_edge,
2674 .eoi = ack_x2apic_level, 2722 .eoi = ir_ack_apic_level,
2675#ifdef CONFIG_SMP 2723#ifdef CONFIG_SMP
2676 .set_affinity = set_ir_ioapic_affinity_irq, 2724 .set_affinity = set_ir_ioapic_affinity_irq,
2677#endif 2725#endif
@@ -3397,7 +3445,7 @@ static struct irq_chip msi_ir_chip = {
3397 .unmask = unmask_msi_irq, 3445 .unmask = unmask_msi_irq,
3398 .mask = mask_msi_irq, 3446 .mask = mask_msi_irq,
3399#ifdef CONFIG_INTR_REMAP 3447#ifdef CONFIG_INTR_REMAP
3400 .ack = ack_x2apic_edge, 3448 .ack = ir_ack_apic_edge,
3401#ifdef CONFIG_SMP 3449#ifdef CONFIG_SMP
3402 .set_affinity = ir_set_msi_irq_affinity, 3450 .set_affinity = ir_set_msi_irq_affinity,
3403#endif 3451#endif
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index 90f5b9ef5def..745579bc8256 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -40,7 +40,7 @@ EXPORT_SYMBOL(bad_dma_address);
40 to older i386. */ 40 to older i386. */
41struct device x86_dma_fallback_dev = { 41struct device x86_dma_fallback_dev = {
42 .init_name = "fallback device", 42 .init_name = "fallback device",
43 .coherent_dma_mask = DMA_32BIT_MASK, 43 .coherent_dma_mask = DMA_BIT_MASK(32),
44 .dma_mask = &x86_dma_fallback_dev.coherent_dma_mask, 44 .dma_mask = &x86_dma_fallback_dev.coherent_dma_mask,
45}; 45};
46EXPORT_SYMBOL(x86_dma_fallback_dev); 46EXPORT_SYMBOL(x86_dma_fallback_dev);
@@ -148,7 +148,7 @@ again:
148 if (!is_buffer_dma_capable(dma_mask, addr, size)) { 148 if (!is_buffer_dma_capable(dma_mask, addr, size)) {
149 __free_pages(page, get_order(size)); 149 __free_pages(page, get_order(size));
150 150
151 if (dma_mask < DMA_32BIT_MASK && !(flag & GFP_DMA)) { 151 if (dma_mask < DMA_BIT_MASK(32) && !(flag & GFP_DMA)) {
152 flag = (flag & ~GFP_DMA32) | GFP_DMA; 152 flag = (flag & ~GFP_DMA32) | GFP_DMA;
153 goto again; 153 goto again;
154 } 154 }
@@ -243,7 +243,7 @@ int dma_supported(struct device *dev, u64 mask)
243 /* Copied from i386. Doesn't make much sense, because it will 243 /* Copied from i386. Doesn't make much sense, because it will
244 only work for pci_alloc_coherent. 244 only work for pci_alloc_coherent.
245 The caller just has to use GFP_DMA in this case. */ 245 The caller just has to use GFP_DMA in this case. */
246 if (mask < DMA_24BIT_MASK) 246 if (mask < DMA_BIT_MASK(24))
247 return 0; 247 return 0;
248 248
249 /* Tell the device to use SAC when IOMMU force is on. This 249 /* Tell the device to use SAC when IOMMU force is on. This
@@ -258,7 +258,7 @@ int dma_supported(struct device *dev, u64 mask)
258 SAC for these. Assume all masks <= 40 bits are of this 258 SAC for these. Assume all masks <= 40 bits are of this
259 type. Normally this doesn't make any difference, but gives 259 type. Normally this doesn't make any difference, but gives
260 more gentle handling of IOMMU overflow. */ 260 more gentle handling of IOMMU overflow. */
261 if (iommu_sac_force && (mask >= DMA_40BIT_MASK)) { 261 if (iommu_sac_force && (mask >= DMA_BIT_MASK(40))) {
262 dev_info(dev, "Force SAC with mask %Lx\n", mask); 262 dev_info(dev, "Force SAC with mask %Lx\n", mask);
263 return 0; 263 return 0;
264 } 264 }
diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c
index c6d703b39326..71d412a09f30 100644
--- a/arch/x86/kernel/pci-nommu.c
+++ b/arch/x86/kernel/pci-nommu.c
@@ -15,7 +15,7 @@ static int
15check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size) 15check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size)
16{ 16{
17 if (hwdev && !is_buffer_dma_capable(*hwdev->dma_mask, bus, size)) { 17 if (hwdev && !is_buffer_dma_capable(*hwdev->dma_mask, bus, size)) {
18 if (*hwdev->dma_mask >= DMA_32BIT_MASK) 18 if (*hwdev->dma_mask >= DMA_BIT_MASK(32))
19 printk(KERN_ERR 19 printk(KERN_ERR
20 "nommu_%s: overflow %Lx+%zu of device mask %Lx\n", 20 "nommu_%s: overflow %Lx+%zu of device mask %Lx\n",
21 name, (long long)bus, size, 21 name, (long long)bus, size,
diff --git a/block/blk-core.c b/block/blk-core.c
index 996ed906d8ca..43fdedc524ee 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -64,12 +64,11 @@ static struct workqueue_struct *kblockd_workqueue;
64 64
65static void drive_stat_acct(struct request *rq, int new_io) 65static void drive_stat_acct(struct request *rq, int new_io)
66{ 66{
67 struct gendisk *disk = rq->rq_disk;
68 struct hd_struct *part; 67 struct hd_struct *part;
69 int rw = rq_data_dir(rq); 68 int rw = rq_data_dir(rq);
70 int cpu; 69 int cpu;
71 70
72 if (!blk_fs_request(rq) || !disk || !blk_do_io_stat(disk->queue)) 71 if (!blk_fs_request(rq) || !blk_do_io_stat(rq))
73 return; 72 return;
74 73
75 cpu = part_stat_lock(); 74 cpu = part_stat_lock();
@@ -484,11 +483,11 @@ static int blk_init_free_list(struct request_queue *q)
484{ 483{
485 struct request_list *rl = &q->rq; 484 struct request_list *rl = &q->rq;
486 485
487 rl->count[READ] = rl->count[WRITE] = 0; 486 rl->count[BLK_RW_SYNC] = rl->count[BLK_RW_ASYNC] = 0;
488 rl->starved[READ] = rl->starved[WRITE] = 0; 487 rl->starved[BLK_RW_SYNC] = rl->starved[BLK_RW_ASYNC] = 0;
489 rl->elvpriv = 0; 488 rl->elvpriv = 0;
490 init_waitqueue_head(&rl->wait[READ]); 489 init_waitqueue_head(&rl->wait[BLK_RW_SYNC]);
491 init_waitqueue_head(&rl->wait[WRITE]); 490 init_waitqueue_head(&rl->wait[BLK_RW_ASYNC]);
492 491
493 rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab, 492 rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab,
494 mempool_free_slab, request_cachep, q->node); 493 mempool_free_slab, request_cachep, q->node);
@@ -699,18 +698,18 @@ static void ioc_set_batching(struct request_queue *q, struct io_context *ioc)
699 ioc->last_waited = jiffies; 698 ioc->last_waited = jiffies;
700} 699}
701 700
702static void __freed_request(struct request_queue *q, int rw) 701static void __freed_request(struct request_queue *q, int sync)
703{ 702{
704 struct request_list *rl = &q->rq; 703 struct request_list *rl = &q->rq;
705 704
706 if (rl->count[rw] < queue_congestion_off_threshold(q)) 705 if (rl->count[sync] < queue_congestion_off_threshold(q))
707 blk_clear_queue_congested(q, rw); 706 blk_clear_queue_congested(q, sync);
708 707
709 if (rl->count[rw] + 1 <= q->nr_requests) { 708 if (rl->count[sync] + 1 <= q->nr_requests) {
710 if (waitqueue_active(&rl->wait[rw])) 709 if (waitqueue_active(&rl->wait[sync]))
711 wake_up(&rl->wait[rw]); 710 wake_up(&rl->wait[sync]);
712 711
713 blk_clear_queue_full(q, rw); 712 blk_clear_queue_full(q, sync);
714 } 713 }
715} 714}
716 715
@@ -718,18 +717,18 @@ static void __freed_request(struct request_queue *q, int rw)
718 * A request has just been released. Account for it, update the full and 717 * A request has just been released. Account for it, update the full and
719 * congestion status, wake up any waiters. Called under q->queue_lock. 718 * congestion status, wake up any waiters. Called under q->queue_lock.
720 */ 719 */
721static void freed_request(struct request_queue *q, int rw, int priv) 720static void freed_request(struct request_queue *q, int sync, int priv)
722{ 721{
723 struct request_list *rl = &q->rq; 722 struct request_list *rl = &q->rq;
724 723
725 rl->count[rw]--; 724 rl->count[sync]--;
726 if (priv) 725 if (priv)
727 rl->elvpriv--; 726 rl->elvpriv--;
728 727
729 __freed_request(q, rw); 728 __freed_request(q, sync);
730 729
731 if (unlikely(rl->starved[rw ^ 1])) 730 if (unlikely(rl->starved[sync ^ 1]))
732 __freed_request(q, rw ^ 1); 731 __freed_request(q, sync ^ 1);
733} 732}
734 733
735/* 734/*
@@ -743,15 +742,15 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
743 struct request *rq = NULL; 742 struct request *rq = NULL;
744 struct request_list *rl = &q->rq; 743 struct request_list *rl = &q->rq;
745 struct io_context *ioc = NULL; 744 struct io_context *ioc = NULL;
746 const int rw = rw_flags & 0x01; 745 const bool is_sync = rw_is_sync(rw_flags) != 0;
747 int may_queue, priv; 746 int may_queue, priv;
748 747
749 may_queue = elv_may_queue(q, rw_flags); 748 may_queue = elv_may_queue(q, rw_flags);
750 if (may_queue == ELV_MQUEUE_NO) 749 if (may_queue == ELV_MQUEUE_NO)
751 goto rq_starved; 750 goto rq_starved;
752 751
753 if (rl->count[rw]+1 >= queue_congestion_on_threshold(q)) { 752 if (rl->count[is_sync]+1 >= queue_congestion_on_threshold(q)) {
754 if (rl->count[rw]+1 >= q->nr_requests) { 753 if (rl->count[is_sync]+1 >= q->nr_requests) {
755 ioc = current_io_context(GFP_ATOMIC, q->node); 754 ioc = current_io_context(GFP_ATOMIC, q->node);
756 /* 755 /*
757 * The queue will fill after this allocation, so set 756 * The queue will fill after this allocation, so set
@@ -759,9 +758,9 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
759 * This process will be allowed to complete a batch of 758 * This process will be allowed to complete a batch of
760 * requests, others will be blocked. 759 * requests, others will be blocked.
761 */ 760 */
762 if (!blk_queue_full(q, rw)) { 761 if (!blk_queue_full(q, is_sync)) {
763 ioc_set_batching(q, ioc); 762 ioc_set_batching(q, ioc);
764 blk_set_queue_full(q, rw); 763 blk_set_queue_full(q, is_sync);
765 } else { 764 } else {
766 if (may_queue != ELV_MQUEUE_MUST 765 if (may_queue != ELV_MQUEUE_MUST
767 && !ioc_batching(q, ioc)) { 766 && !ioc_batching(q, ioc)) {
@@ -774,7 +773,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
774 } 773 }
775 } 774 }
776 } 775 }
777 blk_set_queue_congested(q, rw); 776 blk_set_queue_congested(q, is_sync);
778 } 777 }
779 778
780 /* 779 /*
@@ -782,11 +781,11 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
782 * limit of requests, otherwise we could have thousands of requests 781 * limit of requests, otherwise we could have thousands of requests
783 * allocated with any setting of ->nr_requests 782 * allocated with any setting of ->nr_requests
784 */ 783 */
785 if (rl->count[rw] >= (3 * q->nr_requests / 2)) 784 if (rl->count[is_sync] >= (3 * q->nr_requests / 2))
786 goto out; 785 goto out;
787 786
788 rl->count[rw]++; 787 rl->count[is_sync]++;
789 rl->starved[rw] = 0; 788 rl->starved[is_sync] = 0;
790 789
791 priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags); 790 priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
792 if (priv) 791 if (priv)
@@ -804,7 +803,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
804 * wait queue, but this is pretty rare. 803 * wait queue, but this is pretty rare.
805 */ 804 */
806 spin_lock_irq(q->queue_lock); 805 spin_lock_irq(q->queue_lock);
807 freed_request(q, rw, priv); 806 freed_request(q, is_sync, priv);
808 807
809 /* 808 /*
810 * in the very unlikely event that allocation failed and no 809 * in the very unlikely event that allocation failed and no
@@ -814,8 +813,8 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
814 * rq mempool into READ and WRITE 813 * rq mempool into READ and WRITE
815 */ 814 */
816rq_starved: 815rq_starved:
817 if (unlikely(rl->count[rw] == 0)) 816 if (unlikely(rl->count[is_sync] == 0))
818 rl->starved[rw] = 1; 817 rl->starved[is_sync] = 1;
819 818
820 goto out; 819 goto out;
821 } 820 }
@@ -829,7 +828,7 @@ rq_starved:
829 if (ioc_batching(q, ioc)) 828 if (ioc_batching(q, ioc))
830 ioc->nr_batch_requests--; 829 ioc->nr_batch_requests--;
831 830
832 trace_block_getrq(q, bio, rw); 831 trace_block_getrq(q, bio, rw_flags & 1);
833out: 832out:
834 return rq; 833 return rq;
835} 834}
@@ -843,7 +842,7 @@ out:
843static struct request *get_request_wait(struct request_queue *q, int rw_flags, 842static struct request *get_request_wait(struct request_queue *q, int rw_flags,
844 struct bio *bio) 843 struct bio *bio)
845{ 844{
846 const int rw = rw_flags & 0x01; 845 const bool is_sync = rw_is_sync(rw_flags) != 0;
847 struct request *rq; 846 struct request *rq;
848 847
849 rq = get_request(q, rw_flags, bio, GFP_NOIO); 848 rq = get_request(q, rw_flags, bio, GFP_NOIO);
@@ -852,10 +851,10 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
852 struct io_context *ioc; 851 struct io_context *ioc;
853 struct request_list *rl = &q->rq; 852 struct request_list *rl = &q->rq;
854 853
855 prepare_to_wait_exclusive(&rl->wait[rw], &wait, 854 prepare_to_wait_exclusive(&rl->wait[is_sync], &wait,
856 TASK_UNINTERRUPTIBLE); 855 TASK_UNINTERRUPTIBLE);
857 856
858 trace_block_sleeprq(q, bio, rw); 857 trace_block_sleeprq(q, bio, rw_flags & 1);
859 858
860 __generic_unplug_device(q); 859 __generic_unplug_device(q);
861 spin_unlock_irq(q->queue_lock); 860 spin_unlock_irq(q->queue_lock);
@@ -871,7 +870,7 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
871 ioc_set_batching(q, ioc); 870 ioc_set_batching(q, ioc);
872 871
873 spin_lock_irq(q->queue_lock); 872 spin_lock_irq(q->queue_lock);
874 finish_wait(&rl->wait[rw], &wait); 873 finish_wait(&rl->wait[is_sync], &wait);
875 874
876 rq = get_request(q, rw_flags, bio, GFP_NOIO); 875 rq = get_request(q, rw_flags, bio, GFP_NOIO);
877 }; 876 };
@@ -1070,14 +1069,14 @@ void __blk_put_request(struct request_queue *q, struct request *req)
1070 * it didn't come out of our reserved rq pools 1069 * it didn't come out of our reserved rq pools
1071 */ 1070 */
1072 if (req->cmd_flags & REQ_ALLOCED) { 1071 if (req->cmd_flags & REQ_ALLOCED) {
1073 int rw = rq_data_dir(req); 1072 int is_sync = rq_is_sync(req) != 0;
1074 int priv = req->cmd_flags & REQ_ELVPRIV; 1073 int priv = req->cmd_flags & REQ_ELVPRIV;
1075 1074
1076 BUG_ON(!list_empty(&req->queuelist)); 1075 BUG_ON(!list_empty(&req->queuelist));
1077 BUG_ON(!hlist_unhashed(&req->hash)); 1076 BUG_ON(!hlist_unhashed(&req->hash));
1078 1077
1079 blk_free_request(q, req); 1078 blk_free_request(q, req);
1080 freed_request(q, rw, priv); 1079 freed_request(q, is_sync, priv);
1081 } 1080 }
1082} 1081}
1083EXPORT_SYMBOL_GPL(__blk_put_request); 1082EXPORT_SYMBOL_GPL(__blk_put_request);
@@ -1124,10 +1123,10 @@ void init_request_from_bio(struct request *req, struct bio *bio)
1124 1123
1125 if (bio_sync(bio)) 1124 if (bio_sync(bio))
1126 req->cmd_flags |= REQ_RW_SYNC; 1125 req->cmd_flags |= REQ_RW_SYNC;
1127 if (bio_unplug(bio))
1128 req->cmd_flags |= REQ_UNPLUG;
1129 if (bio_rw_meta(bio)) 1126 if (bio_rw_meta(bio))
1130 req->cmd_flags |= REQ_RW_META; 1127 req->cmd_flags |= REQ_RW_META;
1128 if (bio_noidle(bio))
1129 req->cmd_flags |= REQ_NOIDLE;
1131 1130
1132 req->errors = 0; 1131 req->errors = 0;
1133 req->hard_sector = req->sector = bio->bi_sector; 1132 req->hard_sector = req->sector = bio->bi_sector;
@@ -1136,6 +1135,15 @@ void init_request_from_bio(struct request *req, struct bio *bio)
1136 blk_rq_bio_prep(req->q, req, bio); 1135 blk_rq_bio_prep(req->q, req, bio);
1137} 1136}
1138 1137
1138/*
1139 * Only disabling plugging for non-rotational devices if it does tagging
1140 * as well, otherwise we do need the proper merging
1141 */
1142static inline bool queue_should_plug(struct request_queue *q)
1143{
1144 return !(blk_queue_nonrot(q) && blk_queue_tagged(q));
1145}
1146
1139static int __make_request(struct request_queue *q, struct bio *bio) 1147static int __make_request(struct request_queue *q, struct bio *bio)
1140{ 1148{
1141 struct request *req; 1149 struct request *req;
@@ -1242,11 +1250,11 @@ get_rq:
1242 if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) || 1250 if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) ||
1243 bio_flagged(bio, BIO_CPU_AFFINE)) 1251 bio_flagged(bio, BIO_CPU_AFFINE))
1244 req->cpu = blk_cpu_to_group(smp_processor_id()); 1252 req->cpu = blk_cpu_to_group(smp_processor_id());
1245 if (!blk_queue_nonrot(q) && elv_queue_empty(q)) 1253 if (queue_should_plug(q) && elv_queue_empty(q))
1246 blk_plug_device(q); 1254 blk_plug_device(q);
1247 add_request(q, req); 1255 add_request(q, req);
1248out: 1256out:
1249 if (unplug || blk_queue_nonrot(q)) 1257 if (unplug || !queue_should_plug(q))
1250 __generic_unplug_device(q); 1258 __generic_unplug_device(q);
1251 spin_unlock_irq(q->queue_lock); 1259 spin_unlock_irq(q->queue_lock);
1252 return 0; 1260 return 0;
@@ -1664,9 +1672,7 @@ EXPORT_SYMBOL(blkdev_dequeue_request);
1664 1672
1665static void blk_account_io_completion(struct request *req, unsigned int bytes) 1673static void blk_account_io_completion(struct request *req, unsigned int bytes)
1666{ 1674{
1667 struct gendisk *disk = req->rq_disk; 1675 if (!blk_do_io_stat(req))
1668
1669 if (!disk || !blk_do_io_stat(disk->queue))
1670 return; 1676 return;
1671 1677
1672 if (blk_fs_request(req)) { 1678 if (blk_fs_request(req)) {
@@ -1683,9 +1689,7 @@ static void blk_account_io_completion(struct request *req, unsigned int bytes)
1683 1689
1684static void blk_account_io_done(struct request *req) 1690static void blk_account_io_done(struct request *req)
1685{ 1691{
1686 struct gendisk *disk = req->rq_disk; 1692 if (!blk_do_io_stat(req))
1687
1688 if (!disk || !blk_do_io_stat(disk->queue))
1689 return; 1693 return;
1690 1694
1691 /* 1695 /*
@@ -1700,7 +1704,7 @@ static void blk_account_io_done(struct request *req)
1700 int cpu; 1704 int cpu;
1701 1705
1702 cpu = part_stat_lock(); 1706 cpu = part_stat_lock();
1703 part = disk_map_sector_rcu(disk, req->sector); 1707 part = disk_map_sector_rcu(req->rq_disk, req->sector);
1704 1708
1705 part_stat_inc(cpu, part, ios[rw]); 1709 part_stat_inc(cpu, part, ios[rw]);
1706 part_stat_add(cpu, part, ticks[rw], duration); 1710 part_stat_add(cpu, part, ticks[rw], duration);
diff --git a/block/blk-merge.c b/block/blk-merge.c
index e39cb24b7679..63760ca3da0f 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -338,6 +338,22 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
338 return 1; 338 return 1;
339} 339}
340 340
341static void blk_account_io_merge(struct request *req)
342{
343 if (blk_do_io_stat(req)) {
344 struct hd_struct *part;
345 int cpu;
346
347 cpu = part_stat_lock();
348 part = disk_map_sector_rcu(req->rq_disk, req->sector);
349
350 part_round_stats(cpu, part);
351 part_dec_in_flight(part);
352
353 part_stat_unlock();
354 }
355}
356
341/* 357/*
342 * Has to be called with the request spinlock acquired 358 * Has to be called with the request spinlock acquired
343 */ 359 */
@@ -386,18 +402,7 @@ static int attempt_merge(struct request_queue *q, struct request *req,
386 402
387 elv_merge_requests(q, req, next); 403 elv_merge_requests(q, req, next);
388 404
389 if (req->rq_disk) { 405 blk_account_io_merge(req);
390 struct hd_struct *part;
391 int cpu;
392
393 cpu = part_stat_lock();
394 part = disk_map_sector_rcu(req->rq_disk, req->sector);
395
396 part_round_stats(cpu, part);
397 part_dec_in_flight(part);
398
399 part_stat_unlock();
400 }
401 406
402 req->ioprio = ioprio_best(req->ioprio, next->ioprio); 407 req->ioprio = ioprio_best(req->ioprio, next->ioprio);
403 if (blk_rq_cpu_valid(next)) 408 if (blk_rq_cpu_valid(next))
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 59fd05d9f1d5..69c42adde52b 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -431,7 +431,7 @@ EXPORT_SYMBOL(blk_queue_segment_boundary);
431 * 431 *
432 * description: 432 * description:
433 * set required memory and length alignment for direct dma transactions. 433 * set required memory and length alignment for direct dma transactions.
434 * this is used when buiding direct io requests for the queue. 434 * this is used when building direct io requests for the queue.
435 * 435 *
436 **/ 436 **/
437void blk_queue_dma_alignment(struct request_queue *q, int mask) 437void blk_queue_dma_alignment(struct request_queue *q, int mask)
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index e29ddfc73cf4..73f36beff5cd 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -48,28 +48,28 @@ queue_requests_store(struct request_queue *q, const char *page, size_t count)
48 q->nr_requests = nr; 48 q->nr_requests = nr;
49 blk_queue_congestion_threshold(q); 49 blk_queue_congestion_threshold(q);
50 50
51 if (rl->count[READ] >= queue_congestion_on_threshold(q)) 51 if (rl->count[BLK_RW_SYNC] >= queue_congestion_on_threshold(q))
52 blk_set_queue_congested(q, READ); 52 blk_set_queue_congested(q, BLK_RW_SYNC);
53 else if (rl->count[READ] < queue_congestion_off_threshold(q)) 53 else if (rl->count[BLK_RW_SYNC] < queue_congestion_off_threshold(q))
54 blk_clear_queue_congested(q, READ); 54 blk_clear_queue_congested(q, BLK_RW_SYNC);
55 55
56 if (rl->count[WRITE] >= queue_congestion_on_threshold(q)) 56 if (rl->count[BLK_RW_ASYNC] >= queue_congestion_on_threshold(q))
57 blk_set_queue_congested(q, WRITE); 57 blk_set_queue_congested(q, BLK_RW_ASYNC);
58 else if (rl->count[WRITE] < queue_congestion_off_threshold(q)) 58 else if (rl->count[BLK_RW_ASYNC] < queue_congestion_off_threshold(q))
59 blk_clear_queue_congested(q, WRITE); 59 blk_clear_queue_congested(q, BLK_RW_ASYNC);
60 60
61 if (rl->count[READ] >= q->nr_requests) { 61 if (rl->count[BLK_RW_SYNC] >= q->nr_requests) {
62 blk_set_queue_full(q, READ); 62 blk_set_queue_full(q, BLK_RW_SYNC);
63 } else if (rl->count[READ]+1 <= q->nr_requests) { 63 } else if (rl->count[BLK_RW_SYNC]+1 <= q->nr_requests) {
64 blk_clear_queue_full(q, READ); 64 blk_clear_queue_full(q, BLK_RW_SYNC);
65 wake_up(&rl->wait[READ]); 65 wake_up(&rl->wait[BLK_RW_SYNC]);
66 } 66 }
67 67
68 if (rl->count[WRITE] >= q->nr_requests) { 68 if (rl->count[BLK_RW_ASYNC] >= q->nr_requests) {
69 blk_set_queue_full(q, WRITE); 69 blk_set_queue_full(q, BLK_RW_ASYNC);
70 } else if (rl->count[WRITE]+1 <= q->nr_requests) { 70 } else if (rl->count[BLK_RW_ASYNC]+1 <= q->nr_requests) {
71 blk_clear_queue_full(q, WRITE); 71 blk_clear_queue_full(q, BLK_RW_ASYNC);
72 wake_up(&rl->wait[WRITE]); 72 wake_up(&rl->wait[BLK_RW_ASYNC]);
73 } 73 }
74 spin_unlock_irq(q->queue_lock); 74 spin_unlock_irq(q->queue_lock);
75 return ret; 75 return ret;
@@ -209,10 +209,14 @@ static ssize_t queue_iostats_store(struct request_queue *q, const char *page,
209 ssize_t ret = queue_var_store(&stats, page, count); 209 ssize_t ret = queue_var_store(&stats, page, count);
210 210
211 spin_lock_irq(q->queue_lock); 211 spin_lock_irq(q->queue_lock);
212 elv_quisce_start(q);
213
212 if (stats) 214 if (stats)
213 queue_flag_set(QUEUE_FLAG_IO_STAT, q); 215 queue_flag_set(QUEUE_FLAG_IO_STAT, q);
214 else 216 else
215 queue_flag_clear(QUEUE_FLAG_IO_STAT, q); 217 queue_flag_clear(QUEUE_FLAG_IO_STAT, q);
218
219 elv_quisce_end(q);
216 spin_unlock_irq(q->queue_lock); 220 spin_unlock_irq(q->queue_lock);
217 221
218 return ret; 222 return ret;
diff --git a/block/blk.h b/block/blk.h
index 3ee94358b43d..24fcaeeaf620 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -70,6 +70,10 @@ void blk_queue_congestion_threshold(struct request_queue *q);
70 70
71int blk_dev_init(void); 71int blk_dev_init(void);
72 72
73void elv_quisce_start(struct request_queue *q);
74void elv_quisce_end(struct request_queue *q);
75
76
73/* 77/*
74 * Return the threshold (number of used requests) at which the queue is 78 * Return the threshold (number of used requests) at which the queue is
75 * considered to be congested. It include a little hysteresis to keep the 79 * considered to be congested. It include a little hysteresis to keep the
@@ -108,12 +112,14 @@ static inline int blk_cpu_to_group(int cpu)
108#endif 112#endif
109} 113}
110 114
111static inline int blk_do_io_stat(struct request_queue *q) 115static inline int blk_do_io_stat(struct request *rq)
112{ 116{
113 if (q) 117 struct gendisk *disk = rq->rq_disk;
114 return blk_queue_io_stat(q);
115 118
116 return 0; 119 if (!disk || !disk->queue)
120 return 0;
121
122 return blk_queue_io_stat(disk->queue) && (rq->cmd_flags & REQ_ELVPRIV);
117} 123}
118 124
119#endif 125#endif
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 664ebfd092ec..a4809de6fea6 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -160,6 +160,7 @@ struct cfq_queue {
160 160
161 unsigned long slice_end; 161 unsigned long slice_end;
162 long slice_resid; 162 long slice_resid;
163 unsigned int slice_dispatch;
163 164
164 /* pending metadata requests */ 165 /* pending metadata requests */
165 int meta_pending; 166 int meta_pending;
@@ -176,13 +177,12 @@ struct cfq_queue {
176enum cfqq_state_flags { 177enum cfqq_state_flags {
177 CFQ_CFQQ_FLAG_on_rr = 0, /* on round-robin busy list */ 178 CFQ_CFQQ_FLAG_on_rr = 0, /* on round-robin busy list */
178 CFQ_CFQQ_FLAG_wait_request, /* waiting for a request */ 179 CFQ_CFQQ_FLAG_wait_request, /* waiting for a request */
180 CFQ_CFQQ_FLAG_must_dispatch, /* must be allowed a dispatch */
179 CFQ_CFQQ_FLAG_must_alloc, /* must be allowed rq alloc */ 181 CFQ_CFQQ_FLAG_must_alloc, /* must be allowed rq alloc */
180 CFQ_CFQQ_FLAG_must_alloc_slice, /* per-slice must_alloc flag */ 182 CFQ_CFQQ_FLAG_must_alloc_slice, /* per-slice must_alloc flag */
181 CFQ_CFQQ_FLAG_must_dispatch, /* must dispatch, even if expired */
182 CFQ_CFQQ_FLAG_fifo_expire, /* FIFO checked in this slice */ 183 CFQ_CFQQ_FLAG_fifo_expire, /* FIFO checked in this slice */
183 CFQ_CFQQ_FLAG_idle_window, /* slice idling enabled */ 184 CFQ_CFQQ_FLAG_idle_window, /* slice idling enabled */
184 CFQ_CFQQ_FLAG_prio_changed, /* task priority has changed */ 185 CFQ_CFQQ_FLAG_prio_changed, /* task priority has changed */
185 CFQ_CFQQ_FLAG_queue_new, /* queue never been serviced */
186 CFQ_CFQQ_FLAG_slice_new, /* no requests dispatched in slice */ 186 CFQ_CFQQ_FLAG_slice_new, /* no requests dispatched in slice */
187 CFQ_CFQQ_FLAG_sync, /* synchronous queue */ 187 CFQ_CFQQ_FLAG_sync, /* synchronous queue */
188}; 188};
@@ -203,13 +203,12 @@ static inline int cfq_cfqq_##name(const struct cfq_queue *cfqq) \
203 203
204CFQ_CFQQ_FNS(on_rr); 204CFQ_CFQQ_FNS(on_rr);
205CFQ_CFQQ_FNS(wait_request); 205CFQ_CFQQ_FNS(wait_request);
206CFQ_CFQQ_FNS(must_dispatch);
206CFQ_CFQQ_FNS(must_alloc); 207CFQ_CFQQ_FNS(must_alloc);
207CFQ_CFQQ_FNS(must_alloc_slice); 208CFQ_CFQQ_FNS(must_alloc_slice);
208CFQ_CFQQ_FNS(must_dispatch);
209CFQ_CFQQ_FNS(fifo_expire); 209CFQ_CFQQ_FNS(fifo_expire);
210CFQ_CFQQ_FNS(idle_window); 210CFQ_CFQQ_FNS(idle_window);
211CFQ_CFQQ_FNS(prio_changed); 211CFQ_CFQQ_FNS(prio_changed);
212CFQ_CFQQ_FNS(queue_new);
213CFQ_CFQQ_FNS(slice_new); 212CFQ_CFQQ_FNS(slice_new);
214CFQ_CFQQ_FNS(sync); 213CFQ_CFQQ_FNS(sync);
215#undef CFQ_CFQQ_FNS 214#undef CFQ_CFQQ_FNS
@@ -774,10 +773,15 @@ static void __cfq_set_active_queue(struct cfq_data *cfqd,
774 if (cfqq) { 773 if (cfqq) {
775 cfq_log_cfqq(cfqd, cfqq, "set_active"); 774 cfq_log_cfqq(cfqd, cfqq, "set_active");
776 cfqq->slice_end = 0; 775 cfqq->slice_end = 0;
776 cfqq->slice_dispatch = 0;
777
778 cfq_clear_cfqq_wait_request(cfqq);
779 cfq_clear_cfqq_must_dispatch(cfqq);
777 cfq_clear_cfqq_must_alloc_slice(cfqq); 780 cfq_clear_cfqq_must_alloc_slice(cfqq);
778 cfq_clear_cfqq_fifo_expire(cfqq); 781 cfq_clear_cfqq_fifo_expire(cfqq);
779 cfq_mark_cfqq_slice_new(cfqq); 782 cfq_mark_cfqq_slice_new(cfqq);
780 cfq_clear_cfqq_queue_new(cfqq); 783
784 del_timer(&cfqd->idle_slice_timer);
781 } 785 }
782 786
783 cfqd->active_queue = cfqq; 787 cfqd->active_queue = cfqq;
@@ -795,7 +799,6 @@ __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,
795 if (cfq_cfqq_wait_request(cfqq)) 799 if (cfq_cfqq_wait_request(cfqq))
796 del_timer(&cfqd->idle_slice_timer); 800 del_timer(&cfqd->idle_slice_timer);
797 801
798 cfq_clear_cfqq_must_dispatch(cfqq);
799 cfq_clear_cfqq_wait_request(cfqq); 802 cfq_clear_cfqq_wait_request(cfqq);
800 803
801 /* 804 /*
@@ -924,7 +927,6 @@ static void cfq_arm_slice_timer(struct cfq_data *cfqd)
924 (sample_valid(cic->ttime_samples) && cic->ttime_mean > 2)) 927 (sample_valid(cic->ttime_samples) && cic->ttime_mean > 2))
925 return; 928 return;
926 929
927 cfq_mark_cfqq_must_dispatch(cfqq);
928 cfq_mark_cfqq_wait_request(cfqq); 930 cfq_mark_cfqq_wait_request(cfqq);
929 931
930 /* 932 /*
@@ -1010,7 +1012,7 @@ static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd)
1010 /* 1012 /*
1011 * The active queue has run out of time, expire it and select new. 1013 * The active queue has run out of time, expire it and select new.
1012 */ 1014 */
1013 if (cfq_slice_used(cfqq)) 1015 if (cfq_slice_used(cfqq) && !cfq_cfqq_must_dispatch(cfqq))
1014 goto expire; 1016 goto expire;
1015 1017
1016 /* 1018 /*
@@ -1053,66 +1055,6 @@ keep_queue:
1053 return cfqq; 1055 return cfqq;
1054} 1056}
1055 1057
1056/*
1057 * Dispatch some requests from cfqq, moving them to the request queue
1058 * dispatch list.
1059 */
1060static int
1061__cfq_dispatch_requests(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1062 int max_dispatch)
1063{
1064 int dispatched = 0;
1065
1066 BUG_ON(RB_EMPTY_ROOT(&cfqq->sort_list));
1067
1068 do {
1069 struct request *rq;
1070
1071 /*
1072 * follow expired path, else get first next available
1073 */
1074 rq = cfq_check_fifo(cfqq);
1075 if (rq == NULL)
1076 rq = cfqq->next_rq;
1077
1078 /*
1079 * finally, insert request into driver dispatch list
1080 */
1081 cfq_dispatch_insert(cfqd->queue, rq);
1082
1083 dispatched++;
1084
1085 if (!cfqd->active_cic) {
1086 atomic_inc(&RQ_CIC(rq)->ioc->refcount);
1087 cfqd->active_cic = RQ_CIC(rq);
1088 }
1089
1090 if (RB_EMPTY_ROOT(&cfqq->sort_list))
1091 break;
1092
1093 /*
1094 * If there is a non-empty RT cfqq waiting for current
1095 * cfqq's timeslice to complete, pre-empt this cfqq
1096 */
1097 if (!cfq_class_rt(cfqq) && cfqd->busy_rt_queues)
1098 break;
1099
1100 } while (dispatched < max_dispatch);
1101
1102 /*
1103 * expire an async queue immediately if it has used up its slice. idle
1104 * queue always expire after 1 dispatch round.
1105 */
1106 if (cfqd->busy_queues > 1 && ((!cfq_cfqq_sync(cfqq) &&
1107 dispatched >= cfq_prio_to_maxrq(cfqd, cfqq)) ||
1108 cfq_class_idle(cfqq))) {
1109 cfqq->slice_end = jiffies + 1;
1110 cfq_slice_expired(cfqd, 0);
1111 }
1112
1113 return dispatched;
1114}
1115
1116static int __cfq_forced_dispatch_cfqq(struct cfq_queue *cfqq) 1058static int __cfq_forced_dispatch_cfqq(struct cfq_queue *cfqq)
1117{ 1059{
1118 int dispatched = 0; 1060 int dispatched = 0;
@@ -1146,11 +1088,45 @@ static int cfq_forced_dispatch(struct cfq_data *cfqd)
1146 return dispatched; 1088 return dispatched;
1147} 1089}
1148 1090
1091/*
1092 * Dispatch a request from cfqq, moving them to the request queue
1093 * dispatch list.
1094 */
1095static void cfq_dispatch_request(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1096{
1097 struct request *rq;
1098
1099 BUG_ON(RB_EMPTY_ROOT(&cfqq->sort_list));
1100
1101 /*
1102 * follow expired path, else get first next available
1103 */
1104 rq = cfq_check_fifo(cfqq);
1105 if (!rq)
1106 rq = cfqq->next_rq;
1107
1108 /*
1109 * insert request into driver dispatch list
1110 */
1111 cfq_dispatch_insert(cfqd->queue, rq);
1112
1113 if (!cfqd->active_cic) {
1114 struct cfq_io_context *cic = RQ_CIC(rq);
1115
1116 atomic_inc(&cic->ioc->refcount);
1117 cfqd->active_cic = cic;
1118 }
1119}
1120
1121/*
1122 * Find the cfqq that we need to service and move a request from that to the
1123 * dispatch list
1124 */
1149static int cfq_dispatch_requests(struct request_queue *q, int force) 1125static int cfq_dispatch_requests(struct request_queue *q, int force)
1150{ 1126{
1151 struct cfq_data *cfqd = q->elevator->elevator_data; 1127 struct cfq_data *cfqd = q->elevator->elevator_data;
1152 struct cfq_queue *cfqq; 1128 struct cfq_queue *cfqq;
1153 int dispatched; 1129 unsigned int max_dispatch;
1154 1130
1155 if (!cfqd->busy_queues) 1131 if (!cfqd->busy_queues)
1156 return 0; 1132 return 0;
@@ -1158,29 +1134,63 @@ static int cfq_dispatch_requests(struct request_queue *q, int force)
1158 if (unlikely(force)) 1134 if (unlikely(force))
1159 return cfq_forced_dispatch(cfqd); 1135 return cfq_forced_dispatch(cfqd);
1160 1136
1161 dispatched = 0; 1137 cfqq = cfq_select_queue(cfqd);
1162 while ((cfqq = cfq_select_queue(cfqd)) != NULL) { 1138 if (!cfqq)
1163 int max_dispatch; 1139 return 0;
1140
1141 /*
1142 * If this is an async queue and we have sync IO in flight, let it wait
1143 */
1144 if (cfqd->sync_flight && !cfq_cfqq_sync(cfqq))
1145 return 0;
1146
1147 max_dispatch = cfqd->cfq_quantum;
1148 if (cfq_class_idle(cfqq))
1149 max_dispatch = 1;
1164 1150
1165 max_dispatch = cfqd->cfq_quantum; 1151 /*
1152 * Does this cfqq already have too much IO in flight?
1153 */
1154 if (cfqq->dispatched >= max_dispatch) {
1155 /*
1156 * idle queue must always only have a single IO in flight
1157 */
1166 if (cfq_class_idle(cfqq)) 1158 if (cfq_class_idle(cfqq))
1167 max_dispatch = 1; 1159 return 0;
1168 1160
1169 if (cfqq->dispatched >= max_dispatch && cfqd->busy_queues > 1) 1161 /*
1170 break; 1162 * We have other queues, don't allow more IO from this one
1163 */
1164 if (cfqd->busy_queues > 1)
1165 return 0;
1171 1166
1172 if (cfqd->sync_flight && !cfq_cfqq_sync(cfqq)) 1167 /*
1173 break; 1168 * we are the only queue, allow up to 4 times of 'quantum'
1169 */
1170 if (cfqq->dispatched >= 4 * max_dispatch)
1171 return 0;
1172 }
1174 1173
1175 cfq_clear_cfqq_must_dispatch(cfqq); 1174 /*
1176 cfq_clear_cfqq_wait_request(cfqq); 1175 * Dispatch a request from this cfqq
1177 del_timer(&cfqd->idle_slice_timer); 1176 */
1177 cfq_dispatch_request(cfqd, cfqq);
1178 cfqq->slice_dispatch++;
1179 cfq_clear_cfqq_must_dispatch(cfqq);
1178 1180
1179 dispatched += __cfq_dispatch_requests(cfqd, cfqq, max_dispatch); 1181 /*
1182 * expire an async queue immediately if it has used up its slice. idle
1183 * queue always expire after 1 dispatch round.
1184 */
1185 if (cfqd->busy_queues > 1 && ((!cfq_cfqq_sync(cfqq) &&
1186 cfqq->slice_dispatch >= cfq_prio_to_maxrq(cfqd, cfqq)) ||
1187 cfq_class_idle(cfqq))) {
1188 cfqq->slice_end = jiffies + 1;
1189 cfq_slice_expired(cfqd, 0);
1180 } 1190 }
1181 1191
1182 cfq_log(cfqd, "dispatched=%d", dispatched); 1192 cfq_log(cfqd, "dispatched a request");
1183 return dispatched; 1193 return 1;
1184} 1194}
1185 1195
1186/* 1196/*
@@ -1506,7 +1516,6 @@ retry:
1506 cfqq->cfqd = cfqd; 1516 cfqq->cfqd = cfqd;
1507 1517
1508 cfq_mark_cfqq_prio_changed(cfqq); 1518 cfq_mark_cfqq_prio_changed(cfqq);
1509 cfq_mark_cfqq_queue_new(cfqq);
1510 1519
1511 cfq_init_prio_data(cfqq, ioc); 1520 cfq_init_prio_data(cfqq, ioc);
1512 1521
@@ -1893,15 +1902,13 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1893 1902
1894 if (cfqq == cfqd->active_queue) { 1903 if (cfqq == cfqd->active_queue) {
1895 /* 1904 /*
1896 * if we are waiting for a request for this queue, let it rip 1905 * Remember that we saw a request from this process, but
1897 * immediately and flag that we must not expire this queue 1906 * don't start queuing just yet. Otherwise we risk seeing lots
1898 * just now 1907 * of tiny requests, because we disrupt the normal plugging
1908 * and merging.
1899 */ 1909 */
1900 if (cfq_cfqq_wait_request(cfqq)) { 1910 if (cfq_cfqq_wait_request(cfqq))
1901 cfq_mark_cfqq_must_dispatch(cfqq); 1911 cfq_mark_cfqq_must_dispatch(cfqq);
1902 del_timer(&cfqd->idle_slice_timer);
1903 blk_start_queueing(cfqd->queue);
1904 }
1905 } else if (cfq_should_preempt(cfqd, cfqq, rq)) { 1912 } else if (cfq_should_preempt(cfqd, cfqq, rq)) {
1906 /* 1913 /*
1907 * not the active queue - expire current slice if it is 1914 * not the active queue - expire current slice if it is
@@ -1910,7 +1917,6 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1910 * this new queue is RT and the current one is BE 1917 * this new queue is RT and the current one is BE
1911 */ 1918 */
1912 cfq_preempt_queue(cfqd, cfqq); 1919 cfq_preempt_queue(cfqd, cfqq);
1913 cfq_mark_cfqq_must_dispatch(cfqq);
1914 blk_start_queueing(cfqd->queue); 1920 blk_start_queueing(cfqd->queue);
1915 } 1921 }
1916} 1922}
@@ -1992,8 +1998,10 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
1992 } 1998 }
1993 if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq)) 1999 if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq))
1994 cfq_slice_expired(cfqd, 1); 2000 cfq_slice_expired(cfqd, 1);
1995 else if (sync && RB_EMPTY_ROOT(&cfqq->sort_list)) 2001 else if (sync && !rq_noidle(rq) &&
2002 RB_EMPTY_ROOT(&cfqq->sort_list)) {
1996 cfq_arm_slice_timer(cfqd); 2003 cfq_arm_slice_timer(cfqd);
2004 }
1997 } 2005 }
1998 2006
1999 if (!cfqd->rq_in_driver) 2007 if (!cfqd->rq_in_driver)
@@ -2170,6 +2178,12 @@ static void cfq_idle_slice_timer(unsigned long data)
2170 timed_out = 0; 2178 timed_out = 0;
2171 2179
2172 /* 2180 /*
2181 * We saw a request before the queue expired, let it through
2182 */
2183 if (cfq_cfqq_must_dispatch(cfqq))
2184 goto out_kick;
2185
2186 /*
2173 * expired 2187 * expired
2174 */ 2188 */
2175 if (cfq_slice_used(cfqq)) 2189 if (cfq_slice_used(cfqq))
@@ -2185,10 +2199,8 @@ static void cfq_idle_slice_timer(unsigned long data)
2185 /* 2199 /*
2186 * not expired and it has a request pending, let it dispatch 2200 * not expired and it has a request pending, let it dispatch
2187 */ 2201 */
2188 if (!RB_EMPTY_ROOT(&cfqq->sort_list)) { 2202 if (!RB_EMPTY_ROOT(&cfqq->sort_list))
2189 cfq_mark_cfqq_must_dispatch(cfqq);
2190 goto out_kick; 2203 goto out_kick;
2191 }
2192 } 2204 }
2193expire: 2205expire:
2194 cfq_slice_expired(cfqd, timed_out); 2206 cfq_slice_expired(cfqd, timed_out);
diff --git a/block/elevator.c b/block/elevator.c
index 98259eda0ef6..fb81bcc14a8c 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -573,7 +573,7 @@ void elv_requeue_request(struct request_queue *q, struct request *rq)
573 elv_insert(q, rq, ELEVATOR_INSERT_REQUEUE); 573 elv_insert(q, rq, ELEVATOR_INSERT_REQUEUE);
574} 574}
575 575
576static void elv_drain_elevator(struct request_queue *q) 576void elv_drain_elevator(struct request_queue *q)
577{ 577{
578 static int printed; 578 static int printed;
579 while (q->elevator->ops->elevator_dispatch_fn(q, 1)) 579 while (q->elevator->ops->elevator_dispatch_fn(q, 1))
@@ -587,6 +587,31 @@ static void elv_drain_elevator(struct request_queue *q)
587 } 587 }
588} 588}
589 589
590/*
591 * Call with queue lock held, interrupts disabled
592 */
593void elv_quisce_start(struct request_queue *q)
594{
595 queue_flag_set(QUEUE_FLAG_ELVSWITCH, q);
596
597 /*
598 * make sure we don't have any requests in flight
599 */
600 elv_drain_elevator(q);
601 while (q->rq.elvpriv) {
602 blk_start_queueing(q);
603 spin_unlock_irq(q->queue_lock);
604 msleep(10);
605 spin_lock_irq(q->queue_lock);
606 elv_drain_elevator(q);
607 }
608}
609
610void elv_quisce_end(struct request_queue *q)
611{
612 queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q);
613}
614
590void elv_insert(struct request_queue *q, struct request *rq, int where) 615void elv_insert(struct request_queue *q, struct request *rq, int where)
591{ 616{
592 struct list_head *pos; 617 struct list_head *pos;
@@ -677,7 +702,7 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
677 } 702 }
678 703
679 if (unplug_it && blk_queue_plugged(q)) { 704 if (unplug_it && blk_queue_plugged(q)) {
680 int nrq = q->rq.count[READ] + q->rq.count[WRITE] 705 int nrq = q->rq.count[BLK_RW_SYNC] + q->rq.count[BLK_RW_ASYNC]
681 - q->in_flight; 706 - q->in_flight;
682 707
683 if (nrq >= q->unplug_thresh) 708 if (nrq >= q->unplug_thresh)
@@ -1101,18 +1126,7 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
1101 * Turn on BYPASS and drain all requests w/ elevator private data 1126 * Turn on BYPASS and drain all requests w/ elevator private data
1102 */ 1127 */
1103 spin_lock_irq(q->queue_lock); 1128 spin_lock_irq(q->queue_lock);
1104 1129 elv_quisce_start(q);
1105 queue_flag_set(QUEUE_FLAG_ELVSWITCH, q);
1106
1107 elv_drain_elevator(q);
1108
1109 while (q->rq.elvpriv) {
1110 blk_start_queueing(q);
1111 spin_unlock_irq(q->queue_lock);
1112 msleep(10);
1113 spin_lock_irq(q->queue_lock);
1114 elv_drain_elevator(q);
1115 }
1116 1130
1117 /* 1131 /*
1118 * Remember old elevator. 1132 * Remember old elevator.
@@ -1136,7 +1150,7 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
1136 */ 1150 */
1137 elevator_exit(old_elevator); 1151 elevator_exit(old_elevator);
1138 spin_lock_irq(q->queue_lock); 1152 spin_lock_irq(q->queue_lock);
1139 queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); 1153 elv_quisce_end(q);
1140 spin_unlock_irq(q->queue_lock); 1154 spin_unlock_irq(q->queue_lock);
1141 1155
1142 blk_add_trace_msg(q, "elv switch: %s", e->elevator_type->elevator_name); 1156 blk_add_trace_msg(q, "elv switch: %s", e->elevator_type->elevator_name);
diff --git a/drivers/acpi/acpica/nsxfeval.c b/drivers/acpi/acpica/nsxfeval.c
index 045054037c2d..daf4ad37896d 100644
--- a/drivers/acpi/acpica/nsxfeval.c
+++ b/drivers/acpi/acpica/nsxfeval.c
@@ -53,7 +53,6 @@ ACPI_MODULE_NAME("nsxfeval")
53/* Local prototypes */ 53/* Local prototypes */
54static void acpi_ns_resolve_references(struct acpi_evaluate_info *info); 54static void acpi_ns_resolve_references(struct acpi_evaluate_info *info);
55 55
56#ifdef ACPI_FUTURE_USAGE
57/******************************************************************************* 56/*******************************************************************************
58 * 57 *
59 * FUNCTION: acpi_evaluate_object_typed 58 * FUNCTION: acpi_evaluate_object_typed
@@ -147,7 +146,7 @@ acpi_evaluate_object_typed(acpi_handle handle,
147} 146}
148 147
149ACPI_EXPORT_SYMBOL(acpi_evaluate_object_typed) 148ACPI_EXPORT_SYMBOL(acpi_evaluate_object_typed)
150#endif /* ACPI_FUTURE_USAGE */ 149
151/******************************************************************************* 150/*******************************************************************************
152 * 151 *
153 * FUNCTION: acpi_evaluate_object 152 * FUNCTION: acpi_evaluate_object
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 788bba2b1e17..57be6bea48eb 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -78,6 +78,7 @@ static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
78static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state, 78static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
79 ssize_t size); 79 ssize_t size);
80#define MAX_SLOTS 8 80#define MAX_SLOTS 8
81#define MAX_RETRY 15
81 82
82enum { 83enum {
83 AHCI_PCI_BAR = 5, 84 AHCI_PCI_BAR = 5,
@@ -1115,6 +1116,8 @@ static void ahci_start_port(struct ata_port *ap)
1115 struct ahci_port_priv *pp = ap->private_data; 1116 struct ahci_port_priv *pp = ap->private_data;
1116 struct ata_link *link; 1117 struct ata_link *link;
1117 struct ahci_em_priv *emp; 1118 struct ahci_em_priv *emp;
1119 ssize_t rc;
1120 int i;
1118 1121
1119 /* enable FIS reception */ 1122 /* enable FIS reception */
1120 ahci_start_fis_rx(ap); 1123 ahci_start_fis_rx(ap);
@@ -1126,7 +1129,17 @@ static void ahci_start_port(struct ata_port *ap)
1126 if (ap->flags & ATA_FLAG_EM) { 1129 if (ap->flags & ATA_FLAG_EM) {
1127 ata_for_each_link(link, ap, EDGE) { 1130 ata_for_each_link(link, ap, EDGE) {
1128 emp = &pp->em_priv[link->pmp]; 1131 emp = &pp->em_priv[link->pmp];
1129 ahci_transmit_led_message(ap, emp->led_state, 4); 1132
1133 /* EM Transmit bit maybe busy during init */
1134 for (i = 0; i < MAX_RETRY; i++) {
1135 rc = ahci_transmit_led_message(ap,
1136 emp->led_state,
1137 4);
1138 if (rc == -EBUSY)
1139 udelay(100);
1140 else
1141 break;
1142 }
1130 } 1143 }
1131 } 1144 }
1132 1145
@@ -1331,7 +1344,7 @@ static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
1331 em_ctl = readl(mmio + HOST_EM_CTL); 1344 em_ctl = readl(mmio + HOST_EM_CTL);
1332 if (em_ctl & EM_CTL_TM) { 1345 if (em_ctl & EM_CTL_TM) {
1333 spin_unlock_irqrestore(ap->lock, flags); 1346 spin_unlock_irqrestore(ap->lock, flags);
1334 return -EINVAL; 1347 return -EBUSY;
1335 } 1348 }
1336 1349
1337 /* 1350 /*
@@ -2405,10 +2418,10 @@ static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
2405 int rc; 2418 int rc;
2406 2419
2407 if (using_dac && 2420 if (using_dac &&
2408 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 2421 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
2409 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 2422 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
2410 if (rc) { 2423 if (rc) {
2411 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 2424 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2412 if (rc) { 2425 if (rc) {
2413 dev_printk(KERN_ERR, &pdev->dev, 2426 dev_printk(KERN_ERR, &pdev->dev,
2414 "64-bit DMA enable failed\n"); 2427 "64-bit DMA enable failed\n");
@@ -2416,13 +2429,13 @@ static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
2416 } 2429 }
2417 } 2430 }
2418 } else { 2431 } else {
2419 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2432 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2420 if (rc) { 2433 if (rc) {
2421 dev_printk(KERN_ERR, &pdev->dev, 2434 dev_printk(KERN_ERR, &pdev->dev,
2422 "32-bit DMA enable failed\n"); 2435 "32-bit DMA enable failed\n");
2423 return rc; 2436 return rc;
2424 } 2437 }
2425 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 2438 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2426 if (rc) { 2439 if (rc) {
2427 dev_printk(KERN_ERR, &pdev->dev, 2440 dev_printk(KERN_ERR, &pdev->dev,
2428 "32-bit consistent DMA enable failed\n"); 2441 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index e5cbe80ce172..942d14ac8792 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -1053,6 +1053,13 @@ static int piix_broken_suspend(void)
1053 DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE M500"), 1053 DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE M500"),
1054 }, 1054 },
1055 }, 1055 },
1056 {
1057 .ident = "VGN-BX297XP",
1058 .matches = {
1059 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
1060 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-BX297XP"),
1061 },
1062 },
1056 1063
1057 { } /* terminate list */ 1064 { } /* terminate list */
1058 }; 1065 };
diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c
index db6a96984f3f..0df83cf74233 100644
--- a/drivers/ata/pata_cs5520.c
+++ b/drivers/ata/pata_cs5520.c
@@ -203,11 +203,11 @@ static int __devinit cs5520_init_one(struct pci_dev *pdev, const struct pci_devi
203 return -ENODEV; 203 return -ENODEV;
204 } 204 }
205 205
206 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 206 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
207 printk(KERN_ERR DRV_NAME ": unable to configure DMA mask.\n"); 207 printk(KERN_ERR DRV_NAME ": unable to configure DMA mask.\n");
208 return -ENODEV; 208 return -ENODEV;
209 } 209 }
210 if (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 210 if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
211 printk(KERN_ERR DRV_NAME ": unable to configure consistent DMA mask.\n"); 211 printk(KERN_ERR DRV_NAME ": unable to configure consistent DMA mask.\n");
212 return -ENODEV; 212 return -ENODEV;
213 } 213 }
diff --git a/drivers/ata/pata_ixp4xx_cf.c b/drivers/ata/pata_ixp4xx_cf.c
index 19fdecf319a6..ba54b089f98c 100644
--- a/drivers/ata/pata_ixp4xx_cf.c
+++ b/drivers/ata/pata_ixp4xx_cf.c
@@ -157,7 +157,7 @@ static __devinit int ixp4xx_pata_probe(struct platform_device *pdev)
157 return -ENOMEM; 157 return -ENOMEM;
158 158
159 /* acquire resources and fill host */ 159 /* acquire resources and fill host */
160 pdev->dev.coherent_dma_mask = DMA_32BIT_MASK; 160 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
161 161
162 data->cs0 = devm_ioremap(&pdev->dev, cs0->start, 0x1000); 162 data->cs0 = devm_ioremap(&pdev->dev, cs0->start, 0x1000);
163 data->cs1 = devm_ioremap(&pdev->dev, cs1->start, 0x1000); 163 data->cs1 = devm_ioremap(&pdev->dev, cs1->start, 0x1000);
diff --git a/drivers/ata/pata_octeon_cf.c b/drivers/ata/pata_octeon_cf.c
index efe2c1985af3..8d9343accf3c 100644
--- a/drivers/ata/pata_octeon_cf.c
+++ b/drivers/ata/pata_octeon_cf.c
@@ -503,7 +503,7 @@ static void octeon_cf_dma_setup(struct ata_queued_cmd *qc)
503 struct ata_port *ap = qc->ap; 503 struct ata_port *ap = qc->ap;
504 struct octeon_cf_port *cf_port; 504 struct octeon_cf_port *cf_port;
505 505
506 cf_port = (struct octeon_cf_port *)ap->private_data; 506 cf_port = ap->private_data;
507 DPRINTK("ENTER\n"); 507 DPRINTK("ENTER\n");
508 /* issue r/w command */ 508 /* issue r/w command */
509 qc->cursg = qc->sg; 509 qc->cursg = qc->sg;
@@ -596,7 +596,7 @@ static unsigned int octeon_cf_dma_finished(struct ata_port *ap,
596 if (ap->hsm_task_state != HSM_ST_LAST) 596 if (ap->hsm_task_state != HSM_ST_LAST)
597 return 0; 597 return 0;
598 598
599 cf_port = (struct octeon_cf_port *)ap->private_data; 599 cf_port = ap->private_data;
600 600
601 dma_cfg.u64 = cvmx_read_csr(CVMX_MIO_BOOT_DMA_CFGX(ocd->dma_engine)); 601 dma_cfg.u64 = cvmx_read_csr(CVMX_MIO_BOOT_DMA_CFGX(ocd->dma_engine));
602 if (dma_cfg.s.size != 0xfffff) { 602 if (dma_cfg.s.size != 0xfffff) {
@@ -657,7 +657,7 @@ static irqreturn_t octeon_cf_interrupt(int irq, void *dev_instance)
657 continue; 657 continue;
658 658
659 ocd = ap->dev->platform_data; 659 ocd = ap->dev->platform_data;
660 cf_port = (struct octeon_cf_port *)ap->private_data; 660 cf_port = ap->private_data;
661 dma_int.u64 = 661 dma_int.u64 =
662 cvmx_read_csr(CVMX_MIO_BOOT_DMA_INTX(ocd->dma_engine)); 662 cvmx_read_csr(CVMX_MIO_BOOT_DMA_INTX(ocd->dma_engine));
663 dma_cfg.u64 = 663 dma_cfg.u64 =
diff --git a/drivers/ata/pdc_adma.c b/drivers/ata/pdc_adma.c
index 39588178d028..6c65b0776a2c 100644
--- a/drivers/ata/pdc_adma.c
+++ b/drivers/ata/pdc_adma.c
@@ -607,13 +607,13 @@ static int adma_set_dma_masks(struct pci_dev *pdev, void __iomem *mmio_base)
607{ 607{
608 int rc; 608 int rc;
609 609
610 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 610 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
611 if (rc) { 611 if (rc) {
612 dev_printk(KERN_ERR, &pdev->dev, 612 dev_printk(KERN_ERR, &pdev->dev,
613 "32-bit DMA enable failed\n"); 613 "32-bit DMA enable failed\n");
614 return rc; 614 return rc;
615 } 615 }
616 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 616 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
617 if (rc) { 617 if (rc) {
618 dev_printk(KERN_ERR, &pdev->dev, 618 dev_printk(KERN_ERR, &pdev->dev,
619 "32-bit consistent DMA enable failed\n"); 619 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
index 305a4f825f53..8d890cc5a7ee 100644
--- a/drivers/ata/sata_inic162x.c
+++ b/drivers/ata/sata_inic162x.c
@@ -861,14 +861,14 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
861 } 861 }
862 862
863 /* Set dma_mask. This devices doesn't support 64bit addressing. */ 863 /* Set dma_mask. This devices doesn't support 64bit addressing. */
864 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 864 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
865 if (rc) { 865 if (rc) {
866 dev_printk(KERN_ERR, &pdev->dev, 866 dev_printk(KERN_ERR, &pdev->dev,
867 "32-bit DMA enable failed\n"); 867 "32-bit DMA enable failed\n");
868 return rc; 868 return rc;
869 } 869 }
870 870
871 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 871 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
872 if (rc) { 872 if (rc) {
873 dev_printk(KERN_ERR, &pdev->dev, 873 dev_printk(KERN_ERR, &pdev->dev,
874 "32-bit consistent DMA enable failed\n"); 874 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index a377226b81c8..37ae5dc1070c 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -28,10 +28,6 @@
28/* 28/*
29 * sata_mv TODO list: 29 * sata_mv TODO list:
30 * 30 *
31 * --> More errata workarounds for PCI-X.
32 *
33 * --> Complete a full errata audit for all chipsets to identify others.
34 *
35 * --> Develop a low-power-consumption strategy, and implement it. 31 * --> Develop a low-power-consumption strategy, and implement it.
36 * 32 *
37 * --> Add sysfs attributes for per-chip / per-HC IRQ coalescing thresholds. 33 * --> Add sysfs attributes for per-chip / per-HC IRQ coalescing thresholds.
@@ -44,6 +40,15 @@
44 * connect two SATA ports. 40 * connect two SATA ports.
45 */ 41 */
46 42
43/*
44 * 80x1-B2 errata PCI#11:
45 *
46 * Users of the 6041/6081 Rev.B2 chips (current is C0)
47 * should be careful to insert those cards only onto PCI-X bus #0,
48 * and only in device slots 0..7, not higher. The chips may not
49 * work correctly otherwise (note: this is a pretty rare condition).
50 */
51
47#include <linux/kernel.h> 52#include <linux/kernel.h>
48#include <linux/module.h> 53#include <linux/module.h>
49#include <linux/pci.h> 54#include <linux/pci.h>
@@ -64,7 +69,7 @@
64#include <linux/libata.h> 69#include <linux/libata.h>
65 70
66#define DRV_NAME "sata_mv" 71#define DRV_NAME "sata_mv"
67#define DRV_VERSION "1.27" 72#define DRV_VERSION "1.28"
68 73
69/* 74/*
70 * module options 75 * module options
@@ -109,23 +114,23 @@ enum {
109 * Coalescing defers the interrupt until either the IO_THRESHOLD 114 * Coalescing defers the interrupt until either the IO_THRESHOLD
110 * (count of completed I/Os) is met, or the TIME_THRESHOLD is met. 115 * (count of completed I/Os) is met, or the TIME_THRESHOLD is met.
111 */ 116 */
112 MV_COAL_REG_BASE = 0x18000, 117 COAL_REG_BASE = 0x18000,
113 MV_IRQ_COAL_CAUSE = (MV_COAL_REG_BASE + 0x08), 118 IRQ_COAL_CAUSE = (COAL_REG_BASE + 0x08),
114 ALL_PORTS_COAL_IRQ = (1 << 4), /* all ports irq event */ 119 ALL_PORTS_COAL_IRQ = (1 << 4), /* all ports irq event */
115 120
116 MV_IRQ_COAL_IO_THRESHOLD = (MV_COAL_REG_BASE + 0xcc), 121 IRQ_COAL_IO_THRESHOLD = (COAL_REG_BASE + 0xcc),
117 MV_IRQ_COAL_TIME_THRESHOLD = (MV_COAL_REG_BASE + 0xd0), 122 IRQ_COAL_TIME_THRESHOLD = (COAL_REG_BASE + 0xd0),
118 123
119 /* 124 /*
120 * Registers for the (unused here) transaction coalescing feature: 125 * Registers for the (unused here) transaction coalescing feature:
121 */ 126 */
122 MV_TRAN_COAL_CAUSE_LO = (MV_COAL_REG_BASE + 0x88), 127 TRAN_COAL_CAUSE_LO = (COAL_REG_BASE + 0x88),
123 MV_TRAN_COAL_CAUSE_HI = (MV_COAL_REG_BASE + 0x8c), 128 TRAN_COAL_CAUSE_HI = (COAL_REG_BASE + 0x8c),
124 129
125 MV_SATAHC0_REG_BASE = 0x20000, 130 SATAHC0_REG_BASE = 0x20000,
126 MV_FLASH_CTL_OFS = 0x1046c, 131 FLASH_CTL = 0x1046c,
127 MV_GPIO_PORT_CTL_OFS = 0x104f0, 132 GPIO_PORT_CTL = 0x104f0,
128 MV_RESET_CFG_OFS = 0x180d8, 133 RESET_CFG = 0x180d8,
129 134
130 MV_PCI_REG_SZ = MV_MAJOR_REG_AREA_SZ, 135 MV_PCI_REG_SZ = MV_MAJOR_REG_AREA_SZ,
131 MV_SATAHC_REG_SZ = MV_MAJOR_REG_AREA_SZ, 136 MV_SATAHC_REG_SZ = MV_MAJOR_REG_AREA_SZ,
@@ -180,40 +185,41 @@ enum {
180 185
181 /* PCI interface registers */ 186 /* PCI interface registers */
182 187
183 PCI_COMMAND_OFS = 0xc00, 188 MV_PCI_COMMAND = 0xc00,
184 PCI_COMMAND_MRDTRIG = (1 << 7), /* PCI Master Read Trigger */ 189 MV_PCI_COMMAND_MWRCOM = (1 << 4), /* PCI Master Write Combining */
190 MV_PCI_COMMAND_MRDTRIG = (1 << 7), /* PCI Master Read Trigger */
185 191
186 PCI_MAIN_CMD_STS_OFS = 0xd30, 192 PCI_MAIN_CMD_STS = 0xd30,
187 STOP_PCI_MASTER = (1 << 2), 193 STOP_PCI_MASTER = (1 << 2),
188 PCI_MASTER_EMPTY = (1 << 3), 194 PCI_MASTER_EMPTY = (1 << 3),
189 GLOB_SFT_RST = (1 << 4), 195 GLOB_SFT_RST = (1 << 4),
190 196
191 MV_PCI_MODE_OFS = 0xd00, 197 MV_PCI_MODE = 0xd00,
192 MV_PCI_MODE_MASK = 0x30, 198 MV_PCI_MODE_MASK = 0x30,
193 199
194 MV_PCI_EXP_ROM_BAR_CTL = 0xd2c, 200 MV_PCI_EXP_ROM_BAR_CTL = 0xd2c,
195 MV_PCI_DISC_TIMER = 0xd04, 201 MV_PCI_DISC_TIMER = 0xd04,
196 MV_PCI_MSI_TRIGGER = 0xc38, 202 MV_PCI_MSI_TRIGGER = 0xc38,
197 MV_PCI_SERR_MASK = 0xc28, 203 MV_PCI_SERR_MASK = 0xc28,
198 MV_PCI_XBAR_TMOUT_OFS = 0x1d04, 204 MV_PCI_XBAR_TMOUT = 0x1d04,
199 MV_PCI_ERR_LOW_ADDRESS = 0x1d40, 205 MV_PCI_ERR_LOW_ADDRESS = 0x1d40,
200 MV_PCI_ERR_HIGH_ADDRESS = 0x1d44, 206 MV_PCI_ERR_HIGH_ADDRESS = 0x1d44,
201 MV_PCI_ERR_ATTRIBUTE = 0x1d48, 207 MV_PCI_ERR_ATTRIBUTE = 0x1d48,
202 MV_PCI_ERR_COMMAND = 0x1d50, 208 MV_PCI_ERR_COMMAND = 0x1d50,
203 209
204 PCI_IRQ_CAUSE_OFS = 0x1d58, 210 PCI_IRQ_CAUSE = 0x1d58,
205 PCI_IRQ_MASK_OFS = 0x1d5c, 211 PCI_IRQ_MASK = 0x1d5c,
206 PCI_UNMASK_ALL_IRQS = 0x7fffff, /* bits 22-0 */ 212 PCI_UNMASK_ALL_IRQS = 0x7fffff, /* bits 22-0 */
207 213
208 PCIE_IRQ_CAUSE_OFS = 0x1900, 214 PCIE_IRQ_CAUSE = 0x1900,
209 PCIE_IRQ_MASK_OFS = 0x1910, 215 PCIE_IRQ_MASK = 0x1910,
210 PCIE_UNMASK_ALL_IRQS = 0x40a, /* assorted bits */ 216 PCIE_UNMASK_ALL_IRQS = 0x40a, /* assorted bits */
211 217
212 /* Host Controller Main Interrupt Cause/Mask registers (1 per-chip) */ 218 /* Host Controller Main Interrupt Cause/Mask registers (1 per-chip) */
213 PCI_HC_MAIN_IRQ_CAUSE_OFS = 0x1d60, 219 PCI_HC_MAIN_IRQ_CAUSE = 0x1d60,
214 PCI_HC_MAIN_IRQ_MASK_OFS = 0x1d64, 220 PCI_HC_MAIN_IRQ_MASK = 0x1d64,
215 SOC_HC_MAIN_IRQ_CAUSE_OFS = 0x20020, 221 SOC_HC_MAIN_IRQ_CAUSE = 0x20020,
216 SOC_HC_MAIN_IRQ_MASK_OFS = 0x20024, 222 SOC_HC_MAIN_IRQ_MASK = 0x20024,
217 ERR_IRQ = (1 << 0), /* shift by (2 * port #) */ 223 ERR_IRQ = (1 << 0), /* shift by (2 * port #) */
218 DONE_IRQ = (1 << 1), /* shift by (2 * port #) */ 224 DONE_IRQ = (1 << 1), /* shift by (2 * port #) */
219 HC0_IRQ_PEND = 0x1ff, /* bits 0-8 = HC0's ports */ 225 HC0_IRQ_PEND = 0x1ff, /* bits 0-8 = HC0's ports */
@@ -234,9 +240,9 @@ enum {
234 HC_MAIN_RSVD_SOC = (0x3fffffb << 6), /* bits 31-9, 7-6 */ 240 HC_MAIN_RSVD_SOC = (0x3fffffb << 6), /* bits 31-9, 7-6 */
235 241
236 /* SATAHC registers */ 242 /* SATAHC registers */
237 HC_CFG_OFS = 0, 243 HC_CFG = 0x00,
238 244
239 HC_IRQ_CAUSE_OFS = 0x14, 245 HC_IRQ_CAUSE = 0x14,
240 DMA_IRQ = (1 << 0), /* shift by port # */ 246 DMA_IRQ = (1 << 0), /* shift by port # */
241 HC_COAL_IRQ = (1 << 4), /* IRQ coalescing */ 247 HC_COAL_IRQ = (1 << 4), /* IRQ coalescing */
242 DEV_IRQ = (1 << 8), /* shift by port # */ 248 DEV_IRQ = (1 << 8), /* shift by port # */
@@ -248,53 +254,54 @@ enum {
248 * Coalescing defers the interrupt until either the IO_THRESHOLD 254 * Coalescing defers the interrupt until either the IO_THRESHOLD
249 * (count of completed I/Os) is met, or the TIME_THRESHOLD is met. 255 * (count of completed I/Os) is met, or the TIME_THRESHOLD is met.
250 */ 256 */
251 HC_IRQ_COAL_IO_THRESHOLD_OFS = 0x000c, 257 HC_IRQ_COAL_IO_THRESHOLD = 0x000c,
252 HC_IRQ_COAL_TIME_THRESHOLD_OFS = 0x0010, 258 HC_IRQ_COAL_TIME_THRESHOLD = 0x0010,
253 259
254 SOC_LED_CTRL_OFS = 0x2c, 260 SOC_LED_CTRL = 0x2c,
255 SOC_LED_CTRL_BLINK = (1 << 0), /* Active LED blink */ 261 SOC_LED_CTRL_BLINK = (1 << 0), /* Active LED blink */
256 SOC_LED_CTRL_ACT_PRESENCE = (1 << 2), /* Multiplex dev presence */ 262 SOC_LED_CTRL_ACT_PRESENCE = (1 << 2), /* Multiplex dev presence */
257 /* with dev activity LED */ 263 /* with dev activity LED */
258 264
259 /* Shadow block registers */ 265 /* Shadow block registers */
260 SHD_BLK_OFS = 0x100, 266 SHD_BLK = 0x100,
261 SHD_CTL_AST_OFS = 0x20, /* ofs from SHD_BLK_OFS */ 267 SHD_CTL_AST = 0x20, /* ofs from SHD_BLK */
262 268
263 /* SATA registers */ 269 /* SATA registers */
264 SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */ 270 SATA_STATUS = 0x300, /* ctrl, err regs follow status */
265 SATA_ACTIVE_OFS = 0x350, 271 SATA_ACTIVE = 0x350,
266 SATA_FIS_IRQ_CAUSE_OFS = 0x364, 272 FIS_IRQ_CAUSE = 0x364,
267 SATA_FIS_IRQ_AN = (1 << 9), /* async notification */ 273 FIS_IRQ_CAUSE_AN = (1 << 9), /* async notification */
268 274
269 LTMODE_OFS = 0x30c, 275 LTMODE = 0x30c, /* requires read-after-write */
270 LTMODE_BIT8 = (1 << 8), /* unknown, but necessary */ 276 LTMODE_BIT8 = (1 << 8), /* unknown, but necessary */
271 277
278 PHY_MODE2 = 0x330,
272 PHY_MODE3 = 0x310, 279 PHY_MODE3 = 0x310,
273 PHY_MODE4 = 0x314, 280
281 PHY_MODE4 = 0x314, /* requires read-after-write */
274 PHY_MODE4_CFG_MASK = 0x00000003, /* phy internal config field */ 282 PHY_MODE4_CFG_MASK = 0x00000003, /* phy internal config field */
275 PHY_MODE4_CFG_VALUE = 0x00000001, /* phy internal config field */ 283 PHY_MODE4_CFG_VALUE = 0x00000001, /* phy internal config field */
276 PHY_MODE4_RSVD_ZEROS = 0x5de3fffa, /* Gen2e always write zeros */ 284 PHY_MODE4_RSVD_ZEROS = 0x5de3fffa, /* Gen2e always write zeros */
277 PHY_MODE4_RSVD_ONES = 0x00000005, /* Gen2e always write ones */ 285 PHY_MODE4_RSVD_ONES = 0x00000005, /* Gen2e always write ones */
278 286
279 PHY_MODE2 = 0x330, 287 SATA_IFCTL = 0x344,
280 SATA_IFCTL_OFS = 0x344, 288 SATA_TESTCTL = 0x348,
281 SATA_TESTCTL_OFS = 0x348, 289 SATA_IFSTAT = 0x34c,
282 SATA_IFSTAT_OFS = 0x34c, 290 VENDOR_UNIQUE_FIS = 0x35c,
283 VENDOR_UNIQUE_FIS_OFS = 0x35c,
284 291
285 FISCFG_OFS = 0x360, 292 FISCFG = 0x360,
286 FISCFG_WAIT_DEV_ERR = (1 << 8), /* wait for host on DevErr */ 293 FISCFG_WAIT_DEV_ERR = (1 << 8), /* wait for host on DevErr */
287 FISCFG_SINGLE_SYNC = (1 << 16), /* SYNC on DMA activation */ 294 FISCFG_SINGLE_SYNC = (1 << 16), /* SYNC on DMA activation */
288 295
289 MV5_PHY_MODE = 0x74, 296 MV5_PHY_MODE = 0x74,
290 MV5_LTMODE_OFS = 0x30, 297 MV5_LTMODE = 0x30,
291 MV5_PHY_CTL_OFS = 0x0C, 298 MV5_PHY_CTL = 0x0C,
292 SATA_INTERFACE_CFG_OFS = 0x050, 299 SATA_IFCFG = 0x050,
293 300
294 MV_M2_PREAMP_MASK = 0x7e0, 301 MV_M2_PREAMP_MASK = 0x7e0,
295 302
296 /* Port registers */ 303 /* Port registers */
297 EDMA_CFG_OFS = 0, 304 EDMA_CFG = 0,
298 EDMA_CFG_Q_DEPTH = 0x1f, /* max device queue depth */ 305 EDMA_CFG_Q_DEPTH = 0x1f, /* max device queue depth */
299 EDMA_CFG_NCQ = (1 << 5), /* for R/W FPDMA queued */ 306 EDMA_CFG_NCQ = (1 << 5), /* for R/W FPDMA queued */
300 EDMA_CFG_NCQ_GO_ON_ERR = (1 << 14), /* continue on error */ 307 EDMA_CFG_NCQ_GO_ON_ERR = (1 << 14), /* continue on error */
@@ -303,8 +310,8 @@ enum {
303 EDMA_CFG_EDMA_FBS = (1 << 16), /* EDMA FIS-Based Switching */ 310 EDMA_CFG_EDMA_FBS = (1 << 16), /* EDMA FIS-Based Switching */
304 EDMA_CFG_FBS = (1 << 26), /* FIS-Based Switching */ 311 EDMA_CFG_FBS = (1 << 26), /* FIS-Based Switching */
305 312
306 EDMA_ERR_IRQ_CAUSE_OFS = 0x8, 313 EDMA_ERR_IRQ_CAUSE = 0x8,
307 EDMA_ERR_IRQ_MASK_OFS = 0xc, 314 EDMA_ERR_IRQ_MASK = 0xc,
308 EDMA_ERR_D_PAR = (1 << 0), /* UDMA data parity err */ 315 EDMA_ERR_D_PAR = (1 << 0), /* UDMA data parity err */
309 EDMA_ERR_PRD_PAR = (1 << 1), /* UDMA PRD parity err */ 316 EDMA_ERR_PRD_PAR = (1 << 1), /* UDMA PRD parity err */
310 EDMA_ERR_DEV = (1 << 2), /* device error */ 317 EDMA_ERR_DEV = (1 << 2), /* device error */
@@ -373,36 +380,36 @@ enum {
373 EDMA_ERR_INTRL_PAR | 380 EDMA_ERR_INTRL_PAR |
374 EDMA_ERR_IORDY, 381 EDMA_ERR_IORDY,
375 382
376 EDMA_REQ_Q_BASE_HI_OFS = 0x10, 383 EDMA_REQ_Q_BASE_HI = 0x10,
377 EDMA_REQ_Q_IN_PTR_OFS = 0x14, /* also contains BASE_LO */ 384 EDMA_REQ_Q_IN_PTR = 0x14, /* also contains BASE_LO */
378 385
379 EDMA_REQ_Q_OUT_PTR_OFS = 0x18, 386 EDMA_REQ_Q_OUT_PTR = 0x18,
380 EDMA_REQ_Q_PTR_SHIFT = 5, 387 EDMA_REQ_Q_PTR_SHIFT = 5,
381 388
382 EDMA_RSP_Q_BASE_HI_OFS = 0x1c, 389 EDMA_RSP_Q_BASE_HI = 0x1c,
383 EDMA_RSP_Q_IN_PTR_OFS = 0x20, 390 EDMA_RSP_Q_IN_PTR = 0x20,
384 EDMA_RSP_Q_OUT_PTR_OFS = 0x24, /* also contains BASE_LO */ 391 EDMA_RSP_Q_OUT_PTR = 0x24, /* also contains BASE_LO */
385 EDMA_RSP_Q_PTR_SHIFT = 3, 392 EDMA_RSP_Q_PTR_SHIFT = 3,
386 393
387 EDMA_CMD_OFS = 0x28, /* EDMA command register */ 394 EDMA_CMD = 0x28, /* EDMA command register */
388 EDMA_EN = (1 << 0), /* enable EDMA */ 395 EDMA_EN = (1 << 0), /* enable EDMA */
389 EDMA_DS = (1 << 1), /* disable EDMA; self-negated */ 396 EDMA_DS = (1 << 1), /* disable EDMA; self-negated */
390 EDMA_RESET = (1 << 2), /* reset eng/trans/link/phy */ 397 EDMA_RESET = (1 << 2), /* reset eng/trans/link/phy */
391 398
392 EDMA_STATUS_OFS = 0x30, /* EDMA engine status */ 399 EDMA_STATUS = 0x30, /* EDMA engine status */
393 EDMA_STATUS_CACHE_EMPTY = (1 << 6), /* GenIIe command cache empty */ 400 EDMA_STATUS_CACHE_EMPTY = (1 << 6), /* GenIIe command cache empty */
394 EDMA_STATUS_IDLE = (1 << 7), /* GenIIe EDMA enabled/idle */ 401 EDMA_STATUS_IDLE = (1 << 7), /* GenIIe EDMA enabled/idle */
395 402
396 EDMA_IORDY_TMOUT_OFS = 0x34, 403 EDMA_IORDY_TMOUT = 0x34,
397 EDMA_ARB_CFG_OFS = 0x38, 404 EDMA_ARB_CFG = 0x38,
398 405
399 EDMA_HALTCOND_OFS = 0x60, /* GenIIe halt conditions */ 406 EDMA_HALTCOND = 0x60, /* GenIIe halt conditions */
400 EDMA_UNKNOWN_RSVD_OFS = 0x6C, /* GenIIe unknown/reserved */ 407 EDMA_UNKNOWN_RSVD = 0x6C, /* GenIIe unknown/reserved */
401 408
402 BMDMA_CMD_OFS = 0x224, /* bmdma command register */ 409 BMDMA_CMD = 0x224, /* bmdma command register */
403 BMDMA_STATUS_OFS = 0x228, /* bmdma status register */ 410 BMDMA_STATUS = 0x228, /* bmdma status register */
404 BMDMA_PRD_LOW_OFS = 0x22c, /* bmdma PRD addr 31:0 */ 411 BMDMA_PRD_LOW = 0x22c, /* bmdma PRD addr 31:0 */
405 BMDMA_PRD_HIGH_OFS = 0x230, /* bmdma PRD addr 63:32 */ 412 BMDMA_PRD_HIGH = 0x230, /* bmdma PRD addr 63:32 */
406 413
407 /* Host private flags (hp_flags) */ 414 /* Host private flags (hp_flags) */
408 MV_HP_FLAG_MSI = (1 << 0), 415 MV_HP_FLAG_MSI = (1 << 0),
@@ -534,8 +541,8 @@ struct mv_host_priv {
534 void __iomem *base; 541 void __iomem *base;
535 void __iomem *main_irq_cause_addr; 542 void __iomem *main_irq_cause_addr;
536 void __iomem *main_irq_mask_addr; 543 void __iomem *main_irq_mask_addr;
537 u32 irq_cause_ofs; 544 u32 irq_cause_offset;
538 u32 irq_mask_ofs; 545 u32 irq_mask_offset;
539 u32 unmask_all_irqs; 546 u32 unmask_all_irqs;
540 /* 547 /*
541 * These consistent DMA memory pools give us guaranteed 548 * These consistent DMA memory pools give us guaranteed
@@ -694,49 +701,49 @@ static struct ata_port_operations mv_iie_ops = {
694static const struct ata_port_info mv_port_info[] = { 701static const struct ata_port_info mv_port_info[] = {
695 { /* chip_504x */ 702 { /* chip_504x */
696 .flags = MV_GEN_I_FLAGS, 703 .flags = MV_GEN_I_FLAGS,
697 .pio_mask = 0x1f, /* pio0-4 */ 704 .pio_mask = ATA_PIO4,
698 .udma_mask = ATA_UDMA6, 705 .udma_mask = ATA_UDMA6,
699 .port_ops = &mv5_ops, 706 .port_ops = &mv5_ops,
700 }, 707 },
701 { /* chip_508x */ 708 { /* chip_508x */
702 .flags = MV_GEN_I_FLAGS | MV_FLAG_DUAL_HC, 709 .flags = MV_GEN_I_FLAGS | MV_FLAG_DUAL_HC,
703 .pio_mask = 0x1f, /* pio0-4 */ 710 .pio_mask = ATA_PIO4,
704 .udma_mask = ATA_UDMA6, 711 .udma_mask = ATA_UDMA6,
705 .port_ops = &mv5_ops, 712 .port_ops = &mv5_ops,
706 }, 713 },
707 { /* chip_5080 */ 714 { /* chip_5080 */
708 .flags = MV_GEN_I_FLAGS | MV_FLAG_DUAL_HC, 715 .flags = MV_GEN_I_FLAGS | MV_FLAG_DUAL_HC,
709 .pio_mask = 0x1f, /* pio0-4 */ 716 .pio_mask = ATA_PIO4,
710 .udma_mask = ATA_UDMA6, 717 .udma_mask = ATA_UDMA6,
711 .port_ops = &mv5_ops, 718 .port_ops = &mv5_ops,
712 }, 719 },
713 { /* chip_604x */ 720 { /* chip_604x */
714 .flags = MV_GEN_II_FLAGS, 721 .flags = MV_GEN_II_FLAGS,
715 .pio_mask = 0x1f, /* pio0-4 */ 722 .pio_mask = ATA_PIO4,
716 .udma_mask = ATA_UDMA6, 723 .udma_mask = ATA_UDMA6,
717 .port_ops = &mv6_ops, 724 .port_ops = &mv6_ops,
718 }, 725 },
719 { /* chip_608x */ 726 { /* chip_608x */
720 .flags = MV_GEN_II_FLAGS | MV_FLAG_DUAL_HC, 727 .flags = MV_GEN_II_FLAGS | MV_FLAG_DUAL_HC,
721 .pio_mask = 0x1f, /* pio0-4 */ 728 .pio_mask = ATA_PIO4,
722 .udma_mask = ATA_UDMA6, 729 .udma_mask = ATA_UDMA6,
723 .port_ops = &mv6_ops, 730 .port_ops = &mv6_ops,
724 }, 731 },
725 { /* chip_6042 */ 732 { /* chip_6042 */
726 .flags = MV_GEN_IIE_FLAGS, 733 .flags = MV_GEN_IIE_FLAGS,
727 .pio_mask = 0x1f, /* pio0-4 */ 734 .pio_mask = ATA_PIO4,
728 .udma_mask = ATA_UDMA6, 735 .udma_mask = ATA_UDMA6,
729 .port_ops = &mv_iie_ops, 736 .port_ops = &mv_iie_ops,
730 }, 737 },
731 { /* chip_7042 */ 738 { /* chip_7042 */
732 .flags = MV_GEN_IIE_FLAGS, 739 .flags = MV_GEN_IIE_FLAGS,
733 .pio_mask = 0x1f, /* pio0-4 */ 740 .pio_mask = ATA_PIO4,
734 .udma_mask = ATA_UDMA6, 741 .udma_mask = ATA_UDMA6,
735 .port_ops = &mv_iie_ops, 742 .port_ops = &mv_iie_ops,
736 }, 743 },
737 { /* chip_soc */ 744 { /* chip_soc */
738 .flags = MV_GEN_IIE_FLAGS, 745 .flags = MV_GEN_IIE_FLAGS,
739 .pio_mask = 0x1f, /* pio0-4 */ 746 .pio_mask = ATA_PIO4,
740 .udma_mask = ATA_UDMA6, 747 .udma_mask = ATA_UDMA6,
741 .port_ops = &mv_iie_ops, 748 .port_ops = &mv_iie_ops,
742 }, 749 },
@@ -840,7 +847,7 @@ static inline unsigned int mv_hardport_from_port(unsigned int port)
840 847
841static inline void __iomem *mv_hc_base(void __iomem *base, unsigned int hc) 848static inline void __iomem *mv_hc_base(void __iomem *base, unsigned int hc)
842{ 849{
843 return (base + MV_SATAHC0_REG_BASE + (hc * MV_SATAHC_REG_SZ)); 850 return (base + SATAHC0_REG_BASE + (hc * MV_SATAHC_REG_SZ));
844} 851}
845 852
846static inline void __iomem *mv_hc_base_from_port(void __iomem *base, 853static inline void __iomem *mv_hc_base_from_port(void __iomem *base,
@@ -895,10 +902,10 @@ static void mv_save_cached_regs(struct ata_port *ap)
895 void __iomem *port_mmio = mv_ap_base(ap); 902 void __iomem *port_mmio = mv_ap_base(ap);
896 struct mv_port_priv *pp = ap->private_data; 903 struct mv_port_priv *pp = ap->private_data;
897 904
898 pp->cached.fiscfg = readl(port_mmio + FISCFG_OFS); 905 pp->cached.fiscfg = readl(port_mmio + FISCFG);
899 pp->cached.ltmode = readl(port_mmio + LTMODE_OFS); 906 pp->cached.ltmode = readl(port_mmio + LTMODE);
900 pp->cached.haltcond = readl(port_mmio + EDMA_HALTCOND_OFS); 907 pp->cached.haltcond = readl(port_mmio + EDMA_HALTCOND);
901 pp->cached.unknown_rsvd = readl(port_mmio + EDMA_UNKNOWN_RSVD_OFS); 908 pp->cached.unknown_rsvd = readl(port_mmio + EDMA_UNKNOWN_RSVD);
902} 909}
903 910
904/** 911/**
@@ -913,8 +920,26 @@ static void mv_save_cached_regs(struct ata_port *ap)
913static inline void mv_write_cached_reg(void __iomem *addr, u32 *old, u32 new) 920static inline void mv_write_cached_reg(void __iomem *addr, u32 *old, u32 new)
914{ 921{
915 if (new != *old) { 922 if (new != *old) {
923 unsigned long laddr;
916 *old = new; 924 *old = new;
917 writel(new, addr); 925 /*
926 * Workaround for 88SX60x1-B2 FEr SATA#13:
927 * Read-after-write is needed to prevent generating 64-bit
928 * write cycles on the PCI bus for SATA interface registers
929 * at offsets ending in 0x4 or 0xc.
930 *
931 * Looks like a lot of fuss, but it avoids an unnecessary
932 * +1 usec read-after-write delay for unaffected registers.
933 */
934 laddr = (long)addr & 0xffff;
935 if (laddr >= 0x300 && laddr <= 0x33c) {
936 laddr &= 0x000f;
937 if (laddr == 0x4 || laddr == 0xc) {
938 writelfl(new, addr); /* read after write */
939 return;
940 }
941 }
942 writel(new, addr); /* unaffected by the errata */
918 } 943 }
919} 944}
920 945
@@ -931,10 +956,10 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio,
931 index = pp->req_idx << EDMA_REQ_Q_PTR_SHIFT; 956 index = pp->req_idx << EDMA_REQ_Q_PTR_SHIFT;
932 957
933 WARN_ON(pp->crqb_dma & 0x3ff); 958 WARN_ON(pp->crqb_dma & 0x3ff);
934 writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); 959 writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI);
935 writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, 960 writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index,
936 port_mmio + EDMA_REQ_Q_IN_PTR_OFS); 961 port_mmio + EDMA_REQ_Q_IN_PTR);
937 writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); 962 writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR);
938 963
939 /* 964 /*
940 * initialize response queue 965 * initialize response queue
@@ -943,10 +968,10 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio,
943 index = pp->resp_idx << EDMA_RSP_Q_PTR_SHIFT; 968 index = pp->resp_idx << EDMA_RSP_Q_PTR_SHIFT;
944 969
945 WARN_ON(pp->crpb_dma & 0xff); 970 WARN_ON(pp->crpb_dma & 0xff);
946 writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); 971 writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI);
947 writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); 972 writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR);
948 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, 973 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index,
949 port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); 974 port_mmio + EDMA_RSP_Q_OUT_PTR);
950} 975}
951 976
952static void mv_write_main_irq_mask(u32 mask, struct mv_host_priv *hpriv) 977static void mv_write_main_irq_mask(u32 mask, struct mv_host_priv *hpriv)
@@ -1004,15 +1029,15 @@ static void mv_clear_and_enable_port_irqs(struct ata_port *ap,
1004 u32 hc_irq_cause; 1029 u32 hc_irq_cause;
1005 1030
1006 /* clear EDMA event indicators, if any */ 1031 /* clear EDMA event indicators, if any */
1007 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 1032 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE);
1008 1033
1009 /* clear pending irq events */ 1034 /* clear pending irq events */
1010 hc_irq_cause = ~((DEV_IRQ | DMA_IRQ) << hardport); 1035 hc_irq_cause = ~((DEV_IRQ | DMA_IRQ) << hardport);
1011 writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS); 1036 writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE);
1012 1037
1013 /* clear FIS IRQ Cause */ 1038 /* clear FIS IRQ Cause */
1014 if (IS_GEN_IIE(hpriv)) 1039 if (IS_GEN_IIE(hpriv))
1015 writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS); 1040 writelfl(0, port_mmio + FIS_IRQ_CAUSE);
1016 1041
1017 mv_enable_port_irqs(ap, port_irqs); 1042 mv_enable_port_irqs(ap, port_irqs);
1018} 1043}
@@ -1048,10 +1073,10 @@ static void mv_set_irq_coalescing(struct ata_host *host,
1048 * GEN_II/GEN_IIE with dual host controllers: 1073 * GEN_II/GEN_IIE with dual host controllers:
1049 * one set of global thresholds for the entire chip. 1074 * one set of global thresholds for the entire chip.
1050 */ 1075 */
1051 writel(clks, mmio + MV_IRQ_COAL_TIME_THRESHOLD); 1076 writel(clks, mmio + IRQ_COAL_TIME_THRESHOLD);
1052 writel(count, mmio + MV_IRQ_COAL_IO_THRESHOLD); 1077 writel(count, mmio + IRQ_COAL_IO_THRESHOLD);
1053 /* clear leftover coal IRQ bit */ 1078 /* clear leftover coal IRQ bit */
1054 writel(~ALL_PORTS_COAL_IRQ, mmio + MV_IRQ_COAL_CAUSE); 1079 writel(~ALL_PORTS_COAL_IRQ, mmio + IRQ_COAL_CAUSE);
1055 if (count) 1080 if (count)
1056 coal_enable = ALL_PORTS_COAL_DONE; 1081 coal_enable = ALL_PORTS_COAL_DONE;
1057 clks = count = 0; /* force clearing of regular regs below */ 1082 clks = count = 0; /* force clearing of regular regs below */
@@ -1061,16 +1086,16 @@ static void mv_set_irq_coalescing(struct ata_host *host,
1061 * All chips: independent thresholds for each HC on the chip. 1086 * All chips: independent thresholds for each HC on the chip.
1062 */ 1087 */
1063 hc_mmio = mv_hc_base_from_port(mmio, 0); 1088 hc_mmio = mv_hc_base_from_port(mmio, 0);
1064 writel(clks, hc_mmio + HC_IRQ_COAL_TIME_THRESHOLD_OFS); 1089 writel(clks, hc_mmio + HC_IRQ_COAL_TIME_THRESHOLD);
1065 writel(count, hc_mmio + HC_IRQ_COAL_IO_THRESHOLD_OFS); 1090 writel(count, hc_mmio + HC_IRQ_COAL_IO_THRESHOLD);
1066 writel(~HC_COAL_IRQ, hc_mmio + HC_IRQ_CAUSE_OFS); 1091 writel(~HC_COAL_IRQ, hc_mmio + HC_IRQ_CAUSE);
1067 if (count) 1092 if (count)
1068 coal_enable |= PORTS_0_3_COAL_DONE; 1093 coal_enable |= PORTS_0_3_COAL_DONE;
1069 if (is_dual_hc) { 1094 if (is_dual_hc) {
1070 hc_mmio = mv_hc_base_from_port(mmio, MV_PORTS_PER_HC); 1095 hc_mmio = mv_hc_base_from_port(mmio, MV_PORTS_PER_HC);
1071 writel(clks, hc_mmio + HC_IRQ_COAL_TIME_THRESHOLD_OFS); 1096 writel(clks, hc_mmio + HC_IRQ_COAL_TIME_THRESHOLD);
1072 writel(count, hc_mmio + HC_IRQ_COAL_IO_THRESHOLD_OFS); 1097 writel(count, hc_mmio + HC_IRQ_COAL_IO_THRESHOLD);
1073 writel(~HC_COAL_IRQ, hc_mmio + HC_IRQ_CAUSE_OFS); 1098 writel(~HC_COAL_IRQ, hc_mmio + HC_IRQ_CAUSE);
1074 if (count) 1099 if (count)
1075 coal_enable |= PORTS_4_7_COAL_DONE; 1100 coal_enable |= PORTS_4_7_COAL_DONE;
1076 } 1101 }
@@ -1108,7 +1133,7 @@ static void mv_start_edma(struct ata_port *ap, void __iomem *port_mmio,
1108 mv_set_edma_ptrs(port_mmio, hpriv, pp); 1133 mv_set_edma_ptrs(port_mmio, hpriv, pp);
1109 mv_clear_and_enable_port_irqs(ap, port_mmio, DONE_IRQ|ERR_IRQ); 1134 mv_clear_and_enable_port_irqs(ap, port_mmio, DONE_IRQ|ERR_IRQ);
1110 1135
1111 writelfl(EDMA_EN, port_mmio + EDMA_CMD_OFS); 1136 writelfl(EDMA_EN, port_mmio + EDMA_CMD);
1112 pp->pp_flags |= MV_PP_FLAG_EDMA_EN; 1137 pp->pp_flags |= MV_PP_FLAG_EDMA_EN;
1113 } 1138 }
1114} 1139}
@@ -1128,7 +1153,7 @@ static void mv_wait_for_edma_empty_idle(struct ata_port *ap)
1128 * as a rough guess at what even more drives might require. 1153 * as a rough guess at what even more drives might require.
1129 */ 1154 */
1130 for (i = 0; i < timeout; ++i) { 1155 for (i = 0; i < timeout; ++i) {
1131 u32 edma_stat = readl(port_mmio + EDMA_STATUS_OFS); 1156 u32 edma_stat = readl(port_mmio + EDMA_STATUS);
1132 if ((edma_stat & empty_idle) == empty_idle) 1157 if ((edma_stat & empty_idle) == empty_idle)
1133 break; 1158 break;
1134 udelay(per_loop); 1159 udelay(per_loop);
@@ -1148,11 +1173,11 @@ static int mv_stop_edma_engine(void __iomem *port_mmio)
1148 int i; 1173 int i;
1149 1174
1150 /* Disable eDMA. The disable bit auto clears. */ 1175 /* Disable eDMA. The disable bit auto clears. */
1151 writelfl(EDMA_DS, port_mmio + EDMA_CMD_OFS); 1176 writelfl(EDMA_DS, port_mmio + EDMA_CMD);
1152 1177
1153 /* Wait for the chip to confirm eDMA is off. */ 1178 /* Wait for the chip to confirm eDMA is off. */
1154 for (i = 10000; i > 0; i--) { 1179 for (i = 10000; i > 0; i--) {
1155 u32 reg = readl(port_mmio + EDMA_CMD_OFS); 1180 u32 reg = readl(port_mmio + EDMA_CMD);
1156 if (!(reg & EDMA_EN)) 1181 if (!(reg & EDMA_EN))
1157 return 0; 1182 return 0;
1158 udelay(10); 1183 udelay(10);
@@ -1262,10 +1287,10 @@ static unsigned int mv_scr_offset(unsigned int sc_reg_in)
1262 case SCR_STATUS: 1287 case SCR_STATUS:
1263 case SCR_CONTROL: 1288 case SCR_CONTROL:
1264 case SCR_ERROR: 1289 case SCR_ERROR:
1265 ofs = SATA_STATUS_OFS + (sc_reg_in * sizeof(u32)); 1290 ofs = SATA_STATUS + (sc_reg_in * sizeof(u32));
1266 break; 1291 break;
1267 case SCR_ACTIVE: 1292 case SCR_ACTIVE:
1268 ofs = SATA_ACTIVE_OFS; /* active is not with the others */ 1293 ofs = SATA_ACTIVE; /* active is not with the others */
1269 break; 1294 break;
1270 default: 1295 default:
1271 ofs = 0xffffffffU; 1296 ofs = 0xffffffffU;
@@ -1290,7 +1315,25 @@ static int mv_scr_write(struct ata_link *link, unsigned int sc_reg_in, u32 val)
1290 unsigned int ofs = mv_scr_offset(sc_reg_in); 1315 unsigned int ofs = mv_scr_offset(sc_reg_in);
1291 1316
1292 if (ofs != 0xffffffffU) { 1317 if (ofs != 0xffffffffU) {
1293 writelfl(val, mv_ap_base(link->ap) + ofs); 1318 void __iomem *addr = mv_ap_base(link->ap) + ofs;
1319 if (sc_reg_in == SCR_CONTROL) {
1320 /*
1321 * Workaround for 88SX60x1 FEr SATA#26:
1322 *
1323 * COMRESETs have to take care not to accidently
1324 * put the drive to sleep when writing SCR_CONTROL.
1325 * Setting bits 12..15 prevents this problem.
1326 *
1327 * So if we see an outbound COMMRESET, set those bits.
1328 * Ditto for the followup write that clears the reset.
1329 *
1330 * The proprietary driver does this for
1331 * all chip versions, and so do we.
1332 */
1333 if ((val & 0xf) == 1 || (readl(addr) & 0xf) == 1)
1334 val |= 0xf000;
1335 }
1336 writelfl(val, addr);
1294 return 0; 1337 return 0;
1295 } else 1338 } else
1296 return -EINVAL; 1339 return -EINVAL;
@@ -1368,9 +1411,9 @@ static void mv_config_fbs(struct ata_port *ap, int want_ncq, int want_fbs)
1368 } 1411 }
1369 1412
1370 port_mmio = mv_ap_base(ap); 1413 port_mmio = mv_ap_base(ap);
1371 mv_write_cached_reg(port_mmio + FISCFG_OFS, old_fiscfg, fiscfg); 1414 mv_write_cached_reg(port_mmio + FISCFG, old_fiscfg, fiscfg);
1372 mv_write_cached_reg(port_mmio + LTMODE_OFS, old_ltmode, ltmode); 1415 mv_write_cached_reg(port_mmio + LTMODE, old_ltmode, ltmode);
1373 mv_write_cached_reg(port_mmio + EDMA_HALTCOND_OFS, old_haltcond, haltcond); 1416 mv_write_cached_reg(port_mmio + EDMA_HALTCOND, old_haltcond, haltcond);
1374} 1417}
1375 1418
1376static void mv_60x1_errata_sata25(struct ata_port *ap, int want_ncq) 1419static void mv_60x1_errata_sata25(struct ata_port *ap, int want_ncq)
@@ -1379,13 +1422,13 @@ static void mv_60x1_errata_sata25(struct ata_port *ap, int want_ncq)
1379 u32 old, new; 1422 u32 old, new;
1380 1423
1381 /* workaround for 88SX60x1 FEr SATA#25 (part 1) */ 1424 /* workaround for 88SX60x1 FEr SATA#25 (part 1) */
1382 old = readl(hpriv->base + MV_GPIO_PORT_CTL_OFS); 1425 old = readl(hpriv->base + GPIO_PORT_CTL);
1383 if (want_ncq) 1426 if (want_ncq)
1384 new = old | (1 << 22); 1427 new = old | (1 << 22);
1385 else 1428 else
1386 new = old & ~(1 << 22); 1429 new = old & ~(1 << 22);
1387 if (new != old) 1430 if (new != old)
1388 writel(new, hpriv->base + MV_GPIO_PORT_CTL_OFS); 1431 writel(new, hpriv->base + GPIO_PORT_CTL);
1389} 1432}
1390 1433
1391/** 1434/**
@@ -1409,7 +1452,7 @@ static void mv_bmdma_enable_iie(struct ata_port *ap, int enable_bmdma)
1409 new = *old | 1; 1452 new = *old | 1;
1410 else 1453 else
1411 new = *old & ~1; 1454 new = *old & ~1;
1412 mv_write_cached_reg(mv_ap_base(ap) + EDMA_UNKNOWN_RSVD_OFS, old, new); 1455 mv_write_cached_reg(mv_ap_base(ap) + EDMA_UNKNOWN_RSVD, old, new);
1413} 1456}
1414 1457
1415/* 1458/*
@@ -1437,8 +1480,8 @@ static void mv_soc_led_blink_enable(struct ata_port *ap)
1437 return; 1480 return;
1438 hpriv->hp_flags |= MV_HP_QUIRK_LED_BLINK_EN; 1481 hpriv->hp_flags |= MV_HP_QUIRK_LED_BLINK_EN;
1439 hc_mmio = mv_hc_base_from_port(mv_host_base(host), ap->port_no); 1482 hc_mmio = mv_hc_base_from_port(mv_host_base(host), ap->port_no);
1440 led_ctrl = readl(hc_mmio + SOC_LED_CTRL_OFS); 1483 led_ctrl = readl(hc_mmio + SOC_LED_CTRL);
1441 writel(led_ctrl | SOC_LED_CTRL_BLINK, hc_mmio + SOC_LED_CTRL_OFS); 1484 writel(led_ctrl | SOC_LED_CTRL_BLINK, hc_mmio + SOC_LED_CTRL);
1442} 1485}
1443 1486
1444static void mv_soc_led_blink_disable(struct ata_port *ap) 1487static void mv_soc_led_blink_disable(struct ata_port *ap)
@@ -1463,8 +1506,8 @@ static void mv_soc_led_blink_disable(struct ata_port *ap)
1463 1506
1464 hpriv->hp_flags &= ~MV_HP_QUIRK_LED_BLINK_EN; 1507 hpriv->hp_flags &= ~MV_HP_QUIRK_LED_BLINK_EN;
1465 hc_mmio = mv_hc_base_from_port(mv_host_base(host), ap->port_no); 1508 hc_mmio = mv_hc_base_from_port(mv_host_base(host), ap->port_no);
1466 led_ctrl = readl(hc_mmio + SOC_LED_CTRL_OFS); 1509 led_ctrl = readl(hc_mmio + SOC_LED_CTRL);
1467 writel(led_ctrl & ~SOC_LED_CTRL_BLINK, hc_mmio + SOC_LED_CTRL_OFS); 1510 writel(led_ctrl & ~SOC_LED_CTRL_BLINK, hc_mmio + SOC_LED_CTRL);
1468} 1511}
1469 1512
1470static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma) 1513static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma)
@@ -1528,7 +1571,7 @@ static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma)
1528 pp->pp_flags |= MV_PP_FLAG_NCQ_EN; 1571 pp->pp_flags |= MV_PP_FLAG_NCQ_EN;
1529 } 1572 }
1530 1573
1531 writelfl(cfg, port_mmio + EDMA_CFG_OFS); 1574 writelfl(cfg, port_mmio + EDMA_CFG);
1532} 1575}
1533 1576
1534static void mv_port_free_dma_mem(struct ata_port *ap) 1577static void mv_port_free_dma_mem(struct ata_port *ap)
@@ -1575,6 +1618,7 @@ static int mv_port_start(struct ata_port *ap)
1575 struct device *dev = ap->host->dev; 1618 struct device *dev = ap->host->dev;
1576 struct mv_host_priv *hpriv = ap->host->private_data; 1619 struct mv_host_priv *hpriv = ap->host->private_data;
1577 struct mv_port_priv *pp; 1620 struct mv_port_priv *pp;
1621 unsigned long flags;
1578 int tag; 1622 int tag;
1579 1623
1580 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 1624 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
@@ -1610,8 +1654,12 @@ static int mv_port_start(struct ata_port *ap)
1610 pp->sg_tbl_dma[tag] = pp->sg_tbl_dma[0]; 1654 pp->sg_tbl_dma[tag] = pp->sg_tbl_dma[0];
1611 } 1655 }
1612 } 1656 }
1657
1658 spin_lock_irqsave(ap->lock, flags);
1613 mv_save_cached_regs(ap); 1659 mv_save_cached_regs(ap);
1614 mv_edma_cfg(ap, 0, 0); 1660 mv_edma_cfg(ap, 0, 0);
1661 spin_unlock_irqrestore(ap->lock, flags);
1662
1615 return 0; 1663 return 0;
1616 1664
1617out_port_free_dma_mem: 1665out_port_free_dma_mem:
@@ -1630,8 +1678,12 @@ out_port_free_dma_mem:
1630 */ 1678 */
1631static void mv_port_stop(struct ata_port *ap) 1679static void mv_port_stop(struct ata_port *ap)
1632{ 1680{
1681 unsigned long flags;
1682
1683 spin_lock_irqsave(ap->lock, flags);
1633 mv_stop_edma(ap); 1684 mv_stop_edma(ap);
1634 mv_enable_port_irqs(ap, 0); 1685 mv_enable_port_irqs(ap, 0);
1686 spin_unlock_irqrestore(ap->lock, flags);
1635 mv_port_free_dma_mem(ap); 1687 mv_port_free_dma_mem(ap);
1636} 1688}
1637 1689
@@ -1749,13 +1801,13 @@ static void mv_bmdma_setup(struct ata_queued_cmd *qc)
1749 mv_fill_sg(qc); 1801 mv_fill_sg(qc);
1750 1802
1751 /* clear all DMA cmd bits */ 1803 /* clear all DMA cmd bits */
1752 writel(0, port_mmio + BMDMA_CMD_OFS); 1804 writel(0, port_mmio + BMDMA_CMD);
1753 1805
1754 /* load PRD table addr. */ 1806 /* load PRD table addr. */
1755 writel((pp->sg_tbl_dma[qc->tag] >> 16) >> 16, 1807 writel((pp->sg_tbl_dma[qc->tag] >> 16) >> 16,
1756 port_mmio + BMDMA_PRD_HIGH_OFS); 1808 port_mmio + BMDMA_PRD_HIGH);
1757 writelfl(pp->sg_tbl_dma[qc->tag], 1809 writelfl(pp->sg_tbl_dma[qc->tag],
1758 port_mmio + BMDMA_PRD_LOW_OFS); 1810 port_mmio + BMDMA_PRD_LOW);
1759 1811
1760 /* issue r/w command */ 1812 /* issue r/w command */
1761 ap->ops->sff_exec_command(ap, &qc->tf); 1813 ap->ops->sff_exec_command(ap, &qc->tf);
@@ -1776,7 +1828,7 @@ static void mv_bmdma_start(struct ata_queued_cmd *qc)
1776 u32 cmd = (rw ? 0 : ATA_DMA_WR) | ATA_DMA_START; 1828 u32 cmd = (rw ? 0 : ATA_DMA_WR) | ATA_DMA_START;
1777 1829
1778 /* start host DMA transaction */ 1830 /* start host DMA transaction */
1779 writelfl(cmd, port_mmio + BMDMA_CMD_OFS); 1831 writelfl(cmd, port_mmio + BMDMA_CMD);
1780} 1832}
1781 1833
1782/** 1834/**
@@ -1795,9 +1847,9 @@ static void mv_bmdma_stop(struct ata_queued_cmd *qc)
1795 u32 cmd; 1847 u32 cmd;
1796 1848
1797 /* clear start/stop bit */ 1849 /* clear start/stop bit */
1798 cmd = readl(port_mmio + BMDMA_CMD_OFS); 1850 cmd = readl(port_mmio + BMDMA_CMD);
1799 cmd &= ~ATA_DMA_START; 1851 cmd &= ~ATA_DMA_START;
1800 writelfl(cmd, port_mmio + BMDMA_CMD_OFS); 1852 writelfl(cmd, port_mmio + BMDMA_CMD);
1801 1853
1802 /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ 1854 /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */
1803 ata_sff_dma_pause(ap); 1855 ata_sff_dma_pause(ap);
@@ -1821,7 +1873,7 @@ static u8 mv_bmdma_status(struct ata_port *ap)
1821 * Other bits are valid only if ATA_DMA_ACTIVE==0, 1873 * Other bits are valid only if ATA_DMA_ACTIVE==0,
1822 * and the ATA_DMA_INTR bit doesn't exist. 1874 * and the ATA_DMA_INTR bit doesn't exist.
1823 */ 1875 */
1824 reg = readl(port_mmio + BMDMA_STATUS_OFS); 1876 reg = readl(port_mmio + BMDMA_STATUS);
1825 if (reg & ATA_DMA_ACTIVE) 1877 if (reg & ATA_DMA_ACTIVE)
1826 status = ATA_DMA_ACTIVE; 1878 status = ATA_DMA_ACTIVE;
1827 else 1879 else
@@ -2029,28 +2081,28 @@ static unsigned int mv_send_fis(struct ata_port *ap, u32 *fis, int nwords)
2029 int i, timeout = 200, final_word = nwords - 1; 2081 int i, timeout = 200, final_word = nwords - 1;
2030 2082
2031 /* Initiate FIS transmission mode */ 2083 /* Initiate FIS transmission mode */
2032 old_ifctl = readl(port_mmio + SATA_IFCTL_OFS); 2084 old_ifctl = readl(port_mmio + SATA_IFCTL);
2033 ifctl = 0x100 | (old_ifctl & 0xf); 2085 ifctl = 0x100 | (old_ifctl & 0xf);
2034 writelfl(ifctl, port_mmio + SATA_IFCTL_OFS); 2086 writelfl(ifctl, port_mmio + SATA_IFCTL);
2035 2087
2036 /* Send all words of the FIS except for the final word */ 2088 /* Send all words of the FIS except for the final word */
2037 for (i = 0; i < final_word; ++i) 2089 for (i = 0; i < final_word; ++i)
2038 writel(fis[i], port_mmio + VENDOR_UNIQUE_FIS_OFS); 2090 writel(fis[i], port_mmio + VENDOR_UNIQUE_FIS);
2039 2091
2040 /* Flag end-of-transmission, and then send the final word */ 2092 /* Flag end-of-transmission, and then send the final word */
2041 writelfl(ifctl | 0x200, port_mmio + SATA_IFCTL_OFS); 2093 writelfl(ifctl | 0x200, port_mmio + SATA_IFCTL);
2042 writelfl(fis[final_word], port_mmio + VENDOR_UNIQUE_FIS_OFS); 2094 writelfl(fis[final_word], port_mmio + VENDOR_UNIQUE_FIS);
2043 2095
2044 /* 2096 /*
2045 * Wait for FIS transmission to complete. 2097 * Wait for FIS transmission to complete.
2046 * This typically takes just a single iteration. 2098 * This typically takes just a single iteration.
2047 */ 2099 */
2048 do { 2100 do {
2049 ifstat = readl(port_mmio + SATA_IFSTAT_OFS); 2101 ifstat = readl(port_mmio + SATA_IFSTAT);
2050 } while (!(ifstat & 0x1000) && --timeout); 2102 } while (!(ifstat & 0x1000) && --timeout);
2051 2103
2052 /* Restore original port configuration */ 2104 /* Restore original port configuration */
2053 writelfl(old_ifctl, port_mmio + SATA_IFCTL_OFS); 2105 writelfl(old_ifctl, port_mmio + SATA_IFCTL);
2054 2106
2055 /* See if it worked */ 2107 /* See if it worked */
2056 if ((ifstat & 0x3000) != 0x1000) { 2108 if ((ifstat & 0x3000) != 0x1000) {
@@ -2148,7 +2200,7 @@ static unsigned int mv_qc_issue(struct ata_queued_cmd *qc)
2148 2200
2149 /* Write the request in pointer to kick the EDMA to life */ 2201 /* Write the request in pointer to kick the EDMA to life */
2150 writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | in_index, 2202 writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | in_index,
2151 port_mmio + EDMA_REQ_Q_IN_PTR_OFS); 2203 port_mmio + EDMA_REQ_Q_IN_PTR);
2152 return 0; 2204 return 0;
2153 2205
2154 case ATA_PROT_PIO: 2206 case ATA_PROT_PIO:
@@ -2259,7 +2311,7 @@ static unsigned int mv_get_err_pmp_map(struct ata_port *ap)
2259{ 2311{
2260 void __iomem *port_mmio = mv_ap_base(ap); 2312 void __iomem *port_mmio = mv_ap_base(ap);
2261 2313
2262 return readl(port_mmio + SATA_TESTCTL_OFS) >> 16; 2314 return readl(port_mmio + SATA_TESTCTL) >> 16;
2263} 2315}
2264 2316
2265static void mv_pmp_eh_prep(struct ata_port *ap, unsigned int pmp_map) 2317static void mv_pmp_eh_prep(struct ata_port *ap, unsigned int pmp_map)
@@ -2292,9 +2344,9 @@ static int mv_req_q_empty(struct ata_port *ap)
2292 void __iomem *port_mmio = mv_ap_base(ap); 2344 void __iomem *port_mmio = mv_ap_base(ap);
2293 u32 in_ptr, out_ptr; 2345 u32 in_ptr, out_ptr;
2294 2346
2295 in_ptr = (readl(port_mmio + EDMA_REQ_Q_IN_PTR_OFS) 2347 in_ptr = (readl(port_mmio + EDMA_REQ_Q_IN_PTR)
2296 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK; 2348 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
2297 out_ptr = (readl(port_mmio + EDMA_REQ_Q_OUT_PTR_OFS) 2349 out_ptr = (readl(port_mmio + EDMA_REQ_Q_OUT_PTR)
2298 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK; 2350 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
2299 return (in_ptr == out_ptr); /* 1 == queue_is_empty */ 2351 return (in_ptr == out_ptr); /* 1 == queue_is_empty */
2300} 2352}
@@ -2456,12 +2508,12 @@ static void mv_err_intr(struct ata_port *ap)
2456 sata_scr_read(&ap->link, SCR_ERROR, &serr); 2508 sata_scr_read(&ap->link, SCR_ERROR, &serr);
2457 sata_scr_write_flush(&ap->link, SCR_ERROR, serr); 2509 sata_scr_write_flush(&ap->link, SCR_ERROR, serr);
2458 2510
2459 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 2511 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE);
2460 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) { 2512 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) {
2461 fis_cause = readl(port_mmio + SATA_FIS_IRQ_CAUSE_OFS); 2513 fis_cause = readl(port_mmio + FIS_IRQ_CAUSE);
2462 writelfl(~fis_cause, port_mmio + SATA_FIS_IRQ_CAUSE_OFS); 2514 writelfl(~fis_cause, port_mmio + FIS_IRQ_CAUSE);
2463 } 2515 }
2464 writelfl(~edma_err_cause, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 2516 writelfl(~edma_err_cause, port_mmio + EDMA_ERR_IRQ_CAUSE);
2465 2517
2466 if (edma_err_cause & EDMA_ERR_DEV) { 2518 if (edma_err_cause & EDMA_ERR_DEV) {
2467 /* 2519 /*
@@ -2479,7 +2531,7 @@ static void mv_err_intr(struct ata_port *ap)
2479 2531
2480 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) { 2532 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) {
2481 ata_ehi_push_desc(ehi, "fis_cause=%08x", fis_cause); 2533 ata_ehi_push_desc(ehi, "fis_cause=%08x", fis_cause);
2482 if (fis_cause & SATA_FIS_IRQ_AN) { 2534 if (fis_cause & FIS_IRQ_CAUSE_AN) {
2483 u32 ec = edma_err_cause & 2535 u32 ec = edma_err_cause &
2484 ~(EDMA_ERR_TRANS_IRQ_7 | EDMA_ERR_IRQ_TRANSIENT); 2536 ~(EDMA_ERR_TRANS_IRQ_7 | EDMA_ERR_IRQ_TRANSIENT);
2485 sata_async_notification(ap); 2537 sata_async_notification(ap);
@@ -2581,7 +2633,7 @@ static void mv_process_crpb_response(struct ata_port *ap,
2581 u16 edma_status = le16_to_cpu(response->flags); 2633 u16 edma_status = le16_to_cpu(response->flags);
2582 /* 2634 /*
2583 * edma_status from a response queue entry: 2635 * edma_status from a response queue entry:
2584 * LSB is from EDMA_ERR_IRQ_CAUSE_OFS (non-NCQ only). 2636 * LSB is from EDMA_ERR_IRQ_CAUSE (non-NCQ only).
2585 * MSB is saved ATA status from command completion. 2637 * MSB is saved ATA status from command completion.
2586 */ 2638 */
2587 if (!ncq_enabled) { 2639 if (!ncq_enabled) {
@@ -2613,7 +2665,7 @@ static void mv_process_crpb_entries(struct ata_port *ap, struct mv_port_priv *pp
2613 int ncq_enabled = (pp->pp_flags & MV_PP_FLAG_NCQ_EN); 2665 int ncq_enabled = (pp->pp_flags & MV_PP_FLAG_NCQ_EN);
2614 2666
2615 /* Get the hardware queue position index */ 2667 /* Get the hardware queue position index */
2616 in_index = (readl(port_mmio + EDMA_RSP_Q_IN_PTR_OFS) 2668 in_index = (readl(port_mmio + EDMA_RSP_Q_IN_PTR)
2617 >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK; 2669 >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
2618 2670
2619 /* Process new responses from since the last time we looked */ 2671 /* Process new responses from since the last time we looked */
@@ -2638,7 +2690,7 @@ static void mv_process_crpb_entries(struct ata_port *ap, struct mv_port_priv *pp
2638 if (work_done) 2690 if (work_done)
2639 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | 2691 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) |
2640 (pp->resp_idx << EDMA_RSP_Q_PTR_SHIFT), 2692 (pp->resp_idx << EDMA_RSP_Q_PTR_SHIFT),
2641 port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); 2693 port_mmio + EDMA_RSP_Q_OUT_PTR);
2642} 2694}
2643 2695
2644static void mv_port_intr(struct ata_port *ap, u32 port_cause) 2696static void mv_port_intr(struct ata_port *ap, u32 port_cause)
@@ -2695,7 +2747,7 @@ static int mv_host_intr(struct ata_host *host, u32 main_irq_cause)
2695 2747
2696 /* If asserted, clear the "all ports" IRQ coalescing bit */ 2748 /* If asserted, clear the "all ports" IRQ coalescing bit */
2697 if (main_irq_cause & ALL_PORTS_COAL_DONE) 2749 if (main_irq_cause & ALL_PORTS_COAL_DONE)
2698 writel(~ALL_PORTS_COAL_IRQ, mmio + MV_IRQ_COAL_CAUSE); 2750 writel(~ALL_PORTS_COAL_IRQ, mmio + IRQ_COAL_CAUSE);
2699 2751
2700 for (port = 0; port < hpriv->n_ports; port++) { 2752 for (port = 0; port < hpriv->n_ports; port++) {
2701 struct ata_port *ap = host->ports[port]; 2753 struct ata_port *ap = host->ports[port];
@@ -2739,7 +2791,7 @@ static int mv_host_intr(struct ata_host *host, u32 main_irq_cause)
2739 ack_irqs |= (DMA_IRQ | DEV_IRQ) << p; 2791 ack_irqs |= (DMA_IRQ | DEV_IRQ) << p;
2740 } 2792 }
2741 hc_mmio = mv_hc_base_from_port(mmio, port); 2793 hc_mmio = mv_hc_base_from_port(mmio, port);
2742 writelfl(~ack_irqs, hc_mmio + HC_IRQ_CAUSE_OFS); 2794 writelfl(~ack_irqs, hc_mmio + HC_IRQ_CAUSE);
2743 handled = 1; 2795 handled = 1;
2744 } 2796 }
2745 /* 2797 /*
@@ -2761,7 +2813,7 @@ static int mv_pci_error(struct ata_host *host, void __iomem *mmio)
2761 unsigned int i, err_mask, printed = 0; 2813 unsigned int i, err_mask, printed = 0;
2762 u32 err_cause; 2814 u32 err_cause;
2763 2815
2764 err_cause = readl(mmio + hpriv->irq_cause_ofs); 2816 err_cause = readl(mmio + hpriv->irq_cause_offset);
2765 2817
2766 dev_printk(KERN_ERR, host->dev, "PCI ERROR; PCI IRQ cause=0x%08x\n", 2818 dev_printk(KERN_ERR, host->dev, "PCI ERROR; PCI IRQ cause=0x%08x\n",
2767 err_cause); 2819 err_cause);
@@ -2769,7 +2821,7 @@ static int mv_pci_error(struct ata_host *host, void __iomem *mmio)
2769 DPRINTK("All regs @ PCI error\n"); 2821 DPRINTK("All regs @ PCI error\n");
2770 mv_dump_all_regs(mmio, -1, to_pci_dev(host->dev)); 2822 mv_dump_all_regs(mmio, -1, to_pci_dev(host->dev));
2771 2823
2772 writelfl(0, mmio + hpriv->irq_cause_ofs); 2824 writelfl(0, mmio + hpriv->irq_cause_offset);
2773 2825
2774 for (i = 0; i < host->n_ports; i++) { 2826 for (i = 0; i < host->n_ports; i++) {
2775 ap = host->ports[i]; 2827 ap = host->ports[i];
@@ -2906,7 +2958,7 @@ static void mv5_reset_bus(struct ata_host *host, void __iomem *mmio)
2906 2958
2907static void mv5_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio) 2959static void mv5_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
2908{ 2960{
2909 writel(0x0fcfffff, mmio + MV_FLASH_CTL_OFS); 2961 writel(0x0fcfffff, mmio + FLASH_CTL);
2910} 2962}
2911 2963
2912static void mv5_read_preamp(struct mv_host_priv *hpriv, int idx, 2964static void mv5_read_preamp(struct mv_host_priv *hpriv, int idx,
@@ -2925,7 +2977,7 @@ static void mv5_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio)
2925{ 2977{
2926 u32 tmp; 2978 u32 tmp;
2927 2979
2928 writel(0, mmio + MV_GPIO_PORT_CTL_OFS); 2980 writel(0, mmio + GPIO_PORT_CTL);
2929 2981
2930 /* FIXME: handle MV_HP_ERRATA_50XXB2 errata */ 2982 /* FIXME: handle MV_HP_ERRATA_50XXB2 errata */
2931 2983
@@ -2943,14 +2995,14 @@ static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
2943 int fix_apm_sq = (hpriv->hp_flags & MV_HP_ERRATA_50XXB0); 2995 int fix_apm_sq = (hpriv->hp_flags & MV_HP_ERRATA_50XXB0);
2944 2996
2945 if (fix_apm_sq) { 2997 if (fix_apm_sq) {
2946 tmp = readl(phy_mmio + MV5_LTMODE_OFS); 2998 tmp = readl(phy_mmio + MV5_LTMODE);
2947 tmp |= (1 << 19); 2999 tmp |= (1 << 19);
2948 writel(tmp, phy_mmio + MV5_LTMODE_OFS); 3000 writel(tmp, phy_mmio + MV5_LTMODE);
2949 3001
2950 tmp = readl(phy_mmio + MV5_PHY_CTL_OFS); 3002 tmp = readl(phy_mmio + MV5_PHY_CTL);
2951 tmp &= ~0x3; 3003 tmp &= ~0x3;
2952 tmp |= 0x1; 3004 tmp |= 0x1;
2953 writel(tmp, phy_mmio + MV5_PHY_CTL_OFS); 3005 writel(tmp, phy_mmio + MV5_PHY_CTL);
2954 } 3006 }
2955 3007
2956 tmp = readl(phy_mmio + MV5_PHY_MODE); 3008 tmp = readl(phy_mmio + MV5_PHY_MODE);
@@ -2971,7 +3023,7 @@ static void mv5_reset_hc_port(struct mv_host_priv *hpriv, void __iomem *mmio,
2971 mv_reset_channel(hpriv, mmio, port); 3023 mv_reset_channel(hpriv, mmio, port);
2972 3024
2973 ZERO(0x028); /* command */ 3025 ZERO(0x028); /* command */
2974 writel(0x11f, port_mmio + EDMA_CFG_OFS); 3026 writel(0x11f, port_mmio + EDMA_CFG);
2975 ZERO(0x004); /* timer */ 3027 ZERO(0x004); /* timer */
2976 ZERO(0x008); /* irq err cause */ 3028 ZERO(0x008); /* irq err cause */
2977 ZERO(0x00c); /* irq err mask */ 3029 ZERO(0x00c); /* irq err mask */
@@ -2982,7 +3034,7 @@ static void mv5_reset_hc_port(struct mv_host_priv *hpriv, void __iomem *mmio,
2982 ZERO(0x024); /* respq outp */ 3034 ZERO(0x024); /* respq outp */
2983 ZERO(0x020); /* respq inp */ 3035 ZERO(0x020); /* respq inp */
2984 ZERO(0x02c); /* test control */ 3036 ZERO(0x02c); /* test control */
2985 writel(0xbc, port_mmio + EDMA_IORDY_TMOUT_OFS); 3037 writel(0xbc, port_mmio + EDMA_IORDY_TMOUT);
2986} 3038}
2987#undef ZERO 3039#undef ZERO
2988 3040
@@ -3028,16 +3080,16 @@ static void mv_reset_pci_bus(struct ata_host *host, void __iomem *mmio)
3028 struct mv_host_priv *hpriv = host->private_data; 3080 struct mv_host_priv *hpriv = host->private_data;
3029 u32 tmp; 3081 u32 tmp;
3030 3082
3031 tmp = readl(mmio + MV_PCI_MODE_OFS); 3083 tmp = readl(mmio + MV_PCI_MODE);
3032 tmp &= 0xff00ffff; 3084 tmp &= 0xff00ffff;
3033 writel(tmp, mmio + MV_PCI_MODE_OFS); 3085 writel(tmp, mmio + MV_PCI_MODE);
3034 3086
3035 ZERO(MV_PCI_DISC_TIMER); 3087 ZERO(MV_PCI_DISC_TIMER);
3036 ZERO(MV_PCI_MSI_TRIGGER); 3088 ZERO(MV_PCI_MSI_TRIGGER);
3037 writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT_OFS); 3089 writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT);
3038 ZERO(MV_PCI_SERR_MASK); 3090 ZERO(MV_PCI_SERR_MASK);
3039 ZERO(hpriv->irq_cause_ofs); 3091 ZERO(hpriv->irq_cause_offset);
3040 ZERO(hpriv->irq_mask_ofs); 3092 ZERO(hpriv->irq_mask_offset);
3041 ZERO(MV_PCI_ERR_LOW_ADDRESS); 3093 ZERO(MV_PCI_ERR_LOW_ADDRESS);
3042 ZERO(MV_PCI_ERR_HIGH_ADDRESS); 3094 ZERO(MV_PCI_ERR_HIGH_ADDRESS);
3043 ZERO(MV_PCI_ERR_ATTRIBUTE); 3095 ZERO(MV_PCI_ERR_ATTRIBUTE);
@@ -3051,10 +3103,10 @@ static void mv6_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
3051 3103
3052 mv5_reset_flash(hpriv, mmio); 3104 mv5_reset_flash(hpriv, mmio);
3053 3105
3054 tmp = readl(mmio + MV_GPIO_PORT_CTL_OFS); 3106 tmp = readl(mmio + GPIO_PORT_CTL);
3055 tmp &= 0x3; 3107 tmp &= 0x3;
3056 tmp |= (1 << 5) | (1 << 6); 3108 tmp |= (1 << 5) | (1 << 6);
3057 writel(tmp, mmio + MV_GPIO_PORT_CTL_OFS); 3109 writel(tmp, mmio + GPIO_PORT_CTL);
3058} 3110}
3059 3111
3060/** 3112/**
@@ -3069,7 +3121,7 @@ static void mv6_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
3069static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio, 3121static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
3070 unsigned int n_hc) 3122 unsigned int n_hc)
3071{ 3123{
3072 void __iomem *reg = mmio + PCI_MAIN_CMD_STS_OFS; 3124 void __iomem *reg = mmio + PCI_MAIN_CMD_STS;
3073 int i, rc = 0; 3125 int i, rc = 0;
3074 u32 t; 3126 u32 t;
3075 3127
@@ -3127,7 +3179,7 @@ static void mv6_read_preamp(struct mv_host_priv *hpriv, int idx,
3127 void __iomem *port_mmio; 3179 void __iomem *port_mmio;
3128 u32 tmp; 3180 u32 tmp;
3129 3181
3130 tmp = readl(mmio + MV_RESET_CFG_OFS); 3182 tmp = readl(mmio + RESET_CFG);
3131 if ((tmp & (1 << 0)) == 0) { 3183 if ((tmp & (1 << 0)) == 0) {
3132 hpriv->signal[idx].amps = 0x7 << 8; 3184 hpriv->signal[idx].amps = 0x7 << 8;
3133 hpriv->signal[idx].pre = 0x1 << 5; 3185 hpriv->signal[idx].pre = 0x1 << 5;
@@ -3143,7 +3195,7 @@ static void mv6_read_preamp(struct mv_host_priv *hpriv, int idx,
3143 3195
3144static void mv6_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio) 3196static void mv6_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio)
3145{ 3197{
3146 writel(0x00000060, mmio + MV_GPIO_PORT_CTL_OFS); 3198 writel(0x00000060, mmio + GPIO_PORT_CTL);
3147} 3199}
3148 3200
3149static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, 3201static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
@@ -3201,6 +3253,7 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
3201 * Workaround for 60x1-B2 errata SATA#13: 3253 * Workaround for 60x1-B2 errata SATA#13:
3202 * Any write to PHY_MODE4 (above) may corrupt PHY_MODE3, 3254 * Any write to PHY_MODE4 (above) may corrupt PHY_MODE3,
3203 * so we must always rewrite PHY_MODE3 after PHY_MODE4. 3255 * so we must always rewrite PHY_MODE3 after PHY_MODE4.
3256 * Or ensure we use writelfl() when writing PHY_MODE4.
3204 */ 3257 */
3205 writel(m3, port_mmio + PHY_MODE3); 3258 writel(m3, port_mmio + PHY_MODE3);
3206 3259
@@ -3252,7 +3305,7 @@ static void mv_soc_reset_hc_port(struct mv_host_priv *hpriv,
3252 mv_reset_channel(hpriv, mmio, port); 3305 mv_reset_channel(hpriv, mmio, port);
3253 3306
3254 ZERO(0x028); /* command */ 3307 ZERO(0x028); /* command */
3255 writel(0x101f, port_mmio + EDMA_CFG_OFS); 3308 writel(0x101f, port_mmio + EDMA_CFG);
3256 ZERO(0x004); /* timer */ 3309 ZERO(0x004); /* timer */
3257 ZERO(0x008); /* irq err cause */ 3310 ZERO(0x008); /* irq err cause */
3258 ZERO(0x00c); /* irq err mask */ 3311 ZERO(0x00c); /* irq err mask */
@@ -3263,7 +3316,7 @@ static void mv_soc_reset_hc_port(struct mv_host_priv *hpriv,
3263 ZERO(0x024); /* respq outp */ 3316 ZERO(0x024); /* respq outp */
3264 ZERO(0x020); /* respq inp */ 3317 ZERO(0x020); /* respq inp */
3265 ZERO(0x02c); /* test control */ 3318 ZERO(0x02c); /* test control */
3266 writel(0xbc, port_mmio + EDMA_IORDY_TMOUT_OFS); 3319 writel(0xbc, port_mmio + EDMA_IORDY_TMOUT);
3267} 3320}
3268 3321
3269#undef ZERO 3322#undef ZERO
@@ -3308,12 +3361,12 @@ static void mv_soc_reset_bus(struct ata_host *host, void __iomem *mmio)
3308 3361
3309static void mv_setup_ifcfg(void __iomem *port_mmio, int want_gen2i) 3362static void mv_setup_ifcfg(void __iomem *port_mmio, int want_gen2i)
3310{ 3363{
3311 u32 ifcfg = readl(port_mmio + SATA_INTERFACE_CFG_OFS); 3364 u32 ifcfg = readl(port_mmio + SATA_IFCFG);
3312 3365
3313 ifcfg = (ifcfg & 0xf7f) | 0x9b1000; /* from chip spec */ 3366 ifcfg = (ifcfg & 0xf7f) | 0x9b1000; /* from chip spec */
3314 if (want_gen2i) 3367 if (want_gen2i)
3315 ifcfg |= (1 << 7); /* enable gen2i speed */ 3368 ifcfg |= (1 << 7); /* enable gen2i speed */
3316 writelfl(ifcfg, port_mmio + SATA_INTERFACE_CFG_OFS); 3369 writelfl(ifcfg, port_mmio + SATA_IFCFG);
3317} 3370}
3318 3371
3319static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio, 3372static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio,
@@ -3327,7 +3380,7 @@ static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio,
3327 * to disable the EDMA engine before doing the EDMA_RESET operation. 3380 * to disable the EDMA engine before doing the EDMA_RESET operation.
3328 */ 3381 */
3329 mv_stop_edma_engine(port_mmio); 3382 mv_stop_edma_engine(port_mmio);
3330 writelfl(EDMA_RESET, port_mmio + EDMA_CMD_OFS); 3383 writelfl(EDMA_RESET, port_mmio + EDMA_CMD);
3331 3384
3332 if (!IS_GEN_I(hpriv)) { 3385 if (!IS_GEN_I(hpriv)) {
3333 /* Enable 3.0gb/s link speed: this survives EDMA_RESET */ 3386 /* Enable 3.0gb/s link speed: this survives EDMA_RESET */
@@ -3336,11 +3389,11 @@ static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio,
3336 /* 3389 /*
3337 * Strobing EDMA_RESET here causes a hard reset of the SATA transport, 3390 * Strobing EDMA_RESET here causes a hard reset of the SATA transport,
3338 * link, and physical layers. It resets all SATA interface registers 3391 * link, and physical layers. It resets all SATA interface registers
3339 * (except for SATA_INTERFACE_CFG), and issues a COMRESET to the dev. 3392 * (except for SATA_IFCFG), and issues a COMRESET to the dev.
3340 */ 3393 */
3341 writelfl(EDMA_RESET, port_mmio + EDMA_CMD_OFS); 3394 writelfl(EDMA_RESET, port_mmio + EDMA_CMD);
3342 udelay(25); /* allow reset propagation */ 3395 udelay(25); /* allow reset propagation */
3343 writelfl(0, port_mmio + EDMA_CMD_OFS); 3396 writelfl(0, port_mmio + EDMA_CMD);
3344 3397
3345 hpriv->ops->phy_errata(hpriv, mmio, port_no); 3398 hpriv->ops->phy_errata(hpriv, mmio, port_no);
3346 3399
@@ -3352,12 +3405,12 @@ static void mv_pmp_select(struct ata_port *ap, int pmp)
3352{ 3405{
3353 if (sata_pmp_supported(ap)) { 3406 if (sata_pmp_supported(ap)) {
3354 void __iomem *port_mmio = mv_ap_base(ap); 3407 void __iomem *port_mmio = mv_ap_base(ap);
3355 u32 reg = readl(port_mmio + SATA_IFCTL_OFS); 3408 u32 reg = readl(port_mmio + SATA_IFCTL);
3356 int old = reg & 0xf; 3409 int old = reg & 0xf;
3357 3410
3358 if (old != pmp) { 3411 if (old != pmp) {
3359 reg = (reg & ~0xf) | pmp; 3412 reg = (reg & ~0xf) | pmp;
3360 writelfl(reg, port_mmio + SATA_IFCTL_OFS); 3413 writelfl(reg, port_mmio + SATA_IFCTL);
3361 } 3414 }
3362 } 3415 }
3363} 3416}
@@ -3432,11 +3485,11 @@ static void mv_eh_thaw(struct ata_port *ap)
3432 u32 hc_irq_cause; 3485 u32 hc_irq_cause;
3433 3486
3434 /* clear EDMA errors on this port */ 3487 /* clear EDMA errors on this port */
3435 writel(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 3488 writel(0, port_mmio + EDMA_ERR_IRQ_CAUSE);
3436 3489
3437 /* clear pending irq events */ 3490 /* clear pending irq events */
3438 hc_irq_cause = ~((DEV_IRQ | DMA_IRQ) << hardport); 3491 hc_irq_cause = ~((DEV_IRQ | DMA_IRQ) << hardport);
3439 writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS); 3492 writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE);
3440 3493
3441 mv_enable_port_irqs(ap, ERR_IRQ); 3494 mv_enable_port_irqs(ap, ERR_IRQ);
3442} 3495}
@@ -3455,8 +3508,7 @@ static void mv_eh_thaw(struct ata_port *ap)
3455 */ 3508 */
3456static void mv_port_init(struct ata_ioports *port, void __iomem *port_mmio) 3509static void mv_port_init(struct ata_ioports *port, void __iomem *port_mmio)
3457{ 3510{
3458 void __iomem *shd_base = port_mmio + SHD_BLK_OFS; 3511 void __iomem *serr, *shd_base = port_mmio + SHD_BLK;
3459 unsigned serr_ofs;
3460 3512
3461 /* PIO related setup 3513 /* PIO related setup
3462 */ 3514 */
@@ -3471,23 +3523,23 @@ static void mv_port_init(struct ata_ioports *port, void __iomem *port_mmio)
3471 port->status_addr = 3523 port->status_addr =
3472 port->command_addr = shd_base + (sizeof(u32) * ATA_REG_STATUS); 3524 port->command_addr = shd_base + (sizeof(u32) * ATA_REG_STATUS);
3473 /* special case: control/altstatus doesn't have ATA_REG_ address */ 3525 /* special case: control/altstatus doesn't have ATA_REG_ address */
3474 port->altstatus_addr = port->ctl_addr = shd_base + SHD_CTL_AST_OFS; 3526 port->altstatus_addr = port->ctl_addr = shd_base + SHD_CTL_AST;
3475 3527
3476 /* unused: */ 3528 /* unused: */
3477 port->cmd_addr = port->bmdma_addr = port->scr_addr = NULL; 3529 port->cmd_addr = port->bmdma_addr = port->scr_addr = NULL;
3478 3530
3479 /* Clear any currently outstanding port interrupt conditions */ 3531 /* Clear any currently outstanding port interrupt conditions */
3480 serr_ofs = mv_scr_offset(SCR_ERROR); 3532 serr = port_mmio + mv_scr_offset(SCR_ERROR);
3481 writelfl(readl(port_mmio + serr_ofs), port_mmio + serr_ofs); 3533 writelfl(readl(serr), serr);
3482 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 3534 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE);
3483 3535
3484 /* unmask all non-transient EDMA error interrupts */ 3536 /* unmask all non-transient EDMA error interrupts */
3485 writelfl(~EDMA_ERR_IRQ_TRANSIENT, port_mmio + EDMA_ERR_IRQ_MASK_OFS); 3537 writelfl(~EDMA_ERR_IRQ_TRANSIENT, port_mmio + EDMA_ERR_IRQ_MASK);
3486 3538
3487 VPRINTK("EDMA cfg=0x%08x EDMA IRQ err cause/mask=0x%08x/0x%08x\n", 3539 VPRINTK("EDMA cfg=0x%08x EDMA IRQ err cause/mask=0x%08x/0x%08x\n",
3488 readl(port_mmio + EDMA_CFG_OFS), 3540 readl(port_mmio + EDMA_CFG),
3489 readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS), 3541 readl(port_mmio + EDMA_ERR_IRQ_CAUSE),
3490 readl(port_mmio + EDMA_ERR_IRQ_MASK_OFS)); 3542 readl(port_mmio + EDMA_ERR_IRQ_MASK));
3491} 3543}
3492 3544
3493static unsigned int mv_in_pcix_mode(struct ata_host *host) 3545static unsigned int mv_in_pcix_mode(struct ata_host *host)
@@ -3498,7 +3550,7 @@ static unsigned int mv_in_pcix_mode(struct ata_host *host)
3498 3550
3499 if (IS_SOC(hpriv) || !IS_PCIE(hpriv)) 3551 if (IS_SOC(hpriv) || !IS_PCIE(hpriv))
3500 return 0; /* not PCI-X capable */ 3552 return 0; /* not PCI-X capable */
3501 reg = readl(mmio + MV_PCI_MODE_OFS); 3553 reg = readl(mmio + MV_PCI_MODE);
3502 if ((reg & MV_PCI_MODE_MASK) == 0) 3554 if ((reg & MV_PCI_MODE_MASK) == 0)
3503 return 0; /* conventional PCI mode */ 3555 return 0; /* conventional PCI mode */
3504 return 1; /* chip is in PCI-X mode */ 3556 return 1; /* chip is in PCI-X mode */
@@ -3511,13 +3563,25 @@ static int mv_pci_cut_through_okay(struct ata_host *host)
3511 u32 reg; 3563 u32 reg;
3512 3564
3513 if (!mv_in_pcix_mode(host)) { 3565 if (!mv_in_pcix_mode(host)) {
3514 reg = readl(mmio + PCI_COMMAND_OFS); 3566 reg = readl(mmio + MV_PCI_COMMAND);
3515 if (reg & PCI_COMMAND_MRDTRIG) 3567 if (reg & MV_PCI_COMMAND_MRDTRIG)
3516 return 0; /* not okay */ 3568 return 0; /* not okay */
3517 } 3569 }
3518 return 1; /* okay */ 3570 return 1; /* okay */
3519} 3571}
3520 3572
3573static void mv_60x1b2_errata_pci7(struct ata_host *host)
3574{
3575 struct mv_host_priv *hpriv = host->private_data;
3576 void __iomem *mmio = hpriv->base;
3577
3578 /* workaround for 60x1-B2 errata PCI#7 */
3579 if (mv_in_pcix_mode(host)) {
3580 u32 reg = readl(mmio + MV_PCI_COMMAND);
3581 writelfl(reg & ~MV_PCI_COMMAND_MWRCOM, mmio + MV_PCI_COMMAND);
3582 }
3583}
3584
3521static int mv_chip_id(struct ata_host *host, unsigned int board_idx) 3585static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
3522{ 3586{
3523 struct pci_dev *pdev = to_pci_dev(host->dev); 3587 struct pci_dev *pdev = to_pci_dev(host->dev);
@@ -3571,6 +3635,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
3571 3635
3572 switch (pdev->revision) { 3636 switch (pdev->revision) {
3573 case 0x7: 3637 case 0x7:
3638 mv_60x1b2_errata_pci7(host);
3574 hp_flags |= MV_HP_ERRATA_60X1B2; 3639 hp_flags |= MV_HP_ERRATA_60X1B2;
3575 break; 3640 break;
3576 case 0x9: 3641 case 0x9:
@@ -3647,12 +3712,12 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
3647 3712
3648 hpriv->hp_flags = hp_flags; 3713 hpriv->hp_flags = hp_flags;
3649 if (hp_flags & MV_HP_PCIE) { 3714 if (hp_flags & MV_HP_PCIE) {
3650 hpriv->irq_cause_ofs = PCIE_IRQ_CAUSE_OFS; 3715 hpriv->irq_cause_offset = PCIE_IRQ_CAUSE;
3651 hpriv->irq_mask_ofs = PCIE_IRQ_MASK_OFS; 3716 hpriv->irq_mask_offset = PCIE_IRQ_MASK;
3652 hpriv->unmask_all_irqs = PCIE_UNMASK_ALL_IRQS; 3717 hpriv->unmask_all_irqs = PCIE_UNMASK_ALL_IRQS;
3653 } else { 3718 } else {
3654 hpriv->irq_cause_ofs = PCI_IRQ_CAUSE_OFS; 3719 hpriv->irq_cause_offset = PCI_IRQ_CAUSE;
3655 hpriv->irq_mask_ofs = PCI_IRQ_MASK_OFS; 3720 hpriv->irq_mask_offset = PCI_IRQ_MASK;
3656 hpriv->unmask_all_irqs = PCI_UNMASK_ALL_IRQS; 3721 hpriv->unmask_all_irqs = PCI_UNMASK_ALL_IRQS;
3657 } 3722 }
3658 3723
@@ -3681,11 +3746,11 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
3681 goto done; 3746 goto done;
3682 3747
3683 if (IS_SOC(hpriv)) { 3748 if (IS_SOC(hpriv)) {
3684 hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; 3749 hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE;
3685 hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; 3750 hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK;
3686 } else { 3751 } else {
3687 hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; 3752 hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE;
3688 hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; 3753 hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK;
3689 } 3754 }
3690 3755
3691 /* initialize shadow irq mask with register's value */ 3756 /* initialize shadow irq mask with register's value */
@@ -3727,18 +3792,20 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
3727 3792
3728 VPRINTK("HC%i: HC config=0x%08x HC IRQ cause " 3793 VPRINTK("HC%i: HC config=0x%08x HC IRQ cause "
3729 "(before clear)=0x%08x\n", hc, 3794 "(before clear)=0x%08x\n", hc,
3730 readl(hc_mmio + HC_CFG_OFS), 3795 readl(hc_mmio + HC_CFG),
3731 readl(hc_mmio + HC_IRQ_CAUSE_OFS)); 3796 readl(hc_mmio + HC_IRQ_CAUSE));
3732 3797
3733 /* Clear any currently outstanding hc interrupt conditions */ 3798 /* Clear any currently outstanding hc interrupt conditions */
3734 writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); 3799 writelfl(0, hc_mmio + HC_IRQ_CAUSE);
3735 } 3800 }
3736 3801
3737 /* Clear any currently outstanding host interrupt conditions */ 3802 if (!IS_SOC(hpriv)) {
3738 writelfl(0, mmio + hpriv->irq_cause_ofs); 3803 /* Clear any currently outstanding host interrupt conditions */
3804 writelfl(0, mmio + hpriv->irq_cause_offset);
3739 3805
3740 /* and unmask interrupt generation for host regs */ 3806 /* and unmask interrupt generation for host regs */
3741 writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs); 3807 writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_offset);
3808 }
3742 3809
3743 /* 3810 /*
3744 * enable only global host interrupts for now. 3811 * enable only global host interrupts for now.
@@ -3844,7 +3911,7 @@ static int mv_platform_probe(struct platform_device *pdev)
3844 host->iomap = NULL; 3911 host->iomap = NULL;
3845 hpriv->base = devm_ioremap(&pdev->dev, res->start, 3912 hpriv->base = devm_ioremap(&pdev->dev, res->start,
3846 res->end - res->start + 1); 3913 res->end - res->start + 1);
3847 hpriv->base -= MV_SATAHC0_REG_BASE; 3914 hpriv->base -= SATAHC0_REG_BASE;
3848 3915
3849 /* 3916 /*
3850 * (Re-)program MBUS remapping windows if we are asked to. 3917 * (Re-)program MBUS remapping windows if we are asked to.
@@ -3913,10 +3980,10 @@ static int pci_go_64(struct pci_dev *pdev)
3913{ 3980{
3914 int rc; 3981 int rc;
3915 3982
3916 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 3983 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3917 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 3984 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3918 if (rc) { 3985 if (rc) {
3919 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 3986 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3920 if (rc) { 3987 if (rc) {
3921 dev_printk(KERN_ERR, &pdev->dev, 3988 dev_printk(KERN_ERR, &pdev->dev,
3922 "64-bit DMA enable failed\n"); 3989 "64-bit DMA enable failed\n");
@@ -3924,13 +3991,13 @@ static int pci_go_64(struct pci_dev *pdev)
3924 } 3991 }
3925 } 3992 }
3926 } else { 3993 } else {
3927 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 3994 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
3928 if (rc) { 3995 if (rc) {
3929 dev_printk(KERN_ERR, &pdev->dev, 3996 dev_printk(KERN_ERR, &pdev->dev,
3930 "32-bit DMA enable failed\n"); 3997 "32-bit DMA enable failed\n");
3931 return rc; 3998 return rc;
3932 } 3999 }
3933 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 4000 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3934 if (rc) { 4001 if (rc) {
3935 dev_printk(KERN_ERR, &pdev->dev, 4002 dev_printk(KERN_ERR, &pdev->dev,
3936 "32-bit consistent DMA enable failed\n"); 4003 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/ata/sata_qstor.c b/drivers/ata/sata_qstor.c
index c3936d35cdac..326c0cfc29b3 100644
--- a/drivers/ata/sata_qstor.c
+++ b/drivers/ata/sata_qstor.c
@@ -584,10 +584,10 @@ static int qs_set_dma_masks(struct pci_dev *pdev, void __iomem *mmio_base)
584 int rc, have_64bit_bus = (bus_info & QS_HPHY_64BIT); 584 int rc, have_64bit_bus = (bus_info & QS_HPHY_64BIT);
585 585
586 if (have_64bit_bus && 586 if (have_64bit_bus &&
587 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 587 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
588 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 588 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
589 if (rc) { 589 if (rc) {
590 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 590 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
591 if (rc) { 591 if (rc) {
592 dev_printk(KERN_ERR, &pdev->dev, 592 dev_printk(KERN_ERR, &pdev->dev,
593 "64-bit DMA enable failed\n"); 593 "64-bit DMA enable failed\n");
@@ -595,13 +595,13 @@ static int qs_set_dma_masks(struct pci_dev *pdev, void __iomem *mmio_base)
595 } 595 }
596 } 596 }
597 } else { 597 } else {
598 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 598 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
599 if (rc) { 599 if (rc) {
600 dev_printk(KERN_ERR, &pdev->dev, 600 dev_printk(KERN_ERR, &pdev->dev,
601 "32-bit DMA enable failed\n"); 601 "32-bit DMA enable failed\n");
602 return rc; 602 return rc;
603 } 603 }
604 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 604 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
605 if (rc) { 605 if (rc) {
606 dev_printk(KERN_ERR, &pdev->dev, 606 dev_printk(KERN_ERR, &pdev->dev,
607 "32-bit consistent DMA enable failed\n"); 607 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index 0d8990dcdfcd..77aa8d7ecec4 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -1297,10 +1297,10 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1297 host->iomap = iomap; 1297 host->iomap = iomap;
1298 1298
1299 /* configure and activate the device */ 1299 /* configure and activate the device */
1300 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 1300 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
1301 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 1301 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1302 if (rc) { 1302 if (rc) {
1303 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1303 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1304 if (rc) { 1304 if (rc) {
1305 dev_printk(KERN_ERR, &pdev->dev, 1305 dev_printk(KERN_ERR, &pdev->dev,
1306 "64-bit DMA enable failed\n"); 1306 "64-bit DMA enable failed\n");
@@ -1308,13 +1308,13 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1308 } 1308 }
1309 } 1309 }
1310 } else { 1310 } else {
1311 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1311 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1312 if (rc) { 1312 if (rc) {
1313 dev_printk(KERN_ERR, &pdev->dev, 1313 dev_printk(KERN_ERR, &pdev->dev,
1314 "32-bit DMA enable failed\n"); 1314 "32-bit DMA enable failed\n");
1315 return rc; 1315 return rc;
1316 } 1316 }
1317 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1317 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1318 if (rc) { 1318 if (rc) {
1319 dev_printk(KERN_ERR, &pdev->dev, 1319 dev_printk(KERN_ERR, &pdev->dev,
1320 "32-bit consistent DMA enable failed\n"); 1320 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/ata/sata_vsc.c b/drivers/ata/sata_vsc.c
index ed70bd28fa2c..8b2a278b2547 100644
--- a/drivers/ata/sata_vsc.c
+++ b/drivers/ata/sata_vsc.c
@@ -399,10 +399,10 @@ static int __devinit vsc_sata_init_one(struct pci_dev *pdev,
399 /* 399 /*
400 * Use 32 bit DMA mask, because 64 bit address support is poor. 400 * Use 32 bit DMA mask, because 64 bit address support is poor.
401 */ 401 */
402 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 402 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
403 if (rc) 403 if (rc)
404 return rc; 404 return rc;
405 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 405 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
406 if (rc) 406 if (rc)
407 return rc; 407 return rc;
408 408
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index bdbad7edf682..2de64065aa1b 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -358,7 +358,7 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
358 358
359 if (pci_enable_device(pci_dev)) 359 if (pci_enable_device(pci_dev))
360 return -EIO; 360 return -EIO;
361 if (pci_set_dma_mask(pci_dev, DMA_32BIT_MASK) != 0) { 361 if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32)) != 0) {
362 printk(KERN_WARNING "he: no suitable dma available\n"); 362 printk(KERN_WARNING "he: no suitable dma available\n");
363 err = -EIO; 363 err = -EIO;
364 goto init_one_failure; 364 goto init_one_failure;
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
index 8733a2ea04c2..cf97c34cbaf1 100644
--- a/drivers/atm/lanai.c
+++ b/drivers/atm/lanai.c
@@ -1957,12 +1957,12 @@ static int __devinit lanai_pci_start(struct lanai_dev *lanai)
1957 return -ENXIO; 1957 return -ENXIO;
1958 } 1958 }
1959 pci_set_master(pci); 1959 pci_set_master(pci);
1960 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) != 0) { 1960 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) != 0) {
1961 printk(KERN_WARNING DEV_LABEL 1961 printk(KERN_WARNING DEV_LABEL
1962 "(itf %d): No suitable DMA available.\n", lanai->number); 1962 "(itf %d): No suitable DMA available.\n", lanai->number);
1963 return -EBUSY; 1963 return -EBUSY;
1964 } 1964 }
1965 if (pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK) != 0) { 1965 if (pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) != 0) {
1966 printk(KERN_WARNING DEV_LABEL 1966 printk(KERN_WARNING DEV_LABEL
1967 "(itf %d): No suitable DMA available.\n", lanai->number); 1967 "(itf %d): No suitable DMA available.\n", lanai->number);
1968 return -EBUSY; 1968 return -EBUSY;
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
index 479694b6cbe3..91dba65d7264 100644
--- a/drivers/base/isa.c
+++ b/drivers/base/isa.c
@@ -141,7 +141,7 @@ int isa_register_driver(struct isa_driver *isa_driver, unsigned int ndev)
141 isa_dev->dev.release = isa_dev_release; 141 isa_dev->dev.release = isa_dev_release;
142 isa_dev->id = id; 142 isa_dev->id = id;
143 143
144 isa_dev->dev.coherent_dma_mask = DMA_24BIT_MASK; 144 isa_dev->dev.coherent_dma_mask = DMA_BIT_MASK(24);
145 isa_dev->dev.dma_mask = &isa_dev->dev.coherent_dma_mask; 145 isa_dev->dev.dma_mask = &isa_dev->dev.coherent_dma_mask;
146 146
147 error = device_register(&isa_dev->dev); 147 error = device_register(&isa_dev->dev);
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
index f6a337c34ac4..f22ed6cc69f2 100644
--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -1169,9 +1169,9 @@ static bool DAC960_V1_EnableMemoryMailboxInterface(DAC960_Controller_T
1169 int i; 1169 int i;
1170 1170
1171 1171
1172 if (pci_set_dma_mask(Controller->PCIDevice, DMA_32BIT_MASK)) 1172 if (pci_set_dma_mask(Controller->PCIDevice, DMA_BIT_MASK(32)))
1173 return DAC960_Failure(Controller, "DMA mask out of range"); 1173 return DAC960_Failure(Controller, "DMA mask out of range");
1174 Controller->BounceBufferLimit = DMA_32BIT_MASK; 1174 Controller->BounceBufferLimit = DMA_BIT_MASK(32);
1175 1175
1176 if ((hw_type == DAC960_PD_Controller) || (hw_type == DAC960_P_Controller)) { 1176 if ((hw_type == DAC960_PD_Controller) || (hw_type == DAC960_P_Controller)) {
1177 CommandMailboxesSize = 0; 1177 CommandMailboxesSize = 0;
@@ -1372,10 +1372,10 @@ static bool DAC960_V2_EnableMemoryMailboxInterface(DAC960_Controller_T
1372 dma_addr_t CommandMailboxDMA; 1372 dma_addr_t CommandMailboxDMA;
1373 DAC960_V2_CommandStatus_T CommandStatus; 1373 DAC960_V2_CommandStatus_T CommandStatus;
1374 1374
1375 if (!pci_set_dma_mask(Controller->PCIDevice, DMA_64BIT_MASK)) 1375 if (!pci_set_dma_mask(Controller->PCIDevice, DMA_BIT_MASK(64)))
1376 Controller->BounceBufferLimit = DMA_64BIT_MASK; 1376 Controller->BounceBufferLimit = DMA_BIT_MASK(64);
1377 else if (!pci_set_dma_mask(Controller->PCIDevice, DMA_32BIT_MASK)) 1377 else if (!pci_set_dma_mask(Controller->PCIDevice, DMA_BIT_MASK(32)))
1378 Controller->BounceBufferLimit = DMA_32BIT_MASK; 1378 Controller->BounceBufferLimit = DMA_BIT_MASK(32);
1379 else 1379 else
1380 return DAC960_Failure(Controller, "DMA mask out of range"); 1380 return DAC960_Failure(Controller, "DMA mask out of range");
1381 1381
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index e7b8aa0cb47c..ddea8e485cc9 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -410,6 +410,23 @@ config ATA_OVER_ETH
410 This driver provides Support for ATA over Ethernet block 410 This driver provides Support for ATA over Ethernet block
411 devices like the Coraid EtherDrive (R) Storage Blade. 411 devices like the Coraid EtherDrive (R) Storage Blade.
412 412
413config MG_DISK
414 tristate "mGine mflash, gflash support"
415 depends on ARM && ATA && GPIOLIB
416 help
417 mGine mFlash(gFlash) block device driver
418
419config MG_DISK_RES
420 int "Size of reserved area before MBR"
421 depends on MG_DISK
422 default 0
423 help
424 Define size of reserved area that usually used for boot. Unit is KB.
425 All of the block device operation will be taken this value as start
426 offset
427 Examples:
428 1024 => 1 MB
429
413config SUNVDC 430config SUNVDC
414 tristate "Sun Virtual Disk Client support" 431 tristate "Sun Virtual Disk Client support"
415 depends on SUN_LDOMS 432 depends on SUN_LDOMS
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index 3145141cef72..7755a5e2a85e 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o
21obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o 21obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o
22obj-$(CONFIG_XILINX_SYSACE) += xsysace.o 22obj-$(CONFIG_XILINX_SYSACE) += xsysace.o
23obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o 23obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o
24obj-$(CONFIG_MG_DISK) += mg_disk.o
24obj-$(CONFIG_SUNVDC) += sunvdc.o 25obj-$(CONFIG_SUNVDC) += sunvdc.o
25 26
26obj-$(CONFIG_BLK_DEV_UMEM) += umem.o 27obj-$(CONFIG_BLK_DEV_UMEM) += umem.o
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 5d0e135824f9..0ef6f08aa6ea 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -51,6 +51,7 @@
51#include <scsi/scsi_ioctl.h> 51#include <scsi/scsi_ioctl.h>
52#include <linux/cdrom.h> 52#include <linux/cdrom.h>
53#include <linux/scatterlist.h> 53#include <linux/scatterlist.h>
54#include <linux/kthread.h>
54 55
55#define CCISS_DRIVER_VERSION(maj,min,submin) ((maj<<16)|(min<<8)|(submin)) 56#define CCISS_DRIVER_VERSION(maj,min,submin) ((maj<<16)|(min<<8)|(submin))
56#define DRIVER_NAME "HP CISS Driver (v 3.6.20)" 57#define DRIVER_NAME "HP CISS Driver (v 3.6.20)"
@@ -186,6 +187,8 @@ static int sendcmd_withirq(__u8 cmd, int ctlr, void *buff, size_t size,
186 __u8 page_code, int cmd_type); 187 __u8 page_code, int cmd_type);
187 188
188static void fail_all_cmds(unsigned long ctlr); 189static void fail_all_cmds(unsigned long ctlr);
190static int scan_thread(void *data);
191static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c);
189 192
190#ifdef CONFIG_PROC_FS 193#ifdef CONFIG_PROC_FS
191static void cciss_procinit(int i); 194static void cciss_procinit(int i);
@@ -735,6 +738,12 @@ static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo)
735 return 0; 738 return 0;
736} 739}
737 740
741static void check_ioctl_unit_attention(ctlr_info_t *host, CommandList_struct *c)
742{
743 if (c->err_info->CommandStatus == CMD_TARGET_STATUS &&
744 c->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION)
745 (void)check_for_unit_attention(host, c);
746}
738/* 747/*
739 * ioctl 748 * ioctl
740 */ 749 */
@@ -1029,6 +1038,8 @@ static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
1029 iocommand.buf_size, 1038 iocommand.buf_size,
1030 PCI_DMA_BIDIRECTIONAL); 1039 PCI_DMA_BIDIRECTIONAL);
1031 1040
1041 check_ioctl_unit_attention(host, c);
1042
1032 /* Copy the error information out */ 1043 /* Copy the error information out */
1033 iocommand.error_info = *(c->err_info); 1044 iocommand.error_info = *(c->err_info);
1034 if (copy_to_user 1045 if (copy_to_user
@@ -1180,6 +1191,7 @@ static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
1180 (dma_addr_t) temp64.val, buff_size[i], 1191 (dma_addr_t) temp64.val, buff_size[i],
1181 PCI_DMA_BIDIRECTIONAL); 1192 PCI_DMA_BIDIRECTIONAL);
1182 } 1193 }
1194 check_ioctl_unit_attention(host, c);
1183 /* Copy the error information out */ 1195 /* Copy the error information out */
1184 ioc->error_info = *(c->err_info); 1196 ioc->error_info = *(c->err_info);
1185 if (copy_to_user(argp, ioc, sizeof(*ioc))) { 1197 if (copy_to_user(argp, ioc, sizeof(*ioc))) {
@@ -1287,6 +1299,7 @@ static void cciss_softirq_done(struct request *rq)
1287{ 1299{
1288 CommandList_struct *cmd = rq->completion_data; 1300 CommandList_struct *cmd = rq->completion_data;
1289 ctlr_info_t *h = hba[cmd->ctlr]; 1301 ctlr_info_t *h = hba[cmd->ctlr];
1302 unsigned int nr_bytes;
1290 unsigned long flags; 1303 unsigned long flags;
1291 u64bit temp64; 1304 u64bit temp64;
1292 int i, ddir; 1305 int i, ddir;
@@ -1308,7 +1321,14 @@ static void cciss_softirq_done(struct request *rq)
1308 printk("Done with %p\n", rq); 1321 printk("Done with %p\n", rq);
1309#endif /* CCISS_DEBUG */ 1322#endif /* CCISS_DEBUG */
1310 1323
1311 if (blk_end_request(rq, (rq->errors == 0) ? 0 : -EIO, blk_rq_bytes(rq))) 1324 /*
1325 * Store the full size and set the residual count for pc requests
1326 */
1327 nr_bytes = blk_rq_bytes(rq);
1328 if (blk_pc_request(rq))
1329 rq->data_len = cmd->err_info->ResidualCnt;
1330
1331 if (blk_end_request(rq, (rq->errors == 0) ? 0 : -EIO, nr_bytes))
1312 BUG(); 1332 BUG();
1313 1333
1314 spin_lock_irqsave(&h->lock, flags); 1334 spin_lock_irqsave(&h->lock, flags);
@@ -2585,12 +2605,14 @@ static inline unsigned int make_status_bytes(unsigned int scsi_status_byte,
2585 ((driver_byte & 0xff) << 24); 2605 ((driver_byte & 0xff) << 24);
2586} 2606}
2587 2607
2588static inline int evaluate_target_status(CommandList_struct *cmd) 2608static inline int evaluate_target_status(ctlr_info_t *h,
2609 CommandList_struct *cmd, int *retry_cmd)
2589{ 2610{
2590 unsigned char sense_key; 2611 unsigned char sense_key;
2591 unsigned char status_byte, msg_byte, host_byte, driver_byte; 2612 unsigned char status_byte, msg_byte, host_byte, driver_byte;
2592 int error_value; 2613 int error_value;
2593 2614
2615 *retry_cmd = 0;
2594 /* If we get in here, it means we got "target status", that is, scsi status */ 2616 /* If we get in here, it means we got "target status", that is, scsi status */
2595 status_byte = cmd->err_info->ScsiStatus; 2617 status_byte = cmd->err_info->ScsiStatus;
2596 driver_byte = DRIVER_OK; 2618 driver_byte = DRIVER_OK;
@@ -2618,6 +2640,11 @@ static inline int evaluate_target_status(CommandList_struct *cmd)
2618 if (((sense_key == 0x0) || (sense_key == 0x1)) && !blk_pc_request(cmd->rq)) 2640 if (((sense_key == 0x0) || (sense_key == 0x1)) && !blk_pc_request(cmd->rq))
2619 error_value = 0; 2641 error_value = 0;
2620 2642
2643 if (check_for_unit_attention(h, cmd)) {
2644 *retry_cmd = !blk_pc_request(cmd->rq);
2645 return 0;
2646 }
2647
2621 if (!blk_pc_request(cmd->rq)) { /* Not SG_IO or similar? */ 2648 if (!blk_pc_request(cmd->rq)) { /* Not SG_IO or similar? */
2622 if (error_value != 0) 2649 if (error_value != 0)
2623 printk(KERN_WARNING "cciss: cmd %p has CHECK CONDITION" 2650 printk(KERN_WARNING "cciss: cmd %p has CHECK CONDITION"
@@ -2657,7 +2684,7 @@ static inline void complete_command(ctlr_info_t *h, CommandList_struct *cmd,
2657 2684
2658 switch (cmd->err_info->CommandStatus) { 2685 switch (cmd->err_info->CommandStatus) {
2659 case CMD_TARGET_STATUS: 2686 case CMD_TARGET_STATUS:
2660 rq->errors = evaluate_target_status(cmd); 2687 rq->errors = evaluate_target_status(h, cmd, &retry_cmd);
2661 break; 2688 break;
2662 case CMD_DATA_UNDERRUN: 2689 case CMD_DATA_UNDERRUN:
2663 if (blk_fs_request(cmd->rq)) { 2690 if (blk_fs_request(cmd->rq)) {
@@ -3008,6 +3035,63 @@ static irqreturn_t do_cciss_intr(int irq, void *dev_id)
3008 return IRQ_HANDLED; 3035 return IRQ_HANDLED;
3009} 3036}
3010 3037
3038static int scan_thread(void *data)
3039{
3040 ctlr_info_t *h = data;
3041 int rc;
3042 DECLARE_COMPLETION_ONSTACK(wait);
3043 h->rescan_wait = &wait;
3044
3045 for (;;) {
3046 rc = wait_for_completion_interruptible(&wait);
3047 if (kthread_should_stop())
3048 break;
3049 if (!rc)
3050 rebuild_lun_table(h, 0);
3051 }
3052 return 0;
3053}
3054
3055static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c)
3056{
3057 if (c->err_info->SenseInfo[2] != UNIT_ATTENTION)
3058 return 0;
3059
3060 switch (c->err_info->SenseInfo[12]) {
3061 case STATE_CHANGED:
3062 printk(KERN_WARNING "cciss%d: a state change "
3063 "detected, command retried\n", h->ctlr);
3064 return 1;
3065 break;
3066 case LUN_FAILED:
3067 printk(KERN_WARNING "cciss%d: LUN failure "
3068 "detected, action required\n", h->ctlr);
3069 return 1;
3070 break;
3071 case REPORT_LUNS_CHANGED:
3072 printk(KERN_WARNING "cciss%d: report LUN data "
3073 "changed\n", h->ctlr);
3074 if (h->rescan_wait)
3075 complete(h->rescan_wait);
3076 return 1;
3077 break;
3078 case POWER_OR_RESET:
3079 printk(KERN_WARNING "cciss%d: a power on "
3080 "or device reset detected\n", h->ctlr);
3081 return 1;
3082 break;
3083 case UNIT_ATTENTION_CLEARED:
3084 printk(KERN_WARNING "cciss%d: unit attention "
3085 "cleared by another initiator\n", h->ctlr);
3086 return 1;
3087 break;
3088 default:
3089 printk(KERN_WARNING "cciss%d: unknown "
3090 "unit attention detected\n", h->ctlr);
3091 return 1;
3092 }
3093}
3094
3011/* 3095/*
3012 * We cannot read the structure directly, for portability we must use 3096 * We cannot read the structure directly, for portability we must use
3013 * the io functions. 3097 * the io functions.
@@ -3181,12 +3265,21 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
3181 */ 3265 */
3182 cciss_interrupt_mode(c, pdev, board_id); 3266 cciss_interrupt_mode(c, pdev, board_id);
3183 3267
3184 /* 3268 /* find the memory BAR */
3185 * Memory base addr is first addr , the second points to the config 3269 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
3186 * table 3270 if (pci_resource_flags(pdev, i) & IORESOURCE_MEM)
3187 */ 3271 break;
3272 }
3273 if (i == DEVICE_COUNT_RESOURCE) {
3274 printk(KERN_WARNING "cciss: No memory BAR found\n");
3275 err = -ENODEV;
3276 goto err_out_free_res;
3277 }
3278
3279 c->paddr = pci_resource_start(pdev, i); /* addressing mode bits
3280 * already removed
3281 */
3188 3282
3189 c->paddr = pci_resource_start(pdev, 0); /* addressing mode bits already removed */
3190#ifdef CCISS_DEBUG 3283#ifdef CCISS_DEBUG
3191 printk("address 0 = %lx\n", c->paddr); 3284 printk("address 0 = %lx\n", c->paddr);
3192#endif /* CCISS_DEBUG */ 3285#endif /* CCISS_DEBUG */
@@ -3637,9 +3730,9 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
3637 hba[i]->pdev = pdev; 3730 hba[i]->pdev = pdev;
3638 3731
3639 /* configure PCI DMA stuff */ 3732 /* configure PCI DMA stuff */
3640 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) 3733 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
3641 dac = 1; 3734 dac = 1;
3642 else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) 3735 else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
3643 dac = 0; 3736 dac = 0;
3644 else { 3737 else {
3645 printk(KERN_ERR "cciss: no suitable DMA available\n"); 3738 printk(KERN_ERR "cciss: no suitable DMA available\n");
@@ -3753,6 +3846,11 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
3753 hba[i]->busy_initializing = 0; 3846 hba[i]->busy_initializing = 0;
3754 3847
3755 rebuild_lun_table(hba[i], 1); 3848 rebuild_lun_table(hba[i], 1);
3849 hba[i]->cciss_scan_thread = kthread_run(scan_thread, hba[i],
3850 "cciss_scan%02d", i);
3851 if (IS_ERR(hba[i]->cciss_scan_thread))
3852 return PTR_ERR(hba[i]->cciss_scan_thread);
3853
3756 return 1; 3854 return 1;
3757 3855
3758clean4: 3856clean4:
@@ -3828,6 +3926,7 @@ static void __devexit cciss_remove_one(struct pci_dev *pdev)
3828 printk(KERN_ERR "cciss: Unable to remove device \n"); 3926 printk(KERN_ERR "cciss: Unable to remove device \n");
3829 return; 3927 return;
3830 } 3928 }
3929
3831 tmp_ptr = pci_get_drvdata(pdev); 3930 tmp_ptr = pci_get_drvdata(pdev);
3832 i = tmp_ptr->ctlr; 3931 i = tmp_ptr->ctlr;
3833 if (hba[i] == NULL) { 3932 if (hba[i] == NULL) {
@@ -3836,6 +3935,8 @@ static void __devexit cciss_remove_one(struct pci_dev *pdev)
3836 return; 3935 return;
3837 } 3936 }
3838 3937
3938 kthread_stop(hba[i]->cciss_scan_thread);
3939
3839 remove_proc_entry(hba[i]->devname, proc_cciss); 3940 remove_proc_entry(hba[i]->devname, proc_cciss);
3840 unregister_blkdev(hba[i]->major, hba[i]->devname); 3941 unregister_blkdev(hba[i]->major, hba[i]->devname);
3841 3942
diff --git a/drivers/block/cciss.h b/drivers/block/cciss.h
index 15e2b84734e3..703e08038fb9 100644
--- a/drivers/block/cciss.h
+++ b/drivers/block/cciss.h
@@ -121,6 +121,8 @@ struct ctlr_info
121 struct sendcmd_reject_list scsi_rejects; 121 struct sendcmd_reject_list scsi_rejects;
122#endif 122#endif
123 unsigned char alive; 123 unsigned char alive;
124 struct completion *rescan_wait;
125 struct task_struct *cciss_scan_thread;
124}; 126};
125 127
126/* Defining the diffent access_menthods */ 128/* Defining the diffent access_menthods */
diff --git a/drivers/block/cciss_cmd.h b/drivers/block/cciss_cmd.h
index 24e22dea1a99..40b1b92dae7f 100644
--- a/drivers/block/cciss_cmd.h
+++ b/drivers/block/cciss_cmd.h
@@ -25,6 +25,29 @@
25#define CMD_TIMEOUT 0x000B 25#define CMD_TIMEOUT 0x000B
26#define CMD_UNABORTABLE 0x000C 26#define CMD_UNABORTABLE 0x000C
27 27
28/* Unit Attentions ASC's as defined for the MSA2012sa */
29#define POWER_OR_RESET 0x29
30#define STATE_CHANGED 0x2a
31#define UNIT_ATTENTION_CLEARED 0x2f
32#define LUN_FAILED 0x3e
33#define REPORT_LUNS_CHANGED 0x3f
34
35/* Unit Attentions ASCQ's as defined for the MSA2012sa */
36
37 /* These ASCQ's defined for ASC = POWER_OR_RESET */
38#define POWER_ON_RESET 0x00
39#define POWER_ON_REBOOT 0x01
40#define SCSI_BUS_RESET 0x02
41#define MSA_TARGET_RESET 0x03
42#define CONTROLLER_FAILOVER 0x04
43#define TRANSCEIVER_SE 0x05
44#define TRANSCEIVER_LVD 0x06
45
46 /* These ASCQ's defined for ASC = STATE_CHANGED */
47#define RESERVATION_PREEMPTED 0x03
48#define ASYM_ACCESS_CHANGED 0x06
49#define LUN_CAPACITY_CHANGED 0x09
50
28//transfer direction 51//transfer direction
29#define XFER_NONE 0x00 52#define XFER_NONE 0x00
30#define XFER_WRITE 0x01 53#define XFER_WRITE 0x01
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 40b17d3b55a1..ddae80825899 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1431,6 +1431,7 @@ static int lo_open(struct block_device *bdev, fmode_t mode)
1431static int lo_release(struct gendisk *disk, fmode_t mode) 1431static int lo_release(struct gendisk *disk, fmode_t mode)
1432{ 1432{
1433 struct loop_device *lo = disk->private_data; 1433 struct loop_device *lo = disk->private_data;
1434 int err;
1434 1435
1435 mutex_lock(&lo->lo_ctl_mutex); 1436 mutex_lock(&lo->lo_ctl_mutex);
1436 1437
@@ -1442,7 +1443,9 @@ static int lo_release(struct gendisk *disk, fmode_t mode)
1442 * In autoclear mode, stop the loop thread 1443 * In autoclear mode, stop the loop thread
1443 * and remove configuration after last close. 1444 * and remove configuration after last close.
1444 */ 1445 */
1445 loop_clr_fd(lo, NULL); 1446 err = loop_clr_fd(lo, NULL);
1447 if (!err)
1448 goto out_unlocked;
1446 } else { 1449 } else {
1447 /* 1450 /*
1448 * Otherwise keep thread (if running) and config, 1451 * Otherwise keep thread (if running) and config,
@@ -1453,7 +1456,7 @@ static int lo_release(struct gendisk *disk, fmode_t mode)
1453 1456
1454out: 1457out:
1455 mutex_unlock(&lo->lo_ctl_mutex); 1458 mutex_unlock(&lo->lo_ctl_mutex);
1456 1459out_unlocked:
1457 return 0; 1460 return 0;
1458} 1461}
1459 1462
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
new file mode 100644
index 000000000000..fb39d9aa3cdc
--- /dev/null
+++ b/drivers/block/mg_disk.c
@@ -0,0 +1,1005 @@
1/*
2 * drivers/block/mg_disk.c
3 *
4 * Support for the mGine m[g]flash IO mode.
5 * Based on legacy hd.c
6 *
7 * (c) 2008 mGine Co.,LTD
8 * (c) 2008 unsik Kim <donari75@gmail.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/kernel.h>
16#include <linux/module.h>
17#include <linux/fs.h>
18#include <linux/blkdev.h>
19#include <linux/hdreg.h>
20#include <linux/libata.h>
21#include <linux/interrupt.h>
22#include <linux/delay.h>
23#include <linux/platform_device.h>
24#include <linux/gpio.h>
25#include <linux/mg_disk.h>
26
27#define MG_RES_SEC (CONFIG_MG_DISK_RES << 1)
28
29static void mg_request(struct request_queue *);
30
31static void mg_dump_status(const char *msg, unsigned int stat,
32 struct mg_host *host)
33{
34 char *name = MG_DISK_NAME;
35 struct request *req;
36
37 if (host->breq) {
38 req = elv_next_request(host->breq);
39 if (req)
40 name = req->rq_disk->disk_name;
41 }
42
43 printk(KERN_ERR "%s: %s: status=0x%02x { ", name, msg, stat & 0xff);
44 if (stat & MG_REG_STATUS_BIT_BUSY)
45 printk("Busy ");
46 if (stat & MG_REG_STATUS_BIT_READY)
47 printk("DriveReady ");
48 if (stat & MG_REG_STATUS_BIT_WRITE_FAULT)
49 printk("WriteFault ");
50 if (stat & MG_REG_STATUS_BIT_SEEK_DONE)
51 printk("SeekComplete ");
52 if (stat & MG_REG_STATUS_BIT_DATA_REQ)
53 printk("DataRequest ");
54 if (stat & MG_REG_STATUS_BIT_CORRECTED_ERROR)
55 printk("CorrectedError ");
56 if (stat & MG_REG_STATUS_BIT_ERROR)
57 printk("Error ");
58 printk("}\n");
59 if ((stat & MG_REG_STATUS_BIT_ERROR) == 0) {
60 host->error = 0;
61 } else {
62 host->error = inb((unsigned long)host->dev_base + MG_REG_ERROR);
63 printk(KERN_ERR "%s: %s: error=0x%02x { ", name, msg,
64 host->error & 0xff);
65 if (host->error & MG_REG_ERR_BBK)
66 printk("BadSector ");
67 if (host->error & MG_REG_ERR_UNC)
68 printk("UncorrectableError ");
69 if (host->error & MG_REG_ERR_IDNF)
70 printk("SectorIdNotFound ");
71 if (host->error & MG_REG_ERR_ABRT)
72 printk("DriveStatusError ");
73 if (host->error & MG_REG_ERR_AMNF)
74 printk("AddrMarkNotFound ");
75 printk("}");
76 if (host->error &
77 (MG_REG_ERR_BBK | MG_REG_ERR_UNC |
78 MG_REG_ERR_IDNF | MG_REG_ERR_AMNF)) {
79 if (host->breq) {
80 req = elv_next_request(host->breq);
81 if (req)
82 printk(", sector=%ld", req->sector);
83 }
84
85 }
86 printk("\n");
87 }
88}
89
90static unsigned int mg_wait(struct mg_host *host, u32 expect, u32 msec)
91{
92 u8 status;
93 unsigned long expire, cur_jiffies;
94 struct mg_drv_data *prv_data = host->dev->platform_data;
95
96 host->error = MG_ERR_NONE;
97 expire = jiffies + msecs_to_jiffies(msec);
98
99 status = inb((unsigned long)host->dev_base + MG_REG_STATUS);
100
101 do {
102 cur_jiffies = jiffies;
103 if (status & MG_REG_STATUS_BIT_BUSY) {
104 if (expect == MG_REG_STATUS_BIT_BUSY)
105 break;
106 } else {
107 /* Check the error condition! */
108 if (status & MG_REG_STATUS_BIT_ERROR) {
109 mg_dump_status("mg_wait", status, host);
110 break;
111 }
112
113 if (expect == MG_STAT_READY)
114 if (MG_READY_OK(status))
115 break;
116
117 if (expect == MG_REG_STATUS_BIT_DATA_REQ)
118 if (status & MG_REG_STATUS_BIT_DATA_REQ)
119 break;
120 }
121 if (!msec) {
122 mg_dump_status("not ready", status, host);
123 return MG_ERR_INV_STAT;
124 }
125 if (prv_data->use_polling)
126 msleep(1);
127
128 status = inb((unsigned long)host->dev_base + MG_REG_STATUS);
129 } while (time_before(cur_jiffies, expire));
130
131 if (time_after_eq(cur_jiffies, expire) && msec)
132 host->error = MG_ERR_TIMEOUT;
133
134 return host->error;
135}
136
137static unsigned int mg_wait_rstout(u32 rstout, u32 msec)
138{
139 unsigned long expire;
140
141 expire = jiffies + msecs_to_jiffies(msec);
142 while (time_before(jiffies, expire)) {
143 if (gpio_get_value(rstout) == 1)
144 return MG_ERR_NONE;
145 msleep(10);
146 }
147
148 return MG_ERR_RSTOUT;
149}
150
151static void mg_unexpected_intr(struct mg_host *host)
152{
153 u32 status = inb((unsigned long)host->dev_base + MG_REG_STATUS);
154
155 mg_dump_status("mg_unexpected_intr", status, host);
156}
157
158static irqreturn_t mg_irq(int irq, void *dev_id)
159{
160 struct mg_host *host = dev_id;
161 void (*handler)(struct mg_host *) = host->mg_do_intr;
162
163 host->mg_do_intr = 0;
164 del_timer(&host->timer);
165 if (!handler)
166 handler = mg_unexpected_intr;
167 handler(host);
168 return IRQ_HANDLED;
169}
170
171static int mg_get_disk_id(struct mg_host *host)
172{
173 u32 i;
174 s32 err;
175 const u16 *id = host->id;
176 struct mg_drv_data *prv_data = host->dev->platform_data;
177 char fwrev[ATA_ID_FW_REV_LEN + 1];
178 char model[ATA_ID_PROD_LEN + 1];
179 char serial[ATA_ID_SERNO_LEN + 1];
180
181 if (!prv_data->use_polling)
182 outb(MG_REG_CTRL_INTR_DISABLE,
183 (unsigned long)host->dev_base +
184 MG_REG_DRV_CTRL);
185
186 outb(MG_CMD_ID, (unsigned long)host->dev_base + MG_REG_COMMAND);
187 err = mg_wait(host, MG_REG_STATUS_BIT_DATA_REQ, MG_TMAX_WAIT_RD_DRQ);
188 if (err)
189 return err;
190
191 for (i = 0; i < (MG_SECTOR_SIZE >> 1); i++)
192 host->id[i] = le16_to_cpu(inw((unsigned long)host->dev_base +
193 MG_BUFF_OFFSET + i * 2));
194
195 outb(MG_CMD_RD_CONF, (unsigned long)host->dev_base + MG_REG_COMMAND);
196 err = mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD);
197 if (err)
198 return err;
199
200 if ((id[ATA_ID_FIELD_VALID] & 1) == 0)
201 return MG_ERR_TRANSLATION;
202
203 host->n_sectors = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
204 host->cyls = id[ATA_ID_CYLS];
205 host->heads = id[ATA_ID_HEADS];
206 host->sectors = id[ATA_ID_SECTORS];
207
208 if (MG_RES_SEC && host->heads && host->sectors) {
209 /* modify cyls, n_sectors */
210 host->cyls = (host->n_sectors - MG_RES_SEC) /
211 host->heads / host->sectors;
212 host->nres_sectors = host->n_sectors - host->cyls *
213 host->heads * host->sectors;
214 host->n_sectors -= host->nres_sectors;
215 }
216
217 ata_id_c_string(id, fwrev, ATA_ID_FW_REV, sizeof(fwrev));
218 ata_id_c_string(id, model, ATA_ID_PROD, sizeof(model));
219 ata_id_c_string(id, serial, ATA_ID_SERNO, sizeof(serial));
220 printk(KERN_INFO "mg_disk: model: %s\n", model);
221 printk(KERN_INFO "mg_disk: firm: %.8s\n", fwrev);
222 printk(KERN_INFO "mg_disk: serial: %s\n", serial);
223 printk(KERN_INFO "mg_disk: %d + reserved %d sectors\n",
224 host->n_sectors, host->nres_sectors);
225
226 if (!prv_data->use_polling)
227 outb(MG_REG_CTRL_INTR_ENABLE, (unsigned long)host->dev_base +
228 MG_REG_DRV_CTRL);
229
230 return err;
231}
232
233
234static int mg_disk_init(struct mg_host *host)
235{
236 struct mg_drv_data *prv_data = host->dev->platform_data;
237 s32 err;
238 u8 init_status;
239
240 /* hdd rst low */
241 gpio_set_value(host->rst, 0);
242 err = mg_wait(host, MG_REG_STATUS_BIT_BUSY, MG_TMAX_RST_TO_BUSY);
243 if (err)
244 return err;
245
246 /* hdd rst high */
247 gpio_set_value(host->rst, 1);
248 err = mg_wait(host, MG_STAT_READY, MG_TMAX_HDRST_TO_RDY);
249 if (err)
250 return err;
251
252 /* soft reset on */
253 outb(MG_REG_CTRL_RESET |
254 (prv_data->use_polling ? MG_REG_CTRL_INTR_DISABLE :
255 MG_REG_CTRL_INTR_ENABLE),
256 (unsigned long)host->dev_base + MG_REG_DRV_CTRL);
257 err = mg_wait(host, MG_REG_STATUS_BIT_BUSY, MG_TMAX_RST_TO_BUSY);
258 if (err)
259 return err;
260
261 /* soft reset off */
262 outb(prv_data->use_polling ? MG_REG_CTRL_INTR_DISABLE :
263 MG_REG_CTRL_INTR_ENABLE,
264 (unsigned long)host->dev_base + MG_REG_DRV_CTRL);
265 err = mg_wait(host, MG_STAT_READY, MG_TMAX_SWRST_TO_RDY);
266 if (err)
267 return err;
268
269 init_status = inb((unsigned long)host->dev_base + MG_REG_STATUS) & 0xf;
270
271 if (init_status == 0xf)
272 return MG_ERR_INIT_STAT;
273
274 return err;
275}
276
277static void mg_bad_rw_intr(struct mg_host *host)
278{
279 struct request *req = elv_next_request(host->breq);
280 if (req != NULL)
281 if (++req->errors >= MG_MAX_ERRORS ||
282 host->error == MG_ERR_TIMEOUT)
283 end_request(req, 0);
284}
285
286static unsigned int mg_out(struct mg_host *host,
287 unsigned int sect_num,
288 unsigned int sect_cnt,
289 unsigned int cmd,
290 void (*intr_addr)(struct mg_host *))
291{
292 struct mg_drv_data *prv_data = host->dev->platform_data;
293
294 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD))
295 return host->error;
296
297 if (!prv_data->use_polling) {
298 host->mg_do_intr = intr_addr;
299 mod_timer(&host->timer, jiffies + 3 * HZ);
300 }
301 if (MG_RES_SEC)
302 sect_num += MG_RES_SEC;
303 outb((u8)sect_cnt, (unsigned long)host->dev_base + MG_REG_SECT_CNT);
304 outb((u8)sect_num, (unsigned long)host->dev_base + MG_REG_SECT_NUM);
305 outb((u8)(sect_num >> 8), (unsigned long)host->dev_base +
306 MG_REG_CYL_LOW);
307 outb((u8)(sect_num >> 16), (unsigned long)host->dev_base +
308 MG_REG_CYL_HIGH);
309 outb((u8)((sect_num >> 24) | MG_REG_HEAD_LBA_MODE),
310 (unsigned long)host->dev_base + MG_REG_DRV_HEAD);
311 outb(cmd, (unsigned long)host->dev_base + MG_REG_COMMAND);
312 return MG_ERR_NONE;
313}
314
315static void mg_read(struct request *req)
316{
317 u32 remains, j;
318 struct mg_host *host = req->rq_disk->private_data;
319
320 remains = req->nr_sectors;
321
322 if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_RD, 0) !=
323 MG_ERR_NONE)
324 mg_bad_rw_intr(host);
325
326 MG_DBG("requested %d sects (from %ld), buffer=0x%p\n",
327 remains, req->sector, req->buffer);
328
329 while (remains) {
330 if (mg_wait(host, MG_REG_STATUS_BIT_DATA_REQ,
331 MG_TMAX_WAIT_RD_DRQ) != MG_ERR_NONE) {
332 mg_bad_rw_intr(host);
333 return;
334 }
335 for (j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
336 *(u16 *)req->buffer =
337 inw((unsigned long)host->dev_base +
338 MG_BUFF_OFFSET + (j << 1));
339 req->buffer += 2;
340 }
341
342 req->sector++;
343 req->errors = 0;
344 remains = --req->nr_sectors;
345 --req->current_nr_sectors;
346
347 if (req->current_nr_sectors <= 0) {
348 MG_DBG("remain : %d sects\n", remains);
349 end_request(req, 1);
350 if (remains > 0)
351 req = elv_next_request(host->breq);
352 }
353
354 outb(MG_CMD_RD_CONF, (unsigned long)host->dev_base +
355 MG_REG_COMMAND);
356 }
357}
358
359static void mg_write(struct request *req)
360{
361 u32 remains, j;
362 struct mg_host *host = req->rq_disk->private_data;
363
364 remains = req->nr_sectors;
365
366 if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_WR, 0) !=
367 MG_ERR_NONE) {
368 mg_bad_rw_intr(host);
369 return;
370 }
371
372
373 MG_DBG("requested %d sects (from %ld), buffer=0x%p\n",
374 remains, req->sector, req->buffer);
375 while (remains) {
376 if (mg_wait(host, MG_REG_STATUS_BIT_DATA_REQ,
377 MG_TMAX_WAIT_WR_DRQ) != MG_ERR_NONE) {
378 mg_bad_rw_intr(host);
379 return;
380 }
381 for (j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
382 outw(*(u16 *)req->buffer,
383 (unsigned long)host->dev_base +
384 MG_BUFF_OFFSET + (j << 1));
385 req->buffer += 2;
386 }
387 req->sector++;
388 remains = --req->nr_sectors;
389 --req->current_nr_sectors;
390
391 if (req->current_nr_sectors <= 0) {
392 MG_DBG("remain : %d sects\n", remains);
393 end_request(req, 1);
394 if (remains > 0)
395 req = elv_next_request(host->breq);
396 }
397
398 outb(MG_CMD_WR_CONF, (unsigned long)host->dev_base +
399 MG_REG_COMMAND);
400 }
401}
402
403static void mg_read_intr(struct mg_host *host)
404{
405 u32 i;
406 struct request *req;
407
408 /* check status */
409 do {
410 i = inb((unsigned long)host->dev_base + MG_REG_STATUS);
411 if (i & MG_REG_STATUS_BIT_BUSY)
412 break;
413 if (!MG_READY_OK(i))
414 break;
415 if (i & MG_REG_STATUS_BIT_DATA_REQ)
416 goto ok_to_read;
417 } while (0);
418 mg_dump_status("mg_read_intr", i, host);
419 mg_bad_rw_intr(host);
420 mg_request(host->breq);
421 return;
422
423ok_to_read:
424 /* get current segment of request */
425 req = elv_next_request(host->breq);
426
427 /* read 1 sector */
428 for (i = 0; i < MG_SECTOR_SIZE >> 1; i++) {
429 *(u16 *)req->buffer =
430 inw((unsigned long)host->dev_base + MG_BUFF_OFFSET +
431 (i << 1));
432 req->buffer += 2;
433 }
434
435 /* manipulate request */
436 MG_DBG("sector %ld, remaining=%ld, buffer=0x%p\n",
437 req->sector, req->nr_sectors - 1, req->buffer);
438
439 req->sector++;
440 req->errors = 0;
441 i = --req->nr_sectors;
442 --req->current_nr_sectors;
443
444 /* let know if current segment done */
445 if (req->current_nr_sectors <= 0)
446 end_request(req, 1);
447
448 /* set handler if read remains */
449 if (i > 0) {
450 host->mg_do_intr = mg_read_intr;
451 mod_timer(&host->timer, jiffies + 3 * HZ);
452 }
453
454 /* send read confirm */
455 outb(MG_CMD_RD_CONF, (unsigned long)host->dev_base + MG_REG_COMMAND);
456
457 /* goto next request */
458 if (!i)
459 mg_request(host->breq);
460}
461
462static void mg_write_intr(struct mg_host *host)
463{
464 u32 i, j;
465 u16 *buff;
466 struct request *req;
467
468 /* get current segment of request */
469 req = elv_next_request(host->breq);
470
471 /* check status */
472 do {
473 i = inb((unsigned long)host->dev_base + MG_REG_STATUS);
474 if (i & MG_REG_STATUS_BIT_BUSY)
475 break;
476 if (!MG_READY_OK(i))
477 break;
478 if ((req->nr_sectors <= 1) || (i & MG_REG_STATUS_BIT_DATA_REQ))
479 goto ok_to_write;
480 } while (0);
481 mg_dump_status("mg_write_intr", i, host);
482 mg_bad_rw_intr(host);
483 mg_request(host->breq);
484 return;
485
486ok_to_write:
487 /* manipulate request */
488 req->sector++;
489 i = --req->nr_sectors;
490 --req->current_nr_sectors;
491 req->buffer += MG_SECTOR_SIZE;
492
493 /* let know if current segment or all done */
494 if (!i || (req->bio && req->current_nr_sectors <= 0))
495 end_request(req, 1);
496
497 /* write 1 sector and set handler if remains */
498 if (i > 0) {
499 buff = (u16 *)req->buffer;
500 for (j = 0; j < MG_STORAGE_BUFFER_SIZE >> 1; j++) {
501 outw(*buff, (unsigned long)host->dev_base +
502 MG_BUFF_OFFSET + (j << 1));
503 buff++;
504 }
505 MG_DBG("sector %ld, remaining=%ld, buffer=0x%p\n",
506 req->sector, req->nr_sectors, req->buffer);
507 host->mg_do_intr = mg_write_intr;
508 mod_timer(&host->timer, jiffies + 3 * HZ);
509 }
510
511 /* send write confirm */
512 outb(MG_CMD_WR_CONF, (unsigned long)host->dev_base + MG_REG_COMMAND);
513
514 if (!i)
515 mg_request(host->breq);
516}
517
518void mg_times_out(unsigned long data)
519{
520 struct mg_host *host = (struct mg_host *)data;
521 char *name;
522 struct request *req;
523
524 req = elv_next_request(host->breq);
525 if (!req)
526 return;
527
528 host->mg_do_intr = NULL;
529
530 name = req->rq_disk->disk_name;
531 printk(KERN_DEBUG "%s: timeout\n", name);
532
533 host->error = MG_ERR_TIMEOUT;
534 mg_bad_rw_intr(host);
535
536 mg_request(host->breq);
537}
538
539static void mg_request_poll(struct request_queue *q)
540{
541 struct request *req;
542 struct mg_host *host;
543
544 while ((req = elv_next_request(q)) != NULL) {
545 host = req->rq_disk->private_data;
546 if (blk_fs_request(req)) {
547 switch (rq_data_dir(req)) {
548 case READ:
549 mg_read(req);
550 break;
551 case WRITE:
552 mg_write(req);
553 break;
554 default:
555 printk(KERN_WARNING "%s:%d unknown command\n",
556 __func__, __LINE__);
557 end_request(req, 0);
558 break;
559 }
560 }
561 }
562}
563
564static unsigned int mg_issue_req(struct request *req,
565 struct mg_host *host,
566 unsigned int sect_num,
567 unsigned int sect_cnt)
568{
569 u16 *buff;
570 u32 i;
571
572 switch (rq_data_dir(req)) {
573 case READ:
574 if (mg_out(host, sect_num, sect_cnt, MG_CMD_RD, &mg_read_intr)
575 != MG_ERR_NONE) {
576 mg_bad_rw_intr(host);
577 return host->error;
578 }
579 break;
580 case WRITE:
581 /* TODO : handler */
582 outb(MG_REG_CTRL_INTR_DISABLE,
583 (unsigned long)host->dev_base +
584 MG_REG_DRV_CTRL);
585 if (mg_out(host, sect_num, sect_cnt, MG_CMD_WR, &mg_write_intr)
586 != MG_ERR_NONE) {
587 mg_bad_rw_intr(host);
588 return host->error;
589 }
590 del_timer(&host->timer);
591 mg_wait(host, MG_REG_STATUS_BIT_DATA_REQ, MG_TMAX_WAIT_WR_DRQ);
592 outb(MG_REG_CTRL_INTR_ENABLE, (unsigned long)host->dev_base +
593 MG_REG_DRV_CTRL);
594 if (host->error) {
595 mg_bad_rw_intr(host);
596 return host->error;
597 }
598 buff = (u16 *)req->buffer;
599 for (i = 0; i < MG_SECTOR_SIZE >> 1; i++) {
600 outw(*buff, (unsigned long)host->dev_base +
601 MG_BUFF_OFFSET + (i << 1));
602 buff++;
603 }
604 mod_timer(&host->timer, jiffies + 3 * HZ);
605 outb(MG_CMD_WR_CONF, (unsigned long)host->dev_base +
606 MG_REG_COMMAND);
607 break;
608 default:
609 printk(KERN_WARNING "%s:%d unknown command\n",
610 __func__, __LINE__);
611 end_request(req, 0);
612 break;
613 }
614 return MG_ERR_NONE;
615}
616
617/* This function also called from IRQ context */
618static void mg_request(struct request_queue *q)
619{
620 struct request *req;
621 struct mg_host *host;
622 u32 sect_num, sect_cnt;
623
624 while (1) {
625 req = elv_next_request(q);
626 if (!req)
627 return;
628
629 host = req->rq_disk->private_data;
630
631 /* check unwanted request call */
632 if (host->mg_do_intr)
633 return;
634
635 del_timer(&host->timer);
636
637 sect_num = req->sector;
638 /* deal whole segments */
639 sect_cnt = req->nr_sectors;
640
641 /* sanity check */
642 if (sect_num >= get_capacity(req->rq_disk) ||
643 ((sect_num + sect_cnt) >
644 get_capacity(req->rq_disk))) {
645 printk(KERN_WARNING
646 "%s: bad access: sector=%d, count=%d\n",
647 req->rq_disk->disk_name,
648 sect_num, sect_cnt);
649 end_request(req, 0);
650 continue;
651 }
652
653 if (!blk_fs_request(req))
654 return;
655
656 if (!mg_issue_req(req, host, sect_num, sect_cnt))
657 return;
658 }
659}
660
661static int mg_getgeo(struct block_device *bdev, struct hd_geometry *geo)
662{
663 struct mg_host *host = bdev->bd_disk->private_data;
664
665 geo->cylinders = (unsigned short)host->cyls;
666 geo->heads = (unsigned char)host->heads;
667 geo->sectors = (unsigned char)host->sectors;
668 return 0;
669}
670
671static struct block_device_operations mg_disk_ops = {
672 .getgeo = mg_getgeo
673};
674
675static int mg_suspend(struct platform_device *plat_dev, pm_message_t state)
676{
677 struct mg_drv_data *prv_data = plat_dev->dev.platform_data;
678 struct mg_host *host = prv_data->host;
679
680 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD))
681 return -EIO;
682
683 if (!prv_data->use_polling)
684 outb(MG_REG_CTRL_INTR_DISABLE,
685 (unsigned long)host->dev_base +
686 MG_REG_DRV_CTRL);
687
688 outb(MG_CMD_SLEEP, (unsigned long)host->dev_base + MG_REG_COMMAND);
689 /* wait until mflash deep sleep */
690 msleep(1);
691
692 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD)) {
693 if (!prv_data->use_polling)
694 outb(MG_REG_CTRL_INTR_ENABLE,
695 (unsigned long)host->dev_base +
696 MG_REG_DRV_CTRL);
697 return -EIO;
698 }
699
700 return 0;
701}
702
703static int mg_resume(struct platform_device *plat_dev)
704{
705 struct mg_drv_data *prv_data = plat_dev->dev.platform_data;
706 struct mg_host *host = prv_data->host;
707
708 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD))
709 return -EIO;
710
711 outb(MG_CMD_WAKEUP, (unsigned long)host->dev_base + MG_REG_COMMAND);
712 /* wait until mflash wakeup */
713 msleep(1);
714
715 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD))
716 return -EIO;
717
718 if (!prv_data->use_polling)
719 outb(MG_REG_CTRL_INTR_ENABLE, (unsigned long)host->dev_base +
720 MG_REG_DRV_CTRL);
721
722 return 0;
723}
724
725static int mg_probe(struct platform_device *plat_dev)
726{
727 struct mg_host *host;
728 struct resource *rsc;
729 struct mg_drv_data *prv_data = plat_dev->dev.platform_data;
730 int err = 0;
731
732 if (!prv_data) {
733 printk(KERN_ERR "%s:%d fail (no driver_data)\n",
734 __func__, __LINE__);
735 err = -EINVAL;
736 goto probe_err;
737 }
738
739 /* alloc mg_host */
740 host = kzalloc(sizeof(struct mg_host), GFP_KERNEL);
741 if (!host) {
742 printk(KERN_ERR "%s:%d fail (no memory for mg_host)\n",
743 __func__, __LINE__);
744 err = -ENOMEM;
745 goto probe_err;
746 }
747 host->major = MG_DISK_MAJ;
748
749 /* link each other */
750 prv_data->host = host;
751 host->dev = &plat_dev->dev;
752
753 /* io remap */
754 rsc = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
755 if (!rsc) {
756 printk(KERN_ERR "%s:%d platform_get_resource fail\n",
757 __func__, __LINE__);
758 err = -EINVAL;
759 goto probe_err_2;
760 }
761 host->dev_base = ioremap(rsc->start , rsc->end + 1);
762 if (!host->dev_base) {
763 printk(KERN_ERR "%s:%d ioremap fail\n",
764 __func__, __LINE__);
765 err = -EIO;
766 goto probe_err_2;
767 }
768 MG_DBG("dev_base = 0x%x\n", (u32)host->dev_base);
769
770 /* get reset pin */
771 rsc = platform_get_resource_byname(plat_dev, IORESOURCE_IO,
772 MG_RST_PIN);
773 if (!rsc) {
774 printk(KERN_ERR "%s:%d get reset pin fail\n",
775 __func__, __LINE__);
776 err = -EIO;
777 goto probe_err_3;
778 }
779 host->rst = rsc->start;
780
781 /* init rst pin */
782 err = gpio_request(host->rst, MG_RST_PIN);
783 if (err)
784 goto probe_err_3;
785 gpio_direction_output(host->rst, 1);
786
787 /* reset out pin */
788 if (!(prv_data->dev_attr & MG_DEV_MASK))
789 goto probe_err_3a;
790
791 if (prv_data->dev_attr != MG_BOOT_DEV) {
792 rsc = platform_get_resource_byname(plat_dev, IORESOURCE_IO,
793 MG_RSTOUT_PIN);
794 if (!rsc) {
795 printk(KERN_ERR "%s:%d get reset-out pin fail\n",
796 __func__, __LINE__);
797 err = -EIO;
798 goto probe_err_3a;
799 }
800 host->rstout = rsc->start;
801 err = gpio_request(host->rstout, MG_RSTOUT_PIN);
802 if (err)
803 goto probe_err_3a;
804 gpio_direction_input(host->rstout);
805 }
806
807 /* disk reset */
808 if (prv_data->dev_attr == MG_STORAGE_DEV) {
809 /* If POR seq. not yet finised, wait */
810 err = mg_wait_rstout(host->rstout, MG_TMAX_RSTOUT);
811 if (err)
812 goto probe_err_3b;
813 err = mg_disk_init(host);
814 if (err) {
815 printk(KERN_ERR "%s:%d fail (err code : %d)\n",
816 __func__, __LINE__, err);
817 err = -EIO;
818 goto probe_err_3b;
819 }
820 }
821
822 /* get irq resource */
823 if (!prv_data->use_polling) {
824 host->irq = platform_get_irq(plat_dev, 0);
825 if (host->irq == -ENXIO) {
826 err = host->irq;
827 goto probe_err_3b;
828 }
829 err = request_irq(host->irq, mg_irq,
830 IRQF_DISABLED | IRQF_TRIGGER_RISING,
831 MG_DEV_NAME, host);
832 if (err) {
833 printk(KERN_ERR "%s:%d fail (request_irq err=%d)\n",
834 __func__, __LINE__, err);
835 goto probe_err_3b;
836 }
837
838 }
839
840 /* get disk id */
841 err = mg_get_disk_id(host);
842 if (err) {
843 printk(KERN_ERR "%s:%d fail (err code : %d)\n",
844 __func__, __LINE__, err);
845 err = -EIO;
846 goto probe_err_4;
847 }
848
849 err = register_blkdev(host->major, MG_DISK_NAME);
850 if (err < 0) {
851 printk(KERN_ERR "%s:%d register_blkdev fail (err code : %d)\n",
852 __func__, __LINE__, err);
853 goto probe_err_4;
854 }
855 if (!host->major)
856 host->major = err;
857
858 spin_lock_init(&host->lock);
859
860 if (prv_data->use_polling)
861 host->breq = blk_init_queue(mg_request_poll, &host->lock);
862 else
863 host->breq = blk_init_queue(mg_request, &host->lock);
864
865 if (!host->breq) {
866 err = -ENOMEM;
867 printk(KERN_ERR "%s:%d (blk_init_queue) fail\n",
868 __func__, __LINE__);
869 goto probe_err_5;
870 }
871
872 /* mflash is random device, thanx for the noop */
873 elevator_exit(host->breq->elevator);
874 err = elevator_init(host->breq, "noop");
875 if (err) {
876 printk(KERN_ERR "%s:%d (elevator_init) fail\n",
877 __func__, __LINE__);
878 goto probe_err_6;
879 }
880 blk_queue_max_sectors(host->breq, MG_MAX_SECTS);
881 blk_queue_hardsect_size(host->breq, MG_SECTOR_SIZE);
882
883 init_timer(&host->timer);
884 host->timer.function = mg_times_out;
885 host->timer.data = (unsigned long)host;
886
887 host->gd = alloc_disk(MG_DISK_MAX_PART);
888 if (!host->gd) {
889 printk(KERN_ERR "%s:%d (alloc_disk) fail\n",
890 __func__, __LINE__);
891 err = -ENOMEM;
892 goto probe_err_7;
893 }
894 host->gd->major = host->major;
895 host->gd->first_minor = 0;
896 host->gd->fops = &mg_disk_ops;
897 host->gd->queue = host->breq;
898 host->gd->private_data = host;
899 sprintf(host->gd->disk_name, MG_DISK_NAME"a");
900
901 set_capacity(host->gd, host->n_sectors);
902
903 add_disk(host->gd);
904
905 return err;
906
907probe_err_7:
908 del_timer_sync(&host->timer);
909probe_err_6:
910 blk_cleanup_queue(host->breq);
911probe_err_5:
912 unregister_blkdev(MG_DISK_MAJ, MG_DISK_NAME);
913probe_err_4:
914 if (!prv_data->use_polling)
915 free_irq(host->irq, host);
916probe_err_3b:
917 gpio_free(host->rstout);
918probe_err_3a:
919 gpio_free(host->rst);
920probe_err_3:
921 iounmap(host->dev_base);
922probe_err_2:
923 kfree(host);
924probe_err:
925 return err;
926}
927
928static int mg_remove(struct platform_device *plat_dev)
929{
930 struct mg_drv_data *prv_data = plat_dev->dev.platform_data;
931 struct mg_host *host = prv_data->host;
932 int err = 0;
933
934 /* delete timer */
935 del_timer_sync(&host->timer);
936
937 /* remove disk */
938 if (host->gd) {
939 del_gendisk(host->gd);
940 put_disk(host->gd);
941 }
942 /* remove queue */
943 if (host->breq)
944 blk_cleanup_queue(host->breq);
945
946 /* unregister blk device */
947 unregister_blkdev(host->major, MG_DISK_NAME);
948
949 /* free irq */
950 if (!prv_data->use_polling)
951 free_irq(host->irq, host);
952
953 /* free reset-out pin */
954 if (prv_data->dev_attr != MG_BOOT_DEV)
955 gpio_free(host->rstout);
956
957 /* free rst pin */
958 if (host->rst)
959 gpio_free(host->rst);
960
961 /* unmap io */
962 if (host->dev_base)
963 iounmap(host->dev_base);
964
965 /* free mg_host */
966 kfree(host);
967
968 return err;
969}
970
971static struct platform_driver mg_disk_driver = {
972 .probe = mg_probe,
973 .remove = mg_remove,
974 .suspend = mg_suspend,
975 .resume = mg_resume,
976 .driver = {
977 .name = MG_DEV_NAME,
978 .owner = THIS_MODULE,
979 }
980};
981
982/****************************************************************************
983 *
984 * Module stuff
985 *
986 ****************************************************************************/
987
988static int __init mg_init(void)
989{
990 printk(KERN_INFO "mGine mflash driver, (c) 2008 mGine Co.\n");
991 return platform_driver_register(&mg_disk_driver);
992}
993
994static void __exit mg_exit(void)
995{
996 printk(KERN_INFO "mflash driver : bye bye\n");
997 platform_driver_unregister(&mg_disk_driver);
998}
999
1000module_init(mg_init);
1001module_exit(mg_exit);
1002
1003MODULE_LICENSE("GPL");
1004MODULE_AUTHOR("unsik Kim <donari75@gmail.com>");
1005MODULE_DESCRIPTION("mGine m[g]flash device driver");
diff --git a/drivers/block/sx8.c b/drivers/block/sx8.c
index a18e1ca0f761..ff0448e4bf03 100644
--- a/drivers/block/sx8.c
+++ b/drivers/block/sx8.c
@@ -1586,9 +1586,9 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1586 goto err_out; 1586 goto err_out;
1587 1587
1588#ifdef IF_64BIT_DMA_IS_POSSIBLE /* grrrr... */ 1588#ifdef IF_64BIT_DMA_IS_POSSIBLE /* grrrr... */
1589 rc = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1589 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1590 if (!rc) { 1590 if (!rc) {
1591 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 1591 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1592 if (rc) { 1592 if (rc) {
1593 printk(KERN_ERR DRV_NAME "(%s): consistent DMA mask failure\n", 1593 printk(KERN_ERR DRV_NAME "(%s): consistent DMA mask failure\n",
1594 pci_name(pdev)); 1594 pci_name(pdev));
@@ -1597,7 +1597,7 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1597 pci_dac = 1; 1597 pci_dac = 1;
1598 } else { 1598 } else {
1599#endif 1599#endif
1600 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1600 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1601 if (rc) { 1601 if (rc) {
1602 printk(KERN_ERR DRV_NAME "(%s): DMA mask failure\n", 1602 printk(KERN_ERR DRV_NAME "(%s): DMA mask failure\n",
1603 pci_name(pdev)); 1603 pci_name(pdev));
diff --git a/drivers/block/umem.c b/drivers/block/umem.c
index c24e1bdbad43..9744d59a69f2 100644
--- a/drivers/block/umem.c
+++ b/drivers/block/umem.c
@@ -829,8 +829,8 @@ static int __devinit mm_pci_probe(struct pci_dev *dev,
829 dev_printk(KERN_INFO, &dev->dev, 829 dev_printk(KERN_INFO, &dev->dev,
830 "Micro Memory(tm) controller found (PCI Mem Module (Battery Backup))\n"); 830 "Micro Memory(tm) controller found (PCI Mem Module (Battery Backup))\n");
831 831
832 if (pci_set_dma_mask(dev, DMA_64BIT_MASK) && 832 if (pci_set_dma_mask(dev, DMA_BIT_MASK(64)) &&
833 pci_set_dma_mask(dev, DMA_32BIT_MASK)) { 833 pci_set_dma_mask(dev, DMA_BIT_MASK(32))) {
834 dev_printk(KERN_WARNING, &dev->dev, "NO suitable DMA found\n"); 834 dev_printk(KERN_WARNING, &dev->dev, "NO suitable DMA found\n");
835 return -ENOMEM; 835 return -ENOMEM;
836 } 836 }
diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c
index 05674febb0c6..73a0765344b6 100644
--- a/drivers/char/applicom.c
+++ b/drivers/char/applicom.c
@@ -75,6 +75,7 @@ MODULE_DEVICE_TABLE(pci, applicom_pci_tbl);
75MODULE_AUTHOR("David Woodhouse & Applicom International"); 75MODULE_AUTHOR("David Woodhouse & Applicom International");
76MODULE_DESCRIPTION("Driver for Applicom Profibus card"); 76MODULE_DESCRIPTION("Driver for Applicom Profibus card");
77MODULE_LICENSE("GPL"); 77MODULE_LICENSE("GPL");
78MODULE_ALIAS_MISCDEV(AC_MINOR);
78 79
79MODULE_SUPPORTED_DEVICE("ac"); 80MODULE_SUPPORTED_DEVICE("ac");
80 81
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
index 272db0e2b491..1fdb9f657d8f 100644
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -646,6 +646,7 @@
646#include <linux/spinlock.h> 646#include <linux/spinlock.h>
647#include <linux/bitops.h> 647#include <linux/bitops.h>
648#include <linux/firmware.h> 648#include <linux/firmware.h>
649#include <linux/device.h>
649 650
650#include <asm/system.h> 651#include <asm/system.h>
651#include <linux/io.h> 652#include <linux/io.h>
@@ -5408,3 +5409,4 @@ module_exit(cy_cleanup_module);
5408 5409
5409MODULE_LICENSE("GPL"); 5410MODULE_LICENSE("GPL");
5410MODULE_VERSION(CY_VERSION); 5411MODULE_VERSION(CY_VERSION);
5412MODULE_ALIAS_CHARDEV_MAJOR(CYCLADES_MAJOR);
diff --git a/drivers/char/esp.c b/drivers/char/esp.c
index 45ec263ec012..a5c59fc2b0ff 100644
--- a/drivers/char/esp.c
+++ b/drivers/char/esp.c
@@ -2258,7 +2258,7 @@ static int esp_open(struct tty_struct *tty, struct file *filp)
2258 * driver. 2258 * driver.
2259 */ 2259 */
2260 2260
2261static void show_serial_version(void) 2261static void __init show_serial_version(void)
2262{ 2262{
2263 printk(KERN_INFO "%s version %s (DMA %u)\n", 2263 printk(KERN_INFO "%s version %s (DMA %u)\n",
2264 serial_name, serial_version, dma); 2264 serial_name, serial_version, dma);
diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c
index 24aa6e88e223..a59eac584d16 100644
--- a/drivers/char/isicom.c
+++ b/drivers/char/isicom.c
@@ -925,6 +925,7 @@ static void isicom_shutdown_port(struct isi_port *port)
925 if (!card->count) 925 if (!card->count)
926 isicom_shutdown_board(card); 926 isicom_shutdown_board(card);
927 } 927 }
928 tty_kref_put(tty);
928} 929}
929 930
930static void isicom_flush_buffer(struct tty_struct *tty) 931static void isicom_flush_buffer(struct tty_struct *tty)
diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c
index 8b0da97d5293..4a4cab73d0be 100644
--- a/drivers/char/moxa.c
+++ b/drivers/char/moxa.c
@@ -1486,11 +1486,11 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
1486 } 1486 }
1487 1487
1488 if (!handle) /* nothing else to do */ 1488 if (!handle) /* nothing else to do */
1489 return 0; 1489 goto put;
1490 1490
1491 intr = readw(ip); /* port irq status */ 1491 intr = readw(ip); /* port irq status */
1492 if (intr == 0) 1492 if (intr == 0)
1493 return 0; 1493 goto put;
1494 1494
1495 writew(0, ip); /* ACK port */ 1495 writew(0, ip); /* ACK port */
1496 ofsAddr = p->tableAddr; 1496 ofsAddr = p->tableAddr;
@@ -1499,16 +1499,17 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
1499 ofsAddr + HostStat); 1499 ofsAddr + HostStat);
1500 1500
1501 if (!inited) 1501 if (!inited)
1502 return 0; 1502 goto put;
1503 1503
1504 if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */ 1504 if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */
1505 tty_insert_flip_char(tty, 0, TTY_BREAK); 1505 tty_insert_flip_char(tty, 0, TTY_BREAK);
1506 tty_schedule_flip(tty); 1506 tty_schedule_flip(tty);
1507 } 1507 }
1508 tty_kref_put(tty);
1509 1508
1510 if (intr & IntrLine) 1509 if (intr & IntrLine)
1511 moxa_new_dcdstate(p, readb(ofsAddr + FlagStat) & DCD_state); 1510 moxa_new_dcdstate(p, readb(ofsAddr + FlagStat) & DCD_state);
1511put:
1512 tty_kref_put(tty);
1512 1513
1513 return 0; 1514 return 0;
1514} 1515}
diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c
index 402c9f217f83..a420e8d437dd 100644
--- a/drivers/char/mxser.c
+++ b/drivers/char/mxser.c
@@ -820,7 +820,6 @@ static void mxser_check_modem_status(struct tty_struct *tty,
820 wake_up_interruptible(&port->port.open_wait); 820 wake_up_interruptible(&port->port.open_wait);
821 } 821 }
822 822
823 tty = tty_port_tty_get(&port->port);
824 if (port->port.flags & ASYNC_CTS_FLOW) { 823 if (port->port.flags & ASYNC_CTS_FLOW) {
825 if (tty->hw_stopped) { 824 if (tty->hw_stopped) {
826 if (status & UART_MSR_CTS) { 825 if (status & UART_MSR_CTS) {
diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c
index 2e8a6eed34be..ce81da5b2da9 100644
--- a/drivers/char/rio/rio_linux.c
+++ b/drivers/char/rio/rio_linux.c
@@ -333,7 +333,7 @@ void rio_copy_to_card(void *from, void __iomem *to, int len)
333 333
334int rio_minor(struct tty_struct *tty) 334int rio_minor(struct tty_struct *tty)
335{ 335{
336 return tty->index + (tty->driver == rio_driver) ? 0 : 256; 336 return tty->index + ((tty->driver == rio_driver) ? 0 : 256);
337} 337}
338 338
339static int rio_set_real_termios(void *ptr) 339static int rio_set_real_termios(void *ptr)
diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c
index 9af8d74875bc..217660451237 100644
--- a/drivers/char/riscom8.c
+++ b/drivers/char/riscom8.c
@@ -48,6 +48,7 @@
48#include <linux/delay.h> 48#include <linux/delay.h>
49#include <linux/tty_flip.h> 49#include <linux/tty_flip.h>
50#include <linux/spinlock.h> 50#include <linux/spinlock.h>
51#include <linux/device.h>
51 52
52#include <linux/uaccess.h> 53#include <linux/uaccess.h>
53 54
@@ -1524,6 +1525,7 @@ module_param(iobase2, int, 0);
1524module_param(iobase3, int, 0); 1525module_param(iobase3, int, 0);
1525 1526
1526MODULE_LICENSE("GPL"); 1527MODULE_LICENSE("GPL");
1528MODULE_ALIAS_CHARDEV_MAJOR(RISCOM8_NORMAL_MAJOR);
1527#endif /* MODULE */ 1529#endif /* MODULE */
1528 1530
1529/* 1531/*
diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c
index 3c67c3d83de9..e72be4190a44 100644
--- a/drivers/char/specialix.c
+++ b/drivers/char/specialix.c
@@ -2365,3 +2365,4 @@ module_init(specialix_init_module);
2365module_exit(specialix_exit_module); 2365module_exit(specialix_exit_module);
2366 2366
2367MODULE_LICENSE("GPL"); 2367MODULE_LICENSE("GPL");
2368MODULE_ALIAS_CHARDEV_MAJOR(SPECIALIX_NORMAL_MAJOR);
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
index 4d85402a9e4a..2bef086fb342 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
@@ -2575,7 +2575,7 @@ static int hifn_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2575 return err; 2575 return err;
2576 pci_set_master(pdev); 2576 pci_set_master(pdev);
2577 2577
2578 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2578 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2579 if (err) 2579 if (err)
2580 goto err_out_disable_pci_device; 2580 goto err_out_disable_pci_device;
2581 2581
diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c
index af9761ccf9f1..f9f05d7a707d 100644
--- a/drivers/crypto/ixp4xx_crypto.c
+++ b/drivers/crypto/ixp4xx_crypto.c
@@ -209,7 +209,7 @@ static struct platform_device pseudo_dev = {
209 .id = 0, 209 .id = 0,
210 .num_resources = 0, 210 .num_resources = 0,
211 .dev = { 211 .dev = {
212 .coherent_dma_mask = DMA_32BIT_MASK, 212 .coherent_dma_mask = DMA_BIT_MASK(32),
213 .release = dev_release, 213 .release = dev_release,
214 } 214 }
215}; 215};
diff --git a/drivers/dma/ioat.c b/drivers/dma/ioat.c
index ed83dd9df192..2225bb6ba3d1 100644
--- a/drivers/dma/ioat.c
+++ b/drivers/dma/ioat.c
@@ -98,15 +98,15 @@ static int __devinit ioat_probe(struct pci_dev *pdev,
98 if (err) 98 if (err)
99 goto err_request_regions; 99 goto err_request_regions;
100 100
101 err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 101 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
102 if (err) 102 if (err)
103 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 103 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
104 if (err) 104 if (err)
105 goto err_set_dma_mask; 105 goto err_set_dma_mask;
106 106
107 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 107 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
108 if (err) 108 if (err)
109 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 109 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
110 if (err) 110 if (err)
111 goto err_set_dma_mask; 111 goto err_set_dma_mask;
112 112
diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c
index 3009e0171e54..18d65fb42ee7 100644
--- a/drivers/firmware/dcdbas.c
+++ b/drivers/firmware/dcdbas.c
@@ -545,7 +545,7 @@ static int __devinit dcdbas_probe(struct platform_device *dev)
545 * BIOS SMI calls require buffer addresses be in 32-bit address space. 545 * BIOS SMI calls require buffer addresses be in 32-bit address space.
546 * This is done by setting the DMA mask below. 546 * This is done by setting the DMA mask below.
547 */ 547 */
548 dcdbas_pdev->dev.coherent_dma_mask = DMA_32BIT_MASK; 548 dcdbas_pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
549 dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask; 549 dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask;
550 550
551 error = sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group); 551 error = sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group);
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index ce52bf2f235e..0e8a9185f676 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -248,6 +248,18 @@ config SENSORS_ASB100
248 This driver can also be built as a module. If so, the module 248 This driver can also be built as a module. If so, the module
249 will be called asb100. 249 will be called asb100.
250 250
251config SENSORS_ATK0110
252 tristate "ASUS ATK0110 ACPI hwmon"
253 depends on X86 && ACPI && EXPERIMENTAL
254 help
255 If you say yes here you get support for the ACPI hardware
256 monitoring interface found in many ASUS motherboards. This
257 driver will provide readings of fans, voltages and temperatures
258 through the system firmware.
259
260 This driver can also be built as a module. If so, the module
261 will be called asus_atk0110.
262
251config SENSORS_ATXP1 263config SENSORS_ATXP1
252 tristate "Attansic ATXP1 VID controller" 264 tristate "Attansic ATXP1 VID controller"
253 depends on I2C && EXPERIMENTAL 265 depends on I2C && EXPERIMENTAL
@@ -358,6 +370,16 @@ config SENSORS_FSCHMD
358 This driver can also be built as a module. If so, the module 370 This driver can also be built as a module. If so, the module
359 will be called fschmd. 371 will be called fschmd.
360 372
373config SENSORS_G760A
374 tristate "GMT G760A"
375 depends on I2C
376 help
377 If you say yes here you get support for Global Mixed-mode
378 Technology Inc G760A fan speed PWM controller chips.
379
380 This driver can also be built as a module. If so, the module
381 will be called g760a.
382
361config SENSORS_GL518SM 383config SENSORS_GL518SM
362 tristate "Genesys Logic GL518SM" 384 tristate "Genesys Logic GL518SM"
363 depends on I2C 385 depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 3a6b1f06f8f4..1d3757837b4f 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -32,6 +32,7 @@ obj-$(CONFIG_SENSORS_ADT7475) += adt7475.o
32 32
33obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o 33obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o
34obj-$(CONFIG_SENSORS_AMS) += ams/ 34obj-$(CONFIG_SENSORS_AMS) += ams/
35obj-$(CONFIG_SENSORS_ATK0110) += asus_atk0110.o
35obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o 36obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o
36obj-$(CONFIG_SENSORS_CORETEMP) += coretemp.o 37obj-$(CONFIG_SENSORS_CORETEMP) += coretemp.o
37obj-$(CONFIG_SENSORS_DME1737) += dme1737.o 38obj-$(CONFIG_SENSORS_DME1737) += dme1737.o
@@ -42,6 +43,7 @@ obj-$(CONFIG_SENSORS_F75375S) += f75375s.o
42obj-$(CONFIG_SENSORS_FSCHER) += fscher.o 43obj-$(CONFIG_SENSORS_FSCHER) += fscher.o
43obj-$(CONFIG_SENSORS_FSCHMD) += fschmd.o 44obj-$(CONFIG_SENSORS_FSCHMD) += fschmd.o
44obj-$(CONFIG_SENSORS_FSCPOS) += fscpos.o 45obj-$(CONFIG_SENSORS_FSCPOS) += fscpos.o
46obj-$(CONFIG_SENSORS_G760A) += g760a.o
45obj-$(CONFIG_SENSORS_GL518SM) += gl518sm.o 47obj-$(CONFIG_SENSORS_GL518SM) += gl518sm.o
46obj-$(CONFIG_SENSORS_GL520SM) += gl520sm.o 48obj-$(CONFIG_SENSORS_GL520SM) += gl520sm.o
47obj-$(CONFIG_SENSORS_ULTRA45) += ultra45_env.o 49obj-$(CONFIG_SENSORS_ULTRA45) += ultra45_env.o
diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
new file mode 100644
index 000000000000..0897edef2574
--- /dev/null
+++ b/drivers/hwmon/asus_atk0110.c
@@ -0,0 +1,1009 @@
1/*
2 * Copyright (C) 2007-2009 Luca Tettamanti <kronos.it@gmail.com>
3 *
4 * This file is released under the GPLv2
5 * See COPYING in the top level directory of the kernel tree.
6 */
7
8#include <linux/kernel.h>
9#include <linux/hwmon.h>
10#include <linux/list.h>
11#include <linux/module.h>
12
13#include <acpi/acpi.h>
14#include <acpi/acpixf.h>
15#include <acpi/acpi_drivers.h>
16#include <acpi/acpi_bus.h>
17
18
19#define ATK_HID "ATK0110"
20
21/* Minimum time between readings, enforced in order to avoid
22 * hogging the CPU.
23 */
24#define CACHE_TIME HZ
25
26#define BOARD_ID "MBIF"
27#define METHOD_ENUMERATE "GGRP"
28#define METHOD_READ "GITM"
29#define METHOD_WRITE "SITM"
30#define METHOD_OLD_READ_TMP "RTMP"
31#define METHOD_OLD_READ_VLT "RVLT"
32#define METHOD_OLD_READ_FAN "RFAN"
33#define METHOD_OLD_ENUM_TMP "TSIF"
34#define METHOD_OLD_ENUM_VLT "VSIF"
35#define METHOD_OLD_ENUM_FAN "FSIF"
36
37#define ATK_MUX_HWMON 0x00000006ULL
38
39#define ATK_CLASS_MASK 0xff000000ULL
40#define ATK_CLASS_FREQ_CTL 0x03000000ULL
41#define ATK_CLASS_FAN_CTL 0x04000000ULL
42#define ATK_CLASS_HWMON 0x06000000ULL
43
44#define ATK_TYPE_MASK 0x00ff0000ULL
45#define HWMON_TYPE_VOLT 0x00020000ULL
46#define HWMON_TYPE_TEMP 0x00030000ULL
47#define HWMON_TYPE_FAN 0x00040000ULL
48
49#define HWMON_SENSOR_ID_MASK 0x0000ffffULL
50
51enum atk_pack_member {
52 HWMON_PACK_FLAGS,
53 HWMON_PACK_NAME,
54 HWMON_PACK_LIMIT1,
55 HWMON_PACK_LIMIT2,
56 HWMON_PACK_ENABLE
57};
58
59/* New package format */
60#define _HWMON_NEW_PACK_SIZE 7
61#define _HWMON_NEW_PACK_FLAGS 0
62#define _HWMON_NEW_PACK_NAME 1
63#define _HWMON_NEW_PACK_UNK1 2
64#define _HWMON_NEW_PACK_UNK2 3
65#define _HWMON_NEW_PACK_LIMIT1 4
66#define _HWMON_NEW_PACK_LIMIT2 5
67#define _HWMON_NEW_PACK_ENABLE 6
68
69/* Old package format */
70#define _HWMON_OLD_PACK_SIZE 5
71#define _HWMON_OLD_PACK_FLAGS 0
72#define _HWMON_OLD_PACK_NAME 1
73#define _HWMON_OLD_PACK_LIMIT1 2
74#define _HWMON_OLD_PACK_LIMIT2 3
75#define _HWMON_OLD_PACK_ENABLE 4
76
77
78struct atk_data {
79 struct device *hwmon_dev;
80 acpi_handle atk_handle;
81 struct acpi_device *acpi_dev;
82
83 bool old_interface;
84
85 /* old interface */
86 acpi_handle rtmp_handle;
87 acpi_handle rvlt_handle;
88 acpi_handle rfan_handle;
89 /* new inteface */
90 acpi_handle enumerate_handle;
91 acpi_handle read_handle;
92
93 int voltage_count;
94 int temperature_count;
95 int fan_count;
96 struct list_head sensor_list;
97};
98
99
100typedef ssize_t (*sysfs_show_func)(struct device *dev,
101 struct device_attribute *attr, char *buf);
102
103static const struct acpi_device_id atk_ids[] = {
104 {ATK_HID, 0},
105 {"", 0},
106};
107MODULE_DEVICE_TABLE(acpi, atk_ids);
108
109#define ATTR_NAME_SIZE 16 /* Worst case is "tempN_input" */
110
111struct atk_sensor_data {
112 struct list_head list;
113 struct atk_data *data;
114 struct device_attribute label_attr;
115 struct device_attribute input_attr;
116 struct device_attribute limit1_attr;
117 struct device_attribute limit2_attr;
118 char label_attr_name[ATTR_NAME_SIZE];
119 char input_attr_name[ATTR_NAME_SIZE];
120 char limit1_attr_name[ATTR_NAME_SIZE];
121 char limit2_attr_name[ATTR_NAME_SIZE];
122 u64 id;
123 u64 type;
124 u64 limit1;
125 u64 limit2;
126 u64 cached_value;
127 unsigned long last_updated; /* in jiffies */
128 bool is_valid;
129 char const *acpi_name;
130};
131
132struct atk_acpi_buffer_u64 {
133 union acpi_object buf;
134 u64 value;
135};
136
137static int atk_add(struct acpi_device *device);
138static int atk_remove(struct acpi_device *device, int type);
139static void atk_print_sensor(struct atk_data *data, union acpi_object *obj);
140static int atk_read_value(struct atk_sensor_data *sensor, u64 *value);
141static void atk_free_sensors(struct atk_data *data);
142
143static struct acpi_driver atk_driver = {
144 .name = ATK_HID,
145 .class = "hwmon",
146 .ids = atk_ids,
147 .ops = {
148 .add = atk_add,
149 .remove = atk_remove,
150 },
151};
152
153#define input_to_atk_sensor(attr) \
154 container_of(attr, struct atk_sensor_data, input_attr)
155
156#define label_to_atk_sensor(attr) \
157 container_of(attr, struct atk_sensor_data, label_attr)
158
159#define limit1_to_atk_sensor(attr) \
160 container_of(attr, struct atk_sensor_data, limit1_attr)
161
162#define limit2_to_atk_sensor(attr) \
163 container_of(attr, struct atk_sensor_data, limit2_attr)
164
165static ssize_t atk_input_show(struct device *dev,
166 struct device_attribute *attr, char *buf)
167{
168 struct atk_sensor_data *s = input_to_atk_sensor(attr);
169 u64 value;
170 int err;
171
172 err = atk_read_value(s, &value);
173 if (err)
174 return err;
175
176 if (s->type == HWMON_TYPE_TEMP)
177 /* ACPI returns decidegree */
178 value *= 100;
179
180 return sprintf(buf, "%llu\n", value);
181}
182
183static ssize_t atk_label_show(struct device *dev,
184 struct device_attribute *attr, char *buf)
185{
186 struct atk_sensor_data *s = label_to_atk_sensor(attr);
187
188 return sprintf(buf, "%s\n", s->acpi_name);
189}
190
191static ssize_t atk_limit1_show(struct device *dev,
192 struct device_attribute *attr, char *buf)
193{
194 struct atk_sensor_data *s = limit1_to_atk_sensor(attr);
195 u64 value = s->limit1;
196
197 if (s->type == HWMON_TYPE_TEMP)
198 value *= 100;
199
200 return sprintf(buf, "%lld\n", value);
201}
202
203static ssize_t atk_limit2_show(struct device *dev,
204 struct device_attribute *attr, char *buf)
205{
206 struct atk_sensor_data *s = limit2_to_atk_sensor(attr);
207 u64 value = s->limit2;
208
209 if (s->type == HWMON_TYPE_TEMP)
210 value *= 100;
211
212 return sprintf(buf, "%lld\n", value);
213}
214
215static ssize_t atk_name_show(struct device *dev,
216 struct device_attribute *attr, char *buf)
217{
218 return sprintf(buf, "atk0110\n");
219}
220static struct device_attribute atk_name_attr =
221 __ATTR(name, 0444, atk_name_show, NULL);
222
223static void atk_init_attribute(struct device_attribute *attr, char *name,
224 sysfs_show_func show)
225{
226 attr->attr.name = name;
227 attr->attr.mode = 0444;
228 attr->show = show;
229 attr->store = NULL;
230}
231
232
233static union acpi_object *atk_get_pack_member(struct atk_data *data,
234 union acpi_object *pack,
235 enum atk_pack_member m)
236{
237 bool old_if = data->old_interface;
238 int offset;
239
240 switch (m) {
241 case HWMON_PACK_FLAGS:
242 offset = old_if ? _HWMON_OLD_PACK_FLAGS : _HWMON_NEW_PACK_FLAGS;
243 break;
244 case HWMON_PACK_NAME:
245 offset = old_if ? _HWMON_OLD_PACK_NAME : _HWMON_NEW_PACK_NAME;
246 break;
247 case HWMON_PACK_LIMIT1:
248 offset = old_if ? _HWMON_OLD_PACK_LIMIT1 :
249 _HWMON_NEW_PACK_LIMIT1;
250 break;
251 case HWMON_PACK_LIMIT2:
252 offset = old_if ? _HWMON_OLD_PACK_LIMIT2 :
253 _HWMON_NEW_PACK_LIMIT2;
254 break;
255 case HWMON_PACK_ENABLE:
256 offset = old_if ? _HWMON_OLD_PACK_ENABLE :
257 _HWMON_NEW_PACK_ENABLE;
258 break;
259 default:
260 return NULL;
261 }
262
263 return &pack->package.elements[offset];
264}
265
266
267/* New package format is:
268 * - flag (int)
269 * class - used for de-muxing the request to the correct GITn
270 * type (volt, temp, fan)
271 * sensor id |
272 * sensor id - used for de-muxing the request _inside_ the GITn
273 * - name (str)
274 * - unknown (int)
275 * - unknown (int)
276 * - limit1 (int)
277 * - limit2 (int)
278 * - enable (int)
279 *
280 * The old package has the same format but it's missing the two unknown fields.
281 */
282static int validate_hwmon_pack(struct atk_data *data, union acpi_object *obj)
283{
284 struct device *dev = &data->acpi_dev->dev;
285 union acpi_object *tmp;
286 bool old_if = data->old_interface;
287 int const expected_size = old_if ? _HWMON_OLD_PACK_SIZE :
288 _HWMON_NEW_PACK_SIZE;
289
290 if (obj->type != ACPI_TYPE_PACKAGE) {
291 dev_warn(dev, "Invalid type: %d\n", obj->type);
292 return -EINVAL;
293 }
294
295 if (obj->package.count != expected_size) {
296 dev_warn(dev, "Invalid package size: %d, expected: %d\n",
297 obj->package.count, expected_size);
298 return -EINVAL;
299 }
300
301 tmp = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
302 if (tmp->type != ACPI_TYPE_INTEGER) {
303 dev_warn(dev, "Invalid type (flag): %d\n", tmp->type);
304 return -EINVAL;
305 }
306
307 tmp = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
308 if (tmp->type != ACPI_TYPE_STRING) {
309 dev_warn(dev, "Invalid type (name): %d\n", tmp->type);
310 return -EINVAL;
311 }
312
313 /* Don't check... we don't know what they're useful for anyway */
314#if 0
315 tmp = &obj->package.elements[HWMON_PACK_UNK1];
316 if (tmp->type != ACPI_TYPE_INTEGER) {
317 dev_warn(dev, "Invalid type (unk1): %d\n", tmp->type);
318 return -EINVAL;
319 }
320
321 tmp = &obj->package.elements[HWMON_PACK_UNK2];
322 if (tmp->type != ACPI_TYPE_INTEGER) {
323 dev_warn(dev, "Invalid type (unk2): %d\n", tmp->type);
324 return -EINVAL;
325 }
326#endif
327
328 tmp = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
329 if (tmp->type != ACPI_TYPE_INTEGER) {
330 dev_warn(dev, "Invalid type (limit1): %d\n", tmp->type);
331 return -EINVAL;
332 }
333
334 tmp = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
335 if (tmp->type != ACPI_TYPE_INTEGER) {
336 dev_warn(dev, "Invalid type (limit2): %d\n", tmp->type);
337 return -EINVAL;
338 }
339
340 tmp = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
341 if (tmp->type != ACPI_TYPE_INTEGER) {
342 dev_warn(dev, "Invalid type (enable): %d\n", tmp->type);
343 return -EINVAL;
344 }
345
346 atk_print_sensor(data, obj);
347
348 return 0;
349}
350
351static char const *atk_sensor_type(union acpi_object *flags)
352{
353 u64 type = flags->integer.value & ATK_TYPE_MASK;
354 char const *what;
355
356 switch (type) {
357 case HWMON_TYPE_VOLT:
358 what = "voltage";
359 break;
360 case HWMON_TYPE_TEMP:
361 what = "temperature";
362 break;
363 case HWMON_TYPE_FAN:
364 what = "fan";
365 break;
366 default:
367 what = "unknown";
368 break;
369 }
370
371 return what;
372}
373
374static void atk_print_sensor(struct atk_data *data, union acpi_object *obj)
375{
376#ifdef DEBUG
377 struct device *dev = &data->acpi_dev->dev;
378 union acpi_object *flags;
379 union acpi_object *name;
380 union acpi_object *limit1;
381 union acpi_object *limit2;
382 union acpi_object *enable;
383 char const *what;
384
385 flags = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
386 name = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
387 limit1 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
388 limit2 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
389 enable = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
390
391 what = atk_sensor_type(flags);
392
393 dev_dbg(dev, "%s: %#llx %s [%llu-%llu] %s\n", what,
394 flags->integer.value,
395 name->string.pointer,
396 limit1->integer.value, limit2->integer.value,
397 enable->integer.value ? "enabled" : "disabled");
398#endif
399}
400
401static int atk_read_value_old(struct atk_sensor_data *sensor, u64 *value)
402{
403 struct atk_data *data = sensor->data;
404 struct device *dev = &data->acpi_dev->dev;
405 struct acpi_object_list params;
406 union acpi_object id;
407 acpi_status status;
408 acpi_handle method;
409
410 switch (sensor->type) {
411 case HWMON_TYPE_VOLT:
412 method = data->rvlt_handle;
413 break;
414 case HWMON_TYPE_TEMP:
415 method = data->rtmp_handle;
416 break;
417 case HWMON_TYPE_FAN:
418 method = data->rfan_handle;
419 break;
420 default:
421 return -EINVAL;
422 }
423
424 id.type = ACPI_TYPE_INTEGER;
425 id.integer.value = sensor->id;
426
427 params.count = 1;
428 params.pointer = &id;
429
430 status = acpi_evaluate_integer(method, NULL, &params, value);
431 if (status != AE_OK) {
432 dev_warn(dev, "%s: ACPI exception: %s\n", __func__,
433 acpi_format_exception(status));
434 return -EIO;
435 }
436
437 return 0;
438}
439
440static int atk_read_value_new(struct atk_sensor_data *sensor, u64 *value)
441{
442 struct atk_data *data = sensor->data;
443 struct device *dev = &data->acpi_dev->dev;
444 struct acpi_object_list params;
445 struct acpi_buffer ret;
446 union acpi_object id;
447 struct atk_acpi_buffer_u64 tmp;
448 acpi_status status;
449
450 id.type = ACPI_TYPE_INTEGER;
451 id.integer.value = sensor->id;
452
453 params.count = 1;
454 params.pointer = &id;
455
456 tmp.buf.type = ACPI_TYPE_BUFFER;
457 tmp.buf.buffer.pointer = (u8 *)&tmp.value;
458 tmp.buf.buffer.length = sizeof(u64);
459 ret.length = sizeof(tmp);
460 ret.pointer = &tmp;
461
462 status = acpi_evaluate_object_typed(data->read_handle, NULL, &params,
463 &ret, ACPI_TYPE_BUFFER);
464 if (status != AE_OK) {
465 dev_warn(dev, "%s: ACPI exception: %s\n", __func__,
466 acpi_format_exception(status));
467 return -EIO;
468 }
469
470 /* Return buffer format:
471 * [0-3] "value" is valid flag
472 * [4-7] value
473 */
474 if (!(tmp.value & 0xffffffff)) {
475 /* The reading is not valid, possible causes:
476 * - sensor failure
477 * - enumeration was FUBAR (and we didn't notice)
478 */
479 dev_info(dev, "Failure: %#llx\n", tmp.value);
480 return -EIO;
481 }
482
483 *value = (tmp.value & 0xffffffff00000000ULL) >> 32;
484
485 return 0;
486}
487
488static int atk_read_value(struct atk_sensor_data *sensor, u64 *value)
489{
490 int err;
491
492 if (!sensor->is_valid ||
493 time_after(jiffies, sensor->last_updated + CACHE_TIME)) {
494 if (sensor->data->old_interface)
495 err = atk_read_value_old(sensor, value);
496 else
497 err = atk_read_value_new(sensor, value);
498
499 sensor->is_valid = true;
500 sensor->last_updated = jiffies;
501 sensor->cached_value = *value;
502 } else {
503 *value = sensor->cached_value;
504 err = 0;
505 }
506
507 return err;
508}
509
510static int atk_add_sensor(struct atk_data *data, union acpi_object *obj)
511{
512 struct device *dev = &data->acpi_dev->dev;
513 union acpi_object *flags;
514 union acpi_object *name;
515 union acpi_object *limit1;
516 union acpi_object *limit2;
517 union acpi_object *enable;
518 struct atk_sensor_data *sensor;
519 char const *base_name;
520 char const *limit1_name;
521 char const *limit2_name;
522 u64 type;
523 int err;
524 int *num;
525 int start;
526
527 if (obj->type != ACPI_TYPE_PACKAGE) {
528 /* wft is this? */
529 dev_warn(dev, "Unknown type for ACPI object: (%d)\n",
530 obj->type);
531 return -EINVAL;
532 }
533
534 err = validate_hwmon_pack(data, obj);
535 if (err)
536 return err;
537
538 /* Ok, we have a valid hwmon package */
539 type = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS)->integer.value
540 & ATK_TYPE_MASK;
541
542 switch (type) {
543 case HWMON_TYPE_VOLT:
544 base_name = "in";
545 limit1_name = "min";
546 limit2_name = "max";
547 num = &data->voltage_count;
548 start = 0;
549 break;
550 case HWMON_TYPE_TEMP:
551 base_name = "temp";
552 limit1_name = "max";
553 limit2_name = "crit";
554 num = &data->temperature_count;
555 start = 1;
556 break;
557 case HWMON_TYPE_FAN:
558 base_name = "fan";
559 limit1_name = "min";
560 limit2_name = "max";
561 num = &data->fan_count;
562 start = 1;
563 break;
564 default:
565 dev_warn(dev, "Unknown sensor type: %#llx\n", type);
566 return -EINVAL;
567 }
568
569 enable = atk_get_pack_member(data, obj, HWMON_PACK_ENABLE);
570 if (!enable->integer.value)
571 /* sensor is disabled */
572 return 0;
573
574 flags = atk_get_pack_member(data, obj, HWMON_PACK_FLAGS);
575 name = atk_get_pack_member(data, obj, HWMON_PACK_NAME);
576 limit1 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT1);
577 limit2 = atk_get_pack_member(data, obj, HWMON_PACK_LIMIT2);
578
579 sensor = kzalloc(sizeof(*sensor), GFP_KERNEL);
580 if (!sensor)
581 return -ENOMEM;
582
583 sensor->acpi_name = kstrdup(name->string.pointer, GFP_KERNEL);
584 if (!sensor->acpi_name) {
585 err = -ENOMEM;
586 goto out;
587 }
588
589 INIT_LIST_HEAD(&sensor->list);
590 sensor->type = type;
591 sensor->data = data;
592 sensor->id = flags->integer.value;
593 sensor->limit1 = limit1->integer.value;
594 sensor->limit2 = limit2->integer.value;
595
596 snprintf(sensor->input_attr_name, ATTR_NAME_SIZE,
597 "%s%d_input", base_name, start + *num);
598 atk_init_attribute(&sensor->input_attr,
599 sensor->input_attr_name,
600 atk_input_show);
601
602 snprintf(sensor->label_attr_name, ATTR_NAME_SIZE,
603 "%s%d_label", base_name, start + *num);
604 atk_init_attribute(&sensor->label_attr,
605 sensor->label_attr_name,
606 atk_label_show);
607
608 snprintf(sensor->limit1_attr_name, ATTR_NAME_SIZE,
609 "%s%d_%s", base_name, start + *num, limit1_name);
610 atk_init_attribute(&sensor->limit1_attr,
611 sensor->limit1_attr_name,
612 atk_limit1_show);
613
614 snprintf(sensor->limit2_attr_name, ATTR_NAME_SIZE,
615 "%s%d_%s", base_name, start + *num, limit2_name);
616 atk_init_attribute(&sensor->limit2_attr,
617 sensor->limit2_attr_name,
618 atk_limit2_show);
619
620 list_add(&sensor->list, &data->sensor_list);
621 (*num)++;
622
623 return 1;
624out:
625 kfree(sensor->acpi_name);
626 kfree(sensor);
627 return err;
628}
629
630static int atk_enumerate_old_hwmon(struct atk_data *data)
631{
632 struct device *dev = &data->acpi_dev->dev;
633 struct acpi_buffer buf;
634 union acpi_object *pack;
635 acpi_status status;
636 int i, ret;
637 int count = 0;
638
639 /* Voltages */
640 buf.length = ACPI_ALLOCATE_BUFFER;
641 status = acpi_evaluate_object_typed(data->atk_handle,
642 METHOD_OLD_ENUM_VLT, NULL, &buf, ACPI_TYPE_PACKAGE);
643 if (status != AE_OK) {
644 dev_warn(dev, METHOD_OLD_ENUM_VLT ": ACPI exception: %s\n",
645 acpi_format_exception(status));
646
647 return -ENODEV;
648 }
649
650 pack = buf.pointer;
651 for (i = 1; i < pack->package.count; i++) {
652 union acpi_object *obj = &pack->package.elements[i];
653
654 ret = atk_add_sensor(data, obj);
655 if (ret > 0)
656 count++;
657 }
658 ACPI_FREE(buf.pointer);
659
660 /* Temperatures */
661 buf.length = ACPI_ALLOCATE_BUFFER;
662 status = acpi_evaluate_object_typed(data->atk_handle,
663 METHOD_OLD_ENUM_TMP, NULL, &buf, ACPI_TYPE_PACKAGE);
664 if (status != AE_OK) {
665 dev_warn(dev, METHOD_OLD_ENUM_TMP ": ACPI exception: %s\n",
666 acpi_format_exception(status));
667
668 ret = -ENODEV;
669 goto cleanup;
670 }
671
672 pack = buf.pointer;
673 for (i = 1; i < pack->package.count; i++) {
674 union acpi_object *obj = &pack->package.elements[i];
675
676 ret = atk_add_sensor(data, obj);
677 if (ret > 0)
678 count++;
679 }
680 ACPI_FREE(buf.pointer);
681
682 /* Fans */
683 buf.length = ACPI_ALLOCATE_BUFFER;
684 status = acpi_evaluate_object_typed(data->atk_handle,
685 METHOD_OLD_ENUM_FAN, NULL, &buf, ACPI_TYPE_PACKAGE);
686 if (status != AE_OK) {
687 dev_warn(dev, METHOD_OLD_ENUM_FAN ": ACPI exception: %s\n",
688 acpi_format_exception(status));
689
690 ret = -ENODEV;
691 goto cleanup;
692 }
693
694 pack = buf.pointer;
695 for (i = 1; i < pack->package.count; i++) {
696 union acpi_object *obj = &pack->package.elements[i];
697
698 ret = atk_add_sensor(data, obj);
699 if (ret > 0)
700 count++;
701 }
702 ACPI_FREE(buf.pointer);
703
704 return count;
705cleanup:
706 atk_free_sensors(data);
707 return ret;
708}
709
710static int atk_enumerate_new_hwmon(struct atk_data *data)
711{
712 struct device *dev = &data->acpi_dev->dev;
713 struct acpi_buffer buf;
714 acpi_status ret;
715 struct acpi_object_list params;
716 union acpi_object id;
717 union acpi_object *pack;
718 int err;
719 int i;
720
721 dev_dbg(dev, "Enumerating hwmon sensors\n");
722
723 id.type = ACPI_TYPE_INTEGER;
724 id.integer.value = ATK_MUX_HWMON;
725 params.count = 1;
726 params.pointer = &id;
727
728 buf.length = ACPI_ALLOCATE_BUFFER;
729 ret = acpi_evaluate_object_typed(data->enumerate_handle, NULL, &params,
730 &buf, ACPI_TYPE_PACKAGE);
731 if (ret != AE_OK) {
732 dev_warn(dev, METHOD_ENUMERATE ": ACPI exception: %s\n",
733 acpi_format_exception(ret));
734 return -ENODEV;
735 }
736
737 /* Result must be a package */
738 pack = buf.pointer;
739
740 if (pack->package.count < 1) {
741 dev_dbg(dev, "%s: hwmon package is too small: %d\n", __func__,
742 pack->package.count);
743 err = -EINVAL;
744 goto out;
745 }
746
747 for (i = 0; i < pack->package.count; i++) {
748 union acpi_object *obj = &pack->package.elements[i];
749
750 atk_add_sensor(data, obj);
751 }
752
753 err = data->voltage_count + data->temperature_count + data->fan_count;
754
755out:
756 ACPI_FREE(buf.pointer);
757 return err;
758}
759
760static int atk_create_files(struct atk_data *data)
761{
762 struct atk_sensor_data *s;
763 int err;
764
765 list_for_each_entry(s, &data->sensor_list, list) {
766 err = device_create_file(data->hwmon_dev, &s->input_attr);
767 if (err)
768 return err;
769 err = device_create_file(data->hwmon_dev, &s->label_attr);
770 if (err)
771 return err;
772 err = device_create_file(data->hwmon_dev, &s->limit1_attr);
773 if (err)
774 return err;
775 err = device_create_file(data->hwmon_dev, &s->limit2_attr);
776 if (err)
777 return err;
778 }
779
780 err = device_create_file(data->hwmon_dev, &atk_name_attr);
781
782 return err;
783}
784
785static void atk_remove_files(struct atk_data *data)
786{
787 struct atk_sensor_data *s;
788
789 list_for_each_entry(s, &data->sensor_list, list) {
790 device_remove_file(data->hwmon_dev, &s->input_attr);
791 device_remove_file(data->hwmon_dev, &s->label_attr);
792 device_remove_file(data->hwmon_dev, &s->limit1_attr);
793 device_remove_file(data->hwmon_dev, &s->limit2_attr);
794 }
795 device_remove_file(data->hwmon_dev, &atk_name_attr);
796}
797
798static void atk_free_sensors(struct atk_data *data)
799{
800 struct list_head *head = &data->sensor_list;
801 struct atk_sensor_data *s, *tmp;
802
803 list_for_each_entry_safe(s, tmp, head, list) {
804 kfree(s->acpi_name);
805 kfree(s);
806 }
807}
808
809static int atk_register_hwmon(struct atk_data *data)
810{
811 struct device *dev = &data->acpi_dev->dev;
812 int err;
813
814 dev_dbg(dev, "registering hwmon device\n");
815 data->hwmon_dev = hwmon_device_register(dev);
816 if (IS_ERR(data->hwmon_dev))
817 return PTR_ERR(data->hwmon_dev);
818
819 dev_dbg(dev, "populating sysfs directory\n");
820 err = atk_create_files(data);
821 if (err)
822 goto remove;
823
824 return 0;
825remove:
826 /* Cleanup the registered files */
827 atk_remove_files(data);
828 hwmon_device_unregister(data->hwmon_dev);
829 return err;
830}
831
832static int atk_check_old_if(struct atk_data *data)
833{
834 struct device *dev = &data->acpi_dev->dev;
835 acpi_handle ret;
836 acpi_status status;
837
838 /* RTMP: read temperature */
839 status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_TMP, &ret);
840 if (status != AE_OK) {
841 dev_dbg(dev, "method " METHOD_OLD_READ_TMP " not found: %s\n",
842 acpi_format_exception(status));
843 return -ENODEV;
844 }
845 data->rtmp_handle = ret;
846
847 /* RVLT: read voltage */
848 status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_VLT, &ret);
849 if (status != AE_OK) {
850 dev_dbg(dev, "method " METHOD_OLD_READ_VLT " not found: %s\n",
851 acpi_format_exception(status));
852 return -ENODEV;
853 }
854 data->rvlt_handle = ret;
855
856 /* RFAN: read fan status */
857 status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_FAN, &ret);
858 if (status != AE_OK) {
859 dev_dbg(dev, "method " METHOD_OLD_READ_FAN " not found: %s\n",
860 acpi_format_exception(status));
861 return -ENODEV;
862 }
863 data->rfan_handle = ret;
864
865 return 0;
866}
867
868static int atk_check_new_if(struct atk_data *data)
869{
870 struct device *dev = &data->acpi_dev->dev;
871 acpi_handle ret;
872 acpi_status status;
873
874 /* Enumeration */
875 status = acpi_get_handle(data->atk_handle, METHOD_ENUMERATE, &ret);
876 if (status != AE_OK) {
877 dev_dbg(dev, "method " METHOD_ENUMERATE " not found: %s\n",
878 acpi_format_exception(status));
879 return -ENODEV;
880 }
881 data->enumerate_handle = ret;
882
883 /* De-multiplexer (read) */
884 status = acpi_get_handle(data->atk_handle, METHOD_READ, &ret);
885 if (status != AE_OK) {
886 dev_dbg(dev, "method " METHOD_READ " not found: %s\n",
887 acpi_format_exception(status));
888 return -ENODEV;
889 }
890 data->read_handle = ret;
891
892 return 0;
893}
894
895static int atk_add(struct acpi_device *device)
896{
897 acpi_status ret;
898 int err;
899 struct acpi_buffer buf;
900 union acpi_object *obj;
901 struct atk_data *data;
902
903 dev_dbg(&device->dev, "adding...\n");
904
905 data = kzalloc(sizeof(*data), GFP_KERNEL);
906 if (!data)
907 return -ENOMEM;
908
909 data->acpi_dev = device;
910 data->atk_handle = device->handle;
911 INIT_LIST_HEAD(&data->sensor_list);
912
913 buf.length = ACPI_ALLOCATE_BUFFER;
914 ret = acpi_evaluate_object_typed(data->atk_handle, BOARD_ID, NULL,
915 &buf, ACPI_TYPE_PACKAGE);
916 if (ret != AE_OK) {
917 dev_dbg(&device->dev, "atk: method MBIF not found\n");
918 err = -ENODEV;
919 goto out;
920 }
921
922 obj = buf.pointer;
923 if (obj->package.count >= 2 &&
924 obj->package.elements[1].type == ACPI_TYPE_STRING) {
925 dev_dbg(&device->dev, "board ID = %s\n",
926 obj->package.elements[1].string.pointer);
927 }
928 ACPI_FREE(buf.pointer);
929
930 /* Check for hwmon methods: first check "old" style methods; note that
931 * both may be present: in this case we stick to the old interface;
932 * analysis of multiple DSDTs indicates that when both interfaces
933 * are present the new one (GGRP/GITM) is not functional.
934 */
935 err = atk_check_old_if(data);
936 if (!err) {
937 dev_dbg(&device->dev, "Using old hwmon interface\n");
938 data->old_interface = true;
939 } else {
940 err = atk_check_new_if(data);
941 if (err)
942 goto out;
943
944 dev_dbg(&device->dev, "Using new hwmon interface\n");
945 data->old_interface = false;
946 }
947
948 if (data->old_interface)
949 err = atk_enumerate_old_hwmon(data);
950 else
951 err = atk_enumerate_new_hwmon(data);
952 if (err < 0)
953 goto out;
954 if (err == 0) {
955 dev_info(&device->dev,
956 "No usable sensor detected, bailing out\n");
957 err = -ENODEV;
958 goto out;
959 }
960
961 err = atk_register_hwmon(data);
962 if (err)
963 goto cleanup;
964
965 device->driver_data = data;
966 return 0;
967cleanup:
968 atk_free_sensors(data);
969out:
970 kfree(data);
971 return err;
972}
973
974static int atk_remove(struct acpi_device *device, int type)
975{
976 struct atk_data *data = device->driver_data;
977 dev_dbg(&device->dev, "removing...\n");
978
979 device->driver_data = NULL;
980
981 atk_remove_files(data);
982 atk_free_sensors(data);
983 hwmon_device_unregister(data->hwmon_dev);
984
985 kfree(data);
986
987 return 0;
988}
989
990static int __init atk0110_init(void)
991{
992 int ret;
993
994 ret = acpi_bus_register_driver(&atk_driver);
995 if (ret)
996 pr_info("atk: acpi_bus_register_driver failed: %d\n", ret);
997
998 return ret;
999}
1000
1001static void __exit atk0110_exit(void)
1002{
1003 acpi_bus_unregister_driver(&atk_driver);
1004}
1005
1006module_init(atk0110_init);
1007module_exit(atk0110_exit);
1008
1009MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/g760a.c b/drivers/hwmon/g760a.c
new file mode 100644
index 000000000000..19c01a49f6be
--- /dev/null
+++ b/drivers/hwmon/g760a.c
@@ -0,0 +1,272 @@
1/*
2 g760a - Driver for the Global Mixed-mode Technology Inc. G760A
3 fan speed PWM controller chip
4
5 Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
6
7 Complete datasheet is available at GMT's website:
8 http://www.gmt.com.tw/datasheet/g760a.pdf
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14*/
15
16#include <linux/module.h>
17#include <linux/init.h>
18#include <linux/slab.h>
19#include <linux/jiffies.h>
20#include <linux/i2c.h>
21#include <linux/hwmon.h>
22#include <linux/hwmon-sysfs.h>
23#include <linux/err.h>
24#include <linux/mutex.h>
25#include <linux/sysfs.h>
26
27static const struct i2c_device_id g760a_id[] = {
28 { "g760a", 0 },
29 { }
30};
31MODULE_DEVICE_TABLE(i2c, g760a_id);
32
33enum g760a_regs {
34 G760A_REG_SET_CNT = 0x00,
35 G760A_REG_ACT_CNT = 0x01,
36 G760A_REG_FAN_STA = 0x02
37};
38
39#define G760A_REG_FAN_STA_RPM_OFF 0x1 /* +/-20% off */
40#define G760A_REG_FAN_STA_RPM_LOW 0x2 /* below 1920rpm */
41
42/* register data is read (and cached) at most once per second */
43#define G760A_UPDATE_INTERVAL (HZ)
44
45struct g760a_data {
46 struct i2c_client *client;
47 struct device *hwmon_dev;
48 struct mutex update_lock;
49
50 /* board specific parameters */
51 u32 clk; /* default 32kHz */
52 u16 fan_div; /* default P=2 */
53
54 /* g760a register cache */
55 unsigned int valid:1;
56 unsigned long last_updated; /* In jiffies */
57
58 u8 set_cnt; /* PWM (period) count number; 0xff stops fan */
59 u8 act_cnt; /* formula: cnt = (CLK * 30)/(rpm * P) */
60 u8 fan_sta; /* bit 0: set when actual fan speed more than 20%
61 * outside requested fan speed
62 * bit 1: set when fan speed below 1920 rpm */
63};
64
65#define G760A_DEFAULT_CLK 32768
66#define G760A_DEFAULT_FAN_DIV 2
67
68#define PWM_FROM_CNT(cnt) (0xff-(cnt))
69#define PWM_TO_CNT(pwm) (0xff-(pwm))
70
71unsigned int rpm_from_cnt(u8 val, u32 clk, u16 div)
72{
73 return ((val == 0x00) ? 0 : ((clk*30)/(val*div)));
74}
75
76/* new-style driver model */
77static int g760a_probe(struct i2c_client *client,
78 const struct i2c_device_id *id);
79static int g760a_remove(struct i2c_client *client);
80
81static struct i2c_driver g760a_driver = {
82 .driver = {
83 .name = "g760a",
84 },
85 .probe = g760a_probe,
86 .remove = g760a_remove,
87 .id_table = g760a_id,
88};
89
90/* read/write wrappers */
91static int g760a_read_value(struct i2c_client *client, enum g760a_regs reg)
92{
93 return i2c_smbus_read_byte_data(client, reg);
94}
95
96static int g760a_write_value(struct i2c_client *client, enum g760a_regs reg,
97 u16 value)
98{
99 return i2c_smbus_write_byte_data(client, reg, value);
100}
101
102/****************************************************************************
103 * sysfs attributes
104 */
105
106static struct g760a_data *g760a_update_client(struct device *dev)
107{
108 struct i2c_client *client = to_i2c_client(dev);
109 struct g760a_data *data = i2c_get_clientdata(client);
110
111 mutex_lock(&data->update_lock);
112
113 if (time_after(jiffies, data->last_updated + G760A_UPDATE_INTERVAL)
114 || !data->valid) {
115 dev_dbg(&client->dev, "Starting g760a update\n");
116
117 data->set_cnt = g760a_read_value(client, G760A_REG_SET_CNT);
118 data->act_cnt = g760a_read_value(client, G760A_REG_ACT_CNT);
119 data->fan_sta = g760a_read_value(client, G760A_REG_FAN_STA);
120
121 data->last_updated = jiffies;
122 data->valid = 1;
123 }
124
125 mutex_unlock(&data->update_lock);
126
127 return data;
128}
129
130static ssize_t show_fan(struct device *dev, struct device_attribute *da,
131 char *buf)
132{
133 struct g760a_data *data = g760a_update_client(dev);
134 unsigned int rpm = 0;
135
136 mutex_lock(&data->update_lock);
137 if (!(data->fan_sta & G760A_REG_FAN_STA_RPM_LOW))
138 rpm = rpm_from_cnt(data->act_cnt, data->clk, data->fan_div);
139 mutex_unlock(&data->update_lock);
140
141 return sprintf(buf, "%d\n", rpm);
142}
143
144static ssize_t show_fan_alarm(struct device *dev, struct device_attribute *da,
145 char *buf)
146{
147 struct g760a_data *data = g760a_update_client(dev);
148
149 int fan_alarm = (data->fan_sta & G760A_REG_FAN_STA_RPM_OFF) ? 1 : 0;
150
151 return sprintf(buf, "%d\n", fan_alarm);
152}
153
154static ssize_t get_pwm(struct device *dev, struct device_attribute *da,
155 char *buf)
156{
157 struct g760a_data *data = g760a_update_client(dev);
158
159 return sprintf(buf, "%d\n", PWM_FROM_CNT(data->set_cnt));
160}
161
162static ssize_t set_pwm(struct device *dev, struct device_attribute *da,
163 const char *buf, size_t count)
164{
165 struct i2c_client *client = to_i2c_client(dev);
166 struct g760a_data *data = g760a_update_client(dev);
167 unsigned long val;
168
169 if (strict_strtoul(buf, 10, &val))
170 return -EINVAL;
171
172 mutex_lock(&data->update_lock);
173 data->set_cnt = PWM_TO_CNT(SENSORS_LIMIT(val, 0, 255));
174 g760a_write_value(client, G760A_REG_SET_CNT, data->set_cnt);
175 mutex_unlock(&data->update_lock);
176
177 return count;
178}
179
180static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, get_pwm, set_pwm);
181static DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL);
182static DEVICE_ATTR(fan1_alarm, S_IRUGO, show_fan_alarm, NULL);
183
184static struct attribute *g760a_attributes[] = {
185 &dev_attr_pwm1.attr,
186 &dev_attr_fan1_input.attr,
187 &dev_attr_fan1_alarm.attr,
188 NULL
189};
190
191static const struct attribute_group g760a_group = {
192 .attrs = g760a_attributes,
193};
194
195/****************************************************************************
196 * new-style driver model code
197 */
198
199static int g760a_probe(struct i2c_client *client,
200 const struct i2c_device_id *id)
201{
202 struct g760a_data *data;
203 int err;
204
205 if (!i2c_check_functionality(client->adapter,
206 I2C_FUNC_SMBUS_BYTE_DATA))
207 return -EIO;
208
209 data = kzalloc(sizeof(struct g760a_data), GFP_KERNEL);
210 if (!data)
211 return -ENOMEM;
212
213 i2c_set_clientdata(client, data);
214
215 data->client = client;
216 mutex_init(&data->update_lock);
217
218 /* setup default configuration for now */
219 data->fan_div = G760A_DEFAULT_FAN_DIV;
220 data->clk = G760A_DEFAULT_CLK;
221
222 /* Register sysfs hooks */
223 err = sysfs_create_group(&client->dev.kobj, &g760a_group);
224 if (err)
225 goto error_sysfs_create_group;
226
227 data->hwmon_dev = hwmon_device_register(&client->dev);
228 if (IS_ERR(data->hwmon_dev)) {
229 err = PTR_ERR(data->hwmon_dev);
230 goto error_hwmon_device_register;
231 }
232
233 return 0;
234
235error_hwmon_device_register:
236 sysfs_remove_group(&client->dev.kobj, &g760a_group);
237error_sysfs_create_group:
238 kfree(data);
239 i2c_set_clientdata(client, NULL);
240
241 return err;
242}
243
244static int g760a_remove(struct i2c_client *client)
245{
246 struct g760a_data *data = i2c_get_clientdata(client);
247 hwmon_device_unregister(data->hwmon_dev);
248 sysfs_remove_group(&client->dev.kobj, &g760a_group);
249 kfree(data);
250 i2c_set_clientdata(client, NULL);
251
252 return 0;
253}
254
255/* module management */
256
257static int __init g760a_init(void)
258{
259 return i2c_add_driver(&g760a_driver);
260}
261
262static void __exit g760a_exit(void)
263{
264 i2c_del_driver(&g760a_driver);
265}
266
267MODULE_AUTHOR("Herbert Valerio Riedel <hvr@gnu.org>");
268MODULE_DESCRIPTION("GMT G760A driver");
269MODULE_LICENSE("GPL");
270
271module_init(g760a_init);
272module_exit(g760a_exit);
diff --git a/drivers/hwmon/lm95241.c b/drivers/hwmon/lm95241.c
index 091d95f38aaa..e34f9e402a2c 100644
--- a/drivers/hwmon/lm95241.c
+++ b/drivers/hwmon/lm95241.c
@@ -87,25 +87,11 @@ I2C_CLIENT_INSMOD_1(lm95241);
87 (val_h)) * 1000 + (val_l) * 1000 / 256) 87 (val_h)) * 1000 + (val_l) * 1000 / 256)
88 88
89/* Functions declaration */ 89/* Functions declaration */
90static int lm95241_attach_adapter(struct i2c_adapter *adapter);
91static int lm95241_detect(struct i2c_adapter *adapter, int address,
92 int kind);
93static void lm95241_init_client(struct i2c_client *client); 90static void lm95241_init_client(struct i2c_client *client);
94static int lm95241_detach_client(struct i2c_client *client);
95static struct lm95241_data *lm95241_update_device(struct device *dev); 91static struct lm95241_data *lm95241_update_device(struct device *dev);
96 92
97/* Driver data (common to all clients) */
98static struct i2c_driver lm95241_driver = {
99 .driver = {
100 .name = "lm95241",
101 },
102 .attach_adapter = lm95241_attach_adapter,
103 .detach_client = lm95241_detach_client,
104};
105
106/* Client data (each client gets its own) */ 93/* Client data (each client gets its own) */
107struct lm95241_data { 94struct lm95241_data {
108 struct i2c_client client;
109 struct device *hwmon_dev; 95 struct device *hwmon_dev;
110 struct mutex update_lock; 96 struct mutex update_lock;
111 unsigned long last_updated, rate; /* in jiffies */ 97 unsigned long last_updated, rate; /* in jiffies */
@@ -323,42 +309,16 @@ static const struct attribute_group lm95241_group = {
323 .attrs = lm95241_attributes, 309 .attrs = lm95241_attributes,
324}; 310};
325 311
326/* Init/exit code */ 312/* Return 0 if detection is successful, -ENODEV otherwise */
327static int lm95241_attach_adapter(struct i2c_adapter *adapter) 313static int lm95241_detect(struct i2c_client *new_client, int kind,
314 struct i2c_board_info *info)
328{ 315{
329 if (!(adapter->class & I2C_CLASS_HWMON)) 316 struct i2c_adapter *adapter = new_client->adapter;
330 return 0; 317 int address = new_client->addr;
331 return i2c_probe(adapter, &addr_data, lm95241_detect);
332}
333
334/*
335 * The following function does more than just detection. If detection
336 * succeeds, it also registers the new chip.
337 */
338static int lm95241_detect(struct i2c_adapter *adapter, int address, int kind)
339{
340 struct i2c_client *new_client;
341 struct lm95241_data *data;
342 int err = 0;
343 const char *name = ""; 318 const char *name = "";
344 319
345 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 320 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
346 goto exit; 321 return -ENODEV;
347
348 data = kzalloc(sizeof(struct lm95241_data), GFP_KERNEL);
349 if (!data) {
350 err = -ENOMEM;
351 goto exit;
352 }
353
354 /* The common I2C client data is placed right before the
355 LM95241-specific data. */
356 new_client = &data->client;
357 i2c_set_clientdata(new_client, data);
358 new_client->addr = address;
359 new_client->adapter = adapter;
360 new_client->driver = &lm95241_driver;
361 new_client->flags = 0;
362 322
363 /* 323 /*
364 * Now we do the remaining detection. A negative kind means that 324 * Now we do the remaining detection. A negative kind means that
@@ -378,7 +338,7 @@ static int lm95241_detect(struct i2c_adapter *adapter, int address, int kind)
378 dev_dbg(&adapter->dev, 338 dev_dbg(&adapter->dev,
379 "LM95241 detection failed at 0x%02x.\n", 339 "LM95241 detection failed at 0x%02x.\n",
380 address); 340 address);
381 goto exit_free; 341 return -ENODEV;
382 } 342 }
383 } 343 }
384 344
@@ -392,23 +352,32 @@ static int lm95241_detect(struct i2c_adapter *adapter, int address, int kind)
392 352
393 if (kind <= 0) { /* identification failed */ 353 if (kind <= 0) { /* identification failed */
394 dev_info(&adapter->dev, "Unsupported chip\n"); 354 dev_info(&adapter->dev, "Unsupported chip\n");
395 goto exit_free; 355 return -ENODEV;
396 } 356 }
397 } 357 }
398 } 358 }
399 359
360 /* Fill the i2c board info */
400 if (kind == lm95241) 361 if (kind == lm95241)
401 name = "lm95241"; 362 name = "lm95241";
363 strlcpy(info->type, name, I2C_NAME_SIZE);
364 return 0;
365}
402 366
403 /* We can fill in the remaining client fields */ 367static int lm95241_probe(struct i2c_client *new_client,
404 strlcpy(new_client->name, name, I2C_NAME_SIZE); 368 const struct i2c_device_id *id)
405 data->valid = 0; 369{
406 mutex_init(&data->update_lock); 370 struct lm95241_data *data;
371 int err;
407 372
408 /* Tell the I2C layer a new client has arrived */ 373 data = kzalloc(sizeof(struct lm95241_data), GFP_KERNEL);
409 err = i2c_attach_client(new_client); 374 if (!data) {
410 if (err) 375 err = -ENOMEM;
411 goto exit_free; 376 goto exit;
377 }
378
379 i2c_set_clientdata(new_client, data);
380 mutex_init(&data->update_lock);
412 381
413 /* Initialize the LM95241 chip */ 382 /* Initialize the LM95241 chip */
414 lm95241_init_client(new_client); 383 lm95241_init_client(new_client);
@@ -416,7 +385,7 @@ static int lm95241_detect(struct i2c_adapter *adapter, int address, int kind)
416 /* Register sysfs hooks */ 385 /* Register sysfs hooks */
417 err = sysfs_create_group(&new_client->dev.kobj, &lm95241_group); 386 err = sysfs_create_group(&new_client->dev.kobj, &lm95241_group);
418 if (err) 387 if (err)
419 goto exit_detach; 388 goto exit_free;
420 389
421 data->hwmon_dev = hwmon_device_register(&new_client->dev); 390 data->hwmon_dev = hwmon_device_register(&new_client->dev);
422 if (IS_ERR(data->hwmon_dev)) { 391 if (IS_ERR(data->hwmon_dev)) {
@@ -428,8 +397,6 @@ static int lm95241_detect(struct i2c_adapter *adapter, int address, int kind)
428 397
429exit_remove_files: 398exit_remove_files:
430 sysfs_remove_group(&new_client->dev.kobj, &lm95241_group); 399 sysfs_remove_group(&new_client->dev.kobj, &lm95241_group);
431exit_detach:
432 i2c_detach_client(new_client);
433exit_free: 400exit_free:
434 kfree(data); 401 kfree(data);
435exit: 402exit:
@@ -456,18 +423,14 @@ static void lm95241_init_client(struct i2c_client *client)
456 data->model); 423 data->model);
457} 424}
458 425
459static int lm95241_detach_client(struct i2c_client *client) 426static int lm95241_remove(struct i2c_client *client)
460{ 427{
461 struct lm95241_data *data = i2c_get_clientdata(client); 428 struct lm95241_data *data = i2c_get_clientdata(client);
462 int err;
463 429
464 hwmon_device_unregister(data->hwmon_dev); 430 hwmon_device_unregister(data->hwmon_dev);
465 sysfs_remove_group(&client->dev.kobj, &lm95241_group); 431 sysfs_remove_group(&client->dev.kobj, &lm95241_group);
466 432
467 err = i2c_detach_client(client); 433 i2c_set_clientdata(client, NULL);
468 if (err)
469 return err;
470
471 kfree(data); 434 kfree(data);
472 return 0; 435 return 0;
473} 436}
@@ -509,6 +472,25 @@ static struct lm95241_data *lm95241_update_device(struct device *dev)
509 return data; 472 return data;
510} 473}
511 474
475/* Driver data (common to all clients) */
476static const struct i2c_device_id lm95241_id[] = {
477 { "lm95241", lm95241 },
478 { }
479};
480MODULE_DEVICE_TABLE(i2c, lm95241_id);
481
482static struct i2c_driver lm95241_driver = {
483 .class = I2C_CLASS_HWMON,
484 .driver = {
485 .name = "lm95241",
486 },
487 .probe = lm95241_probe,
488 .remove = lm95241_remove,
489 .id_table = lm95241_id,
490 .detect = lm95241_detect,
491 .address_data = &addr_data,
492};
493
512static int __init sensors_lm95241_init(void) 494static int __init sensors_lm95241_init(void)
513{ 495{
514 return i2c_add_driver(&lm95241_driver); 496 return i2c_add_driver(&lm95241_driver);
diff --git a/drivers/i2c/algos/Kconfig b/drivers/i2c/algos/Kconfig
index b788579b8227..7b2ce4a08524 100644
--- a/drivers/i2c/algos/Kconfig
+++ b/drivers/i2c/algos/Kconfig
@@ -14,8 +14,4 @@ config I2C_ALGOPCF
14config I2C_ALGOPCA 14config I2C_ALGOPCA
15 tristate "I2C PCA 9564 interfaces" 15 tristate "I2C PCA 9564 interfaces"
16 16
17config I2C_ALGO_SGI
18 tristate
19 depends on SGI_IP22 || SGI_IP32 || X86_VISWS
20
21endmenu 17endmenu
diff --git a/drivers/i2c/algos/Makefile b/drivers/i2c/algos/Makefile
index cac1051bd4f1..18b3e962ec09 100644
--- a/drivers/i2c/algos/Makefile
+++ b/drivers/i2c/algos/Makefile
@@ -5,7 +5,6 @@
5obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o 5obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o
6obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o 6obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o
7obj-$(CONFIG_I2C_ALGOPCA) += i2c-algo-pca.o 7obj-$(CONFIG_I2C_ALGOPCA) += i2c-algo-pca.o
8obj-$(CONFIG_I2C_ALGO_SGI) += i2c-algo-sgi.o
9 8
10ifeq ($(CONFIG_I2C_DEBUG_ALGO),y) 9ifeq ($(CONFIG_I2C_DEBUG_ALGO),y)
11EXTRA_CFLAGS += -DDEBUG 10EXTRA_CFLAGS += -DDEBUG
diff --git a/drivers/i2c/algos/i2c-algo-sgi.c b/drivers/i2c/algos/i2c-algo-sgi.c
deleted file mode 100644
index 6eaf145e1ada..000000000000
--- a/drivers/i2c/algos/i2c-algo-sgi.c
+++ /dev/null
@@ -1,179 +0,0 @@
1/*
2 * i2c-algo-sgi.c: i2c driver algorithm used by the VINO (SGI Indy) and
3 * MACE (SGI O2) chips.
4 *
5 * This file is subject to the terms and conditions of the GNU General Public
6 * License version 2 as published by the Free Software Foundation.
7 *
8 * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
9 */
10
11#include <linux/kernel.h>
12#include <linux/module.h>
13#include <linux/init.h>
14#include <linux/errno.h>
15#include <linux/delay.h>
16
17#include <linux/i2c.h>
18#include <linux/i2c-algo-sgi.h>
19
20
21#define SGI_I2C_FORCE_IDLE (0 << 0)
22#define SGI_I2C_NOT_IDLE (1 << 0)
23#define SGI_I2C_WRITE (0 << 1)
24#define SGI_I2C_READ (1 << 1)
25#define SGI_I2C_RELEASE_BUS (0 << 2)
26#define SGI_I2C_HOLD_BUS (1 << 2)
27#define SGI_I2C_XFER_DONE (0 << 4)
28#define SGI_I2C_XFER_BUSY (1 << 4)
29#define SGI_I2C_ACK (0 << 5)
30#define SGI_I2C_NACK (1 << 5)
31#define SGI_I2C_BUS_OK (0 << 7)
32#define SGI_I2C_BUS_ERR (1 << 7)
33
34#define get_control() adap->getctrl(adap->data)
35#define set_control(val) adap->setctrl(adap->data, val)
36#define read_data() adap->rdata(adap->data)
37#define write_data(val) adap->wdata(adap->data, val)
38
39
40static int wait_xfer_done(struct i2c_algo_sgi_data *adap)
41{
42 int i;
43
44 for (i = 0; i < adap->xfer_timeout; i++) {
45 if ((get_control() & SGI_I2C_XFER_BUSY) == 0)
46 return 0;
47 udelay(1);
48 }
49
50 return -ETIMEDOUT;
51}
52
53static int wait_ack(struct i2c_algo_sgi_data *adap)
54{
55 int i;
56
57 if (wait_xfer_done(adap))
58 return -ETIMEDOUT;
59 for (i = 0; i < adap->ack_timeout; i++) {
60 if ((get_control() & SGI_I2C_NACK) == 0)
61 return 0;
62 udelay(1);
63 }
64
65 return -ETIMEDOUT;
66}
67
68static int force_idle(struct i2c_algo_sgi_data *adap)
69{
70 int i;
71
72 set_control(SGI_I2C_FORCE_IDLE);
73 for (i = 0; i < adap->xfer_timeout; i++) {
74 if ((get_control() & SGI_I2C_NOT_IDLE) == 0)
75 goto out;
76 udelay(1);
77 }
78 return -ETIMEDOUT;
79out:
80 if (get_control() & SGI_I2C_BUS_ERR)
81 return -EIO;
82 return 0;
83}
84
85static int do_address(struct i2c_algo_sgi_data *adap, unsigned int addr,
86 int rd)
87{
88 if (rd)
89 set_control(SGI_I2C_NOT_IDLE);
90 /* Check if bus is idle, eventually force it to do so */
91 if (get_control() & SGI_I2C_NOT_IDLE)
92 if (force_idle(adap))
93 return -EIO;
94 /* Write out the i2c chip address and specify operation */
95 set_control(SGI_I2C_HOLD_BUS | SGI_I2C_WRITE | SGI_I2C_NOT_IDLE);
96 if (rd)
97 addr |= 1;
98 write_data(addr);
99 if (wait_ack(adap))
100 return -EIO;
101 return 0;
102}
103
104static int i2c_read(struct i2c_algo_sgi_data *adap, unsigned char *buf,
105 unsigned int len)
106{
107 int i;
108
109 set_control(SGI_I2C_HOLD_BUS | SGI_I2C_READ | SGI_I2C_NOT_IDLE);
110 for (i = 0; i < len; i++) {
111 if (wait_xfer_done(adap))
112 return -EIO;
113 buf[i] = read_data();
114 }
115 set_control(SGI_I2C_RELEASE_BUS | SGI_I2C_FORCE_IDLE);
116
117 return 0;
118
119}
120
121static int i2c_write(struct i2c_algo_sgi_data *adap, unsigned char *buf,
122 unsigned int len)
123{
124 int i;
125
126 /* We are already in write state */
127 for (i = 0; i < len; i++) {
128 write_data(buf[i]);
129 if (wait_ack(adap))
130 return -EIO;
131 }
132 return 0;
133}
134
135static int sgi_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
136 int num)
137{
138 struct i2c_algo_sgi_data *adap = i2c_adap->algo_data;
139 struct i2c_msg *p;
140 int i, err = 0;
141
142 for (i = 0; !err && i < num; i++) {
143 p = &msgs[i];
144 err = do_address(adap, p->addr, p->flags & I2C_M_RD);
145 if (err || !p->len)
146 continue;
147 if (p->flags & I2C_M_RD)
148 err = i2c_read(adap, p->buf, p->len);
149 else
150 err = i2c_write(adap, p->buf, p->len);
151 }
152
153 return (err < 0) ? err : i;
154}
155
156static u32 sgi_func(struct i2c_adapter *adap)
157{
158 return I2C_FUNC_SMBUS_EMUL;
159}
160
161static const struct i2c_algorithm sgi_algo = {
162 .master_xfer = sgi_xfer,
163 .functionality = sgi_func,
164};
165
166/*
167 * registering functions to load algorithms at runtime
168 */
169int i2c_sgi_add_bus(struct i2c_adapter *adap)
170{
171 adap->algo = &sgi_algo;
172
173 return i2c_add_adapter(adap);
174}
175EXPORT_SYMBOL(i2c_sgi_add_bus);
176
177MODULE_AUTHOR("Ladislav Michl <ladis@linux-mips.org>");
178MODULE_DESCRIPTION("I2C-Bus SGI algorithm");
179MODULE_LICENSE("GPL");
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index da809ad0996a..94eae5c3cbc7 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -356,6 +356,16 @@ config I2C_IBM_IIC
356 This driver can also be built as a module. If so, the module 356 This driver can also be built as a module. If so, the module
357 will be called i2c-ibm_iic. 357 will be called i2c-ibm_iic.
358 358
359config I2C_IMX
360 tristate "IMX I2C interface"
361 depends on ARCH_MXC
362 help
363 Say Y here if you want to use the IIC bus controller on
364 the Freescale i.MX/MXC processors.
365
366 This driver can also be built as a module. If so, the module
367 will be called i2c-imx.
368
359config I2C_IOP3XX 369config I2C_IOP3XX
360 tristate "Intel IOPx3xx and IXP4xx on-chip I2C interface" 370 tristate "Intel IOPx3xx and IXP4xx on-chip I2C interface"
361 depends on ARCH_IOP32X || ARCH_IOP33X || ARCH_IXP4XX || ARCH_IOP13XX 371 depends on ARCH_IOP32X || ARCH_IOP33X || ARCH_IXP4XX || ARCH_IOP13XX
@@ -462,6 +472,16 @@ config I2C_S3C2410
462 Say Y here to include support for I2C controller in the 472 Say Y here to include support for I2C controller in the
463 Samsung S3C2410 based System-on-Chip devices. 473 Samsung S3C2410 based System-on-Chip devices.
464 474
475config I2C_S6000
476 tristate "S6000 I2C support"
477 depends on XTENSA_VARIANT_S6000
478 help
479 This driver supports the on chip I2C device on the
480 S6000 xtensa processor family.
481
482 To compile this driver as a module, choose M here. The module
483 will be called i2c-s6000.
484
465config I2C_SH7760 485config I2C_SH7760
466 tristate "Renesas SH7760 I2C Controller" 486 tristate "Renesas SH7760 I2C Controller"
467 depends on CPU_SUBTYPE_SH7760 487 depends on CPU_SUBTYPE_SH7760
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
index 0c2c4b26cdf1..776acb6403a7 100644
--- a/drivers/i2c/busses/Makefile
+++ b/drivers/i2c/busses/Makefile
@@ -33,6 +33,7 @@ obj-$(CONFIG_I2C_DAVINCI) += i2c-davinci.o
33obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o 33obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o
34obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o 34obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o
35obj-$(CONFIG_I2C_IBM_IIC) += i2c-ibm_iic.o 35obj-$(CONFIG_I2C_IBM_IIC) += i2c-ibm_iic.o
36obj-$(CONFIG_I2C_IMX) += i2c-imx.o
36obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o 37obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o
37obj-$(CONFIG_I2C_IXP2000) += i2c-ixp2000.o 38obj-$(CONFIG_I2C_IXP2000) += i2c-ixp2000.o
38obj-$(CONFIG_I2C_MPC) += i2c-mpc.o 39obj-$(CONFIG_I2C_MPC) += i2c-mpc.o
@@ -43,6 +44,7 @@ obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o
43obj-$(CONFIG_I2C_PNX) += i2c-pnx.o 44obj-$(CONFIG_I2C_PNX) += i2c-pnx.o
44obj-$(CONFIG_I2C_PXA) += i2c-pxa.o 45obj-$(CONFIG_I2C_PXA) += i2c-pxa.o
45obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o 46obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o
47obj-$(CONFIG_I2C_S6000) += i2c-s6000.o
46obj-$(CONFIG_I2C_SH7760) += i2c-sh7760.o 48obj-$(CONFIG_I2C_SH7760) += i2c-sh7760.o
47obj-$(CONFIG_I2C_SH_MOBILE) += i2c-sh_mobile.o 49obj-$(CONFIG_I2C_SH_MOBILE) += i2c-sh_mobile.o
48obj-$(CONFIG_I2C_SIMTEC) += i2c-simtec.o 50obj-$(CONFIG_I2C_SIMTEC) += i2c-simtec.o
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
new file mode 100644
index 000000000000..0b486a63460d
--- /dev/null
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -0,0 +1,624 @@
1/*
2 * Copyright (C) 2002 Motorola GSG-China
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17 * USA.
18 *
19 * Author:
20 * Darius Augulis, Teltonika Inc.
21 *
22 * Desc.:
23 * Implementation of I2C Adapter/Algorithm Driver
24 * for I2C Bus integrated in Freescale i.MX/MXC processors
25 *
26 * Derived from Motorola GSG China I2C example driver
27 *
28 * Copyright (C) 2005 Torsten Koschorrek <koschorrek at synertronixx.de
29 * Copyright (C) 2005 Matthias Blaschke <blaschke at synertronixx.de
30 * Copyright (C) 2007 RightHand Technologies, Inc.
31 * Copyright (C) 2008 Darius Augulis <darius.augulis at teltonika.lt>
32 *
33 */
34
35/** Includes *******************************************************************
36*******************************************************************************/
37
38#include <linux/init.h>
39#include <linux/kernel.h>
40#include <linux/module.h>
41#include <linux/errno.h>
42#include <linux/err.h>
43#include <linux/interrupt.h>
44#include <linux/delay.h>
45#include <linux/i2c.h>
46#include <linux/io.h>
47#include <linux/sched.h>
48#include <linux/platform_device.h>
49#include <linux/clk.h>
50
51#include <mach/irqs.h>
52#include <mach/hardware.h>
53#include <mach/i2c.h>
54
55/** Defines ********************************************************************
56*******************************************************************************/
57
58/* This will be the driver name the kernel reports */
59#define DRIVER_NAME "imx-i2c"
60
61/* Default value */
62#define IMX_I2C_BIT_RATE 100000 /* 100kHz */
63
64/* IMX I2C registers */
65#define IMX_I2C_IADR 0x00 /* i2c slave address */
66#define IMX_I2C_IFDR 0x04 /* i2c frequency divider */
67#define IMX_I2C_I2CR 0x08 /* i2c control */
68#define IMX_I2C_I2SR 0x0C /* i2c status */
69#define IMX_I2C_I2DR 0x10 /* i2c transfer data */
70
71/* Bits of IMX I2C registers */
72#define I2SR_RXAK 0x01
73#define I2SR_IIF 0x02
74#define I2SR_SRW 0x04
75#define I2SR_IAL 0x10
76#define I2SR_IBB 0x20
77#define I2SR_IAAS 0x40
78#define I2SR_ICF 0x80
79#define I2CR_RSTA 0x04
80#define I2CR_TXAK 0x08
81#define I2CR_MTX 0x10
82#define I2CR_MSTA 0x20
83#define I2CR_IIEN 0x40
84#define I2CR_IEN 0x80
85
86/** Variables ******************************************************************
87*******************************************************************************/
88
89/*
90 * sorted list of clock divider, register value pairs
91 * taken from table 26-5, p.26-9, Freescale i.MX
92 * Integrated Portable System Processor Reference Manual
93 * Document Number: MC9328MXLRM, Rev. 5.1, 06/2007
94 *
95 * Duplicated divider values removed from list
96 */
97
98static u16 __initdata i2c_clk_div[50][2] = {
99 { 22, 0x20 }, { 24, 0x21 }, { 26, 0x22 }, { 28, 0x23 },
100 { 30, 0x00 }, { 32, 0x24 }, { 36, 0x25 }, { 40, 0x26 },
101 { 42, 0x03 }, { 44, 0x27 }, { 48, 0x28 }, { 52, 0x05 },
102 { 56, 0x29 }, { 60, 0x06 }, { 64, 0x2A }, { 72, 0x2B },
103 { 80, 0x2C }, { 88, 0x09 }, { 96, 0x2D }, { 104, 0x0A },
104 { 112, 0x2E }, { 128, 0x2F }, { 144, 0x0C }, { 160, 0x30 },
105 { 192, 0x31 }, { 224, 0x32 }, { 240, 0x0F }, { 256, 0x33 },
106 { 288, 0x10 }, { 320, 0x34 }, { 384, 0x35 }, { 448, 0x36 },
107 { 480, 0x13 }, { 512, 0x37 }, { 576, 0x14 }, { 640, 0x38 },
108 { 768, 0x39 }, { 896, 0x3A }, { 960, 0x17 }, { 1024, 0x3B },
109 { 1152, 0x18 }, { 1280, 0x3C }, { 1536, 0x3D }, { 1792, 0x3E },
110 { 1920, 0x1B }, { 2048, 0x3F }, { 2304, 0x1C }, { 2560, 0x1D },
111 { 3072, 0x1E }, { 3840, 0x1F }
112};
113
114struct imx_i2c_struct {
115 struct i2c_adapter adapter;
116 struct resource *res;
117 struct clk *clk;
118 void __iomem *base;
119 int irq;
120 wait_queue_head_t queue;
121 unsigned long i2csr;
122 unsigned int disable_delay;
123};
124
125/** Functions for IMX I2C adapter driver ***************************************
126*******************************************************************************/
127
128static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx)
129{
130 unsigned long orig_jiffies = jiffies;
131
132 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
133
134 /* wait for bus not busy */
135 while (readb(i2c_imx->base + IMX_I2C_I2SR) & I2SR_IBB) {
136 if (signal_pending(current)) {
137 dev_dbg(&i2c_imx->adapter.dev,
138 "<%s> I2C Interrupted\n", __func__);
139 return -EINTR;
140 }
141 if (time_after(jiffies, orig_jiffies + HZ / 1000)) {
142 dev_dbg(&i2c_imx->adapter.dev,
143 "<%s> I2C bus is busy\n", __func__);
144 return -EIO;
145 }
146 schedule();
147 }
148
149 return 0;
150}
151
152static int i2c_imx_trx_complete(struct imx_i2c_struct *i2c_imx)
153{
154 int result;
155
156 result = wait_event_interruptible_timeout(i2c_imx->queue,
157 i2c_imx->i2csr & I2SR_IIF, HZ / 10);
158
159 if (unlikely(result < 0)) {
160 dev_dbg(&i2c_imx->adapter.dev, "<%s> result < 0\n", __func__);
161 return result;
162 } else if (unlikely(!(i2c_imx->i2csr & I2SR_IIF))) {
163 dev_dbg(&i2c_imx->adapter.dev, "<%s> Timeout\n", __func__);
164 return -ETIMEDOUT;
165 }
166 dev_dbg(&i2c_imx->adapter.dev, "<%s> TRX complete\n", __func__);
167 i2c_imx->i2csr = 0;
168 return 0;
169}
170
171static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx)
172{
173 if (readb(i2c_imx->base + IMX_I2C_I2SR) & I2SR_RXAK) {
174 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__);
175 return -EIO; /* No ACK */
176 }
177
178 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__);
179 return 0;
180}
181
182static void i2c_imx_start(struct imx_i2c_struct *i2c_imx)
183{
184 unsigned int temp = 0;
185
186 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
187
188 /* Enable I2C controller */
189 writeb(I2CR_IEN, i2c_imx->base + IMX_I2C_I2CR);
190 /* Start I2C transaction */
191 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
192 temp |= I2CR_MSTA;
193 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
194 temp |= I2CR_IIEN | I2CR_MTX | I2CR_TXAK;
195 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
196}
197
198static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)
199{
200 unsigned int temp = 0;
201
202 /* Stop I2C transaction */
203 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
204 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
205 temp &= ~I2CR_MSTA;
206 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
207 /* setup chip registers to defaults */
208 writeb(I2CR_IEN, i2c_imx->base + IMX_I2C_I2CR);
209 writeb(0, i2c_imx->base + IMX_I2C_I2SR);
210 /*
211 * This delay caused by an i.MXL hardware bug.
212 * If no (or too short) delay, no "STOP" bit will be generated.
213 */
214 udelay(i2c_imx->disable_delay);
215 /* Disable I2C controller */
216 writeb(0, i2c_imx->base + IMX_I2C_I2CR);
217}
218
219static void __init i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx,
220 unsigned int rate)
221{
222 unsigned int i2c_clk_rate;
223 unsigned int div;
224 int i;
225
226 /* Divider value calculation */
227 i2c_clk_rate = clk_get_rate(i2c_imx->clk);
228 div = (i2c_clk_rate + rate - 1) / rate;
229 if (div < i2c_clk_div[0][0])
230 i = 0;
231 else if (div > i2c_clk_div[ARRAY_SIZE(i2c_clk_div) - 1][0])
232 i = ARRAY_SIZE(i2c_clk_div) - 1;
233 else
234 for (i = 0; i2c_clk_div[i][0] < div; i++);
235
236 /* Write divider value to register */
237 writeb(i2c_clk_div[i][1], i2c_imx->base + IMX_I2C_IFDR);
238
239 /*
240 * There dummy delay is calculated.
241 * It should be about one I2C clock period long.
242 * This delay is used in I2C bus disable function
243 * to fix chip hardware bug.
244 */
245 i2c_imx->disable_delay = (500000U * i2c_clk_div[i][0]
246 + (i2c_clk_rate / 2) - 1) / (i2c_clk_rate / 2);
247
248 /* dev_dbg() can't be used, because adapter is not yet registered */
249#ifdef CONFIG_I2C_DEBUG_BUS
250 printk(KERN_DEBUG "I2C: <%s> I2C_CLK=%d, REQ DIV=%d\n",
251 __func__, i2c_clk_rate, div);
252 printk(KERN_DEBUG "I2C: <%s> IFDR[IC]=0x%x, REAL DIV=%d\n",
253 __func__, i2c_clk_div[i][1], i2c_clk_div[i][0]);
254#endif
255}
256
257static irqreturn_t i2c_imx_isr(int irq, void *dev_id)
258{
259 struct imx_i2c_struct *i2c_imx = dev_id;
260 unsigned int temp;
261
262 temp = readb(i2c_imx->base + IMX_I2C_I2SR);
263 if (temp & I2SR_IIF) {
264 /* save status register */
265 i2c_imx->i2csr = temp;
266 temp &= ~I2SR_IIF;
267 writeb(temp, i2c_imx->base + IMX_I2C_I2SR);
268 wake_up_interruptible(&i2c_imx->queue);
269 return IRQ_HANDLED;
270 }
271
272 return IRQ_NONE;
273}
274
275static int i2c_imx_write(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs)
276{
277 int i, result;
278
279 dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n",
280 __func__, msgs->addr << 1);
281
282 /* write slave address */
283 writeb(msgs->addr << 1, i2c_imx->base + IMX_I2C_I2DR);
284 result = i2c_imx_trx_complete(i2c_imx);
285 if (result)
286 return result;
287 result = i2c_imx_acked(i2c_imx);
288 if (result)
289 return result;
290 dev_dbg(&i2c_imx->adapter.dev, "<%s> write data\n", __func__);
291
292 /* write data */
293 for (i = 0; i < msgs->len; i++) {
294 dev_dbg(&i2c_imx->adapter.dev,
295 "<%s> write byte: B%d=0x%X\n",
296 __func__, i, msgs->buf[i]);
297 writeb(msgs->buf[i], i2c_imx->base + IMX_I2C_I2DR);
298 result = i2c_imx_trx_complete(i2c_imx);
299 if (result)
300 return result;
301 result = i2c_imx_acked(i2c_imx);
302 if (result)
303 return result;
304 }
305 return 0;
306}
307
308static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs)
309{
310 int i, result;
311 unsigned int temp;
312
313 dev_dbg(&i2c_imx->adapter.dev,
314 "<%s> write slave address: addr=0x%x\n",
315 __func__, (msgs->addr << 1) | 0x01);
316
317 /* write slave address */
318 writeb((msgs->addr << 1) | 0x01, i2c_imx->base + IMX_I2C_I2DR);
319 result = i2c_imx_trx_complete(i2c_imx);
320 if (result)
321 return result;
322 result = i2c_imx_acked(i2c_imx);
323 if (result)
324 return result;
325
326 dev_dbg(&i2c_imx->adapter.dev, "<%s> setup bus\n", __func__);
327
328 /* setup bus to read data */
329 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
330 temp &= ~I2CR_MTX;
331 if (msgs->len - 1)
332 temp &= ~I2CR_TXAK;
333 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
334 readb(i2c_imx->base + IMX_I2C_I2DR); /* dummy read */
335
336 dev_dbg(&i2c_imx->adapter.dev, "<%s> read data\n", __func__);
337
338 /* read data */
339 for (i = 0; i < msgs->len; i++) {
340 result = i2c_imx_trx_complete(i2c_imx);
341 if (result)
342 return result;
343 if (i == (msgs->len - 1)) {
344 dev_dbg(&i2c_imx->adapter.dev,
345 "<%s> clear MSTA\n", __func__);
346 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
347 temp &= ~I2CR_MSTA;
348 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
349 } else if (i == (msgs->len - 2)) {
350 dev_dbg(&i2c_imx->adapter.dev,
351 "<%s> set TXAK\n", __func__);
352 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
353 temp |= I2CR_TXAK;
354 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
355 }
356 msgs->buf[i] = readb(i2c_imx->base + IMX_I2C_I2DR);
357 dev_dbg(&i2c_imx->adapter.dev,
358 "<%s> read byte: B%d=0x%X\n",
359 __func__, i, msgs->buf[i]);
360 }
361 return 0;
362}
363
364static int i2c_imx_xfer(struct i2c_adapter *adapter,
365 struct i2c_msg *msgs, int num)
366{
367 unsigned int i, temp;
368 int result;
369 struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter);
370
371 dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
372
373 /* Check if i2c bus is not busy */
374 result = i2c_imx_bus_busy(i2c_imx);
375 if (result)
376 goto fail0;
377
378 /* Start I2C transfer */
379 i2c_imx_start(i2c_imx);
380
381 /* read/write data */
382 for (i = 0; i < num; i++) {
383 if (i) {
384 dev_dbg(&i2c_imx->adapter.dev,
385 "<%s> repeated start\n", __func__);
386 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
387 temp |= I2CR_RSTA;
388 writeb(temp, i2c_imx->base + IMX_I2C_I2CR);
389 }
390 dev_dbg(&i2c_imx->adapter.dev,
391 "<%s> transfer message: %d\n", __func__, i);
392 /* write/read data */
393#ifdef CONFIG_I2C_DEBUG_BUS
394 temp = readb(i2c_imx->base + IMX_I2C_I2CR);
395 dev_dbg(&i2c_imx->adapter.dev, "<%s> CONTROL: IEN=%d, IIEN=%d, "
396 "MSTA=%d, MTX=%d, TXAK=%d, RSTA=%d\n", __func__,
397 (temp & I2CR_IEN ? 1 : 0), (temp & I2CR_IIEN ? 1 : 0),
398 (temp & I2CR_MSTA ? 1 : 0), (temp & I2CR_MTX ? 1 : 0),
399 (temp & I2CR_TXAK ? 1 : 0), (temp & I2CR_RSTA ? 1 : 0));
400 temp = readb(i2c_imx->base + IMX_I2C_I2SR);
401 dev_dbg(&i2c_imx->adapter.dev,
402 "<%s> STATUS: ICF=%d, IAAS=%d, IBB=%d, "
403 "IAL=%d, SRW=%d, IIF=%d, RXAK=%d\n", __func__,
404 (temp & I2SR_ICF ? 1 : 0), (temp & I2SR_IAAS ? 1 : 0),
405 (temp & I2SR_IBB ? 1 : 0), (temp & I2SR_IAL ? 1 : 0),
406 (temp & I2SR_SRW ? 1 : 0), (temp & I2SR_IIF ? 1 : 0),
407 (temp & I2SR_RXAK ? 1 : 0));
408#endif
409 if (msgs[i].flags & I2C_M_RD)
410 result = i2c_imx_read(i2c_imx, &msgs[i]);
411 else
412 result = i2c_imx_write(i2c_imx, &msgs[i]);
413 }
414
415fail0:
416 /* Stop I2C transfer */
417 i2c_imx_stop(i2c_imx);
418
419 dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__,
420 (result < 0) ? "error" : "success msg",
421 (result < 0) ? result : num);
422 return (result < 0) ? result : num;
423}
424
425static u32 i2c_imx_func(struct i2c_adapter *adapter)
426{
427 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
428}
429
430static struct i2c_algorithm i2c_imx_algo = {
431 .master_xfer = i2c_imx_xfer,
432 .functionality = i2c_imx_func,
433};
434
435static int __init i2c_imx_probe(struct platform_device *pdev)
436{
437 struct imx_i2c_struct *i2c_imx;
438 struct resource *res;
439 struct imxi2c_platform_data *pdata;
440 void __iomem *base;
441 resource_size_t res_size;
442 int irq;
443 int ret;
444
445 dev_dbg(&pdev->dev, "<%s>\n", __func__);
446
447 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
448 if (!res) {
449 dev_err(&pdev->dev, "can't get device resources\n");
450 return -ENOENT;
451 }
452 irq = platform_get_irq(pdev, 0);
453 if (irq < 0) {
454 dev_err(&pdev->dev, "can't get irq number\n");
455 return -ENOENT;
456 }
457
458 pdata = pdev->dev.platform_data;
459
460 if (pdata && pdata->init) {
461 ret = pdata->init(&pdev->dev);
462 if (ret)
463 return ret;
464 }
465
466 res_size = resource_size(res);
467 base = ioremap(res->start, res_size);
468 if (!base) {
469 dev_err(&pdev->dev, "ioremap failed\n");
470 ret = -EIO;
471 goto fail0;
472 }
473
474 i2c_imx = kzalloc(sizeof(struct imx_i2c_struct), GFP_KERNEL);
475 if (!i2c_imx) {
476 dev_err(&pdev->dev, "can't allocate interface\n");
477 ret = -ENOMEM;
478 goto fail1;
479 }
480
481 if (!request_mem_region(res->start, res_size, DRIVER_NAME)) {
482 ret = -EBUSY;
483 goto fail2;
484 }
485
486 /* Setup i2c_imx driver structure */
487 strcpy(i2c_imx->adapter.name, pdev->name);
488 i2c_imx->adapter.owner = THIS_MODULE;
489 i2c_imx->adapter.algo = &i2c_imx_algo;
490 i2c_imx->adapter.dev.parent = &pdev->dev;
491 i2c_imx->adapter.nr = pdev->id;
492 i2c_imx->irq = irq;
493 i2c_imx->base = base;
494 i2c_imx->res = res;
495
496 /* Get I2C clock */
497 i2c_imx->clk = clk_get(&pdev->dev, "i2c_clk");
498 if (IS_ERR(i2c_imx->clk)) {
499 ret = PTR_ERR(i2c_imx->clk);
500 dev_err(&pdev->dev, "can't get I2C clock\n");
501 goto fail3;
502 }
503 clk_enable(i2c_imx->clk);
504
505 /* Request IRQ */
506 ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
507 if (ret) {
508 dev_err(&pdev->dev, "can't claim irq %d\n", i2c_imx->irq);
509 goto fail4;
510 }
511
512 /* Init queue */
513 init_waitqueue_head(&i2c_imx->queue);
514
515 /* Set up adapter data */
516 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx);
517
518 /* Set up clock divider */
519 if (pdata && pdata->bitrate)
520 i2c_imx_set_clk(i2c_imx, pdata->bitrate);
521 else
522 i2c_imx_set_clk(i2c_imx, IMX_I2C_BIT_RATE);
523
524 /* Set up chip registers to defaults */
525 writeb(0, i2c_imx->base + IMX_I2C_I2CR);
526 writeb(0, i2c_imx->base + IMX_I2C_I2SR);
527
528 /* Add I2C adapter */
529 ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
530 if (ret < 0) {
531 dev_err(&pdev->dev, "registration failed\n");
532 goto fail5;
533 }
534
535 /* Set up platform driver data */
536 platform_set_drvdata(pdev, i2c_imx);
537
538 dev_dbg(&i2c_imx->adapter.dev, "claimed irq %d\n", i2c_imx->irq);
539 dev_dbg(&i2c_imx->adapter.dev, "device resources from 0x%x to 0x%x\n",
540 i2c_imx->res->start, i2c_imx->res->end);
541 dev_dbg(&i2c_imx->adapter.dev, "allocated %d bytes at 0x%x \n",
542 res_size, i2c_imx->res->start);
543 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n",
544 i2c_imx->adapter.name);
545 dev_dbg(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n");
546
547 return 0; /* Return OK */
548
549fail5:
550 free_irq(i2c_imx->irq, i2c_imx);
551fail4:
552 clk_disable(i2c_imx->clk);
553 clk_put(i2c_imx->clk);
554fail3:
555 release_mem_region(i2c_imx->res->start, resource_size(res));
556fail2:
557 kfree(i2c_imx);
558fail1:
559 iounmap(base);
560fail0:
561 if (pdata && pdata->exit)
562 pdata->exit(&pdev->dev);
563 return ret; /* Return error number */
564}
565
566static int __exit i2c_imx_remove(struct platform_device *pdev)
567{
568 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev);
569 struct imxi2c_platform_data *pdata = pdev->dev.platform_data;
570
571 /* remove adapter */
572 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n");
573 i2c_del_adapter(&i2c_imx->adapter);
574 platform_set_drvdata(pdev, NULL);
575
576 /* free interrupt */
577 free_irq(i2c_imx->irq, i2c_imx);
578
579 /* setup chip registers to defaults */
580 writeb(0, i2c_imx->base + IMX_I2C_IADR);
581 writeb(0, i2c_imx->base + IMX_I2C_IFDR);
582 writeb(0, i2c_imx->base + IMX_I2C_I2CR);
583 writeb(0, i2c_imx->base + IMX_I2C_I2SR);
584
585 /* Shut down hardware */
586 if (pdata && pdata->exit)
587 pdata->exit(&pdev->dev);
588
589 /* Disable I2C clock */
590 clk_disable(i2c_imx->clk);
591 clk_put(i2c_imx->clk);
592
593 release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));
594 iounmap(i2c_imx->base);
595 kfree(i2c_imx);
596 return 0;
597}
598
599static struct platform_driver i2c_imx_driver = {
600 .probe = i2c_imx_probe,
601 .remove = __exit_p(i2c_imx_remove),
602 .driver = {
603 .name = DRIVER_NAME,
604 .owner = THIS_MODULE,
605 }
606};
607
608static int __init i2c_adap_imx_init(void)
609{
610 return platform_driver_probe(&i2c_imx_driver, i2c_imx_probe);
611}
612
613static void __exit i2c_adap_imx_exit(void)
614{
615 platform_driver_unregister(&i2c_imx_driver);
616}
617
618module_init(i2c_adap_imx_init);
619module_exit(i2c_adap_imx_exit);
620
621MODULE_LICENSE("GPL");
622MODULE_AUTHOR("Darius Augulis");
623MODULE_DESCRIPTION("I2C adapter driver for IMX I2C bus");
624MODULE_ALIAS("platform:" DRIVER_NAME);
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
index 26bf37010586..4af5c09f0e8f 100644
--- a/drivers/i2c/busses/i2c-mpc.c
+++ b/drivers/i2c/busses/i2c-mpc.c
@@ -20,18 +20,21 @@
20#include <linux/of_platform.h> 20#include <linux/of_platform.h>
21#include <linux/of_i2c.h> 21#include <linux/of_i2c.h>
22 22
23#include <asm/io.h> 23#include <linux/io.h>
24#include <linux/fsl_devices.h> 24#include <linux/fsl_devices.h>
25#include <linux/i2c.h> 25#include <linux/i2c.h>
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/delay.h> 27#include <linux/delay.h>
28 28
29#include <asm/mpc52xx.h>
30#include <sysdev/fsl_soc.h>
31
29#define DRV_NAME "mpc-i2c" 32#define DRV_NAME "mpc-i2c"
30 33
31#define MPC_I2C_FDR 0x04 34#define MPC_I2C_FDR 0x04
32#define MPC_I2C_CR 0x08 35#define MPC_I2C_CR 0x08
33#define MPC_I2C_SR 0x0c 36#define MPC_I2C_SR 0x0c
34#define MPC_I2C_DR 0x10 37#define MPC_I2C_DR 0x10
35#define MPC_I2C_DFSRR 0x14 38#define MPC_I2C_DFSRR 0x14
36 39
37#define CCR_MEN 0x80 40#define CCR_MEN 0x80
@@ -50,15 +53,27 @@
50#define CSR_RXAK 0x01 53#define CSR_RXAK 0x01
51 54
52struct mpc_i2c { 55struct mpc_i2c {
56 struct device *dev;
53 void __iomem *base; 57 void __iomem *base;
54 u32 interrupt; 58 u32 interrupt;
55 wait_queue_head_t queue; 59 wait_queue_head_t queue;
56 struct i2c_adapter adap; 60 struct i2c_adapter adap;
57 int irq; 61 int irq;
58 u32 flags;
59}; 62};
60 63
61static __inline__ void writeccr(struct mpc_i2c *i2c, u32 x) 64struct mpc_i2c_divider {
65 u16 divider;
66 u16 fdr; /* including dfsrr */
67};
68
69struct mpc_i2c_match_data {
70 void (*setclock)(struct device_node *node,
71 struct mpc_i2c *i2c,
72 u32 clock, u32 prescaler);
73 u32 prescaler;
74};
75
76static inline void writeccr(struct mpc_i2c *i2c, u32 x)
62{ 77{
63 writeb(x, i2c->base + MPC_I2C_CR); 78 writeb(x, i2c->base + MPC_I2C_CR);
64} 79}
@@ -100,12 +115,11 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing)
100 u32 x; 115 u32 x;
101 int result = 0; 116 int result = 0;
102 117
103 if (i2c->irq == NO_IRQ) 118 if (i2c->irq == NO_IRQ) {
104 {
105 while (!(readb(i2c->base + MPC_I2C_SR) & CSR_MIF)) { 119 while (!(readb(i2c->base + MPC_I2C_SR) & CSR_MIF)) {
106 schedule(); 120 schedule();
107 if (time_after(jiffies, orig_jiffies + timeout)) { 121 if (time_after(jiffies, orig_jiffies + timeout)) {
108 pr_debug("I2C: timeout\n"); 122 dev_dbg(i2c->dev, "timeout\n");
109 writeccr(i2c, 0); 123 writeccr(i2c, 0);
110 result = -EIO; 124 result = -EIO;
111 break; 125 break;
@@ -119,7 +133,7 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing)
119 (i2c->interrupt & CSR_MIF), timeout); 133 (i2c->interrupt & CSR_MIF), timeout);
120 134
121 if (unlikely(!(i2c->interrupt & CSR_MIF))) { 135 if (unlikely(!(i2c->interrupt & CSR_MIF))) {
122 pr_debug("I2C: wait timeout\n"); 136 dev_dbg(i2c->dev, "wait timeout\n");
123 writeccr(i2c, 0); 137 writeccr(i2c, 0);
124 result = -ETIMEDOUT; 138 result = -ETIMEDOUT;
125 } 139 }
@@ -132,17 +146,17 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing)
132 return result; 146 return result;
133 147
134 if (!(x & CSR_MCF)) { 148 if (!(x & CSR_MCF)) {
135 pr_debug("I2C: unfinished\n"); 149 dev_dbg(i2c->dev, "unfinished\n");
136 return -EIO; 150 return -EIO;
137 } 151 }
138 152
139 if (x & CSR_MAL) { 153 if (x & CSR_MAL) {
140 pr_debug("I2C: MAL\n"); 154 dev_dbg(i2c->dev, "MAL\n");
141 return -EIO; 155 return -EIO;
142 } 156 }
143 157
144 if (writing && (x & CSR_RXAK)) { 158 if (writing && (x & CSR_RXAK)) {
145 pr_debug("I2C: No RXAK\n"); 159 dev_dbg(i2c->dev, "No RXAK\n");
146 /* generate stop */ 160 /* generate stop */
147 writeccr(i2c, CCR_MEN); 161 writeccr(i2c, CCR_MEN);
148 return -EIO; 162 return -EIO;
@@ -150,18 +164,181 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing)
150 return 0; 164 return 0;
151} 165}
152 166
153static void mpc_i2c_setclock(struct mpc_i2c *i2c) 167#ifdef CONFIG_PPC_52xx
168static const struct mpc_i2c_divider mpc_i2c_dividers_52xx[] = {
169 {20, 0x20}, {22, 0x21}, {24, 0x22}, {26, 0x23},
170 {28, 0x24}, {30, 0x01}, {32, 0x25}, {34, 0x02},
171 {36, 0x26}, {40, 0x27}, {44, 0x04}, {48, 0x28},
172 {52, 0x63}, {56, 0x29}, {60, 0x41}, {64, 0x2a},
173 {68, 0x07}, {72, 0x2b}, {80, 0x2c}, {88, 0x09},
174 {96, 0x2d}, {104, 0x0a}, {112, 0x2e}, {120, 0x81},
175 {128, 0x2f}, {136, 0x47}, {144, 0x0c}, {160, 0x30},
176 {176, 0x49}, {192, 0x31}, {208, 0x4a}, {224, 0x32},
177 {240, 0x0f}, {256, 0x33}, {272, 0x87}, {288, 0x10},
178 {320, 0x34}, {352, 0x89}, {384, 0x35}, {416, 0x8a},
179 {448, 0x36}, {480, 0x13}, {512, 0x37}, {576, 0x14},
180 {640, 0x38}, {768, 0x39}, {896, 0x3a}, {960, 0x17},
181 {1024, 0x3b}, {1152, 0x18}, {1280, 0x3c}, {1536, 0x3d},
182 {1792, 0x3e}, {1920, 0x1b}, {2048, 0x3f}, {2304, 0x1c},
183 {2560, 0x1d}, {3072, 0x1e}, {3584, 0x7e}, {3840, 0x1f},
184 {4096, 0x7f}, {4608, 0x5c}, {5120, 0x5d}, {6144, 0x5e},
185 {7168, 0xbe}, {7680, 0x5f}, {8192, 0xbf}, {9216, 0x9c},
186 {10240, 0x9d}, {12288, 0x9e}, {15360, 0x9f}
187};
188
189int mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, int prescaler)
190{
191 const struct mpc52xx_i2c_divider *div = NULL;
192 unsigned int pvr = mfspr(SPRN_PVR);
193 u32 divider;
194 int i;
195
196 if (!clock)
197 return -EINVAL;
198
199 /* Determine divider value */
200 divider = mpc52xx_find_ipb_freq(node) / clock;
201
202 /*
203 * We want to choose an FDR/DFSR that generates an I2C bus speed that
204 * is equal to or lower than the requested speed.
205 */
206 for (i = 0; i < ARRAY_SIZE(mpc52xx_i2c_dividers); i++) {
207 div = &mpc_i2c_dividers_52xx[i];
208 /* Old MPC5200 rev A CPUs do not support the high bits */
209 if (div->fdr & 0xc0 && pvr == 0x80822011)
210 continue;
211 if (div->divider >= divider)
212 break;
213 }
214
215 return div ? (int)div->fdr : -EINVAL;
216}
217
218static void mpc_i2c_setclock_52xx(struct device_node *node,
219 struct mpc_i2c *i2c,
220 u32 clock, u32 prescaler)
154{ 221{
155 /* Set clock and filters */ 222 int fdr = mpc52xx_i2c_get_fdr(node, clock, prescaler);
156 if (i2c->flags & FSL_I2C_DEV_SEPARATE_DFSRR) { 223
157 writeb(0x31, i2c->base + MPC_I2C_FDR); 224 if (fdr < 0)
158 writeb(0x10, i2c->base + MPC_I2C_DFSRR); 225 fdr = 0x3f; /* backward compatibility */
159 } else if (i2c->flags & FSL_I2C_DEV_CLOCK_5200) 226 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
160 writeb(0x3f, i2c->base + MPC_I2C_FDR); 227 dev_info(i2c->dev, "clock %d Hz (fdr=%d)\n", clock, fdr);
161 else 228}
162 writel(0x1031, i2c->base + MPC_I2C_FDR); 229#else /* !CONFIG_PPC_52xx */
230static void mpc_i2c_setclock_52xx(struct device_node *node,
231 struct mpc_i2c *i2c,
232 u32 clock, u32 prescaler)
233{
234}
235#endif /* CONFIG_PPC_52xx*/
236
237#ifdef CONFIG_FSL_SOC
238static const struct mpc_i2c_divider mpc_i2c_dividers_8xxx[] = {
239 {160, 0x0120}, {192, 0x0121}, {224, 0x0122}, {256, 0x0123},
240 {288, 0x0100}, {320, 0x0101}, {352, 0x0601}, {384, 0x0102},
241 {416, 0x0602}, {448, 0x0126}, {480, 0x0103}, {512, 0x0127},
242 {544, 0x0b03}, {576, 0x0104}, {608, 0x1603}, {640, 0x0105},
243 {672, 0x2003}, {704, 0x0b05}, {736, 0x2b03}, {768, 0x0106},
244 {800, 0x3603}, {832, 0x0b06}, {896, 0x012a}, {960, 0x0107},
245 {1024, 0x012b}, {1088, 0x1607}, {1152, 0x0108}, {1216, 0x2b07},
246 {1280, 0x0109}, {1408, 0x1609}, {1536, 0x010a}, {1664, 0x160a},
247 {1792, 0x012e}, {1920, 0x010b}, {2048, 0x012f}, {2176, 0x2b0b},
248 {2304, 0x010c}, {2560, 0x010d}, {2816, 0x2b0d}, {3072, 0x010e},
249 {3328, 0x2b0e}, {3584, 0x0132}, {3840, 0x010f}, {4096, 0x0133},
250 {4608, 0x0110}, {5120, 0x0111}, {6144, 0x0112}, {7168, 0x0136},
251 {7680, 0x0113}, {8192, 0x0137}, {9216, 0x0114}, {10240, 0x0115},
252 {12288, 0x0116}, {14336, 0x013a}, {15360, 0x0117}, {16384, 0x013b},
253 {18432, 0x0118}, {20480, 0x0119}, {24576, 0x011a}, {28672, 0x013e},
254 {30720, 0x011b}, {32768, 0x013f}, {36864, 0x011c}, {40960, 0x011d},
255 {49152, 0x011e}, {61440, 0x011f}
256};
257
258u32 mpc_i2c_get_sec_cfg_8xxx(void)
259{
260 struct device_node *node = NULL;
261 u32 __iomem *reg;
262 u32 val = 0;
263
264 node = of_find_node_by_name(NULL, "global-utilities");
265 if (node) {
266 const u32 *prop = of_get_property(node, "reg", NULL);
267 if (prop) {
268 /*
269 * Map and check POR Device Status Register 2
270 * (PORDEVSR2) at 0xE0014
271 */
272 reg = ioremap(get_immrbase() + *prop + 0x14, 0x4);
273 if (!reg)
274 printk(KERN_ERR
275 "Error: couldn't map PORDEVSR2\n");
276 else
277 val = in_be32(reg) & 0x00000080; /* sec-cfg */
278 iounmap(reg);
279 }
280 }
281 if (node)
282 of_node_put(node);
283
284 return val;
163} 285}
164 286
287int mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, u32 prescaler)
288{
289 const struct mpc_i2c_divider *div = NULL;
290 u32 divider;
291 int i;
292
293 if (!clock)
294 return -EINVAL;
295
296 /* Determine proper divider value */
297 if (of_device_is_compatible(node, "fsl,mpc8544-i2c"))
298 prescaler = mpc_i2c_get_sec_cfg_8xxx() ? 3 : 2;
299 if (!prescaler)
300 prescaler = 1;
301
302 divider = fsl_get_sys_freq() / clock / prescaler;
303
304 pr_debug("I2C: src_clock=%d clock=%d divider=%d\n",
305 fsl_get_sys_freq(), clock, divider);
306
307 /*
308 * We want to choose an FDR/DFSR that generates an I2C bus speed that
309 * is equal to or lower than the requested speed.
310 */
311 for (i = 0; i < ARRAY_SIZE(mpc_i2c_dividers_8xxx); i++) {
312 div = &mpc_i2c_dividers_8xxx[i];
313 if (div->divider >= divider)
314 break;
315 }
316
317 return div ? (int)div->fdr : -EINVAL;
318}
319
320static void mpc_i2c_setclock_8xxx(struct device_node *node,
321 struct mpc_i2c *i2c,
322 u32 clock, u32 prescaler)
323{
324 int fdr = mpc_i2c_get_fdr_8xxx(node, clock, prescaler);
325
326 if (fdr < 0)
327 fdr = 0x1031; /* backward compatibility */
328 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
329 writeb((fdr >> 8) & 0xff, i2c->base + MPC_I2C_DFSRR);
330 dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n",
331 clock, fdr >> 8, fdr & 0xff);
332}
333
334#else /* !CONFIG_FSL_SOC */
335static void mpc_i2c_setclock_8xxx(struct device_node *node,
336 struct mpc_i2c *i2c,
337 u32 clock, u32 prescaler)
338{
339}
340#endif /* CONFIG_FSL_SOC */
341
165static void mpc_i2c_start(struct mpc_i2c *i2c) 342static void mpc_i2c_start(struct mpc_i2c *i2c)
166{ 343{
167 /* Clear arbitration */ 344 /* Clear arbitration */
@@ -176,7 +353,7 @@ static void mpc_i2c_stop(struct mpc_i2c *i2c)
176} 353}
177 354
178static int mpc_write(struct mpc_i2c *i2c, int target, 355static int mpc_write(struct mpc_i2c *i2c, int target,
179 const u8 * data, int length, int restart) 356 const u8 *data, int length, int restart)
180{ 357{
181 int i, result; 358 int i, result;
182 unsigned timeout = i2c->adap.timeout; 359 unsigned timeout = i2c->adap.timeout;
@@ -207,7 +384,7 @@ static int mpc_write(struct mpc_i2c *i2c, int target,
207} 384}
208 385
209static int mpc_read(struct mpc_i2c *i2c, int target, 386static int mpc_read(struct mpc_i2c *i2c, int target,
210 u8 * data, int length, int restart) 387 u8 *data, int length, int restart)
211{ 388{
212 unsigned timeout = i2c->adap.timeout; 389 unsigned timeout = i2c->adap.timeout;
213 int i, result; 390 int i, result;
@@ -264,12 +441,12 @@ static int mpc_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
264 /* Allow bus up to 1s to become not busy */ 441 /* Allow bus up to 1s to become not busy */
265 while (readb(i2c->base + MPC_I2C_SR) & CSR_MBB) { 442 while (readb(i2c->base + MPC_I2C_SR) & CSR_MBB) {
266 if (signal_pending(current)) { 443 if (signal_pending(current)) {
267 pr_debug("I2C: Interrupted\n"); 444 dev_dbg(i2c->dev, "Interrupted\n");
268 writeccr(i2c, 0); 445 writeccr(i2c, 0);
269 return -EINTR; 446 return -EINTR;
270 } 447 }
271 if (time_after(jiffies, orig_jiffies + HZ)) { 448 if (time_after(jiffies, orig_jiffies + HZ)) {
272 pr_debug("I2C: timeout\n"); 449 dev_dbg(i2c->dev, "timeout\n");
273 if (readb(i2c->base + MPC_I2C_SR) == 450 if (readb(i2c->base + MPC_I2C_SR) ==
274 (CSR_MCF | CSR_MBB | CSR_RXAK)) 451 (CSR_MCF | CSR_MBB | CSR_RXAK))
275 mpc_i2c_fixup(i2c); 452 mpc_i2c_fixup(i2c);
@@ -280,9 +457,10 @@ static int mpc_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
280 457
281 for (i = 0; ret >= 0 && i < num; i++) { 458 for (i = 0; ret >= 0 && i < num; i++) {
282 pmsg = &msgs[i]; 459 pmsg = &msgs[i];
283 pr_debug("Doing %s %d bytes to 0x%02x - %d of %d messages\n", 460 dev_dbg(i2c->dev,
284 pmsg->flags & I2C_M_RD ? "read" : "write", 461 "Doing %s %d bytes to 0x%02x - %d of %d messages\n",
285 pmsg->len, pmsg->addr, i + 1, num); 462 pmsg->flags & I2C_M_RD ? "read" : "write",
463 pmsg->len, pmsg->addr, i + 1, num);
286 if (pmsg->flags & I2C_M_RD) 464 if (pmsg->flags & I2C_M_RD)
287 ret = 465 ret =
288 mpc_read(i2c, pmsg->addr, pmsg->buf, pmsg->len, i); 466 mpc_read(i2c, pmsg->addr, pmsg->buf, pmsg->len, i);
@@ -311,27 +489,26 @@ static struct i2c_adapter mpc_ops = {
311 .timeout = HZ, 489 .timeout = HZ,
312}; 490};
313 491
314static int __devinit fsl_i2c_probe(struct of_device *op, const struct of_device_id *match) 492static int __devinit fsl_i2c_probe(struct of_device *op,
493 const struct of_device_id *match)
315{ 494{
316 int result = 0;
317 struct mpc_i2c *i2c; 495 struct mpc_i2c *i2c;
496 const u32 *prop;
497 u32 clock = 0;
498 int result = 0;
499 int plen;
318 500
319 i2c = kzalloc(sizeof(*i2c), GFP_KERNEL); 501 i2c = kzalloc(sizeof(*i2c), GFP_KERNEL);
320 if (!i2c) 502 if (!i2c)
321 return -ENOMEM; 503 return -ENOMEM;
322 504
323 if (of_get_property(op->node, "dfsrr", NULL)) 505 i2c->dev = &op->dev; /* for debug and error output */
324 i2c->flags |= FSL_I2C_DEV_SEPARATE_DFSRR;
325
326 if (of_device_is_compatible(op->node, "fsl,mpc5200-i2c") ||
327 of_device_is_compatible(op->node, "mpc5200-i2c"))
328 i2c->flags |= FSL_I2C_DEV_CLOCK_5200;
329 506
330 init_waitqueue_head(&i2c->queue); 507 init_waitqueue_head(&i2c->queue);
331 508
332 i2c->base = of_iomap(op->node, 0); 509 i2c->base = of_iomap(op->node, 0);
333 if (!i2c->base) { 510 if (!i2c->base) {
334 printk(KERN_ERR "i2c-mpc - failed to map controller\n"); 511 dev_err(i2c->dev, "failed to map controller\n");
335 result = -ENOMEM; 512 result = -ENOMEM;
336 goto fail_map; 513 goto fail_map;
337 } 514 }
@@ -341,12 +518,27 @@ static int __devinit fsl_i2c_probe(struct of_device *op, const struct of_device_
341 result = request_irq(i2c->irq, mpc_i2c_isr, 518 result = request_irq(i2c->irq, mpc_i2c_isr,
342 IRQF_SHARED, "i2c-mpc", i2c); 519 IRQF_SHARED, "i2c-mpc", i2c);
343 if (result < 0) { 520 if (result < 0) {
344 printk(KERN_ERR "i2c-mpc - failed to attach interrupt\n"); 521 dev_err(i2c->dev, "failed to attach interrupt\n");
345 goto fail_request; 522 goto fail_request;
346 } 523 }
347 } 524 }
348 525
349 mpc_i2c_setclock(i2c); 526 if (!of_get_property(op->node, "fsl,preserve-clocking", NULL)) {
527 prop = of_get_property(op->node, "clock-frequency", &plen);
528 if (prop && plen == sizeof(u32))
529 clock = *prop;
530
531 if (match->data) {
532 struct mpc_i2c_match_data *data =
533 (struct mpc_i2c_match_data *)match->data;
534 data->setclock(op->node, i2c, clock, data->prescaler);
535 } else {
536 /* Backwards compatibility */
537 if (of_get_property(op->node, "dfsrr", NULL))
538 mpc_i2c_setclock_8xxx(op->node, i2c,
539 clock, 0);
540 }
541 }
350 542
351 dev_set_drvdata(&op->dev, i2c); 543 dev_set_drvdata(&op->dev, i2c);
352 544
@@ -356,7 +548,7 @@ static int __devinit fsl_i2c_probe(struct of_device *op, const struct of_device_
356 548
357 result = i2c_add_adapter(&i2c->adap); 549 result = i2c_add_adapter(&i2c->adap);
358 if (result < 0) { 550 if (result < 0) {
359 printk(KERN_ERR "i2c-mpc - failed to add adapter\n"); 551 dev_err(i2c->dev, "failed to add adapter\n");
360 goto fail_add; 552 goto fail_add;
361 } 553 }
362 of_register_i2c_devices(&i2c->adap, op->node); 554 of_register_i2c_devices(&i2c->adap, op->node);
@@ -368,7 +560,7 @@ static int __devinit fsl_i2c_probe(struct of_device *op, const struct of_device_
368 free_irq(i2c->irq, i2c); 560 free_irq(i2c->irq, i2c);
369 fail_request: 561 fail_request:
370 irq_dispose_mapping(i2c->irq); 562 irq_dispose_mapping(i2c->irq);
371 iounmap(i2c->base); 563 iounmap(i2c->base);
372 fail_map: 564 fail_map:
373 kfree(i2c); 565 kfree(i2c);
374 return result; 566 return result;
@@ -391,9 +583,43 @@ static int __devexit fsl_i2c_remove(struct of_device *op)
391}; 583};
392 584
393static const struct of_device_id mpc_i2c_of_match[] = { 585static const struct of_device_id mpc_i2c_of_match[] = {
394 {.compatible = "fsl-i2c",}, 586 {.compatible = "mpc5200-i2c",
587 .data = &(struct mpc_i2c_match_data) {
588 .setclock = mpc_i2c_setclock_52xx,
589 },
590 },
591 {.compatible = "fsl,mpc5200b-i2c",
592 .data = &(struct mpc_i2c_match_data) {
593 .setclock = mpc_i2c_setclock_52xx,
594 },
595 },
596 {.compatible = "fsl,mpc5200-i2c",
597 .data = &(struct mpc_i2c_match_data) {
598 .setclock = mpc_i2c_setclock_52xx,
599 },
600 },
601 {.compatible = "fsl,mpc8313-i2c",
602 .data = &(struct mpc_i2c_match_data) {
603 .setclock = mpc_i2c_setclock_8xxx,
604 },
605 },
606 {.compatible = "fsl,mpc8543-i2c",
607 .data = &(struct mpc_i2c_match_data) {
608 .setclock = mpc_i2c_setclock_8xxx,
609 .prescaler = 2,
610 },
611 },
612 {.compatible = "fsl,mpc8544-i2c",
613 .data = &(struct mpc_i2c_match_data) {
614 .setclock = mpc_i2c_setclock_8xxx,
615 .prescaler = 3,
616 },
617 /* Backward compatibility */
618 },
619 {.compatible = "fsl-i2c", },
395 {}, 620 {},
396}; 621};
622
397MODULE_DEVICE_TABLE(of, mpc_i2c_of_match); 623MODULE_DEVICE_TABLE(of, mpc_i2c_of_match);
398 624
399 625
@@ -414,7 +640,7 @@ static int __init fsl_i2c_init(void)
414 640
415 rv = of_register_platform_driver(&mpc_i2c_driver); 641 rv = of_register_platform_driver(&mpc_i2c_driver);
416 if (rv) 642 if (rv)
417 printk(KERN_ERR DRV_NAME 643 printk(KERN_ERR DRV_NAME
418 " of_register_platform_driver failed (%i)\n", rv); 644 " of_register_platform_driver failed (%i)\n", rv);
419 return rv; 645 return rv;
420} 646}
@@ -428,6 +654,6 @@ module_init(fsl_i2c_init);
428module_exit(fsl_i2c_exit); 654module_exit(fsl_i2c_exit);
429 655
430MODULE_AUTHOR("Adrian Cox <adrian@humboldt.co.uk>"); 656MODULE_AUTHOR("Adrian Cox <adrian@humboldt.co.uk>");
431MODULE_DESCRIPTION 657MODULE_DESCRIPTION("I2C-Bus adapter for MPC107 bridge and "
432 ("I2C-Bus adapter for MPC107 bridge and MPC824x/85xx/52xx processors"); 658 "MPC824x/85xx/52xx processors");
433MODULE_LICENSE("GPL"); 659MODULE_LICENSE("GPL");
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
index 5b7f95641ba4..1691ef0f1ee1 100644
--- a/drivers/i2c/busses/i2c-s3c2410.c
+++ b/drivers/i2c/busses/i2c-s3c2410.c
@@ -1,6 +1,6 @@
1/* linux/drivers/i2c/busses/i2c-s3c2410.c 1/* linux/drivers/i2c/busses/i2c-s3c2410.c
2 * 2 *
3 * Copyright (C) 2004,2005 Simtec Electronics 3 * Copyright (C) 2004,2005,2009 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk> 4 * Ben Dooks <ben@simtec.co.uk>
5 * 5 *
6 * S3C2410 I2C Controller 6 * S3C2410 I2C Controller
@@ -590,18 +590,6 @@ static int s3c24xx_i2c_calcdivisor(unsigned long clkin, unsigned int wanted,
590 return clkin / (calc_divs * calc_div1); 590 return clkin / (calc_divs * calc_div1);
591} 591}
592 592
593/* freq_acceptable
594 *
595 * test wether a frequency is within the acceptable range of error
596*/
597
598static inline int freq_acceptable(unsigned int freq, unsigned int wanted)
599{
600 int diff = freq - wanted;
601
602 return diff >= -2 && diff <= 2;
603}
604
605/* s3c24xx_i2c_clockrate 593/* s3c24xx_i2c_clockrate
606 * 594 *
607 * work out a divisor for the user requested frequency setting, 595 * work out a divisor for the user requested frequency setting,
@@ -614,44 +602,28 @@ static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got)
614 struct s3c2410_platform_i2c *pdata = i2c->dev->platform_data; 602 struct s3c2410_platform_i2c *pdata = i2c->dev->platform_data;
615 unsigned long clkin = clk_get_rate(i2c->clk); 603 unsigned long clkin = clk_get_rate(i2c->clk);
616 unsigned int divs, div1; 604 unsigned int divs, div1;
605 unsigned long target_frequency;
617 u32 iiccon; 606 u32 iiccon;
618 int freq; 607 int freq;
619 int start, end;
620 608
621 i2c->clkrate = clkin; 609 i2c->clkrate = clkin;
622 clkin /= 1000; /* clkin now in KHz */ 610 clkin /= 1000; /* clkin now in KHz */
623 611
624 dev_dbg(i2c->dev, "pdata %p, freq %lu %lu..%lu\n", 612 dev_dbg(i2c->dev, "pdata desired frequency %lu\n", pdata->frequency);
625 pdata, pdata->bus_freq, pdata->min_freq, pdata->max_freq);
626
627 if (pdata->bus_freq != 0) {
628 freq = s3c24xx_i2c_calcdivisor(clkin, pdata->bus_freq/1000,
629 &div1, &divs);
630 if (freq_acceptable(freq, pdata->bus_freq/1000))
631 goto found;
632 }
633
634 /* ok, we may have to search for something suitable... */
635 613
636 start = (pdata->max_freq == 0) ? pdata->bus_freq : pdata->max_freq; 614 target_frequency = pdata->frequency ? pdata->frequency : 100000;
637 end = pdata->min_freq;
638 615
639 start /= 1000; 616 target_frequency /= 1000; /* Target frequency now in KHz */
640 end /= 1000;
641 617
642 /* search loop... */ 618 freq = s3c24xx_i2c_calcdivisor(clkin, target_frequency, &div1, &divs);
643 619
644 for (; start > end; start--) { 620 if (freq > target_frequency) {
645 freq = s3c24xx_i2c_calcdivisor(clkin, start, &div1, &divs); 621 dev_err(i2c->dev,
646 if (freq_acceptable(freq, start)) 622 "Unable to achieve desired frequency %luKHz." \
647 goto found; 623 " Lowest achievable %dKHz\n", target_frequency, freq);
624 return -EINVAL;
648 } 625 }
649 626
650 /* cannot find frequency spec */
651
652 return -EINVAL;
653
654 found:
655 *got = freq; 627 *got = freq;
656 628
657 iiccon = readl(i2c->regs + S3C2410_IICCON); 629 iiccon = readl(i2c->regs + S3C2410_IICCON);
@@ -663,6 +635,23 @@ static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got)
663 635
664 writel(iiccon, i2c->regs + S3C2410_IICCON); 636 writel(iiccon, i2c->regs + S3C2410_IICCON);
665 637
638 if (s3c24xx_i2c_is2440(i2c)) {
639 unsigned long sda_delay;
640
641 if (pdata->sda_delay) {
642 sda_delay = (freq / 1000) * pdata->sda_delay;
643 sda_delay /= 1000000;
644 sda_delay = DIV_ROUND_UP(sda_delay, 5);
645 if (sda_delay > 3)
646 sda_delay = 3;
647 sda_delay |= S3C2410_IICLC_FILTER_ON;
648 } else
649 sda_delay = 0;
650
651 dev_dbg(i2c->dev, "IICLC=%08lx\n", sda_delay);
652 writel(sda_delay, i2c->regs + S3C2440_IICLC);
653 }
654
666 return 0; 655 return 0;
667} 656}
668 657
@@ -769,11 +758,8 @@ static int s3c24xx_i2c_init(struct s3c24xx_i2c *i2c)
769 758
770 /* check for s3c2440 i2c controller */ 759 /* check for s3c2440 i2c controller */
771 760
772 if (s3c24xx_i2c_is2440(i2c)) { 761 if (s3c24xx_i2c_is2440(i2c))
773 dev_dbg(i2c->dev, "S3C2440_IICLC=%08x\n", pdata->sda_delay); 762 writel(0x0, i2c->regs + S3C2440_IICLC);
774
775 writel(pdata->sda_delay, i2c->regs + S3C2440_IICLC);
776 }
777 763
778 return 0; 764 return 0;
779} 765}
@@ -1018,14 +1004,13 @@ static int __init i2c_adap_s3c_init(void)
1018 1004
1019 return ret; 1005 return ret;
1020} 1006}
1007subsys_initcall(i2c_adap_s3c_init);
1021 1008
1022static void __exit i2c_adap_s3c_exit(void) 1009static void __exit i2c_adap_s3c_exit(void)
1023{ 1010{
1024 platform_driver_unregister(&s3c2410_i2c_driver); 1011 platform_driver_unregister(&s3c2410_i2c_driver);
1025 platform_driver_unregister(&s3c2440_i2c_driver); 1012 platform_driver_unregister(&s3c2440_i2c_driver);
1026} 1013}
1027
1028module_init(i2c_adap_s3c_init);
1029module_exit(i2c_adap_s3c_exit); 1014module_exit(i2c_adap_s3c_exit);
1030 1015
1031MODULE_DESCRIPTION("S3C24XX I2C Bus driver"); 1016MODULE_DESCRIPTION("S3C24XX I2C Bus driver");
diff --git a/drivers/i2c/busses/i2c-s6000.c b/drivers/i2c/busses/i2c-s6000.c
new file mode 100644
index 000000000000..c91359f4965c
--- /dev/null
+++ b/drivers/i2c/busses/i2c-s6000.c
@@ -0,0 +1,407 @@
1/*
2 * drivers/i2c/busses/i2c-s6000.c
3 *
4 * Description: Driver for S6000 Family I2C Interface
5 * Copyright (c) 2008 emlix GmbH
6 * Author: Oskar Schirmer <os@emlix.com>
7 *
8 * Partially based on i2c-bfin-twi.c driver by <sonic.zhang@analog.com>
9 * Copyright (c) 2005-2007 Analog Devices, Inc.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA
24 */
25
26#include <linux/clk.h>
27#include <linux/err.h>
28#include <linux/module.h>
29#include <linux/kernel.h>
30#include <linux/init.h>
31#include <linux/delay.h>
32#include <linux/i2c.h>
33#include <linux/i2c/s6000.h>
34#include <linux/timer.h>
35#include <linux/spinlock.h>
36#include <linux/completion.h>
37#include <linux/interrupt.h>
38#include <linux/platform_device.h>
39
40#include <asm/io.h>
41#include "i2c-s6000.h"
42
43#define DRV_NAME "i2c-s6000"
44
45#define POLL_TIMEOUT (2 * HZ)
46
47struct s6i2c_if {
48 u8 __iomem *reg; /* memory mapped registers */
49 int irq;
50 spinlock_t lock;
51 struct i2c_msg *msgs; /* messages currently handled */
52 int msgs_num; /* nb of msgs to do */
53 int msgs_push; /* nb of msgs read/written */
54 int msgs_done; /* nb of msgs finally handled */
55 unsigned push; /* nb of bytes read/written in msg */
56 unsigned done; /* nb of bytes finally handled */
57 int timeout_count; /* timeout retries left */
58 struct timer_list timeout_timer;
59 struct i2c_adapter adap;
60 struct completion complete;
61 struct clk *clk;
62 struct resource *res;
63};
64
65static inline u16 i2c_rd16(struct s6i2c_if *iface, unsigned n)
66{
67 return readw(iface->reg + (n));
68}
69
70static inline void i2c_wr16(struct s6i2c_if *iface, unsigned n, u16 v)
71{
72 writew(v, iface->reg + (n));
73}
74
75static inline u32 i2c_rd32(struct s6i2c_if *iface, unsigned n)
76{
77 return readl(iface->reg + (n));
78}
79
80static inline void i2c_wr32(struct s6i2c_if *iface, unsigned n, u32 v)
81{
82 writel(v, iface->reg + (n));
83}
84
85static struct s6i2c_if s6i2c_if;
86
87static void s6i2c_handle_interrupt(struct s6i2c_if *iface)
88{
89 if (i2c_rd16(iface, S6_I2C_INTRSTAT) & (1 << S6_I2C_INTR_TXABRT)) {
90 i2c_rd16(iface, S6_I2C_CLRTXABRT);
91 i2c_wr16(iface, S6_I2C_INTRMASK, 0);
92 complete(&iface->complete);
93 return;
94 }
95 if (iface->msgs_done >= iface->msgs_num) {
96 dev_err(&iface->adap.dev, "s6i2c: spurious I2C irq: %04x\n",
97 i2c_rd16(iface, S6_I2C_INTRSTAT));
98 i2c_wr16(iface, S6_I2C_INTRMASK, 0);
99 return;
100 }
101 while ((iface->msgs_push < iface->msgs_num)
102 && (i2c_rd16(iface, S6_I2C_STATUS) & (1 << S6_I2C_STATUS_TFNF))) {
103 struct i2c_msg *m = &iface->msgs[iface->msgs_push];
104 if (!(m->flags & I2C_M_RD))
105 i2c_wr16(iface, S6_I2C_DATACMD, m->buf[iface->push]);
106 else
107 i2c_wr16(iface, S6_I2C_DATACMD,
108 1 << S6_I2C_DATACMD_READ);
109 if (++iface->push >= m->len) {
110 iface->push = 0;
111 iface->msgs_push += 1;
112 }
113 }
114 do {
115 struct i2c_msg *m = &iface->msgs[iface->msgs_done];
116 if (!(m->flags & I2C_M_RD)) {
117 if (iface->msgs_done < iface->msgs_push)
118 iface->msgs_done += 1;
119 else
120 break;
121 } else if (i2c_rd16(iface, S6_I2C_STATUS)
122 & (1 << S6_I2C_STATUS_RFNE)) {
123 m->buf[iface->done] = i2c_rd16(iface, S6_I2C_DATACMD);
124 if (++iface->done >= m->len) {
125 iface->done = 0;
126 iface->msgs_done += 1;
127 }
128 } else{
129 break;
130 }
131 } while (iface->msgs_done < iface->msgs_num);
132 if (iface->msgs_done >= iface->msgs_num) {
133 i2c_wr16(iface, S6_I2C_INTRMASK, 1 << S6_I2C_INTR_TXABRT);
134 complete(&iface->complete);
135 } else if (iface->msgs_push >= iface->msgs_num) {
136 i2c_wr16(iface, S6_I2C_INTRMASK, (1 << S6_I2C_INTR_TXABRT) |
137 (1 << S6_I2C_INTR_RXFULL));
138 } else {
139 i2c_wr16(iface, S6_I2C_INTRMASK, (1 << S6_I2C_INTR_TXABRT) |
140 (1 << S6_I2C_INTR_TXEMPTY) |
141 (1 << S6_I2C_INTR_RXFULL));
142 }
143}
144
145static irqreturn_t s6i2c_interrupt_entry(int irq, void *dev_id)
146{
147 struct s6i2c_if *iface = dev_id;
148 if (!(i2c_rd16(iface, S6_I2C_STATUS) & ((1 << S6_I2C_INTR_RXUNDER)
149 | (1 << S6_I2C_INTR_RXOVER)
150 | (1 << S6_I2C_INTR_RXFULL)
151 | (1 << S6_I2C_INTR_TXOVER)
152 | (1 << S6_I2C_INTR_TXEMPTY)
153 | (1 << S6_I2C_INTR_RDREQ)
154 | (1 << S6_I2C_INTR_TXABRT)
155 | (1 << S6_I2C_INTR_RXDONE)
156 | (1 << S6_I2C_INTR_ACTIVITY)
157 | (1 << S6_I2C_INTR_STOPDET)
158 | (1 << S6_I2C_INTR_STARTDET)
159 | (1 << S6_I2C_INTR_GENCALL))))
160 return IRQ_NONE;
161
162 spin_lock(&iface->lock);
163 del_timer(&iface->timeout_timer);
164 s6i2c_handle_interrupt(iface);
165 spin_unlock(&iface->lock);
166 return IRQ_HANDLED;
167}
168
169static void s6i2c_timeout(unsigned long data)
170{
171 struct s6i2c_if *iface = (struct s6i2c_if *)data;
172 unsigned long flags;
173
174 spin_lock_irqsave(&iface->lock, flags);
175 s6i2c_handle_interrupt(iface);
176 if (--iface->timeout_count > 0) {
177 iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
178 add_timer(&iface->timeout_timer);
179 } else {
180 complete(&iface->complete);
181 i2c_wr16(iface, S6_I2C_INTRMASK, 0);
182 }
183 spin_unlock_irqrestore(&iface->lock, flags);
184}
185
186static int s6i2c_master_xfer(struct i2c_adapter *adap,
187 struct i2c_msg *msgs, int num)
188{
189 struct s6i2c_if *iface = adap->algo_data;
190 int i;
191 if (num == 0)
192 return 0;
193 if (i2c_rd16(iface, S6_I2C_STATUS) & (1 << S6_I2C_STATUS_ACTIVITY))
194 yield();
195 i2c_wr16(iface, S6_I2C_INTRMASK, 0);
196 i2c_rd16(iface, S6_I2C_CLRINTR);
197 for (i = 0; i < num; i++) {
198 if (msgs[i].flags & I2C_M_TEN) {
199 dev_err(&adap->dev,
200 "s6i2c: 10 bits addr not supported\n");
201 return -EINVAL;
202 }
203 if (msgs[i].len == 0) {
204 dev_err(&adap->dev,
205 "s6i2c: zero length message not supported\n");
206 return -EINVAL;
207 }
208 if (msgs[i].addr != msgs[0].addr) {
209 dev_err(&adap->dev,
210 "s6i2c: multiple xfer cannot change target\n");
211 return -EINVAL;
212 }
213 }
214
215 iface->msgs = msgs;
216 iface->msgs_num = num;
217 iface->msgs_push = 0;
218 iface->msgs_done = 0;
219 iface->push = 0;
220 iface->done = 0;
221 iface->timeout_count = 10;
222 i2c_wr16(iface, S6_I2C_TAR, msgs[0].addr);
223 i2c_wr16(iface, S6_I2C_ENABLE, 1);
224 i2c_wr16(iface, S6_I2C_INTRMASK, (1 << S6_I2C_INTR_TXEMPTY) |
225 (1 << S6_I2C_INTR_TXABRT));
226
227 iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
228 add_timer(&iface->timeout_timer);
229 wait_for_completion(&iface->complete);
230 del_timer_sync(&iface->timeout_timer);
231 while (i2c_rd32(iface, S6_I2C_TXFLR) > 0)
232 schedule();
233 while (i2c_rd16(iface, S6_I2C_STATUS) & (1 << S6_I2C_STATUS_ACTIVITY))
234 schedule();
235
236 i2c_wr16(iface, S6_I2C_INTRMASK, 0);
237 i2c_wr16(iface, S6_I2C_ENABLE, 0);
238 return iface->msgs_done;
239}
240
241static u32 s6i2c_functionality(struct i2c_adapter *adap)
242{
243 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
244}
245
246static struct i2c_algorithm s6i2c_algorithm = {
247 .master_xfer = s6i2c_master_xfer,
248 .functionality = s6i2c_functionality,
249};
250
251static u16 __devinit nanoseconds_on_clk(struct s6i2c_if *iface, u32 ns)
252{
253 u32 dividend = ((clk_get_rate(iface->clk) / 1000) * ns) / 1000000;
254 if (dividend > 0xffff)
255 return 0xffff;
256 return dividend;
257}
258
259static int __devinit s6i2c_probe(struct platform_device *dev)
260{
261 struct s6i2c_if *iface = &s6i2c_if;
262 struct i2c_adapter *p_adap;
263 const char *clock;
264 int bus_num, rc;
265 spin_lock_init(&iface->lock);
266 init_completion(&iface->complete);
267 iface->irq = platform_get_irq(dev, 0);
268 if (iface->irq < 0) {
269 rc = iface->irq;
270 goto err_out;
271 }
272 iface->res = platform_get_resource(dev, IORESOURCE_MEM, 0);
273 if (!iface->res) {
274 rc = -ENXIO;
275 goto err_out;
276 }
277 iface->res = request_mem_region(iface->res->start,
278 resource_size(iface->res),
279 dev->dev.bus_id);
280 if (!iface->res) {
281 rc = -EBUSY;
282 goto err_out;
283 }
284 iface->reg = ioremap_nocache(iface->res->start,
285 resource_size(iface->res));
286 if (!iface->reg) {
287 rc = -ENOMEM;
288 goto err_reg;
289 }
290
291 clock = 0;
292 bus_num = -1;
293 if (dev->dev.platform_data) {
294 struct s6_i2c_platform_data *pdata = dev->dev.platform_data;
295 bus_num = pdata->bus_num;
296 clock = pdata->clock;
297 }
298 iface->clk = clk_get(&dev->dev, clock);
299 if (IS_ERR(iface->clk)) {
300 rc = PTR_ERR(iface->clk);
301 goto err_map;
302 }
303 rc = clk_enable(iface->clk);
304 if (rc < 0)
305 goto err_clk_put;
306 init_timer(&iface->timeout_timer);
307 iface->timeout_timer.function = s6i2c_timeout;
308 iface->timeout_timer.data = (unsigned long)iface;
309
310 p_adap = &iface->adap;
311 strlcpy(p_adap->name, dev->name, sizeof(p_adap->name));
312 p_adap->algo = &s6i2c_algorithm;
313 p_adap->algo_data = iface;
314 p_adap->nr = bus_num;
315 p_adap->class = 0;
316 p_adap->dev.parent = &dev->dev;
317 i2c_wr16(iface, S6_I2C_INTRMASK, 0);
318 rc = request_irq(iface->irq, s6i2c_interrupt_entry,
319 IRQF_SHARED, dev->name, iface);
320 if (rc) {
321 dev_err(&p_adap->dev, "s6i2c: cant get IRQ %d\n", iface->irq);
322 goto err_clk_dis;
323 }
324
325 i2c_wr16(iface, S6_I2C_ENABLE, 0);
326 udelay(1);
327 i2c_wr32(iface, S6_I2C_SRESET, 1 << S6_I2C_SRESET_IC_SRST);
328 i2c_wr16(iface, S6_I2C_CLRTXABRT, 1);
329 i2c_wr16(iface, S6_I2C_CON,
330 (1 << S6_I2C_CON_MASTER) |
331 (S6_I2C_CON_SPEED_NORMAL << S6_I2C_CON_SPEED) |
332 (0 << S6_I2C_CON_10BITSLAVE) |
333 (0 << S6_I2C_CON_10BITMASTER) |
334 (1 << S6_I2C_CON_RESTARTENA) |
335 (1 << S6_I2C_CON_SLAVEDISABLE));
336 i2c_wr16(iface, S6_I2C_SSHCNT, nanoseconds_on_clk(iface, 4000));
337 i2c_wr16(iface, S6_I2C_SSLCNT, nanoseconds_on_clk(iface, 4700));
338 i2c_wr16(iface, S6_I2C_FSHCNT, nanoseconds_on_clk(iface, 600));
339 i2c_wr16(iface, S6_I2C_FSLCNT, nanoseconds_on_clk(iface, 1300));
340 i2c_wr16(iface, S6_I2C_RXTL, 0);
341 i2c_wr16(iface, S6_I2C_TXTL, 0);
342
343 platform_set_drvdata(dev, iface);
344 if (bus_num < 0)
345 rc = i2c_add_adapter(p_adap);
346 else
347 rc = i2c_add_numbered_adapter(p_adap);
348 if (rc)
349 goto err_irq_free;
350 return 0;
351
352err_irq_free:
353 free_irq(iface->irq, iface);
354err_clk_dis:
355 clk_disable(iface->clk);
356err_clk_put:
357 clk_put(iface->clk);
358err_map:
359 iounmap(iface->reg);
360err_reg:
361 release_mem_region(iface->res->start,
362 resource_size(iface->res));
363err_out:
364 return rc;
365}
366
367static int __devexit s6i2c_remove(struct platform_device *pdev)
368{
369 struct s6i2c_if *iface = platform_get_drvdata(pdev);
370 i2c_wr16(iface, S6_I2C_ENABLE, 0);
371 platform_set_drvdata(pdev, NULL);
372 i2c_del_adapter(&iface->adap);
373 free_irq(iface->irq, iface);
374 clk_disable(iface->clk);
375 clk_put(iface->clk);
376 iounmap(iface->reg);
377 release_mem_region(iface->res->start,
378 resource_size(iface->res));
379 return 0;
380}
381
382static struct platform_driver s6i2c_driver = {
383 .probe = s6i2c_probe,
384 .remove = __devexit_p(s6i2c_remove),
385 .driver = {
386 .name = DRV_NAME,
387 .owner = THIS_MODULE,
388 },
389};
390
391static int __init s6i2c_init(void)
392{
393 pr_info("I2C: S6000 I2C driver\n");
394 return platform_driver_register(&s6i2c_driver);
395}
396
397static void __exit s6i2c_exit(void)
398{
399 platform_driver_unregister(&s6i2c_driver);
400}
401
402MODULE_DESCRIPTION("I2C-Bus adapter routines for S6000 I2C");
403MODULE_LICENSE("GPL");
404MODULE_ALIAS("platform:" DRV_NAME);
405
406subsys_initcall(s6i2c_init);
407module_exit(s6i2c_exit);
diff --git a/drivers/i2c/busses/i2c-s6000.h b/drivers/i2c/busses/i2c-s6000.h
new file mode 100644
index 000000000000..ff23b81ded44
--- /dev/null
+++ b/drivers/i2c/busses/i2c-s6000.h
@@ -0,0 +1,79 @@
1/*
2 * drivers/i2c/busses/i2c-s6000.h
3 *
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details.
7 *
8 * Copyright (C) 2008 Emlix GmbH <info@emlix.com>
9 * Author: Oskar Schirmer <os@emlix.com>
10 */
11
12#ifndef __DRIVERS_I2C_BUSSES_I2C_S6000_H
13#define __DRIVERS_I2C_BUSSES_I2C_S6000_H
14
15#define S6_I2C_CON 0x000
16#define S6_I2C_CON_MASTER 0
17#define S6_I2C_CON_SPEED 1
18#define S6_I2C_CON_SPEED_NORMAL 1
19#define S6_I2C_CON_SPEED_FAST 2
20#define S6_I2C_CON_SPEED_MASK 3
21#define S6_I2C_CON_10BITSLAVE 3
22#define S6_I2C_CON_10BITMASTER 4
23#define S6_I2C_CON_RESTARTENA 5
24#define S6_I2C_CON_SLAVEDISABLE 6
25#define S6_I2C_TAR 0x004
26#define S6_I2C_TAR_GCORSTART 10
27#define S6_I2C_TAR_SPECIAL 11
28#define S6_I2C_SAR 0x008
29#define S6_I2C_HSMADDR 0x00C
30#define S6_I2C_DATACMD 0x010
31#define S6_I2C_DATACMD_READ 8
32#define S6_I2C_SSHCNT 0x014
33#define S6_I2C_SSLCNT 0x018
34#define S6_I2C_FSHCNT 0x01C
35#define S6_I2C_FSLCNT 0x020
36#define S6_I2C_INTRSTAT 0x02C
37#define S6_I2C_INTRMASK 0x030
38#define S6_I2C_RAWINTR 0x034
39#define S6_I2C_INTR_RXUNDER 0
40#define S6_I2C_INTR_RXOVER 1
41#define S6_I2C_INTR_RXFULL 2
42#define S6_I2C_INTR_TXOVER 3
43#define S6_I2C_INTR_TXEMPTY 4
44#define S6_I2C_INTR_RDREQ 5
45#define S6_I2C_INTR_TXABRT 6
46#define S6_I2C_INTR_RXDONE 7
47#define S6_I2C_INTR_ACTIVITY 8
48#define S6_I2C_INTR_STOPDET 9
49#define S6_I2C_INTR_STARTDET 10
50#define S6_I2C_INTR_GENCALL 11
51#define S6_I2C_RXTL 0x038
52#define S6_I2C_TXTL 0x03C
53#define S6_I2C_CLRINTR 0x040
54#define S6_I2C_CLRRXUNDER 0x044
55#define S6_I2C_CLRRXOVER 0x048
56#define S6_I2C_CLRTXOVER 0x04C
57#define S6_I2C_CLRRDREQ 0x050
58#define S6_I2C_CLRTXABRT 0x054
59#define S6_I2C_CLRRXDONE 0x058
60#define S6_I2C_CLRACTIVITY 0x05C
61#define S6_I2C_CLRSTOPDET 0x060
62#define S6_I2C_CLRSTARTDET 0x064
63#define S6_I2C_CLRGENCALL 0x068
64#define S6_I2C_ENABLE 0x06C
65#define S6_I2C_STATUS 0x070
66#define S6_I2C_STATUS_ACTIVITY 0
67#define S6_I2C_STATUS_TFNF 1
68#define S6_I2C_STATUS_TFE 2
69#define S6_I2C_STATUS_RFNE 3
70#define S6_I2C_STATUS_RFF 4
71#define S6_I2C_TXFLR 0x074
72#define S6_I2C_RXFLR 0x078
73#define S6_I2C_SRESET 0x07C
74#define S6_I2C_SRESET_IC_SRST 0
75#define S6_I2C_SRESET_IC_MASTER_SRST 1
76#define S6_I2C_SRESET_IC_SLAVE_SRST 2
77#define S6_I2C_TXABRTSOURCE 0x080
78
79#endif
diff --git a/drivers/ide/cs5520.c b/drivers/ide/cs5520.c
index 58fb90e5b763..87987a7d36c9 100644
--- a/drivers/ide/cs5520.c
+++ b/drivers/ide/cs5520.c
@@ -122,7 +122,7 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic
122 return -ENODEV; 122 return -ENODEV;
123 } 123 }
124 pci_set_master(dev); 124 pci_set_master(dev);
125 if (pci_set_dma_mask(dev, DMA_32BIT_MASK)) { 125 if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) {
126 printk(KERN_WARNING "%s: No suitable DMA available.\n", 126 printk(KERN_WARNING "%s: No suitable DMA available.\n",
127 d->name); 127 d->name);
128 return -ENODEV; 128 return -ENODEV;
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c
index a19dbccd7617..7a3a12d6e638 100644
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -208,7 +208,7 @@ static int ide_pci_enable(struct pci_dev *dev, const struct ide_port_info *d)
208 * a DMA mask field to the struct ide_port_info if we need it 208 * a DMA mask field to the struct ide_port_info if we need it
209 * (or let lower level driver set the DMA mask) 209 * (or let lower level driver set the DMA mask)
210 */ 210 */
211 ret = pci_set_dma_mask(dev, DMA_32BIT_MASK); 211 ret = pci_set_dma_mask(dev, DMA_BIT_MASK(32));
212 if (ret < 0) { 212 if (ret < 0) {
213 printk(KERN_ERR "%s %s: can't set DMA mask\n", 213 printk(KERN_ERR "%s %s: can't set DMA mask\n",
214 d->name, pci_name(dev)); 214 d->name, pci_name(dev));
diff --git a/drivers/idle/i7300_idle.c b/drivers/idle/i7300_idle.c
index 17e8ddd01334..bf740394d704 100644
--- a/drivers/idle/i7300_idle.c
+++ b/drivers/idle/i7300_idle.c
@@ -178,7 +178,7 @@ static int __init i7300_idle_ioat_selftest(u8 *ctl,
178 178
179static struct device dummy_dma_dev = { 179static struct device dummy_dma_dev = {
180 .init_name = "fallback device", 180 .init_name = "fallback device",
181 .coherent_dma_mask = DMA_64BIT_MASK, 181 .coherent_dma_mask = DMA_BIT_MASK(64),
182 .dma_mask = &dummy_dma_dev.coherent_dma_mask, 182 .dma_mask = &dummy_dma_dev.coherent_dma_mask,
183}; 183};
184 184
diff --git a/drivers/ieee1394/pcilynx.c b/drivers/ieee1394/pcilynx.c
index 38f712036201..9555fd253865 100644
--- a/drivers/ieee1394/pcilynx.c
+++ b/drivers/ieee1394/pcilynx.c
@@ -1171,7 +1171,7 @@ static int __devinit add_card(struct pci_dev *dev,
1171 1171
1172 error = -ENXIO; 1172 error = -ENXIO;
1173 1173
1174 if (pci_set_dma_mask(dev, DMA_32BIT_MASK)) 1174 if (pci_set_dma_mask(dev, DMA_BIT_MASK(32)))
1175 FAIL("DMA address limits not supported for PCILynx hardware"); 1175 FAIL("DMA address limits not supported for PCILynx hardware");
1176 if (pci_enable_device(dev)) 1176 if (pci_enable_device(dev))
1177 FAIL("failed to enable PCILynx hardware"); 1177 FAIL("failed to enable PCILynx hardware");
diff --git a/drivers/infiniband/hw/amso1100/c2.c b/drivers/infiniband/hw/amso1100/c2.c
index 7d79aa361e26..0cfbb6d2f762 100644
--- a/drivers/infiniband/hw/amso1100/c2.c
+++ b/drivers/infiniband/hw/amso1100/c2.c
@@ -989,13 +989,13 @@ static int __devinit c2_probe(struct pci_dev *pcidev,
989 } 989 }
990 990
991 if ((sizeof(dma_addr_t) > 4)) { 991 if ((sizeof(dma_addr_t) > 4)) {
992 ret = pci_set_dma_mask(pcidev, DMA_64BIT_MASK); 992 ret = pci_set_dma_mask(pcidev, DMA_BIT_MASK(64));
993 if (ret < 0) { 993 if (ret < 0) {
994 printk(KERN_ERR PFX "64b DMA configuration failed\n"); 994 printk(KERN_ERR PFX "64b DMA configuration failed\n");
995 goto bail2; 995 goto bail2;
996 } 996 }
997 } else { 997 } else {
998 ret = pci_set_dma_mask(pcidev, DMA_32BIT_MASK); 998 ret = pci_set_dma_mask(pcidev, DMA_BIT_MASK(32));
999 if (ret < 0) { 999 if (ret < 0) {
1000 printk(KERN_ERR PFX "32b DMA configuration failed\n"); 1000 printk(KERN_ERR PFX "32b DMA configuration failed\n");
1001 goto bail2; 1001 goto bail2;
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index cb9daa6ac029..04e88b600558 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -470,14 +470,14 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,
470 goto bail_disable; 470 goto bail_disable;
471 } 471 }
472 472
473 ret = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 473 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
474 if (ret) { 474 if (ret) {
475 /* 475 /*
476 * if the 64 bit setup fails, try 32 bit. Some systems 476 * if the 64 bit setup fails, try 32 bit. Some systems
477 * do not setup 64 bit maps on systems with 2GB or less 477 * do not setup 64 bit maps on systems with 2GB or less
478 * memory installed. 478 * memory installed.
479 */ 479 */
480 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 480 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
481 if (ret) { 481 if (ret) {
482 dev_info(&pdev->dev, 482 dev_info(&pdev->dev,
483 "Unable to set DMA mask for unit %u: %d\n", 483 "Unable to set DMA mask for unit %u: %d\n",
@@ -486,7 +486,7 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,
486 } 486 }
487 else { 487 else {
488 ipath_dbg("No 64bit DMA mask, used 32 bit mask\n"); 488 ipath_dbg("No 64bit DMA mask, used 32 bit mask\n");
489 ret = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 489 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
490 if (ret) 490 if (ret)
491 dev_info(&pdev->dev, 491 dev_info(&pdev->dev,
492 "Unable to set DMA consistent mask " 492 "Unable to set DMA consistent mask "
@@ -496,7 +496,7 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,
496 } 496 }
497 } 497 }
498 else { 498 else {
499 ret = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 499 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
500 if (ret) 500 if (ret)
501 dev_info(&pdev->dev, 501 dev_info(&pdev->dev,
502 "Unable to set DMA consistent mask " 502 "Unable to set DMA consistent mask "
diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
index 52f60f4eea00..1d83cf7caf38 100644
--- a/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/drivers/infiniband/hw/mthca/mthca_main.c
@@ -1016,20 +1016,20 @@ static int __mthca_init_one(struct pci_dev *pdev, int hca_type)
1016 1016
1017 pci_set_master(pdev); 1017 pci_set_master(pdev);
1018 1018
1019 err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1019 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1020 if (err) { 1020 if (err) {
1021 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit PCI DMA mask.\n"); 1021 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit PCI DMA mask.\n");
1022 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1022 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1023 if (err) { 1023 if (err) {
1024 dev_err(&pdev->dev, "Can't set PCI DMA mask, aborting.\n"); 1024 dev_err(&pdev->dev, "Can't set PCI DMA mask, aborting.\n");
1025 goto err_free_res; 1025 goto err_free_res;
1026 } 1026 }
1027 } 1027 }
1028 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 1028 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1029 if (err) { 1029 if (err) {
1030 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit " 1030 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit "
1031 "consistent PCI DMA mask.\n"); 1031 "consistent PCI DMA mask.\n");
1032 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1032 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1033 if (err) { 1033 if (err) {
1034 dev_err(&pdev->dev, "Can't set consistent PCI DMA mask, " 1034 dev_err(&pdev->dev, "Can't set consistent PCI DMA mask, "
1035 "aborting.\n"); 1035 "aborting.\n");
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index ca599767ffbd..cbde0cfe27e0 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -478,23 +478,23 @@ static int __devinit nes_probe(struct pci_dev *pcidev, const struct pci_device_i
478 } 478 }
479 479
480 if ((sizeof(dma_addr_t) > 4)) { 480 if ((sizeof(dma_addr_t) > 4)) {
481 ret = pci_set_dma_mask(pcidev, DMA_64BIT_MASK); 481 ret = pci_set_dma_mask(pcidev, DMA_BIT_MASK(64));
482 if (ret < 0) { 482 if (ret < 0) {
483 printk(KERN_ERR PFX "64b DMA mask configuration failed\n"); 483 printk(KERN_ERR PFX "64b DMA mask configuration failed\n");
484 goto bail2; 484 goto bail2;
485 } 485 }
486 ret = pci_set_consistent_dma_mask(pcidev, DMA_64BIT_MASK); 486 ret = pci_set_consistent_dma_mask(pcidev, DMA_BIT_MASK(64));
487 if (ret) { 487 if (ret) {
488 printk(KERN_ERR PFX "64b DMA consistent mask configuration failed\n"); 488 printk(KERN_ERR PFX "64b DMA consistent mask configuration failed\n");
489 goto bail2; 489 goto bail2;
490 } 490 }
491 } else { 491 } else {
492 ret = pci_set_dma_mask(pcidev, DMA_32BIT_MASK); 492 ret = pci_set_dma_mask(pcidev, DMA_BIT_MASK(32));
493 if (ret < 0) { 493 if (ret < 0) {
494 printk(KERN_ERR PFX "32b DMA mask configuration failed\n"); 494 printk(KERN_ERR PFX "32b DMA mask configuration failed\n");
495 goto bail2; 495 goto bail2;
496 } 496 }
497 ret = pci_set_consistent_dma_mask(pcidev, DMA_32BIT_MASK); 497 ret = pci_set_consistent_dma_mask(pcidev, DMA_BIT_MASK(32));
498 if (ret) { 498 if (ret) {
499 printk(KERN_ERR PFX "32b DMA consistent mask configuration failed\n"); 499 printk(KERN_ERR PFX "32b DMA consistent mask configuration failed\n");
500 goto bail2; 500 goto bail2;
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
index 831ddce1467b..781c4041f7b0 100644
--- a/drivers/isdn/gigaset/bas-gigaset.c
+++ b/drivers/isdn/gigaset/bas-gigaset.c
@@ -821,7 +821,7 @@ static void read_iso_callback(struct urb *urb)
821 /* pass URB to tasklet */ 821 /* pass URB to tasklet */
822 ubc->isoindone = urb; 822 ubc->isoindone = urb;
823 ubc->isoinstatus = status; 823 ubc->isoinstatus = status;
824 tasklet_schedule(&ubc->rcvd_tasklet); 824 tasklet_hi_schedule(&ubc->rcvd_tasklet);
825 } else { 825 } else {
826 /* tasklet still busy, drop data and resubmit URB */ 826 /* tasklet still busy, drop data and resubmit URB */
827 ubc->loststatus = status; 827 ubc->loststatus = status;
@@ -888,7 +888,7 @@ static void write_iso_callback(struct urb *urb)
888 ubc->isooutovfl = ubc->isooutdone; 888 ubc->isooutovfl = ubc->isooutdone;
889 ubc->isooutdone = ucx; 889 ubc->isooutdone = ucx;
890 spin_unlock_irqrestore(&ubc->isooutlock, flags); 890 spin_unlock_irqrestore(&ubc->isooutlock, flags);
891 tasklet_schedule(&ubc->sent_tasklet); 891 tasklet_hi_schedule(&ubc->sent_tasklet);
892} 892}
893 893
894/* starturbs 894/* starturbs
diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c
index 311e7ca0fb01..820a30923fee 100644
--- a/drivers/isdn/gigaset/interface.c
+++ b/drivers/isdn/gigaset/interface.c
@@ -193,7 +193,9 @@ static void if_close(struct tty_struct *tty, struct file *filp)
193 193
194 mutex_lock(&cs->mutex); 194 mutex_lock(&cs->mutex);
195 195
196 if (!cs->open_count) 196 if (!cs->connected)
197 gig_dbg(DEBUG_IF, "not connected"); /* nothing to do */
198 else if (!cs->open_count)
197 dev_warn(cs->dev, "%s: device not opened\n", __func__); 199 dev_warn(cs->dev, "%s: device not opened\n", __func__);
198 else { 200 else {
199 if (!--cs->open_count) { 201 if (!--cs->open_count) {
@@ -228,7 +230,10 @@ static int if_ioctl(struct tty_struct *tty, struct file *file,
228 if (mutex_lock_interruptible(&cs->mutex)) 230 if (mutex_lock_interruptible(&cs->mutex))
229 return -ERESTARTSYS; // FIXME -EINTR? 231 return -ERESTARTSYS; // FIXME -EINTR?
230 232
231 if (!cs->open_count) 233 if (!cs->connected) {
234 gig_dbg(DEBUG_IF, "not connected");
235 retval = -ENODEV;
236 } else if (!cs->open_count)
232 dev_warn(cs->dev, "%s: device not opened\n", __func__); 237 dev_warn(cs->dev, "%s: device not opened\n", __func__);
233 else { 238 else {
234 retval = 0; 239 retval = 0;
@@ -248,13 +253,6 @@ static int if_ioctl(struct tty_struct *tty, struct file *file,
248 retval = put_user(int_arg, (int __user *) arg); 253 retval = put_user(int_arg, (int __user *) arg);
249 break; 254 break;
250 case GIGASET_BRKCHARS: 255 case GIGASET_BRKCHARS:
251 //FIXME test if MS_LOCKED
252 if (!cs->connected) {
253 gig_dbg(DEBUG_ANY,
254 "can't communicate with unplugged device");
255 retval = -ENODEV;
256 break;
257 }
258 retval = copy_from_user(&buf, 256 retval = copy_from_user(&buf,
259 (const unsigned char __user *) arg, 6) 257 (const unsigned char __user *) arg, 6)
260 ? -EFAULT : 0; 258 ? -EFAULT : 0;
@@ -331,7 +329,7 @@ static int if_tiocmset(struct tty_struct *tty, struct file *file,
331 return -ERESTARTSYS; // FIXME -EINTR? 329 return -ERESTARTSYS; // FIXME -EINTR?
332 330
333 if (!cs->connected) { 331 if (!cs->connected) {
334 gig_dbg(DEBUG_ANY, "can't communicate with unplugged device"); 332 gig_dbg(DEBUG_IF, "not connected");
335 retval = -ENODEV; 333 retval = -ENODEV;
336 } else { 334 } else {
337 mc = (cs->control_state | set) & ~clear & (TIOCM_RTS|TIOCM_DTR); 335 mc = (cs->control_state | set) & ~clear & (TIOCM_RTS|TIOCM_DTR);
@@ -360,14 +358,14 @@ static int if_write(struct tty_struct *tty, const unsigned char *buf, int count)
360 if (mutex_lock_interruptible(&cs->mutex)) 358 if (mutex_lock_interruptible(&cs->mutex))
361 return -ERESTARTSYS; // FIXME -EINTR? 359 return -ERESTARTSYS; // FIXME -EINTR?
362 360
363 if (!cs->open_count) 361 if (!cs->connected) {
362 gig_dbg(DEBUG_IF, "not connected");
363 retval = -ENODEV;
364 } else if (!cs->open_count)
364 dev_warn(cs->dev, "%s: device not opened\n", __func__); 365 dev_warn(cs->dev, "%s: device not opened\n", __func__);
365 else if (cs->mstate != MS_LOCKED) { 366 else if (cs->mstate != MS_LOCKED) {
366 dev_warn(cs->dev, "can't write to unlocked device\n"); 367 dev_warn(cs->dev, "can't write to unlocked device\n");
367 retval = -EBUSY; 368 retval = -EBUSY;
368 } else if (!cs->connected) {
369 gig_dbg(DEBUG_ANY, "can't write to unplugged device");
370 retval = -EBUSY; //FIXME
371 } else { 369 } else {
372 retval = cs->ops->write_cmd(cs, buf, count, 370 retval = cs->ops->write_cmd(cs, buf, count,
373 &cs->if_wake_tasklet); 371 &cs->if_wake_tasklet);
@@ -394,14 +392,14 @@ static int if_write_room(struct tty_struct *tty)
394 if (mutex_lock_interruptible(&cs->mutex)) 392 if (mutex_lock_interruptible(&cs->mutex))
395 return -ERESTARTSYS; // FIXME -EINTR? 393 return -ERESTARTSYS; // FIXME -EINTR?
396 394
397 if (!cs->open_count) 395 if (!cs->connected) {
396 gig_dbg(DEBUG_IF, "not connected");
397 retval = -ENODEV;
398 } else if (!cs->open_count)
398 dev_warn(cs->dev, "%s: device not opened\n", __func__); 399 dev_warn(cs->dev, "%s: device not opened\n", __func__);
399 else if (cs->mstate != MS_LOCKED) { 400 else if (cs->mstate != MS_LOCKED) {
400 dev_warn(cs->dev, "can't write to unlocked device\n"); 401 dev_warn(cs->dev, "can't write to unlocked device\n");
401 retval = -EBUSY; 402 retval = -EBUSY;
402 } else if (!cs->connected) {
403 gig_dbg(DEBUG_ANY, "can't write to unplugged device");
404 retval = -EBUSY; //FIXME
405 } else 403 } else
406 retval = cs->ops->write_room(cs); 404 retval = cs->ops->write_room(cs);
407 405
@@ -426,14 +424,14 @@ static int if_chars_in_buffer(struct tty_struct *tty)
426 if (mutex_lock_interruptible(&cs->mutex)) 424 if (mutex_lock_interruptible(&cs->mutex))
427 return -ERESTARTSYS; // FIXME -EINTR? 425 return -ERESTARTSYS; // FIXME -EINTR?
428 426
429 if (!cs->open_count) 427 if (!cs->connected) {
428 gig_dbg(DEBUG_IF, "not connected");
429 retval = -ENODEV;
430 } else if (!cs->open_count)
430 dev_warn(cs->dev, "%s: device not opened\n", __func__); 431 dev_warn(cs->dev, "%s: device not opened\n", __func__);
431 else if (cs->mstate != MS_LOCKED) { 432 else if (cs->mstate != MS_LOCKED) {
432 dev_warn(cs->dev, "can't write to unlocked device\n"); 433 dev_warn(cs->dev, "can't write to unlocked device\n");
433 retval = -EBUSY; 434 retval = -EBUSY;
434 } else if (!cs->connected) {
435 gig_dbg(DEBUG_ANY, "can't write to unplugged device");
436 retval = -EBUSY; //FIXME
437 } else 435 } else
438 retval = cs->ops->chars_in_buffer(cs); 436 retval = cs->ops->chars_in_buffer(cs);
439 437
@@ -456,7 +454,9 @@ static void if_throttle(struct tty_struct *tty)
456 454
457 mutex_lock(&cs->mutex); 455 mutex_lock(&cs->mutex);
458 456
459 if (!cs->open_count) 457 if (!cs->connected)
458 gig_dbg(DEBUG_IF, "not connected"); /* nothing to do */
459 else if (!cs->open_count)
460 dev_warn(cs->dev, "%s: device not opened\n", __func__); 460 dev_warn(cs->dev, "%s: device not opened\n", __func__);
461 else { 461 else {
462 //FIXME 462 //FIXME
@@ -479,7 +479,9 @@ static void if_unthrottle(struct tty_struct *tty)
479 479
480 mutex_lock(&cs->mutex); 480 mutex_lock(&cs->mutex);
481 481
482 if (!cs->open_count) 482 if (!cs->connected)
483 gig_dbg(DEBUG_IF, "not connected"); /* nothing to do */
484 else if (!cs->open_count)
483 dev_warn(cs->dev, "%s: device not opened\n", __func__); 485 dev_warn(cs->dev, "%s: device not opened\n", __func__);
484 else { 486 else {
485 //FIXME 487 //FIXME
@@ -506,13 +508,13 @@ static void if_set_termios(struct tty_struct *tty, struct ktermios *old)
506 508
507 mutex_lock(&cs->mutex); 509 mutex_lock(&cs->mutex);
508 510
509 if (!cs->open_count) { 511 if (!cs->connected) {
510 dev_warn(cs->dev, "%s: device not opened\n", __func__); 512 gig_dbg(DEBUG_IF, "not connected");
511 goto out; 513 goto out;
512 } 514 }
513 515
514 if (!cs->connected) { 516 if (!cs->open_count) {
515 gig_dbg(DEBUG_ANY, "can't communicate with unplugged device"); 517 dev_warn(cs->dev, "%s: device not opened\n", __func__);
516 goto out; 518 goto out;
517 } 519 }
518 520
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index d9db17624f12..9b60b6b684d9 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -31,6 +31,13 @@ config LEDS_LOCOMO
31 This option enables support for the LEDs on Sharp Locomo. 31 This option enables support for the LEDs on Sharp Locomo.
32 Zaurus models SL-5500 and SL-5600. 32 Zaurus models SL-5500 and SL-5600.
33 33
34config LEDS_MIKROTIK_RB532
35 tristate "LED Support for Mikrotik Routerboard 532"
36 depends on LEDS_CLASS && MIKROTIK_RB532
37 help
38 This option enables support for the so called "User LED" of
39 Mikrotik's Routerboard 532.
40
34config LEDS_S3C24XX 41config LEDS_S3C24XX
35 tristate "LED Support for Samsung S3C24XX GPIO LEDs" 42 tristate "LED Support for Samsung S3C24XX GPIO LEDs"
36 depends on LEDS_CLASS && ARCH_S3C2410 43 depends on LEDS_CLASS && ARCH_S3C2410
@@ -117,11 +124,40 @@ config LEDS_GPIO
117 help 124 help
118 This option enables support for the LEDs connected to GPIO 125 This option enables support for the LEDs connected to GPIO
119 outputs. To be useful the particular board must have LEDs 126 outputs. To be useful the particular board must have LEDs
120 and they must be connected to the GPIO lines. 127 and they must be connected to the GPIO lines. The LEDs must be
128 defined as platform devices and/or OpenFirmware platform devices.
129 The code to use these bindings can be selected below.
130
131config LEDS_GPIO_PLATFORM
132 bool "Platform device bindings for GPIO LEDs"
133 depends on LEDS_GPIO
134 default y
135 help
136 Let the leds-gpio driver drive LEDs which have been defined as
137 platform devices. If you don't know what this means, say yes.
138
139config LEDS_GPIO_OF
140 bool "OpenFirmware platform device bindings for GPIO LEDs"
141 depends on LEDS_GPIO && OF_DEVICE
142 default y
143 help
144 Let the leds-gpio driver drive LEDs which have been defined as
145 of_platform devices. For instance, LEDs which are listed in a "dts"
146 file.
147
148config LEDS_LP5521
149 tristate "LED Support for the LP5521 LEDs"
150 depends on LEDS_CLASS && I2C
151 help
152 If you say 'Y' here you get support for the National Semiconductor
153 LP5521 LED driver used in n8x0 boards.
154
155 This driver can be built as a module by choosing 'M'. The module
156 will be called leds-lp5521.
121 157
122config LEDS_CLEVO_MAIL 158config LEDS_CLEVO_MAIL
123 tristate "Mail LED on Clevo notebook (EXPERIMENTAL)" 159 tristate "Mail LED on Clevo notebook"
124 depends on LEDS_CLASS && X86 && SERIO_I8042 && DMI && EXPERIMENTAL 160 depends on LEDS_CLASS && X86 && SERIO_I8042 && DMI
125 help 161 help
126 This driver makes the mail LED accessible from userspace 162 This driver makes the mail LED accessible from userspace
127 programs through the leds subsystem. This LED have three 163 programs through the leds subsystem. This LED have three
@@ -171,6 +207,26 @@ config LEDS_DA903X
171 This option enables support for on-chip LED drivers found 207 This option enables support for on-chip LED drivers found
172 on Dialog Semiconductor DA9030/DA9034 PMICs. 208 on Dialog Semiconductor DA9030/DA9034 PMICs.
173 209
210config LEDS_DAC124S085
211 tristate "LED Support for DAC124S085 SPI DAC"
212 depends on LEDS_CLASS && SPI
213 help
214 This option enables support for DAC124S085 SPI DAC from NatSemi,
215 which can be used to control up to four LEDs.
216
217config LEDS_PWM
218 tristate "PWM driven LED Support"
219 depends on LEDS_CLASS && HAVE_PWM
220 help
221 This option enables support for pwm driven LEDs
222
223config LEDS_BD2802
224 tristate "LED driver for BD2802 RGB LED"
225 depends on LEDS_CLASS && I2C
226 help
227 This option enables support for BD2802GU RGB LED driver chips
228 accessed via the I2C bus.
229
174comment "LED Triggers" 230comment "LED Triggers"
175 231
176config LEDS_TRIGGERS 232config LEDS_TRIGGERS
@@ -216,6 +272,19 @@ config LEDS_TRIGGER_BACKLIGHT
216 272
217 If unsure, say N. 273 If unsure, say N.
218 274
275config LEDS_TRIGGER_GPIO
276 tristate "LED GPIO Trigger"
277 depends on LEDS_TRIGGERS
278 depends on GPIOLIB
279 help
280 This allows LEDs to be controlled by gpio events. It's good
281 when using gpios as switches and triggering the needed LEDs
282 from there. One use case is n810's keypad LEDs that could
283 be triggered by this trigger when user slides up to show
284 keypad.
285
286 If unsure, say N.
287
219config LEDS_TRIGGER_DEFAULT_ON 288config LEDS_TRIGGER_DEFAULT_ON
220 tristate "LED Default ON Trigger" 289 tristate "LED Default ON Trigger"
221 depends on LEDS_TRIGGERS 290 depends on LEDS_TRIGGERS
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 9d76f0f160a4..2d41c4dcf92f 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -6,7 +6,9 @@ obj-$(CONFIG_LEDS_TRIGGERS) += led-triggers.o
6 6
7# LED Platform Drivers 7# LED Platform Drivers
8obj-$(CONFIG_LEDS_ATMEL_PWM) += leds-atmel-pwm.o 8obj-$(CONFIG_LEDS_ATMEL_PWM) += leds-atmel-pwm.o
9obj-$(CONFIG_LEDS_BD2802) += leds-bd2802.o
9obj-$(CONFIG_LEDS_LOCOMO) += leds-locomo.o 10obj-$(CONFIG_LEDS_LOCOMO) += leds-locomo.o
11obj-$(CONFIG_LEDS_MIKROTIK_RB532) += leds-rb532.o
10obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o 12obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o
11obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o 13obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o
12obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o 14obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o
@@ -24,10 +26,15 @@ obj-$(CONFIG_LEDS_FSG) += leds-fsg.o
24obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o 26obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o
25obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o 27obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o
26obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o 28obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o
29obj-$(CONFIG_LEDS_PWM) += leds-pwm.o
30
31# LED SPI Drivers
32obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o
27 33
28# LED Triggers 34# LED Triggers
29obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o 35obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
30obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o 36obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o
31obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o 37obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o
32obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o 38obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o
39obj-$(CONFIG_LEDS_TRIGGER_GPIO) += ledtrig-gpio.o
33obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o 40obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 52f82e3ea13a..f2cc13d76810 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -64,7 +64,16 @@ static ssize_t led_brightness_store(struct device *dev,
64 return ret; 64 return ret;
65} 65}
66 66
67static ssize_t led_max_brightness_show(struct device *dev,
68 struct device_attribute *attr, char *buf)
69{
70 struct led_classdev *led_cdev = dev_get_drvdata(dev);
71
72 return sprintf(buf, "%u\n", led_cdev->max_brightness);
73}
74
67static DEVICE_ATTR(brightness, 0644, led_brightness_show, led_brightness_store); 75static DEVICE_ATTR(brightness, 0644, led_brightness_show, led_brightness_store);
76static DEVICE_ATTR(max_brightness, 0444, led_max_brightness_show, NULL);
68#ifdef CONFIG_LEDS_TRIGGERS 77#ifdef CONFIG_LEDS_TRIGGERS
69static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store); 78static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store);
70#endif 79#endif
@@ -138,6 +147,13 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
138 list_add_tail(&led_cdev->node, &leds_list); 147 list_add_tail(&led_cdev->node, &leds_list);
139 up_write(&leds_list_lock); 148 up_write(&leds_list_lock);
140 149
150 if (!led_cdev->max_brightness)
151 led_cdev->max_brightness = LED_FULL;
152
153 rc = device_create_file(led_cdev->dev, &dev_attr_max_brightness);
154 if (rc)
155 goto err_out_attr_max;
156
141 led_update_brightness(led_cdev); 157 led_update_brightness(led_cdev);
142 158
143#ifdef CONFIG_LEDS_TRIGGERS 159#ifdef CONFIG_LEDS_TRIGGERS
@@ -155,9 +171,11 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
155 171
156#ifdef CONFIG_LEDS_TRIGGERS 172#ifdef CONFIG_LEDS_TRIGGERS
157err_out_led_list: 173err_out_led_list:
174 device_remove_file(led_cdev->dev, &dev_attr_max_brightness);
175#endif
176err_out_attr_max:
158 device_remove_file(led_cdev->dev, &dev_attr_brightness); 177 device_remove_file(led_cdev->dev, &dev_attr_brightness);
159 list_del(&led_cdev->node); 178 list_del(&led_cdev->node);
160#endif
161err_out: 179err_out:
162 device_unregister(led_cdev->dev); 180 device_unregister(led_cdev->dev);
163 return rc; 181 return rc;
@@ -172,6 +190,7 @@ EXPORT_SYMBOL_GPL(led_classdev_register);
172 */ 190 */
173void led_classdev_unregister(struct led_classdev *led_cdev) 191void led_classdev_unregister(struct led_classdev *led_cdev)
174{ 192{
193 device_remove_file(led_cdev->dev, &dev_attr_max_brightness);
175 device_remove_file(led_cdev->dev, &dev_attr_brightness); 194 device_remove_file(led_cdev->dev, &dev_attr_brightness);
176#ifdef CONFIG_LEDS_TRIGGERS 195#ifdef CONFIG_LEDS_TRIGGERS
177 device_remove_file(led_cdev->dev, &dev_attr_trigger); 196 device_remove_file(led_cdev->dev, &dev_attr_trigger);
diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c
index f910eaffe3a6..d8ddd9ef8994 100644
--- a/drivers/leds/led-triggers.c
+++ b/drivers/leds/led-triggers.c
@@ -156,12 +156,20 @@ EXPORT_SYMBOL_GPL(led_trigger_set_default);
156int led_trigger_register(struct led_trigger *trigger) 156int led_trigger_register(struct led_trigger *trigger)
157{ 157{
158 struct led_classdev *led_cdev; 158 struct led_classdev *led_cdev;
159 struct led_trigger *trig;
159 160
160 rwlock_init(&trigger->leddev_list_lock); 161 rwlock_init(&trigger->leddev_list_lock);
161 INIT_LIST_HEAD(&trigger->led_cdevs); 162 INIT_LIST_HEAD(&trigger->led_cdevs);
162 163
163 /* Add to the list of led triggers */
164 down_write(&triggers_list_lock); 164 down_write(&triggers_list_lock);
165 /* Make sure the trigger's name isn't already in use */
166 list_for_each_entry(trig, &trigger_list, next_trig) {
167 if (!strcmp(trig->name, trigger->name)) {
168 up_write(&triggers_list_lock);
169 return -EEXIST;
170 }
171 }
172 /* Add to the list of led triggers */
165 list_add_tail(&trigger->next_trig, &trigger_list); 173 list_add_tail(&trigger->next_trig, &trigger_list);
166 up_write(&triggers_list_lock); 174 up_write(&triggers_list_lock);
167 175
diff --git a/drivers/leds/leds-bd2802.c b/drivers/leds/leds-bd2802.c
new file mode 100644
index 000000000000..4149ecb3a9b2
--- /dev/null
+++ b/drivers/leds/leds-bd2802.c
@@ -0,0 +1,765 @@
1/*
2 * leds-bd2802.c - RGB LED Driver
3 *
4 * Copyright (C) 2009 Samsung Electronics
5 * Kim Kyuwon <q1.kim@samsung.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * Datasheet: http://www.rohm.com/products/databook/driver/pdf/bd2802gu-e.pdf
12 *
13 */
14
15#include <linux/module.h>
16#include <linux/i2c.h>
17#include <linux/gpio.h>
18#include <linux/delay.h>
19#include <linux/leds.h>
20#include <linux/leds-bd2802.h>
21
22
23#define LED_CTL(rgb2en, rgb1en) ((rgb2en) << 4 | ((rgb1en) << 0))
24
25#define BD2802_LED_OFFSET 0xa
26#define BD2802_COLOR_OFFSET 0x3
27
28#define BD2802_REG_CLKSETUP 0x00
29#define BD2802_REG_CONTROL 0x01
30#define BD2802_REG_HOURSETUP 0x02
31#define BD2802_REG_CURRENT1SETUP 0x03
32#define BD2802_REG_CURRENT2SETUP 0x04
33#define BD2802_REG_WAVEPATTERN 0x05
34
35#define BD2802_CURRENT_032 0x10 /* 3.2mA */
36#define BD2802_CURRENT_000 0x00 /* 0.0mA */
37
38#define BD2802_PATTERN_FULL 0x07
39#define BD2802_PATTERN_HALF 0x03
40
41enum led_ids {
42 LED1,
43 LED2,
44 LED_NUM,
45};
46
47enum led_colors {
48 RED,
49 GREEN,
50 BLUE,
51};
52
53enum led_bits {
54 BD2802_OFF,
55 BD2802_BLINK,
56 BD2802_ON,
57};
58
59/*
60 * State '0' : 'off'
61 * State '1' : 'blink'
62 * State '2' : 'on'.
63 */
64struct led_state {
65 unsigned r:2;
66 unsigned g:2;
67 unsigned b:2;
68};
69
70struct bd2802_led {
71 struct bd2802_led_platform_data *pdata;
72 struct i2c_client *client;
73 struct rw_semaphore rwsem;
74 struct work_struct work;
75
76 struct led_state led[2];
77
78 /*
79 * Making led_classdev as array is not recommended, because array
80 * members prevent using 'container_of' macro. So repetitive works
81 * are needed.
82 */
83 struct led_classdev cdev_led1r;
84 struct led_classdev cdev_led1g;
85 struct led_classdev cdev_led1b;
86 struct led_classdev cdev_led2r;
87 struct led_classdev cdev_led2g;
88 struct led_classdev cdev_led2b;
89
90 /*
91 * Advanced Configuration Function(ADF) mode:
92 * In ADF mode, user can set registers of BD2802GU directly,
93 * therefore BD2802GU doesn't enter reset state.
94 */
95 int adf_on;
96
97 enum led_ids led_id;
98 enum led_colors color;
99 enum led_bits state;
100};
101
102
103/*--------------------------------------------------------------*/
104/* BD2802GU helper functions */
105/*--------------------------------------------------------------*/
106
107static inline int bd2802_is_rgb_off(struct bd2802_led *led, enum led_ids id,
108 enum led_colors color)
109{
110 switch (color) {
111 case RED:
112 return !led->led[id].r;
113 case GREEN:
114 return !led->led[id].g;
115 case BLUE:
116 return !led->led[id].b;
117 default:
118 dev_err(&led->client->dev, "%s: Invalid color\n", __func__);
119 return -EINVAL;
120 }
121}
122
123static inline int bd2802_is_led_off(struct bd2802_led *led, enum led_ids id)
124{
125 if (led->led[id].r || led->led[id].g || led->led[id].b)
126 return 0;
127
128 return 1;
129}
130
131static inline int bd2802_is_all_off(struct bd2802_led *led)
132{
133 int i;
134
135 for (i = 0; i < LED_NUM; i++)
136 if (!bd2802_is_led_off(led, i))
137 return 0;
138
139 return 1;
140}
141
142static inline u8 bd2802_get_base_offset(enum led_ids id, enum led_colors color)
143{
144 return id * BD2802_LED_OFFSET + color * BD2802_COLOR_OFFSET;
145}
146
147static inline u8 bd2802_get_reg_addr(enum led_ids id, enum led_colors color,
148 u8 reg_offset)
149{
150 return reg_offset + bd2802_get_base_offset(id, color);
151}
152
153
154/*--------------------------------------------------------------*/
155/* BD2802GU core functions */
156/*--------------------------------------------------------------*/
157
158static int bd2802_write_byte(struct i2c_client *client, u8 reg, u8 val)
159{
160 int ret = i2c_smbus_write_byte_data(client, reg, val);
161 if (ret >= 0)
162 return 0;
163
164 dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
165 __func__, reg, val, ret);
166
167 return ret;
168}
169
170static void bd2802_update_state(struct bd2802_led *led, enum led_ids id,
171 enum led_colors color, enum led_bits led_bit)
172{
173 int i;
174 u8 value;
175
176 for (i = 0; i < LED_NUM; i++) {
177 if (i == id) {
178 switch (color) {
179 case RED:
180 led->led[i].r = led_bit;
181 break;
182 case GREEN:
183 led->led[i].g = led_bit;
184 break;
185 case BLUE:
186 led->led[i].b = led_bit;
187 break;
188 default:
189 dev_err(&led->client->dev,
190 "%s: Invalid color\n", __func__);
191 return;
192 }
193 }
194 }
195
196 if (led_bit == BD2802_BLINK || led_bit == BD2802_ON)
197 return;
198
199 if (!bd2802_is_led_off(led, id))
200 return;
201
202 if (bd2802_is_all_off(led) && !led->adf_on) {
203 gpio_set_value(led->pdata->reset_gpio, 0);
204 return;
205 }
206
207 /*
208 * In this case, other led is turned on, and current led is turned
209 * off. So set RGB LED Control register to stop the current RGB LED
210 */
211 value = (id == LED1) ? LED_CTL(1, 0) : LED_CTL(0, 1);
212 bd2802_write_byte(led->client, BD2802_REG_CONTROL, value);
213}
214
215static void bd2802_configure(struct bd2802_led *led)
216{
217 struct bd2802_led_platform_data *pdata = led->pdata;
218 u8 reg;
219
220 reg = bd2802_get_reg_addr(LED1, RED, BD2802_REG_HOURSETUP);
221 bd2802_write_byte(led->client, reg, pdata->rgb_time);
222
223 reg = bd2802_get_reg_addr(LED2, RED, BD2802_REG_HOURSETUP);
224 bd2802_write_byte(led->client, reg, pdata->rgb_time);
225}
226
227static void bd2802_reset_cancel(struct bd2802_led *led)
228{
229 gpio_set_value(led->pdata->reset_gpio, 1);
230 udelay(100);
231 bd2802_configure(led);
232}
233
234static void bd2802_enable(struct bd2802_led *led, enum led_ids id)
235{
236 enum led_ids other_led = (id == LED1) ? LED2 : LED1;
237 u8 value, other_led_on;
238
239 other_led_on = !bd2802_is_led_off(led, other_led);
240 if (id == LED1)
241 value = LED_CTL(other_led_on, 1);
242 else
243 value = LED_CTL(1 , other_led_on);
244
245 bd2802_write_byte(led->client, BD2802_REG_CONTROL, value);
246}
247
248static void bd2802_set_on(struct bd2802_led *led, enum led_ids id,
249 enum led_colors color)
250{
251 u8 reg;
252
253 if (bd2802_is_all_off(led) && !led->adf_on)
254 bd2802_reset_cancel(led);
255
256 reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP);
257 bd2802_write_byte(led->client, reg, BD2802_CURRENT_032);
258 reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP);
259 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000);
260 reg = bd2802_get_reg_addr(id, color, BD2802_REG_WAVEPATTERN);
261 bd2802_write_byte(led->client, reg, BD2802_PATTERN_FULL);
262
263 bd2802_enable(led, id);
264 bd2802_update_state(led, id, color, BD2802_ON);
265}
266
267static void bd2802_set_blink(struct bd2802_led *led, enum led_ids id,
268 enum led_colors color)
269{
270 u8 reg;
271
272 if (bd2802_is_all_off(led) && !led->adf_on)
273 bd2802_reset_cancel(led);
274
275 reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP);
276 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000);
277 reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP);
278 bd2802_write_byte(led->client, reg, BD2802_CURRENT_032);
279 reg = bd2802_get_reg_addr(id, color, BD2802_REG_WAVEPATTERN);
280 bd2802_write_byte(led->client, reg, BD2802_PATTERN_HALF);
281
282 bd2802_enable(led, id);
283 bd2802_update_state(led, id, color, BD2802_BLINK);
284}
285
286static void bd2802_turn_on(struct bd2802_led *led, enum led_ids id,
287 enum led_colors color, enum led_bits led_bit)
288{
289 if (led_bit == BD2802_OFF) {
290 dev_err(&led->client->dev,
291 "Only 'blink' and 'on' are allowed\n");
292 return;
293 }
294
295 if (led_bit == BD2802_BLINK)
296 bd2802_set_blink(led, id, color);
297 else
298 bd2802_set_on(led, id, color);
299}
300
301static void bd2802_turn_off(struct bd2802_led *led, enum led_ids id,
302 enum led_colors color)
303{
304 u8 reg;
305
306 if (bd2802_is_rgb_off(led, id, color))
307 return;
308
309 reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP);
310 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000);
311 reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP);
312 bd2802_write_byte(led->client, reg, BD2802_CURRENT_000);
313
314 bd2802_update_state(led, id, color, BD2802_OFF);
315}
316
317static void bd2802_restore_state(struct bd2802_led *led)
318{
319 int i;
320
321 for (i = 0; i < LED_NUM; i++) {
322 if (led->led[i].r)
323 bd2802_turn_on(led, i, RED, led->led[i].r);
324 if (led->led[i].g)
325 bd2802_turn_on(led, i, GREEN, led->led[i].g);
326 if (led->led[i].b)
327 bd2802_turn_on(led, i, BLUE, led->led[i].b);
328 }
329}
330
331#define BD2802_SET_REGISTER(reg_addr, reg_name) \
332static ssize_t bd2802_store_reg##reg_addr(struct device *dev, \
333 struct device_attribute *attr, const char *buf, size_t count) \
334{ \
335 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));\
336 unsigned long val; \
337 int ret; \
338 if (!count) \
339 return -EINVAL; \
340 ret = strict_strtoul(buf, 16, &val); \
341 if (ret) \
342 return ret; \
343 down_write(&led->rwsem); \
344 bd2802_write_byte(led->client, reg_addr, (u8) val); \
345 up_write(&led->rwsem); \
346 return count; \
347} \
348static struct device_attribute bd2802_reg##reg_addr##_attr = { \
349 .attr = {.name = reg_name, .mode = 0644, .owner = THIS_MODULE}, \
350 .store = bd2802_store_reg##reg_addr, \
351};
352
353BD2802_SET_REGISTER(0x00, "0x00");
354BD2802_SET_REGISTER(0x01, "0x01");
355BD2802_SET_REGISTER(0x02, "0x02");
356BD2802_SET_REGISTER(0x03, "0x03");
357BD2802_SET_REGISTER(0x04, "0x04");
358BD2802_SET_REGISTER(0x05, "0x05");
359BD2802_SET_REGISTER(0x06, "0x06");
360BD2802_SET_REGISTER(0x07, "0x07");
361BD2802_SET_REGISTER(0x08, "0x08");
362BD2802_SET_REGISTER(0x09, "0x09");
363BD2802_SET_REGISTER(0x0a, "0x0a");
364BD2802_SET_REGISTER(0x0b, "0x0b");
365BD2802_SET_REGISTER(0x0c, "0x0c");
366BD2802_SET_REGISTER(0x0d, "0x0d");
367BD2802_SET_REGISTER(0x0e, "0x0e");
368BD2802_SET_REGISTER(0x0f, "0x0f");
369BD2802_SET_REGISTER(0x10, "0x10");
370BD2802_SET_REGISTER(0x11, "0x11");
371BD2802_SET_REGISTER(0x12, "0x12");
372BD2802_SET_REGISTER(0x13, "0x13");
373BD2802_SET_REGISTER(0x14, "0x14");
374BD2802_SET_REGISTER(0x15, "0x15");
375
376static struct device_attribute *bd2802_addr_attributes[] = {
377 &bd2802_reg0x00_attr,
378 &bd2802_reg0x01_attr,
379 &bd2802_reg0x02_attr,
380 &bd2802_reg0x03_attr,
381 &bd2802_reg0x04_attr,
382 &bd2802_reg0x05_attr,
383 &bd2802_reg0x06_attr,
384 &bd2802_reg0x07_attr,
385 &bd2802_reg0x08_attr,
386 &bd2802_reg0x09_attr,
387 &bd2802_reg0x0a_attr,
388 &bd2802_reg0x0b_attr,
389 &bd2802_reg0x0c_attr,
390 &bd2802_reg0x0d_attr,
391 &bd2802_reg0x0e_attr,
392 &bd2802_reg0x0f_attr,
393 &bd2802_reg0x10_attr,
394 &bd2802_reg0x11_attr,
395 &bd2802_reg0x12_attr,
396 &bd2802_reg0x13_attr,
397 &bd2802_reg0x14_attr,
398 &bd2802_reg0x15_attr,
399};
400
401static void bd2802_enable_adv_conf(struct bd2802_led *led)
402{
403 int i, ret;
404
405 for (i = 0; i < ARRAY_SIZE(bd2802_addr_attributes); i++) {
406 ret = device_create_file(&led->client->dev,
407 bd2802_addr_attributes[i]);
408 if (ret) {
409 dev_err(&led->client->dev, "failed to sysfs file %s\n",
410 bd2802_addr_attributes[i]->attr.name);
411 goto failed_remove_files;
412 }
413 }
414
415 if (bd2802_is_all_off(led))
416 bd2802_reset_cancel(led);
417
418 led->adf_on = 1;
419
420 return;
421
422failed_remove_files:
423 for (i--; i >= 0; i--)
424 device_remove_file(&led->client->dev,
425 bd2802_addr_attributes[i]);
426}
427
428static void bd2802_disable_adv_conf(struct bd2802_led *led)
429{
430 int i;
431
432 for (i = 0; i < ARRAY_SIZE(bd2802_addr_attributes); i++)
433 device_remove_file(&led->client->dev,
434 bd2802_addr_attributes[i]);
435
436 if (bd2802_is_all_off(led))
437 gpio_set_value(led->pdata->reset_gpio, 0);
438
439 led->adf_on = 0;
440}
441
442static ssize_t bd2802_show_adv_conf(struct device *dev,
443 struct device_attribute *attr, char *buf)
444{
445 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));
446 ssize_t ret;
447
448 down_read(&led->rwsem);
449 if (led->adf_on)
450 ret = sprintf(buf, "on\n");
451 else
452 ret = sprintf(buf, "off\n");
453 up_read(&led->rwsem);
454
455 return ret;
456}
457
458static ssize_t bd2802_store_adv_conf(struct device *dev,
459 struct device_attribute *attr, const char *buf, size_t count)
460{
461 struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));
462
463 if (!count)
464 return -EINVAL;
465
466 down_write(&led->rwsem);
467 if (!led->adf_on && !strncmp(buf, "on", 2))
468 bd2802_enable_adv_conf(led);
469 else if (led->adf_on && !strncmp(buf, "off", 3))
470 bd2802_disable_adv_conf(led);
471 up_write(&led->rwsem);
472
473 return count;
474}
475
476static struct device_attribute bd2802_adv_conf_attr = {
477 .attr = {
478 .name = "advanced_configuration",
479 .mode = 0644,
480 .owner = THIS_MODULE
481 },
482 .show = bd2802_show_adv_conf,
483 .store = bd2802_store_adv_conf,
484};
485
486static void bd2802_led_work(struct work_struct *work)
487{
488 struct bd2802_led *led = container_of(work, struct bd2802_led, work);
489
490 if (led->state)
491 bd2802_turn_on(led, led->led_id, led->color, led->state);
492 else
493 bd2802_turn_off(led, led->led_id, led->color);
494}
495
496#define BD2802_CONTROL_RGBS(name, id, clr) \
497static void bd2802_set_##name##_brightness(struct led_classdev *led_cdev,\
498 enum led_brightness value) \
499{ \
500 struct bd2802_led *led = \
501 container_of(led_cdev, struct bd2802_led, cdev_##name); \
502 led->led_id = id; \
503 led->color = clr; \
504 if (value == LED_OFF) \
505 led->state = BD2802_OFF; \
506 else \
507 led->state = BD2802_ON; \
508 schedule_work(&led->work); \
509} \
510static int bd2802_set_##name##_blink(struct led_classdev *led_cdev, \
511 unsigned long *delay_on, unsigned long *delay_off) \
512{ \
513 struct bd2802_led *led = \
514 container_of(led_cdev, struct bd2802_led, cdev_##name); \
515 if (*delay_on == 0 || *delay_off == 0) \
516 return -EINVAL; \
517 led->led_id = id; \
518 led->color = clr; \
519 led->state = BD2802_BLINK; \
520 schedule_work(&led->work); \
521 return 0; \
522}
523
524BD2802_CONTROL_RGBS(led1r, LED1, RED);
525BD2802_CONTROL_RGBS(led1g, LED1, GREEN);
526BD2802_CONTROL_RGBS(led1b, LED1, BLUE);
527BD2802_CONTROL_RGBS(led2r, LED2, RED);
528BD2802_CONTROL_RGBS(led2g, LED2, GREEN);
529BD2802_CONTROL_RGBS(led2b, LED2, BLUE);
530
531static int bd2802_register_led_classdev(struct bd2802_led *led)
532{
533 int ret;
534
535 INIT_WORK(&led->work, bd2802_led_work);
536
537 led->cdev_led1r.name = "led1_R";
538 led->cdev_led1r.brightness = LED_OFF;
539 led->cdev_led1r.brightness_set = bd2802_set_led1r_brightness;
540 led->cdev_led1r.blink_set = bd2802_set_led1r_blink;
541 led->cdev_led1r.flags |= LED_CORE_SUSPENDRESUME;
542
543 ret = led_classdev_register(&led->client->dev, &led->cdev_led1r);
544 if (ret < 0) {
545 dev_err(&led->client->dev, "couldn't register LED %s\n",
546 led->cdev_led1r.name);
547 goto failed_unregister_led1_R;
548 }
549
550 led->cdev_led1g.name = "led1_G";
551 led->cdev_led1g.brightness = LED_OFF;
552 led->cdev_led1g.brightness_set = bd2802_set_led1g_brightness;
553 led->cdev_led1g.blink_set = bd2802_set_led1g_blink;
554 led->cdev_led1g.flags |= LED_CORE_SUSPENDRESUME;
555
556 ret = led_classdev_register(&led->client->dev, &led->cdev_led1g);
557 if (ret < 0) {
558 dev_err(&led->client->dev, "couldn't register LED %s\n",
559 led->cdev_led1g.name);
560 goto failed_unregister_led1_G;
561 }
562
563 led->cdev_led1b.name = "led1_B";
564 led->cdev_led1b.brightness = LED_OFF;
565 led->cdev_led1b.brightness_set = bd2802_set_led1b_brightness;
566 led->cdev_led1b.blink_set = bd2802_set_led1b_blink;
567 led->cdev_led1b.flags |= LED_CORE_SUSPENDRESUME;
568
569 ret = led_classdev_register(&led->client->dev, &led->cdev_led1b);
570 if (ret < 0) {
571 dev_err(&led->client->dev, "couldn't register LED %s\n",
572 led->cdev_led1b.name);
573 goto failed_unregister_led1_B;
574 }
575
576 led->cdev_led2r.name = "led2_R";
577 led->cdev_led2r.brightness = LED_OFF;
578 led->cdev_led2r.brightness_set = bd2802_set_led2r_brightness;
579 led->cdev_led2r.blink_set = bd2802_set_led2r_blink;
580 led->cdev_led2r.flags |= LED_CORE_SUSPENDRESUME;
581
582 ret = led_classdev_register(&led->client->dev, &led->cdev_led2r);
583 if (ret < 0) {
584 dev_err(&led->client->dev, "couldn't register LED %s\n",
585 led->cdev_led2r.name);
586 goto failed_unregister_led2_R;
587 }
588
589 led->cdev_led2g.name = "led2_G";
590 led->cdev_led2g.brightness = LED_OFF;
591 led->cdev_led2g.brightness_set = bd2802_set_led2g_brightness;
592 led->cdev_led2g.blink_set = bd2802_set_led2g_blink;
593 led->cdev_led2g.flags |= LED_CORE_SUSPENDRESUME;
594
595 ret = led_classdev_register(&led->client->dev, &led->cdev_led2g);
596 if (ret < 0) {
597 dev_err(&led->client->dev, "couldn't register LED %s\n",
598 led->cdev_led2g.name);
599 goto failed_unregister_led2_G;
600 }
601
602 led->cdev_led2b.name = "led2_B";
603 led->cdev_led2b.brightness = LED_OFF;
604 led->cdev_led2b.brightness_set = bd2802_set_led2b_brightness;
605 led->cdev_led2b.blink_set = bd2802_set_led2b_blink;
606 led->cdev_led2b.flags |= LED_CORE_SUSPENDRESUME;
607
608 ret = led_classdev_register(&led->client->dev, &led->cdev_led2b);
609 if (ret < 0) {
610 dev_err(&led->client->dev, "couldn't register LED %s\n",
611 led->cdev_led2b.name);
612 goto failed_unregister_led2_B;
613 }
614
615 return 0;
616
617failed_unregister_led2_B:
618 led_classdev_unregister(&led->cdev_led2g);
619failed_unregister_led2_G:
620 led_classdev_unregister(&led->cdev_led2r);
621failed_unregister_led2_R:
622 led_classdev_unregister(&led->cdev_led1b);
623failed_unregister_led1_B:
624 led_classdev_unregister(&led->cdev_led1g);
625failed_unregister_led1_G:
626 led_classdev_unregister(&led->cdev_led1r);
627failed_unregister_led1_R:
628
629 return ret;
630}
631
632static void bd2802_unregister_led_classdev(struct bd2802_led *led)
633{
634 cancel_work_sync(&led->work);
635 led_classdev_unregister(&led->cdev_led1r);
636}
637
638static int __devinit bd2802_probe(struct i2c_client *client,
639 const struct i2c_device_id *id)
640{
641 struct bd2802_led *led;
642 struct bd2802_led_platform_data *pdata;
643 int ret;
644
645 led = kzalloc(sizeof(struct bd2802_led), GFP_KERNEL);
646 if (!led) {
647 dev_err(&client->dev, "failed to allocate driver data\n");
648 return -ENOMEM;
649 }
650
651 led->client = client;
652 pdata = led->pdata = client->dev.platform_data;
653 i2c_set_clientdata(client, led);
654
655 /* Configure RESET GPIO (L: RESET, H: RESET cancel) */
656 gpio_request(pdata->reset_gpio, "RGB_RESETB");
657 gpio_direction_output(pdata->reset_gpio, 1);
658
659 /* Tacss = min 0.1ms */
660 udelay(100);
661
662 /* Detect BD2802GU */
663 ret = bd2802_write_byte(client, BD2802_REG_CLKSETUP, 0x00);
664 if (ret < 0) {
665 dev_err(&client->dev, "failed to detect device\n");
666 goto failed_free;
667 } else
668 dev_info(&client->dev, "return 0x%02x\n", ret);
669
670 /* To save the power, reset BD2802 after detecting */
671 gpio_set_value(led->pdata->reset_gpio, 0);
672
673 init_rwsem(&led->rwsem);
674
675 ret = device_create_file(&client->dev, &bd2802_adv_conf_attr);
676 if (ret) {
677 dev_err(&client->dev, "failed to create sysfs file %s\n",
678 bd2802_adv_conf_attr.attr.name);
679 goto failed_free;
680 }
681
682 ret = bd2802_register_led_classdev(led);
683 if (ret < 0)
684 goto failed_unregister_dev_file;
685
686 return 0;
687
688failed_unregister_dev_file:
689 device_remove_file(&client->dev, &bd2802_adv_conf_attr);
690failed_free:
691 i2c_set_clientdata(client, NULL);
692 kfree(led);
693
694 return ret;
695}
696
697static int __exit bd2802_remove(struct i2c_client *client)
698{
699 struct bd2802_led *led = i2c_get_clientdata(client);
700
701 bd2802_unregister_led_classdev(led);
702 gpio_set_value(led->pdata->reset_gpio, 0);
703 if (led->adf_on)
704 bd2802_disable_adv_conf(led);
705 device_remove_file(&client->dev, &bd2802_adv_conf_attr);
706 i2c_set_clientdata(client, NULL);
707 kfree(led);
708
709 return 0;
710}
711
712static int bd2802_suspend(struct i2c_client *client, pm_message_t mesg)
713{
714 struct bd2802_led *led = i2c_get_clientdata(client);
715
716 gpio_set_value(led->pdata->reset_gpio, 0);
717
718 return 0;
719}
720
721static int bd2802_resume(struct i2c_client *client)
722{
723 struct bd2802_led *led = i2c_get_clientdata(client);
724
725 if (!bd2802_is_all_off(led) || led->adf_on) {
726 gpio_set_value(led->pdata->reset_gpio, 1);
727 udelay(100);
728 bd2802_restore_state(led);
729 }
730
731 return 0;
732}
733
734static const struct i2c_device_id bd2802_id[] = {
735 { "BD2802", 0 },
736 { }
737};
738MODULE_DEVICE_TABLE(i2c, bd2802_id);
739
740static struct i2c_driver bd2802_i2c_driver = {
741 .driver = {
742 .name = "BD2802",
743 },
744 .probe = bd2802_probe,
745 .remove = __exit_p(bd2802_remove),
746 .suspend = bd2802_suspend,
747 .resume = bd2802_resume,
748 .id_table = bd2802_id,
749};
750
751static int __init bd2802_init(void)
752{
753 return i2c_add_driver(&bd2802_i2c_driver);
754}
755module_init(bd2802_init);
756
757static void __exit bd2802_exit(void)
758{
759 i2c_del_driver(&bd2802_i2c_driver);
760}
761module_exit(bd2802_exit);
762
763MODULE_AUTHOR("Kim Kyuwon <q1.kim@samsung.com>");
764MODULE_DESCRIPTION("BD2802 LED driver");
765MODULE_LICENSE("GPL");
diff --git a/drivers/leds/leds-dac124s085.c b/drivers/leds/leds-dac124s085.c
new file mode 100644
index 000000000000..098d9aae7259
--- /dev/null
+++ b/drivers/leds/leds-dac124s085.c
@@ -0,0 +1,150 @@
1/*
2 * Copyright 2008
3 * Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
4 *
5 * This file is subject to the terms and conditions of version 2 of
6 * the GNU General Public License. See the file COPYING in the main
7 * directory of this archive for more details.
8 *
9 * LED driver for the DAC124S085 SPI DAC
10 */
11
12#include <linux/gfp.h>
13#include <linux/leds.h>
14#include <linux/module.h>
15#include <linux/mutex.h>
16#include <linux/slab.h>
17#include <linux/spinlock.h>
18#include <linux/workqueue.h>
19#include <linux/spi/spi.h>
20
21struct dac124s085_led {
22 struct led_classdev ldev;
23 struct spi_device *spi;
24 int id;
25 int brightness;
26 char name[sizeof("dac124s085-3")];
27
28 struct mutex mutex;
29 struct work_struct work;
30 spinlock_t lock;
31};
32
33struct dac124s085 {
34 struct dac124s085_led leds[4];
35};
36
37#define REG_WRITE (0 << 12)
38#define REG_WRITE_UPDATE (1 << 12)
39#define ALL_WRITE_UPDATE (2 << 12)
40#define POWER_DOWN_OUTPUT (3 << 12)
41
42static void dac124s085_led_work(struct work_struct *work)
43{
44 struct dac124s085_led *led = container_of(work, struct dac124s085_led,
45 work);
46 u16 word;
47
48 mutex_lock(&led->mutex);
49 word = cpu_to_le16(((led->id) << 14) | REG_WRITE_UPDATE |
50 (led->brightness & 0xfff));
51 spi_write(led->spi, (const u8 *)&word, sizeof(word));
52 mutex_unlock(&led->mutex);
53}
54
55static void dac124s085_set_brightness(struct led_classdev *ldev,
56 enum led_brightness brightness)
57{
58 struct dac124s085_led *led = container_of(ldev, struct dac124s085_led,
59 ldev);
60
61 spin_lock(&led->lock);
62 led->brightness = brightness;
63 schedule_work(&led->work);
64 spin_unlock(&led->lock);
65}
66
67static int dac124s085_probe(struct spi_device *spi)
68{
69 struct dac124s085 *dac;
70 struct dac124s085_led *led;
71 int i, ret;
72
73 dac = kzalloc(sizeof(*dac), GFP_KERNEL);
74 if (!dac)
75 return -ENOMEM;
76
77 spi->bits_per_word = 16;
78
79 for (i = 0; i < ARRAY_SIZE(dac->leds); i++) {
80 led = dac->leds + i;
81 led->id = i;
82 led->brightness = LED_OFF;
83 led->spi = spi;
84 snprintf(led->name, sizeof(led->name), "dac124s085-%d", i);
85 spin_lock_init(&led->lock);
86 INIT_WORK(&led->work, dac124s085_led_work);
87 mutex_init(&led->mutex);
88 led->ldev.name = led->name;
89 led->ldev.brightness = LED_OFF;
90 led->ldev.max_brightness = 0xfff;
91 led->ldev.brightness_set = dac124s085_set_brightness;
92 ret = led_classdev_register(&spi->dev, &led->ldev);
93 if (ret < 0)
94 goto eledcr;
95 }
96
97 spi_set_drvdata(spi, dac);
98
99 return 0;
100
101eledcr:
102 while (i--)
103 led_classdev_unregister(&dac->leds[i].ldev);
104
105 spi_set_drvdata(spi, NULL);
106 kfree(dac);
107 return ret;
108}
109
110static int dac124s085_remove(struct spi_device *spi)
111{
112 struct dac124s085 *dac = spi_get_drvdata(spi);
113 int i;
114
115 for (i = 0; i < ARRAY_SIZE(dac->leds); i++) {
116 led_classdev_unregister(&dac->leds[i].ldev);
117 cancel_work_sync(&dac->leds[i].work);
118 }
119
120 spi_set_drvdata(spi, NULL);
121 kfree(dac);
122
123 return 0;
124}
125
126static struct spi_driver dac124s085_driver = {
127 .probe = dac124s085_probe,
128 .remove = dac124s085_remove,
129 .driver = {
130 .name = "dac124s085",
131 .owner = THIS_MODULE,
132 },
133};
134
135static int __init dac124s085_leds_init(void)
136{
137 return spi_register_driver(&dac124s085_driver);
138}
139
140static void __exit dac124s085_leds_exit(void)
141{
142 spi_unregister_driver(&dac124s085_driver);
143}
144
145module_init(dac124s085_leds_init);
146module_exit(dac124s085_leds_exit);
147
148MODULE_AUTHOR("Guennadi Liakhovetski <lg@denx.de>");
149MODULE_DESCRIPTION("DAC124S085 LED driver");
150MODULE_LICENSE("GPL v2");
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
index 2e3df08b649b..102ef4a14c5f 100644
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -3,6 +3,7 @@
3 * 3 *
4 * Copyright (C) 2007 8D Technologies inc. 4 * Copyright (C) 2007 8D Technologies inc.
5 * Raphael Assenat <raph@8d.com> 5 * Raphael Assenat <raph@8d.com>
6 * Copyright (C) 2008 Freescale Semiconductor, Inc.
6 * 7 *
7 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
@@ -71,11 +72,67 @@ static int gpio_blink_set(struct led_classdev *led_cdev,
71 return led_dat->platform_gpio_blink_set(led_dat->gpio, delay_on, delay_off); 72 return led_dat->platform_gpio_blink_set(led_dat->gpio, delay_on, delay_off);
72} 73}
73 74
75static int __devinit create_gpio_led(const struct gpio_led *template,
76 struct gpio_led_data *led_dat, struct device *parent,
77 int (*blink_set)(unsigned, unsigned long *, unsigned long *))
78{
79 int ret;
80
81 /* skip leds that aren't available */
82 if (!gpio_is_valid(template->gpio)) {
83 printk(KERN_INFO "Skipping unavilable LED gpio %d (%s)\n",
84 template->gpio, template->name);
85 return;
86 }
87
88 ret = gpio_request(template->gpio, template->name);
89 if (ret < 0)
90 return ret;
91
92 led_dat->cdev.name = template->name;
93 led_dat->cdev.default_trigger = template->default_trigger;
94 led_dat->gpio = template->gpio;
95 led_dat->can_sleep = gpio_cansleep(template->gpio);
96 led_dat->active_low = template->active_low;
97 if (blink_set) {
98 led_dat->platform_gpio_blink_set = blink_set;
99 led_dat->cdev.blink_set = gpio_blink_set;
100 }
101 led_dat->cdev.brightness_set = gpio_led_set;
102 led_dat->cdev.brightness = LED_OFF;
103 if (!template->retain_state_suspended)
104 led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
105
106 ret = gpio_direction_output(led_dat->gpio, led_dat->active_low);
107 if (ret < 0)
108 goto err;
109
110 INIT_WORK(&led_dat->work, gpio_led_work);
111
112 ret = led_classdev_register(parent, &led_dat->cdev);
113 if (ret < 0)
114 goto err;
115
116 return 0;
117err:
118 gpio_free(led_dat->gpio);
119 return ret;
120}
121
122static void delete_gpio_led(struct gpio_led_data *led)
123{
124 if (!gpio_is_valid(led->gpio))
125 return;
126 led_classdev_unregister(&led->cdev);
127 cancel_work_sync(&led->work);
128 gpio_free(led->gpio);
129}
130
131#ifdef CONFIG_LEDS_GPIO_PLATFORM
74static int gpio_led_probe(struct platform_device *pdev) 132static int gpio_led_probe(struct platform_device *pdev)
75{ 133{
76 struct gpio_led_platform_data *pdata = pdev->dev.platform_data; 134 struct gpio_led_platform_data *pdata = pdev->dev.platform_data;
77 struct gpio_led *cur_led; 135 struct gpio_led_data *leds_data;
78 struct gpio_led_data *leds_data, *led_dat;
79 int i, ret = 0; 136 int i, ret = 0;
80 137
81 if (!pdata) 138 if (!pdata)
@@ -87,35 +144,10 @@ static int gpio_led_probe(struct platform_device *pdev)
87 return -ENOMEM; 144 return -ENOMEM;
88 145
89 for (i = 0; i < pdata->num_leds; i++) { 146 for (i = 0; i < pdata->num_leds; i++) {
90 cur_led = &pdata->leds[i]; 147 ret = create_gpio_led(&pdata->leds[i], &leds_data[i],
91 led_dat = &leds_data[i]; 148 &pdev->dev, pdata->gpio_blink_set);
92
93 ret = gpio_request(cur_led->gpio, cur_led->name);
94 if (ret < 0) 149 if (ret < 0)
95 goto err; 150 goto err;
96
97 led_dat->cdev.name = cur_led->name;
98 led_dat->cdev.default_trigger = cur_led->default_trigger;
99 led_dat->gpio = cur_led->gpio;
100 led_dat->can_sleep = gpio_cansleep(cur_led->gpio);
101 led_dat->active_low = cur_led->active_low;
102 if (pdata->gpio_blink_set) {
103 led_dat->platform_gpio_blink_set = pdata->gpio_blink_set;
104 led_dat->cdev.blink_set = gpio_blink_set;
105 }
106 led_dat->cdev.brightness_set = gpio_led_set;
107 led_dat->cdev.brightness = LED_OFF;
108 led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
109
110 gpio_direction_output(led_dat->gpio, led_dat->active_low);
111
112 INIT_WORK(&led_dat->work, gpio_led_work);
113
114 ret = led_classdev_register(&pdev->dev, &led_dat->cdev);
115 if (ret < 0) {
116 gpio_free(led_dat->gpio);
117 goto err;
118 }
119 } 151 }
120 152
121 platform_set_drvdata(pdev, leds_data); 153 platform_set_drvdata(pdev, leds_data);
@@ -123,13 +155,8 @@ static int gpio_led_probe(struct platform_device *pdev)
123 return 0; 155 return 0;
124 156
125err: 157err:
126 if (i > 0) { 158 for (i = i - 1; i >= 0; i--)
127 for (i = i - 1; i >= 0; i--) { 159 delete_gpio_led(&leds_data[i]);
128 led_classdev_unregister(&leds_data[i].cdev);
129 cancel_work_sync(&leds_data[i].work);
130 gpio_free(leds_data[i].gpio);
131 }
132 }
133 160
134 kfree(leds_data); 161 kfree(leds_data);
135 162
@@ -144,11 +171,8 @@ static int __devexit gpio_led_remove(struct platform_device *pdev)
144 171
145 leds_data = platform_get_drvdata(pdev); 172 leds_data = platform_get_drvdata(pdev);
146 173
147 for (i = 0; i < pdata->num_leds; i++) { 174 for (i = 0; i < pdata->num_leds; i++)
148 led_classdev_unregister(&leds_data[i].cdev); 175 delete_gpio_led(&leds_data[i]);
149 cancel_work_sync(&leds_data[i].work);
150 gpio_free(leds_data[i].gpio);
151 }
152 176
153 kfree(leds_data); 177 kfree(leds_data);
154 178
@@ -164,20 +188,133 @@ static struct platform_driver gpio_led_driver = {
164 }, 188 },
165}; 189};
166 190
191MODULE_ALIAS("platform:leds-gpio");
192#endif /* CONFIG_LEDS_GPIO_PLATFORM */
193
194/* Code to create from OpenFirmware platform devices */
195#ifdef CONFIG_LEDS_GPIO_OF
196#include <linux/of_platform.h>
197#include <linux/of_gpio.h>
198
199struct gpio_led_of_platform_data {
200 int num_leds;
201 struct gpio_led_data led_data[];
202};
203
204static int __devinit of_gpio_leds_probe(struct of_device *ofdev,
205 const struct of_device_id *match)
206{
207 struct device_node *np = ofdev->node, *child;
208 struct gpio_led led;
209 struct gpio_led_of_platform_data *pdata;
210 int count = 0, ret;
211
212 /* count LEDs defined by this device, so we know how much to allocate */
213 for_each_child_of_node(np, child)
214 count++;
215 if (!count)
216 return 0; /* or ENODEV? */
217
218 pdata = kzalloc(sizeof(*pdata) + sizeof(struct gpio_led_data) * count,
219 GFP_KERNEL);
220 if (!pdata)
221 return -ENOMEM;
222
223 memset(&led, 0, sizeof(led));
224 for_each_child_of_node(np, child) {
225 enum of_gpio_flags flags;
226
227 led.gpio = of_get_gpio_flags(child, 0, &flags);
228 led.active_low = flags & OF_GPIO_ACTIVE_LOW;
229 led.name = of_get_property(child, "label", NULL) ? : child->name;
230 led.default_trigger =
231 of_get_property(child, "linux,default-trigger", NULL);
232
233 ret = create_gpio_led(&led, &pdata->led_data[pdata->num_leds++],
234 &ofdev->dev, NULL);
235 if (ret < 0) {
236 of_node_put(child);
237 goto err;
238 }
239 }
240
241 dev_set_drvdata(&ofdev->dev, pdata);
242
243 return 0;
244
245err:
246 for (count = pdata->num_leds - 2; count >= 0; count--)
247 delete_gpio_led(&pdata->led_data[count]);
248
249 kfree(pdata);
250
251 return ret;
252}
253
254static int __devexit of_gpio_leds_remove(struct of_device *ofdev)
255{
256 struct gpio_led_of_platform_data *pdata = dev_get_drvdata(&ofdev->dev);
257 int i;
258
259 for (i = 0; i < pdata->num_leds; i++)
260 delete_gpio_led(&pdata->led_data[i]);
261
262 kfree(pdata);
263
264 dev_set_drvdata(&ofdev->dev, NULL);
265
266 return 0;
267}
268
269static const struct of_device_id of_gpio_leds_match[] = {
270 { .compatible = "gpio-leds", },
271 {},
272};
273
274static struct of_platform_driver of_gpio_leds_driver = {
275 .driver = {
276 .name = "of_gpio_leds",
277 .owner = THIS_MODULE,
278 },
279 .match_table = of_gpio_leds_match,
280 .probe = of_gpio_leds_probe,
281 .remove = __devexit_p(of_gpio_leds_remove),
282};
283#endif
284
167static int __init gpio_led_init(void) 285static int __init gpio_led_init(void)
168{ 286{
169 return platform_driver_register(&gpio_led_driver); 287 int ret;
288
289#ifdef CONFIG_LEDS_GPIO_PLATFORM
290 ret = platform_driver_register(&gpio_led_driver);
291 if (ret)
292 return ret;
293#endif
294#ifdef CONFIG_LEDS_GPIO_OF
295 ret = of_register_platform_driver(&of_gpio_leds_driver);
296#endif
297#ifdef CONFIG_LEDS_GPIO_PLATFORM
298 if (ret)
299 platform_driver_unregister(&gpio_led_driver);
300#endif
301
302 return ret;
170} 303}
171 304
172static void __exit gpio_led_exit(void) 305static void __exit gpio_led_exit(void)
173{ 306{
307#ifdef CONFIG_LEDS_GPIO_PLATFORM
174 platform_driver_unregister(&gpio_led_driver); 308 platform_driver_unregister(&gpio_led_driver);
309#endif
310#ifdef CONFIG_LEDS_GPIO_OF
311 of_unregister_platform_driver(&of_gpio_leds_driver);
312#endif
175} 313}
176 314
177module_init(gpio_led_init); 315module_init(gpio_led_init);
178module_exit(gpio_led_exit); 316module_exit(gpio_led_exit);
179 317
180MODULE_AUTHOR("Raphael Assenat <raph@8d.com>"); 318MODULE_AUTHOR("Raphael Assenat <raph@8d.com>, Trent Piepho <tpiepho@freescale.com>");
181MODULE_DESCRIPTION("GPIO LED driver"); 319MODULE_DESCRIPTION("GPIO LED driver");
182MODULE_LICENSE("GPL"); 320MODULE_LICENSE("GPL");
183MODULE_ALIAS("platform:leds-gpio");
diff --git a/drivers/leds/leds-h1940.c b/drivers/leds/leds-h1940.c
index 11b77a70bbcb..1aa46a390a0d 100644
--- a/drivers/leds/leds-h1940.c
+++ b/drivers/leds/leds-h1940.c
@@ -104,7 +104,7 @@ static struct led_classdev h1940_blueled = {
104 .default_trigger = "h1940-bluetooth", 104 .default_trigger = "h1940-bluetooth",
105}; 105};
106 106
107static int __init h1940leds_probe(struct platform_device *pdev) 107static int __devinit h1940leds_probe(struct platform_device *pdev)
108{ 108{
109 int ret; 109 int ret;
110 110
diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c
index bd3b431c9710..3937244fdcab 100644
--- a/drivers/leds/leds-pca9532.c
+++ b/drivers/leds/leds-pca9532.c
@@ -169,7 +169,7 @@ static int pca9532_event(struct input_dev *dev, unsigned int type,
169{ 169{
170 struct pca9532_data *data = input_get_drvdata(dev); 170 struct pca9532_data *data = input_get_drvdata(dev);
171 171
172 if (type != EV_SND && (code != SND_BELL || code != SND_TONE)) 172 if (!(type == EV_SND && (code == SND_BELL || code == SND_TONE)))
173 return -1; 173 return -1;
174 174
175 /* XXX: allow different kind of beeps with psc/pwm modifications */ 175 /* XXX: allow different kind of beeps with psc/pwm modifications */
diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
new file mode 100644
index 000000000000..cdfdc8714e10
--- /dev/null
+++ b/drivers/leds/leds-pwm.c
@@ -0,0 +1,153 @@
1/*
2 * linux/drivers/leds-pwm.c
3 *
4 * simple PWM based LED control
5 *
6 * Copyright 2009 Luotao Fu @ Pengutronix (l.fu@pengutronix.de)
7 *
8 * based on leds-gpio.c by Raphael Assenat <raph@8d.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/module.h>
16#include <linux/kernel.h>
17#include <linux/init.h>
18#include <linux/platform_device.h>
19#include <linux/fb.h>
20#include <linux/leds.h>
21#include <linux/err.h>
22#include <linux/pwm.h>
23#include <linux/leds_pwm.h>
24
25struct led_pwm_data {
26 struct led_classdev cdev;
27 struct pwm_device *pwm;
28 unsigned int active_low;
29 unsigned int period;
30 unsigned int max_brightness;
31};
32
33static void led_pwm_set(struct led_classdev *led_cdev,
34 enum led_brightness brightness)
35{
36 struct led_pwm_data *led_dat =
37 container_of(led_cdev, struct led_pwm_data, cdev);
38 unsigned int max = led_dat->max_brightness;
39 unsigned int period = led_dat->period;
40
41 if (brightness == 0) {
42 pwm_config(led_dat->pwm, 0, period);
43 pwm_disable(led_dat->pwm);
44 } else {
45 pwm_config(led_dat->pwm, brightness * period / max, period);
46 pwm_enable(led_dat->pwm);
47 }
48}
49
50static int led_pwm_probe(struct platform_device *pdev)
51{
52 struct led_pwm_platform_data *pdata = pdev->dev.platform_data;
53 struct led_pwm *cur_led;
54 struct led_pwm_data *leds_data, *led_dat;
55 int i, ret = 0;
56
57 if (!pdata)
58 return -EBUSY;
59
60 leds_data = kzalloc(sizeof(struct led_pwm_data) * pdata->num_leds,
61 GFP_KERNEL);
62 if (!leds_data)
63 return -ENOMEM;
64
65 for (i = 0; i < pdata->num_leds; i++) {
66 cur_led = &pdata->leds[i];
67 led_dat = &leds_data[i];
68
69 led_dat->pwm = pwm_request(cur_led->pwm_id,
70 cur_led->name);
71 if (IS_ERR(led_dat->pwm)) {
72 dev_err(&pdev->dev, "unable to request PWM %d\n",
73 cur_led->pwm_id);
74 goto err;
75 }
76
77 led_dat->cdev.name = cur_led->name;
78 led_dat->cdev.default_trigger = cur_led->default_trigger;
79 led_dat->active_low = cur_led->active_low;
80 led_dat->max_brightness = cur_led->max_brightness;
81 led_dat->period = cur_led->pwm_period_ns;
82 led_dat->cdev.brightness_set = led_pwm_set;
83 led_dat->cdev.brightness = LED_OFF;
84 led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
85
86 ret = led_classdev_register(&pdev->dev, &led_dat->cdev);
87 if (ret < 0) {
88 pwm_free(led_dat->pwm);
89 goto err;
90 }
91 }
92
93 platform_set_drvdata(pdev, leds_data);
94
95 return 0;
96
97err:
98 if (i > 0) {
99 for (i = i - 1; i >= 0; i--) {
100 led_classdev_unregister(&leds_data[i].cdev);
101 pwm_free(leds_data[i].pwm);
102 }
103 }
104
105 kfree(leds_data);
106
107 return ret;
108}
109
110static int __devexit led_pwm_remove(struct platform_device *pdev)
111{
112 int i;
113 struct led_pwm_platform_data *pdata = pdev->dev.platform_data;
114 struct led_pwm_data *leds_data;
115
116 leds_data = platform_get_drvdata(pdev);
117
118 for (i = 0; i < pdata->num_leds; i++) {
119 led_classdev_unregister(&leds_data[i].cdev);
120 pwm_free(leds_data[i].pwm);
121 }
122
123 kfree(leds_data);
124
125 return 0;
126}
127
128static struct platform_driver led_pwm_driver = {
129 .probe = led_pwm_probe,
130 .remove = __devexit_p(led_pwm_remove),
131 .driver = {
132 .name = "leds_pwm",
133 .owner = THIS_MODULE,
134 },
135};
136
137static int __init led_pwm_init(void)
138{
139 return platform_driver_register(&led_pwm_driver);
140}
141
142static void __exit led_pwm_exit(void)
143{
144 platform_driver_unregister(&led_pwm_driver);
145}
146
147module_init(led_pwm_init);
148module_exit(led_pwm_exit);
149
150MODULE_AUTHOR("Luotao Fu <l.fu@pengutronix.de>");
151MODULE_DESCRIPTION("PWM LED driver for PXA");
152MODULE_LICENSE("GPL");
153MODULE_ALIAS("platform:leds-pwm");
diff --git a/drivers/leds/leds-rb532.c b/drivers/leds/leds-rb532.c
new file mode 100644
index 000000000000..c3525f37f73d
--- /dev/null
+++ b/drivers/leds/leds-rb532.c
@@ -0,0 +1,77 @@
1/*
2 * LEDs driver for the "User LED" on Routerboard532
3 *
4 * Copyright (C) 2009 Phil Sutter <n0-1@freewrt.org>
5 *
6 * Based on leds-cobalt-qube.c by Florian Fainelly and
7 * rb-diag.c (my own standalone driver for both LED and
8 * button of Routerboard532).
9 */
10
11#include <linux/leds.h>
12#include <linux/module.h>
13#include <linux/platform_device.h>
14
15#include <asm/mach-rc32434/gpio.h>
16#include <asm/mach-rc32434/rb.h>
17
18static void rb532_led_set(struct led_classdev *cdev,
19 enum led_brightness brightness)
20{
21 if (brightness)
22 set_latch_u5(LO_ULED, 0);
23
24 else
25 set_latch_u5(0, LO_ULED);
26}
27
28static enum led_brightness rb532_led_get(struct led_classdev *cdev)
29{
30 return (get_latch_u5() & LO_ULED) ? LED_FULL : LED_OFF;
31}
32
33static struct led_classdev rb532_uled = {
34 .name = "uled",
35 .brightness_set = rb532_led_set,
36 .brightness_get = rb532_led_get,
37 .default_trigger = "nand-disk",
38};
39
40static int __devinit rb532_led_probe(struct platform_device *pdev)
41{
42 return led_classdev_register(&pdev->dev, &rb532_uled);
43}
44
45static int __devexit rb532_led_remove(struct platform_device *pdev)
46{
47 led_classdev_unregister(&rb532_uled);
48 return 0;
49}
50
51static struct platform_driver rb532_led_driver = {
52 .probe = rb532_led_probe,
53 .remove = __devexit_p(rb532_led_remove),
54 .driver = {
55 .name = "rb532-led",
56 .owner = THIS_MODULE,
57 },
58};
59
60static int __init rb532_led_init(void)
61{
62 return platform_driver_register(&rb532_led_driver);
63}
64
65static void __exit rb532_led_exit(void)
66{
67 platform_driver_unregister(&rb532_led_driver);
68}
69
70module_init(rb532_led_init);
71module_exit(rb532_led_exit);
72
73MODULE_ALIAS("platform:rb532-led");
74
75MODULE_LICENSE("GPL");
76MODULE_DESCRIPTION("User LED support for Routerboard532");
77MODULE_AUTHOR("Phil Sutter <n0-1@freewrt.org>");
diff --git a/drivers/leds/leds-s3c24xx.c b/drivers/leds/leds-s3c24xx.c
index 4d81131542ae..aa2e7ae0cdae 100644
--- a/drivers/leds/leds-s3c24xx.c
+++ b/drivers/leds/leds-s3c24xx.c
@@ -102,14 +102,11 @@ static int s3c24xx_led_probe(struct platform_device *dev)
102 ret = led_classdev_register(&dev->dev, &led->cdev); 102 ret = led_classdev_register(&dev->dev, &led->cdev);
103 if (ret < 0) { 103 if (ret < 0) {
104 dev_err(&dev->dev, "led_classdev_register failed\n"); 104 dev_err(&dev->dev, "led_classdev_register failed\n");
105 goto exit_err1; 105 kfree(led);
106 return ret;
106 } 107 }
107 108
108 return 0; 109 return 0;
109
110 exit_err1:
111 kfree(led);
112 return ret;
113} 110}
114 111
115static struct platform_driver s3c24xx_led_driver = { 112static struct platform_driver s3c24xx_led_driver = {
diff --git a/drivers/leds/leds.h b/drivers/leds/leds.h
index 5edbf52c4fa7..2dd8ecbfdc31 100644
--- a/drivers/leds/leds.h
+++ b/drivers/leds/leds.h
@@ -20,8 +20,8 @@
20static inline void led_set_brightness(struct led_classdev *led_cdev, 20static inline void led_set_brightness(struct led_classdev *led_cdev,
21 enum led_brightness value) 21 enum led_brightness value)
22{ 22{
23 if (value > LED_FULL) 23 if (value > led_cdev->max_brightness)
24 value = LED_FULL; 24 value = led_cdev->max_brightness;
25 led_cdev->brightness = value; 25 led_cdev->brightness = value;
26 if (!(led_cdev->flags & LED_SUSPENDED)) 26 if (!(led_cdev->flags & LED_SUSPENDED))
27 led_cdev->brightness_set(led_cdev, value); 27 led_cdev->brightness_set(led_cdev, value);
diff --git a/drivers/leds/ledtrig-default-on.c b/drivers/leds/ledtrig-default-on.c
index 92995e40cfa4..a4ef54b9d508 100644
--- a/drivers/leds/ledtrig-default-on.c
+++ b/drivers/leds/ledtrig-default-on.c
@@ -19,7 +19,7 @@
19 19
20static void defon_trig_activate(struct led_classdev *led_cdev) 20static void defon_trig_activate(struct led_classdev *led_cdev)
21{ 21{
22 led_set_brightness(led_cdev, LED_FULL); 22 led_set_brightness(led_cdev, led_cdev->max_brightness);
23} 23}
24 24
25static struct led_trigger defon_led_trigger = { 25static struct led_trigger defon_led_trigger = {
diff --git a/drivers/leds/ledtrig-gpio.c b/drivers/leds/ledtrig-gpio.c
new file mode 100644
index 000000000000..a247ae63374f
--- /dev/null
+++ b/drivers/leds/ledtrig-gpio.c
@@ -0,0 +1,239 @@
1/*
2 * ledtrig-gio.c - LED Trigger Based on GPIO events
3 *
4 * Copyright 2009 Felipe Balbi <me@felipebalbi.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#include <linux/module.h>
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/gpio.h>
16#include <linux/interrupt.h>
17#include <linux/workqueue.h>
18#include <linux/leds.h>
19#include "leds.h"
20
21struct gpio_trig_data {
22 struct led_classdev *led;
23 struct work_struct work;
24
25 unsigned desired_brightness; /* desired brightness when led is on */
26 unsigned inverted; /* true when gpio is inverted */
27 unsigned gpio; /* gpio that triggers the leds */
28};
29
30static irqreturn_t gpio_trig_irq(int irq, void *_led)
31{
32 struct led_classdev *led = _led;
33 struct gpio_trig_data *gpio_data = led->trigger_data;
34
35 /* just schedule_work since gpio_get_value can sleep */
36 schedule_work(&gpio_data->work);
37
38 return IRQ_HANDLED;
39};
40
41static void gpio_trig_work(struct work_struct *work)
42{
43 struct gpio_trig_data *gpio_data = container_of(work,
44 struct gpio_trig_data, work);
45 int tmp;
46
47 if (!gpio_data->gpio)
48 return;
49
50 tmp = gpio_get_value(gpio_data->gpio);
51 if (gpio_data->inverted)
52 tmp = !tmp;
53
54 if (tmp) {
55 if (gpio_data->desired_brightness)
56 led_set_brightness(gpio_data->led,
57 gpio_data->desired_brightness);
58 else
59 led_set_brightness(gpio_data->led, LED_FULL);
60 } else {
61 led_set_brightness(gpio_data->led, LED_OFF);
62 }
63}
64
65static ssize_t gpio_trig_brightness_show(struct device *dev,
66 struct device_attribute *attr, char *buf)
67{
68 struct led_classdev *led = dev_get_drvdata(dev);
69 struct gpio_trig_data *gpio_data = led->trigger_data;
70
71 return sprintf(buf, "%u\n", gpio_data->desired_brightness);
72}
73
74static ssize_t gpio_trig_brightness_store(struct device *dev,
75 struct device_attribute *attr, const char *buf, size_t n)
76{
77 struct led_classdev *led = dev_get_drvdata(dev);
78 struct gpio_trig_data *gpio_data = led->trigger_data;
79 unsigned desired_brightness;
80 int ret;
81
82 ret = sscanf(buf, "%u", &desired_brightness);
83 if (ret < 1 || desired_brightness > 255) {
84 dev_err(dev, "invalid value\n");
85 return -EINVAL;
86 }
87
88 gpio_data->desired_brightness = desired_brightness;
89
90 return n;
91}
92static DEVICE_ATTR(desired_brightness, 0644, gpio_trig_brightness_show,
93 gpio_trig_brightness_store);
94
95static ssize_t gpio_trig_inverted_show(struct device *dev,
96 struct device_attribute *attr, char *buf)
97{
98 struct led_classdev *led = dev_get_drvdata(dev);
99 struct gpio_trig_data *gpio_data = led->trigger_data;
100
101 return sprintf(buf, "%s\n", gpio_data->inverted ? "yes" : "no");
102}
103
104static ssize_t gpio_trig_inverted_store(struct device *dev,
105 struct device_attribute *attr, const char *buf, size_t n)
106{
107 struct led_classdev *led = dev_get_drvdata(dev);
108 struct gpio_trig_data *gpio_data = led->trigger_data;
109 unsigned inverted;
110 int ret;
111
112 ret = sscanf(buf, "%u", &inverted);
113 if (ret < 1) {
114 dev_err(dev, "invalid value\n");
115 return -EINVAL;
116 }
117
118 gpio_data->inverted = !!inverted;
119
120 return n;
121}
122static DEVICE_ATTR(inverted, 0644, gpio_trig_inverted_show,
123 gpio_trig_inverted_store);
124
125static ssize_t gpio_trig_gpio_show(struct device *dev,
126 struct device_attribute *attr, char *buf)
127{
128 struct led_classdev *led = dev_get_drvdata(dev);
129 struct gpio_trig_data *gpio_data = led->trigger_data;
130
131 return sprintf(buf, "%u\n", gpio_data->gpio);
132}
133
134static ssize_t gpio_trig_gpio_store(struct device *dev,
135 struct device_attribute *attr, const char *buf, size_t n)
136{
137 struct led_classdev *led = dev_get_drvdata(dev);
138 struct gpio_trig_data *gpio_data = led->trigger_data;
139 unsigned gpio;
140 int ret;
141
142 ret = sscanf(buf, "%u", &gpio);
143 if (ret < 1) {
144 dev_err(dev, "couldn't read gpio number\n");
145 flush_work(&gpio_data->work);
146 return -EINVAL;
147 }
148
149 if (!gpio) {
150 free_irq(gpio_to_irq(gpio_data->gpio), led);
151 return n;
152 }
153
154 if (gpio_data->gpio > 0 && gpio_data->gpio != gpio)
155 free_irq(gpio_to_irq(gpio_data->gpio), led);
156
157 gpio_data->gpio = gpio;
158 ret = request_irq(gpio_to_irq(gpio), gpio_trig_irq,
159 IRQF_SHARED | IRQF_TRIGGER_RISING
160 | IRQF_TRIGGER_FALLING, "ledtrig-gpio", led);
161 if (ret)
162 dev_err(dev, "request_irq failed with error %d\n", ret);
163
164 return ret ? ret : n;
165}
166static DEVICE_ATTR(gpio, 0644, gpio_trig_gpio_show, gpio_trig_gpio_store);
167
168static void gpio_trig_activate(struct led_classdev *led)
169{
170 struct gpio_trig_data *gpio_data;
171 int ret;
172
173 gpio_data = kzalloc(sizeof(*gpio_data), GFP_KERNEL);
174 if (!gpio_data)
175 return;
176
177 ret = device_create_file(led->dev, &dev_attr_gpio);
178 if (ret)
179 goto err_gpio;
180
181 ret = device_create_file(led->dev, &dev_attr_inverted);
182 if (ret)
183 goto err_inverted;
184
185 ret = device_create_file(led->dev, &dev_attr_desired_brightness);
186 if (ret)
187 goto err_brightness;
188
189 gpio_data->led = led;
190 led->trigger_data = gpio_data;
191 INIT_WORK(&gpio_data->work, gpio_trig_work);
192
193 return;
194
195err_brightness:
196 device_remove_file(led->dev, &dev_attr_inverted);
197
198err_inverted:
199 device_remove_file(led->dev, &dev_attr_gpio);
200
201err_gpio:
202 kfree(gpio_data);
203}
204
205static void gpio_trig_deactivate(struct led_classdev *led)
206{
207 struct gpio_trig_data *gpio_data = led->trigger_data;
208
209 if (gpio_data) {
210 device_remove_file(led->dev, &dev_attr_gpio);
211 device_remove_file(led->dev, &dev_attr_inverted);
212 device_remove_file(led->dev, &dev_attr_desired_brightness);
213 flush_work(&gpio_data->work);
214 free_irq(gpio_to_irq(gpio_data->gpio),led);
215 kfree(gpio_data);
216 }
217}
218
219static struct led_trigger gpio_led_trigger = {
220 .name = "gpio",
221 .activate = gpio_trig_activate,
222 .deactivate = gpio_trig_deactivate,
223};
224
225static int __init gpio_trig_init(void)
226{
227 return led_trigger_register(&gpio_led_trigger);
228}
229module_init(gpio_trig_init);
230
231static void __exit gpio_trig_exit(void)
232{
233 led_trigger_unregister(&gpio_led_trigger);
234}
235module_exit(gpio_trig_exit);
236
237MODULE_AUTHOR("Felipe Balbi <me@felipebalbi.com>");
238MODULE_DESCRIPTION("GPIO LED trigger");
239MODULE_LICENSE("GPL");
diff --git a/drivers/leds/ledtrig-heartbeat.c b/drivers/leds/ledtrig-heartbeat.c
index 4bf8cec8b8c1..c1c1ea6f817b 100644
--- a/drivers/leds/ledtrig-heartbeat.c
+++ b/drivers/leds/ledtrig-heartbeat.c
@@ -47,7 +47,7 @@ static void led_heartbeat_function(unsigned long data)
47 msecs_to_jiffies(heartbeat_data->period); 47 msecs_to_jiffies(heartbeat_data->period);
48 delay = msecs_to_jiffies(70); 48 delay = msecs_to_jiffies(70);
49 heartbeat_data->phase++; 49 heartbeat_data->phase++;
50 brightness = LED_FULL; 50 brightness = led_cdev->max_brightness;
51 break; 51 break;
52 case 1: 52 case 1:
53 delay = heartbeat_data->period / 4 - msecs_to_jiffies(70); 53 delay = heartbeat_data->period / 4 - msecs_to_jiffies(70);
@@ -56,7 +56,7 @@ static void led_heartbeat_function(unsigned long data)
56 case 2: 56 case 2:
57 delay = msecs_to_jiffies(70); 57 delay = msecs_to_jiffies(70);
58 heartbeat_data->phase++; 58 heartbeat_data->phase++;
59 brightness = LED_FULL; 59 brightness = led_cdev->max_brightness;
60 break; 60 break;
61 default: 61 default:
62 delay = heartbeat_data->period - heartbeat_data->period / 4 - 62 delay = heartbeat_data->period - heartbeat_data->period / 4 -
diff --git a/drivers/leds/ledtrig-ide-disk.c b/drivers/leds/ledtrig-ide-disk.c
index 883a577b1b97..ec099fcbcb00 100644
--- a/drivers/leds/ledtrig-ide-disk.c
+++ b/drivers/leds/ledtrig-ide-disk.c
@@ -37,7 +37,8 @@ static void ledtrig_ide_timerfunc(unsigned long data)
37{ 37{
38 if (ide_lastactivity != ide_activity) { 38 if (ide_lastactivity != ide_activity) {
39 ide_lastactivity = ide_activity; 39 ide_lastactivity = ide_activity;
40 led_trigger_event(ledtrig_ide, LED_FULL); 40 /* INT_MAX will set each LED to its maximum brightness */
41 led_trigger_event(ledtrig_ide, INT_MAX);
41 mod_timer(&ledtrig_ide_timer, jiffies + msecs_to_jiffies(10)); 42 mod_timer(&ledtrig_ide_timer, jiffies + msecs_to_jiffies(10));
42 } else { 43 } else {
43 led_trigger_event(ledtrig_ide, LED_OFF); 44 led_trigger_event(ledtrig_ide, LED_OFF);
diff --git a/drivers/leds/ledtrig-timer.c b/drivers/leds/ledtrig-timer.c
index 3d6531396dda..3b83406de752 100644
--- a/drivers/leds/ledtrig-timer.c
+++ b/drivers/leds/ledtrig-timer.c
@@ -166,7 +166,7 @@ static void timer_trig_activate(struct led_classdev *led_cdev)
166 166
167 timer_data->brightness_on = led_get_brightness(led_cdev); 167 timer_data->brightness_on = led_get_brightness(led_cdev);
168 if (timer_data->brightness_on == LED_OFF) 168 if (timer_data->brightness_on == LED_OFF)
169 timer_data->brightness_on = LED_FULL; 169 timer_data->brightness_on = led_cdev->max_brightness;
170 led_cdev->trigger_data = timer_data; 170 led_cdev->trigger_data = timer_data;
171 171
172 init_timer(&timer_data->timer); 172 init_timer(&timer_data->timer);
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index b4f4badc0068..274b491a11c1 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -123,6 +123,7 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
123 goto out_free_pages; 123 goto out_free_pages;
124 124
125 bio->bi_io_vec[i].bv_page = page; 125 bio->bi_io_vec[i].bv_page = page;
126 bio->bi_vcnt = i+1;
126 } 127 }
127 } 128 }
128 /* If not user-requests, copy the page pointers to all bios */ 129 /* If not user-requests, copy the page pointers to all bios */
@@ -138,9 +139,9 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
138 return r1_bio; 139 return r1_bio;
139 140
140out_free_pages: 141out_free_pages:
141 for (i=0; i < RESYNC_PAGES ; i++) 142 for (j=0 ; j < pi->raid_disks; j++)
142 for (j=0 ; j < pi->raid_disks; j++) 143 for (i=0; i < r1_bio->bios[j]->bi_vcnt ; i++)
143 safe_put_page(r1_bio->bios[j]->bi_io_vec[i].bv_page); 144 put_page(r1_bio->bios[j]->bi_io_vec[i].bv_page);
144 j = -1; 145 j = -1;
145out_free_bio: 146out_free_bio:
146 while ( ++j < pi->raid_disks ) 147 while ( ++j < pi->raid_disks )
@@ -585,7 +586,7 @@ static int raid1_congested(void *data, int bits)
585 /* Note the '|| 1' - when read_balance prefers 586 /* Note the '|| 1' - when read_balance prefers
586 * non-congested targets, it can be removed 587 * non-congested targets, it can be removed
587 */ 588 */
588 if ((bits & (1<<BDI_write_congested)) || 1) 589 if ((bits & (1<<BDI_async_congested)) || 1)
589 ret |= bdi_congested(&q->backing_dev_info, bits); 590 ret |= bdi_congested(&q->backing_dev_info, bits);
590 else 591 else
591 ret &= bdi_congested(&q->backing_dev_info, bits); 592 ret &= bdi_congested(&q->backing_dev_info, bits);
diff --git a/drivers/media/dvb/dm1105/dm1105.c b/drivers/media/dvb/dm1105/dm1105.c
index 5b20cf5a29f0..971a8b18f6dd 100644
--- a/drivers/media/dvb/dm1105/dm1105.c
+++ b/drivers/media/dvb/dm1105/dm1105.c
@@ -662,7 +662,7 @@ static int __devinit dm1105_probe(struct pci_dev *pdev,
662 if (ret < 0) 662 if (ret < 0)
663 goto err_kfree; 663 goto err_kfree;
664 664
665 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 665 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
666 if (ret < 0) 666 if (ret < 0)
667 goto err_pci_disable_device; 667 goto err_pci_disable_device;
668 668
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig
index 6103caad1644..60955a70d880 100644
--- a/drivers/media/dvb/dvb-usb/Kconfig
+++ b/drivers/media/dvb/dvb-usb/Kconfig
@@ -294,7 +294,7 @@ config DVB_USB_DTV5100
294 294
295config DVB_USB_AF9015 295config DVB_USB_AF9015
296 tristate "Afatech AF9015 DVB-T USB2.0 support" 296 tristate "Afatech AF9015 DVB-T USB2.0 support"
297 depends on DVB_USB && EXPERIMENTAL 297 depends on DVB_USB
298 select DVB_AF9013 298 select DVB_AF9013
299 select DVB_PLL if !DVB_FE_CUSTOMISE 299 select DVB_PLL if !DVB_FE_CUSTOMISE
300 select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE 300 select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
@@ -309,6 +309,6 @@ config DVB_USB_CE6230
309 tristate "Intel CE6230 DVB-T USB2.0 support" 309 tristate "Intel CE6230 DVB-T USB2.0 support"
310 depends on DVB_USB && EXPERIMENTAL 310 depends on DVB_USB && EXPERIMENTAL
311 select DVB_ZL10353 311 select DVB_ZL10353
312 select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMIZE 312 select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMISE
313 help 313 help
314 Say Y here to support the Intel CE6230 DVB-T USB2.0 receiver 314 Say Y here to support the Intel CE6230 DVB-T USB2.0 receiver
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c
index f0ba8b07b84f..53bfc8e42fb9 100644
--- a/drivers/media/dvb/dvb-usb/af9015.c
+++ b/drivers/media/dvb/dvb-usb/af9015.c
@@ -782,17 +782,14 @@ static int af9015_read_config(struct usb_device *udev)
782 ARRAY_SIZE(af9015_ir_table_leadtek); 782 ARRAY_SIZE(af9015_ir_table_leadtek);
783 break; 783 break;
784 case USB_VID_VISIONPLUS: 784 case USB_VID_VISIONPLUS:
785 if (udev->descriptor.idProduct == 785 af9015_properties[i].rc_key_map =
786 cpu_to_le16(USB_PID_AZUREWAVE_AD_TU700)) { 786 af9015_rc_keys_twinhan;
787 af9015_properties[i].rc_key_map = 787 af9015_properties[i].rc_key_map_size =
788 af9015_rc_keys_twinhan; 788 ARRAY_SIZE(af9015_rc_keys_twinhan);
789 af9015_properties[i].rc_key_map_size = 789 af9015_config.ir_table =
790 ARRAY_SIZE(af9015_rc_keys_twinhan); 790 af9015_ir_table_twinhan;
791 af9015_config.ir_table = 791 af9015_config.ir_table_size =
792 af9015_ir_table_twinhan; 792 ARRAY_SIZE(af9015_ir_table_twinhan);
793 af9015_config.ir_table_size =
794 ARRAY_SIZE(af9015_ir_table_twinhan);
795 }
796 break; 793 break;
797 case USB_VID_KWORLD_2: 794 case USB_VID_KWORLD_2:
798 /* TODO: use correct rc keys */ 795 /* TODO: use correct rc keys */
@@ -833,6 +830,16 @@ static int af9015_read_config(struct usb_device *udev)
833 af9015_ir_table_msi; 830 af9015_ir_table_msi;
834 af9015_config.ir_table_size = 831 af9015_config.ir_table_size =
835 ARRAY_SIZE(af9015_ir_table_msi); 832 ARRAY_SIZE(af9015_ir_table_msi);
833 } else if (udev->descriptor.idProduct ==
834 cpu_to_le16(USB_PID_TREKSTOR_DVBT)) {
835 af9015_properties[i].rc_key_map =
836 af9015_rc_keys_trekstor;
837 af9015_properties[i].rc_key_map_size =
838 ARRAY_SIZE(af9015_rc_keys_trekstor);
839 af9015_config.ir_table =
840 af9015_ir_table_trekstor;
841 af9015_config.ir_table_size =
842 ARRAY_SIZE(af9015_ir_table_trekstor);
836 } 843 }
837 break; 844 break;
838 case USB_VID_AVERMEDIA: 845 case USB_VID_AVERMEDIA:
@@ -981,6 +988,21 @@ error:
981 if (ret) 988 if (ret)
982 err("eeprom read failed:%d", ret); 989 err("eeprom read failed:%d", ret);
983 990
991 /* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
992 content :-( Override some wrong values here. */
993 if (le16_to_cpu(udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
994 le16_to_cpu(udev->descriptor.idProduct) == USB_PID_AVERMEDIA_A850) {
995 deb_info("%s: AverMedia A850: overriding config\n", __func__);
996 /* disable dual mode */
997 af9015_config.dual_mode = 0;
998 /* disable 2nd adapter */
999 for (i = 0; i < af9015_properties_count; i++)
1000 af9015_properties[i].num_adapters = 1;
1001
1002 /* set correct IF */
1003 af9015_af9013_config[0].tuner_if = 4570;
1004 }
1005
984 return ret; 1006 return ret;
985} 1007}
986 1008
@@ -1237,6 +1259,9 @@ static struct usb_device_id af9015_usb_table[] = {
1237/* 15 */{USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III)}, 1259/* 15 */{USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III)},
1238 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U)}, 1260 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U)},
1239 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2)}, 1261 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2)},
1262 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3)},
1263 {USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT)},
1264 {USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850)},
1240 {0}, 1265 {0},
1241}; 1266};
1242MODULE_DEVICE_TABLE(usb, af9015_usb_table); 1267MODULE_DEVICE_TABLE(usb, af9015_usb_table);
@@ -1401,7 +1426,7 @@ static struct dvb_usb_device_properties af9015_properties[] = {
1401 1426
1402 .i2c_algo = &af9015_i2c_algo, 1427 .i2c_algo = &af9015_i2c_algo,
1403 1428
1404 .num_device_descs = 7, 1429 .num_device_descs = 9,
1405 .devices = { 1430 .devices = {
1406 { 1431 {
1407 .name = "Xtensions XD-380", 1432 .name = "Xtensions XD-380",
@@ -1437,7 +1462,19 @@ static struct dvb_usb_device_properties af9015_properties[] = {
1437 .name = "KWorld USB DVB-T TV Stick II " \ 1462 .name = "KWorld USB DVB-T TV Stick II " \
1438 "(VS-DVB-T 395U)", 1463 "(VS-DVB-T 395U)",
1439 .cold_ids = {&af9015_usb_table[16], 1464 .cold_ids = {&af9015_usb_table[16],
1440 &af9015_usb_table[17], NULL}, 1465 &af9015_usb_table[17],
1466 &af9015_usb_table[18], NULL},
1467 .warm_ids = {NULL},
1468 },
1469 {
1470 .name = "TrekStor DVB-T USB Stick",
1471 .cold_ids = {&af9015_usb_table[19], NULL},
1472 .warm_ids = {NULL},
1473 },
1474 {
1475 .name = "AverMedia AVerTV Volar Black HD " \
1476 "(A850)",
1477 .cold_ids = {&af9015_usb_table[20], NULL},
1441 .warm_ids = {NULL}, 1478 .warm_ids = {NULL},
1442 }, 1479 },
1443 } 1480 }
diff --git a/drivers/media/dvb/dvb-usb/af9015.h b/drivers/media/dvb/dvb-usb/af9015.h
index 00e25714662a..8d81a17c116d 100644
--- a/drivers/media/dvb/dvb-usb/af9015.h
+++ b/drivers/media/dvb/dvb-usb/af9015.h
@@ -64,14 +64,6 @@
64 64
65#define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1) 65#define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
66 66
67#define AF9015_GPIO_ON (1 << 0)
68#define AF9015_GPIO_EN (1 << 1)
69#define AF9015_GPIO_O (1 << 2)
70#define AF9015_GPIO_I (1 << 3)
71
72#define AF9015_GPIO_TUNER_ON (AF9015_GPIO_ON|AF9015_GPIO_EN)
73#define AF9015_GPIO_TUNER_OFF (AF9015_GPIO_ON|AF9015_GPIO_EN|AF9015_GPIO_O)
74
75struct req_t { 67struct req_t {
76 u8 cmd; /* [0] */ 68 u8 cmd; /* [0] */
77 /* seq */ /* [1] */ 69 /* seq */ /* [1] */
@@ -120,11 +112,11 @@ struct af9015_config {
120 112
121enum af9015_remote { 113enum af9015_remote {
122 AF9015_REMOTE_NONE = 0, 114 AF9015_REMOTE_NONE = 0,
123 AF9015_REMOTE_A_LINK_DTU_M, 115/* 1 */ AF9015_REMOTE_A_LINK_DTU_M,
124 AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, 116 AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
125 AF9015_REMOTE_MYGICTV_U718, 117 AF9015_REMOTE_MYGICTV_U718,
126 AF9015_REMOTE_DIGITTRADE_DVB_T, 118 AF9015_REMOTE_DIGITTRADE_DVB_T,
127 AF9015_REMOTE_AVERMEDIA_KS, 119/* 5 */ AF9015_REMOTE_AVERMEDIA_KS,
128}; 120};
129 121
130/* Leadtek WinFast DTV Dongle Gold */ 122/* Leadtek WinFast DTV Dongle Gold */
@@ -691,4 +683,67 @@ static u8 af9015_ir_table_digittrade[] = {
691 0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00, 683 0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00,
692}; 684};
693 685
686/* TREKSTOR DVB-T USB Stick */
687static struct dvb_usb_rc_key af9015_rc_keys_trekstor[] = {
688 { 0x07, 0x04, KEY_AGAIN }, /* Home */
689 { 0x07, 0x05, KEY_MUTE }, /* Mute */
690 { 0x07, 0x06, KEY_UP }, /* Up */
691 { 0x07, 0x07, KEY_DOWN }, /* Down */
692 { 0x07, 0x09, KEY_RIGHT }, /* Right */
693 { 0x07, 0x0a, KEY_ENTER }, /* OK */
694 { 0x07, 0x0b, KEY_FASTFORWARD }, /* Fast forward */
695 { 0x07, 0x0c, KEY_REWIND }, /* Rewind */
696 { 0x07, 0x0d, KEY_PLAY }, /* Play/Pause */
697 { 0x07, 0x0e, KEY_VOLUMEUP }, /* Volume + */
698 { 0x07, 0x0f, KEY_VOLUMEDOWN }, /* Volume - */
699 { 0x07, 0x10, KEY_RECORD }, /* Record */
700 { 0x07, 0x11, KEY_STOP }, /* Stop */
701 { 0x07, 0x12, KEY_ZOOM }, /* TV */
702 { 0x07, 0x13, KEY_EPG }, /* Info/EPG */
703 { 0x07, 0x14, KEY_CHANNELDOWN }, /* Channel - */
704 { 0x07, 0x15, KEY_CHANNELUP }, /* Channel + */
705 { 0x07, 0x1e, KEY_1 },
706 { 0x07, 0x1f, KEY_2 },
707 { 0x07, 0x20, KEY_3 },
708 { 0x07, 0x21, KEY_4 },
709 { 0x07, 0x22, KEY_5 },
710 { 0x07, 0x23, KEY_6 },
711 { 0x07, 0x24, KEY_7 },
712 { 0x07, 0x25, KEY_8 },
713 { 0x07, 0x26, KEY_9 },
714 { 0x07, 0x08, KEY_LEFT }, /* LEFT */
715 { 0x07, 0x27, KEY_0 },
716};
717
718static u8 af9015_ir_table_trekstor[] = {
719 0x00, 0xff, 0x86, 0x79, 0x04, 0x07, 0x00,
720 0x00, 0xff, 0x85, 0x7a, 0x05, 0x07, 0x00,
721 0x00, 0xff, 0x87, 0x78, 0x06, 0x07, 0x00,
722 0x00, 0xff, 0x8c, 0x73, 0x07, 0x07, 0x00,
723 0x00, 0xff, 0x89, 0x76, 0x09, 0x07, 0x00,
724 0x00, 0xff, 0x88, 0x77, 0x0a, 0x07, 0x00,
725 0x00, 0xff, 0x8a, 0x75, 0x0b, 0x07, 0x00,
726 0x00, 0xff, 0x9e, 0x61, 0x0c, 0x07, 0x00,
727 0x00, 0xff, 0x8d, 0x72, 0x0d, 0x07, 0x00,
728 0x00, 0xff, 0x8b, 0x74, 0x0e, 0x07, 0x00,
729 0x00, 0xff, 0x9b, 0x64, 0x0f, 0x07, 0x00,
730 0x00, 0xff, 0x9d, 0x62, 0x10, 0x07, 0x00,
731 0x00, 0xff, 0x8e, 0x71, 0x11, 0x07, 0x00,
732 0x00, 0xff, 0x9c, 0x63, 0x12, 0x07, 0x00,
733 0x00, 0xff, 0x8f, 0x70, 0x13, 0x07, 0x00,
734 0x00, 0xff, 0x93, 0x6c, 0x14, 0x07, 0x00,
735 0x00, 0xff, 0x97, 0x68, 0x15, 0x07, 0x00,
736 0x00, 0xff, 0x92, 0x6d, 0x1e, 0x07, 0x00,
737 0x00, 0xff, 0x96, 0x69, 0x1f, 0x07, 0x00,
738 0x00, 0xff, 0x9a, 0x65, 0x20, 0x07, 0x00,
739 0x00, 0xff, 0x91, 0x6e, 0x21, 0x07, 0x00,
740 0x00, 0xff, 0x95, 0x6a, 0x22, 0x07, 0x00,
741 0x00, 0xff, 0x99, 0x66, 0x23, 0x07, 0x00,
742 0x00, 0xff, 0x90, 0x6f, 0x24, 0x07, 0x00,
743 0x00, 0xff, 0x94, 0x6b, 0x25, 0x07, 0x00,
744 0x00, 0xff, 0x98, 0x67, 0x26, 0x07, 0x00,
745 0x00, 0xff, 0x9f, 0x60, 0x08, 0x07, 0x00,
746 0x00, 0xff, 0x84, 0x7b, 0x27, 0x07, 0x00,
747};
748
694#endif 749#endif
diff --git a/drivers/media/dvb/dvb-usb/ce6230.c b/drivers/media/dvb/dvb-usb/ce6230.c
index 5862820f109f..52badc00e673 100644
--- a/drivers/media/dvb/dvb-usb/ce6230.c
+++ b/drivers/media/dvb/dvb-usb/ce6230.c
@@ -250,6 +250,7 @@ static int ce6230_probe(struct usb_interface *intf,
250 250
251static struct usb_device_id ce6230_table[] = { 251static struct usb_device_id ce6230_table[] = {
252 { USB_DEVICE(USB_VID_INTEL, USB_PID_INTEL_CE9500) }, 252 { USB_DEVICE(USB_VID_INTEL, USB_PID_INTEL_CE9500) },
253 { USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A310) },
253 { } /* Terminating entry */ 254 { } /* Terminating entry */
254}; 255};
255MODULE_DEVICE_TABLE(usb, ce6230_table); 256MODULE_DEVICE_TABLE(usb, ce6230_table);
@@ -284,13 +285,18 @@ static struct dvb_usb_device_properties ce6230_properties = {
284 285
285 .i2c_algo = &ce6230_i2c_algo, 286 .i2c_algo = &ce6230_i2c_algo,
286 287
287 .num_device_descs = 1, 288 .num_device_descs = 2,
288 .devices = { 289 .devices = {
289 { 290 {
290 .name = "Intel CE9500 reference design", 291 .name = "Intel CE9500 reference design",
291 .cold_ids = {NULL}, 292 .cold_ids = {NULL},
292 .warm_ids = {&ce6230_table[0], NULL}, 293 .warm_ids = {&ce6230_table[0], NULL},
293 }, 294 },
295 {
296 .name = "AVerMedia A310 USB 2.0 DVB-T tuner",
297 .cold_ids = {NULL},
298 .warm_ids = {&ce6230_table[1], NULL},
299 },
294 } 300 }
295}; 301};
296 302
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
index dc7ea21cd139..f506c74119f3 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
@@ -65,6 +65,7 @@
65#define USB_PID_AFATECH_AF9005 0x9020 65#define USB_PID_AFATECH_AF9005 0x9020
66#define USB_PID_AFATECH_AF9015_9015 0x9015 66#define USB_PID_AFATECH_AF9015_9015 0x9015
67#define USB_PID_AFATECH_AF9015_9016 0x9016 67#define USB_PID_AFATECH_AF9015_9016 0x9016
68#define USB_PID_TREKSTOR_DVBT 0x901b
68#define USB_VID_ALINK_DTU 0xf170 69#define USB_VID_ALINK_DTU 0xf170
69#define USB_PID_ANSONIC_DVBT_USB 0x6000 70#define USB_PID_ANSONIC_DVBT_USB 0x6000
70#define USB_PID_ANYSEE 0x861f 71#define USB_PID_ANYSEE 0x861f
@@ -102,6 +103,7 @@
102#define USB_PID_KWORLD_399U 0xe399 103#define USB_PID_KWORLD_399U 0xe399
103#define USB_PID_KWORLD_395U 0xe396 104#define USB_PID_KWORLD_395U 0xe396
104#define USB_PID_KWORLD_395U_2 0xe39b 105#define USB_PID_KWORLD_395U_2 0xe39b
106#define USB_PID_KWORLD_395U_3 0xe395
105#define USB_PID_KWORLD_PC160_2T 0xc160 107#define USB_PID_KWORLD_PC160_2T 0xc160
106#define USB_PID_KWORLD_VSTREAM_COLD 0x17de 108#define USB_PID_KWORLD_VSTREAM_COLD 0x17de
107#define USB_PID_KWORLD_VSTREAM_WARM 0x17df 109#define USB_PID_KWORLD_VSTREAM_WARM 0x17df
@@ -167,6 +169,8 @@
167#define USB_PID_AVERMEDIA_VOLAR_X 0xa815 169#define USB_PID_AVERMEDIA_VOLAR_X 0xa815
168#define USB_PID_AVERMEDIA_VOLAR_X_2 0x8150 170#define USB_PID_AVERMEDIA_VOLAR_X_2 0x8150
169#define USB_PID_AVERMEDIA_A309 0xa309 171#define USB_PID_AVERMEDIA_A309 0xa309
172#define USB_PID_AVERMEDIA_A310 0xa310
173#define USB_PID_AVERMEDIA_A850 0x850a
170#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006 174#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
171#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a 175#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
172#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2 0x0081 176#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2 0x0081
diff --git a/drivers/media/dvb/firewire/firedtv-avc.c b/drivers/media/dvb/firewire/firedtv-avc.c
index 12f7730184ad..32526f103b59 100644
--- a/drivers/media/dvb/firewire/firedtv-avc.c
+++ b/drivers/media/dvb/firewire/firedtv-avc.c
@@ -151,7 +151,7 @@ static void debug_fcp(const u8 *data, int length)
151 subunit_type = data[1] >> 3; 151 subunit_type = data[1] >> 3;
152 subunit_id = data[1] & 7; 152 subunit_id = data[1] & 7;
153 op = subunit_type == 0x1e || subunit_id == 5 ? ~0 : data[2]; 153 op = subunit_type == 0x1e || subunit_id == 5 ? ~0 : data[2];
154 printk(KERN_INFO "%ssu=%x.%x l=%zu: %-8s - %s\n", 154 printk(KERN_INFO "%ssu=%x.%x l=%d: %-8s - %s\n",
155 prefix, subunit_type, subunit_id, length, 155 prefix, subunit_type, subunit_id, length,
156 debug_fcp_ctype(data[0]), 156 debug_fcp_ctype(data[0]),
157 debug_fcp_opcode(op, data, length)); 157 debug_fcp_opcode(op, data, length));
diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig
index a486a7f81fa9..23e4cffeba38 100644
--- a/drivers/media/dvb/frontends/Kconfig
+++ b/drivers/media/dvb/frontends/Kconfig
@@ -513,6 +513,13 @@ config DVB_LGS8GL5
513 help 513 help
514 A DMB-TH tuner module. Say Y when you want to support this frontend. 514 A DMB-TH tuner module. Say Y when you want to support this frontend.
515 515
516config DVB_LGS8GXX
517 tristate "Legend Silicon LGS8913/LGS8GL5/LGS8GXX DMB-TH demodulator"
518 depends on DVB_CORE && I2C
519 default m if DVB_FE_CUSTOMISE
520 help
521 A DMB-TH tuner module. Say Y when you want to support this frontend.
522
516comment "Tools to develop new frontends" 523comment "Tools to develop new frontends"
517 524
518config DVB_DUMMY_FE 525config DVB_DUMMY_FE
diff --git a/drivers/media/dvb/frontends/Makefile b/drivers/media/dvb/frontends/Makefile
index 65a336aa1db6..bc2b00abd106 100644
--- a/drivers/media/dvb/frontends/Makefile
+++ b/drivers/media/dvb/frontends/Makefile
@@ -61,6 +61,7 @@ obj-$(CONFIG_DVB_TDA10048) += tda10048.o
61obj-$(CONFIG_DVB_TUNER_CX24113) += cx24113.o 61obj-$(CONFIG_DVB_TUNER_CX24113) += cx24113.o
62obj-$(CONFIG_DVB_S5H1411) += s5h1411.o 62obj-$(CONFIG_DVB_S5H1411) += s5h1411.o
63obj-$(CONFIG_DVB_LGS8GL5) += lgs8gl5.o 63obj-$(CONFIG_DVB_LGS8GL5) += lgs8gl5.o
64obj-$(CONFIG_DVB_LGS8GXX) += lgs8gxx.o
64obj-$(CONFIG_DVB_DUMMY_FE) += dvb_dummy_fe.o 65obj-$(CONFIG_DVB_DUMMY_FE) += dvb_dummy_fe.o
65obj-$(CONFIG_DVB_AF9013) += af9013.o 66obj-$(CONFIG_DVB_AF9013) += af9013.o
66obj-$(CONFIG_DVB_CX24116) += cx24116.o 67obj-$(CONFIG_DVB_CX24116) += cx24116.o
diff --git a/drivers/media/dvb/frontends/au8522_decoder.c b/drivers/media/dvb/frontends/au8522_decoder.c
index d63e1527dc88..9e9a75576a1d 100644
--- a/drivers/media/dvb/frontends/au8522_decoder.c
+++ b/drivers/media/dvb/frontends/au8522_decoder.c
@@ -652,7 +652,7 @@ static int au8522_reset(struct v4l2_subdev *sd, u32 val)
652} 652}
653 653
654static int au8522_s_video_routing(struct v4l2_subdev *sd, 654static int au8522_s_video_routing(struct v4l2_subdev *sd,
655 const struct v4l2_routing *route) 655 u32 input, u32 output, u32 config)
656{ 656{
657 struct au8522_state *state = to_state(sd); 657 struct au8522_state *state = to_state(sd);
658 658
@@ -663,11 +663,11 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd,
663 closed), and then came back to analog mode */ 663 closed), and then came back to analog mode */
664 au8522_writereg(state, 0x106, 1); 664 au8522_writereg(state, 0x106, 1);
665 665
666 if (route->input == AU8522_COMPOSITE_CH1) { 666 if (input == AU8522_COMPOSITE_CH1) {
667 au8522_setup_cvbs_mode(state); 667 au8522_setup_cvbs_mode(state);
668 } else if (route->input == AU8522_SVIDEO_CH13) { 668 } else if (input == AU8522_SVIDEO_CH13) {
669 au8522_setup_svideo_mode(state); 669 au8522_setup_svideo_mode(state);
670 } else if (route->input == AU8522_COMPOSITE_CH4_SIF) { 670 } else if (input == AU8522_COMPOSITE_CH4_SIF) {
671 au8522_setup_cvbs_tuner_mode(state); 671 au8522_setup_cvbs_tuner_mode(state);
672 } else { 672 } else {
673 printk(KERN_ERR "au8522 mode not currently supported\n"); 673 printk(KERN_ERR "au8522 mode not currently supported\n");
@@ -677,10 +677,10 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd,
677} 677}
678 678
679static int au8522_s_audio_routing(struct v4l2_subdev *sd, 679static int au8522_s_audio_routing(struct v4l2_subdev *sd,
680 const struct v4l2_routing *route) 680 u32 input, u32 output, u32 config)
681{ 681{
682 struct au8522_state *state = to_state(sd); 682 struct au8522_state *state = to_state(sd);
683 set_audio_input(state, route->input); 683 set_audio_input(state, input);
684 return 0; 684 return 0;
685} 685}
686 686
diff --git a/drivers/media/dvb/frontends/lgs8gxx.c b/drivers/media/dvb/frontends/lgs8gxx.c
new file mode 100644
index 000000000000..f9785dfe735b
--- /dev/null
+++ b/drivers/media/dvb/frontends/lgs8gxx.c
@@ -0,0 +1,816 @@
1/*
2 * Support for Legend Silicon DMB-TH demodulator
3 * LGS8913, LGS8GL5
4 * experimental support LGS8G42, LGS8G52
5 *
6 * Copyright (C) 2007,2008 David T.L. Wong <davidtlwong@gmail.com>
7 * Copyright (C) 2008 Sirius International (Hong Kong) Limited
8 * Timothy Lee <timothy.lee@siriushk.com> (for initial work on LGS8GL5)
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 */
25
26#include <asm/div64.h>
27
28#include "dvb_frontend.h"
29
30#include "lgs8gxx.h"
31#include "lgs8gxx_priv.h"
32
33#define dprintk(args...) \
34 do { \
35 if (debug) \
36 printk(KERN_DEBUG "lgs8gxx: " args); \
37 } while (0)
38
39static int debug;
40static int fake_signal_str;
41
42module_param(debug, int, 0644);
43MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
44
45module_param(fake_signal_str, int, 0644);
46MODULE_PARM_DESC(fake_signal_str, "fake signal strength for LGS8913."
47"Signal strength calculation is slow.(default:off).");
48
49/* LGS8GXX internal helper functions */
50
51static int lgs8gxx_write_reg(struct lgs8gxx_state *priv, u8 reg, u8 data)
52{
53 int ret;
54 u8 buf[] = { reg, data };
55 struct i2c_msg msg = { .flags = 0, .buf = buf, .len = 2 };
56
57 msg.addr = priv->config->demod_address;
58 if (reg >= 0xC0)
59 msg.addr += 0x02;
60
61 if (debug >= 2)
62 printk(KERN_DEBUG "%s: reg=0x%02X, data=0x%02X\n",
63 __func__, reg, data);
64
65 ret = i2c_transfer(priv->i2c, &msg, 1);
66
67 if (ret != 1)
68 dprintk(KERN_DEBUG "%s: error reg=0x%x, data=0x%x, ret=%i\n",
69 __func__, reg, data, ret);
70
71 return (ret != 1) ? -1 : 0;
72}
73
74static int lgs8gxx_read_reg(struct lgs8gxx_state *priv, u8 reg, u8 *p_data)
75{
76 int ret;
77 u8 dev_addr;
78
79 u8 b0[] = { reg };
80 u8 b1[] = { 0 };
81 struct i2c_msg msg[] = {
82 { .flags = 0, .buf = b0, .len = 1 },
83 { .flags = I2C_M_RD, .buf = b1, .len = 1 },
84 };
85
86 dev_addr = priv->config->demod_address;
87 if (reg >= 0xC0)
88 dev_addr += 0x02;
89 msg[1].addr = msg[0].addr = dev_addr;
90
91 ret = i2c_transfer(priv->i2c, msg, 2);
92 if (ret != 2) {
93 dprintk(KERN_DEBUG "%s: error reg=0x%x, ret=%i\n",
94 __func__, reg, ret);
95 return -1;
96 }
97
98 *p_data = b1[0];
99 if (debug >= 2)
100 printk(KERN_DEBUG "%s: reg=0x%02X, data=0x%02X\n",
101 __func__, reg, b1[0]);
102 return 0;
103}
104
105static int lgs8gxx_soft_reset(struct lgs8gxx_state *priv)
106{
107 lgs8gxx_write_reg(priv, 0x02, 0x00);
108 msleep(1);
109 lgs8gxx_write_reg(priv, 0x02, 0x01);
110 msleep(100);
111
112 return 0;
113}
114
115static int lgs8gxx_set_ad_mode(struct lgs8gxx_state *priv)
116{
117 const struct lgs8gxx_config *config = priv->config;
118 u8 if_conf;
119
120 if_conf = 0x10; /* AGC output on; */
121
122 if_conf |=
123 ((config->ext_adc) ? 0x80 : 0x00) |
124 ((config->if_neg_center) ? 0x04 : 0x00) |
125 ((config->if_freq == 0) ? 0x08 : 0x00) | /* Baseband */
126 ((config->ext_adc && config->adc_signed) ? 0x02 : 0x00) |
127 ((config->ext_adc && config->if_neg_edge) ? 0x01 : 0x00);
128
129 if (config->ext_adc &&
130 (config->prod == LGS8GXX_PROD_LGS8G52)) {
131 lgs8gxx_write_reg(priv, 0xBA, 0x40);
132 }
133
134 lgs8gxx_write_reg(priv, 0x07, if_conf);
135
136 return 0;
137}
138
139static int lgs8gxx_set_if_freq(struct lgs8gxx_state *priv, u32 freq /*in kHz*/)
140{
141 u64 val;
142 u32 v32;
143 u32 if_clk;
144
145 if_clk = priv->config->if_clk_freq;
146
147 val = freq;
148 if (freq != 0) {
149 val *= (u64)1 << 32;
150 if (if_clk != 0)
151 do_div(val, if_clk);
152 v32 = val & 0xFFFFFFFF;
153 dprintk("Set IF Freq to %dkHz\n", freq);
154 } else {
155 v32 = 0;
156 dprintk("Set IF Freq to baseband\n");
157 }
158 dprintk("AFC_INIT_FREQ = 0x%08X\n", v32);
159
160 lgs8gxx_write_reg(priv, 0x09, 0xFF & (v32));
161 lgs8gxx_write_reg(priv, 0x0A, 0xFF & (v32 >> 8));
162 lgs8gxx_write_reg(priv, 0x0B, 0xFF & (v32 >> 16));
163 lgs8gxx_write_reg(priv, 0x0C, 0xFF & (v32 >> 24));
164
165 return 0;
166}
167
168static int lgs8gxx_set_mode_auto(struct lgs8gxx_state *priv)
169{
170 u8 t;
171
172 if (priv->config->prod == LGS8GXX_PROD_LGS8913)
173 lgs8gxx_write_reg(priv, 0xC6, 0x01);
174
175 lgs8gxx_read_reg(priv, 0x7E, &t);
176 lgs8gxx_write_reg(priv, 0x7E, t | 0x01);
177
178 /* clear FEC self reset */
179 lgs8gxx_read_reg(priv, 0xC5, &t);
180 lgs8gxx_write_reg(priv, 0xC5, t & 0xE0);
181
182 if (priv->config->prod == LGS8GXX_PROD_LGS8913) {
183 /* FEC auto detect */
184 lgs8gxx_write_reg(priv, 0xC1, 0x03);
185
186 lgs8gxx_read_reg(priv, 0x7C, &t);
187 t = (t & 0x8C) | 0x03;
188 lgs8gxx_write_reg(priv, 0x7C, t);
189 }
190
191
192 if (priv->config->prod == LGS8GXX_PROD_LGS8913) {
193 /* BER test mode */
194 lgs8gxx_read_reg(priv, 0xC3, &t);
195 t = (t & 0xEF) | 0x10;
196 lgs8gxx_write_reg(priv, 0xC3, t);
197 }
198
199 if (priv->config->prod == LGS8GXX_PROD_LGS8G52)
200 lgs8gxx_write_reg(priv, 0xD9, 0x40);
201
202 return 0;
203}
204
205static int lgs8gxx_set_mode_manual(struct lgs8gxx_state *priv)
206{
207 int ret = 0;
208 u8 t;
209
210 /* turn off auto-detect; manual settings */
211 lgs8gxx_write_reg(priv, 0x7E, 0);
212 if (priv->config->prod == LGS8GXX_PROD_LGS8913)
213 lgs8gxx_write_reg(priv, 0xC1, 0);
214
215 ret = lgs8gxx_read_reg(priv, 0xC5, &t);
216 t = (t & 0xE0) | 0x06;
217 lgs8gxx_write_reg(priv, 0xC5, t);
218
219 lgs8gxx_soft_reset(priv);
220
221 return 0;
222}
223
224static int lgs8gxx_is_locked(struct lgs8gxx_state *priv, u8 *locked)
225{
226 int ret = 0;
227 u8 t;
228
229 ret = lgs8gxx_read_reg(priv, 0x4B, &t);
230 if (ret != 0)
231 return ret;
232
233 *locked = ((t & 0xC0) == 0xC0) ? 1 : 0;
234 return 0;
235}
236
237static int lgs8gxx_is_autodetect_finished(struct lgs8gxx_state *priv,
238 u8 *finished)
239{
240 int ret = 0;
241 u8 t;
242
243 ret = lgs8gxx_read_reg(priv, 0xA4, &t);
244 if (ret != 0)
245 return ret;
246
247 *finished = ((t & 0x3) == 0x1) ? 1 : 0;
248
249 return 0;
250}
251
252static int lgs8gxx_autolock_gi(struct lgs8gxx_state *priv, u8 gi, u8 *locked)
253{
254 int err;
255 u8 ad_fini = 0;
256
257 if (gi == GI_945)
258 dprintk("try GI 945\n");
259 else if (gi == GI_595)
260 dprintk("try GI 595\n");
261 else if (gi == GI_420)
262 dprintk("try GI 420\n");
263 lgs8gxx_write_reg(priv, 0x04, gi);
264 lgs8gxx_soft_reset(priv);
265 msleep(50);
266 err = lgs8gxx_is_autodetect_finished(priv, &ad_fini);
267 if (err != 0)
268 return err;
269 if (ad_fini) {
270 err = lgs8gxx_is_locked(priv, locked);
271 if (err != 0)
272 return err;
273 }
274
275 return 0;
276}
277
278static int lgs8gxx_auto_detect(struct lgs8gxx_state *priv,
279 u8 *detected_param, u8 *gi)
280{
281 int i, j;
282 int err = 0;
283 u8 locked = 0, tmp_gi;
284
285 dprintk("%s\n", __func__);
286
287 lgs8gxx_set_mode_auto(priv);
288 /* Guard Interval */
289 lgs8gxx_write_reg(priv, 0x03, 00);
290
291 for (i = 0; i < 2; i++) {
292 for (j = 0; j < 2; j++) {
293 tmp_gi = GI_945;
294 err = lgs8gxx_autolock_gi(priv, GI_945, &locked);
295 if (err)
296 goto out;
297 if (locked)
298 goto locked;
299 }
300 for (j = 0; j < 2; j++) {
301 tmp_gi = GI_420;
302 err = lgs8gxx_autolock_gi(priv, GI_420, &locked);
303 if (err)
304 goto out;
305 if (locked)
306 goto locked;
307 }
308 tmp_gi = GI_595;
309 err = lgs8gxx_autolock_gi(priv, GI_595, &locked);
310 if (err)
311 goto out;
312 if (locked)
313 goto locked;
314 }
315
316locked:
317 if ((err == 0) && (locked == 1)) {
318 u8 t;
319
320 lgs8gxx_read_reg(priv, 0xA2, &t);
321 *detected_param = t;
322
323 if (tmp_gi == GI_945)
324 dprintk("GI 945 locked\n");
325 else if (tmp_gi == GI_595)
326 dprintk("GI 595 locked\n");
327 else if (tmp_gi == GI_420)
328 dprintk("GI 420 locked\n");
329 *gi = tmp_gi;
330 }
331 if (!locked)
332 err = -1;
333
334out:
335 return err;
336}
337
338static void lgs8gxx_auto_lock(struct lgs8gxx_state *priv)
339{
340 s8 err;
341 u8 gi = 0x2;
342 u8 detected_param = 0;
343
344 err = lgs8gxx_auto_detect(priv, &detected_param, &gi);
345
346 if (err != 0) {
347 dprintk("lgs8gxx_auto_detect failed\n");
348 }
349
350 /* Apply detected parameters */
351 if (priv->config->prod == LGS8GXX_PROD_LGS8913) {
352 u8 inter_leave_len = detected_param & TIM_MASK ;
353 inter_leave_len = (inter_leave_len == TIM_LONG) ? 0x60 : 0x40;
354 detected_param &= CF_MASK | SC_MASK | LGS_FEC_MASK;
355 detected_param |= inter_leave_len;
356 }
357 lgs8gxx_write_reg(priv, 0x7D, detected_param);
358 if (priv->config->prod == LGS8GXX_PROD_LGS8913)
359 lgs8gxx_write_reg(priv, 0xC0, detected_param);
360 /* lgs8gxx_soft_reset(priv); */
361
362 /* Enter manual mode */
363 lgs8gxx_set_mode_manual(priv);
364
365 switch (gi) {
366 case GI_945:
367 priv->curr_gi = 945; break;
368 case GI_595:
369 priv->curr_gi = 595; break;
370 case GI_420:
371 priv->curr_gi = 420; break;
372 default:
373 priv->curr_gi = 945; break;
374 }
375}
376
377static int lgs8gxx_set_mpeg_mode(struct lgs8gxx_state *priv,
378 u8 serial, u8 clk_pol, u8 clk_gated)
379{
380 int ret = 0;
381 u8 t;
382
383 ret = lgs8gxx_read_reg(priv, 0xC2, &t);
384 if (ret != 0)
385 return ret;
386
387 t &= 0xF8;
388 t |= serial ? TS_SERIAL : TS_PARALLEL;
389 t |= clk_pol ? TS_CLK_INVERTED : TS_CLK_NORMAL;
390 t |= clk_gated ? TS_CLK_GATED : TS_CLK_FREERUN;
391
392 ret = lgs8gxx_write_reg(priv, 0xC2, t);
393 if (ret != 0)
394 return ret;
395
396 return 0;
397}
398
399
400/* LGS8913 demod frontend functions */
401
402static int lgs8913_init(struct lgs8gxx_state *priv)
403{
404 u8 t;
405
406 /* LGS8913 specific */
407 lgs8gxx_write_reg(priv, 0xc1, 0x3);
408
409 lgs8gxx_read_reg(priv, 0x7c, &t);
410 lgs8gxx_write_reg(priv, 0x7c, (t&0x8c) | 0x3);
411
412 /* LGS8913 specific */
413 lgs8gxx_read_reg(priv, 0xc3, &t);
414 lgs8gxx_write_reg(priv, 0xc3, t&0x10);
415
416
417 return 0;
418}
419
420static int lgs8gxx_init(struct dvb_frontend *fe)
421{
422 struct lgs8gxx_state *priv =
423 (struct lgs8gxx_state *)fe->demodulator_priv;
424 const struct lgs8gxx_config *config = priv->config;
425 u8 data = 0;
426 s8 err;
427 dprintk("%s\n", __func__);
428
429 lgs8gxx_read_reg(priv, 0, &data);
430 dprintk("reg 0 = 0x%02X\n", data);
431
432 /* Setup MPEG output format */
433 err = lgs8gxx_set_mpeg_mode(priv, config->serial_ts,
434 config->ts_clk_pol,
435 config->ts_clk_gated);
436 if (err != 0)
437 return -EIO;
438
439 if (config->prod == LGS8GXX_PROD_LGS8913)
440 lgs8913_init(priv);
441 lgs8gxx_set_if_freq(priv, priv->config->if_freq);
442 if (config->prod != LGS8GXX_PROD_LGS8913)
443 lgs8gxx_set_ad_mode(priv);
444
445 return 0;
446}
447
448static void lgs8gxx_release(struct dvb_frontend *fe)
449{
450 struct lgs8gxx_state *state = fe->demodulator_priv;
451 dprintk("%s\n", __func__);
452
453 kfree(state);
454}
455
456
457static int lgs8gxx_write(struct dvb_frontend *fe, u8 *buf, int len)
458{
459 struct lgs8gxx_state *priv = fe->demodulator_priv;
460
461 if (len != 2)
462 return -EINVAL;
463
464 return lgs8gxx_write_reg(priv, buf[0], buf[1]);
465}
466
467static int lgs8gxx_set_fe(struct dvb_frontend *fe,
468 struct dvb_frontend_parameters *fe_params)
469{
470 struct lgs8gxx_state *priv = fe->demodulator_priv;
471
472 dprintk("%s\n", __func__);
473
474 /* set frequency */
475 if (fe->ops.tuner_ops.set_params) {
476 fe->ops.tuner_ops.set_params(fe, fe_params);
477 if (fe->ops.i2c_gate_ctrl)
478 fe->ops.i2c_gate_ctrl(fe, 0);
479 }
480
481 /* start auto lock */
482 lgs8gxx_auto_lock(priv);
483
484 msleep(10);
485
486 return 0;
487}
488
489static int lgs8gxx_get_fe(struct dvb_frontend *fe,
490 struct dvb_frontend_parameters *fe_params)
491{
492 struct lgs8gxx_state *priv = fe->demodulator_priv;
493 u8 t;
494
495 dprintk("%s\n", __func__);
496
497 /* TODO: get real readings from device */
498 /* inversion status */
499 fe_params->inversion = INVERSION_OFF;
500
501 /* bandwidth */
502 fe_params->u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
503
504
505 lgs8gxx_read_reg(priv, 0x7D, &t);
506 fe_params->u.ofdm.code_rate_HP = FEC_AUTO;
507 fe_params->u.ofdm.code_rate_LP = FEC_AUTO;
508
509 /* constellation */
510 switch (t & SC_MASK) {
511 case SC_QAM64:
512 fe_params->u.ofdm.constellation = QAM_64;
513 break;
514 case SC_QAM32:
515 fe_params->u.ofdm.constellation = QAM_32;
516 break;
517 case SC_QAM16:
518 fe_params->u.ofdm.constellation = QAM_16;
519 break;
520 case SC_QAM4:
521 case SC_QAM4NR:
522 fe_params->u.ofdm.constellation = QPSK;
523 break;
524 default:
525 fe_params->u.ofdm.constellation = QAM_64;
526 }
527
528 /* transmission mode */
529 fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO;
530
531 /* guard interval */
532 fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_AUTO;
533
534 /* hierarchy */
535 fe_params->u.ofdm.hierarchy_information = HIERARCHY_NONE;
536
537 return 0;
538}
539
540static
541int lgs8gxx_get_tune_settings(struct dvb_frontend *fe,
542 struct dvb_frontend_tune_settings *fesettings)
543{
544 /* FIXME: copy from tda1004x.c */
545 fesettings->min_delay_ms = 800;
546 fesettings->step_size = 0;
547 fesettings->max_drift = 0;
548 return 0;
549}
550
551static int lgs8gxx_read_status(struct dvb_frontend *fe, fe_status_t *fe_status)
552{
553 struct lgs8gxx_state *priv = fe->demodulator_priv;
554 s8 ret;
555 u8 t;
556
557 dprintk("%s\n", __func__);
558
559 ret = lgs8gxx_read_reg(priv, 0x4B, &t);
560 if (ret != 0)
561 return -EIO;
562
563 dprintk("Reg 0x4B: 0x%02X\n", t);
564
565 *fe_status = 0;
566 if (priv->config->prod == LGS8GXX_PROD_LGS8913) {
567 if ((t & 0x40) == 0x40)
568 *fe_status |= FE_HAS_SIGNAL | FE_HAS_CARRIER;
569 if ((t & 0x80) == 0x80)
570 *fe_status |= FE_HAS_VITERBI | FE_HAS_SYNC |
571 FE_HAS_LOCK;
572 } else {
573 if ((t & 0x80) == 0x80)
574 *fe_status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
575 FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
576 }
577
578 /* success */
579 dprintk("%s: fe_status=0x%x\n", __func__, *fe_status);
580 return 0;
581}
582
583static int lgs8gxx_read_signal_agc(struct lgs8gxx_state *priv, u16 *signal)
584{
585 u16 v;
586 u8 agc_lvl[2], cat;
587
588 dprintk("%s()\n", __func__);
589 lgs8gxx_read_reg(priv, 0x3F, &agc_lvl[0]);
590 lgs8gxx_read_reg(priv, 0x3E, &agc_lvl[1]);
591
592 v = agc_lvl[0];
593 v <<= 8;
594 v |= agc_lvl[1];
595
596 dprintk("agc_lvl: 0x%04X\n", v);
597
598 if (v < 0x100)
599 cat = 0;
600 else if (v < 0x190)
601 cat = 5;
602 else if (v < 0x2A8)
603 cat = 4;
604 else if (v < 0x381)
605 cat = 3;
606 else if (v < 0x400)
607 cat = 2;
608 else if (v == 0x400)
609 cat = 1;
610 else
611 cat = 0;
612
613 *signal = cat;
614
615 return 0;
616}
617
618static int lgs8913_read_signal_strength(struct lgs8gxx_state *priv, u16 *signal)
619{
620 u8 t; s8 ret;
621 s16 max_strength = 0;
622 u8 str;
623 u16 i, gi = priv->curr_gi;
624
625 dprintk("%s\n", __func__);
626
627 ret = lgs8gxx_read_reg(priv, 0x4B, &t);
628 if (ret != 0)
629 return -EIO;
630
631 if (fake_signal_str) {
632 if ((t & 0xC0) == 0xC0) {
633 dprintk("Fake signal strength as 50\n");
634 *signal = 0x32;
635 } else
636 *signal = 0;
637 return 0;
638 }
639
640 dprintk("gi = %d\n", gi);
641 for (i = 0; i < gi; i++) {
642
643 if ((i & 0xFF) == 0)
644 lgs8gxx_write_reg(priv, 0x84, 0x03 & (i >> 8));
645 lgs8gxx_write_reg(priv, 0x83, i & 0xFF);
646
647 lgs8gxx_read_reg(priv, 0x94, &str);
648 if (max_strength < str)
649 max_strength = str;
650 }
651
652 *signal = max_strength;
653 dprintk("%s: signal=0x%02X\n", __func__, *signal);
654
655 lgs8gxx_read_reg(priv, 0x95, &t);
656 dprintk("%s: AVG Noise=0x%02X\n", __func__, t);
657
658 return 0;
659}
660
661static int lgs8gxx_read_signal_strength(struct dvb_frontend *fe, u16 *signal)
662{
663 struct lgs8gxx_state *priv = fe->demodulator_priv;
664
665 if (priv->config->prod == LGS8GXX_PROD_LGS8913)
666 return lgs8913_read_signal_strength(priv, signal);
667 else
668 return lgs8gxx_read_signal_agc(priv, signal);
669}
670
671static int lgs8gxx_read_snr(struct dvb_frontend *fe, u16 *snr)
672{
673 struct lgs8gxx_state *priv = fe->demodulator_priv;
674 u8 t;
675 *snr = 0;
676
677 lgs8gxx_read_reg(priv, 0x95, &t);
678 dprintk("AVG Noise=0x%02X\n", t);
679 *snr = 256 - t;
680 *snr <<= 8;
681 dprintk("snr=0x%x\n", *snr);
682
683 return 0;
684}
685
686static int lgs8gxx_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
687{
688 *ucblocks = 0;
689 dprintk("%s: ucblocks=0x%x\n", __func__, *ucblocks);
690 return 0;
691}
692
693static int lgs8gxx_read_ber(struct dvb_frontend *fe, u32 *ber)
694{
695 struct lgs8gxx_state *priv = fe->demodulator_priv;
696 u8 r0, r1, r2, r3;
697 u32 total_cnt, err_cnt;
698
699 dprintk("%s\n", __func__);
700
701 lgs8gxx_write_reg(priv, 0xc6, 0x01);
702 lgs8gxx_write_reg(priv, 0xc6, 0x41);
703 lgs8gxx_write_reg(priv, 0xc6, 0x01);
704
705 msleep(200);
706
707 lgs8gxx_write_reg(priv, 0xc6, 0x81);
708 lgs8gxx_read_reg(priv, 0xd0, &r0);
709 lgs8gxx_read_reg(priv, 0xd1, &r1);
710 lgs8gxx_read_reg(priv, 0xd2, &r2);
711 lgs8gxx_read_reg(priv, 0xd3, &r3);
712 total_cnt = (r3 << 24) | (r2 << 16) | (r1 << 8) | (r0);
713 lgs8gxx_read_reg(priv, 0xd4, &r0);
714 lgs8gxx_read_reg(priv, 0xd5, &r1);
715 lgs8gxx_read_reg(priv, 0xd6, &r2);
716 lgs8gxx_read_reg(priv, 0xd7, &r3);
717 err_cnt = (r3 << 24) | (r2 << 16) | (r1 << 8) | (r0);
718 dprintk("error=%d total=%d\n", err_cnt, total_cnt);
719
720 if (total_cnt == 0)
721 *ber = 0;
722 else
723 *ber = err_cnt * 100 / total_cnt;
724
725 dprintk("%s: ber=0x%x\n", __func__, *ber);
726 return 0;
727}
728
729static int lgs8gxx_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
730{
731 struct lgs8gxx_state *priv = fe->demodulator_priv;
732
733 if (priv->config->tuner_address == 0)
734 return 0;
735 if (enable) {
736 u8 v = 0x80 | priv->config->tuner_address;
737 return lgs8gxx_write_reg(priv, 0x01, v);
738 }
739 return lgs8gxx_write_reg(priv, 0x01, 0);
740}
741
742static struct dvb_frontend_ops lgs8gxx_ops = {
743 .info = {
744 .name = "Legend Silicon LGS8913/LGS8GXX DMB-TH",
745 .type = FE_OFDM,
746 .frequency_min = 474000000,
747 .frequency_max = 858000000,
748 .frequency_stepsize = 10000,
749 .caps =
750 FE_CAN_FEC_AUTO |
751 FE_CAN_QAM_AUTO |
752 FE_CAN_TRANSMISSION_MODE_AUTO |
753 FE_CAN_GUARD_INTERVAL_AUTO
754 },
755
756 .release = lgs8gxx_release,
757
758 .init = lgs8gxx_init,
759 .write = lgs8gxx_write,
760 .i2c_gate_ctrl = lgs8gxx_i2c_gate_ctrl,
761
762 .set_frontend = lgs8gxx_set_fe,
763 .get_frontend = lgs8gxx_get_fe,
764 .get_tune_settings = lgs8gxx_get_tune_settings,
765
766 .read_status = lgs8gxx_read_status,
767 .read_ber = lgs8gxx_read_ber,
768 .read_signal_strength = lgs8gxx_read_signal_strength,
769 .read_snr = lgs8gxx_read_snr,
770 .read_ucblocks = lgs8gxx_read_ucblocks,
771};
772
773struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
774 struct i2c_adapter *i2c)
775{
776 struct lgs8gxx_state *priv = NULL;
777 u8 data = 0;
778
779 dprintk("%s()\n", __func__);
780
781 if (config == NULL || i2c == NULL)
782 return NULL;
783
784 priv = kzalloc(sizeof(struct lgs8gxx_state), GFP_KERNEL);
785 if (priv == NULL)
786 goto error_out;
787
788 priv->config = config;
789 priv->i2c = i2c;
790
791 /* check if the demod is there */
792 if (lgs8gxx_read_reg(priv, 0, &data) != 0) {
793 dprintk("%s lgs8gxx not found at i2c addr 0x%02X\n",
794 __func__, priv->config->demod_address);
795 goto error_out;
796 }
797
798 lgs8gxx_read_reg(priv, 1, &data);
799
800 memcpy(&priv->frontend.ops, &lgs8gxx_ops,
801 sizeof(struct dvb_frontend_ops));
802 priv->frontend.demodulator_priv = priv;
803
804 return &priv->frontend;
805
806error_out:
807 dprintk("%s() error_out\n", __func__);
808 kfree(priv);
809 return NULL;
810
811}
812EXPORT_SYMBOL(lgs8gxx_attach);
813
814MODULE_DESCRIPTION("Legend Silicon LGS8913/LGS8GXX DMB-TH demodulator driver");
815MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>");
816MODULE_LICENSE("GPL");
diff --git a/drivers/media/dvb/frontends/lgs8gxx.h b/drivers/media/dvb/frontends/lgs8gxx.h
new file mode 100644
index 000000000000..321d366a8307
--- /dev/null
+++ b/drivers/media/dvb/frontends/lgs8gxx.h
@@ -0,0 +1,90 @@
1/*
2 * Support for Legend Silicon DMB-TH demodulator
3 * LGS8913, LGS8GL5
4 * experimental support LGS8G42, LGS8G52
5 *
6 * Copyright (C) 2007,2008 David T.L. Wong <davidtlwong@gmail.com>
7 * Copyright (C) 2008 Sirius International (Hong Kong) Limited
8 * Timothy Lee <timothy.lee@siriushk.com> (for initial work on LGS8GL5)
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 */
25
26#ifndef __LGS8GXX_H__
27#define __LGS8GXX_H__
28
29#include <linux/dvb/frontend.h>
30#include <linux/i2c.h>
31
32#define LGS8GXX_PROD_LGS8913 0
33#define LGS8GXX_PROD_LGS8GL5 1
34#define LGS8GXX_PROD_LGS8G42 3
35#define LGS8GXX_PROD_LGS8G52 4
36#define LGS8GXX_PROD_LGS8G54 5
37
38struct lgs8gxx_config {
39
40 /* product type */
41 u8 prod;
42
43 /* the demodulator's i2c address */
44 u8 demod_address;
45
46 /* parallel or serial transport stream */
47 u8 serial_ts;
48
49 /* transport stream polarity*/
50 u8 ts_clk_pol;
51
52 /* transport stream clock gated by ts_valid */
53 u8 ts_clk_gated;
54
55 /* A/D Clock frequency */
56 u32 if_clk_freq; /* in kHz */
57
58 /* IF frequency */
59 u32 if_freq; /* in kHz */
60
61 /*Use External ADC*/
62 u8 ext_adc;
63
64 /*External ADC output two's complement*/
65 u8 adc_signed;
66
67 /*Sample IF data at falling edge of IF_CLK*/
68 u8 if_neg_edge;
69
70 /*IF use Negative center frequency*/
71 u8 if_neg_center;
72
73 /* slave address and configuration of the tuner */
74 u8 tuner_address;
75};
76
77#if defined(CONFIG_DVB_LGS8GXX) || \
78 (defined(CONFIG_DVB_LGS8GXX_MODULE) && defined(MODULE))
79extern struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
80 struct i2c_adapter *i2c);
81#else
82static inline
83struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
84 struct i2c_adapter *i2c) {
85 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
86 return NULL;
87}
88#endif /* CONFIG_DVB_LGS8GXX */
89
90#endif /* __LGS8GXX_H__ */
diff --git a/drivers/media/dvb/frontends/lgs8gxx_priv.h b/drivers/media/dvb/frontends/lgs8gxx_priv.h
new file mode 100644
index 000000000000..9776d30686dc
--- /dev/null
+++ b/drivers/media/dvb/frontends/lgs8gxx_priv.h
@@ -0,0 +1,70 @@
1/*
2 * Support for Legend Silicon DMB-TH demodulator
3 * LGS8913, LGS8GL5
4 * experimental support LGS8G42, LGS8G52
5 *
6 * Copyright (C) 2007,2008 David T.L. Wong <davidtlwong@gmail.com>
7 * Copyright (C) 2008 Sirius International (Hong Kong) Limited
8 * Timothy Lee <timothy.lee@siriushk.com> (for initial work on LGS8GL5)
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 */
25
26#ifndef LGS8913_PRIV_H
27#define LGS8913_PRIV_H
28
29struct lgs8gxx_state {
30 struct i2c_adapter *i2c;
31 /* configuration settings */
32 const struct lgs8gxx_config *config;
33 struct dvb_frontend frontend;
34 u16 curr_gi; /* current guard interval */
35};
36
37#define SC_MASK 0x1C /* Sub-Carrier Modulation Mask */
38#define SC_QAM64 0x10 /* 64QAM modulation */
39#define SC_QAM32 0x0C /* 32QAM modulation */
40#define SC_QAM16 0x08 /* 16QAM modulation */
41#define SC_QAM4NR 0x04 /* 4QAM modulation */
42#define SC_QAM4 0x00 /* 4QAM modulation */
43
44#define LGS_FEC_MASK 0x03 /* FEC Rate Mask */
45#define LGS_FEC_0_4 0x00 /* FEC Rate 0.4 */
46#define LGS_FEC_0_6 0x01 /* FEC Rate 0.6 */
47#define LGS_FEC_0_8 0x02 /* FEC Rate 0.8 */
48
49#define TIM_MASK 0x20 /* Time Interleave Length Mask */
50#define TIM_LONG 0x00 /* Time Interleave Length = 720 */
51#define TIM_MIDDLE 0x20 /* Time Interleave Length = 240 */
52
53#define CF_MASK 0x80 /* Control Frame Mask */
54#define CF_EN 0x80 /* Control Frame On */
55
56#define GI_MASK 0x03 /* Guard Interval Mask */
57#define GI_420 0x00 /* 1/9 Guard Interval */
58#define GI_595 0x01 /* */
59#define GI_945 0x02 /* 1/4 Guard Interval */
60
61
62#define TS_PARALLEL 0x00 /* Parallel TS Output a.k.a. SPI */
63#define TS_SERIAL 0x01 /* Serial TS Output a.k.a. SSI */
64#define TS_CLK_NORMAL 0x00 /* MPEG Clock Normal */
65#define TS_CLK_INVERTED 0x02 /* MPEG Clock Inverted */
66#define TS_CLK_GATED 0x00 /* MPEG clock gated */
67#define TS_CLK_FREERUN 0x04 /* MPEG clock free running*/
68
69
70#endif
diff --git a/drivers/media/dvb/pluto2/pluto2.c b/drivers/media/dvb/pluto2/pluto2.c
index ee89623be85a..598eaf8acc6e 100644
--- a/drivers/media/dvb/pluto2/pluto2.c
+++ b/drivers/media/dvb/pluto2/pluto2.c
@@ -616,7 +616,7 @@ static int __devinit pluto2_probe(struct pci_dev *pdev,
616 /* enable interrupts */ 616 /* enable interrupts */
617 pci_write_config_dword(pdev, 0x6c, 0x8000); 617 pci_write_config_dword(pdev, 0x6c, 0x8000);
618 618
619 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 619 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
620 if (ret < 0) 620 if (ret < 0)
621 goto err_pci_disable_device; 621 goto err_pci_disable_device;
622 622
diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index cc54ed4efc48..613576202294 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -33,6 +33,9 @@
33 33
34 History: 34 History:
35 35
36 Version 0.45:
37 Converted to v4l2_device.
38
36 Version 0.44: 39 Version 0.44:
37 Add suspend/resume functions, fix unplug of device, 40 Add suspend/resume functions, fix unplug of device,
38 a lot of cleanups and fixes by Alexey Klimov <klimov.linux@gmail.com> 41 a lot of cleanups and fixes by Alexey Klimov <klimov.linux@gmail.com>
@@ -88,7 +91,7 @@
88#include <linux/slab.h> 91#include <linux/slab.h>
89#include <linux/input.h> 92#include <linux/input.h>
90#include <linux/videodev2.h> 93#include <linux/videodev2.h>
91#include <media/v4l2-common.h> 94#include <media/v4l2-device.h>
92#include <media/v4l2-ioctl.h> 95#include <media/v4l2-ioctl.h>
93#include <linux/usb.h> 96#include <linux/usb.h>
94 97
@@ -97,39 +100,8 @@
97 */ 100 */
98#include <linux/version.h> /* for KERNEL_VERSION MACRO */ 101#include <linux/version.h> /* for KERNEL_VERSION MACRO */
99 102
100#define DRIVER_VERSION "v0.44" 103#define DRIVER_VERSION "v0.45"
101#define RADIO_VERSION KERNEL_VERSION(0, 4, 4) 104#define RADIO_VERSION KERNEL_VERSION(0, 4, 5)
102
103static struct v4l2_queryctrl radio_qctrl[] = {
104 {
105 .id = V4L2_CID_AUDIO_MUTE,
106 .name = "Mute",
107 .minimum = 0,
108 .maximum = 1,
109 .default_value = 1,
110 .type = V4L2_CTRL_TYPE_BOOLEAN,
111 },
112/* HINT: the disabled controls are only here to satify kradio and such apps */
113 { .id = V4L2_CID_AUDIO_VOLUME,
114 .flags = V4L2_CTRL_FLAG_DISABLED,
115 },
116 {
117 .id = V4L2_CID_AUDIO_BALANCE,
118 .flags = V4L2_CTRL_FLAG_DISABLED,
119 },
120 {
121 .id = V4L2_CID_AUDIO_BASS,
122 .flags = V4L2_CTRL_FLAG_DISABLED,
123 },
124 {
125 .id = V4L2_CID_AUDIO_TREBLE,
126 .flags = V4L2_CTRL_FLAG_DISABLED,
127 },
128 {
129 .id = V4L2_CID_AUDIO_LOUDNESS,
130 .flags = V4L2_CTRL_FLAG_DISABLED,
131 },
132};
133 105
134#define DRIVER_AUTHOR "Markus Demleitner <msdemlei@tucana.harvard.edu>" 106#define DRIVER_AUTHOR "Markus Demleitner <msdemlei@tucana.harvard.edu>"
135#define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver" 107#define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver"
@@ -167,6 +139,8 @@ module_param(radio_nr, int, 0);
167struct dsbr100_device { 139struct dsbr100_device {
168 struct usb_device *usbdev; 140 struct usb_device *usbdev;
169 struct video_device videodev; 141 struct video_device videodev;
142 struct v4l2_device v4l2_dev;
143
170 u8 *transfer_buffer; 144 u8 *transfer_buffer;
171 struct mutex lock; /* buffer locking */ 145 struct mutex lock; /* buffer locking */
172 int curfreq; 146 int curfreq;
@@ -384,6 +358,7 @@ static void usb_dsbr100_disconnect(struct usb_interface *intf)
384 mutex_unlock(&radio->lock); 358 mutex_unlock(&radio->lock);
385 359
386 video_unregister_device(&radio->videodev); 360 video_unregister_device(&radio->videodev);
361 v4l2_device_disconnect(&radio->v4l2_dev);
387} 362}
388 363
389 364
@@ -479,14 +454,11 @@ static int vidioc_g_frequency(struct file *file, void *priv,
479static int vidioc_queryctrl(struct file *file, void *priv, 454static int vidioc_queryctrl(struct file *file, void *priv,
480 struct v4l2_queryctrl *qc) 455 struct v4l2_queryctrl *qc)
481{ 456{
482 int i; 457 switch (qc->id) {
483 458 case V4L2_CID_AUDIO_MUTE:
484 for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) { 459 return v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
485 if (qc->id && qc->id == radio_qctrl[i].id) {
486 memcpy(qc, &(radio_qctrl[i]), sizeof(*qc));
487 return 0;
488 }
489 } 460 }
461
490 return -EINVAL; 462 return -EINVAL;
491} 463}
492 464
@@ -656,6 +628,7 @@ static void usb_dsbr100_video_device_release(struct video_device *videodev)
656{ 628{
657 struct dsbr100_device *radio = videodev_to_radio(videodev); 629 struct dsbr100_device *radio = videodev_to_radio(videodev);
658 630
631 v4l2_device_unregister(&radio->v4l2_dev);
659 kfree(radio->transfer_buffer); 632 kfree(radio->transfer_buffer);
660 kfree(radio); 633 kfree(radio);
661} 634}
@@ -683,22 +656,15 @@ static const struct v4l2_ioctl_ops usb_dsbr100_ioctl_ops = {
683 .vidioc_s_input = vidioc_s_input, 656 .vidioc_s_input = vidioc_s_input,
684}; 657};
685 658
686/* V4L2 interface */
687static struct video_device dsbr100_videodev_data = {
688 .name = "D-Link DSB-R 100",
689 .fops = &usb_dsbr100_fops,
690 .ioctl_ops = &usb_dsbr100_ioctl_ops,
691 .release = usb_dsbr100_video_device_release,
692};
693
694/* check if the device is present and register with v4l and usb if it is */ 659/* check if the device is present and register with v4l and usb if it is */
695static int usb_dsbr100_probe(struct usb_interface *intf, 660static int usb_dsbr100_probe(struct usb_interface *intf,
696 const struct usb_device_id *id) 661 const struct usb_device_id *id)
697{ 662{
698 struct dsbr100_device *radio; 663 struct dsbr100_device *radio;
664 struct v4l2_device *v4l2_dev;
699 int retval; 665 int retval;
700 666
701 radio = kmalloc(sizeof(struct dsbr100_device), GFP_KERNEL); 667 radio = kzalloc(sizeof(struct dsbr100_device), GFP_KERNEL);
702 668
703 if (!radio) 669 if (!radio)
704 return -ENOMEM; 670 return -ENOMEM;
@@ -710,17 +676,35 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
710 return -ENOMEM; 676 return -ENOMEM;
711 } 677 }
712 678
679 v4l2_dev = &radio->v4l2_dev;
680
681 retval = v4l2_device_register(&intf->dev, v4l2_dev);
682 if (retval < 0) {
683 v4l2_err(v4l2_dev, "couldn't register v4l2_device\n");
684 kfree(radio->transfer_buffer);
685 kfree(radio);
686 return retval;
687 }
688
689 strlcpy(radio->videodev.name, v4l2_dev->name, sizeof(radio->videodev.name));
690 radio->videodev.v4l2_dev = v4l2_dev;
691 radio->videodev.fops = &usb_dsbr100_fops;
692 radio->videodev.ioctl_ops = &usb_dsbr100_ioctl_ops;
693 radio->videodev.release = usb_dsbr100_video_device_release;
694
713 mutex_init(&radio->lock); 695 mutex_init(&radio->lock);
714 radio->videodev = dsbr100_videodev_data;
715 696
716 radio->removed = 0; 697 radio->removed = 0;
717 radio->users = 0; 698 radio->users = 0;
718 radio->usbdev = interface_to_usbdev(intf); 699 radio->usbdev = interface_to_usbdev(intf);
719 radio->curfreq = FREQ_MIN * FREQ_MUL; 700 radio->curfreq = FREQ_MIN * FREQ_MUL;
701
720 video_set_drvdata(&radio->videodev, radio); 702 video_set_drvdata(&radio->videodev, radio);
703
721 retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, radio_nr); 704 retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, radio_nr);
722 if (retval < 0) { 705 if (retval < 0) {
723 dev_err(&intf->dev, "couldn't register video device\n"); 706 v4l2_err(v4l2_dev, "couldn't register video device\n");
707 v4l2_device_unregister(v4l2_dev);
724 kfree(radio->transfer_buffer); 708 kfree(radio->transfer_buffer);
725 kfree(radio); 709 kfree(radio);
726 return -EIO; 710 return -EIO;
diff --git a/drivers/media/radio/radio-aimslab.c b/drivers/media/radio/radio-aimslab.c
index ac82e33cb6fc..35edee009ba8 100644
--- a/drivers/media/radio/radio-aimslab.c
+++ b/drivers/media/radio/radio-aimslab.c
@@ -355,20 +355,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
355 return a->index ? -EINVAL : 0; 355 return a->index ? -EINVAL : 0;
356} 356}
357 357
358static int rtrack_open(struct file *file)
359{
360 return 0;
361}
362
363static int rtrack_release(struct file *file)
364{
365 return 0;
366}
367
368static const struct v4l2_file_operations rtrack_fops = { 358static const struct v4l2_file_operations rtrack_fops = {
369 .owner = THIS_MODULE, 359 .owner = THIS_MODULE,
370 .open = rtrack_open,
371 .release = rtrack_release,
372 .ioctl = video_ioctl2, 360 .ioctl = video_ioctl2,
373}; 361};
374 362
diff --git a/drivers/media/radio/radio-aztech.c b/drivers/media/radio/radio-aztech.c
index 49299f7fd834..8daf809eb01a 100644
--- a/drivers/media/radio/radio-aztech.c
+++ b/drivers/media/radio/radio-aztech.c
@@ -318,20 +318,8 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
318 return -EINVAL; 318 return -EINVAL;
319} 319}
320 320
321static int aztech_open(struct file *file)
322{
323 return 0;
324}
325
326static int aztech_release(struct file *file)
327{
328 return 0;
329}
330
331static const struct v4l2_file_operations aztech_fops = { 321static const struct v4l2_file_operations aztech_fops = {
332 .owner = THIS_MODULE, 322 .owner = THIS_MODULE,
333 .open = aztech_open,
334 .release = aztech_release,
335 .ioctl = video_ioctl2, 323 .ioctl = video_ioctl2,
336}; 324};
337 325
diff --git a/drivers/media/radio/radio-gemtek-pci.c b/drivers/media/radio/radio-gemtek-pci.c
index 09265d25725e..c3f579de6e71 100644
--- a/drivers/media/radio/radio-gemtek-pci.c
+++ b/drivers/media/radio/radio-gemtek-pci.c
@@ -356,20 +356,8 @@ static struct pci_device_id gemtek_pci_id[] =
356 356
357MODULE_DEVICE_TABLE(pci, gemtek_pci_id); 357MODULE_DEVICE_TABLE(pci, gemtek_pci_id);
358 358
359static int gemtek_pci_open(struct file *file)
360{
361 return 0;
362}
363
364static int gemtek_pci_release(struct file *file)
365{
366 return 0;
367}
368
369static const struct v4l2_file_operations gemtek_pci_fops = { 359static const struct v4l2_file_operations gemtek_pci_fops = {
370 .owner = THIS_MODULE, 360 .owner = THIS_MODULE,
371 .open = gemtek_pci_open,
372 .release = gemtek_pci_release,
373 .ioctl = video_ioctl2, 361 .ioctl = video_ioctl2,
374}; 362};
375 363
diff --git a/drivers/media/radio/radio-gemtek.c b/drivers/media/radio/radio-gemtek.c
index 150464426d1d..73985f641f07 100644
--- a/drivers/media/radio/radio-gemtek.c
+++ b/drivers/media/radio/radio-gemtek.c
@@ -375,20 +375,9 @@ static int gemtek_probe(struct gemtek *gt)
375/* 375/*
376 * Video 4 Linux stuff. 376 * Video 4 Linux stuff.
377 */ 377 */
378static int gemtek_open(struct file *file)
379{
380 return 0;
381}
382
383static int gemtek_release(struct file *file)
384{
385 return 0;
386}
387 378
388static const struct v4l2_file_operations gemtek_fops = { 379static const struct v4l2_file_operations gemtek_fops = {
389 .owner = THIS_MODULE, 380 .owner = THIS_MODULE,
390 .open = gemtek_open,
391 .release = gemtek_release,
392 .ioctl = video_ioctl2, 381 .ioctl = video_ioctl2,
393}; 382};
394 383
diff --git a/drivers/media/radio/radio-maestro.c b/drivers/media/radio/radio-maestro.c
index 01a6d22950ad..64d737c35acf 100644
--- a/drivers/media/radio/radio-maestro.c
+++ b/drivers/media/radio/radio-maestro.c
@@ -292,20 +292,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
292 return a->index ? -EINVAL : 0; 292 return a->index ? -EINVAL : 0;
293} 293}
294 294
295static int maestro_open(struct file *file)
296{
297 return 0;
298}
299
300static int maestro_release(struct file *file)
301{
302 return 0;
303}
304
305static const struct v4l2_file_operations maestro_fops = { 295static const struct v4l2_file_operations maestro_fops = {
306 .owner = THIS_MODULE, 296 .owner = THIS_MODULE,
307 .open = maestro_open,
308 .release = maestro_release,
309 .ioctl = video_ioctl2, 297 .ioctl = video_ioctl2,
310}; 298};
311 299
diff --git a/drivers/media/radio/radio-maxiradio.c b/drivers/media/radio/radio-maxiradio.c
index 2606f0b30355..3da51fe8fb93 100644
--- a/drivers/media/radio/radio-maxiradio.c
+++ b/drivers/media/radio/radio-maxiradio.c
@@ -339,20 +339,8 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
339 return -EINVAL; 339 return -EINVAL;
340} 340}
341 341
342static int maxiradio_open(struct file *file)
343{
344 return 0;
345}
346
347static int maxiradio_release(struct file *file)
348{
349 return 0;
350}
351
352static const struct v4l2_file_operations maxiradio_fops = { 342static const struct v4l2_file_operations maxiradio_fops = {
353 .owner = THIS_MODULE, 343 .owner = THIS_MODULE,
354 .open = maxiradio_open,
355 .release = maxiradio_release,
356 .ioctl = video_ioctl2, 344 .ioctl = video_ioctl2,
357}; 345};
358 346
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index ded25bfb366e..cab19d05e02f 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -43,6 +43,7 @@
43 * Douglas Schilling Landgraf <dougsland@gmail.com> and 43 * Douglas Schilling Landgraf <dougsland@gmail.com> and
44 * David Ellingsworth <david@identd.dyndns.org> 44 * David Ellingsworth <david@identd.dyndns.org>
45 * for discussion, help and support. 45 * for discussion, help and support.
46 * Version 0.11: Converted to v4l2_device.
46 * 47 *
47 * Many things to do: 48 * Many things to do:
48 * - Correct power managment of device (suspend & resume) 49 * - Correct power managment of device (suspend & resume)
@@ -59,7 +60,7 @@
59#include <linux/slab.h> 60#include <linux/slab.h>
60#include <linux/input.h> 61#include <linux/input.h>
61#include <linux/videodev2.h> 62#include <linux/videodev2.h>
62#include <media/v4l2-common.h> 63#include <media/v4l2-device.h>
63#include <media/v4l2-ioctl.h> 64#include <media/v4l2-ioctl.h>
64#include <linux/usb.h> 65#include <linux/usb.h>
65#include <linux/version.h> /* for KERNEL_VERSION MACRO */ 66#include <linux/version.h> /* for KERNEL_VERSION MACRO */
@@ -67,8 +68,8 @@
67/* driver and module definitions */ 68/* driver and module definitions */
68#define DRIVER_AUTHOR "Alexey Klimov <klimov.linux@gmail.com>" 69#define DRIVER_AUTHOR "Alexey Klimov <klimov.linux@gmail.com>"
69#define DRIVER_DESC "AverMedia MR 800 USB FM radio driver" 70#define DRIVER_DESC "AverMedia MR 800 USB FM radio driver"
70#define DRIVER_VERSION "0.10" 71#define DRIVER_VERSION "0.11"
71#define RADIO_VERSION KERNEL_VERSION(0, 1, 0) 72#define RADIO_VERSION KERNEL_VERSION(0, 1, 1)
72 73
73MODULE_AUTHOR(DRIVER_AUTHOR); 74MODULE_AUTHOR(DRIVER_AUTHOR);
74MODULE_DESCRIPTION(DRIVER_DESC); 75MODULE_DESCRIPTION(DRIVER_DESC);
@@ -113,38 +114,6 @@ static int radio_nr = -1;
113module_param(radio_nr, int, 0); 114module_param(radio_nr, int, 0);
114MODULE_PARM_DESC(radio_nr, "Radio Nr"); 115MODULE_PARM_DESC(radio_nr, "Radio Nr");
115 116
116static struct v4l2_queryctrl radio_qctrl[] = {
117 {
118 .id = V4L2_CID_AUDIO_MUTE,
119 .name = "Mute",
120 .minimum = 0,
121 .maximum = 1,
122 .step = 1,
123 .default_value = 1,
124 .type = V4L2_CTRL_TYPE_BOOLEAN,
125 },
126/* HINT: the disabled controls are only here to satify kradio and such apps */
127 { .id = V4L2_CID_AUDIO_VOLUME,
128 .flags = V4L2_CTRL_FLAG_DISABLED,
129 },
130 {
131 .id = V4L2_CID_AUDIO_BALANCE,
132 .flags = V4L2_CTRL_FLAG_DISABLED,
133 },
134 {
135 .id = V4L2_CID_AUDIO_BASS,
136 .flags = V4L2_CTRL_FLAG_DISABLED,
137 },
138 {
139 .id = V4L2_CID_AUDIO_TREBLE,
140 .flags = V4L2_CTRL_FLAG_DISABLED,
141 },
142 {
143 .id = V4L2_CID_AUDIO_LOUDNESS,
144 .flags = V4L2_CTRL_FLAG_DISABLED,
145 },
146};
147
148static int usb_amradio_probe(struct usb_interface *intf, 117static int usb_amradio_probe(struct usb_interface *intf,
149 const struct usb_device_id *id); 118 const struct usb_device_id *id);
150static void usb_amradio_disconnect(struct usb_interface *intf); 119static void usb_amradio_disconnect(struct usb_interface *intf);
@@ -159,6 +128,7 @@ struct amradio_device {
159 /* reference to USB and video device */ 128 /* reference to USB and video device */
160 struct usb_device *usbdev; 129 struct usb_device *usbdev;
161 struct video_device *videodev; 130 struct video_device *videodev;
131 struct v4l2_device v4l2_dev;
162 132
163 unsigned char *buffer; 133 unsigned char *buffer;
164 struct mutex lock; /* buffer locking */ 134 struct mutex lock; /* buffer locking */
@@ -329,6 +299,7 @@ static void usb_amradio_disconnect(struct usb_interface *intf)
329 299
330 usb_set_intfdata(intf, NULL); 300 usb_set_intfdata(intf, NULL);
331 video_unregister_device(radio->videodev); 301 video_unregister_device(radio->videodev);
302 v4l2_device_disconnect(&radio->v4l2_dev);
332} 303}
333 304
334/* vidioc_querycap - query device capabilities */ 305/* vidioc_querycap - query device capabilities */
@@ -463,14 +434,11 @@ static int vidioc_g_frequency(struct file *file, void *priv,
463static int vidioc_queryctrl(struct file *file, void *priv, 434static int vidioc_queryctrl(struct file *file, void *priv,
464 struct v4l2_queryctrl *qc) 435 struct v4l2_queryctrl *qc)
465{ 436{
466 int i; 437 switch (qc->id) {
467 438 case V4L2_CID_AUDIO_MUTE:
468 for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) { 439 return v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
469 if (qc->id && qc->id == radio_qctrl[i].id) {
470 memcpy(qc, &(radio_qctrl[i]), sizeof(*qc));
471 return 0;
472 }
473 } 440 }
441
474 return -EINVAL; 442 return -EINVAL;
475} 443}
476 444
@@ -671,34 +639,29 @@ static const struct v4l2_ioctl_ops usb_amradio_ioctl_ops = {
671 .vidioc_s_input = vidioc_s_input, 639 .vidioc_s_input = vidioc_s_input,
672}; 640};
673 641
674static void usb_amradio_device_release(struct video_device *videodev) 642static void usb_amradio_video_device_release(struct video_device *videodev)
675{ 643{
676 struct amradio_device *radio = video_get_drvdata(videodev); 644 struct amradio_device *radio = video_get_drvdata(videodev);
677 645
678 /* we call v4l to free radio->videodev */ 646 /* we call v4l to free radio->videodev */
679 video_device_release(videodev); 647 video_device_release(videodev);
680 648
649 v4l2_device_unregister(&radio->v4l2_dev);
650
681 /* free rest memory */ 651 /* free rest memory */
682 kfree(radio->buffer); 652 kfree(radio->buffer);
683 kfree(radio); 653 kfree(radio);
684} 654}
685 655
686/* V4L2 interface */
687static struct video_device amradio_videodev_template = {
688 .name = "AverMedia MR 800 USB FM Radio",
689 .fops = &usb_amradio_fops,
690 .ioctl_ops = &usb_amradio_ioctl_ops,
691 .release = usb_amradio_device_release,
692};
693
694/* check if the device is present and register with v4l and usb if it is */ 656/* check if the device is present and register with v4l and usb if it is */
695static int usb_amradio_probe(struct usb_interface *intf, 657static int usb_amradio_probe(struct usb_interface *intf,
696 const struct usb_device_id *id) 658 const struct usb_device_id *id)
697{ 659{
698 struct amradio_device *radio; 660 struct amradio_device *radio;
661 struct v4l2_device *v4l2_dev;
699 int retval; 662 int retval;
700 663
701 radio = kmalloc(sizeof(struct amradio_device), GFP_KERNEL); 664 radio = kzalloc(sizeof(struct amradio_device), GFP_KERNEL);
702 665
703 if (!radio) { 666 if (!radio) {
704 dev_err(&intf->dev, "kmalloc for amradio_device failed\n"); 667 dev_err(&intf->dev, "kmalloc for amradio_device failed\n");
@@ -713,6 +676,15 @@ static int usb_amradio_probe(struct usb_interface *intf,
713 return -ENOMEM; 676 return -ENOMEM;
714 } 677 }
715 678
679 v4l2_dev = &radio->v4l2_dev;
680 retval = v4l2_device_register(&intf->dev, v4l2_dev);
681 if (retval < 0) {
682 dev_err(&intf->dev, "couldn't register v4l2_device\n");
683 kfree(radio->buffer);
684 kfree(radio);
685 return retval;
686 }
687
716 radio->videodev = video_device_alloc(); 688 radio->videodev = video_device_alloc();
717 689
718 if (!radio->videodev) { 690 if (!radio->videodev) {
@@ -722,8 +694,11 @@ static int usb_amradio_probe(struct usb_interface *intf,
722 return -ENOMEM; 694 return -ENOMEM;
723 } 695 }
724 696
725 memcpy(radio->videodev, &amradio_videodev_template, 697 strlcpy(radio->videodev->name, v4l2_dev->name, sizeof(radio->videodev->name));
726 sizeof(amradio_videodev_template)); 698 radio->videodev->v4l2_dev = v4l2_dev;
699 radio->videodev->fops = &usb_amradio_fops;
700 radio->videodev->ioctl_ops = &usb_amradio_ioctl_ops;
701 radio->videodev->release = usb_amradio_video_device_release;
727 702
728 radio->removed = 0; 703 radio->removed = 0;
729 radio->users = 0; 704 radio->users = 0;
@@ -734,10 +709,12 @@ static int usb_amradio_probe(struct usb_interface *intf,
734 mutex_init(&radio->lock); 709 mutex_init(&radio->lock);
735 710
736 video_set_drvdata(radio->videodev, radio); 711 video_set_drvdata(radio->videodev, radio);
712
737 retval = video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr); 713 retval = video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr);
738 if (retval < 0) { 714 if (retval < 0) {
739 dev_err(&intf->dev, "could not register video device\n"); 715 dev_err(&intf->dev, "could not register video device\n");
740 video_device_release(radio->videodev); 716 video_device_release(radio->videodev);
717 v4l2_device_unregister(v4l2_dev);
741 kfree(radio->buffer); 718 kfree(radio->buffer);
742 kfree(radio); 719 kfree(radio);
743 return -EIO; 720 return -EIO;
diff --git a/drivers/media/radio/radio-rtrack2.c b/drivers/media/radio/radio-rtrack2.c
index d1e6b01d4eca..9cb193fa6e33 100644
--- a/drivers/media/radio/radio-rtrack2.c
+++ b/drivers/media/radio/radio-rtrack2.c
@@ -260,20 +260,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
260 return a->index ? -EINVAL : 0; 260 return a->index ? -EINVAL : 0;
261} 261}
262 262
263static int rtrack2_open(struct file *file)
264{
265 return 0;
266}
267
268static int rtrack2_release(struct file *file)
269{
270 return 0;
271}
272
273static const struct v4l2_file_operations rtrack2_fops = { 263static const struct v4l2_file_operations rtrack2_fops = {
274 .owner = THIS_MODULE, 264 .owner = THIS_MODULE,
275 .open = rtrack2_open,
276 .release = rtrack2_release,
277 .ioctl = video_ioctl2, 265 .ioctl = video_ioctl2,
278}; 266};
279 267
diff --git a/drivers/media/radio/radio-sf16fmi.c b/drivers/media/radio/radio-sf16fmi.c
index f4784f0d1a88..1dba8f0832a0 100644
--- a/drivers/media/radio/radio-sf16fmi.c
+++ b/drivers/media/radio/radio-sf16fmi.c
@@ -260,20 +260,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
260 return a->index ? -EINVAL : 0; 260 return a->index ? -EINVAL : 0;
261} 261}
262 262
263static int fmi_open(struct file *file)
264{
265 return 0;
266}
267
268static int fmi_release(struct file *file)
269{
270 return 0;
271}
272
273static const struct v4l2_file_operations fmi_fops = { 263static const struct v4l2_file_operations fmi_fops = {
274 .owner = THIS_MODULE, 264 .owner = THIS_MODULE,
275 .open = fmi_open,
276 .release = fmi_release,
277 .ioctl = video_ioctl2, 265 .ioctl = video_ioctl2,
278}; 266};
279 267
diff --git a/drivers/media/radio/radio-sf16fmr2.c b/drivers/media/radio/radio-sf16fmr2.c
index 0ba9d88a80fc..c09ca8600ea1 100644
--- a/drivers/media/radio/radio-sf16fmr2.c
+++ b/drivers/media/radio/radio-sf16fmr2.c
@@ -377,20 +377,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
377 return a->index ? -EINVAL : 0; 377 return a->index ? -EINVAL : 0;
378} 378}
379 379
380static int fmr2_open(struct file *file)
381{
382 return 0;
383}
384
385static int fmr2_release(struct file *file)
386{
387 return 0;
388}
389
390static const struct v4l2_file_operations fmr2_fops = { 380static const struct v4l2_file_operations fmr2_fops = {
391 .owner = THIS_MODULE, 381 .owner = THIS_MODULE,
392 .open = fmr2_open,
393 .release = fmr2_release,
394 .ioctl = video_ioctl2, 382 .ioctl = video_ioctl2,
395}; 383};
396 384
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c
index 713e242ba8b2..92c297796a9f 100644
--- a/drivers/media/radio/radio-si470x.c
+++ b/drivers/media/radio/radio-si470x.c
@@ -1686,7 +1686,7 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
1686 /* show some infos about the specific si470x device */ 1686 /* show some infos about the specific si470x device */
1687 if (si470x_get_all_registers(radio) < 0) { 1687 if (si470x_get_all_registers(radio) < 0) {
1688 retval = -EIO; 1688 retval = -EIO;
1689 goto err_all; 1689 goto err_video;
1690 } 1690 }
1691 printk(KERN_INFO DRIVER_NAME ": DeviceID=0x%4.4hx ChipID=0x%4.4hx\n", 1691 printk(KERN_INFO DRIVER_NAME ": DeviceID=0x%4.4hx ChipID=0x%4.4hx\n",
1692 radio->registers[DEVICEID], radio->registers[CHIPID]); 1692 radio->registers[DEVICEID], radio->registers[CHIPID]);
@@ -1694,7 +1694,7 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
1694 /* get software and hardware versions */ 1694 /* get software and hardware versions */
1695 if (si470x_get_scratch_page_versions(radio) < 0) { 1695 if (si470x_get_scratch_page_versions(radio) < 0) {
1696 retval = -EIO; 1696 retval = -EIO;
1697 goto err_all; 1697 goto err_video;
1698 } 1698 }
1699 printk(KERN_INFO DRIVER_NAME 1699 printk(KERN_INFO DRIVER_NAME
1700 ": software version %d, hardware version %d\n", 1700 ": software version %d, hardware version %d\n",
@@ -1727,7 +1727,7 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
1727 radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); 1727 radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL);
1728 if (!radio->buffer) { 1728 if (!radio->buffer) {
1729 retval = -EIO; 1729 retval = -EIO;
1730 goto err_all; 1730 goto err_video;
1731 } 1731 }
1732 1732
1733 /* rds buffer configuration */ 1733 /* rds buffer configuration */
@@ -1749,8 +1749,9 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
1749 1749
1750 return 0; 1750 return 0;
1751err_all: 1751err_all:
1752 video_device_release(radio->videodev);
1753 kfree(radio->buffer); 1752 kfree(radio->buffer);
1753err_video:
1754 video_device_release(radio->videodev);
1754err_radio: 1755err_radio:
1755 kfree(radio); 1756 kfree(radio);
1756err_initial: 1757err_initial:
diff --git a/drivers/media/radio/radio-terratec.c b/drivers/media/radio/radio-terratec.c
index 5b007f5c74b2..699db9acaaf7 100644
--- a/drivers/media/radio/radio-terratec.c
+++ b/drivers/media/radio/radio-terratec.c
@@ -332,20 +332,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
332 return a->index ? -EINVAL : 0; 332 return a->index ? -EINVAL : 0;
333} 333}
334 334
335static int terratec_open(struct file *file)
336{
337 return 0;
338}
339
340static int terratec_release(struct file *file)
341{
342 return 0;
343}
344
345static const struct v4l2_file_operations terratec_fops = { 335static const struct v4l2_file_operations terratec_fops = {
346 .owner = THIS_MODULE, 336 .owner = THIS_MODULE,
347 .open = terratec_open,
348 .release = terratec_release,
349 .ioctl = video_ioctl2, 337 .ioctl = video_ioctl2,
350}; 338};
351 339
diff --git a/drivers/media/radio/radio-trust.c b/drivers/media/radio/radio-trust.c
index d1be6492a07b..6f9ecc359356 100644
--- a/drivers/media/radio/radio-trust.c
+++ b/drivers/media/radio/radio-trust.c
@@ -338,20 +338,8 @@ static int vidioc_s_audio(struct file *file, void *priv,
338 return a->index ? -EINVAL : 0; 338 return a->index ? -EINVAL : 0;
339} 339}
340 340
341static int trust_open(struct file *file)
342{
343 return 0;
344}
345
346static int trust_release(struct file *file)
347{
348 return 0;
349}
350
351static const struct v4l2_file_operations trust_fops = { 341static const struct v4l2_file_operations trust_fops = {
352 .owner = THIS_MODULE, 342 .owner = THIS_MODULE,
353 .open = trust_open,
354 .release = trust_release,
355 .ioctl = video_ioctl2, 343 .ioctl = video_ioctl2,
356}; 344};
357 345
diff --git a/drivers/media/radio/radio-typhoon.c b/drivers/media/radio/radio-typhoon.c
index 92d923c7f360..3a98f1399495 100644
--- a/drivers/media/radio/radio-typhoon.c
+++ b/drivers/media/radio/radio-typhoon.c
@@ -314,20 +314,8 @@ static int vidioc_log_status(struct file *file, void *priv)
314 return 0; 314 return 0;
315} 315}
316 316
317static int typhoon_open(struct file *file)
318{
319 return 0;
320}
321
322static int typhoon_release(struct file *file)
323{
324 return 0;
325}
326
327static const struct v4l2_file_operations typhoon_fops = { 317static const struct v4l2_file_operations typhoon_fops = {
328 .owner = THIS_MODULE, 318 .owner = THIS_MODULE,
329 .open = typhoon_open,
330 .release = typhoon_release,
331 .ioctl = video_ioctl2, 319 .ioctl = video_ioctl2,
332}; 320};
333 321
diff --git a/drivers/media/radio/radio-zoltrix.c b/drivers/media/radio/radio-zoltrix.c
index 1f85f2024dc0..80e98b6422fe 100644
--- a/drivers/media/radio/radio-zoltrix.c
+++ b/drivers/media/radio/radio-zoltrix.c
@@ -370,21 +370,9 @@ static int vidioc_s_audio(struct file *file, void *priv,
370 return a->index ? -EINVAL : 0; 370 return a->index ? -EINVAL : 0;
371} 371}
372 372
373static int zoltrix_open(struct file *file)
374{
375 return 0;
376}
377
378static int zoltrix_release(struct file *file)
379{
380 return 0;
381}
382
383static const struct v4l2_file_operations zoltrix_fops = 373static const struct v4l2_file_operations zoltrix_fops =
384{ 374{
385 .owner = THIS_MODULE, 375 .owner = THIS_MODULE,
386 .open = zoltrix_open,
387 .release = zoltrix_release,
388 .ioctl = video_ioctl2, 376 .ioctl = video_ioctl2,
389}; 377};
390 378
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
index 76bad5819592..9d48da2fb013 100644
--- a/drivers/media/video/Kconfig
+++ b/drivers/media/video/Kconfig
@@ -746,6 +746,18 @@ config SOC_CAMERA_OV772X
746 help 746 help
747 This is a ov772x camera driver 747 This is a ov772x camera driver
748 748
749config MX1_VIDEO
750 bool
751
752config VIDEO_MX1
753 tristate "i.MX1/i.MXL CMOS Sensor Interface driver"
754 depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERA
755 select FIQ
756 select VIDEOBUF_DMA_CONTIG
757 select MX1_VIDEO
758 ---help---
759 This is a v4l2 driver for the i.MX1/i.MXL CMOS Sensor Interface
760
749config VIDEO_MX3 761config VIDEO_MX3
750 tristate "i.MX3x Camera Sensor Interface driver" 762 tristate "i.MX3x Camera Sensor Interface driver"
751 depends on VIDEO_DEV && MX3_IPU && SOC_CAMERA 763 depends on VIDEO_DEV && MX3_IPU && SOC_CAMERA
@@ -795,6 +807,8 @@ source "drivers/media/video/hdpvr/Kconfig"
795 807
796source "drivers/media/video/em28xx/Kconfig" 808source "drivers/media/video/em28xx/Kconfig"
797 809
810source "drivers/media/video/cx231xx/Kconfig"
811
798source "drivers/media/video/usbvision/Kconfig" 812source "drivers/media/video/usbvision/Kconfig"
799 813
800source "drivers/media/video/usbvideo/Kconfig" 814source "drivers/media/video/usbvideo/Kconfig"
@@ -904,5 +918,4 @@ config USB_S2255
904 This driver can be compiled as a module, called s2255drv. 918 This driver can be compiled as a module, called s2255drv.
905 919
906endif # V4L_USB_DRIVERS 920endif # V4L_USB_DRIVERS
907
908endif # VIDEO_CAPTURE_DRIVERS 921endif # VIDEO_CAPTURE_DRIVERS
diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
index b9046744463b..3f1a0350a569 100644
--- a/drivers/media/video/Makefile
+++ b/drivers/media/video/Makefile
@@ -10,7 +10,7 @@ stkwebcam-objs := stk-webcam.o stk-sensor.o
10 10
11omap2cam-objs := omap24xxcam.o omap24xxcam-dma.o 11omap2cam-objs := omap24xxcam.o omap24xxcam-dma.o
12 12
13videodev-objs := v4l2-dev.o v4l2-ioctl.o v4l2-device.o v4l2-subdev.o 13videodev-objs := v4l2-dev.o v4l2-ioctl.o v4l2-device.o
14 14
15obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-int-device.o 15obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-int-device.o
16ifeq ($(CONFIG_COMPAT),y) 16ifeq ($(CONFIG_COMPAT),y)
@@ -67,6 +67,7 @@ obj-$(CONFIG_VIDEO_MEYE) += meye.o
67obj-$(CONFIG_VIDEO_SAA7134) += saa7134/ 67obj-$(CONFIG_VIDEO_SAA7134) += saa7134/
68obj-$(CONFIG_VIDEO_CX88) += cx88/ 68obj-$(CONFIG_VIDEO_CX88) += cx88/
69obj-$(CONFIG_VIDEO_EM28XX) += em28xx/ 69obj-$(CONFIG_VIDEO_EM28XX) += em28xx/
70obj-$(CONFIG_VIDEO_CX231XX) += cx231xx/
70obj-$(CONFIG_VIDEO_USBVISION) += usbvision/ 71obj-$(CONFIG_VIDEO_USBVISION) += usbvision/
71obj-$(CONFIG_VIDEO_TVP5150) += tvp5150.o 72obj-$(CONFIG_VIDEO_TVP5150) += tvp5150.o
72obj-$(CONFIG_VIDEO_TVP514X) += tvp514x.o 73obj-$(CONFIG_VIDEO_TVP514X) += tvp514x.o
@@ -133,6 +134,7 @@ obj-$(CONFIG_VIDEO_CX18) += cx18/
133obj-$(CONFIG_VIDEO_VIVI) += vivi.o 134obj-$(CONFIG_VIDEO_VIVI) += vivi.o
134obj-$(CONFIG_VIDEO_CX23885) += cx23885/ 135obj-$(CONFIG_VIDEO_CX23885) += cx23885/
135 136
137obj-$(CONFIG_VIDEO_MX1) += mx1_camera.o
136obj-$(CONFIG_VIDEO_MX3) += mx3_camera.o 138obj-$(CONFIG_VIDEO_MX3) += mx3_camera.o
137obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o 139obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o
138obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o 140obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o
diff --git a/drivers/media/video/adv7170.c b/drivers/media/video/adv7170.c
index 873c30a41bd7..97b003449c91 100644
--- a/drivers/media/video/adv7170.c
+++ b/drivers/media/video/adv7170.c
@@ -219,18 +219,19 @@ static int adv7170_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
219 return 0; 219 return 0;
220} 220}
221 221
222static int adv7170_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 222static int adv7170_s_routing(struct v4l2_subdev *sd,
223 u32 input, u32 output, u32 config)
223{ 224{
224 struct adv7170 *encoder = to_adv7170(sd); 225 struct adv7170 *encoder = to_adv7170(sd);
225 226
226 /* RJ: route->input = 0: input is from decoder 227 /* RJ: input = 0: input is from decoder
227 route->input = 1: input is from ZR36060 228 input = 1: input is from ZR36060
228 route->input = 2: color bar */ 229 input = 2: color bar */
229 230
230 v4l2_dbg(1, debug, sd, "set input from %s\n", 231 v4l2_dbg(1, debug, sd, "set input from %s\n",
231 route->input == 0 ? "decoder" : "ZR36060"); 232 input == 0 ? "decoder" : "ZR36060");
232 233
233 switch (route->input) { 234 switch (input) {
234 case 0: 235 case 0:
235 adv7170_write(sd, 0x01, 0x20); 236 adv7170_write(sd, 0x01, 0x20);
236 adv7170_write(sd, 0x08, TR1CAPT); /* TR1 */ 237 adv7170_write(sd, 0x08, TR1CAPT); /* TR1 */
@@ -250,11 +251,11 @@ static int adv7170_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *
250 break; 251 break;
251 252
252 default: 253 default:
253 v4l2_dbg(1, debug, sd, "illegal input: %d\n", route->input); 254 v4l2_dbg(1, debug, sd, "illegal input: %d\n", input);
254 return -EINVAL; 255 return -EINVAL;
255 } 256 }
256 v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[route->input]); 257 v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[input]);
257 encoder->input = route->input; 258 encoder->input = input;
258 return 0; 259 return 0;
259} 260}
260 261
diff --git a/drivers/media/video/adv7175.c b/drivers/media/video/adv7175.c
index ff1210303295..cf8c06c85ded 100644
--- a/drivers/media/video/adv7175.c
+++ b/drivers/media/video/adv7175.c
@@ -237,15 +237,16 @@ static int adv7175_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
237 return 0; 237 return 0;
238} 238}
239 239
240static int adv7175_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 240static int adv7175_s_routing(struct v4l2_subdev *sd,
241 u32 input, u32 output, u32 config)
241{ 242{
242 struct adv7175 *encoder = to_adv7175(sd); 243 struct adv7175 *encoder = to_adv7175(sd);
243 244
244 /* RJ: route->input = 0: input is from decoder 245 /* RJ: input = 0: input is from decoder
245 route->input = 1: input is from ZR36060 246 input = 1: input is from ZR36060
246 route->input = 2: color bar */ 247 input = 2: color bar */
247 248
248 switch (route->input) { 249 switch (input) {
249 case 0: 250 case 0:
250 adv7175_write(sd, 0x01, 0x00); 251 adv7175_write(sd, 0x01, 0x00);
251 252
@@ -288,11 +289,11 @@ static int adv7175_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *
288 break; 289 break;
289 290
290 default: 291 default:
291 v4l2_dbg(1, debug, sd, "illegal input: %d\n", route->input); 292 v4l2_dbg(1, debug, sd, "illegal input: %d\n", input);
292 return -EINVAL; 293 return -EINVAL;
293 } 294 }
294 v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[route->input]); 295 v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[input]);
295 encoder->input = route->input; 296 encoder->input = input;
296 return 0; 297 return 0;
297} 298}
298 299
diff --git a/drivers/media/video/au0828/Kconfig b/drivers/media/video/au0828/Kconfig
index 05cdf494dfb0..0c3a5ba0e857 100644
--- a/drivers/media/video/au0828/Kconfig
+++ b/drivers/media/video/au0828/Kconfig
@@ -4,6 +4,7 @@ config VIDEO_AU0828
4 depends on I2C && INPUT && DVB_CORE && USB && VIDEO_V4L2 4 depends on I2C && INPUT && DVB_CORE && USB && VIDEO_V4L2
5 select I2C_ALGOBIT 5 select I2C_ALGOBIT
6 select VIDEO_TVEEPROM 6 select VIDEO_TVEEPROM
7 select VIDEOBUF_VMALLOC
7 select DVB_AU8522 if !DVB_FE_CUSTOMISE 8 select DVB_AU8522 if !DVB_FE_CUSTOMISE
8 select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMISE 9 select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMISE
9 select MEDIA_TUNER_MXL5007T if !MEDIA_TUNER_CUSTOMISE 10 select MEDIA_TUNER_MXL5007T if !MEDIA_TUNER_CUSTOMISE
diff --git a/drivers/media/video/au0828/au0828-cards.c b/drivers/media/video/au0828/au0828-cards.c
index 1aabaa7e55bb..053bbe8c8e3a 100644
--- a/drivers/media/video/au0828/au0828-cards.c
+++ b/drivers/media/video/au0828/au0828-cards.c
@@ -46,6 +46,7 @@ struct au0828_board au0828_boards[] = {
46 .name = "Hauppauge HVR850", 46 .name = "Hauppauge HVR850",
47 .tuner_type = TUNER_XC5000, 47 .tuner_type = TUNER_XC5000,
48 .tuner_addr = 0x61, 48 .tuner_addr = 0x61,
49 .i2c_clk_divider = AU0828_I2C_CLK_30KHZ,
49 .input = { 50 .input = {
50 { 51 {
51 .type = AU0828_VMUX_TELEVISION, 52 .type = AU0828_VMUX_TELEVISION,
@@ -70,6 +71,13 @@ struct au0828_board au0828_boards[] = {
70 .name = "Hauppauge HVR950Q", 71 .name = "Hauppauge HVR950Q",
71 .tuner_type = TUNER_XC5000, 72 .tuner_type = TUNER_XC5000,
72 .tuner_addr = 0x61, 73 .tuner_addr = 0x61,
74 /* The au0828 hardware i2c implementation does not properly
75 support the xc5000's i2c clock stretching. So we need to
76 lower the clock frequency enough where the 15us clock
77 stretch fits inside of a normal clock cycle, or else the
78 au0828 fails to set the STOP bit. A 30 KHz clock puts the
79 clock pulse width at 18us */
80 .i2c_clk_divider = AU0828_I2C_CLK_30KHZ,
73 .input = { 81 .input = {
74 { 82 {
75 .type = AU0828_VMUX_TELEVISION, 83 .type = AU0828_VMUX_TELEVISION,
@@ -94,16 +102,19 @@ struct au0828_board au0828_boards[] = {
94 .name = "Hauppauge HVR950Q rev xxF8", 102 .name = "Hauppauge HVR950Q rev xxF8",
95 .tuner_type = UNSET, 103 .tuner_type = UNSET,
96 .tuner_addr = ADDR_UNSET, 104 .tuner_addr = ADDR_UNSET,
105 .i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
97 }, 106 },
98 [AU0828_BOARD_DVICO_FUSIONHDTV7] = { 107 [AU0828_BOARD_DVICO_FUSIONHDTV7] = {
99 .name = "DViCO FusionHDTV USB", 108 .name = "DViCO FusionHDTV USB",
100 .tuner_type = UNSET, 109 .tuner_type = UNSET,
101 .tuner_addr = ADDR_UNSET, 110 .tuner_addr = ADDR_UNSET,
111 .i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
102 }, 112 },
103 [AU0828_BOARD_HAUPPAUGE_WOODBURY] = { 113 [AU0828_BOARD_HAUPPAUGE_WOODBURY] = {
104 .name = "Hauppauge Woodbury", 114 .name = "Hauppauge Woodbury",
105 .tuner_type = UNSET, 115 .tuner_type = UNSET,
106 .tuner_addr = ADDR_UNSET, 116 .tuner_addr = ADDR_UNSET,
117 .i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
107 }, 118 },
108}; 119};
109 120
@@ -200,8 +211,8 @@ void au0828_card_setup(struct au0828_dev *dev)
200 /* Load the analog demodulator driver (note this would need to 211 /* Load the analog demodulator driver (note this would need to
201 be abstracted out if we ever need to support a different 212 be abstracted out if we ever need to support a different
202 demod) */ 213 demod) */
203 sd = v4l2_i2c_new_subdev(&dev->i2c_adap, "au8522", "au8522", 214 sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
204 0x8e >> 1); 215 "au8522", "au8522", 0x8e >> 1);
205 if (sd == NULL) 216 if (sd == NULL)
206 printk(KERN_ERR "analog subdev registration failed\n"); 217 printk(KERN_ERR "analog subdev registration failed\n");
207 } 218 }
@@ -209,8 +220,8 @@ void au0828_card_setup(struct au0828_dev *dev)
209 /* Setup tuners */ 220 /* Setup tuners */
210 if (dev->board.tuner_type != TUNER_ABSENT) { 221 if (dev->board.tuner_type != TUNER_ABSENT) {
211 /* Load the tuner module, which does the attach */ 222 /* Load the tuner module, which does the attach */
212 sd = v4l2_i2c_new_subdev(&dev->i2c_adap, "tuner", "tuner", 223 sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
213 dev->board.tuner_addr); 224 "tuner", "tuner", dev->board.tuner_addr);
214 if (sd == NULL) 225 if (sd == NULL)
215 printk(KERN_ERR "tuner subdev registration fail\n"); 226 printk(KERN_ERR "tuner subdev registration fail\n");
216 227
diff --git a/drivers/media/video/au0828/au0828-core.c b/drivers/media/video/au0828/au0828-core.c
index 8c761d164442..4cee0b92eeee 100644
--- a/drivers/media/video/au0828/au0828-core.c
+++ b/drivers/media/video/au0828/au0828-core.c
@@ -36,8 +36,6 @@ int au0828_debug;
36module_param_named(debug, au0828_debug, int, 0644); 36module_param_named(debug, au0828_debug, int, 0644);
37MODULE_PARM_DESC(debug, "enable debug messages"); 37MODULE_PARM_DESC(debug, "enable debug messages");
38 38
39static atomic_t au0828_instance = ATOMIC_INIT(0);
40
41#define _AU0828_BULKPIPE 0x03 39#define _AU0828_BULKPIPE 0x03
42#define _BULKPIPESIZE 0xffff 40#define _BULKPIPESIZE 0xffff
43 41
@@ -169,7 +167,7 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
169static int au0828_usb_probe(struct usb_interface *interface, 167static int au0828_usb_probe(struct usb_interface *interface,
170 const struct usb_device_id *id) 168 const struct usb_device_id *id)
171{ 169{
172 int ifnum, retval, i; 170 int ifnum, retval;
173 struct au0828_dev *dev; 171 struct au0828_dev *dev;
174 struct usb_device *usbdev = interface_to_usbdev(interface); 172 struct usb_device *usbdev = interface_to_usbdev(interface);
175 173
@@ -197,10 +195,7 @@ static int au0828_usb_probe(struct usb_interface *interface,
197 usb_set_intfdata(interface, dev); 195 usb_set_intfdata(interface, dev);
198 196
199 /* Create the v4l2_device */ 197 /* Create the v4l2_device */
200 i = atomic_inc_return(&au0828_instance) - 1; 198 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
201 snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s-%03d",
202 "au0828", i);
203 retval = v4l2_device_register(&dev->usbdev->dev, &dev->v4l2_dev);
204 if (retval) { 199 if (retval) {
205 printk(KERN_ERR "%s() v4l2_device_register failed\n", 200 printk(KERN_ERR "%s() v4l2_device_register failed\n",
206 __func__); 201 __func__);
diff --git a/drivers/media/video/au0828/au0828-i2c.c b/drivers/media/video/au0828/au0828-i2c.c
index f9a958d0aef1..13e494365e70 100644
--- a/drivers/media/video/au0828/au0828-i2c.c
+++ b/drivers/media/video/au0828/au0828-i2c.c
@@ -39,13 +39,15 @@ MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
39static inline int i2c_slave_did_write_ack(struct i2c_adapter *i2c_adap) 39static inline int i2c_slave_did_write_ack(struct i2c_adapter *i2c_adap)
40{ 40{
41 struct au0828_dev *dev = i2c_adap->algo_data; 41 struct au0828_dev *dev = i2c_adap->algo_data;
42 return au0828_read(dev, REG_201) & 0x08 ? 0 : 1; 42 return au0828_read(dev, AU0828_I2C_STATUS_201) &
43 AU0828_I2C_STATUS_NO_WRITE_ACK ? 0 : 1;
43} 44}
44 45
45static inline int i2c_slave_did_read_ack(struct i2c_adapter *i2c_adap) 46static inline int i2c_slave_did_read_ack(struct i2c_adapter *i2c_adap)
46{ 47{
47 struct au0828_dev *dev = i2c_adap->algo_data; 48 struct au0828_dev *dev = i2c_adap->algo_data;
48 return au0828_read(dev, REG_201) & 0x02 ? 0 : 1; 49 return au0828_read(dev, AU0828_I2C_STATUS_201) &
50 AU0828_I2C_STATUS_NO_READ_ACK ? 0 : 1;
49} 51}
50 52
51static int i2c_wait_read_ack(struct i2c_adapter *i2c_adap) 53static int i2c_wait_read_ack(struct i2c_adapter *i2c_adap)
@@ -67,7 +69,8 @@ static int i2c_wait_read_ack(struct i2c_adapter *i2c_adap)
67static inline int i2c_is_read_busy(struct i2c_adapter *i2c_adap) 69static inline int i2c_is_read_busy(struct i2c_adapter *i2c_adap)
68{ 70{
69 struct au0828_dev *dev = i2c_adap->algo_data; 71 struct au0828_dev *dev = i2c_adap->algo_data;
70 return au0828_read(dev, REG_201) & 0x01 ? 0 : 1; 72 return au0828_read(dev, AU0828_I2C_STATUS_201) &
73 AU0828_I2C_STATUS_READ_DONE ? 0 : 1;
71} 74}
72 75
73static int i2c_wait_read_done(struct i2c_adapter *i2c_adap) 76static int i2c_wait_read_done(struct i2c_adapter *i2c_adap)
@@ -89,7 +92,8 @@ static int i2c_wait_read_done(struct i2c_adapter *i2c_adap)
89static inline int i2c_is_write_done(struct i2c_adapter *i2c_adap) 92static inline int i2c_is_write_done(struct i2c_adapter *i2c_adap)
90{ 93{
91 struct au0828_dev *dev = i2c_adap->algo_data; 94 struct au0828_dev *dev = i2c_adap->algo_data;
92 return au0828_read(dev, REG_201) & 0x04 ? 1 : 0; 95 return au0828_read(dev, AU0828_I2C_STATUS_201) &
96 AU0828_I2C_STATUS_WRITE_DONE ? 1 : 0;
93} 97}
94 98
95static int i2c_wait_write_done(struct i2c_adapter *i2c_adap) 99static int i2c_wait_write_done(struct i2c_adapter *i2c_adap)
@@ -111,7 +115,8 @@ static int i2c_wait_write_done(struct i2c_adapter *i2c_adap)
111static inline int i2c_is_busy(struct i2c_adapter *i2c_adap) 115static inline int i2c_is_busy(struct i2c_adapter *i2c_adap)
112{ 116{
113 struct au0828_dev *dev = i2c_adap->algo_data; 117 struct au0828_dev *dev = i2c_adap->algo_data;
114 return au0828_read(dev, REG_201) & 0x10 ? 1 : 0; 118 return au0828_read(dev, AU0828_I2C_STATUS_201) &
119 AU0828_I2C_STATUS_BUSY ? 1 : 0;
115} 120}
116 121
117static int i2c_wait_done(struct i2c_adapter *i2c_adap) 122static int i2c_wait_done(struct i2c_adapter *i2c_adap)
@@ -139,19 +144,14 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
139 144
140 dprintk(4, "%s()\n", __func__); 145 dprintk(4, "%s()\n", __func__);
141 146
142 au0828_write(dev, REG_2FF, 0x01); 147 au0828_write(dev, AU0828_I2C_MULTIBYTE_MODE_2FF, 0x01);
143 148
144 /* FIXME: There is a problem with i2c communications with xc5000 that 149 /* Set the I2C clock */
145 requires us to slow down the i2c clock until we have a better 150 au0828_write(dev, AU0828_I2C_CLK_DIVIDER_202,
146 strategy (such as using the secondary i2c bus to do firmware 151 dev->board.i2c_clk_divider);
147 loading */
148 if ((msg->addr << 1) == 0xc2)
149 au0828_write(dev, REG_202, 0x40);
150 else
151 au0828_write(dev, REG_202, 0x07);
152 152
153 /* Hardware needs 8 bit addresses */ 153 /* Hardware needs 8 bit addresses */
154 au0828_write(dev, REG_203, msg->addr << 1); 154 au0828_write(dev, AU0828_I2C_DEST_ADDR_203, msg->addr << 1);
155 155
156 dprintk(4, "SEND: %02x\n", msg->addr); 156 dprintk(4, "SEND: %02x\n", msg->addr);
157 157
@@ -163,7 +163,9 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
163 actual bytes to the bus, just do a read check. This is 163 actual bytes to the bus, just do a read check. This is
164 consistent with how I saw i2c device checking done in the 164 consistent with how I saw i2c device checking done in the
165 USB trace of the Windows driver */ 165 USB trace of the Windows driver */
166 au0828_write(dev, REG_200, 0x20); 166 au0828_write(dev, AU0828_I2C_TRIGGER_200,
167 AU0828_I2C_TRIGGER_READ);
168
167 if (!i2c_wait_done(i2c_adap)) 169 if (!i2c_wait_done(i2c_adap))
168 return -EIO; 170 return -EIO;
169 171
@@ -177,7 +179,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
177 179
178 dprintk(4, " %02x\n", msg->buf[i]); 180 dprintk(4, " %02x\n", msg->buf[i]);
179 181
180 au0828_write(dev, REG_205, msg->buf[i]); 182 au0828_write(dev, AU0828_I2C_WRITE_FIFO_205, msg->buf[i]);
181 183
182 strobe++; 184 strobe++;
183 i++; 185 i++;
@@ -186,9 +188,12 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
186 188
187 /* Strobe the byte into the bus */ 189 /* Strobe the byte into the bus */
188 if (i < msg->len) 190 if (i < msg->len)
189 au0828_write(dev, REG_200, 0x41); 191 au0828_write(dev, AU0828_I2C_TRIGGER_200,
192 AU0828_I2C_TRIGGER_WRITE |
193 AU0828_I2C_TRIGGER_HOLD);
190 else 194 else
191 au0828_write(dev, REG_200, 0x01); 195 au0828_write(dev, AU0828_I2C_TRIGGER_200,
196 AU0828_I2C_TRIGGER_WRITE);
192 197
193 /* Reset strobe trigger */ 198 /* Reset strobe trigger */
194 strobe = 0; 199 strobe = 0;
@@ -216,25 +221,22 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap,
216 221
217 dprintk(4, "%s()\n", __func__); 222 dprintk(4, "%s()\n", __func__);
218 223
219 au0828_write(dev, REG_2FF, 0x01); 224 au0828_write(dev, AU0828_I2C_MULTIBYTE_MODE_2FF, 0x01);
220 225
221 /* FIXME: There is a problem with i2c communications with xc5000 that 226 /* Set the I2C clock */
222 requires us to slow down the i2c clock until we have a better 227 au0828_write(dev, AU0828_I2C_CLK_DIVIDER_202,
223 strategy (such as using the secondary i2c bus to do firmware 228 dev->board.i2c_clk_divider);
224 loading */
225 if ((msg->addr << 1) == 0xc2)
226 au0828_write(dev, REG_202, 0x40);
227 else
228 au0828_write(dev, REG_202, 0x07);
229 229
230 /* Hardware needs 8 bit addresses */ 230 /* Hardware needs 8 bit addresses */
231 au0828_write(dev, REG_203, msg->addr << 1); 231 au0828_write(dev, AU0828_I2C_DEST_ADDR_203, msg->addr << 1);
232 232
233 dprintk(4, " RECV:\n"); 233 dprintk(4, " RECV:\n");
234 234
235 /* Deal with i2c_scan */ 235 /* Deal with i2c_scan */
236 if (msg->len == 0) { 236 if (msg->len == 0) {
237 au0828_write(dev, REG_200, 0x20); 237 au0828_write(dev, AU0828_I2C_TRIGGER_200,
238 AU0828_I2C_TRIGGER_READ);
239
238 if (i2c_wait_read_ack(i2c_adap)) 240 if (i2c_wait_read_ack(i2c_adap))
239 return -EIO; 241 return -EIO;
240 return 0; 242 return 0;
@@ -245,14 +247,18 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap,
245 i++; 247 i++;
246 248
247 if (i < msg->len) 249 if (i < msg->len)
248 au0828_write(dev, REG_200, 0x60); 250 au0828_write(dev, AU0828_I2C_TRIGGER_200,
251 AU0828_I2C_TRIGGER_READ |
252 AU0828_I2C_TRIGGER_HOLD);
249 else 253 else
250 au0828_write(dev, REG_200, 0x20); 254 au0828_write(dev, AU0828_I2C_TRIGGER_200,
255 AU0828_I2C_TRIGGER_READ);
251 256
252 if (!i2c_wait_read_done(i2c_adap)) 257 if (!i2c_wait_read_done(i2c_adap))
253 return -EIO; 258 return -EIO;
254 259
255 msg->buf[i-1] = au0828_read(dev, REG_209) & 0xff; 260 msg->buf[i-1] = au0828_read(dev, AU0828_I2C_READ_FIFO_209) &
261 0xff;
256 262
257 dprintk(4, " %02x\n", msg->buf[i-1]); 263 dprintk(4, " %02x\n", msg->buf[i-1]);
258 } 264 }
diff --git a/drivers/media/video/au0828/au0828-reg.h b/drivers/media/video/au0828/au0828-reg.h
index b15e4a3b6fc0..c39f3d2b721e 100644
--- a/drivers/media/video/au0828/au0828-reg.h
+++ b/drivers/media/video/au0828/au0828-reg.h
@@ -30,15 +30,36 @@
30#define AU0828_SENSORCTRL_100 0x100 30#define AU0828_SENSORCTRL_100 0x100
31#define AU0828_SENSORCTRL_VBI_103 0x103 31#define AU0828_SENSORCTRL_VBI_103 0x103
32 32
33#define REG_200 0x200 33/* I2C registers */
34#define REG_201 0x201 34#define AU0828_I2C_TRIGGER_200 0x200
35#define REG_202 0x202 35#define AU0828_I2C_STATUS_201 0x201
36#define REG_203 0x203 36#define AU0828_I2C_CLK_DIVIDER_202 0x202
37#define REG_205 0x205 37#define AU0828_I2C_DEST_ADDR_203 0x203
38#define REG_209 0x209 38#define AU0828_I2C_WRITE_FIFO_205 0x205
39#define REG_2FF 0x2ff 39#define AU0828_I2C_READ_FIFO_209 0x209
40#define AU0828_I2C_MULTIBYTE_MODE_2FF 0x2ff
40 41
41/* Audio registers */ 42/* Audio registers */
42#define AU0828_AUDIOCTRL_50C 0x50C 43#define AU0828_AUDIOCTRL_50C 0x50C
43 44
44#define REG_600 0x600 45#define REG_600 0x600
46
47/*********************************************************************/
48/* Here are constants for values associated with the above registers */
49
50/* I2C Trigger (Reg 0x200) */
51#define AU0828_I2C_TRIGGER_WRITE 0x01
52#define AU0828_I2C_TRIGGER_READ 0x20
53#define AU0828_I2C_TRIGGER_HOLD 0x40
54
55/* I2C Status (Reg 0x201) */
56#define AU0828_I2C_STATUS_READ_DONE 0x01
57#define AU0828_I2C_STATUS_NO_READ_ACK 0x02
58#define AU0828_I2C_STATUS_WRITE_DONE 0x04
59#define AU0828_I2C_STATUS_NO_WRITE_ACK 0x08
60#define AU0828_I2C_STATUS_BUSY 0x10
61
62/* I2C Clock Divider (Reg 0x202) */
63#define AU0828_I2C_CLK_250KHZ 0x07
64#define AU0828_I2C_CLK_100KHZ 0x14
65#define AU0828_I2C_CLK_30KHZ 0x40
diff --git a/drivers/media/video/au0828/au0828-video.c b/drivers/media/video/au0828/au0828-video.c
index f7ad4958b94e..27bedc6c7791 100644
--- a/drivers/media/video/au0828/au0828-video.c
+++ b/drivers/media/video/au0828/au0828-video.c
@@ -1100,7 +1100,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id * norm)
1100 have to make the au0828 bridge adjust the size of its capture 1100 have to make the au0828 bridge adjust the size of its capture
1101 buffer, which is currently hardcoded at 720x480 */ 1101 buffer, which is currently hardcoded at 720x480 */
1102 1102
1103 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_std, *norm); 1103 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, *norm);
1104 return 0; 1104 return 0;
1105} 1105}
1106 1106
@@ -1154,7 +1154,6 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
1154 struct au0828_fh *fh = priv; 1154 struct au0828_fh *fh = priv;
1155 struct au0828_dev *dev = fh->dev; 1155 struct au0828_dev *dev = fh->dev;
1156 int i; 1156 int i;
1157 struct v4l2_routing route;
1158 1157
1159 dprintk(1, "VIDIOC_S_INPUT in function %s, input=%d\n", __func__, 1158 dprintk(1, "VIDIOC_S_INPUT in function %s, input=%d\n", __func__,
1160 index); 1159 index);
@@ -1180,9 +1179,8 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
1180 break; 1179 break;
1181 } 1180 }
1182 1181
1183 route.input = AUVI_INPUT(index).vmux; 1182 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1184 route.output = 0; 1183 AUVI_INPUT(index).vmux, 0, 0);
1185 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing, &route);
1186 1184
1187 for (i = 0; i < AU0828_MAX_INPUT; i++) { 1185 for (i = 0; i < AU0828_MAX_INPUT; i++) {
1188 int enable = 0; 1186 int enable = 0;
@@ -1205,8 +1203,8 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
1205 } 1203 }
1206 } 1204 }
1207 1205
1208 route.input = AUVI_INPUT(index).amux; 1206 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
1209 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing, &route); 1207 AUVI_INPUT(index).amux, 0, 0);
1210 return 0; 1208 return 0;
1211} 1209}
1212 1210
diff --git a/drivers/media/video/au0828/au0828.h b/drivers/media/video/au0828/au0828.h
index 6ed1a6129731..b977915efbd0 100644
--- a/drivers/media/video/au0828/au0828.h
+++ b/drivers/media/video/au0828/au0828.h
@@ -81,6 +81,7 @@ struct au0828_board {
81 char *name; 81 char *name;
82 unsigned int tuner_type; 82 unsigned int tuner_type;
83 unsigned char tuner_addr; 83 unsigned char tuner_addr;
84 unsigned char i2c_clk_divider;
84 struct au0828_input input[AU0828_MAX_INPUT]; 85 struct au0828_input input[AU0828_MAX_INPUT];
85 86
86}; 87};
diff --git a/drivers/media/video/bt819.c b/drivers/media/video/bt819.c
index df4516d8dcab..f9330e3529c3 100644
--- a/drivers/media/video/bt819.c
+++ b/drivers/media/video/bt819.c
@@ -292,21 +292,22 @@ static int bt819_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
292 return 0; 292 return 0;
293} 293}
294 294
295static int bt819_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 295static int bt819_s_routing(struct v4l2_subdev *sd,
296 u32 input, u32 output, u32 config)
296{ 297{
297 struct bt819 *decoder = to_bt819(sd); 298 struct bt819 *decoder = to_bt819(sd);
298 299
299 v4l2_dbg(1, debug, sd, "set input %x\n", route->input); 300 v4l2_dbg(1, debug, sd, "set input %x\n", input);
300 301
301 if (route->input < 0 || route->input > 7) 302 if (input < 0 || input > 7)
302 return -EINVAL; 303 return -EINVAL;
303 304
304 if (sd->v4l2_dev == NULL || sd->v4l2_dev->notify == NULL) 305 if (sd->v4l2_dev == NULL || sd->v4l2_dev->notify == NULL)
305 v4l2_err(sd, "no notify found!\n"); 306 v4l2_err(sd, "no notify found!\n");
306 307
307 if (decoder->input != route->input) { 308 if (decoder->input != input) {
308 v4l2_subdev_notify(sd, BT819_FIFO_RESET_LOW, 0); 309 v4l2_subdev_notify(sd, BT819_FIFO_RESET_LOW, 0);
309 decoder->input = route->input; 310 decoder->input = input;
310 /* select mode */ 311 /* select mode */
311 if (decoder->input == 0) { 312 if (decoder->input == 0) {
312 bt819_setbit(decoder, 0x0b, 6, 0); 313 bt819_setbit(decoder, 0x0b, 6, 0);
@@ -444,9 +445,6 @@ static const struct v4l2_subdev_core_ops bt819_core_ops = {
444 .g_ctrl = bt819_g_ctrl, 445 .g_ctrl = bt819_g_ctrl,
445 .s_ctrl = bt819_s_ctrl, 446 .s_ctrl = bt819_s_ctrl,
446 .queryctrl = bt819_queryctrl, 447 .queryctrl = bt819_queryctrl,
447};
448
449static const struct v4l2_subdev_tuner_ops bt819_tuner_ops = {
450 .s_std = bt819_s_std, 448 .s_std = bt819_s_std,
451}; 449};
452 450
@@ -459,7 +457,6 @@ static const struct v4l2_subdev_video_ops bt819_video_ops = {
459 457
460static const struct v4l2_subdev_ops bt819_ops = { 458static const struct v4l2_subdev_ops bt819_ops = {
461 .core = &bt819_core_ops, 459 .core = &bt819_core_ops,
462 .tuner = &bt819_tuner_ops,
463 .video = &bt819_video_ops, 460 .video = &bt819_video_ops,
464}; 461};
465 462
diff --git a/drivers/media/video/bt856.c b/drivers/media/video/bt856.c
index 78db39503947..d0b4d4925ff8 100644
--- a/drivers/media/video/bt856.c
+++ b/drivers/media/video/bt856.c
@@ -142,16 +142,17 @@ static int bt856_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
142 return 0; 142 return 0;
143} 143}
144 144
145static int bt856_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 145static int bt856_s_routing(struct v4l2_subdev *sd,
146 u32 input, u32 output, u32 config)
146{ 147{
147 struct bt856 *encoder = to_bt856(sd); 148 struct bt856 *encoder = to_bt856(sd);
148 149
149 v4l2_dbg(1, debug, sd, "set input %d\n", route->input); 150 v4l2_dbg(1, debug, sd, "set input %d\n", input);
150 151
151 /* We only have video bus. 152 /* We only have video bus.
152 * route->input= 0: input is from bt819 153 * input= 0: input is from bt819
153 * route->input= 1: input is from ZR36060 */ 154 * input= 1: input is from ZR36060 */
154 switch (route->input) { 155 switch (input) {
155 case 0: 156 case 0:
156 bt856_setbit(encoder, 0xde, 4, 0); 157 bt856_setbit(encoder, 0xde, 4, 0);
157 bt856_setbit(encoder, 0xde, 3, 1); 158 bt856_setbit(encoder, 0xde, 3, 1);
diff --git a/drivers/media/video/bt866.c b/drivers/media/video/bt866.c
index 350cae4b02c3..af7e3a5bac9f 100644
--- a/drivers/media/video/bt866.c
+++ b/drivers/media/video/bt866.c
@@ -99,7 +99,8 @@ static int bt866_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
99 return 0; 99 return 0;
100} 100}
101 101
102static int bt866_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 102static int bt866_s_routing(struct v4l2_subdev *sd,
103 u32 input, u32 output, u32 config)
103{ 104{
104 static const __u8 init[] = { 105 static const __u8 init[] = {
105 0xc8, 0xcc, /* CRSCALE */ 106 0xc8, 0xcc, /* CRSCALE */
@@ -137,7 +138,7 @@ static int bt866_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *ro
137 138
138 val = encoder->reg[0xdc]; 139 val = encoder->reg[0xdc];
139 140
140 if (route->input == 0) 141 if (input == 0)
141 val |= 0x40; /* CBSWAP */ 142 val |= 0x40; /* CBSWAP */
142 else 143 else
143 val &= ~0x40; /* !CBSWAP */ 144 val &= ~0x40; /* !CBSWAP */
@@ -145,15 +146,15 @@ static int bt866_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *ro
145 bt866_write(encoder, 0xdc, val); 146 bt866_write(encoder, 0xdc, val);
146 147
147 val = encoder->reg[0xcc]; 148 val = encoder->reg[0xcc];
148 if (route->input == 2) 149 if (input == 2)
149 val |= 0x01; /* OSDBAR */ 150 val |= 0x01; /* OSDBAR */
150 else 151 else
151 val &= ~0x01; /* !OSDBAR */ 152 val &= ~0x01; /* !OSDBAR */
152 bt866_write(encoder, 0xcc, val); 153 bt866_write(encoder, 0xcc, val);
153 154
154 v4l2_dbg(1, debug, sd, "set input %d\n", route->input); 155 v4l2_dbg(1, debug, sd, "set input %d\n", input);
155 156
156 switch (route->input) { 157 switch (input) {
157 case 0: 158 case 0:
158 case 1: 159 case 1:
159 case 2: 160 case 2:
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c
index b9c3ba51fb86..fdb4adff3d28 100644
--- a/drivers/media/video/bt8xx/bttv-cards.c
+++ b/drivers/media/video/bt8xx/bttv-cards.c
@@ -3324,17 +3324,6 @@ void __devinit bttv_init_card1(struct bttv *btv)
3324/* initialization part two -- after registering i2c bus */ 3324/* initialization part two -- after registering i2c bus */
3325void __devinit bttv_init_card2(struct bttv *btv) 3325void __devinit bttv_init_card2(struct bttv *btv)
3326{ 3326{
3327 static const unsigned short tvaudio_addrs[] = {
3328 I2C_ADDR_TDA8425 >> 1,
3329 I2C_ADDR_TEA6300 >> 1,
3330 I2C_ADDR_TEA6420 >> 1,
3331 I2C_ADDR_TDA9840 >> 1,
3332 I2C_ADDR_TDA985x_L >> 1,
3333 I2C_ADDR_TDA985x_H >> 1,
3334 I2C_ADDR_TDA9874 >> 1,
3335 I2C_ADDR_PIC16C54 >> 1,
3336 I2C_CLIENT_END
3337 };
3338 int addr=ADDR_UNSET; 3327 int addr=ADDR_UNSET;
3339 3328
3340 btv->tuner_type = UNSET; 3329 btv->tuner_type = UNSET;
@@ -3512,12 +3501,15 @@ void __devinit bttv_init_card2(struct bttv *btv)
3512 3501
3513 /* Load tuner module before issuing tuner config call! */ 3502 /* Load tuner module before issuing tuner config call! */
3514 if (bttv_tvcards[btv->c.type].has_radio) 3503 if (bttv_tvcards[btv->c.type].has_radio)
3515 v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3504 v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3516 "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_RADIO)); 3505 &btv->c.i2c_adap, "tuner", "tuner",
3517 v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, "tuner", 3506 v4l2_i2c_tuner_addrs(ADDRS_RADIO));
3518 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 3507 v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3519 v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, "tuner", 3508 &btv->c.i2c_adap, "tuner", "tuner",
3520 "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV_WITH_DEMOD)); 3509 v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
3510 v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3511 &btv->c.i2c_adap, "tuner", "tuner",
3512 v4l2_i2c_tuner_addrs(ADDRS_TV_WITH_DEMOD));
3521 3513
3522 tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV; 3514 tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV;
3523 tun_setup.type = btv->tuner_type; 3515 tun_setup.type = btv->tuner_type;
@@ -3570,8 +3562,8 @@ void __devinit bttv_init_card2(struct bttv *btv)
3570 }; 3562 };
3571 struct v4l2_subdev *sd; 3563 struct v4l2_subdev *sd;
3572 3564
3573 sd = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3565 sd = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3574 "saa6588", "saa6588", addrs); 3566 &btv->c.i2c_adap, "saa6588", "saa6588", addrs);
3575 btv->has_saa6588 = (sd != NULL); 3567 btv->has_saa6588 = (sd != NULL);
3576 } 3568 }
3577 3569
@@ -3595,8 +3587,8 @@ void __devinit bttv_init_card2(struct bttv *btv)
3595 I2C_CLIENT_END 3587 I2C_CLIENT_END
3596 }; 3588 };
3597 3589
3598 btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3590 btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3599 "msp3400", "msp3400", addrs); 3591 &btv->c.i2c_adap, "msp3400", "msp3400", addrs);
3600 if (btv->sd_msp34xx) 3592 if (btv->sd_msp34xx)
3601 return; 3593 return;
3602 goto no_audio; 3594 goto no_audio;
@@ -3609,16 +3601,16 @@ void __devinit bttv_init_card2(struct bttv *btv)
3609 I2C_CLIENT_END 3601 I2C_CLIENT_END
3610 }; 3602 };
3611 3603
3612 if (v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3604 if (v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3613 "tda7432", "tda7432", addrs)) 3605 &btv->c.i2c_adap, "tda7432", "tda7432", addrs))
3614 return; 3606 return;
3615 goto no_audio; 3607 goto no_audio;
3616 } 3608 }
3617 3609
3618 case 3: { 3610 case 3: {
3619 /* The user specified that we should probe for tvaudio */ 3611 /* The user specified that we should probe for tvaudio */
3620 btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3612 btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3621 "tvaudio", "tvaudio", tvaudio_addrs); 3613 &btv->c.i2c_adap, "tvaudio", "tvaudio", tvaudio_addrs());
3622 if (btv->sd_tvaudio) 3614 if (btv->sd_tvaudio)
3623 return; 3615 return;
3624 goto no_audio; 3616 goto no_audio;
@@ -3637,21 +3629,13 @@ void __devinit bttv_init_card2(struct bttv *btv)
3637 it really is a msp3400, so it will return NULL when the device 3629 it really is a msp3400, so it will return NULL when the device
3638 found is really something else (e.g. a tea6300). */ 3630 found is really something else (e.g. a tea6300). */
3639 if (!bttv_tvcards[btv->c.type].no_msp34xx) { 3631 if (!bttv_tvcards[btv->c.type].no_msp34xx) {
3640 static const unsigned short addrs[] = { 3632 btv->sd_msp34xx = v4l2_i2c_new_probed_subdev_addr(&btv->c.v4l2_dev,
3641 I2C_ADDR_MSP3400 >> 1, 3633 &btv->c.i2c_adap, "msp3400", "msp3400",
3642 I2C_CLIENT_END 3634 I2C_ADDR_MSP3400 >> 1);
3643 };
3644
3645 btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
3646 "msp3400", "msp3400", addrs);
3647 } else if (bttv_tvcards[btv->c.type].msp34xx_alt) { 3635 } else if (bttv_tvcards[btv->c.type].msp34xx_alt) {
3648 static const unsigned short addrs[] = { 3636 btv->sd_msp34xx = v4l2_i2c_new_probed_subdev_addr(&btv->c.v4l2_dev,
3649 I2C_ADDR_MSP3400_ALT >> 1, 3637 &btv->c.i2c_adap, "msp3400", "msp3400",
3650 I2C_CLIENT_END 3638 I2C_ADDR_MSP3400_ALT >> 1);
3651 };
3652
3653 btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap,
3654 "msp3400", "msp3400", addrs);
3655 } 3639 }
3656 3640
3657 /* If we found a msp34xx, then we're done. */ 3641 /* If we found a msp34xx, then we're done. */
@@ -3665,14 +3649,14 @@ void __devinit bttv_init_card2(struct bttv *btv)
3665 I2C_CLIENT_END 3649 I2C_CLIENT_END
3666 }; 3650 };
3667 3651
3668 if (v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3652 if (v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3669 "tda7432", "tda7432", addrs)) 3653 &btv->c.i2c_adap, "tda7432", "tda7432", addrs))
3670 return; 3654 return;
3671 } 3655 }
3672 3656
3673 /* Now see if we can find one of the tvaudio devices. */ 3657 /* Now see if we can find one of the tvaudio devices. */
3674 btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, 3658 btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.v4l2_dev,
3675 "tvaudio", "tvaudio", tvaudio_addrs); 3659 &btv->c.i2c_adap, "tvaudio", "tvaudio", tvaudio_addrs());
3676 if (btv->sd_tvaudio) 3660 if (btv->sd_tvaudio)
3677 return; 3661 return;
3678 3662
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c
index 7a8ca0d8356f..23b7499b3185 100644
--- a/drivers/media/video/bt8xx/bttv-driver.c
+++ b/drivers/media/video/bt8xx/bttv-driver.c
@@ -1198,7 +1198,7 @@ audio_mux(struct bttv *btv, int input, int mute)
1198 ctrl.value = btv->mute; 1198 ctrl.value = btv->mute;
1199 bttv_call_all(btv, core, s_ctrl, &ctrl); 1199 bttv_call_all(btv, core, s_ctrl, &ctrl);
1200 if (btv->sd_msp34xx) { 1200 if (btv->sd_msp34xx) {
1201 struct v4l2_routing route; 1201 u32 in;
1202 1202
1203 /* Note: the inputs tuner/radio/extern/intern are translated 1203 /* Note: the inputs tuner/radio/extern/intern are translated
1204 to msp routings. This assumes common behavior for all msp3400 1204 to msp routings. This assumes common behavior for all msp3400
@@ -1207,11 +1207,11 @@ audio_mux(struct bttv *btv, int input, int mute)
1207 For now this is sufficient. */ 1207 For now this is sufficient. */
1208 switch (input) { 1208 switch (input) {
1209 case TVAUDIO_INPUT_RADIO: 1209 case TVAUDIO_INPUT_RADIO:
1210 route.input = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, 1210 in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
1211 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART); 1211 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
1212 break; 1212 break;
1213 case TVAUDIO_INPUT_EXTERN: 1213 case TVAUDIO_INPUT_EXTERN:
1214 route.input = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, 1214 in = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1,
1215 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART); 1215 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
1216 break; 1216 break;
1217 case TVAUDIO_INPUT_INTERN: 1217 case TVAUDIO_INPUT_INTERN:
@@ -1220,7 +1220,7 @@ audio_mux(struct bttv *btv, int input, int mute)
1220 input is the BTTV_BOARD_AVERMEDIA98. I wonder how 1220 input is the BTTV_BOARD_AVERMEDIA98. I wonder how
1221 that was tested. My guess is that the whole INTERN 1221 that was tested. My guess is that the whole INTERN
1222 input does not work. */ 1222 input does not work. */
1223 route.input = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, 1223 in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
1224 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART); 1224 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
1225 break; 1225 break;
1226 case TVAUDIO_INPUT_TUNER: 1226 case TVAUDIO_INPUT_TUNER:
@@ -1229,21 +1229,18 @@ audio_mux(struct bttv *btv, int input, int mute)
1229 is the only difference between the VOODOOTV_FM 1229 is the only difference between the VOODOOTV_FM
1230 and VOODOOTV_200 */ 1230 and VOODOOTV_200 */
1231 if (btv->c.type == BTTV_BOARD_VOODOOTV_200) 1231 if (btv->c.type == BTTV_BOARD_VOODOOTV_200)
1232 route.input = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER2, \ 1232 in = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER2, \
1233 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER); 1233 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER);
1234 else 1234 else
1235 route.input = MSP_INPUT_DEFAULT; 1235 in = MSP_INPUT_DEFAULT;
1236 break; 1236 break;
1237 } 1237 }
1238 route.output = MSP_OUTPUT_DEFAULT; 1238 v4l2_subdev_call(btv->sd_msp34xx, audio, s_routing,
1239 v4l2_subdev_call(btv->sd_msp34xx, audio, s_routing, &route); 1239 in, MSP_OUTPUT_DEFAULT, 0);
1240 } 1240 }
1241 if (btv->sd_tvaudio) { 1241 if (btv->sd_tvaudio) {
1242 struct v4l2_routing route; 1242 v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing,
1243 1243 input, 0, 0);
1244 route.input = input;
1245 route.output = 0;
1246 v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing, &route);
1247 } 1244 }
1248 return 0; 1245 return 0;
1249} 1246}
@@ -1329,7 +1326,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
1329 break; 1326 break;
1330 } 1327 }
1331 id = tvnorm->v4l2_id; 1328 id = tvnorm->v4l2_id;
1332 bttv_call_all(btv, tuner, s_std, id); 1329 bttv_call_all(btv, core, s_std, id);
1333 1330
1334 return 0; 1331 return 0;
1335} 1332}
@@ -4320,7 +4317,7 @@ static int __devinit bttv_probe(struct pci_dev *dev,
4320 btv->c.nr); 4317 btv->c.nr);
4321 return -EIO; 4318 return -EIO;
4322 } 4319 }
4323 if (pci_set_dma_mask(dev, DMA_32BIT_MASK)) { 4320 if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) {
4324 printk(KERN_WARNING "bttv%d: No suitable DMA available.\n", 4321 printk(KERN_WARNING "bttv%d: No suitable DMA available.\n",
4325 btv->c.nr); 4322 btv->c.nr);
4326 return -EIO; 4323 return -EIO;
diff --git a/drivers/media/video/bt8xx/bttvp.h b/drivers/media/video/bt8xx/bttvp.h
index 96498489199d..a1d0e9c9f286 100644
--- a/drivers/media/video/bt8xx/bttvp.h
+++ b/drivers/media/video/bt8xx/bttvp.h
@@ -26,7 +26,7 @@
26#define _BTTVP_H_ 26#define _BTTVP_H_
27 27
28#include <linux/version.h> 28#include <linux/version.h>
29#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,17) 29#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,18)
30 30
31#include <linux/types.h> 31#include <linux/types.h>
32#include <linux/wait.h> 32#include <linux/wait.h>
diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c
index 7abe94d9fb4c..5f582726985d 100644
--- a/drivers/media/video/cafe_ccic.c
+++ b/drivers/media/video/cafe_ccic.c
@@ -1954,7 +1954,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
1954 goto out_freeirq; 1954 goto out_freeirq;
1955 1955
1956 cam->sensor_addr = 0x42; 1956 cam->sensor_addr = 0x42;
1957 cam->sensor = v4l2_i2c_new_subdev(&cam->i2c_adapter, 1957 cam->sensor = v4l2_i2c_new_subdev(&cam->v4l2_dev, &cam->i2c_adapter,
1958 "ov7670", "ov7670", cam->sensor_addr); 1958 "ov7670", "ov7670", cam->sensor_addr);
1959 if (cam->sensor == NULL) { 1959 if (cam->sensor == NULL) {
1960 ret = -ENODEV; 1960 ret = -ENODEV;
diff --git a/drivers/media/video/cs5345.c b/drivers/media/video/cs5345.c
index 9714059ee949..57dc1704b6c0 100644
--- a/drivers/media/video/cs5345.c
+++ b/drivers/media/video/cs5345.c
@@ -53,14 +53,15 @@ static inline int cs5345_read(struct v4l2_subdev *sd, u8 reg)
53 return i2c_smbus_read_byte_data(client, reg); 53 return i2c_smbus_read_byte_data(client, reg);
54} 54}
55 55
56static int cs5345_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 56static int cs5345_s_routing(struct v4l2_subdev *sd,
57 u32 input, u32 output, u32 config)
57{ 58{
58 if ((route->input & 0xf) > 6) { 59 if ((input & 0xf) > 6) {
59 v4l2_err(sd, "Invalid input %d.\n", route->input); 60 v4l2_err(sd, "Invalid input %d.\n", input);
60 return -EINVAL; 61 return -EINVAL;
61 } 62 }
62 cs5345_write(sd, 0x09, route->input & 0xf); 63 cs5345_write(sd, 0x09, input & 0xf);
63 cs5345_write(sd, 0x05, route->input & 0xf0); 64 cs5345_write(sd, 0x05, input & 0xf0);
64 return 0; 65 return 0;
65} 66}
66 67
diff --git a/drivers/media/video/cs53l32a.c b/drivers/media/video/cs53l32a.c
index 5aeb066857a7..80bca8df9fbf 100644
--- a/drivers/media/video/cs53l32a.c
+++ b/drivers/media/video/cs53l32a.c
@@ -58,17 +58,18 @@ static int cs53l32a_read(struct v4l2_subdev *sd, u8 reg)
58 return i2c_smbus_read_byte_data(client, reg); 58 return i2c_smbus_read_byte_data(client, reg);
59} 59}
60 60
61static int cs53l32a_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 61static int cs53l32a_s_routing(struct v4l2_subdev *sd,
62 u32 input, u32 output, u32 config)
62{ 63{
63 /* There are 2 physical inputs, but the second input can be 64 /* There are 2 physical inputs, but the second input can be
64 placed in two modes, the first mode bypasses the PGA (gain), 65 placed in two modes, the first mode bypasses the PGA (gain),
65 the second goes through the PGA. Hence there are three 66 the second goes through the PGA. Hence there are three
66 possible inputs to choose from. */ 67 possible inputs to choose from. */
67 if (route->input > 2) { 68 if (input > 2) {
68 v4l2_err(sd, "Invalid input %d.\n", route->input); 69 v4l2_err(sd, "Invalid input %d.\n", input);
69 return -EINVAL; 70 return -EINVAL;
70 } 71 }
71 cs53l32a_write(sd, 0x01, 0x01 + (route->input << 4)); 72 cs53l32a_write(sd, 0x01, 0x01 + (input << 4));
72 return 0; 73 return 0;
73} 74}
74 75
diff --git a/drivers/media/video/cx18/cx18-audio.c b/drivers/media/video/cx18/cx18-audio.c
index bb5c5165dd5f..1519e91c677a 100644
--- a/drivers/media/video/cx18/cx18-audio.c
+++ b/drivers/media/video/cx18/cx18-audio.c
@@ -33,7 +33,6 @@
33int cx18_audio_set_io(struct cx18 *cx) 33int cx18_audio_set_io(struct cx18 *cx)
34{ 34{
35 const struct cx18_card_audio_input *in; 35 const struct cx18_card_audio_input *in;
36 struct v4l2_routing route;
37 u32 val; 36 u32 val;
38 int err; 37 int err;
39 38
@@ -44,13 +43,11 @@ int cx18_audio_set_io(struct cx18 *cx)
44 in = &cx->card->audio_inputs[cx->audio_input]; 43 in = &cx->card->audio_inputs[cx->audio_input];
45 44
46 /* handle muxer chips */ 45 /* handle muxer chips */
47 route.input = in->muxer_input; 46 v4l2_subdev_call(cx->sd_extmux, audio, s_routing,
48 route.output = 0; 47 in->audio_input, 0, 0);
49 v4l2_subdev_call(cx->sd_extmux, audio, s_routing, &route);
50 48
51 route.input = in->audio_input;
52 err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl, 49 err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl,
53 audio, s_routing, &route); 50 audio, s_routing, in->audio_input, 0, 0);
54 if (err) 51 if (err)
55 return err; 52 return err;
56 53
diff --git a/drivers/media/video/cx18/cx18-av-core.c b/drivers/media/video/cx18/cx18-av-core.c
index f4dd9d78eb3d..cf2bd888a429 100644
--- a/drivers/media/video/cx18/cx18-av-core.c
+++ b/drivers/media/video/cx18/cx18-av-core.c
@@ -203,43 +203,42 @@ static int cx18_av_reset(struct v4l2_subdev *sd, u32 val)
203 203
204static int cx18_av_init(struct v4l2_subdev *sd, u32 val) 204static int cx18_av_init(struct v4l2_subdev *sd, u32 val)
205{ 205{
206 struct cx18_av_state *state = to_cx18_av_state(sd);
207 struct cx18 *cx = v4l2_get_subdevdata(sd); 206 struct cx18 *cx = v4l2_get_subdevdata(sd);
208 207
209 switch (val) { 208 /*
210 case CX18_AV_INIT_PLLS: 209 * The crystal freq used in calculations in this driver will be
211 /* 210 * 28.636360 MHz.
212 * The crystal freq used in calculations in this driver will be 211 * Aim to run the PLLs' VCOs near 400 MHz to minimze errors.
213 * 28.636360 MHz. 212 */
214 * Aim to run the PLLs' VCOs near 400 MHz to minimze errors.
215 */
216 213
217 /* 214 /*
218 * VDCLK Integer = 0x0f, Post Divider = 0x04 215 * VDCLK Integer = 0x0f, Post Divider = 0x04
219 * AIMCLK Integer = 0x0e, Post Divider = 0x16 216 * AIMCLK Integer = 0x0e, Post Divider = 0x16
220 */ 217 */
221 cx18_av_write4(cx, CXADEC_PLL_CTRL1, 0x160e040f); 218 cx18_av_write4(cx, CXADEC_PLL_CTRL1, 0x160e040f);
222 219
223 /* VDCLK Fraction = 0x2be2fe */ 220 /* VDCLK Fraction = 0x2be2fe */
224 /* xtal * 0xf.15f17f0/4 = 108 MHz: 432 MHz before post divide */ 221 /* xtal * 0xf.15f17f0/4 = 108 MHz: 432 MHz before post divide */
225 cx18_av_write4(cx, CXADEC_VID_PLL_FRAC, 0x002be2fe); 222 cx18_av_write4(cx, CXADEC_VID_PLL_FRAC, 0x002be2fe);
226 223
227 /* AIMCLK Fraction = 0x05227ad */ 224 /* AIMCLK Fraction = 0x05227ad */
228 /* xtal * 0xe.2913d68/0x16 = 48000 * 384: 406 MHz pre post-div*/ 225 /* xtal * 0xe.2913d68/0x16 = 48000 * 384: 406 MHz pre post-div*/
229 cx18_av_write4(cx, CXADEC_AUX_PLL_FRAC, 0x005227ad); 226 cx18_av_write4(cx, CXADEC_AUX_PLL_FRAC, 0x005227ad);
230 227
231 /* SA_MCLK_SEL=1, SA_MCLK_DIV=0x16 */ 228 /* SA_MCLK_SEL=1, SA_MCLK_DIV=0x16 */
232 cx18_av_write(cx, CXADEC_I2S_MCLK, 0x56); 229 cx18_av_write(cx, CXADEC_I2S_MCLK, 0x56);
233 break; 230 return 0;
231}
234 232
235 case CX18_AV_INIT_NORMAL: 233static int cx18_av_load_fw(struct v4l2_subdev *sd)
236 default: 234{
237 if (!state->is_initialized) { 235 struct cx18_av_state *state = to_cx18_av_state(sd);
238 /* initialize on first use */ 236 struct cx18 *cx = v4l2_get_subdevdata(sd);
239 state->is_initialized = 1; 237
240 cx18_av_initialize(cx); 238 if (!state->is_initialized) {
241 } 239 /* initialize on first use */
242 break; 240 state->is_initialized = 1;
241 cx18_av_initialize(cx);
243 } 242 }
244 return 0; 243 return 0;
245} 244}
@@ -548,19 +547,19 @@ static int set_input(struct cx18 *cx, enum cx18_av_video_input vid_input,
548} 547}
549 548
550static int cx18_av_s_video_routing(struct v4l2_subdev *sd, 549static int cx18_av_s_video_routing(struct v4l2_subdev *sd,
551 const struct v4l2_routing *route) 550 u32 input, u32 output, u32 config)
552{ 551{
553 struct cx18_av_state *state = to_cx18_av_state(sd); 552 struct cx18_av_state *state = to_cx18_av_state(sd);
554 struct cx18 *cx = v4l2_get_subdevdata(sd); 553 struct cx18 *cx = v4l2_get_subdevdata(sd);
555 return set_input(cx, route->input, state->aud_input); 554 return set_input(cx, input, state->aud_input);
556} 555}
557 556
558static int cx18_av_s_audio_routing(struct v4l2_subdev *sd, 557static int cx18_av_s_audio_routing(struct v4l2_subdev *sd,
559 const struct v4l2_routing *route) 558 u32 input, u32 output, u32 config)
560{ 559{
561 struct cx18_av_state *state = to_cx18_av_state(sd); 560 struct cx18_av_state *state = to_cx18_av_state(sd);
562 struct cx18 *cx = v4l2_get_subdevdata(sd); 561 struct cx18 *cx = v4l2_get_subdevdata(sd);
563 return set_input(cx, state->vid_input, route->input); 562 return set_input(cx, state->vid_input, input);
564} 563}
565 564
566static int cx18_av_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt) 565static int cx18_av_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
@@ -1185,10 +1184,12 @@ static const struct v4l2_subdev_core_ops cx18_av_general_ops = {
1185 .g_chip_ident = cx18_av_g_chip_ident, 1184 .g_chip_ident = cx18_av_g_chip_ident,
1186 .log_status = cx18_av_log_status, 1185 .log_status = cx18_av_log_status,
1187 .init = cx18_av_init, 1186 .init = cx18_av_init,
1187 .load_fw = cx18_av_load_fw,
1188 .reset = cx18_av_reset, 1188 .reset = cx18_av_reset,
1189 .queryctrl = cx18_av_queryctrl, 1189 .queryctrl = cx18_av_queryctrl,
1190 .g_ctrl = cx18_av_g_ctrl, 1190 .g_ctrl = cx18_av_g_ctrl,
1191 .s_ctrl = cx18_av_s_ctrl, 1191 .s_ctrl = cx18_av_s_ctrl,
1192 .s_std = cx18_av_s_std,
1192#ifdef CONFIG_VIDEO_ADV_DEBUG 1193#ifdef CONFIG_VIDEO_ADV_DEBUG
1193 .g_register = cx18_av_g_register, 1194 .g_register = cx18_av_g_register,
1194 .s_register = cx18_av_s_register, 1195 .s_register = cx18_av_s_register,
@@ -1200,7 +1201,6 @@ static const struct v4l2_subdev_tuner_ops cx18_av_tuner_ops = {
1200 .s_frequency = cx18_av_s_frequency, 1201 .s_frequency = cx18_av_s_frequency,
1201 .g_tuner = cx18_av_g_tuner, 1202 .g_tuner = cx18_av_g_tuner,
1202 .s_tuner = cx18_av_s_tuner, 1203 .s_tuner = cx18_av_s_tuner,
1203 .s_std = cx18_av_s_std,
1204}; 1204};
1205 1205
1206static const struct v4l2_subdev_audio_ops cx18_av_audio_ops = { 1206static const struct v4l2_subdev_audio_ops cx18_av_audio_ops = {
diff --git a/drivers/media/video/cx18/cx18-av-core.h b/drivers/media/video/cx18/cx18-av-core.h
index c458120e8c90..9b84a0c58e0e 100644
--- a/drivers/media/video/cx18/cx18-av-core.h
+++ b/drivers/media/video/cx18/cx18-av-core.h
@@ -328,11 +328,6 @@ static inline struct cx18_av_state *to_cx18_av_state(struct v4l2_subdev *sd)
328 return container_of(sd, struct cx18_av_state, sd); 328 return container_of(sd, struct cx18_av_state, sd);
329} 329}
330 330
331enum cx18_av_subdev_init_arg {
332 CX18_AV_INIT_NORMAL = 0,
333 CX18_AV_INIT_PLLS = 1,
334};
335
336/* ----------------------------------------------------------------------- */ 331/* ----------------------------------------------------------------------- */
337/* cx18_av-core.c */ 332/* cx18_av-core.c */
338int cx18_av_write(struct cx18 *cx, u16 addr, u8 value); 333int cx18_av_write(struct cx18 *cx, u16 addr, u8 value);
diff --git a/drivers/media/video/cx18/cx18-driver.c b/drivers/media/video/cx18/cx18-driver.c
index 210c68aaae00..49b1c3d7b1a8 100644
--- a/drivers/media/video/cx18/cx18-driver.c
+++ b/drivers/media/video/cx18/cx18-driver.c
@@ -810,7 +810,7 @@ static int __devinit cx18_probe(struct pci_dev *pci_dev,
810 CX18_ERR("Could not register A/V decoder subdevice\n"); 810 CX18_ERR("Could not register A/V decoder subdevice\n");
811 goto free_map; 811 goto free_map;
812 } 812 }
813 cx18_call_hw(cx, CX18_HW_418_AV, core, init, (u32) CX18_AV_INIT_PLLS); 813 cx18_call_hw(cx, CX18_HW_418_AV, core, init, 0);
814 814
815 /* Initialize GPIO Reset Controller to do chip resets during i2c init */ 815 /* Initialize GPIO Reset Controller to do chip resets during i2c init */
816 if (cx->card->hw_all & CX18_HW_GPIO_RESET_CTRL) { 816 if (cx->card->hw_all & CX18_HW_GPIO_RESET_CTRL) {
@@ -1028,7 +1028,7 @@ int cx18_init_on_first_open(struct cx18 *cx)
1028 cx18_vapi(cx, CX18_APU_STOP, 1, CX18_APU_ENCODING_METHOD_MPEG); 1028 cx18_vapi(cx, CX18_APU_STOP, 1, CX18_APU_ENCODING_METHOD_MPEG);
1029 1029
1030 /* Init the A/V decoder, if it hasn't been already */ 1030 /* Init the A/V decoder, if it hasn't been already */
1031 v4l2_subdev_call(cx->sd_av, core, init, (u32) CX18_AV_INIT_NORMAL); 1031 v4l2_subdev_call(cx->sd_av, core, load_fw);
1032 1032
1033 vf.tuner = 0; 1033 vf.tuner = 0;
1034 vf.type = V4L2_TUNER_ANALOG_TV; 1034 vf.type = V4L2_TUNER_ANALOG_TV;
diff --git a/drivers/media/video/cx18/cx18-fileops.c b/drivers/media/video/cx18/cx18-fileops.c
index 4d7d6d5a7f86..b3889c0b2697 100644
--- a/drivers/media/video/cx18/cx18-fileops.c
+++ b/drivers/media/video/cx18/cx18-fileops.c
@@ -608,7 +608,7 @@ int cx18_v4l2_close(struct file *filp)
608 /* Mark that the radio is no longer in use */ 608 /* Mark that the radio is no longer in use */
609 clear_bit(CX18_F_I_RADIO_USER, &cx->i_flags); 609 clear_bit(CX18_F_I_RADIO_USER, &cx->i_flags);
610 /* Switch tuner to TV */ 610 /* Switch tuner to TV */
611 cx18_call_all(cx, tuner, s_std, cx->std); 611 cx18_call_all(cx, core, s_std, cx->std);
612 /* Select correct audio input (i.e. TV tuner or Line in) */ 612 /* Select correct audio input (i.e. TV tuner or Line in) */
613 cx18_audio_set_io(cx); 613 cx18_audio_set_io(cx);
614 if (atomic_read(&cx->ana_capturing) > 0) { 614 if (atomic_read(&cx->ana_capturing) > 0) {
diff --git a/drivers/media/video/cx18/cx18-gpio.c b/drivers/media/video/cx18/cx18-gpio.c
index 5518d1424f8f..86a204b5448e 100644
--- a/drivers/media/video/cx18/cx18-gpio.c
+++ b/drivers/media/video/cx18/cx18-gpio.c
@@ -156,12 +156,12 @@ static int gpiomux_s_std(struct v4l2_subdev *sd, v4l2_std_id norm)
156} 156}
157 157
158static int gpiomux_s_audio_routing(struct v4l2_subdev *sd, 158static int gpiomux_s_audio_routing(struct v4l2_subdev *sd,
159 const struct v4l2_routing *route) 159 u32 input, u32 output, u32 config)
160{ 160{
161 struct cx18 *cx = v4l2_get_subdevdata(sd); 161 struct cx18 *cx = v4l2_get_subdevdata(sd);
162 u32 data; 162 u32 data;
163 163
164 switch (route->input) { 164 switch (input) {
165 case 0: 165 case 0:
166 data = cx->card->gpio_audio_input.tuner; 166 data = cx->card->gpio_audio_input.tuner;
167 break; 167 break;
@@ -180,10 +180,10 @@ static int gpiomux_s_audio_routing(struct v4l2_subdev *sd,
180 180
181static const struct v4l2_subdev_core_ops gpiomux_core_ops = { 181static const struct v4l2_subdev_core_ops gpiomux_core_ops = {
182 .log_status = gpiomux_log_status, 182 .log_status = gpiomux_log_status,
183 .s_std = gpiomux_s_std,
183}; 184};
184 185
185static const struct v4l2_subdev_tuner_ops gpiomux_tuner_ops = { 186static const struct v4l2_subdev_tuner_ops gpiomux_tuner_ops = {
186 .s_std = gpiomux_s_std,
187 .s_radio = gpiomux_s_radio, 187 .s_radio = gpiomux_s_radio,
188}; 188};
189 189
diff --git a/drivers/media/video/cx18/cx18-i2c.c b/drivers/media/video/cx18/cx18-i2c.c
index d092643faf46..b9b7064a2be8 100644
--- a/drivers/media/video/cx18/cx18-i2c.c
+++ b/drivers/media/video/cx18/cx18-i2c.c
@@ -100,16 +100,16 @@ int cx18_i2c_register(struct cx18 *cx, unsigned idx)
100 100
101 if (hw == CX18_HW_TUNER) { 101 if (hw == CX18_HW_TUNER) {
102 /* special tuner group handling */ 102 /* special tuner group handling */
103 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, 103 sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
104 cx->card_i2c->radio); 104 adap, mod, type, cx->card_i2c->radio);
105 if (sd != NULL) 105 if (sd != NULL)
106 sd->grp_id = hw; 106 sd->grp_id = hw;
107 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, 107 sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
108 cx->card_i2c->demod); 108 adap, mod, type, cx->card_i2c->demod);
109 if (sd != NULL) 109 if (sd != NULL)
110 sd->grp_id = hw; 110 sd->grp_id = hw;
111 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, 111 sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
112 cx->card_i2c->tv); 112 adap, mod, type, cx->card_i2c->tv);
113 if (sd != NULL) 113 if (sd != NULL)
114 sd->grp_id = hw; 114 sd->grp_id = hw;
115 return sd != NULL ? 0 : -1; 115 return sd != NULL ? 0 : -1;
@@ -120,7 +120,7 @@ int cx18_i2c_register(struct cx18 *cx, unsigned idx)
120 return -1; 120 return -1;
121 121
122 /* It's an I2C device other than an analog tuner */ 122 /* It's an I2C device other than an analog tuner */
123 sd = v4l2_i2c_new_subdev(adap, mod, type, hw_addrs[idx]); 123 sd = v4l2_i2c_new_subdev(&cx->v4l2_dev, adap, mod, type, hw_addrs[idx]);
124 if (sd != NULL) 124 if (sd != NULL)
125 sd->grp_id = hw; 125 sd->grp_id = hw;
126 return sd != NULL ? 0 : -1; 126 return sd != NULL ? 0 : -1;
diff --git a/drivers/media/video/cx18/cx18-ioctl.c b/drivers/media/video/cx18/cx18-ioctl.c
index e4c9e3d8bacd..d7b1921e6666 100644
--- a/drivers/media/video/cx18/cx18-ioctl.c
+++ b/drivers/media/video/cx18/cx18-ioctl.c
@@ -705,7 +705,7 @@ int cx18_s_std(struct file *file, void *fh, v4l2_std_id *std)
705 (unsigned long long) cx->std); 705 (unsigned long long) cx->std);
706 706
707 /* Tuner */ 707 /* Tuner */
708 cx18_call_all(cx, tuner, s_std, cx->std); 708 cx18_call_all(cx, core, s_std, cx->std);
709 return 0; 709 return 0;
710} 710}
711 711
@@ -926,16 +926,6 @@ static long cx18_default(struct file *file, void *fh, int cmd, void *arg)
926 struct cx18 *cx = ((struct cx18_open_id *)fh)->cx; 926 struct cx18 *cx = ((struct cx18_open_id *)fh)->cx;
927 927
928 switch (cmd) { 928 switch (cmd) {
929 case VIDIOC_INT_S_AUDIO_ROUTING: {
930 struct v4l2_routing *route = arg;
931
932 CX18_DEBUG_IOCTL("VIDIOC_INT_S_AUDIO_ROUTING(%d, %d)\n",
933 route->input, route->output);
934 cx18_call_hw(cx, cx->card->hw_audio_ctrl, audio, s_routing,
935 route);
936 break;
937 }
938
939 case VIDIOC_INT_RESET: { 929 case VIDIOC_INT_RESET: {
940 u32 val = *(u32 *)arg; 930 u32 val = *(u32 *)arg;
941 931
diff --git a/drivers/media/video/cx18/cx18-video.c b/drivers/media/video/cx18/cx18-video.c
index 6fdadedf17a8..6dc84aac8f44 100644
--- a/drivers/media/video/cx18/cx18-video.c
+++ b/drivers/media/video/cx18/cx18-video.c
@@ -25,20 +25,8 @@
25 25
26void cx18_video_set_io(struct cx18 *cx) 26void cx18_video_set_io(struct cx18 *cx)
27{ 27{
28 struct v4l2_routing route;
29 int inp = cx->active_input; 28 int inp = cx->active_input;
30 u32 type;
31 29
32 route.input = cx->card->video_inputs[inp].video_input; 30 v4l2_subdev_call(cx->sd_av, video, s_routing,
33 route.output = 0; 31 cx->card->video_inputs[inp].video_input, 0, 0);
34 v4l2_subdev_call(cx->sd_av, video, s_routing, &route);
35
36 type = cx->card->video_inputs[inp].video_type;
37
38 if (type == CX18_CARD_INPUT_VID_TUNER)
39 route.input = 0; /* Tuner */
40 else if (type < CX18_CARD_INPUT_COMPOSITE1)
41 route.input = 2; /* S-Video */
42 else
43 route.input = 1; /* Composite */
44} 32}
diff --git a/drivers/media/video/cx231xx/Kconfig b/drivers/media/video/cx231xx/Kconfig
new file mode 100644
index 000000000000..91156546a07a
--- /dev/null
+++ b/drivers/media/video/cx231xx/Kconfig
@@ -0,0 +1,35 @@
1config VIDEO_CX231XX
2 tristate "Conexant cx231xx USB video capture support"
3 depends on VIDEO_DEV && I2C && INPUT
4 select VIDEO_TUNER
5 select VIDEO_TVEEPROM
6 select VIDEO_IR
7 select VIDEOBUF_VMALLOC
8 select VIDEO_CX25840
9 select VIDEO_CX231XX_ALSA
10
11 ---help---
12 This is a video4linux driver for Conexant 231xx USB based TV cards.
13
14 To compile this driver as a module, choose M here: the
15 module will be called cx231xx
16
17config VIDEO_CX231XX_ALSA
18 tristate "Conexant Cx231xx ALSA audio module"
19 depends on VIDEO_CX231XX && SND
20 select SND_PCM
21
22 ---help---
23 This is an ALSA driver for Cx231xx USB based TV cards.
24
25 To compile this driver as a module, choose M here: the
26 module will be called cx231xx-alsa
27
28config VIDEO_CX231XX_DVB
29 tristate "DVB/ATSC Support for Cx231xx based TV cards"
30 depends on VIDEO_CX231XX && DVB_CORE
31 select VIDEOBUF_DVB
32 select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE
33 ---help---
34 This adds support for DVB cards based on the
35 Conexant cx231xx chips.
diff --git a/drivers/media/video/cx231xx/Makefile b/drivers/media/video/cx231xx/Makefile
new file mode 100644
index 000000000000..755dd0ce65ff
--- /dev/null
+++ b/drivers/media/video/cx231xx/Makefile
@@ -0,0 +1,14 @@
1cx231xx-objs := cx231xx-video.o cx231xx-i2c.o cx231xx-cards.o cx231xx-core.o \
2 cx231xx-avcore.o cx231xx-pcb-cfg.o cx231xx-vbi.o
3
4cx231xx-alsa-objs := cx231xx-audio.o
5
6obj-$(CONFIG_VIDEO_CX231XX) += cx231xx.o
7obj-$(CONFIG_VIDEO_CX231XX_ALSA) += cx231xx-alsa.o
8obj-$(CONFIG_VIDEO_CX231XX_DVB) += cx231xx-dvb.o
9
10EXTRA_CFLAGS += -Idrivers/media/video
11EXTRA_CFLAGS += -Idrivers/media/common/tuners
12EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
13EXTRA_CFLAGS += -Idrivers/media/dvb/frontends
14
diff --git a/drivers/media/video/cx231xx/cx231xx-audio.c b/drivers/media/video/cx231xx/cx231xx-audio.c
new file mode 100644
index 000000000000..7793d60966db
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-audio.c
@@ -0,0 +1,586 @@
1/*
2 * Conexant Cx231xx audio extension
3 *
4 * Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 * Based on em28xx driver
6 *
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/kernel.h>
24#include <linux/usb.h>
25#include <linux/init.h>
26#include <linux/sound.h>
27#include <linux/spinlock.h>
28#include <linux/soundcard.h>
29#include <linux/slab.h>
30#include <linux/vmalloc.h>
31#include <linux/proc_fs.h>
32#include <linux/module.h>
33#include <sound/core.h>
34#include <sound/pcm.h>
35#include <sound/pcm_params.h>
36#include <sound/info.h>
37#include <sound/initval.h>
38#include <sound/control.h>
39#include <media/v4l2-common.h>
40#include "cx231xx.h"
41
42static int debug;
43module_param(debug, int, 0644);
44MODULE_PARM_DESC(debug, "activates debug info");
45
46#define dprintk(fmt, arg...) do { \
47 if (debug) \
48 printk(KERN_INFO "cx231xx-audio %s: " fmt, \
49 __func__, ##arg); \
50 } while (0)
51
52static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
53
54static int cx231xx_isoc_audio_deinit(struct cx231xx *dev)
55{
56 int i;
57
58 dprintk("Stopping isoc\n");
59
60 for (i = 0; i < CX231XX_AUDIO_BUFS; i++) {
61 if (dev->adev.urb[i]) {
62 if (!irqs_disabled())
63 usb_kill_urb(dev->adev.urb[i]);
64 else
65 usb_unlink_urb(dev->adev.urb[i]);
66
67 usb_free_urb(dev->adev.urb[i]);
68 dev->adev.urb[i] = NULL;
69
70 kfree(dev->adev.transfer_buffer[i]);
71 dev->adev.transfer_buffer[i] = NULL;
72 }
73 }
74
75 return 0;
76}
77
78static void cx231xx_audio_isocirq(struct urb *urb)
79{
80 struct cx231xx *dev = urb->context;
81 int i;
82 unsigned int oldptr;
83 int period_elapsed = 0;
84 int status;
85 unsigned char *cp;
86 unsigned int stride;
87 struct snd_pcm_substream *substream;
88 struct snd_pcm_runtime *runtime;
89
90 switch (urb->status) {
91 case 0: /* success */
92 case -ETIMEDOUT: /* NAK */
93 break;
94 case -ECONNRESET: /* kill */
95 case -ENOENT:
96 case -ESHUTDOWN:
97 return;
98 default: /* error */
99 dprintk("urb completition error %d.\n", urb->status);
100 break;
101 }
102
103 if (dev->adev.capture_pcm_substream) {
104 substream = dev->adev.capture_pcm_substream;
105 runtime = substream->runtime;
106 stride = runtime->frame_bits >> 3;
107
108 for (i = 0; i < urb->number_of_packets; i++) {
109 int length = urb->iso_frame_desc[i].actual_length /
110 stride;
111 cp = (unsigned char *)urb->transfer_buffer +
112 urb->iso_frame_desc[i].offset;
113
114 if (!length)
115 continue;
116
117 oldptr = dev->adev.hwptr_done_capture;
118 if (oldptr + length >= runtime->buffer_size) {
119 unsigned int cnt;
120
121 cnt = runtime->buffer_size - oldptr;
122 memcpy(runtime->dma_area + oldptr * stride, cp,
123 cnt * stride);
124 memcpy(runtime->dma_area, cp + cnt * stride,
125 length * stride - cnt * stride);
126 } else {
127 memcpy(runtime->dma_area + oldptr * stride, cp,
128 length * stride);
129 }
130
131 snd_pcm_stream_lock(substream);
132
133 dev->adev.hwptr_done_capture += length;
134 if (dev->adev.hwptr_done_capture >=
135 runtime->buffer_size)
136 dev->adev.hwptr_done_capture -=
137 runtime->buffer_size;
138
139 dev->adev.capture_transfer_done += length;
140 if (dev->adev.capture_transfer_done >=
141 runtime->period_size) {
142 dev->adev.capture_transfer_done -=
143 runtime->period_size;
144 period_elapsed = 1;
145 }
146 snd_pcm_stream_unlock(substream);
147 }
148 if (period_elapsed)
149 snd_pcm_period_elapsed(substream);
150 }
151 urb->status = 0;
152
153 status = usb_submit_urb(urb, GFP_ATOMIC);
154 if (status < 0) {
155 cx231xx_errdev("resubmit of audio urb failed (error=%i)\n",
156 status);
157 }
158 return;
159}
160
161static int cx231xx_init_audio_isoc(struct cx231xx *dev)
162{
163 int i, errCode;
164 int sb_size;
165
166 cx231xx_info("%s: Starting AUDIO transfers\n", __func__);
167
168 sb_size = CX231XX_NUM_AUDIO_PACKETS * dev->adev.max_pkt_size;
169
170 for (i = 0; i < CX231XX_AUDIO_BUFS; i++) {
171 struct urb *urb;
172 int j, k;
173
174 dev->adev.transfer_buffer[i] = kmalloc(sb_size, GFP_ATOMIC);
175 if (!dev->adev.transfer_buffer[i])
176 return -ENOMEM;
177
178 memset(dev->adev.transfer_buffer[i], 0x80, sb_size);
179 urb = usb_alloc_urb(CX231XX_NUM_AUDIO_PACKETS, GFP_ATOMIC);
180 if (!urb) {
181 cx231xx_errdev("usb_alloc_urb failed!\n");
182 for (j = 0; j < i; j++) {
183 usb_free_urb(dev->adev.urb[j]);
184 kfree(dev->adev.transfer_buffer[j]);
185 }
186 return -ENOMEM;
187 }
188
189 urb->dev = dev->udev;
190 urb->context = dev;
191 urb->pipe = usb_rcvisocpipe(dev->udev,
192 dev->adev.end_point_addr);
193 urb->transfer_flags = URB_ISO_ASAP;
194 urb->transfer_buffer = dev->adev.transfer_buffer[i];
195 urb->interval = 1;
196 urb->complete = cx231xx_audio_isocirq;
197 urb->number_of_packets = CX231XX_NUM_AUDIO_PACKETS;
198 urb->transfer_buffer_length = sb_size;
199
200 for (j = k = 0; j < CX231XX_NUM_AUDIO_PACKETS;
201 j++, k += dev->adev.max_pkt_size) {
202 urb->iso_frame_desc[j].offset = k;
203 urb->iso_frame_desc[j].length = dev->adev.max_pkt_size;
204 }
205 dev->adev.urb[i] = urb;
206 }
207
208 for (i = 0; i < CX231XX_AUDIO_BUFS; i++) {
209 errCode = usb_submit_urb(dev->adev.urb[i], GFP_ATOMIC);
210 if (errCode < 0) {
211 cx231xx_isoc_audio_deinit(dev);
212 return errCode;
213 }
214 }
215
216 return errCode;
217}
218
219static int cx231xx_cmd(struct cx231xx *dev, int cmd, int arg)
220{
221 dprintk("%s transfer\n", (dev->adev.capture_stream == STREAM_ON) ?
222 "stop" : "start");
223
224 switch (cmd) {
225 case CX231XX_CAPTURE_STREAM_EN:
226 if (dev->adev.capture_stream == STREAM_OFF && arg == 1) {
227 dev->adev.capture_stream = STREAM_ON;
228 cx231xx_init_audio_isoc(dev);
229 } else if (dev->adev.capture_stream == STREAM_ON && arg == 0) {
230 dev->adev.capture_stream = STREAM_OFF;
231 cx231xx_isoc_audio_deinit(dev);
232 } else {
233 cx231xx_errdev("An underrun very likely occurred. "
234 "Ignoring it.\n");
235 }
236 return 0;
237 default:
238 return -EINVAL;
239 }
240}
241
242static int snd_pcm_alloc_vmalloc_buffer(struct snd_pcm_substream *subs,
243 size_t size)
244{
245 struct snd_pcm_runtime *runtime = subs->runtime;
246
247 dprintk("Allocating vbuffer\n");
248 if (runtime->dma_area) {
249 if (runtime->dma_bytes > size)
250 return 0;
251
252 vfree(runtime->dma_area);
253 }
254 runtime->dma_area = vmalloc(size);
255 if (!runtime->dma_area)
256 return -ENOMEM;
257
258 runtime->dma_bytes = size;
259
260 return 0;
261}
262
263static struct snd_pcm_hardware snd_cx231xx_hw_capture = {
264 .info = SNDRV_PCM_INFO_BLOCK_TRANSFER |
265 SNDRV_PCM_INFO_MMAP |
266 SNDRV_PCM_INFO_INTERLEAVED |
267 SNDRV_PCM_INFO_MMAP_VALID,
268
269 .formats = SNDRV_PCM_FMTBIT_S16_LE,
270
271 .rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_KNOT,
272
273 .rate_min = 48000,
274 .rate_max = 48000,
275 .channels_min = 2,
276 .channels_max = 2,
277 .buffer_bytes_max = 62720 * 8, /* just about the value in usbaudio.c */
278 .period_bytes_min = 64, /* 12544/2, */
279 .period_bytes_max = 12544,
280 .periods_min = 2,
281 .periods_max = 98, /* 12544, */
282};
283
284static int snd_cx231xx_capture_open(struct snd_pcm_substream *substream)
285{
286 struct cx231xx *dev = snd_pcm_substream_chip(substream);
287 struct snd_pcm_runtime *runtime = substream->runtime;
288 int ret = 0;
289
290 dprintk("opening device and trying to acquire exclusive lock\n");
291
292 if (!dev) {
293 cx231xx_errdev("BUG: cx231xx can't find device struct."
294 " Can't proceed with open\n");
295 return -ENODEV;
296 }
297
298 /* Sets volume, mute, etc */
299 dev->mute = 0;
300
301 /* set alternate setting for audio interface */
302 /* 1 - 48000 samples per sec */
303 ret = cx231xx_set_alt_setting(dev, INDEX_AUDIO, 1);
304 if (ret < 0) {
305 cx231xx_errdev("failed to set alternate setting !\n");
306
307 return ret;
308 }
309
310 /* inform hardware to start streaming */
311 ret = cx231xx_capture_start(dev, 1, Audio);
312
313 runtime->hw = snd_cx231xx_hw_capture;
314
315 mutex_lock(&dev->lock);
316 dev->adev.users++;
317 mutex_unlock(&dev->lock);
318
319 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
320 dev->adev.capture_pcm_substream = substream;
321 runtime->private_data = dev;
322
323 return 0;
324}
325
326static int snd_cx231xx_pcm_close(struct snd_pcm_substream *substream)
327{
328 int ret;
329 struct cx231xx *dev = snd_pcm_substream_chip(substream);
330
331 dprintk("closing device\n");
332
333 /* set alternate setting for audio interface */
334 /* 1 - 48000 samples per sec */
335 ret = cx231xx_set_alt_setting(dev, INDEX_AUDIO, 0);
336 if (ret < 0) {
337 cx231xx_errdev("failed to set alternate setting !\n");
338
339 return ret;
340 }
341
342 /* inform hardware to start streaming */
343 ret = cx231xx_capture_start(dev, 0, Audio);
344
345 dev->mute = 1;
346 mutex_lock(&dev->lock);
347 dev->adev.users--;
348 mutex_unlock(&dev->lock);
349
350 if (dev->adev.users == 0 && dev->adev.shutdown == 1) {
351 dprintk("audio users: %d\n", dev->adev.users);
352 dprintk("disabling audio stream!\n");
353 dev->adev.shutdown = 0;
354 dprintk("released lock\n");
355 cx231xx_cmd(dev, CX231XX_CAPTURE_STREAM_EN, 0);
356 }
357 return 0;
358}
359
360static int snd_cx231xx_hw_capture_params(struct snd_pcm_substream *substream,
361 struct snd_pcm_hw_params *hw_params)
362{
363 unsigned int channels, rate, format;
364 int ret;
365
366 dprintk("Setting capture parameters\n");
367
368 ret = snd_pcm_alloc_vmalloc_buffer(substream,
369 params_buffer_bytes(hw_params));
370 format = params_format(hw_params);
371 rate = params_rate(hw_params);
372 channels = params_channels(hw_params);
373
374 /* TODO: set up cx231xx audio chip to deliver the correct audio format,
375 current default is 48000hz multiplexed => 96000hz mono
376 which shouldn't matter since analogue TV only supports mono */
377 return 0;
378}
379
380static int snd_cx231xx_hw_capture_free(struct snd_pcm_substream *substream)
381{
382 struct cx231xx *dev = snd_pcm_substream_chip(substream);
383
384 dprintk("Stop capture, if needed\n");
385
386 if (dev->adev.capture_stream == STREAM_ON)
387 cx231xx_cmd(dev, CX231XX_CAPTURE_STREAM_EN, CX231XX_STOP_AUDIO);
388
389 return 0;
390}
391
392static int snd_cx231xx_prepare(struct snd_pcm_substream *substream)
393{
394 return 0;
395}
396
397static int snd_cx231xx_capture_trigger(struct snd_pcm_substream *substream,
398 int cmd)
399{
400 struct cx231xx *dev = snd_pcm_substream_chip(substream);
401 int retval;
402
403 dprintk("Should %s capture\n", (cmd == SNDRV_PCM_TRIGGER_START) ?
404 "start" : "stop");
405
406 spin_lock(&dev->adev.slock);
407 switch (cmd) {
408 case SNDRV_PCM_TRIGGER_START:
409 cx231xx_cmd(dev, CX231XX_CAPTURE_STREAM_EN,
410 CX231XX_START_AUDIO);
411 retval = 0;
412 break;
413 case SNDRV_PCM_TRIGGER_STOP:
414 cx231xx_cmd(dev, CX231XX_CAPTURE_STREAM_EN, CX231XX_STOP_AUDIO);
415 retval = 0;
416 break;
417 default:
418 retval = -EINVAL;
419 }
420
421 spin_unlock(&dev->adev.slock);
422 return retval;
423}
424
425static snd_pcm_uframes_t snd_cx231xx_capture_pointer(struct snd_pcm_substream
426 *substream)
427{
428 struct cx231xx *dev;
429 unsigned long flags;
430 snd_pcm_uframes_t hwptr_done;
431
432 dev = snd_pcm_substream_chip(substream);
433
434 spin_lock_irqsave(&dev->adev.slock, flags);
435 hwptr_done = dev->adev.hwptr_done_capture;
436 spin_unlock_irqrestore(&dev->adev.slock, flags);
437
438 return hwptr_done;
439}
440
441static struct page *snd_pcm_get_vmalloc_page(struct snd_pcm_substream *subs,
442 unsigned long offset)
443{
444 void *pageptr = subs->runtime->dma_area + offset;
445
446 return vmalloc_to_page(pageptr);
447}
448
449static struct snd_pcm_ops snd_cx231xx_pcm_capture = {
450 .open = snd_cx231xx_capture_open,
451 .close = snd_cx231xx_pcm_close,
452 .ioctl = snd_pcm_lib_ioctl,
453 .hw_params = snd_cx231xx_hw_capture_params,
454 .hw_free = snd_cx231xx_hw_capture_free,
455 .prepare = snd_cx231xx_prepare,
456 .trigger = snd_cx231xx_capture_trigger,
457 .pointer = snd_cx231xx_capture_pointer,
458 .page = snd_pcm_get_vmalloc_page,
459};
460
461static int cx231xx_audio_init(struct cx231xx *dev)
462{
463 struct cx231xx_audio *adev = &dev->adev;
464 struct snd_pcm *pcm;
465 struct snd_card *card;
466 static int devnr;
467 int err;
468 struct usb_interface *uif;
469 int i, isoc_pipe = 0;
470
471 if (dev->has_alsa_audio != 1) {
472 /* This device does not support the extension (in this case
473 the device is expecting the snd-usb-audio module or
474 doesn't have analog audio support at all) */
475 return 0;
476 }
477
478 cx231xx_info("cx231xx-audio.c: probing for cx231xx "
479 "non standard usbaudio\n");
480
481 err = snd_card_create(index[devnr], "Cx231xx Audio", THIS_MODULE,
482 0, &card);
483 if (err < 0)
484 return err;
485
486 spin_lock_init(&adev->slock);
487 err = snd_pcm_new(card, "Cx231xx Audio", 0, 0, 1, &pcm);
488 if (err < 0) {
489 snd_card_free(card);
490 return err;
491 }
492
493 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
494 &snd_cx231xx_pcm_capture);
495 pcm->info_flags = 0;
496 pcm->private_data = dev;
497 strcpy(pcm->name, "Conexant cx231xx Capture");
498 strcpy(card->driver, "Conexant cx231xx Audio");
499 strcpy(card->shortname, "Cx231xx Audio");
500 strcpy(card->longname, "Conexant cx231xx Audio");
501
502 err = snd_card_register(card);
503 if (err < 0) {
504 snd_card_free(card);
505 return err;
506 }
507 adev->sndcard = card;
508 adev->udev = dev->udev;
509
510 /* compute alternate max packet sizes for Audio */
511 uif =
512 dev->udev->actconfig->interface[dev->current_pcb_config.
513 hs_config_info[0].interface_info.
514 audio_index + 1];
515
516 adev->end_point_addr =
517 le16_to_cpu(uif->altsetting[0].endpoint[isoc_pipe].desc.
518 bEndpointAddress);
519
520 adev->num_alt = uif->num_altsetting;
521 cx231xx_info("EndPoint Addr 0x%x, Alternate settings: %i\n",
522 adev->end_point_addr, adev->num_alt);
523 adev->alt_max_pkt_size = kmalloc(32 * adev->num_alt, GFP_KERNEL);
524
525 if (adev->alt_max_pkt_size == NULL) {
526 cx231xx_errdev("out of memory!\n");
527 return -ENOMEM;
528 }
529
530 for (i = 0; i < adev->num_alt; i++) {
531 u16 tmp =
532 le16_to_cpu(uif->altsetting[i].endpoint[isoc_pipe].desc.
533 wMaxPacketSize);
534 adev->alt_max_pkt_size[i] =
535 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
536 cx231xx_info("Alternate setting %i, max size= %i\n", i,
537 adev->alt_max_pkt_size[i]);
538 }
539
540 return 0;
541}
542
543static int cx231xx_audio_fini(struct cx231xx *dev)
544{
545 if (dev == NULL)
546 return 0;
547
548 if (dev->has_alsa_audio != 1) {
549 /* This device does not support the extension (in this case
550 the device is expecting the snd-usb-audio module or
551 doesn't have analog audio support at all) */
552 return 0;
553 }
554
555 if (dev->adev.sndcard) {
556 snd_card_free(dev->adev.sndcard);
557 kfree(dev->adev.alt_max_pkt_size);
558 dev->adev.sndcard = NULL;
559 }
560
561 return 0;
562}
563
564static struct cx231xx_ops audio_ops = {
565 .id = CX231XX_AUDIO,
566 .name = "Cx231xx Audio Extension",
567 .init = cx231xx_audio_init,
568 .fini = cx231xx_audio_fini,
569};
570
571static int __init cx231xx_alsa_register(void)
572{
573 return cx231xx_register_extension(&audio_ops);
574}
575
576static void __exit cx231xx_alsa_unregister(void)
577{
578 cx231xx_unregister_extension(&audio_ops);
579}
580
581MODULE_LICENSE("GPL");
582MODULE_AUTHOR("Srinivasa Deevi <srinivasa.deevi@conexant.com>");
583MODULE_DESCRIPTION("Cx231xx Audio driver");
584
585module_init(cx231xx_alsa_register);
586module_exit(cx231xx_alsa_unregister);
diff --git a/drivers/media/video/cx231xx/cx231xx-avcore.c b/drivers/media/video/cx231xx/cx231xx-avcore.c
new file mode 100644
index 000000000000..1be3881be991
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-avcore.c
@@ -0,0 +1,2581 @@
1/*
2 cx231xx_avcore.c - driver for Conexant Cx23100/101/102
3 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6
7 This program contains the specific code to control the avdecoder chip and
8 other related usb control functions for cx231xx based chipset.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 */
24
25#include <linux/init.h>
26#include <linux/list.h>
27#include <linux/module.h>
28#include <linux/kernel.h>
29#include <linux/bitmap.h>
30#include <linux/usb.h>
31#include <linux/i2c.h>
32#include <linux/version.h>
33#include <linux/mm.h>
34#include <linux/mutex.h>
35
36#include <media/v4l2-common.h>
37#include <media/v4l2-ioctl.h>
38#include <media/v4l2-chip-ident.h>
39
40#include "cx231xx.h"
41
42/******************************************************************************
43 -: BLOCK ARRANGEMENT :-
44 I2S block ----------------------|
45 [I2S audio] |
46 |
47 Analog Front End --> Direct IF -|-> Cx25840 --> Audio
48 [video & audio] | [Audio]
49 |
50 |-> Cx25840 --> Video
51 [Video]
52
53*******************************************************************************/
54
55/******************************************************************************
56 * A F E - B L O C K C O N T R O L functions *
57 * [ANALOG FRONT END] *
58 ******************************************************************************/
59static int afe_write_byte(struct cx231xx *dev, u16 saddr, u8 data)
60{
61 return cx231xx_write_i2c_data(dev, AFE_DEVICE_ADDRESS,
62 saddr, 2, data, 1);
63}
64
65static int afe_read_byte(struct cx231xx *dev, u16 saddr, u8 *data)
66{
67 int status;
68 u32 temp = 0;
69
70 status = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
71 saddr, 2, &temp, 1);
72 *data = (u8) temp;
73 return status;
74}
75
76int cx231xx_afe_init_super_block(struct cx231xx *dev, u32 ref_count)
77{
78 int status = 0;
79 u8 temp = 0;
80 u8 afe_power_status = 0;
81 int i = 0;
82
83 /* super block initialize */
84 temp = (u8) (ref_count & 0xff);
85 status = afe_write_byte(dev, SUP_BLK_TUNE2, temp);
86 if (status < 0)
87 return status;
88
89 status = afe_read_byte(dev, SUP_BLK_TUNE2, &afe_power_status);
90 if (status < 0)
91 return status;
92
93 temp = (u8) ((ref_count & 0x300) >> 8);
94 temp |= 0x40;
95 status = afe_write_byte(dev, SUP_BLK_TUNE1, temp);
96 if (status < 0)
97 return status;
98
99 status = afe_write_byte(dev, SUP_BLK_PLL2, 0x0f);
100 if (status < 0)
101 return status;
102
103 /* enable pll */
104 while (afe_power_status != 0x18) {
105 status = afe_write_byte(dev, SUP_BLK_PWRDN, 0x18);
106 if (status < 0) {
107 cx231xx_info(
108 ": Init Super Block failed in send cmd\n");
109 break;
110 }
111
112 status = afe_read_byte(dev, SUP_BLK_PWRDN, &afe_power_status);
113 afe_power_status &= 0xff;
114 if (status < 0) {
115 cx231xx_info(
116 ": Init Super Block failed in receive cmd\n");
117 break;
118 }
119 i++;
120 if (i == 10) {
121 cx231xx_info(
122 ": Init Super Block force break in loop !!!!\n");
123 status = -1;
124 break;
125 }
126 }
127
128 if (status < 0)
129 return status;
130
131 /* start tuning filter */
132 status = afe_write_byte(dev, SUP_BLK_TUNE3, 0x40);
133 if (status < 0)
134 return status;
135
136 msleep(5);
137
138 /* exit tuning */
139 status = afe_write_byte(dev, SUP_BLK_TUNE3, 0x00);
140
141 return status;
142}
143
144int cx231xx_afe_init_channels(struct cx231xx *dev)
145{
146 int status = 0;
147
148 /* power up all 3 channels, clear pd_buffer */
149 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, 0x00);
150 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, 0x00);
151 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, 0x00);
152
153 /* Enable quantizer calibration */
154 status = afe_write_byte(dev, ADC_COM_QUANT, 0x02);
155
156 /* channel initialize, force modulator (fb) reset */
157 status = afe_write_byte(dev, ADC_FB_FRCRST_CH1, 0x17);
158 status = afe_write_byte(dev, ADC_FB_FRCRST_CH2, 0x17);
159 status = afe_write_byte(dev, ADC_FB_FRCRST_CH3, 0x17);
160
161 /* start quantilizer calibration */
162 status = afe_write_byte(dev, ADC_CAL_ATEST_CH1, 0x10);
163 status = afe_write_byte(dev, ADC_CAL_ATEST_CH2, 0x10);
164 status = afe_write_byte(dev, ADC_CAL_ATEST_CH3, 0x10);
165 msleep(5);
166
167 /* exit modulator (fb) reset */
168 status = afe_write_byte(dev, ADC_FB_FRCRST_CH1, 0x07);
169 status = afe_write_byte(dev, ADC_FB_FRCRST_CH2, 0x07);
170 status = afe_write_byte(dev, ADC_FB_FRCRST_CH3, 0x07);
171
172 /* enable the pre_clamp in each channel for single-ended input */
173 status = afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH1, 0xf0);
174 status = afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH2, 0xf0);
175 status = afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH3, 0xf0);
176
177 /* use diode instead of resistor, so set term_en to 0, res_en to 0 */
178 status = cx231xx_reg_mask_write(dev, AFE_DEVICE_ADDRESS, 8,
179 ADC_QGAIN_RES_TRM_CH1, 3, 7, 0x00);
180 status = cx231xx_reg_mask_write(dev, AFE_DEVICE_ADDRESS, 8,
181 ADC_QGAIN_RES_TRM_CH2, 3, 7, 0x00);
182 status = cx231xx_reg_mask_write(dev, AFE_DEVICE_ADDRESS, 8,
183 ADC_QGAIN_RES_TRM_CH3, 3, 7, 0x00);
184
185 /* dynamic element matching off */
186 status = afe_write_byte(dev, ADC_DCSERVO_DEM_CH1, 0x03);
187 status = afe_write_byte(dev, ADC_DCSERVO_DEM_CH2, 0x03);
188 status = afe_write_byte(dev, ADC_DCSERVO_DEM_CH3, 0x03);
189
190 return status;
191}
192
193int cx231xx_afe_setup_AFE_for_baseband(struct cx231xx *dev)
194{
195 u8 c_value = 0;
196 int status = 0;
197
198 status = afe_read_byte(dev, ADC_PWRDN_CLAMP_CH2, &c_value);
199 c_value &= (~(0x50));
200 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, c_value);
201
202 return status;
203}
204
205/*
206 The Analog Front End in Cx231xx has 3 channels. These
207 channels are used to share between different inputs
208 like tuner, s-video and composite inputs.
209
210 channel 1 ----- pin 1 to pin4(in reg is 1-4)
211 channel 2 ----- pin 5 to pin8(in reg is 5-8)
212 channel 3 ----- pin 9 to pin 12(in reg is 9-11)
213*/
214int cx231xx_afe_set_input_mux(struct cx231xx *dev, u32 input_mux)
215{
216 u8 ch1_setting = (u8) input_mux;
217 u8 ch2_setting = (u8) (input_mux >> 8);
218 u8 ch3_setting = (u8) (input_mux >> 16);
219 int status = 0;
220 u8 value = 0;
221
222 if (ch1_setting != 0) {
223 status = afe_read_byte(dev, ADC_INPUT_CH1, &value);
224 value &= (!INPUT_SEL_MASK);
225 value |= (ch1_setting - 1) << 4;
226 value &= 0xff;
227 status = afe_write_byte(dev, ADC_INPUT_CH1, value);
228 }
229
230 if (ch2_setting != 0) {
231 status = afe_read_byte(dev, ADC_INPUT_CH2, &value);
232 value &= (!INPUT_SEL_MASK);
233 value |= (ch2_setting - 1) << 4;
234 value &= 0xff;
235 status = afe_write_byte(dev, ADC_INPUT_CH2, value);
236 }
237
238 /* For ch3_setting, the value to put in the register is
239 7 less than the input number */
240 if (ch3_setting != 0) {
241 status = afe_read_byte(dev, ADC_INPUT_CH3, &value);
242 value &= (!INPUT_SEL_MASK);
243 value |= (ch3_setting - 1) << 4;
244 value &= 0xff;
245 status = afe_write_byte(dev, ADC_INPUT_CH3, value);
246 }
247
248 return status;
249}
250
251int cx231xx_afe_set_mode(struct cx231xx *dev, enum AFE_MODE mode)
252{
253 int status = 0;
254
255 /*
256 * FIXME: We need to implement the AFE code for LOW IF and for HI IF.
257 * Currently, only baseband works.
258 */
259
260 switch (mode) {
261 case AFE_MODE_LOW_IF:
262 /* SetupAFEforLowIF(); */
263 break;
264 case AFE_MODE_BASEBAND:
265 status = cx231xx_afe_setup_AFE_for_baseband(dev);
266 break;
267 case AFE_MODE_EU_HI_IF:
268 /* SetupAFEforEuHiIF(); */
269 break;
270 case AFE_MODE_US_HI_IF:
271 /* SetupAFEforUsHiIF(); */
272 break;
273 case AFE_MODE_JAPAN_HI_IF:
274 /* SetupAFEforJapanHiIF(); */
275 break;
276 }
277
278 if ((mode != dev->afe_mode) &&
279 (dev->video_input == CX231XX_VMUX_TELEVISION))
280 status = cx231xx_afe_adjust_ref_count(dev,
281 CX231XX_VMUX_TELEVISION);
282
283 dev->afe_mode = mode;
284
285 return status;
286}
287
288int cx231xx_afe_update_power_control(struct cx231xx *dev,
289 enum AV_MODE avmode)
290{
291 u8 afe_power_status = 0;
292 int status = 0;
293
294 switch (dev->model) {
295 case CX231XX_BOARD_CNXT_RDE_250:
296 case CX231XX_BOARD_CNXT_RDU_250:
297 if (avmode == POLARIS_AVMODE_ANALOGT_TV) {
298 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS |
299 FLD_PWRDN_ENABLE_PLL)) {
300 status = afe_write_byte(dev, SUP_BLK_PWRDN,
301 FLD_PWRDN_TUNING_BIAS |
302 FLD_PWRDN_ENABLE_PLL);
303 status |= afe_read_byte(dev, SUP_BLK_PWRDN,
304 &afe_power_status);
305 if (status < 0)
306 break;
307 }
308
309 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1,
310 0x00);
311 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2,
312 0x00);
313 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3,
314 0x00);
315 } else if (avmode == POLARIS_AVMODE_DIGITAL) {
316 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1,
317 0x70);
318 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2,
319 0x70);
320 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3,
321 0x70);
322
323 status |= afe_read_byte(dev, SUP_BLK_PWRDN,
324 &afe_power_status);
325 afe_power_status |= FLD_PWRDN_PD_BANDGAP |
326 FLD_PWRDN_PD_BIAS |
327 FLD_PWRDN_PD_TUNECK;
328 status |= afe_write_byte(dev, SUP_BLK_PWRDN,
329 afe_power_status);
330 } else if (avmode == POLARIS_AVMODE_ENXTERNAL_AV) {
331 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS |
332 FLD_PWRDN_ENABLE_PLL)) {
333 status = afe_write_byte(dev, SUP_BLK_PWRDN,
334 FLD_PWRDN_TUNING_BIAS |
335 FLD_PWRDN_ENABLE_PLL);
336 status |= afe_read_byte(dev, SUP_BLK_PWRDN,
337 &afe_power_status);
338 if (status < 0)
339 break;
340 }
341
342 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1,
343 0x00);
344 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2,
345 0x00);
346 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3,
347 0x00);
348 } else {
349 cx231xx_info("Invalid AV mode input\n");
350 status = -1;
351 }
352 break;
353 default:
354 if (avmode == POLARIS_AVMODE_ANALOGT_TV) {
355 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS |
356 FLD_PWRDN_ENABLE_PLL)) {
357 status = afe_write_byte(dev, SUP_BLK_PWRDN,
358 FLD_PWRDN_TUNING_BIAS |
359 FLD_PWRDN_ENABLE_PLL);
360 status |= afe_read_byte(dev, SUP_BLK_PWRDN,
361 &afe_power_status);
362 if (status < 0)
363 break;
364 }
365
366 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1,
367 0x40);
368 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2,
369 0x40);
370 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3,
371 0x00);
372 } else if (avmode == POLARIS_AVMODE_DIGITAL) {
373 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1,
374 0x70);
375 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2,
376 0x70);
377 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3,
378 0x70);
379
380 status |= afe_read_byte(dev, SUP_BLK_PWRDN,
381 &afe_power_status);
382 afe_power_status |= FLD_PWRDN_PD_BANDGAP |
383 FLD_PWRDN_PD_BIAS |
384 FLD_PWRDN_PD_TUNECK;
385 status |= afe_write_byte(dev, SUP_BLK_PWRDN,
386 afe_power_status);
387 } else if (avmode == POLARIS_AVMODE_ENXTERNAL_AV) {
388 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS |
389 FLD_PWRDN_ENABLE_PLL)) {
390 status = afe_write_byte(dev, SUP_BLK_PWRDN,
391 FLD_PWRDN_TUNING_BIAS |
392 FLD_PWRDN_ENABLE_PLL);
393 status |= afe_read_byte(dev, SUP_BLK_PWRDN,
394 &afe_power_status);
395 if (status < 0)
396 break;
397 }
398
399 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1,
400 0x00);
401 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2,
402 0x00);
403 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3,
404 0x40);
405 } else {
406 cx231xx_info("Invalid AV mode input\n");
407 status = -1;
408 }
409 } /* switch */
410
411 return status;
412}
413
414int cx231xx_afe_adjust_ref_count(struct cx231xx *dev, u32 video_input)
415{
416 u8 input_mode = 0;
417 u8 ntf_mode = 0;
418 int status = 0;
419
420 dev->video_input = video_input;
421
422 if (video_input == CX231XX_VMUX_TELEVISION) {
423 status = afe_read_byte(dev, ADC_INPUT_CH3, &input_mode);
424 status = afe_read_byte(dev, ADC_NTF_PRECLMP_EN_CH3,
425 &ntf_mode);
426 } else {
427 status = afe_read_byte(dev, ADC_INPUT_CH1, &input_mode);
428 status = afe_read_byte(dev, ADC_NTF_PRECLMP_EN_CH1,
429 &ntf_mode);
430 }
431
432 input_mode = (ntf_mode & 0x3) | ((input_mode & 0x6) << 1);
433
434 switch (input_mode) {
435 case SINGLE_ENDED:
436 dev->afe_ref_count = 0x23C;
437 break;
438 case LOW_IF:
439 dev->afe_ref_count = 0x24C;
440 break;
441 case EU_IF:
442 dev->afe_ref_count = 0x258;
443 break;
444 case US_IF:
445 dev->afe_ref_count = 0x260;
446 break;
447 default:
448 break;
449 }
450
451 status = cx231xx_afe_init_super_block(dev, dev->afe_ref_count);
452
453 return status;
454}
455
456/******************************************************************************
457 * V I D E O / A U D I O D E C O D E R C O N T R O L functions *
458 ******************************************************************************/
459static int vid_blk_write_byte(struct cx231xx *dev, u16 saddr, u8 data)
460{
461 return cx231xx_write_i2c_data(dev, VID_BLK_I2C_ADDRESS,
462 saddr, 2, data, 1);
463}
464
465static int vid_blk_read_byte(struct cx231xx *dev, u16 saddr, u8 *data)
466{
467 int status;
468 u32 temp = 0;
469
470 status = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
471 saddr, 2, &temp, 1);
472 *data = (u8) temp;
473 return status;
474}
475
476static int vid_blk_write_word(struct cx231xx *dev, u16 saddr, u32 data)
477{
478 return cx231xx_write_i2c_data(dev, VID_BLK_I2C_ADDRESS,
479 saddr, 2, data, 4);
480}
481
482static int vid_blk_read_word(struct cx231xx *dev, u16 saddr, u32 *data)
483{
484 return cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
485 saddr, 2, data, 4);
486}
487
488int cx231xx_set_video_input_mux(struct cx231xx *dev, u8 input)
489{
490 int status = 0;
491
492 switch (INPUT(input)->type) {
493 case CX231XX_VMUX_COMPOSITE1:
494 case CX231XX_VMUX_SVIDEO:
495 if ((dev->current_pcb_config.type == USB_BUS_POWER) &&
496 (dev->power_mode != POLARIS_AVMODE_ENXTERNAL_AV)) {
497 /* External AV */
498 status = cx231xx_set_power_mode(dev,
499 POLARIS_AVMODE_ENXTERNAL_AV);
500 if (status < 0) {
501 cx231xx_errdev("%s: set_power_mode : Failed to"
502 " set Power - errCode [%d]!\n",
503 __func__, status);
504 return status;
505 }
506 }
507 status = cx231xx_set_decoder_video_input(dev,
508 INPUT(input)->type,
509 INPUT(input)->vmux);
510 break;
511 case CX231XX_VMUX_TELEVISION:
512 case CX231XX_VMUX_CABLE:
513 if ((dev->current_pcb_config.type == USB_BUS_POWER) &&
514 (dev->power_mode != POLARIS_AVMODE_ANALOGT_TV)) {
515 /* Tuner */
516 status = cx231xx_set_power_mode(dev,
517 POLARIS_AVMODE_ANALOGT_TV);
518 if (status < 0) {
519 cx231xx_errdev("%s: set_power_mode:Failed"
520 " to set Power - errCode [%d]!\n",
521 __func__, status);
522 return status;
523 }
524 }
525 status = cx231xx_set_decoder_video_input(dev,
526 CX231XX_VMUX_COMPOSITE1,
527 INPUT(input)->vmux);
528 break;
529 default:
530 cx231xx_errdev("%s: set_power_mode : Unknown Input %d !\n",
531 __func__, INPUT(input)->type);
532 break;
533 }
534
535 /* save the selection */
536 dev->video_input = input;
537
538 return status;
539}
540
541int cx231xx_set_decoder_video_input(struct cx231xx *dev,
542 u8 pin_type, u8 input)
543{
544 int status = 0;
545 u32 value = 0;
546
547 if (pin_type != dev->video_input) {
548 status = cx231xx_afe_adjust_ref_count(dev, pin_type);
549 if (status < 0) {
550 cx231xx_errdev("%s: adjust_ref_count :Failed to set"
551 "AFE input mux - errCode [%d]!\n",
552 __func__, status);
553 return status;
554 }
555 }
556
557 /* call afe block to set video inputs */
558 status = cx231xx_afe_set_input_mux(dev, input);
559 if (status < 0) {
560 cx231xx_errdev("%s: set_input_mux :Failed to set"
561 " AFE input mux - errCode [%d]!\n",
562 __func__, status);
563 return status;
564 }
565
566 switch (pin_type) {
567 case CX231XX_VMUX_COMPOSITE1:
568 status = vid_blk_read_word(dev, AFE_CTRL, &value);
569 value |= (0 << 13) | (1 << 4);
570 value &= ~(1 << 5);
571
572 /* set [24:23] [22:15] to 0 */
573 value &= (~(0x1ff8000));
574 /* set FUNC_MODE[24:23] = 2 IF_MOD[22:15] = 0 */
575 value |= 0x1000000;
576 status = vid_blk_write_word(dev, AFE_CTRL, value);
577
578 status = vid_blk_read_word(dev, OUT_CTRL1, &value);
579 value |= (1 << 7);
580 status = vid_blk_write_word(dev, OUT_CTRL1, value);
581
582 /* Set vip 1.1 output mode */
583 status = cx231xx_read_modify_write_i2c_dword(dev,
584 VID_BLK_I2C_ADDRESS,
585 OUT_CTRL1,
586 FLD_OUT_MODE,
587 OUT_MODE_VIP11);
588
589 /* Tell DIF object to go to baseband mode */
590 status = cx231xx_dif_set_standard(dev, DIF_USE_BASEBAND);
591 if (status < 0) {
592 cx231xx_errdev("%s: cx231xx_dif set to By pass"
593 " mode- errCode [%d]!\n",
594 __func__, status);
595 return status;
596 }
597
598 /* Read the DFE_CTRL1 register */
599 status = vid_blk_read_word(dev, DFE_CTRL1, &value);
600
601 /* enable the VBI_GATE_EN */
602 value |= FLD_VBI_GATE_EN;
603
604 /* Enable the auto-VGA enable */
605 value |= FLD_VGA_AUTO_EN;
606
607 /* Write it back */
608 status = vid_blk_write_word(dev, DFE_CTRL1, value);
609
610 /* Disable auto config of registers */
611 status = cx231xx_read_modify_write_i2c_dword(dev,
612 VID_BLK_I2C_ADDRESS,
613 MODE_CTRL, FLD_ACFG_DIS,
614 cx231xx_set_field(FLD_ACFG_DIS, 1));
615
616 /* Set CVBS input mode */
617 status = cx231xx_read_modify_write_i2c_dword(dev,
618 VID_BLK_I2C_ADDRESS,
619 MODE_CTRL, FLD_INPUT_MODE,
620 cx231xx_set_field(FLD_INPUT_MODE, INPUT_MODE_CVBS_0));
621 break;
622 case CX231XX_VMUX_SVIDEO:
623 /* Disable the use of DIF */
624
625 status = vid_blk_read_word(dev, AFE_CTRL, &value);
626
627 /* set [24:23] [22:15] to 0 */
628 value &= (~(0x1ff8000));
629 /* set FUNC_MODE[24:23] = 2
630 IF_MOD[22:15] = 0 DCR_BYP_CH2[4:4] = 1; */
631 value |= 0x1000010;
632 status = vid_blk_write_word(dev, AFE_CTRL, value);
633
634 /* Tell DIF object to go to baseband mode */
635 status = cx231xx_dif_set_standard(dev, DIF_USE_BASEBAND);
636 if (status < 0) {
637 cx231xx_errdev("%s: cx231xx_dif set to By pass"
638 " mode- errCode [%d]!\n",
639 __func__, status);
640 return status;
641 }
642
643 /* Read the DFE_CTRL1 register */
644 status = vid_blk_read_word(dev, DFE_CTRL1, &value);
645
646 /* enable the VBI_GATE_EN */
647 value |= FLD_VBI_GATE_EN;
648
649 /* Enable the auto-VGA enable */
650 value |= FLD_VGA_AUTO_EN;
651
652 /* Write it back */
653 status = vid_blk_write_word(dev, DFE_CTRL1, value);
654
655 /* Disable auto config of registers */
656 status = cx231xx_read_modify_write_i2c_dword(dev,
657 VID_BLK_I2C_ADDRESS,
658 MODE_CTRL, FLD_ACFG_DIS,
659 cx231xx_set_field(FLD_ACFG_DIS, 1));
660
661 /* Set YC input mode */
662 status = cx231xx_read_modify_write_i2c_dword(dev,
663 VID_BLK_I2C_ADDRESS,
664 MODE_CTRL,
665 FLD_INPUT_MODE,
666 cx231xx_set_field(FLD_INPUT_MODE, INPUT_MODE_YC_1));
667
668 /* Chroma to ADC2 */
669 status = vid_blk_read_word(dev, AFE_CTRL, &value);
670 value |= FLD_CHROMA_IN_SEL; /* set the chroma in select */
671
672 /* Clear VGA_SEL_CH2 and VGA_SEL_CH3 (bits 7 and 8)
673 This sets them to use video
674 rather than audio. Only one of the two will be in use. */
675 value &= ~(FLD_VGA_SEL_CH2 | FLD_VGA_SEL_CH3);
676
677 status = vid_blk_write_word(dev, AFE_CTRL, value);
678
679 status = cx231xx_afe_set_mode(dev, AFE_MODE_BASEBAND);
680 break;
681 case CX231XX_VMUX_TELEVISION:
682 case CX231XX_VMUX_CABLE:
683 default:
684 switch (dev->model) {
685 case CX231XX_BOARD_CNXT_RDE_250:
686 case CX231XX_BOARD_CNXT_RDU_250:
687 /* Disable the use of DIF */
688
689 status = vid_blk_read_word(dev, AFE_CTRL, &value);
690 value |= (0 << 13) | (1 << 4);
691 value &= ~(1 << 5);
692
693 /* set [24:23] [22:15] to 0 */
694 value &= (~(0x1FF8000));
695 /* set FUNC_MODE[24:23] = 2 IF_MOD[22:15] = 0 */
696 value |= 0x1000000;
697 status = vid_blk_write_word(dev, AFE_CTRL, value);
698
699 status = vid_blk_read_word(dev, OUT_CTRL1, &value);
700 value |= (1 << 7);
701 status = vid_blk_write_word(dev, OUT_CTRL1, value);
702
703 /* Set vip 1.1 output mode */
704 status = cx231xx_read_modify_write_i2c_dword(dev,
705 VID_BLK_I2C_ADDRESS,
706 OUT_CTRL1, FLD_OUT_MODE,
707 OUT_MODE_VIP11);
708
709 /* Tell DIF object to go to baseband mode */
710 status = cx231xx_dif_set_standard(dev,
711 DIF_USE_BASEBAND);
712 if (status < 0) {
713 cx231xx_errdev("%s: cx231xx_dif set to By pass"
714 " mode- errCode [%d]!\n",
715 __func__, status);
716 return status;
717 }
718
719 /* Read the DFE_CTRL1 register */
720 status = vid_blk_read_word(dev, DFE_CTRL1, &value);
721
722 /* enable the VBI_GATE_EN */
723 value |= FLD_VBI_GATE_EN;
724
725 /* Enable the auto-VGA enable */
726 value |= FLD_VGA_AUTO_EN;
727
728 /* Write it back */
729 status = vid_blk_write_word(dev, DFE_CTRL1, value);
730
731 /* Disable auto config of registers */
732 status = cx231xx_read_modify_write_i2c_dword(dev,
733 VID_BLK_I2C_ADDRESS,
734 MODE_CTRL, FLD_ACFG_DIS,
735 cx231xx_set_field(FLD_ACFG_DIS, 1));
736
737 /* Set CVBS input mode */
738 status = cx231xx_read_modify_write_i2c_dword(dev,
739 VID_BLK_I2C_ADDRESS,
740 MODE_CTRL, FLD_INPUT_MODE,
741 cx231xx_set_field(FLD_INPUT_MODE,
742 INPUT_MODE_CVBS_0));
743 break;
744 default:
745 /* Enable the DIF for the tuner */
746
747 /* Reinitialize the DIF */
748 status = cx231xx_dif_set_standard(dev, dev->norm);
749 if (status < 0) {
750 cx231xx_errdev("%s: cx231xx_dif set to By pass"
751 " mode- errCode [%d]!\n",
752 __func__, status);
753 return status;
754 }
755
756 /* Make sure bypass is cleared */
757 status = vid_blk_read_word(dev, DIF_MISC_CTRL, &value);
758
759 /* Clear the bypass bit */
760 value &= ~FLD_DIF_DIF_BYPASS;
761
762 /* Enable the use of the DIF block */
763 status = vid_blk_write_word(dev, DIF_MISC_CTRL, value);
764
765 /* Read the DFE_CTRL1 register */
766 status = vid_blk_read_word(dev, DFE_CTRL1, &value);
767
768 /* Disable the VBI_GATE_EN */
769 value &= ~FLD_VBI_GATE_EN;
770
771 /* Enable the auto-VGA enable, AGC, and
772 set the skip count to 2 */
773 value |= FLD_VGA_AUTO_EN | FLD_AGC_AUTO_EN | 0x00200000;
774
775 /* Write it back */
776 status = vid_blk_write_word(dev, DFE_CTRL1, value);
777
778 /* Wait until AGC locks up */
779 msleep(1);
780
781 /* Disable the auto-VGA enable AGC */
782 value &= ~(FLD_VGA_AUTO_EN);
783
784 /* Write it back */
785 status = vid_blk_write_word(dev, DFE_CTRL1, value);
786
787 /* Enable Polaris B0 AGC output */
788 status = vid_blk_read_word(dev, PIN_CTRL, &value);
789 value |= (FLD_OEF_AGC_RF) |
790 (FLD_OEF_AGC_IFVGA) |
791 (FLD_OEF_AGC_IF);
792 status = vid_blk_write_word(dev, PIN_CTRL, value);
793
794 /* Set vip 1.1 output mode */
795 status = cx231xx_read_modify_write_i2c_dword(dev,
796 VID_BLK_I2C_ADDRESS,
797 OUT_CTRL1, FLD_OUT_MODE,
798 OUT_MODE_VIP11);
799
800 /* Disable auto config of registers */
801 status = cx231xx_read_modify_write_i2c_dword(dev,
802 VID_BLK_I2C_ADDRESS,
803 MODE_CTRL, FLD_ACFG_DIS,
804 cx231xx_set_field(FLD_ACFG_DIS, 1));
805
806 /* Set CVBS input mode */
807 status = cx231xx_read_modify_write_i2c_dword(dev,
808 VID_BLK_I2C_ADDRESS,
809 MODE_CTRL, FLD_INPUT_MODE,
810 cx231xx_set_field(FLD_INPUT_MODE,
811 INPUT_MODE_CVBS_0));
812
813 /* Set some bits in AFE_CTRL so that channel 2 or 3
814 * is ready to receive audio */
815 /* Clear clamp for channels 2 and 3 (bit 16-17) */
816 /* Clear droop comp (bit 19-20) */
817 /* Set VGA_SEL (for audio control) (bit 7-8) */
818 status = vid_blk_read_word(dev, AFE_CTRL, &value);
819
820 value |= FLD_VGA_SEL_CH3 | FLD_VGA_SEL_CH2;
821
822 status = vid_blk_write_word(dev, AFE_CTRL, value);
823 break;
824
825 }
826 break;
827 }
828
829 /* Set raw VBI mode */
830 status = cx231xx_read_modify_write_i2c_dword(dev,
831 VID_BLK_I2C_ADDRESS,
832 OUT_CTRL1, FLD_VBIHACTRAW_EN,
833 cx231xx_set_field(FLD_VBIHACTRAW_EN, 1));
834
835 status = vid_blk_read_word(dev, OUT_CTRL1, &value);
836 if (value & 0x02) {
837 value |= (1 << 19);
838 status = vid_blk_write_word(dev, OUT_CTRL1, value);
839 }
840
841 return status;
842}
843
844/*
845 * Handle any video-mode specific overrides that are different
846 * on a per video standards basis after touching the MODE_CTRL
847 * register which resets many values for autodetect
848 */
849int cx231xx_do_mode_ctrl_overrides(struct cx231xx *dev)
850{
851 int status = 0;
852
853 cx231xx_info("do_mode_ctrl_overrides : 0x%x\n",
854 (unsigned int)dev->norm);
855
856 /* Change the DFE_CTRL3 bp_percent to fix flagging */
857 status = vid_blk_write_word(dev, DFE_CTRL3, 0xCD3F0280);
858
859 if (dev->norm & (V4L2_STD_NTSC | V4L2_STD_PAL_M)) {
860 cx231xx_info("do_mode_ctrl_overrides NTSC\n");
861
862 /* Move the close caption lines out of active video,
863 adjust the active video start point */
864 status = cx231xx_read_modify_write_i2c_dword(dev,
865 VID_BLK_I2C_ADDRESS,
866 VERT_TIM_CTRL,
867 FLD_VBLANK_CNT, 0x18);
868 status = cx231xx_read_modify_write_i2c_dword(dev,
869 VID_BLK_I2C_ADDRESS,
870 VERT_TIM_CTRL,
871 FLD_VACTIVE_CNT,
872 0x1E6000);
873 status = cx231xx_read_modify_write_i2c_dword(dev,
874 VID_BLK_I2C_ADDRESS,
875 VERT_TIM_CTRL,
876 FLD_V656BLANK_CNT,
877 0x1E000000);
878
879 status = cx231xx_read_modify_write_i2c_dword(dev,
880 VID_BLK_I2C_ADDRESS,
881 HORIZ_TIM_CTRL,
882 FLD_HBLANK_CNT,
883 cx231xx_set_field
884 (FLD_HBLANK_CNT, 0x79));
885 } else if (dev->norm & V4L2_STD_SECAM) {
886 cx231xx_info("do_mode_ctrl_overrides SECAM\n");
887 status = cx231xx_read_modify_write_i2c_dword(dev,
888 VID_BLK_I2C_ADDRESS,
889 VERT_TIM_CTRL,
890 FLD_VBLANK_CNT, 0x24);
891 /* Adjust the active video horizontal start point */
892 status = cx231xx_read_modify_write_i2c_dword(dev,
893 VID_BLK_I2C_ADDRESS,
894 HORIZ_TIM_CTRL,
895 FLD_HBLANK_CNT,
896 cx231xx_set_field
897 (FLD_HBLANK_CNT, 0x85));
898 } else {
899 cx231xx_info("do_mode_ctrl_overrides PAL\n");
900 status = cx231xx_read_modify_write_i2c_dword(dev,
901 VID_BLK_I2C_ADDRESS,
902 VERT_TIM_CTRL,
903 FLD_VBLANK_CNT, 0x24);
904 /* Adjust the active video horizontal start point */
905 status = cx231xx_read_modify_write_i2c_dword(dev,
906 VID_BLK_I2C_ADDRESS,
907 HORIZ_TIM_CTRL,
908 FLD_HBLANK_CNT,
909 cx231xx_set_field
910 (FLD_HBLANK_CNT, 0x85));
911 }
912
913 return status;
914}
915
916int cx231xx_set_audio_input(struct cx231xx *dev, u8 input)
917{
918 int status = 0;
919 enum AUDIO_INPUT ainput = AUDIO_INPUT_LINE;
920
921 switch (INPUT(input)->amux) {
922 case CX231XX_AMUX_VIDEO:
923 ainput = AUDIO_INPUT_TUNER_TV;
924 break;
925 case CX231XX_AMUX_LINE_IN:
926 status = cx231xx_i2s_blk_set_audio_input(dev, input);
927 ainput = AUDIO_INPUT_LINE;
928 break;
929 default:
930 break;
931 }
932
933 status = cx231xx_set_audio_decoder_input(dev, ainput);
934
935 return status;
936}
937
938int cx231xx_set_audio_decoder_input(struct cx231xx *dev,
939 enum AUDIO_INPUT audio_input)
940{
941 u32 dwval;
942 int status;
943 u8 gen_ctrl;
944 u32 value = 0;
945
946 /* Put it in soft reset */
947 status = vid_blk_read_byte(dev, GENERAL_CTL, &gen_ctrl);
948 gen_ctrl |= 1;
949 status = vid_blk_write_byte(dev, GENERAL_CTL, gen_ctrl);
950
951 switch (audio_input) {
952 case AUDIO_INPUT_LINE:
953 /* setup AUD_IO control from Merlin paralle output */
954 value = cx231xx_set_field(FLD_AUD_CHAN1_SRC,
955 AUD_CHAN_SRC_PARALLEL);
956 status = vid_blk_write_word(dev, AUD_IO_CTRL, value);
957
958 /* setup input to Merlin, SRC2 connect to AC97
959 bypass upsample-by-2, slave mode, sony mode, left justify
960 adr 091c, dat 01000000 */
961 status = vid_blk_read_word(dev, AC97_CTL, &dwval);
962
963 status = vid_blk_write_word(dev, AC97_CTL,
964 (dwval | FLD_AC97_UP2X_BYPASS));
965
966 /* select the parallel1 and SRC3 */
967 status = vid_blk_write_word(dev, BAND_OUT_SEL,
968 cx231xx_set_field(FLD_SRC3_IN_SEL, 0x0) |
969 cx231xx_set_field(FLD_SRC3_CLK_SEL, 0x0) |
970 cx231xx_set_field(FLD_PARALLEL1_SRC_SEL, 0x0));
971
972 /* unmute all, AC97 in, independence mode
973 adr 08d0, data 0x00063073 */
974 status = vid_blk_write_word(dev, PATH1_CTL1, 0x00063073);
975
976 /* set AVC maximum threshold, adr 08d4, dat ffff0024 */
977 status = vid_blk_read_word(dev, PATH1_VOL_CTL, &dwval);
978 status = vid_blk_write_word(dev, PATH1_VOL_CTL,
979 (dwval | FLD_PATH1_AVC_THRESHOLD));
980
981 /* set SC maximum threshold, adr 08ec, dat ffffb3a3 */
982 status = vid_blk_read_word(dev, PATH1_SC_CTL, &dwval);
983 status = vid_blk_write_word(dev, PATH1_SC_CTL,
984 (dwval | FLD_PATH1_SC_THRESHOLD));
985 break;
986
987 case AUDIO_INPUT_TUNER_TV:
988 default:
989
990 /* Setup SRC sources and clocks */
991 status = vid_blk_write_word(dev, BAND_OUT_SEL,
992 cx231xx_set_field(FLD_SRC6_IN_SEL, 0x00) |
993 cx231xx_set_field(FLD_SRC6_CLK_SEL, 0x01) |
994 cx231xx_set_field(FLD_SRC5_IN_SEL, 0x00) |
995 cx231xx_set_field(FLD_SRC5_CLK_SEL, 0x02) |
996 cx231xx_set_field(FLD_SRC4_IN_SEL, 0x02) |
997 cx231xx_set_field(FLD_SRC4_CLK_SEL, 0x03) |
998 cx231xx_set_field(FLD_SRC3_IN_SEL, 0x00) |
999 cx231xx_set_field(FLD_SRC3_CLK_SEL, 0x00) |
1000 cx231xx_set_field(FLD_BASEBAND_BYPASS_CTL, 0x00) |
1001 cx231xx_set_field(FLD_AC97_SRC_SEL, 0x03) |
1002 cx231xx_set_field(FLD_I2S_SRC_SEL, 0x00) |
1003 cx231xx_set_field(FLD_PARALLEL2_SRC_SEL, 0x02) |
1004 cx231xx_set_field(FLD_PARALLEL1_SRC_SEL, 0x01));
1005
1006 /* Setup the AUD_IO control */
1007 status = vid_blk_write_word(dev, AUD_IO_CTRL,
1008 cx231xx_set_field(FLD_I2S_PORT_DIR, 0x00) |
1009 cx231xx_set_field(FLD_I2S_OUT_SRC, 0x00) |
1010 cx231xx_set_field(FLD_AUD_CHAN3_SRC, 0x00) |
1011 cx231xx_set_field(FLD_AUD_CHAN2_SRC, 0x00) |
1012 cx231xx_set_field(FLD_AUD_CHAN1_SRC, 0x03));
1013
1014 status = vid_blk_write_word(dev, PATH1_CTL1, 0x1F063870);
1015
1016 /* setAudioStandard(_audio_standard); */
1017
1018 status = vid_blk_write_word(dev, PATH1_CTL1, 0x00063870);
1019 switch (dev->model) {
1020 case CX231XX_BOARD_CNXT_RDE_250:
1021 case CX231XX_BOARD_CNXT_RDU_250:
1022 status = cx231xx_read_modify_write_i2c_dword(dev,
1023 VID_BLK_I2C_ADDRESS,
1024 CHIP_CTRL,
1025 FLD_SIF_EN,
1026 cx231xx_set_field(FLD_SIF_EN, 1));
1027 break;
1028 default:
1029 break;
1030 }
1031 break;
1032
1033 case AUDIO_INPUT_TUNER_FM:
1034 /* use SIF for FM radio
1035 setupFM();
1036 setAudioStandard(_audio_standard);
1037 */
1038 break;
1039
1040 case AUDIO_INPUT_MUTE:
1041 status = vid_blk_write_word(dev, PATH1_CTL1, 0x1F011012);
1042 break;
1043 }
1044
1045 /* Take it out of soft reset */
1046 status = vid_blk_read_byte(dev, GENERAL_CTL, &gen_ctrl);
1047 gen_ctrl &= ~1;
1048 status = vid_blk_write_byte(dev, GENERAL_CTL, gen_ctrl);
1049
1050 return status;
1051}
1052
1053/* Set resolution of the video */
1054int cx231xx_resolution_set(struct cx231xx *dev)
1055{
1056 int width, height;
1057 u32 hscale, vscale;
1058 int status = 0;
1059
1060 width = dev->width;
1061 height = dev->height;
1062
1063 get_scale(dev, width, height, &hscale, &vscale);
1064
1065 /* set horzontal scale */
1066 status = vid_blk_write_word(dev, HSCALE_CTRL, hscale);
1067
1068 /* set vertical scale */
1069 status = vid_blk_write_word(dev, VSCALE_CTRL, vscale);
1070
1071 return status;
1072}
1073
1074/******************************************************************************
1075 * C H I P Specific C O N T R O L functions *
1076 ******************************************************************************/
1077int cx231xx_init_ctrl_pin_status(struct cx231xx *dev)
1078{
1079 u32 value;
1080 int status = 0;
1081
1082 status = vid_blk_read_word(dev, PIN_CTRL, &value);
1083 value |= (~dev->board.ctl_pin_status_mask);
1084 status = vid_blk_write_word(dev, PIN_CTRL, value);
1085
1086 return status;
1087}
1088
1089int cx231xx_set_agc_analog_digital_mux_select(struct cx231xx *dev,
1090 u8 analog_or_digital)
1091{
1092 int status = 0;
1093
1094 /* first set the direction to output */
1095 status = cx231xx_set_gpio_direction(dev,
1096 dev->board.
1097 agc_analog_digital_select_gpio, 1);
1098
1099 /* 0 - demod ; 1 - Analog mode */
1100 status = cx231xx_set_gpio_value(dev,
1101 dev->board.agc_analog_digital_select_gpio,
1102 analog_or_digital);
1103
1104 return status;
1105}
1106
1107int cx231xx_enable_i2c_for_tuner(struct cx231xx *dev, u8 I2CIndex)
1108{
1109 u8 value[4] = { 0, 0, 0, 0 };
1110 int status = 0;
1111
1112 cx231xx_info("Changing the i2c port for tuner to %d\n", I2CIndex);
1113
1114 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER,
1115 PWR_CTL_EN, value, 4);
1116 if (status < 0)
1117 return status;
1118
1119 if (I2CIndex == I2C_1) {
1120 if (value[0] & I2C_DEMOD_EN) {
1121 value[0] &= ~I2C_DEMOD_EN;
1122 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1123 PWR_CTL_EN, value, 4);
1124 }
1125 } else {
1126 if (!(value[0] & I2C_DEMOD_EN)) {
1127 value[0] |= I2C_DEMOD_EN;
1128 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1129 PWR_CTL_EN, value, 4);
1130 }
1131 }
1132
1133 return status;
1134
1135}
1136
1137/******************************************************************************
1138 * D I F - B L O C K C O N T R O L functions *
1139 ******************************************************************************/
1140int cx231xx_dif_configure_C2HH_for_low_IF(struct cx231xx *dev, u32 mode,
1141 u32 function_mode, u32 standard)
1142{
1143 int status = 0;
1144
1145 if (mode == V4L2_TUNER_RADIO) {
1146 /* C2HH */
1147 /* lo if big signal */
1148 status = cx231xx_reg_mask_write(dev,
1149 VID_BLK_I2C_ADDRESS, 32,
1150 AFE_CTRL_C2HH_SRC_CTRL, 30, 31, 0x1);
1151 /* FUNC_MODE = DIF */
1152 status = cx231xx_reg_mask_write(dev,
1153 VID_BLK_I2C_ADDRESS, 32,
1154 AFE_CTRL_C2HH_SRC_CTRL, 23, 24, function_mode);
1155 /* IF_MODE */
1156 status = cx231xx_reg_mask_write(dev,
1157 VID_BLK_I2C_ADDRESS, 32,
1158 AFE_CTRL_C2HH_SRC_CTRL, 15, 22, 0xFF);
1159 /* no inv */
1160 status = cx231xx_reg_mask_write(dev,
1161 VID_BLK_I2C_ADDRESS, 32,
1162 AFE_CTRL_C2HH_SRC_CTRL, 9, 9, 0x1);
1163 } else if (standard != DIF_USE_BASEBAND) {
1164 if (standard & V4L2_STD_MN) {
1165 /* lo if big signal */
1166 status = cx231xx_reg_mask_write(dev,
1167 VID_BLK_I2C_ADDRESS, 32,
1168 AFE_CTRL_C2HH_SRC_CTRL, 30, 31, 0x1);
1169 /* FUNC_MODE = DIF */
1170 status = cx231xx_reg_mask_write(dev,
1171 VID_BLK_I2C_ADDRESS, 32,
1172 AFE_CTRL_C2HH_SRC_CTRL, 23, 24,
1173 function_mode);
1174 /* IF_MODE */
1175 status = cx231xx_reg_mask_write(dev,
1176 VID_BLK_I2C_ADDRESS, 32,
1177 AFE_CTRL_C2HH_SRC_CTRL, 15, 22, 0xb);
1178 /* no inv */
1179 status = cx231xx_reg_mask_write(dev,
1180 VID_BLK_I2C_ADDRESS, 32,
1181 AFE_CTRL_C2HH_SRC_CTRL, 9, 9, 0x1);
1182 /* 0x124, AUD_CHAN1_SRC = 0x3 */
1183 status = cx231xx_reg_mask_write(dev,
1184 VID_BLK_I2C_ADDRESS, 32,
1185 AUD_IO_CTRL, 0, 31, 0x00000003);
1186 } else if ((standard == V4L2_STD_PAL_I) |
1187 (standard & V4L2_STD_SECAM)) {
1188 /* C2HH setup */
1189 /* lo if big signal */
1190 status = cx231xx_reg_mask_write(dev,
1191 VID_BLK_I2C_ADDRESS, 32,
1192 AFE_CTRL_C2HH_SRC_CTRL, 30, 31, 0x1);
1193 /* FUNC_MODE = DIF */
1194 status = cx231xx_reg_mask_write(dev,
1195 VID_BLK_I2C_ADDRESS, 32,
1196 AFE_CTRL_C2HH_SRC_CTRL, 23, 24,
1197 function_mode);
1198 /* IF_MODE */
1199 status = cx231xx_reg_mask_write(dev,
1200 VID_BLK_I2C_ADDRESS, 32,
1201 AFE_CTRL_C2HH_SRC_CTRL, 15, 22, 0xF);
1202 /* no inv */
1203 status = cx231xx_reg_mask_write(dev,
1204 VID_BLK_I2C_ADDRESS, 32,
1205 AFE_CTRL_C2HH_SRC_CTRL, 9, 9, 0x1);
1206 } else {
1207 /* default PAL BG */
1208 /* C2HH setup */
1209 /* lo if big signal */
1210 status = cx231xx_reg_mask_write(dev,
1211 VID_BLK_I2C_ADDRESS, 32,
1212 AFE_CTRL_C2HH_SRC_CTRL, 30, 31, 0x1);
1213 /* FUNC_MODE = DIF */
1214 status = cx231xx_reg_mask_write(dev,
1215 VID_BLK_I2C_ADDRESS, 32,
1216 AFE_CTRL_C2HH_SRC_CTRL, 23, 24,
1217 function_mode);
1218 /* IF_MODE */
1219 status = cx231xx_reg_mask_write(dev,
1220 VID_BLK_I2C_ADDRESS, 32,
1221 AFE_CTRL_C2HH_SRC_CTRL, 15, 22, 0xE);
1222 /* no inv */
1223 status = cx231xx_reg_mask_write(dev,
1224 VID_BLK_I2C_ADDRESS, 32,
1225 AFE_CTRL_C2HH_SRC_CTRL, 9, 9, 0x1);
1226 }
1227 }
1228
1229 return status;
1230}
1231
1232int cx231xx_dif_set_standard(struct cx231xx *dev, u32 standard)
1233{
1234 int status = 0;
1235 u32 dif_misc_ctrl_value = 0;
1236 u32 func_mode = 0;
1237
1238 cx231xx_info("%s: setStandard to %x\n", __func__, standard);
1239
1240 status = vid_blk_read_word(dev, DIF_MISC_CTRL, &dif_misc_ctrl_value);
1241 if (standard != DIF_USE_BASEBAND)
1242 dev->norm = standard;
1243
1244 switch (dev->model) {
1245 case CX231XX_BOARD_CNXT_RDE_250:
1246 case CX231XX_BOARD_CNXT_RDU_250:
1247 func_mode = 0x03;
1248 break;
1249 default:
1250 func_mode = 0x01;
1251 }
1252
1253 status = cx231xx_dif_configure_C2HH_for_low_IF(dev, dev->active_mode,
1254 func_mode, standard);
1255
1256 if (standard == DIF_USE_BASEBAND) { /* base band */
1257 /* There is a different SRC_PHASE_INC value
1258 for baseband vs. DIF */
1259 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC, 0xDF7DF83);
1260 status = vid_blk_read_word(dev, DIF_MISC_CTRL,
1261 &dif_misc_ctrl_value);
1262 dif_misc_ctrl_value |= FLD_DIF_DIF_BYPASS;
1263 status = vid_blk_write_word(dev, DIF_MISC_CTRL,
1264 dif_misc_ctrl_value);
1265 } else if (standard & V4L2_STD_PAL_D) {
1266 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1267 DIF_PLL_CTRL, 0, 31, 0x6503bc0c);
1268 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1269 DIF_PLL_CTRL1, 0, 31, 0xbd038c85);
1270 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1271 DIF_PLL_CTRL2, 0, 31, 0x1db4640a);
1272 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1273 DIF_PLL_CTRL3, 0, 31, 0x00008800);
1274 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1275 DIF_AGC_IF_REF, 0, 31, 0x444C1380);
1276 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1277 DIF_AGC_CTRL_IF, 0, 31, 0xDA302600);
1278 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1279 DIF_AGC_CTRL_INT, 0, 31, 0xDA261700);
1280 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1281 DIF_AGC_CTRL_RF, 0, 31, 0xDA262600);
1282 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1283 DIF_AGC_IF_INT_CURRENT, 0, 31,
1284 0x26001700);
1285 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1286 DIF_AGC_RF_CURRENT, 0, 31,
1287 0x00002660);
1288 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1289 DIF_VIDEO_AGC_CTRL, 0, 31,
1290 0x72500800);
1291 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1292 DIF_VID_AUD_OVERRIDE, 0, 31,
1293 0x27000100);
1294 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1295 DIF_AV_SEP_CTRL, 0, 31, 0x3F3934EA);
1296 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1297 DIF_COMP_FLT_CTRL, 0, 31,
1298 0x00000000);
1299 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1300 DIF_SRC_PHASE_INC, 0, 31,
1301 0x1befbf06);
1302 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1303 DIF_SRC_GAIN_CONTROL, 0, 31,
1304 0x000035e8);
1305 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1306 DIF_RPT_VARIANCE, 0, 31, 0x00000000);
1307 /* Save the Spec Inversion value */
1308 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1309 dif_misc_ctrl_value |= 0x3a023F11;
1310 } else if (standard & V4L2_STD_PAL_I) {
1311 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1312 DIF_PLL_CTRL, 0, 31, 0x6503bc0c);
1313 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1314 DIF_PLL_CTRL1, 0, 31, 0xbd038c85);
1315 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1316 DIF_PLL_CTRL2, 0, 31, 0x1db4640a);
1317 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1318 DIF_PLL_CTRL3, 0, 31, 0x00008800);
1319 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1320 DIF_AGC_IF_REF, 0, 31, 0x444C1380);
1321 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1322 DIF_AGC_CTRL_IF, 0, 31, 0xDA302600);
1323 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1324 DIF_AGC_CTRL_INT, 0, 31, 0xDA261700);
1325 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1326 DIF_AGC_CTRL_RF, 0, 31, 0xDA262600);
1327 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1328 DIF_AGC_IF_INT_CURRENT, 0, 31,
1329 0x26001700);
1330 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1331 DIF_AGC_RF_CURRENT, 0, 31,
1332 0x00002660);
1333 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1334 DIF_VIDEO_AGC_CTRL, 0, 31,
1335 0x72500800);
1336 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1337 DIF_VID_AUD_OVERRIDE, 0, 31,
1338 0x27000100);
1339 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1340 DIF_AV_SEP_CTRL, 0, 31, 0x5F39A934);
1341 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1342 DIF_COMP_FLT_CTRL, 0, 31,
1343 0x00000000);
1344 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1345 DIF_SRC_PHASE_INC, 0, 31,
1346 0x1befbf06);
1347 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1348 DIF_SRC_GAIN_CONTROL, 0, 31,
1349 0x000035e8);
1350 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1351 DIF_RPT_VARIANCE, 0, 31, 0x00000000);
1352 /* Save the Spec Inversion value */
1353 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1354 dif_misc_ctrl_value |= 0x3a033F11;
1355 } else if (standard & V4L2_STD_PAL_M) {
1356 /* improved Low Frequency Phase Noise */
1357 status = vid_blk_write_word(dev, DIF_PLL_CTRL, 0xFF01FF0C);
1358 status = vid_blk_write_word(dev, DIF_PLL_CTRL1, 0xbd038c85);
1359 status = vid_blk_write_word(dev, DIF_PLL_CTRL2, 0x1db4640a);
1360 status = vid_blk_write_word(dev, DIF_PLL_CTRL3, 0x00008800);
1361 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, 0x444C1380);
1362 status = vid_blk_write_word(dev, DIF_AGC_IF_INT_CURRENT,
1363 0x26001700);
1364 status = vid_blk_write_word(dev, DIF_AGC_RF_CURRENT,
1365 0x00002660);
1366 status = vid_blk_write_word(dev, DIF_VIDEO_AGC_CTRL,
1367 0x72500800);
1368 status = vid_blk_write_word(dev, DIF_VID_AUD_OVERRIDE,
1369 0x27000100);
1370 status = vid_blk_write_word(dev, DIF_AV_SEP_CTRL, 0x012c405d);
1371 status = vid_blk_write_word(dev, DIF_COMP_FLT_CTRL,
1372 0x009f50c1);
1373 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC,
1374 0x1befbf06);
1375 status = vid_blk_write_word(dev, DIF_SRC_GAIN_CONTROL,
1376 0x000035e8);
1377 status = vid_blk_write_word(dev, DIF_SOFT_RST_CTRL_REVB,
1378 0x00000000);
1379 /* Save the Spec Inversion value */
1380 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1381 dif_misc_ctrl_value |= 0x3A0A3F10;
1382 } else if (standard & (V4L2_STD_PAL_N | V4L2_STD_PAL_Nc)) {
1383 /* improved Low Frequency Phase Noise */
1384 status = vid_blk_write_word(dev, DIF_PLL_CTRL, 0xFF01FF0C);
1385 status = vid_blk_write_word(dev, DIF_PLL_CTRL1, 0xbd038c85);
1386 status = vid_blk_write_word(dev, DIF_PLL_CTRL2, 0x1db4640a);
1387 status = vid_blk_write_word(dev, DIF_PLL_CTRL3, 0x00008800);
1388 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, 0x444C1380);
1389 status = vid_blk_write_word(dev, DIF_AGC_IF_INT_CURRENT,
1390 0x26001700);
1391 status = vid_blk_write_word(dev, DIF_AGC_RF_CURRENT,
1392 0x00002660);
1393 status = vid_blk_write_word(dev, DIF_VIDEO_AGC_CTRL,
1394 0x72500800);
1395 status = vid_blk_write_word(dev, DIF_VID_AUD_OVERRIDE,
1396 0x27000100);
1397 status = vid_blk_write_word(dev, DIF_AV_SEP_CTRL,
1398 0x012c405d);
1399 status = vid_blk_write_word(dev, DIF_COMP_FLT_CTRL,
1400 0x009f50c1);
1401 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC,
1402 0x1befbf06);
1403 status = vid_blk_write_word(dev, DIF_SRC_GAIN_CONTROL,
1404 0x000035e8);
1405 status = vid_blk_write_word(dev, DIF_SOFT_RST_CTRL_REVB,
1406 0x00000000);
1407 /* Save the Spec Inversion value */
1408 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1409 dif_misc_ctrl_value = 0x3A093F10;
1410 } else if (standard &
1411 (V4L2_STD_SECAM_B | V4L2_STD_SECAM_D | V4L2_STD_SECAM_G |
1412 V4L2_STD_SECAM_K | V4L2_STD_SECAM_K1)) {
1413
1414 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1415 DIF_PLL_CTRL, 0, 31, 0x6503bc0c);
1416 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1417 DIF_PLL_CTRL1, 0, 31, 0xbd038c85);
1418 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1419 DIF_PLL_CTRL2, 0, 31, 0x1db4640a);
1420 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1421 DIF_PLL_CTRL3, 0, 31, 0x00008800);
1422 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1423 DIF_AGC_IF_REF, 0, 31, 0x888C0380);
1424 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1425 DIF_AGC_CTRL_IF, 0, 31, 0xe0262600);
1426 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1427 DIF_AGC_CTRL_INT, 0, 31, 0xc2171700);
1428 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1429 DIF_AGC_CTRL_RF, 0, 31, 0xc2262600);
1430 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1431 DIF_AGC_IF_INT_CURRENT, 0, 31,
1432 0x26001700);
1433 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1434 DIF_AGC_RF_CURRENT, 0, 31,
1435 0x00002660);
1436 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1437 DIF_VID_AUD_OVERRIDE, 0, 31,
1438 0x27000100);
1439 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1440 DIF_AV_SEP_CTRL, 0, 31, 0x3F3530ec);
1441 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1442 DIF_COMP_FLT_CTRL, 0, 31,
1443 0x00000000);
1444 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1445 DIF_SRC_PHASE_INC, 0, 31,
1446 0x1befbf06);
1447 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1448 DIF_SRC_GAIN_CONTROL, 0, 31,
1449 0x000035e8);
1450 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1451 DIF_RPT_VARIANCE, 0, 31, 0x00000000);
1452 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1453 DIF_VIDEO_AGC_CTRL, 0, 31,
1454 0xf4000000);
1455
1456 /* Save the Spec Inversion value */
1457 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1458 dif_misc_ctrl_value |= 0x3a023F11;
1459 } else if (standard & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC)) {
1460 /* Is it SECAM_L1? */
1461 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1462 DIF_PLL_CTRL, 0, 31, 0x6503bc0c);
1463 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1464 DIF_PLL_CTRL1, 0, 31, 0xbd038c85);
1465 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1466 DIF_PLL_CTRL2, 0, 31, 0x1db4640a);
1467 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1468 DIF_PLL_CTRL3, 0, 31, 0x00008800);
1469 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1470 DIF_AGC_IF_REF, 0, 31, 0x888C0380);
1471 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1472 DIF_AGC_CTRL_IF, 0, 31, 0xe0262600);
1473 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1474 DIF_AGC_CTRL_INT, 0, 31, 0xc2171700);
1475 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1476 DIF_AGC_CTRL_RF, 0, 31, 0xc2262600);
1477 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1478 DIF_AGC_IF_INT_CURRENT, 0, 31,
1479 0x26001700);
1480 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1481 DIF_AGC_RF_CURRENT, 0, 31,
1482 0x00002660);
1483 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1484 DIF_VID_AUD_OVERRIDE, 0, 31,
1485 0x27000100);
1486 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1487 DIF_AV_SEP_CTRL, 0, 31, 0x3F3530ec);
1488 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1489 DIF_COMP_FLT_CTRL, 0, 31,
1490 0x00000000);
1491 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1492 DIF_SRC_PHASE_INC, 0, 31,
1493 0x1befbf06);
1494 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1495 DIF_SRC_GAIN_CONTROL, 0, 31,
1496 0x000035e8);
1497 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1498 DIF_RPT_VARIANCE, 0, 31, 0x00000000);
1499 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1500 DIF_VIDEO_AGC_CTRL, 0, 31,
1501 0xf2560000);
1502
1503 /* Save the Spec Inversion value */
1504 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1505 dif_misc_ctrl_value |= 0x3a023F11;
1506
1507 } else if (standard & V4L2_STD_NTSC_M) {
1508 /* V4L2_STD_NTSC_M (75 IRE Setup) Or
1509 V4L2_STD_NTSC_M_JP (Japan, 0 IRE Setup) */
1510
1511 /* For NTSC the centre frequency of video coming out of
1512 sidewinder is around 7.1MHz or 3.6MHz depending on the
1513 spectral inversion. so for a non spectrally inverted channel
1514 the pll freq word is 0x03420c49
1515 */
1516
1517 status = vid_blk_write_word(dev, DIF_PLL_CTRL, 0x6503BC0C);
1518 status = vid_blk_write_word(dev, DIF_PLL_CTRL1, 0xBD038C85);
1519 status = vid_blk_write_word(dev, DIF_PLL_CTRL2, 0x1DB4640A);
1520 status = vid_blk_write_word(dev, DIF_PLL_CTRL3, 0x00008800);
1521 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, 0x444C0380);
1522 status = vid_blk_write_word(dev, DIF_AGC_IF_INT_CURRENT,
1523 0x26001700);
1524 status = vid_blk_write_word(dev, DIF_AGC_RF_CURRENT,
1525 0x00002660);
1526 status = vid_blk_write_word(dev, DIF_VIDEO_AGC_CTRL,
1527 0x04000800);
1528 status = vid_blk_write_word(dev, DIF_VID_AUD_OVERRIDE,
1529 0x27000100);
1530 status = vid_blk_write_word(dev, DIF_AV_SEP_CTRL, 0x01296e1f);
1531
1532 status = vid_blk_write_word(dev, DIF_COMP_FLT_CTRL,
1533 0x009f50c1);
1534 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC,
1535 0x1befbf06);
1536 status = vid_blk_write_word(dev, DIF_SRC_GAIN_CONTROL,
1537 0x000035e8);
1538
1539 status = vid_blk_write_word(dev, DIF_AGC_CTRL_IF, 0xC2262600);
1540 status = vid_blk_write_word(dev, DIF_AGC_CTRL_INT,
1541 0xC2262600);
1542 status = vid_blk_write_word(dev, DIF_AGC_CTRL_RF, 0xC2262600);
1543
1544 /* Save the Spec Inversion value */
1545 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1546 dif_misc_ctrl_value |= 0x3a003F10;
1547 } else {
1548 /* default PAL BG */
1549 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1550 DIF_PLL_CTRL, 0, 31, 0x6503bc0c);
1551 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1552 DIF_PLL_CTRL1, 0, 31, 0xbd038c85);
1553 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1554 DIF_PLL_CTRL2, 0, 31, 0x1db4640a);
1555 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1556 DIF_PLL_CTRL3, 0, 31, 0x00008800);
1557 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1558 DIF_AGC_IF_REF, 0, 31, 0x444C1380);
1559 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1560 DIF_AGC_CTRL_IF, 0, 31, 0xDA302600);
1561 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1562 DIF_AGC_CTRL_INT, 0, 31, 0xDA261700);
1563 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1564 DIF_AGC_CTRL_RF, 0, 31, 0xDA262600);
1565 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1566 DIF_AGC_IF_INT_CURRENT, 0, 31,
1567 0x26001700);
1568 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1569 DIF_AGC_RF_CURRENT, 0, 31,
1570 0x00002660);
1571 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1572 DIF_VIDEO_AGC_CTRL, 0, 31,
1573 0x72500800);
1574 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1575 DIF_VID_AUD_OVERRIDE, 0, 31,
1576 0x27000100);
1577 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1578 DIF_AV_SEP_CTRL, 0, 31, 0x3F3530EC);
1579 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1580 DIF_COMP_FLT_CTRL, 0, 31,
1581 0x00A653A8);
1582 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1583 DIF_SRC_PHASE_INC, 0, 31,
1584 0x1befbf06);
1585 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1586 DIF_SRC_GAIN_CONTROL, 0, 31,
1587 0x000035e8);
1588 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32,
1589 DIF_RPT_VARIANCE, 0, 31, 0x00000000);
1590 /* Save the Spec Inversion value */
1591 dif_misc_ctrl_value &= FLD_DIF_SPEC_INV;
1592 dif_misc_ctrl_value |= 0x3a013F11;
1593 }
1594
1595 /* The AGC values should be the same for all standards,
1596 AUD_SRC_SEL[19] should always be disabled */
1597 dif_misc_ctrl_value &= ~FLD_DIF_AUD_SRC_SEL;
1598
1599 /* It is still possible to get Set Standard calls even when we
1600 are in FM mode.
1601 This is done to override the value for FM. */
1602 if (dev->active_mode == V4L2_TUNER_RADIO)
1603 dif_misc_ctrl_value = 0x7a080000;
1604
1605 /* Write the calculated value for misc ontrol register */
1606 status = vid_blk_write_word(dev, DIF_MISC_CTRL, dif_misc_ctrl_value);
1607
1608 return status;
1609}
1610
1611int cx231xx_tuner_pre_channel_change(struct cx231xx *dev)
1612{
1613 int status = 0;
1614 u32 dwval;
1615
1616 /* Set the RF and IF k_agc values to 3 */
1617 status = vid_blk_read_word(dev, DIF_AGC_IF_REF, &dwval);
1618 dwval &= ~(FLD_DIF_K_AGC_RF | FLD_DIF_K_AGC_IF);
1619 dwval |= 0x33000000;
1620
1621 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, dwval);
1622
1623 return status;
1624}
1625
1626int cx231xx_tuner_post_channel_change(struct cx231xx *dev)
1627{
1628 int status = 0;
1629 u32 dwval;
1630
1631 /* Set the RF and IF k_agc values to 4 for PAL/NTSC and 8 for
1632 * SECAM L/B/D standards */
1633 status = vid_blk_read_word(dev, DIF_AGC_IF_REF, &dwval);
1634 dwval &= ~(FLD_DIF_K_AGC_RF | FLD_DIF_K_AGC_IF);
1635
1636 if (dev->norm & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_B |
1637 V4L2_STD_SECAM_D))
1638 dwval |= 0x88000000;
1639 else
1640 dwval |= 0x44000000;
1641
1642 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, dwval);
1643
1644 return status;
1645}
1646
1647/******************************************************************************
1648 * I 2 S - B L O C K C O N T R O L functions *
1649 ******************************************************************************/
1650int cx231xx_i2s_blk_initialize(struct cx231xx *dev)
1651{
1652 int status = 0;
1653 u32 value;
1654
1655 status = cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1656 CH_PWR_CTRL1, 1, &value, 1);
1657 /* enables clock to delta-sigma and decimation filter */
1658 value |= 0x80;
1659 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1660 CH_PWR_CTRL1, 1, value, 1);
1661 /* power up all channel */
1662 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1663 CH_PWR_CTRL2, 1, 0x00, 1);
1664
1665 return status;
1666}
1667
1668int cx231xx_i2s_blk_update_power_control(struct cx231xx *dev,
1669 enum AV_MODE avmode)
1670{
1671 int status = 0;
1672 u32 value = 0;
1673
1674 if (avmode != POLARIS_AVMODE_ENXTERNAL_AV) {
1675 status = cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1676 CH_PWR_CTRL2, 1, &value, 1);
1677 value |= 0xfe;
1678 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1679 CH_PWR_CTRL2, 1, value, 1);
1680 } else {
1681 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1682 CH_PWR_CTRL2, 1, 0x00, 1);
1683 }
1684
1685 return status;
1686}
1687
1688/* set i2s_blk for audio input types */
1689int cx231xx_i2s_blk_set_audio_input(struct cx231xx *dev, u8 audio_input)
1690{
1691 int status = 0;
1692
1693 switch (audio_input) {
1694 case CX231XX_AMUX_LINE_IN:
1695 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1696 CH_PWR_CTRL2, 1, 0x00, 1);
1697 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1698 CH_PWR_CTRL1, 1, 0x80, 1);
1699 break;
1700 case CX231XX_AMUX_VIDEO:
1701 default:
1702 break;
1703 }
1704
1705 dev->ctl_ainput = audio_input;
1706
1707 return status;
1708}
1709
1710/******************************************************************************
1711 * P O W E R C O N T R O L functions *
1712 ******************************************************************************/
1713int cx231xx_set_power_mode(struct cx231xx *dev, enum AV_MODE mode)
1714{
1715 u8 value[4] = { 0, 0, 0, 0 };
1716 u32 tmp = 0;
1717 int status = 0;
1718
1719 if (dev->power_mode != mode)
1720 dev->power_mode = mode;
1721 else {
1722 cx231xx_info(" setPowerMode::mode = %d, No Change req.\n",
1723 mode);
1724 return 0;
1725 }
1726
1727 cx231xx_info(" setPowerMode::mode = %d\n", mode);
1728
1729 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, value,
1730 4);
1731 if (status < 0)
1732 return status;
1733
1734 tmp = *((u32 *) value);
1735
1736 switch (mode) {
1737 case POLARIS_AVMODE_ENXTERNAL_AV:
1738
1739 tmp &= (~PWR_MODE_MASK);
1740
1741 tmp |= PWR_AV_EN;
1742 value[0] = (u8) tmp;
1743 value[1] = (u8) (tmp >> 8);
1744 value[2] = (u8) (tmp >> 16);
1745 value[3] = (u8) (tmp >> 24);
1746 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1747 PWR_CTL_EN, value, 4);
1748 msleep(PWR_SLEEP_INTERVAL);
1749
1750 tmp |= PWR_ISO_EN;
1751 value[0] = (u8) tmp;
1752 value[1] = (u8) (tmp >> 8);
1753 value[2] = (u8) (tmp >> 16);
1754 value[3] = (u8) (tmp >> 24);
1755 status =
1756 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, PWR_CTL_EN,
1757 value, 4);
1758 msleep(PWR_SLEEP_INTERVAL);
1759
1760 tmp |= POLARIS_AVMODE_ENXTERNAL_AV;
1761 value[0] = (u8) tmp;
1762 value[1] = (u8) (tmp >> 8);
1763 value[2] = (u8) (tmp >> 16);
1764 value[3] = (u8) (tmp >> 24);
1765 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1766 PWR_CTL_EN, value, 4);
1767
1768 /* reset state of xceive tuner */
1769 dev->xc_fw_load_done = 0;
1770 break;
1771
1772 case POLARIS_AVMODE_ANALOGT_TV:
1773
1774 tmp &= (~PWR_DEMOD_EN);
1775 tmp |= (I2C_DEMOD_EN);
1776 value[0] = (u8) tmp;
1777 value[1] = (u8) (tmp >> 8);
1778 value[2] = (u8) (tmp >> 16);
1779 value[3] = (u8) (tmp >> 24);
1780 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1781 PWR_CTL_EN, value, 4);
1782 msleep(PWR_SLEEP_INTERVAL);
1783
1784 if (!(tmp & PWR_TUNER_EN)) {
1785 tmp |= (PWR_TUNER_EN);
1786 value[0] = (u8) tmp;
1787 value[1] = (u8) (tmp >> 8);
1788 value[2] = (u8) (tmp >> 16);
1789 value[3] = (u8) (tmp >> 24);
1790 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1791 PWR_CTL_EN, value, 4);
1792 msleep(PWR_SLEEP_INTERVAL);
1793 }
1794
1795 if (!(tmp & PWR_AV_EN)) {
1796 tmp |= PWR_AV_EN;
1797 value[0] = (u8) tmp;
1798 value[1] = (u8) (tmp >> 8);
1799 value[2] = (u8) (tmp >> 16);
1800 value[3] = (u8) (tmp >> 24);
1801 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1802 PWR_CTL_EN, value, 4);
1803 msleep(PWR_SLEEP_INTERVAL);
1804 }
1805 if (!(tmp & PWR_ISO_EN)) {
1806 tmp |= PWR_ISO_EN;
1807 value[0] = (u8) tmp;
1808 value[1] = (u8) (tmp >> 8);
1809 value[2] = (u8) (tmp >> 16);
1810 value[3] = (u8) (tmp >> 24);
1811 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1812 PWR_CTL_EN, value, 4);
1813 msleep(PWR_SLEEP_INTERVAL);
1814 }
1815
1816 if (!(tmp & POLARIS_AVMODE_ANALOGT_TV)) {
1817 tmp |= POLARIS_AVMODE_ANALOGT_TV;
1818 value[0] = (u8) tmp;
1819 value[1] = (u8) (tmp >> 8);
1820 value[2] = (u8) (tmp >> 16);
1821 value[3] = (u8) (tmp >> 24);
1822 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1823 PWR_CTL_EN, value, 4);
1824 msleep(PWR_SLEEP_INTERVAL);
1825 }
1826
1827 if ((dev->model == CX231XX_BOARD_CNXT_RDE_250) ||
1828 (dev->model == CX231XX_BOARD_CNXT_RDU_250)) {
1829 /* tuner path to channel 1 from port 3 */
1830 cx231xx_enable_i2c_for_tuner(dev, I2C_3);
1831
1832 if (dev->cx231xx_reset_analog_tuner)
1833 dev->cx231xx_reset_analog_tuner(dev);
1834 }
1835 break;
1836
1837 case POLARIS_AVMODE_DIGITAL:
1838 if (!(tmp & PWR_TUNER_EN)) {
1839 tmp |= (PWR_TUNER_EN);
1840 value[0] = (u8) tmp;
1841 value[1] = (u8) (tmp >> 8);
1842 value[2] = (u8) (tmp >> 16);
1843 value[3] = (u8) (tmp >> 24);
1844 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1845 PWR_CTL_EN, value, 4);
1846 msleep(PWR_SLEEP_INTERVAL);
1847 }
1848 if (!(tmp & PWR_AV_EN)) {
1849 tmp |= PWR_AV_EN;
1850 value[0] = (u8) tmp;
1851 value[1] = (u8) (tmp >> 8);
1852 value[2] = (u8) (tmp >> 16);
1853 value[3] = (u8) (tmp >> 24);
1854 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1855 PWR_CTL_EN, value, 4);
1856 msleep(PWR_SLEEP_INTERVAL);
1857 }
1858 if (!(tmp & PWR_ISO_EN)) {
1859 tmp |= PWR_ISO_EN;
1860 value[0] = (u8) tmp;
1861 value[1] = (u8) (tmp >> 8);
1862 value[2] = (u8) (tmp >> 16);
1863 value[3] = (u8) (tmp >> 24);
1864 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1865 PWR_CTL_EN, value, 4);
1866 msleep(PWR_SLEEP_INTERVAL);
1867 }
1868
1869 tmp |= POLARIS_AVMODE_DIGITAL | I2C_DEMOD_EN;
1870 value[0] = (u8) tmp;
1871 value[1] = (u8) (tmp >> 8);
1872 value[2] = (u8) (tmp >> 16);
1873 value[3] = (u8) (tmp >> 24);
1874 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1875 PWR_CTL_EN, value, 4);
1876 msleep(PWR_SLEEP_INTERVAL);
1877
1878 if (!(tmp & PWR_DEMOD_EN)) {
1879 tmp |= PWR_DEMOD_EN;
1880 value[0] = (u8) tmp;
1881 value[1] = (u8) (tmp >> 8);
1882 value[2] = (u8) (tmp >> 16);
1883 value[3] = (u8) (tmp >> 24);
1884 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1885 PWR_CTL_EN, value, 4);
1886 msleep(PWR_SLEEP_INTERVAL);
1887 }
1888
1889 if ((dev->model == CX231XX_BOARD_CNXT_RDE_250) ||
1890 (dev->model == CX231XX_BOARD_CNXT_RDU_250)) {
1891 /* tuner path to channel 1 from port 3 */
1892 cx231xx_enable_i2c_for_tuner(dev, I2C_3);
1893
1894 if (dev->cx231xx_reset_analog_tuner)
1895 dev->cx231xx_reset_analog_tuner(dev);
1896 }
1897 break;
1898
1899 default:
1900 break;
1901 }
1902
1903 msleep(PWR_SLEEP_INTERVAL);
1904
1905 /* For power saving, only enable Pwr_resetout_n
1906 when digital TV is selected. */
1907 if (mode == POLARIS_AVMODE_DIGITAL) {
1908 tmp |= PWR_RESETOUT_EN;
1909 value[0] = (u8) tmp;
1910 value[1] = (u8) (tmp >> 8);
1911 value[2] = (u8) (tmp >> 16);
1912 value[3] = (u8) (tmp >> 24);
1913 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
1914 PWR_CTL_EN, value, 4);
1915 msleep(PWR_SLEEP_INTERVAL);
1916 }
1917
1918 /* update power control for afe */
1919 status = cx231xx_afe_update_power_control(dev, mode);
1920
1921 /* update power control for i2s_blk */
1922 status = cx231xx_i2s_blk_update_power_control(dev, mode);
1923
1924 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, value,
1925 4);
1926 cx231xx_info(" The data of PWR_CTL_EN register 0x74"
1927 "=0x%0x,0x%0x,0x%0x,0x%0x\n",
1928 value[0], value[1], value[2], value[3]);
1929
1930 return status;
1931}
1932
1933int cx231xx_power_suspend(struct cx231xx *dev)
1934{
1935 u8 value[4] = { 0, 0, 0, 0 };
1936 u32 tmp = 0;
1937 int status = 0;
1938
1939 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN,
1940 value, 4);
1941 if (status > 0)
1942 return status;
1943
1944 tmp = *((u32 *) value);
1945 tmp &= (~PWR_MODE_MASK);
1946
1947 value[0] = (u8) tmp;
1948 value[1] = (u8) (tmp >> 8);
1949 value[2] = (u8) (tmp >> 16);
1950 value[3] = (u8) (tmp >> 24);
1951 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, PWR_CTL_EN,
1952 value, 4);
1953
1954 return status;
1955}
1956
1957/******************************************************************************
1958 * S T R E A M C O N T R O L functions *
1959 ******************************************************************************/
1960int cx231xx_start_stream(struct cx231xx *dev, u32 ep_mask)
1961{
1962 u8 value[4] = { 0x0, 0x0, 0x0, 0x0 };
1963 u32 tmp = 0;
1964 int status = 0;
1965
1966 cx231xx_info("cx231xx_start_stream():: ep_mask = %x\n", ep_mask);
1967 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, EP_MODE_SET,
1968 value, 4);
1969 if (status < 0)
1970 return status;
1971
1972 tmp = *((u32 *) value);
1973 tmp |= ep_mask;
1974 value[0] = (u8) tmp;
1975 value[1] = (u8) (tmp >> 8);
1976 value[2] = (u8) (tmp >> 16);
1977 value[3] = (u8) (tmp >> 24);
1978
1979 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, EP_MODE_SET,
1980 value, 4);
1981
1982 return status;
1983}
1984
1985int cx231xx_stop_stream(struct cx231xx *dev, u32 ep_mask)
1986{
1987 u8 value[4] = { 0x0, 0x0, 0x0, 0x0 };
1988 u32 tmp = 0;
1989 int status = 0;
1990
1991 cx231xx_info("cx231xx_stop_stream():: ep_mask = %x\n", ep_mask);
1992 status =
1993 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, EP_MODE_SET, value, 4);
1994 if (status < 0)
1995 return status;
1996
1997 tmp = *((u32 *) value);
1998 tmp &= (~ep_mask);
1999 value[0] = (u8) tmp;
2000 value[1] = (u8) (tmp >> 8);
2001 value[2] = (u8) (tmp >> 16);
2002 value[3] = (u8) (tmp >> 24);
2003
2004 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, EP_MODE_SET,
2005 value, 4);
2006
2007 return status;
2008}
2009
2010int cx231xx_initialize_stream_xfer(struct cx231xx *dev, u32 media_type)
2011{
2012 int status = 0;
2013
2014 if (dev->udev->speed == USB_SPEED_HIGH) {
2015 switch (media_type) {
2016 case 81: /* audio */
2017 cx231xx_info("%s: Audio enter HANC\n", __func__);
2018 status =
2019 cx231xx_mode_register(dev, TS_MODE_REG, 0x9300);
2020 break;
2021
2022 case 2: /* vbi */
2023 cx231xx_info("%s: set vanc registers\n", __func__);
2024 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x300);
2025 break;
2026
2027 case 3: /* sliced cc */
2028 cx231xx_info("%s: set hanc registers\n", __func__);
2029 status =
2030 cx231xx_mode_register(dev, TS_MODE_REG, 0x1300);
2031 break;
2032
2033 case 0: /* video */
2034 cx231xx_info("%s: set video registers\n", __func__);
2035 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x100);
2036 break;
2037
2038 case 4: /* ts1 */
2039 cx231xx_info("%s: set ts1 registers\n", __func__);
2040 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x101);
2041 status = cx231xx_mode_register(dev, TS1_CFG_REG, 0x400);
2042 break;
2043 case 6: /* ts1 parallel mode */
2044 cx231xx_info("%s: set ts1 parrallel mode registers\n",
2045 __func__);
2046 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x100);
2047 status = cx231xx_mode_register(dev, TS1_CFG_REG, 0x400);
2048 break;
2049 }
2050 } else {
2051 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x101);
2052 }
2053
2054 return status;
2055}
2056
2057int cx231xx_capture_start(struct cx231xx *dev, int start, u8 media_type)
2058{
2059 int rc;
2060 u32 ep_mask = -1;
2061 struct pcb_config *pcb_config;
2062
2063 /* get EP for media type */
2064 pcb_config = (struct pcb_config *)&dev->current_pcb_config;
2065
2066 if (pcb_config->config_num == 1) {
2067 switch (media_type) {
2068 case 0: /* Video */
2069 ep_mask = ENABLE_EP4; /* ep4 [00:1000] */
2070 break;
2071 case 1: /* Audio */
2072 ep_mask = ENABLE_EP3; /* ep3 [00:0100] */
2073 break;
2074 case 2: /* Vbi */
2075 ep_mask = ENABLE_EP5; /* ep5 [01:0000] */
2076 break;
2077 case 3: /* Sliced_cc */
2078 ep_mask = ENABLE_EP6; /* ep6 [10:0000] */
2079 break;
2080 case 4: /* ts1 */
2081 case 6: /* ts1 parallel mode */
2082 ep_mask = ENABLE_EP1; /* ep1 [00:0001] */
2083 break;
2084 case 5: /* ts2 */
2085 ep_mask = ENABLE_EP2; /* ep2 [00:0010] */
2086 break;
2087 }
2088
2089 } else if (pcb_config->config_num > 1) {
2090 switch (media_type) {
2091 case 0: /* Video */
2092 ep_mask = ENABLE_EP4; /* ep4 [00:1000] */
2093 break;
2094 case 1: /* Audio */
2095 ep_mask = ENABLE_EP3; /* ep3 [00:0100] */
2096 break;
2097 case 2: /* Vbi */
2098 ep_mask = ENABLE_EP5; /* ep5 [01:0000] */
2099 break;
2100 case 3: /* Sliced_cc */
2101 ep_mask = ENABLE_EP6; /* ep6 [10:0000] */
2102 break;
2103 case 4: /* ts1 */
2104 case 6: /* ts1 parallel mode */
2105 ep_mask = ENABLE_EP1; /* ep1 [00:0001] */
2106 break;
2107 case 5: /* ts2 */
2108 ep_mask = ENABLE_EP2; /* ep2 [00:0010] */
2109 break;
2110 }
2111
2112 }
2113
2114 if (start) {
2115 rc = cx231xx_initialize_stream_xfer(dev, media_type);
2116
2117 if (rc < 0)
2118 return rc;
2119
2120 /* enable video capture */
2121 if (ep_mask > 0)
2122 rc = cx231xx_start_stream(dev, ep_mask);
2123 } else {
2124 /* disable video capture */
2125 if (ep_mask > 0)
2126 rc = cx231xx_stop_stream(dev, ep_mask);
2127 }
2128
2129 if (dev->mode == CX231XX_ANALOG_MODE)
2130 ;/* do any in Analog mode */
2131 else
2132 ;/* do any in digital mode */
2133
2134 return rc;
2135}
2136EXPORT_SYMBOL_GPL(cx231xx_capture_start);
2137
2138/*****************************************************************************
2139* G P I O B I T control functions *
2140******************************************************************************/
2141int cx231xx_set_gpio_bit(struct cx231xx *dev, u32 gpio_bit, u8 * gpio_val)
2142{
2143 int status = 0;
2144
2145 status = cx231xx_send_gpio_cmd(dev, gpio_bit, gpio_val, 4, 0, 0);
2146
2147 return status;
2148}
2149
2150int cx231xx_get_gpio_bit(struct cx231xx *dev, u32 gpio_bit, u8 * gpio_val)
2151{
2152 int status = 0;
2153
2154 status = cx231xx_send_gpio_cmd(dev, gpio_bit, gpio_val, 4, 0, 1);
2155
2156 return status;
2157}
2158
2159/*
2160* cx231xx_set_gpio_direction
2161* Sets the direction of the GPIO pin to input or output
2162*
2163* Parameters :
2164* pin_number : The GPIO Pin number to program the direction for
2165* from 0 to 31
2166* pin_value : The Direction of the GPIO Pin under reference.
2167* 0 = Input direction
2168* 1 = Output direction
2169*/
2170int cx231xx_set_gpio_direction(struct cx231xx *dev,
2171 int pin_number, int pin_value)
2172{
2173 int status = 0;
2174 u32 value = 0;
2175
2176 /* Check for valid pin_number - if 32 , bail out */
2177 if (pin_number >= 32)
2178 return -EINVAL;
2179
2180 /* input */
2181 if (pin_value == 0)
2182 value = dev->gpio_dir & (~(1 << pin_number)); /* clear */
2183 else
2184 value = dev->gpio_dir | (1 << pin_number);
2185
2186 status = cx231xx_set_gpio_bit(dev, value, (u8 *) &dev->gpio_val);
2187
2188 /* cache the value for future */
2189 dev->gpio_dir = value;
2190
2191 return status;
2192}
2193
2194/*
2195* cx231xx_set_gpio_value
2196* Sets the value of the GPIO pin to Logic high or low. The Pin under
2197* reference should ALREADY BE SET IN OUTPUT MODE !!!!!!!!!
2198*
2199* Parameters :
2200* pin_number : The GPIO Pin number to program the direction for
2201* pin_value : The value of the GPIO Pin under reference.
2202* 0 = set it to 0
2203* 1 = set it to 1
2204*/
2205int cx231xx_set_gpio_value(struct cx231xx *dev, int pin_number, int pin_value)
2206{
2207 int status = 0;
2208 u32 value = 0;
2209
2210 /* Check for valid pin_number - if 0xFF , bail out */
2211 if (pin_number >= 32)
2212 return -EINVAL;
2213
2214 /* first do a sanity check - if the Pin is not output, make it output */
2215 if ((dev->gpio_dir & (1 << pin_number)) == 0x00) {
2216 /* It was in input mode */
2217 value = dev->gpio_dir | (1 << pin_number);
2218 dev->gpio_dir = value;
2219 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2220 (u8 *) &dev->gpio_val);
2221 value = 0;
2222 }
2223
2224 if (pin_value == 0)
2225 value = dev->gpio_val & (~(1 << pin_number));
2226 else
2227 value = dev->gpio_val | (1 << pin_number);
2228
2229 /* store the value */
2230 dev->gpio_val = value;
2231
2232 /* toggle bit0 of GP_IO */
2233 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2234
2235 return status;
2236}
2237
2238/*****************************************************************************
2239* G P I O I2C related functions *
2240******************************************************************************/
2241int cx231xx_gpio_i2c_start(struct cx231xx *dev)
2242{
2243 int status = 0;
2244
2245 /* set SCL to output 1 ; set SDA to output 1 */
2246 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio;
2247 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio;
2248 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2249 dev->gpio_val |= 1 << dev->board.tuner_sda_gpio;
2250
2251 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2252 if (status < 0)
2253 return -EINVAL;
2254
2255 /* set SCL to output 1; set SDA to output 0 */
2256 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2257 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2258
2259 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2260 if (status < 0)
2261 return -EINVAL;
2262
2263 /* set SCL to output 0; set SDA to output 0 */
2264 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2265 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2266
2267 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2268 if (status < 0)
2269 return -EINVAL;
2270
2271 return status;
2272}
2273
2274int cx231xx_gpio_i2c_end(struct cx231xx *dev)
2275{
2276 int status = 0;
2277
2278 /* set SCL to output 0; set SDA to output 0 */
2279 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio;
2280 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio;
2281
2282 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2283 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2284
2285 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2286 if (status < 0)
2287 return -EINVAL;
2288
2289 /* set SCL to output 1; set SDA to output 0 */
2290 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2291 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2292
2293 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2294 if (status < 0)
2295 return -EINVAL;
2296
2297 /* set SCL to input ,release SCL cable control
2298 set SDA to input ,release SDA cable control */
2299 dev->gpio_dir &= ~(1 << dev->board.tuner_scl_gpio);
2300 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio);
2301
2302 status =
2303 cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2304 if (status < 0)
2305 return -EINVAL;
2306
2307 return status;
2308}
2309
2310int cx231xx_gpio_i2c_write_byte(struct cx231xx *dev, u8 data)
2311{
2312 int status = 0;
2313 u8 i;
2314
2315 /* set SCL to output ; set SDA to output */
2316 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio;
2317 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio;
2318
2319 for (i = 0; i < 8; i++) {
2320 if (((data << i) & 0x80) == 0) {
2321 /* set SCL to output 0; set SDA to output 0 */
2322 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2323 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2324 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2325 (u8 *)&dev->gpio_val);
2326
2327 /* set SCL to output 1; set SDA to output 0 */
2328 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2329 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2330 (u8 *)&dev->gpio_val);
2331
2332 /* set SCL to output 0; set SDA to output 0 */
2333 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2334 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2335 (u8 *)&dev->gpio_val);
2336 } else {
2337 /* set SCL to output 0; set SDA to output 1 */
2338 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2339 dev->gpio_val |= 1 << dev->board.tuner_sda_gpio;
2340 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2341 (u8 *)&dev->gpio_val);
2342
2343 /* set SCL to output 1; set SDA to output 1 */
2344 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2345 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2346 (u8 *)&dev->gpio_val);
2347
2348 /* set SCL to output 0; set SDA to output 1 */
2349 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2350 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2351 (u8 *)&dev->gpio_val);
2352 }
2353 }
2354 return status;
2355}
2356
2357int cx231xx_gpio_i2c_read_byte(struct cx231xx *dev, u8 * buf)
2358{
2359 u8 value = 0;
2360 int status = 0;
2361 u32 gpio_logic_value = 0;
2362 u8 i;
2363
2364 /* read byte */
2365 for (i = 0; i < 8; i++) { /* send write I2c addr */
2366
2367 /* set SCL to output 0; set SDA to input */
2368 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2369 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2370 (u8 *)&dev->gpio_val);
2371
2372 /* set SCL to output 1; set SDA to input */
2373 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2374 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir,
2375 (u8 *)&dev->gpio_val);
2376
2377 /* get SDA data bit */
2378 gpio_logic_value = dev->gpio_val;
2379 status = cx231xx_get_gpio_bit(dev, dev->gpio_dir,
2380 (u8 *)&dev->gpio_val);
2381 if ((dev->gpio_val & (1 << dev->board.tuner_sda_gpio)) != 0)
2382 value |= (1 << (8 - i - 1));
2383
2384 dev->gpio_val = gpio_logic_value;
2385 }
2386
2387 /* set SCL to output 0,finish the read latest SCL signal.
2388 !!!set SDA to input, never to modify SDA direction at
2389 the same times */
2390 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2391 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2392
2393 /* store the value */
2394 *buf = value & 0xff;
2395
2396 return status;
2397}
2398
2399int cx231xx_gpio_i2c_read_ack(struct cx231xx *dev)
2400{
2401 int status = 0;
2402 u32 gpio_logic_value = 0;
2403 int nCnt = 10;
2404 int nInit = nCnt;
2405
2406 /* clock stretch; set SCL to input; set SDA to input;
2407 get SCL value till SCL = 1 */
2408 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio);
2409 dev->gpio_dir &= ~(1 << dev->board.tuner_scl_gpio);
2410
2411 gpio_logic_value = dev->gpio_val;
2412 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2413
2414 do {
2415 msleep(2);
2416 status = cx231xx_get_gpio_bit(dev, dev->gpio_dir,
2417 (u8 *)&dev->gpio_val);
2418 nCnt--;
2419 } while (((dev->gpio_val &
2420 (1 << dev->board.tuner_scl_gpio)) == 0) &&
2421 (nCnt > 0));
2422
2423 if (nCnt == 0)
2424 cx231xx_info("No ACK after %d msec -GPIO I2C failed!",
2425 nInit * 10);
2426
2427 /* readAck
2428 throuth clock stretch ,slave has given a SCL signal,
2429 so the SDA data can be directly read. */
2430 status = cx231xx_get_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2431
2432 if ((dev->gpio_val & 1 << dev->board.tuner_sda_gpio) == 0) {
2433 dev->gpio_val = gpio_logic_value;
2434 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2435 status = 0;
2436 } else {
2437 dev->gpio_val = gpio_logic_value;
2438 dev->gpio_val |= (1 << dev->board.tuner_sda_gpio);
2439 }
2440
2441 /* read SDA end, set the SCL to output 0, after this operation,
2442 SDA direction can be changed. */
2443 dev->gpio_val = gpio_logic_value;
2444 dev->gpio_dir |= (1 << dev->board.tuner_scl_gpio);
2445 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2446 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2447
2448 return status;
2449}
2450
2451int cx231xx_gpio_i2c_write_ack(struct cx231xx *dev)
2452{
2453 int status = 0;
2454
2455 /* set SDA to ouput */
2456 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio;
2457 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2458
2459 /* set SCL = 0 (output); set SDA = 0 (output) */
2460 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio);
2461 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2462 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2463
2464 /* set SCL = 1 (output); set SDA = 0 (output) */
2465 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2466 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2467
2468 /* set SCL = 0 (output); set SDA = 0 (output) */
2469 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2470 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2471
2472 /* set SDA to input,and then the slave will read data from SDA. */
2473 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio);
2474 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2475
2476 return status;
2477}
2478
2479int cx231xx_gpio_i2c_write_nak(struct cx231xx *dev)
2480{
2481 int status = 0;
2482
2483 /* set scl to output ; set sda to input */
2484 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio;
2485 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio);
2486 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2487
2488 /* set scl to output 0; set sda to input */
2489 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio);
2490 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2491
2492 /* set scl to output 1; set sda to input */
2493 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio;
2494 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, (u8 *)&dev->gpio_val);
2495
2496 return status;
2497}
2498
2499/*****************************************************************************
2500* G P I O I2C related functions *
2501******************************************************************************/
2502/* cx231xx_gpio_i2c_read
2503 * Function to read data from gpio based I2C interface
2504 */
2505int cx231xx_gpio_i2c_read(struct cx231xx *dev, u8 dev_addr, u8 * buf, u8 len)
2506{
2507 int status = 0;
2508 int i = 0;
2509
2510 /* get the lock */
2511 mutex_lock(&dev->gpio_i2c_lock);
2512
2513 /* start */
2514 status = cx231xx_gpio_i2c_start(dev);
2515
2516 /* write dev_addr */
2517 status = cx231xx_gpio_i2c_write_byte(dev, (dev_addr << 1) + 1);
2518
2519 /* readAck */
2520 status = cx231xx_gpio_i2c_read_ack(dev);
2521
2522 /* read data */
2523 for (i = 0; i < len; i++) {
2524 /* read data */
2525 buf[i] = 0;
2526 status = cx231xx_gpio_i2c_read_byte(dev, &buf[i]);
2527
2528 if ((i + 1) != len) {
2529 /* only do write ack if we more length */
2530 status = cx231xx_gpio_i2c_write_ack(dev);
2531 }
2532 }
2533
2534 /* write NAK - inform reads are complete */
2535 status = cx231xx_gpio_i2c_write_nak(dev);
2536
2537 /* write end */
2538 status = cx231xx_gpio_i2c_end(dev);
2539
2540 /* release the lock */
2541 mutex_unlock(&dev->gpio_i2c_lock);
2542
2543 return status;
2544}
2545
2546/* cx231xx_gpio_i2c_write
2547 * Function to write data to gpio based I2C interface
2548 */
2549int cx231xx_gpio_i2c_write(struct cx231xx *dev, u8 dev_addr, u8 * buf, u8 len)
2550{
2551 int status = 0;
2552 int i = 0;
2553
2554 /* get the lock */
2555 mutex_lock(&dev->gpio_i2c_lock);
2556
2557 /* start */
2558 status = cx231xx_gpio_i2c_start(dev);
2559
2560 /* write dev_addr */
2561 status = cx231xx_gpio_i2c_write_byte(dev, dev_addr << 1);
2562
2563 /* read Ack */
2564 status = cx231xx_gpio_i2c_read_ack(dev);
2565
2566 for (i = 0; i < len; i++) {
2567 /* Write data */
2568 status = cx231xx_gpio_i2c_write_byte(dev, buf[i]);
2569
2570 /* read Ack */
2571 status = cx231xx_gpio_i2c_read_ack(dev);
2572 }
2573
2574 /* write End */
2575 status = cx231xx_gpio_i2c_end(dev);
2576
2577 /* release the lock */
2578 mutex_unlock(&dev->gpio_i2c_lock);
2579
2580 return 0;
2581}
diff --git a/drivers/media/video/cx231xx/cx231xx-cards.c b/drivers/media/video/cx231xx/cx231xx-cards.c
new file mode 100644
index 000000000000..c8a32b1b5381
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-cards.c
@@ -0,0 +1,914 @@
1/*
2 cx231xx-cards.c - driver for Conexant Cx23100/101/102
3 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6 Based on em28xx driver
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/init.h>
24#include <linux/module.h>
25#include <linux/delay.h>
26#include <linux/i2c.h>
27#include <linux/usb.h>
28#include <media/tuner.h>
29#include <media/tveeprom.h>
30#include <media/v4l2-common.h>
31#include <media/v4l2-chip-ident.h>
32
33#include <media/cx25840.h>
34#include "xc5000.h"
35
36#include "cx231xx.h"
37
38static int tuner = -1;
39module_param(tuner, int, 0444);
40MODULE_PARM_DESC(tuner, "tuner type");
41
42static unsigned int disable_ir;
43module_param(disable_ir, int, 0444);
44MODULE_PARM_DESC(disable_ir, "disable infrared remote support");
45
46/* Bitmask marking allocated devices from 0 to CX231XX_MAXBOARDS */
47static unsigned long cx231xx_devused;
48
49/*
50 * Reset sequences for analog/digital modes
51 */
52
53static struct cx231xx_reg_seq RDE250_XCV_TUNER[] = {
54 {0x03, 0x01, 10},
55 {0x03, 0x00, 30},
56 {0x03, 0x01, 10},
57 {-1, -1, -1},
58};
59
60/*
61 * Board definitions
62 */
63struct cx231xx_board cx231xx_boards[] = {
64 [CX231XX_BOARD_UNKNOWN] = {
65 .name = "Unknown CX231xx video grabber",
66 .tuner_type = TUNER_ABSENT,
67 .input = {{
68 .type = CX231XX_VMUX_TELEVISION,
69 .vmux = CX231XX_VIN_3_1,
70 .amux = CX231XX_AMUX_VIDEO,
71 .gpio = 0,
72 }, {
73 .type = CX231XX_VMUX_COMPOSITE1,
74 .vmux = CX231XX_VIN_2_1,
75 .amux = CX231XX_AMUX_LINE_IN,
76 .gpio = 0,
77 }, {
78 .type = CX231XX_VMUX_SVIDEO,
79 .vmux = CX231XX_VIN_1_1 |
80 (CX231XX_VIN_1_2 << 8) |
81 CX25840_SVIDEO_ON,
82 .amux = CX231XX_AMUX_LINE_IN,
83 .gpio = 0,
84 }
85 },
86 },
87 [CX231XX_BOARD_CNXT_RDE_250] = {
88 .name = "Conexant Hybrid TV - RDE250",
89 .tuner_type = TUNER_XC5000,
90 .tuner_addr = 0x61,
91 .tuner_gpio = RDE250_XCV_TUNER,
92 .tuner_sif_gpio = 0x05,
93 .tuner_scl_gpio = 0x1a,
94 .tuner_sda_gpio = 0x1b,
95 .decoder = CX231XX_AVDECODER,
96 .demod_xfer_mode = 0,
97 .ctl_pin_status_mask = 0xFFFFFFC4,
98 .agc_analog_digital_select_gpio = 0x0c,
99 .gpio_pin_status_mask = 0x4001000,
100 .tuner_i2c_master = 1,
101 .demod_i2c_master = 2,
102 .has_dvb = 1,
103 .demod_addr = 0x02,
104 .norm = V4L2_STD_PAL,
105
106 .input = {{
107 .type = CX231XX_VMUX_TELEVISION,
108 .vmux = CX231XX_VIN_3_1,
109 .amux = CX231XX_AMUX_VIDEO,
110 .gpio = 0,
111 }, {
112 .type = CX231XX_VMUX_COMPOSITE1,
113 .vmux = CX231XX_VIN_2_1,
114 .amux = CX231XX_AMUX_LINE_IN,
115 .gpio = 0,
116 }, {
117 .type = CX231XX_VMUX_SVIDEO,
118 .vmux = CX231XX_VIN_1_1 |
119 (CX231XX_VIN_1_2 << 8) |
120 CX25840_SVIDEO_ON,
121 .amux = CX231XX_AMUX_LINE_IN,
122 .gpio = 0,
123 }
124 },
125 },
126
127 [CX231XX_BOARD_CNXT_RDU_250] = {
128 .name = "Conexant Hybrid TV - RDU250",
129 .tuner_type = TUNER_XC5000,
130 .tuner_addr = 0x61,
131 .tuner_gpio = RDE250_XCV_TUNER,
132 .tuner_sif_gpio = 0x05,
133 .tuner_scl_gpio = 0x1a,
134 .tuner_sda_gpio = 0x1b,
135 .decoder = CX231XX_AVDECODER,
136 .demod_xfer_mode = 0,
137 .ctl_pin_status_mask = 0xFFFFFFC4,
138 .agc_analog_digital_select_gpio = 0x0c,
139 .gpio_pin_status_mask = 0x4001000,
140 .tuner_i2c_master = 1,
141 .demod_i2c_master = 2,
142 .has_dvb = 1,
143 .demod_addr = 0x32,
144 .norm = V4L2_STD_NTSC,
145
146 .input = {{
147 .type = CX231XX_VMUX_TELEVISION,
148 .vmux = CX231XX_VIN_3_1,
149 .amux = CX231XX_AMUX_VIDEO,
150 .gpio = 0,
151 }, {
152 .type = CX231XX_VMUX_COMPOSITE1,
153 .vmux = CX231XX_VIN_2_1,
154 .amux = CX231XX_AMUX_LINE_IN,
155 .gpio = 0,
156 }, {
157 .type = CX231XX_VMUX_SVIDEO,
158 .vmux = CX231XX_VIN_1_1 |
159 (CX231XX_VIN_1_2 << 8) |
160 CX25840_SVIDEO_ON,
161 .amux = CX231XX_AMUX_LINE_IN,
162 .gpio = 0,
163 }
164 },
165 },
166};
167const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards);
168
169/* table of devices that work with this driver */
170struct usb_device_id cx231xx_id_table[] = {
171 {USB_DEVICE(0x0572, 0x5A3C),
172 .driver_info = CX231XX_BOARD_UNKNOWN},
173 {USB_DEVICE(0x0572, 0x58A2),
174 .driver_info = CX231XX_BOARD_CNXT_RDE_250},
175 {USB_DEVICE(0x0572, 0x58A1),
176 .driver_info = CX231XX_BOARD_CNXT_RDU_250},
177 {},
178};
179
180MODULE_DEVICE_TABLE(usb, cx231xx_id_table);
181
182/* cx231xx_tuner_callback
183 * will be used to reset XC5000 tuner using GPIO pin
184 */
185
186int cx231xx_tuner_callback(void *ptr, int component, int command, int arg)
187{
188 int rc = 0;
189 struct cx231xx *dev = ptr;
190
191 if (dev->tuner_type == TUNER_XC5000) {
192 if (command == XC5000_TUNER_RESET) {
193 cx231xx_info
194 ("Tuner CB: RESET: cmd %d : tuner type %d \n",
195 command, dev->tuner_type);
196 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit,
197 1);
198 msleep(10);
199 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit,
200 0);
201 msleep(330);
202 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit,
203 1);
204 msleep(10);
205 }
206 }
207 return rc;
208}
209EXPORT_SYMBOL_GPL(cx231xx_tuner_callback);
210
211static inline void cx231xx_set_model(struct cx231xx *dev)
212{
213 memcpy(&dev->board, &cx231xx_boards[dev->model], sizeof(dev->board));
214}
215
216/* Since cx231xx_pre_card_setup() requires a proper dev->model,
217 * this won't work for boards with generic PCI IDs
218 */
219void cx231xx_pre_card_setup(struct cx231xx *dev)
220{
221
222 cx231xx_set_model(dev);
223
224 cx231xx_info("Identified as %s (card=%d)\n",
225 dev->board.name, dev->model);
226
227 /* set the direction for GPIO pins */
228 cx231xx_set_gpio_direction(dev, dev->board.tuner_gpio->bit, 1);
229 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, 1);
230 cx231xx_set_gpio_direction(dev, dev->board.tuner_sif_gpio, 1);
231
232 /* request some modules if any required */
233
234 /* reset the Tuner */
235 cx231xx_gpio_set(dev, dev->board.tuner_gpio);
236
237 /* set the mode to Analog mode initially */
238 cx231xx_set_mode(dev, CX231XX_ANALOG_MODE);
239
240 /* Unlock device */
241 /* cx231xx_set_mode(dev, CX231XX_SUSPEND); */
242
243}
244
245static void cx231xx_config_tuner(struct cx231xx *dev)
246{
247 struct tuner_setup tun_setup;
248 struct v4l2_frequency f;
249
250 if (dev->tuner_type == TUNER_ABSENT)
251 return;
252
253 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
254 tun_setup.type = dev->tuner_type;
255 tun_setup.addr = dev->tuner_addr;
256 tun_setup.tuner_callback = cx231xx_tuner_callback;
257
258 tuner_call(dev, tuner, s_type_addr, &tun_setup);
259
260#if 0
261 if (tun_setup.type == TUNER_XC5000) {
262 static struct xc2028_ctrl ctrl = {
263 .fname = XC5000_DEFAULT_FIRMWARE,
264 .max_len = 64,
265 .demod = 0;
266 };
267 struct v4l2_priv_tun_config cfg = {
268 .tuner = dev->tuner_type,
269 .priv = &ctrl,
270 };
271 tuner_call(dev, tuner, s_config, &cfg);
272 }
273#endif
274 /* configure tuner */
275 f.tuner = 0;
276 f.type = V4L2_TUNER_ANALOG_TV;
277 f.frequency = 9076; /* just a magic number */
278 dev->ctl_freq = f.frequency;
279 call_all(dev, tuner, s_frequency, &f);
280
281}
282
283/* ----------------------------------------------------------------------- */
284void cx231xx_set_ir(struct cx231xx *dev, struct IR_i2c *ir)
285{
286 if (disable_ir) {
287 ir->get_key = NULL;
288 return;
289 }
290
291 /* detect & configure */
292 switch (dev->model) {
293
294 case CX231XX_BOARD_CNXT_RDE_250:
295 break;
296 case CX231XX_BOARD_CNXT_RDU_250:
297 break;
298 default:
299 break;
300 }
301}
302
303void cx231xx_card_setup(struct cx231xx *dev)
304{
305
306 cx231xx_set_model(dev);
307
308 dev->tuner_type = cx231xx_boards[dev->model].tuner_type;
309 if (cx231xx_boards[dev->model].tuner_addr)
310 dev->tuner_addr = cx231xx_boards[dev->model].tuner_addr;
311
312 /* request some modules */
313 if (dev->board.decoder == CX231XX_AVDECODER) {
314 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
315 &dev->i2c_bus[0].i2c_adap,
316 "cx25840", "cx25840", 0x88 >> 1);
317 if (dev->sd_cx25840 == NULL)
318 cx231xx_info("cx25840 subdev registration failure\n");
319 cx25840_call(dev, core, load_fw);
320
321 }
322
323 if (dev->board.tuner_type != TUNER_ABSENT) {
324 dev->sd_tuner = v4l2_i2c_new_subdev(&dev->v4l2_dev,
325 &dev->i2c_bus[1].i2c_adap,
326 "tuner", "tuner", 0xc2 >> 1);
327 if (dev->sd_tuner == NULL)
328 cx231xx_info("tuner subdev registration failure\n");
329
330 cx231xx_config_tuner(dev);
331 }
332
333 cx231xx_config_tuner(dev);
334
335#if 0
336 /* TBD IR will be added later */
337 cx231xx_ir_init(dev);
338#endif
339}
340
341/*
342 * cx231xx_config()
343 * inits registers with sane defaults
344 */
345int cx231xx_config(struct cx231xx *dev)
346{
347 /* TBD need to add cx231xx specific code */
348 dev->mute = 1; /* maybe not the right place... */
349 dev->volume = 0x1f;
350
351 return 0;
352}
353
354/*
355 * cx231xx_config_i2c()
356 * configure i2c attached devices
357 */
358void cx231xx_config_i2c(struct cx231xx *dev)
359{
360 /* u32 input = INPUT(dev->video_input)->vmux; */
361
362 call_all(dev, video, s_stream, 1);
363}
364
365/*
366 * cx231xx_realease_resources()
367 * unregisters the v4l2,i2c and usb devices
368 * called when the device gets disconected or at module unload
369*/
370void cx231xx_release_resources(struct cx231xx *dev)
371{
372
373#if 0 /* TBD IR related */
374 if (dev->ir)
375 cx231xx_ir_fini(dev);
376#endif
377
378 cx231xx_release_analog_resources(dev);
379
380 cx231xx_remove_from_devlist(dev);
381
382 cx231xx_dev_uninit(dev);
383
384 usb_put_dev(dev->udev);
385
386 /* Mark device as unused */
387 cx231xx_devused &= ~(1 << dev->devno);
388}
389
390/*
391 * cx231xx_init_dev()
392 * allocates and inits the device structs, registers i2c bus and v4l device
393 */
394static int cx231xx_init_dev(struct cx231xx **devhandle, struct usb_device *udev,
395 int minor)
396{
397 struct cx231xx *dev = *devhandle;
398 int retval = -ENOMEM;
399 int errCode;
400 unsigned int maxh, maxw;
401
402 dev->udev = udev;
403 mutex_init(&dev->lock);
404 mutex_init(&dev->ctrl_urb_lock);
405 mutex_init(&dev->gpio_i2c_lock);
406
407 spin_lock_init(&dev->video_mode.slock);
408 spin_lock_init(&dev->vbi_mode.slock);
409 spin_lock_init(&dev->sliced_cc_mode.slock);
410
411 init_waitqueue_head(&dev->open);
412 init_waitqueue_head(&dev->wait_frame);
413 init_waitqueue_head(&dev->wait_stream);
414
415 dev->cx231xx_read_ctrl_reg = cx231xx_read_ctrl_reg;
416 dev->cx231xx_write_ctrl_reg = cx231xx_write_ctrl_reg;
417 dev->cx231xx_send_usb_command = cx231xx_send_usb_command;
418 dev->cx231xx_gpio_i2c_read = cx231xx_gpio_i2c_read;
419 dev->cx231xx_gpio_i2c_write = cx231xx_gpio_i2c_write;
420
421 /* Query cx231xx to find what pcb config it is related to */
422 initialize_cx231xx(dev);
423
424 /* Cx231xx pre card setup */
425 cx231xx_pre_card_setup(dev);
426
427 errCode = cx231xx_config(dev);
428 if (errCode) {
429 cx231xx_errdev("error configuring device\n");
430 return -ENOMEM;
431 }
432
433 /* set default norm */
434 dev->norm = dev->board.norm;
435
436 /* register i2c bus */
437 errCode = cx231xx_dev_init(dev);
438 if (errCode < 0) {
439 cx231xx_errdev("%s: cx231xx_i2c_register - errCode [%d]!\n",
440 __func__, errCode);
441 return errCode;
442 }
443
444 /* Do board specific init */
445 cx231xx_card_setup(dev);
446
447 /* configure the device */
448 cx231xx_config_i2c(dev);
449
450 maxw = norm_maxw(dev);
451 maxh = norm_maxh(dev);
452
453 /* set default image size */
454 dev->width = maxw;
455 dev->height = maxh;
456 dev->interlaced = 0;
457 dev->hscale = 0;
458 dev->vscale = 0;
459 dev->video_input = 0;
460
461 errCode = cx231xx_config(dev);
462 if (errCode < 0) {
463 cx231xx_errdev("%s: cx231xx_config - errCode [%d]!\n",
464 __func__, errCode);
465 return errCode;
466 }
467
468 /* init video dma queues */
469 INIT_LIST_HEAD(&dev->video_mode.vidq.active);
470 INIT_LIST_HEAD(&dev->video_mode.vidq.queued);
471
472 /* init vbi dma queues */
473 INIT_LIST_HEAD(&dev->vbi_mode.vidq.active);
474 INIT_LIST_HEAD(&dev->vbi_mode.vidq.queued);
475
476 /* Reset other chips required if they are tied up with GPIO pins */
477
478 cx231xx_add_into_devlist(dev);
479
480 retval = cx231xx_register_analog_devices(dev);
481 if (retval < 0) {
482 cx231xx_release_resources(dev);
483 goto fail_reg_devices;
484 }
485
486 cx231xx_init_extension(dev);
487
488 return 0;
489
490fail_reg_devices:
491 mutex_unlock(&dev->lock);
492 return retval;
493}
494
495#if defined(CONFIG_MODULES) && defined(MODULE)
496static void request_module_async(struct work_struct *work)
497{
498 struct cx231xx *dev = container_of(work,
499 struct cx231xx, request_module_wk);
500
501 if (dev->has_alsa_audio)
502 request_module("cx231xx-alsa");
503
504 if (dev->board.has_dvb)
505 request_module("cx231xx-dvb");
506
507}
508
509static void request_modules(struct cx231xx *dev)
510{
511 INIT_WORK(&dev->request_module_wk, request_module_async);
512 schedule_work(&dev->request_module_wk);
513}
514#else
515#define request_modules(dev)
516#endif /* CONFIG_MODULES */
517
518/*
519 * cx231xx_usb_probe()
520 * checks for supported devices
521 */
522static int cx231xx_usb_probe(struct usb_interface *interface,
523 const struct usb_device_id *id)
524{
525 struct usb_device *udev;
526 struct usb_interface *uif;
527 struct cx231xx *dev = NULL;
528 int retval = -ENODEV;
529 int nr = 0, ifnum;
530 int i, isoc_pipe = 0;
531 char *speed;
532 char descr[255] = "";
533 struct usb_interface *lif = NULL;
534 int skip_interface = 0;
535 struct usb_interface_assoc_descriptor *assoc_desc;
536
537 udev = usb_get_dev(interface_to_usbdev(interface));
538 ifnum = interface->altsetting[0].desc.bInterfaceNumber;
539
540 if (!ifnum) {
541 /*
542 * Interface number 0 - IR interface
543 */
544 /* Check to see next free device and mark as used */
545 nr = find_first_zero_bit(&cx231xx_devused, CX231XX_MAXBOARDS);
546 cx231xx_devused |= 1 << nr;
547
548 if (nr >= CX231XX_MAXBOARDS) {
549 cx231xx_err(DRIVER_NAME ": Supports only %i cx231xx boards.\n",
550 CX231XX_MAXBOARDS);
551 cx231xx_devused &= ~(1 << nr);
552 return -ENOMEM;
553 }
554
555 /* allocate memory for our device state and initialize it */
556 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
557 if (dev == NULL) {
558 cx231xx_err(DRIVER_NAME ": out of memory!\n");
559 cx231xx_devused &= ~(1 << nr);
560 return -ENOMEM;
561 }
562
563 snprintf(dev->name, 29, "cx231xx #%d", nr);
564 dev->devno = nr;
565 dev->model = id->driver_info;
566 dev->video_mode.alt = -1;
567 dev->interface_count++;
568
569 /* reset gpio dir and value */
570 dev->gpio_dir = 0;
571 dev->gpio_val = 0;
572 dev->xc_fw_load_done = 0;
573 dev->has_alsa_audio = 1;
574 dev->power_mode = -1;
575
576 /* 0 - vbi ; 1 -sliced cc mode */
577 dev->vbi_or_sliced_cc_mode = 0;
578
579 /* get maximum no.of IAD interfaces */
580 assoc_desc = udev->actconfig->intf_assoc[0];
581 dev->max_iad_interface_count = assoc_desc->bInterfaceCount;
582
583 /* init CIR module TBD */
584
585 /* store the current interface */
586 lif = interface;
587
588 switch (udev->speed) {
589 case USB_SPEED_LOW:
590 speed = "1.5";
591 break;
592 case USB_SPEED_UNKNOWN:
593 case USB_SPEED_FULL:
594 speed = "12";
595 break;
596 case USB_SPEED_HIGH:
597 speed = "480";
598 break;
599 default:
600 speed = "unknown";
601 }
602
603 if (udev->manufacturer)
604 strlcpy(descr, udev->manufacturer, sizeof(descr));
605
606 if (udev->product) {
607 if (*descr)
608 strlcat(descr, " ", sizeof(descr));
609 strlcat(descr, udev->product, sizeof(descr));
610 }
611 if (*descr)
612 strlcat(descr, " ", sizeof(descr));
613
614 cx231xx_info("New device %s@ %s Mbps "
615 "(%04x:%04x) with %d interfaces\n",
616 descr,
617 speed,
618 le16_to_cpu(udev->descriptor.idVendor),
619 le16_to_cpu(udev->descriptor.idProduct),
620 dev->max_iad_interface_count);
621 } else {
622 /* Get dev structure first */
623 dev = usb_get_intfdata(udev->actconfig->interface[0]);
624 if (dev == NULL) {
625 cx231xx_err(DRIVER_NAME ": out of first interface!\n");
626 return -ENODEV;
627 }
628
629 /* store the interface 0 back */
630 lif = udev->actconfig->interface[0];
631
632 /* increment interface count */
633 dev->interface_count++;
634
635 /* get device number */
636 nr = dev->devno;
637
638 /*
639 * set skip interface, for all interfaces but
640 * interface 1 and the last one
641 */
642 if ((ifnum != 1) && ((dev->interface_count - 1)
643 != dev->max_iad_interface_count))
644 skip_interface = 1;
645
646 if (ifnum == 1) {
647 assoc_desc = udev->actconfig->intf_assoc[0];
648 if (assoc_desc->bFirstInterface != ifnum) {
649 cx231xx_err(DRIVER_NAME ": Not found "
650 "matching IAD interface\n");
651 return -ENODEV;
652 }
653 }
654 }
655
656 if (skip_interface)
657 return -ENODEV;
658
659 cx231xx_info("registering interface %d\n", ifnum);
660
661 /* save our data pointer in this interface device */
662 usb_set_intfdata(lif, dev);
663
664 if ((dev->interface_count - 1) != dev->max_iad_interface_count)
665 return 0;
666
667 /*
668 * AV device initialization - only done at the last interface
669 */
670
671 /* Create v4l2 device */
672 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
673 if (retval) {
674 cx231xx_errdev("v4l2_device_register failed\n");
675 cx231xx_devused &= ~(1 << nr);
676 kfree(dev);
677 return -EIO;
678 }
679
680 /* allocate device struct */
681 retval = cx231xx_init_dev(&dev, udev, nr);
682 if (retval) {
683 cx231xx_devused &= ~(1 << dev->devno);
684 v4l2_device_unregister(&dev->v4l2_dev);
685 kfree(dev);
686 return retval;
687 }
688
689 /* compute alternate max packet sizes for video */
690 uif = udev->actconfig->interface[dev->current_pcb_config.
691 hs_config_info[0].interface_info.video_index + 1];
692
693 dev->video_mode.end_point_addr = le16_to_cpu(uif->altsetting[0].
694 endpoint[isoc_pipe].desc.bEndpointAddress);
695
696 dev->video_mode.num_alt = uif->num_altsetting;
697 cx231xx_info("EndPoint Addr 0x%x, Alternate settings: %i\n",
698 dev->video_mode.end_point_addr,
699 dev->video_mode.num_alt);
700 dev->video_mode.alt_max_pkt_size =
701 kmalloc(32 * dev->video_mode.num_alt, GFP_KERNEL);
702
703 if (dev->video_mode.alt_max_pkt_size == NULL) {
704 cx231xx_errdev("out of memory!\n");
705 cx231xx_devused &= ~(1 << nr);
706 v4l2_device_unregister(&dev->v4l2_dev);
707 kfree(dev);
708 return -ENOMEM;
709 }
710
711 for (i = 0; i < dev->video_mode.num_alt; i++) {
712 u16 tmp = le16_to_cpu(uif->altsetting[i].endpoint[isoc_pipe].
713 desc.wMaxPacketSize);
714 dev->video_mode.alt_max_pkt_size[i] =
715 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
716 cx231xx_info("Alternate setting %i, max size= %i\n", i,
717 dev->video_mode.alt_max_pkt_size[i]);
718 }
719
720 /* compute alternate max packet sizes for vbi */
721 uif = udev->actconfig->interface[dev->current_pcb_config.
722 hs_config_info[0].interface_info.
723 vanc_index + 1];
724
725 dev->vbi_mode.end_point_addr =
726 le16_to_cpu(uif->altsetting[0].endpoint[isoc_pipe].desc.
727 bEndpointAddress);
728
729 dev->vbi_mode.num_alt = uif->num_altsetting;
730 cx231xx_info("EndPoint Addr 0x%x, Alternate settings: %i\n",
731 dev->vbi_mode.end_point_addr,
732 dev->vbi_mode.num_alt);
733 dev->vbi_mode.alt_max_pkt_size =
734 kmalloc(32 * dev->vbi_mode.num_alt, GFP_KERNEL);
735
736 if (dev->vbi_mode.alt_max_pkt_size == NULL) {
737 cx231xx_errdev("out of memory!\n");
738 cx231xx_devused &= ~(1 << nr);
739 v4l2_device_unregister(&dev->v4l2_dev);
740 kfree(dev);
741 return -ENOMEM;
742 }
743
744 for (i = 0; i < dev->vbi_mode.num_alt; i++) {
745 u16 tmp =
746 le16_to_cpu(uif->altsetting[i].endpoint[isoc_pipe].
747 desc.wMaxPacketSize);
748 dev->vbi_mode.alt_max_pkt_size[i] =
749 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
750 cx231xx_info("Alternate setting %i, max size= %i\n", i,
751 dev->vbi_mode.alt_max_pkt_size[i]);
752 }
753
754 /* compute alternate max packet sizes for sliced CC */
755 uif = udev->actconfig->interface[dev->current_pcb_config.
756 hs_config_info[0].interface_info.
757 hanc_index + 1];
758
759 dev->sliced_cc_mode.end_point_addr =
760 le16_to_cpu(uif->altsetting[0].endpoint[isoc_pipe].desc.
761 bEndpointAddress);
762
763 dev->sliced_cc_mode.num_alt = uif->num_altsetting;
764 cx231xx_info("EndPoint Addr 0x%x, Alternate settings: %i\n",
765 dev->sliced_cc_mode.end_point_addr,
766 dev->sliced_cc_mode.num_alt);
767 dev->sliced_cc_mode.alt_max_pkt_size =
768 kmalloc(32 * dev->sliced_cc_mode.num_alt, GFP_KERNEL);
769
770 if (dev->sliced_cc_mode.alt_max_pkt_size == NULL) {
771 cx231xx_errdev("out of memory!\n");
772 cx231xx_devused &= ~(1 << nr);
773 v4l2_device_unregister(&dev->v4l2_dev);
774 kfree(dev);
775 return -ENOMEM;
776 }
777
778 for (i = 0; i < dev->sliced_cc_mode.num_alt; i++) {
779 u16 tmp = le16_to_cpu(uif->altsetting[i].endpoint[isoc_pipe].
780 desc.wMaxPacketSize);
781 dev->sliced_cc_mode.alt_max_pkt_size[i] =
782 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
783 cx231xx_info("Alternate setting %i, max size= %i\n", i,
784 dev->sliced_cc_mode.alt_max_pkt_size[i]);
785 }
786
787 if (dev->current_pcb_config.ts1_source != 0xff) {
788 /* compute alternate max packet sizes for TS1 */
789 uif = udev->actconfig->interface[dev->current_pcb_config.
790 hs_config_info[0].
791 interface_info.
792 ts1_index + 1];
793
794 dev->ts1_mode.end_point_addr =
795 le16_to_cpu(uif->altsetting[0].endpoint[isoc_pipe].
796 desc.bEndpointAddress);
797
798 dev->ts1_mode.num_alt = uif->num_altsetting;
799 cx231xx_info("EndPoint Addr 0x%x, Alternate settings: %i\n",
800 dev->ts1_mode.end_point_addr,
801 dev->ts1_mode.num_alt);
802 dev->ts1_mode.alt_max_pkt_size =
803 kmalloc(32 * dev->ts1_mode.num_alt, GFP_KERNEL);
804
805 if (dev->ts1_mode.alt_max_pkt_size == NULL) {
806 cx231xx_errdev("out of memory!\n");
807 cx231xx_devused &= ~(1 << nr);
808 v4l2_device_unregister(&dev->v4l2_dev);
809 kfree(dev);
810 return -ENOMEM;
811 }
812
813 for (i = 0; i < dev->ts1_mode.num_alt; i++) {
814 u16 tmp = le16_to_cpu(uif->altsetting[i].
815 endpoint[isoc_pipe].desc.
816 wMaxPacketSize);
817 dev->ts1_mode.alt_max_pkt_size[i] =
818 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
819 cx231xx_info("Alternate setting %i, max size= %i\n", i,
820 dev->ts1_mode.alt_max_pkt_size[i]);
821 }
822 }
823
824 /* load other modules required */
825 request_modules(dev);
826
827 return 0;
828}
829
830/*
831 * cx231xx_usb_disconnect()
832 * called when the device gets diconencted
833 * video device will be unregistered on v4l2_close in case it is still open
834 */
835static void cx231xx_usb_disconnect(struct usb_interface *interface)
836{
837 struct cx231xx *dev;
838
839 dev = usb_get_intfdata(interface);
840 usb_set_intfdata(interface, NULL);
841
842 if (!dev)
843 return;
844
845 if (!dev->udev)
846 return;
847
848 /* delete v4l2 device */
849 v4l2_device_unregister(&dev->v4l2_dev);
850
851 /* wait until all current v4l2 io is finished then deallocate
852 resources */
853 mutex_lock(&dev->lock);
854
855 wake_up_interruptible_all(&dev->open);
856
857 if (dev->users) {
858 cx231xx_warn
859 ("device /dev/video%d is open! Deregistration and memory "
860 "deallocation are deferred on close.\n", dev->vdev->num);
861
862 dev->state |= DEV_MISCONFIGURED;
863 cx231xx_uninit_isoc(dev);
864 dev->state |= DEV_DISCONNECTED;
865 wake_up_interruptible(&dev->wait_frame);
866 wake_up_interruptible(&dev->wait_stream);
867 } else {
868 dev->state |= DEV_DISCONNECTED;
869 cx231xx_release_resources(dev);
870 }
871
872 cx231xx_close_extension(dev);
873
874 mutex_unlock(&dev->lock);
875
876 if (!dev->users) {
877 kfree(dev->video_mode.alt_max_pkt_size);
878 kfree(dev->vbi_mode.alt_max_pkt_size);
879 kfree(dev->sliced_cc_mode.alt_max_pkt_size);
880 kfree(dev->ts1_mode.alt_max_pkt_size);
881 kfree(dev);
882 }
883}
884
885static struct usb_driver cx231xx_usb_driver = {
886 .name = "cx231xx",
887 .probe = cx231xx_usb_probe,
888 .disconnect = cx231xx_usb_disconnect,
889 .id_table = cx231xx_id_table,
890};
891
892static int __init cx231xx_module_init(void)
893{
894 int result;
895
896 printk(KERN_INFO DRIVER_NAME " v4l2 driver loaded.\n");
897
898 /* register this driver with the USB subsystem */
899 result = usb_register(&cx231xx_usb_driver);
900 if (result)
901 cx231xx_err(DRIVER_NAME
902 " usb_register failed. Error number %d.\n", result);
903
904 return result;
905}
906
907static void __exit cx231xx_module_exit(void)
908{
909 /* deregister this driver with the USB subsystem */
910 usb_deregister(&cx231xx_usb_driver);
911}
912
913module_init(cx231xx_module_init);
914module_exit(cx231xx_module_exit);
diff --git a/drivers/media/video/cx231xx/cx231xx-conf-reg.h b/drivers/media/video/cx231xx/cx231xx-conf-reg.h
new file mode 100644
index 000000000000..a6f398a175c5
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-conf-reg.h
@@ -0,0 +1,494 @@
1/*
2 cx231xx_conf-reg.h - driver for Conexant Cx23100/101/102 USB
3 video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef _POLARIS_REG_H_
23#define _POLARIS_REG_H_
24
25#define BOARD_CFG_STAT 0x0
26#define TS_MODE_REG 0x4
27#define TS1_CFG_REG 0x8
28#define TS1_LENGTH_REG 0xc
29#define TS2_CFG_REG 0x10
30#define TS2_LENGTH_REG 0x14
31#define EP_MODE_SET 0x18
32#define CIR_PWR_PTN1 0x1c
33#define CIR_PWR_PTN2 0x20
34#define CIR_PWR_PTN3 0x24
35#define CIR_PWR_MASK0 0x28
36#define CIR_PWR_MASK1 0x2c
37#define CIR_PWR_MASK2 0x30
38#define CIR_GAIN 0x34
39#define CIR_CAR_REG 0x38
40#define CIR_OT_CFG1 0x40
41#define CIR_OT_CFG2 0x44
42#define PWR_CTL_EN 0x74
43
44/* Polaris Endpoints capture mask for register EP_MODE_SET */
45#define ENABLE_EP1 0x01 /* Bit[0]=1 */
46#define ENABLE_EP2 0x02 /* Bit[1]=1 */
47#define ENABLE_EP3 0x04 /* Bit[2]=1 */
48#define ENABLE_EP4 0x08 /* Bit[3]=1 */
49#define ENABLE_EP5 0x10 /* Bit[4]=1 */
50#define ENABLE_EP6 0x20 /* Bit[5]=1 */
51
52/* Bit definition for register PWR_CTL_EN */
53#define PWR_MODE_MASK 0x17f
54#define PWR_AV_EN 0x08 /* bit3 */
55#define PWR_ISO_EN 0x40 /* bit6 */
56#define PWR_AV_MODE 0x30 /* bit4,5 */
57#define PWR_TUNER_EN 0x04 /* bit2 */
58#define PWR_DEMOD_EN 0x02 /* bit1 */
59#define I2C_DEMOD_EN 0x01 /* bit0 */
60#define PWR_RESETOUT_EN 0x100 /* bit8 */
61
62enum AV_MODE{
63 POLARIS_AVMODE_DEFAULT = 0,
64 POLARIS_AVMODE_DIGITAL = 0x10,
65 POLARIS_AVMODE_ANALOGT_TV = 0x20,
66 POLARIS_AVMODE_ENXTERNAL_AV = 0x30,
67
68};
69
70/* Colibri Registers */
71
72#define SINGLE_ENDED 0x0
73#define LOW_IF 0x4
74#define EU_IF 0x9
75#define US_IF 0xa
76
77#define SUP_BLK_TUNE1 0x00
78#define SUP_BLK_TUNE2 0x01
79#define SUP_BLK_TUNE3 0x02
80#define SUP_BLK_XTAL 0x03
81#define SUP_BLK_PLL1 0x04
82#define SUP_BLK_PLL2 0x05
83#define SUP_BLK_PLL3 0x06
84#define SUP_BLK_REF 0x07
85#define SUP_BLK_PWRDN 0x08
86#define SUP_BLK_TESTPAD 0x09
87#define ADC_COM_INT5_STAB_REF 0x0a
88#define ADC_COM_QUANT 0x0b
89#define ADC_COM_BIAS1 0x0c
90#define ADC_COM_BIAS2 0x0d
91#define ADC_COM_BIAS3 0x0e
92#define TESTBUS_CTRL 0x12
93
94#define FLD_PWRDN_TUNING_BIAS 0x10
95#define FLD_PWRDN_ENABLE_PLL 0x08
96#define FLD_PWRDN_PD_BANDGAP 0x04
97#define FLD_PWRDN_PD_BIAS 0x02
98#define FLD_PWRDN_PD_TUNECK 0x01
99
100
101#define ADC_STATUS_CH1 0x20
102#define ADC_STATUS_CH2 0x40
103#define ADC_STATUS_CH3 0x60
104
105#define ADC_STATUS2_CH1 0x21
106#define ADC_STATUS2_CH2 0x41
107#define ADC_STATUS2_CH3 0x61
108
109#define ADC_CAL_ATEST_CH1 0x22
110#define ADC_CAL_ATEST_CH2 0x42
111#define ADC_CAL_ATEST_CH3 0x62
112
113#define ADC_PWRDN_CLAMP_CH1 0x23
114#define ADC_PWRDN_CLAMP_CH2 0x43
115#define ADC_PWRDN_CLAMP_CH3 0x63
116
117#define ADC_CTRL_DAC23_CH1 0x24
118#define ADC_CTRL_DAC23_CH2 0x44
119#define ADC_CTRL_DAC23_CH3 0x64
120
121#define ADC_CTRL_DAC1_CH1 0x25
122#define ADC_CTRL_DAC1_CH2 0x45
123#define ADC_CTRL_DAC1_CH3 0x65
124
125#define ADC_DCSERVO_DEM_CH1 0x26
126#define ADC_DCSERVO_DEM_CH2 0x46
127#define ADC_DCSERVO_DEM_CH3 0x66
128
129#define ADC_FB_FRCRST_CH1 0x27
130#define ADC_FB_FRCRST_CH2 0x47
131#define ADC_FB_FRCRST_CH3 0x67
132
133#define ADC_INPUT_CH1 0x28
134#define ADC_INPUT_CH2 0x48
135#define ADC_INPUT_CH3 0x68
136#define INPUT_SEL_MASK 0x30 /* [5:4] in_sel */
137
138#define ADC_NTF_PRECLMP_EN_CH1 0x29
139#define ADC_NTF_PRECLMP_EN_CH2 0x49
140#define ADC_NTF_PRECLMP_EN_CH3 0x69
141
142#define ADC_QGAIN_RES_TRM_CH1 0x2a
143#define ADC_QGAIN_RES_TRM_CH2 0x4a
144#define ADC_QGAIN_RES_TRM_CH3 0x6a
145
146#define ADC_SOC_PRECLMP_TERM_CH1 0x2b
147#define ADC_SOC_PRECLMP_TERM_CH2 0x4b
148#define ADC_SOC_PRECLMP_TERM_CH3 0x6b
149
150#define TESTBUS_CTRL_CH1 0x32
151#define TESTBUS_CTRL_CH2 0x52
152#define TESTBUS_CTRL_CH3 0x72
153
154/******************************************************************************
155 * DIF registers *
156 ******************************************************************************/
157#define DIRECT_IF_REVB_BASE 0x00300
158
159/*****************************************************************************/
160#define DIF_PLL_FREQ_WORD (DIRECT_IF_REVB_BASE + 0x00000000)
161/*****************************************************************************/
162#define FLD_DIF_PLL_LOCK 0x80000000
163/* Reserved [30:29] */
164#define FLD_DIF_PLL_FREE_RUN 0x10000000
165#define FLD_DIF_PLL_FREQ 0x0fffffff
166
167/*****************************************************************************/
168#define DIF_PLL_CTRL (DIRECT_IF_REVB_BASE + 0x00000004)
169/*****************************************************************************/
170#define FLD_DIF_KD_PD 0xff000000
171/* Reserved [23:20] */
172#define FLD_DIF_KDS_PD 0x000f0000
173#define FLD_DIF_KI_PD 0x0000ff00
174/* Reserved [7:4] */
175#define FLD_DIF_KIS_PD 0x0000000f
176
177/*****************************************************************************/
178#define DIF_PLL_CTRL1 (DIRECT_IF_REVB_BASE + 0x00000008)
179/*****************************************************************************/
180#define FLD_DIF_KD_FD 0xff000000
181/* Reserved [23:20] */
182#define FLD_DIF_KDS_FD 0x000f0000
183#define FLD_DIF_KI_FD 0x0000ff00
184#define FLD_DIF_SIG_PROP_SZ 0x000000f0
185#define FLD_DIF_KIS_FD 0x0000000f
186
187/*****************************************************************************/
188#define DIF_PLL_CTRL2 (DIRECT_IF_REVB_BASE + 0x0000000c)
189/*****************************************************************************/
190#define FLD_DIF_PLL_AGC_REF 0xfff00000
191#define FLD_DIF_PLL_AGC_KI 0x000f0000
192/* Reserved [15] */
193#define FLD_DIF_FREQ_LIMIT 0x00007000
194#define FLD_DIF_K_FD 0x00000f00
195#define FLD_DIF_DOWNSMPL_FD 0x000000ff
196
197/*****************************************************************************/
198#define DIF_PLL_CTRL3 (DIRECT_IF_REVB_BASE + 0x00000010)
199/*****************************************************************************/
200/* Reserved [31:16] */
201#define FLD_DIF_PLL_AGC_EN 0x00008000
202/* Reserved [14:12] */
203#define FLD_DIF_PLL_MAN_GAIN 0x00000fff
204
205/*****************************************************************************/
206#define DIF_AGC_IF_REF (DIRECT_IF_REVB_BASE + 0x00000014)
207/*****************************************************************************/
208#define FLD_DIF_K_AGC_RF 0xf0000000
209#define FLD_DIF_K_AGC_IF 0x0f000000
210#define FLD_DIF_K_AGC_INT 0x00f00000
211/* Reserved [19:12] */
212#define FLD_DIF_IF_REF 0x00000fff
213
214/*****************************************************************************/
215#define DIF_AGC_CTRL_IF (DIRECT_IF_REVB_BASE + 0x00000018)
216/*****************************************************************************/
217#define FLD_DIF_IF_MAX 0xff000000
218#define FLD_DIF_IF_MIN 0x00ff0000
219#define FLD_DIF_IF_AGC 0x0000ffff
220
221/*****************************************************************************/
222#define DIF_AGC_CTRL_INT (DIRECT_IF_REVB_BASE + 0x0000001c)
223/*****************************************************************************/
224#define FLD_DIF_INT_MAX 0xff000000
225#define FLD_DIF_INT_MIN 0x00ff0000
226#define FLD_DIF_INT_AGC 0x0000ffff
227
228/*****************************************************************************/
229#define DIF_AGC_CTRL_RF (DIRECT_IF_REVB_BASE + 0x00000020)
230/*****************************************************************************/
231#define FLD_DIF_RF_MAX 0xff000000
232#define FLD_DIF_RF_MIN 0x00ff0000
233#define FLD_DIF_RF_AGC 0x0000ffff
234
235/*****************************************************************************/
236#define DIF_AGC_IF_INT_CURRENT (DIRECT_IF_REVB_BASE + 0x00000024)
237/*****************************************************************************/
238#define FLD_DIF_IF_AGC_IN 0xffff0000
239#define FLD_DIF_INT_AGC_IN 0x0000ffff
240
241/*****************************************************************************/
242#define DIF_AGC_RF_CURRENT (DIRECT_IF_REVB_BASE + 0x00000028)
243/*****************************************************************************/
244/* Reserved [31:16] */
245#define FLD_DIF_RF_AGC_IN 0x0000ffff
246
247/*****************************************************************************/
248#define DIF_VIDEO_AGC_CTRL (DIRECT_IF_REVB_BASE + 0x0000002c)
249/*****************************************************************************/
250#define FLD_DIF_AFD 0xc0000000
251#define FLD_DIF_K_VID_AGC 0x30000000
252#define FLD_DIF_LINE_LENGTH 0x0fff0000
253#define FLD_DIF_AGC_GAIN 0x0000ffff
254
255/*****************************************************************************/
256#define DIF_VID_AUD_OVERRIDE (DIRECT_IF_REVB_BASE + 0x00000030)
257/*****************************************************************************/
258#define FLD_DIF_AUDIO_AGC_OVERRIDE 0x80000000
259/* Reserved [30:30] */
260#define FLD_DIF_AUDIO_MAN_GAIN 0x3f000000
261/* Reserved [23:17] */
262#define FLD_DIF_VID_AGC_OVERRIDE 0x00010000
263#define FLD_DIF_VID_MAN_GAIN 0x0000ffff
264
265/*****************************************************************************/
266#define DIF_AV_SEP_CTRL (DIRECT_IF_REVB_BASE + 0x00000034)
267/*****************************************************************************/
268#define FLD_DIF_LPF_FREQ 0xc0000000
269#define FLD_DIF_AV_PHASE_INC 0x3f000000
270#define FLD_DIF_AUDIO_FREQ 0x00ffffff
271
272/*****************************************************************************/
273#define DIF_COMP_FLT_CTRL (DIRECT_IF_REVB_BASE + 0x00000038)
274/*****************************************************************************/
275/* Reserved [31:24] */
276#define FLD_DIF_IIR23_R2 0x00ff0000
277#define FLD_DIF_IIR23_R1 0x0000ff00
278#define FLD_DIF_IIR1_R1 0x000000ff
279
280/*****************************************************************************/
281#define DIF_MISC_CTRL (DIRECT_IF_REVB_BASE + 0x0000003c)
282/*****************************************************************************/
283#define FLD_DIF_DIF_BYPASS 0x80000000
284#define FLD_DIF_FM_NYQ_GAIN 0x40000000
285#define FLD_DIF_RF_AGC_ENA 0x20000000
286#define FLD_DIF_INT_AGC_ENA 0x10000000
287#define FLD_DIF_IF_AGC_ENA 0x08000000
288#define FLD_DIF_FORCE_RF_IF_LOCK 0x04000000
289#define FLD_DIF_VIDEO_AGC_ENA 0x02000000
290#define FLD_DIF_RF_AGC_INV 0x01000000
291#define FLD_DIF_INT_AGC_INV 0x00800000
292#define FLD_DIF_IF_AGC_INV 0x00400000
293#define FLD_DIF_SPEC_INV 0x00200000
294#define FLD_DIF_AUD_FULL_BW 0x00100000
295#define FLD_DIF_AUD_SRC_SEL 0x00080000
296/* Reserved [18] */
297#define FLD_DIF_IF_FREQ 0x00030000
298/* Reserved [15:14] */
299#define FLD_DIF_TIP_OFFSET 0x00003f00
300/* Reserved [7:5] */
301#define FLD_DIF_DITHER_ENA 0x00000010
302/* Reserved [3:1] */
303#define FLD_DIF_RF_IF_LOCK 0x00000001
304
305/*****************************************************************************/
306#define DIF_SRC_PHASE_INC (DIRECT_IF_REVB_BASE + 0x00000040)
307/*****************************************************************************/
308/* Reserved [31:29] */
309#define FLD_DIF_PHASE_INC 0x1fffffff
310
311/*****************************************************************************/
312#define DIF_SRC_GAIN_CONTROL (DIRECT_IF_REVB_BASE + 0x00000044)
313/*****************************************************************************/
314/* Reserved [31:16] */
315#define FLD_DIF_SRC_KI 0x0000ff00
316#define FLD_DIF_SRC_KD 0x000000ff
317
318/*****************************************************************************/
319#define DIF_BPF_COEFF01 (DIRECT_IF_REVB_BASE + 0x00000048)
320/*****************************************************************************/
321/* Reserved [31:19] */
322#define FLD_DIF_BPF_COEFF_0 0x00070000
323/* Reserved [15:4] */
324#define FLD_DIF_BPF_COEFF_1 0x0000000f
325
326/*****************************************************************************/
327#define DIF_BPF_COEFF23 (DIRECT_IF_REVB_BASE + 0x0000004c)
328/*****************************************************************************/
329/* Reserved [31:22] */
330#define FLD_DIF_BPF_COEFF_2 0x003f0000
331/* Reserved [15:7] */
332#define FLD_DIF_BPF_COEFF_3 0x0000007f
333
334/*****************************************************************************/
335#define DIF_BPF_COEFF45 (DIRECT_IF_REVB_BASE + 0x00000050)
336/*****************************************************************************/
337/* Reserved [31:24] */
338#define FLD_DIF_BPF_COEFF_4 0x00ff0000
339/* Reserved [15:8] */
340#define FLD_DIF_BPF_COEFF_5 0x000000ff
341
342/*****************************************************************************/
343#define DIF_BPF_COEFF67 (DIRECT_IF_REVB_BASE + 0x00000054)
344/*****************************************************************************/
345/* Reserved [31:25] */
346#define FLD_DIF_BPF_COEFF_6 0x01ff0000
347/* Reserved [15:9] */
348#define FLD_DIF_BPF_COEFF_7 0x000001ff
349
350/*****************************************************************************/
351#define DIF_BPF_COEFF89 (DIRECT_IF_REVB_BASE + 0x00000058)
352/*****************************************************************************/
353/* Reserved [31:26] */
354#define FLD_DIF_BPF_COEFF_8 0x03ff0000
355/* Reserved [15:10] */
356#define FLD_DIF_BPF_COEFF_9 0x000003ff
357
358/*****************************************************************************/
359#define DIF_BPF_COEFF1011 (DIRECT_IF_REVB_BASE + 0x0000005c)
360/*****************************************************************************/
361/* Reserved [31:27] */
362#define FLD_DIF_BPF_COEFF_10 0x07ff0000
363/* Reserved [15:11] */
364#define FLD_DIF_BPF_COEFF_11 0x000007ff
365
366/*****************************************************************************/
367#define DIF_BPF_COEFF1213 (DIRECT_IF_REVB_BASE + 0x00000060)
368/*****************************************************************************/
369/* Reserved [31:27] */
370#define FLD_DIF_BPF_COEFF_12 0x07ff0000
371/* Reserved [15:12] */
372#define FLD_DIF_BPF_COEFF_13 0x00000fff
373
374/*****************************************************************************/
375#define DIF_BPF_COEFF1415 (DIRECT_IF_REVB_BASE + 0x00000064)
376/*****************************************************************************/
377/* Reserved [31:28] */
378#define FLD_DIF_BPF_COEFF_14 0x0fff0000
379/* Reserved [15:12] */
380#define FLD_DIF_BPF_COEFF_15 0x00000fff
381
382/*****************************************************************************/
383#define DIF_BPF_COEFF1617 (DIRECT_IF_REVB_BASE + 0x00000068)
384/*****************************************************************************/
385/* Reserved [31:29] */
386#define FLD_DIF_BPF_COEFF_16 0x1fff0000
387/* Reserved [15:13] */
388#define FLD_DIF_BPF_COEFF_17 0x00001fff
389
390/*****************************************************************************/
391#define DIF_BPF_COEFF1819 (DIRECT_IF_REVB_BASE + 0x0000006c)
392/*****************************************************************************/
393/* Reserved [31:29] */
394#define FLD_DIF_BPF_COEFF_18 0x1fff0000
395/* Reserved [15:13] */
396#define FLD_DIF_BPF_COEFF_19 0x00001fff
397
398/*****************************************************************************/
399#define DIF_BPF_COEFF2021 (DIRECT_IF_REVB_BASE + 0x00000070)
400/*****************************************************************************/
401/* Reserved [31:29] */
402#define FLD_DIF_BPF_COEFF_20 0x1fff0000
403/* Reserved [15:14] */
404#define FLD_DIF_BPF_COEFF_21 0x00003fff
405
406/*****************************************************************************/
407#define DIF_BPF_COEFF2223 (DIRECT_IF_REVB_BASE + 0x00000074)
408/*****************************************************************************/
409/* Reserved [31:30] */
410#define FLD_DIF_BPF_COEFF_22 0x3fff0000
411/* Reserved [15:14] */
412#define FLD_DIF_BPF_COEFF_23 0x00003fff
413
414/*****************************************************************************/
415#define DIF_BPF_COEFF2425 (DIRECT_IF_REVB_BASE + 0x00000078)
416/*****************************************************************************/
417/* Reserved [31:30] */
418#define FLD_DIF_BPF_COEFF_24 0x3fff0000
419/* Reserved [15:14] */
420#define FLD_DIF_BPF_COEFF_25 0x00003fff
421
422/*****************************************************************************/
423#define DIF_BPF_COEFF2627 (DIRECT_IF_REVB_BASE + 0x0000007c)
424/*****************************************************************************/
425/* Reserved [31:30] */
426#define FLD_DIF_BPF_COEFF_26 0x3fff0000
427/* Reserved [15:14] */
428#define FLD_DIF_BPF_COEFF_27 0x00003fff
429
430/*****************************************************************************/
431#define DIF_BPF_COEFF2829 (DIRECT_IF_REVB_BASE + 0x00000080)
432/*****************************************************************************/
433/* Reserved [31:30] */
434#define FLD_DIF_BPF_COEFF_28 0x3fff0000
435/* Reserved [15:14] */
436#define FLD_DIF_BPF_COEFF_29 0x00003fff
437
438/*****************************************************************************/
439#define DIF_BPF_COEFF3031 (DIRECT_IF_REVB_BASE + 0x00000084)
440/*****************************************************************************/
441/* Reserved [31:30] */
442#define FLD_DIF_BPF_COEFF_30 0x3fff0000
443/* Reserved [15:14] */
444#define FLD_DIF_BPF_COEFF_31 0x00003fff
445
446/*****************************************************************************/
447#define DIF_BPF_COEFF3233 (DIRECT_IF_REVB_BASE + 0x00000088)
448/*****************************************************************************/
449/* Reserved [31:30] */
450#define FLD_DIF_BPF_COEFF_32 0x3fff0000
451/* Reserved [15:14] */
452#define FLD_DIF_BPF_COEFF_33 0x00003fff
453
454/*****************************************************************************/
455#define DIF_BPF_COEFF3435 (DIRECT_IF_REVB_BASE + 0x0000008c)
456/*****************************************************************************/
457/* Reserved [31:30] */
458#define FLD_DIF_BPF_COEFF_34 0x3fff0000
459/* Reserved [15:14] */
460#define FLD_DIF_BPF_COEFF_35 0x00003fff
461
462/*****************************************************************************/
463#define DIF_BPF_COEFF36 (DIRECT_IF_REVB_BASE + 0x00000090)
464/*****************************************************************************/
465/* Reserved [31:30] */
466#define FLD_DIF_BPF_COEFF_36 0x3fff0000
467/* Reserved [15:0] */
468
469/*****************************************************************************/
470#define DIF_RPT_VARIANCE (DIRECT_IF_REVB_BASE + 0x00000094)
471/*****************************************************************************/
472/* Reserved [31:20] */
473#define FLD_DIF_RPT_VARIANCE 0x000fffff
474
475/*****************************************************************************/
476#define DIF_SOFT_RST_CTRL_REVB (DIRECT_IF_REVB_BASE + 0x00000098)
477/*****************************************************************************/
478/* Reserved [31:8] */
479#define FLD_DIF_DIF_SOFT_RST 0x00000080
480#define FLD_DIF_DIF_REG_RST_MSK 0x00000040
481#define FLD_DIF_AGC_RST_MSK 0x00000020
482#define FLD_DIF_CMP_RST_MSK 0x00000010
483#define FLD_DIF_AVS_RST_MSK 0x00000008
484#define FLD_DIF_NYQ_RST_MSK 0x00000004
485#define FLD_DIF_DIF_SRC_RST_MSK 0x00000002
486#define FLD_DIF_PLL_RST_MSK 0x00000001
487
488/*****************************************************************************/
489#define DIF_PLL_FREQ_ERR (DIRECT_IF_REVB_BASE + 0x0000009c)
490/*****************************************************************************/
491/* Reserved [31:25] */
492#define FLD_DIF_CTL_IP 0x01ffffff
493
494#endif
diff --git a/drivers/media/video/cx231xx/cx231xx-core.c b/drivers/media/video/cx231xx/cx231xx-core.c
new file mode 100644
index 000000000000..0d333e679f70
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-core.c
@@ -0,0 +1,1200 @@
1/*
2 cx231xx-core.c - driver for Conexant Cx23100/101/102
3 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6 Based on em28xx driver
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/init.h>
24#include <linux/list.h>
25#include <linux/module.h>
26#include <linux/usb.h>
27#include <linux/vmalloc.h>
28#include <media/v4l2-common.h>
29
30#include "cx231xx.h"
31#include "cx231xx-reg.h"
32
33/* #define ENABLE_DEBUG_ISOC_FRAMES */
34
35static unsigned int core_debug;
36module_param(core_debug, int, 0644);
37MODULE_PARM_DESC(core_debug, "enable debug messages [core]");
38
39#define cx231xx_coredbg(fmt, arg...) do {\
40 if (core_debug) \
41 printk(KERN_INFO "%s %s :"fmt, \
42 dev->name, __func__ , ##arg); } while (0)
43
44static unsigned int reg_debug;
45module_param(reg_debug, int, 0644);
46MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
47
48#define cx231xx_regdbg(fmt, arg...) do {\
49 if (reg_debug) \
50 printk(KERN_INFO "%s %s :"fmt, \
51 dev->name, __func__ , ##arg); } while (0)
52
53static int alt = CX231XX_PINOUT;
54module_param(alt, int, 0644);
55MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
56
57#define cx231xx_isocdbg(fmt, arg...) do {\
58 if (core_debug) \
59 printk(KERN_INFO "%s %s :"fmt, \
60 dev->name, __func__ , ##arg); } while (0)
61
62/*****************************************************************
63* Device control list functions *
64******************************************************************/
65
66static LIST_HEAD(cx231xx_devlist);
67static DEFINE_MUTEX(cx231xx_devlist_mutex);
68
69struct cx231xx *cx231xx_get_device(int minor,
70 enum v4l2_buf_type *fh_type, int *has_radio)
71{
72 struct cx231xx *h, *dev = NULL;
73
74 *fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
75 *has_radio = 0;
76
77 mutex_lock(&cx231xx_devlist_mutex);
78 list_for_each_entry(h, &cx231xx_devlist, devlist) {
79 if (h->vdev->minor == minor)
80 dev = h;
81 if (h->vbi_dev->minor == minor) {
82 dev = h;
83 *fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
84 }
85 if (h->radio_dev && h->radio_dev->minor == minor) {
86 dev = h;
87 *has_radio = 1;
88 }
89 }
90 mutex_unlock(&cx231xx_devlist_mutex);
91
92 return dev;
93}
94
95/*
96 * cx231xx_realease_resources()
97 * unregisters the v4l2,i2c and usb devices
98 * called when the device gets disconected or at module unload
99*/
100void cx231xx_remove_from_devlist(struct cx231xx *dev)
101{
102 mutex_lock(&cx231xx_devlist_mutex);
103 list_del(&dev->devlist);
104 mutex_unlock(&cx231xx_devlist_mutex);
105};
106
107void cx231xx_add_into_devlist(struct cx231xx *dev)
108{
109 mutex_lock(&cx231xx_devlist_mutex);
110 list_add_tail(&dev->devlist, &cx231xx_devlist);
111 mutex_unlock(&cx231xx_devlist_mutex);
112};
113
114static LIST_HEAD(cx231xx_extension_devlist);
115static DEFINE_MUTEX(cx231xx_extension_devlist_lock);
116
117int cx231xx_register_extension(struct cx231xx_ops *ops)
118{
119 struct cx231xx *dev = NULL;
120
121 mutex_lock(&cx231xx_devlist_mutex);
122 mutex_lock(&cx231xx_extension_devlist_lock);
123 list_add_tail(&ops->next, &cx231xx_extension_devlist);
124 list_for_each_entry(dev, &cx231xx_devlist, devlist) {
125 if (dev)
126 ops->init(dev);
127 }
128 printk(KERN_INFO DRIVER_NAME ": %s initialized\n", ops->name);
129 mutex_unlock(&cx231xx_extension_devlist_lock);
130 mutex_unlock(&cx231xx_devlist_mutex);
131 return 0;
132}
133EXPORT_SYMBOL(cx231xx_register_extension);
134
135void cx231xx_unregister_extension(struct cx231xx_ops *ops)
136{
137 struct cx231xx *dev = NULL;
138
139 mutex_lock(&cx231xx_devlist_mutex);
140 list_for_each_entry(dev, &cx231xx_devlist, devlist) {
141 if (dev)
142 ops->fini(dev);
143 }
144
145 mutex_lock(&cx231xx_extension_devlist_lock);
146 printk(KERN_INFO DRIVER_NAME ": %s removed\n", ops->name);
147 list_del(&ops->next);
148 mutex_unlock(&cx231xx_extension_devlist_lock);
149 mutex_unlock(&cx231xx_devlist_mutex);
150}
151EXPORT_SYMBOL(cx231xx_unregister_extension);
152
153void cx231xx_init_extension(struct cx231xx *dev)
154{
155 struct cx231xx_ops *ops = NULL;
156
157 mutex_lock(&cx231xx_extension_devlist_lock);
158 if (!list_empty(&cx231xx_extension_devlist)) {
159 list_for_each_entry(ops, &cx231xx_extension_devlist, next) {
160 if (ops->init)
161 ops->init(dev);
162 }
163 }
164 mutex_unlock(&cx231xx_extension_devlist_lock);
165}
166
167void cx231xx_close_extension(struct cx231xx *dev)
168{
169 struct cx231xx_ops *ops = NULL;
170
171 mutex_lock(&cx231xx_extension_devlist_lock);
172 if (!list_empty(&cx231xx_extension_devlist)) {
173 list_for_each_entry(ops, &cx231xx_extension_devlist, next) {
174 if (ops->fini)
175 ops->fini(dev);
176 }
177 }
178 mutex_unlock(&cx231xx_extension_devlist_lock);
179}
180
181/****************************************************************
182* U S B related functions *
183*****************************************************************/
184int cx231xx_send_usb_command(struct cx231xx_i2c *i2c_bus,
185 struct cx231xx_i2c_xfer_data *req_data)
186{
187 int status = 0;
188 struct cx231xx *dev = i2c_bus->dev;
189 struct VENDOR_REQUEST_IN ven_req;
190
191 u8 saddr_len = 0;
192 u8 _i2c_period = 0;
193 u8 _i2c_nostop = 0;
194 u8 _i2c_reserve = 0;
195
196 /* Get the I2C period, nostop and reserve parameters */
197 _i2c_period = i2c_bus->i2c_period;
198 _i2c_nostop = i2c_bus->i2c_nostop;
199 _i2c_reserve = i2c_bus->i2c_reserve;
200
201 saddr_len = req_data->saddr_len;
202
203 /* Set wValue */
204 if (saddr_len == 1) /* need check saddr_len == 0 */
205 ven_req.wValue =
206 req_data->
207 dev_addr << 9 | _i2c_period << 4 | saddr_len << 2 |
208 _i2c_nostop << 1 | I2C_SYNC | _i2c_reserve << 6;
209 else
210 ven_req.wValue =
211 req_data->
212 dev_addr << 9 | _i2c_period << 4 | saddr_len << 2 |
213 _i2c_nostop << 1 | I2C_SYNC | _i2c_reserve << 6;
214
215 /* set channel number */
216 if (req_data->direction & I2C_M_RD) {
217 /* channel number, for read,spec required channel_num +4 */
218 ven_req.bRequest = i2c_bus->nr + 4;
219 } else
220 ven_req.bRequest = i2c_bus->nr; /* channel number, */
221
222 /* set index value */
223 switch (saddr_len) {
224 case 0:
225 ven_req.wIndex = 0; /* need check */
226 break;
227 case 1:
228 ven_req.wIndex = (req_data->saddr_dat & 0xff);
229 break;
230 case 2:
231 ven_req.wIndex = req_data->saddr_dat;
232 break;
233 }
234
235 /* set wLength value */
236 ven_req.wLength = req_data->buf_size;
237
238 /* set bData value */
239 ven_req.bData = 0;
240
241 /* set the direction */
242 if (req_data->direction) {
243 ven_req.direction = USB_DIR_IN;
244 memset(req_data->p_buffer, 0x00, ven_req.wLength);
245 } else
246 ven_req.direction = USB_DIR_OUT;
247
248 /* set the buffer for read / write */
249 ven_req.pBuff = req_data->p_buffer;
250
251
252 /* call common vendor command request */
253 status = cx231xx_send_vendor_cmd(dev, &ven_req);
254 if (status < 0) {
255 cx231xx_info
256 ("UsbInterface::sendCommand, failed with status -%d\n",
257 status);
258 }
259
260 return status;
261}
262EXPORT_SYMBOL_GPL(cx231xx_send_usb_command);
263
264/*
265 * cx231xx_read_ctrl_reg()
266 * reads data from the usb device specifying bRequest and wValue
267 */
268int cx231xx_read_ctrl_reg(struct cx231xx *dev, u8 req, u16 reg,
269 char *buf, int len)
270{
271 u8 val = 0;
272 int ret;
273 int pipe = usb_rcvctrlpipe(dev->udev, 0);
274
275 if (dev->state & DEV_DISCONNECTED)
276 return -ENODEV;
277
278 if (len > URB_MAX_CTRL_SIZE)
279 return -EINVAL;
280
281 switch (len) {
282 case 1:
283 val = ENABLE_ONE_BYTE;
284 break;
285 case 2:
286 val = ENABLE_TWE_BYTE;
287 break;
288 case 3:
289 val = ENABLE_THREE_BYTE;
290 break;
291 case 4:
292 val = ENABLE_FOUR_BYTE;
293 break;
294 default:
295 val = 0xFF; /* invalid option */
296 }
297
298 if (val == 0xFF)
299 return -EINVAL;
300
301 if (reg_debug) {
302 cx231xx_isocdbg("(pipe 0x%08x): "
303 "IN: %02x %02x %02x %02x %02x %02x %02x %02x ",
304 pipe,
305 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
306 req, 0, val,
307 reg & 0xff, reg >> 8, len & 0xff, len >> 8);
308 }
309
310 mutex_lock(&dev->ctrl_urb_lock);
311 ret = usb_control_msg(dev->udev, pipe, req,
312 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
313 val, reg, dev->urb_buf, len, HZ);
314 if (ret < 0) {
315 cx231xx_isocdbg(" failed!\n");
316 /* mutex_unlock(&dev->ctrl_urb_lock); */
317 return ret;
318 }
319
320 if (len)
321 memcpy(buf, dev->urb_buf, len);
322
323 mutex_unlock(&dev->ctrl_urb_lock);
324
325 if (reg_debug) {
326 int byte;
327
328 cx231xx_isocdbg("<<<");
329 for (byte = 0; byte < len; byte++)
330 cx231xx_isocdbg(" %02x", (unsigned char)buf[byte]);
331 cx231xx_isocdbg("\n");
332 }
333
334 return ret;
335}
336
337int cx231xx_send_vendor_cmd(struct cx231xx *dev,
338 struct VENDOR_REQUEST_IN *ven_req)
339{
340 int ret;
341 int pipe = 0;
342
343 if (dev->state & DEV_DISCONNECTED)
344 return -ENODEV;
345
346 if ((ven_req->wLength > URB_MAX_CTRL_SIZE))
347 return -EINVAL;
348
349 if (ven_req->direction)
350 pipe = usb_rcvctrlpipe(dev->udev, 0);
351 else
352 pipe = usb_sndctrlpipe(dev->udev, 0);
353
354 if (reg_debug) {
355 int byte;
356
357 cx231xx_isocdbg("(pipe 0x%08x): "
358 "OUT: %02x %02x %02x %04x %04x %04x >>>",
359 pipe,
360 ven_req->
361 direction | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
362 ven_req->bRequest, 0, ven_req->wValue,
363 ven_req->wIndex, ven_req->wLength);
364
365 for (byte = 0; byte < ven_req->wLength; byte++)
366 cx231xx_isocdbg(" %02x",
367 (unsigned char)ven_req->pBuff[byte]);
368 cx231xx_isocdbg("\n");
369 }
370
371 mutex_lock(&dev->ctrl_urb_lock);
372 ret = usb_control_msg(dev->udev, pipe, ven_req->bRequest,
373 ven_req->
374 direction | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
375 ven_req->wValue, ven_req->wIndex, ven_req->pBuff,
376 ven_req->wLength, HZ);
377 mutex_unlock(&dev->ctrl_urb_lock);
378
379 return ret;
380}
381
382/*
383 * cx231xx_write_ctrl_reg()
384 * sends data to the usb device, specifying bRequest
385 */
386int cx231xx_write_ctrl_reg(struct cx231xx *dev, u8 req, u16 reg, char *buf,
387 int len)
388{
389 u8 val = 0;
390 int ret;
391 int pipe = usb_sndctrlpipe(dev->udev, 0);
392
393 if (dev->state & DEV_DISCONNECTED)
394 return -ENODEV;
395
396 if ((len < 1) || (len > URB_MAX_CTRL_SIZE))
397 return -EINVAL;
398
399 switch (len) {
400 case 1:
401 val = ENABLE_ONE_BYTE;
402 break;
403 case 2:
404 val = ENABLE_TWE_BYTE;
405 break;
406 case 3:
407 val = ENABLE_THREE_BYTE;
408 break;
409 case 4:
410 val = ENABLE_FOUR_BYTE;
411 break;
412 default:
413 val = 0xFF; /* invalid option */
414 }
415
416 if (val == 0xFF)
417 return -EINVAL;
418
419 if (reg_debug) {
420 int byte;
421
422 cx231xx_isocdbg("(pipe 0x%08x): "
423 "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
424 pipe,
425 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
426 req, 0, val, reg & 0xff,
427 reg >> 8, len & 0xff, len >> 8);
428
429 for (byte = 0; byte < len; byte++)
430 cx231xx_isocdbg(" %02x", (unsigned char)buf[byte]);
431 cx231xx_isocdbg("\n");
432 }
433
434 mutex_lock(&dev->ctrl_urb_lock);
435 memcpy(dev->urb_buf, buf, len);
436 ret = usb_control_msg(dev->udev, pipe, req,
437 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
438 val, reg, dev->urb_buf, len, HZ);
439 mutex_unlock(&dev->ctrl_urb_lock);
440
441 return ret;
442}
443
444/****************************************************************
445* USB Alternate Setting functions *
446*****************************************************************/
447
448int cx231xx_set_video_alternate(struct cx231xx *dev)
449{
450 int errCode, prev_alt = dev->video_mode.alt;
451 unsigned int min_pkt_size = dev->width * 2 + 4;
452 u32 usb_interface_index = 0;
453
454 /* When image size is bigger than a certain value,
455 the frame size should be increased, otherwise, only
456 green screen will be received.
457 */
458 if (dev->width * 2 * dev->height > 720 * 240 * 2)
459 min_pkt_size *= 2;
460
461 if (dev->width > 360) {
462 /* resolutions: 720,704,640 */
463 dev->video_mode.alt = 3;
464 } else if (dev->width > 180) {
465 /* resolutions: 360,352,320,240 */
466 dev->video_mode.alt = 2;
467 } else if (dev->width > 0) {
468 /* resolutions: 180,176,160,128,88 */
469 dev->video_mode.alt = 1;
470 } else {
471 /* Change to alt0 BULK to release USB bandwidth */
472 dev->video_mode.alt = 0;
473 }
474
475 /* Get the correct video interface Index */
476 usb_interface_index =
477 dev->current_pcb_config.hs_config_info[0].interface_info.
478 video_index + 1;
479
480 if (dev->video_mode.alt != prev_alt) {
481 cx231xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
482 min_pkt_size, dev->video_mode.alt);
483 dev->video_mode.max_pkt_size =
484 dev->video_mode.alt_max_pkt_size[dev->video_mode.alt];
485 cx231xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n",
486 dev->video_mode.alt,
487 dev->video_mode.max_pkt_size);
488 cx231xx_info
489 (" setting alt %d with wMaxPktSize=%u , Interface = %d\n",
490 dev->video_mode.alt, dev->video_mode.max_pkt_size,
491 usb_interface_index);
492 errCode =
493 usb_set_interface(dev->udev, usb_interface_index,
494 dev->video_mode.alt);
495 if (errCode < 0) {
496 cx231xx_errdev
497 ("cannot change alt number to %d (error=%i)\n",
498 dev->video_mode.alt, errCode);
499 return errCode;
500 }
501 }
502 return 0;
503}
504
505int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt)
506{
507 int status = 0;
508 u32 usb_interface_index = 0;
509 u32 max_pkt_size = 0;
510
511 switch (index) {
512 case INDEX_TS1:
513 usb_interface_index =
514 dev->current_pcb_config.hs_config_info[0].interface_info.
515 ts1_index + 1;
516 dev->video_mode.alt = alt;
517 if (dev->ts1_mode.alt_max_pkt_size != NULL)
518 max_pkt_size = dev->ts1_mode.max_pkt_size =
519 dev->ts1_mode.alt_max_pkt_size[dev->ts1_mode.alt];
520 break;
521 case INDEX_TS2:
522 usb_interface_index =
523 dev->current_pcb_config.hs_config_info[0].interface_info.
524 ts2_index + 1;
525 break;
526 case INDEX_AUDIO:
527 usb_interface_index =
528 dev->current_pcb_config.hs_config_info[0].interface_info.
529 audio_index + 1;
530 dev->adev.alt = alt;
531 if (dev->adev.alt_max_pkt_size != NULL)
532 max_pkt_size = dev->adev.max_pkt_size =
533 dev->adev.alt_max_pkt_size[dev->adev.alt];
534 break;
535 case INDEX_VIDEO:
536 usb_interface_index =
537 dev->current_pcb_config.hs_config_info[0].interface_info.
538 video_index + 1;
539 dev->video_mode.alt = alt;
540 if (dev->video_mode.alt_max_pkt_size != NULL)
541 max_pkt_size = dev->video_mode.max_pkt_size =
542 dev->video_mode.alt_max_pkt_size[dev->video_mode.
543 alt];
544 break;
545 case INDEX_VANC:
546 usb_interface_index =
547 dev->current_pcb_config.hs_config_info[0].interface_info.
548 vanc_index + 1;
549 dev->vbi_mode.alt = alt;
550 if (dev->vbi_mode.alt_max_pkt_size != NULL)
551 max_pkt_size = dev->vbi_mode.max_pkt_size =
552 dev->vbi_mode.alt_max_pkt_size[dev->vbi_mode.alt];
553 break;
554 case INDEX_HANC:
555 usb_interface_index =
556 dev->current_pcb_config.hs_config_info[0].interface_info.
557 hanc_index + 1;
558 dev->sliced_cc_mode.alt = alt;
559 if (dev->sliced_cc_mode.alt_max_pkt_size != NULL)
560 max_pkt_size = dev->sliced_cc_mode.max_pkt_size =
561 dev->sliced_cc_mode.alt_max_pkt_size[dev->
562 sliced_cc_mode.
563 alt];
564 break;
565 default:
566 break;
567 }
568
569 if (alt > 0 && max_pkt_size == 0) {
570 cx231xx_errdev
571 ("can't change interface %d alt no. to %d: Max. Pkt size = 0\n",
572 usb_interface_index, alt);
573 return -1;
574 }
575
576 cx231xx_info
577 (" setting alternate %d with wMaxPacketSize=%u , Interface = %d\n",
578 alt, max_pkt_size, usb_interface_index);
579
580 if (usb_interface_index > 0) {
581 status = usb_set_interface(dev->udev, usb_interface_index, alt);
582 if (status < 0) {
583 cx231xx_errdev
584 ("can't change interface %d alt no. to %d (err=%i)\n",
585 usb_interface_index, alt, status);
586 return status;
587 }
588 }
589
590 return status;
591}
592EXPORT_SYMBOL_GPL(cx231xx_set_alt_setting);
593
594int cx231xx_gpio_set(struct cx231xx *dev, struct cx231xx_reg_seq *gpio)
595{
596 int rc = 0;
597
598 if (!gpio)
599 return rc;
600
601 /* Send GPIO reset sequences specified at board entry */
602 while (gpio->sleep >= 0) {
603 rc = cx231xx_set_gpio_value(dev, gpio->bit, gpio->val);
604 if (rc < 0)
605 return rc;
606
607 if (gpio->sleep > 0)
608 msleep(gpio->sleep);
609
610 gpio++;
611 }
612 return rc;
613}
614
615int cx231xx_set_mode(struct cx231xx *dev, enum cx231xx_mode set_mode)
616{
617 if (dev->mode == set_mode)
618 return 0;
619
620 if (set_mode == CX231XX_SUSPEND) {
621 /* Set the chip in power saving mode */
622 dev->mode = set_mode;
623 }
624
625 /* Resource is locked */
626 if (dev->mode != CX231XX_SUSPEND)
627 return -EINVAL;
628
629 dev->mode = set_mode;
630
631 if (dev->mode == CX231XX_DIGITAL_MODE)
632 ;/* Set Digital power mode */
633 else
634 ;/* Set Analog Power mode */
635
636 return 0;
637}
638EXPORT_SYMBOL_GPL(cx231xx_set_mode);
639
640/*****************************************************************
641* URB Streaming functions *
642******************************************************************/
643
644/*
645 * IRQ callback, called by URB callback
646 */
647static void cx231xx_irq_callback(struct urb *urb)
648{
649 struct cx231xx_dmaqueue *dma_q = urb->context;
650 struct cx231xx_video_mode *vmode =
651 container_of(dma_q, struct cx231xx_video_mode, vidq);
652 struct cx231xx *dev = container_of(vmode, struct cx231xx, video_mode);
653 int rc, i;
654
655 switch (urb->status) {
656 case 0: /* success */
657 case -ETIMEDOUT: /* NAK */
658 break;
659 case -ECONNRESET: /* kill */
660 case -ENOENT:
661 case -ESHUTDOWN:
662 return;
663 default: /* error */
664 cx231xx_isocdbg("urb completition error %d.\n", urb->status);
665 break;
666 }
667
668 /* Copy data from URB */
669 spin_lock(&dev->video_mode.slock);
670 rc = dev->video_mode.isoc_ctl.isoc_copy(dev, urb);
671 spin_unlock(&dev->video_mode.slock);
672
673 /* Reset urb buffers */
674 for (i = 0; i < urb->number_of_packets; i++) {
675 urb->iso_frame_desc[i].status = 0;
676 urb->iso_frame_desc[i].actual_length = 0;
677 }
678 urb->status = 0;
679
680 urb->status = usb_submit_urb(urb, GFP_ATOMIC);
681 if (urb->status) {
682 cx231xx_isocdbg("urb resubmit failed (error=%i)\n",
683 urb->status);
684 }
685}
686
687/*
688 * Stop and Deallocate URBs
689 */
690void cx231xx_uninit_isoc(struct cx231xx *dev)
691{
692 struct urb *urb;
693 int i;
694
695 cx231xx_isocdbg("cx231xx: called cx231xx_uninit_isoc\n");
696
697 dev->video_mode.isoc_ctl.nfields = -1;
698 for (i = 0; i < dev->video_mode.isoc_ctl.num_bufs; i++) {
699 urb = dev->video_mode.isoc_ctl.urb[i];
700 if (urb) {
701 if (!irqs_disabled())
702 usb_kill_urb(urb);
703 else
704 usb_unlink_urb(urb);
705
706 if (dev->video_mode.isoc_ctl.transfer_buffer[i]) {
707 usb_buffer_free(dev->udev,
708 urb->transfer_buffer_length,
709 dev->video_mode.isoc_ctl.
710 transfer_buffer[i],
711 urb->transfer_dma);
712 }
713 usb_free_urb(urb);
714 dev->video_mode.isoc_ctl.urb[i] = NULL;
715 }
716 dev->video_mode.isoc_ctl.transfer_buffer[i] = NULL;
717 }
718
719 kfree(dev->video_mode.isoc_ctl.urb);
720 kfree(dev->video_mode.isoc_ctl.transfer_buffer);
721
722 dev->video_mode.isoc_ctl.urb = NULL;
723 dev->video_mode.isoc_ctl.transfer_buffer = NULL;
724 dev->video_mode.isoc_ctl.num_bufs = 0;
725
726 cx231xx_capture_start(dev, 0, Raw_Video);
727}
728EXPORT_SYMBOL_GPL(cx231xx_uninit_isoc);
729
730/*
731 * Allocate URBs and start IRQ
732 */
733int cx231xx_init_isoc(struct cx231xx *dev, int max_packets,
734 int num_bufs, int max_pkt_size,
735 int (*isoc_copy) (struct cx231xx *dev, struct urb *urb))
736{
737 struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq;
738 int i;
739 int sb_size, pipe;
740 struct urb *urb;
741 int j, k;
742 int rc;
743
744 cx231xx_isocdbg("cx231xx: called cx231xx_prepare_isoc\n");
745
746 dev->video_input = dev->video_input > 2 ? 2 : dev->video_input;
747
748 cx231xx_info("Setting Video mux to %d\n", dev->video_input);
749 video_mux(dev, dev->video_input);
750
751 /* De-allocates all pending stuff */
752 cx231xx_uninit_isoc(dev);
753
754 dev->video_mode.isoc_ctl.isoc_copy = isoc_copy;
755 dev->video_mode.isoc_ctl.num_bufs = num_bufs;
756 dma_q->pos = 0;
757 dma_q->is_partial_line = 0;
758 dma_q->last_sav = 0;
759 dma_q->current_field = -1;
760 dma_q->field1_done = 0;
761 dma_q->lines_per_field = dev->height / 2;
762 dma_q->bytes_left_in_line = dev->width << 1;
763 dma_q->lines_completed = 0;
764 for (i = 0; i < 8; i++)
765 dma_q->partial_buf[i] = 0;
766
767 dev->video_mode.isoc_ctl.urb =
768 kzalloc(sizeof(void *) * num_bufs, GFP_KERNEL);
769 if (!dev->video_mode.isoc_ctl.urb) {
770 cx231xx_errdev("cannot alloc memory for usb buffers\n");
771 return -ENOMEM;
772 }
773
774 dev->video_mode.isoc_ctl.transfer_buffer =
775 kzalloc(sizeof(void *) * num_bufs, GFP_KERNEL);
776 if (!dev->video_mode.isoc_ctl.transfer_buffer) {
777 cx231xx_errdev("cannot allocate memory for usbtransfer\n");
778 kfree(dev->video_mode.isoc_ctl.urb);
779 return -ENOMEM;
780 }
781
782 dev->video_mode.isoc_ctl.max_pkt_size = max_pkt_size;
783 dev->video_mode.isoc_ctl.buf = NULL;
784
785 sb_size = max_packets * dev->video_mode.isoc_ctl.max_pkt_size;
786
787 /* allocate urbs and transfer buffers */
788 for (i = 0; i < dev->video_mode.isoc_ctl.num_bufs; i++) {
789 urb = usb_alloc_urb(max_packets, GFP_KERNEL);
790 if (!urb) {
791 cx231xx_err("cannot alloc isoc_ctl.urb %i\n", i);
792 cx231xx_uninit_isoc(dev);
793 return -ENOMEM;
794 }
795 dev->video_mode.isoc_ctl.urb[i] = urb;
796
797 dev->video_mode.isoc_ctl.transfer_buffer[i] =
798 usb_buffer_alloc(dev->udev, sb_size, GFP_KERNEL,
799 &urb->transfer_dma);
800 if (!dev->video_mode.isoc_ctl.transfer_buffer[i]) {
801 cx231xx_err("unable to allocate %i bytes for transfer"
802 " buffer %i%s\n",
803 sb_size, i,
804 in_interrupt() ? " while in int" : "");
805 cx231xx_uninit_isoc(dev);
806 return -ENOMEM;
807 }
808 memset(dev->video_mode.isoc_ctl.transfer_buffer[i], 0, sb_size);
809
810 pipe =
811 usb_rcvisocpipe(dev->udev, dev->video_mode.end_point_addr);
812
813 usb_fill_int_urb(urb, dev->udev, pipe,
814 dev->video_mode.isoc_ctl.transfer_buffer[i],
815 sb_size, cx231xx_irq_callback, dma_q, 1);
816
817 urb->number_of_packets = max_packets;
818 urb->transfer_flags = URB_ISO_ASAP;
819
820 k = 0;
821 for (j = 0; j < max_packets; j++) {
822 urb->iso_frame_desc[j].offset = k;
823 urb->iso_frame_desc[j].length =
824 dev->video_mode.isoc_ctl.max_pkt_size;
825 k += dev->video_mode.isoc_ctl.max_pkt_size;
826 }
827 }
828
829 init_waitqueue_head(&dma_q->wq);
830
831 /* submit urbs and enables IRQ */
832 for (i = 0; i < dev->video_mode.isoc_ctl.num_bufs; i++) {
833 rc = usb_submit_urb(dev->video_mode.isoc_ctl.urb[i],
834 GFP_ATOMIC);
835 if (rc) {
836 cx231xx_err("submit of urb %i failed (error=%i)\n", i,
837 rc);
838 cx231xx_uninit_isoc(dev);
839 return rc;
840 }
841 }
842
843 cx231xx_capture_start(dev, 1, Raw_Video);
844
845 return 0;
846}
847EXPORT_SYMBOL_GPL(cx231xx_init_isoc);
848
849/*****************************************************************
850* Device Init/UnInit functions *
851******************************************************************/
852int cx231xx_dev_init(struct cx231xx *dev)
853{
854 int errCode = 0;
855
856 /* Initialize I2C bus */
857
858 /* External Master 1 Bus */
859 dev->i2c_bus[0].nr = 0;
860 dev->i2c_bus[0].dev = dev;
861 dev->i2c_bus[0].i2c_period = I2C_SPEED_1M; /* 1MHz */
862 dev->i2c_bus[0].i2c_nostop = 0;
863 dev->i2c_bus[0].i2c_reserve = 0;
864
865 /* External Master 2 Bus */
866 dev->i2c_bus[1].nr = 1;
867 dev->i2c_bus[1].dev = dev;
868 dev->i2c_bus[1].i2c_period = I2C_SPEED_1M; /* 1MHz */
869 dev->i2c_bus[1].i2c_nostop = 0;
870 dev->i2c_bus[1].i2c_reserve = 0;
871
872 /* Internal Master 3 Bus */
873 dev->i2c_bus[2].nr = 2;
874 dev->i2c_bus[2].dev = dev;
875 dev->i2c_bus[2].i2c_period = I2C_SPEED_400K; /* 400kHz */
876 dev->i2c_bus[2].i2c_nostop = 0;
877 dev->i2c_bus[2].i2c_reserve = 0;
878
879 /* register I2C buses */
880 cx231xx_i2c_register(&dev->i2c_bus[0]);
881 cx231xx_i2c_register(&dev->i2c_bus[1]);
882 cx231xx_i2c_register(&dev->i2c_bus[2]);
883
884 /* init hardware */
885 /* Note : with out calling set power mode function,
886 afe can not be set up correctly */
887 errCode = cx231xx_set_power_mode(dev, POLARIS_AVMODE_ANALOGT_TV);
888 if (errCode < 0) {
889 cx231xx_errdev
890 ("%s: Failed to set Power - errCode [%d]!\n",
891 __func__, errCode);
892 return errCode;
893 }
894
895 /* initialize Colibri block */
896 errCode = cx231xx_afe_init_super_block(dev, 0x23c);
897 if (errCode < 0) {
898 cx231xx_errdev
899 ("%s: cx231xx_afe init super block - errCode [%d]!\n",
900 __func__, errCode);
901 return errCode;
902 }
903 errCode = cx231xx_afe_init_channels(dev);
904 if (errCode < 0) {
905 cx231xx_errdev
906 ("%s: cx231xx_afe init channels - errCode [%d]!\n",
907 __func__, errCode);
908 return errCode;
909 }
910
911 /* Set DIF in By pass mode */
912 errCode = cx231xx_dif_set_standard(dev, DIF_USE_BASEBAND);
913 if (errCode < 0) {
914 cx231xx_errdev
915 ("%s: cx231xx_dif set to By pass mode - errCode [%d]!\n",
916 __func__, errCode);
917 return errCode;
918 }
919
920 /* I2S block related functions */
921 errCode = cx231xx_i2s_blk_initialize(dev);
922 if (errCode < 0) {
923 cx231xx_errdev
924 ("%s: cx231xx_i2s block initialize - errCode [%d]!\n",
925 __func__, errCode);
926 return errCode;
927 }
928
929 /* init control pins */
930 errCode = cx231xx_init_ctrl_pin_status(dev);
931 if (errCode < 0) {
932 cx231xx_errdev("%s: cx231xx_init ctrl pins - errCode [%d]!\n",
933 __func__, errCode);
934 return errCode;
935 }
936
937 /* set AGC mode to Analog */
938 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 1);
939 if (errCode < 0) {
940 cx231xx_errdev
941 ("%s: cx231xx_AGC mode to Analog - errCode [%d]!\n",
942 __func__, errCode);
943 return errCode;
944 }
945
946 /* set all alternate settings to zero initially */
947 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 0);
948 cx231xx_set_alt_setting(dev, INDEX_VANC, 0);
949 cx231xx_set_alt_setting(dev, INDEX_HANC, 0);
950 if (dev->board.has_dvb)
951 cx231xx_set_alt_setting(dev, INDEX_TS1, 0);
952
953 /* set the I2C master port to 3 on channel 1 */
954 errCode = cx231xx_enable_i2c_for_tuner(dev, I2C_3);
955
956 return errCode;
957}
958EXPORT_SYMBOL_GPL(cx231xx_dev_init);
959
960void cx231xx_dev_uninit(struct cx231xx *dev)
961{
962 /* Un Initialize I2C bus */
963 cx231xx_i2c_unregister(&dev->i2c_bus[2]);
964 cx231xx_i2c_unregister(&dev->i2c_bus[1]);
965 cx231xx_i2c_unregister(&dev->i2c_bus[0]);
966}
967EXPORT_SYMBOL_GPL(cx231xx_dev_uninit);
968
969/*****************************************************************
970* G P I O related functions *
971******************************************************************/
972int cx231xx_send_gpio_cmd(struct cx231xx *dev, u32 gpio_bit, u8 * gpio_val,
973 u8 len, u8 request, u8 direction)
974{
975 int status = 0;
976 struct VENDOR_REQUEST_IN ven_req;
977
978 /* Set wValue */
979 ven_req.wValue = (u16) (gpio_bit >> 16 & 0xffff);
980
981 /* set request */
982 if (!request) {
983 if (direction)
984 ven_req.bRequest = VRT_GET_GPIO; /* 0x8 gpio */
985 else
986 ven_req.bRequest = VRT_SET_GPIO; /* 0x9 gpio */
987 } else {
988 if (direction)
989 ven_req.bRequest = VRT_GET_GPIE; /* 0xa gpie */
990 else
991 ven_req.bRequest = VRT_SET_GPIE; /* 0xb gpie */
992 }
993
994 /* set index value */
995 ven_req.wIndex = (u16) (gpio_bit & 0xffff);
996
997 /* set wLength value */
998 ven_req.wLength = len;
999
1000 /* set bData value */
1001 ven_req.bData = 0;
1002
1003 /* set the buffer for read / write */
1004 ven_req.pBuff = gpio_val;
1005
1006 /* set the direction */
1007 if (direction) {
1008 ven_req.direction = USB_DIR_IN;
1009 memset(ven_req.pBuff, 0x00, ven_req.wLength);
1010 } else
1011 ven_req.direction = USB_DIR_OUT;
1012
1013
1014 /* call common vendor command request */
1015 status = cx231xx_send_vendor_cmd(dev, &ven_req);
1016 if (status < 0) {
1017 cx231xx_info
1018 ("UsbInterface::sendCommand, failed with status -%d\n",
1019 status);
1020 }
1021
1022 return status;
1023}
1024EXPORT_SYMBOL_GPL(cx231xx_send_gpio_cmd);
1025
1026/*****************************************************************
1027 * C O N T R O L - Register R E A D / W R I T E functions *
1028 *****************************************************************/
1029int cx231xx_mode_register(struct cx231xx *dev, u16 address, u32 mode)
1030{
1031 u8 value[4] = { 0x0, 0x0, 0x0, 0x0 };
1032 u32 tmp = 0;
1033 int status = 0;
1034
1035 status =
1036 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, address, value, 4);
1037 if (status < 0)
1038 return status;
1039
1040 tmp = *((u32 *) value);
1041 tmp |= mode;
1042
1043 value[0] = (u8) tmp;
1044 value[1] = (u8) (tmp >> 8);
1045 value[2] = (u8) (tmp >> 16);
1046 value[3] = (u8) (tmp >> 24);
1047
1048 status =
1049 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, address, value, 4);
1050
1051 return status;
1052}
1053
1054/*****************************************************************
1055 * I 2 C Internal C O N T R O L functions *
1056 *****************************************************************/
1057int cx231xx_read_i2c_data(struct cx231xx *dev, u8 dev_addr, u16 saddr,
1058 u8 saddr_len, u32 *data, u8 data_len)
1059{
1060 int status = 0;
1061 struct cx231xx_i2c_xfer_data req_data;
1062 u8 value[4] = { 0, 0, 0, 0 };
1063
1064 if (saddr_len == 0)
1065 saddr = 0;
1066 else if (saddr_len == 0)
1067 saddr &= 0xff;
1068
1069 /* prepare xfer_data struct */
1070 req_data.dev_addr = dev_addr >> 1;
1071 req_data.direction = I2C_M_RD;
1072 req_data.saddr_len = saddr_len;
1073 req_data.saddr_dat = saddr;
1074 req_data.buf_size = data_len;
1075 req_data.p_buffer = (u8 *) value;
1076
1077 /* usb send command */
1078 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[0], &req_data);
1079
1080 if (status >= 0) {
1081 /* Copy the data read back to main buffer */
1082 if (data_len == 1)
1083 *data = value[0];
1084 else
1085 *data =
1086 value[0] | value[1] << 8 | value[2] << 16 | value[3]
1087 << 24;
1088 }
1089
1090 return status;
1091}
1092
1093int cx231xx_write_i2c_data(struct cx231xx *dev, u8 dev_addr, u16 saddr,
1094 u8 saddr_len, u32 data, u8 data_len)
1095{
1096 int status = 0;
1097 u8 value[4] = { 0, 0, 0, 0 };
1098 struct cx231xx_i2c_xfer_data req_data;
1099
1100 value[0] = (u8) data;
1101 value[1] = (u8) (data >> 8);
1102 value[2] = (u8) (data >> 16);
1103 value[3] = (u8) (data >> 24);
1104
1105 if (saddr_len == 0)
1106 saddr = 0;
1107 else if (saddr_len == 0)
1108 saddr &= 0xff;
1109
1110 /* prepare xfer_data struct */
1111 req_data.dev_addr = dev_addr >> 1;
1112 req_data.direction = 0;
1113 req_data.saddr_len = saddr_len;
1114 req_data.saddr_dat = saddr;
1115 req_data.buf_size = data_len;
1116 req_data.p_buffer = value;
1117
1118 /* usb send command */
1119 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[0], &req_data);
1120
1121 return status;
1122}
1123
1124int cx231xx_reg_mask_write(struct cx231xx *dev, u8 dev_addr, u8 size,
1125 u16 register_address, u8 bit_start, u8 bit_end,
1126 u32 value)
1127{
1128 int status = 0;
1129 u32 tmp;
1130 u32 mask = 0;
1131 int i;
1132
1133 if (bit_start > (size - 1) || bit_end > (size - 1))
1134 return -1;
1135
1136 if (size == 8) {
1137 status =
1138 cx231xx_read_i2c_data(dev, dev_addr, register_address, 2,
1139 &tmp, 1);
1140 } else {
1141 status =
1142 cx231xx_read_i2c_data(dev, dev_addr, register_address, 2,
1143 &tmp, 4);
1144 }
1145
1146 if (status < 0)
1147 return status;
1148
1149 mask = 1 << bit_end;
1150 for (i = bit_end; i > bit_start && i > 0; i--)
1151 mask = mask + (1 << (i - 1));
1152
1153 value <<= bit_start;
1154
1155 if (size == 8) {
1156 tmp &= ~mask;
1157 tmp |= value;
1158 tmp &= 0xff;
1159 status =
1160 cx231xx_write_i2c_data(dev, dev_addr, register_address, 2,
1161 tmp, 1);
1162 } else {
1163 tmp &= ~mask;
1164 tmp |= value;
1165 status =
1166 cx231xx_write_i2c_data(dev, dev_addr, register_address, 2,
1167 tmp, 4);
1168 }
1169
1170 return status;
1171}
1172
1173int cx231xx_read_modify_write_i2c_dword(struct cx231xx *dev, u8 dev_addr,
1174 u16 saddr, u32 mask, u32 value)
1175{
1176 u32 temp;
1177 int status = 0;
1178
1179 status = cx231xx_read_i2c_data(dev, dev_addr, saddr, 2, &temp, 4);
1180
1181 if (status < 0)
1182 return status;
1183
1184 temp &= ~mask;
1185 temp |= value;
1186
1187 status = cx231xx_write_i2c_data(dev, dev_addr, saddr, 2, temp, 4);
1188
1189 return status;
1190}
1191
1192u32 cx231xx_set_field(u32 field_mask, u32 data)
1193{
1194 u32 temp;
1195
1196 for (temp = field_mask; (temp & 1) == 0; temp >>= 1)
1197 data <<= 1;
1198
1199 return data;
1200}
diff --git a/drivers/media/video/cx231xx/cx231xx-dvb.c b/drivers/media/video/cx231xx/cx231xx-dvb.c
new file mode 100644
index 000000000000..c5082a4e8ced
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-dvb.c
@@ -0,0 +1,559 @@
1/*
2 DVB device driver for cx231xx
3
4 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 Based on em28xx driver
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#include <linux/kernel.h>
23#include <linux/usb.h>
24
25#include "cx231xx.h"
26#include <media/v4l2-common.h>
27#include <media/videobuf-vmalloc.h>
28
29#include "xc5000.h"
30#include "dvb_dummy_fe.h"
31
32MODULE_DESCRIPTION("driver for cx231xx based DVB cards");
33MODULE_AUTHOR("Srinivasa Deevi <srinivasa.deevi@conexant.com>");
34MODULE_LICENSE("GPL");
35
36static unsigned int debug;
37module_param(debug, int, 0644);
38MODULE_PARM_DESC(debug, "enable debug messages [dvb]");
39
40DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
41
42#define dprintk(level, fmt, arg...) do { \
43if (debug >= level) \
44 printk(KERN_DEBUG "%s/2-dvb: " fmt, dev->name, ## arg); \
45} while (0)
46
47#define CX231XX_DVB_NUM_BUFS 5
48#define CX231XX_DVB_MAX_PACKETSIZE 564
49#define CX231XX_DVB_MAX_PACKETS 64
50
51struct cx231xx_dvb {
52 struct dvb_frontend *frontend;
53
54 /* feed count management */
55 struct mutex lock;
56 int nfeeds;
57
58 /* general boilerplate stuff */
59 struct dvb_adapter adapter;
60 struct dvb_demux demux;
61 struct dmxdev dmxdev;
62 struct dmx_frontend fe_hw;
63 struct dmx_frontend fe_mem;
64 struct dvb_net net;
65};
66
67static inline void print_err_status(struct cx231xx *dev, int packet, int status)
68{
69 char *errmsg = "Unknown";
70
71 switch (status) {
72 case -ENOENT:
73 errmsg = "unlinked synchronuously";
74 break;
75 case -ECONNRESET:
76 errmsg = "unlinked asynchronuously";
77 break;
78 case -ENOSR:
79 errmsg = "Buffer error (overrun)";
80 break;
81 case -EPIPE:
82 errmsg = "Stalled (device not responding)";
83 break;
84 case -EOVERFLOW:
85 errmsg = "Babble (bad cable?)";
86 break;
87 case -EPROTO:
88 errmsg = "Bit-stuff error (bad cable?)";
89 break;
90 case -EILSEQ:
91 errmsg = "CRC/Timeout (could be anything)";
92 break;
93 case -ETIME:
94 errmsg = "Device does not respond";
95 break;
96 }
97 if (packet < 0) {
98 dprintk(1, "URB status %d [%s].\n", status, errmsg);
99 } else {
100 dprintk(1, "URB packet %d, status %d [%s].\n",
101 packet, status, errmsg);
102 }
103}
104
105static inline int dvb_isoc_copy(struct cx231xx *dev, struct urb *urb)
106{
107 int i;
108
109 if (!dev)
110 return 0;
111
112 if ((dev->state & DEV_DISCONNECTED) || (dev->state & DEV_MISCONFIGURED))
113 return 0;
114
115 if (urb->status < 0) {
116 print_err_status(dev, -1, urb->status);
117 if (urb->status == -ENOENT)
118 return 0;
119 }
120
121 for (i = 0; i < urb->number_of_packets; i++) {
122 int status = urb->iso_frame_desc[i].status;
123
124 if (status < 0) {
125 print_err_status(dev, i, status);
126 if (urb->iso_frame_desc[i].status != -EPROTO)
127 continue;
128 }
129
130 dvb_dmx_swfilter(&dev->dvb->demux, urb->transfer_buffer +
131 urb->iso_frame_desc[i].offset,
132 urb->iso_frame_desc[i].actual_length);
133 }
134
135 return 0;
136}
137
138static int start_streaming(struct cx231xx_dvb *dvb)
139{
140 int rc;
141 struct cx231xx *dev = dvb->adapter.priv;
142
143 usb_set_interface(dev->udev, 0, 1);
144 rc = cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE);
145 if (rc < 0)
146 return rc;
147
148 return cx231xx_init_isoc(dev, CX231XX_DVB_MAX_PACKETS,
149 CX231XX_DVB_NUM_BUFS,
150 CX231XX_DVB_MAX_PACKETSIZE, dvb_isoc_copy);
151}
152
153static int stop_streaming(struct cx231xx_dvb *dvb)
154{
155 struct cx231xx *dev = dvb->adapter.priv;
156
157 cx231xx_uninit_isoc(dev);
158
159 cx231xx_set_mode(dev, CX231XX_SUSPEND);
160
161 return 0;
162}
163
164static int start_feed(struct dvb_demux_feed *feed)
165{
166 struct dvb_demux *demux = feed->demux;
167 struct cx231xx_dvb *dvb = demux->priv;
168 int rc, ret;
169
170 if (!demux->dmx.frontend)
171 return -EINVAL;
172
173 mutex_lock(&dvb->lock);
174 dvb->nfeeds++;
175 rc = dvb->nfeeds;
176
177 if (dvb->nfeeds == 1) {
178 ret = start_streaming(dvb);
179 if (ret < 0)
180 rc = ret;
181 }
182
183 mutex_unlock(&dvb->lock);
184 return rc;
185}
186
187static int stop_feed(struct dvb_demux_feed *feed)
188{
189 struct dvb_demux *demux = feed->demux;
190 struct cx231xx_dvb *dvb = demux->priv;
191 int err = 0;
192
193 mutex_lock(&dvb->lock);
194 dvb->nfeeds--;
195
196 if (0 == dvb->nfeeds)
197 err = stop_streaming(dvb);
198
199 mutex_unlock(&dvb->lock);
200 return err;
201}
202
203/* ------------------------------------------------------------------ */
204static int cx231xx_dvb_bus_ctrl(struct dvb_frontend *fe, int acquire)
205{
206 struct cx231xx *dev = fe->dvb->priv;
207
208 if (acquire)
209 return cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE);
210 else
211 return cx231xx_set_mode(dev, CX231XX_SUSPEND);
212}
213
214/* ------------------------------------------------------------------ */
215
216static struct xc5000_config cnxt_rde250_tunerconfig = {
217 .i2c_address = 0x61,
218 .if_khz = 5380,
219};
220
221/* ------------------------------------------------------------------ */
222#if 0
223static int attach_xc5000(u8 addr, struct cx231xx *dev)
224{
225
226 struct dvb_frontend *fe;
227 struct xc5000_config cfg;
228
229 memset(&cfg, 0, sizeof(cfg));
230 cfg.i2c_adap = &dev->i2c_bus[1].i2c_adap;
231 cfg.i2c_addr = addr;
232
233 if (!dev->dvb->frontend) {
234 printk(KERN_ERR "%s/2: dvb frontend not attached. "
235 "Can't attach xc5000\n", dev->name);
236 return -EINVAL;
237 }
238
239 fe = dvb_attach(xc5000_attach, dev->dvb->frontend, &cfg);
240 if (!fe) {
241 printk(KERN_ERR "%s/2: xc5000 attach failed\n", dev->name);
242 dvb_frontend_detach(dev->dvb->frontend);
243 dev->dvb->frontend = NULL;
244 return -EINVAL;
245 }
246
247 printk(KERN_INFO "%s/2: xc5000 attached\n", dev->name);
248
249 return 0;
250}
251#endif
252
253int cx231xx_set_analog_freq(struct cx231xx *dev, u32 freq)
254{
255 int status = 0;
256
257 if ((dev->dvb != NULL) && (dev->dvb->frontend != NULL)) {
258
259 struct dvb_tuner_ops *dops = &dev->dvb->frontend->ops.tuner_ops;
260
261 if (dops->set_analog_params != NULL) {
262 struct analog_parameters params;
263
264 params.frequency = freq;
265 params.std = dev->norm;
266 params.mode = 0; /* 0- Air; 1 - cable */
267 /*params.audmode = ; */
268
269 /* Set the analog parameters to set the frequency */
270 cx231xx_info("Setting Frequency for XC5000\n");
271 dops->set_analog_params(dev->dvb->frontend, &params);
272 }
273
274 }
275
276 return status;
277}
278
279int cx231xx_reset_analog_tuner(struct cx231xx *dev)
280{
281 int status = 0;
282
283 if ((dev->dvb != NULL) && (dev->dvb->frontend != NULL)) {
284
285 struct dvb_tuner_ops *dops = &dev->dvb->frontend->ops.tuner_ops;
286
287 if (dops->init != NULL && !dev->xc_fw_load_done) {
288
289 cx231xx_info("Reloading firmware for XC5000\n");
290 status = dops->init(dev->dvb->frontend);
291 if (status == 0) {
292 dev->xc_fw_load_done = 1;
293 cx231xx_info
294 ("XC5000 firmware download completed\n");
295 } else {
296 dev->xc_fw_load_done = 0;
297 cx231xx_info
298 ("XC5000 firmware download failed !!!\n");
299 }
300 }
301
302 }
303
304 return status;
305}
306
307/* ------------------------------------------------------------------ */
308
309static int register_dvb(struct cx231xx_dvb *dvb,
310 struct module *module,
311 struct cx231xx *dev, struct device *device)
312{
313 int result;
314
315 mutex_init(&dvb->lock);
316
317 /* register adapter */
318 result = dvb_register_adapter(&dvb->adapter, dev->name, module, device,
319 adapter_nr);
320 if (result < 0) {
321 printk(KERN_WARNING
322 "%s: dvb_register_adapter failed (errno = %d)\n",
323 dev->name, result);
324 goto fail_adapter;
325 }
326
327 /* Ensure all frontends negotiate bus access */
328 dvb->frontend->ops.ts_bus_ctrl = cx231xx_dvb_bus_ctrl;
329
330 dvb->adapter.priv = dev;
331
332 /* register frontend */
333 result = dvb_register_frontend(&dvb->adapter, dvb->frontend);
334 if (result < 0) {
335 printk(KERN_WARNING
336 "%s: dvb_register_frontend failed (errno = %d)\n",
337 dev->name, result);
338 goto fail_frontend;
339 }
340
341 /* register demux stuff */
342 dvb->demux.dmx.capabilities =
343 DMX_TS_FILTERING | DMX_SECTION_FILTERING |
344 DMX_MEMORY_BASED_FILTERING;
345 dvb->demux.priv = dvb;
346 dvb->demux.filternum = 256;
347 dvb->demux.feednum = 256;
348 dvb->demux.start_feed = start_feed;
349 dvb->demux.stop_feed = stop_feed;
350
351 result = dvb_dmx_init(&dvb->demux);
352 if (result < 0) {
353 printk(KERN_WARNING "%s: dvb_dmx_init failed (errno = %d)\n",
354 dev->name, result);
355 goto fail_dmx;
356 }
357
358 dvb->dmxdev.filternum = 256;
359 dvb->dmxdev.demux = &dvb->demux.dmx;
360 dvb->dmxdev.capabilities = 0;
361 result = dvb_dmxdev_init(&dvb->dmxdev, &dvb->adapter);
362 if (result < 0) {
363 printk(KERN_WARNING "%s: dvb_dmxdev_init failed (errno = %d)\n",
364 dev->name, result);
365 goto fail_dmxdev;
366 }
367
368 dvb->fe_hw.source = DMX_FRONTEND_0;
369 result = dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->fe_hw);
370 if (result < 0) {
371 printk(KERN_WARNING
372 "%s: add_frontend failed (DMX_FRONTEND_0, errno = %d)\n",
373 dev->name, result);
374 goto fail_fe_hw;
375 }
376
377 dvb->fe_mem.source = DMX_MEMORY_FE;
378 result = dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->fe_mem);
379 if (result < 0) {
380 printk(KERN_WARNING
381 "%s: add_frontend failed (DMX_MEMORY_FE, errno = %d)\n",
382 dev->name, result);
383 goto fail_fe_mem;
384 }
385
386 result = dvb->demux.dmx.connect_frontend(&dvb->demux.dmx, &dvb->fe_hw);
387 if (result < 0) {
388 printk(KERN_WARNING
389 "%s: connect_frontend failed (errno = %d)\n", dev->name,
390 result);
391 goto fail_fe_conn;
392 }
393
394 /* register network adapter */
395 dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx);
396 return 0;
397
398fail_fe_conn:
399 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);
400fail_fe_mem:
401 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw);
402fail_fe_hw:
403 dvb_dmxdev_release(&dvb->dmxdev);
404fail_dmxdev:
405 dvb_dmx_release(&dvb->demux);
406fail_dmx:
407 dvb_unregister_frontend(dvb->frontend);
408fail_frontend:
409 dvb_frontend_detach(dvb->frontend);
410 dvb_unregister_adapter(&dvb->adapter);
411fail_adapter:
412 return result;
413}
414
415static void unregister_dvb(struct cx231xx_dvb *dvb)
416{
417 dvb_net_release(&dvb->net);
418 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);
419 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw);
420 dvb_dmxdev_release(&dvb->dmxdev);
421 dvb_dmx_release(&dvb->demux);
422 dvb_unregister_frontend(dvb->frontend);
423 dvb_frontend_detach(dvb->frontend);
424 dvb_unregister_adapter(&dvb->adapter);
425}
426
427static int dvb_init(struct cx231xx *dev)
428{
429 int result = 0;
430 struct cx231xx_dvb *dvb;
431
432 if (!dev->board.has_dvb) {
433 /* This device does not support the extension */
434 return 0;
435 }
436
437 dvb = kzalloc(sizeof(struct cx231xx_dvb), GFP_KERNEL);
438
439 if (dvb == NULL) {
440 printk(KERN_INFO "cx231xx_dvb: memory allocation failed\n");
441 return -ENOMEM;
442 }
443 dev->dvb = dvb;
444 dev->cx231xx_set_analog_freq = cx231xx_set_analog_freq;
445 dev->cx231xx_reset_analog_tuner = cx231xx_reset_analog_tuner;
446
447 cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE);
448 /* init frontend */
449 switch (dev->model) {
450 case CX231XX_BOARD_CNXT_RDE_250:
451
452 /* dev->dvb->frontend = dvb_attach(s5h1411_attach,
453 &dvico_s5h1411_config,
454 &dev->i2c_bus[1].i2c_adap); */
455 dev->dvb->frontend = dvb_attach(dvb_dummy_fe_ofdm_attach);
456
457 if (dev->dvb->frontend == NULL) {
458 printk(DRIVER_NAME
459 ": Failed to attach dummy front end\n");
460 result = -EINVAL;
461 goto out_free;
462 }
463
464 /* define general-purpose callback pointer */
465 dvb->frontend->callback = cx231xx_tuner_callback;
466
467 if (dvb_attach(xc5000_attach, dev->dvb->frontend,
468 &dev->i2c_bus[1].i2c_adap,
469 &cnxt_rde250_tunerconfig) < 0) {
470 result = -EINVAL;
471 goto out_free;
472 }
473
474 break;
475 case CX231XX_BOARD_CNXT_RDU_250:
476
477 dev->dvb->frontend = dvb_attach(dvb_dummy_fe_ofdm_attach);
478
479 if (dev->dvb->frontend == NULL) {
480 printk(DRIVER_NAME
481 ": Failed to attach dummy front end\n");
482 result = -EINVAL;
483 goto out_free;
484 }
485
486 /* define general-purpose callback pointer */
487 dvb->frontend->callback = cx231xx_tuner_callback;
488
489 if (dvb_attach(xc5000_attach, dev->dvb->frontend,
490 &dev->i2c_bus[1].i2c_adap,
491 &cnxt_rde250_tunerconfig) < 0) {
492 result = -EINVAL;
493 goto out_free;
494 }
495 break;
496
497 default:
498 printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card"
499 " isn't supported yet\n", dev->name);
500 break;
501 }
502 if (NULL == dvb->frontend) {
503 printk(KERN_ERR
504 "%s/2: frontend initialization failed\n", dev->name);
505 result = -EINVAL;
506 goto out_free;
507 }
508
509 /* register everything */
510 result = register_dvb(dvb, THIS_MODULE, dev, &dev->udev->dev);
511
512 if (result < 0)
513 goto out_free;
514
515 cx231xx_set_mode(dev, CX231XX_SUSPEND);
516 printk(KERN_INFO "Successfully loaded cx231xx-dvb\n");
517 return 0;
518
519out_free:
520 cx231xx_set_mode(dev, CX231XX_SUSPEND);
521 kfree(dvb);
522 dev->dvb = NULL;
523 return result;
524}
525
526static int dvb_fini(struct cx231xx *dev)
527{
528 if (!dev->board.has_dvb) {
529 /* This device does not support the extension */
530 return 0;
531 }
532
533 if (dev->dvb) {
534 unregister_dvb(dev->dvb);
535 dev->dvb = NULL;
536 }
537
538 return 0;
539}
540
541static struct cx231xx_ops dvb_ops = {
542 .id = CX231XX_DVB,
543 .name = "Cx231xx dvb Extension",
544 .init = dvb_init,
545 .fini = dvb_fini,
546};
547
548static int __init cx231xx_dvb_register(void)
549{
550 return cx231xx_register_extension(&dvb_ops);
551}
552
553static void __exit cx231xx_dvb_unregister(void)
554{
555 cx231xx_unregister_extension(&dvb_ops);
556}
557
558module_init(cx231xx_dvb_register);
559module_exit(cx231xx_dvb_unregister);
diff --git a/drivers/media/video/cx231xx/cx231xx-i2c.c b/drivers/media/video/cx231xx/cx231xx-i2c.c
new file mode 100644
index 000000000000..b4a03d813e00
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-i2c.c
@@ -0,0 +1,555 @@
1/*
2 cx231xx-i2c.c - driver for Conexant Cx23100/101/102 USB video capture devices
3
4 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 Based on em28xx driver
6 Based on Cx23885 driver
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/module.h>
24#include <linux/kernel.h>
25#include <linux/usb.h>
26#include <linux/i2c.h>
27#include <media/v4l2-common.h>
28#include <media/tuner.h>
29
30#include "cx231xx.h"
31
32/* ----------------------------------------------------------- */
33
34static unsigned int i2c_scan;
35module_param(i2c_scan, int, 0444);
36MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
37
38static unsigned int i2c_debug;
39module_param(i2c_debug, int, 0644);
40MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
41
42#define dprintk1(lvl, fmt, args...) \
43do { \
44 if (i2c_debug >= lvl) { \
45 printk(fmt, ##args); \
46 } \
47} while (0)
48
49#define dprintk2(lvl, fmt, args...) \
50do { \
51 if (i2c_debug >= lvl) { \
52 printk(KERN_DEBUG "%s at %s: " fmt, \
53 dev->name, __func__ , ##args); \
54 } \
55} while (0)
56
57/*
58 * cx231xx_i2c_send_bytes()
59 */
60int cx231xx_i2c_send_bytes(struct i2c_adapter *i2c_adap,
61 const struct i2c_msg *msg)
62{
63 struct cx231xx_i2c *bus = i2c_adap->algo_data;
64 struct cx231xx *dev = bus->dev;
65 struct cx231xx_i2c_xfer_data req_data;
66 int status = 0;
67 u16 size = 0;
68 u8 loop = 0;
69 u8 saddr_len = 1;
70 u8 *buf_ptr = NULL;
71 u16 saddr = 0;
72 u8 need_gpio = 0;
73
74 if ((bus->nr == 1) && (msg->addr == 0x61)
75 && (dev->tuner_type == TUNER_XC5000)) {
76
77 size = msg->len;
78
79 if (size == 2) { /* register write sub addr */
80 /* Just writing sub address will cause problem
81 * to XC5000. So ignore the request */
82 return 0;
83 } else if (size == 4) { /* register write with sub addr */
84 if (msg->len >= 2)
85 saddr = msg->buf[0] << 8 | msg->buf[1];
86 else if (msg->len == 1)
87 saddr = msg->buf[0];
88
89 switch (saddr) {
90 case 0x0000: /* start tuner calibration mode */
91 need_gpio = 1;
92 /* FW Loading is done */
93 dev->xc_fw_load_done = 1;
94 break;
95 case 0x000D: /* Set signal source */
96 case 0x0001: /* Set TV standard - Video */
97 case 0x0002: /* Set TV standard - Audio */
98 case 0x0003: /* Set RF Frequency */
99 need_gpio = 1;
100 break;
101 default:
102 if (dev->xc_fw_load_done)
103 need_gpio = 1;
104 break;
105 }
106
107 if (need_gpio) {
108 dprintk1(1,
109 "GPIO WRITE: addr 0x%x, len %d, saddr 0x%x\n",
110 msg->addr, msg->len, saddr);
111
112 return dev->cx231xx_gpio_i2c_write(dev,
113 msg->addr,
114 msg->buf,
115 msg->len);
116 }
117 }
118
119 /* special case for Xc5000 tuner case */
120 saddr_len = 1;
121
122 /* adjust the length to correct length */
123 size -= saddr_len;
124 buf_ptr = (u8 *) (msg->buf + 1);
125
126 do {
127 /* prepare xfer_data struct */
128 req_data.dev_addr = msg->addr;
129 req_data.direction = msg->flags;
130 req_data.saddr_len = saddr_len;
131 req_data.saddr_dat = msg->buf[0];
132 req_data.buf_size = size > 16 ? 16 : size;
133 req_data.p_buffer = (u8 *) (buf_ptr + loop * 16);
134
135 bus->i2c_nostop = (size > 16) ? 1 : 0;
136 bus->i2c_reserve = (loop == 0) ? 0 : 1;
137
138 /* usb send command */
139 status = dev->cx231xx_send_usb_command(bus, &req_data);
140 loop++;
141
142 if (size >= 16)
143 size -= 16;
144 else
145 size = 0;
146
147 } while (size > 0);
148
149 bus->i2c_nostop = 0;
150 bus->i2c_reserve = 0;
151
152 } else { /* regular case */
153
154 /* prepare xfer_data struct */
155 req_data.dev_addr = msg->addr;
156 req_data.direction = msg->flags;
157 req_data.saddr_len = 0;
158 req_data.saddr_dat = 0;
159 req_data.buf_size = msg->len;
160 req_data.p_buffer = msg->buf;
161
162 /* usb send command */
163 status = dev->cx231xx_send_usb_command(bus, &req_data);
164 }
165
166 return status < 0 ? status : 0;
167}
168
169/*
170 * cx231xx_i2c_recv_bytes()
171 * read a byte from the i2c device
172 */
173static int cx231xx_i2c_recv_bytes(struct i2c_adapter *i2c_adap,
174 const struct i2c_msg *msg)
175{
176 struct cx231xx_i2c *bus = i2c_adap->algo_data;
177 struct cx231xx *dev = bus->dev;
178 struct cx231xx_i2c_xfer_data req_data;
179 int status = 0;
180 u16 saddr = 0;
181 u8 need_gpio = 0;
182
183 if ((bus->nr == 1) && (msg->addr == 0x61)
184 && dev->tuner_type == TUNER_XC5000) {
185
186 if (msg->len == 2)
187 saddr = msg->buf[0] << 8 | msg->buf[1];
188 else if (msg->len == 1)
189 saddr = msg->buf[0];
190
191 if (dev->xc_fw_load_done) {
192
193 switch (saddr) {
194 case 0x0009: /* BUSY check */
195 dprintk1(1,
196 "GPIO R E A D: Special case BUSY check \n");
197 /*Try read BUSY register, just set it to zero*/
198 msg->buf[0] = 0;
199 if (msg->len == 2)
200 msg->buf[1] = 0;
201 return 0;
202 case 0x0004: /* read Lock status */
203 need_gpio = 1;
204 break;
205
206 }
207
208 if (need_gpio) {
209 /* this is a special case to handle Xceive tuner
210 clock stretch issue with gpio based I2C */
211
212 dprintk1(1,
213 "GPIO R E A D: addr 0x%x, len %d, saddr 0x%x\n",
214 msg->addr, msg->len,
215 msg->buf[0] << 8 | msg->buf[1]);
216
217 status =
218 dev->cx231xx_gpio_i2c_write(dev, msg->addr,
219 msg->buf,
220 msg->len);
221 status =
222 dev->cx231xx_gpio_i2c_read(dev, msg->addr,
223 msg->buf,
224 msg->len);
225 return status;
226 }
227 }
228
229 /* prepare xfer_data struct */
230 req_data.dev_addr = msg->addr;
231 req_data.direction = msg->flags;
232 req_data.saddr_len = msg->len;
233 req_data.saddr_dat = msg->buf[0] << 8 | msg->buf[1];
234 req_data.buf_size = msg->len;
235 req_data.p_buffer = msg->buf;
236
237 /* usb send command */
238 status = dev->cx231xx_send_usb_command(bus, &req_data);
239
240 } else {
241
242 /* prepare xfer_data struct */
243 req_data.dev_addr = msg->addr;
244 req_data.direction = msg->flags;
245 req_data.saddr_len = 0;
246 req_data.saddr_dat = 0;
247 req_data.buf_size = msg->len;
248 req_data.p_buffer = msg->buf;
249
250 /* usb send command */
251 status = dev->cx231xx_send_usb_command(bus, &req_data);
252 }
253
254 return status < 0 ? status : 0;
255}
256
257/*
258 * cx231xx_i2c_recv_bytes_with_saddr()
259 * read a byte from the i2c device
260 */
261static int cx231xx_i2c_recv_bytes_with_saddr(struct i2c_adapter *i2c_adap,
262 const struct i2c_msg *msg1,
263 const struct i2c_msg *msg2)
264{
265 struct cx231xx_i2c *bus = i2c_adap->algo_data;
266 struct cx231xx *dev = bus->dev;
267 struct cx231xx_i2c_xfer_data req_data;
268 int status = 0;
269 u16 saddr = 0;
270 u8 need_gpio = 0;
271
272 if (msg1->len == 2)
273 saddr = msg1->buf[0] << 8 | msg1->buf[1];
274 else if (msg1->len == 1)
275 saddr = msg1->buf[0];
276
277 if ((bus->nr == 1) && (msg2->addr == 0x61)
278 && dev->tuner_type == TUNER_XC5000) {
279
280 if ((msg2->len < 16)) {
281
282 dprintk1(1,
283 "i2c_read: addr 0x%x, len %d, saddr 0x%x, len %d\n",
284 msg2->addr, msg2->len, saddr, msg1->len);
285
286 switch (saddr) {
287 case 0x0008: /* read FW load status */
288 need_gpio = 1;
289 break;
290 case 0x0004: /* read Lock status */
291 need_gpio = 1;
292 break;
293 }
294
295 if (need_gpio) {
296 status =
297 dev->cx231xx_gpio_i2c_write(dev, msg1->addr,
298 msg1->buf,
299 msg1->len);
300 status =
301 dev->cx231xx_gpio_i2c_read(dev, msg2->addr,
302 msg2->buf,
303 msg2->len);
304 return status;
305 }
306 }
307 }
308
309 /* prepare xfer_data struct */
310 req_data.dev_addr = msg2->addr;
311 req_data.direction = msg2->flags;
312 req_data.saddr_len = msg1->len;
313 req_data.saddr_dat = saddr;
314 req_data.buf_size = msg2->len;
315 req_data.p_buffer = msg2->buf;
316
317 /* usb send command */
318 status = dev->cx231xx_send_usb_command(bus, &req_data);
319
320 return status < 0 ? status : 0;
321}
322
323/*
324 * cx231xx_i2c_check_for_device()
325 * check if there is a i2c_device at the supplied address
326 */
327static int cx231xx_i2c_check_for_device(struct i2c_adapter *i2c_adap,
328 const struct i2c_msg *msg)
329{
330 struct cx231xx_i2c *bus = i2c_adap->algo_data;
331 struct cx231xx *dev = bus->dev;
332 struct cx231xx_i2c_xfer_data req_data;
333 int status = 0;
334
335 /* prepare xfer_data struct */
336 req_data.dev_addr = msg->addr;
337 req_data.direction = msg->flags;
338 req_data.saddr_len = 0;
339 req_data.saddr_dat = 0;
340 req_data.buf_size = 0;
341 req_data.p_buffer = NULL;
342
343 /* usb send command */
344 status = dev->cx231xx_send_usb_command(bus, &req_data);
345
346 return status < 0 ? status : 0;
347}
348
349/*
350 * cx231xx_i2c_xfer()
351 * the main i2c transfer function
352 */
353static int cx231xx_i2c_xfer(struct i2c_adapter *i2c_adap,
354 struct i2c_msg msgs[], int num)
355{
356 struct cx231xx_i2c *bus = i2c_adap->algo_data;
357 struct cx231xx *dev = bus->dev;
358 int addr, rc, i, byte;
359
360 if (num <= 0)
361 return 0;
362
363 for (i = 0; i < num; i++) {
364
365 addr = msgs[i].addr >> 1;
366
367 dprintk2(2, "%s %s addr=%x len=%d:",
368 (msgs[i].flags & I2C_M_RD) ? "read" : "write",
369 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
370 if (!msgs[i].len) {
371 /* no len: check only for device presence */
372 rc = cx231xx_i2c_check_for_device(i2c_adap, &msgs[i]);
373 if (rc < 0) {
374 dprintk2(2, " no device\n");
375 return rc;
376 }
377
378 } else if (msgs[i].flags & I2C_M_RD) {
379 /* read bytes */
380 rc = cx231xx_i2c_recv_bytes(i2c_adap, &msgs[i]);
381 if (i2c_debug >= 2) {
382 for (byte = 0; byte < msgs[i].len; byte++)
383 printk(" %02x", msgs[i].buf[byte]);
384 }
385 } else if (i + 1 < num && (msgs[i + 1].flags & I2C_M_RD) &&
386 msgs[i].addr == msgs[i + 1].addr
387 && (msgs[i].len <= 2) && (bus->nr < 2)) {
388 /* read bytes */
389 rc = cx231xx_i2c_recv_bytes_with_saddr(i2c_adap,
390 &msgs[i],
391 &msgs[i + 1]);
392 if (i2c_debug >= 2) {
393 for (byte = 0; byte < msgs[i].len; byte++)
394 printk(" %02x", msgs[i].buf[byte]);
395 }
396 i++;
397 } else {
398 /* write bytes */
399 if (i2c_debug >= 2) {
400 for (byte = 0; byte < msgs[i].len; byte++)
401 printk(" %02x", msgs[i].buf[byte]);
402 }
403 rc = cx231xx_i2c_send_bytes(i2c_adap, &msgs[i]);
404 }
405 if (rc < 0)
406 goto err;
407 if (i2c_debug >= 2)
408 printk("\n");
409 }
410
411 return num;
412err:
413 dprintk2(2, " ERROR: %i\n", rc);
414 return rc;
415}
416
417/* ----------------------------------------------------------- */
418
419/*
420 * functionality()
421 */
422static u32 functionality(struct i2c_adapter *adap)
423{
424 return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C;
425}
426
427/*
428 * attach_inform()
429 * gets called when a device attaches to the i2c bus
430 * does some basic configuration
431 */
432static int attach_inform(struct i2c_client *client)
433{
434 struct cx231xx_i2c *bus = i2c_get_adapdata(client->adapter);
435 struct cx231xx *dev = bus->dev;
436
437 switch (client->addr << 1) {
438 case 0x8e:
439 {
440 struct IR_i2c *ir = i2c_get_clientdata(client);
441 dprintk1(1, "attach_inform: IR detected (%s).\n",
442 ir->phys);
443 cx231xx_set_ir(dev, ir);
444 break;
445 }
446 break;
447
448 default:
449 break;
450 }
451
452 return 0;
453}
454
455static struct i2c_algorithm cx231xx_algo = {
456 .master_xfer = cx231xx_i2c_xfer,
457 .functionality = functionality,
458};
459
460static struct i2c_adapter cx231xx_adap_template = {
461 .owner = THIS_MODULE,
462 .name = "cx231xx",
463 .id = I2C_HW_B_CX231XX,
464 .algo = &cx231xx_algo,
465 .client_register = attach_inform,
466};
467
468static struct i2c_client cx231xx_client_template = {
469 .name = "cx231xx internal",
470};
471
472/* ----------------------------------------------------------- */
473
474/*
475 * i2c_devs
476 * incomplete list of known devices
477 */
478static char *i2c_devs[128] = {
479 [0x60 >> 1] = "colibri",
480 [0x88 >> 1] = "hammerhead",
481 [0x8e >> 1] = "CIR",
482 [0x32 >> 1] = "GeminiIII",
483 [0x02 >> 1] = "Aquarius",
484 [0xa0 >> 1] = "eeprom",
485 [0xc0 >> 1] = "tuner/XC3028",
486 [0xc2 >> 1] = "tuner/XC5000",
487};
488
489/*
490 * cx231xx_do_i2c_scan()
491 * check i2c address range for devices
492 */
493void cx231xx_do_i2c_scan(struct cx231xx *dev, struct i2c_client *c)
494{
495 unsigned char buf;
496 int i, rc;
497
498 cx231xx_info(": Checking for I2C devices ..\n");
499 for (i = 0; i < 128; i++) {
500 c->addr = i;
501 rc = i2c_master_recv(c, &buf, 0);
502 if (rc < 0)
503 continue;
504 cx231xx_info("%s: i2c scan: found device @ 0x%x [%s]\n",
505 dev->name, i << 1,
506 i2c_devs[i] ? i2c_devs[i] : "???");
507 }
508 cx231xx_info(": Completed Checking for I2C devices.\n");
509}
510
511/*
512 * cx231xx_i2c_register()
513 * register i2c bus
514 */
515int cx231xx_i2c_register(struct cx231xx_i2c *bus)
516{
517 struct cx231xx *dev = bus->dev;
518
519 BUG_ON(!dev->cx231xx_send_usb_command);
520
521 memcpy(&bus->i2c_adap, &cx231xx_adap_template, sizeof(bus->i2c_adap));
522 memcpy(&bus->i2c_algo, &cx231xx_algo, sizeof(bus->i2c_algo));
523 memcpy(&bus->i2c_client, &cx231xx_client_template,
524 sizeof(bus->i2c_client));
525
526 bus->i2c_adap.dev.parent = &dev->udev->dev;
527
528 strlcpy(bus->i2c_adap.name, bus->dev->name, sizeof(bus->i2c_adap.name));
529
530 bus->i2c_algo.data = bus;
531 bus->i2c_adap.algo_data = bus;
532 i2c_set_adapdata(&bus->i2c_adap, &dev->v4l2_dev);
533 i2c_add_adapter(&bus->i2c_adap);
534
535 bus->i2c_client.adapter = &bus->i2c_adap;
536
537 if (0 == bus->i2c_rc) {
538 if (i2c_scan)
539 cx231xx_do_i2c_scan(dev, &bus->i2c_client);
540 } else
541 cx231xx_warn("%s: i2c bus %d register FAILED\n",
542 dev->name, bus->nr);
543
544 return bus->i2c_rc;
545}
546
547/*
548 * cx231xx_i2c_unregister()
549 * unregister i2c_bus
550 */
551int cx231xx_i2c_unregister(struct cx231xx_i2c *bus)
552{
553 i2c_del_adapter(&bus->i2c_adap);
554 return 0;
555}
diff --git a/drivers/media/video/cx231xx/cx231xx-input.c b/drivers/media/video/cx231xx/cx231xx-input.c
new file mode 100644
index 000000000000..97e304c3c799
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-input.c
@@ -0,0 +1,246 @@
1/*
2 handle cx231xx IR remotes via linux kernel input layer.
3
4 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 Based on em28xx driver
6
7 < This is a place holder for IR now.>
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24#include <linux/module.h>
25#include <linux/init.h>
26#include <linux/delay.h>
27#include <linux/interrupt.h>
28#include <linux/input.h>
29#include <linux/usb.h>
30
31#include "cx231xx.h"
32
33static unsigned int ir_debug;
34module_param(ir_debug, int, 0644);
35MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]");
36
37#define i2cdprintk(fmt, arg...) \
38 if (ir_debug) { \
39 printk(KERN_DEBUG "%s/ir: " fmt, ir->c.name , ## arg); \
40 }
41
42#define dprintk(fmt, arg...) \
43 if (ir_debug) { \
44 printk(KERN_DEBUG "%s/ir: " fmt, ir->name , ## arg); \
45 }
46
47/**********************************************************
48 Polling structure used by cx231xx IR's
49 **********************************************************/
50
51struct cx231xx_ir_poll_result {
52 unsigned int toggle_bit:1;
53 unsigned int read_count:7;
54 u8 rc_address;
55 u8 rc_data[4];
56};
57
58struct cx231xx_IR {
59 struct cx231xx *dev;
60 struct input_dev *input;
61 struct ir_input_state ir;
62 char name[32];
63 char phys[32];
64
65 /* poll external decoder */
66 int polling;
67 struct work_struct work;
68 struct timer_list timer;
69 unsigned int last_toggle:1;
70 unsigned int last_readcount;
71 unsigned int repeat_interval;
72
73 int (*get_key) (struct cx231xx_IR *, struct cx231xx_ir_poll_result *);
74};
75
76/**********************************************************
77 Polling code for cx231xx
78 **********************************************************/
79
80static void cx231xx_ir_handle_key(struct cx231xx_IR *ir)
81{
82 int result;
83 int do_sendkey = 0;
84 struct cx231xx_ir_poll_result poll_result;
85
86 /* read the registers containing the IR status */
87 result = ir->get_key(ir, &poll_result);
88 if (result < 0) {
89 dprintk("ir->get_key() failed %d\n", result);
90 return;
91 }
92
93 dprintk("ir->get_key result tb=%02x rc=%02x lr=%02x data=%02x\n",
94 poll_result.toggle_bit, poll_result.read_count,
95 ir->last_readcount, poll_result.rc_data[0]);
96
97 if (ir->dev->chip_id == CHIP_ID_EM2874) {
98 /* The em2874 clears the readcount field every time the
99 register is read. The em2860/2880 datasheet says that it
100 is supposed to clear the readcount, but it doesn't. So with
101 the em2874, we are looking for a non-zero read count as
102 opposed to a readcount that is incrementing */
103 ir->last_readcount = 0;
104 }
105
106 if (poll_result.read_count == 0) {
107 /* The button has not been pressed since the last read */
108 } else if (ir->last_toggle != poll_result.toggle_bit) {
109 /* A button has been pressed */
110 dprintk("button has been pressed\n");
111 ir->last_toggle = poll_result.toggle_bit;
112 ir->repeat_interval = 0;
113 do_sendkey = 1;
114 } else if (poll_result.toggle_bit == ir->last_toggle &&
115 poll_result.read_count > 0 &&
116 poll_result.read_count != ir->last_readcount) {
117 /* The button is still being held down */
118 dprintk("button being held down\n");
119
120 /* Debouncer for first keypress */
121 if (ir->repeat_interval++ > 9) {
122 /* Start repeating after 1 second */
123 do_sendkey = 1;
124 }
125 }
126
127 if (do_sendkey) {
128 dprintk("sending keypress\n");
129 ir_input_keydown(ir->input, &ir->ir, poll_result.rc_data[0],
130 poll_result.rc_data[0]);
131 ir_input_nokey(ir->input, &ir->ir);
132 }
133
134 ir->last_readcount = poll_result.read_count;
135 return;
136}
137
138static void ir_timer(unsigned long data)
139{
140 struct cx231xx_IR *ir = (struct cx231xx_IR *)data;
141
142 schedule_work(&ir->work);
143}
144
145static void cx231xx_ir_work(struct work_struct *work)
146{
147 struct cx231xx_IR *ir = container_of(work, struct cx231xx_IR, work);
148
149 cx231xx_ir_handle_key(ir);
150 mod_timer(&ir->timer, jiffies + msecs_to_jiffies(ir->polling));
151}
152
153void cx231xx_ir_start(struct cx231xx_IR *ir)
154{
155 setup_timer(&ir->timer, ir_timer, (unsigned long)ir);
156 INIT_WORK(&ir->work, cx231xx_ir_work);
157 schedule_work(&ir->work);
158}
159
160static void cx231xx_ir_stop(struct cx231xx_IR *ir)
161{
162 del_timer_sync(&ir->timer);
163 flush_scheduled_work();
164}
165
166int cx231xx_ir_init(struct cx231xx *dev)
167{
168 struct cx231xx_IR *ir;
169 struct input_dev *input_dev;
170 u8 ir_config;
171 int err = -ENOMEM;
172
173 if (dev->board.ir_codes == NULL) {
174 /* No remote control support */
175 return 0;
176 }
177
178 ir = kzalloc(sizeof(*ir), GFP_KERNEL);
179 input_dev = input_allocate_device();
180 if (!ir || !input_dev)
181 goto err_out_free;
182
183 ir->input = input_dev;
184
185 /* Setup the proper handler based on the chip */
186 switch (dev->chip_id) {
187 default:
188 printk("Unrecognized cx231xx chip id: IR not supported\n");
189 goto err_out_free;
190 }
191
192 /* This is how often we ask the chip for IR information */
193 ir->polling = 100; /* ms */
194
195 /* init input device */
196 snprintf(ir->name, sizeof(ir->name), "cx231xx IR (%s)", dev->name);
197
198 usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
199 strlcat(ir->phys, "/input0", sizeof(ir->phys));
200
201 ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER, dev->board.ir_codes);
202 input_dev->name = ir->name;
203 input_dev->phys = ir->phys;
204 input_dev->id.bustype = BUS_USB;
205 input_dev->id.version = 1;
206 input_dev->id.vendor = le16_to_cpu(dev->udev->descriptor.idVendor);
207 input_dev->id.product = le16_to_cpu(dev->udev->descriptor.idProduct);
208
209 input_dev->dev.parent = &dev->udev->dev;
210 /* record handles to ourself */
211 ir->dev = dev;
212 dev->ir = ir;
213
214 cx231xx_ir_start(ir);
215
216 /* all done */
217 err = input_register_device(ir->input);
218 if (err)
219 goto err_out_stop;
220
221 return 0;
222err_out_stop:
223 cx231xx_ir_stop(ir);
224 dev->ir = NULL;
225err_out_free:
226 input_free_device(input_dev);
227 kfree(ir);
228 return err;
229}
230
231int cx231xx_ir_fini(struct cx231xx *dev)
232{
233 struct cx231xx_IR *ir = dev->ir;
234
235 /* skip detach on non attached boards */
236 if (!ir)
237 return 0;
238
239 cx231xx_ir_stop(ir);
240 input_unregister_device(ir->input);
241 kfree(ir);
242
243 /* done */
244 dev->ir = NULL;
245 return 0;
246}
diff --git a/drivers/media/video/cx231xx/cx231xx-pcb-cfg.c b/drivers/media/video/cx231xx/cx231xx-pcb-cfg.c
new file mode 100644
index 000000000000..7473c33e823e
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-pcb-cfg.c
@@ -0,0 +1,795 @@
1/*
2 cx231xx-pcb-config.c - driver for Conexant
3 Cx23100/101/102 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#include "cx231xx.h"
23#include "cx231xx-conf-reg.h"
24
25static unsigned int pcb_debug;
26module_param(pcb_debug, int, 0644);
27MODULE_PARM_DESC(pcb_debug, "enable pcb config debug messages [video]");
28
29/******************************************************************************/
30
31struct pcb_config cx231xx_Scenario[] = {
32 {
33 INDEX_SELFPOWER_DIGITAL_ONLY, /* index */
34 USB_SELF_POWER, /* power_type */
35 0, /* speed , not decide yet */
36 MOD_DIGITAL, /* mode */
37 SOURCE_TS_BDA, /* ts1_source, digital tv only */
38 NOT_SUPPORTED, /* ts2_source */
39 NOT_SUPPORTED, /* analog source */
40
41 0, /* digital_index */
42 0, /* analog index */
43 0, /* dif_index */
44 0, /* external_index */
45
46 1, /* only one configuration */
47 {
48 {
49 0, /* config index */
50 {
51 0, /* interrupt ep index */
52 1, /* ts1 index */
53 NOT_SUPPORTED, /* TS2 index */
54 NOT_SUPPORTED, /* AUDIO */
55 NOT_SUPPORTED, /* VIDEO */
56 NOT_SUPPORTED, /* VANC */
57 NOT_SUPPORTED, /* HANC */
58 NOT_SUPPORTED /* ir_index */
59 }
60 ,
61 }
62 ,
63 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
64 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
65 NOT_SUPPORTED}
66 }
67 ,
68 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
69 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
70 NOT_SUPPORTED}
71 }
72 }
73 ,
74 /* full-speed config */
75 {
76 {
77 0, /* config index */
78 {
79 0, /* interrupt ep index */
80 1, /* ts1 index */
81 NOT_SUPPORTED, /* TS2 index */
82 NOT_SUPPORTED, /* AUDIO */
83 NOT_SUPPORTED, /* VIDEO */
84 NOT_SUPPORTED, /* VANC */
85 NOT_SUPPORTED, /* HANC */
86 NOT_SUPPORTED /* ir_index */
87 }
88 }
89 ,
90 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
91 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
92 NOT_SUPPORTED}
93 }
94 ,
95 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
96 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
97 NOT_SUPPORTED}
98 }
99 }
100 }
101 ,
102
103 {
104 INDEX_SELFPOWER_DUAL_DIGITAL, /* index */
105 USB_SELF_POWER, /* power_type */
106 0, /* speed , not decide yet */
107 MOD_DIGITAL, /* mode */
108 SOURCE_TS_BDA, /* ts1_source, digital tv only */
109 0, /* ts2_source,need update from register */
110 NOT_SUPPORTED, /* analog source */
111 0, /* digital_index */
112 0, /* analog index */
113 0, /* dif_index */
114 0, /* external_index */
115
116 1, /* only one configuration */
117 {
118 {
119 0, /* config index */
120 {
121 0, /* interrupt ep index */
122 1, /* ts1 index */
123 2, /* TS2 index */
124 NOT_SUPPORTED, /* AUDIO */
125 NOT_SUPPORTED, /* VIDEO */
126 NOT_SUPPORTED, /* VANC */
127 NOT_SUPPORTED, /* HANC */
128 NOT_SUPPORTED /* ir_index */
129 }
130 }
131 ,
132 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
133 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
134 NOT_SUPPORTED}
135 }
136 ,
137 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
138 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
139 NOT_SUPPORTED}
140 }
141 }
142 ,
143 /* full-speed */
144 {
145 {
146 0, /* config index */
147 {
148 0, /* interrupt ep index */
149 1, /* ts1 index */
150 2, /* TS2 index */
151 NOT_SUPPORTED, /* AUDIO */
152 NOT_SUPPORTED, /* VIDEO */
153 NOT_SUPPORTED, /* VANC */
154 NOT_SUPPORTED, /* HANC */
155 NOT_SUPPORTED /* ir_index */
156 }
157 }
158 ,
159 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
160 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
161 NOT_SUPPORTED}
162 }
163 ,
164 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
165 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
166 NOT_SUPPORTED}
167 }
168 }
169 }
170 ,
171
172 {
173 INDEX_SELFPOWER_ANALOG_ONLY, /* index */
174 USB_SELF_POWER, /* power_type */
175 0, /* speed , not decide yet */
176 MOD_ANALOG | MOD_DIF | MOD_EXTERNAL, /* mode ,analog tv only */
177 NOT_SUPPORTED, /* ts1_source, NOT SUPPORT */
178 NOT_SUPPORTED, /* ts2_source,NOT SUPPORT */
179 0, /* analog source, need update */
180
181 0, /* digital_index */
182 0, /* analog index */
183 0, /* dif_index */
184 0, /* external_index */
185
186 1, /* only one configuration */
187 {
188 {
189 0, /* config index */
190 {
191 0, /* interrupt ep index */
192 NOT_SUPPORTED, /* ts1 index */
193 NOT_SUPPORTED, /* TS2 index */
194 1, /* AUDIO */
195 2, /* VIDEO */
196 3, /* VANC */
197 4, /* HANC */
198 NOT_SUPPORTED /* ir_index */
199 }
200 }
201 ,
202 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
203 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
204 NOT_SUPPORTED}
205 }
206 ,
207 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
208 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
209 NOT_SUPPORTED}
210 }
211 }
212 ,
213 /* full-speed */
214 {
215 {
216 0, /* config index */
217 {
218 0, /* interrupt ep index */
219 NOT_SUPPORTED, /* ts1 index */
220 NOT_SUPPORTED, /* TS2 index */
221 1, /* AUDIO */
222 2, /* VIDEO */
223 NOT_SUPPORTED, /* VANC */
224 NOT_SUPPORTED, /* HANC */
225 NOT_SUPPORTED /* ir_index */
226 }
227 }
228 ,
229 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
230 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
231 NOT_SUPPORTED}
232 }
233 ,
234 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
235 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
236 NOT_SUPPORTED}
237 }
238 }
239 }
240 ,
241
242 {
243 INDEX_SELFPOWER_DUAL, /* index */
244 USB_SELF_POWER, /* power_type */
245 0, /* speed , not decide yet */
246 /* mode ,analog tv and digital path */
247 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL,
248 0, /* ts1_source,will update in register */
249 NOT_SUPPORTED, /* ts2_source,NOT SUPPORT */
250 0, /* analog source need update */
251 0, /* digital_index */
252 0, /* analog index */
253 0, /* dif_index */
254 0, /* external_index */
255 1, /* only one configuration */
256 {
257 {
258 0, /* config index */
259 {
260 0, /* interrupt ep index */
261 1, /* ts1 index */
262 NOT_SUPPORTED, /* TS2 index */
263 2, /* AUDIO */
264 3, /* VIDEO */
265 4, /* VANC */
266 5, /* HANC */
267 NOT_SUPPORTED /* ir_index */
268 }
269 }
270 ,
271 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
272 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
273 NOT_SUPPORTED}
274 }
275 ,
276 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
277 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
278 NOT_SUPPORTED}
279 }
280 }
281 ,
282 /* full-speed */
283 {
284 {
285 0, /* config index */
286 {
287 0, /* interrupt ep index */
288 1, /* ts1 index */
289 NOT_SUPPORTED, /* TS2 index */
290 2, /* AUDIO */
291 3, /* VIDEO */
292 NOT_SUPPORTED, /* VANC */
293 NOT_SUPPORTED, /* HANC */
294 NOT_SUPPORTED /* ir_index */
295 }
296 }
297 ,
298 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
299 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
300 NOT_SUPPORTED}
301 }
302 ,
303 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
304 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
305 NOT_SUPPORTED}
306 }
307 }
308 }
309 ,
310
311 {
312 INDEX_SELFPOWER_TRIPLE, /* index */
313 USB_SELF_POWER, /* power_type */
314 0, /* speed , not decide yet */
315 /* mode ,analog tv and digital path */
316 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL,
317 0, /* ts1_source, update in register */
318 0, /* ts2_source,update in register */
319 0, /* analog source, need update */
320
321 0, /* digital_index */
322 0, /* analog index */
323 0, /* dif_index */
324 0, /* external_index */
325 1, /* only one configuration */
326 {
327 {
328 0, /* config index */
329 {
330 0, /* interrupt ep index */
331 1, /* ts1 index */
332 2, /* TS2 index */
333 3, /* AUDIO */
334 4, /* VIDEO */
335 5, /* VANC */
336 6, /* HANC */
337 NOT_SUPPORTED /* ir_index */
338 }
339 }
340 ,
341 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
342 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
343 NOT_SUPPORTED}
344 }
345 ,
346 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
347 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
348 NOT_SUPPORTED}
349 }
350 }
351 ,
352 /* full-speed */
353 {
354 {
355 0, /* config index */
356 {
357 0, /* interrupt ep index */
358 1, /* ts1 index */
359 2, /* TS2 index */
360 3, /* AUDIO */
361 4, /* VIDEO */
362 NOT_SUPPORTED, /* VANC */
363 NOT_SUPPORTED, /* HANC */
364 NOT_SUPPORTED /* ir_index */
365 }
366 }
367 ,
368 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
369 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
370 NOT_SUPPORTED}
371 }
372 ,
373 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
374 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
375 NOT_SUPPORTED}
376 }
377 }
378 }
379 ,
380
381 {
382 INDEX_SELFPOWER_COMPRESSOR, /* index */
383 USB_SELF_POWER, /* power_type */
384 0, /* speed , not decide yet */
385 /* mode ,analog tv AND DIGITAL path */
386 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL,
387 NOT_SUPPORTED, /* ts1_source, disable */
388 SOURCE_TS_BDA, /* ts2_source */
389 0, /* analog source,need update */
390 0, /* digital_index */
391 0, /* analog index */
392 0, /* dif_index */
393 0, /* external_index */
394 1, /* only one configuration */
395 {
396 {
397 0, /* config index */
398 {
399 0, /* interrupt ep index */
400 NOT_SUPPORTED, /* ts1 index */
401 1, /* TS2 index */
402 2, /* AUDIO */
403 3, /* VIDEO */
404 4, /* VANC */
405 5, /* HANC */
406 NOT_SUPPORTED /* ir_index */
407 }
408 }
409 ,
410 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
411 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
412 NOT_SUPPORTED}
413 }
414 ,
415 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
416 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
417 NOT_SUPPORTED}
418 }
419 }
420 ,
421 /* full-speed */
422 {
423 {
424 0, /* config index */
425 {
426 0, /* interrupt ep index */
427 NOT_SUPPORTED, /* ts1 index */
428 1, /* TS2 index */
429 2, /* AUDIO */
430 3, /* VIDEO */
431 NOT_SUPPORTED, /* VANC */
432 NOT_SUPPORTED, /* HANC */
433 NOT_SUPPORTED /* ir_index */
434 }
435 }
436 ,
437 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
438 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
439 NOT_SUPPORTED}
440 }
441 ,
442 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
443 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
444 NOT_SUPPORTED}
445 }
446 }
447 }
448 ,
449
450 {
451 INDEX_BUSPOWER_DIGITAL_ONLY, /* index */
452 USB_BUS_POWER, /* power_type */
453 0, /* speed , not decide yet */
454 MOD_DIGITAL, /* mode ,analog tv AND DIGITAL path */
455 SOURCE_TS_BDA, /* ts1_source, disable */
456 NOT_SUPPORTED, /* ts2_source */
457 NOT_SUPPORTED, /* analog source */
458
459 0, /* digital_index */
460 0, /* analog index */
461 0, /* dif_index */
462 0, /* external_index */
463
464 1, /* only one configuration */
465 {
466 {
467 0, /* config index */
468 {
469 0, /* interrupt ep index = 2 */
470 1, /* ts1 index */
471 NOT_SUPPORTED, /* TS2 index */
472 NOT_SUPPORTED, /* AUDIO */
473 NOT_SUPPORTED, /* VIDEO */
474 NOT_SUPPORTED, /* VANC */
475 NOT_SUPPORTED, /* HANC */
476 NOT_SUPPORTED /* ir_index */
477 }
478 }
479 ,
480 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
481 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
482 NOT_SUPPORTED}
483 }
484 ,
485 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
486 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
487 NOT_SUPPORTED}
488 }
489 }
490 ,
491 /* full-speed */
492 {
493 {
494 0, /* config index */
495 {
496 0, /* interrupt ep index = 2 */
497 1, /* ts1 index */
498 NOT_SUPPORTED, /* TS2 index */
499 NOT_SUPPORTED, /* AUDIO */
500 NOT_SUPPORTED, /* VIDEO */
501 NOT_SUPPORTED, /* VANC */
502 NOT_SUPPORTED, /* HANC */
503 NOT_SUPPORTED /* ir_index */
504 }
505 }
506 ,
507 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
508 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
509 NOT_SUPPORTED}
510 }
511 ,
512 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
513 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
514 NOT_SUPPORTED}
515 }
516 }
517 }
518 ,
519 {
520 INDEX_BUSPOWER_ANALOG_ONLY, /* index */
521 USB_BUS_POWER, /* power_type */
522 0, /* speed , not decide yet */
523 MOD_ANALOG, /* mode ,analog tv AND DIGITAL path */
524 NOT_SUPPORTED, /* ts1_source, disable */
525 NOT_SUPPORTED, /* ts2_source */
526 SOURCE_ANALOG, /* analog source--analog */
527 0, /* digital_index */
528 0, /* analog index */
529 0, /* dif_index */
530 0, /* external_index */
531 1, /* only one configuration */
532 {
533 {
534 0, /* config index */
535 {
536 0, /* interrupt ep index */
537 NOT_SUPPORTED, /* ts1 index */
538 NOT_SUPPORTED, /* TS2 index */
539 1, /* AUDIO */
540 2, /* VIDEO */
541 3, /* VANC */
542 4, /* HANC */
543 NOT_SUPPORTED /* ir_index */
544 }
545 }
546 ,
547 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
548 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
549 NOT_SUPPORTED}
550 }
551 ,
552 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
553 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
554 NOT_SUPPORTED}
555 }
556 }
557 ,
558 { /* full-speed */
559 {
560 0, /* config index */
561 {
562 0, /* interrupt ep index */
563 NOT_SUPPORTED, /* ts1 index */
564 NOT_SUPPORTED, /* TS2 index */
565 1, /* AUDIO */
566 2, /* VIDEO */
567 NOT_SUPPORTED, /* VANC */
568 NOT_SUPPORTED, /* HANC */
569 NOT_SUPPORTED /* ir_index */
570 }
571 }
572 ,
573 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
574 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
575 NOT_SUPPORTED}
576 }
577 ,
578 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
579 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
580 NOT_SUPPORTED}
581 }
582 }
583 }
584 ,
585 {
586 INDEX_BUSPOWER_DIF_ONLY, /* index */
587 USB_BUS_POWER, /* power_type */
588 0, /* speed , not decide yet */
589 /* mode ,analog tv AND DIGITAL path */
590 MOD_DIF | MOD_ANALOG | MOD_DIGITAL | MOD_EXTERNAL,
591 SOURCE_TS_BDA, /* ts1_source, disable */
592 NOT_SUPPORTED, /* ts2_source */
593 SOURCE_DIF | SOURCE_ANALOG | SOURCE_EXTERNAL, /* analog source, dif */
594 0, /* digital_index */
595 0, /* analog index */
596 0, /* dif_index */
597 0, /* external_index */
598 1, /* only one configuration */
599 {
600 {
601 0, /* config index */
602 {
603 0, /* interrupt ep index */
604 1, /* ts1 index */
605 NOT_SUPPORTED, /* TS2 index */
606 2, /* AUDIO */
607 3, /* VIDEO */
608 4, /* VANC */
609 5, /* HANC */
610 NOT_SUPPORTED /* ir_index */
611 }
612 }
613 ,
614 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
615 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
616 NOT_SUPPORTED}
617 }
618 ,
619 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
620 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
621 NOT_SUPPORTED}
622 }
623 }
624 ,
625 { /* full speed */
626 {
627 0, /* config index */
628 {
629 0, /* interrupt ep index */
630 1, /* ts1 index */
631 NOT_SUPPORTED, /* TS2 index */
632 2, /* AUDIO */
633 3, /* VIDEO */
634 NOT_SUPPORTED, /* VANC */
635 NOT_SUPPORTED, /* HANC */
636 NOT_SUPPORTED /* ir_index */
637 }
638 }
639 ,
640 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
641 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
642 NOT_SUPPORTED}
643 }
644 ,
645 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
646 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED,
647 NOT_SUPPORTED}
648 }
649 }
650 }
651 ,
652
653};
654
655/*****************************************************************/
656
657u32 initialize_cx231xx(struct cx231xx *dev)
658{
659 u32 config_info = 0;
660 struct pcb_config *p_pcb_info;
661 u8 usb_speed = 1; /* from register,1--HS, 0--FS */
662 u8 data[4] = { 0, 0, 0, 0 };
663 u32 ts1_source = 0;
664 u32 ts2_source = 0;
665 u32 analog_source = 0;
666 u8 _current_scenario_idx = 0xff;
667
668 ts1_source = SOURCE_TS_BDA;
669 ts2_source = SOURCE_TS_BDA;
670
671 /* read board config register to find out which
672 pcb config it is related to */
673 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, BOARD_CFG_STAT, data, 4);
674
675 config_info = *((u32 *) data);
676 usb_speed = (u8) (config_info & 0x1);
677
678 /* Verify this device belongs to Bus power or Self power device */
679 if (config_info & BUS_POWER) { /* bus-power */
680 switch (config_info & BUSPOWER_MASK) {
681 case TS1_PORT | BUS_POWER:
682 cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY].speed =
683 usb_speed;
684 p_pcb_info =
685 &cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY];
686 _current_scenario_idx = INDEX_BUSPOWER_DIGITAL_ONLY;
687 break;
688 case AVDEC_ENABLE | BUS_POWER:
689 cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY].speed =
690 usb_speed;
691 p_pcb_info =
692 &cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY];
693 _current_scenario_idx = INDEX_BUSPOWER_ANALOG_ONLY;
694 break;
695 case AVDEC_ENABLE | BUS_POWER | TS1_PORT:
696 cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY].speed =
697 usb_speed;
698 p_pcb_info = &cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY];
699 _current_scenario_idx = INDEX_BUSPOWER_DIF_ONLY;
700 break;
701 default:
702 cx231xx_info("bad config in buspower!!!!\n");
703 cx231xx_info("config_info=%x\n",
704 (config_info & BUSPOWER_MASK));
705 return 1;
706 }
707 } else { /* self-power */
708
709 switch (config_info & SELFPOWER_MASK) {
710 case TS1_PORT | SELF_POWER:
711 cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY].speed =
712 usb_speed;
713 p_pcb_info =
714 &cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY];
715 _current_scenario_idx = INDEX_SELFPOWER_DIGITAL_ONLY;
716 break;
717 case TS1_TS2_PORT | SELF_POWER:
718 cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL].speed =
719 usb_speed;
720 cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL].
721 ts2_source = ts2_source;
722 p_pcb_info =
723 &cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL];
724 _current_scenario_idx = INDEX_SELFPOWER_DUAL_DIGITAL;
725 break;
726 case AVDEC_ENABLE | SELF_POWER:
727 cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY].speed =
728 usb_speed;
729 cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY].
730 analog_source = analog_source;
731 p_pcb_info =
732 &cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY];
733 _current_scenario_idx = INDEX_SELFPOWER_ANALOG_ONLY;
734 break;
735 case AVDEC_ENABLE | TS1_PORT | SELF_POWER:
736 cx231xx_Scenario[INDEX_SELFPOWER_DUAL].speed =
737 usb_speed;
738 cx231xx_Scenario[INDEX_SELFPOWER_DUAL].ts1_source =
739 ts1_source;
740 cx231xx_Scenario[INDEX_SELFPOWER_DUAL].analog_source =
741 analog_source;
742 p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_DUAL];
743 _current_scenario_idx = INDEX_SELFPOWER_DUAL;
744 break;
745 case AVDEC_ENABLE | TS1_TS2_PORT | SELF_POWER:
746 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].speed =
747 usb_speed;
748 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts1_source =
749 ts1_source;
750 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts2_source =
751 ts2_source;
752 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].analog_source =
753 analog_source;
754 p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE];
755 _current_scenario_idx = INDEX_SELFPOWER_TRIPLE;
756 break;
757 case AVDEC_ENABLE | TS1VIP_TS2_PORT | SELF_POWER:
758 cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR].speed =
759 usb_speed;
760 cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR].
761 analog_source = analog_source;
762 p_pcb_info =
763 &cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR];
764 _current_scenario_idx = INDEX_SELFPOWER_COMPRESSOR;
765 break;
766 default:
767 cx231xx_info("bad senario!!!!!\n");
768 cx231xx_info("config_info=%x\n",
769 (config_info & SELFPOWER_MASK));
770 return 1;
771 }
772 }
773
774 dev->current_scenario_idx = _current_scenario_idx;
775
776 memcpy(&dev->current_pcb_config, p_pcb_info,
777 sizeof(struct pcb_config));
778
779 if (pcb_debug) {
780 cx231xx_info("SC(0x00) register = 0x%x\n", config_info);
781 cx231xx_info("scenario %d\n",
782 (dev->current_pcb_config.index) + 1);
783 cx231xx_info("type=%x\n", dev->current_pcb_config.type);
784 cx231xx_info("mode=%x\n", dev->current_pcb_config.mode);
785 cx231xx_info("speed=%x\n", dev->current_pcb_config.speed);
786 cx231xx_info("ts1_source=%x\n",
787 dev->current_pcb_config.ts1_source);
788 cx231xx_info("ts2_source=%x\n",
789 dev->current_pcb_config.ts2_source);
790 cx231xx_info("analog_source=%x\n",
791 dev->current_pcb_config.analog_source);
792 }
793
794 return 0;
795}
diff --git a/drivers/media/video/cx231xx/cx231xx-pcb-cfg.h b/drivers/media/video/cx231xx/cx231xx-pcb-cfg.h
new file mode 100644
index 000000000000..f5e46e89f3ab
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-pcb-cfg.h
@@ -0,0 +1,231 @@
1/*
2 cx231xx-pcb-cfg.h - driver for Conexant
3 Cx23100/101/102 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef _PCB_CONFIG_H_
23#define _PCB_CONFIG_H_
24
25#include <linux/init.h>
26#include <linux/module.h>
27
28/***************************************************************************
29 * Class Information *
30***************************************************************************/
31#define CLASS_DEFAULT 0xFF
32
33enum VENDOR_REQUEST_TYPE {
34 /* Set/Get I2C */
35 VRT_SET_I2C0 = 0x0,
36 VRT_SET_I2C1 = 0x1,
37 VRT_SET_I2C2 = 0x2,
38 VRT_GET_I2C0 = 0x4,
39 VRT_GET_I2C1 = 0x5,
40 VRT_GET_I2C2 = 0x6,
41
42 /* Set/Get GPIO */
43 VRT_SET_GPIO = 0x8,
44 VRT_GET_GPIO = 0x9,
45
46 /* Set/Get GPIE */
47 VRT_SET_GPIE = 0xA,
48 VRT_GET_GPIE = 0xB,
49
50 /* Set/Get Register Control/Status */
51 VRT_SET_REGISTER = 0xC,
52 VRT_GET_REGISTER = 0xD,
53
54 /* Get Extended Compat ID Descriptor */
55 VRT_GET_EXTCID_DESC = 0xFF,
56};
57
58enum BYTE_ENABLE_MASK {
59 ENABLE_ONE_BYTE = 0x1,
60 ENABLE_TWE_BYTE = 0x3,
61 ENABLE_THREE_BYTE = 0x7,
62 ENABLE_FOUR_BYTE = 0xF,
63};
64
65#define SPEED_MASK 0x1
66enum USB_SPEED{
67 FULL_SPEED = 0x0, /* 0: full speed */
68 HIGH_SPEED = 0x1 /* 1: high speed */
69};
70
71enum _true_false{
72 FALSE = 0,
73 TRUE = 1
74};
75
76#define TS_MASK 0x6
77enum TS_PORT{
78 NO_TS_PORT = 0x0, /* 2'b00: Neither port used. PCB not a Hybrid,
79 only offers Analog TV or Video */
80 TS1_PORT = 0x4, /* 2'b10: TS1 Input (Hybrid mode :
81 Digital or External Analog/Compressed source) */
82 TS1_TS2_PORT = 0x6, /* 2'b11: TS1 & TS2 Inputs
83 (Dual inputs from Digital and/or
84 External Analog/Compressed sources) */
85 TS1_EXT_CLOCK = 0x6, /* 2'b11: TS1 & TS2 as selector
86 to external clock */
87 TS1VIP_TS2_PORT = 0x2 /* 2'b01: TS1 used as 656/VIP Output,
88 TS2 Input (from Compressor) */
89};
90
91#define EAVP_MASK 0x8
92enum EAV_PRESENT{
93 NO_EXTERNAL_AV = 0x0, /* 0: No External A/V inputs
94 (no need for i2s blcok),
95 Analog Tuner must be present */
96 EXTERNAL_AV = 0x8 /* 1: External A/V inputs
97 present (requires i2s blk) */
98};
99
100#define ATM_MASK 0x30
101enum AT_MODE{
102 DIF_TUNER = 0x30, /* 2'b11: IF Tuner (requires use of DIF) */
103 BASEBAND_SOUND = 0x20, /* 2'b10: Baseband Composite &
104 Sound-IF Signals present */
105 NO_TUNER = 0x10 /* 2'b0x: No Analog Tuner present */
106};
107
108#define PWR_SEL_MASK 0x40
109enum POWE_TYPE{
110 SELF_POWER = 0x0, /* 0: self power */
111 BUS_POWER = 0x40 /* 1: bus power */
112};
113
114enum USB_POWE_TYPE{
115 USB_SELF_POWER = 0,
116 USB_BUS_POWER
117};
118
119#define BO_0_MASK 0x80
120enum AVDEC_STATUS{
121 AVDEC_DISABLE = 0x0, /* 0: A/V Decoder Disabled */
122 AVDEC_ENABLE = 0x80 /* 1: A/V Decoder Enabled */
123};
124
125#define BO_1_MASK 0x100
126
127#define BUSPOWER_MASK 0xC4 /* for Polaris spec 0.8 */
128#define SELFPOWER_MASK 0x86
129
130/***************************************************************************/
131#define NOT_DECIDE_YET 0xFE
132#define NOT_SUPPORTED 0xFF
133
134/***************************************************************************
135 * for mod field use *
136***************************************************************************/
137#define MOD_DIGITAL 0x1
138#define MOD_ANALOG 0x2
139#define MOD_DIF 0x4
140#define MOD_EXTERNAL 0x8
141#define CAP_ALL_MOD 0x0f
142
143/***************************************************************************
144 * source define *
145***************************************************************************/
146#define SOURCE_DIGITAL 0x1
147#define SOURCE_ANALOG 0x2
148#define SOURCE_DIF 0x4
149#define SOURCE_EXTERNAL 0x8
150#define SOURCE_TS_BDA 0x10
151#define SOURCE_TS_ENCODE 0x20
152#define SOURCE_TS_EXTERNAL 0x40
153
154/***************************************************************************
155 * interface information define *
156***************************************************************************/
157struct INTERFACE_INFO {
158 u8 interrupt_index;
159 u8 ts1_index;
160 u8 ts2_index;
161 u8 audio_index;
162 u8 video_index;
163 u8 vanc_index; /* VBI */
164 u8 hanc_index; /* Sliced CC */
165 u8 ir_index;
166};
167
168enum INDEX_INTERFACE_INFO{
169 INDEX_INTERRUPT = 0x0,
170 INDEX_TS1,
171 INDEX_TS2,
172 INDEX_AUDIO,
173 INDEX_VIDEO,
174 INDEX_VANC,
175 INDEX_HANC,
176 INDEX_IR,
177};
178
179/***************************************************************************
180 * configuration information define *
181***************************************************************************/
182struct CONFIG_INFO {
183 u8 config_index;
184 struct INTERFACE_INFO interface_info;
185};
186
187struct pcb_config {
188 u8 index;
189 u8 type; /* bus power or self power,
190 self power--0, bus_power--1 */
191 u8 speed; /* usb speed, 2.0--1, 1.1--0 */
192 u8 mode; /* digital , anlog, dif or external A/V */
193 u32 ts1_source; /* three source -- BDA,External,encode */
194 u32 ts2_source;
195 u32 analog_source;
196 u8 digital_index; /* bus-power used */
197 u8 analog_index; /* bus-power used */
198 u8 dif_index; /* bus-power used */
199 u8 external_index; /* bus-power used */
200 u8 config_num; /* current config num, 0,1,2,
201 for self-power, always 0 */
202 struct CONFIG_INFO hs_config_info[3];
203 struct CONFIG_INFO fs_config_info[3];
204};
205
206enum INDEX_PCB_CONFIG{
207 INDEX_SELFPOWER_DIGITAL_ONLY = 0x0,
208 INDEX_SELFPOWER_DUAL_DIGITAL,
209 INDEX_SELFPOWER_ANALOG_ONLY,
210 INDEX_SELFPOWER_DUAL,
211 INDEX_SELFPOWER_TRIPLE,
212 INDEX_SELFPOWER_COMPRESSOR,
213 INDEX_BUSPOWER_DIGITAL_ONLY,
214 INDEX_BUSPOWER_ANALOG_ONLY,
215 INDEX_BUSPOWER_DIF_ONLY,
216 INDEX_BUSPOWER_EXTERNAL_ONLY,
217 INDEX_BUSPOWER_EXTERNAL_ANALOG,
218 INDEX_BUSPOWER_EXTERNAL_DIF,
219 INDEX_BUSPOWER_EXTERNAL_DIGITAL,
220 INDEX_BUSPOWER_DIGITAL_ANALOG,
221 INDEX_BUSPOWER_DIGITAL_DIF,
222 INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL,
223 INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL,
224};
225
226/***************************************************************************/
227struct cx231xx;
228
229u32 initialize_cx231xx(struct cx231xx *p_dev);
230
231#endif
diff --git a/drivers/media/video/cx231xx/cx231xx-reg.h b/drivers/media/video/cx231xx/cx231xx-reg.h
new file mode 100644
index 000000000000..750c5d37d569
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-reg.h
@@ -0,0 +1,1564 @@
1/*
2 cx231xx-reg.h - driver for Conexant Cx23100/101/102
3 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef _CX231XX_REG_H
23#define _CX231XX_REG_H
24
25/*****************************************************************************
26 * VBI codes *
27*****************************************************************************/
28
29#define SAV_ACTIVE_VIDEO_FIELD1 0x80
30#define EAV_ACTIVE_VIDEO_FIELD1 0x90
31
32#define SAV_ACTIVE_VIDEO_FIELD2 0xc0
33#define EAV_ACTIVE_VIDEO_FIELD2 0xd0
34
35#define SAV_VBLANK_FIELD1 0xa0
36#define EAV_VBLANK_FIELD1 0xb0
37
38#define SAV_VBLANK_FIELD2 0xe0
39#define EAV_VBLANK_FIELD2 0xf0
40
41#define SAV_VBI_FIELD1 0x20
42#define EAV_VBI_FIELD1 0x30
43
44#define SAV_VBI_FIELD2 0x60
45#define EAV_VBI_FIELD2 0x70
46
47/*****************************************************************************/
48/* Audio ADC Registers */
49#define CH_PWR_CTRL1 0x0000000e
50#define CH_PWR_CTRL2 0x0000000f
51/*****************************************************************************/
52
53#define HOST_REG1 0x000
54#define FLD_FORCE_CHIP_SEL 0x80
55#define FLD_AUTO_INC_DIS 0x20
56#define FLD_PREFETCH_EN 0x10
57/* Reserved [2:3] */
58#define FLD_DIGITAL_PWR_DN 0x02
59#define FLD_SLEEP 0x01
60
61/*****************************************************************************/
62#define HOST_REG2 0x001
63
64/*****************************************************************************/
65#define HOST_REG3 0x002
66
67/*****************************************************************************/
68/* added for polaris */
69#define GPIO_PIN_CTL0 0x3
70#define GPIO_PIN_CTL1 0x4
71#define GPIO_PIN_CTL2 0x5
72#define GPIO_PIN_CTL3 0x6
73#define TS1_PIN_CTL0 0x7
74#define TS1_PIN_CTL1 0x8
75/*****************************************************************************/
76
77#define FLD_CLK_IN_EN 0x80
78#define FLD_XTAL_CTRL 0x70
79#define FLD_BB_CLK_MODE 0x0C
80#define FLD_REF_DIV_PLL 0x02
81#define FLD_REF_SEL_PLL1 0x01
82
83/*****************************************************************************/
84#define CHIP_CTRL 0x100
85/* Reserved [27] */
86/* Reserved [31:21] */
87#define FLD_CHIP_ACFG_DIS 0x00100000
88/* Reserved [19] */
89#define FLD_DUAL_MODE_ADC2 0x00040000
90#define FLD_SIF_EN 0x00020000
91#define FLD_SOFT_RST 0x00010000
92#define FLD_DEVICE_ID 0x0000ffff
93
94/*****************************************************************************/
95#define AFE_CTRL 0x104
96#define AFE_CTRL_C2HH_SRC_CTRL 0x104
97#define FLD_DIF_OUT_SEL 0xc0000000
98#define FLD_AUX_PLL_CLK_ALT_SEL 0x3c000000
99#define FLD_UV_ORDER_MODE 0x02000000
100#define FLD_FUNC_MODE 0x01800000
101#define FLD_ROT1_PHASE_CTL 0x007f8000
102#define FLD_AUD_IN_SEL 0x00004000
103#define FLD_LUMA_IN_SEL 0x00002000
104#define FLD_CHROMA_IN_SEL 0x00001000
105/* reserve [11:10] */
106#define FLD_INV_SPEC_DIS 0x00000200
107#define FLD_VGA_SEL_CH3 0x00000100
108#define FLD_VGA_SEL_CH2 0x00000080
109#define FLD_VGA_SEL_CH1 0x00000040
110#define FLD_DCR_BYP_CH1 0x00000020
111#define FLD_DCR_BYP_CH2 0x00000010
112#define FLD_DCR_BYP_CH3 0x00000008
113#define FLD_EN_12DB_CH3 0x00000004
114#define FLD_EN_12DB_CH2 0x00000002
115#define FLD_EN_12DB_CH1 0x00000001
116
117/* redefine in Cx231xx */
118/*****************************************************************************/
119#define DC_CTRL1 0x108
120/* reserve [31:30] */
121#define FLD_CLAMP_LVL_CH1 0x3fff8000
122#define FLD_CLAMP_LVL_CH2 0x00007fff
123/*****************************************************************************/
124
125/*****************************************************************************/
126#define DC_CTRL2 0x10c
127/* reserve [31:28] */
128#define FLD_CLAMP_LVL_CH3 0x00fffe00
129#define FLD_CLAMP_WIND_LENTH 0x000001e0
130#define FLD_C2HH_SAT_MIN 0x0000001e
131#define FLD_FLT_BYP_SEL 0x00000001
132/*****************************************************************************/
133
134/*****************************************************************************/
135#define DC_CTRL3 0x110
136/* reserve [31:16] */
137#define FLD_ERR_GAIN_CTL 0x00070000
138#define FLD_LPF_MIN 0x0000ffff
139/*****************************************************************************/
140
141/*****************************************************************************/
142#define DC_CTRL4 0x114
143/* reserve [31:31] */
144#define FLD_INTG_CH1 0x7fffffff
145/*****************************************************************************/
146
147/*****************************************************************************/
148#define DC_CTRL5 0x118
149/* reserve [31:31] */
150#define FLD_INTG_CH2 0x7fffffff
151/*****************************************************************************/
152
153/*****************************************************************************/
154#define DC_CTRL6 0x11c
155/* reserve [31:31] */
156#define FLD_INTG_CH3 0x7fffffff
157/*****************************************************************************/
158
159/*****************************************************************************/
160#define PIN_CTRL 0x120
161#define FLD_OEF_AGC_RF 0x00000001
162#define FLD_OEF_AGC_IFVGA 0x00000002
163#define FLD_OEF_AGC_IF 0x00000004
164#define FLD_REG_BO_PUD 0x80000000
165#define FLD_IR_IRQ_STAT 0x40000000
166#define FLD_AUD_IRQ_STAT 0x20000000
167#define FLD_VID_IRQ_STAT 0x10000000
168/* Reserved [27:26] */
169#define FLD_IRQ_N_OUT_EN 0x02000000
170#define FLD_IRQ_N_POLAR 0x01000000
171/* Reserved [23:6] */
172#define FLD_OE_AUX_PLL_CLK 0x00000020
173#define FLD_OE_I2S_BCLK 0x00000010
174#define FLD_OE_I2S_WCLK 0x00000008
175#define FLD_OE_AGC_IF 0x00000004
176#define FLD_OE_AGC_IFVGA 0x00000002
177#define FLD_OE_AGC_RF 0x00000001
178
179/*****************************************************************************/
180#define AUD_IO_CTRL 0x124
181/* Reserved [31:8] */
182#define FLD_I2S_PORT_DIR 0x00000080
183#define FLD_I2S_OUT_SRC 0x00000040
184#define FLD_AUD_CHAN3_SRC 0x00000030
185#define FLD_AUD_CHAN2_SRC 0x0000000c
186#define FLD_AUD_CHAN1_SRC 0x00000003
187
188/*****************************************************************************/
189#define AUD_LOCK1 0x128
190#define FLD_AUD_LOCK_KI_SHIFT 0xc0000000
191#define FLD_AUD_LOCK_KD_SHIFT 0x30000000
192/* Reserved [27:25] */
193#define FLD_EN_AV_LOCK 0x01000000
194#define FLD_VID_COUNT 0x00ffffff
195
196/*****************************************************************************/
197#define AUD_LOCK2 0x12c
198#define FLD_AUD_LOCK_KI_MULT 0xf0000000
199#define FLD_AUD_LOCK_KD_MULT 0x0F000000
200/* Reserved [23:22] */
201#define FLD_AUD_LOCK_FREQ_SHIFT 0x00300000
202#define FLD_AUD_COUNT 0x000fffff
203
204/*****************************************************************************/
205#define AFE_DIAG_CTRL1 0x134
206/* Reserved [31:16] */
207#define FLD_CUV_DLY_LENGTH 0x0000ff00
208#define FLD_YC_DLY_LENGTH 0x000000ff
209
210/*****************************************************************************/
211/* Poalris redefine */
212#define AFE_DIAG_CTRL3 0x138
213/* Reserved [31:26] */
214#define FLD_AUD_DUAL_FLAG_POL 0x02000000
215#define FLD_VID_DUAL_FLAG_POL 0x01000000
216/* Reserved [23:23] */
217#define FLD_COL_CLAMP_DIS_CH1 0x00400000
218#define FLD_COL_CLAMP_DIS_CH2 0x00200000
219#define FLD_COL_CLAMP_DIS_CH3 0x00100000
220
221#define TEST_CTRL1 0x144
222/* Reserved [31:29] */
223#define FLD_LBIST_EN 0x10000000
224/* Reserved [27:10] */
225#define FLD_FI_BIST_INTR_R 0x0000200
226#define FLD_FI_BIST_INTR_L 0x0000100
227#define FLD_BIST_FAIL_AUD_PLL 0x0000080
228#define FLD_BIST_INTR_AUD_PLL 0x0000040
229#define FLD_BIST_FAIL_VID_PLL 0x0000020
230#define FLD_BIST_INTR_VID_PLL 0x0000010
231/* Reserved [3:1] */
232#define FLD_CIR_TEST_DIS 0x00000001
233
234/*****************************************************************************/
235#define TEST_CTRL2 0x148
236#define FLD_TSXCLK_POL_CTL 0x80000000
237#define FLD_ISO_CTL_SEL 0x40000000
238#define FLD_ISO_CTL_EN 0x20000000
239#define FLD_BIST_DEBUGZ 0x10000000
240#define FLD_AUD_BIST_TEST_H 0x0f000000
241/* Reserved [23:22] */
242#define FLD_FLTRN_BIST_TEST_H 0x00020000
243#define FLD_VID_BIST_TEST_H 0x00010000
244/* Reserved [19:17] */
245#define FLD_BIST_TEST_H 0x00010000
246/* Reserved [15:13] */
247#define FLD_TAB_EN 0x00001000
248/* Reserved [11:0] */
249
250/*****************************************************************************/
251#define BIST_STAT 0x14c
252#define FLD_AUD_BIST_FAIL_H 0xfff00000
253#define FLD_FLTRN_BIST_FAIL_H 0x00180000
254#define FLD_VID_BIST_FAIL_H 0x00070000
255#define FLD_AUD_BIST_TST_DONE 0x0000fff0
256#define FLD_FLTRN_BIST_TST_DONE 0x00000008
257#define FLD_VID_BIST_TST_DONE 0x00000007
258
259/*****************************************************************************/
260/* DirectIF registers definition have been moved to DIF_reg.h */
261/*****************************************************************************/
262#define MODE_CTRL 0x400
263#define FLD_AFD_PAL60_DIS 0x20000000
264#define FLD_AFD_FORCE_SECAM 0x10000000
265#define FLD_AFD_FORCE_PALNC 0x08000000
266#define FLD_AFD_FORCE_PAL 0x04000000
267#define FLD_AFD_PALM_SEL 0x03000000
268#define FLD_CKILL_MODE 0x00300000
269#define FLD_COMB_NOTCH_MODE 0x00c00000 /* bit[19:18] */
270#define FLD_CLR_LOCK_STAT 0x00020000
271#define FLD_FAST_LOCK_MD 0x00010000
272#define FLD_WCEN 0x00008000
273#define FLD_CAGCEN 0x00004000
274#define FLD_CKILLEN 0x00002000
275#define FLD_AUTO_SC_LOCK 0x00001000
276#define FLD_MAN_SC_FAST_LOCK 0x00000800
277#define FLD_INPUT_MODE 0x00000600
278#define FLD_AFD_ACQUIRE 0x00000100
279#define FLD_AFD_NTSC_SEL 0x00000080
280#define FLD_AFD_PAL_SEL 0x00000040
281#define FLD_ACFG_DIS 0x00000020
282#define FLD_SQ_PIXEL 0x00000010
283#define FLD_VID_FMT_SEL 0x0000000f
284
285/*****************************************************************************/
286#define OUT_CTRL1 0x404
287#define FLD_POLAR 0x7f000000
288/* Reserved [23] */
289#define FLD_RND_MODE 0x00600000
290#define FLD_VIPCLAMP_EN 0x00100000
291#define FLD_VIPBLANK_EN 0x00080000
292#define FLD_VIP_OPT_AL 0x00040000
293#define FLD_IDID0_SOURCE 0x00020000
294#define FLD_DCMODE 0x00010000
295#define FLD_CLK_GATING 0x0000c000
296#define FLD_CLK_INVERT 0x00002000
297#define FLD_HSFMT 0x00001000
298#define FLD_VALIDFMT 0x00000800
299#define FLD_ACTFMT 0x00000400
300#define FLD_SWAPRAW 0x00000200
301#define FLD_CLAMPRAW_EN 0x00000100
302#define FLD_BLUE_FIELD_EN 0x00000080
303#define FLD_BLUE_FIELD_ACT 0x00000040
304#define FLD_TASKBIT_VAL 0x00000020
305#define FLD_ANC_DATA_EN 0x00000010
306#define FLD_VBIHACTRAW_EN 0x00000008
307#define FLD_MODE10B 0x00000004
308#define FLD_OUT_MODE 0x00000003
309
310/*****************************************************************************/
311#define OUT_CTRL2 0x408
312#define FLD_AUD_GRP 0xc0000000
313#define FLD_SAMPLE_RATE 0x30000000
314#define FLD_AUD_ANC_EN 0x08000000
315#define FLD_EN_C 0x04000000
316#define FLD_EN_B 0x02000000
317#define FLD_EN_A 0x01000000
318/* Reserved [23:20] */
319#define FLD_IDID1_LSB 0x000c0000
320#define FLD_IDID0_LSB 0x00030000
321#define FLD_IDID1_MSB 0x0000ff00
322#define FLD_IDID0_MSB 0x000000ff
323
324/*****************************************************************************/
325#define GEN_STAT 0x40c
326#define FLD_VCR_DETECT 0x00800000
327#define FLD_SPECIAL_PLAY_N 0x00400000
328#define FLD_VPRES 0x00200000
329#define FLD_AGC_LOCK 0x00100000
330#define FLD_CSC_LOCK 0x00080000
331#define FLD_VLOCK 0x00040000
332#define FLD_SRC_LOCK 0x00020000
333#define FLD_HLOCK 0x00010000
334#define FLD_VSYNC_N 0x00008000
335#define FLD_SRC_FIFO_UFLOW 0x00004000
336#define FLD_SRC_FIFO_OFLOW 0x00002000
337#define FLD_FIELD 0x00001000
338#define FLD_AFD_FMT_STAT 0x00000f00
339#define FLD_MV_TYPE2_PAIR 0x00000080
340#define FLD_MV_T3CS 0x00000040
341#define FLD_MV_CS 0x00000020
342#define FLD_MV_PSP 0x00000010
343/* Reserved [3] */
344#define FLD_MV_CDAT 0x00000003
345
346/*****************************************************************************/
347#define INT_STAT_MASK 0x410
348#define FLD_COMB_3D_FIFO_MSK 0x80000000
349#define FLD_WSS_DAT_AVAIL_MSK 0x40000000
350#define FLD_GS2_DAT_AVAIL_MSK 0x20000000
351#define FLD_GS1_DAT_AVAIL_MSK 0x10000000
352#define FLD_CC_DAT_AVAIL_MSK 0x08000000
353#define FLD_VPRES_CHANGE_MSK 0x04000000
354#define FLD_MV_CHANGE_MSK 0x02000000
355#define FLD_END_VBI_EVEN_MSK 0x01000000
356#define FLD_END_VBI_ODD_MSK 0x00800000
357#define FLD_FMT_CHANGE_MSK 0x00400000
358#define FLD_VSYNC_TRAIL_MSK 0x00200000
359#define FLD_HLOCK_CHANGE_MSK 0x00100000
360#define FLD_VLOCK_CHANGE_MSK 0x00080000
361#define FLD_CSC_LOCK_CHANGE_MSK 0x00040000
362#define FLD_SRC_FIFO_UFLOW_MSK 0x00020000
363#define FLD_SRC_FIFO_OFLOW_MSK 0x00010000
364#define FLD_COMB_3D_FIFO_STAT 0x00008000
365#define FLD_WSS_DAT_AVAIL_STAT 0x00004000
366#define FLD_GS2_DAT_AVAIL_STAT 0x00002000
367#define FLD_GS1_DAT_AVAIL_STAT 0x00001000
368#define FLD_CC_DAT_AVAIL_STAT 0x00000800
369#define FLD_VPRES_CHANGE_STAT 0x00000400
370#define FLD_MV_CHANGE_STAT 0x00000200
371#define FLD_END_VBI_EVEN_STAT 0x00000100
372#define FLD_END_VBI_ODD_STAT 0x00000080
373#define FLD_FMT_CHANGE_STAT 0x00000040
374#define FLD_VSYNC_TRAIL_STAT 0x00000020
375#define FLD_HLOCK_CHANGE_STAT 0x00000010
376#define FLD_VLOCK_CHANGE_STAT 0x00000008
377#define FLD_CSC_LOCK_CHANGE_STAT 0x00000004
378#define FLD_SRC_FIFO_UFLOW_STAT 0x00000002
379#define FLD_SRC_FIFO_OFLOW_STAT 0x00000001
380
381/*****************************************************************************/
382#define LUMA_CTRL 0x414
383#define BRIGHTNESS_CTRL_BYTE 0x414
384#define CONTRAST_CTRL_BYTE 0x415
385#define LUMA_CTRL_BYTE_3 0x416
386#define FLD_LUMA_CORE_SEL 0x00c00000
387#define FLD_RANGE 0x00300000
388/* Reserved [19] */
389#define FLD_PEAK_EN 0x00040000
390#define FLD_PEAK_SEL 0x00030000
391#define FLD_CNTRST 0x0000ff00
392#define FLD_BRITE 0x000000ff
393
394/*****************************************************************************/
395#define HSCALE_CTRL 0x418
396#define FLD_HFILT 0x03000000
397#define FLD_HSCALE 0x00ffffff
398
399/*****************************************************************************/
400#define VSCALE_CTRL 0x41c
401#define FLD_LINE_AVG_DIS 0x01000000
402/* Reserved [23:20] */
403#define FLD_VS_INTRLACE 0x00080000
404#define FLD_VFILT 0x00070000
405/* Reserved [15:13] */
406#define FLD_VSCALE 0x00001fff
407
408/*****************************************************************************/
409#define CHROMA_CTRL 0x420
410#define USAT_CTRL_BYTE 0x420
411#define VSAT_CTRL_BYTE 0x421
412#define HUE_CTRL_BYTE 0x422
413#define FLD_C_LPF_EN 0x20000000
414#define FLD_CHR_DELAY 0x1c000000
415#define FLD_C_CORE_SEL 0x03000000
416#define FLD_HUE 0x00ff0000
417#define FLD_VSAT 0x0000ff00
418#define FLD_USAT 0x000000ff
419
420/*****************************************************************************/
421#define VBI_LINE_CTRL1 0x424
422#define FLD_VBI_MD_LINE4 0xff000000
423#define FLD_VBI_MD_LINE3 0x00ff0000
424#define FLD_VBI_MD_LINE2 0x0000ff00
425#define FLD_VBI_MD_LINE1 0x000000ff
426
427/*****************************************************************************/
428#define VBI_LINE_CTRL2 0x428
429#define FLD_VBI_MD_LINE8 0xff000000
430#define FLD_VBI_MD_LINE7 0x00ff0000
431#define FLD_VBI_MD_LINE6 0x0000ff00
432#define FLD_VBI_MD_LINE5 0x000000ff
433
434/*****************************************************************************/
435#define VBI_LINE_CTRL3 0x42c
436#define FLD_VBI_MD_LINE12 0xff000000
437#define FLD_VBI_MD_LINE11 0x00ff0000
438#define FLD_VBI_MD_LINE10 0x0000ff00
439#define FLD_VBI_MD_LINE9 0x000000ff
440
441/*****************************************************************************/
442#define VBI_LINE_CTRL4 0x430
443#define FLD_VBI_MD_LINE16 0xff000000
444#define FLD_VBI_MD_LINE15 0x00ff0000
445#define FLD_VBI_MD_LINE14 0x0000ff00
446#define FLD_VBI_MD_LINE13 0x000000ff
447
448/*****************************************************************************/
449#define VBI_LINE_CTRL5 0x434
450#define FLD_VBI_MD_LINE17 0x000000ff
451
452/*****************************************************************************/
453#define VBI_FC_CFG 0x438
454#define FLD_FC_ALT2 0xff000000
455#define FLD_FC_ALT1 0x00ff0000
456#define FLD_FC_ALT2_TYPE 0x0000f000
457#define FLD_FC_ALT1_TYPE 0x00000f00
458/* Reserved [7:1] */
459#define FLD_FC_SEARCH_MODE 0x00000001
460
461/*****************************************************************************/
462#define VBI_MISC_CFG1 0x43c
463#define FLD_TTX_PKTADRU 0xfff00000
464#define FLD_TTX_PKTADRL 0x000fff00
465/* Reserved [7:6] */
466#define FLD_MOJI_PACK_DIS 0x00000020
467#define FLD_VPS_DEC_DIS 0x00000010
468#define FLD_CRI_MARG_SCALE 0x0000000c
469#define FLD_EDGE_RESYNC_EN 0x00000002
470#define FLD_ADAPT_SLICE_DIS 0x00000001
471
472/*****************************************************************************/
473#define VBI_MISC_CFG2 0x440
474#define FLD_HAMMING_TYPE 0x0f000000
475/* Reserved [23:20] */
476#define FLD_WSS_FIFO_RST 0x00080000
477#define FLD_GS2_FIFO_RST 0x00040000
478#define FLD_GS1_FIFO_RST 0x00020000
479#define FLD_CC_FIFO_RST 0x00010000
480/* Reserved [15:12] */
481#define FLD_VBI3_SDID 0x00000f00
482#define FLD_VBI2_SDID 0x000000f0
483#define FLD_VBI1_SDID 0x0000000f
484
485/*****************************************************************************/
486#define VBI_PAY1 0x444
487#define FLD_GS1_FIFO_DAT 0xFF000000
488#define FLD_GS1_STAT 0x00FF0000
489#define FLD_CC_FIFO_DAT 0x0000FF00
490#define FLD_CC_STAT 0x000000FF
491
492/*****************************************************************************/
493#define VBI_PAY2 0x448
494#define FLD_WSS_FIFO_DAT 0xff000000
495#define FLD_WSS_STAT 0x00ff0000
496#define FLD_GS2_FIFO_DAT 0x0000ff00
497#define FLD_GS2_STAT 0x000000ff
498
499/*****************************************************************************/
500#define VBI_CUST1_CFG1 0x44c
501/* Reserved [31] */
502#define FLD_VBI1_CRIWIN 0x7f000000
503#define FLD_VBI1_SLICE_DIST 0x00f00000
504#define FLD_VBI1_BITINC 0x000fff00
505#define FLD_VBI1_HDELAY 0x000000ff
506
507/*****************************************************************************/
508#define VBI_CUST1_CFG2 0x450
509#define FLD_VBI1_FC_LENGTH 0x1f000000
510#define FLD_VBI1_FRAME_CODE 0x00ffffff
511
512/*****************************************************************************/
513#define VBI_CUST1_CFG3 0x454
514#define FLD_VBI1_HAM_EN 0x80000000
515#define FLD_VBI1_FIFO_MODE 0x70000000
516#define FLD_VBI1_FORMAT_TYPE 0x0f000000
517#define FLD_VBI1_PAYLD_LENGTH 0x00ff0000
518#define FLD_VBI1_CRI_LENGTH 0x0000f000
519#define FLD_VBI1_CRI_MARGIN 0x00000f00
520#define FLD_VBI1_CRI_TIME 0x000000ff
521
522/*****************************************************************************/
523#define VBI_CUST2_CFG1 0x458
524/* Reserved [31] */
525#define FLD_VBI2_CRIWIN 0x7f000000
526#define FLD_VBI2_SLICE_DIST 0x00f00000
527#define FLD_VBI2_BITINC 0x000fff00
528#define FLD_VBI2_HDELAY 0x000000ff
529
530/*****************************************************************************/
531#define VBI_CUST2_CFG2 0x45c
532#define FLD_VBI2_FC_LENGTH 0x1f000000
533#define FLD_VBI2_FRAME_CODE 0x00ffffff
534
535/*****************************************************************************/
536#define VBI_CUST2_CFG3 0x460
537#define FLD_VBI2_HAM_EN 0x80000000
538#define FLD_VBI2_FIFO_MODE 0x70000000
539#define FLD_VBI2_FORMAT_TYPE 0x0f000000
540#define FLD_VBI2_PAYLD_LENGTH 0x00ff0000
541#define FLD_VBI2_CRI_LENGTH 0x0000f000
542#define FLD_VBI2_CRI_MARGIN 0x00000f00
543#define FLD_VBI2_CRI_TIME 0x000000ff
544
545/*****************************************************************************/
546#define VBI_CUST3_CFG1 0x464
547/* Reserved [31] */
548#define FLD_VBI3_CRIWIN 0x7f000000
549#define FLD_VBI3_SLICE_DIST 0x00f00000
550#define FLD_VBI3_BITINC 0x000fff00
551#define FLD_VBI3_HDELAY 0x000000ff
552
553/*****************************************************************************/
554#define VBI_CUST3_CFG2 0x468
555#define FLD_VBI3_FC_LENGTH 0x1f000000
556#define FLD_VBI3_FRAME_CODE 0x00ffffff
557
558/*****************************************************************************/
559#define VBI_CUST3_CFG3 0x46c
560#define FLD_VBI3_HAM_EN 0x80000000
561#define FLD_VBI3_FIFO_MODE 0x70000000
562#define FLD_VBI3_FORMAT_TYPE 0x0f000000
563#define FLD_VBI3_PAYLD_LENGTH 0x00ff0000
564#define FLD_VBI3_CRI_LENGTH 0x0000f000
565#define FLD_VBI3_CRI_MARGIN 0x00000f00
566#define FLD_VBI3_CRI_TIME 0x000000ff
567
568/*****************************************************************************/
569#define HORIZ_TIM_CTRL 0x470
570#define FLD_BGDEL_CNT 0xff000000
571/* Reserved [23:22] */
572#define FLD_HACTIVE_CNT 0x003ff000
573/* Reserved [11:10] */
574#define FLD_HBLANK_CNT 0x000003ff
575
576/*****************************************************************************/
577#define VERT_TIM_CTRL 0x474
578#define FLD_V656BLANK_CNT 0xff000000
579/* Reserved [23:22] */
580#define FLD_VACTIVE_CNT 0x003ff000
581/* Reserved [11:10] */
582#define FLD_VBLANK_CNT 0x000003ff
583
584/*****************************************************************************/
585#define SRC_COMB_CFG 0x478
586#define FLD_CCOMB_2LN_CHECK 0x80000000
587#define FLD_CCOMB_3LN_EN 0x40000000
588#define FLD_CCOMB_2LN_EN 0x20000000
589#define FLD_CCOMB_3D_EN 0x10000000
590/* Reserved [27] */
591#define FLD_LCOMB_3LN_EN 0x04000000
592#define FLD_LCOMB_2LN_EN 0x02000000
593#define FLD_LCOMB_3D_EN 0x01000000
594#define FLD_LUMA_LPF_SEL 0x00c00000
595#define FLD_UV_LPF_SEL 0x00300000
596#define FLD_BLEND_SLOPE 0x000f0000
597#define FLD_CCOMB_REDUCE_EN 0x00008000
598/* Reserved [14:10] */
599#define FLD_SRC_DECIM_RATIO 0x000003ff
600
601/*****************************************************************************/
602#define CHROMA_VBIOFF_CFG 0x47c
603#define FLD_VBI_VOFFSET 0x1f000000
604/* Reserved [23:20] */
605#define FLD_SC_STEP 0x000fffff
606
607/*****************************************************************************/
608#define FIELD_COUNT 0x480
609#define FLD_FIELD_COUNT_FLD 0x000003ff
610
611/*****************************************************************************/
612#define MISC_TIM_CTRL 0x484
613#define FLD_DEBOUNCE_COUNT 0xc0000000
614#define FLD_VT_LINE_CNT_HYST 0x30000000
615/* Reserved [27] */
616#define FLD_AFD_STAT 0x07ff0000
617#define FLD_VPRES_VERT_EN 0x00008000
618/* Reserved [14:12] */
619#define FLD_HR32 0x00000800
620#define FLD_TDALGN 0x00000400
621#define FLD_TDFIELD 0x00000200
622/* Reserved [8:6] */
623#define FLD_TEMPDEC 0x0000003f
624
625/*****************************************************************************/
626#define DFE_CTRL1 0x488
627#define FLD_CLAMP_AUTO_EN 0x80000000
628#define FLD_AGC_AUTO_EN 0x40000000
629#define FLD_VGA_CRUSH_EN 0x20000000
630#define FLD_VGA_AUTO_EN 0x10000000
631#define FLD_VBI_GATE_EN 0x08000000
632#define FLD_CLAMP_LEVEL 0x07000000
633/* Reserved [23:22] */
634#define FLD_CLAMP_SKIP_CNT 0x00300000
635#define FLD_AGC_GAIN 0x000fff00
636/* Reserved [7:6] */
637#define FLD_VGA_GAIN 0x0000003f
638
639/*****************************************************************************/
640#define DFE_CTRL2 0x48c
641#define FLD_VGA_ACQUIRE_RANGE 0x00ff0000
642#define FLD_VGA_TRACK_RANGE 0x0000ff00
643#define FLD_VGA_SYNC 0x000000ff
644
645/*****************************************************************************/
646#define DFE_CTRL3 0x490
647#define FLD_BP_PERCENT 0xff000000
648#define FLD_DFT_THRESHOLD 0x00ff0000
649/* Reserved [15:12] */
650#define FLD_SYNC_WIDTH_SEL 0x00000600
651#define FLD_BP_LOOP_GAIN 0x00000300
652#define FLD_SYNC_LOOP_GAIN 0x000000c0
653/* Reserved [5:4] */
654#define FLD_AGC_LOOP_GAIN 0x0000000c
655#define FLD_DCC_LOOP_GAIN 0x00000003
656
657/*****************************************************************************/
658#define PLL_CTRL 0x494
659#define FLD_PLL_KD 0xff000000
660#define FLD_PLL_KI 0x00ff0000
661#define FLD_PLL_MAX_OFFSET 0x0000ffff
662
663/*****************************************************************************/
664#define HTL_CTRL 0x498
665/* Reserved [31:24] */
666#define FLD_AUTO_LOCK_SPD 0x00080000
667#define FLD_MAN_FAST_LOCK 0x00040000
668#define FLD_HTL_15K_EN 0x00020000
669#define FLD_HTL_500K_EN 0x00010000
670#define FLD_HTL_KD 0x0000ff00
671#define FLD_HTL_KI 0x000000ff
672
673/*****************************************************************************/
674#define COMB_CTRL 0x49c
675#define FLD_COMB_PHASE_LIMIT 0xff000000
676#define FLD_CCOMB_ERR_LIMIT 0x00ff0000
677#define FLD_LUMA_THRESHOLD 0x0000ff00
678#define FLD_LCOMB_ERR_LIMIT 0x000000ff
679
680/*****************************************************************************/
681#define CRUSH_CTRL 0x4a0
682#define FLD_WTW_EN 0x00400000
683#define FLD_CRUSH_FREQ 0x00200000
684#define FLD_MAJ_SEL_EN 0x00100000
685#define FLD_MAJ_SEL 0x000c0000
686/* Reserved [17:15] */
687#define FLD_SYNC_TIP_REDUCE 0x00007e00
688/* Reserved [8:6] */
689#define FLD_SYNC_TIP_INC 0x0000003f
690
691/*****************************************************************************/
692#define SOFT_RST_CTRL 0x4a4
693#define FLD_VD_SOFT_RST 0x00008000
694/* Reserved [14:12] */
695#define FLD_REG_RST_MSK 0x00000800
696#define FLD_VOF_RST_MSK 0x00000400
697#define FLD_MVDET_RST_MSK 0x00000200
698#define FLD_VBI_RST_MSK 0x00000100
699#define FLD_SCALE_RST_MSK 0x00000080
700#define FLD_CHROMA_RST_MSK 0x00000040
701#define FLD_LUMA_RST_MSK 0x00000020
702#define FLD_VTG_RST_MSK 0x00000010
703#define FLD_YCSEP_RST_MSK 0x00000008
704#define FLD_SRC_RST_MSK 0x00000004
705#define FLD_DFE_RST_MSK 0x00000002
706/* Reserved [0] */
707
708/*****************************************************************************/
709#define MV_DT_CTRL1 0x4a8
710/* Reserved [31:29] */
711#define FLD_PSP_STOP_LINE 0x1f000000
712/* Reserved [23:21] */
713#define FLD_PSP_STRT_LINE 0x001f0000
714/* Reserved [15] */
715#define FLD_PSP_LLIMW 0x00007f00
716/* Reserved [7] */
717#define FLD_PSP_ULIMW 0x0000007f
718
719/*****************************************************************************/
720#define MV_DT_CTRL2 0x4aC
721#define FLD_CS_STOPWIN 0xff000000
722#define FLD_CS_STRTWIN 0x00ff0000
723#define FLD_CS_WIDTH 0x0000ff00
724#define FLD_PSP_SPEC_VAL 0x000000ff
725
726/*****************************************************************************/
727#define MV_DT_CTRL3 0x4B0
728#define FLD_AUTO_RATE_DIS 0x80000000
729#define FLD_HLOCK_DIS 0x40000000
730#define FLD_SEL_FIELD_CNT 0x20000000
731#define FLD_CS_TYPE2_SEL 0x10000000
732#define FLD_CS_LINE_THRSH_SEL 0x08000000
733#define FLD_CS_ATHRESH_SEL 0x04000000
734#define FLD_PSP_SPEC_SEL 0x02000000
735#define FLD_PSP_LINES_SEL 0x01000000
736#define FLD_FIELD_CNT 0x00f00000
737#define FLD_CS_TYPE2_CNT 0x000fc000
738#define FLD_CS_LINE_CNT 0x00003f00
739#define FLD_CS_ATHRESH_LEV 0x000000ff
740
741/*****************************************************************************/
742#define CHIP_VERSION 0x4b4
743/* Cx231xx redefine */
744#define VERSION 0x4b4
745#define FLD_REV_ID 0x000000ff
746
747/*****************************************************************************/
748#define MISC_DIAG_CTRL 0x4b8
749/* Reserved [31:24] */
750#define FLD_SC_CONVERGE_THRESH 0x00ff0000
751#define FLD_CCOMB_ERR_LIMIT_3D 0x0000ff00
752#define FLD_LCOMB_ERR_LIMIT_3D 0x000000ff
753
754/*****************************************************************************/
755#define VBI_PASS_CTRL 0x4bc
756#define FLD_VBI_PASS_MD 0x00200000
757#define FLD_VBI_SETUP_DIS 0x00100000
758#define FLD_PASS_LINE_CTRL 0x000fffff
759
760/*****************************************************************************/
761/* Cx231xx redefine */
762#define VCR_DET_CTRL 0x4c0
763#define FLD_EN_FIELD_PHASE_DET 0x80000000
764#define FLD_EN_HEAD_SW_DET 0x40000000
765#define FLD_FIELD_PHASE_LENGTH 0x01ff0000
766/* Reserved [29:25] */
767#define FLD_FIELD_PHASE_DELAY 0x0000ff00
768#define FLD_FIELD_PHASE_LIMIT 0x000000f0
769#define FLD_HEAD_SW_DET_LIMIT 0x0000000f
770
771/*****************************************************************************/
772#define DL_CTL 0x800
773#define DL_CTL_ADDRESS_LOW 0x800 /* Byte 1 in DL_CTL */
774#define DL_CTL_ADDRESS_HIGH 0x801 /* Byte 2 in DL_CTL */
775#define DL_CTL_DATA 0x802 /* Byte 3 in DL_CTL */
776#define DL_CTL_CONTROL 0x803 /* Byte 4 in DL_CTL */
777/* Reserved [31:5] */
778#define FLD_START_8051 0x10000000
779#define FLD_DL_ENABLE 0x08000000
780#define FLD_DL_AUTO_INC 0x04000000
781#define FLD_DL_MAP 0x03000000
782
783/*****************************************************************************/
784#define STD_DET_STATUS 0x804
785#define FLD_SPARE_STATUS1 0xff000000
786#define FLD_SPARE_STATUS0 0x00ff0000
787#define FLD_MOD_DET_STATUS1 0x0000ff00
788#define FLD_MOD_DET_STATUS0 0x000000ff
789
790/*****************************************************************************/
791#define AUD_BUILD_NUM 0x806
792#define AUD_VER_NUM 0x807
793#define STD_DET_CTL 0x808
794#define STD_DET_CTL_AUD_CTL 0x808 /* Byte 1 in STD_DET_CTL */
795#define STD_DET_CTL_PREF_MODE 0x809 /* Byte 2 in STD_DET_CTL */
796#define FLD_SPARE_CTL0 0xff000000
797#define FLD_DIS_DBX 0x00800000
798#define FLD_DIS_BTSC 0x00400000
799#define FLD_DIS_NICAM_A2 0x00200000
800#define FLD_VIDEO_PRESENT 0x00100000
801#define FLD_DW8051_VIDEO_FORMAT 0x000f0000
802#define FLD_PREF_DEC_MODE 0x0000ff00
803#define FLD_AUD_CONFIG 0x000000ff
804
805/*****************************************************************************/
806#define DW8051_INT 0x80c
807#define FLD_VIDEO_PRESENT_CHANGE 0x80000000
808#define FLD_VIDEO_CHANGE 0x40000000
809#define FLD_RDS_READY 0x20000000
810#define FLD_AC97_INT 0x10000000
811#define FLD_NICAM_BIT_ERROR_TOO_HIGH 0x08000000
812#define FLD_NICAM_LOCK 0x04000000
813#define FLD_NICAM_UNLOCK 0x02000000
814#define FLD_DFT4_TH_CMP 0x01000000
815/* Reserved [23:22] */
816#define FLD_LOCK_IND_INT 0x00200000
817#define FLD_DFT3_TH_CMP 0x00100000
818#define FLD_DFT2_TH_CMP 0x00080000
819#define FLD_DFT1_TH_CMP 0x00040000
820#define FLD_FM2_DFT_TH_CMP 0x00020000
821#define FLD_FM1_DFT_TH_CMP 0x00010000
822#define FLD_VIDEO_PRESENT_EN 0x00008000
823#define FLD_VIDEO_CHANGE_EN 0x00004000
824#define FLD_RDS_READY_EN 0x00002000
825#define FLD_AC97_INT_EN 0x00001000
826#define FLD_NICAM_BIT_ERROR_TOO_HIGH_EN 0x00000800
827#define FLD_NICAM_LOCK_EN 0x00000400
828#define FLD_NICAM_UNLOCK_EN 0x00000200
829#define FLD_DFT4_TH_CMP_EN 0x00000100
830/* Reserved [7] */
831#define FLD_DW8051_INT6_CTL1 0x00000040
832#define FLD_DW8051_INT5_CTL1 0x00000020
833#define FLD_DW8051_INT4_CTL1 0x00000010
834#define FLD_DW8051_INT3_CTL1 0x00000008
835#define FLD_DW8051_INT2_CTL1 0x00000004
836#define FLD_DW8051_INT1_CTL1 0x00000002
837#define FLD_DW8051_INT0_CTL1 0x00000001
838
839/*****************************************************************************/
840#define GENERAL_CTL 0x810
841#define FLD_RDS_INT 0x80000000
842#define FLD_NBER_INT 0x40000000
843#define FLD_NLL_INT 0x20000000
844#define FLD_IFL_INT 0x10000000
845#define FLD_FDL_INT 0x08000000
846#define FLD_AFC_INT 0x04000000
847#define FLD_AMC_INT 0x02000000
848#define FLD_AC97_INT_CTL 0x01000000
849#define FLD_RDS_INT_DIS 0x00800000
850#define FLD_NBER_INT_DIS 0x00400000
851#define FLD_NLL_INT_DIS 0x00200000
852#define FLD_IFL_INT_DIS 0x00100000
853#define FLD_FDL_INT_DIS 0x00080000
854#define FLD_FC_INT_DIS 0x00040000
855#define FLD_AMC_INT_DIS 0x00020000
856#define FLD_AC97_INT_DIS 0x00010000
857#define FLD_REV_NUM 0x0000ff00
858/* Reserved [7:5] */
859#define FLD_DBX_SOFT_RESET_REG 0x00000010
860#define FLD_AD_SOFT_RESET_REG 0x00000008
861#define FLD_SRC_SOFT_RESET_REG 0x00000004
862#define FLD_CDMOD_SOFT_RESET 0x00000002
863#define FLD_8051_SOFT_RESET 0x00000001
864
865/*****************************************************************************/
866#define AAGC_CTL 0x814
867#define FLD_AFE_12DB_EN 0x80000000
868#define FLD_AAGC_DEFAULT_EN 0x40000000
869#define FLD_AAGC_DEFAULT 0x3f000000
870/* Reserved [23] */
871#define FLD_AAGC_GAIN 0x00600000
872#define FLD_AAGC_TH 0x001f0000
873/* Reserved [15:14] */
874#define FLD_AAGC_HYST2 0x00003f00
875/* Reserved [7:6] */
876#define FLD_AAGC_HYST1 0x0000003f
877
878/*****************************************************************************/
879#define IF_SRC_CTL 0x818
880#define FLD_DBX_BYPASS 0x80000000
881/* Reserved [30:25] */
882#define FLD_IF_SRC_MODE 0x01000000
883/* Reserved [23:18] */
884#define FLD_IF_SRC_PHASE_INC 0x0001ffff
885
886/*****************************************************************************/
887#define ANALOG_DEMOD_CTL 0x81c
888#define FLD_ROT1_PHACC_PROG 0xffff0000
889/* Reserved [15] */
890#define FLD_FM1_DELAY_FIX 0x00007000
891#define FLD_PDF4_SHIFT 0x00000c00
892#define FLD_PDF3_SHIFT 0x00000300
893#define FLD_PDF2_SHIFT 0x000000c0
894#define FLD_PDF1_SHIFT 0x00000030
895#define FLD_FMBYPASS_MODE2 0x00000008
896#define FLD_FMBYPASS_MODE1 0x00000004
897#define FLD_NICAM_MODE 0x00000002
898#define FLD_BTSC_FMRADIO_MODE 0x00000001
899
900/*****************************************************************************/
901#define ROT_FREQ_CTL 0x820
902#define FLD_ROT3_PHACC_PROG 0xffff0000
903#define FLD_ROT2_PHACC_PROG 0x0000ffff
904
905/*****************************************************************************/
906#define FM_CTL 0x824
907#define FLD_FM2_DC_FB_SHIFT 0xf0000000
908#define FLD_FM2_DC_INT_SHIFT 0x0f000000
909#define FLD_FM2_AFC_RESET 0x00800000
910#define FLD_FM2_DC_PASS_IN 0x00400000
911#define FLD_FM2_DAGC_SHIFT 0x00380000
912#define FLD_FM2_CORDIC_SHIFT 0x00070000
913#define FLD_FM1_DC_FB_SHIFT 0x0000f000
914#define FLD_FM1_DC_INT_SHIFT 0x00000f00
915#define FLD_FM1_AFC_RESET 0x00000080
916#define FLD_FM1_DC_PASS_IN 0x00000040
917#define FLD_FM1_DAGC_SHIFT 0x00000038
918#define FLD_FM1_CORDIC_SHIFT 0x00000007
919
920/*****************************************************************************/
921#define LPF_PDF_CTL 0x828
922/* Reserved [31:30] */
923#define FLD_LPF32_SHIFT1 0x30000000
924#define FLD_LPF32_SHIFT2 0x0c000000
925#define FLD_LPF160_SHIFTA 0x03000000
926#define FLD_LPF160_SHIFTB 0x00c00000
927#define FLD_LPF160_SHIFTC 0x00300000
928#define FLD_LPF32_COEF_SEL2 0x000c0000
929#define FLD_LPF32_COEF_SEL1 0x00030000
930#define FLD_LPF160_COEF_SELC 0x0000c000
931#define FLD_LPF160_COEF_SELB 0x00003000
932#define FLD_LPF160_COEF_SELA 0x00000c00
933#define FLD_LPF160_IN_EN_REG 0x00000300
934#define FLD_PDF4_PDF_SEL 0x000000c0
935#define FLD_PDF3_PDF_SEL 0x00000030
936#define FLD_PDF2_PDF_SEL 0x0000000c
937#define FLD_PDF1_PDF_SEL 0x00000003
938
939/*****************************************************************************/
940#define DFT1_CTL1 0x82c
941#define FLD_DFT1_DWELL 0xffff0000
942#define FLD_DFT1_FREQ 0x0000ffff
943
944/*****************************************************************************/
945#define DFT1_CTL2 0x830
946#define FLD_DFT1_THRESHOLD 0xffffff00
947#define FLD_DFT1_CMP_CTL 0x00000080
948#define FLD_DFT1_AVG 0x00000070
949/* Reserved [3:1] */
950#define FLD_DFT1_START 0x00000001
951
952/*****************************************************************************/
953#define DFT1_STATUS 0x834
954#define FLD_DFT1_DONE 0x80000000
955#define FLD_DFT1_TH_CMP_STAT 0x40000000
956#define FLD_DFT1_RESULT 0x3fffffff
957
958/*****************************************************************************/
959#define DFT2_CTL1 0x838
960#define FLD_DFT2_DWELL 0xffff0000
961#define FLD_DFT2_FREQ 0x0000ffff
962
963/*****************************************************************************/
964#define DFT2_CTL2 0x83C
965#define FLD_DFT2_THRESHOLD 0xffffff00
966#define FLD_DFT2_CMP_CTL 0x00000080
967#define FLD_DFT2_AVG 0x00000070
968/* Reserved [3:1] */
969#define FLD_DFT2_START 0x00000001
970
971/*****************************************************************************/
972#define DFT2_STATUS 0x840
973#define FLD_DFT2_DONE 0x80000000
974#define FLD_DFT2_TH_CMP_STAT 0x40000000
975#define FLD_DFT2_RESULT 0x3fffffff
976
977/*****************************************************************************/
978#define DFT3_CTL1 0x844
979#define FLD_DFT3_DWELL 0xffff0000
980#define FLD_DFT3_FREQ 0x0000ffff
981
982/*****************************************************************************/
983#define DFT3_CTL2 0x848
984#define FLD_DFT3_THRESHOLD 0xffffff00
985#define FLD_DFT3_CMP_CTL 0x00000080
986#define FLD_DFT3_AVG 0x00000070
987/* Reserved [3:1] */
988#define FLD_DFT3_START 0x00000001
989
990/*****************************************************************************/
991#define DFT3_STATUS 0x84c
992#define FLD_DFT3_DONE 0x80000000
993#define FLD_DFT3_TH_CMP_STAT 0x40000000
994#define FLD_DFT3_RESULT 0x3fffffff
995
996/*****************************************************************************/
997#define DFT4_CTL1 0x850
998#define FLD_DFT4_DWELL 0xffff0000
999#define FLD_DFT4_FREQ 0x0000ffff
1000
1001/*****************************************************************************/
1002#define DFT4_CTL2 0x854
1003#define FLD_DFT4_THRESHOLD 0xffffff00
1004#define FLD_DFT4_CMP_CTL 0x00000080
1005#define FLD_DFT4_AVG 0x00000070
1006/* Reserved [3:1] */
1007#define FLD_DFT4_START 0x00000001
1008
1009/*****************************************************************************/
1010#define DFT4_STATUS 0x858
1011#define FLD_DFT4_DONE 0x80000000
1012#define FLD_DFT4_TH_CMP_STAT 0x40000000
1013#define FLD_DFT4_RESULT 0x3fffffff
1014
1015/*****************************************************************************/
1016#define AM_MTS_DET 0x85c
1017#define FLD_AM_MTS_MODE 0x80000000
1018/* Reserved [30:26] */
1019#define FLD_AM_SUB 0x02000000
1020#define FLD_AM_GAIN_EN 0x01000000
1021/* Reserved [23:16] */
1022#define FLD_AMMTS_GAIN_SCALE 0x0000e000
1023#define FLD_MTS_PDF_SHIFT 0x00001800
1024#define FLD_AM_REG_GAIN 0x00000700
1025#define FLD_AGC_REF 0x000000ff
1026
1027/*****************************************************************************/
1028#define ANALOG_MUX_CTL 0x860
1029/* Reserved [31:29] */
1030#define FLD_MUX21_SEL 0x10000000
1031#define FLD_MUX20_SEL 0x08000000
1032#define FLD_MUX19_SEL 0x04000000
1033#define FLD_MUX18_SEL 0x02000000
1034#define FLD_MUX17_SEL 0x01000000
1035#define FLD_MUX16_SEL 0x00800000
1036#define FLD_MUX15_SEL 0x00400000
1037#define FLD_MUX14_SEL 0x00300000
1038#define FLD_MUX13_SEL 0x000C0000
1039#define FLD_MUX12_SEL 0x00020000
1040#define FLD_MUX11_SEL 0x00018000
1041#define FLD_MUX10_SEL 0x00004000
1042#define FLD_MUX9_SEL 0x00002000
1043#define FLD_MUX8_SEL 0x00001000
1044#define FLD_MUX7_SEL 0x00000800
1045#define FLD_MUX6_SEL 0x00000600
1046#define FLD_MUX5_SEL 0x00000100
1047#define FLD_MUX4_SEL 0x000000c0
1048#define FLD_MUX3_SEL 0x00000030
1049#define FLD_MUX2_SEL 0x0000000c
1050#define FLD_MUX1_SEL 0x00000003
1051
1052/*****************************************************************************/
1053/* Cx231xx redefine */
1054#define DPLL_CTRL1 0x864
1055#define DIG_PLL_CTL1 0x864
1056
1057#define FLD_PLL_STATUS 0x07000000
1058#define FLD_BANDWIDTH_SELECT 0x00030000
1059#define FLD_PLL_SHIFT_REG 0x00007000
1060#define FLD_PHASE_SHIFT 0x000007ff
1061
1062/*****************************************************************************/
1063/* Cx231xx redefine */
1064#define DPLL_CTRL2 0x868
1065#define DIG_PLL_CTL2 0x868
1066#define FLD_PLL_UNLOCK_THR 0xff000000
1067#define FLD_PLL_LOCK_THR 0x00ff0000
1068/* Reserved [15:8] */
1069#define FLD_AM_PDF_SEL2 0x000000c0
1070#define FLD_AM_PDF_SEL1 0x00000030
1071#define FLD_DPLL_FSM_CTRL 0x0000000c
1072/* Reserved [1] */
1073#define FLD_PLL_PILOT_DET 0x00000001
1074
1075/*****************************************************************************/
1076/* Cx231xx redefine */
1077#define DPLL_CTRL3 0x86c
1078#define DIG_PLL_CTL3 0x86c
1079#define FLD_DISABLE_LOOP 0x01000000
1080#define FLD_A1_DS1_SEL 0x000c0000
1081#define FLD_A1_DS2_SEL 0x00030000
1082#define FLD_A1_KI 0x0000ff00
1083#define FLD_A1_KD 0x000000ff
1084
1085/*****************************************************************************/
1086/* Cx231xx redefine */
1087#define DPLL_CTRL4 0x870
1088#define DIG_PLL_CTL4 0x870
1089#define FLD_A2_DS1_SEL 0x000c0000
1090#define FLD_A2_DS2_SEL 0x00030000
1091#define FLD_A2_KI 0x0000ff00
1092#define FLD_A2_KD 0x000000ff
1093
1094/*****************************************************************************/
1095/* Cx231xx redefine */
1096#define DPLL_CTRL5 0x874
1097#define DIG_PLL_CTL5 0x874
1098#define FLD_TRK_DS1_SEL 0x000c0000
1099#define FLD_TRK_DS2_SEL 0x00030000
1100#define FLD_TRK_KI 0x0000ff00
1101#define FLD_TRK_KD 0x000000ff
1102
1103/*****************************************************************************/
1104#define DEEMPH_GAIN_CTL 0x878
1105#define FLD_DEEMPH2_GAIN 0xFFFF0000
1106#define FLD_DEEMPH1_GAIN 0x0000FFFF
1107
1108/*****************************************************************************/
1109/* Cx231xx redefine */
1110#define DEEMPH_COEFF1 0x87c
1111#define DEEMPH_COEF1 0x87c
1112#define FLD_DEEMPH_B0 0xffff0000
1113#define FLD_DEEMPH_A0 0x0000ffff
1114
1115/*****************************************************************************/
1116/* Cx231xx redefine */
1117#define DEEMPH_COEFF2 0x880
1118#define DEEMPH_COEF2 0x880
1119#define FLD_DEEMPH_B1 0xFFFF0000
1120#define FLD_DEEMPH_A1 0x0000FFFF
1121
1122/*****************************************************************************/
1123#define DBX1_CTL1 0x884
1124#define FLD_DBX1_WBE_GAIN 0xffff0000
1125#define FLD_DBX1_IN_GAIN 0x0000ffff
1126
1127/*****************************************************************************/
1128#define DBX1_CTL2 0x888
1129#define FLD_DBX1_SE_BYPASS 0xffff0000
1130#define FLD_DBX1_SE_GAIN 0x0000ffff
1131
1132/*****************************************************************************/
1133#define DBX1_RMS_SE 0x88C
1134#define FLD_DBX1_RMS_WBE 0xffff0000
1135#define FLD_DBX1_RMS_SE_FLD 0x0000ffff
1136
1137/*****************************************************************************/
1138#define DBX2_CTL1 0x890
1139#define FLD_DBX2_WBE_GAIN 0xffff0000
1140#define FLD_DBX2_IN_GAIN 0x0000ffff
1141
1142/*****************************************************************************/
1143#define DBX2_CTL2 0x894
1144#define FLD_DBX2_SE_BYPASS 0xffff0000
1145#define FLD_DBX2_SE_GAIN 0x0000ffff
1146
1147/*****************************************************************************/
1148#define DBX2_RMS_SE 0x898
1149#define FLD_DBX2_RMS_WBE 0xffff0000
1150#define FLD_DBX2_RMS_SE_FLD 0x0000ffff
1151
1152/*****************************************************************************/
1153#define AM_FM_DIFF 0x89c
1154/* Reserved [31] */
1155#define FLD_FM_DIFF_OUT 0x7fff0000
1156/* Reserved [15] */
1157#define FLD_AM_DIFF_OUT 0x00007fff
1158
1159/*****************************************************************************/
1160#define NICAM_FAW 0x8a0
1161#define FLD_FAWDETWINEND 0xFc000000
1162#define FLD_FAWDETWINSTR 0x03ff0000
1163/* Reserved [15:12] */
1164#define FLD_FAWDETTHRSHLD3 0x00000f00
1165#define FLD_FAWDETTHRSHLD2 0x000000f0
1166#define FLD_FAWDETTHRSHLD1 0x0000000f
1167
1168/*****************************************************************************/
1169/* Cx231xx redefine */
1170#define DEEMPH_GAIN 0x8a4
1171#define NICAM_DEEMPHGAIN 0x8a4
1172/* Reserved [31:18] */
1173#define FLD_DEEMPHGAIN 0x0003ffff
1174
1175/*****************************************************************************/
1176/* Cx231xx redefine */
1177#define DEEMPH_NUMER1 0x8a8
1178#define NICAM_DEEMPHNUMER1 0x8a8
1179/* Reserved [31:18] */
1180#define FLD_DEEMPHNUMER1 0x0003ffff
1181
1182/*****************************************************************************/
1183/* Cx231xx redefine */
1184#define DEEMPH_NUMER2 0x8ac
1185#define NICAM_DEEMPHNUMER2 0x8ac
1186/* Reserved [31:18] */
1187#define FLD_DEEMPHNUMER2 0x0003ffff
1188
1189/*****************************************************************************/
1190/* Cx231xx redefine */
1191#define DEEMPH_DENOM1 0x8b0
1192#define NICAM_DEEMPHDENOM1 0x8b0
1193/* Reserved [31:18] */
1194#define FLD_DEEMPHDENOM1 0x0003ffff
1195
1196/*****************************************************************************/
1197/* Cx231xx redefine */
1198#define DEEMPH_DENOM2 0x8b4
1199#define NICAM_DEEMPHDENOM2 0x8b4
1200/* Reserved [31:18] */
1201#define FLD_DEEMPHDENOM2 0x0003ffff
1202
1203/*****************************************************************************/
1204#define NICAM_ERRLOG_CTL1 0x8B8
1205/* Reserved [31:28] */
1206#define FLD_ERRINTRPTTHSHLD1 0x0fff0000
1207/* Reserved [15:12] */
1208#define FLD_ERRLOGPERIOD 0x00000fff
1209
1210/*****************************************************************************/
1211#define NICAM_ERRLOG_CTL2 0x8bc
1212/* Reserved [31:28] */
1213#define FLD_ERRINTRPTTHSHLD3 0x0fff0000
1214/* Reserved [15:12] */
1215#define FLD_ERRINTRPTTHSHLD2 0x00000fff
1216
1217/*****************************************************************************/
1218#define NICAM_ERRLOG_STS1 0x8c0
1219/* Reserved [31:28] */
1220#define FLD_ERRLOG2 0x0fff0000
1221/* Reserved [15:12] */
1222#define FLD_ERRLOG1 0x00000fff
1223
1224/*****************************************************************************/
1225#define NICAM_ERRLOG_STS2 0x8c4
1226/* Reserved [31:12] */
1227#define FLD_ERRLOG3 0x00000fff
1228
1229/*****************************************************************************/
1230#define NICAM_STATUS 0x8c8
1231/* Reserved [31:20] */
1232#define FLD_NICAM_CIB 0x000c0000
1233#define FLD_NICAM_LOCK_STAT 0x00020000
1234#define FLD_NICAM_MUTE 0x00010000
1235#define FLD_NICAMADDIT_DATA 0x0000ffe0
1236#define FLD_NICAMCNTRL 0x0000001f
1237
1238/*****************************************************************************/
1239#define DEMATRIX_CTL 0x8cc
1240#define FLD_AC97_IN_SHIFT 0xf0000000
1241#define FLD_I2S_IN_SHIFT 0x0f000000
1242#define FLD_DEMATRIX_SEL_CTL 0x00ff0000
1243/* Reserved [15:11] */
1244#define FLD_DMTRX_BYPASS 0x00000400
1245#define FLD_DEMATRIX_MODE 0x00000300
1246/* Reserved [7:6] */
1247#define FLD_PH_DBX_SEL 0x00000020
1248#define FLD_PH_CH_SEL 0x00000010
1249#define FLD_PHASE_FIX 0x0000000f
1250
1251/*****************************************************************************/
1252#define PATH1_CTL1 0x8d0
1253/* Reserved [31:29] */
1254#define FLD_PATH1_MUTE_CTL 0x1f000000
1255/* Reserved [23:22] */
1256#define FLD_PATH1_AVC_CG 0x00300000
1257#define FLD_PATH1_AVC_RT 0x000f0000
1258#define FLD_PATH1_AVC_AT 0x0000f000
1259#define FLD_PATH1_AVC_STEREO 0x00000800
1260#define FLD_PATH1_AVC_CR 0x00000700
1261#define FLD_PATH1_AVC_RMS_CON 0x000000f0
1262#define FLD_PATH1_SEL_CTL 0x0000000f
1263
1264/*****************************************************************************/
1265#define PATH1_VOL_CTL 0x8d4
1266#define FLD_PATH1_AVC_THRESHOLD 0x7fff0000
1267#define FLD_PATH1_BAL_LEFT 0x00008000
1268#define FLD_PATH1_BAL_LEVEL 0x00007f00
1269#define FLD_PATH1_VOLUME 0x000000ff
1270
1271/*****************************************************************************/
1272#define PATH1_EQ_CTL 0x8d8
1273/* Reserved [31:30] */
1274#define FLD_PATH1_EQ_TREBLE_VOL 0x3f000000
1275/* Reserved [23:22] */
1276#define FLD_PATH1_EQ_MID_VOL 0x003f0000
1277/* Reserved [15:14] */
1278#define FLD_PATH1_EQ_BASS_VOL 0x00003f00
1279/* Reserved [7:1] */
1280#define FLD_PATH1_EQ_BAND_SEL 0x00000001
1281
1282/*****************************************************************************/
1283#define PATH1_SC_CTL 0x8dc
1284#define FLD_PATH1_SC_THRESHOLD 0x7fff0000
1285#define FLD_PATH1_SC_RT 0x0000f000
1286#define FLD_PATH1_SC_AT 0x00000f00
1287#define FLD_PATH1_SC_STEREO 0x00000080
1288#define FLD_PATH1_SC_CR 0x00000070
1289#define FLD_PATH1_SC_RMS_CON 0x0000000f
1290
1291/*****************************************************************************/
1292#define PATH2_CTL1 0x8e0
1293/* Reserved [31:26] */
1294#define FLD_PATH2_MUTE_CTL 0x03000000
1295/* Reserved [23:22] */
1296#define FLD_PATH2_AVC_CG 0x00300000
1297#define FLD_PATH2_AVC_RT 0x000f0000
1298#define FLD_PATH2_AVC_AT 0x0000f000
1299#define FLD_PATH2_AVC_STEREO 0x00000800
1300#define FLD_PATH2_AVC_CR 0x00000700
1301#define FLD_PATH2_AVC_RMS_CON 0x000000f0
1302#define FLD_PATH2_SEL_CTL 0x0000000f
1303
1304/*****************************************************************************/
1305#define PATH2_VOL_CTL 0x8e4
1306#define FLD_PATH2_AVC_THRESHOLD 0xffff0000
1307#define FLD_PATH2_BAL_LEFT 0x00008000
1308#define FLD_PATH2_BAL_LEVEL 0x00007f00
1309#define FLD_PATH2_VOLUME 0x000000ff
1310
1311/*****************************************************************************/
1312#define PATH2_EQ_CTL 0x8e8
1313/* Reserved [31:30] */
1314#define FLD_PATH2_EQ_TREBLE_VOL 0x3f000000
1315/* Reserved [23:22] */
1316#define FLD_PATH2_EQ_MID_VOL 0x003f0000
1317/* Reserved [15:14] */
1318#define FLD_PATH2_EQ_BASS_VOL 0x00003f00
1319/* Reserved [7:1] */
1320#define FLD_PATH2_EQ_BAND_SEL 0x00000001
1321
1322/*****************************************************************************/
1323#define PATH2_SC_CTL 0x8eC
1324#define FLD_PATH2_SC_THRESHOLD 0xffff0000
1325#define FLD_PATH2_SC_RT 0x0000f000
1326#define FLD_PATH2_SC_AT 0x00000f00
1327#define FLD_PATH2_SC_STEREO 0x00000080
1328#define FLD_PATH2_SC_CR 0x00000070
1329#define FLD_PATH2_SC_RMS_CON 0x0000000f
1330
1331/*****************************************************************************/
1332#define SRC_CTL 0x8f0
1333#define FLD_SRC_STATUS 0xffffff00
1334#define FLD_FIFO_LF_EN 0x000000fc
1335#define FLD_BYPASS_LI 0x00000002
1336#define FLD_BYPASS_PF 0x00000001
1337
1338/*****************************************************************************/
1339#define SRC_LF_COEF 0x8f4
1340#define FLD_LOOP_FILTER_COEF2 0xffff0000
1341#define FLD_LOOP_FILTER_COEF1 0x0000ffff
1342
1343/*****************************************************************************/
1344#define SRC1_CTL 0x8f8
1345/* Reserved [31:28] */
1346#define FLD_SRC1_FIFO_RD_TH 0x0f000000
1347/* Reserved [23:18] */
1348#define FLD_SRC1_PHASE_INC 0x0003ffff
1349
1350/*****************************************************************************/
1351#define SRC2_CTL 0x8fc
1352/* Reserved [31:28] */
1353#define FLD_SRC2_FIFO_RD_TH 0x0f000000
1354/* Reserved [23:18] */
1355#define FLD_SRC2_PHASE_INC 0x0003ffff
1356
1357/*****************************************************************************/
1358#define SRC3_CTL 0x900
1359/* Reserved [31:28] */
1360#define FLD_SRC3_FIFO_RD_TH 0x0f000000
1361/* Reserved [23:18] */
1362#define FLD_SRC3_PHASE_INC 0x0003ffff
1363
1364/*****************************************************************************/
1365#define SRC4_CTL 0x904
1366/* Reserved [31:28] */
1367#define FLD_SRC4_FIFO_RD_TH 0x0f000000
1368/* Reserved [23:18] */
1369#define FLD_SRC4_PHASE_INC 0x0003ffff
1370
1371/*****************************************************************************/
1372#define SRC5_CTL 0x908
1373/* Reserved [31:28] */
1374#define FLD_SRC5_FIFO_RD_TH 0x0f000000
1375/* Reserved [23:18] */
1376#define FLD_SRC5_PHASE_INC 0x0003ffff
1377
1378/*****************************************************************************/
1379#define SRC6_CTL 0x90c
1380/* Reserved [31:28] */
1381#define FLD_SRC6_FIFO_RD_TH 0x0f000000
1382/* Reserved [23:18] */
1383#define FLD_SRC6_PHASE_INC 0x0003ffff
1384
1385/*****************************************************************************/
1386#define BAND_OUT_SEL 0x910
1387#define FLD_SRC6_IN_SEL 0xc0000000
1388#define FLD_SRC6_CLK_SEL 0x30000000
1389#define FLD_SRC5_IN_SEL 0x0c000000
1390#define FLD_SRC5_CLK_SEL 0x03000000
1391#define FLD_SRC4_IN_SEL 0x00c00000
1392#define FLD_SRC4_CLK_SEL 0x00300000
1393#define FLD_SRC3_IN_SEL 0x000c0000
1394#define FLD_SRC3_CLK_SEL 0x00030000
1395#define FLD_BASEBAND_BYPASS_CTL 0x0000ff00
1396#define FLD_AC97_SRC_SEL 0x000000c0
1397#define FLD_I2S_SRC_SEL 0x00000030
1398#define FLD_PARALLEL2_SRC_SEL 0x0000000c
1399#define FLD_PARALLEL1_SRC_SEL 0x00000003
1400
1401/*****************************************************************************/
1402#define I2S_IN_CTL 0x914
1403/* Reserved [31:11] */
1404#define FLD_I2S_UP2X_BW20K 0x00000400
1405#define FLD_I2S_UP2X_BYPASS 0x00000200
1406#define FLD_I2S_IN_MASTER_MODE 0x00000100
1407#define FLD_I2S_IN_SONY_MODE 0x00000080
1408#define FLD_I2S_IN_RIGHT_JUST 0x00000040
1409#define FLD_I2S_IN_WS_SEL 0x00000020
1410#define FLD_I2S_IN_BCN_DEL 0x0000001f
1411
1412/*****************************************************************************/
1413#define I2S_OUT_CTL 0x918
1414/* Reserved [31:17] */
1415#define FLD_I2S_OUT_SOFT_RESET_EN 0x00010000
1416/* Reserved [15:9] */
1417#define FLD_I2S_OUT_MASTER_MODE 0x00000100
1418#define FLD_I2S_OUT_SONY_MODE 0x00000080
1419#define FLD_I2S_OUT_RIGHT_JUST 0x00000040
1420#define FLD_I2S_OUT_WS_SEL 0x00000020
1421#define FLD_I2S_OUT_BCN_DEL 0x0000001f
1422
1423/*****************************************************************************/
1424#define AC97_CTL 0x91c
1425/* Reserved [31:26] */
1426#define FLD_AC97_UP2X_BW20K 0x02000000
1427#define FLD_AC97_UP2X_BYPASS 0x01000000
1428/* Reserved [23:17] */
1429#define FLD_AC97_RST_ACL 0x00010000
1430/* Reserved [15:9] */
1431#define FLD_AC97_WAKE_UP_SYNC 0x00000100
1432/* Reserved [7:1] */
1433#define FLD_AC97_SHUTDOWN 0x00000001
1434
1435/* Cx231xx redefine */
1436#define QPSK_IAGC_CTL1 0x94c
1437#define QPSK_IAGC_CTL2 0x950
1438#define QPSK_FEPR_FREQ 0x954
1439#define QPSK_BTL_CTL1 0x958
1440#define QPSK_BTL_CTL2 0x95c
1441#define QPSK_CTL_CTL1 0x960
1442#define QPSK_CTL_CTL2 0x964
1443#define QPSK_MF_FAGC_CTL 0x968
1444#define QPSK_EQ_CTL 0x96c
1445#define QPSK_LOCK_CTL 0x970
1446
1447/*****************************************************************************/
1448#define FM1_DFT_CTL 0x9a8
1449#define FLD_FM1_DFT_THRESHOLD 0xffff0000
1450/* Reserved [15:8] */
1451#define FLD_FM1_DFT_CMP_CTL 0x00000080
1452#define FLD_FM1_DFT_AVG 0x00000070
1453/* Reserved [3:1] */
1454#define FLD_FM1_DFT_START 0x00000001
1455
1456/*****************************************************************************/
1457#define FM1_DFT_STATUS 0x9ac
1458#define FLD_FM1_DFT_DONE 0x80000000
1459/* Reserved [30:19] */
1460#define FLD_FM_DFT_TH_CMP 0x00040000
1461#define FLD_FM1_DFT 0x0003ffff
1462
1463/*****************************************************************************/
1464#define FM2_DFT_CTL 0x9b0
1465#define FLD_FM2_DFT_THRESHOLD 0xffff0000
1466/* Reserved [15:8] */
1467#define FLD_FM2_DFT_CMP_CTL 0x00000080
1468#define FLD_FM2_DFT_AVG 0x00000070
1469/* Reserved [3:1] */
1470#define FLD_FM2_DFT_START 0x00000001
1471
1472/*****************************************************************************/
1473#define FM2_DFT_STATUS 0x9b4
1474#define FLD_FM2_DFT_DONE 0x80000000
1475/* Reserved [30:19] */
1476#define FLD_FM2_DFT_TH_CMP_STAT 0x00040000
1477#define FLD_FM2_DFT 0x0003ffff
1478
1479/*****************************************************************************/
1480/* Cx231xx redefine */
1481#define AAGC_STATUS_REG 0x9b8
1482#define AAGC_STATUS 0x9b8
1483/* Reserved [31:27] */
1484#define FLD_FM2_DAGC_OUT 0x07000000
1485/* Reserved [23:19] */
1486#define FLD_FM1_DAGC_OUT 0x00070000
1487/* Reserved [15:6] */
1488#define FLD_AFE_VGA_OUT 0x0000003f
1489
1490/*****************************************************************************/
1491#define MTS_GAIN_STATUS 0x9bc
1492/* Reserved [31:14] */
1493#define FLD_MTS_GAIN 0x00003fff
1494
1495#define RDS_OUT 0x9c0
1496#define FLD_RDS_Q 0xffff0000
1497#define FLD_RDS_I 0x0000ffff
1498
1499/*****************************************************************************/
1500#define AUTOCONFIG_REG 0x9c4
1501/* Reserved [31:4] */
1502#define FLD_AUTOCONFIG_MODE 0x0000000f
1503
1504#define FM_AFC 0x9c8
1505#define FLD_FM2_AFC 0xffff0000
1506#define FLD_FM1_AFC 0x0000ffff
1507
1508/*****************************************************************************/
1509/* Cx231xx redefine */
1510#define NEW_SPARE 0x9cc
1511#define NEW_SPARE_REG 0x9cc
1512
1513/*****************************************************************************/
1514#define DBX_ADJ 0x9d0
1515/* Reserved [31:28] */
1516#define FLD_DBX2_ADJ 0x0fff0000
1517/* Reserved [15:12] */
1518#define FLD_DBX1_ADJ 0x00000fff
1519
1520#define VID_FMT_AUTO 0
1521#define VID_FMT_NTSC_M 1
1522#define VID_FMT_NTSC_J 2
1523#define VID_FMT_NTSC_443 3
1524#define VID_FMT_PAL_BDGHI 4
1525#define VID_FMT_PAL_M 5
1526#define VID_FMT_PAL_N 6
1527#define VID_FMT_PAL_NC 7
1528#define VID_FMT_PAL_60 8
1529#define VID_FMT_SECAM 12
1530#define VID_FMT_SECAM_60 13
1531
1532#define INPUT_MODE_CVBS_0 0 /* INPUT_MODE_VALUE(0) */
1533#define INPUT_MODE_YC_1 1 /* INPUT_MODE_VALUE(1) */
1534#define INPUT_MODE_YC2_2 2 /* INPUT_MODE_VALUE(2) */
1535#define INPUT_MODE_YUV_3 3 /* INPUT_MODE_VALUE(3) */
1536
1537#define LUMA_LPF_LOW_BANDPASS 0 /* 0.6Mhz LPF BW */
1538#define LUMA_LPF_MEDIUM_BANDPASS 1 /* 1.0Mhz LPF BW */
1539#define LUMA_LPF_HIGH_BANDPASS 2 /* 1.5Mhz LPF BW */
1540
1541#define UV_LPF_LOW_BANDPASS 0 /* 0.6Mhz LPF BW */
1542#define UV_LPF_MEDIUM_BANDPASS 1 /* 1.0Mhz LPF BW */
1543#define UV_LPF_HIGH_BANDPASS 2 /* 1.5Mhz LPF BW */
1544
1545#define TWO_TAP_FILT 0
1546#define THREE_TAP_FILT 1
1547#define FOUR_TAP_FILT 2
1548#define FIVE_TAP_FILT 3
1549
1550#define AUD_CHAN_SRC_PARALLEL 0
1551#define AUD_CHAN_SRC_I2S_INPUT 1
1552#define AUD_CHAN_SRC_FLATIRON 2
1553#define AUD_CHAN_SRC_PARALLEL3 3
1554
1555#define OUT_MODE_601 0
1556#define OUT_MODE_656 1
1557#define OUT_MODE_VIP11 2
1558#define OUT_MODE_VIP20 3
1559
1560#define PHASE_INC_49MHZ 0x0df22
1561#define PHASE_INC_56MHZ 0x0fa5b
1562#define PHASE_INC_28MHZ 0x010000
1563
1564#endif
diff --git a/drivers/media/video/cx231xx/cx231xx-vbi.c b/drivers/media/video/cx231xx/cx231xx-vbi.c
new file mode 100644
index 000000000000..94180526909c
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-vbi.c
@@ -0,0 +1,701 @@
1/*
2 cx231xx_vbi.c - driver for Conexant Cx23100/101/102 USB video capture devices
3
4 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 Based on cx88 driver
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#include <linux/init.h>
23#include <linux/list.h>
24#include <linux/module.h>
25#include <linux/kernel.h>
26#include <linux/bitmap.h>
27#include <linux/usb.h>
28#include <linux/i2c.h>
29#include <linux/version.h>
30#include <linux/mm.h>
31#include <linux/mutex.h>
32
33#include <media/v4l2-common.h>
34#include <media/v4l2-ioctl.h>
35#include <media/v4l2-chip-ident.h>
36#include <media/msp3400.h>
37#include <media/tuner.h>
38
39#include "cx231xx.h"
40#include "cx231xx-vbi.h"
41
42static inline void print_err_status(struct cx231xx *dev, int packet, int status)
43{
44 char *errmsg = "Unknown";
45
46 switch (status) {
47 case -ENOENT:
48 errmsg = "unlinked synchronuously";
49 break;
50 case -ECONNRESET:
51 errmsg = "unlinked asynchronuously";
52 break;
53 case -ENOSR:
54 errmsg = "Buffer error (overrun)";
55 break;
56 case -EPIPE:
57 errmsg = "Stalled (device not responding)";
58 break;
59 case -EOVERFLOW:
60 errmsg = "Babble (bad cable?)";
61 break;
62 case -EPROTO:
63 errmsg = "Bit-stuff error (bad cable?)";
64 break;
65 case -EILSEQ:
66 errmsg = "CRC/Timeout (could be anything)";
67 break;
68 case -ETIME:
69 errmsg = "Device does not respond";
70 break;
71 }
72 if (packet < 0) {
73 cx231xx_err(DRIVER_NAME "URB status %d [%s].\n", status,
74 errmsg);
75 } else {
76 cx231xx_err(DRIVER_NAME "URB packet %d, status %d [%s].\n",
77 packet, status, errmsg);
78 }
79}
80
81/*
82 * Controls the isoc copy of each urb packet
83 */
84static inline int cx231xx_isoc_vbi_copy(struct cx231xx *dev, struct urb *urb)
85{
86 struct cx231xx_buffer *buf;
87 struct cx231xx_dmaqueue *dma_q = urb->context;
88 int rc = 1;
89 unsigned char *p_buffer;
90 u32 bytes_parsed = 0, buffer_size = 0;
91 u8 sav_eav = 0;
92
93 if (!dev)
94 return 0;
95
96 if ((dev->state & DEV_DISCONNECTED) || (dev->state & DEV_MISCONFIGURED))
97 return 0;
98
99 if (urb->status < 0) {
100 print_err_status(dev, -1, urb->status);
101 if (urb->status == -ENOENT)
102 return 0;
103 }
104
105 buf = dev->vbi_mode.isoc_ctl.buf;
106
107 /* get buffer pointer and length */
108 p_buffer = urb->transfer_buffer;
109 buffer_size = urb->actual_length;
110
111 if (buffer_size > 0) {
112 bytes_parsed = 0;
113
114 if (dma_q->is_partial_line) {
115 /* Handle the case where we were working on a partial
116 line */
117 sav_eav = dma_q->last_sav;
118 } else {
119 /* Check for a SAV/EAV overlapping the
120 buffer boundary */
121
122 sav_eav = cx231xx_find_boundary_SAV_EAV(p_buffer,
123 dma_q->partial_buf,
124 &bytes_parsed);
125 }
126
127 sav_eav &= 0xF0;
128 /* Get the first line if we have some portion of an SAV/EAV from
129 the last buffer or a partial line */
130 if (sav_eav) {
131 bytes_parsed += cx231xx_get_vbi_line(dev, dma_q,
132 sav_eav, /* SAV/EAV */
133 p_buffer + bytes_parsed, /* p_buffer */
134 buffer_size - bytes_parsed); /* buffer size */
135 }
136
137 /* Now parse data that is completely in this buffer */
138 dma_q->is_partial_line = 0;
139
140 while (bytes_parsed < buffer_size) {
141 u32 bytes_used = 0;
142
143 sav_eav = cx231xx_find_next_SAV_EAV(
144 p_buffer + bytes_parsed, /* p_buffer */
145 buffer_size - bytes_parsed, /* buffer size */
146 &bytes_used); /* bytes used to get SAV/EAV */
147
148 bytes_parsed += bytes_used;
149
150 sav_eav &= 0xF0;
151 if (sav_eav && (bytes_parsed < buffer_size)) {
152 bytes_parsed += cx231xx_get_vbi_line(dev,
153 dma_q, sav_eav, /* SAV/EAV */
154 p_buffer+bytes_parsed, /* p_buffer */
155 buffer_size-bytes_parsed);/*buf size*/
156 }
157 }
158
159 /* Save the last four bytes of the buffer so we can
160 check the buffer boundary condition next time */
161 memcpy(dma_q->partial_buf, p_buffer + buffer_size - 4, 4);
162 bytes_parsed = 0;
163 }
164
165 return rc;
166}
167
168/* ------------------------------------------------------------------
169 Vbi buf operations
170 ------------------------------------------------------------------*/
171
172static int
173vbi_buffer_setup(struct videobuf_queue *vq, unsigned int *count,
174 unsigned int *size)
175{
176 struct cx231xx_fh *fh = vq->priv_data;
177 struct cx231xx *dev = fh->dev;
178 u32 height = 0;
179
180 height = ((dev->norm & V4L2_STD_625_50) ?
181 PAL_VBI_LINES : NTSC_VBI_LINES);
182
183 *size = (dev->width * height * 2);
184 if (0 == *count)
185 *count = CX231XX_DEF_VBI_BUF;
186
187 if (*count < CX231XX_MIN_BUF)
188 *count = CX231XX_MIN_BUF;
189
190 return 0;
191}
192
193/* This is called *without* dev->slock held; please keep it that way */
194static void free_buffer(struct videobuf_queue *vq, struct cx231xx_buffer *buf)
195{
196 struct cx231xx_fh *fh = vq->priv_data;
197 struct cx231xx *dev = fh->dev;
198 unsigned long flags = 0;
199 if (in_interrupt())
200 BUG();
201
202 /* We used to wait for the buffer to finish here, but this didn't work
203 because, as we were keeping the state as VIDEOBUF_QUEUED,
204 videobuf_queue_cancel marked it as finished for us.
205 (Also, it could wedge forever if the hardware was misconfigured.)
206
207 This should be safe; by the time we get here, the buffer isn't
208 queued anymore. If we ever start marking the buffers as
209 VIDEOBUF_ACTIVE, it won't be, though.
210 */
211 spin_lock_irqsave(&dev->vbi_mode.slock, flags);
212 if (dev->vbi_mode.isoc_ctl.buf == buf)
213 dev->vbi_mode.isoc_ctl.buf = NULL;
214 spin_unlock_irqrestore(&dev->vbi_mode.slock, flags);
215
216 videobuf_vmalloc_free(&buf->vb);
217 buf->vb.state = VIDEOBUF_NEEDS_INIT;
218}
219
220static int
221vbi_buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
222 enum v4l2_field field)
223{
224 struct cx231xx_fh *fh = vq->priv_data;
225 struct cx231xx_buffer *buf =
226 container_of(vb, struct cx231xx_buffer, vb);
227 struct cx231xx *dev = fh->dev;
228 int rc = 0, urb_init = 0;
229 u32 height = 0;
230
231 height = ((dev->norm & V4L2_STD_625_50) ?
232 PAL_VBI_LINES : NTSC_VBI_LINES);
233 buf->vb.size = ((dev->width << 1) * height);
234
235 if (0 != buf->vb.baddr && buf->vb.bsize < buf->vb.size)
236 return -EINVAL;
237
238 buf->vb.width = dev->width;
239 buf->vb.height = height;
240 buf->vb.field = field;
241 buf->vb.field = V4L2_FIELD_SEQ_TB;
242
243 if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
244 rc = videobuf_iolock(vq, &buf->vb, NULL);
245 if (rc < 0)
246 goto fail;
247 }
248
249 if (!dev->vbi_mode.isoc_ctl.num_bufs)
250 urb_init = 1;
251
252 if (urb_init) {
253 rc = cx231xx_init_vbi_isoc(dev, CX231XX_NUM_VBI_PACKETS,
254 CX231XX_NUM_VBI_BUFS,
255 dev->vbi_mode.alt_max_pkt_size[0],
256 cx231xx_isoc_vbi_copy);
257 if (rc < 0)
258 goto fail;
259 }
260
261 buf->vb.state = VIDEOBUF_PREPARED;
262 return 0;
263
264fail:
265 free_buffer(vq, buf);
266 return rc;
267}
268
269static void
270vbi_buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
271{
272 struct cx231xx_buffer *buf =
273 container_of(vb, struct cx231xx_buffer, vb);
274 struct cx231xx_fh *fh = vq->priv_data;
275 struct cx231xx *dev = fh->dev;
276 struct cx231xx_dmaqueue *vidq = &dev->vbi_mode.vidq;
277
278 buf->vb.state = VIDEOBUF_QUEUED;
279 list_add_tail(&buf->vb.queue, &vidq->active);
280
281}
282
283static void vbi_buffer_release(struct videobuf_queue *vq,
284 struct videobuf_buffer *vb)
285{
286 struct cx231xx_buffer *buf =
287 container_of(vb, struct cx231xx_buffer, vb);
288
289
290 free_buffer(vq, buf);
291}
292
293struct videobuf_queue_ops cx231xx_vbi_qops = {
294 .buf_setup = vbi_buffer_setup,
295 .buf_prepare = vbi_buffer_prepare,
296 .buf_queue = vbi_buffer_queue,
297 .buf_release = vbi_buffer_release,
298};
299
300/* ------------------------------------------------------------------
301 URB control
302 ------------------------------------------------------------------*/
303
304/*
305 * IRQ callback, called by URB callback
306 */
307static void cx231xx_irq_vbi_callback(struct urb *urb)
308{
309 struct cx231xx_dmaqueue *dma_q = urb->context;
310 struct cx231xx_video_mode *vmode =
311 container_of(dma_q, struct cx231xx_video_mode, vidq);
312 struct cx231xx *dev = container_of(vmode, struct cx231xx, vbi_mode);
313 int rc;
314
315 switch (urb->status) {
316 case 0: /* success */
317 case -ETIMEDOUT: /* NAK */
318 break;
319 case -ECONNRESET: /* kill */
320 case -ENOENT:
321 case -ESHUTDOWN:
322 return;
323 default: /* error */
324 cx231xx_err(DRIVER_NAME "urb completition error %d.\n",
325 urb->status);
326 break;
327 }
328
329 /* Copy data from URB */
330 spin_lock(&dev->vbi_mode.slock);
331 rc = dev->vbi_mode.isoc_ctl.isoc_copy(dev, urb);
332 spin_unlock(&dev->vbi_mode.slock);
333
334 /* Reset status */
335 urb->status = 0;
336
337 urb->status = usb_submit_urb(urb, GFP_ATOMIC);
338 if (urb->status) {
339 cx231xx_err(DRIVER_NAME "urb resubmit failed (error=%i)\n",
340 urb->status);
341 }
342}
343
344/*
345 * Stop and Deallocate URBs
346 */
347void cx231xx_uninit_vbi_isoc(struct cx231xx *dev)
348{
349 struct urb *urb;
350 int i;
351
352 cx231xx_info(DRIVER_NAME "cx231xx: called cx231xx_uninit_vbi_isoc\n");
353
354 dev->vbi_mode.isoc_ctl.nfields = -1;
355 for (i = 0; i < dev->vbi_mode.isoc_ctl.num_bufs; i++) {
356 urb = dev->vbi_mode.isoc_ctl.urb[i];
357 if (urb) {
358 if (!irqs_disabled())
359 usb_kill_urb(urb);
360 else
361 usb_unlink_urb(urb);
362
363 if (dev->vbi_mode.isoc_ctl.transfer_buffer[i]) {
364
365 kfree(dev->vbi_mode.isoc_ctl.
366 transfer_buffer[i]);
367 dev->vbi_mode.isoc_ctl.transfer_buffer[i] =
368 NULL;
369 }
370 usb_free_urb(urb);
371 dev->vbi_mode.isoc_ctl.urb[i] = NULL;
372 }
373 dev->vbi_mode.isoc_ctl.transfer_buffer[i] = NULL;
374 }
375
376 kfree(dev->vbi_mode.isoc_ctl.urb);
377 kfree(dev->vbi_mode.isoc_ctl.transfer_buffer);
378
379 dev->vbi_mode.isoc_ctl.urb = NULL;
380 dev->vbi_mode.isoc_ctl.transfer_buffer = NULL;
381 dev->vbi_mode.isoc_ctl.num_bufs = 0;
382
383 cx231xx_capture_start(dev, 0, Vbi);
384}
385EXPORT_SYMBOL_GPL(cx231xx_uninit_vbi_isoc);
386
387/*
388 * Allocate URBs and start IRQ
389 */
390int cx231xx_init_vbi_isoc(struct cx231xx *dev, int max_packets,
391 int num_bufs, int max_pkt_size,
392 int (*isoc_copy) (struct cx231xx *dev,
393 struct urb *urb))
394{
395 struct cx231xx_dmaqueue *dma_q = &dev->vbi_mode.vidq;
396 int i;
397 int sb_size, pipe;
398 struct urb *urb;
399 int rc;
400
401 cx231xx_info(DRIVER_NAME "cx231xx: called cx231xx_prepare_isoc\n");
402
403 /* De-allocates all pending stuff */
404 cx231xx_uninit_vbi_isoc(dev);
405
406 /* clear if any halt */
407 usb_clear_halt(dev->udev,
408 usb_rcvbulkpipe(dev->udev,
409 dev->vbi_mode.end_point_addr));
410
411 dev->vbi_mode.isoc_ctl.isoc_copy = isoc_copy;
412 dev->vbi_mode.isoc_ctl.num_bufs = num_bufs;
413 dma_q->pos = 0;
414 dma_q->is_partial_line = 0;
415 dma_q->last_sav = 0;
416 dma_q->current_field = -1;
417 dma_q->bytes_left_in_line = dev->width << 1;
418 dma_q->lines_per_field = ((dev->norm & V4L2_STD_625_50) ?
419 PAL_VBI_LINES : NTSC_VBI_LINES);
420 dma_q->lines_completed = 0;
421 for (i = 0; i < 8; i++)
422 dma_q->partial_buf[i] = 0;
423
424 dev->vbi_mode.isoc_ctl.urb = kzalloc(sizeof(void *) * num_bufs,
425 GFP_KERNEL);
426 if (!dev->vbi_mode.isoc_ctl.urb) {
427 cx231xx_errdev("cannot alloc memory for usb buffers\n");
428 return -ENOMEM;
429 }
430
431 dev->vbi_mode.isoc_ctl.transfer_buffer =
432 kzalloc(sizeof(void *) * num_bufs, GFP_KERNEL);
433 if (!dev->vbi_mode.isoc_ctl.transfer_buffer) {
434 cx231xx_errdev("cannot allocate memory for usbtransfer\n");
435 kfree(dev->vbi_mode.isoc_ctl.urb);
436 return -ENOMEM;
437 }
438
439 dev->vbi_mode.isoc_ctl.max_pkt_size = max_pkt_size;
440 dev->vbi_mode.isoc_ctl.buf = NULL;
441
442 sb_size = max_packets * dev->vbi_mode.isoc_ctl.max_pkt_size;
443
444 /* allocate urbs and transfer buffers */
445 for (i = 0; i < dev->vbi_mode.isoc_ctl.num_bufs; i++) {
446
447 urb = usb_alloc_urb(0, GFP_KERNEL);
448 if (!urb) {
449 cx231xx_err(DRIVER_NAME
450 ": cannot alloc isoc_ctl.urb %i\n", i);
451 cx231xx_uninit_vbi_isoc(dev);
452 return -ENOMEM;
453 }
454 dev->vbi_mode.isoc_ctl.urb[i] = urb;
455 urb->transfer_flags = 0;
456
457 dev->vbi_mode.isoc_ctl.transfer_buffer[i] =
458 kzalloc(sb_size, GFP_KERNEL);
459 if (!dev->vbi_mode.isoc_ctl.transfer_buffer[i]) {
460 cx231xx_err(DRIVER_NAME
461 ": unable to allocate %i bytes for transfer"
462 " buffer %i%s\n", sb_size, i,
463 in_interrupt() ? " while in int" : "");
464 cx231xx_uninit_vbi_isoc(dev);
465 return -ENOMEM;
466 }
467
468 pipe = usb_rcvbulkpipe(dev->udev, dev->vbi_mode.end_point_addr);
469 usb_fill_bulk_urb(urb, dev->udev, pipe,
470 dev->vbi_mode.isoc_ctl.transfer_buffer[i],
471 sb_size, cx231xx_irq_vbi_callback, dma_q);
472 }
473
474 init_waitqueue_head(&dma_q->wq);
475
476 /* submit urbs and enables IRQ */
477 for (i = 0; i < dev->vbi_mode.isoc_ctl.num_bufs; i++) {
478 rc = usb_submit_urb(dev->vbi_mode.isoc_ctl.urb[i], GFP_ATOMIC);
479 if (rc) {
480 cx231xx_err(DRIVER_NAME
481 ": submit of urb %i failed (error=%i)\n", i,
482 rc);
483 cx231xx_uninit_vbi_isoc(dev);
484 return rc;
485 }
486 }
487
488 cx231xx_capture_start(dev, 1, Vbi);
489
490 return 0;
491}
492EXPORT_SYMBOL_GPL(cx231xx_init_vbi_isoc);
493
494u32 cx231xx_get_vbi_line(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
495 u8 sav_eav, u8 *p_buffer, u32 buffer_size)
496{
497 u32 bytes_copied = 0;
498 int current_field = -1;
499
500 switch (sav_eav) {
501
502 case SAV_VBI_FIELD1:
503 current_field = 1;
504 break;
505
506 case SAV_VBI_FIELD2:
507 current_field = 2;
508 break;
509 default:
510 break;
511 }
512
513 if (current_field < 0)
514 return bytes_copied;
515
516 dma_q->last_sav = sav_eav;
517
518 bytes_copied =
519 cx231xx_copy_vbi_line(dev, dma_q, p_buffer, buffer_size,
520 current_field);
521
522 return bytes_copied;
523}
524
525/*
526 * Announces that a buffer were filled and request the next
527 */
528static inline void vbi_buffer_filled(struct cx231xx *dev,
529 struct cx231xx_dmaqueue *dma_q,
530 struct cx231xx_buffer *buf)
531{
532 /* Advice that buffer was filled */
533 /* cx231xx_info(DRIVER_NAME "[%p/%d] wakeup\n", buf, buf->vb.i); */
534
535 buf->vb.state = VIDEOBUF_DONE;
536 buf->vb.field_count++;
537 do_gettimeofday(&buf->vb.ts);
538
539 dev->vbi_mode.isoc_ctl.buf = NULL;
540
541 list_del(&buf->vb.queue);
542 wake_up(&buf->vb.done);
543}
544
545u32 cx231xx_copy_vbi_line(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
546 u8 *p_line, u32 length, int field_number)
547{
548 u32 bytes_to_copy;
549 struct cx231xx_buffer *buf;
550 u32 _line_size = dev->width * 2;
551
552 if (dma_q->current_field != field_number)
553 cx231xx_reset_vbi_buffer(dev, dma_q);
554
555 /* get the buffer pointer */
556 buf = dev->vbi_mode.isoc_ctl.buf;
557
558 /* Remember the field number for next time */
559 dma_q->current_field = field_number;
560
561 bytes_to_copy = dma_q->bytes_left_in_line;
562 if (bytes_to_copy > length)
563 bytes_to_copy = length;
564
565 if (dma_q->lines_completed >= dma_q->lines_per_field) {
566 dma_q->bytes_left_in_line -= bytes_to_copy;
567 dma_q->is_partial_line =
568 (dma_q->bytes_left_in_line == 0) ? 0 : 1;
569 return 0;
570 }
571
572 dma_q->is_partial_line = 1;
573
574 /* If we don't have a buffer, just return the number of bytes we would
575 have copied if we had a buffer. */
576 if (!buf) {
577 dma_q->bytes_left_in_line -= bytes_to_copy;
578 dma_q->is_partial_line =
579 (dma_q->bytes_left_in_line == 0) ? 0 : 1;
580 return bytes_to_copy;
581 }
582
583 /* copy the data to video buffer */
584 cx231xx_do_vbi_copy(dev, dma_q, p_line, bytes_to_copy);
585
586 dma_q->pos += bytes_to_copy;
587 dma_q->bytes_left_in_line -= bytes_to_copy;
588
589 if (dma_q->bytes_left_in_line == 0) {
590
591 dma_q->bytes_left_in_line = _line_size;
592 dma_q->lines_completed++;
593 dma_q->is_partial_line = 0;
594
595 if (cx231xx_is_vbi_buffer_done(dev, dma_q) && buf) {
596
597 vbi_buffer_filled(dev, dma_q, buf);
598
599 dma_q->pos = 0;
600 buf = NULL;
601 dma_q->lines_completed = 0;
602 }
603 }
604
605 return bytes_to_copy;
606}
607
608/*
609 * video-buf generic routine to get the next available buffer
610 */
611static inline void get_next_vbi_buf(struct cx231xx_dmaqueue *dma_q,
612 struct cx231xx_buffer **buf)
613{
614 struct cx231xx_video_mode *vmode =
615 container_of(dma_q, struct cx231xx_video_mode, vidq);
616 struct cx231xx *dev = container_of(vmode, struct cx231xx, vbi_mode);
617 char *outp;
618
619 if (list_empty(&dma_q->active)) {
620 cx231xx_err(DRIVER_NAME ": No active queue to serve\n");
621 dev->vbi_mode.isoc_ctl.buf = NULL;
622 *buf = NULL;
623 return;
624 }
625
626 /* Get the next buffer */
627 *buf = list_entry(dma_q->active.next, struct cx231xx_buffer, vb.queue);
628
629 /* Cleans up buffer - Usefull for testing for frame/URB loss */
630 outp = videobuf_to_vmalloc(&(*buf)->vb);
631 memset(outp, 0, (*buf)->vb.size);
632
633 dev->vbi_mode.isoc_ctl.buf = *buf;
634
635 return;
636}
637
638void cx231xx_reset_vbi_buffer(struct cx231xx *dev,
639 struct cx231xx_dmaqueue *dma_q)
640{
641 struct cx231xx_buffer *buf;
642
643 buf = dev->vbi_mode.isoc_ctl.buf;
644
645 if (buf == NULL) {
646 /* first try to get the buffer */
647 get_next_vbi_buf(dma_q, &buf);
648
649 dma_q->pos = 0;
650 dma_q->current_field = -1;
651 }
652
653 dma_q->bytes_left_in_line = dev->width << 1;
654 dma_q->lines_completed = 0;
655}
656
657int cx231xx_do_vbi_copy(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
658 u8 *p_buffer, u32 bytes_to_copy)
659{
660 u8 *p_out_buffer = NULL;
661 u32 current_line_bytes_copied = 0;
662 struct cx231xx_buffer *buf;
663 u32 _line_size = dev->width << 1;
664 void *startwrite;
665 int offset, lencopy;
666
667 buf = dev->vbi_mode.isoc_ctl.buf;
668
669 if (buf == NULL)
670 return -EINVAL;
671
672 p_out_buffer = videobuf_to_vmalloc(&buf->vb);
673
674 if (dma_q->bytes_left_in_line != _line_size) {
675 current_line_bytes_copied =
676 _line_size - dma_q->bytes_left_in_line;
677 }
678
679 offset = (dma_q->lines_completed * _line_size) +
680 current_line_bytes_copied;
681
682 /* prepare destination address */
683 startwrite = p_out_buffer + offset;
684
685 lencopy = dma_q->bytes_left_in_line > bytes_to_copy ?
686 bytes_to_copy : dma_q->bytes_left_in_line;
687
688 memcpy(startwrite, p_buffer, lencopy);
689
690 return 0;
691}
692
693u8 cx231xx_is_vbi_buffer_done(struct cx231xx *dev,
694 struct cx231xx_dmaqueue *dma_q)
695{
696 u32 height = 0;
697
698 height = ((dev->norm & V4L2_STD_625_50) ?
699 PAL_VBI_LINES : NTSC_VBI_LINES);
700 return (dma_q->lines_completed == height) ? 1 : 0;
701}
diff --git a/drivers/media/video/cx231xx/cx231xx-vbi.h b/drivers/media/video/cx231xx/cx231xx-vbi.h
new file mode 100644
index 000000000000..89c7fe80b261
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-vbi.h
@@ -0,0 +1,65 @@
1/*
2 cx231xx_vbi.h - driver for Conexant Cx23100/101/102 USB video capture devices
3
4 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 Based on cx88 driver
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef _CX231XX_VBI_H
23#define _CX231XX_VBI_H
24
25extern struct videobuf_queue_ops cx231xx_vbi_qops;
26
27#define NTSC_VBI_START_LINE 10 /* line 10 - 21 */
28#define NTSC_VBI_END_LINE 21
29#define NTSC_VBI_LINES (NTSC_VBI_END_LINE-NTSC_VBI_START_LINE+1)
30
31#define PAL_VBI_START_LINE 6
32#define PAL_VBI_END_LINE 23
33#define PAL_VBI_LINES (PAL_VBI_END_LINE-PAL_VBI_START_LINE+1)
34
35#define VBI_STRIDE 1440
36#define VBI_SAMPLES_PER_LINE 1440
37
38#define CX231XX_NUM_VBI_PACKETS 4
39#define CX231XX_NUM_VBI_BUFS 5
40
41/* stream functions */
42int cx231xx_init_vbi_isoc(struct cx231xx *dev, int max_packets,
43 int num_bufs, int max_pkt_size,
44 int (*isoc_copy) (struct cx231xx *dev,
45 struct urb *urb));
46
47void cx231xx_uninit_vbi_isoc(struct cx231xx *dev);
48
49/* vbi data copy functions */
50u32 cx231xx_get_vbi_line(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
51 u8 sav_eav, u8 *p_buffer, u32 buffer_size);
52
53u32 cx231xx_copy_vbi_line(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
54 u8 *p_line, u32 length, int field_number);
55
56void cx231xx_reset_vbi_buffer(struct cx231xx *dev,
57 struct cx231xx_dmaqueue *dma_q);
58
59int cx231xx_do_vbi_copy(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
60 u8 *p_buffer, u32 bytes_to_copy);
61
62u8 cx231xx_is_vbi_buffer_done(struct cx231xx *dev,
63 struct cx231xx_dmaqueue *dma_q);
64
65#endif
diff --git a/drivers/media/video/cx231xx/cx231xx-video.c b/drivers/media/video/cx231xx/cx231xx-video.c
new file mode 100644
index 000000000000..a23ae73fe634
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx-video.c
@@ -0,0 +1,2434 @@
1/*
2 cx231xx-video.c - driver for Conexant Cx23100/101/102
3 USB video capture devices
4
5 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
6 Based on em28xx driver
7 Based on cx23885 driver
8 Based on cx88 driver
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 */
24
25#include <linux/init.h>
26#include <linux/list.h>
27#include <linux/module.h>
28#include <linux/kernel.h>
29#include <linux/bitmap.h>
30#include <linux/usb.h>
31#include <linux/i2c.h>
32#include <linux/version.h>
33#include <linux/mm.h>
34#include <linux/mutex.h>
35
36#include <media/v4l2-common.h>
37#include <media/v4l2-ioctl.h>
38#include <media/v4l2-chip-ident.h>
39#include <media/msp3400.h>
40#include <media/tuner.h>
41
42#include "dvb_frontend.h"
43
44#include "cx231xx.h"
45#include "cx231xx-vbi.h"
46
47#define CX231XX_VERSION_CODE KERNEL_VERSION(0, 0, 1)
48
49#define DRIVER_AUTHOR "Srinivasa Deevi <srinivasa.deevi@conexant.com>"
50#define DRIVER_DESC "Conexant cx231xx based USB video device driver"
51
52#define cx231xx_videodbg(fmt, arg...) do {\
53 if (video_debug) \
54 printk(KERN_INFO "%s %s :"fmt, \
55 dev->name, __func__ , ##arg); } while (0)
56
57static unsigned int isoc_debug;
58module_param(isoc_debug, int, 0644);
59MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");
60
61#define cx231xx_isocdbg(fmt, arg...) \
62do {\
63 if (isoc_debug) { \
64 printk(KERN_INFO "%s %s :"fmt, \
65 dev->name, __func__ , ##arg); \
66 } \
67 } while (0)
68
69MODULE_AUTHOR(DRIVER_AUTHOR);
70MODULE_DESCRIPTION(DRIVER_DESC);
71MODULE_LICENSE("GPL");
72
73static unsigned int card[] = {[0 ... (CX231XX_MAXBOARDS - 1)] = UNSET };
74static unsigned int video_nr[] = {[0 ... (CX231XX_MAXBOARDS - 1)] = UNSET };
75static unsigned int vbi_nr[] = {[0 ... (CX231XX_MAXBOARDS - 1)] = UNSET };
76static unsigned int radio_nr[] = {[0 ... (CX231XX_MAXBOARDS - 1)] = UNSET };
77
78module_param_array(card, int, NULL, 0444);
79module_param_array(video_nr, int, NULL, 0444);
80module_param_array(vbi_nr, int, NULL, 0444);
81module_param_array(radio_nr, int, NULL, 0444);
82
83MODULE_PARM_DESC(card, "card type");
84MODULE_PARM_DESC(video_nr, "video device numbers");
85MODULE_PARM_DESC(vbi_nr, "vbi device numbers");
86MODULE_PARM_DESC(radio_nr, "radio device numbers");
87
88static unsigned int video_debug;
89module_param(video_debug, int, 0644);
90MODULE_PARM_DESC(video_debug, "enable debug messages [video]");
91
92/* supported video standards */
93static struct cx231xx_fmt format[] = {
94 {
95 .name = "16bpp YUY2, 4:2:2, packed",
96 .fourcc = V4L2_PIX_FMT_YUYV,
97 .depth = 16,
98 .reg = 0,
99 },
100};
101
102/* supported controls */
103/* Common to all boards */
104
105/* ------------------------------------------------------------------- */
106
107static const struct v4l2_queryctrl no_ctl = {
108 .name = "42",
109 .flags = V4L2_CTRL_FLAG_DISABLED,
110};
111
112static struct cx231xx_ctrl cx231xx_ctls[] = {
113 /* --- video --- */
114 {
115 .v = {
116 .id = V4L2_CID_BRIGHTNESS,
117 .name = "Brightness",
118 .minimum = 0x00,
119 .maximum = 0xff,
120 .step = 1,
121 .default_value = 0x7f,
122 .type = V4L2_CTRL_TYPE_INTEGER,
123 },
124 .off = 128,
125 .reg = LUMA_CTRL,
126 .mask = 0x00ff,
127 .shift = 0,
128 }, {
129 .v = {
130 .id = V4L2_CID_CONTRAST,
131 .name = "Contrast",
132 .minimum = 0,
133 .maximum = 0xff,
134 .step = 1,
135 .default_value = 0x3f,
136 .type = V4L2_CTRL_TYPE_INTEGER,
137 },
138 .off = 0,
139 .reg = LUMA_CTRL,
140 .mask = 0xff00,
141 .shift = 8,
142 }, {
143 .v = {
144 .id = V4L2_CID_HUE,
145 .name = "Hue",
146 .minimum = 0,
147 .maximum = 0xff,
148 .step = 1,
149 .default_value = 0x7f,
150 .type = V4L2_CTRL_TYPE_INTEGER,
151 },
152 .off = 128,
153 .reg = CHROMA_CTRL,
154 .mask = 0xff0000,
155 .shift = 16,
156 }, {
157 /* strictly, this only describes only U saturation.
158 * V saturation is handled specially through code.
159 */
160 .v = {
161 .id = V4L2_CID_SATURATION,
162 .name = "Saturation",
163 .minimum = 0,
164 .maximum = 0xff,
165 .step = 1,
166 .default_value = 0x7f,
167 .type = V4L2_CTRL_TYPE_INTEGER,
168 },
169 .off = 0,
170 .reg = CHROMA_CTRL,
171 .mask = 0x00ff,
172 .shift = 0,
173 }, {
174 /* --- audio --- */
175 .v = {
176 .id = V4L2_CID_AUDIO_MUTE,
177 .name = "Mute",
178 .minimum = 0,
179 .maximum = 1,
180 .default_value = 1,
181 .type = V4L2_CTRL_TYPE_BOOLEAN,
182 },
183 .reg = PATH1_CTL1,
184 .mask = (0x1f << 24),
185 .shift = 24,
186 }, {
187 .v = {
188 .id = V4L2_CID_AUDIO_VOLUME,
189 .name = "Volume",
190 .minimum = 0,
191 .maximum = 0x3f,
192 .step = 1,
193 .default_value = 0x3f,
194 .type = V4L2_CTRL_TYPE_INTEGER,
195 },
196 .reg = PATH1_VOL_CTL,
197 .mask = 0xff,
198 .shift = 0,
199 }
200};
201static const int CX231XX_CTLS = ARRAY_SIZE(cx231xx_ctls);
202
203static const u32 cx231xx_user_ctrls[] = {
204 V4L2_CID_USER_CLASS,
205 V4L2_CID_BRIGHTNESS,
206 V4L2_CID_CONTRAST,
207 V4L2_CID_SATURATION,
208 V4L2_CID_HUE,
209 V4L2_CID_AUDIO_VOLUME,
210#if 0
211 V4L2_CID_AUDIO_BALANCE,
212#endif
213 V4L2_CID_AUDIO_MUTE,
214 0
215};
216
217static const u32 *ctrl_classes[] = {
218 cx231xx_user_ctrls,
219 NULL
220};
221
222/* ------------------------------------------------------------------
223 Video buffer and parser functions
224 ------------------------------------------------------------------*/
225
226/*
227 * Announces that a buffer were filled and request the next
228 */
229static inline void buffer_filled(struct cx231xx *dev,
230 struct cx231xx_dmaqueue *dma_q,
231 struct cx231xx_buffer *buf)
232{
233 /* Advice that buffer was filled */
234 cx231xx_isocdbg("[%p/%d] wakeup\n", buf, buf->vb.i);
235 buf->vb.state = VIDEOBUF_DONE;
236 buf->vb.field_count++;
237 do_gettimeofday(&buf->vb.ts);
238
239 dev->video_mode.isoc_ctl.buf = NULL;
240
241 list_del(&buf->vb.queue);
242 wake_up(&buf->vb.done);
243}
244
245static inline void print_err_status(struct cx231xx *dev, int packet, int status)
246{
247 char *errmsg = "Unknown";
248
249 switch (status) {
250 case -ENOENT:
251 errmsg = "unlinked synchronuously";
252 break;
253 case -ECONNRESET:
254 errmsg = "unlinked asynchronuously";
255 break;
256 case -ENOSR:
257 errmsg = "Buffer error (overrun)";
258 break;
259 case -EPIPE:
260 errmsg = "Stalled (device not responding)";
261 break;
262 case -EOVERFLOW:
263 errmsg = "Babble (bad cable?)";
264 break;
265 case -EPROTO:
266 errmsg = "Bit-stuff error (bad cable?)";
267 break;
268 case -EILSEQ:
269 errmsg = "CRC/Timeout (could be anything)";
270 break;
271 case -ETIME:
272 errmsg = "Device does not respond";
273 break;
274 }
275 if (packet < 0) {
276 cx231xx_isocdbg("URB status %d [%s].\n", status, errmsg);
277 } else {
278 cx231xx_isocdbg("URB packet %d, status %d [%s].\n",
279 packet, status, errmsg);
280 }
281}
282
283/*
284 * video-buf generic routine to get the next available buffer
285 */
286static inline void get_next_buf(struct cx231xx_dmaqueue *dma_q,
287 struct cx231xx_buffer **buf)
288{
289 struct cx231xx_video_mode *vmode =
290 container_of(dma_q, struct cx231xx_video_mode, vidq);
291 struct cx231xx *dev = container_of(vmode, struct cx231xx, video_mode);
292
293 char *outp;
294
295 if (list_empty(&dma_q->active)) {
296 cx231xx_isocdbg("No active queue to serve\n");
297 dev->video_mode.isoc_ctl.buf = NULL;
298 *buf = NULL;
299 return;
300 }
301
302 /* Get the next buffer */
303 *buf = list_entry(dma_q->active.next, struct cx231xx_buffer, vb.queue);
304
305 /* Cleans up buffer - Usefull for testing for frame/URB loss */
306 outp = videobuf_to_vmalloc(&(*buf)->vb);
307 memset(outp, 0, (*buf)->vb.size);
308
309 dev->video_mode.isoc_ctl.buf = *buf;
310
311 return;
312}
313
314/*
315 * Controls the isoc copy of each urb packet
316 */
317static inline int cx231xx_isoc_copy(struct cx231xx *dev, struct urb *urb)
318{
319 struct cx231xx_buffer *buf;
320 struct cx231xx_dmaqueue *dma_q = urb->context;
321 unsigned char *outp = NULL;
322 int i, rc = 1;
323 unsigned char *p_buffer;
324 u32 bytes_parsed = 0, buffer_size = 0;
325 u8 sav_eav = 0;
326
327 if (!dev)
328 return 0;
329
330 if ((dev->state & DEV_DISCONNECTED) || (dev->state & DEV_MISCONFIGURED))
331 return 0;
332
333 if (urb->status < 0) {
334 print_err_status(dev, -1, urb->status);
335 if (urb->status == -ENOENT)
336 return 0;
337 }
338
339 buf = dev->video_mode.isoc_ctl.buf;
340 if (buf != NULL)
341 outp = videobuf_to_vmalloc(&buf->vb);
342
343 for (i = 0; i < urb->number_of_packets; i++) {
344 int status = urb->iso_frame_desc[i].status;
345
346 if (status < 0) {
347 print_err_status(dev, i, status);
348 if (urb->iso_frame_desc[i].status != -EPROTO)
349 continue;
350 }
351
352 if (urb->iso_frame_desc[i].actual_length <= 0) {
353 /* cx231xx_isocdbg("packet %d is empty",i); - spammy */
354 continue;
355 }
356 if (urb->iso_frame_desc[i].actual_length >
357 dev->video_mode.max_pkt_size) {
358 cx231xx_isocdbg("packet bigger than packet size");
359 continue;
360 }
361
362 /* get buffer pointer and length */
363 p_buffer = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
364 buffer_size = urb->iso_frame_desc[i].actual_length;
365 bytes_parsed = 0;
366
367 if (dma_q->is_partial_line) {
368 /* Handle the case of a partial line */
369 sav_eav = dma_q->last_sav;
370 } else {
371 /* Check for a SAV/EAV overlapping
372 the buffer boundary */
373 sav_eav =
374 cx231xx_find_boundary_SAV_EAV(p_buffer,
375 dma_q->partial_buf,
376 &bytes_parsed);
377 }
378
379 sav_eav &= 0xF0;
380 /* Get the first line if we have some portion of an SAV/EAV from
381 the last buffer or a partial line */
382 if (sav_eav) {
383 bytes_parsed += cx231xx_get_video_line(dev, dma_q,
384 sav_eav, /* SAV/EAV */
385 p_buffer + bytes_parsed, /* p_buffer */
386 buffer_size - bytes_parsed);/* buf size */
387 }
388
389 /* Now parse data that is completely in this buffer */
390 /* dma_q->is_partial_line = 0; */
391
392 while (bytes_parsed < buffer_size) {
393 u32 bytes_used = 0;
394
395 sav_eav = cx231xx_find_next_SAV_EAV(
396 p_buffer + bytes_parsed, /* p_buffer */
397 buffer_size - bytes_parsed, /* buf size */
398 &bytes_used);/* bytes used to get SAV/EAV */
399
400 bytes_parsed += bytes_used;
401
402 sav_eav &= 0xF0;
403 if (sav_eav && (bytes_parsed < buffer_size)) {
404 bytes_parsed += cx231xx_get_video_line(dev,
405 dma_q, sav_eav, /* SAV/EAV */
406 p_buffer + bytes_parsed,/* p_buffer */
407 buffer_size - bytes_parsed);/*buf size*/
408 }
409 }
410
411 /* Save the last four bytes of the buffer so we can check the
412 buffer boundary condition next time */
413 memcpy(dma_q->partial_buf, p_buffer + buffer_size - 4, 4);
414 bytes_parsed = 0;
415
416 }
417 return rc;
418}
419
420u8 cx231xx_find_boundary_SAV_EAV(u8 *p_buffer, u8 *partial_buf,
421 u32 *p_bytes_used)
422{
423 u32 bytes_used;
424 u8 boundary_bytes[8];
425 u8 sav_eav = 0;
426
427 *p_bytes_used = 0;
428
429 /* Create an array of the last 4 bytes of the last buffer and the first
430 4 bytes of the current buffer. */
431
432 memcpy(boundary_bytes, partial_buf, 4);
433 memcpy(boundary_bytes + 4, p_buffer, 4);
434
435 /* Check for the SAV/EAV in the boundary buffer */
436 sav_eav = cx231xx_find_next_SAV_EAV((u8 *)&boundary_bytes, 8,
437 &bytes_used);
438
439 if (sav_eav) {
440 /* found a boundary SAV/EAV. Updates the bytes used to reflect
441 only those used in the new buffer */
442 *p_bytes_used = bytes_used - 4;
443 }
444
445 return sav_eav;
446}
447
448u8 cx231xx_find_next_SAV_EAV(u8 *p_buffer, u32 buffer_size, u32 *p_bytes_used)
449{
450 u32 i;
451 u8 sav_eav = 0;
452
453 /*
454 * Don't search if the buffer size is less than 4. It causes a page
455 * fault since buffer_size - 4 evaluates to a large number in that
456 * case.
457 */
458 if (buffer_size < 4) {
459 *p_bytes_used = buffer_size;
460 return 0;
461 }
462
463 for (i = 0; i < (buffer_size - 3); i++) {
464
465 if ((p_buffer[i] == 0xFF) &&
466 (p_buffer[i + 1] == 0x00) && (p_buffer[i + 2] == 0x00)) {
467
468 *p_bytes_used = i + 4;
469 sav_eav = p_buffer[i + 3];
470 return sav_eav;
471 }
472 }
473
474 *p_bytes_used = buffer_size;
475 return 0;
476}
477
478u32 cx231xx_get_video_line(struct cx231xx *dev,
479 struct cx231xx_dmaqueue *dma_q, u8 sav_eav,
480 u8 *p_buffer, u32 buffer_size)
481{
482 u32 bytes_copied = 0;
483 int current_field = -1;
484
485 switch (sav_eav) {
486 case SAV_ACTIVE_VIDEO_FIELD1:
487 /* looking for skipped line which occurred in PAL 720x480 mode.
488 In this case, there will be no active data contained
489 between the SAV and EAV */
490 if ((buffer_size > 3) && (p_buffer[0] == 0xFF) &&
491 (p_buffer[1] == 0x00) && (p_buffer[2] == 0x00) &&
492 ((p_buffer[3] == EAV_ACTIVE_VIDEO_FIELD1) ||
493 (p_buffer[3] == EAV_ACTIVE_VIDEO_FIELD2) ||
494 (p_buffer[3] == EAV_VBLANK_FIELD1) ||
495 (p_buffer[3] == EAV_VBLANK_FIELD2)))
496 return bytes_copied;
497 current_field = 1;
498 break;
499
500 case SAV_ACTIVE_VIDEO_FIELD2:
501 /* looking for skipped line which occurred in PAL 720x480 mode.
502 In this case, there will be no active data contained between
503 the SAV and EAV */
504 if ((buffer_size > 3) && (p_buffer[0] == 0xFF) &&
505 (p_buffer[1] == 0x00) && (p_buffer[2] == 0x00) &&
506 ((p_buffer[3] == EAV_ACTIVE_VIDEO_FIELD1) ||
507 (p_buffer[3] == EAV_ACTIVE_VIDEO_FIELD2) ||
508 (p_buffer[3] == EAV_VBLANK_FIELD1) ||
509 (p_buffer[3] == EAV_VBLANK_FIELD2)))
510 return bytes_copied;
511 current_field = 2;
512 break;
513 }
514
515 dma_q->last_sav = sav_eav;
516
517 bytes_copied = cx231xx_copy_video_line(dev, dma_q, p_buffer,
518 buffer_size, current_field);
519
520 return bytes_copied;
521}
522
523u32 cx231xx_copy_video_line(struct cx231xx *dev,
524 struct cx231xx_dmaqueue *dma_q, u8 *p_line,
525 u32 length, int field_number)
526{
527 u32 bytes_to_copy;
528 struct cx231xx_buffer *buf;
529 u32 _line_size = dev->width * 2;
530
531 if (dma_q->current_field != field_number)
532 cx231xx_reset_video_buffer(dev, dma_q);
533
534 /* get the buffer pointer */
535 buf = dev->video_mode.isoc_ctl.buf;
536
537 /* Remember the field number for next time */
538 dma_q->current_field = field_number;
539
540 bytes_to_copy = dma_q->bytes_left_in_line;
541 if (bytes_to_copy > length)
542 bytes_to_copy = length;
543
544 if (dma_q->lines_completed >= dma_q->lines_per_field) {
545 dma_q->bytes_left_in_line -= bytes_to_copy;
546 dma_q->is_partial_line = (dma_q->bytes_left_in_line == 0) ?
547 0 : 1;
548 return 0;
549 }
550
551 dma_q->is_partial_line = 1;
552
553 /* If we don't have a buffer, just return the number of bytes we would
554 have copied if we had a buffer. */
555 if (!buf) {
556 dma_q->bytes_left_in_line -= bytes_to_copy;
557 dma_q->is_partial_line = (dma_q->bytes_left_in_line == 0)
558 ? 0 : 1;
559 return bytes_to_copy;
560 }
561
562 /* copy the data to video buffer */
563 cx231xx_do_copy(dev, dma_q, p_line, bytes_to_copy);
564
565 dma_q->pos += bytes_to_copy;
566 dma_q->bytes_left_in_line -= bytes_to_copy;
567
568 if (dma_q->bytes_left_in_line == 0) {
569 dma_q->bytes_left_in_line = _line_size;
570 dma_q->lines_completed++;
571 dma_q->is_partial_line = 0;
572
573 if (cx231xx_is_buffer_done(dev, dma_q) && buf) {
574 buffer_filled(dev, dma_q, buf);
575
576 dma_q->pos = 0;
577 buf = NULL;
578 dma_q->lines_completed = 0;
579 }
580 }
581
582 return bytes_to_copy;
583}
584
585void cx231xx_reset_video_buffer(struct cx231xx *dev,
586 struct cx231xx_dmaqueue *dma_q)
587{
588 struct cx231xx_buffer *buf;
589
590 /* handle the switch from field 1 to field 2 */
591 if (dma_q->current_field == 1) {
592 if (dma_q->lines_completed >= dma_q->lines_per_field)
593 dma_q->field1_done = 1;
594 else
595 dma_q->field1_done = 0;
596 }
597
598 buf = dev->video_mode.isoc_ctl.buf;
599
600 if (buf == NULL) {
601 u8 *outp = NULL;
602 /* first try to get the buffer */
603 get_next_buf(dma_q, &buf);
604
605 if (buf)
606 outp = videobuf_to_vmalloc(&buf->vb);
607
608 dma_q->pos = 0;
609 dma_q->field1_done = 0;
610 dma_q->current_field = -1;
611 }
612
613 /* reset the counters */
614 dma_q->bytes_left_in_line = dev->width << 1;
615 dma_q->lines_completed = 0;
616}
617
618int cx231xx_do_copy(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
619 u8 *p_buffer, u32 bytes_to_copy)
620{
621 u8 *p_out_buffer = NULL;
622 u32 current_line_bytes_copied = 0;
623 struct cx231xx_buffer *buf;
624 u32 _line_size = dev->width << 1;
625 void *startwrite;
626 int offset, lencopy;
627
628 buf = dev->video_mode.isoc_ctl.buf;
629
630 if (buf == NULL)
631 return -1;
632
633 p_out_buffer = videobuf_to_vmalloc(&buf->vb);
634
635 current_line_bytes_copied = _line_size - dma_q->bytes_left_in_line;
636
637 /* Offset field 2 one line from the top of the buffer */
638 offset = (dma_q->current_field == 1) ? 0 : _line_size;
639
640 /* Offset for field 2 */
641 startwrite = p_out_buffer + offset;
642
643 /* lines already completed in the current field */
644 startwrite += (dma_q->lines_completed * _line_size * 2);
645
646 /* bytes already completed in the current line */
647 startwrite += current_line_bytes_copied;
648
649 lencopy = dma_q->bytes_left_in_line > bytes_to_copy ?
650 bytes_to_copy : dma_q->bytes_left_in_line;
651
652 if ((u8 *)(startwrite + lencopy) > (u8 *)(p_out_buffer + buf->vb.size))
653 return 0;
654
655 /* The below copies the UYVY data straight into video buffer */
656 cx231xx_swab((u16 *) p_buffer, (u16 *) startwrite, (u16) lencopy);
657
658 return 0;
659}
660
661void cx231xx_swab(u16 *from, u16 *to, u16 len)
662{
663 u16 i;
664
665 if (len <= 0)
666 return;
667
668 for (i = 0; i < len / 2; i++)
669 to[i] = (from[i] << 8) | (from[i] >> 8);
670}
671
672u8 cx231xx_is_buffer_done(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q)
673{
674 u8 buffer_complete = 0;
675
676 /* Dual field stream */
677 buffer_complete = ((dma_q->current_field == 2) &&
678 (dma_q->lines_completed >= dma_q->lines_per_field) &&
679 dma_q->field1_done);
680
681 return buffer_complete;
682}
683
684/* ------------------------------------------------------------------
685 Videobuf operations
686 ------------------------------------------------------------------*/
687
688static int
689buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
690{
691 struct cx231xx_fh *fh = vq->priv_data;
692 struct cx231xx *dev = fh->dev;
693 struct v4l2_frequency f;
694
695 *size = (fh->dev->width * fh->dev->height * dev->format->depth + 7)>>3;
696 if (0 == *count)
697 *count = CX231XX_DEF_BUF;
698
699 if (*count < CX231XX_MIN_BUF)
700 *count = CX231XX_MIN_BUF;
701
702 /* Ask tuner to go to analog mode */
703 memset(&f, 0, sizeof(f));
704 f.frequency = dev->ctl_freq;
705 f.type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
706
707 call_all(dev, tuner, s_frequency, &f);
708
709 return 0;
710}
711
712/* This is called *without* dev->slock held; please keep it that way */
713static void free_buffer(struct videobuf_queue *vq, struct cx231xx_buffer *buf)
714{
715 struct cx231xx_fh *fh = vq->priv_data;
716 struct cx231xx *dev = fh->dev;
717 unsigned long flags = 0;
718
719 if (in_interrupt())
720 BUG();
721
722 /* We used to wait for the buffer to finish here, but this didn't work
723 because, as we were keeping the state as VIDEOBUF_QUEUED,
724 videobuf_queue_cancel marked it as finished for us.
725 (Also, it could wedge forever if the hardware was misconfigured.)
726
727 This should be safe; by the time we get here, the buffer isn't
728 queued anymore. If we ever start marking the buffers as
729 VIDEOBUF_ACTIVE, it won't be, though.
730 */
731 spin_lock_irqsave(&dev->video_mode.slock, flags);
732 if (dev->video_mode.isoc_ctl.buf == buf)
733 dev->video_mode.isoc_ctl.buf = NULL;
734 spin_unlock_irqrestore(&dev->video_mode.slock, flags);
735
736 videobuf_vmalloc_free(&buf->vb);
737 buf->vb.state = VIDEOBUF_NEEDS_INIT;
738}
739
740static int
741buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
742 enum v4l2_field field)
743{
744 struct cx231xx_fh *fh = vq->priv_data;
745 struct cx231xx_buffer *buf =
746 container_of(vb, struct cx231xx_buffer, vb);
747 struct cx231xx *dev = fh->dev;
748 int rc = 0, urb_init = 0;
749
750 /* The only currently supported format is 16 bits/pixel */
751 buf->vb.size = (fh->dev->width * fh->dev->height * dev->format->depth
752 + 7) >> 3;
753 if (0 != buf->vb.baddr && buf->vb.bsize < buf->vb.size)
754 return -EINVAL;
755
756 buf->vb.width = dev->width;
757 buf->vb.height = dev->height;
758 buf->vb.field = field;
759
760 if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
761 rc = videobuf_iolock(vq, &buf->vb, NULL);
762 if (rc < 0)
763 goto fail;
764 }
765
766 if (!dev->video_mode.isoc_ctl.num_bufs)
767 urb_init = 1;
768
769 if (urb_init) {
770 rc = cx231xx_init_isoc(dev, CX231XX_NUM_PACKETS,
771 CX231XX_NUM_BUFS,
772 dev->video_mode.max_pkt_size,
773 cx231xx_isoc_copy);
774 if (rc < 0)
775 goto fail;
776 }
777
778 buf->vb.state = VIDEOBUF_PREPARED;
779 return 0;
780
781fail:
782 free_buffer(vq, buf);
783 return rc;
784}
785
786static void buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
787{
788 struct cx231xx_buffer *buf =
789 container_of(vb, struct cx231xx_buffer, vb);
790 struct cx231xx_fh *fh = vq->priv_data;
791 struct cx231xx *dev = fh->dev;
792 struct cx231xx_dmaqueue *vidq = &dev->video_mode.vidq;
793
794 buf->vb.state = VIDEOBUF_QUEUED;
795 list_add_tail(&buf->vb.queue, &vidq->active);
796
797}
798
799static void buffer_release(struct videobuf_queue *vq,
800 struct videobuf_buffer *vb)
801{
802 struct cx231xx_buffer *buf =
803 container_of(vb, struct cx231xx_buffer, vb);
804 struct cx231xx_fh *fh = vq->priv_data;
805 struct cx231xx *dev = (struct cx231xx *)fh->dev;
806
807 cx231xx_isocdbg("cx231xx: called buffer_release\n");
808
809 free_buffer(vq, buf);
810}
811
812static struct videobuf_queue_ops cx231xx_video_qops = {
813 .buf_setup = buffer_setup,
814 .buf_prepare = buffer_prepare,
815 .buf_queue = buffer_queue,
816 .buf_release = buffer_release,
817};
818
819/********************* v4l2 interface **************************************/
820
821void video_mux(struct cx231xx *dev, int index)
822{
823 dev->video_input = index;
824 dev->ctl_ainput = INPUT(index)->amux;
825
826 cx231xx_set_video_input_mux(dev, index);
827
828 cx25840_call(dev, video, s_routing, INPUT(index)->vmux, 0, 0);
829
830 cx231xx_set_audio_input(dev, dev->ctl_ainput);
831
832 cx231xx_info("video_mux : %d\n", index);
833
834 /* do mode control overrides if required */
835 cx231xx_do_mode_ctrl_overrides(dev);
836}
837
838/* Usage lock check functions */
839static int res_get(struct cx231xx_fh *fh)
840{
841 struct cx231xx *dev = fh->dev;
842 int rc = 0;
843
844 /* This instance already has stream_on */
845 if (fh->stream_on)
846 return rc;
847
848 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
849 if (dev->stream_on)
850 return -EBUSY;
851 dev->stream_on = 1;
852 } else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
853 if (dev->vbi_stream_on)
854 return -EBUSY;
855 dev->vbi_stream_on = 1;
856 } else
857 return -EINVAL;
858
859 fh->stream_on = 1;
860
861 return rc;
862}
863
864static int res_check(struct cx231xx_fh *fh)
865{
866 return fh->stream_on;
867}
868
869static void res_free(struct cx231xx_fh *fh)
870{
871 struct cx231xx *dev = fh->dev;
872
873 fh->stream_on = 0;
874
875 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
876 dev->stream_on = 0;
877 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
878 dev->vbi_stream_on = 0;
879}
880
881static int check_dev(struct cx231xx *dev)
882{
883 if (dev->state & DEV_DISCONNECTED) {
884 cx231xx_errdev("v4l2 ioctl: device not present\n");
885 return -ENODEV;
886 }
887
888 if (dev->state & DEV_MISCONFIGURED) {
889 cx231xx_errdev("v4l2 ioctl: device is misconfigured; "
890 "close and open it again\n");
891 return -EIO;
892 }
893 return 0;
894}
895
896void get_scale(struct cx231xx *dev,
897 unsigned int width, unsigned int height,
898 unsigned int *hscale, unsigned int *vscale)
899{
900 unsigned int maxw = norm_maxw(dev);
901 unsigned int maxh = norm_maxh(dev);
902
903 *hscale = (((unsigned long)maxw) << 12) / width - 4096L;
904 if (*hscale >= 0x4000)
905 *hscale = 0x3fff;
906
907 *vscale = (((unsigned long)maxh) << 12) / height - 4096L;
908 if (*vscale >= 0x4000)
909 *vscale = 0x3fff;
910
911 dev->hscale = *hscale;
912 dev->vscale = *vscale;
913
914}
915
916/* ------------------------------------------------------------------
917 IOCTL vidioc handling
918 ------------------------------------------------------------------*/
919
920static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
921 struct v4l2_format *f)
922{
923 struct cx231xx_fh *fh = priv;
924 struct cx231xx *dev = fh->dev;
925
926 mutex_lock(&dev->lock);
927
928 f->fmt.pix.width = dev->width;
929 f->fmt.pix.height = dev->height;
930 f->fmt.pix.pixelformat = dev->format->fourcc;;
931 f->fmt.pix.bytesperline = (dev->width * dev->format->depth + 7) >> 3;;
932 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * dev->height;
933 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
934
935 f->fmt.pix.field = V4L2_FIELD_INTERLACED;
936
937 mutex_unlock(&dev->lock);
938
939 return 0;
940}
941
942static struct cx231xx_fmt *format_by_fourcc(unsigned int fourcc)
943{
944 unsigned int i;
945
946 for (i = 0; i < ARRAY_SIZE(format); i++)
947 if (format[i].fourcc == fourcc)
948 return &format[i];
949
950 return NULL;
951}
952
953static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
954 struct v4l2_format *f)
955{
956 struct cx231xx_fh *fh = priv;
957 struct cx231xx *dev = fh->dev;
958 int width = f->fmt.pix.width;
959 int height = f->fmt.pix.height;
960 unsigned int maxw = norm_maxw(dev);
961 unsigned int maxh = norm_maxh(dev);
962 unsigned int hscale, vscale;
963 struct cx231xx_fmt *fmt;
964
965 fmt = format_by_fourcc(f->fmt.pix.pixelformat);
966 if (!fmt) {
967 cx231xx_videodbg("Fourcc format (%08x) invalid.\n",
968 f->fmt.pix.pixelformat);
969 return -EINVAL;
970 }
971
972 /* width must even because of the YUYV format
973 height must be even because of interlacing */
974 height &= 0xfffe;
975 width &= 0xfffe;
976
977 if (unlikely(height < 32))
978 height = 32;
979 if (unlikely(height > maxh))
980 height = maxh;
981 if (unlikely(width < 48))
982 width = 48;
983 if (unlikely(width > maxw))
984 width = maxw;
985
986 get_scale(dev, width, height, &hscale, &vscale);
987
988 width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
989 height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
990
991 f->fmt.pix.width = width;
992 f->fmt.pix.height = height;
993 f->fmt.pix.pixelformat = fmt->fourcc;
994 f->fmt.pix.bytesperline = (dev->width * fmt->depth + 7) >> 3;
995 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
996 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
997 f->fmt.pix.field = V4L2_FIELD_INTERLACED;
998
999 return 0;
1000}
1001
1002static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1003 struct v4l2_format *f)
1004{
1005 struct cx231xx_fh *fh = priv;
1006 struct cx231xx *dev = fh->dev;
1007 int rc;
1008 struct cx231xx_fmt *fmt;
1009
1010 rc = check_dev(dev);
1011 if (rc < 0)
1012 return rc;
1013
1014 mutex_lock(&dev->lock);
1015
1016 vidioc_try_fmt_vid_cap(file, priv, f);
1017
1018 fmt = format_by_fourcc(f->fmt.pix.pixelformat);
1019 if (!fmt) {
1020 rc = -EINVAL;
1021 goto out;
1022 }
1023
1024 if (videobuf_queue_is_busy(&fh->vb_vidq)) {
1025 cx231xx_errdev("%s queue busy\n", __func__);
1026 rc = -EBUSY;
1027 goto out;
1028 }
1029
1030 if (dev->stream_on && !fh->stream_on) {
1031 cx231xx_errdev("%s device in use by another fh\n", __func__);
1032 rc = -EBUSY;
1033 goto out;
1034 }
1035
1036 /* set new image size */
1037 dev->width = f->fmt.pix.width;
1038 dev->height = f->fmt.pix.height;
1039 dev->format = fmt;
1040 get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
1041
1042 call_all(dev, video, s_fmt, f);
1043
1044 /* Set the correct alternate setting for this resolution */
1045 cx231xx_resolution_set(dev);
1046
1047out:
1048 mutex_unlock(&dev->lock);
1049 return rc;
1050}
1051
1052static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id * id)
1053{
1054 struct cx231xx_fh *fh = priv;
1055 struct cx231xx *dev = fh->dev;
1056
1057 *id = dev->norm;
1058 return 0;
1059}
1060
1061static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm)
1062{
1063 struct cx231xx_fh *fh = priv;
1064 struct cx231xx *dev = fh->dev;
1065 struct v4l2_format f;
1066 int rc;
1067
1068 rc = check_dev(dev);
1069 if (rc < 0)
1070 return rc;
1071
1072 cx231xx_info("vidioc_s_std : 0x%x\n", (unsigned int)*norm);
1073
1074 mutex_lock(&dev->lock);
1075 dev->norm = *norm;
1076
1077 /* Adjusts width/height, if needed */
1078 f.fmt.pix.width = dev->width;
1079 f.fmt.pix.height = dev->height;
1080 vidioc_try_fmt_vid_cap(file, priv, &f);
1081
1082 /* set new image size */
1083 dev->width = f.fmt.pix.width;
1084 dev->height = f.fmt.pix.height;
1085 get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
1086
1087 call_all(dev, core, s_std, dev->norm);
1088
1089 mutex_unlock(&dev->lock);
1090
1091 cx231xx_resolution_set(dev);
1092
1093 /* do mode control overrides */
1094 cx231xx_do_mode_ctrl_overrides(dev);
1095
1096 return 0;
1097}
1098
1099static const char *iname[] = {
1100 [CX231XX_VMUX_COMPOSITE1] = "Composite1",
1101 [CX231XX_VMUX_SVIDEO] = "S-Video",
1102 [CX231XX_VMUX_TELEVISION] = "Television",
1103 [CX231XX_VMUX_CABLE] = "Cable TV",
1104 [CX231XX_VMUX_DVB] = "DVB",
1105 [CX231XX_VMUX_DEBUG] = "for debug only",
1106};
1107
1108static int vidioc_enum_input(struct file *file, void *priv,
1109 struct v4l2_input *i)
1110{
1111 struct cx231xx_fh *fh = priv;
1112 struct cx231xx *dev = fh->dev;
1113 unsigned int n;
1114
1115 n = i->index;
1116 if (n >= MAX_CX231XX_INPUT)
1117 return -EINVAL;
1118 if (0 == INPUT(n)->type)
1119 return -EINVAL;
1120
1121 i->index = n;
1122 i->type = V4L2_INPUT_TYPE_CAMERA;
1123
1124 strcpy(i->name, iname[INPUT(n)->type]);
1125
1126 if ((CX231XX_VMUX_TELEVISION == INPUT(n)->type) ||
1127 (CX231XX_VMUX_CABLE == INPUT(n)->type))
1128 i->type = V4L2_INPUT_TYPE_TUNER;
1129
1130 i->std = dev->vdev->tvnorms;
1131
1132 return 0;
1133}
1134
1135static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1136{
1137 struct cx231xx_fh *fh = priv;
1138 struct cx231xx *dev = fh->dev;
1139
1140 *i = dev->video_input;
1141
1142 return 0;
1143}
1144
1145static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1146{
1147 struct cx231xx_fh *fh = priv;
1148 struct cx231xx *dev = fh->dev;
1149 int rc;
1150
1151 rc = check_dev(dev);
1152 if (rc < 0)
1153 return rc;
1154
1155 if (i >= MAX_CX231XX_INPUT)
1156 return -EINVAL;
1157 if (0 == INPUT(i)->type)
1158 return -EINVAL;
1159
1160 mutex_lock(&dev->lock);
1161
1162 video_mux(dev, i);
1163
1164 mutex_unlock(&dev->lock);
1165 return 0;
1166}
1167
1168static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1169{
1170 struct cx231xx_fh *fh = priv;
1171 struct cx231xx *dev = fh->dev;
1172
1173 switch (a->index) {
1174 case CX231XX_AMUX_VIDEO:
1175 strcpy(a->name, "Television");
1176 break;
1177 case CX231XX_AMUX_LINE_IN:
1178 strcpy(a->name, "Line In");
1179 break;
1180 default:
1181 return -EINVAL;
1182 }
1183
1184 a->index = dev->ctl_ainput;
1185 a->capability = V4L2_AUDCAP_STEREO;
1186
1187 return 0;
1188}
1189
1190static int vidioc_s_audio(struct file *file, void *priv, struct v4l2_audio *a)
1191{
1192 struct cx231xx_fh *fh = priv;
1193 struct cx231xx *dev = fh->dev;
1194 int status = 0;
1195
1196 /* Doesn't allow manual routing */
1197 if (a->index != dev->ctl_ainput)
1198 return -EINVAL;
1199
1200 dev->ctl_ainput = INPUT(a->index)->amux;
1201 status = cx231xx_set_audio_input(dev, dev->ctl_ainput);
1202
1203 return status;
1204}
1205
1206static int vidioc_queryctrl(struct file *file, void *priv,
1207 struct v4l2_queryctrl *qc)
1208{
1209 struct cx231xx_fh *fh = priv;
1210 struct cx231xx *dev = fh->dev;
1211 int id = qc->id;
1212 int i;
1213 int rc;
1214
1215 rc = check_dev(dev);
1216 if (rc < 0)
1217 return rc;
1218
1219 qc->id = v4l2_ctrl_next(ctrl_classes, qc->id);
1220 if (unlikely(qc->id == 0))
1221 return -EINVAL;
1222
1223 memset(qc, 0, sizeof(*qc));
1224
1225 qc->id = id;
1226
1227 if (qc->id < V4L2_CID_BASE || qc->id >= V4L2_CID_LASTP1)
1228 return -EINVAL;
1229
1230 for (i = 0; i < CX231XX_CTLS; i++)
1231 if (cx231xx_ctls[i].v.id == qc->id)
1232 break;
1233
1234 if (i == CX231XX_CTLS) {
1235 *qc = no_ctl;
1236 return 0;
1237 }
1238 *qc = cx231xx_ctls[i].v;
1239
1240 mutex_lock(&dev->lock);
1241 call_all(dev, core, queryctrl, qc);
1242 mutex_unlock(&dev->lock);
1243
1244 if (qc->type)
1245 return 0;
1246 else
1247 return -EINVAL;
1248}
1249
1250static int vidioc_g_ctrl(struct file *file, void *priv,
1251 struct v4l2_control *ctrl)
1252{
1253 struct cx231xx_fh *fh = priv;
1254 struct cx231xx *dev = fh->dev;
1255 int rc;
1256
1257 rc = check_dev(dev);
1258 if (rc < 0)
1259 return rc;
1260
1261 mutex_lock(&dev->lock);
1262 call_all(dev, core, g_ctrl, ctrl);
1263 mutex_unlock(&dev->lock);
1264 return rc;
1265}
1266
1267static int vidioc_s_ctrl(struct file *file, void *priv,
1268 struct v4l2_control *ctrl)
1269{
1270 struct cx231xx_fh *fh = priv;
1271 struct cx231xx *dev = fh->dev;
1272 int rc;
1273
1274 rc = check_dev(dev);
1275 if (rc < 0)
1276 return rc;
1277
1278 mutex_lock(&dev->lock);
1279 call_all(dev, core, s_ctrl, ctrl);
1280 mutex_unlock(&dev->lock);
1281 return rc;
1282}
1283
1284static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
1285{
1286 struct cx231xx_fh *fh = priv;
1287 struct cx231xx *dev = fh->dev;
1288 int rc;
1289
1290 rc = check_dev(dev);
1291 if (rc < 0)
1292 return rc;
1293
1294 if (0 != t->index)
1295 return -EINVAL;
1296
1297 strcpy(t->name, "Tuner");
1298
1299 t->type = V4L2_TUNER_ANALOG_TV;
1300 t->capability = V4L2_TUNER_CAP_NORM;
1301 t->rangehigh = 0xffffffffUL;
1302 t->signal = 0xffff; /* LOCKED */
1303
1304 return 0;
1305}
1306
1307static int vidioc_s_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
1308{
1309 struct cx231xx_fh *fh = priv;
1310 struct cx231xx *dev = fh->dev;
1311 int rc;
1312
1313 rc = check_dev(dev);
1314 if (rc < 0)
1315 return rc;
1316
1317 if (0 != t->index)
1318 return -EINVAL;
1319#if 0
1320 mutex_lock(&dev->lock);
1321 call_all(dev, tuner, s_tuner, t);
1322 mutex_unlock(&dev->lock);
1323#endif
1324 return 0;
1325}
1326
1327static int vidioc_g_frequency(struct file *file, void *priv,
1328 struct v4l2_frequency *f)
1329{
1330 struct cx231xx_fh *fh = priv;
1331 struct cx231xx *dev = fh->dev;
1332
1333 mutex_lock(&dev->lock);
1334 f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
1335 f->frequency = dev->ctl_freq;
1336
1337 call_all(dev, tuner, g_frequency, f);
1338
1339 mutex_unlock(&dev->lock);
1340
1341 return 0;
1342}
1343
1344static int vidioc_s_frequency(struct file *file, void *priv,
1345 struct v4l2_frequency *f)
1346{
1347 struct cx231xx_fh *fh = priv;
1348 struct cx231xx *dev = fh->dev;
1349 int rc;
1350
1351 rc = check_dev(dev);
1352 if (rc < 0)
1353 return rc;
1354
1355 if (0 != f->tuner)
1356 return -EINVAL;
1357
1358 if (unlikely(0 == fh->radio && f->type != V4L2_TUNER_ANALOG_TV))
1359 return -EINVAL;
1360 if (unlikely(1 == fh->radio && f->type != V4L2_TUNER_RADIO))
1361 return -EINVAL;
1362
1363 /* set pre channel change settings in DIF first */
1364 rc = cx231xx_tuner_pre_channel_change(dev);
1365
1366 mutex_lock(&dev->lock);
1367
1368 dev->ctl_freq = f->frequency;
1369
1370 if (dev->tuner_type == TUNER_XC5000) {
1371 if (dev->cx231xx_set_analog_freq != NULL)
1372 dev->cx231xx_set_analog_freq(dev, f->frequency);
1373 } else
1374 call_all(dev, tuner, s_frequency, f);
1375
1376 mutex_unlock(&dev->lock);
1377
1378 /* set post channel change settings in DIF first */
1379 rc = cx231xx_tuner_post_channel_change(dev);
1380
1381 cx231xx_info("Set New FREQUENCY to %d\n", f->frequency);
1382
1383 return rc;
1384}
1385
1386#ifdef CONFIG_VIDEO_ADV_DEBUG
1387
1388/*
1389 -R, --list-registers=type=<host/i2cdrv/i2caddr>,
1390 chip=<chip>[,min=<addr>,max=<addr>]
1391 dump registers from <min> to <max> [VIDIOC_DBG_G_REGISTER]
1392 -r, --set-register=type=<host/i2cdrv/i2caddr>,
1393 chip=<chip>,reg=<addr>,val=<val>
1394 set the register [VIDIOC_DBG_S_REGISTER]
1395
1396 if type == host, then <chip> is the hosts chip ID (default 0)
1397 if type == i2cdrv (default), then <chip> is the I2C driver name or ID
1398 if type == i2caddr, then <chip> is the 7-bit I2C address
1399*/
1400
1401static int vidioc_g_register(struct file *file, void *priv,
1402 struct v4l2_dbg_register *reg)
1403{
1404 struct cx231xx_fh *fh = priv;
1405 struct cx231xx *dev = fh->dev;
1406 int ret = 0;
1407 u8 value[4] = { 0, 0, 0, 0 };
1408 u32 data = 0;
1409
1410 switch (reg->match.type) {
1411 case V4L2_CHIP_MATCH_HOST:
1412 switch (reg->match.addr) {
1413 case 0: /* Cx231xx - internal registers */
1414 ret = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER,
1415 (u16)reg->reg, value, 4);
1416 reg->val = value[0] | value[1] << 8 |
1417 value[2] << 16 | value[3] << 24;
1418 break;
1419 case 1: /* AFE - read byte */
1420 ret = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
1421 (u16)reg->reg, 2, &data, 1);
1422 reg->val = le32_to_cpu(data & 0xff);
1423 break;
1424 case 14: /* AFE - read dword */
1425 ret = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
1426 (u16)reg->reg, 2, &data, 4);
1427 reg->val = le32_to_cpu(data);
1428 break;
1429 case 2: /* Video Block - read byte */
1430 ret = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
1431 (u16)reg->reg, 2, &data, 1);
1432 reg->val = le32_to_cpu(data & 0xff);
1433 break;
1434 case 24: /* Video Block - read dword */
1435 ret = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
1436 (u16)reg->reg, 2, &data, 4);
1437 reg->val = le32_to_cpu(data);
1438 break;
1439 case 3: /* I2S block - read byte */
1440 ret = cx231xx_read_i2c_data(dev,
1441 I2S_BLK_DEVICE_ADDRESS,
1442 (u16)reg->reg, 1,
1443 &data, 1);
1444 reg->val = le32_to_cpu(data & 0xff);
1445 break;
1446 case 34: /* I2S Block - read dword */
1447 ret =
1448 cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
1449 (u16)reg->reg, 1, &data, 4);
1450 reg->val = le32_to_cpu(data);
1451 break;
1452 }
1453 return ret < 0 ? ret : 0;
1454
1455 case V4L2_CHIP_MATCH_I2C_DRIVER:
1456 call_all(dev, core, g_register, reg);
1457 return 0;
1458 case V4L2_CHIP_MATCH_I2C_ADDR:
1459 /* Not supported yet */
1460 return -EINVAL;
1461 default:
1462 if (!v4l2_chip_match_host(&reg->match))
1463 return -EINVAL;
1464 }
1465
1466 mutex_lock(&dev->lock);
1467 call_all(dev, core, g_register, reg);
1468 mutex_unlock(&dev->lock);
1469
1470 return ret;
1471}
1472
1473static int vidioc_s_register(struct file *file, void *priv,
1474 struct v4l2_dbg_register *reg)
1475{
1476 struct cx231xx_fh *fh = priv;
1477 struct cx231xx *dev = fh->dev;
1478 int ret = 0;
1479 __le64 buf;
1480 u32 value;
1481 u8 data[4] = { 0, 0, 0, 0 };
1482
1483 buf = cpu_to_le64(reg->val);
1484
1485 switch (reg->match.type) {
1486 case V4L2_CHIP_MATCH_HOST:
1487 {
1488 value = (u32) buf & 0xffffffff;
1489
1490 switch (reg->match.addr) {
1491 case 0: /* cx231xx internal registers */
1492 data[0] = (u8) value;
1493 data[1] = (u8) (value >> 8);
1494 data[2] = (u8) (value >> 16);
1495 data[3] = (u8) (value >> 24);
1496 ret = cx231xx_write_ctrl_reg(dev,
1497 VRT_SET_REGISTER,
1498 (u16)reg->reg, data,
1499 4);
1500 break;
1501 case 1: /* AFE - read byte */
1502 ret = cx231xx_write_i2c_data(dev,
1503 AFE_DEVICE_ADDRESS,
1504 (u16)reg->reg, 2,
1505 value, 1);
1506 break;
1507 case 14: /* AFE - read dword */
1508 ret = cx231xx_write_i2c_data(dev,
1509 AFE_DEVICE_ADDRESS,
1510 (u16)reg->reg, 2,
1511 value, 4);
1512 break;
1513 case 2: /* Video Block - read byte */
1514 ret =
1515 cx231xx_write_i2c_data(dev,
1516 VID_BLK_I2C_ADDRESS,
1517 (u16)reg->reg, 2,
1518 value, 1);
1519 break;
1520 case 24: /* Video Block - read dword */
1521 ret =
1522 cx231xx_write_i2c_data(dev,
1523 VID_BLK_I2C_ADDRESS,
1524 (u16)reg->reg, 2,
1525 value, 4);
1526 break;
1527 case 3: /* I2S block - read byte */
1528 ret =
1529 cx231xx_write_i2c_data(dev,
1530 I2S_BLK_DEVICE_ADDRESS,
1531 (u16)reg->reg, 1,
1532 value, 1);
1533 break;
1534 case 34: /* I2S block - read dword */
1535 ret =
1536 cx231xx_write_i2c_data(dev,
1537 I2S_BLK_DEVICE_ADDRESS,
1538 (u16)reg->reg, 1,
1539 value, 4);
1540 break;
1541 }
1542 }
1543 return ret < 0 ? ret : 0;
1544
1545 default:
1546 break;
1547 }
1548
1549 mutex_lock(&dev->lock);
1550 call_all(dev, core, s_register, reg);
1551 mutex_unlock(&dev->lock);
1552
1553 return ret;
1554}
1555#endif
1556
1557static int vidioc_cropcap(struct file *file, void *priv,
1558 struct v4l2_cropcap *cc)
1559{
1560 struct cx231xx_fh *fh = priv;
1561 struct cx231xx *dev = fh->dev;
1562
1563 if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1564 return -EINVAL;
1565
1566 cc->bounds.left = 0;
1567 cc->bounds.top = 0;
1568 cc->bounds.width = dev->width;
1569 cc->bounds.height = dev->height;
1570 cc->defrect = cc->bounds;
1571 cc->pixelaspect.numerator = 54; /* 4:3 FIXME: remove magic numbers */
1572 cc->pixelaspect.denominator = 59;
1573
1574 return 0;
1575}
1576
1577static int vidioc_streamon(struct file *file, void *priv,
1578 enum v4l2_buf_type type)
1579{
1580 struct cx231xx_fh *fh = priv;
1581 struct cx231xx *dev = fh->dev;
1582 int rc;
1583
1584 rc = check_dev(dev);
1585 if (rc < 0)
1586 return rc;
1587
1588 mutex_lock(&dev->lock);
1589 rc = res_get(fh);
1590
1591 if (likely(rc >= 0))
1592 rc = videobuf_streamon(&fh->vb_vidq);
1593
1594 call_all(dev, video, s_stream, 1);
1595
1596 mutex_unlock(&dev->lock);
1597
1598 return rc;
1599}
1600
1601static int vidioc_streamoff(struct file *file, void *priv,
1602 enum v4l2_buf_type type)
1603{
1604 struct cx231xx_fh *fh = priv;
1605 struct cx231xx *dev = fh->dev;
1606 int rc;
1607
1608 rc = check_dev(dev);
1609 if (rc < 0)
1610 return rc;
1611
1612 if ((fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) &&
1613 (fh->type != V4L2_BUF_TYPE_VBI_CAPTURE))
1614 return -EINVAL;
1615 if (type != fh->type)
1616 return -EINVAL;
1617
1618 mutex_lock(&dev->lock);
1619
1620 cx25840_call(dev, video, s_stream, 0);
1621
1622 videobuf_streamoff(&fh->vb_vidq);
1623 res_free(fh);
1624
1625 mutex_unlock(&dev->lock);
1626
1627 return 0;
1628}
1629
1630static int vidioc_querycap(struct file *file, void *priv,
1631 struct v4l2_capability *cap)
1632{
1633 struct cx231xx_fh *fh = priv;
1634 struct cx231xx *dev = fh->dev;
1635
1636 strlcpy(cap->driver, "cx231xx", sizeof(cap->driver));
1637 strlcpy(cap->card, cx231xx_boards[dev->model].name, sizeof(cap->card));
1638 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
1639
1640 cap->version = CX231XX_VERSION_CODE;
1641
1642 cap->capabilities = V4L2_CAP_VBI_CAPTURE |
1643#if 0
1644 V4L2_CAP_SLICED_VBI_CAPTURE |
1645#endif
1646 V4L2_CAP_VIDEO_CAPTURE |
1647 V4L2_CAP_AUDIO |
1648 V4L2_CAP_READWRITE |
1649 V4L2_CAP_STREAMING;
1650
1651 if (dev->tuner_type != TUNER_ABSENT)
1652 cap->capabilities |= V4L2_CAP_TUNER;
1653
1654 return 0;
1655}
1656
1657static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
1658 struct v4l2_fmtdesc *f)
1659{
1660 if (unlikely(f->index >= ARRAY_SIZE(format)))
1661 return -EINVAL;
1662
1663 strlcpy(f->description, format[f->index].name, sizeof(f->description));
1664 f->pixelformat = format[f->index].fourcc;
1665
1666 return 0;
1667}
1668
1669/* Sliced VBI ioctls */
1670static int vidioc_g_fmt_sliced_vbi_cap(struct file *file, void *priv,
1671 struct v4l2_format *f)
1672{
1673 struct cx231xx_fh *fh = priv;
1674 struct cx231xx *dev = fh->dev;
1675 int rc;
1676
1677 rc = check_dev(dev);
1678 if (rc < 0)
1679 return rc;
1680
1681 mutex_lock(&dev->lock);
1682
1683 f->fmt.sliced.service_set = 0;
1684
1685 call_all(dev, video, g_fmt, f);
1686
1687 if (f->fmt.sliced.service_set == 0)
1688 rc = -EINVAL;
1689
1690 mutex_unlock(&dev->lock);
1691 return rc;
1692}
1693
1694static int vidioc_try_set_sliced_vbi_cap(struct file *file, void *priv,
1695 struct v4l2_format *f)
1696{
1697 struct cx231xx_fh *fh = priv;
1698 struct cx231xx *dev = fh->dev;
1699 int rc;
1700
1701 rc = check_dev(dev);
1702 if (rc < 0)
1703 return rc;
1704
1705 mutex_lock(&dev->lock);
1706 call_all(dev, video, g_fmt, f);
1707 mutex_unlock(&dev->lock);
1708
1709 if (f->fmt.sliced.service_set == 0)
1710 return -EINVAL;
1711
1712 return 0;
1713}
1714
1715/* RAW VBI ioctls */
1716
1717static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1718 struct v4l2_format *f)
1719{
1720 struct cx231xx_fh *fh = priv;
1721 struct cx231xx *dev = fh->dev;
1722
1723 f->fmt.vbi.sampling_rate = (dev->norm & V4L2_STD_625_50) ?
1724 35468950 : 28636363;
1725 f->fmt.vbi.samples_per_line = VBI_LINE_LENGTH;
1726 f->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1727 f->fmt.vbi.offset = 64 * 4;
1728 f->fmt.vbi.start[0] = (dev->norm & V4L2_STD_625_50) ?
1729 PAL_VBI_START_LINE : NTSC_VBI_START_LINE;
1730 f->fmt.vbi.count[0] = (dev->norm & V4L2_STD_625_50) ?
1731 PAL_VBI_LINES : NTSC_VBI_LINES;
1732 f->fmt.vbi.start[1] = (dev->norm & V4L2_STD_625_50) ?
1733 PAL_VBI_START_LINE + 312 : NTSC_VBI_START_LINE + 263;
1734 f->fmt.vbi.count[1] = f->fmt.vbi.count[0];
1735
1736 return 0;
1737
1738}
1739
1740static int vidioc_try_fmt_vbi_cap(struct file *file, void *priv,
1741 struct v4l2_format *f)
1742{
1743 struct cx231xx_fh *fh = priv;
1744 struct cx231xx *dev = fh->dev;
1745
1746 if (dev->vbi_stream_on && !fh->stream_on) {
1747 cx231xx_errdev("%s device in use by another fh\n", __func__);
1748 return -EBUSY;
1749 }
1750
1751 f->type = V4L2_BUF_TYPE_VBI_CAPTURE;
1752 f->fmt.vbi.sampling_rate = (dev->norm & V4L2_STD_625_50) ?
1753 35468950 : 28636363;
1754 f->fmt.vbi.samples_per_line = VBI_LINE_LENGTH;
1755 f->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1756 f->fmt.vbi.offset = 244;
1757 f->fmt.vbi.flags = 0;
1758 f->fmt.vbi.start[0] = (dev->norm & V4L2_STD_625_50) ?
1759 PAL_VBI_START_LINE : NTSC_VBI_START_LINE;
1760 f->fmt.vbi.count[0] = (dev->norm & V4L2_STD_625_50) ?
1761 PAL_VBI_LINES : NTSC_VBI_LINES;
1762 f->fmt.vbi.start[1] = (dev->norm & V4L2_STD_625_50) ?
1763 PAL_VBI_START_LINE + 312 : NTSC_VBI_START_LINE + 263;
1764 f->fmt.vbi.count[1] = f->fmt.vbi.count[0];
1765
1766 return 0;
1767
1768}
1769
1770static int vidioc_reqbufs(struct file *file, void *priv,
1771 struct v4l2_requestbuffers *rb)
1772{
1773 struct cx231xx_fh *fh = priv;
1774 struct cx231xx *dev = fh->dev;
1775 int rc;
1776
1777 rc = check_dev(dev);
1778 if (rc < 0)
1779 return rc;
1780
1781 return videobuf_reqbufs(&fh->vb_vidq, rb);
1782}
1783
1784static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *b)
1785{
1786 struct cx231xx_fh *fh = priv;
1787 struct cx231xx *dev = fh->dev;
1788 int rc;
1789
1790 rc = check_dev(dev);
1791 if (rc < 0)
1792 return rc;
1793
1794 return videobuf_querybuf(&fh->vb_vidq, b);
1795}
1796
1797static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
1798{
1799 struct cx231xx_fh *fh = priv;
1800 struct cx231xx *dev = fh->dev;
1801 int rc;
1802
1803 rc = check_dev(dev);
1804 if (rc < 0)
1805 return rc;
1806
1807 return videobuf_qbuf(&fh->vb_vidq, b);
1808}
1809
1810static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
1811{
1812 struct cx231xx_fh *fh = priv;
1813 struct cx231xx *dev = fh->dev;
1814 int rc;
1815
1816 rc = check_dev(dev);
1817 if (rc < 0)
1818 return rc;
1819
1820 return videobuf_dqbuf(&fh->vb_vidq, b, file->f_flags & O_NONBLOCK);
1821}
1822
1823#ifdef CONFIG_VIDEO_V4L1_COMPAT
1824static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
1825{
1826 struct cx231xx_fh *fh = priv;
1827
1828 return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
1829}
1830#endif
1831
1832/* ----------------------------------------------------------- */
1833/* RADIO ESPECIFIC IOCTLS */
1834/* ----------------------------------------------------------- */
1835
1836static int radio_querycap(struct file *file, void *priv,
1837 struct v4l2_capability *cap)
1838{
1839 struct cx231xx *dev = ((struct cx231xx_fh *)priv)->dev;
1840
1841 strlcpy(cap->driver, "cx231xx", sizeof(cap->driver));
1842 strlcpy(cap->card, cx231xx_boards[dev->model].name, sizeof(cap->card));
1843 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
1844
1845 cap->version = CX231XX_VERSION_CODE;
1846 cap->capabilities = V4L2_CAP_TUNER;
1847 return 0;
1848}
1849
1850static int radio_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
1851{
1852 struct cx231xx *dev = ((struct cx231xx_fh *)priv)->dev;
1853
1854 if (unlikely(t->index > 0))
1855 return -EINVAL;
1856
1857 strcpy(t->name, "Radio");
1858 t->type = V4L2_TUNER_RADIO;
1859
1860 mutex_lock(&dev->lock);
1861 call_all(dev, tuner, s_tuner, t);
1862 mutex_unlock(&dev->lock);
1863
1864 return 0;
1865}
1866
1867static int radio_enum_input(struct file *file, void *priv, struct v4l2_input *i)
1868{
1869 if (i->index != 0)
1870 return -EINVAL;
1871 strcpy(i->name, "Radio");
1872 i->type = V4L2_INPUT_TYPE_TUNER;
1873
1874 return 0;
1875}
1876
1877static int radio_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1878{
1879 if (unlikely(a->index))
1880 return -EINVAL;
1881
1882 strcpy(a->name, "Radio");
1883 return 0;
1884}
1885
1886static int radio_s_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
1887{
1888 struct cx231xx *dev = ((struct cx231xx_fh *)priv)->dev;
1889
1890 if (0 != t->index)
1891 return -EINVAL;
1892
1893 mutex_lock(&dev->lock);
1894 call_all(dev, tuner, s_tuner, t);
1895 mutex_unlock(&dev->lock);
1896
1897 return 0;
1898}
1899
1900static int radio_s_audio(struct file *file, void *fh, struct v4l2_audio *a)
1901{
1902 return 0;
1903}
1904
1905static int radio_s_input(struct file *file, void *fh, unsigned int i)
1906{
1907 return 0;
1908}
1909
1910static int radio_queryctrl(struct file *file, void *priv,
1911 struct v4l2_queryctrl *c)
1912{
1913 int i;
1914
1915 if (c->id < V4L2_CID_BASE || c->id >= V4L2_CID_LASTP1)
1916 return -EINVAL;
1917 if (c->id == V4L2_CID_AUDIO_MUTE) {
1918 for (i = 0; i < CX231XX_CTLS; i++)
1919 if (cx231xx_ctls[i].v.id == c->id)
1920 break;
1921 *c = cx231xx_ctls[i].v;
1922 } else
1923 *c = no_ctl;
1924 return 0;
1925}
1926
1927/*
1928 * cx231xx_v4l2_open()
1929 * inits the device and starts isoc transfer
1930 */
1931static int cx231xx_v4l2_open(struct file *filp)
1932{
1933 int minor = video_devdata(filp)->minor;
1934 int errCode = 0, radio = 0;
1935 struct cx231xx *dev = NULL;
1936 struct cx231xx_fh *fh;
1937 enum v4l2_buf_type fh_type = 0;
1938
1939 dev = cx231xx_get_device(minor, &fh_type, &radio);
1940 if (NULL == dev)
1941 return -ENODEV;
1942
1943 mutex_lock(&dev->lock);
1944
1945 cx231xx_videodbg("open minor=%d type=%s users=%d\n",
1946 minor, v4l2_type_names[fh_type], dev->users);
1947
1948#if 0
1949 errCode = cx231xx_set_mode(dev, CX231XX_ANALOG_MODE);
1950 if (errCode < 0) {
1951 cx231xx_errdev
1952 ("Device locked on digital mode. Can't open analog\n");
1953 mutex_unlock(&dev->lock);
1954 return -EBUSY;
1955 }
1956#endif
1957
1958 fh = kzalloc(sizeof(struct cx231xx_fh), GFP_KERNEL);
1959 if (!fh) {
1960 cx231xx_errdev("cx231xx-video.c: Out of memory?!\n");
1961 mutex_unlock(&dev->lock);
1962 return -ENOMEM;
1963 }
1964 fh->dev = dev;
1965 fh->radio = radio;
1966 fh->type = fh_type;
1967 filp->private_data = fh;
1968
1969 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) {
1970 dev->width = norm_maxw(dev);
1971 dev->height = norm_maxh(dev);
1972 dev->hscale = 0;
1973 dev->vscale = 0;
1974
1975 /* Power up in Analog TV mode */
1976 cx231xx_set_power_mode(dev, POLARIS_AVMODE_ANALOGT_TV);
1977
1978#if 0
1979 cx231xx_set_mode(dev, CX231XX_ANALOG_MODE);
1980#endif
1981 cx231xx_resolution_set(dev);
1982
1983 /* set video alternate setting */
1984 cx231xx_set_video_alternate(dev);
1985
1986 /* Needed, since GPIO might have disabled power of
1987 some i2c device */
1988 cx231xx_config_i2c(dev);
1989
1990 /* device needs to be initialized before isoc transfer */
1991 dev->video_input = dev->video_input > 2 ? 2 : dev->video_input;
1992 video_mux(dev, dev->video_input);
1993
1994 }
1995 if (fh->radio) {
1996 cx231xx_videodbg("video_open: setting radio device\n");
1997
1998 /* cx231xx_start_radio(dev); */
1999
2000 call_all(dev, tuner, s_radio);
2001 }
2002
2003 dev->users++;
2004
2005 if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
2006 videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_video_qops,
2007 NULL, &dev->video_mode.slock,
2008 fh->type, V4L2_FIELD_INTERLACED,
2009 sizeof(struct cx231xx_buffer), fh);
2010 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
2011 /* Set the required alternate setting VBI interface works in
2012 Bulk mode only */
2013 cx231xx_set_alt_setting(dev, INDEX_VANC, 0);
2014
2015 videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_vbi_qops,
2016 NULL, &dev->vbi_mode.slock,
2017 fh->type, V4L2_FIELD_SEQ_TB,
2018 sizeof(struct cx231xx_buffer), fh);
2019 }
2020
2021 mutex_unlock(&dev->lock);
2022
2023 return errCode;
2024}
2025
2026/*
2027 * cx231xx_realease_resources()
2028 * unregisters the v4l2,i2c and usb devices
2029 * called when the device gets disconected or at module unload
2030*/
2031void cx231xx_release_analog_resources(struct cx231xx *dev)
2032{
2033
2034 /*FIXME: I2C IR should be disconnected */
2035
2036 if (dev->radio_dev) {
2037 if (-1 != dev->radio_dev->minor)
2038 video_unregister_device(dev->radio_dev);
2039 else
2040 video_device_release(dev->radio_dev);
2041 dev->radio_dev = NULL;
2042 }
2043 if (dev->vbi_dev) {
2044 cx231xx_info("V4L2 device /dev/vbi%d deregistered\n",
2045 dev->vbi_dev->num);
2046 if (-1 != dev->vbi_dev->minor)
2047 video_unregister_device(dev->vbi_dev);
2048 else
2049 video_device_release(dev->vbi_dev);
2050 dev->vbi_dev = NULL;
2051 }
2052 if (dev->vdev) {
2053 cx231xx_info("V4L2 device /dev/video%d deregistered\n",
2054 dev->vdev->num);
2055 if (-1 != dev->vdev->minor)
2056 video_unregister_device(dev->vdev);
2057 else
2058 video_device_release(dev->vdev);
2059 dev->vdev = NULL;
2060 }
2061}
2062
2063/*
2064 * cx231xx_v4l2_close()
2065 * stops streaming and deallocates all resources allocated by the v4l2
2066 * calls and ioctls
2067 */
2068static int cx231xx_v4l2_close(struct file *filp)
2069{
2070 struct cx231xx_fh *fh = filp->private_data;
2071 struct cx231xx *dev = fh->dev;
2072
2073 cx231xx_videodbg("users=%d\n", dev->users);
2074
2075 mutex_lock(&dev->lock);
2076
2077 if (res_check(fh))
2078 res_free(fh);
2079
2080 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
2081 videobuf_stop(&fh->vb_vidq);
2082 videobuf_mmap_free(&fh->vb_vidq);
2083
2084 /* the device is already disconnect,
2085 free the remaining resources */
2086 if (dev->state & DEV_DISCONNECTED) {
2087 cx231xx_release_resources(dev);
2088 mutex_unlock(&dev->lock);
2089 kfree(dev);
2090 return 0;
2091 }
2092
2093 /* do this before setting alternate! */
2094 cx231xx_uninit_vbi_isoc(dev);
2095
2096 /* set alternate 0 */
2097 if (!dev->vbi_or_sliced_cc_mode)
2098 cx231xx_set_alt_setting(dev, INDEX_VANC, 0);
2099 else
2100 cx231xx_set_alt_setting(dev, INDEX_HANC, 0);
2101
2102 kfree(fh);
2103 dev->users--;
2104 wake_up_interruptible_nr(&dev->open, 1);
2105 mutex_unlock(&dev->lock);
2106 return 0;
2107 }
2108
2109 if (dev->users == 1) {
2110 videobuf_stop(&fh->vb_vidq);
2111 videobuf_mmap_free(&fh->vb_vidq);
2112
2113 /* the device is already disconnect,
2114 free the remaining resources */
2115 if (dev->state & DEV_DISCONNECTED) {
2116 cx231xx_release_resources(dev);
2117 mutex_unlock(&dev->lock);
2118 kfree(dev);
2119 return 0;
2120 }
2121
2122 /* Save some power by putting tuner to sleep */
2123 call_all(dev, tuner, s_standby);
2124
2125 /* do this before setting alternate! */
2126 cx231xx_uninit_isoc(dev);
2127 cx231xx_set_mode(dev, CX231XX_SUSPEND);
2128
2129 /* set alternate 0 */
2130 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 0);
2131 }
2132 kfree(fh);
2133 dev->users--;
2134 wake_up_interruptible_nr(&dev->open, 1);
2135 mutex_unlock(&dev->lock);
2136 return 0;
2137}
2138
2139/*
2140 * cx231xx_v4l2_read()
2141 * will allocate buffers when called for the first time
2142 */
2143static ssize_t
2144cx231xx_v4l2_read(struct file *filp, char __user *buf, size_t count,
2145 loff_t *pos)
2146{
2147 struct cx231xx_fh *fh = filp->private_data;
2148 struct cx231xx *dev = fh->dev;
2149 int rc;
2150
2151 rc = check_dev(dev);
2152 if (rc < 0)
2153 return rc;
2154
2155 if ((fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) ||
2156 (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)) {
2157 mutex_lock(&dev->lock);
2158 rc = res_get(fh);
2159 mutex_unlock(&dev->lock);
2160
2161 if (unlikely(rc < 0))
2162 return rc;
2163
2164 return videobuf_read_stream(&fh->vb_vidq, buf, count, pos, 0,
2165 filp->f_flags & O_NONBLOCK);
2166 }
2167 return 0;
2168}
2169
2170/*
2171 * cx231xx_v4l2_poll()
2172 * will allocate buffers when called for the first time
2173 */
2174static unsigned int cx231xx_v4l2_poll(struct file *filp, poll_table * wait)
2175{
2176 struct cx231xx_fh *fh = filp->private_data;
2177 struct cx231xx *dev = fh->dev;
2178 int rc;
2179
2180 rc = check_dev(dev);
2181 if (rc < 0)
2182 return rc;
2183
2184 mutex_lock(&dev->lock);
2185 rc = res_get(fh);
2186 mutex_unlock(&dev->lock);
2187
2188 if (unlikely(rc < 0))
2189 return POLLERR;
2190
2191 if ((V4L2_BUF_TYPE_VIDEO_CAPTURE == fh->type) ||
2192 (V4L2_BUF_TYPE_VBI_CAPTURE == fh->type))
2193 return videobuf_poll_stream(filp, &fh->vb_vidq, wait);
2194 else
2195 return POLLERR;
2196}
2197
2198/*
2199 * cx231xx_v4l2_mmap()
2200 */
2201static int cx231xx_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
2202{
2203 struct cx231xx_fh *fh = filp->private_data;
2204 struct cx231xx *dev = fh->dev;
2205 int rc;
2206
2207 rc = check_dev(dev);
2208 if (rc < 0)
2209 return rc;
2210
2211 mutex_lock(&dev->lock);
2212 rc = res_get(fh);
2213 mutex_unlock(&dev->lock);
2214
2215 if (unlikely(rc < 0))
2216 return rc;
2217
2218 rc = videobuf_mmap_mapper(&fh->vb_vidq, vma);
2219
2220 cx231xx_videodbg("vma start=0x%08lx, size=%ld, ret=%d\n",
2221 (unsigned long)vma->vm_start,
2222 (unsigned long)vma->vm_end -
2223 (unsigned long)vma->vm_start, rc);
2224
2225 return rc;
2226}
2227
2228static const struct v4l2_file_operations cx231xx_v4l_fops = {
2229 .owner = THIS_MODULE,
2230 .open = cx231xx_v4l2_open,
2231 .release = cx231xx_v4l2_close,
2232 .read = cx231xx_v4l2_read,
2233 .poll = cx231xx_v4l2_poll,
2234 .mmap = cx231xx_v4l2_mmap,
2235 .ioctl = video_ioctl2,
2236};
2237
2238static const struct v4l2_ioctl_ops video_ioctl_ops = {
2239 .vidioc_querycap = vidioc_querycap,
2240 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
2241 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
2242 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
2243 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
2244 .vidioc_g_fmt_vbi_cap = vidioc_g_fmt_vbi_cap,
2245 .vidioc_try_fmt_vbi_cap = vidioc_try_fmt_vbi_cap,
2246 .vidioc_s_fmt_vbi_cap = vidioc_try_fmt_vbi_cap,
2247 .vidioc_g_audio = vidioc_g_audio,
2248 .vidioc_s_audio = vidioc_s_audio,
2249 .vidioc_cropcap = vidioc_cropcap,
2250 .vidioc_g_fmt_sliced_vbi_cap = vidioc_g_fmt_sliced_vbi_cap,
2251 .vidioc_try_fmt_sliced_vbi_cap = vidioc_try_set_sliced_vbi_cap,
2252 .vidioc_reqbufs = vidioc_reqbufs,
2253 .vidioc_querybuf = vidioc_querybuf,
2254 .vidioc_qbuf = vidioc_qbuf,
2255 .vidioc_dqbuf = vidioc_dqbuf,
2256 .vidioc_s_std = vidioc_s_std,
2257 .vidioc_g_std = vidioc_g_std,
2258 .vidioc_enum_input = vidioc_enum_input,
2259 .vidioc_g_input = vidioc_g_input,
2260 .vidioc_s_input = vidioc_s_input,
2261 .vidioc_queryctrl = vidioc_queryctrl,
2262 .vidioc_g_ctrl = vidioc_g_ctrl,
2263 .vidioc_s_ctrl = vidioc_s_ctrl,
2264 .vidioc_streamon = vidioc_streamon,
2265 .vidioc_streamoff = vidioc_streamoff,
2266 .vidioc_g_tuner = vidioc_g_tuner,
2267 .vidioc_s_tuner = vidioc_s_tuner,
2268 .vidioc_g_frequency = vidioc_g_frequency,
2269 .vidioc_s_frequency = vidioc_s_frequency,
2270#ifdef CONFIG_VIDEO_ADV_DEBUG
2271 .vidioc_g_register = vidioc_g_register,
2272 .vidioc_s_register = vidioc_s_register,
2273#endif
2274#ifdef CONFIG_VIDEO_V4L1_COMPAT
2275 .vidiocgmbuf = vidiocgmbuf,
2276#endif
2277};
2278
2279static struct video_device cx231xx_vbi_template;
2280
2281static const struct video_device cx231xx_video_template = {
2282 .fops = &cx231xx_v4l_fops,
2283 .release = video_device_release,
2284 .ioctl_ops = &video_ioctl_ops,
2285 .minor = -1,
2286 .tvnorms = V4L2_STD_ALL,
2287 .current_norm = V4L2_STD_PAL,
2288};
2289
2290static const struct v4l2_file_operations radio_fops = {
2291 .owner = THIS_MODULE,
2292 .open = cx231xx_v4l2_open,
2293 .release = cx231xx_v4l2_close,
2294 .ioctl = video_ioctl2,
2295};
2296
2297static const struct v4l2_ioctl_ops radio_ioctl_ops = {
2298 .vidioc_querycap = radio_querycap,
2299 .vidioc_g_tuner = radio_g_tuner,
2300 .vidioc_enum_input = radio_enum_input,
2301 .vidioc_g_audio = radio_g_audio,
2302 .vidioc_s_tuner = radio_s_tuner,
2303 .vidioc_s_audio = radio_s_audio,
2304 .vidioc_s_input = radio_s_input,
2305 .vidioc_queryctrl = radio_queryctrl,
2306 .vidioc_g_ctrl = vidioc_g_ctrl,
2307 .vidioc_s_ctrl = vidioc_s_ctrl,
2308 .vidioc_g_frequency = vidioc_g_frequency,
2309 .vidioc_s_frequency = vidioc_s_frequency,
2310#ifdef CONFIG_VIDEO_ADV_DEBUG
2311 .vidioc_g_register = vidioc_g_register,
2312 .vidioc_s_register = vidioc_s_register,
2313#endif
2314};
2315
2316static struct video_device cx231xx_radio_template = {
2317 .name = "cx231xx-radio",
2318 .fops = &radio_fops,
2319 .ioctl_ops = &radio_ioctl_ops,
2320 .minor = -1,
2321};
2322
2323/******************************** usb interface ******************************/
2324
2325static struct video_device *cx231xx_vdev_init(struct cx231xx *dev,
2326 const struct video_device
2327 *template, const char *type_name)
2328{
2329 struct video_device *vfd;
2330
2331 vfd = video_device_alloc();
2332 if (NULL == vfd)
2333 return NULL;
2334
2335 *vfd = *template;
2336 vfd->minor = -1;
2337 vfd->v4l2_dev = &dev->v4l2_dev;
2338 vfd->release = video_device_release;
2339 vfd->debug = video_debug;
2340
2341 snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name);
2342
2343 return vfd;
2344}
2345
2346int cx231xx_register_analog_devices(struct cx231xx *dev)
2347{
2348 int ret;
2349
2350 cx231xx_info("%s: v4l2 driver version %d.%d.%d\n",
2351 dev->name,
2352 (CX231XX_VERSION_CODE >> 16) & 0xff,
2353 (CX231XX_VERSION_CODE >> 8) & 0xff,
2354 CX231XX_VERSION_CODE & 0xff);
2355
2356 /* set default norm */
2357 /*dev->norm = cx231xx_video_template.current_norm; */
2358 dev->width = norm_maxw(dev);
2359 dev->height = norm_maxh(dev);
2360 dev->interlaced = 0;
2361 dev->hscale = 0;
2362 dev->vscale = 0;
2363
2364 /* Analog specific initialization */
2365 dev->format = &format[0];
2366 /* video_mux(dev, dev->video_input); */
2367
2368 /* Audio defaults */
2369 dev->mute = 1;
2370 dev->volume = 0x1f;
2371
2372 /* enable vbi capturing */
2373 /* write code here... */
2374
2375 /* allocate and fill video video_device struct */
2376 dev->vdev = cx231xx_vdev_init(dev, &cx231xx_video_template, "video");
2377 if (!dev->vdev) {
2378 cx231xx_errdev("cannot allocate video_device.\n");
2379 return -ENODEV;
2380 }
2381
2382 /* register v4l2 video video_device */
2383 ret = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
2384 video_nr[dev->devno]);
2385 if (ret) {
2386 cx231xx_errdev("unable to register video device (error=%i).\n",
2387 ret);
2388 return ret;
2389 }
2390
2391 cx231xx_info("%s/0: registered device video%d [v4l2]\n",
2392 dev->name, dev->vdev->num);
2393
2394 /* Initialize VBI template */
2395 memcpy(&cx231xx_vbi_template, &cx231xx_video_template,
2396 sizeof(cx231xx_vbi_template));
2397 strcpy(cx231xx_vbi_template.name, "cx231xx-vbi");
2398
2399 /* Allocate and fill vbi video_device struct */
2400 dev->vbi_dev = cx231xx_vdev_init(dev, &cx231xx_vbi_template, "vbi");
2401
2402 /* register v4l2 vbi video_device */
2403 ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
2404 vbi_nr[dev->devno]);
2405 if (ret < 0) {
2406 cx231xx_errdev("unable to register vbi device\n");
2407 return ret;
2408 }
2409
2410 cx231xx_info("%s/0: registered device vbi%d\n",
2411 dev->name, dev->vbi_dev->num);
2412
2413 if (cx231xx_boards[dev->model].radio.type == CX231XX_RADIO) {
2414 dev->radio_dev = cx231xx_vdev_init(dev, &cx231xx_radio_template,
2415 "radio");
2416 if (!dev->radio_dev) {
2417 cx231xx_errdev("cannot allocate video_device.\n");
2418 return -ENODEV;
2419 }
2420 ret = video_register_device(dev->radio_dev, VFL_TYPE_RADIO,
2421 radio_nr[dev->devno]);
2422 if (ret < 0) {
2423 cx231xx_errdev("can't register radio device\n");
2424 return ret;
2425 }
2426 cx231xx_info("Registered radio device as /dev/radio%d\n",
2427 dev->radio_dev->num);
2428 }
2429
2430 cx231xx_info("V4L2 device registered as /dev/video%d and /dev/vbi%d\n",
2431 dev->vdev->num, dev->vbi_dev->num);
2432
2433 return 0;
2434}
diff --git a/drivers/media/video/cx231xx/cx231xx.h b/drivers/media/video/cx231xx/cx231xx.h
new file mode 100644
index 000000000000..aa4a23ef491a
--- /dev/null
+++ b/drivers/media/video/cx231xx/cx231xx.h
@@ -0,0 +1,779 @@
1/*
2 cx231xx.h - driver for Conexant Cx23100/101/102 USB video capture devices
3
4 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
5 Based on em28xx driver
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef _CX231XX_H
23#define _CX231XX_H
24
25#include <linux/videodev2.h>
26#include <linux/types.h>
27#include <linux/ioctl.h>
28#include <linux/i2c.h>
29#include <linux/i2c-algo-bit.h>
30#include <linux/mutex.h>
31
32
33#include <media/videobuf-vmalloc.h>
34#include <media/v4l2-device.h>
35#include <media/ir-kbd-i2c.h>
36#if defined(CONFIG_VIDEO_CX231XX_DVB) || \
37 defined(CONFIG_VIDEO_CX231XX_DVB_MODULE)
38#include <media/videobuf-dvb.h>
39#endif
40
41#include "cx231xx-reg.h"
42#include "cx231xx-pcb-cfg.h"
43#include "cx231xx-conf-reg.h"
44
45#define DRIVER_NAME "cx231xx"
46#define PWR_SLEEP_INTERVAL 5
47
48/* I2C addresses for control block in Cx231xx */
49#define AFE_DEVICE_ADDRESS 0x60
50#define I2S_BLK_DEVICE_ADDRESS 0x98
51#define VID_BLK_I2C_ADDRESS 0x88
52#define DIF_USE_BASEBAND 0xFFFFFFFF
53
54/* Boards supported by driver */
55#define CX231XX_BOARD_UNKNOWN 0
56#define CX231XX_BOARD_CNXT_RDE_250 1
57#define CX231XX_BOARD_CNXT_RDU_250 2
58
59/* Limits minimum and default number of buffers */
60#define CX231XX_MIN_BUF 4
61#define CX231XX_DEF_BUF 12
62#define CX231XX_DEF_VBI_BUF 6
63
64#define VBI_LINE_COUNT 17
65#define VBI_LINE_LENGTH 1440
66
67/*Limits the max URB message size */
68#define URB_MAX_CTRL_SIZE 80
69
70/* Params for validated field */
71#define CX231XX_BOARD_NOT_VALIDATED 1
72#define CX231XX_BOARD_VALIDATED 0
73
74/* maximum number of cx231xx boards */
75#define CX231XX_MAXBOARDS 8
76
77/* maximum number of frames that can be queued */
78#define CX231XX_NUM_FRAMES 5
79
80/* number of buffers for isoc transfers */
81#define CX231XX_NUM_BUFS 8
82
83/* number of packets for each buffer
84 windows requests only 40 packets .. so we better do the same
85 this is what I found out for all alternate numbers there!
86 */
87#define CX231XX_NUM_PACKETS 40
88
89/* default alternate; 0 means choose the best */
90#define CX231XX_PINOUT 0
91
92#define CX231XX_INTERLACED_DEFAULT 1
93
94/* time to wait when stopping the isoc transfer */
95#define CX231XX_URB_TIMEOUT \
96 msecs_to_jiffies(CX231XX_NUM_BUFS * CX231XX_NUM_PACKETS)
97
98enum cx231xx_mode {
99 CX231XX_SUSPEND,
100 CX231XX_ANALOG_MODE,
101 CX231XX_DIGITAL_MODE,
102};
103
104enum cx231xx_std_mode {
105 CX231XX_TV_AIR = 0,
106 CX231XX_TV_CABLE
107};
108
109enum cx231xx_stream_state {
110 STREAM_OFF,
111 STREAM_INTERRUPT,
112 STREAM_ON,
113};
114
115struct cx231xx;
116
117struct cx231xx_usb_isoc_ctl {
118 /* max packet size of isoc transaction */
119 int max_pkt_size;
120
121 /* number of allocated urbs */
122 int num_bufs;
123
124 /* urb for isoc transfers */
125 struct urb **urb;
126
127 /* transfer buffers for isoc transfer */
128 char **transfer_buffer;
129
130 /* Last buffer command and region */
131 u8 cmd;
132 int pos, size, pktsize;
133
134 /* Last field: ODD or EVEN? */
135 int field;
136
137 /* Stores incomplete commands */
138 u32 tmp_buf;
139 int tmp_buf_len;
140
141 /* Stores already requested buffers */
142 struct cx231xx_buffer *buf;
143
144 /* Stores the number of received fields */
145 int nfields;
146
147 /* isoc urb callback */
148 int (*isoc_copy) (struct cx231xx *dev, struct urb *urb);
149};
150
151struct cx231xx_fmt {
152 char *name;
153 u32 fourcc; /* v4l2 format id */
154 int depth;
155 int reg;
156};
157
158/* buffer for one video frame */
159struct cx231xx_buffer {
160 /* common v4l buffer stuff -- must be first */
161 struct videobuf_buffer vb;
162
163 struct list_head frame;
164 int top_field;
165 int receiving;
166};
167
168struct cx231xx_dmaqueue {
169 struct list_head active;
170 struct list_head queued;
171
172 wait_queue_head_t wq;
173
174 /* Counters to control buffer fill */
175 int pos;
176 u8 is_partial_line;
177 u8 partial_buf[8];
178 u8 last_sav;
179 int current_field;
180 u32 bytes_left_in_line;
181 u32 lines_completed;
182 u8 field1_done;
183 u32 lines_per_field;
184};
185
186/* inputs */
187
188#define MAX_CX231XX_INPUT 4
189
190enum cx231xx_itype {
191 CX231XX_VMUX_COMPOSITE1 = 1,
192 CX231XX_VMUX_SVIDEO,
193 CX231XX_VMUX_TELEVISION,
194 CX231XX_VMUX_CABLE,
195 CX231XX_RADIO,
196 CX231XX_VMUX_DVB,
197 CX231XX_VMUX_DEBUG
198};
199
200enum cx231xx_v_input {
201 CX231XX_VIN_1_1 = 0x1,
202 CX231XX_VIN_2_1,
203 CX231XX_VIN_3_1,
204 CX231XX_VIN_4_1,
205 CX231XX_VIN_1_2 = 0x01,
206 CX231XX_VIN_2_2,
207 CX231XX_VIN_3_2,
208 CX231XX_VIN_1_3 = 0x1,
209 CX231XX_VIN_2_3,
210 CX231XX_VIN_3_3,
211};
212
213/* cx231xx has two audio inputs: tuner and line in */
214enum cx231xx_amux {
215 /* This is the only entry for cx231xx tuner input */
216 CX231XX_AMUX_VIDEO, /* cx231xx tuner */
217 CX231XX_AMUX_LINE_IN, /* Line In */
218};
219
220struct cx231xx_reg_seq {
221 unsigned char bit;
222 unsigned char val;
223 int sleep;
224};
225
226struct cx231xx_input {
227 enum cx231xx_itype type;
228 unsigned int vmux;
229 enum cx231xx_amux amux;
230 struct cx231xx_reg_seq *gpio;
231};
232
233#define INPUT(nr) (&cx231xx_boards[dev->model].input[nr])
234
235enum cx231xx_decoder {
236 CX231XX_NODECODER,
237 CX231XX_AVDECODER
238};
239
240enum CX231XX_I2C_MASTER_PORT {
241 I2C_0 = 0,
242 I2C_1 = 1,
243 I2C_2 = 2,
244 I2C_3 = 3
245};
246
247struct cx231xx_board {
248 char *name;
249 int vchannels;
250 int tuner_type;
251 int tuner_addr;
252 v4l2_std_id norm; /* tv norm */
253
254 /* demod related */
255 int demod_addr;
256 u8 demod_xfer_mode; /* 0 - Serial; 1 - parallel */
257
258 /* GPIO Pins */
259 struct cx231xx_reg_seq *dvb_gpio;
260 struct cx231xx_reg_seq *suspend_gpio;
261 struct cx231xx_reg_seq *tuner_gpio;
262 u8 tuner_sif_gpio;
263 u8 tuner_scl_gpio;
264 u8 tuner_sda_gpio;
265
266 /* PIN ctrl */
267 u32 ctl_pin_status_mask;
268 u8 agc_analog_digital_select_gpio;
269 u32 gpio_pin_status_mask;
270
271 /* i2c masters */
272 u8 tuner_i2c_master;
273 u8 demod_i2c_master;
274
275 unsigned int max_range_640_480:1;
276 unsigned int has_dvb:1;
277 unsigned int valid:1;
278
279 unsigned char xclk, i2c_speed;
280
281 enum cx231xx_decoder decoder;
282
283 struct cx231xx_input input[MAX_CX231XX_INPUT];
284 struct cx231xx_input radio;
285 IR_KEYTAB_TYPE *ir_codes;
286};
287
288/* device states */
289enum cx231xx_dev_state {
290 DEV_INITIALIZED = 0x01,
291 DEV_DISCONNECTED = 0x02,
292 DEV_MISCONFIGURED = 0x04,
293};
294
295enum AFE_MODE {
296 AFE_MODE_LOW_IF,
297 AFE_MODE_BASEBAND,
298 AFE_MODE_EU_HI_IF,
299 AFE_MODE_US_HI_IF,
300 AFE_MODE_JAPAN_HI_IF
301};
302
303enum AUDIO_INPUT {
304 AUDIO_INPUT_MUTE,
305 AUDIO_INPUT_LINE,
306 AUDIO_INPUT_TUNER_TV,
307 AUDIO_INPUT_SPDIF,
308 AUDIO_INPUT_TUNER_FM
309};
310
311#define CX231XX_AUDIO_BUFS 5
312#define CX231XX_NUM_AUDIO_PACKETS 64
313#define CX231XX_CAPTURE_STREAM_EN 1
314#define CX231XX_STOP_AUDIO 0
315#define CX231XX_START_AUDIO 1
316
317/* cx231xx extensions */
318#define CX231XX_AUDIO 0x10
319#define CX231XX_DVB 0x20
320
321struct cx231xx_audio {
322 char name[50];
323 char *transfer_buffer[CX231XX_AUDIO_BUFS];
324 struct urb *urb[CX231XX_AUDIO_BUFS];
325 struct usb_device *udev;
326 unsigned int capture_transfer_done;
327 struct snd_pcm_substream *capture_pcm_substream;
328
329 unsigned int hwptr_done_capture;
330 struct snd_card *sndcard;
331
332 int users, shutdown;
333 enum cx231xx_stream_state capture_stream;
334 spinlock_t slock;
335
336 int alt; /* alternate */
337 int max_pkt_size; /* max packet size of isoc transaction */
338 int num_alt; /* Number of alternative settings */
339 unsigned int *alt_max_pkt_size; /* array of wMaxPacketSize */
340 u16 end_point_addr;
341};
342
343struct cx231xx;
344
345struct cx231xx_fh {
346 struct cx231xx *dev;
347 unsigned int stream_on:1; /* Locks streams */
348 int radio;
349
350 struct videobuf_queue vb_vidq;
351
352 enum v4l2_buf_type type;
353};
354
355/*****************************************************************/
356/* set/get i2c */
357/* 00--1Mb/s, 01-400kb/s, 10--100kb/s, 11--5Mb/s */
358#define I2C_SPEED_1M 0x0
359#define I2C_SPEED_400K 0x1
360#define I2C_SPEED_100K 0x2
361#define I2C_SPEED_5M 0x3
362
363/* 0-- STOP transaction */
364#define I2C_STOP 0x0
365/* 1-- do not transmit STOP at end of transaction */
366#define I2C_NOSTOP 0x1
367/* 1--alllow slave to insert clock wait states */
368#define I2C_SYNC 0x1
369
370struct cx231xx_i2c {
371 struct cx231xx *dev;
372
373 int nr;
374
375 /* i2c i/o */
376 struct i2c_adapter i2c_adap;
377 struct i2c_algo_bit_data i2c_algo;
378 struct i2c_client i2c_client;
379 u32 i2c_rc;
380
381 /* different settings for each bus */
382 u8 i2c_period;
383 u8 i2c_nostop;
384 u8 i2c_reserve;
385};
386
387struct cx231xx_i2c_xfer_data {
388 u8 dev_addr;
389 u8 direction; /* 1 - IN, 0 - OUT */
390 u8 saddr_len; /* sub address len */
391 u16 saddr_dat; /* sub addr data */
392 u8 buf_size; /* buffer size */
393 u8 *p_buffer; /* pointer to the buffer */
394};
395
396struct VENDOR_REQUEST_IN {
397 u8 bRequest;
398 u16 wValue;
399 u16 wIndex;
400 u16 wLength;
401 u8 direction;
402 u8 bData;
403 u8 *pBuff;
404};
405
406struct cx231xx_ctrl {
407 struct v4l2_queryctrl v;
408 u32 off;
409 u32 reg;
410 u32 mask;
411 u32 shift;
412};
413
414enum TRANSFER_TYPE {
415 Raw_Video = 0,
416 Audio,
417 Vbi, /* VANC */
418 Sliced_cc, /* HANC */
419 TS1_serial_mode,
420 TS2,
421 TS1_parallel_mode
422} ;
423
424struct cx231xx_video_mode {
425 /* Isoc control struct */
426 struct cx231xx_dmaqueue vidq;
427 struct cx231xx_usb_isoc_ctl isoc_ctl;
428 spinlock_t slock;
429
430 /* usb transfer */
431 int alt; /* alternate */
432 int max_pkt_size; /* max packet size of isoc transaction */
433 int num_alt; /* Number of alternative settings */
434 unsigned int *alt_max_pkt_size; /* array of wMaxPacketSize */
435 u16 end_point_addr;
436};
437
438/* main device struct */
439struct cx231xx {
440 /* generic device properties */
441 char name[30]; /* name (including minor) of the device */
442 int model; /* index in the device_data struct */
443 int devno; /* marks the number of this device */
444
445 struct cx231xx_board board;
446
447 unsigned int stream_on:1; /* Locks streams */
448 unsigned int vbi_stream_on:1; /* Locks streams for VBI */
449 unsigned int has_audio_class:1;
450 unsigned int has_alsa_audio:1;
451
452 struct cx231xx_fmt *format;
453
454 struct v4l2_device v4l2_dev;
455 struct v4l2_subdev *sd_cx25840;
456 struct v4l2_subdev *sd_tuner;
457
458 struct cx231xx_IR *ir;
459
460 struct list_head devlist;
461
462 int tuner_type; /* type of the tuner */
463 int tuner_addr; /* tuner address */
464
465 /* I2C adapters: Master 1 & 2 (External) & Master 3 (Internal only) */
466 struct cx231xx_i2c i2c_bus[3];
467 unsigned int xc_fw_load_done:1;
468 struct mutex gpio_i2c_lock;
469
470 /* video for linux */
471 int users; /* user count for exclusive use */
472 struct video_device *vdev; /* video for linux device struct */
473 v4l2_std_id norm; /* selected tv norm */
474 int ctl_freq; /* selected frequency */
475 unsigned int ctl_ainput; /* selected audio input */
476 int mute;
477 int volume;
478
479 /* frame properties */
480 int width; /* current frame width */
481 int height; /* current frame height */
482 unsigned hscale; /* horizontal scale factor (see datasheet) */
483 unsigned vscale; /* vertical scale factor (see datasheet) */
484 int interlaced; /* 1=interlace fileds, 0=just top fileds */
485
486 struct cx231xx_audio adev;
487
488 /* states */
489 enum cx231xx_dev_state state;
490
491 struct work_struct request_module_wk;
492
493 /* locks */
494 struct mutex lock;
495 struct mutex ctrl_urb_lock; /* protects urb_buf */
496 struct list_head inqueue, outqueue;
497 wait_queue_head_t open, wait_frame, wait_stream;
498 struct video_device *vbi_dev;
499 struct video_device *radio_dev;
500
501 unsigned char eedata[256];
502
503 struct cx231xx_video_mode video_mode;
504 struct cx231xx_video_mode vbi_mode;
505 struct cx231xx_video_mode sliced_cc_mode;
506 struct cx231xx_video_mode ts1_mode;
507
508 struct usb_device *udev; /* the usb device */
509 char urb_buf[URB_MAX_CTRL_SIZE]; /* urb control msg buffer */
510
511 /* helper funcs that call usb_control_msg */
512 int (*cx231xx_read_ctrl_reg) (struct cx231xx *dev, u8 req, u16 reg,
513 char *buf, int len);
514 int (*cx231xx_write_ctrl_reg) (struct cx231xx *dev, u8 req, u16 reg,
515 char *buf, int len);
516 int (*cx231xx_send_usb_command) (struct cx231xx_i2c *i2c_bus,
517 struct cx231xx_i2c_xfer_data *req_data);
518 int (*cx231xx_gpio_i2c_read) (struct cx231xx *dev, u8 dev_addr,
519 u8 *buf, u8 len);
520 int (*cx231xx_gpio_i2c_write) (struct cx231xx *dev, u8 dev_addr,
521 u8 *buf, u8 len);
522
523 int (*cx231xx_set_analog_freq) (struct cx231xx *dev, u32 freq);
524 int (*cx231xx_reset_analog_tuner) (struct cx231xx *dev);
525
526 enum cx231xx_mode mode;
527
528 struct cx231xx_dvb *dvb;
529
530 /* Cx231xx supported PCB config's */
531 struct pcb_config current_pcb_config;
532 u8 current_scenario_idx;
533 u8 interface_count;
534 u8 max_iad_interface_count;
535
536 /* GPIO related register direction and values */
537 u32 gpio_dir;
538 u32 gpio_val;
539
540 /* Power Modes */
541 int power_mode;
542
543 /* afe parameters */
544 enum AFE_MODE afe_mode;
545 u32 afe_ref_count;
546
547 /* video related parameters */
548 u32 video_input;
549 u32 active_mode;
550 u8 vbi_or_sliced_cc_mode; /* 0 - vbi ; 1 - sliced cc mode */
551 enum cx231xx_std_mode std_mode; /* 0 - Air; 1 - cable */
552
553};
554
555#define cx25840_call(cx231xx, o, f, args...) \
556 v4l2_subdev_call(cx231xx->sd_cx25840, o, f, ##args)
557#define tuner_call(cx231xx, o, f, args...) \
558 v4l2_subdev_call(cx231xx->sd_tuner, o, f, ##args)
559#define call_all(dev, o, f, args...) \
560 v4l2_device_call_until_err(&dev->v4l2_dev, 0, o, f, ##args)
561
562struct cx231xx_ops {
563 struct list_head next;
564 char *name;
565 int id;
566 int (*init) (struct cx231xx *);
567 int (*fini) (struct cx231xx *);
568};
569
570/* call back functions in dvb module */
571int cx231xx_set_analog_freq(struct cx231xx *dev, u32 freq);
572int cx231xx_reset_analog_tuner(struct cx231xx *dev);
573
574/* Provided by cx231xx-i2c.c */
575void cx231xx_do_i2c_scan(struct cx231xx *dev, struct i2c_client *c);
576int cx231xx_i2c_register(struct cx231xx_i2c *bus);
577int cx231xx_i2c_unregister(struct cx231xx_i2c *bus);
578
579/* Internal block control functions */
580int cx231xx_read_i2c_data(struct cx231xx *dev, u8 dev_addr,
581 u16 saddr, u8 saddr_len, u32 *data, u8 data_len);
582int cx231xx_write_i2c_data(struct cx231xx *dev, u8 dev_addr,
583 u16 saddr, u8 saddr_len, u32 data, u8 data_len);
584int cx231xx_reg_mask_write(struct cx231xx *dev, u8 dev_addr, u8 size,
585 u16 register_address, u8 bit_start, u8 bit_end,
586 u32 value);
587int cx231xx_read_modify_write_i2c_dword(struct cx231xx *dev, u8 dev_addr,
588 u16 saddr, u32 mask, u32 value);
589u32 cx231xx_set_field(u32 field_mask, u32 data);
590
591/* afe related functions */
592int cx231xx_afe_init_super_block(struct cx231xx *dev, u32 ref_count);
593int cx231xx_afe_init_channels(struct cx231xx *dev);
594int cx231xx_afe_setup_AFE_for_baseband(struct cx231xx *dev);
595int cx231xx_afe_set_input_mux(struct cx231xx *dev, u32 input_mux);
596int cx231xx_afe_set_mode(struct cx231xx *dev, enum AFE_MODE mode);
597int cx231xx_afe_update_power_control(struct cx231xx *dev,
598 enum AV_MODE avmode);
599int cx231xx_afe_adjust_ref_count(struct cx231xx *dev, u32 video_input);
600
601/* i2s block related functions */
602int cx231xx_i2s_blk_initialize(struct cx231xx *dev);
603int cx231xx_i2s_blk_update_power_control(struct cx231xx *dev,
604 enum AV_MODE avmode);
605int cx231xx_i2s_blk_set_audio_input(struct cx231xx *dev, u8 audio_input);
606
607/* DIF related functions */
608int cx231xx_dif_configure_C2HH_for_low_IF(struct cx231xx *dev, u32 mode,
609 u32 function_mode, u32 standard);
610int cx231xx_dif_set_standard(struct cx231xx *dev, u32 standard);
611int cx231xx_tuner_pre_channel_change(struct cx231xx *dev);
612int cx231xx_tuner_post_channel_change(struct cx231xx *dev);
613
614/* video parser functions */
615u8 cx231xx_find_next_SAV_EAV(u8 *p_buffer, u32 buffer_size,
616 u32 *p_bytes_used);
617u8 cx231xx_find_boundary_SAV_EAV(u8 *p_buffer, u8 *partial_buf,
618 u32 *p_bytes_used);
619int cx231xx_do_copy(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
620 u8 *p_buffer, u32 bytes_to_copy);
621void cx231xx_reset_video_buffer(struct cx231xx *dev,
622 struct cx231xx_dmaqueue *dma_q);
623u8 cx231xx_is_buffer_done(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q);
624u32 cx231xx_copy_video_line(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
625 u8 *p_line, u32 length, int field_number);
626u32 cx231xx_get_video_line(struct cx231xx *dev, struct cx231xx_dmaqueue *dma_q,
627 u8 sav_eav, u8 *p_buffer, u32 buffer_size);
628void cx231xx_swab(u16 *from, u16 *to, u16 len);
629
630/* Provided by cx231xx-core.c */
631
632u32 cx231xx_request_buffers(struct cx231xx *dev, u32 count);
633void cx231xx_queue_unusedframes(struct cx231xx *dev);
634void cx231xx_release_buffers(struct cx231xx *dev);
635
636/* read from control pipe */
637int cx231xx_read_ctrl_reg(struct cx231xx *dev, u8 req, u16 reg,
638 char *buf, int len);
639
640/* write to control pipe */
641int cx231xx_write_ctrl_reg(struct cx231xx *dev, u8 req, u16 reg,
642 char *buf, int len);
643int cx231xx_mode_register(struct cx231xx *dev, u16 address, u32 mode);
644
645int cx231xx_send_vendor_cmd(struct cx231xx *dev,
646 struct VENDOR_REQUEST_IN *ven_req);
647int cx231xx_send_usb_command(struct cx231xx_i2c *i2c_bus,
648 struct cx231xx_i2c_xfer_data *req_data);
649
650/* Gpio related functions */
651int cx231xx_send_gpio_cmd(struct cx231xx *dev, u32 gpio_bit, u8 *gpio_val,
652 u8 len, u8 request, u8 direction);
653int cx231xx_set_gpio_bit(struct cx231xx *dev, u32 gpio_bit, u8 *gpio_val);
654int cx231xx_get_gpio_bit(struct cx231xx *dev, u32 gpio_bit, u8 *gpio_val);
655int cx231xx_set_gpio_value(struct cx231xx *dev, int pin_number, int pin_value);
656int cx231xx_set_gpio_direction(struct cx231xx *dev, int pin_number,
657 int pin_value);
658
659int cx231xx_gpio_i2c_start(struct cx231xx *dev);
660int cx231xx_gpio_i2c_end(struct cx231xx *dev);
661int cx231xx_gpio_i2c_write_byte(struct cx231xx *dev, u8 data);
662int cx231xx_gpio_i2c_read_byte(struct cx231xx *dev, u8 *buf);
663int cx231xx_gpio_i2c_read_ack(struct cx231xx *dev);
664int cx231xx_gpio_i2c_write_ack(struct cx231xx *dev);
665int cx231xx_gpio_i2c_write_nak(struct cx231xx *dev);
666
667int cx231xx_gpio_i2c_read(struct cx231xx *dev, u8 dev_addr, u8 *buf, u8 len);
668int cx231xx_gpio_i2c_write(struct cx231xx *dev, u8 dev_addr, u8 *buf, u8 len);
669
670/* audio related functions */
671int cx231xx_set_audio_decoder_input(struct cx231xx *dev,
672 enum AUDIO_INPUT audio_input);
673
674int cx231xx_capture_start(struct cx231xx *dev, int start, u8 media_type);
675int cx231xx_resolution_set(struct cx231xx *dev);
676int cx231xx_set_video_alternate(struct cx231xx *dev);
677int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt);
678int cx231xx_init_isoc(struct cx231xx *dev, int max_packets,
679 int num_bufs, int max_pkt_size,
680 int (*isoc_copy) (struct cx231xx *dev,
681 struct urb *urb));
682void cx231xx_uninit_isoc(struct cx231xx *dev);
683int cx231xx_set_mode(struct cx231xx *dev, enum cx231xx_mode set_mode);
684int cx231xx_gpio_set(struct cx231xx *dev, struct cx231xx_reg_seq *gpio);
685
686/* Device list functions */
687void cx231xx_release_resources(struct cx231xx *dev);
688void cx231xx_release_analog_resources(struct cx231xx *dev);
689int cx231xx_register_analog_devices(struct cx231xx *dev);
690void cx231xx_remove_from_devlist(struct cx231xx *dev);
691void cx231xx_add_into_devlist(struct cx231xx *dev);
692struct cx231xx *cx231xx_get_device(int minor,
693 enum v4l2_buf_type *fh_type, int *has_radio);
694void cx231xx_init_extension(struct cx231xx *dev);
695void cx231xx_close_extension(struct cx231xx *dev);
696
697/* hardware init functions */
698int cx231xx_dev_init(struct cx231xx *dev);
699void cx231xx_dev_uninit(struct cx231xx *dev);
700void cx231xx_config_i2c(struct cx231xx *dev);
701int cx231xx_config(struct cx231xx *dev);
702
703/* Stream control functions */
704int cx231xx_start_stream(struct cx231xx *dev, u32 ep_mask);
705int cx231xx_stop_stream(struct cx231xx *dev, u32 ep_mask);
706
707int cx231xx_initialize_stream_xfer(struct cx231xx *dev, u32 media_type);
708
709/* Power control functions */
710int cx231xx_set_power_mode(struct cx231xx *dev, enum AV_MODE mode);
711int cx231xx_power_suspend(struct cx231xx *dev);
712
713/* chip specific control functions */
714int cx231xx_init_ctrl_pin_status(struct cx231xx *dev);
715int cx231xx_set_agc_analog_digital_mux_select(struct cx231xx *dev,
716 u8 analog_or_digital);
717int cx231xx_enable_i2c_for_tuner(struct cx231xx *dev, u8 I2CIndex);
718
719/* video audio decoder related functions */
720void video_mux(struct cx231xx *dev, int index);
721int cx231xx_set_video_input_mux(struct cx231xx *dev, u8 input);
722int cx231xx_set_decoder_video_input(struct cx231xx *dev, u8 pin_type, u8 input);
723int cx231xx_do_mode_ctrl_overrides(struct cx231xx *dev);
724int cx231xx_set_audio_input(struct cx231xx *dev, u8 input);
725void get_scale(struct cx231xx *dev,
726 unsigned int width, unsigned int height,
727 unsigned int *hscale, unsigned int *vscale);
728
729/* Provided by cx231xx-video.c */
730int cx231xx_register_extension(struct cx231xx_ops *dev);
731void cx231xx_unregister_extension(struct cx231xx_ops *dev);
732void cx231xx_init_extension(struct cx231xx *dev);
733void cx231xx_close_extension(struct cx231xx *dev);
734
735/* Provided by cx231xx-cards.c */
736extern void cx231xx_pre_card_setup(struct cx231xx *dev);
737extern void cx231xx_card_setup(struct cx231xx *dev);
738extern struct cx231xx_board cx231xx_boards[];
739extern struct usb_device_id cx231xx_id_table[];
740extern const unsigned int cx231xx_bcount;
741void cx231xx_set_ir(struct cx231xx *dev, struct IR_i2c *ir);
742int cx231xx_tuner_callback(void *ptr, int component, int command, int arg);
743
744/* Provided by cx231xx-input.c */
745int cx231xx_ir_init(struct cx231xx *dev);
746int cx231xx_ir_fini(struct cx231xx *dev);
747
748/* printk macros */
749
750#define cx231xx_err(fmt, arg...) do {\
751 printk(KERN_ERR fmt , ##arg); } while (0)
752
753#define cx231xx_errdev(fmt, arg...) do {\
754 printk(KERN_ERR "%s: "fmt,\
755 dev->name , ##arg); } while (0)
756
757#define cx231xx_info(fmt, arg...) do {\
758 printk(KERN_INFO "%s: "fmt,\
759 dev->name , ##arg); } while (0)
760#define cx231xx_warn(fmt, arg...) do {\
761 printk(KERN_WARNING "%s: "fmt,\
762 dev->name , ##arg); } while (0)
763
764static inline unsigned int norm_maxw(struct cx231xx *dev)
765{
766 if (dev->board.max_range_640_480)
767 return 640;
768 else
769 return 720;
770}
771
772static inline unsigned int norm_maxh(struct cx231xx *dev)
773{
774 if (dev->board.max_range_640_480)
775 return 480;
776 else
777 return (dev->norm & V4L2_STD_625_50) ? 576 : 480;
778}
779#endif
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
index 5e4b7e790d94..a3c0565be1a9 100644
--- a/drivers/media/video/cx23885/cx23885-cards.c
+++ b/drivers/media/video/cx23885/cx23885-cards.c
@@ -739,9 +739,10 @@ void cx23885_card_setup(struct cx23885_dev *dev)
739 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 739 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
740 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 740 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
741 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 741 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
742 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->i2c_bus[2].i2c_adap, 742 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
743 &dev->i2c_bus[2].i2c_adap,
743 "cx25840", "cx25840", 0x88 >> 1); 744 "cx25840", "cx25840", 0x88 >> 1);
744 v4l2_subdev_call(dev->sd_cx25840, core, init, 0); 745 v4l2_subdev_call(dev->sd_cx25840, core, load_fw);
745 break; 746 break;
746 } 747 }
747 748
diff --git a/drivers/media/video/cx23885/cx23885-core.c b/drivers/media/video/cx23885/cx23885-core.c
index dc7fff22cfdd..beda42925ce7 100644
--- a/drivers/media/video/cx23885/cx23885-core.c
+++ b/drivers/media/video/cx23885/cx23885-core.c
@@ -875,7 +875,7 @@ static int cx23885_dev_setup(struct cx23885_dev *dev)
875 cx23885_i2c_register(&dev->i2c_bus[1]); 875 cx23885_i2c_register(&dev->i2c_bus[1]);
876 cx23885_i2c_register(&dev->i2c_bus[2]); 876 cx23885_i2c_register(&dev->i2c_bus[2]);
877 cx23885_card_setup(dev); 877 cx23885_card_setup(dev);
878 call_all(dev, core, s_standby, 0); 878 call_all(dev, tuner, s_standby);
879 cx23885_ir_init(dev); 879 cx23885_ir_init(dev);
880 880
881 if (cx23885_boards[dev->board].porta == CX23885_ANALOG_VIDEO) { 881 if (cx23885_boards[dev->board].porta == CX23885_ANALOG_VIDEO) {
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index d43c74396767..f48454ab3900 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -673,7 +673,7 @@ static int dvb_register(struct cx23885_tsport *port)
673 fe0->dvb.frontend->callback = cx23885_tuner_callback; 673 fe0->dvb.frontend->callback = cx23885_tuner_callback;
674 674
675 /* Put the analog decoder in standby to keep it quiet */ 675 /* Put the analog decoder in standby to keep it quiet */
676 call_all(dev, core, s_standby, 0); 676 call_all(dev, tuner, s_standby);
677 677
678 if (fe0->dvb.frontend->ops.analog_ops.standby) 678 if (fe0->dvb.frontend->ops.analog_ops.standby)
679 fe0->dvb.frontend->ops.analog_ops.standby(fe0->dvb.frontend); 679 fe0->dvb.frontend->ops.analog_ops.standby(fe0->dvb.frontend);
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c
index f0ac62c5dc83..68068c6d0987 100644
--- a/drivers/media/video/cx23885/cx23885-video.c
+++ b/drivers/media/video/cx23885/cx23885-video.c
@@ -299,7 +299,7 @@ static int cx23885_set_tvnorm(struct cx23885_dev *dev, v4l2_std_id norm)
299 299
300 dev->tvnorm = norm; 300 dev->tvnorm = norm;
301 301
302 call_all(dev, tuner, s_std, norm); 302 call_all(dev, core, s_std, norm);
303 303
304 return 0; 304 return 0;
305} 305}
@@ -393,9 +393,6 @@ static void res_free(struct cx23885_dev *dev, struct cx23885_fh *fh,
393 393
394static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input) 394static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
395{ 395{
396 struct v4l2_routing route;
397 memset(&route, 0, sizeof(route));
398
399 dprintk(1, "%s() video_mux: %d [vmux=%d, gpio=0x%x,0x%x,0x%x,0x%x]\n", 396 dprintk(1, "%s() video_mux: %d [vmux=%d, gpio=0x%x,0x%x,0x%x,0x%x]\n",
400 __func__, 397 __func__,
401 input, INPUT(input)->vmux, 398 input, INPUT(input)->vmux,
@@ -403,10 +400,9 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
403 INPUT(input)->gpio2, INPUT(input)->gpio3); 400 INPUT(input)->gpio2, INPUT(input)->gpio3);
404 dev->input = input; 401 dev->input = input;
405 402
406 route.input = INPUT(input)->vmux;
407
408 /* Tell the internal A/V decoder */ 403 /* Tell the internal A/V decoder */
409 v4l2_subdev_call(dev->sd_cx25840, video, s_routing, &route); 404 v4l2_subdev_call(dev->sd_cx25840, video, s_routing,
405 INPUT(input)->vmux, 0, 0);
410 406
411 return 0; 407 return 0;
412} 408}
@@ -1523,10 +1519,12 @@ int cx23885_video_register(struct cx23885_dev *dev)
1523 struct v4l2_subdev *sd = NULL; 1519 struct v4l2_subdev *sd = NULL;
1524 1520
1525 if (dev->tuner_addr) 1521 if (dev->tuner_addr)
1526 sd = v4l2_i2c_new_subdev(&dev->i2c_bus[1].i2c_adap, 1522 sd = v4l2_i2c_new_subdev(&dev->v4l2_dev,
1523 &dev->i2c_bus[1].i2c_adap,
1527 "tuner", "tuner", dev->tuner_addr); 1524 "tuner", "tuner", dev->tuner_addr);
1528 else 1525 else
1529 sd = v4l2_i2c_new_probed_subdev(&dev->i2c_bus[1].i2c_adap, 1526 sd = v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
1527 &dev->i2c_bus[1].i2c_adap,
1530 "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV)); 1528 "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV));
1531 if (sd) { 1529 if (sd) {
1532 struct tuner_setup tun_setup; 1530 struct tuner_setup tun_setup;
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index 02d980a29962..85642831ea8e 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -37,7 +37,7 @@
37#include <linux/version.h> 37#include <linux/version.h>
38#include <linux/mutex.h> 38#include <linux/mutex.h>
39 39
40#define CX23885_VERSION_CODE KERNEL_VERSION(0, 0, 1) 40#define CX23885_VERSION_CODE KERNEL_VERSION(0, 0, 2)
41 41
42#define UNSET (-1U) 42#define UNSET (-1U)
43 43
diff --git a/drivers/media/video/cx25840/cx25840-audio.c b/drivers/media/video/cx25840/cx25840-audio.c
index 93d74bee292a..2f846f5e0f9f 100644
--- a/drivers/media/video/cx25840/cx25840-audio.c
+++ b/drivers/media/video/cx25840/cx25840-audio.c
@@ -32,7 +32,7 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
32 32
33 /* common for all inputs and rates */ 33 /* common for all inputs and rates */
34 /* SA_MCLK_SEL=1, SA_MCLK_DIV=0x10 */ 34 /* SA_MCLK_SEL=1, SA_MCLK_DIV=0x10 */
35 if (!state->is_cx23885) 35 if (!state->is_cx23885 && !state->is_cx231xx)
36 cx25840_write(client, 0x127, 0x50); 36 cx25840_write(client, 0x127, 0x50);
37 37
38 if (state->aud_input != CX25840_AUDIO_SERIAL) { 38 if (state->aud_input != CX25840_AUDIO_SERIAL) {
@@ -43,11 +43,14 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
43 * so avoid destroying registers. */ 43 * so avoid destroying registers. */
44 break; 44 break;
45 } 45 }
46 /* VID_PLL and AUX_PLL */
47 cx25840_write4(client, 0x108, 0x1006040f);
48 46
49 /* AUX_PLL_FRAC */ 47 if (!state->is_cx231xx) {
50 cx25840_write4(client, 0x110, 0x01bb39ee); 48 /* VID_PLL and AUX_PLL */
49 cx25840_write4(client, 0x108, 0x1006040f);
50
51 /* AUX_PLL_FRAC */
52 cx25840_write4(client, 0x110, 0x01bb39ee);
53 }
51 54
52 if (state->is_cx25836) 55 if (state->is_cx25836)
53 break; 56 break;
@@ -64,11 +67,14 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
64 * so avoid destroying registers. */ 67 * so avoid destroying registers. */
65 break; 68 break;
66 } 69 }
67 /* VID_PLL and AUX_PLL */
68 cx25840_write4(client, 0x108, 0x1009040f);
69 70
70 /* AUX_PLL_FRAC */ 71 if (!state->is_cx231xx) {
71 cx25840_write4(client, 0x110, 0x00ec6bd6); 72 /* VID_PLL and AUX_PLL */
73 cx25840_write4(client, 0x108, 0x1009040f);
74
75 /* AUX_PLL_FRAC */
76 cx25840_write4(client, 0x110, 0x00ec6bd6);
77 }
72 78
73 if (state->is_cx25836) 79 if (state->is_cx25836)
74 break; 80 break;
@@ -85,11 +91,14 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
85 * so avoid destroying registers. */ 91 * so avoid destroying registers. */
86 break; 92 break;
87 } 93 }
88 /* VID_PLL and AUX_PLL */
89 cx25840_write4(client, 0x108, 0x100a040f);
90 94
91 /* AUX_PLL_FRAC */ 95 if (!state->is_cx231xx) {
92 cx25840_write4(client, 0x110, 0x0098d6e5); 96 /* VID_PLL and AUX_PLL */
97 cx25840_write4(client, 0x108, 0x100a040f);
98
99 /* AUX_PLL_FRAC */
100 cx25840_write4(client, 0x110, 0x0098d6e5);
101 }
93 102
94 if (state->is_cx25836) 103 if (state->is_cx25836)
95 break; 104 break;
@@ -108,11 +117,14 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
108 * so avoid destroying registers. */ 117 * so avoid destroying registers. */
109 break; 118 break;
110 } 119 }
111 /* VID_PLL and AUX_PLL */
112 cx25840_write4(client, 0x108, 0x1e08040f);
113 120
114 /* AUX_PLL_FRAC */ 121 if (!state->is_cx231xx) {
115 cx25840_write4(client, 0x110, 0x012a0869); 122 /* VID_PLL and AUX_PLL */
123 cx25840_write4(client, 0x108, 0x1e08040f);
124
125 /* AUX_PLL_FRAC */
126 cx25840_write4(client, 0x110, 0x012a0869);
127 }
116 128
117 if (state->is_cx25836) 129 if (state->is_cx25836)
118 break; 130 break;
@@ -136,11 +148,14 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
136 break; 148 break;
137 } 149 }
138 150
139 /* VID_PLL and AUX_PLL */
140 cx25840_write4(client, 0x108, 0x1809040f);
141 151
142 /* AUX_PLL_FRAC */ 152 if (!state->is_cx231xx) {
143 cx25840_write4(client, 0x110, 0x00ec6bd6); 153 /* VID_PLL and AUX_PLL */
154 cx25840_write4(client, 0x108, 0x1809040f);
155
156 /* AUX_PLL_FRAC */
157 cx25840_write4(client, 0x110, 0x00ec6bd6);
158 }
144 159
145 if (state->is_cx25836) 160 if (state->is_cx25836)
146 break; 161 break;
@@ -155,7 +170,7 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
155 break; 170 break;
156 171
157 case 48000: 172 case 48000:
158 if (!state->is_cx23885) { 173 if (!state->is_cx23885 && !state->is_cx231xx) {
159 /* VID_PLL and AUX_PLL */ 174 /* VID_PLL and AUX_PLL */
160 cx25840_write4(client, 0x108, 0x180a040f); 175 cx25840_write4(client, 0x108, 0x180a040f);
161 176
@@ -166,7 +181,7 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
166 if (state->is_cx25836) 181 if (state->is_cx25836)
167 break; 182 break;
168 183
169 if (!state->is_cx23885) { 184 if (!state->is_cx23885 && !state->is_cx231xx) {
170 /* src1_ctl */ 185 /* src1_ctl */
171 cx25840_write4(client, 0x8f8, 0x08018000); 186 cx25840_write4(client, 0x8f8, 0x08018000);
172 187
@@ -227,10 +242,9 @@ void cx25840_audio_set_path(struct i2c_client *client)
227 /* deassert soft reset */ 242 /* deassert soft reset */
228 cx25840_and_or(client, 0x810, ~0x1, 0x00); 243 cx25840_and_or(client, 0x810, ~0x1, 0x00);
229 244
230 if (state->is_cx23885) { 245 /* Ensure the controller is running when we exit */
231 /* Ensure the controller is running when we exit */ 246 if (state->is_cx23885 || state->is_cx231xx)
232 cx25840_and_or(client, 0x803, ~0x10, 0x10); 247 cx25840_and_or(client, 0x803, ~0x10, 0x10);
233 }
234} 248}
235 249
236static int get_volume(struct i2c_client *client) 250static int get_volume(struct i2c_client *client)
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 737ee4ea8830..0be51b65f098 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -345,6 +345,77 @@ static void cx23885_initialize(struct i2c_client *client)
345 345
346/* ----------------------------------------------------------------------- */ 346/* ----------------------------------------------------------------------- */
347 347
348static void cx231xx_initialize(struct i2c_client *client)
349{
350 DEFINE_WAIT(wait);
351 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
352 struct workqueue_struct *q;
353
354 /* Internal Reset */
355 cx25840_and_or(client, 0x102, ~0x01, 0x01);
356 cx25840_and_or(client, 0x102, ~0x01, 0x00);
357
358 /* Stop microcontroller */
359 cx25840_and_or(client, 0x803, ~0x10, 0x00);
360
361 /* DIF in reset? */
362 cx25840_write(client, 0x398, 0);
363
364 /* Trust the default xtal, no division */
365 /* This changes for the cx23888 products */
366 cx25840_write(client, 0x2, 0x76);
367
368 /* Bring down the regulator for AUX clk */
369 cx25840_write(client, 0x1, 0x40);
370
371 /* Disable DIF bypass */
372 cx25840_write4(client, 0x33c, 0x00000001);
373
374 /* DIF Src phase inc */
375 cx25840_write4(client, 0x340, 0x0df7df83);
376
377 /* Luma */
378 cx25840_write4(client, 0x414, 0x00107d12);
379
380 /* Chroma */
381 cx25840_write4(client, 0x420, 0x3d008282);
382
383 /* ADC2 input select */
384 cx25840_write(client, 0x102, 0x10);
385
386 /* VIN1 & VIN5 */
387 cx25840_write(client, 0x103, 0x11);
388
389 /* Enable format auto detect */
390 cx25840_write(client, 0x400, 0);
391 /* Fast subchroma lock */
392 /* White crush, Chroma AGC & Chroma Killer enabled */
393 cx25840_write(client, 0x401, 0xe8);
394
395 /* Do the firmware load in a work handler to prevent.
396 Otherwise the kernel is blocked waiting for the
397 bit-banging i2c interface to finish uploading the
398 firmware. */
399 INIT_WORK(&state->fw_work, cx25840_work_handler);
400 init_waitqueue_head(&state->fw_wait);
401 q = create_singlethread_workqueue("cx25840_fw");
402 prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
403 queue_work(q, &state->fw_work);
404 schedule();
405 finish_wait(&state->fw_wait, &wait);
406 destroy_workqueue(q);
407
408 cx25840_std_setup(client);
409
410 /* (re)set input */
411 set_input(client, state->vid_input, state->aud_input);
412
413 /* start microcontroller */
414 cx25840_and_or(client, 0x803, ~0x10, 0x10);
415}
416
417/* ----------------------------------------------------------------------- */
418
348void cx25840_std_setup(struct i2c_client *client) 419void cx25840_std_setup(struct i2c_client *client)
349{ 420{
350 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); 421 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
@@ -414,39 +485,41 @@ void cx25840_std_setup(struct i2c_client *client)
414 } 485 }
415 486
416 /* DEBUG: Displays configured PLL frequency */ 487 /* DEBUG: Displays configured PLL frequency */
417 pll_int = cx25840_read(client, 0x108); 488 if (!state->is_cx231xx) {
418 pll_frac = cx25840_read4(client, 0x10c) & 0x1ffffff; 489 pll_int = cx25840_read(client, 0x108);
419 pll_post = cx25840_read(client, 0x109); 490 pll_frac = cx25840_read4(client, 0x10c) & 0x1ffffff;
420 v4l_dbg(1, cx25840_debug, client, 491 pll_post = cx25840_read(client, 0x109);
421 "PLL regs = int: %u, frac: %u, post: %u\n",
422 pll_int, pll_frac, pll_post);
423
424 if (pll_post) {
425 int fin, fsc;
426 int pll = (28636363L * ((((u64)pll_int) << 25L) + pll_frac)) >> 25L;
427
428 pll /= pll_post;
429 v4l_dbg(1, cx25840_debug, client, "PLL = %d.%06d MHz\n",
430 pll / 1000000, pll % 1000000);
431 v4l_dbg(1, cx25840_debug, client, "PLL/8 = %d.%06d MHz\n",
432 pll / 8000000, (pll / 8) % 1000000);
433
434 fin = ((u64)src_decimation * pll) >> 12;
435 v4l_dbg(1, cx25840_debug, client,
436 "ADC Sampling freq = %d.%06d MHz\n",
437 fin / 1000000, fin % 1000000);
438
439 fsc = (((u64)sc) * pll) >> 24L;
440 v4l_dbg(1, cx25840_debug, client, 492 v4l_dbg(1, cx25840_debug, client,
441 "Chroma sub-carrier freq = %d.%06d MHz\n", 493 "PLL regs = int: %u, frac: %u, post: %u\n",
442 fsc / 1000000, fsc % 1000000); 494 pll_int, pll_frac, pll_post);
443 495
444 v4l_dbg(1, cx25840_debug, client, "hblank %i, hactive %i, " 496 if (pll_post) {
445 "vblank %i, vactive %i, vblank656 %i, src_dec %i, " 497 int fin, fsc;
446 "burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, " 498 int pll = (28636363L * ((((u64)pll_int) << 25L) + pll_frac)) >> 25L;
447 "sc 0x%06x\n", 499
448 hblank, hactive, vblank, vactive, vblank656, 500 pll /= pll_post;
449 src_decimation, burst, luma_lpf, uv_lpf, comb, sc); 501 v4l_dbg(1, cx25840_debug, client, "PLL = %d.%06d MHz\n",
502 pll / 1000000, pll % 1000000);
503 v4l_dbg(1, cx25840_debug, client, "PLL/8 = %d.%06d MHz\n",
504 pll / 8000000, (pll / 8) % 1000000);
505
506 fin = ((u64)src_decimation * pll) >> 12;
507 v4l_dbg(1, cx25840_debug, client,
508 "ADC Sampling freq = %d.%06d MHz\n",
509 fin / 1000000, fin % 1000000);
510
511 fsc = (((u64)sc) * pll) >> 24L;
512 v4l_dbg(1, cx25840_debug, client,
513 "Chroma sub-carrier freq = %d.%06d MHz\n",
514 fsc / 1000000, fsc % 1000000);
515
516 v4l_dbg(1, cx25840_debug, client, "hblank %i, hactive %i, "
517 "vblank %i, vactive %i, vblank656 %i, src_dec %i, "
518 "burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
519 "sc 0x%06x\n",
520 hblank, hactive, vblank, vactive, vblank656,
521 src_decimation, burst, luma_lpf, uv_lpf, comb, sc);
522 }
450 } 523 }
451 524
452 /* Sets horizontal blanking delay and active lines */ 525 /* Sets horizontal blanking delay and active lines */
@@ -596,7 +669,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
596 * configuration in reg (for the cx23885) so we have no 669 * configuration in reg (for the cx23885) so we have no
597 * need to attempt to flip bits for earlier av decoders. 670 * need to attempt to flip bits for earlier av decoders.
598 */ 671 */
599 if (!state->is_cx23885) { 672 if (!state->is_cx23885 && !state->is_cx231xx) {
600 switch (aud_input) { 673 switch (aud_input) {
601 case CX25840_AUDIO_SERIAL: 674 case CX25840_AUDIO_SERIAL:
602 /* do nothing, use serial audio input */ 675 /* do nothing, use serial audio input */
@@ -619,7 +692,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
619 /* Set INPUT_MODE to Composite (0) or S-Video (1) */ 692 /* Set INPUT_MODE to Composite (0) or S-Video (1) */
620 cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02); 693 cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02);
621 694
622 if (!state->is_cx23885) { 695 if (!state->is_cx23885 && !state->is_cx231xx) {
623 /* Set CH_SEL_ADC2 to 1 if input comes from CH3 */ 696 /* Set CH_SEL_ADC2 to 1 if input comes from CH3 */
624 cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0); 697 cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0);
625 /* Set DUAL_MODE_ADC2 to 1 if input comes from both CH2&CH3 */ 698 /* Set DUAL_MODE_ADC2 to 1 if input comes from both CH2&CH3 */
@@ -659,6 +732,19 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
659 */ 732 */
660 cx25840_write(client, 0x918, 0xa0); 733 cx25840_write(client, 0x918, 0xa0);
661 cx25840_write(client, 0x919, 0x01); 734 cx25840_write(client, 0x919, 0x01);
735 } else if (state->is_cx231xx) {
736 /* Audio channel 1 src : Parallel 1 */
737 cx25840_write(client, 0x124, 0x03);
738
739 /* I2S_IN_CTL: I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1 */
740 cx25840_write(client, 0x914, 0xa0);
741
742 /* I2S_OUT_CTL:
743 * I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1
744 * I2S_OUT_MASTER_MODE = Master
745 */
746 cx25840_write(client, 0x918, 0xa0);
747 cx25840_write(client, 0x919, 0x01);
662 } 748 }
663 749
664 return 0; 750 return 0;
@@ -1096,7 +1182,7 @@ static void log_audio_status(struct i2c_client *client)
1096 1182
1097/* ----------------------------------------------------------------------- */ 1183/* ----------------------------------------------------------------------- */
1098 1184
1099/* This init operation must be called to load the driver's firmware. 1185/* This load_fw operation must be called to load the driver's firmware.
1100 Without this the audio standard detection will fail and you will 1186 Without this the audio standard detection will fail and you will
1101 only get mono. 1187 only get mono.
1102 1188
@@ -1106,18 +1192,20 @@ static void log_audio_status(struct i2c_client *client)
1106 postponing it is that loading this firmware takes a long time (seconds) 1192 postponing it is that loading this firmware takes a long time (seconds)
1107 due to the slow i2c bus speed. So it will speed up the boot process if 1193 due to the slow i2c bus speed. So it will speed up the boot process if
1108 you can avoid loading the fw as long as the video device isn't used. */ 1194 you can avoid loading the fw as long as the video device isn't used. */
1109static int cx25840_init(struct v4l2_subdev *sd, u32 val) 1195static int cx25840_load_fw(struct v4l2_subdev *sd)
1110{ 1196{
1111 struct cx25840_state *state = to_state(sd); 1197 struct cx25840_state *state = to_state(sd);
1112 struct i2c_client *client = v4l2_get_subdevdata(sd); 1198 struct i2c_client *client = v4l2_get_subdevdata(sd);
1113 1199
1114 if (!state->is_initialized) { 1200 if (!state->is_initialized) {
1115 /* initialize on first use */ 1201 /* initialize and load firmware */
1116 state->is_initialized = 1; 1202 state->is_initialized = 1;
1117 if (state->is_cx25836) 1203 if (state->is_cx25836)
1118 cx25836_initialize(client); 1204 cx25836_initialize(client);
1119 else if (state->is_cx23885) 1205 else if (state->is_cx23885)
1120 cx23885_initialize(client); 1206 cx23885_initialize(client);
1207 else if (state->is_cx231xx)
1208 cx231xx_initialize(client);
1121 else 1209 else
1122 cx25840_initialize(client); 1210 cx25840_initialize(client);
1123 } 1211 }
@@ -1159,7 +1247,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
1159 v4l_dbg(1, cx25840_debug, client, "%s output\n", 1247 v4l_dbg(1, cx25840_debug, client, "%s output\n",
1160 enable ? "enable" : "disable"); 1248 enable ? "enable" : "disable");
1161 if (enable) { 1249 if (enable) {
1162 if (state->is_cx23885) { 1250 if (state->is_cx23885 || state->is_cx231xx) {
1163 u8 v = (cx25840_read(client, 0x421) | 0x0b); 1251 u8 v = (cx25840_read(client, 0x421) | 0x0b);
1164 cx25840_write(client, 0x421, v); 1252 cx25840_write(client, 0x421, v);
1165 } else { 1253 } else {
@@ -1169,7 +1257,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
1169 state->is_cx25836 ? 0x04 : 0x07); 1257 state->is_cx25836 ? 0x04 : 0x07);
1170 } 1258 }
1171 } else { 1259 } else {
1172 if (state->is_cx23885) { 1260 if (state->is_cx23885 || state->is_cx231xx) {
1173 u8 v = cx25840_read(client, 0x421) & ~(0x0b); 1261 u8 v = cx25840_read(client, 0x421) & ~(0x0b);
1174 cx25840_write(client, 0x421, v); 1262 cx25840_write(client, 0x421, v);
1175 } else { 1263 } else {
@@ -1234,22 +1322,24 @@ static int cx25840_s_radio(struct v4l2_subdev *sd)
1234 return 0; 1322 return 0;
1235} 1323}
1236 1324
1237static int cx25840_s_video_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 1325static int cx25840_s_video_routing(struct v4l2_subdev *sd,
1326 u32 input, u32 output, u32 config)
1238{ 1327{
1239 struct cx25840_state *state = to_state(sd); 1328 struct cx25840_state *state = to_state(sd);
1240 struct i2c_client *client = v4l2_get_subdevdata(sd); 1329 struct i2c_client *client = v4l2_get_subdevdata(sd);
1241 1330
1242 return set_input(client, route->input, state->aud_input); 1331 return set_input(client, input, state->aud_input);
1243} 1332}
1244 1333
1245static int cx25840_s_audio_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 1334static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
1335 u32 input, u32 output, u32 config)
1246{ 1336{
1247 struct cx25840_state *state = to_state(sd); 1337 struct cx25840_state *state = to_state(sd);
1248 struct i2c_client *client = v4l2_get_subdevdata(sd); 1338 struct i2c_client *client = v4l2_get_subdevdata(sd);
1249 1339
1250 if (state->is_cx25836) 1340 if (state->is_cx25836)
1251 return -EINVAL; 1341 return -EINVAL;
1252 return set_input(client, state->vid_input, route->input); 1342 return set_input(client, state->vid_input, input);
1253} 1343}
1254 1344
1255static int cx25840_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *freq) 1345static int cx25840_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *freq)
@@ -1350,6 +1440,8 @@ static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
1350 cx25836_initialize(client); 1440 cx25836_initialize(client);
1351 else if (state->is_cx23885) 1441 else if (state->is_cx23885)
1352 cx23885_initialize(client); 1442 cx23885_initialize(client);
1443 else if (state->is_cx231xx)
1444 cx231xx_initialize(client);
1353 else 1445 else
1354 cx25840_initialize(client); 1446 cx25840_initialize(client);
1355 return 0; 1447 return 0;
@@ -1382,8 +1474,9 @@ static const struct v4l2_subdev_core_ops cx25840_core_ops = {
1382 .g_ctrl = cx25840_g_ctrl, 1474 .g_ctrl = cx25840_g_ctrl,
1383 .s_ctrl = cx25840_s_ctrl, 1475 .s_ctrl = cx25840_s_ctrl,
1384 .queryctrl = cx25840_queryctrl, 1476 .queryctrl = cx25840_queryctrl,
1477 .s_std = cx25840_s_std,
1385 .reset = cx25840_reset, 1478 .reset = cx25840_reset,
1386 .init = cx25840_init, 1479 .load_fw = cx25840_load_fw,
1387#ifdef CONFIG_VIDEO_ADV_DEBUG 1480#ifdef CONFIG_VIDEO_ADV_DEBUG
1388 .g_register = cx25840_g_register, 1481 .g_register = cx25840_g_register,
1389 .s_register = cx25840_s_register, 1482 .s_register = cx25840_s_register,
@@ -1392,7 +1485,6 @@ static const struct v4l2_subdev_core_ops cx25840_core_ops = {
1392 1485
1393static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops = { 1486static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops = {
1394 .s_frequency = cx25840_s_frequency, 1487 .s_frequency = cx25840_s_frequency,
1395 .s_std = cx25840_s_std,
1396 .s_radio = cx25840_s_radio, 1488 .s_radio = cx25840_s_radio,
1397 .g_tuner = cx25840_g_tuner, 1489 .g_tuner = cx25840_g_tuner,
1398 .s_tuner = cx25840_s_tuner, 1490 .s_tuner = cx25840_s_tuner,
@@ -1449,6 +1541,8 @@ static int cx25840_probe(struct i2c_client *client,
1449 id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6; 1541 id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6;
1450 } else if (device_id == 0x1313) { 1542 } else if (device_id == 0x1313) {
1451 id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6; 1543 id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6;
1544 } else if ((device_id & 0xfff0) == 0x5A30) {
1545 id = V4L2_IDENT_CX25840 + ((device_id >> 4) & 0xf);
1452 } 1546 }
1453 else { 1547 else {
1454 v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n"); 1548 v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
@@ -1471,6 +1565,7 @@ static int cx25840_probe(struct i2c_client *client,
1471 state->c = client; 1565 state->c = client;
1472 state->is_cx25836 = ((device_id & 0xff00) == 0x8300); 1566 state->is_cx25836 = ((device_id & 0xff00) == 0x8300);
1473 state->is_cx23885 = (device_id == 0x0000) || (device_id == 0x1313); 1567 state->is_cx23885 = (device_id == 0x0000) || (device_id == 0x1313);
1568 state->is_cx231xx = (device_id == 0x5a3e);
1474 state->vid_input = CX25840_COMPOSITE7; 1569 state->vid_input = CX25840_COMPOSITE7;
1475 state->aud_input = CX25840_AUDIO8; 1570 state->aud_input = CX25840_AUDIO8;
1476 state->audclk_freq = 48000; 1571 state->audclk_freq = 48000;
diff --git a/drivers/media/video/cx25840/cx25840-core.h b/drivers/media/video/cx25840/cx25840-core.h
index 9ad0eb86ecfd..814b56536994 100644
--- a/drivers/media/video/cx25840/cx25840-core.h
+++ b/drivers/media/video/cx25840/cx25840-core.h
@@ -50,6 +50,7 @@ struct cx25840_state {
50 u32 rev; 50 u32 rev;
51 int is_cx25836; 51 int is_cx25836;
52 int is_cx23885; 52 int is_cx23885;
53 int is_cx231xx;
53 int is_initialized; 54 int is_initialized;
54 wait_queue_head_t fw_wait; /* wake up when the fw load is finished */ 55 wait_queue_head_t fw_wait; /* wake up when the fw load is finished */
55 struct work_struct fw_work; /* work entry for fw load */ 56 struct work_struct fw_work; /* work entry for fw load */
diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
index 0b2dceb74108..0df53b0d75d9 100644
--- a/drivers/media/video/cx25840/cx25840-firmware.c
+++ b/drivers/media/video/cx25840/cx25840-firmware.c
@@ -25,6 +25,7 @@
25 25
26#define FWFILE "v4l-cx25840.fw" 26#define FWFILE "v4l-cx25840.fw"
27#define FWFILE_CX23885 "v4l-cx23885-avcore-01.fw" 27#define FWFILE_CX23885 "v4l-cx23885-avcore-01.fw"
28#define FWFILE_CX231XX "v4l-cx231xx-avcore-01.fw"
28 29
29/* 30/*
30 * Mike Isely <isely@pobox.com> - The FWSEND parameter controls the 31 * Mike Isely <isely@pobox.com> - The FWSEND parameter controls the
@@ -96,9 +97,17 @@ int cx25840_loadfw(struct i2c_client *client)
96 u8 buffer[FWSEND]; 97 u8 buffer[FWSEND];
97 const u8 *ptr; 98 const u8 *ptr;
98 int size, retval; 99 int size, retval;
100 int MAX_BUF_SIZE = FWSEND;
99 101
100 if (state->is_cx23885) 102 if (state->is_cx23885)
101 firmware = FWFILE_CX23885; 103 firmware = FWFILE_CX23885;
104 else if (state->is_cx231xx)
105 firmware = FWFILE_CX231XX;
106
107 if ((state->is_cx231xx) && MAX_BUF_SIZE > 16) {
108 v4l_err(client, " Firmware download size changed to 16 bytes max length\n");
109 MAX_BUF_SIZE = 16; /* cx231xx cannot accept more than 16 bytes at a time */
110 }
102 111
103 if (request_firmware(&fw, firmware, FWDEV(client)) != 0) { 112 if (request_firmware(&fw, firmware, FWDEV(client)) != 0) {
104 v4l_err(client, "unable to open firmware %s\n", firmware); 113 v4l_err(client, "unable to open firmware %s\n", firmware);
@@ -113,7 +122,7 @@ int cx25840_loadfw(struct i2c_client *client)
113 size = fw->size; 122 size = fw->size;
114 ptr = fw->data; 123 ptr = fw->data;
115 while (size > 0) { 124 while (size > 0) {
116 int len = min(FWSEND - 2, size); 125 int len = min(MAX_BUF_SIZE - 2, size);
117 126
118 memcpy(buffer + 2, ptr, len); 127 memcpy(buffer + 2, ptr, len);
119 128
diff --git a/drivers/media/video/cx88/cx88-alsa.c b/drivers/media/video/cx88/cx88-alsa.c
index ce98d955231a..0ccdf36626e3 100644
--- a/drivers/media/video/cx88/cx88-alsa.c
+++ b/drivers/media/video/cx88/cx88-alsa.c
@@ -745,7 +745,7 @@ static int __devinit snd_cx88_create(struct snd_card *card,
745 return err; 745 return err;
746 } 746 }
747 747
748 if (!pci_dma_supported(pci,DMA_32BIT_MASK)) { 748 if (!pci_dma_supported(pci,DMA_BIT_MASK(32))) {
749 dprintk(0, "%s/1: Oops: no 32bit PCI DMA ???\n",core->name); 749 dprintk(0, "%s/1: Oops: no 32bit PCI DMA ???\n",core->name);
750 err = -EIO; 750 err = -EIO;
751 cx88_core_put(core,pci); 751 cx88_core_put(core,pci);
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 0363971a23a8..6bbbfc66bb4b 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -3049,7 +3049,7 @@ static void cx88_card_setup(struct cx88_core *core)
3049 ctl.fname); 3049 ctl.fname);
3050 call_all(core, tuner, s_config, &xc2028_cfg); 3050 call_all(core, tuner, s_config, &xc2028_cfg);
3051 } 3051 }
3052 call_all(core, core, s_standby, 0); 3052 call_all(core, tuner, s_standby);
3053} 3053}
3054 3054
3055/* ------------------------------------------------------------------ */ 3055/* ------------------------------------------------------------------ */
@@ -3221,16 +3221,19 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
3221 The radio_type is sometimes missing, or set to UNSET but 3221 The radio_type is sometimes missing, or set to UNSET but
3222 later code configures a tea5767. 3222 later code configures a tea5767.
3223 */ 3223 */
3224 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner", "tuner", 3224 v4l2_i2c_new_probed_subdev(&core->v4l2_dev, &core->i2c_adap,
3225 "tuner", "tuner",
3225 v4l2_i2c_tuner_addrs(ADDRS_RADIO)); 3226 v4l2_i2c_tuner_addrs(ADDRS_RADIO));
3226 if (has_demod) 3227 if (has_demod)
3227 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner", 3228 v4l2_i2c_new_probed_subdev(&core->v4l2_dev,
3228 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 3229 &core->i2c_adap, "tuner", "tuner",
3230 v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
3229 if (core->board.tuner_addr == ADDR_UNSET) { 3231 if (core->board.tuner_addr == ADDR_UNSET) {
3230 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner", 3232 v4l2_i2c_new_probed_subdev(&core->v4l2_dev,
3231 "tuner", has_demod ? tv_addrs + 4 : tv_addrs); 3233 &core->i2c_adap, "tuner", "tuner",
3234 has_demod ? tv_addrs + 4 : tv_addrs);
3232 } else { 3235 } else {
3233 v4l2_i2c_new_subdev(&core->i2c_adap, 3236 v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap,
3234 "tuner", "tuner", core->board.tuner_addr); 3237 "tuner", "tuner", core->board.tuner_addr);
3235 } 3238 }
3236 } 3239 }
diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c
index f2fb9f30bfc1..0e149b22bd19 100644
--- a/drivers/media/video/cx88/cx88-core.c
+++ b/drivers/media/video/cx88/cx88-core.c
@@ -991,7 +991,7 @@ int cx88_set_tvnorm(struct cx88_core *core, v4l2_std_id norm)
991 set_tvaudio(core); 991 set_tvaudio(core);
992 992
993 // tell i2c chips 993 // tell i2c chips
994 call_all(core, tuner, s_std, norm); 994 call_all(core, core, s_std, norm);
995 995
996 // done 996 // done
997 return 0; 997 return 0;
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index 4ff4d9fe0355..9389cf290c1b 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -1168,7 +1168,7 @@ static int dvb_register(struct cx8802_dev *dev)
1168 fe1->dvb.frontend->ops.ts_bus_ctrl = cx88_dvb_bus_ctrl; 1168 fe1->dvb.frontend->ops.ts_bus_ctrl = cx88_dvb_bus_ctrl;
1169 1169
1170 /* Put the analog decoder in standby to keep it quiet */ 1170 /* Put the analog decoder in standby to keep it quiet */
1171 call_all(core, core, s_standby, 0); 1171 call_all(core, tuner, s_standby);
1172 1172
1173 /* register everything */ 1173 /* register everything */
1174 return videobuf_dvb_register_bus(&dev->frontends, THIS_MODULE, dev, 1174 return videobuf_dvb_register_bus(&dev->frontends, THIS_MODULE, dev,
diff --git a/drivers/media/video/cx88/cx88-mpeg.c b/drivers/media/video/cx88/cx88-mpeg.c
index b295b76737e3..da4e3912cd37 100644
--- a/drivers/media/video/cx88/cx88-mpeg.c
+++ b/drivers/media/video/cx88/cx88-mpeg.c
@@ -455,7 +455,7 @@ static int cx8802_init_common(struct cx8802_dev *dev)
455 if (pci_enable_device(dev->pci)) 455 if (pci_enable_device(dev->pci))
456 return -EIO; 456 return -EIO;
457 pci_set_master(dev->pci); 457 pci_set_master(dev->pci);
458 if (!pci_dma_supported(dev->pci,DMA_32BIT_MASK)) { 458 if (!pci_dma_supported(dev->pci,DMA_BIT_MASK(32))) {
459 printk("%s/2: Oops: no 32bit PCI DMA ???\n",dev->core->name); 459 printk("%s/2: Oops: no 32bit PCI DMA ???\n",dev->core->name);
460 return -EIO; 460 return -EIO;
461 } 461 }
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c
index 434237af5184..b993d42fe73c 100644
--- a/drivers/media/video/cx88/cx88-video.c
+++ b/drivers/media/video/cx88/cx88-video.c
@@ -428,10 +428,8 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input)
428 routes for different inputs. HVR-1300 surely does */ 428 routes for different inputs. HVR-1300 surely does */
429 if (core->board.audio_chip && 429 if (core->board.audio_chip &&
430 core->board.audio_chip == V4L2_IDENT_WM8775) { 430 core->board.audio_chip == V4L2_IDENT_WM8775) {
431 struct v4l2_routing route; 431 call_all(core, audio, s_routing,
432 432 INPUT(input).audioroute, 0, 0);
433 route.input = INPUT(input).audioroute;
434 call_all(core, audio, s_routing, &route);
435 } 433 }
436 /* cx2388's C-ADC is connected to the tuner only. 434 /* cx2388's C-ADC is connected to the tuner only.
437 When used with S-Video, that ADC is busy dealing with 435 When used with S-Video, that ADC is busy dealing with
@@ -823,10 +821,8 @@ static int video_open(struct file *file)
823 if (core->board.radio.audioroute) { 821 if (core->board.radio.audioroute) {
824 if(core->board.audio_chip && 822 if(core->board.audio_chip &&
825 core->board.audio_chip == V4L2_IDENT_WM8775) { 823 core->board.audio_chip == V4L2_IDENT_WM8775) {
826 struct v4l2_routing route; 824 call_all(core, audio, s_routing,
827 825 core->board.radio.audioroute, 0, 0);
828 route.input = core->board.radio.audioroute;
829 call_all(core, audio, s_routing, &route);
830 } 826 }
831 /* "I2S ADC mode" */ 827 /* "I2S ADC mode" */
832 core->tvaudio = WW_I2SADC; 828 core->tvaudio = WW_I2SADC;
@@ -931,7 +927,7 @@ static int video_release(struct file *file)
931 kfree(fh); 927 kfree(fh);
932 928
933 if(atomic_dec_and_test(&dev->core->users)) 929 if(atomic_dec_and_test(&dev->core->users))
934 call_all(dev->core, core, s_standby, 0); 930 call_all(dev->core, tuner, s_standby);
935 931
936 return 0; 932 return 0;
937} 933}
@@ -1836,7 +1832,7 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev,
1836 dev->pci_lat,(unsigned long long)pci_resource_start(pci_dev,0)); 1832 dev->pci_lat,(unsigned long long)pci_resource_start(pci_dev,0));
1837 1833
1838 pci_set_master(pci_dev); 1834 pci_set_master(pci_dev);
1839 if (!pci_dma_supported(pci_dev,DMA_32BIT_MASK)) { 1835 if (!pci_dma_supported(pci_dev,DMA_BIT_MASK(32))) {
1840 printk("%s/0: Oops: no 32bit PCI DMA ???\n",core->name); 1836 printk("%s/0: Oops: no 32bit PCI DMA ???\n",core->name);
1841 err = -EIO; 1837 err = -EIO;
1842 goto fail_core; 1838 goto fail_core;
@@ -1882,18 +1878,15 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev,
1882 /* load and configure helper modules */ 1878 /* load and configure helper modules */
1883 1879
1884 if (core->board.audio_chip == V4L2_IDENT_WM8775) 1880 if (core->board.audio_chip == V4L2_IDENT_WM8775)
1885 v4l2_i2c_new_subdev(&core->i2c_adap, 1881 v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap,
1886 "wm8775", "wm8775", 0x36 >> 1); 1882 "wm8775", "wm8775", 0x36 >> 1);
1887 1883
1888 if (core->board.audio_chip == V4L2_IDENT_TVAUDIO) { 1884 if (core->board.audio_chip == V4L2_IDENT_TVAUDIO) {
1889 /* This probes for a tda9874 as is used on some 1885 /* This probes for a tda9874 as is used on some
1890 Pixelview Ultra boards. */ 1886 Pixelview Ultra boards. */
1891 static const unsigned short i2c_addr[] = { 1887 v4l2_i2c_new_probed_subdev_addr(&core->v4l2_dev,
1892 0xb0 >> 1, I2C_CLIENT_END 1888 &core->i2c_adap,
1893 }; 1889 "tvaudio", "tvaudio", 0xb0 >> 1);
1894
1895 v4l2_i2c_new_probed_subdev(&core->i2c_adap,
1896 "tvaudio", "tvaudio", i2c_addr);
1897 } 1890 }
1898 1891
1899 switch (core->boardnr) { 1892 switch (core->boardnr) {
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 9a43fdf20fae..7724d168fc04 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -41,7 +41,7 @@
41 41
42#include <linux/version.h> 42#include <linux/version.h>
43#include <linux/mutex.h> 43#include <linux/mutex.h>
44#define CX88_VERSION_CODE KERNEL_VERSION(0,0,6) 44#define CX88_VERSION_CODE KERNEL_VERSION(0,0,7)
45 45
46#define UNSET (-1U) 46#define UNSET (-1U)
47 47
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 0f48c0ff5ac3..7c70738479dd 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -31,6 +31,8 @@
31#include <media/msp3400.h> 31#include <media/msp3400.h>
32#include <media/saa7115.h> 32#include <media/saa7115.h>
33#include <media/tvp5150.h> 33#include <media/tvp5150.h>
34#include <media/tvaudio.h>
35#include <media/i2c-addr.h>
34#include <media/tveeprom.h> 36#include <media/tveeprom.h>
35#include <media/v4l2-common.h> 37#include <media/v4l2-common.h>
36#include <media/v4l2-chip-ident.h> 38#include <media/v4l2-chip-ident.h>
@@ -1240,6 +1242,7 @@ struct em28xx_board em28xx_boards[] = {
1240 [EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU] = { 1242 [EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU] = {
1241 .name = "Compro VideoMate ForYou/Stereo", 1243 .name = "Compro VideoMate ForYou/Stereo",
1242 .tuner_type = TUNER_LG_PAL_NEW_TAPC, 1244 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1245 .tvaudio_addr = 0xb0,
1243 .tda9887_conf = TDA9887_PRESENT, 1246 .tda9887_conf = TDA9887_PRESENT,
1244 .decoder = EM28XX_TVP5150, 1247 .decoder = EM28XX_TVP5150,
1245 .adecoder = EM28XX_TVAUDIO, 1248 .adecoder = EM28XX_TVAUDIO,
@@ -1444,6 +1447,24 @@ static struct em28xx_hash_table em28xx_i2c_hash[] = {
1444 {0xc51200e3, EM2820_BOARD_GADMEI_TVR200, TUNER_LG_PAL_NEW_TAPC}, 1447 {0xc51200e3, EM2820_BOARD_GADMEI_TVR200, TUNER_LG_PAL_NEW_TAPC},
1445}; 1448};
1446 1449
1450/* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */
1451static unsigned short saa711x_addrs[] = {
1452 0x4a >> 1, 0x48 >> 1, /* SAA7111, SAA7111A and SAA7113 */
1453 0x42 >> 1, 0x40 >> 1, /* SAA7114, SAA7115 and SAA7118 */
1454 I2C_CLIENT_END };
1455
1456static unsigned short tvp5150_addrs[] = {
1457 0xb8 >> 1,
1458 0xba >> 1,
1459 I2C_CLIENT_END
1460};
1461
1462static unsigned short msp3400_addrs[] = {
1463 0x80 >> 1,
1464 0x88 >> 1,
1465 I2C_CLIENT_END
1466};
1467
1447int em28xx_tuner_callback(void *ptr, int component, int command, int arg) 1468int em28xx_tuner_callback(void *ptr, int component, int command, int arg)
1448{ 1469{
1449 int rc = 0; 1470 int rc = 0;
@@ -1672,31 +1693,55 @@ static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl)
1672 } 1693 }
1673} 1694}
1674 1695
1675static void em28xx_config_tuner(struct em28xx *dev) 1696static void em28xx_tuner_setup(struct em28xx *dev)
1676{ 1697{
1677 struct v4l2_priv_tun_config xc2028_cfg;
1678 struct tuner_setup tun_setup; 1698 struct tuner_setup tun_setup;
1679 struct v4l2_frequency f; 1699 struct v4l2_frequency f;
1680 1700
1681 if (dev->tuner_type == TUNER_ABSENT) 1701 if (dev->tuner_type == TUNER_ABSENT)
1682 return; 1702 return;
1683 1703
1704 memset(&tun_setup, 0, sizeof(tun_setup));
1705
1684 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO; 1706 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
1685 tun_setup.type = dev->tuner_type;
1686 tun_setup.addr = dev->tuner_addr;
1687 tun_setup.tuner_callback = em28xx_tuner_callback; 1707 tun_setup.tuner_callback = em28xx_tuner_callback;
1688 1708
1689 em28xx_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR, &tun_setup); 1709 if (dev->board.radio.type) {
1710 tun_setup.type = dev->board.radio.type;
1711 tun_setup.addr = dev->board.radio_addr;
1712
1713 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_type_addr, &tun_setup);
1714 }
1715
1716 if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type)) {
1717 tun_setup.type = dev->tuner_type;
1718 tun_setup.addr = dev->tuner_addr;
1719
1720 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_type_addr, &tun_setup);
1721 }
1722
1723 if (dev->tda9887_conf) {
1724 struct v4l2_priv_tun_config tda9887_cfg;
1725
1726 tda9887_cfg.tuner = TUNER_TDA9887;
1727 tda9887_cfg.priv = &dev->tda9887_conf;
1728
1729 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_config, &tda9887_cfg);
1730 }
1690 1731
1691 if (dev->tuner_type == TUNER_XC2028) { 1732 if (dev->tuner_type == TUNER_XC2028) {
1733 struct v4l2_priv_tun_config xc2028_cfg;
1692 struct xc2028_ctrl ctl; 1734 struct xc2028_ctrl ctl;
1693 1735
1736 memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
1737 memset(&ctl, 0, sizeof(ctl));
1738
1694 em28xx_setup_xc3028(dev, &ctl); 1739 em28xx_setup_xc3028(dev, &ctl);
1695 1740
1696 xc2028_cfg.tuner = TUNER_XC2028; 1741 xc2028_cfg.tuner = TUNER_XC2028;
1697 xc2028_cfg.priv = &ctl; 1742 xc2028_cfg.priv = &ctl;
1698 1743
1699 em28xx_i2c_call_clients(dev, TUNER_SET_CONFIG, &xc2028_cfg); 1744 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
1700 } 1745 }
1701 1746
1702 /* configure tuner */ 1747 /* configure tuner */
@@ -1704,7 +1749,7 @@ static void em28xx_config_tuner(struct em28xx *dev)
1704 f.type = V4L2_TUNER_ANALOG_TV; 1749 f.type = V4L2_TUNER_ANALOG_TV;
1705 f.frequency = 9076; /* just a magic number */ 1750 f.frequency = 9076; /* just a magic number */
1706 dev->ctl_freq = f.frequency; 1751 dev->ctl_freq = f.frequency;
1707 em28xx_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, &f); 1752 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f);
1708} 1753}
1709 1754
1710static int em28xx_hint_board(struct em28xx *dev) 1755static int em28xx_hint_board(struct em28xx *dev)
@@ -1911,22 +1956,52 @@ void em28xx_card_setup(struct em28xx *dev)
1911 if (tuner >= 0) 1956 if (tuner >= 0)
1912 dev->tuner_type = tuner; 1957 dev->tuner_type = tuner;
1913 1958
1914#ifdef CONFIG_MODULES
1915 /* request some modules */ 1959 /* request some modules */
1916 if (dev->board.has_msp34xx) 1960 if (dev->board.has_msp34xx)
1917 request_module("msp3400"); 1961 v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
1962 "msp3400", "msp3400", msp3400_addrs);
1963
1918 if (dev->board.decoder == EM28XX_SAA711X) 1964 if (dev->board.decoder == EM28XX_SAA711X)
1919 request_module("saa7115"); 1965 v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
1966 "saa7115", "saa7115_auto", saa711x_addrs);
1967
1920 if (dev->board.decoder == EM28XX_TVP5150) 1968 if (dev->board.decoder == EM28XX_TVP5150)
1921 request_module("tvp5150"); 1969 v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
1922 if (dev->board.tuner_type != TUNER_ABSENT) 1970 "tvp5150", "tvp5150", tvp5150_addrs);
1923 request_module("tuner");
1924 if (dev->board.adecoder == EM28XX_TVAUDIO)
1925 request_module("tvaudio");
1926#endif
1927 1971
1928 em28xx_config_tuner(dev); 1972 if (dev->board.adecoder == EM28XX_TVAUDIO)
1973 v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
1974 "tvaudio", "tvaudio", dev->board.tvaudio_addr);
1975
1976 if (dev->board.tuner_type != TUNER_ABSENT) {
1977 int has_demod = (dev->tda9887_conf & TDA9887_PRESENT);
1978
1979 if (dev->board.radio.type)
1980 v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
1981 "tuner", "tuner", dev->board.radio_addr);
1982
1983 if (has_demod)
1984 v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
1985 &dev->i2c_adap, "tuner", "tuner",
1986 v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
1987 if (dev->tuner_addr == 0) {
1988 enum v4l2_i2c_tuner_type type =
1989 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
1990 struct v4l2_subdev *sd;
1991
1992 sd = v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
1993 &dev->i2c_adap, "tuner", "tuner",
1994 v4l2_i2c_tuner_addrs(type));
1995
1996 if (sd)
1997 dev->tuner_addr = v4l2_i2c_subdev_addr(sd);
1998 } else {
1999 v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
2000 "tuner", "tuner", dev->tuner_addr);
2001 }
2002 }
1929 2003
2004 em28xx_tuner_setup(dev);
1930 em28xx_ir_init(dev); 2005 em28xx_ir_init(dev);
1931} 2006}
1932 2007
@@ -1975,6 +2050,9 @@ void em28xx_release_resources(struct em28xx *dev)
1975 em28xx_remove_from_devlist(dev); 2050 em28xx_remove_from_devlist(dev);
1976 2051
1977 em28xx_i2c_unregister(dev); 2052 em28xx_i2c_unregister(dev);
2053
2054 v4l2_device_unregister(&dev->v4l2_dev);
2055
1978 usb_put_dev(dev->udev); 2056 usb_put_dev(dev->udev);
1979 2057
1980 /* Mark device as unused */ 2058 /* Mark device as unused */
@@ -1986,6 +2064,7 @@ void em28xx_release_resources(struct em28xx *dev)
1986 * allocates and inits the device structs, registers i2c bus and v4l device 2064 * allocates and inits the device structs, registers i2c bus and v4l device
1987 */ 2065 */
1988static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev, 2066static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2067 struct usb_interface *interface,
1989 int minor) 2068 int minor)
1990{ 2069{
1991 struct em28xx *dev = *devhandle; 2070 struct em28xx *dev = *devhandle;
@@ -2019,9 +2098,16 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2019 } 2098 }
2020 } 2099 }
2021 2100
2101 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
2102 if (retval < 0) {
2103 em28xx_errdev("Call to v4l2_device_register() failed!\n");
2104 return retval;
2105 }
2106
2022 /* register i2c bus */ 2107 /* register i2c bus */
2023 errCode = em28xx_i2c_register(dev); 2108 errCode = em28xx_i2c_register(dev);
2024 if (errCode < 0) { 2109 if (errCode < 0) {
2110 v4l2_device_unregister(&dev->v4l2_dev);
2025 em28xx_errdev("%s: em28xx_i2c_register - errCode [%d]!\n", 2111 em28xx_errdev("%s: em28xx_i2c_register - errCode [%d]!\n",
2026 __func__, errCode); 2112 __func__, errCode);
2027 return errCode; 2113 return errCode;
@@ -2033,6 +2119,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2033 /* Configure audio */ 2119 /* Configure audio */
2034 errCode = em28xx_audio_setup(dev); 2120 errCode = em28xx_audio_setup(dev);
2035 if (errCode < 0) { 2121 if (errCode < 0) {
2122 v4l2_device_unregister(&dev->v4l2_dev);
2036 em28xx_errdev("%s: Error while setting audio - errCode [%d]!\n", 2123 em28xx_errdev("%s: Error while setting audio - errCode [%d]!\n",
2037 __func__, errCode); 2124 __func__, errCode);
2038 } 2125 }
@@ -2077,7 +2164,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2077 em28xx_init_extension(dev); 2164 em28xx_init_extension(dev);
2078 2165
2079 /* Save some power by putting tuner to sleep */ 2166 /* Save some power by putting tuner to sleep */
2080 em28xx_i2c_call_clients(dev, TUNER_SET_STANDBY, NULL); 2167 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_standby);
2081 2168
2082 return 0; 2169 return 0;
2083 2170
@@ -2096,7 +2183,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2096 struct usb_device *udev; 2183 struct usb_device *udev;
2097 struct usb_interface *uif; 2184 struct usb_interface *uif;
2098 struct em28xx *dev = NULL; 2185 struct em28xx *dev = NULL;
2099 int retval = -ENODEV; 2186 int retval;
2100 int i, nr, ifnum, isoc_pipe; 2187 int i, nr, ifnum, isoc_pipe;
2101 char *speed; 2188 char *speed;
2102 char descr[255] = ""; 2189 char descr[255] = "";
@@ -2118,7 +2205,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2118 interface->altsetting[0].desc.bInterfaceClass); 2205 interface->altsetting[0].desc.bInterfaceClass);
2119 2206
2120 em28xx_devused &= ~(1<<nr); 2207 em28xx_devused &= ~(1<<nr);
2121 return -ENODEV; 2208 retval = -ENODEV;
2209 goto err;
2122 } 2210 }
2123 2211
2124 endpoint = &interface->cur_altsetting->endpoint[0].desc; 2212 endpoint = &interface->cur_altsetting->endpoint[0].desc;
@@ -2151,7 +2239,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2151 "interface not used by the driver\n"); 2239 "interface not used by the driver\n");
2152 2240
2153 em28xx_devused &= ~(1<<nr); 2241 em28xx_devused &= ~(1<<nr);
2154 return -ENODEV; 2242 retval = -ENODEV;
2243 goto err;
2155 } 2244 }
2156 } 2245 }
2157 2246
@@ -2194,7 +2283,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2194 printk(DRIVER_NAME ": Supports only %i em28xx boards.\n", 2283 printk(DRIVER_NAME ": Supports only %i em28xx boards.\n",
2195 EM28XX_MAXBOARDS); 2284 EM28XX_MAXBOARDS);
2196 em28xx_devused &= ~(1<<nr); 2285 em28xx_devused &= ~(1<<nr);
2197 return -ENOMEM; 2286 retval = -ENOMEM;
2287 goto err;
2198 } 2288 }
2199 2289
2200 /* allocate memory for our device state and initialize it */ 2290 /* allocate memory for our device state and initialize it */
@@ -2202,7 +2292,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2202 if (dev == NULL) { 2292 if (dev == NULL) {
2203 em28xx_err(DRIVER_NAME ": out of memory!\n"); 2293 em28xx_err(DRIVER_NAME ": out of memory!\n");
2204 em28xx_devused &= ~(1<<nr); 2294 em28xx_devused &= ~(1<<nr);
2205 return -ENOMEM; 2295 retval = -ENOMEM;
2296 goto err;
2206 } 2297 }
2207 2298
2208 snprintf(dev->name, 29, "em28xx #%d", nr); 2299 snprintf(dev->name, 29, "em28xx #%d", nr);
@@ -2229,7 +2320,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2229 em28xx_errdev("out of memory!\n"); 2320 em28xx_errdev("out of memory!\n");
2230 em28xx_devused &= ~(1<<nr); 2321 em28xx_devused &= ~(1<<nr);
2231 kfree(dev); 2322 kfree(dev);
2232 return -ENOMEM; 2323 retval = -ENOMEM;
2324 goto err;
2233 } 2325 }
2234 2326
2235 for (i = 0; i < dev->num_alt ; i++) { 2327 for (i = 0; i < dev->num_alt ; i++) {
@@ -2244,12 +2336,11 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2244 /* allocate device struct */ 2336 /* allocate device struct */
2245 mutex_init(&dev->lock); 2337 mutex_init(&dev->lock);
2246 mutex_lock(&dev->lock); 2338 mutex_lock(&dev->lock);
2247 retval = em28xx_init_dev(&dev, udev, nr); 2339 retval = em28xx_init_dev(&dev, udev, interface, nr);
2248 if (retval) { 2340 if (retval) {
2249 em28xx_devused &= ~(1<<dev->devno); 2341 em28xx_devused &= ~(1<<dev->devno);
2250 kfree(dev); 2342 kfree(dev);
2251 2343 goto err;
2252 return retval;
2253 } 2344 }
2254 2345
2255 /* save our data pointer in this interface device */ 2346 /* save our data pointer in this interface device */
@@ -2263,6 +2354,9 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2263 mutex_unlock(&dev->lock); 2354 mutex_unlock(&dev->lock);
2264 2355
2265 return 0; 2356 return 0;
2357
2358err:
2359 return retval;
2266} 2360}
2267 2361
2268/* 2362/*
@@ -2288,6 +2382,8 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
2288 2382
2289 wake_up_interruptible_all(&dev->open); 2383 wake_up_interruptible_all(&dev->open);
2290 2384
2385 v4l2_device_disconnect(&dev->v4l2_dev);
2386
2291 if (dev->users) { 2387 if (dev->users) {
2292 em28xx_warn 2388 em28xx_warn
2293 ("device /dev/video%d is open! Deregistration and memory " 2389 ("device /dev/video%d is open! Deregistration and memory "
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
index 8f1999ca4803..192b76cdd5d7 100644
--- a/drivers/media/video/em28xx/em28xx-core.c
+++ b/drivers/media/video/em28xx/em28xx-core.c
@@ -1018,14 +1018,10 @@ EXPORT_SYMBOL_GPL(em28xx_init_isoc);
1018 */ 1018 */
1019void em28xx_wake_i2c(struct em28xx *dev) 1019void em28xx_wake_i2c(struct em28xx *dev)
1020{ 1020{
1021 struct v4l2_routing route; 1021 v4l2_device_call_all(&dev->v4l2_dev, 0, core, reset, 0);
1022 int zero = 0; 1022 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1023 1023 INPUT(dev->ctl_input)->vmux, 0, 0);
1024 route.input = INPUT(dev->ctl_input)->vmux; 1024 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
1025 route.output = 0;
1026 em28xx_i2c_call_clients(dev, VIDIOC_INT_RESET, &zero);
1027 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route);
1028 em28xx_i2c_call_clients(dev, VIDIOC_STREAMON, NULL);
1029} 1025}
1030 1026
1031/* 1027/*
diff --git a/drivers/media/video/em28xx/em28xx-i2c.c b/drivers/media/video/em28xx/em28xx-i2c.c
index 02c12fe6361b..f0bf1d960c75 100644
--- a/drivers/media/video/em28xx/em28xx-i2c.c
+++ b/drivers/media/video/em28xx/em28xx-i2c.c
@@ -459,70 +459,15 @@ static u32 functionality(struct i2c_adapter *adap)
459static int attach_inform(struct i2c_client *client) 459static int attach_inform(struct i2c_client *client)
460{ 460{
461 struct em28xx *dev = client->adapter->algo_data; 461 struct em28xx *dev = client->adapter->algo_data;
462 struct IR_i2c *ir = i2c_get_clientdata(client);
462 463
463 switch (client->addr << 1) { 464 switch (client->addr << 1) {
464 case 0x86:
465 case 0x84:
466 case 0x96:
467 case 0x94:
468 {
469 struct v4l2_priv_tun_config tda9887_cfg;
470
471 struct tuner_setup tun_setup;
472
473 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
474 tun_setup.type = TUNER_TDA9887;
475 tun_setup.addr = client->addr;
476
477 em28xx_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR,
478 &tun_setup);
479
480 tda9887_cfg.tuner = TUNER_TDA9887;
481 tda9887_cfg.priv = &dev->tda9887_conf;
482 em28xx_i2c_call_clients(dev, TUNER_SET_CONFIG,
483 &tda9887_cfg);
484 break;
485 }
486 case 0x42:
487 dprintk1(1, "attach_inform: saa7114 detected.\n");
488 break;
489 case 0x4a:
490 dprintk1(1, "attach_inform: saa7113 detected.\n");
491 break;
492 case 0xa0:
493 dprintk1(1, "attach_inform: eeprom detected.\n");
494 break;
495 case 0x60: 465 case 0x60:
496 case 0x8e: 466 case 0x8e:
497 { 467 dprintk1(1, "attach_inform: IR detected (%s).\n", ir->phys);
498 struct IR_i2c *ir = i2c_get_clientdata(client);
499 dprintk1(1, "attach_inform: IR detected (%s).\n",
500 ir->phys);
501 em28xx_set_ir(dev, ir); 468 em28xx_set_ir(dev, ir);
502 break; 469 break;
503 } 470 }
504 case 0x80:
505 case 0x88:
506 dprintk1(1, "attach_inform: msp34xx detected.\n");
507 break;
508 case 0xb8:
509 case 0xba:
510 dprintk1(1, "attach_inform: tvp5150 detected.\n");
511 break;
512
513 case 0xb0:
514 dprintk1(1, "attach_inform: tda9874 detected\n");
515 break;
516
517 default:
518 if (!dev->tuner_addr)
519 dev->tuner_addr = client->addr;
520
521 dprintk1(1, "attach inform: detected I2C address %x\n",
522 client->addr << 1);
523 dprintk1(1, "driver id %d\n", client->driver->id);
524
525 }
526 471
527 return 0; 472 return 0;
528} 473}
@@ -534,7 +479,6 @@ static struct i2c_algorithm em28xx_algo = {
534 479
535static struct i2c_adapter em28xx_adap_template = { 480static struct i2c_adapter em28xx_adap_template = {
536 .owner = THIS_MODULE, 481 .owner = THIS_MODULE,
537 .class = I2C_CLASS_TV_ANALOG,
538 .name = "em28xx", 482 .name = "em28xx",
539 .id = I2C_HW_B_EM28XX, 483 .id = I2C_HW_B_EM28XX,
540 .algo = &em28xx_algo, 484 .algo = &em28xx_algo,
@@ -595,16 +539,6 @@ void em28xx_do_i2c_scan(struct em28xx *dev)
595} 539}
596 540
597/* 541/*
598 * em28xx_i2c_call_clients()
599 * send commands to all attached i2c devices
600 */
601void em28xx_i2c_call_clients(struct em28xx *dev, unsigned int cmd, void *arg)
602{
603 BUG_ON(NULL == dev->i2c_adap.algo_data);
604 i2c_clients_command(&dev->i2c_adap, cmd, arg);
605}
606
607/*
608 * em28xx_i2c_register() 542 * em28xx_i2c_register()
609 * register i2c bus 543 * register i2c bus
610 */ 544 */
@@ -618,6 +552,7 @@ int em28xx_i2c_register(struct em28xx *dev)
618 dev->i2c_adap.dev.parent = &dev->udev->dev; 552 dev->i2c_adap.dev.parent = &dev->udev->dev;
619 strcpy(dev->i2c_adap.name, dev->name); 553 strcpy(dev->i2c_adap.name, dev->name);
620 dev->i2c_adap.algo_data = dev; 554 dev->i2c_adap.algo_data = dev;
555 i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev);
621 556
622 retval = i2c_add_adapter(&dev->i2c_adap); 557 retval = i2c_add_adapter(&dev->i2c_adap);
623 if (retval < 0) { 558 if (retval < 0) {
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index 575472f1e702..882796e84dbc 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -49,7 +49,7 @@
49 "Sascha Sommer <saschasommer@freenet.de>" 49 "Sascha Sommer <saschasommer@freenet.de>"
50 50
51#define DRIVER_DESC "Empia em28xx based USB video device driver" 51#define DRIVER_DESC "Empia em28xx based USB video device driver"
52#define EM28XX_VERSION_CODE KERNEL_VERSION(0, 1, 1) 52#define EM28XX_VERSION_CODE KERNEL_VERSION(0, 1, 2)
53 53
54#define em28xx_videodbg(fmt, arg...) do {\ 54#define em28xx_videodbg(fmt, arg...) do {\
55 if (video_debug) \ 55 if (video_debug) \
@@ -400,7 +400,7 @@ buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
400 f.frequency = dev->ctl_freq; 400 f.frequency = dev->ctl_freq;
401 f.type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; 401 f.type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
402 402
403 em28xx_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, &f); 403 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f);
404 404
405 return 0; 405 return 0;
406} 406}
@@ -515,10 +515,6 @@ static struct videobuf_queue_ops em28xx_video_qops = {
515 515
516static void video_mux(struct em28xx *dev, int index) 516static void video_mux(struct em28xx *dev, int index)
517{ 517{
518 struct v4l2_routing route;
519
520 route.input = INPUT(index)->vmux;
521 route.output = 0;
522 dev->ctl_input = index; 518 dev->ctl_input = index;
523 dev->ctl_ainput = INPUT(index)->amux; 519 dev->ctl_ainput = INPUT(index)->amux;
524 dev->ctl_aoutput = INPUT(index)->aout; 520 dev->ctl_aoutput = INPUT(index)->aout;
@@ -526,25 +522,22 @@ static void video_mux(struct em28xx *dev, int index)
526 if (!dev->ctl_aoutput) 522 if (!dev->ctl_aoutput)
527 dev->ctl_aoutput = EM28XX_AOUT_MASTER; 523 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
528 524
529 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route); 525 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
526 INPUT(index)->vmux, 0, 0);
530 527
531 if (dev->board.has_msp34xx) { 528 if (dev->board.has_msp34xx) {
532 if (dev->i2s_speed) { 529 if (dev->i2s_speed) {
533 em28xx_i2c_call_clients(dev, VIDIOC_INT_I2S_CLOCK_FREQ, 530 v4l2_device_call_all(&dev->v4l2_dev, 0, audio,
534 &dev->i2s_speed); 531 s_i2s_clock_freq, dev->i2s_speed);
535 } 532 }
536 route.input = dev->ctl_ainput;
537 route.output = MSP_OUTPUT(MSP_SC_IN_DSP_SCART1);
538 /* Note: this is msp3400 specific */ 533 /* Note: this is msp3400 specific */
539 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_AUDIO_ROUTING, 534 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
540 &route); 535 dev->ctl_ainput, MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
541 } 536 }
542 537
543 if (dev->board.adecoder != EM28XX_NOADECODER) { 538 if (dev->board.adecoder != EM28XX_NOADECODER) {
544 route.input = dev->ctl_ainput; 539 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
545 route.output = dev->ctl_aoutput; 540 dev->ctl_ainput, dev->ctl_aoutput, 0);
546 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_AUDIO_ROUTING,
547 &route);
548 } 541 }
549 542
550 em28xx_audio_analog_set(dev); 543 em28xx_audio_analog_set(dev);
@@ -829,7 +822,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm)
829 get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale); 822 get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
830 823
831 em28xx_resolution_set(dev); 824 em28xx_resolution_set(dev);
832 em28xx_i2c_call_clients(dev, VIDIOC_S_STD, &dev->norm); 825 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
833 826
834 mutex_unlock(&dev->lock); 827 mutex_unlock(&dev->lock);
835 return 0; 828 return 0;
@@ -995,8 +988,9 @@ static int vidioc_queryctrl(struct file *file, void *priv,
995 } 988 }
996 } 989 }
997 } 990 }
991
998 mutex_lock(&dev->lock); 992 mutex_lock(&dev->lock);
999 em28xx_i2c_call_clients(dev, VIDIOC_QUERYCTRL, qc); 993 v4l2_device_call_all(&dev->v4l2_dev, 0, core, queryctrl, qc);
1000 mutex_unlock(&dev->lock); 994 mutex_unlock(&dev->lock);
1001 995
1002 if (qc->type) 996 if (qc->type)
@@ -1020,11 +1014,11 @@ static int vidioc_g_ctrl(struct file *file, void *priv,
1020 mutex_lock(&dev->lock); 1014 mutex_lock(&dev->lock);
1021 1015
1022 if (dev->board.has_msp34xx) 1016 if (dev->board.has_msp34xx)
1023 em28xx_i2c_call_clients(dev, VIDIOC_G_CTRL, ctrl); 1017 v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_ctrl, ctrl);
1024 else { 1018 else {
1025 rc = em28xx_get_ctrl(dev, ctrl); 1019 rc = em28xx_get_ctrl(dev, ctrl);
1026 if (rc < 0) { 1020 if (rc < 0) {
1027 em28xx_i2c_call_clients(dev, VIDIOC_G_CTRL, ctrl); 1021 v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_ctrl, ctrl);
1028 rc = 0; 1022 rc = 0;
1029 } 1023 }
1030 } 1024 }
@@ -1048,7 +1042,7 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
1048 mutex_lock(&dev->lock); 1042 mutex_lock(&dev->lock);
1049 1043
1050 if (dev->board.has_msp34xx) 1044 if (dev->board.has_msp34xx)
1051 em28xx_i2c_call_clients(dev, VIDIOC_S_CTRL, ctrl); 1045 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_ctrl, ctrl);
1052 else { 1046 else {
1053 rc = 1; 1047 rc = 1;
1054 for (i = 0; i < ARRAY_SIZE(em28xx_qctrl); i++) { 1048 for (i = 0; i < ARRAY_SIZE(em28xx_qctrl); i++) {
@@ -1067,7 +1061,7 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
1067 1061
1068 /* Control not found - try to send it to the attached devices */ 1062 /* Control not found - try to send it to the attached devices */
1069 if (rc == 1) { 1063 if (rc == 1) {
1070 em28xx_i2c_call_clients(dev, VIDIOC_S_CTRL, ctrl); 1064 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_ctrl, ctrl);
1071 rc = 0; 1065 rc = 0;
1072 } 1066 }
1073 1067
@@ -1092,10 +1086,9 @@ static int vidioc_g_tuner(struct file *file, void *priv,
1092 strcpy(t->name, "Tuner"); 1086 strcpy(t->name, "Tuner");
1093 1087
1094 mutex_lock(&dev->lock); 1088 mutex_lock(&dev->lock);
1095 1089 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
1096 em28xx_i2c_call_clients(dev, VIDIOC_G_TUNER, t);
1097
1098 mutex_unlock(&dev->lock); 1090 mutex_unlock(&dev->lock);
1091
1099 return 0; 1092 return 0;
1100} 1093}
1101 1094
@@ -1114,10 +1107,9 @@ static int vidioc_s_tuner(struct file *file, void *priv,
1114 return -EINVAL; 1107 return -EINVAL;
1115 1108
1116 mutex_lock(&dev->lock); 1109 mutex_lock(&dev->lock);
1117 1110 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
1118 em28xx_i2c_call_clients(dev, VIDIOC_S_TUNER, t);
1119
1120 mutex_unlock(&dev->lock); 1111 mutex_unlock(&dev->lock);
1112
1121 return 0; 1113 return 0;
1122} 1114}
1123 1115
@@ -1157,7 +1149,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
1157 mutex_lock(&dev->lock); 1149 mutex_lock(&dev->lock);
1158 1150
1159 dev->ctl_freq = f->frequency; 1151 dev->ctl_freq = f->frequency;
1160 em28xx_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, f); 1152 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, f);
1161 1153
1162 mutex_unlock(&dev->lock); 1154 mutex_unlock(&dev->lock);
1163 1155
@@ -1186,7 +1178,7 @@ static int vidioc_g_chip_ident(struct file *file, void *priv,
1186 chip->ident = V4L2_IDENT_NONE; 1178 chip->ident = V4L2_IDENT_NONE;
1187 chip->revision = 0; 1179 chip->revision = 0;
1188 1180
1189 em28xx_i2c_call_clients(dev, VIDIOC_DBG_G_CHIP_IDENT, chip); 1181 v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_chip_ident, chip);
1190 1182
1191 return 0; 1183 return 0;
1192} 1184}
@@ -1211,7 +1203,7 @@ static int vidioc_g_register(struct file *file, void *priv,
1211 reg->size = 1; 1203 reg->size = 1;
1212 return 0; 1204 return 0;
1213 case V4L2_CHIP_MATCH_I2C_DRIVER: 1205 case V4L2_CHIP_MATCH_I2C_DRIVER:
1214 em28xx_i2c_call_clients(dev, VIDIOC_DBG_G_REGISTER, reg); 1206 v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
1215 return 0; 1207 return 0;
1216 case V4L2_CHIP_MATCH_I2C_ADDR: 1208 case V4L2_CHIP_MATCH_I2C_ADDR:
1217 /* Not supported yet */ 1209 /* Not supported yet */
@@ -1263,7 +1255,7 @@ static int vidioc_s_register(struct file *file, void *priv,
1263 1255
1264 return rc; 1256 return rc;
1265 case V4L2_CHIP_MATCH_I2C_DRIVER: 1257 case V4L2_CHIP_MATCH_I2C_DRIVER:
1266 em28xx_i2c_call_clients(dev, VIDIOC_DBG_S_REGISTER, reg); 1258 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
1267 return 0; 1259 return 0;
1268 case V4L2_CHIP_MATCH_I2C_ADDR: 1260 case V4L2_CHIP_MATCH_I2C_ADDR:
1269 /* Not supported yet */ 1261 /* Not supported yet */
@@ -1406,13 +1398,13 @@ static int vidioc_g_fmt_sliced_vbi_cap(struct file *file, void *priv,
1406 mutex_lock(&dev->lock); 1398 mutex_lock(&dev->lock);
1407 1399
1408 f->fmt.sliced.service_set = 0; 1400 f->fmt.sliced.service_set = 0;
1409 1401 v4l2_device_call_all(&dev->v4l2_dev, 0, video, g_fmt, f);
1410 em28xx_i2c_call_clients(dev, VIDIOC_G_FMT, f);
1411 1402
1412 if (f->fmt.sliced.service_set == 0) 1403 if (f->fmt.sliced.service_set == 0)
1413 rc = -EINVAL; 1404 rc = -EINVAL;
1414 1405
1415 mutex_unlock(&dev->lock); 1406 mutex_unlock(&dev->lock);
1407
1416 return rc; 1408 return rc;
1417} 1409}
1418 1410
@@ -1428,7 +1420,7 @@ static int vidioc_try_set_sliced_vbi_cap(struct file *file, void *priv,
1428 return rc; 1420 return rc;
1429 1421
1430 mutex_lock(&dev->lock); 1422 mutex_lock(&dev->lock);
1431 em28xx_i2c_call_clients(dev, VIDIOC_G_FMT, f); 1423 v4l2_device_call_all(&dev->v4l2_dev, 0, video, g_fmt, f);
1432 mutex_unlock(&dev->lock); 1424 mutex_unlock(&dev->lock);
1433 1425
1434 if (f->fmt.sliced.service_set == 0) 1426 if (f->fmt.sliced.service_set == 0)
@@ -1532,7 +1524,7 @@ static int radio_g_tuner(struct file *file, void *priv,
1532 t->type = V4L2_TUNER_RADIO; 1524 t->type = V4L2_TUNER_RADIO;
1533 1525
1534 mutex_lock(&dev->lock); 1526 mutex_lock(&dev->lock);
1535 em28xx_i2c_call_clients(dev, VIDIOC_G_TUNER, t); 1527 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
1536 mutex_unlock(&dev->lock); 1528 mutex_unlock(&dev->lock);
1537 1529
1538 return 0; 1530 return 0;
@@ -1567,7 +1559,7 @@ static int radio_s_tuner(struct file *file, void *priv,
1567 return -EINVAL; 1559 return -EINVAL;
1568 1560
1569 mutex_lock(&dev->lock); 1561 mutex_lock(&dev->lock);
1570 em28xx_i2c_call_clients(dev, VIDIOC_S_TUNER, t); 1562 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
1571 mutex_unlock(&dev->lock); 1563 mutex_unlock(&dev->lock);
1572 1564
1573 return 0; 1565 return 0;
@@ -1655,7 +1647,7 @@ static int em28xx_v4l2_open(struct file *filp)
1655 } 1647 }
1656 if (fh->radio) { 1648 if (fh->radio) {
1657 em28xx_videodbg("video_open: setting radio device\n"); 1649 em28xx_videodbg("video_open: setting radio device\n");
1658 em28xx_i2c_call_clients(dev, AUDC_SET_RADIO, NULL); 1650 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_radio);
1659 } 1651 }
1660 1652
1661 dev->users++; 1653 dev->users++;
@@ -1738,7 +1730,7 @@ static int em28xx_v4l2_close(struct file *filp)
1738 } 1730 }
1739 1731
1740 /* Save some power by putting tuner to sleep */ 1732 /* Save some power by putting tuner to sleep */
1741 em28xx_i2c_call_clients(dev, TUNER_SET_STANDBY, NULL); 1733 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_standby);
1742 1734
1743 /* do this before setting alternate! */ 1735 /* do this before setting alternate! */
1744 em28xx_uninit_isoc(dev); 1736 em28xx_uninit_isoc(dev);
@@ -1959,11 +1951,12 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev,
1959 vfd = video_device_alloc(); 1951 vfd = video_device_alloc();
1960 if (NULL == vfd) 1952 if (NULL == vfd)
1961 return NULL; 1953 return NULL;
1962 *vfd = *template; 1954
1963 vfd->minor = -1; 1955 *vfd = *template;
1964 vfd->parent = &dev->udev->dev; 1956 vfd->minor = -1;
1965 vfd->release = video_device_release; 1957 vfd->v4l2_dev = &dev->v4l2_dev;
1966 vfd->debug = video_debug; 1958 vfd->release = video_device_release;
1959 vfd->debug = video_debug;
1967 1960
1968 snprintf(vfd->name, sizeof(vfd->name), "%s %s", 1961 snprintf(vfd->name, sizeof(vfd->name), "%s %s",
1969 dev->name, type_name); 1962 dev->name, type_name);
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index a33a58da016e..4c4e58004f54 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -27,6 +27,7 @@
27 27
28#include <linux/videodev2.h> 28#include <linux/videodev2.h>
29#include <media/videobuf-vmalloc.h> 29#include <media/videobuf-vmalloc.h>
30#include <media/v4l2-device.h>
30 31
31#include <linux/i2c.h> 32#include <linux/i2c.h>
32#include <linux/mutex.h> 33#include <linux/mutex.h>
@@ -385,6 +386,8 @@ struct em28xx_board {
385 unsigned int valid:1; 386 unsigned int valid:1;
386 387
387 unsigned char xclk, i2c_speed; 388 unsigned char xclk, i2c_speed;
389 unsigned char radio_addr;
390 unsigned short tvaudio_addr;
388 391
389 enum em28xx_decoder decoder; 392 enum em28xx_decoder decoder;
390 enum em28xx_adecoder adecoder; 393 enum em28xx_adecoder adecoder;
@@ -460,6 +463,7 @@ struct em28xx {
460 int devno; /* marks the number of this device */ 463 int devno; /* marks the number of this device */
461 enum em28xx_chip_id chip_id; 464 enum em28xx_chip_id chip_id;
462 465
466 struct v4l2_device v4l2_dev;
463 struct em28xx_board board; 467 struct em28xx_board board;
464 468
465 unsigned int stream_on:1; /* Locks streams */ 469 unsigned int stream_on:1; /* Locks streams */
@@ -577,11 +581,9 @@ struct em28xx_ops {
577}; 581};
578 582
579/* Provided by em28xx-i2c.c */ 583/* Provided by em28xx-i2c.c */
580
581void em28xx_i2c_call_clients(struct em28xx *dev, unsigned int cmd, void *arg);
582void em28xx_do_i2c_scan(struct em28xx *dev); 584void em28xx_do_i2c_scan(struct em28xx *dev);
583int em28xx_i2c_register(struct em28xx *dev); 585int em28xx_i2c_register(struct em28xx *dev);
584int em28xx_i2c_unregister(struct em28xx *dev); 586int em28xx_i2c_unregister(struct em28xx *dev);
585 587
586/* Provided by em28xx-core.c */ 588/* Provided by em28xx-core.c */
587 589
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c
index a75c1ca2db41..a2741d7dccfe 100644
--- a/drivers/media/video/gspca/gspca.c
+++ b/drivers/media/video/gspca/gspca.c
@@ -1132,6 +1132,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
1132 if (input->index != 0) 1132 if (input->index != 0)
1133 return -EINVAL; 1133 return -EINVAL;
1134 input->type = V4L2_INPUT_TYPE_CAMERA; 1134 input->type = V4L2_INPUT_TYPE_CAMERA;
1135 input->status = gspca_dev->cam.input_flags;
1135 strncpy(input->name, gspca_dev->sd_desc->name, 1136 strncpy(input->name, gspca_dev->sd_desc->name,
1136 sizeof input->name); 1137 sizeof input->name);
1137 return 0; 1138 return 0;
diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h
index e4d4cf6ce05a..58e8ff02136a 100644
--- a/drivers/media/video/gspca/gspca.h
+++ b/drivers/media/video/gspca/gspca.h
@@ -56,6 +56,7 @@ struct cam {
56 * - cannot be > MAX_NURBS 56 * - cannot be > MAX_NURBS
57 * - when 0 and bulk_size != 0 means 57 * - when 0 and bulk_size != 0 means
58 * 1 URB and submit done by subdriver */ 58 * 1 URB and submit done by subdriver */
59 u32 input_flags; /* value for ENUM_INPUT status flags */
59}; 60};
60 61
61struct gspca_dev; 62struct gspca_dev;
diff --git a/drivers/media/video/gspca/m5602/Makefile b/drivers/media/video/gspca/m5602/Makefile
index 226ab4fc9d60..9fa3644f4869 100644
--- a/drivers/media/video/gspca/m5602/Makefile
+++ b/drivers/media/video/gspca/m5602/Makefile
@@ -7,5 +7,4 @@ gspca_m5602-objs := m5602_core.o \
7 m5602_s5k83a.o \ 7 m5602_s5k83a.o \
8 m5602_s5k4aa.o 8 m5602_s5k4aa.o
9 9
10EXTRA_CFLAGS += -Idrivers/media/video/gspca 10EXTRA_CFLAGS += -Idrivers/media/video/gspca \ No newline at end of file
11
diff --git a/drivers/media/video/gspca/m5602/m5602_bridge.h b/drivers/media/video/gspca/m5602/m5602_bridge.h
index a3f3b7a0c7e7..8f1cea6fd3bf 100644
--- a/drivers/media/video/gspca/m5602/m5602_bridge.h
+++ b/drivers/media/video/gspca/m5602/m5602_bridge.h
@@ -112,14 +112,14 @@ static const unsigned char sensor_urb_skeleton[] = {
112struct sd { 112struct sd {
113 struct gspca_dev gspca_dev; 113 struct gspca_dev gspca_dev;
114 114
115 /* The name of the m5602 camera */
116 char *name;
117
118 /* A pointer to the currently connected sensor */ 115 /* A pointer to the currently connected sensor */
119 struct m5602_sensor *sensor; 116 const struct m5602_sensor *sensor;
120 117
121 struct sd_desc *desc; 118 struct sd_desc *desc;
122 119
120 /* Sensor private data */
121 void *sensor_priv;
122
123 /* The current frame's id, used to detect frame boundaries */ 123 /* The current frame's id, used to detect frame boundaries */
124 u8 frame_id; 124 u8 frame_id;
125 125
diff --git a/drivers/media/video/gspca/m5602/m5602_core.c b/drivers/media/video/gspca/m5602/m5602_core.c
index b35e4838a6e5..1aac2985fee6 100644
--- a/drivers/media/video/gspca/m5602/m5602_core.c
+++ b/drivers/media/video/gspca/m5602/m5602_core.c
@@ -51,7 +51,7 @@ int m5602_read_bridge(struct sd *sd, u8 address, u8 *i2c_data)
51 address, *i2c_data); 51 address, *i2c_data);
52 52
53 /* usb_control_msg(...) returns the number of bytes sent upon success, 53 /* usb_control_msg(...) returns the number of bytes sent upon success,
54 mask that and return zero upon success instead*/ 54 mask that and return zero instead*/
55 return (err < 0) ? err : 0; 55 return (err < 0) ? err : 0;
56} 56}
57 57
@@ -76,7 +76,7 @@ int m5602_write_bridge(struct sd *sd, u8 address, u8 i2c_data)
76 4, M5602_URB_MSG_TIMEOUT); 76 4, M5602_URB_MSG_TIMEOUT);
77 77
78 /* usb_control_msg(...) returns the number of bytes sent upon success, 78 /* usb_control_msg(...) returns the number of bytes sent upon success,
79 mask that and return zero upon success instead */ 79 mask that and return zero instead */
80 return (err < 0) ? err : 0; 80 return (err < 0) ? err : 0;
81} 81}
82 82
@@ -92,29 +92,29 @@ int m5602_read_sensor(struct sd *sd, const u8 address,
92 err = m5602_read_bridge(sd, M5602_XB_I2C_STATUS, i2c_data); 92 err = m5602_read_bridge(sd, M5602_XB_I2C_STATUS, i2c_data);
93 } while ((*i2c_data & I2C_BUSY) && !err); 93 } while ((*i2c_data & I2C_BUSY) && !err);
94 if (err < 0) 94 if (err < 0)
95 goto out; 95 return err;
96 96
97 err = m5602_write_bridge(sd, M5602_XB_I2C_DEV_ADDR, 97 err = m5602_write_bridge(sd, M5602_XB_I2C_DEV_ADDR,
98 sd->sensor->i2c_slave_id); 98 sd->sensor->i2c_slave_id);
99 if (err < 0) 99 if (err < 0)
100 goto out; 100 return err;
101 101
102 err = m5602_write_bridge(sd, M5602_XB_I2C_REG_ADDR, address); 102 err = m5602_write_bridge(sd, M5602_XB_I2C_REG_ADDR, address);
103 if (err < 0) 103 if (err < 0)
104 goto out; 104 return err;
105 105
106 if (sd->sensor->i2c_regW == 1) { 106 if (sd->sensor->i2c_regW == 1) {
107 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, len); 107 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, len);
108 if (err < 0) 108 if (err < 0)
109 goto out; 109 return err;
110 110
111 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x08); 111 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x08);
112 if (err < 0) 112 if (err < 0)
113 goto out; 113 return err;
114 } else { 114 } else {
115 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x18 + len); 115 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x18 + len);
116 if (err < 0) 116 if (err < 0)
117 goto out; 117 return err;
118 } 118 }
119 119
120 for (i = 0; (i < len) && !err; i++) { 120 for (i = 0; (i < len) && !err; i++) {
@@ -123,7 +123,6 @@ int m5602_read_sensor(struct sd *sd, const u8 address,
123 PDEBUG(D_CONF, "Reading sensor register " 123 PDEBUG(D_CONF, "Reading sensor register "
124 "0x%x containing 0x%x ", address, *i2c_data); 124 "0x%x containing 0x%x ", address, *i2c_data);
125 } 125 }
126out:
127 return err; 126 return err;
128} 127}
129 128
@@ -310,7 +309,11 @@ static void m5602_urb_complete(struct gspca_dev *gspca_dev,
310 309
311static void m5602_stop_transfer(struct gspca_dev *gspca_dev) 310static void m5602_stop_transfer(struct gspca_dev *gspca_dev)
312{ 311{
313 /* Is there are a command to stop a data transfer? */ 312 struct sd *sd = (struct sd *) gspca_dev;
313
314 /* Run the sensor specific end transfer sequence */
315 if (sd->sensor->stop)
316 sd->sensor->stop(sd);
314} 317}
315 318
316/* sub-driver description, the ctrl and nctrl is filled at probe time */ 319/* sub-driver description, the ctrl and nctrl is filled at probe time */
@@ -359,6 +362,17 @@ static int m5602_probe(struct usb_interface *intf,
359 THIS_MODULE); 362 THIS_MODULE);
360} 363}
361 364
365void m5602_disconnect(struct usb_interface *intf)
366{
367 struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
368 struct sd *sd = (struct sd *) gspca_dev;
369
370 if (sd->sensor->disconnect)
371 sd->sensor->disconnect(sd);
372
373 gspca_disconnect(intf);
374}
375
362static struct usb_driver sd_driver = { 376static struct usb_driver sd_driver = {
363 .name = MODULE_NAME, 377 .name = MODULE_NAME,
364 .id_table = m5602_table, 378 .id_table = m5602_table,
@@ -367,7 +381,7 @@ static struct usb_driver sd_driver = {
367 .suspend = gspca_suspend, 381 .suspend = gspca_suspend,
368 .resume = gspca_resume, 382 .resume = gspca_resume,
369#endif 383#endif
370 .disconnect = gspca_disconnect 384 .disconnect = m5602_disconnect
371}; 385};
372 386
373/* -- module insert / remove -- */ 387/* -- module insert / remove -- */
diff --git a/drivers/media/video/gspca/m5602/m5602_mt9m111.c b/drivers/media/video/gspca/m5602/m5602_mt9m111.c
index c0e71c331454..7d3f9e348ef4 100644
--- a/drivers/media/video/gspca/m5602/m5602_mt9m111.c
+++ b/drivers/media/video/gspca/m5602/m5602_mt9m111.c
@@ -18,6 +18,61 @@
18 18
19#include "m5602_mt9m111.h" 19#include "m5602_mt9m111.h"
20 20
21static struct v4l2_pix_format mt9m111_modes[] = {
22 {
23 640,
24 480,
25 V4L2_PIX_FMT_SBGGR8,
26 V4L2_FIELD_NONE,
27 .sizeimage = 640 * 480,
28 .bytesperline = 640,
29 .colorspace = V4L2_COLORSPACE_SRGB,
30 .priv = 0
31 }
32};
33
34const static struct ctrl mt9m111_ctrls[] = {
35 {
36 {
37 .id = V4L2_CID_VFLIP,
38 .type = V4L2_CTRL_TYPE_BOOLEAN,
39 .name = "vertical flip",
40 .minimum = 0,
41 .maximum = 1,
42 .step = 1,
43 .default_value = 0
44 },
45 .set = mt9m111_set_vflip,
46 .get = mt9m111_get_vflip
47 }, {
48 {
49 .id = V4L2_CID_HFLIP,
50 .type = V4L2_CTRL_TYPE_BOOLEAN,
51 .name = "horizontal flip",
52 .minimum = 0,
53 .maximum = 1,
54 .step = 1,
55 .default_value = 0
56 },
57 .set = mt9m111_set_hflip,
58 .get = mt9m111_get_hflip
59 }, {
60 {
61 .id = V4L2_CID_GAIN,
62 .type = V4L2_CTRL_TYPE_INTEGER,
63 .name = "gain",
64 .minimum = 0,
65 .maximum = (INITIAL_MAX_GAIN - 1) * 2 * 2 * 2,
66 .step = 1,
67 .default_value = DEFAULT_GAIN,
68 .flags = V4L2_CTRL_FLAG_SLIDER
69 },
70 .set = mt9m111_set_gain,
71 .get = mt9m111_get_gain
72 }
73};
74
75
21static void mt9m111_dump_registers(struct sd *sd); 76static void mt9m111_dump_registers(struct sd *sd);
22 77
23int mt9m111_probe(struct sd *sd) 78int mt9m111_probe(struct sd *sd)
@@ -62,10 +117,10 @@ int mt9m111_probe(struct sd *sd)
62 return -ENODEV; 117 return -ENODEV;
63 118
64sensor_found: 119sensor_found:
65 sd->gspca_dev.cam.cam_mode = mt9m111.modes; 120 sd->gspca_dev.cam.cam_mode = mt9m111_modes;
66 sd->gspca_dev.cam.nmodes = mt9m111.nmodes; 121 sd->gspca_dev.cam.nmodes = ARRAY_SIZE(mt9m111_modes);
67 sd->desc->ctrls = mt9m111.ctrls; 122 sd->desc->ctrls = mt9m111_ctrls;
68 sd->desc->nctrls = mt9m111.nctrls; 123 sd->desc->nctrls = ARRAY_SIZE(mt9m111_ctrls);
69 return 0; 124 return 0;
70} 125}
71 126
@@ -125,16 +180,15 @@ int mt9m111_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
125 /* Set the correct page map */ 180 /* Set the correct page map */
126 err = m5602_write_sensor(sd, MT9M111_PAGE_MAP, data, 2); 181 err = m5602_write_sensor(sd, MT9M111_PAGE_MAP, data, 2);
127 if (err < 0) 182 if (err < 0)
128 goto out; 183 return err;
129 184
130 err = m5602_read_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B, data, 2); 185 err = m5602_read_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B, data, 2);
131 if (err < 0) 186 if (err < 0)
132 goto out; 187 return err;
133 188
134 data[0] = (data[0] & 0xfe) | val; 189 data[0] = (data[0] & 0xfe) | val;
135 err = m5602_write_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B, 190 err = m5602_write_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B,
136 data, 2); 191 data, 2);
137out:
138 return err; 192 return err;
139} 193}
140 194
@@ -163,16 +217,15 @@ int mt9m111_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
163 /* Set the correct page map */ 217 /* Set the correct page map */
164 err = m5602_write_sensor(sd, MT9M111_PAGE_MAP, data, 2); 218 err = m5602_write_sensor(sd, MT9M111_PAGE_MAP, data, 2);
165 if (err < 0) 219 if (err < 0)
166 goto out; 220 return err;
167 221
168 err = m5602_read_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B, data, 2); 222 err = m5602_read_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B, data, 2);
169 if (err < 0) 223 if (err < 0)
170 goto out; 224 return err;
171 225
172 data[0] = (data[0] & 0xfd) | ((val << 1) & 0x02); 226 data[0] = (data[0] & 0xfd) | ((val << 1) & 0x02);
173 err = m5602_write_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B, 227 err = m5602_write_sensor(sd, MT9M111_SC_R_MODE_CONTEXT_B,
174 data, 2); 228 data, 2);
175out:
176 return err; 229 return err;
177} 230}
178 231
@@ -204,7 +257,7 @@ int mt9m111_set_gain(struct gspca_dev *gspca_dev, __s32 val)
204 /* Set the correct page map */ 257 /* Set the correct page map */
205 err = m5602_write_sensor(sd, MT9M111_PAGE_MAP, data, 2); 258 err = m5602_write_sensor(sd, MT9M111_PAGE_MAP, data, 2);
206 if (err < 0) 259 if (err < 0)
207 goto out; 260 return err;
208 261
209 if (val >= INITIAL_MAX_GAIN * 2 * 2 * 2) 262 if (val >= INITIAL_MAX_GAIN * 2 * 2 * 2)
210 return -EINVAL; 263 return -EINVAL;
@@ -229,7 +282,7 @@ int mt9m111_set_gain(struct gspca_dev *gspca_dev, __s32 val)
229 282
230 err = m5602_write_sensor(sd, MT9M111_SC_GLOBAL_GAIN, 283 err = m5602_write_sensor(sd, MT9M111_SC_GLOBAL_GAIN,
231 data, 2); 284 data, 2);
232out: 285
233 return err; 286 return err;
234} 287}
235 288
diff --git a/drivers/media/video/gspca/m5602/m5602_mt9m111.h b/drivers/media/video/gspca/m5602/m5602_mt9m111.h
index e795ab7a36c9..00c6db02bdb7 100644
--- a/drivers/media/video/gspca/m5602/m5602_mt9m111.h
+++ b/drivers/media/video/gspca/m5602/m5602_mt9m111.h
@@ -94,7 +94,7 @@ int mt9m111_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
94int mt9m111_get_gain(struct gspca_dev *gspca_dev, __s32 *val); 94int mt9m111_get_gain(struct gspca_dev *gspca_dev, __s32 *val);
95int mt9m111_set_gain(struct gspca_dev *gspca_dev, __s32 val); 95int mt9m111_set_gain(struct gspca_dev *gspca_dev, __s32 val);
96 96
97static struct m5602_sensor mt9m111 = { 97const static struct m5602_sensor mt9m111 = {
98 .name = "MT9M111", 98 .name = "MT9M111",
99 99
100 .i2c_slave_id = 0xba, 100 .i2c_slave_id = 0xba,
@@ -102,64 +102,7 @@ static struct m5602_sensor mt9m111 = {
102 102
103 .probe = mt9m111_probe, 103 .probe = mt9m111_probe,
104 .init = mt9m111_init, 104 .init = mt9m111_init,
105 .power_down = mt9m111_power_down, 105 .power_down = mt9m111_power_down
106
107 .nctrls = 3,
108 .ctrls = {
109 {
110 {
111 .id = V4L2_CID_VFLIP,
112 .type = V4L2_CTRL_TYPE_BOOLEAN,
113 .name = "vertical flip",
114 .minimum = 0,
115 .maximum = 1,
116 .step = 1,
117 .default_value = 0
118 },
119 .set = mt9m111_set_vflip,
120 .get = mt9m111_get_vflip
121 }, {
122 {
123 .id = V4L2_CID_HFLIP,
124 .type = V4L2_CTRL_TYPE_BOOLEAN,
125 .name = "horizontal flip",
126 .minimum = 0,
127 .maximum = 1,
128 .step = 1,
129 .default_value = 0
130 },
131 .set = mt9m111_set_hflip,
132 .get = mt9m111_get_hflip
133 }, {
134 {
135 .id = V4L2_CID_GAIN,
136 .type = V4L2_CTRL_TYPE_INTEGER,
137 .name = "gain",
138 .minimum = 0,
139 .maximum = (INITIAL_MAX_GAIN - 1) * 2 * 2 * 2,
140 .step = 1,
141 .default_value = DEFAULT_GAIN,
142 .flags = V4L2_CTRL_FLAG_SLIDER
143 },
144 .set = mt9m111_set_gain,
145 .get = mt9m111_get_gain
146 }
147 },
148
149 .nmodes = 1,
150 .modes = {
151 {
152 M5602_DEFAULT_FRAME_WIDTH,
153 M5602_DEFAULT_FRAME_HEIGHT,
154 V4L2_PIX_FMT_SBGGR8,
155 V4L2_FIELD_NONE,
156 .sizeimage =
157 M5602_DEFAULT_FRAME_WIDTH * M5602_DEFAULT_FRAME_HEIGHT,
158 .bytesperline = M5602_DEFAULT_FRAME_WIDTH,
159 .colorspace = V4L2_COLORSPACE_SRGB,
160 .priv = 1
161 }
162 }
163}; 106};
164 107
165static const unsigned char preinit_mt9m111[][4] = 108static const unsigned char preinit_mt9m111[][4] =
diff --git a/drivers/media/video/gspca/m5602/m5602_ov9650.c b/drivers/media/video/gspca/m5602/m5602_ov9650.c
index c908a8d6970a..fc4548fd441d 100644
--- a/drivers/media/video/gspca/m5602/m5602_ov9650.c
+++ b/drivers/media/video/gspca/m5602/m5602_ov9650.c
@@ -65,14 +65,177 @@ static
65 DMI_MATCH(DMI_PRODUCT_NAME, "Aurora m9700") 65 DMI_MATCH(DMI_PRODUCT_NAME, "Aurora m9700")
66 } 66 }
67 }, 67 },
68 { } 68 {}
69};
70
71const static struct ctrl ov9650_ctrls[] = {
72#define EXPOSURE_IDX 0
73 {
74 {
75 .id = V4L2_CID_EXPOSURE,
76 .type = V4L2_CTRL_TYPE_INTEGER,
77 .name = "exposure",
78 .minimum = 0x00,
79 .maximum = 0x1ff,
80 .step = 0x4,
81 .default_value = EXPOSURE_DEFAULT,
82 .flags = V4L2_CTRL_FLAG_SLIDER
83 },
84 .set = ov9650_set_exposure,
85 .get = ov9650_get_exposure
86 },
87#define GAIN_IDX 1
88 {
89 {
90 .id = V4L2_CID_GAIN,
91 .type = V4L2_CTRL_TYPE_INTEGER,
92 .name = "gain",
93 .minimum = 0x00,
94 .maximum = 0x3ff,
95 .step = 0x1,
96 .default_value = GAIN_DEFAULT,
97 .flags = V4L2_CTRL_FLAG_SLIDER
98 },
99 .set = ov9650_set_gain,
100 .get = ov9650_get_gain
101 },
102#define RED_BALANCE_IDX 2
103 {
104 {
105 .type = V4L2_CTRL_TYPE_INTEGER,
106 .name = "red balance",
107 .minimum = 0x00,
108 .maximum = 0xff,
109 .step = 0x1,
110 .default_value = RED_GAIN_DEFAULT,
111 .flags = V4L2_CTRL_FLAG_SLIDER
112 },
113 .set = ov9650_set_red_balance,
114 .get = ov9650_get_red_balance
115 },
116#define BLUE_BALANCE_IDX 3
117 {
118 {
119 .type = V4L2_CTRL_TYPE_INTEGER,
120 .name = "blue balance",
121 .minimum = 0x00,
122 .maximum = 0xff,
123 .step = 0x1,
124 .default_value = BLUE_GAIN_DEFAULT,
125 .flags = V4L2_CTRL_FLAG_SLIDER
126 },
127 .set = ov9650_set_blue_balance,
128 .get = ov9650_get_blue_balance
129 },
130#define HFLIP_IDX 4
131 {
132 {
133 .id = V4L2_CID_HFLIP,
134 .type = V4L2_CTRL_TYPE_BOOLEAN,
135 .name = "horizontal flip",
136 .minimum = 0,
137 .maximum = 1,
138 .step = 1,
139 .default_value = 0
140 },
141 .set = ov9650_set_hflip,
142 .get = ov9650_get_hflip
143 },
144#define VFLIP_IDX 5
145 {
146 {
147 .id = V4L2_CID_VFLIP,
148 .type = V4L2_CTRL_TYPE_BOOLEAN,
149 .name = "vertical flip",
150 .minimum = 0,
151 .maximum = 1,
152 .step = 1,
153 .default_value = 0
154 },
155 .set = ov9650_set_vflip,
156 .get = ov9650_get_vflip
157 },
158#define AUTO_WHITE_BALANCE_IDX 6
159 {
160 {
161 .id = V4L2_CID_AUTO_WHITE_BALANCE,
162 .type = V4L2_CTRL_TYPE_BOOLEAN,
163 .name = "auto white balance",
164 .minimum = 0,
165 .maximum = 1,
166 .step = 1,
167 .default_value = 1
168 },
169 .set = ov9650_set_auto_white_balance,
170 .get = ov9650_get_auto_white_balance
171 },
172#define AUTO_GAIN_CTRL_IDX 7
173 {
174 {
175 .id = V4L2_CID_AUTOGAIN,
176 .type = V4L2_CTRL_TYPE_BOOLEAN,
177 .name = "auto gain control",
178 .minimum = 0,
179 .maximum = 1,
180 .step = 1,
181 .default_value = 1
182 },
183 .set = ov9650_set_auto_gain,
184 .get = ov9650_get_auto_gain
185 }
186};
187
188static struct v4l2_pix_format ov9650_modes[] = {
189 {
190 176,
191 144,
192 V4L2_PIX_FMT_SBGGR8,
193 V4L2_FIELD_NONE,
194 .sizeimage =
195 176 * 144,
196 .bytesperline = 176,
197 .colorspace = V4L2_COLORSPACE_SRGB,
198 .priv = 9
199 }, {
200 320,
201 240,
202 V4L2_PIX_FMT_SBGGR8,
203 V4L2_FIELD_NONE,
204 .sizeimage =
205 320 * 240,
206 .bytesperline = 320,
207 .colorspace = V4L2_COLORSPACE_SRGB,
208 .priv = 8
209 }, {
210 352,
211 288,
212 V4L2_PIX_FMT_SBGGR8,
213 V4L2_FIELD_NONE,
214 .sizeimage =
215 352 * 288,
216 .bytesperline = 352,
217 .colorspace = V4L2_COLORSPACE_SRGB,
218 .priv = 9
219 }, {
220 640,
221 480,
222 V4L2_PIX_FMT_SBGGR8,
223 V4L2_FIELD_NONE,
224 .sizeimage =
225 640 * 480,
226 .bytesperline = 640,
227 .colorspace = V4L2_COLORSPACE_SRGB,
228 .priv = 9
229 }
69}; 230};
70 231
71static void ov9650_dump_registers(struct sd *sd); 232static void ov9650_dump_registers(struct sd *sd);
72 233
73int ov9650_probe(struct sd *sd) 234int ov9650_probe(struct sd *sd)
74{ 235{
236 int err = 0;
75 u8 prod_id = 0, ver_id = 0, i; 237 u8 prod_id = 0, ver_id = 0, i;
238 s32 *sensor_settings;
76 239
77 if (force_sensor) { 240 if (force_sensor) {
78 if (force_sensor == OV9650_SENSOR) { 241 if (force_sensor == OV9650_SENSOR) {
@@ -86,16 +249,20 @@ int ov9650_probe(struct sd *sd)
86 249
87 info("Probing for an ov9650 sensor"); 250 info("Probing for an ov9650 sensor");
88 251
89 /* Run the pre-init to actually probe the unit */ 252 /* Run the pre-init before probing the sensor */
90 for (i = 0; i < ARRAY_SIZE(preinit_ov9650); i++) { 253 for (i = 0; i < ARRAY_SIZE(preinit_ov9650) && !err; i++) {
91 u8 data = preinit_ov9650[i][2]; 254 u8 data = preinit_ov9650[i][2];
92 if (preinit_ov9650[i][0] == SENSOR) 255 if (preinit_ov9650[i][0] == SENSOR)
93 m5602_write_sensor(sd, 256 err = m5602_write_sensor(sd,
94 preinit_ov9650[i][1], &data, 1); 257 preinit_ov9650[i][1], &data, 1);
95 else 258 else
96 m5602_write_bridge(sd, preinit_ov9650[i][1], data); 259 err = m5602_write_bridge(sd,
260 preinit_ov9650[i][1], data);
97 } 261 }
98 262
263 if (err < 0)
264 return err;
265
99 if (m5602_read_sensor(sd, OV9650_PID, &prod_id, 1)) 266 if (m5602_read_sensor(sd, OV9650_PID, &prod_id, 1))
100 return -ENODEV; 267 return -ENODEV;
101 268
@@ -106,14 +273,28 @@ int ov9650_probe(struct sd *sd)
106 info("Detected an ov9650 sensor"); 273 info("Detected an ov9650 sensor");
107 goto sensor_found; 274 goto sensor_found;
108 } 275 }
109
110 return -ENODEV; 276 return -ENODEV;
111 277
112sensor_found: 278sensor_found:
113 sd->gspca_dev.cam.cam_mode = ov9650.modes; 279 sensor_settings = kmalloc(
114 sd->gspca_dev.cam.nmodes = ov9650.nmodes; 280 ARRAY_SIZE(ov9650_ctrls) * sizeof(s32), GFP_KERNEL);
115 sd->desc->ctrls = ov9650.ctrls; 281 if (!sensor_settings)
116 sd->desc->nctrls = ov9650.nctrls; 282 return -ENOMEM;
283
284 sd->gspca_dev.cam.cam_mode = ov9650_modes;
285 sd->gspca_dev.cam.nmodes = ARRAY_SIZE(ov9650_modes);
286 sd->desc->ctrls = ov9650_ctrls;
287 sd->desc->nctrls = ARRAY_SIZE(ov9650_ctrls);
288
289 for (i = 0; i < ARRAY_SIZE(ov9650_ctrls); i++)
290 sensor_settings[i] = ov9650_ctrls[i].qctrl.default_value;
291 sd->sensor_priv = sensor_settings;
292
293 if (dmi_check_system(ov9650_flip_dmi_table) && !err) {
294 info("vflip quirk active");
295 sensor_settings[VFLIP_IDX] = 1;
296 }
297
117 return 0; 298 return 0;
118} 299}
119 300
@@ -121,6 +302,7 @@ int ov9650_init(struct sd *sd)
121{ 302{
122 int i, err = 0; 303 int i, err = 0;
123 u8 data; 304 u8 data;
305 s32 *sensor_settings = sd->sensor_priv;
124 306
125 if (dump_sensor) 307 if (dump_sensor)
126 ov9650_dump_registers(sd); 308 ov9650_dump_registers(sd);
@@ -134,70 +316,157 @@ int ov9650_init(struct sd *sd)
134 err = m5602_write_bridge(sd, init_ov9650[i][1], data); 316 err = m5602_write_bridge(sd, init_ov9650[i][1], data);
135 } 317 }
136 318
137 if (dmi_check_system(ov9650_flip_dmi_table) && !err) { 319 err = ov9650_set_exposure(&sd->gspca_dev, sensor_settings[EXPOSURE_IDX]);
138 info("vflip quirk active"); 320 if (err < 0)
139 data = 0x30; 321 return err;
140 err = m5602_write_sensor(sd, OV9650_MVFP, &data, 1); 322
141 } 323 err = ov9650_set_gain(&sd->gspca_dev, sensor_settings[GAIN_IDX]);
324 if (err < 0)
325 return err;
326
327 err = ov9650_set_red_balance(&sd->gspca_dev, sensor_settings[RED_BALANCE_IDX]);
328 if (err < 0)
329 return err;
330
331 err = ov9650_set_blue_balance(&sd->gspca_dev, sensor_settings[BLUE_BALANCE_IDX]);
332 if (err < 0)
333 return err;
334
335 err = ov9650_set_hflip(&sd->gspca_dev, sensor_settings[HFLIP_IDX]);
336 if (err < 0)
337 return err;
338
339 err = ov9650_set_vflip(&sd->gspca_dev, sensor_settings[VFLIP_IDX]);
340 if (err < 0)
341 return err;
342
343 err = ov9650_set_auto_white_balance(&sd->gspca_dev, sensor_settings[AUTO_WHITE_BALANCE_IDX]);
344 if (err < 0)
345 return err;
346
347 err = ov9650_set_auto_gain(&sd->gspca_dev, sensor_settings[AUTO_GAIN_CTRL_IDX]);
142 return err; 348 return err;
143} 349}
144 350
145int ov9650_start(struct sd *sd) 351int ov9650_start(struct sd *sd)
146{ 352{
353 u8 data;
147 int i, err = 0; 354 int i, err = 0;
148 struct cam *cam = &sd->gspca_dev.cam; 355 struct cam *cam = &sd->gspca_dev.cam;
356 s32 *sensor_settings = sd->sensor_priv;
357
358 int width = cam->cam_mode[sd->gspca_dev.curr_mode].width;
359 int height = cam->cam_mode[sd->gspca_dev.curr_mode].height;
360 int ver_offs = cam->cam_mode[sd->gspca_dev.curr_mode].priv;
361 int hor_offs = OV9650_LEFT_OFFSET;
362
363 if (sensor_settings[VFLIP_IDX])
364 ver_offs--;
149 365
366 if (width <= 320)
367 hor_offs /= 2;
368
369 /* Synthesize the vsync/hsync setup */
150 for (i = 0; i < ARRAY_SIZE(res_init_ov9650) && !err; i++) { 370 for (i = 0; i < ARRAY_SIZE(res_init_ov9650) && !err; i++) {
151 u8 data = res_init_ov9650[i][1]; 371 if (res_init_ov9650[i][0] == BRIDGE)
152 err = m5602_write_bridge(sd, res_init_ov9650[i][0], data); 372 err = m5602_write_bridge(sd, res_init_ov9650[i][1],
373 res_init_ov9650[i][2]);
374 else if (res_init_ov9650[i][0] == SENSOR) {
375 u8 data = res_init_ov9650[i][2];
376 err = m5602_write_sensor(sd,
377 res_init_ov9650[i][1], &data, 1);
378 }
153 } 379 }
154 if (err < 0) 380 if (err < 0)
155 return err; 381 return err;
156 382
157 switch (cam->cam_mode[sd->gspca_dev.curr_mode].width) 383 err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA,
158 { 384 ((ver_offs >> 8) & 0xff));
385 if (err < 0)
386 return err;
387
388 err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (ver_offs & 0xff));
389 if (err < 0)
390 return err;
391
392 err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
393 if (err < 0)
394 return err;
395
396 err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (height >> 8) & 0xff);
397 if (err < 0)
398 return err;
399
400 err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (height & 0xff));
401 if (err < 0)
402 return err;
403
404 for (i = 0; i < 2 && !err; i++)
405 err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
406 if (err < 0)
407 return err;
408
409 err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA,
410 (hor_offs >> 8) & 0xff);
411 if (err < 0)
412 return err;
413
414 err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA, hor_offs & 0xff);
415 if (err < 0)
416 return err;
417
418 err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA,
419 ((width + hor_offs) >> 8) & 0xff);
420 if (err < 0)
421 return err;
422
423 err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA,
424 ((width + hor_offs) & 0xff));
425 if (err < 0)
426 return err;
427
428 switch (width) {
159 case 640: 429 case 640:
160 PDEBUG(D_V4L2, "Configuring camera for VGA mode"); 430 PDEBUG(D_V4L2, "Configuring camera for VGA mode");
161 431
162 for (i = 0; i < ARRAY_SIZE(VGA_ov9650) && !err; i++) { 432 data = OV9650_VGA_SELECT | OV9650_RGB_SELECT |
163 u8 data = VGA_ov9650[i][2]; 433 OV9650_RAW_RGB_SELECT;
164 if (VGA_ov9650[i][0] == SENSOR) 434 err = m5602_write_sensor(sd, OV9650_COM7, &data, 1);
165 err = m5602_write_sensor(sd,
166 VGA_ov9650[i][1], &data, 1);
167 else
168 err = m5602_write_bridge(sd, VGA_ov9650[i][1], data);
169 }
170 break; 435 break;
171 436
172 case 352: 437 case 352:
173 PDEBUG(D_V4L2, "Configuring camera for CIF mode"); 438 PDEBUG(D_V4L2, "Configuring camera for CIF mode");
174 439
175 for (i = 0; i < ARRAY_SIZE(CIF_ov9650) && !err; i++) { 440 data = OV9650_CIF_SELECT | OV9650_RGB_SELECT |
176 u8 data = CIF_ov9650[i][2]; 441 OV9650_RAW_RGB_SELECT;
177 if (CIF_ov9650[i][0] == SENSOR) 442 err = m5602_write_sensor(sd, OV9650_COM7, &data, 1);
178 err = m5602_write_sensor(sd,
179 CIF_ov9650[i][1], &data, 1);
180 else
181 err = m5602_write_bridge(sd, CIF_ov9650[i][1], data);
182 }
183 break; 443 break;
184 444
185 case 320: 445 case 320:
186 PDEBUG(D_V4L2, "Configuring camera for QVGA mode"); 446 PDEBUG(D_V4L2, "Configuring camera for QVGA mode");
187 447
188 for (i = 0; i < ARRAY_SIZE(QVGA_ov9650) && !err; i++) { 448 data = OV9650_QVGA_SELECT | OV9650_RGB_SELECT |
189 u8 data = QVGA_ov9650[i][2]; 449 OV9650_RAW_RGB_SELECT;
190 if (QVGA_ov9650[i][0] == SENSOR) 450 err = m5602_write_sensor(sd, OV9650_COM7, &data, 1);
191 err = m5602_write_sensor(sd, 451 break;
192 QVGA_ov9650[i][1], &data, 1); 452
193 else 453 case 176:
194 err = m5602_write_bridge(sd, QVGA_ov9650[i][1], data); 454 PDEBUG(D_V4L2, "Configuring camera for QCIF mode");
195 } 455
456 data = OV9650_QCIF_SELECT | OV9650_RGB_SELECT |
457 OV9650_RAW_RGB_SELECT;
458 err = m5602_write_sensor(sd, OV9650_COM7, &data, 1);
196 break; 459 break;
197 } 460 }
198 return err; 461 return err;
199} 462}
200 463
464int ov9650_stop(struct sd *sd)
465{
466 u8 data = OV9650_SOFT_SLEEP | OV9650_OUTPUT_DRIVE_2X;
467 return m5602_write_sensor(sd, OV9650_COM2, &data, 1);
468}
469
201int ov9650_power_down(struct sd *sd) 470int ov9650_power_down(struct sd *sd)
202{ 471{
203 int i, err = 0; 472 int i, err = 0;
@@ -214,76 +483,63 @@ int ov9650_power_down(struct sd *sd)
214 return err; 483 return err;
215} 484}
216 485
217int ov9650_get_exposure(struct gspca_dev *gspca_dev, __s32 *val) 486void ov9650_disconnect(struct sd *sd)
218{ 487{
219 struct sd *sd = (struct sd *) gspca_dev; 488 ov9650_stop(sd);
220 u8 i2c_data; 489 ov9650_power_down(sd);
221 int err;
222
223 err = m5602_read_sensor(sd, OV9650_COM1, &i2c_data, 1);
224 if (err < 0)
225 goto out;
226 *val = i2c_data & 0x03;
227 490
228 err = m5602_read_sensor(sd, OV9650_AECH, &i2c_data, 1); 491 sd->sensor = NULL;
229 if (err < 0) 492 kfree(sd->sensor_priv);
230 goto out; 493}
231 *val |= (i2c_data << 2);
232 494
233 err = m5602_read_sensor(sd, OV9650_AECHM, &i2c_data, 1); 495int ov9650_get_exposure(struct gspca_dev *gspca_dev, __s32 *val)
234 if (err < 0) 496{
235 goto out; 497 struct sd *sd = (struct sd *) gspca_dev;
236 *val |= (i2c_data & 0x3f) << 10; 498 s32 *sensor_settings = sd->sensor_priv;
237 499
500 *val = sensor_settings[EXPOSURE_IDX];
238 PDEBUG(D_V4L2, "Read exposure %d", *val); 501 PDEBUG(D_V4L2, "Read exposure %d", *val);
239out: 502 return 0;
240 return err;
241} 503}
242 504
243int ov9650_set_exposure(struct gspca_dev *gspca_dev, __s32 val) 505int ov9650_set_exposure(struct gspca_dev *gspca_dev, __s32 val)
244{ 506{
245 struct sd *sd = (struct sd *) gspca_dev; 507 struct sd *sd = (struct sd *) gspca_dev;
508 s32 *sensor_settings = sd->sensor_priv;
246 u8 i2c_data; 509 u8 i2c_data;
247 int err; 510 int err;
248 511
249 PDEBUG(D_V4L2, "Set exposure to %d", 512 PDEBUG(D_V4L2, "Set exposure to %d", val);
250 val & 0xffff);
251 513
514 sensor_settings[EXPOSURE_IDX] = val;
252 /* The 6 MSBs */ 515 /* The 6 MSBs */
253 i2c_data = (val >> 10) & 0x3f; 516 i2c_data = (val >> 10) & 0x3f;
254 err = m5602_write_sensor(sd, OV9650_AECHM, 517 err = m5602_write_sensor(sd, OV9650_AECHM,
255 &i2c_data, 1); 518 &i2c_data, 1);
256 if (err < 0) 519 if (err < 0)
257 goto out; 520 return err;
258 521
259 /* The 8 middle bits */ 522 /* The 8 middle bits */
260 i2c_data = (val >> 2) & 0xff; 523 i2c_data = (val >> 2) & 0xff;
261 err = m5602_write_sensor(sd, OV9650_AECH, 524 err = m5602_write_sensor(sd, OV9650_AECH,
262 &i2c_data, 1); 525 &i2c_data, 1);
263 if (err < 0) 526 if (err < 0)
264 goto out; 527 return err;
265 528
266 /* The 2 LSBs */ 529 /* The 2 LSBs */
267 i2c_data = val & 0x03; 530 i2c_data = val & 0x03;
268 err = m5602_write_sensor(sd, OV9650_COM1, &i2c_data, 1); 531 err = m5602_write_sensor(sd, OV9650_COM1, &i2c_data, 1);
269
270out:
271 return err; 532 return err;
272} 533}
273 534
274int ov9650_get_gain(struct gspca_dev *gspca_dev, __s32 *val) 535int ov9650_get_gain(struct gspca_dev *gspca_dev, __s32 *val)
275{ 536{
276 int err;
277 u8 i2c_data;
278 struct sd *sd = (struct sd *) gspca_dev; 537 struct sd *sd = (struct sd *) gspca_dev;
538 s32 *sensor_settings = sd->sensor_priv;
279 539
280 m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); 540 *val = sensor_settings[GAIN_IDX];
281 *val = (i2c_data & 0x03) << 8;
282
283 err = m5602_read_sensor(sd, OV9650_GAIN, &i2c_data, 1);
284 *val |= i2c_data;
285 PDEBUG(D_V4L2, "Read gain %d", *val); 541 PDEBUG(D_V4L2, "Read gain %d", *val);
286 return err; 542 return 0;
287} 543}
288 544
289int ov9650_set_gain(struct gspca_dev *gspca_dev, __s32 val) 545int ov9650_set_gain(struct gspca_dev *gspca_dev, __s32 val)
@@ -291,15 +547,25 @@ int ov9650_set_gain(struct gspca_dev *gspca_dev, __s32 val)
291 int err; 547 int err;
292 u8 i2c_data; 548 u8 i2c_data;
293 struct sd *sd = (struct sd *) gspca_dev; 549 struct sd *sd = (struct sd *) gspca_dev;
550 s32 *sensor_settings = sd->sensor_priv;
551
552 PDEBUG(D_V4L2, "Setting gain to %d", val);
553
554 sensor_settings[GAIN_IDX] = val;
294 555
295 /* The 2 MSB */ 556 /* The 2 MSB */
296 /* Read the OV9650_VREF register first to avoid 557 /* Read the OV9650_VREF register first to avoid
297 corrupting the VREF high and low bits */ 558 corrupting the VREF high and low bits */
298 m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); 559 err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1);
560 if (err < 0)
561 return err;
562
299 /* Mask away all uninteresting bits */ 563 /* Mask away all uninteresting bits */
300 i2c_data = ((val & 0x0300) >> 2) | 564 i2c_data = ((val & 0x0300) >> 2) |
301 (i2c_data & 0x3F); 565 (i2c_data & 0x3F);
302 err = m5602_write_sensor(sd, OV9650_VREF, &i2c_data, 1); 566 err = m5602_write_sensor(sd, OV9650_VREF, &i2c_data, 1);
567 if (err < 0)
568 return err;
303 569
304 /* The 8 LSBs */ 570 /* The 8 LSBs */
305 i2c_data = val & 0xff; 571 i2c_data = val & 0xff;
@@ -309,16 +575,12 @@ int ov9650_set_gain(struct gspca_dev *gspca_dev, __s32 val)
309 575
310int ov9650_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val) 576int ov9650_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val)
311{ 577{
312 int err;
313 u8 i2c_data;
314 struct sd *sd = (struct sd *) gspca_dev; 578 struct sd *sd = (struct sd *) gspca_dev;
579 s32 *sensor_settings = sd->sensor_priv;
315 580
316 err = m5602_read_sensor(sd, OV9650_RED, &i2c_data, 1); 581 *val = sensor_settings[RED_BALANCE_IDX];
317 *val = i2c_data;
318
319 PDEBUG(D_V4L2, "Read red gain %d", *val); 582 PDEBUG(D_V4L2, "Read red gain %d", *val);
320 583 return 0;
321 return err;
322} 584}
323 585
324int ov9650_set_red_balance(struct gspca_dev *gspca_dev, __s32 val) 586int ov9650_set_red_balance(struct gspca_dev *gspca_dev, __s32 val)
@@ -326,28 +588,26 @@ int ov9650_set_red_balance(struct gspca_dev *gspca_dev, __s32 val)
326 int err; 588 int err;
327 u8 i2c_data; 589 u8 i2c_data;
328 struct sd *sd = (struct sd *) gspca_dev; 590 struct sd *sd = (struct sd *) gspca_dev;
591 s32 *sensor_settings = sd->sensor_priv;
329 592
330 PDEBUG(D_V4L2, "Set red gain to %d", 593 PDEBUG(D_V4L2, "Set red gain to %d", val);
331 val & 0xff); 594
595 sensor_settings[RED_BALANCE_IDX] = val;
332 596
333 i2c_data = val & 0xff; 597 i2c_data = val & 0xff;
334 err = m5602_write_sensor(sd, OV9650_RED, &i2c_data, 1); 598 err = m5602_write_sensor(sd, OV9650_RED, &i2c_data, 1);
335
336 return err; 599 return err;
337} 600}
338 601
339int ov9650_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val) 602int ov9650_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val)
340{ 603{
341 int err;
342 u8 i2c_data;
343 struct sd *sd = (struct sd *) gspca_dev; 604 struct sd *sd = (struct sd *) gspca_dev;
605 s32 *sensor_settings = sd->sensor_priv;
344 606
345 err = m5602_read_sensor(sd, OV9650_BLUE, &i2c_data, 1); 607 *val = sensor_settings[BLUE_BALANCE_IDX];
346 *val = i2c_data;
347
348 PDEBUG(D_V4L2, "Read blue gain %d", *val); 608 PDEBUG(D_V4L2, "Read blue gain %d", *val);
349 609
350 return err; 610 return 0;
351} 611}
352 612
353int ov9650_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val) 613int ov9650_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val)
@@ -355,30 +615,25 @@ int ov9650_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val)
355 int err; 615 int err;
356 u8 i2c_data; 616 u8 i2c_data;
357 struct sd *sd = (struct sd *) gspca_dev; 617 struct sd *sd = (struct sd *) gspca_dev;
618 s32 *sensor_settings = sd->sensor_priv;
619
620 PDEBUG(D_V4L2, "Set blue gain to %d", val);
358 621
359 PDEBUG(D_V4L2, "Set blue gain to %d", 622 sensor_settings[BLUE_BALANCE_IDX] = val;
360 val & 0xff);
361 623
362 i2c_data = val & 0xff; 624 i2c_data = val & 0xff;
363 err = m5602_write_sensor(sd, OV9650_BLUE, &i2c_data, 1); 625 err = m5602_write_sensor(sd, OV9650_BLUE, &i2c_data, 1);
364
365 return err; 626 return err;
366} 627}
367 628
368int ov9650_get_hflip(struct gspca_dev *gspca_dev, __s32 *val) 629int ov9650_get_hflip(struct gspca_dev *gspca_dev, __s32 *val)
369{ 630{
370 int err;
371 u8 i2c_data;
372 struct sd *sd = (struct sd *) gspca_dev; 631 struct sd *sd = (struct sd *) gspca_dev;
632 s32 *sensor_settings = sd->sensor_priv;
373 633
374 err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); 634 *val = sensor_settings[HFLIP_IDX];
375 if (dmi_check_system(ov9650_flip_dmi_table))
376 *val = ((i2c_data & OV9650_HFLIP) >> 5) ? 0 : 1;
377 else
378 *val = (i2c_data & OV9650_HFLIP) >> 5;
379 PDEBUG(D_V4L2, "Read horizontal flip %d", *val); 635 PDEBUG(D_V4L2, "Read horizontal flip %d", *val);
380 636 return 0;
381 return err;
382} 637}
383 638
384int ov9650_set_hflip(struct gspca_dev *gspca_dev, __s32 val) 639int ov9650_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
@@ -386,38 +641,26 @@ int ov9650_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
386 int err; 641 int err;
387 u8 i2c_data; 642 u8 i2c_data;
388 struct sd *sd = (struct sd *) gspca_dev; 643 struct sd *sd = (struct sd *) gspca_dev;
644 s32 *sensor_settings = sd->sensor_priv;
389 645
390 PDEBUG(D_V4L2, "Set horizontal flip to %d", val); 646 PDEBUG(D_V4L2, "Set horizontal flip to %d", val);
391 err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1);
392 if (err < 0)
393 goto out;
394
395 if (dmi_check_system(ov9650_flip_dmi_table))
396 i2c_data = ((i2c_data & 0xdf) |
397 (((val ? 0 : 1) & 0x01) << 5));
398 else
399 i2c_data = ((i2c_data & 0xdf) |
400 ((val & 0x01) << 5));
401 647
648 sensor_settings[HFLIP_IDX] = val;
649 i2c_data = ((val & 0x01) << 5) | (sensor_settings[VFLIP_IDX] << 4);
402 err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1); 650 err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1);
403out: 651
404 return err; 652 return err;
405} 653}
406 654
407int ov9650_get_vflip(struct gspca_dev *gspca_dev, __s32 *val) 655int ov9650_get_vflip(struct gspca_dev *gspca_dev, __s32 *val)
408{ 656{
409 int err;
410 u8 i2c_data;
411 struct sd *sd = (struct sd *) gspca_dev; 657 struct sd *sd = (struct sd *) gspca_dev;
658 s32 *sensor_settings = sd->sensor_priv;
412 659
413 err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); 660 *val = sensor_settings[VFLIP_IDX];
414 if (dmi_check_system(ov9650_flip_dmi_table))
415 *val = ((i2c_data & 0x10) >> 4) ? 0 : 1;
416 else
417 *val = (i2c_data & 0x10) >> 4;
418 PDEBUG(D_V4L2, "Read vertical flip %d", *val); 661 PDEBUG(D_V4L2, "Read vertical flip %d", *val);
419 662
420 return err; 663 return 0;
421} 664}
422 665
423int ov9650_set_vflip(struct gspca_dev *gspca_dev, __s32 val) 666int ov9650_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
@@ -425,40 +668,32 @@ int ov9650_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
425 int err; 668 int err;
426 u8 i2c_data; 669 u8 i2c_data;
427 struct sd *sd = (struct sd *) gspca_dev; 670 struct sd *sd = (struct sd *) gspca_dev;
671 s32 *sensor_settings = sd->sensor_priv;
428 672
429 PDEBUG(D_V4L2, "Set vertical flip to %d", val); 673 PDEBUG(D_V4L2, "Set vertical flip to %d", val);
430 err = m5602_read_sensor(sd, OV9650_MVFP, &i2c_data, 1); 674 sensor_settings[VFLIP_IDX] = val;
675
676 i2c_data = ((val & 0x01) << 4) | (sensor_settings[VFLIP_IDX] << 5);
677 err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1);
431 if (err < 0) 678 if (err < 0)
432 goto out; 679 return err;
433 680
434 if (dmi_check_system(ov9650_flip_dmi_table)) 681 /* When vflip is toggled we need to readjust the bridge hsync/vsync */
435 i2c_data = ((i2c_data & 0xef) | 682 if (gspca_dev->streaming)
436 (((val ? 0 : 1) & 0x01) << 4)); 683 err = ov9650_start(sd);
437 else
438 i2c_data = ((i2c_data & 0xef) |
439 ((val & 0x01) << 4));
440 684
441 err = m5602_write_sensor(sd, OV9650_MVFP, &i2c_data, 1);
442out:
443 return err; 685 return err;
444} 686}
445 687
446int ov9650_get_brightness(struct gspca_dev *gspca_dev, __s32 *val) 688int ov9650_get_brightness(struct gspca_dev *gspca_dev, __s32 *val)
447{ 689{
448 int err;
449 u8 i2c_data;
450 struct sd *sd = (struct sd *) gspca_dev; 690 struct sd *sd = (struct sd *) gspca_dev;
691 s32 *sensor_settings = sd->sensor_priv;
451 692
452 err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); 693 *val = sensor_settings[GAIN_IDX];
453 if (err < 0)
454 goto out;
455 *val = (i2c_data & 0x03) << 8;
456
457 err = m5602_read_sensor(sd, OV9650_GAIN, &i2c_data, 1);
458 *val |= i2c_data;
459 PDEBUG(D_V4L2, "Read gain %d", *val); 694 PDEBUG(D_V4L2, "Read gain %d", *val);
460out: 695
461 return err; 696 return 0;
462} 697}
463 698
464int ov9650_set_brightness(struct gspca_dev *gspca_dev, __s32 val) 699int ov9650_set_brightness(struct gspca_dev *gspca_dev, __s32 val)
@@ -466,40 +701,38 @@ int ov9650_set_brightness(struct gspca_dev *gspca_dev, __s32 val)
466 int err; 701 int err;
467 u8 i2c_data; 702 u8 i2c_data;
468 struct sd *sd = (struct sd *) gspca_dev; 703 struct sd *sd = (struct sd *) gspca_dev;
704 s32 *sensor_settings = sd->sensor_priv;
469 705
470 PDEBUG(D_V4L2, "Set gain to %d", val & 0x3ff); 706 PDEBUG(D_V4L2, "Set gain to %d", val);
707
708 sensor_settings[GAIN_IDX] = val;
471 709
472 /* Read the OV9650_VREF register first to avoid 710 /* Read the OV9650_VREF register first to avoid
473 corrupting the VREF high and low bits */ 711 corrupting the VREF high and low bits */
474 err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1); 712 err = m5602_read_sensor(sd, OV9650_VREF, &i2c_data, 1);
475 if (err < 0) 713 if (err < 0)
476 goto out; 714 return err;
477 715
478 /* Mask away all uninteresting bits */ 716 /* Mask away all uninteresting bits */
479 i2c_data = ((val & 0x0300) >> 2) | (i2c_data & 0x3F); 717 i2c_data = ((val & 0x0300) >> 2) | (i2c_data & 0x3F);
480 err = m5602_write_sensor(sd, OV9650_VREF, &i2c_data, 1); 718 err = m5602_write_sensor(sd, OV9650_VREF, &i2c_data, 1);
481 if (err < 0) 719 if (err < 0)
482 goto out; 720 return err;
483 721
484 /* The 8 LSBs */ 722 /* The 8 LSBs */
485 i2c_data = val & 0xff; 723 i2c_data = val & 0xff;
486 err = m5602_write_sensor(sd, OV9650_GAIN, &i2c_data, 1); 724 err = m5602_write_sensor(sd, OV9650_GAIN, &i2c_data, 1);
487 725
488out:
489 return err; 726 return err;
490} 727}
491 728
492int ov9650_get_auto_white_balance(struct gspca_dev *gspca_dev, __s32 *val) 729int ov9650_get_auto_white_balance(struct gspca_dev *gspca_dev, __s32 *val)
493{ 730{
494 int err;
495 u8 i2c_data;
496 struct sd *sd = (struct sd *) gspca_dev; 731 struct sd *sd = (struct sd *) gspca_dev;
732 s32 *sensor_settings = sd->sensor_priv;
497 733
498 err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); 734 *val = sensor_settings[AUTO_WHITE_BALANCE_IDX];
499 *val = (i2c_data & OV9650_AWB_EN) >> 1; 735 return 0;
500 PDEBUG(D_V4L2, "Read auto white balance %d", *val);
501
502 return err;
503} 736}
504 737
505int ov9650_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val) 738int ov9650_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val)
@@ -507,29 +740,29 @@ int ov9650_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val)
507 int err; 740 int err;
508 u8 i2c_data; 741 u8 i2c_data;
509 struct sd *sd = (struct sd *) gspca_dev; 742 struct sd *sd = (struct sd *) gspca_dev;
743 s32 *sensor_settings = sd->sensor_priv;
510 744
511 PDEBUG(D_V4L2, "Set auto white balance to %d", val); 745 PDEBUG(D_V4L2, "Set auto white balance to %d", val);
746
747 sensor_settings[AUTO_WHITE_BALANCE_IDX] = val;
512 err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); 748 err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1);
513 if (err < 0) 749 if (err < 0)
514 goto out; 750 return err;
515 751
516 i2c_data = ((i2c_data & 0xfd) | ((val & 0x01) << 1)); 752 i2c_data = ((i2c_data & 0xfd) | ((val & 0x01) << 1));
517 err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1); 753 err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1);
518out: 754
519 return err; 755 return err;
520} 756}
521 757
522int ov9650_get_auto_gain(struct gspca_dev *gspca_dev, __s32 *val) 758int ov9650_get_auto_gain(struct gspca_dev *gspca_dev, __s32 *val)
523{ 759{
524 int err;
525 u8 i2c_data;
526 struct sd *sd = (struct sd *) gspca_dev; 760 struct sd *sd = (struct sd *) gspca_dev;
761 s32 *sensor_settings = sd->sensor_priv;
527 762
528 err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); 763 *val = sensor_settings[AUTO_GAIN_CTRL_IDX];
529 *val = (i2c_data & OV9650_AGC_EN) >> 2;
530 PDEBUG(D_V4L2, "Read auto gain control %d", *val); 764 PDEBUG(D_V4L2, "Read auto gain control %d", *val);
531 765 return 0;
532 return err;
533} 766}
534 767
535int ov9650_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val) 768int ov9650_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val)
@@ -537,15 +770,18 @@ int ov9650_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val)
537 int err; 770 int err;
538 u8 i2c_data; 771 u8 i2c_data;
539 struct sd *sd = (struct sd *) gspca_dev; 772 struct sd *sd = (struct sd *) gspca_dev;
773 s32 *sensor_settings = sd->sensor_priv;
540 774
541 PDEBUG(D_V4L2, "Set auto gain control to %d", val); 775 PDEBUG(D_V4L2, "Set auto gain control to %d", val);
776
777 sensor_settings[AUTO_GAIN_CTRL_IDX] = val;
542 err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1); 778 err = m5602_read_sensor(sd, OV9650_COM8, &i2c_data, 1);
543 if (err < 0) 779 if (err < 0)
544 goto out; 780 return err;
545 781
546 i2c_data = ((i2c_data & 0xfb) | ((val & 0x01) << 2)); 782 i2c_data = ((i2c_data & 0xfb) | ((val & 0x01) << 2));
547 err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1); 783 err = m5602_write_sensor(sd, OV9650_COM8, &i2c_data, 1);
548out: 784
549 return err; 785 return err;
550} 786}
551 787
diff --git a/drivers/media/video/gspca/m5602/m5602_ov9650.h b/drivers/media/video/gspca/m5602/m5602_ov9650.h
index f4b33b8e8dae..fcc54e4c0f4f 100644
--- a/drivers/media/video/gspca/m5602/m5602_ov9650.h
+++ b/drivers/media/video/gspca/m5602/m5602_ov9650.h
@@ -32,6 +32,7 @@
32#define OV9650_BAVE 0x05 32#define OV9650_BAVE 0x05
33#define OV9650_GEAVE 0x06 33#define OV9650_GEAVE 0x06
34#define OV9650_RSVD7 0x07 34#define OV9650_RSVD7 0x07
35#define OV9650_COM2 0x09
35#define OV9650_PID 0x0a 36#define OV9650_PID 0x0a
36#define OV9650_VER 0x0b 37#define OV9650_VER 0x0b
37#define OV9650_COM3 0x0c 38#define OV9650_COM3 0x0c
@@ -96,6 +97,7 @@
96#define OV9650_VGA_SELECT (1 << 6) 97#define OV9650_VGA_SELECT (1 << 6)
97#define OV9650_CIF_SELECT (1 << 5) 98#define OV9650_CIF_SELECT (1 << 5)
98#define OV9650_QVGA_SELECT (1 << 4) 99#define OV9650_QVGA_SELECT (1 << 4)
100#define OV9650_QCIF_SELECT (1 << 3)
99#define OV9650_RGB_SELECT (1 << 2) 101#define OV9650_RGB_SELECT (1 << 2)
100#define OV9650_RAW_RGB_SELECT (1 << 0) 102#define OV9650_RAW_RGB_SELECT (1 << 0)
101 103
@@ -115,10 +117,15 @@
115#define OV9650_VFLIP (1 << 4) 117#define OV9650_VFLIP (1 << 4)
116#define OV9650_HFLIP (1 << 5) 118#define OV9650_HFLIP (1 << 5)
117 119
120#define OV9650_SOFT_SLEEP (1 << 4)
121#define OV9650_OUTPUT_DRIVE_2X (1 << 0)
122
123#define OV9650_LEFT_OFFSET 0x62
124
118#define GAIN_DEFAULT 0x14 125#define GAIN_DEFAULT 0x14
119#define RED_GAIN_DEFAULT 0x70 126#define RED_GAIN_DEFAULT 0x70
120#define BLUE_GAIN_DEFAULT 0x20 127#define BLUE_GAIN_DEFAULT 0x20
121#define EXPOSURE_DEFAULT 0x5003 128#define EXPOSURE_DEFAULT 0x1ff
122 129
123/*****************************************************************************/ 130/*****************************************************************************/
124 131
@@ -129,7 +136,9 @@ extern int dump_sensor;
129int ov9650_probe(struct sd *sd); 136int ov9650_probe(struct sd *sd);
130int ov9650_init(struct sd *sd); 137int ov9650_init(struct sd *sd);
131int ov9650_start(struct sd *sd); 138int ov9650_start(struct sd *sd);
139int ov9650_stop(struct sd *sd);
132int ov9650_power_down(struct sd *sd); 140int ov9650_power_down(struct sd *sd);
141void ov9650_disconnect(struct sd *sd);
133 142
134int ov9650_set_exposure(struct gspca_dev *gspca_dev, __s32 val); 143int ov9650_set_exposure(struct gspca_dev *gspca_dev, __s32 val);
135int ov9650_get_exposure(struct gspca_dev *gspca_dev, __s32 *val); 144int ov9650_get_exposure(struct gspca_dev *gspca_dev, __s32 *val);
@@ -150,152 +159,16 @@ int ov9650_set_auto_white_balance(struct gspca_dev *gspca_dev, __s32 val);
150int ov9650_get_auto_gain(struct gspca_dev *gspca_dev, __s32 *val); 159int ov9650_get_auto_gain(struct gspca_dev *gspca_dev, __s32 *val);
151int ov9650_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val); 160int ov9650_set_auto_gain(struct gspca_dev *gspca_dev, __s32 val);
152 161
153static struct m5602_sensor ov9650 = { 162const static struct m5602_sensor ov9650 = {
154 .name = "OV9650", 163 .name = "OV9650",
155 .i2c_slave_id = 0x60, 164 .i2c_slave_id = 0x60,
156 .i2c_regW = 1, 165 .i2c_regW = 1,
157 .probe = ov9650_probe, 166 .probe = ov9650_probe,
158 .init = ov9650_init, 167 .init = ov9650_init,
159 .start = ov9650_start, 168 .start = ov9650_start,
169 .stop = ov9650_stop,
160 .power_down = ov9650_power_down, 170 .power_down = ov9650_power_down,
161 171 .disconnect = ov9650_disconnect,
162 .nctrls = 8,
163 .ctrls = {
164 {
165 {
166 .id = V4L2_CID_EXPOSURE,
167 .type = V4L2_CTRL_TYPE_INTEGER,
168 .name = "exposure",
169 .minimum = 0x00,
170 .maximum = 0xffff,
171 .step = 0x1,
172 .default_value = EXPOSURE_DEFAULT,
173 .flags = V4L2_CTRL_FLAG_SLIDER
174 },
175 .set = ov9650_set_exposure,
176 .get = ov9650_get_exposure
177 }, {
178 {
179 .id = V4L2_CID_GAIN,
180 .type = V4L2_CTRL_TYPE_INTEGER,
181 .name = "gain",
182 .minimum = 0x00,
183 .maximum = 0x3ff,
184 .step = 0x1,
185 .default_value = GAIN_DEFAULT,
186 .flags = V4L2_CTRL_FLAG_SLIDER
187 },
188 .set = ov9650_set_gain,
189 .get = ov9650_get_gain
190 }, {
191 {
192 .type = V4L2_CTRL_TYPE_INTEGER,
193 .name = "red balance",
194 .minimum = 0x00,
195 .maximum = 0xff,
196 .step = 0x1,
197 .default_value = RED_GAIN_DEFAULT,
198 .flags = V4L2_CTRL_FLAG_SLIDER
199 },
200 .set = ov9650_set_red_balance,
201 .get = ov9650_get_red_balance
202 }, {
203 {
204 .type = V4L2_CTRL_TYPE_INTEGER,
205 .name = "blue balance",
206 .minimum = 0x00,
207 .maximum = 0xff,
208 .step = 0x1,
209 .default_value = BLUE_GAIN_DEFAULT,
210 .flags = V4L2_CTRL_FLAG_SLIDER
211 },
212 .set = ov9650_set_blue_balance,
213 .get = ov9650_get_blue_balance
214 }, {
215 {
216 .id = V4L2_CID_HFLIP,
217 .type = V4L2_CTRL_TYPE_BOOLEAN,
218 .name = "horizontal flip",
219 .minimum = 0,
220 .maximum = 1,
221 .step = 1,
222 .default_value = 0
223 },
224 .set = ov9650_set_hflip,
225 .get = ov9650_get_hflip
226 }, {
227 {
228 .id = V4L2_CID_VFLIP,
229 .type = V4L2_CTRL_TYPE_BOOLEAN,
230 .name = "vertical flip",
231 .minimum = 0,
232 .maximum = 1,
233 .step = 1,
234 .default_value = 0
235 },
236 .set = ov9650_set_vflip,
237 .get = ov9650_get_vflip
238 }, {
239 {
240 .id = V4L2_CID_AUTO_WHITE_BALANCE,
241 .type = V4L2_CTRL_TYPE_BOOLEAN,
242 .name = "auto white balance",
243 .minimum = 0,
244 .maximum = 1,
245 .step = 1,
246 .default_value = 0
247 },
248 .set = ov9650_set_auto_white_balance,
249 .get = ov9650_get_auto_white_balance
250 }, {
251 {
252 .id = V4L2_CID_AUTOGAIN,
253 .type = V4L2_CTRL_TYPE_BOOLEAN,
254 .name = "auto gain control",
255 .minimum = 0,
256 .maximum = 1,
257 .step = 1,
258 .default_value = 0
259 },
260 .set = ov9650_set_auto_gain,
261 .get = ov9650_get_auto_gain
262 }
263 },
264
265 .nmodes = 3,
266 .modes = {
267 {
268 320,
269 240,
270 V4L2_PIX_FMT_SBGGR8,
271 V4L2_FIELD_NONE,
272 .sizeimage =
273 320 * 240,
274 .bytesperline = 320,
275 .colorspace = V4L2_COLORSPACE_SRGB,
276 .priv = 0
277 }, {
278 352,
279 288,
280 V4L2_PIX_FMT_SBGGR8,
281 V4L2_FIELD_NONE,
282 .sizeimage =
283 352 * 288,
284 .bytesperline = 352,
285 .colorspace = V4L2_COLORSPACE_SRGB,
286 .priv = 0
287 }, {
288 640,
289 480,
290 V4L2_PIX_FMT_SBGGR8,
291 V4L2_FIELD_NONE,
292 .sizeimage =
293 640 * 480,
294 .bytesperline = 640,
295 .colorspace = V4L2_COLORSPACE_SRGB,
296 .priv = 0
297 }
298 }
299}; 172};
300 173
301static const unsigned char preinit_ov9650[][3] = 174static const unsigned char preinit_ov9650[][3] =
@@ -345,6 +218,10 @@ static const unsigned char init_ov9650[][3] =
345 218
346 /* Reset chip */ 219 /* Reset chip */
347 {SENSOR, OV9650_COM7, OV9650_REGISTER_RESET}, 220 {SENSOR, OV9650_COM7, OV9650_REGISTER_RESET},
221 /* One extra reset is needed in order to make the sensor behave
222 properly when resuming from ram */
223 {SENSOR, OV9650_COM7, OV9650_REGISTER_RESET},
224
348 /* Enable double clock */ 225 /* Enable double clock */
349 {SENSOR, OV9650_CLKRC, 0x80}, 226 {SENSOR, OV9650_CLKRC, 0x80},
350 /* Do something out of spec with the power */ 227 /* Do something out of spec with the power */
@@ -427,18 +304,12 @@ static const unsigned char init_ov9650[][3] =
427 /* Enable denoise, and white-pixel erase */ 304 /* Enable denoise, and white-pixel erase */
428 {SENSOR, OV9650_COM22, 0x23}, 305 {SENSOR, OV9650_COM22, 0x23},
429 306
430 /* Set the high bits of the exposure value */
431 {SENSOR, OV9650_AECH, ((EXPOSURE_DEFAULT & 0xff00) >> 8)},
432
433 /* Enable VARIOPIXEL */ 307 /* Enable VARIOPIXEL */
434 {SENSOR, OV9650_COM3, OV9650_VARIOPIXEL}, 308 {SENSOR, OV9650_COM3, OV9650_VARIOPIXEL},
435 {SENSOR, OV9650_COM4, OV9650_QVGA_VARIOPIXEL}, 309 {SENSOR, OV9650_COM4, OV9650_QVGA_VARIOPIXEL},
436 310
437 /* Set the low bits of the exposure value */ 311 /* Put the sensor in soft sleep mode */
438 {SENSOR, OV9650_COM1, (EXPOSURE_DEFAULT & 0xff)}, 312 {SENSOR, OV9650_COM2, OV9650_SOFT_SLEEP | OV9650_OUTPUT_DRIVE_2X},
439 {SENSOR, OV9650_GAIN, GAIN_DEFAULT},
440 {SENSOR, OV9650_BLUE, BLUE_GAIN_DEFAULT},
441 {SENSOR, OV9650_RED, RED_GAIN_DEFAULT},
442}; 313};
443 314
444static const unsigned char power_down_ov9650[][3] = 315static const unsigned char power_down_ov9650[][3] =
@@ -461,73 +332,15 @@ static const unsigned char power_down_ov9650[][3] =
461 {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0}, 332 {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
462}; 333};
463 334
464static const unsigned char res_init_ov9650[][2] = 335static const unsigned char res_init_ov9650[][3] =
465{
466 {M5602_XB_LINE_OF_FRAME_H, 0x82},
467 {M5602_XB_LINE_OF_FRAME_L, 0x00},
468 {M5602_XB_PIX_OF_LINE_H, 0x82},
469 {M5602_XB_PIX_OF_LINE_L, 0x00},
470 {M5602_XB_SIG_INI, 0x01}
471};
472
473static const unsigned char VGA_ov9650[][3] =
474{ 336{
475 /* Moves the view window in a vertical orientation */ 337 {SENSOR, OV9650_COM2, OV9650_OUTPUT_DRIVE_2X},
476 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
477 {BRIDGE, M5602_XB_VSYNC_PARA, 0x09},
478 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
479 {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
480 {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0}, /* 480 */
481 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
482 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
483 {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
484 {BRIDGE, M5602_XB_HSYNC_PARA, 0x62}, /* 98 */
485 {BRIDGE, M5602_XB_HSYNC_PARA, 0x02}, /* 640 + 98 */
486 {BRIDGE, M5602_XB_HSYNC_PARA, 0xe2},
487
488 {SENSOR, OV9650_COM7, OV9650_VGA_SELECT |
489 OV9650_RGB_SELECT |
490 OV9650_RAW_RGB_SELECT},
491};
492 338
493static const unsigned char CIF_ov9650[][3] = 339 {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x82},
494{ 340 {BRIDGE, M5602_XB_LINE_OF_FRAME_L, 0x00},
495 /* Moves the view window in a vertical orientation */ 341 {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},
496 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00}, 342 {BRIDGE, M5602_XB_PIX_OF_LINE_L, 0x00},
497 {BRIDGE, M5602_XB_VSYNC_PARA, 0x09}, 343 {BRIDGE, M5602_XB_SIG_INI, 0x01}
498 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
499 {BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
500 {BRIDGE, M5602_XB_VSYNC_PARA, 0x20}, /* 288 */
501 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
502 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
503 {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
504 {BRIDGE, M5602_XB_HSYNC_PARA, 0x62}, /* 98 */
505 {BRIDGE, M5602_XB_HSYNC_PARA, 0x01}, /* 352 + 98 */
506 {BRIDGE, M5602_XB_HSYNC_PARA, 0xc2},
507
508 {SENSOR, OV9650_COM7, OV9650_CIF_SELECT |
509 OV9650_RGB_SELECT |
510 OV9650_RAW_RGB_SELECT},
511};
512
513static const unsigned char QVGA_ov9650[][3] =
514{
515 /* Moves the view window in a vertical orientation */
516 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
517 {BRIDGE, M5602_XB_VSYNC_PARA, 0x08},
518 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
519 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
520 {BRIDGE, M5602_XB_VSYNC_PARA, 0xf0}, /* 240 */
521 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
522 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
523 {BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
524 {BRIDGE, M5602_XB_HSYNC_PARA, 0x31}, /* 50 */
525 {BRIDGE, M5602_XB_HSYNC_PARA, 0x01}, /* 320 + 50 */
526 {BRIDGE, M5602_XB_HSYNC_PARA, 0x71},
527
528 {SENSOR, OV9650_COM7, OV9650_QVGA_SELECT |
529 OV9650_RGB_SELECT |
530 OV9650_RAW_RGB_SELECT},
531}; 344};
532 345
533#endif 346#endif
diff --git a/drivers/media/video/gspca/m5602/m5602_po1030.c b/drivers/media/video/gspca/m5602/m5602_po1030.c
index 2e7fb91673cf..eaddf488bad1 100644
--- a/drivers/media/video/gspca/m5602/m5602_po1030.c
+++ b/drivers/media/video/gspca/m5602/m5602_po1030.c
@@ -18,6 +18,99 @@
18 18
19#include "m5602_po1030.h" 19#include "m5602_po1030.h"
20 20
21static struct v4l2_pix_format po1030_modes[] = {
22 {
23 640,
24 480,
25 V4L2_PIX_FMT_SBGGR8,
26 V4L2_FIELD_NONE,
27 .sizeimage = 640 * 480,
28 .bytesperline = 640,
29 .colorspace = V4L2_COLORSPACE_SRGB,
30 .priv = 0
31 }
32};
33
34const static struct ctrl po1030_ctrls[] = {
35 {
36 {
37 .id = V4L2_CID_GAIN,
38 .type = V4L2_CTRL_TYPE_INTEGER,
39 .name = "gain",
40 .minimum = 0x00,
41 .maximum = 0x4f,
42 .step = 0x1,
43 .default_value = PO1030_GLOBAL_GAIN_DEFAULT,
44 .flags = V4L2_CTRL_FLAG_SLIDER
45 },
46 .set = po1030_set_gain,
47 .get = po1030_get_gain
48 }, {
49 {
50 .id = V4L2_CID_EXPOSURE,
51 .type = V4L2_CTRL_TYPE_INTEGER,
52 .name = "exposure",
53 .minimum = 0x00,
54 .maximum = 0x02ff,
55 .step = 0x1,
56 .default_value = PO1030_EXPOSURE_DEFAULT,
57 .flags = V4L2_CTRL_FLAG_SLIDER
58 },
59 .set = po1030_set_exposure,
60 .get = po1030_get_exposure
61 }, {
62 {
63 .id = V4L2_CID_RED_BALANCE,
64 .type = V4L2_CTRL_TYPE_INTEGER,
65 .name = "red balance",
66 .minimum = 0x00,
67 .maximum = 0xff,
68 .step = 0x1,
69 .default_value = PO1030_RED_GAIN_DEFAULT,
70 .flags = V4L2_CTRL_FLAG_SLIDER
71 },
72 .set = po1030_set_red_balance,
73 .get = po1030_get_red_balance
74 }, {
75 {
76 .id = V4L2_CID_BLUE_BALANCE,
77 .type = V4L2_CTRL_TYPE_INTEGER,
78 .name = "blue balance",
79 .minimum = 0x00,
80 .maximum = 0xff,
81 .step = 0x1,
82 .default_value = PO1030_BLUE_GAIN_DEFAULT,
83 .flags = V4L2_CTRL_FLAG_SLIDER
84 },
85 .set = po1030_set_blue_balance,
86 .get = po1030_get_blue_balance
87 }, {
88 {
89 .id = V4L2_CID_HFLIP,
90 .type = V4L2_CTRL_TYPE_BOOLEAN,
91 .name = "horizontal flip",
92 .minimum = 0,
93 .maximum = 1,
94 .step = 1,
95 .default_value = 0,
96 },
97 .set = po1030_set_hflip,
98 .get = po1030_get_hflip
99 }, {
100 {
101 .id = V4L2_CID_VFLIP,
102 .type = V4L2_CTRL_TYPE_BOOLEAN,
103 .name = "vertical flip",
104 .minimum = 0,
105 .maximum = 1,
106 .step = 1,
107 .default_value = 0,
108 },
109 .set = po1030_set_vflip,
110 .get = po1030_get_vflip
111 }
112};
113
21static void po1030_dump_registers(struct sd *sd); 114static void po1030_dump_registers(struct sd *sd);
22 115
23int po1030_probe(struct sd *sd) 116int po1030_probe(struct sd *sd)
@@ -59,10 +152,10 @@ int po1030_probe(struct sd *sd)
59 return -ENODEV; 152 return -ENODEV;
60 153
61sensor_found: 154sensor_found:
62 sd->gspca_dev.cam.cam_mode = po1030.modes; 155 sd->gspca_dev.cam.cam_mode = po1030_modes;
63 sd->gspca_dev.cam.nmodes = po1030.nmodes; 156 sd->gspca_dev.cam.nmodes = ARRAY_SIZE(po1030_modes);
64 sd->desc->ctrls = po1030.ctrls; 157 sd->desc->ctrls = po1030_ctrls;
65 sd->desc->nctrls = po1030.nctrls; 158 sd->desc->nctrls = ARRAY_SIZE(po1030_ctrls);
66 return 0; 159 return 0;
67} 160}
68 161
@@ -108,7 +201,7 @@ int po1030_get_exposure(struct gspca_dev *gspca_dev, __s32 *val)
108 err = m5602_read_sensor(sd, PO1030_REG_INTEGLINES_H, 201 err = m5602_read_sensor(sd, PO1030_REG_INTEGLINES_H,
109 &i2c_data, 1); 202 &i2c_data, 1);
110 if (err < 0) 203 if (err < 0)
111 goto out; 204 return err;
112 *val = (i2c_data << 8); 205 *val = (i2c_data << 8);
113 206
114 err = m5602_read_sensor(sd, PO1030_REG_INTEGLINES_M, 207 err = m5602_read_sensor(sd, PO1030_REG_INTEGLINES_M,
@@ -116,7 +209,7 @@ int po1030_get_exposure(struct gspca_dev *gspca_dev, __s32 *val)
116 *val |= i2c_data; 209 *val |= i2c_data;
117 210
118 PDEBUG(D_V4L2, "Exposure read as %d", *val); 211 PDEBUG(D_V4L2, "Exposure read as %d", *val);
119out: 212
120 return err; 213 return err;
121} 214}
122 215
@@ -135,7 +228,7 @@ int po1030_set_exposure(struct gspca_dev *gspca_dev, __s32 val)
135 err = m5602_write_sensor(sd, PO1030_REG_INTEGLINES_H, 228 err = m5602_write_sensor(sd, PO1030_REG_INTEGLINES_H,
136 &i2c_data, 1); 229 &i2c_data, 1);
137 if (err < 0) 230 if (err < 0)
138 goto out; 231 return err;
139 232
140 i2c_data = (val & 0xff); 233 i2c_data = (val & 0xff);
141 PDEBUG(D_V4L2, "Set exposure to low byte to 0x%x", 234 PDEBUG(D_V4L2, "Set exposure to low byte to 0x%x",
@@ -143,7 +236,6 @@ int po1030_set_exposure(struct gspca_dev *gspca_dev, __s32 val)
143 err = m5602_write_sensor(sd, PO1030_REG_INTEGLINES_M, 236 err = m5602_write_sensor(sd, PO1030_REG_INTEGLINES_M,
144 &i2c_data, 1); 237 &i2c_data, 1);
145 238
146out:
147 return err; 239 return err;
148} 240}
149 241
@@ -186,14 +278,13 @@ int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
186 PDEBUG(D_V4L2, "Set hflip %d", val); 278 PDEBUG(D_V4L2, "Set hflip %d", val);
187 err = m5602_read_sensor(sd, PO1030_REG_CONTROL2, &i2c_data, 1); 279 err = m5602_read_sensor(sd, PO1030_REG_CONTROL2, &i2c_data, 1);
188 if (err < 0) 280 if (err < 0)
189 goto out; 281 return err;
190 282
191 i2c_data = (0x7f & i2c_data) | ((val & 0x01) << 7); 283 i2c_data = (0x7f & i2c_data) | ((val & 0x01) << 7);
192 284
193 err = m5602_write_sensor(sd, PO1030_REG_CONTROL2, 285 err = m5602_write_sensor(sd, PO1030_REG_CONTROL2,
194 &i2c_data, 1); 286 &i2c_data, 1);
195 287
196out:
197 return err; 288 return err;
198} 289}
199 290
@@ -222,14 +313,13 @@ int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
222 PDEBUG(D_V4L2, "Set vflip %d", val); 313 PDEBUG(D_V4L2, "Set vflip %d", val);
223 err = m5602_read_sensor(sd, PO1030_REG_CONTROL2, &i2c_data, 1); 314 err = m5602_read_sensor(sd, PO1030_REG_CONTROL2, &i2c_data, 1);
224 if (err < 0) 315 if (err < 0)
225 goto out; 316 return err;
226 317
227 i2c_data = (i2c_data & 0xbf) | ((val & 0x01) << 6); 318 i2c_data = (i2c_data & 0xbf) | ((val & 0x01) << 6);
228 319
229 err = m5602_write_sensor(sd, PO1030_REG_CONTROL2, 320 err = m5602_write_sensor(sd, PO1030_REG_CONTROL2,
230 &i2c_data, 1); 321 &i2c_data, 1);
231 322
232out:
233 return err; 323 return err;
234} 324}
235 325
diff --git a/drivers/media/video/gspca/m5602/m5602_po1030.h b/drivers/media/video/gspca/m5602/m5602_po1030.h
index def39d5bcec6..c10b12335818 100644
--- a/drivers/media/video/gspca/m5602/m5602_po1030.h
+++ b/drivers/media/video/gspca/m5602/m5602_po1030.h
@@ -141,7 +141,7 @@ int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
141int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val); 141int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val);
142int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val); 142int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val);
143 143
144static struct m5602_sensor po1030 = { 144static const struct m5602_sensor po1030 = {
145 .name = "PO1030", 145 .name = "PO1030",
146 146
147 .i2c_slave_id = 0xdc, 147 .i2c_slave_id = 0xdc,
@@ -150,102 +150,6 @@ static struct m5602_sensor po1030 = {
150 .probe = po1030_probe, 150 .probe = po1030_probe,
151 .init = po1030_init, 151 .init = po1030_init,
152 .power_down = po1030_power_down, 152 .power_down = po1030_power_down,
153
154 .nctrls = 6,
155 .ctrls = {
156 {
157 {
158 .id = V4L2_CID_GAIN,
159 .type = V4L2_CTRL_TYPE_INTEGER,
160 .name = "gain",
161 .minimum = 0x00,
162 .maximum = 0x4f,
163 .step = 0x1,
164 .default_value = PO1030_GLOBAL_GAIN_DEFAULT,
165 .flags = V4L2_CTRL_FLAG_SLIDER
166 },
167 .set = po1030_set_gain,
168 .get = po1030_get_gain
169 }, {
170 {
171 .id = V4L2_CID_EXPOSURE,
172 .type = V4L2_CTRL_TYPE_INTEGER,
173 .name = "exposure",
174 .minimum = 0x00,
175 .maximum = 0x02ff,
176 .step = 0x1,
177 .default_value = PO1030_EXPOSURE_DEFAULT,
178 .flags = V4L2_CTRL_FLAG_SLIDER
179 },
180 .set = po1030_set_exposure,
181 .get = po1030_get_exposure
182 }, {
183 {
184 .id = V4L2_CID_RED_BALANCE,
185 .type = V4L2_CTRL_TYPE_INTEGER,
186 .name = "red balance",
187 .minimum = 0x00,
188 .maximum = 0xff,
189 .step = 0x1,
190 .default_value = PO1030_RED_GAIN_DEFAULT,
191 .flags = V4L2_CTRL_FLAG_SLIDER
192 },
193 .set = po1030_set_red_balance,
194 .get = po1030_get_red_balance
195 }, {
196 {
197 .id = V4L2_CID_BLUE_BALANCE,
198 .type = V4L2_CTRL_TYPE_INTEGER,
199 .name = "blue balance",
200 .minimum = 0x00,
201 .maximum = 0xff,
202 .step = 0x1,
203 .default_value = PO1030_BLUE_GAIN_DEFAULT,
204 .flags = V4L2_CTRL_FLAG_SLIDER
205 },
206 .set = po1030_set_blue_balance,
207 .get = po1030_get_blue_balance
208 }, {
209 {
210 .id = V4L2_CID_HFLIP,
211 .type = V4L2_CTRL_TYPE_BOOLEAN,
212 .name = "horizontal flip",
213 .minimum = 0,
214 .maximum = 1,
215 .step = 1,
216 .default_value = 0,
217 },
218 .set = po1030_set_hflip,
219 .get = po1030_get_hflip
220 }, {
221 {
222 .id = V4L2_CID_VFLIP,
223 .type = V4L2_CTRL_TYPE_BOOLEAN,
224 .name = "vertical flip",
225 .minimum = 0,
226 .maximum = 1,
227 .step = 1,
228 .default_value = 0,
229 },
230 .set = po1030_set_vflip,
231 .get = po1030_get_vflip
232 }
233 },
234
235 .nmodes = 1,
236 .modes = {
237 {
238 M5602_DEFAULT_FRAME_WIDTH,
239 M5602_DEFAULT_FRAME_HEIGHT,
240 V4L2_PIX_FMT_SBGGR8,
241 V4L2_FIELD_NONE,
242 .sizeimage =
243 M5602_DEFAULT_FRAME_WIDTH * M5602_DEFAULT_FRAME_HEIGHT,
244 .bytesperline = M5602_DEFAULT_FRAME_WIDTH,
245 .colorspace = V4L2_COLORSPACE_SRGB,
246 .priv = 1
247 }
248 }
249}; 153};
250 154
251static const unsigned char preinit_po1030[][3] = 155static const unsigned char preinit_po1030[][3] =
diff --git a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
index 48892b5715d5..4306d596056d 100644
--- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
@@ -50,6 +50,76 @@ static
50 { } 50 { }
51}; 51};
52 52
53static struct v4l2_pix_format s5k4aa_modes[] = {
54 {
55 640,
56 480,
57 V4L2_PIX_FMT_SBGGR8,
58 V4L2_FIELD_NONE,
59 .sizeimage =
60 640 * 480,
61 .bytesperline = 640,
62 .colorspace = V4L2_COLORSPACE_SRGB,
63 .priv = 0
64 }
65};
66
67const static struct ctrl s5k4aa_ctrls[] = {
68 {
69 {
70 .id = V4L2_CID_VFLIP,
71 .type = V4L2_CTRL_TYPE_BOOLEAN,
72 .name = "vertical flip",
73 .minimum = 0,
74 .maximum = 1,
75 .step = 1,
76 .default_value = 0
77 },
78 .set = s5k4aa_set_vflip,
79 .get = s5k4aa_get_vflip
80
81 }, {
82 {
83 .id = V4L2_CID_HFLIP,
84 .type = V4L2_CTRL_TYPE_BOOLEAN,
85 .name = "horizontal flip",
86 .minimum = 0,
87 .maximum = 1,
88 .step = 1,
89 .default_value = 0
90 },
91 .set = s5k4aa_set_hflip,
92 .get = s5k4aa_get_hflip
93
94 }, {
95 {
96 .id = V4L2_CID_GAIN,
97 .type = V4L2_CTRL_TYPE_INTEGER,
98 .name = "Gain",
99 .minimum = 0,
100 .maximum = 127,
101 .step = 1,
102 .default_value = 0xa0,
103 .flags = V4L2_CTRL_FLAG_SLIDER
104 },
105 .set = s5k4aa_set_gain,
106 .get = s5k4aa_get_gain
107 }, {
108 {
109 .id = V4L2_CID_EXPOSURE,
110 .type = V4L2_CTRL_TYPE_INTEGER,
111 .name = "Exposure",
112 .minimum = 13,
113 .maximum = 0xfff,
114 .step = 1,
115 .default_value = 0x100,
116 .flags = V4L2_CTRL_FLAG_SLIDER
117 },
118 .set = s5k4aa_set_exposure,
119 .get = s5k4aa_get_exposure
120 }
121};
122
53static void s5k4aa_dump_registers(struct sd *sd); 123static void s5k4aa_dump_registers(struct sd *sd);
54 124
55int s5k4aa_probe(struct sd *sd) 125int s5k4aa_probe(struct sd *sd)
@@ -115,14 +185,56 @@ int s5k4aa_probe(struct sd *sd)
115 info("Detected a s5k4aa sensor"); 185 info("Detected a s5k4aa sensor");
116 186
117sensor_found: 187sensor_found:
118 sd->gspca_dev.cam.cam_mode = s5k4aa.modes; 188 sd->gspca_dev.cam.cam_mode = s5k4aa_modes;
119 sd->gspca_dev.cam.nmodes = s5k4aa.nmodes; 189 sd->gspca_dev.cam.nmodes = ARRAY_SIZE(s5k4aa_modes);
120 sd->desc->ctrls = s5k4aa.ctrls; 190 sd->desc->ctrls = s5k4aa_ctrls;
121 sd->desc->nctrls = s5k4aa.nctrls; 191 sd->desc->nctrls = ARRAY_SIZE(s5k4aa_ctrls);
122
123 return 0; 192 return 0;
124} 193}
125 194
195int s5k4aa_start(struct sd *sd)
196{
197 int i, err = 0;
198 u8 data[2];
199 struct cam *cam = &sd->gspca_dev.cam;
200
201 switch (cam->cam_mode[sd->gspca_dev.curr_mode].width)
202 {
203 case 640:
204 PDEBUG(D_V4L2, "Configuring camera for VGA mode");
205
206 for (i = 0; i < ARRAY_SIZE(VGA_s5k4aa); i++) {
207 switch (VGA_s5k4aa[i][0]) {
208 case BRIDGE:
209 err = m5602_write_bridge(sd,
210 VGA_s5k4aa[i][1],
211 VGA_s5k4aa[i][2]);
212 break;
213
214 case SENSOR:
215 data[0] = VGA_s5k4aa[i][2];
216 err = m5602_write_sensor(sd,
217 VGA_s5k4aa[i][1],
218 data, 1);
219 break;
220
221 case SENSOR_LONG:
222 data[0] = VGA_s5k4aa[i][2];
223 data[1] = VGA_s5k4aa[i][3];
224 err = m5602_write_sensor(sd,
225 VGA_s5k4aa[i][1],
226 data, 2);
227 break;
228
229 default:
230 err("Invalid stream command, exiting init");
231 return -EINVAL;
232 }
233 }
234 }
235 return err;
236}
237
126int s5k4aa_init(struct sd *sd) 238int s5k4aa_init(struct sd *sd)
127{ 239{
128 int i, err = 0; 240 int i, err = 0;
@@ -194,17 +306,17 @@ int s5k4aa_get_exposure(struct gspca_dev *gspca_dev, __s32 *val)
194 306
195 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 307 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
196 if (err < 0) 308 if (err < 0)
197 goto out; 309 return err;
198 310
199 err = m5602_read_sensor(sd, S5K4AA_EXPOSURE_HI, &data, 1); 311 err = m5602_read_sensor(sd, S5K4AA_EXPOSURE_HI, &data, 1);
200 if (err < 0) 312 if (err < 0)
201 goto out; 313 return err;
202 314
203 *val = data << 8; 315 *val = data << 8;
204 err = m5602_read_sensor(sd, S5K4AA_EXPOSURE_LO, &data, 1); 316 err = m5602_read_sensor(sd, S5K4AA_EXPOSURE_LO, &data, 1);
205 *val |= data; 317 *val |= data;
206 PDEBUG(D_V4L2, "Read exposure %d", *val); 318 PDEBUG(D_V4L2, "Read exposure %d", *val);
207out: 319
208 return err; 320 return err;
209} 321}
210 322
@@ -217,14 +329,14 @@ int s5k4aa_set_exposure(struct gspca_dev *gspca_dev, __s32 val)
217 PDEBUG(D_V4L2, "Set exposure to %d", val); 329 PDEBUG(D_V4L2, "Set exposure to %d", val);
218 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 330 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
219 if (err < 0) 331 if (err < 0)
220 goto out; 332 return err;
221 data = (val >> 8) & 0xff; 333 data = (val >> 8) & 0xff;
222 err = m5602_write_sensor(sd, S5K4AA_EXPOSURE_HI, &data, 1); 334 err = m5602_write_sensor(sd, S5K4AA_EXPOSURE_HI, &data, 1);
223 if (err < 0) 335 if (err < 0)
224 goto out; 336 return err;
225 data = val & 0xff; 337 data = val & 0xff;
226 err = m5602_write_sensor(sd, S5K4AA_EXPOSURE_LO, &data, 1); 338 err = m5602_write_sensor(sd, S5K4AA_EXPOSURE_LO, &data, 1);
227out: 339
228 return err; 340 return err;
229} 341}
230 342
@@ -236,13 +348,12 @@ int s5k4aa_get_vflip(struct gspca_dev *gspca_dev, __s32 *val)
236 348
237 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 349 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
238 if (err < 0) 350 if (err < 0)
239 goto out; 351 return err;
240 352
241 err = m5602_read_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 353 err = m5602_read_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
242 *val = (data & S5K4AA_RM_V_FLIP) >> 7; 354 *val = (data & S5K4AA_RM_V_FLIP) >> 7;
243 PDEBUG(D_V4L2, "Read vertical flip %d", *val); 355 PDEBUG(D_V4L2, "Read vertical flip %d", *val);
244 356
245out:
246 return err; 357 return err;
247} 358}
248 359
@@ -255,32 +366,32 @@ int s5k4aa_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
255 PDEBUG(D_V4L2, "Set vertical flip to %d", val); 366 PDEBUG(D_V4L2, "Set vertical flip to %d", val);
256 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 367 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
257 if (err < 0) 368 if (err < 0)
258 goto out; 369 return err;
259 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1); 370 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1);
260 if (err < 0) 371 if (err < 0)
261 goto out; 372 return err;
262 data = ((data & ~S5K4AA_RM_V_FLIP) 373 data = ((data & ~S5K4AA_RM_V_FLIP)
263 | ((val & 0x01) << 7)); 374 | ((val & 0x01) << 7));
264 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1); 375 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1);
265 if (err < 0) 376 if (err < 0)
266 goto out; 377 return err;
267 378
268 if (val) { 379 if (val) {
269 err = m5602_read_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1); 380 err = m5602_read_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1);
270 if (err < 0) 381 if (err < 0)
271 goto out; 382 return err;
272 383
273 data++; 384 data++;
274 err = m5602_write_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1); 385 err = m5602_write_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1);
275 } else { 386 } else {
276 err = m5602_read_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1); 387 err = m5602_read_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1);
277 if (err < 0) 388 if (err < 0)
278 goto out; 389 return err;
279 390
280 data--; 391 data--;
281 err = m5602_write_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1); 392 err = m5602_write_sensor(sd, S5K4AA_ROWSTART_LO, &data, 1);
282 } 393 }
283out: 394
284 return err; 395 return err;
285} 396}
286 397
@@ -292,12 +403,12 @@ int s5k4aa_get_hflip(struct gspca_dev *gspca_dev, __s32 *val)
292 403
293 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 404 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
294 if (err < 0) 405 if (err < 0)
295 goto out; 406 return err;
296 407
297 err = m5602_read_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 408 err = m5602_read_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
298 *val = (data & S5K4AA_RM_H_FLIP) >> 6; 409 *val = (data & S5K4AA_RM_H_FLIP) >> 6;
299 PDEBUG(D_V4L2, "Read horizontal flip %d", *val); 410 PDEBUG(D_V4L2, "Read horizontal flip %d", *val);
300out: 411
301 return err; 412 return err;
302} 413}
303 414
@@ -311,32 +422,32 @@ int s5k4aa_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
311 val); 422 val);
312 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 423 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
313 if (err < 0) 424 if (err < 0)
314 goto out; 425 return err;
315 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1); 426 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1);
316 if (err < 0) 427 if (err < 0)
317 goto out; 428 return err;
318 429
319 data = ((data & ~S5K4AA_RM_H_FLIP) | ((val & 0x01) << 6)); 430 data = ((data & ~S5K4AA_RM_H_FLIP) | ((val & 0x01) << 6));
320 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1); 431 err = m5602_write_sensor(sd, S5K4AA_READ_MODE, &data, 1);
321 if (err < 0) 432 if (err < 0)
322 goto out; 433 return err;
323 434
324 if (val) { 435 if (val) {
325 err = m5602_read_sensor(sd, S5K4AA_COLSTART_LO, &data, 1); 436 err = m5602_read_sensor(sd, S5K4AA_COLSTART_LO, &data, 1);
326 if (err < 0) 437 if (err < 0)
327 goto out; 438 return err;
328 data++; 439 data++;
329 err = m5602_write_sensor(sd, S5K4AA_COLSTART_LO, &data, 1); 440 err = m5602_write_sensor(sd, S5K4AA_COLSTART_LO, &data, 1);
330 if (err < 0) 441 if (err < 0)
331 goto out; 442 return err;
332 } else { 443 } else {
333 err = m5602_read_sensor(sd, S5K4AA_COLSTART_LO, &data, 1); 444 err = m5602_read_sensor(sd, S5K4AA_COLSTART_LO, &data, 1);
334 if (err < 0) 445 if (err < 0)
335 goto out; 446 return err;
336 data--; 447 data--;
337 err = m5602_write_sensor(sd, S5K4AA_COLSTART_LO, &data, 1); 448 err = m5602_write_sensor(sd, S5K4AA_COLSTART_LO, &data, 1);
338 } 449 }
339out: 450
340 return err; 451 return err;
341} 452}
342 453
@@ -348,13 +459,12 @@ int s5k4aa_get_gain(struct gspca_dev *gspca_dev, __s32 *val)
348 459
349 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 460 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
350 if (err < 0) 461 if (err < 0)
351 goto out; 462 return err;
352 463
353 err = m5602_read_sensor(sd, S5K4AA_GAIN_2, &data, 1); 464 err = m5602_read_sensor(sd, S5K4AA_GAIN_2, &data, 1);
354 *val = data; 465 *val = data;
355 PDEBUG(D_V4L2, "Read gain %d", *val); 466 PDEBUG(D_V4L2, "Read gain %d", *val);
356 467
357out:
358 return err; 468 return err;
359} 469}
360 470
@@ -367,12 +477,11 @@ int s5k4aa_set_gain(struct gspca_dev *gspca_dev, __s32 val)
367 PDEBUG(D_V4L2, "Set gain to %d", val); 477 PDEBUG(D_V4L2, "Set gain to %d", val);
368 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1); 478 err = m5602_write_sensor(sd, S5K4AA_PAGE_MAP, &data, 1);
369 if (err < 0) 479 if (err < 0)
370 goto out; 480 return err;
371 481
372 data = val & 0xff; 482 data = val & 0xff;
373 err = m5602_write_sensor(sd, S5K4AA_GAIN_2, &data, 1); 483 err = m5602_write_sensor(sd, S5K4AA_GAIN_2, &data, 1);
374 484
375out:
376 return err; 485 return err;
377} 486}
378 487
diff --git a/drivers/media/video/gspca/m5602/m5602_s5k4aa.h b/drivers/media/video/gspca/m5602/m5602_s5k4aa.h
index 1f88b0d040c4..ca854d4f9475 100644
--- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.h
+++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.h
@@ -65,6 +65,7 @@ extern int dump_sensor;
65 65
66int s5k4aa_probe(struct sd *sd); 66int s5k4aa_probe(struct sd *sd);
67int s5k4aa_init(struct sd *sd); 67int s5k4aa_init(struct sd *sd);
68int s5k4aa_start(struct sd *sd);
68int s5k4aa_power_down(struct sd *sd); 69int s5k4aa_power_down(struct sd *sd);
69 70
70int s5k4aa_get_exposure(struct gspca_dev *gspca_dev, __s32 *val); 71int s5k4aa_get_exposure(struct gspca_dev *gspca_dev, __s32 *val);
@@ -76,84 +77,14 @@ int s5k4aa_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
76int s5k4aa_get_gain(struct gspca_dev *gspca_dev, __s32 *val); 77int s5k4aa_get_gain(struct gspca_dev *gspca_dev, __s32 *val);
77int s5k4aa_set_gain(struct gspca_dev *gspca_dev, __s32 val); 78int s5k4aa_set_gain(struct gspca_dev *gspca_dev, __s32 val);
78 79
79static struct m5602_sensor s5k4aa = { 80static const struct m5602_sensor s5k4aa = {
80 .name = "S5K4AA", 81 .name = "S5K4AA",
81 .probe = s5k4aa_probe, 82 .probe = s5k4aa_probe,
82 .init = s5k4aa_init, 83 .init = s5k4aa_init,
84 .start = s5k4aa_start,
83 .power_down = s5k4aa_power_down, 85 .power_down = s5k4aa_power_down,
84 .i2c_slave_id = 0x5a, 86 .i2c_slave_id = 0x5a,
85 .i2c_regW = 2, 87 .i2c_regW = 2,
86 .nctrls = 4,
87 .ctrls = {
88 {
89 {
90 .id = V4L2_CID_VFLIP,
91 .type = V4L2_CTRL_TYPE_BOOLEAN,
92 .name = "vertical flip",
93 .minimum = 0,
94 .maximum = 1,
95 .step = 1,
96 .default_value = 0
97 },
98 .set = s5k4aa_set_vflip,
99 .get = s5k4aa_get_vflip
100
101 }, {
102 {
103 .id = V4L2_CID_HFLIP,
104 .type = V4L2_CTRL_TYPE_BOOLEAN,
105 .name = "horizontal flip",
106 .minimum = 0,
107 .maximum = 1,
108 .step = 1,
109 .default_value = 0
110 },
111 .set = s5k4aa_set_hflip,
112 .get = s5k4aa_get_hflip
113
114 }, {
115 {
116 .id = V4L2_CID_GAIN,
117 .type = V4L2_CTRL_TYPE_INTEGER,
118 .name = "Gain",
119 .minimum = 0,
120 .maximum = 127,
121 .step = 1,
122 .default_value = 0xa0,
123 .flags = V4L2_CTRL_FLAG_SLIDER
124 },
125 .set = s5k4aa_set_gain,
126 .get = s5k4aa_get_gain
127 }, {
128 {
129 .id = V4L2_CID_EXPOSURE,
130 .type = V4L2_CTRL_TYPE_INTEGER,
131 .name = "Exposure",
132 .minimum = 13,
133 .maximum = 0xfff,
134 .step = 1,
135 .default_value = 0x100,
136 .flags = V4L2_CTRL_FLAG_SLIDER
137 },
138 .set = s5k4aa_set_exposure,
139 .get = s5k4aa_get_exposure
140 }
141 },
142
143 .nmodes = 1,
144 .modes = {
145 {
146 M5602_DEFAULT_FRAME_WIDTH,
147 M5602_DEFAULT_FRAME_HEIGHT,
148 V4L2_PIX_FMT_SBGGR8,
149 V4L2_FIELD_NONE,
150 .sizeimage =
151 M5602_DEFAULT_FRAME_WIDTH * M5602_DEFAULT_FRAME_HEIGHT,
152 .bytesperline = M5602_DEFAULT_FRAME_WIDTH,
153 .colorspace = V4L2_COLORSPACE_SRGB,
154 .priv = 1
155 }
156 }
157}; 88};
158 89
159static const unsigned char preinit_s5k4aa[][4] = 90static const unsigned char preinit_s5k4aa[][4] =
@@ -329,4 +260,63 @@ static const unsigned char init_s5k4aa[][4] =
329 {SENSOR, S5K4AA_GAIN_2, 0xa0, 0x00} 260 {SENSOR, S5K4AA_GAIN_2, 0xa0, 0x00}
330}; 261};
331 262
263static const unsigned char VGA_s5k4aa[][4] =
264{
265 {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x06, 0x00},
266 {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0, 0x00},
267 {BRIDGE, M5602_XB_ADC_CTRL, 0xc0, 0x00},
268 {BRIDGE, M5602_XB_SENSOR_TYPE, 0x08, 0x00},
269 {BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x81, 0x00},
270 {BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82, 0x00},
271 {BRIDGE, M5602_XB_SIG_INI, 0x01, 0x00},
272 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
273 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
274 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
275 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
276 /* VSYNC_PARA, VSYNC_PARA : img height 480 = 0x01e0 */
277 {BRIDGE, M5602_XB_VSYNC_PARA, 0x01, 0x00},
278 {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0, 0x00},
279 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
280 {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
281 {BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
282 {BRIDGE, M5602_XB_SIG_INI, 0x02, 0x00},
283 {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
284 {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
285 /* HSYNC_PARA, HSYNC_PARA : img width 640 = 0x0280 */
286 {BRIDGE, M5602_XB_HSYNC_PARA, 0x02, 0x00},
287 {BRIDGE, M5602_XB_HSYNC_PARA, 0x80, 0x00},
288 {BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
289 {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
290 {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xa0, 0x00}, /* 48 MHz */
291
292 {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
293 {SENSOR, S5K4AA_READ_MODE, S5K4AA_RM_H_FLIP | S5K4AA_RM_ROW_SKIP_2X
294 | S5K4AA_RM_COL_SKIP_2X, 0x00},
295 /* 0x37 : Fix image stability when light is too bright and improves
296 * image quality in 640x480, but worsens it in 1280x1024 */
297 {SENSOR, 0x37, 0x01, 0x00},
298 /* ROWSTART_HI, ROWSTART_LO : 10 + (1024-960)/2 = 42 = 0x002a */
299 {SENSOR, S5K4AA_ROWSTART_HI, 0x00, 0x00},
300 {SENSOR, S5K4AA_ROWSTART_LO, 0x2a, 0x00},
301 {SENSOR, S5K4AA_COLSTART_HI, 0x00, 0x00},
302 {SENSOR, S5K4AA_COLSTART_LO, 0x0c, 0x00},
303 /* window_height_hi, window_height_lo : 960 = 0x03c0 */
304 {SENSOR, S5K4AA_WINDOW_HEIGHT_HI, 0x03, 0x00},
305 {SENSOR, S5K4AA_WINDOW_HEIGHT_LO, 0xc0, 0x00},
306 /* window_width_hi, window_width_lo : 1280 = 0x0500 */
307 {SENSOR, S5K4AA_WINDOW_WIDTH_HI, 0x05, 0x00},
308 {SENSOR, S5K4AA_WINDOW_WIDTH_LO, 0x00, 0x00},
309 {SENSOR, S5K4AA_H_BLANK_HI__, 0x00, 0x00},
310 {SENSOR, S5K4AA_H_BLANK_LO__, 0xa8, 0x00}, /* helps to sync... */
311 {SENSOR, S5K4AA_EXPOSURE_HI, 0x01, 0x00},
312 {SENSOR, S5K4AA_EXPOSURE_LO, 0x00, 0x00},
313 {SENSOR, 0x11, 0x04, 0x00},
314 {SENSOR, 0x12, 0xc3, 0x00},
315 {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
316 {SENSOR, 0x02, 0x0e, 0x00},
317 {SENSOR_LONG, S5K4AA_GLOBAL_GAIN__, 0x0f, 0x00},
318 {SENSOR, S5K4AA_GAIN_1, 0x0b, 0x00},
319 {SENSOR, S5K4AA_GAIN_2, 0xa0, 0x00}
320};
321
332#endif 322#endif
diff --git a/drivers/media/video/gspca/m5602/m5602_s5k83a.c b/drivers/media/video/gspca/m5602/m5602_s5k83a.c
index ccea4a758464..42c86aa4dc8d 100644
--- a/drivers/media/video/gspca/m5602/m5602_s5k83a.c
+++ b/drivers/media/video/gspca/m5602/m5602_s5k83a.c
@@ -18,6 +18,88 @@
18 18
19#include "m5602_s5k83a.h" 19#include "m5602_s5k83a.h"
20 20
21static struct v4l2_pix_format s5k83a_modes[] = {
22 {
23 640,
24 480,
25 V4L2_PIX_FMT_SBGGR8,
26 V4L2_FIELD_NONE,
27 .sizeimage =
28 640 * 480,
29 .bytesperline = 640,
30 .colorspace = V4L2_COLORSPACE_SRGB,
31 .priv = 0
32 }
33};
34
35const static struct ctrl s5k83a_ctrls[] = {
36 {
37 {
38 .id = V4L2_CID_BRIGHTNESS,
39 .type = V4L2_CTRL_TYPE_INTEGER,
40 .name = "brightness",
41 .minimum = 0x00,
42 .maximum = 0xff,
43 .step = 0x01,
44 .default_value = S5K83A_DEFAULT_BRIGHTNESS,
45 .flags = V4L2_CTRL_FLAG_SLIDER
46 },
47 .set = s5k83a_set_brightness,
48 .get = s5k83a_get_brightness
49
50 }, {
51 {
52 .id = V4L2_CID_WHITENESS,
53 .type = V4L2_CTRL_TYPE_INTEGER,
54 .name = "whiteness",
55 .minimum = 0x00,
56 .maximum = 0xff,
57 .step = 0x01,
58 .default_value = S5K83A_DEFAULT_WHITENESS,
59 .flags = V4L2_CTRL_FLAG_SLIDER
60 },
61 .set = s5k83a_set_whiteness,
62 .get = s5k83a_get_whiteness,
63 }, {
64 {
65 .id = V4L2_CID_GAIN,
66 .type = V4L2_CTRL_TYPE_INTEGER,
67 .name = "gain",
68 .minimum = 0x00,
69 .maximum = S5K83A_MAXIMUM_GAIN,
70 .step = 0x01,
71 .default_value = S5K83A_DEFAULT_GAIN,
72 .flags = V4L2_CTRL_FLAG_SLIDER
73 },
74 .set = s5k83a_set_gain,
75 .get = s5k83a_get_gain
76 }, {
77 {
78 .id = V4L2_CID_HFLIP,
79 .type = V4L2_CTRL_TYPE_BOOLEAN,
80 .name = "horizontal flip",
81 .minimum = 0,
82 .maximum = 1,
83 .step = 1,
84 .default_value = 0
85 },
86 .set = s5k83a_set_hflip,
87 .get = s5k83a_get_hflip
88 }, {
89 {
90 .id = V4L2_CID_VFLIP,
91 .type = V4L2_CTRL_TYPE_BOOLEAN,
92 .name = "vertical flip",
93 .minimum = 0,
94 .maximum = 1,
95 .step = 1,
96 .default_value = 0
97 },
98 .set = s5k83a_set_vflip,
99 .get = s5k83a_get_vflip
100 }
101};
102
21static void s5k83a_dump_registers(struct sd *sd); 103static void s5k83a_dump_registers(struct sd *sd);
22 104
23int s5k83a_probe(struct sd *sd) 105int s5k83a_probe(struct sd *sd)
@@ -63,10 +145,10 @@ int s5k83a_probe(struct sd *sd)
63 info("Detected a s5k83a sensor"); 145 info("Detected a s5k83a sensor");
64 146
65sensor_found: 147sensor_found:
66 sd->gspca_dev.cam.cam_mode = s5k83a.modes; 148 sd->gspca_dev.cam.cam_mode = s5k83a_modes;
67 sd->gspca_dev.cam.nmodes = s5k83a.nmodes; 149 sd->gspca_dev.cam.nmodes = ARRAY_SIZE(s5k83a_modes);
68 sd->desc->ctrls = s5k83a.ctrls; 150 sd->desc->ctrls = s5k83a_ctrls;
69 sd->desc->nctrls = s5k83a.nctrls; 151 sd->desc->nctrls = ARRAY_SIZE(s5k83a_ctrls);
70 return 0; 152 return 0;
71} 153}
72 154
@@ -108,6 +190,16 @@ int s5k83a_init(struct sd *sd)
108 return (err < 0) ? err : 0; 190 return (err < 0) ? err : 0;
109} 191}
110 192
193int s5k83a_start(struct sd *sd)
194{
195 return s5k83a_set_led_indication(sd, 1);
196}
197
198int s5k83a_stop(struct sd *sd)
199{
200 return s5k83a_set_led_indication(sd, 0);
201}
202
111int s5k83a_power_down(struct sd *sd) 203int s5k83a_power_down(struct sd *sd)
112{ 204{
113 return 0; 205 return 0;
@@ -163,12 +255,11 @@ int s5k83a_get_brightness(struct gspca_dev *gspca_dev, __s32 *val)
163 255
164 err = m5602_read_sensor(sd, S5K83A_BRIGHTNESS, data, 2); 256 err = m5602_read_sensor(sd, S5K83A_BRIGHTNESS, data, 2);
165 if (err < 0) 257 if (err < 0)
166 goto out; 258 return err;
167 259
168 data[1] = data[1] << 1; 260 data[1] = data[1] << 1;
169 *val = data[1]; 261 *val = data[1];
170 262
171out:
172 return err; 263 return err;
173} 264}
174 265
@@ -182,13 +273,13 @@ int s5k83a_set_brightness(struct gspca_dev *gspca_dev, __s32 val)
182 data[1] = 0x20; 273 data[1] = 0x20;
183 err = m5602_write_sensor(sd, 0x14, data, 2); 274 err = m5602_write_sensor(sd, 0x14, data, 2);
184 if (err < 0) 275 if (err < 0)
185 goto out; 276 return err;
186 277
187 data[0] = 0x01; 278 data[0] = 0x01;
188 data[1] = 0x00; 279 data[1] = 0x00;
189 err = m5602_write_sensor(sd, 0x0d, data, 2); 280 err = m5602_write_sensor(sd, 0x0d, data, 2);
190 if (err < 0) 281 if (err < 0)
191 goto out; 282 return err;
192 283
193 /* FIXME: This is not sane, we need to figure out the composition 284 /* FIXME: This is not sane, we need to figure out the composition
194 of these registers */ 285 of these registers */
@@ -196,7 +287,6 @@ int s5k83a_set_brightness(struct gspca_dev *gspca_dev, __s32 val)
196 data[1] = val >> 1; /* brightness, high 7 bits */ 287 data[1] = val >> 1; /* brightness, high 7 bits */
197 err = m5602_write_sensor(sd, S5K83A_BRIGHTNESS, data, 2); 288 err = m5602_write_sensor(sd, S5K83A_BRIGHTNESS, data, 2);
198 289
199out:
200 return err; 290 return err;
201} 291}
202 292
@@ -208,11 +298,10 @@ int s5k83a_get_whiteness(struct gspca_dev *gspca_dev, __s32 *val)
208 298
209 err = m5602_read_sensor(sd, S5K83A_WHITENESS, &data, 1); 299 err = m5602_read_sensor(sd, S5K83A_WHITENESS, &data, 1);
210 if (err < 0) 300 if (err < 0)
211 goto out; 301 return err;
212 302
213 *val = data; 303 *val = data;
214 304
215out:
216 return err; 305 return err;
217} 306}
218 307
@@ -236,7 +325,7 @@ int s5k83a_get_gain(struct gspca_dev *gspca_dev, __s32 *val)
236 325
237 err = m5602_read_sensor(sd, S5K83A_GAIN, data, 2); 326 err = m5602_read_sensor(sd, S5K83A_GAIN, data, 2);
238 if (err < 0) 327 if (err < 0)
239 goto out; 328 return err;
240 329
241 data[1] = data[1] & 0x3f; 330 data[1] = data[1] & 0x3f;
242 if (data[1] > S5K83A_MAXIMUM_GAIN) 331 if (data[1] > S5K83A_MAXIMUM_GAIN)
@@ -244,7 +333,6 @@ int s5k83a_get_gain(struct gspca_dev *gspca_dev, __s32 *val)
244 333
245 *val = data[1]; 334 *val = data[1];
246 335
247out:
248 return err; 336 return err;
249} 337}
250 338
@@ -269,12 +357,11 @@ int s5k83a_get_vflip(struct gspca_dev *gspca_dev, __s32 *val)
269 data[0] = 0x05; 357 data[0] = 0x05;
270 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1); 358 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1);
271 if (err < 0) 359 if (err < 0)
272 goto out; 360 return err;
273 361
274 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1); 362 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1);
275 *val = (data[0] | 0x40) ? 1 : 0; 363 *val = (data[0] | 0x40) ? 1 : 0;
276 364
277out:
278 return err; 365 return err;
279} 366}
280 367
@@ -287,23 +374,22 @@ int s5k83a_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
287 data[0] = 0x05; 374 data[0] = 0x05;
288 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1); 375 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1);
289 if (err < 0) 376 if (err < 0)
290 goto out; 377 return err;
291 378
292 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1); 379 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1);
293 if (err < 0) 380 if (err < 0)
294 goto out; 381 return err;
295 382
296 /* set or zero six bit, seven is hflip */ 383 /* set or zero six bit, seven is hflip */
297 data[0] = (val) ? (data[0] & 0x80) | 0x40 | S5K83A_FLIP_MASK 384 data[0] = (val) ? (data[0] & 0x80) | 0x40 | S5K83A_FLIP_MASK
298 : (data[0] & 0x80) | S5K83A_FLIP_MASK; 385 : (data[0] & 0x80) | S5K83A_FLIP_MASK;
299 err = m5602_write_sensor(sd, S5K83A_FLIP, data, 1); 386 err = m5602_write_sensor(sd, S5K83A_FLIP, data, 1);
300 if (err < 0) 387 if (err < 0)
301 goto out; 388 return err;
302 389
303 data[0] = (val) ? 0x0b : 0x0a; 390 data[0] = (val) ? 0x0b : 0x0a;
304 err = m5602_write_sensor(sd, S5K83A_VFLIP_TUNE, data, 1); 391 err = m5602_write_sensor(sd, S5K83A_VFLIP_TUNE, data, 1);
305 392
306out:
307 return err; 393 return err;
308} 394}
309 395
@@ -316,12 +402,11 @@ int s5k83a_get_hflip(struct gspca_dev *gspca_dev, __s32 *val)
316 data[0] = 0x05; 402 data[0] = 0x05;
317 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1); 403 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1);
318 if (err < 0) 404 if (err < 0)
319 goto out; 405 return err;
320 406
321 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1); 407 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1);
322 *val = (data[0] | 0x80) ? 1 : 0; 408 *val = (data[0] | 0x80) ? 1 : 0;
323 409
324out:
325 return err; 410 return err;
326} 411}
327 412
@@ -334,21 +419,40 @@ int s5k83a_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
334 data[0] = 0x05; 419 data[0] = 0x05;
335 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1); 420 err = m5602_write_sensor(sd, S5K83A_PAGE_MAP, data, 1);
336 if (err < 0) 421 if (err < 0)
337 goto out; 422 return err;
338 423
339 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1); 424 err = m5602_read_sensor(sd, S5K83A_FLIP, data, 1);
340 if (err < 0) 425 if (err < 0)
341 goto out; 426 return err;
342 427
343 /* set or zero seven bit, six is vflip */ 428 /* set or zero seven bit, six is vflip */
344 data[0] = (val) ? (data[0] & 0x40) | 0x80 | S5K83A_FLIP_MASK 429 data[0] = (val) ? (data[0] & 0x40) | 0x80 | S5K83A_FLIP_MASK
345 : (data[0] & 0x40) | S5K83A_FLIP_MASK; 430 : (data[0] & 0x40) | S5K83A_FLIP_MASK;
346 err = m5602_write_sensor(sd, S5K83A_FLIP, data, 1); 431 err = m5602_write_sensor(sd, S5K83A_FLIP, data, 1);
347 if (err < 0) 432 if (err < 0)
348 goto out; 433 return err;
349 434
350 data[0] = (val) ? 0x0a : 0x0b; 435 data[0] = (val) ? 0x0a : 0x0b;
351 err = m5602_write_sensor(sd, S5K83A_HFLIP_TUNE, data, 1); 436 err = m5602_write_sensor(sd, S5K83A_HFLIP_TUNE, data, 1);
352out: 437
353 return err; 438 return err;
354} 439}
440
441int s5k83a_set_led_indication(struct sd *sd, u8 val)
442{
443 int err = 0;
444 u8 data[1];
445
446 err = m5602_read_bridge(sd, M5602_XB_GPIO_DAT, data);
447 if (err < 0)
448 return err;
449
450 if (val)
451 data[0] = data[0] | S5K83A_GPIO_LED_MASK;
452 else
453 data[0] = data[0] & ~S5K83A_GPIO_LED_MASK;
454
455 err = m5602_write_bridge(sd, M5602_XB_GPIO_DAT, data[0]);
456
457 return (err < 0) ? err : 0;
458}
diff --git a/drivers/media/video/gspca/m5602/m5602_s5k83a.h b/drivers/media/video/gspca/m5602/m5602_s5k83a.h
index 05ccb5b57a88..819ab25272be 100644
--- a/drivers/media/video/gspca/m5602/m5602_s5k83a.h
+++ b/drivers/media/video/gspca/m5602/m5602_s5k83a.h
@@ -34,7 +34,7 @@
34#define S5K83A_DEFAULT_GAIN 0x00 34#define S5K83A_DEFAULT_GAIN 0x00
35#define S5K83A_MAXIMUM_GAIN 0x3c 35#define S5K83A_MAXIMUM_GAIN 0x3c
36#define S5K83A_FLIP_MASK 0x10 36#define S5K83A_FLIP_MASK 0x10
37 37#define S5K83A_GPIO_LED_MASK 0x10
38 38
39/*****************************************************************************/ 39/*****************************************************************************/
40 40
@@ -44,8 +44,12 @@ extern int dump_sensor;
44 44
45int s5k83a_probe(struct sd *sd); 45int s5k83a_probe(struct sd *sd);
46int s5k83a_init(struct sd *sd); 46int s5k83a_init(struct sd *sd);
47int s5k83a_start(struct sd *sd);
48int s5k83a_stop(struct sd *sd);
47int s5k83a_power_down(struct sd *sd); 49int s5k83a_power_down(struct sd *sd);
48 50
51int s5k83a_set_led_indication(struct sd *sd, u8 val);
52
49int s5k83a_set_brightness(struct gspca_dev *gspca_dev, __s32 val); 53int s5k83a_set_brightness(struct gspca_dev *gspca_dev, __s32 val);
50int s5k83a_get_brightness(struct gspca_dev *gspca_dev, __s32 *val); 54int s5k83a_get_brightness(struct gspca_dev *gspca_dev, __s32 *val);
51int s5k83a_set_whiteness(struct gspca_dev *gspca_dev, __s32 val); 55int s5k83a_set_whiteness(struct gspca_dev *gspca_dev, __s32 val);
@@ -57,95 +61,15 @@ int s5k83a_set_vflip(struct gspca_dev *gspca_dev, __s32 val);
57int s5k83a_get_hflip(struct gspca_dev *gspca_dev, __s32 *val); 61int s5k83a_get_hflip(struct gspca_dev *gspca_dev, __s32 *val);
58int s5k83a_set_hflip(struct gspca_dev *gspca_dev, __s32 val); 62int s5k83a_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
59 63
60static struct m5602_sensor s5k83a = { 64static const struct m5602_sensor s5k83a = {
61 .name = "S5K83A", 65 .name = "S5K83A",
62 .probe = s5k83a_probe, 66 .probe = s5k83a_probe,
63 .init = s5k83a_init, 67 .init = s5k83a_init,
68 .start = s5k83a_start,
69 .stop = s5k83a_stop,
64 .power_down = s5k83a_power_down, 70 .power_down = s5k83a_power_down,
65 .i2c_slave_id = 0x5a, 71 .i2c_slave_id = 0x5a,
66 .i2c_regW = 2, 72 .i2c_regW = 2,
67 .nctrls = 5,
68 .ctrls = {
69 {
70 {
71 .id = V4L2_CID_BRIGHTNESS,
72 .type = V4L2_CTRL_TYPE_INTEGER,
73 .name = "brightness",
74 .minimum = 0x00,
75 .maximum = 0xff,
76 .step = 0x01,
77 .default_value = S5K83A_DEFAULT_BRIGHTNESS,
78 .flags = V4L2_CTRL_FLAG_SLIDER
79 },
80 .set = s5k83a_set_brightness,
81 .get = s5k83a_get_brightness
82
83 }, {
84 {
85 .id = V4L2_CID_WHITENESS,
86 .type = V4L2_CTRL_TYPE_INTEGER,
87 .name = "whiteness",
88 .minimum = 0x00,
89 .maximum = 0xff,
90 .step = 0x01,
91 .default_value = S5K83A_DEFAULT_WHITENESS,
92 .flags = V4L2_CTRL_FLAG_SLIDER
93 },
94 .set = s5k83a_set_whiteness,
95 .get = s5k83a_get_whiteness,
96 }, {
97 {
98 .id = V4L2_CID_GAIN,
99 .type = V4L2_CTRL_TYPE_INTEGER,
100 .name = "gain",
101 .minimum = 0x00,
102 .maximum = S5K83A_MAXIMUM_GAIN,
103 .step = 0x01,
104 .default_value = S5K83A_DEFAULT_GAIN,
105 .flags = V4L2_CTRL_FLAG_SLIDER
106 },
107 .set = s5k83a_set_gain,
108 .get = s5k83a_get_gain
109 }, {
110 {
111 .id = V4L2_CID_HFLIP,
112 .type = V4L2_CTRL_TYPE_BOOLEAN,
113 .name = "horizontal flip",
114 .minimum = 0,
115 .maximum = 1,
116 .step = 1,
117 .default_value = 0
118 },
119 .set = s5k83a_set_hflip,
120 .get = s5k83a_get_hflip
121 }, {
122 {
123 .id = V4L2_CID_VFLIP,
124 .type = V4L2_CTRL_TYPE_BOOLEAN,
125 .name = "vertical flip",
126 .minimum = 0,
127 .maximum = 1,
128 .step = 1,
129 .default_value = 0
130 },
131 .set = s5k83a_set_vflip,
132 .get = s5k83a_get_vflip
133 }
134 },
135 .nmodes = 1,
136 .modes = {
137 {
138 M5602_DEFAULT_FRAME_WIDTH,
139 M5602_DEFAULT_FRAME_HEIGHT,
140 V4L2_PIX_FMT_SBGGR8,
141 V4L2_FIELD_NONE,
142 .sizeimage =
143 M5602_DEFAULT_FRAME_WIDTH * M5602_DEFAULT_FRAME_HEIGHT,
144 .bytesperline = M5602_DEFAULT_FRAME_WIDTH,
145 .colorspace = V4L2_COLORSPACE_SRGB,
146 .priv = 1
147 }
148 }
149}; 73};
150 74
151static const unsigned char preinit_s5k83a[][4] = 75static const unsigned char preinit_s5k83a[][4] =
@@ -381,7 +305,7 @@ static const unsigned char init_s5k83a[][4] =
381 {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00}, 305 {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
382 {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xf0, 0x00}, 306 {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xf0, 0x00},
383 {BRIDGE, M5602_XB_GPIO_DIR, 0x1d, 0x00}, 307 {BRIDGE, M5602_XB_GPIO_DIR, 0x1d, 0x00},
384 {BRIDGE, M5602_XB_GPIO_DAT, 0x1c, 0x00}, 308 {BRIDGE, M5602_XB_GPIO_DAT, 0x08, 0x00},
385 {BRIDGE, M5602_XB_GPIO_EN_H, 0x06, 0x00}, 309 {BRIDGE, M5602_XB_GPIO_EN_H, 0x06, 0x00},
386 {BRIDGE, M5602_XB_GPIO_DIR_H, 0x06, 0x00}, 310 {BRIDGE, M5602_XB_GPIO_DIR_H, 0x06, 0x00},
387 {BRIDGE, M5602_XB_GPIO_DAT_H, 0x00, 0x00}, 311 {BRIDGE, M5602_XB_GPIO_DAT_H, 0x00, 0x00},
diff --git a/drivers/media/video/gspca/m5602/m5602_sensor.h b/drivers/media/video/gspca/m5602/m5602_sensor.h
index 261623f0da48..0d3026936f2e 100644
--- a/drivers/media/video/gspca/m5602/m5602_sensor.h
+++ b/drivers/media/video/gspca/m5602/m5602_sensor.h
@@ -21,11 +21,6 @@
21 21
22#include "m5602_bridge.h" 22#include "m5602_bridge.h"
23 23
24#define M5602_DEFAULT_FRAME_WIDTH 640
25#define M5602_DEFAULT_FRAME_HEIGHT 480
26
27#define M5602_MAX_CTRLS (V4L2_CID_LASTP1 - V4L2_CID_BASE + 10)
28
29/* Enumerates all supported sensors */ 24/* Enumerates all supported sensors */
30enum sensors { 25enum sensors {
31 OV9650_SENSOR = 1, 26 OV9650_SENSOR = 1,
@@ -61,14 +56,14 @@ struct m5602_sensor {
61 /* Executed when the camera starts to send data */ 56 /* Executed when the camera starts to send data */
62 int (*start)(struct sd *sd); 57 int (*start)(struct sd *sd);
63 58
64 /* Performs a power down sequence */ 59 /* Executed when the camera ends to send data */
65 int (*power_down)(struct sd *sd); 60 int (*stop)(struct sd *sd);
66 61
67 int nctrls; 62 /* Executed when the device is disconnected */
68 struct ctrl ctrls[M5602_MAX_CTRLS]; 63 void (*disconnect)(struct sd *sd);
69 64
70 char nmodes; 65 /* Performs a power down sequence */
71 struct v4l2_pix_format modes[]; 66 int (*power_down)(struct sd *sd);
72}; 67};
73 68
74#endif 69#endif
diff --git a/drivers/media/video/gspca/sq905.c b/drivers/media/video/gspca/sq905.c
index 04e3ae57a2e3..2e1cdf068fda 100644
--- a/drivers/media/video/gspca/sq905.c
+++ b/drivers/media/video/gspca/sq905.c
@@ -360,6 +360,12 @@ static int sd_init(struct gspca_dev *gspca_dev)
360 gspca_dev->cam.nmodes = ARRAY_SIZE(sq905_mode); 360 gspca_dev->cam.nmodes = ARRAY_SIZE(sq905_mode);
361 if (!(ident & SQ905_HIRES_MASK)) 361 if (!(ident & SQ905_HIRES_MASK))
362 gspca_dev->cam.nmodes--; 362 gspca_dev->cam.nmodes--;
363
364 if (ident & SQ905_ORIENTATION_MASK)
365 gspca_dev->cam.input_flags = V4L2_IN_ST_VFLIP;
366 else
367 gspca_dev->cam.input_flags = V4L2_IN_ST_VFLIP |
368 V4L2_IN_ST_HFLIP;
363 return 0; 369 return 0;
364} 370}
365 371
diff --git a/drivers/media/video/gspca/vc032x.c b/drivers/media/video/gspca/vc032x.c
index 4c802fb12cd6..e4e933c400bc 100644
--- a/drivers/media/video/gspca/vc032x.c
+++ b/drivers/media/video/gspca/vc032x.c
@@ -159,37 +159,16 @@ static const struct v4l2_pix_format vc0323_mode[] = {
159 .priv = 2}, 159 .priv = 2},
160}; 160};
161static const struct v4l2_pix_format bi_mode[] = { 161static const struct v4l2_pix_format bi_mode[] = {
162/*fixme: jeg does not work
163 {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
164 .bytesperline = 320,
165 .sizeimage = 320 * 240 * 3 / 8 + 590,
166 .colorspace = V4L2_COLORSPACE_JPEG,
167 .priv = 5},
168*/
169 {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE, 162 {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
170 .bytesperline = 320, 163 .bytesperline = 320,
171 .sizeimage = 320 * 240 * 2, 164 .sizeimage = 320 * 240 * 2,
172 .colorspace = V4L2_COLORSPACE_SRGB, 165 .colorspace = V4L2_COLORSPACE_SRGB,
173 .priv = 4}, 166 .priv = 2},
174/*
175 {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
176 .bytesperline = 640,
177 .sizeimage = 640 * 480 * 3 / 8 + 590,
178 .colorspace = V4L2_COLORSPACE_JPEG,
179 .priv = 3},
180*/
181 {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE, 167 {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
182 .bytesperline = 640, 168 .bytesperline = 640,
183 .sizeimage = 640 * 480 * 2, 169 .sizeimage = 640 * 480 * 2,
184 .colorspace = V4L2_COLORSPACE_SRGB, 170 .colorspace = V4L2_COLORSPACE_SRGB,
185 .priv = 2},
186/*
187 {1280, 1024, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
188 .bytesperline = 1280,
189 .sizeimage = 1280 * 1024 * 1 / 4 + 590,
190 .colorspace = V4L2_COLORSPACE_JPEG,
191 .priv = 1}, 171 .priv = 1},
192*/
193 {1280, 1024, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE, 172 {1280, 1024, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
194 .bytesperline = 1280, 173 .bytesperline = 1280,
195 .sizeimage = 1280 * 1024 * 2, 174 .sizeimage = 1280 * 1024 * 2,
@@ -1034,121 +1013,6 @@ static const u8 mi1320_soc_InitVGA[][4] = {
1034 {0xb3, 0x5c, 0x01, 0xcc}, 1013 {0xb3, 0x5c, 0x01, 0xcc},
1035 {} 1014 {}
1036}; 1015};
1037static const u8 mi1320_soc_InitVGA_JPG[][4] = {
1038 {0xb3, 0x01, 0x01, 0xcc},
1039 {0xb0, 0x03, 0x19, 0xcc},
1040 {0xb0, 0x04, 0x02, 0xcc},
1041 {0x00, 0x00, 0x30, 0xdd},
1042 {0xb3, 0x00, 0x64, 0xcc},
1043 {0xb3, 0x00, 0x67, 0xcc},
1044 {0xb3, 0x05, 0x01, 0xcc},
1045 {0xb3, 0x06, 0x01, 0xcc},
1046 {0xb3, 0x08, 0x01, 0xcc},
1047 {0xb3, 0x09, 0x0c, 0xcc},
1048 {0xb3, 0x34, 0x02, 0xcc},
1049 {0xb3, 0x35, 0xc8, 0xcc},
1050 {0xb3, 0x02, 0x00, 0xcc},
1051 {0xb3, 0x03, 0x0a, 0xcc},
1052 {0xb3, 0x04, 0x05, 0xcc},
1053 {0xb3, 0x20, 0x00, 0xcc},
1054 {0xb3, 0x21, 0x00, 0xcc},
1055 {0xb3, 0x22, 0x01, 0xcc},
1056 {0xb3, 0x23, 0xe0, 0xcc},
1057 {0xb3, 0x14, 0x00, 0xcc},
1058 {0xb3, 0x15, 0x00, 0xcc},
1059 {0xb3, 0x16, 0x02, 0xcc},
1060 {0xb3, 0x17, 0x7f, 0xcc},
1061 {0xb3, 0x00, 0x67, 0xcc},
1062 {0xb8, 0x00, 0x00, 0xcc},
1063 {0xbc, 0x00, 0x71, 0xcc},
1064 {0xbc, 0x01, 0x01, 0xcc},
1065 {0xb3, 0x5c, 0x01, 0xcc},
1066 {0xf0, 0x00, 0x02, 0xbb},
1067 {0x00, 0x00, 0x10, 0xdd},
1068 {0xc8, 0x00, 0x00, 0xbb},
1069 {0x00, 0x00, 0x30, 0xdd},
1070 {0xf0, 0x00, 0x00, 0xbb},
1071 {0x00, 0x00, 0x10, 0xdd},
1072 {0x07, 0x00, 0xe0, 0xbb},
1073 {0x08, 0x00, 0x0b, 0xbb},
1074 {0x21, 0x00, 0x0c, 0xbb},
1075 {0x20, 0x01, 0x03, 0xbb},
1076 {0xb6, 0x00, 0x00, 0xcc},
1077 {0xb6, 0x03, 0x02, 0xcc},
1078 {0xb6, 0x02, 0x80, 0xcc},
1079 {0xb6, 0x05, 0x01, 0xcc},
1080 {0xb6, 0x04, 0xe0, 0xcc},
1081 {0xb6, 0x12, 0xf8, 0xcc},
1082 {0xb6, 0x13, 0x05, 0xcc},
1083 {0xb6, 0x18, 0x02, 0xcc},
1084 {0xb6, 0x17, 0x58, 0xcc},
1085 {0xb6, 0x16, 0x00, 0xcc},
1086 {0xb6, 0x22, 0x12, 0xcc},
1087 {0xb6, 0x23, 0x0b, 0xcc},
1088 {0xbf, 0xc0, 0x39, 0xcc},
1089 {0xbf, 0xc1, 0x04, 0xcc},
1090 {0xbf, 0xcc, 0x00, 0xcc},
1091 {0xb3, 0x01, 0x41, 0xcc},
1092 {0xf0, 0x00, 0x00, 0xbb},
1093 {0x05, 0x01, 0x78, 0xbb},
1094 {0x06, 0x00, 0x11, 0xbb},
1095 {0x07, 0x01, 0x42, 0xbb},
1096 {0x08, 0x00, 0x11, 0xbb},
1097 {0x20, 0x01, 0x03, 0xbb},
1098 {0x21, 0x80, 0x00, 0xbb},
1099 {0x22, 0x0d, 0x0f, 0xbb},
1100 {0x24, 0x80, 0x00, 0xbb},
1101 {0x59, 0x00, 0xff, 0xbb},
1102 {0xf0, 0x00, 0x02, 0xbb},
1103 {0x39, 0x03, 0xca, 0xbb},
1104 {0x3a, 0x06, 0x80, 0xbb},
1105 {0x3b, 0x01, 0x52, 0xbb},
1106 {0x3c, 0x05, 0x40, 0xbb},
1107 {0x57, 0x01, 0x9c, 0xbb},
1108 {0x58, 0x01, 0xee, 0xbb},
1109 {0x59, 0x00, 0xf0, 0xbb},
1110 {0x5a, 0x01, 0x20, 0xbb},
1111 {0x5c, 0x1d, 0x17, 0xbb},
1112 {0x5d, 0x22, 0x1c, 0xbb},
1113 {0x64, 0x1e, 0x1c, 0xbb},
1114 {0x5b, 0x00, 0x00, 0xbb},
1115 {0xf0, 0x00, 0x02, 0xbb},
1116 {0x22, 0xa0, 0x78, 0xbb},
1117 {0x23, 0xa0, 0x78, 0xbb},
1118 {0x24, 0x7f, 0x00, 0xbb},
1119 {0x28, 0xea, 0x02, 0xbb},
1120 {0x29, 0x86, 0x7a, 0xbb},
1121 {0x5e, 0x52, 0x4c, 0xbb},
1122 {0x5f, 0x20, 0x24, 0xbb},
1123 {0x60, 0x00, 0x02, 0xbb},
1124 {0x02, 0x00, 0xee, 0xbb},
1125 {0x03, 0x39, 0x23, 0xbb},
1126 {0x04, 0x07, 0x24, 0xbb},
1127 {0x09, 0x00, 0xc0, 0xbb},
1128 {0x0a, 0x00, 0x79, 0xbb},
1129 {0x0b, 0x00, 0x04, 0xbb},
1130 {0x0c, 0x00, 0x5c, 0xbb},
1131 {0x0d, 0x00, 0xd9, 0xbb},
1132 {0x0e, 0x00, 0x53, 0xbb},
1133 {0x0f, 0x00, 0x21, 0xbb},
1134 {0x10, 0x00, 0xa4, 0xbb},
1135 {0x11, 0x00, 0xe5, 0xbb},
1136 {0x15, 0x00, 0x00, 0xbb},
1137 {0x16, 0x00, 0x00, 0xbb},
1138 {0x17, 0x00, 0x00, 0xbb},
1139 {0x18, 0x00, 0x00, 0xbb},
1140 {0x19, 0x00, 0x00, 0xbb},
1141 {0x1a, 0x00, 0x00, 0xbb},
1142 {0x1b, 0x00, 0x00, 0xbb},
1143 {0x1c, 0x00, 0x00, 0xbb},
1144 {0x1d, 0x00, 0x00, 0xbb},
1145 {0x1e, 0x00, 0x00, 0xbb},
1146 {0xf0, 0x00, 0x01, 0xbb},
1147 {0x06, 0xe0, 0x0e, 0xbb},
1148 {0x06, 0x60, 0x0e, 0xbb},
1149 {0xb3, 0x5c, 0x01, 0xcc},
1150 {}
1151};
1152static const u8 mi1320_soc_InitQVGA[][4] = { 1016static const u8 mi1320_soc_InitQVGA[][4] = {
1153 {0xb3, 0x01, 0x01, 0xcc}, 1017 {0xb3, 0x01, 0x01, 0xcc},
1154 {0xb0, 0x03, 0x19, 0xcc}, 1018 {0xb0, 0x03, 0x19, 0xcc},
@@ -1262,268 +1126,6 @@ static const u8 mi1320_soc_InitQVGA[][4] = {
1262 {0xb3, 0x5c, 0x01, 0xcc}, 1126 {0xb3, 0x5c, 0x01, 0xcc},
1263 {} 1127 {}
1264}; 1128};
1265static const u8 mi1320_soc_InitQVGA_JPG[][4] = {
1266 {0xb3, 0x01, 0x01, 0xcc},
1267 {0xb0, 0x03, 0x19, 0xcc},
1268 {0xb0, 0x04, 0x02, 0xcc},
1269 {0x00, 0x00, 0x30, 0xdd},
1270 {0xb3, 0x00, 0x64, 0xcc},
1271 {0xb3, 0x00, 0x67, 0xcc},
1272 {0xb3, 0x05, 0x01, 0xcc},
1273 {0xb3, 0x06, 0x01, 0xcc},
1274 {0xb3, 0x08, 0x01, 0xcc},
1275 {0xb3, 0x09, 0x0c, 0xcc},
1276 {0xb3, 0x34, 0x02, 0xcc},
1277 {0xb3, 0x35, 0xc8, 0xcc},
1278 {0xb3, 0x02, 0x00, 0xcc},
1279 {0xb3, 0x03, 0x0a, 0xcc},
1280 {0xb3, 0x04, 0x05, 0xcc},
1281 {0xb3, 0x20, 0x00, 0xcc},
1282 {0xb3, 0x21, 0x00, 0xcc},
1283 {0xb3, 0x22, 0x01, 0xcc},
1284 {0xb3, 0x23, 0xe0, 0xcc},
1285 {0xb3, 0x14, 0x00, 0xcc},
1286 {0xb3, 0x15, 0x00, 0xcc},
1287 {0xb3, 0x16, 0x02, 0xcc},
1288 {0xb3, 0x17, 0x7f, 0xcc},
1289 {0xb3, 0x00, 0x67, 0xcc},
1290 {0xb8, 0x00, 0x00, 0xcc},
1291 {0xbc, 0x00, 0xd1, 0xcc},
1292 {0xbc, 0x01, 0x01, 0xcc},
1293 {0xb3, 0x5c, 0x01, 0xcc},
1294 {0xf0, 0x00, 0x02, 0xbb},
1295 {0x00, 0x00, 0x10, 0xdd},
1296 {0xc8, 0x00, 0x00, 0xbb},
1297 {0x00, 0x00, 0x30, 0xdd},
1298 {0xf0, 0x00, 0x00, 0xbb},
1299 {0x00, 0x00, 0x10, 0xdd},
1300 {0x07, 0x00, 0xe0, 0xbb},
1301 {0x08, 0x00, 0x0b, 0xbb},
1302 {0x21, 0x00, 0x0c, 0xbb},
1303 {0x20, 0x01, 0x03, 0xbb},
1304 {0xb6, 0x00, 0x00, 0xcc},
1305 {0xb6, 0x03, 0x01, 0xcc},
1306 {0xb6, 0x02, 0x40, 0xcc},
1307 {0xb6, 0x05, 0x00, 0xcc},
1308 {0xb6, 0x04, 0xf0, 0xcc},
1309 {0xb6, 0x12, 0xf8, 0xcc},
1310 {0xb6, 0x13, 0x05, 0xcc},
1311 {0xb6, 0x18, 0x00, 0xcc},
1312 {0xb6, 0x17, 0x96, 0xcc},
1313 {0xb6, 0x16, 0x00, 0xcc},
1314 {0xb6, 0x22, 0x12, 0xcc},
1315 {0xb6, 0x23, 0x0b, 0xcc},
1316 {0xbf, 0xc0, 0x39, 0xcc},
1317 {0xbf, 0xc1, 0x04, 0xcc},
1318 {0xbf, 0xcc, 0x00, 0xcc},
1319 {0xbc, 0x02, 0x18, 0xcc},
1320 {0xbc, 0x03, 0x50, 0xcc},
1321 {0xbc, 0x04, 0x18, 0xcc},
1322 {0xbc, 0x05, 0x00, 0xcc},
1323 {0xbc, 0x06, 0x00, 0xcc},
1324 {0xbc, 0x08, 0x30, 0xcc},
1325 {0xbc, 0x09, 0x40, 0xcc},
1326 {0xbc, 0x0a, 0x10, 0xcc},
1327 {0xbc, 0x0b, 0x00, 0xcc},
1328 {0xbc, 0x0c, 0x00, 0xcc},
1329 {0xb3, 0x01, 0x41, 0xcc},
1330 {0xf0, 0x00, 0x00, 0xbb},
1331 {0x05, 0x01, 0x78, 0xbb},
1332 {0x06, 0x00, 0x11, 0xbb},
1333 {0x07, 0x01, 0x42, 0xbb},
1334 {0x08, 0x00, 0x11, 0xbb},
1335 {0x20, 0x01, 0x03, 0xbb},
1336 {0x21, 0x80, 0x00, 0xbb},
1337 {0x22, 0x0d, 0x0f, 0xbb},
1338 {0x24, 0x80, 0x00, 0xbb},
1339 {0x59, 0x00, 0xff, 0xbb},
1340 {0xf0, 0x00, 0x02, 0xbb},
1341 {0x39, 0x03, 0xca, 0xbb},
1342 {0x3a, 0x06, 0x80, 0xbb},
1343 {0x3b, 0x01, 0x52, 0xbb},
1344 {0x3c, 0x05, 0x40, 0xbb},
1345 {0x57, 0x01, 0x9c, 0xbb},
1346 {0x58, 0x01, 0xee, 0xbb},
1347 {0x59, 0x00, 0xf0, 0xbb},
1348 {0x5a, 0x01, 0x20, 0xbb},
1349 {0x5c, 0x1d, 0x17, 0xbb},
1350 {0x5d, 0x22, 0x1c, 0xbb},
1351 {0x64, 0x1e, 0x1c, 0xbb},
1352 {0x5b, 0x00, 0x00, 0xbb},
1353 {0xf0, 0x00, 0x02, 0xbb},
1354 {0x22, 0xa0, 0x78, 0xbb},
1355 {0x23, 0xa0, 0x78, 0xbb},
1356 {0x24, 0x7f, 0x00, 0xbb},
1357 {0x28, 0xea, 0x02, 0xbb},
1358 {0x29, 0x86, 0x7a, 0xbb},
1359 {0x5e, 0x52, 0x4c, 0xbb},
1360 {0x5f, 0x20, 0x24, 0xbb},
1361 {0x60, 0x00, 0x02, 0xbb},
1362 {0x02, 0x00, 0xee, 0xbb},
1363 {0x03, 0x39, 0x23, 0xbb},
1364 {0x04, 0x07, 0x24, 0xbb},
1365 {0x09, 0x00, 0xc0, 0xbb},
1366 {0x0a, 0x00, 0x79, 0xbb},
1367 {0x0b, 0x00, 0x04, 0xbb},
1368 {0x0c, 0x00, 0x5c, 0xbb},
1369 {0x0d, 0x00, 0xd9, 0xbb},
1370 {0x0e, 0x00, 0x53, 0xbb},
1371 {0x0f, 0x00, 0x21, 0xbb},
1372 {0x10, 0x00, 0xa4, 0xbb},
1373 {0x11, 0x00, 0xe5, 0xbb},
1374 {0x15, 0x00, 0x00, 0xbb},
1375 {0x16, 0x00, 0x00, 0xbb},
1376 {0x17, 0x00, 0x00, 0xbb},
1377 {0x18, 0x00, 0x00, 0xbb},
1378 {0x19, 0x00, 0x00, 0xbb},
1379 {0x1a, 0x00, 0x00, 0xbb},
1380 {0x1b, 0x00, 0x00, 0xbb},
1381 {0x1c, 0x00, 0x00, 0xbb},
1382 {0x1d, 0x00, 0x00, 0xbb},
1383 {0x1e, 0x00, 0x00, 0xbb},
1384 {0xf0, 0x00, 0x01, 0xbb},
1385 {0x06, 0xe0, 0x0e, 0xbb},
1386 {0x06, 0x60, 0x0e, 0xbb},
1387 {0xb3, 0x5c, 0x01, 0xcc},
1388 {}
1389};
1390static const u8 mi1320_soc_InitSXGA_JPG[][4] = {
1391 {0xb3, 0x01, 0x01, 0xcc},
1392 {0xb0, 0x03, 0x19, 0xcc},
1393 {0xb0, 0x04, 0x02, 0xcc},
1394 {0x00, 0x00, 0x33, 0xdd},
1395 {0xb3, 0x00, 0x64, 0xcc},
1396 {0xb3, 0x00, 0x67, 0xcc},
1397 {0xb3, 0x05, 0x00, 0xcc},
1398 {0xb3, 0x06, 0x00, 0xcc},
1399 {0xb3, 0x08, 0x01, 0xcc},
1400 {0xb3, 0x09, 0x0c, 0xcc},
1401 {0xb3, 0x34, 0x02, 0xcc},
1402 {0xb3, 0x35, 0xc8, 0xcc},
1403 {0xb3, 0x02, 0x00, 0xcc},
1404 {0xb3, 0x03, 0x0a, 0xcc},
1405 {0xb3, 0x04, 0x05, 0xcc},
1406 {0xb3, 0x20, 0x00, 0xcc},
1407 {0xb3, 0x21, 0x00, 0xcc},
1408 {0xb3, 0x22, 0x04, 0xcc},
1409 {0xb3, 0x23, 0x00, 0xcc},
1410 {0xb3, 0x14, 0x00, 0xcc},
1411 {0xb3, 0x15, 0x00, 0xcc},
1412 {0xb3, 0x16, 0x04, 0xcc},
1413 {0xb3, 0x17, 0xff, 0xcc},
1414 {0xb3, 0x00, 0x67, 0xcc},
1415 {0xbc, 0x00, 0x71, 0xcc},
1416 {0xbc, 0x01, 0x01, 0xcc},
1417 {0xf0, 0x00, 0x02, 0xbb},
1418 {0x00, 0x00, 0x30, 0xdd},
1419 {0xc8, 0x9f, 0x0b, 0xbb},
1420 {0x00, 0x00, 0x20, 0xdd},
1421 {0x5b, 0x00, 0x01, 0xbb},
1422 {0x00, 0x00, 0x20, 0xdd},
1423 {0xf0, 0x00, 0x00, 0xbb},
1424 {0x00, 0x00, 0x30, 0xdd},
1425 {0x20, 0x01, 0x03, 0xbb},
1426 {0x00, 0x00, 0x20, 0xdd},
1427 {0xb6, 0x00, 0x00, 0xcc},
1428 {0xb6, 0x03, 0x05, 0xcc},
1429 {0xb6, 0x02, 0x00, 0xcc},
1430 {0xb6, 0x05, 0x04, 0xcc},
1431 {0xb6, 0x04, 0x00, 0xcc},
1432 {0xb6, 0x12, 0xf8, 0xcc},
1433 {0xb6, 0x13, 0x29, 0xcc},
1434 {0xb6, 0x18, 0x0a, 0xcc},
1435 {0xb6, 0x17, 0x00, 0xcc},
1436 {0xb6, 0x16, 0x00, 0xcc},
1437 {0xb6, 0x22, 0x12, 0xcc},
1438 {0xb6, 0x23, 0x0b, 0xcc},
1439 {0xbf, 0xc0, 0x39, 0xcc},
1440 {0xbf, 0xc1, 0x04, 0xcc},
1441 {0xbf, 0xcc, 0x00, 0xcc},
1442 {0xb3, 0x5c, 0x01, 0xcc},
1443 {0xb3, 0x01, 0x41, 0xcc},
1444 {0xf0, 0x00, 0x00, 0xbb},
1445 {0x05, 0x01, 0x78, 0xbb},
1446 {0x06, 0x00, 0x11, 0xbb},
1447 {0x07, 0x01, 0x42, 0xbb},
1448 {0x08, 0x00, 0x11, 0xbb},
1449 {0x20, 0x01, 0x03, 0xbb},
1450 {0x21, 0x80, 0x00, 0xbb},
1451 {0x22, 0x0d, 0x0f, 0xbb},
1452 {0x24, 0x80, 0x00, 0xbb},
1453 {0x59, 0x00, 0xff, 0xbb},
1454 {0xf0, 0x00, 0x02, 0xbb},
1455 {0x39, 0x03, 0xca, 0xbb},
1456 {0x3a, 0x06, 0x80, 0xbb},
1457 {0x3b, 0x01, 0x52, 0xbb},
1458 {0x3c, 0x05, 0x40, 0xbb},
1459 {0x57, 0x01, 0x9c, 0xbb},
1460 {0x58, 0x01, 0xee, 0xbb},
1461 {0x59, 0x00, 0xf0, 0xbb},
1462 {0x5a, 0x01, 0x20, 0xbb},
1463 {0x5c, 0x1d, 0x17, 0xbb},
1464 {0x5d, 0x22, 0x1c, 0xbb},
1465 {0x64, 0x1e, 0x1c, 0xbb},
1466 {0x5b, 0x00, 0x00, 0xbb},
1467 {0xf0, 0x00, 0x02, 0xbb},
1468 {0x22, 0xa0, 0x78, 0xbb},
1469 {0x23, 0xa0, 0x78, 0xbb},
1470 {0x24, 0x7f, 0x00, 0xbb},
1471 {0x28, 0xea, 0x02, 0xbb},
1472 {0x29, 0x86, 0x7a, 0xbb},
1473 {0x5e, 0x52, 0x4c, 0xbb},
1474 {0x5f, 0x20, 0x24, 0xbb},
1475 {0x60, 0x00, 0x02, 0xbb},
1476 {0x02, 0x00, 0xee, 0xbb},
1477 {0x03, 0x39, 0x23, 0xbb},
1478 {0x04, 0x07, 0x24, 0xbb},
1479 {0x09, 0x00, 0xc0, 0xbb},
1480 {0x0a, 0x00, 0x79, 0xbb},
1481 {0x0b, 0x00, 0x04, 0xbb},
1482 {0x0c, 0x00, 0x5c, 0xbb},
1483 {0x0d, 0x00, 0xd9, 0xbb},
1484 {0x0e, 0x00, 0x53, 0xbb},
1485 {0x0f, 0x00, 0x21, 0xbb},
1486 {0x10, 0x00, 0xa4, 0xbb},
1487 {0x11, 0x00, 0xe5, 0xbb},
1488 {0x15, 0x00, 0x00, 0xbb},
1489 {0x16, 0x00, 0x00, 0xbb},
1490 {0x17, 0x00, 0x00, 0xbb},
1491 {0x18, 0x00, 0x00, 0xbb},
1492 {0x19, 0x00, 0x00, 0xbb},
1493 {0x1a, 0x00, 0x00, 0xbb},
1494 {0x1b, 0x00, 0x00, 0xbb},
1495 {0x1c, 0x00, 0x00, 0xbb},
1496 {0x1d, 0x00, 0x00, 0xbb},
1497 {0x1e, 0x00, 0x00, 0xbb},
1498 {0xf0, 0x00, 0x01, 0xbb},
1499 {0x06, 0xe0, 0x0e, 0xbb},
1500 {0x06, 0x60, 0x0e, 0xbb},
1501 {0xb3, 0x5c, 0x01, 0xcc},
1502 {0xf0, 0x00, 0x00, 0xbb},
1503 {0x05, 0x01, 0x13, 0xbb},
1504 {0x06, 0x00, 0x11, 0xbb},
1505 {0x07, 0x00, 0x85, 0xbb},
1506 {0x08, 0x00, 0x27, 0xbb},
1507 {0x20, 0x01, 0x03, 0xbb},
1508 {0x21, 0x80, 0x00, 0xbb},
1509 {0x22, 0x0d, 0x0f, 0xbb},
1510 {0x24, 0x80, 0x00, 0xbb},
1511 {0x59, 0x00, 0xff, 0xbb},
1512 {0xf0, 0x00, 0x02, 0xbb},
1513 {0x39, 0x03, 0x0d, 0xbb},
1514 {0x3a, 0x06, 0x1b, 0xbb},
1515 {0x3b, 0x00, 0x95, 0xbb},
1516 {0x3c, 0x04, 0xdb, 0xbb},
1517 {0x57, 0x02, 0x00, 0xbb},
1518 {0x58, 0x02, 0x66, 0xbb},
1519 {0x59, 0x00, 0xff, 0xbb},
1520 {0x5a, 0x01, 0x33, 0xbb},
1521 {0x5c, 0x12, 0x0d, 0xbb},
1522 {0x5d, 0x16, 0x11, 0xbb},
1523 {0x64, 0x5e, 0x1c, 0xbb},
1524 {0x2f, 0x90, 0x00, 0xbb},
1525 {}
1526};
1527static const u8 mi1320_soc_InitSXGA[][4] = { 1129static const u8 mi1320_soc_InitSXGA[][4] = {
1528 {0xb3, 0x01, 0x01, 0xcc}, 1130 {0xb3, 0x01, 0x01, 0xcc},
1529 {0xb0, 0x03, 0x19, 0xcc}, 1131 {0xb0, 0x03, 0x19, 0xcc},
@@ -3015,11 +2617,8 @@ static int sd_start(struct gspca_dev *gspca_dev)
3015 int mode; 2617 int mode;
3016 static const u8 (*mi1320_soc_init[])[4] = { 2618 static const u8 (*mi1320_soc_init[])[4] = {
3017 mi1320_soc_InitSXGA, 2619 mi1320_soc_InitSXGA,
3018 mi1320_soc_InitSXGA_JPG,
3019 mi1320_soc_InitVGA, 2620 mi1320_soc_InitVGA,
3020 mi1320_soc_InitVGA_JPG,
3021 mi1320_soc_InitQVGA, 2621 mi1320_soc_InitQVGA,
3022 mi1320_soc_InitQVGA_JPG
3023 }; 2622 };
3024 2623
3025 /* Assume start use the good resolution from gspca_dev->mode */ 2624 /* Assume start use the good resolution from gspca_dev->mode */
diff --git a/drivers/media/video/ivtv/ivtv-driver.c b/drivers/media/video/ivtv/ivtv-driver.c
index eca8bf92a225..b0195e8ee4d1 100644
--- a/drivers/media/video/ivtv/ivtv-driver.c
+++ b/drivers/media/video/ivtv/ivtv-driver.c
@@ -884,12 +884,9 @@ static void ivtv_load_and_init_modules(struct ivtv *itv)
884 } 884 }
885 else if (itv->card->type == IVTV_CARD_GV_MVPRX || 885 else if (itv->card->type == IVTV_CARD_GV_MVPRX ||
886 itv->card->type == IVTV_CARD_GV_MVPRX2E) { 886 itv->card->type == IVTV_CARD_GV_MVPRX2E) {
887 struct v4l2_crystal_freq crystal_freq;
888
889 /* The crystal frequency of GVMVPRX is 24.576MHz */ 887 /* The crystal frequency of GVMVPRX is 24.576MHz */
890 crystal_freq.freq = SAA7115_FREQ_24_576_MHZ; 888 v4l2_subdev_call(itv->sd_video, video, s_crystal_freq,
891 crystal_freq.flags = SAA7115_FREQ_FL_UCGC; 889 SAA7115_FREQ_24_576_MHZ, SAA7115_FREQ_FL_UCGC);
892 v4l2_subdev_call(itv->sd_video, video, s_crystal_freq, &crystal_freq);
893 } 890 }
894 891
895 if (hw & IVTV_HW_CX25840) { 892 if (hw & IVTV_HW_CX25840) {
@@ -1234,7 +1231,7 @@ int ivtv_init_on_first_open(struct ivtv *itv)
1234 if (itv->card->hw_all & IVTV_HW_CX25840) { 1231 if (itv->card->hw_all & IVTV_HW_CX25840) {
1235 struct v4l2_control ctrl; 1232 struct v4l2_control ctrl;
1236 1233
1237 v4l2_subdev_call(itv->sd_video, core, init, 0); 1234 v4l2_subdev_call(itv->sd_video, core, load_fw);
1238 /* CX25840_CID_ENABLE_PVR150_WORKAROUND */ 1235 /* CX25840_CID_ENABLE_PVR150_WORKAROUND */
1239 ctrl.id = V4L2_CID_PRIVATE_BASE; 1236 ctrl.id = V4L2_CID_PRIVATE_BASE;
1240 ctrl.value = itv->pvr150_workaround; 1237 ctrl.value = itv->pvr150_workaround;
diff --git a/drivers/media/video/ivtv/ivtv-fileops.c b/drivers/media/video/ivtv/ivtv-fileops.c
index cfaacf6096d0..e707ef3086b2 100644
--- a/drivers/media/video/ivtv/ivtv-fileops.c
+++ b/drivers/media/video/ivtv/ivtv-fileops.c
@@ -857,15 +857,12 @@ int ivtv_v4l2_close(struct file *filp)
857 /* Mark that the radio is no longer in use */ 857 /* Mark that the radio is no longer in use */
858 clear_bit(IVTV_F_I_RADIO_USER, &itv->i_flags); 858 clear_bit(IVTV_F_I_RADIO_USER, &itv->i_flags);
859 /* Switch tuner to TV */ 859 /* Switch tuner to TV */
860 ivtv_call_all(itv, tuner, s_std, itv->std); 860 ivtv_call_all(itv, core, s_std, itv->std);
861 /* Select correct audio input (i.e. TV tuner or Line in) */ 861 /* Select correct audio input (i.e. TV tuner or Line in) */
862 ivtv_audio_set_io(itv); 862 ivtv_audio_set_io(itv);
863 if (itv->hw_flags & IVTV_HW_SAA711X) 863 if (itv->hw_flags & IVTV_HW_SAA711X) {
864 { 864 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq,
865 struct v4l2_crystal_freq crystal_freq; 865 SAA7115_FREQ_32_11_MHZ, 0);
866 crystal_freq.freq = SAA7115_FREQ_32_11_MHZ;
867 crystal_freq.flags = 0;
868 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq, &crystal_freq);
869 } 866 }
870 if (atomic_read(&itv->capturing) > 0) { 867 if (atomic_read(&itv->capturing) > 0) {
871 /* Undo video mute */ 868 /* Undo video mute */
@@ -956,10 +953,8 @@ static int ivtv_serialized_open(struct ivtv_stream *s, struct file *filp)
956 /* Select the correct audio input (i.e. radio tuner) */ 953 /* Select the correct audio input (i.e. radio tuner) */
957 ivtv_audio_set_io(itv); 954 ivtv_audio_set_io(itv);
958 if (itv->hw_flags & IVTV_HW_SAA711X) { 955 if (itv->hw_flags & IVTV_HW_SAA711X) {
959 struct v4l2_crystal_freq crystal_freq; 956 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq,
960 crystal_freq.freq = SAA7115_FREQ_32_11_MHZ; 957 SAA7115_FREQ_32_11_MHZ, SAA7115_FREQ_FL_APLL);
961 crystal_freq.flags = SAA7115_FREQ_FL_APLL;
962 ivtv_call_hw(itv, IVTV_HW_SAA711X, video, s_crystal_freq, &crystal_freq);
963 } 958 }
964 /* Done! Unmute and continue. */ 959 /* Done! Unmute and continue. */
965 ivtv_unmute(itv); 960 ivtv_unmute(itv);
diff --git a/drivers/media/video/ivtv/ivtv-gpio.c b/drivers/media/video/ivtv/ivtv-gpio.c
index 3321983d89e5..ceb05bdcaf62 100644
--- a/drivers/media/video/ivtv/ivtv-gpio.c
+++ b/drivers/media/video/ivtv/ivtv-gpio.c
@@ -248,15 +248,16 @@ static int subdev_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
248 return 0; 248 return 0;
249} 249}
250 250
251static int subdev_s_audio_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 251static int subdev_s_audio_routing(struct v4l2_subdev *sd,
252 u32 input, u32 output, u32 config)
252{ 253{
253 struct ivtv *itv = sd_to_ivtv(sd); 254 struct ivtv *itv = sd_to_ivtv(sd);
254 u16 mask, data; 255 u16 mask, data;
255 256
256 if (route->input > 2) 257 if (input > 2)
257 return -EINVAL; 258 return -EINVAL;
258 mask = itv->card->gpio_audio_input.mask; 259 mask = itv->card->gpio_audio_input.mask;
259 switch (route->input) { 260 switch (input) {
260 case 0: 261 case 0:
261 data = itv->card->gpio_audio_input.tuner; 262 data = itv->card->gpio_audio_input.tuner;
262 break; 263 break;
@@ -318,17 +319,18 @@ static int subdev_log_status(struct v4l2_subdev *sd)
318 return 0; 319 return 0;
319} 320}
320 321
321static int subdev_s_video_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 322static int subdev_s_video_routing(struct v4l2_subdev *sd,
323 u32 input, u32 output, u32 config)
322{ 324{
323 struct ivtv *itv = sd_to_ivtv(sd); 325 struct ivtv *itv = sd_to_ivtv(sd);
324 u16 mask, data; 326 u16 mask, data;
325 327
326 if (route->input > 2) /* 0:Tuner 1:Composite 2:S-Video */ 328 if (input > 2) /* 0:Tuner 1:Composite 2:S-Video */
327 return -EINVAL; 329 return -EINVAL;
328 mask = itv->card->gpio_video_input.mask; 330 mask = itv->card->gpio_video_input.mask;
329 if (route->input == 0) 331 if (input == 0)
330 data = itv->card->gpio_video_input.tuner; 332 data = itv->card->gpio_video_input.tuner;
331 else if (route->input == 1) 333 else if (input == 1)
332 data = itv->card->gpio_video_input.composite; 334 data = itv->card->gpio_video_input.composite;
333 else 335 else
334 data = itv->card->gpio_video_input.svideo; 336 data = itv->card->gpio_video_input.svideo;
@@ -342,10 +344,10 @@ static const struct v4l2_subdev_core_ops subdev_core_ops = {
342 .g_ctrl = subdev_g_ctrl, 344 .g_ctrl = subdev_g_ctrl,
343 .s_ctrl = subdev_s_ctrl, 345 .s_ctrl = subdev_s_ctrl,
344 .queryctrl = subdev_queryctrl, 346 .queryctrl = subdev_queryctrl,
347 .s_std = subdev_s_std,
345}; 348};
346 349
347static const struct v4l2_subdev_tuner_ops subdev_tuner_ops = { 350static const struct v4l2_subdev_tuner_ops subdev_tuner_ops = {
348 .s_std = subdev_s_std,
349 .s_radio = subdev_s_radio, 351 .s_radio = subdev_s_radio,
350 .g_tuner = subdev_g_tuner, 352 .g_tuner = subdev_g_tuner,
351 .s_tuner = subdev_s_tuner, 353 .s_tuner = subdev_s_tuner,
diff --git a/drivers/media/video/ivtv/ivtv-i2c.c b/drivers/media/video/ivtv/ivtv-i2c.c
index e73a196ecc7a..9e3d32b8004c 100644
--- a/drivers/media/video/ivtv/ivtv-i2c.c
+++ b/drivers/media/video/ivtv/ivtv-i2c.c
@@ -161,15 +161,18 @@ int ivtv_i2c_register(struct ivtv *itv, unsigned idx)
161 return -1; 161 return -1;
162 if (hw == IVTV_HW_TUNER) { 162 if (hw == IVTV_HW_TUNER) {
163 /* special tuner handling */ 163 /* special tuner handling */
164 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, 164 sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
165 adap, mod, type,
165 itv->card_i2c->radio); 166 itv->card_i2c->radio);
166 if (sd) 167 if (sd)
167 sd->grp_id = 1 << idx; 168 sd->grp_id = 1 << idx;
168 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, 169 sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
170 adap, mod, type,
169 itv->card_i2c->demod); 171 itv->card_i2c->demod);
170 if (sd) 172 if (sd)
171 sd->grp_id = 1 << idx; 173 sd->grp_id = 1 << idx;
172 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, 174 sd = v4l2_i2c_new_probed_subdev(&itv->v4l2_dev,
175 adap, mod, type,
173 itv->card_i2c->tv); 176 itv->card_i2c->tv);
174 if (sd) 177 if (sd)
175 sd->grp_id = 1 << idx; 178 sd->grp_id = 1 << idx;
@@ -178,11 +181,11 @@ int ivtv_i2c_register(struct ivtv *itv, unsigned idx)
178 if (!hw_addrs[idx]) 181 if (!hw_addrs[idx])
179 return -1; 182 return -1;
180 if (hw == IVTV_HW_UPD64031A || hw == IVTV_HW_UPD6408X) { 183 if (hw == IVTV_HW_UPD64031A || hw == IVTV_HW_UPD6408X) {
181 unsigned short addrs[2] = { hw_addrs[idx], I2C_CLIENT_END }; 184 sd = v4l2_i2c_new_probed_subdev_addr(&itv->v4l2_dev,
182 185 adap, mod, type, hw_addrs[idx]);
183 sd = v4l2_i2c_new_probed_subdev(adap, mod, type, addrs);
184 } else { 186 } else {
185 sd = v4l2_i2c_new_subdev(adap, mod, type, hw_addrs[idx]); 187 sd = v4l2_i2c_new_subdev(&itv->v4l2_dev,
188 adap, mod, type, hw_addrs[idx]);
186 } 189 }
187 if (sd) 190 if (sd)
188 sd->grp_id = 1 << idx; 191 sd->grp_id = 1 << idx;
diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c b/drivers/media/video/ivtv/ivtv-ioctl.c
index 9a0424298af1..4a2d464f055e 100644
--- a/drivers/media/video/ivtv/ivtv-ioctl.c
+++ b/drivers/media/video/ivtv/ivtv-ioctl.c
@@ -1033,7 +1033,6 @@ static int ivtv_g_output(struct file *file, void *fh, unsigned int *i)
1033static int ivtv_s_output(struct file *file, void *fh, unsigned int outp) 1033static int ivtv_s_output(struct file *file, void *fh, unsigned int outp)
1034{ 1034{
1035 struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv; 1035 struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv;
1036 struct v4l2_routing route;
1037 1036
1038 if (outp >= itv->card->nof_outputs) 1037 if (outp >= itv->card->nof_outputs)
1039 return -EINVAL; 1038 return -EINVAL;
@@ -1046,9 +1045,9 @@ static int ivtv_s_output(struct file *file, void *fh, unsigned int outp)
1046 itv->active_output, outp); 1045 itv->active_output, outp);
1047 1046
1048 itv->active_output = outp; 1047 itv->active_output = outp;
1049 route.input = SAA7127_INPUT_TYPE_NORMAL; 1048 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing,
1050 route.output = itv->card->video_outputs[outp].video_output; 1049 SAA7127_INPUT_TYPE_NORMAL,
1051 ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing, &route); 1050 itv->card->video_outputs[outp].video_output, 0);
1052 1051
1053 return 0; 1052 return 0;
1054} 1053}
@@ -1121,7 +1120,7 @@ int ivtv_s_std(struct file *file, void *fh, v4l2_std_id *std)
1121 IVTV_DEBUG_INFO("Switching standard to %llx.\n", (unsigned long long)itv->std); 1120 IVTV_DEBUG_INFO("Switching standard to %llx.\n", (unsigned long long)itv->std);
1122 1121
1123 /* Tuner */ 1122 /* Tuner */
1124 ivtv_call_all(itv, tuner, s_std, itv->std); 1123 ivtv_call_all(itv, core, s_std, itv->std);
1125 1124
1126 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { 1125 if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1127 /* set display standard */ 1126 /* set display standard */
@@ -1735,13 +1734,6 @@ static long ivtv_default(struct file *file, void *fh, int cmd, void *arg)
1735 struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv; 1734 struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv;
1736 1735
1737 switch (cmd) { 1736 switch (cmd) {
1738 case VIDIOC_INT_S_AUDIO_ROUTING: {
1739 struct v4l2_routing *route = arg;
1740
1741 ivtv_call_hw(itv, itv->card->hw_audio, audio, s_routing, route);
1742 break;
1743 }
1744
1745 case VIDIOC_INT_RESET: { 1737 case VIDIOC_INT_RESET: {
1746 u32 val = *(u32 *)arg; 1738 u32 val = *(u32 *)arg;
1747 1739
diff --git a/drivers/media/video/ivtv/ivtv-routing.c b/drivers/media/video/ivtv/ivtv-routing.c
index 3fd302294497..8898c569a1c9 100644
--- a/drivers/media/video/ivtv/ivtv-routing.c
+++ b/drivers/media/video/ivtv/ivtv-routing.c
@@ -34,7 +34,7 @@
34void ivtv_audio_set_io(struct ivtv *itv) 34void ivtv_audio_set_io(struct ivtv *itv)
35{ 35{
36 const struct ivtv_card_audio_input *in; 36 const struct ivtv_card_audio_input *in;
37 struct v4l2_routing route; 37 u32 input, output = 0;
38 38
39 /* Determine which input to use */ 39 /* Determine which input to use */
40 if (test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags)) 40 if (test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags))
@@ -43,73 +43,77 @@ void ivtv_audio_set_io(struct ivtv *itv)
43 in = &itv->card->audio_inputs[itv->audio_input]; 43 in = &itv->card->audio_inputs[itv->audio_input];
44 44
45 /* handle muxer chips */ 45 /* handle muxer chips */
46 route.input = in->muxer_input; 46 input = in->muxer_input;
47 route.output = 0;
48 if (itv->card->hw_muxer & IVTV_HW_M52790) 47 if (itv->card->hw_muxer & IVTV_HW_M52790)
49 route.output = M52790_OUT_STEREO; 48 output = M52790_OUT_STEREO;
50 v4l2_subdev_call(itv->sd_muxer, audio, s_routing, &route); 49 v4l2_subdev_call(itv->sd_muxer, audio, s_routing,
50 input, output, 0);
51 51
52 route.input = in->audio_input; 52 input = in->audio_input;
53 route.output = 0; 53 output = 0;
54 if (itv->card->hw_audio & IVTV_HW_MSP34XX) 54 if (itv->card->hw_audio & IVTV_HW_MSP34XX)
55 route.output = MSP_OUTPUT(MSP_SC_IN_DSP_SCART1); 55 output = MSP_OUTPUT(MSP_SC_IN_DSP_SCART1);
56 ivtv_call_hw(itv, itv->card->hw_audio, audio, s_routing, &route); 56 ivtv_call_hw(itv, itv->card->hw_audio, audio, s_routing,
57 input, output, 0);
57} 58}
58 59
59/* Selects the video input and output according to the current 60/* Selects the video input and output according to the current
60 settings. */ 61 settings. */
61void ivtv_video_set_io(struct ivtv *itv) 62void ivtv_video_set_io(struct ivtv *itv)
62{ 63{
63 struct v4l2_routing route;
64 int inp = itv->active_input; 64 int inp = itv->active_input;
65 u32 input;
65 u32 type; 66 u32 type;
66 67
67 route.input = itv->card->video_inputs[inp].video_input; 68 v4l2_subdev_call(itv->sd_video, video, s_routing,
68 route.output = 0; 69 itv->card->video_inputs[inp].video_input, 0, 0);
69 v4l2_subdev_call(itv->sd_video, video, s_routing, &route);
70 70
71 type = itv->card->video_inputs[inp].video_type; 71 type = itv->card->video_inputs[inp].video_type;
72 72
73 if (type == IVTV_CARD_INPUT_VID_TUNER) { 73 if (type == IVTV_CARD_INPUT_VID_TUNER) {
74 route.input = 0; /* Tuner */ 74 input = 0; /* Tuner */
75 } else if (type < IVTV_CARD_INPUT_COMPOSITE1) { 75 } else if (type < IVTV_CARD_INPUT_COMPOSITE1) {
76 route.input = 2; /* S-Video */ 76 input = 2; /* S-Video */
77 } else { 77 } else {
78 route.input = 1; /* Composite */ 78 input = 1; /* Composite */
79 } 79 }
80 80
81 if (itv->card->hw_video & IVTV_HW_GPIO) 81 if (itv->card->hw_video & IVTV_HW_GPIO)
82 ivtv_call_hw(itv, IVTV_HW_GPIO, video, s_routing, &route); 82 ivtv_call_hw(itv, IVTV_HW_GPIO, video, s_routing,
83 input, 0, 0);
83 84
84 if (itv->card->hw_video & IVTV_HW_UPD64031A) { 85 if (itv->card->hw_video & IVTV_HW_UPD64031A) {
85 if (type == IVTV_CARD_INPUT_VID_TUNER || 86 if (type == IVTV_CARD_INPUT_VID_TUNER ||
86 type >= IVTV_CARD_INPUT_COMPOSITE1) { 87 type >= IVTV_CARD_INPUT_COMPOSITE1) {
87 /* Composite: GR on, connect to 3DYCS */ 88 /* Composite: GR on, connect to 3DYCS */
88 route.input = UPD64031A_GR_ON | UPD64031A_3DYCS_COMPOSITE; 89 input = UPD64031A_GR_ON | UPD64031A_3DYCS_COMPOSITE;
89 } else { 90 } else {
90 /* S-Video: GR bypassed, turn it off */ 91 /* S-Video: GR bypassed, turn it off */
91 route.input = UPD64031A_GR_OFF | UPD64031A_3DYCS_DISABLE; 92 input = UPD64031A_GR_OFF | UPD64031A_3DYCS_DISABLE;
92 } 93 }
93 route.input |= itv->card->gr_config; 94 input |= itv->card->gr_config;
94 95
95 ivtv_call_hw(itv, IVTV_HW_UPD64031A, video, s_routing, &route); 96 ivtv_call_hw(itv, IVTV_HW_UPD64031A, video, s_routing,
97 input, 0, 0);
96 } 98 }
97 99
98 if (itv->card->hw_video & IVTV_HW_UPD6408X) { 100 if (itv->card->hw_video & IVTV_HW_UPD6408X) {
99 route.input = UPD64083_YCS_MODE; 101 input = UPD64083_YCS_MODE;
100 if (type > IVTV_CARD_INPUT_VID_TUNER && 102 if (type > IVTV_CARD_INPUT_VID_TUNER &&
101 type < IVTV_CARD_INPUT_COMPOSITE1) { 103 type < IVTV_CARD_INPUT_COMPOSITE1) {
102 /* S-Video uses YCNR mode and internal Y-ADC, the upd64031a 104 /* S-Video uses YCNR mode and internal Y-ADC, the
103 is not used. */ 105 upd64031a is not used. */
104 route.input |= UPD64083_YCNR_MODE; 106 input |= UPD64083_YCNR_MODE;
105 } 107 }
106 else if (itv->card->hw_video & IVTV_HW_UPD64031A) { 108 else if (itv->card->hw_video & IVTV_HW_UPD64031A) {
107 /* Use upd64031a output for tuner and composite(CX23416GYC only) inputs */ 109 /* Use upd64031a output for tuner and
108 if ((type == IVTV_CARD_INPUT_VID_TUNER)|| 110 composite(CX23416GYC only) inputs */
109 (itv->card->type == IVTV_CARD_CX23416GYC)) { 111 if (type == IVTV_CARD_INPUT_VID_TUNER ||
110 route.input |= UPD64083_EXT_Y_ADC; 112 itv->card->type == IVTV_CARD_CX23416GYC) {
111 } 113 input |= UPD64083_EXT_Y_ADC;
114 }
112 } 115 }
113 ivtv_call_hw(itv, IVTV_HW_UPD6408X, video, s_routing, &route); 116 ivtv_call_hw(itv, IVTV_HW_UPD6408X, video, s_routing,
117 input, 0, 0);
114 } 118 }
115} 119}
diff --git a/drivers/media/video/ks0127.c b/drivers/media/video/ks0127.c
index 841024b6bcdf..fab8e0254bbc 100644
--- a/drivers/media/video/ks0127.c
+++ b/drivers/media/video/ks0127.c
@@ -409,11 +409,12 @@ static void ks0127_init(struct v4l2_subdev *sd)
409 } 409 }
410} 410}
411 411
412static int ks0127_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 412static int ks0127_s_routing(struct v4l2_subdev *sd,
413 u32 input, u32 output, u32 config)
413{ 414{
414 struct ks0127 *ks = to_ks0127(sd); 415 struct ks0127 *ks = to_ks0127(sd);
415 416
416 switch (route->input) { 417 switch (input) {
417 case KS_INPUT_COMPOSITE_1: 418 case KS_INPUT_COMPOSITE_1:
418 case KS_INPUT_COMPOSITE_2: 419 case KS_INPUT_COMPOSITE_2:
419 case KS_INPUT_COMPOSITE_3: 420 case KS_INPUT_COMPOSITE_3:
@@ -421,13 +422,13 @@ static int ks0127_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *r
421 case KS_INPUT_COMPOSITE_5: 422 case KS_INPUT_COMPOSITE_5:
422 case KS_INPUT_COMPOSITE_6: 423 case KS_INPUT_COMPOSITE_6:
423 v4l2_dbg(1, debug, sd, 424 v4l2_dbg(1, debug, sd,
424 "s_routing %d: Composite\n", route->input); 425 "s_routing %d: Composite\n", input);
425 /* autodetect 50/60 Hz */ 426 /* autodetect 50/60 Hz */
426 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x00); 427 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x00);
427 /* VSE=0 */ 428 /* VSE=0 */
428 ks0127_and_or(sd, KS_CMDA, ~0x40, 0x00); 429 ks0127_and_or(sd, KS_CMDA, ~0x40, 0x00);
429 /* set input line */ 430 /* set input line */
430 ks0127_and_or(sd, KS_CMDB, 0xb0, route->input); 431 ks0127_and_or(sd, KS_CMDB, 0xb0, input);
431 /* non-freerunning mode */ 432 /* non-freerunning mode */
432 ks0127_and_or(sd, KS_CMDC, 0x70, 0x0a); 433 ks0127_and_or(sd, KS_CMDC, 0x70, 0x0a);
433 /* analog input */ 434 /* analog input */
@@ -455,13 +456,13 @@ static int ks0127_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *r
455 case KS_INPUT_SVIDEO_2: 456 case KS_INPUT_SVIDEO_2:
456 case KS_INPUT_SVIDEO_3: 457 case KS_INPUT_SVIDEO_3:
457 v4l2_dbg(1, debug, sd, 458 v4l2_dbg(1, debug, sd,
458 "s_routing %d: S-Video\n", route->input); 459 "s_routing %d: S-Video\n", input);
459 /* autodetect 50/60 Hz */ 460 /* autodetect 50/60 Hz */
460 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x00); 461 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x00);
461 /* VSE=0 */ 462 /* VSE=0 */
462 ks0127_and_or(sd, KS_CMDA, ~0x40, 0x00); 463 ks0127_and_or(sd, KS_CMDA, ~0x40, 0x00);
463 /* set input line */ 464 /* set input line */
464 ks0127_and_or(sd, KS_CMDB, 0xb0, route->input); 465 ks0127_and_or(sd, KS_CMDB, 0xb0, input);
465 /* non-freerunning mode */ 466 /* non-freerunning mode */
466 ks0127_and_or(sd, KS_CMDC, 0x70, 0x0a); 467 ks0127_and_or(sd, KS_CMDC, 0x70, 0x0a);
467 /* analog input */ 468 /* analog input */
@@ -496,7 +497,7 @@ static int ks0127_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *r
496 497
497 ks0127_and_or(sd, KS_CMDA, 0xff, 0x40); /* VSE=1 */ 498 ks0127_and_or(sd, KS_CMDA, 0xff, 0x40); /* VSE=1 */
498 /* set input line and VALIGN */ 499 /* set input line and VALIGN */
499 ks0127_and_or(sd, KS_CMDB, 0xb0, (route->input | 0x40)); 500 ks0127_and_or(sd, KS_CMDB, 0xb0, (input | 0x40));
500 /* freerunning mode, */ 501 /* freerunning mode, */
501 /* TSTGEN = 1 TSTGFR=11 TSTGPH=0 TSTGPK=0 VMEM=1*/ 502 /* TSTGEN = 1 TSTGFR=11 TSTGPH=0 TSTGPK=0 VMEM=1*/
502 ks0127_and_or(sd, KS_CMDC, 0x70, 0x87); 503 ks0127_and_or(sd, KS_CMDC, 0x70, 0x87);
@@ -531,7 +532,7 @@ static int ks0127_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *r
531 532
532 default: 533 default:
533 v4l2_dbg(1, debug, sd, 534 v4l2_dbg(1, debug, sd,
534 "s_routing: Unknown input %d\n", route->input); 535 "s_routing: Unknown input %d\n", input);
535 break; 536 break;
536 } 537 }
537 538
@@ -648,9 +649,6 @@ static int ks0127_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_iden
648 649
649static const struct v4l2_subdev_core_ops ks0127_core_ops = { 650static const struct v4l2_subdev_core_ops ks0127_core_ops = {
650 .g_chip_ident = ks0127_g_chip_ident, 651 .g_chip_ident = ks0127_g_chip_ident,
651};
652
653static const struct v4l2_subdev_tuner_ops ks0127_tuner_ops = {
654 .s_std = ks0127_s_std, 652 .s_std = ks0127_s_std,
655}; 653};
656 654
@@ -663,7 +661,6 @@ static const struct v4l2_subdev_video_ops ks0127_video_ops = {
663 661
664static const struct v4l2_subdev_ops ks0127_ops = { 662static const struct v4l2_subdev_ops ks0127_ops = {
665 .core = &ks0127_core_ops, 663 .core = &ks0127_core_ops,
666 .tuner = &ks0127_tuner_ops,
667 .video = &ks0127_video_ops, 664 .video = &ks0127_video_ops,
668}; 665};
669 666
diff --git a/drivers/media/video/m52790.c b/drivers/media/video/m52790.c
index 1f340fefc49d..d7317e798cc4 100644
--- a/drivers/media/video/m52790.c
+++ b/drivers/media/video/m52790.c
@@ -69,12 +69,13 @@ static int m52790_write(struct v4l2_subdev *sd)
69 part of the audio output routing. The normal case is that another 69 part of the audio output routing. The normal case is that another
70 chip takes care of the actual muting so making it part of the 70 chip takes care of the actual muting so making it part of the
71 output routing seems to be the right thing to do for now. */ 71 output routing seems to be the right thing to do for now. */
72static int m52790_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 72static int m52790_s_routing(struct v4l2_subdev *sd,
73 u32 input, u32 output, u32 config)
73{ 74{
74 struct m52790_state *state = to_state(sd); 75 struct m52790_state *state = to_state(sd);
75 76
76 state->input = route->input; 77 state->input = input;
77 state->output = route->output; 78 state->output = output;
78 m52790_write(sd); 79 m52790_write(sd);
79 return 0; 80 return 0;
80} 81}
diff --git a/drivers/media/video/meye.c b/drivers/media/video/meye.c
index 2ad11f0999c6..1d66855a379a 100644
--- a/drivers/media/video/meye.c
+++ b/drivers/media/video/meye.c
@@ -117,7 +117,7 @@ static int ptable_alloc(void)
117 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable)); 117 memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable));
118 118
119 /* give only 32 bit DMA addresses */ 119 /* give only 32 bit DMA addresses */
120 if (dma_set_mask(&meye.mchip_dev->dev, DMA_32BIT_MASK)) 120 if (dma_set_mask(&meye.mchip_dev->dev, DMA_BIT_MASK(32)))
121 return -1; 121 return -1;
122 122
123 meye.mchip_ptable_toc = dma_alloc_coherent(&meye.mchip_dev->dev, 123 meye.mchip_ptable_toc = dma_alloc_coherent(&meye.mchip_dev->dev,
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index 9e8e06cfe5c6..e9df3cb02cc1 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -56,7 +56,7 @@
56#include <linux/videodev2.h> 56#include <linux/videodev2.h>
57#include <media/v4l2-device.h> 57#include <media/v4l2-device.h>
58#include <media/v4l2-ioctl.h> 58#include <media/v4l2-ioctl.h>
59#include <media/v4l2-i2c-drv-legacy.h> 59#include <media/v4l2-i2c-drv.h>
60#include <media/msp3400.h> 60#include <media/msp3400.h>
61#include <media/tvaudio.h> 61#include <media/tvaudio.h>
62#include "msp3400-driver.h" 62#include "msp3400-driver.h"
@@ -108,10 +108,6 @@ MODULE_PARM_DESC(dolby, "Activates Dolby processsing");
108/* DSP unit subaddress */ 108/* DSP unit subaddress */
109#define I2C_MSP_DSP 0x12 109#define I2C_MSP_DSP 0x12
110 110
111/* Addresses to scan */
112static unsigned short normal_i2c[] = { 0x80 >> 1, 0x88 >> 1, I2C_CLIENT_END };
113
114I2C_CLIENT_INSMOD;
115 111
116/* ----------------------------------------------------------------------- */ 112/* ----------------------------------------------------------------------- */
117/* functions for talking to the MSP3400C Sound processor */ 113/* functions for talking to the MSP3400C Sound processor */
@@ -509,25 +505,26 @@ static int msp_s_std(struct v4l2_subdev *sd, v4l2_std_id id)
509 return 0; 505 return 0;
510} 506}
511 507
512static int msp_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *rt) 508static int msp_s_routing(struct v4l2_subdev *sd,
509 u32 input, u32 output, u32 config)
513{ 510{
514 struct msp_state *state = to_state(sd); 511 struct msp_state *state = to_state(sd);
515 struct i2c_client *client = v4l2_get_subdevdata(sd); 512 struct i2c_client *client = v4l2_get_subdevdata(sd);
516 int tuner = (rt->input >> 3) & 1; 513 int tuner = (input >> 3) & 1;
517 int sc_in = rt->input & 0x7; 514 int sc_in = input & 0x7;
518 int sc1_out = rt->output & 0xf; 515 int sc1_out = output & 0xf;
519 int sc2_out = (rt->output >> 4) & 0xf; 516 int sc2_out = (output >> 4) & 0xf;
520 u16 val, reg; 517 u16 val, reg;
521 int i; 518 int i;
522 int extern_input = 1; 519 int extern_input = 1;
523 520
524 if (state->routing.input == rt->input && 521 if (state->route_in == input && state->route_out == output)
525 state->routing.output == rt->output)
526 return 0; 522 return 0;
527 state->routing = *rt; 523 state->route_in = input;
524 state->route_out = output;
528 /* check if the tuner input is used */ 525 /* check if the tuner input is used */
529 for (i = 0; i < 5; i++) { 526 for (i = 0; i < 5; i++) {
530 if (((rt->input >> (4 + i * 4)) & 0xf) == 0) 527 if (((input >> (4 + i * 4)) & 0xf) == 0)
531 extern_input = 0; 528 extern_input = 0;
532 } 529 }
533 state->mode = extern_input ? MSP_MODE_EXTERN : MSP_MODE_AM_DETECT; 530 state->mode = extern_input ? MSP_MODE_EXTERN : MSP_MODE_AM_DETECT;
@@ -677,7 +674,7 @@ static int msp_log_status(struct v4l2_subdev *sd)
677 } 674 }
678 v4l_info(client, "Audmode: 0x%04x\n", state->audmode); 675 v4l_info(client, "Audmode: 0x%04x\n", state->audmode);
679 v4l_info(client, "Routing: 0x%08x (input) 0x%08x (output)\n", 676 v4l_info(client, "Routing: 0x%08x (input) 0x%08x (output)\n",
680 state->routing.input, state->routing.output); 677 state->route_in, state->route_out);
681 v4l_info(client, "ACB: 0x%04x\n", state->acb); 678 v4l_info(client, "ACB: 0x%04x\n", state->acb);
682 return 0; 679 return 0;
683} 680}
@@ -696,11 +693,6 @@ static int msp_resume(struct i2c_client *client)
696 return 0; 693 return 0;
697} 694}
698 695
699static int msp_command(struct i2c_client *client, unsigned cmd, void *arg)
700{
701 return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
702}
703
704/* ----------------------------------------------------------------------- */ 696/* ----------------------------------------------------------------------- */
705 697
706static const struct v4l2_subdev_core_ops msp_core_ops = { 698static const struct v4l2_subdev_core_ops msp_core_ops = {
@@ -709,6 +701,7 @@ static const struct v4l2_subdev_core_ops msp_core_ops = {
709 .g_ctrl = msp_g_ctrl, 701 .g_ctrl = msp_g_ctrl,
710 .s_ctrl = msp_s_ctrl, 702 .s_ctrl = msp_s_ctrl,
711 .queryctrl = msp_queryctrl, 703 .queryctrl = msp_queryctrl,
704 .s_std = msp_s_std,
712}; 705};
713 706
714static const struct v4l2_subdev_tuner_ops msp_tuner_ops = { 707static const struct v4l2_subdev_tuner_ops msp_tuner_ops = {
@@ -716,7 +709,6 @@ static const struct v4l2_subdev_tuner_ops msp_tuner_ops = {
716 .g_tuner = msp_g_tuner, 709 .g_tuner = msp_g_tuner,
717 .s_tuner = msp_s_tuner, 710 .s_tuner = msp_s_tuner,
718 .s_radio = msp_s_radio, 711 .s_radio = msp_s_radio,
719 .s_std = msp_s_std,
720}; 712};
721 713
722static const struct v4l2_subdev_audio_ops msp_audio_ops = { 714static const struct v4l2_subdev_audio_ops msp_audio_ops = {
@@ -770,8 +762,8 @@ static int msp_probe(struct i2c_client *client, const struct i2c_device_id *id)
770 state->i2s_mode = 0; 762 state->i2s_mode = 0;
771 init_waitqueue_head(&state->wq); 763 init_waitqueue_head(&state->wq);
772 /* These are the reset input/output positions */ 764 /* These are the reset input/output positions */
773 state->routing.input = MSP_INPUT_DEFAULT; 765 state->route_in = MSP_INPUT_DEFAULT;
774 state->routing.output = MSP_OUTPUT_DEFAULT; 766 state->route_out = MSP_OUTPUT_DEFAULT;
775 767
776 state->rev1 = msp_read_dsp(client, 0x1e); 768 state->rev1 = msp_read_dsp(client, 0x1e);
777 if (state->rev1 != -1) 769 if (state->rev1 != -1)
@@ -925,8 +917,6 @@ MODULE_DEVICE_TABLE(i2c, msp_id);
925 917
926static struct v4l2_i2c_driver_data v4l2_i2c_data = { 918static struct v4l2_i2c_driver_data v4l2_i2c_data = {
927 .name = "msp3400", 919 .name = "msp3400",
928 .driverid = I2C_DRIVERID_MSP3400,
929 .command = msp_command,
930 .probe = msp_probe, 920 .probe = msp_probe,
931 .remove = msp_remove, 921 .remove = msp_remove,
932 .suspend = msp_suspend, 922 .suspend = msp_suspend,
diff --git a/drivers/media/video/msp3400-driver.h b/drivers/media/video/msp3400-driver.h
index 3fe1c1b10f53..d6b3e6d0eef7 100644
--- a/drivers/media/video/msp3400-driver.h
+++ b/drivers/media/video/msp3400-driver.h
@@ -80,7 +80,8 @@ struct msp_state {
80 int i2s_mode; 80 int i2s_mode;
81 int main, second; /* sound carrier */ 81 int main, second; /* sound carrier */
82 int input; 82 int input;
83 struct v4l2_routing routing; 83 u32 route_in;
84 u32 route_out;
84 85
85 /* v4l2 */ 86 /* v4l2 */
86 int audmode; 87 int audmode;
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index a655e9c30146..168bca703614 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -188,7 +188,7 @@ void msp3400c_set_mode(struct i2c_client *client, int mode)
188{ 188{
189 struct msp_state *state = to_state(i2c_get_clientdata(client)); 189 struct msp_state *state = to_state(i2c_get_clientdata(client));
190 struct msp3400c_init_data_dem *data = &msp3400c_init_data[mode]; 190 struct msp3400c_init_data_dem *data = &msp3400c_init_data[mode];
191 int tuner = (state->routing.input >> 3) & 1; 191 int tuner = (state->route_in >> 3) & 1;
192 int i; 192 int i;
193 193
194 v4l_dbg(1, msp_debug, client, "set_mode: %d\n", mode); 194 v4l_dbg(1, msp_debug, client, "set_mode: %d\n", mode);
@@ -896,7 +896,7 @@ static void msp34xxg_set_source(struct i2c_client *client, u16 reg, int in)
896static void msp34xxg_set_sources(struct i2c_client *client) 896static void msp34xxg_set_sources(struct i2c_client *client)
897{ 897{
898 struct msp_state *state = to_state(i2c_get_clientdata(client)); 898 struct msp_state *state = to_state(i2c_get_clientdata(client));
899 u32 in = state->routing.input; 899 u32 in = state->route_in;
900 900
901 msp34xxg_set_source(client, 0x0008, (in >> 4) & 0xf); 901 msp34xxg_set_source(client, 0x0008, (in >> 4) & 0xf);
902 /* quasi-peak detector is set to same input as the loudspeaker (MAIN) */ 902 /* quasi-peak detector is set to same input as the loudspeaker (MAIN) */
@@ -912,7 +912,7 @@ static void msp34xxg_set_sources(struct i2c_client *client)
912static void msp34xxg_reset(struct i2c_client *client) 912static void msp34xxg_reset(struct i2c_client *client)
913{ 913{
914 struct msp_state *state = to_state(i2c_get_clientdata(client)); 914 struct msp_state *state = to_state(i2c_get_clientdata(client));
915 int tuner = (state->routing.input >> 3) & 1; 915 int tuner = (state->route_in >> 3) & 1;
916 int modus; 916 int modus;
917 917
918 /* initialize std to 1 (autodetect) to signal that no standard is 918 /* initialize std to 1 (autodetect) to signal that no standard is
diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c
index fa7e5093edeb..684f62fa7897 100644
--- a/drivers/media/video/mt9m001.c
+++ b/drivers/media/video/mt9m001.c
@@ -207,7 +207,7 @@ static unsigned long mt9m001_query_bus_param(struct soc_camera_device *icd)
207 struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); 207 struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
208 struct soc_camera_link *icl = mt9m001->client->dev.platform_data; 208 struct soc_camera_link *icl = mt9m001->client->dev.platform_data;
209 /* MT9M001 has all capture_format parameters fixed */ 209 /* MT9M001 has all capture_format parameters fixed */
210 unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | 210 unsigned long flags = SOCAM_PCLK_SAMPLE_FALLING |
211 SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_HIGH | 211 SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_HIGH |
212 SOCAM_DATA_ACTIVE_HIGH | SOCAM_MASTER; 212 SOCAM_DATA_ACTIVE_HIGH | SOCAM_MASTER;
213 213
diff --git a/drivers/media/video/mt9t031.c b/drivers/media/video/mt9t031.c
index 23f9ce9d67ef..2b0927bfd217 100644
--- a/drivers/media/video/mt9t031.c
+++ b/drivers/media/video/mt9t031.c
@@ -141,8 +141,19 @@ static int get_shutter(struct soc_camera_device *icd, u32 *data)
141 141
142static int mt9t031_init(struct soc_camera_device *icd) 142static int mt9t031_init(struct soc_camera_device *icd)
143{ 143{
144 struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd);
145 struct soc_camera_link *icl = mt9t031->client->dev.platform_data;
144 int ret; 146 int ret;
145 147
148 if (icl->power) {
149 ret = icl->power(&mt9t031->client->dev, 1);
150 if (ret < 0) {
151 dev_err(icd->vdev->parent,
152 "Platform failed to power-on the camera.\n");
153 return ret;
154 }
155 }
156
146 /* Disable chip output, synchronous option update */ 157 /* Disable chip output, synchronous option update */
147 ret = reg_write(icd, MT9T031_RESET, 1); 158 ret = reg_write(icd, MT9T031_RESET, 1);
148 if (ret >= 0) 159 if (ret >= 0)
@@ -150,13 +161,23 @@ static int mt9t031_init(struct soc_camera_device *icd)
150 if (ret >= 0) 161 if (ret >= 0)
151 ret = reg_clear(icd, MT9T031_OUTPUT_CONTROL, 2); 162 ret = reg_clear(icd, MT9T031_OUTPUT_CONTROL, 2);
152 163
164 if (ret < 0 && icl->power)
165 icl->power(&mt9t031->client->dev, 0);
166
153 return ret >= 0 ? 0 : -EIO; 167 return ret >= 0 ? 0 : -EIO;
154} 168}
155 169
156static int mt9t031_release(struct soc_camera_device *icd) 170static int mt9t031_release(struct soc_camera_device *icd)
157{ 171{
172 struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd);
173 struct soc_camera_link *icl = mt9t031->client->dev.platform_data;
174
158 /* Disable the chip */ 175 /* Disable the chip */
159 reg_clear(icd, MT9T031_OUTPUT_CONTROL, 2); 176 reg_clear(icd, MT9T031_OUTPUT_CONTROL, 2);
177
178 if (icl->power)
179 icl->power(&mt9t031->client->dev, 0);
180
160 return 0; 181 return 0;
161} 182}
162 183
diff --git a/drivers/media/video/mx1_camera.c b/drivers/media/video/mx1_camera.c
new file mode 100644
index 000000000000..86fab56c5a20
--- /dev/null
+++ b/drivers/media/video/mx1_camera.c
@@ -0,0 +1,827 @@
1/*
2 * V4L2 Driver for i.MXL/i.MXL camera (CSI) host
3 *
4 * Copyright (C) 2008, Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
5 * Copyright (C) 2009, Darius Augulis <augulis.darius@gmail.com>
6 *
7 * Based on PXA SoC camera driver
8 * Copyright (C) 2006, Sascha Hauer, Pengutronix
9 * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#include <linux/clk.h>
17#include <linux/delay.h>
18#include <linux/device.h>
19#include <linux/dma-mapping.h>
20#include <linux/errno.h>
21#include <linux/fs.h>
22#include <linux/init.h>
23#include <linux/interrupt.h>
24#include <linux/io.h>
25#include <linux/kernel.h>
26#include <linux/mm.h>
27#include <linux/module.h>
28#include <linux/moduleparam.h>
29#include <linux/mutex.h>
30#include <linux/platform_device.h>
31#include <linux/time.h>
32#include <linux/version.h>
33#include <linux/videodev2.h>
34
35#include <media/soc_camera.h>
36#include <media/v4l2-common.h>
37#include <media/v4l2-dev.h>
38#include <media/videobuf-dma-contig.h>
39
40#include <asm/dma.h>
41#include <asm/fiq.h>
42#include <mach/dma-mx1-mx2.h>
43#include <mach/hardware.h>
44#include <mach/mx1_camera.h>
45
46/*
47 * CSI registers
48 */
49#define DMA_CCR(x) (0x8c + ((x) << 6)) /* Control Registers */
50#define DMA_DIMR 0x08 /* Interrupt mask Register */
51#define CSICR1 0x00 /* CSI Control Register 1 */
52#define CSISR 0x08 /* CSI Status Register */
53#define CSIRXR 0x10 /* CSI RxFIFO Register */
54
55#define CSICR1_RXFF_LEVEL(x) (((x) & 0x3) << 19)
56#define CSICR1_SOF_POL (1 << 17)
57#define CSICR1_SOF_INTEN (1 << 16)
58#define CSICR1_MCLKDIV(x) (((x) & 0xf) << 12)
59#define CSICR1_MCLKEN (1 << 9)
60#define CSICR1_FCC (1 << 8)
61#define CSICR1_BIG_ENDIAN (1 << 7)
62#define CSICR1_CLR_RXFIFO (1 << 5)
63#define CSICR1_GCLK_MODE (1 << 4)
64#define CSICR1_DATA_POL (1 << 2)
65#define CSICR1_REDGE (1 << 1)
66#define CSICR1_EN (1 << 0)
67
68#define CSISR_SFF_OR_INT (1 << 25)
69#define CSISR_RFF_OR_INT (1 << 24)
70#define CSISR_STATFF_INT (1 << 21)
71#define CSISR_RXFF_INT (1 << 18)
72#define CSISR_SOF_INT (1 << 16)
73#define CSISR_DRDY (1 << 0)
74
75#define VERSION_CODE KERNEL_VERSION(0, 0, 1)
76#define DRIVER_NAME "mx1-camera"
77
78#define CSI_IRQ_MASK (CSISR_SFF_OR_INT | CSISR_RFF_OR_INT | \
79 CSISR_STATFF_INT | CSISR_RXFF_INT | CSISR_SOF_INT)
80
81#define CSI_BUS_FLAGS (SOCAM_MASTER | SOCAM_HSYNC_ACTIVE_HIGH | \
82 SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW | \
83 SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING | \
84 SOCAM_DATA_ACTIVE_HIGH | SOCAM_DATA_ACTIVE_LOW | \
85 SOCAM_DATAWIDTH_8)
86
87#define MAX_VIDEO_MEM 16 /* Video memory limit in megabytes */
88
89/*
90 * Structures
91 */
92
93/* buffer for one video frame */
94struct mx1_buffer {
95 /* common v4l buffer stuff -- must be first */
96 struct videobuf_buffer vb;
97 const struct soc_camera_data_format *fmt;
98 int inwork;
99};
100
101/* i.MX1/i.MXL is only supposed to handle one camera on its Camera Sensor
102 * Interface. If anyone ever builds hardware to enable more than
103 * one camera, they will have to modify this driver too */
104struct mx1_camera_dev {
105 struct soc_camera_device *icd;
106 struct mx1_camera_pdata *pdata;
107 struct mx1_buffer *active;
108 struct device *dev;
109 struct resource *res;
110 struct clk *clk;
111 struct list_head capture;
112
113 void __iomem *base;
114 int dma_chan;
115 unsigned int irq;
116 unsigned long mclk;
117
118 spinlock_t lock;
119};
120
121/*
122 * Videobuf operations
123 */
124static int mx1_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
125 unsigned int *size)
126{
127 struct soc_camera_device *icd = vq->priv_data;
128
129 *size = icd->width * icd->height *
130 ((icd->current_fmt->depth + 7) >> 3);
131
132 if (!*count)
133 *count = 32;
134
135 while (*size * *count > MAX_VIDEO_MEM * 1024 * 1024)
136 (*count)--;
137
138 dev_dbg(&icd->dev, "count=%d, size=%d\n", *count, *size);
139
140 return 0;
141}
142
143static void free_buffer(struct videobuf_queue *vq, struct mx1_buffer *buf)
144{
145 struct soc_camera_device *icd = vq->priv_data;
146 struct videobuf_buffer *vb = &buf->vb;
147
148 BUG_ON(in_interrupt());
149
150 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
151 vb, vb->baddr, vb->bsize);
152
153 /* This waits until this buffer is out of danger, i.e., until it is no
154 * longer in STATE_QUEUED or STATE_ACTIVE */
155 videobuf_waiton(vb, 0, 0);
156 videobuf_dma_contig_free(vq, vb);
157
158 vb->state = VIDEOBUF_NEEDS_INIT;
159}
160
161static int mx1_videobuf_prepare(struct videobuf_queue *vq,
162 struct videobuf_buffer *vb, enum v4l2_field field)
163{
164 struct soc_camera_device *icd = vq->priv_data;
165 struct mx1_buffer *buf = container_of(vb, struct mx1_buffer, vb);
166 int ret;
167
168 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
169 vb, vb->baddr, vb->bsize);
170
171 /* Added list head initialization on alloc */
172 WARN_ON(!list_empty(&vb->queue));
173
174 BUG_ON(NULL == icd->current_fmt);
175
176 /* I think, in buf_prepare you only have to protect global data,
177 * the actual buffer is yours */
178 buf->inwork = 1;
179
180 if (buf->fmt != icd->current_fmt ||
181 vb->width != icd->width ||
182 vb->height != icd->height ||
183 vb->field != field) {
184 buf->fmt = icd->current_fmt;
185 vb->width = icd->width;
186 vb->height = icd->height;
187 vb->field = field;
188 vb->state = VIDEOBUF_NEEDS_INIT;
189 }
190
191 vb->size = vb->width * vb->height * ((buf->fmt->depth + 7) >> 3);
192 if (0 != vb->baddr && vb->bsize < vb->size) {
193 ret = -EINVAL;
194 goto out;
195 }
196
197 if (vb->state == VIDEOBUF_NEEDS_INIT) {
198 ret = videobuf_iolock(vq, vb, NULL);
199 if (ret)
200 goto fail;
201
202 vb->state = VIDEOBUF_PREPARED;
203 }
204
205 buf->inwork = 0;
206
207 return 0;
208
209fail:
210 free_buffer(vq, buf);
211out:
212 buf->inwork = 0;
213 return ret;
214}
215
216static int mx1_camera_setup_dma(struct mx1_camera_dev *pcdev)
217{
218 struct videobuf_buffer *vbuf = &pcdev->active->vb;
219 int ret;
220
221 if (unlikely(!pcdev->active)) {
222 dev_err(pcdev->dev, "DMA End IRQ with no active buffer\n");
223 return -EFAULT;
224 }
225
226 /* setup sg list for future DMA */
227 ret = imx_dma_setup_single(pcdev->dma_chan,
228 videobuf_to_dma_contig(vbuf),
229 vbuf->size, pcdev->res->start +
230 CSIRXR, DMA_MODE_READ);
231 if (unlikely(ret))
232 dev_err(pcdev->dev, "Failed to setup DMA sg list\n");
233
234 return ret;
235}
236
237static void mx1_videobuf_queue(struct videobuf_queue *vq,
238 struct videobuf_buffer *vb)
239{
240 struct soc_camera_device *icd = vq->priv_data;
241 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
242 struct mx1_camera_dev *pcdev = ici->priv;
243 struct mx1_buffer *buf = container_of(vb, struct mx1_buffer, vb);
244 unsigned long flags;
245
246 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
247 vb, vb->baddr, vb->bsize);
248
249 spin_lock_irqsave(&pcdev->lock, flags);
250
251 list_add_tail(&vb->queue, &pcdev->capture);
252
253 vb->state = VIDEOBUF_ACTIVE;
254
255 if (!pcdev->active) {
256 pcdev->active = buf;
257
258 /* setup sg list for future DMA */
259 if (!mx1_camera_setup_dma(pcdev)) {
260 unsigned int temp;
261 /* enable SOF irq */
262 temp = __raw_readl(pcdev->base + CSICR1) |
263 CSICR1_SOF_INTEN;
264 __raw_writel(temp, pcdev->base + CSICR1);
265 }
266 }
267
268 spin_unlock_irqrestore(&pcdev->lock, flags);
269}
270
271static void mx1_videobuf_release(struct videobuf_queue *vq,
272 struct videobuf_buffer *vb)
273{
274 struct mx1_buffer *buf = container_of(vb, struct mx1_buffer, vb);
275#ifdef DEBUG
276 struct soc_camera_device *icd = vq->priv_data;
277
278 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
279 vb, vb->baddr, vb->bsize);
280
281 switch (vb->state) {
282 case VIDEOBUF_ACTIVE:
283 dev_dbg(&icd->dev, "%s (active)\n", __func__);
284 break;
285 case VIDEOBUF_QUEUED:
286 dev_dbg(&icd->dev, "%s (queued)\n", __func__);
287 break;
288 case VIDEOBUF_PREPARED:
289 dev_dbg(&icd->dev, "%s (prepared)\n", __func__);
290 break;
291 default:
292 dev_dbg(&icd->dev, "%s (unknown)\n", __func__);
293 break;
294 }
295#endif
296
297 free_buffer(vq, buf);
298}
299
300static void mx1_camera_wakeup(struct mx1_camera_dev *pcdev,
301 struct videobuf_buffer *vb,
302 struct mx1_buffer *buf)
303{
304 /* _init is used to debug races, see comment in mx1_camera_reqbufs() */
305 list_del_init(&vb->queue);
306 vb->state = VIDEOBUF_DONE;
307 do_gettimeofday(&vb->ts);
308 vb->field_count++;
309 wake_up(&vb->done);
310
311 if (list_empty(&pcdev->capture)) {
312 pcdev->active = NULL;
313 return;
314 }
315
316 pcdev->active = list_entry(pcdev->capture.next,
317 struct mx1_buffer, vb.queue);
318
319 /* setup sg list for future DMA */
320 if (likely(!mx1_camera_setup_dma(pcdev))) {
321 unsigned int temp;
322
323 /* enable SOF irq */
324 temp = __raw_readl(pcdev->base + CSICR1) | CSICR1_SOF_INTEN;
325 __raw_writel(temp, pcdev->base + CSICR1);
326 }
327}
328
329static void mx1_camera_dma_irq(int channel, void *data)
330{
331 struct mx1_camera_dev *pcdev = data;
332 struct mx1_buffer *buf;
333 struct videobuf_buffer *vb;
334 unsigned long flags;
335
336 spin_lock_irqsave(&pcdev->lock, flags);
337
338 imx_dma_disable(channel);
339
340 if (unlikely(!pcdev->active)) {
341 dev_err(pcdev->dev, "DMA End IRQ with no active buffer\n");
342 goto out;
343 }
344
345 vb = &pcdev->active->vb;
346 buf = container_of(vb, struct mx1_buffer, vb);
347 WARN_ON(buf->inwork || list_empty(&vb->queue));
348 dev_dbg(pcdev->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
349 vb, vb->baddr, vb->bsize);
350
351 mx1_camera_wakeup(pcdev, vb, buf);
352out:
353 spin_unlock_irqrestore(&pcdev->lock, flags);
354}
355
356static struct videobuf_queue_ops mx1_videobuf_ops = {
357 .buf_setup = mx1_videobuf_setup,
358 .buf_prepare = mx1_videobuf_prepare,
359 .buf_queue = mx1_videobuf_queue,
360 .buf_release = mx1_videobuf_release,
361};
362
363static void mx1_camera_init_videobuf(struct videobuf_queue *q,
364 struct soc_camera_device *icd)
365{
366 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
367 struct mx1_camera_dev *pcdev = ici->priv;
368
369 videobuf_queue_dma_contig_init(q, &mx1_videobuf_ops, pcdev->dev,
370 &pcdev->lock,
371 V4L2_BUF_TYPE_VIDEO_CAPTURE,
372 V4L2_FIELD_NONE,
373 sizeof(struct mx1_buffer), icd);
374}
375
376static int mclk_get_divisor(struct mx1_camera_dev *pcdev)
377{
378 unsigned int mclk = pcdev->mclk;
379 unsigned long div;
380 unsigned long lcdclk;
381
382 lcdclk = clk_get_rate(pcdev->clk);
383
384 /* We verify platform_mclk_10khz != 0, so if anyone breaks it, here
385 * they get a nice Oops */
386 div = (lcdclk + 2 * mclk - 1) / (2 * mclk) - 1;
387
388 dev_dbg(pcdev->dev, "System clock %lukHz, target freq %dkHz, "
389 "divisor %lu\n", lcdclk / 1000, mclk / 1000, div);
390
391 return div;
392}
393
394static void mx1_camera_activate(struct mx1_camera_dev *pcdev)
395{
396 unsigned int csicr1 = CSICR1_EN;
397
398 dev_dbg(pcdev->dev, "Activate device\n");
399
400 clk_enable(pcdev->clk);
401
402 /* enable CSI before doing anything else */
403 __raw_writel(csicr1, pcdev->base + CSICR1);
404
405 csicr1 |= CSICR1_MCLKEN | CSICR1_FCC | CSICR1_GCLK_MODE;
406 csicr1 |= CSICR1_MCLKDIV(mclk_get_divisor(pcdev));
407 csicr1 |= CSICR1_RXFF_LEVEL(2); /* 16 words */
408
409 __raw_writel(csicr1, pcdev->base + CSICR1);
410}
411
412static void mx1_camera_deactivate(struct mx1_camera_dev *pcdev)
413{
414 dev_dbg(pcdev->dev, "Deactivate device\n");
415
416 /* Disable all CSI interface */
417 __raw_writel(0x00, pcdev->base + CSICR1);
418
419 clk_disable(pcdev->clk);
420}
421
422/* The following two functions absolutely depend on the fact, that
423 * there can be only one camera on i.MX1/i.MXL camera sensor interface */
424static int mx1_camera_add_device(struct soc_camera_device *icd)
425{
426 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
427 struct mx1_camera_dev *pcdev = ici->priv;
428 int ret;
429
430 if (pcdev->icd) {
431 ret = -EBUSY;
432 goto ebusy;
433 }
434
435 dev_info(&icd->dev, "MX1 Camera driver attached to camera %d\n",
436 icd->devnum);
437
438 mx1_camera_activate(pcdev);
439 ret = icd->ops->init(icd);
440
441 if (!ret)
442 pcdev->icd = icd;
443
444ebusy:
445 return ret;
446}
447
448static void mx1_camera_remove_device(struct soc_camera_device *icd)
449{
450 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
451 struct mx1_camera_dev *pcdev = ici->priv;
452 unsigned int csicr1;
453
454 BUG_ON(icd != pcdev->icd);
455
456 /* disable interrupts */
457 csicr1 = __raw_readl(pcdev->base + CSICR1) & ~CSI_IRQ_MASK;
458 __raw_writel(csicr1, pcdev->base + CSICR1);
459
460 /* Stop DMA engine */
461 imx_dma_disable(pcdev->dma_chan);
462
463 dev_info(&icd->dev, "MX1 Camera driver detached from camera %d\n",
464 icd->devnum);
465
466 icd->ops->release(icd);
467
468 mx1_camera_deactivate(pcdev);
469
470 pcdev->icd = NULL;
471}
472
473static int mx1_camera_set_crop(struct soc_camera_device *icd,
474 struct v4l2_rect *rect)
475{
476 return icd->ops->set_crop(icd, rect);
477}
478
479static int mx1_camera_set_bus_param(struct soc_camera_device *icd, __u32 pixfmt)
480{
481 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
482 struct mx1_camera_dev *pcdev = ici->priv;
483 unsigned long camera_flags, common_flags;
484 unsigned int csicr1;
485 int ret;
486
487 camera_flags = icd->ops->query_bus_param(icd);
488
489 /* MX1 supports only 8bit buswidth */
490 common_flags = soc_camera_bus_param_compatible(camera_flags,
491 CSI_BUS_FLAGS);
492 if (!common_flags)
493 return -EINVAL;
494
495 icd->buswidth = 8;
496
497 /* Make choises, based on platform choice */
498 if ((common_flags & SOCAM_VSYNC_ACTIVE_HIGH) &&
499 (common_flags & SOCAM_VSYNC_ACTIVE_LOW)) {
500 if (!pcdev->pdata ||
501 pcdev->pdata->flags & MX1_CAMERA_VSYNC_HIGH)
502 common_flags &= ~SOCAM_VSYNC_ACTIVE_LOW;
503 else
504 common_flags &= ~SOCAM_VSYNC_ACTIVE_HIGH;
505 }
506
507 if ((common_flags & SOCAM_PCLK_SAMPLE_RISING) &&
508 (common_flags & SOCAM_PCLK_SAMPLE_FALLING)) {
509 if (!pcdev->pdata ||
510 pcdev->pdata->flags & MX1_CAMERA_PCLK_RISING)
511 common_flags &= ~SOCAM_PCLK_SAMPLE_FALLING;
512 else
513 common_flags &= ~SOCAM_PCLK_SAMPLE_RISING;
514 }
515
516 if ((common_flags & SOCAM_DATA_ACTIVE_HIGH) &&
517 (common_flags & SOCAM_DATA_ACTIVE_LOW)) {
518 if (!pcdev->pdata ||
519 pcdev->pdata->flags & MX1_CAMERA_DATA_HIGH)
520 common_flags &= ~SOCAM_DATA_ACTIVE_LOW;
521 else
522 common_flags &= ~SOCAM_DATA_ACTIVE_HIGH;
523 }
524
525 ret = icd->ops->set_bus_param(icd, common_flags);
526 if (ret < 0)
527 return ret;
528
529 csicr1 = __raw_readl(pcdev->base + CSICR1);
530
531 if (common_flags & SOCAM_PCLK_SAMPLE_RISING)
532 csicr1 |= CSICR1_REDGE;
533 if (common_flags & SOCAM_VSYNC_ACTIVE_HIGH)
534 csicr1 |= CSICR1_SOF_POL;
535 if (common_flags & SOCAM_DATA_ACTIVE_LOW)
536 csicr1 |= CSICR1_DATA_POL;
537
538 __raw_writel(csicr1, pcdev->base + CSICR1);
539
540 return 0;
541}
542
543static int mx1_camera_set_fmt(struct soc_camera_device *icd,
544 struct v4l2_format *f)
545{
546 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
547 const struct soc_camera_format_xlate *xlate;
548 struct v4l2_pix_format *pix = &f->fmt.pix;
549 int ret;
550
551 xlate = soc_camera_xlate_by_fourcc(icd, pix->pixelformat);
552 if (!xlate) {
553 dev_warn(&ici->dev, "Format %x not found\n", pix->pixelformat);
554 return -EINVAL;
555 }
556
557 ret = icd->ops->set_fmt(icd, f);
558 if (!ret) {
559 icd->buswidth = xlate->buswidth;
560 icd->current_fmt = xlate->host_fmt;
561 }
562
563 return ret;
564}
565
566static int mx1_camera_try_fmt(struct soc_camera_device *icd,
567 struct v4l2_format *f)
568{
569 /* TODO: limit to mx1 hardware capabilities */
570
571 /* limit to sensor capabilities */
572 return icd->ops->try_fmt(icd, f);
573}
574
575static int mx1_camera_reqbufs(struct soc_camera_file *icf,
576 struct v4l2_requestbuffers *p)
577{
578 int i;
579
580 /* This is for locking debugging only. I removed spinlocks and now I
581 * check whether .prepare is ever called on a linked buffer, or whether
582 * a dma IRQ can occur for an in-work or unlinked buffer. Until now
583 * it hadn't triggered */
584 for (i = 0; i < p->count; i++) {
585 struct mx1_buffer *buf = container_of(icf->vb_vidq.bufs[i],
586 struct mx1_buffer, vb);
587 buf->inwork = 0;
588 INIT_LIST_HEAD(&buf->vb.queue);
589 }
590
591 return 0;
592}
593
594static unsigned int mx1_camera_poll(struct file *file, poll_table *pt)
595{
596 struct soc_camera_file *icf = file->private_data;
597 struct mx1_buffer *buf;
598
599 buf = list_entry(icf->vb_vidq.stream.next, struct mx1_buffer,
600 vb.stream);
601
602 poll_wait(file, &buf->vb.done, pt);
603
604 if (buf->vb.state == VIDEOBUF_DONE ||
605 buf->vb.state == VIDEOBUF_ERROR)
606 return POLLIN | POLLRDNORM;
607
608 return 0;
609}
610
611static int mx1_camera_querycap(struct soc_camera_host *ici,
612 struct v4l2_capability *cap)
613{
614 /* cap->name is set by the friendly caller:-> */
615 strlcpy(cap->card, "i.MX1/i.MXL Camera", sizeof(cap->card));
616 cap->version = VERSION_CODE;
617 cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
618
619 return 0;
620}
621
622static struct soc_camera_host_ops mx1_soc_camera_host_ops = {
623 .owner = THIS_MODULE,
624 .add = mx1_camera_add_device,
625 .remove = mx1_camera_remove_device,
626 .set_bus_param = mx1_camera_set_bus_param,
627 .set_crop = mx1_camera_set_crop,
628 .set_fmt = mx1_camera_set_fmt,
629 .try_fmt = mx1_camera_try_fmt,
630 .init_videobuf = mx1_camera_init_videobuf,
631 .reqbufs = mx1_camera_reqbufs,
632 .poll = mx1_camera_poll,
633 .querycap = mx1_camera_querycap,
634};
635
636/* Should be allocated dynamically too, but we have only one. */
637static struct soc_camera_host mx1_soc_camera_host = {
638 .drv_name = DRIVER_NAME,
639 .ops = &mx1_soc_camera_host_ops,
640};
641
642static struct fiq_handler fh = {
643 .name = "csi_sof"
644};
645
646static int __init mx1_camera_probe(struct platform_device *pdev)
647{
648 struct mx1_camera_dev *pcdev;
649 struct resource *res;
650 struct pt_regs regs;
651 struct clk *clk;
652 void __iomem *base;
653 unsigned int irq;
654 int err = 0;
655
656 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
657 irq = platform_get_irq(pdev, 0);
658 if (!res || !irq) {
659 err = -ENODEV;
660 goto exit;
661 }
662
663 clk = clk_get(&pdev->dev, "csi_clk");
664 if (IS_ERR(clk)) {
665 err = PTR_ERR(clk);
666 goto exit;
667 }
668
669 pcdev = kzalloc(sizeof(*pcdev), GFP_KERNEL);
670 if (!pcdev) {
671 dev_err(&pdev->dev, "Could not allocate pcdev\n");
672 err = -ENOMEM;
673 goto exit_put_clk;
674 }
675
676 dev_set_drvdata(&pdev->dev, pcdev);
677 pcdev->res = res;
678 pcdev->clk = clk;
679
680 pcdev->pdata = pdev->dev.platform_data;
681
682 if (pcdev->pdata)
683 pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
684
685 if (!pcdev->mclk) {
686 dev_warn(&pdev->dev,
687 "mclk_10khz == 0! Please, fix your platform data. "
688 "Using default 20MHz\n");
689 pcdev->mclk = 20000000;
690 }
691
692 INIT_LIST_HEAD(&pcdev->capture);
693 spin_lock_init(&pcdev->lock);
694
695 /*
696 * Request the regions.
697 */
698 if (!request_mem_region(res->start, resource_size(res), DRIVER_NAME)) {
699 err = -EBUSY;
700 goto exit_kfree;
701 }
702
703 base = ioremap(res->start, resource_size(res));
704 if (!base) {
705 err = -ENOMEM;
706 goto exit_release;
707 }
708 pcdev->irq = irq;
709 pcdev->base = base;
710 pcdev->dev = &pdev->dev;
711
712 /* request dma */
713 pcdev->dma_chan = imx_dma_request_by_prio(DRIVER_NAME, DMA_PRIO_HIGH);
714 if (pcdev->dma_chan < 0) {
715 dev_err(pcdev->dev, "Can't request DMA for MX1 CSI\n");
716 err = -EBUSY;
717 goto exit_iounmap;
718 }
719 dev_dbg(pcdev->dev, "got DMA channel %d\n", pcdev->dma_chan);
720
721 imx_dma_setup_handlers(pcdev->dma_chan, mx1_camera_dma_irq, NULL,
722 pcdev);
723
724 imx_dma_config_channel(pcdev->dma_chan, IMX_DMA_TYPE_FIFO,
725 IMX_DMA_MEMSIZE_32, DMA_REQ_CSI_R, 0);
726 /* burst length : 16 words = 64 bytes */
727 imx_dma_config_burstlen(pcdev->dma_chan, 0);
728
729 /* request irq */
730 err = claim_fiq(&fh);
731 if (err) {
732 dev_err(pcdev->dev, "Camera interrupt register failed \n");
733 goto exit_free_dma;
734 }
735
736 set_fiq_handler(&mx1_camera_sof_fiq_start, &mx1_camera_sof_fiq_end -
737 &mx1_camera_sof_fiq_start);
738
739 regs.ARM_r8 = DMA_BASE + DMA_DIMR;
740 regs.ARM_r9 = DMA_BASE + DMA_CCR(pcdev->dma_chan);
741 regs.ARM_r10 = (long)pcdev->base + CSICR1;
742 regs.ARM_fp = (long)pcdev->base + CSISR;
743 regs.ARM_sp = 1 << pcdev->dma_chan;
744 set_fiq_regs(&regs);
745
746 mxc_set_irq_fiq(irq, 1);
747 enable_fiq(irq);
748
749 mx1_soc_camera_host.priv = pcdev;
750 mx1_soc_camera_host.dev.parent = &pdev->dev;
751 mx1_soc_camera_host.nr = pdev->id;
752 err = soc_camera_host_register(&mx1_soc_camera_host);
753 if (err)
754 goto exit_free_irq;
755
756 dev_info(&pdev->dev, "MX1 Camera driver loaded\n");
757
758 return 0;
759
760exit_free_irq:
761 disable_fiq(irq);
762 mxc_set_irq_fiq(irq, 0);
763 release_fiq(&fh);
764exit_free_dma:
765 imx_dma_free(pcdev->dma_chan);
766exit_iounmap:
767 iounmap(base);
768exit_release:
769 release_mem_region(res->start, resource_size(res));
770exit_kfree:
771 kfree(pcdev);
772exit_put_clk:
773 clk_put(clk);
774exit:
775 return err;
776}
777
778static int __exit mx1_camera_remove(struct platform_device *pdev)
779{
780 struct mx1_camera_dev *pcdev = platform_get_drvdata(pdev);
781 struct resource *res;
782
783 imx_dma_free(pcdev->dma_chan);
784 disable_fiq(pcdev->irq);
785 mxc_set_irq_fiq(pcdev->irq, 0);
786 release_fiq(&fh);
787
788 clk_put(pcdev->clk);
789
790 soc_camera_host_unregister(&mx1_soc_camera_host);
791
792 iounmap(pcdev->base);
793
794 res = pcdev->res;
795 release_mem_region(res->start, resource_size(res));
796
797 kfree(pcdev);
798
799 dev_info(&pdev->dev, "MX1 Camera driver unloaded\n");
800
801 return 0;
802}
803
804static struct platform_driver mx1_camera_driver = {
805 .driver = {
806 .name = DRIVER_NAME,
807 },
808 .remove = __exit_p(mx1_camera_remove),
809};
810
811static int __init mx1_camera_init(void)
812{
813 return platform_driver_probe(&mx1_camera_driver, mx1_camera_probe);
814}
815
816static void __exit mx1_camera_exit(void)
817{
818 return platform_driver_unregister(&mx1_camera_driver);
819}
820
821module_init(mx1_camera_init);
822module_exit(mx1_camera_exit);
823
824MODULE_DESCRIPTION("i.MX1/i.MXL SoC Camera Host driver");
825MODULE_AUTHOR("Paulius Zaleckas <paulius.zaleckas@teltonika.lt>");
826MODULE_LICENSE("GPL v2");
827MODULE_ALIAS("platform:" DRIVER_NAME);
diff --git a/drivers/media/video/mx3_camera.c b/drivers/media/video/mx3_camera.c
index 70629e172e65..c462b811e994 100644
--- a/drivers/media/video/mx3_camera.c
+++ b/drivers/media/video/mx3_camera.c
@@ -1100,7 +1100,7 @@ static int mx3_camera_probe(struct platform_device *pdev)
1100 } 1100 }
1101 memset(mx3_cam, 0, sizeof(*mx3_cam)); 1101 memset(mx3_cam, 0, sizeof(*mx3_cam));
1102 1102
1103 mx3_cam->clk = clk_get(&pdev->dev, "csi_clk"); 1103 mx3_cam->clk = clk_get(&pdev->dev, NULL);
1104 if (IS_ERR(mx3_cam->clk)) { 1104 if (IS_ERR(mx3_cam->clk)) {
1105 err = PTR_ERR(mx3_cam->clk); 1105 err = PTR_ERR(mx3_cam->clk);
1106 goto eclkget; 1106 goto eclkget;
diff --git a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c
index 84aec62e8452..3be5a71bdac2 100644
--- a/drivers/media/video/mxb.c
+++ b/drivers/media/video/mxb.c
@@ -83,9 +83,14 @@ static struct {
83static int video_audio_connect[MXB_INPUTS] = 83static int video_audio_connect[MXB_INPUTS] =
84 { 0, 1, 3, 3 }; 84 { 0, 1, 3, 3 };
85 85
86struct mxb_routing {
87 u32 input;
88 u32 output;
89};
90
86/* These are the necessary input-output-pins for bringing one audio source 91/* These are the necessary input-output-pins for bringing one audio source
87 (see above) to the CD-output. Note that gain is set to 0 in this table. */ 92 (see above) to the CD-output. Note that gain is set to 0 in this table. */
88static struct v4l2_routing TEA6420_cd[MXB_AUDIOS + 1][2] = { 93static struct mxb_routing TEA6420_cd[MXB_AUDIOS + 1][2] = {
89 { { 1, 1 }, { 1, 1 } }, /* Tuner */ 94 { { 1, 1 }, { 1, 1 } }, /* Tuner */
90 { { 5, 1 }, { 6, 1 } }, /* AUX 1 */ 95 { { 5, 1 }, { 6, 1 } }, /* AUX 1 */
91 { { 4, 1 }, { 6, 1 } }, /* AUX 2 */ 96 { { 4, 1 }, { 6, 1 } }, /* AUX 2 */
@@ -97,7 +102,7 @@ static struct v4l2_routing TEA6420_cd[MXB_AUDIOS + 1][2] = {
97 102
98/* These are the necessary input-output-pins for bringing one audio source 103/* These are the necessary input-output-pins for bringing one audio source
99 (see above) to the line-output. Note that gain is set to 0 in this table. */ 104 (see above) to the line-output. Note that gain is set to 0 in this table. */
100static struct v4l2_routing TEA6420_line[MXB_AUDIOS + 1][2] = { 105static struct mxb_routing TEA6420_line[MXB_AUDIOS + 1][2] = {
101 { { 2, 3 }, { 1, 2 } }, 106 { { 2, 3 }, { 1, 2 } },
102 { { 5, 3 }, { 6, 2 } }, 107 { { 5, 3 }, { 6, 2 } },
103 { { 4, 3 }, { 6, 2 } }, 108 { { 4, 3 }, { 6, 2 } },
@@ -134,10 +139,6 @@ struct mxb
134 139
135#define saa7111a_call(mxb, o, f, args...) \ 140#define saa7111a_call(mxb, o, f, args...) \
136 v4l2_subdev_call(mxb->saa7111a, o, f, ##args) 141 v4l2_subdev_call(mxb->saa7111a, o, f, ##args)
137#define tea6420_1_call(mxb, o, f, args...) \
138 v4l2_subdev_call(mxb->tea6420_1, o, f, ##args)
139#define tea6420_2_call(mxb, o, f, args...) \
140 v4l2_subdev_call(mxb->tea6420_2, o, f, ##args)
141#define tda9840_call(mxb, o, f, args...) \ 142#define tda9840_call(mxb, o, f, args...) \
142 v4l2_subdev_call(mxb->tda9840, o, f, ##args) 143 v4l2_subdev_call(mxb->tda9840, o, f, ##args)
143#define tea6415c_call(mxb, o, f, args...) \ 144#define tea6415c_call(mxb, o, f, args...) \
@@ -147,6 +148,22 @@ struct mxb
147#define call_all(dev, o, f, args...) \ 148#define call_all(dev, o, f, args...) \
148 v4l2_device_call_until_err(&dev->v4l2_dev, 0, o, f, ##args) 149 v4l2_device_call_until_err(&dev->v4l2_dev, 0, o, f, ##args)
149 150
151static inline void tea6420_route_cd(struct mxb *mxb, int idx)
152{
153 v4l2_subdev_call(mxb->tea6420_1, audio, s_routing,
154 TEA6420_cd[idx][0].input, TEA6420_cd[idx][0].output, 0);
155 v4l2_subdev_call(mxb->tea6420_2, audio, s_routing,
156 TEA6420_cd[idx][1].input, TEA6420_cd[idx][1].output, 0);
157}
158
159static inline void tea6420_route_line(struct mxb *mxb, int idx)
160{
161 v4l2_subdev_call(mxb->tea6420_1, audio, s_routing,
162 TEA6420_line[idx][0].input, TEA6420_line[idx][0].output, 0);
163 v4l2_subdev_call(mxb->tea6420_2, audio, s_routing,
164 TEA6420_line[idx][1].input, TEA6420_line[idx][1].output, 0);
165}
166
150static struct saa7146_extension extension; 167static struct saa7146_extension extension;
151 168
152static int mxb_probe(struct saa7146_dev *dev) 169static int mxb_probe(struct saa7146_dev *dev)
@@ -168,13 +185,20 @@ static int mxb_probe(struct saa7146_dev *dev)
168 return -EFAULT; 185 return -EFAULT;
169 } 186 }
170 187
171 mxb->saa7111a = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "saa7115", "saa7111", I2C_SAA7111A); 188 mxb->saa7111a = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
172 mxb->tea6420_1 = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tea6420", "tea6420", I2C_TEA6420_1); 189 "saa7115", "saa7111", I2C_SAA7111A);
173 mxb->tea6420_2 = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tea6420", "tea6420", I2C_TEA6420_2); 190 mxb->tea6420_1 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
174 mxb->tea6415c = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tea6415c", "tea6415c", I2C_TEA6415C); 191 "tea6420", "tea6420", I2C_TEA6420_1);
175 mxb->tda9840 = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tda9840", "tda9840", I2C_TDA9840); 192 mxb->tea6420_2 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
176 mxb->tuner = v4l2_i2c_new_subdev(&mxb->i2c_adapter, "tuner", "tuner", I2C_TUNER); 193 "tea6420", "tea6420", I2C_TEA6420_2);
177 if (v4l2_i2c_new_subdev(&mxb->i2c_adapter, "saa5246a", "saa5246a", I2C_SAA5246A)) { 194 mxb->tea6415c = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
195 "tea6415c", "tea6415c", I2C_TEA6415C);
196 mxb->tda9840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
197 "tda9840", "tda9840", I2C_TDA9840);
198 mxb->tuner = v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
199 "tuner", "tuner", I2C_TUNER);
200 if (v4l2_i2c_new_subdev(&dev->v4l2_dev, &mxb->i2c_adapter,
201 "saa5246a", "saa5246a", I2C_SAA5246A)) {
178 printk(KERN_INFO "mxb: found teletext decoder\n"); 202 printk(KERN_INFO "mxb: found teletext decoder\n");
179 } 203 }
180 204
@@ -261,18 +285,16 @@ static int mxb_init_done(struct saa7146_dev* dev)
261 struct i2c_msg msg; 285 struct i2c_msg msg;
262 struct tuner_setup tun_setup; 286 struct tuner_setup tun_setup;
263 v4l2_std_id std = V4L2_STD_PAL_BG; 287 v4l2_std_id std = V4L2_STD_PAL_BG;
264 struct v4l2_routing route;
265 288
266 int i = 0, err = 0; 289 int i = 0, err = 0;
267 290
268 /* select video mode in saa7111a */ 291 /* select video mode in saa7111a */
269 saa7111a_call(mxb, tuner, s_std, std); 292 saa7111a_call(mxb, core, s_std, std);
270 293
271 /* select tuner-output on saa7111a */ 294 /* select tuner-output on saa7111a */
272 i = 0; 295 i = 0;
273 route.input = SAA7115_COMPOSITE0; 296 saa7111a_call(mxb, video, s_routing, SAA7115_COMPOSITE0,
274 route.output = SAA7111_FMT_CCIR | SAA7111_VBI_BYPASS; 297 SAA7111_FMT_CCIR | SAA7111_VBI_BYPASS, 0);
275 saa7111a_call(mxb, video, s_routing, &route);
276 298
277 /* select a tuner type */ 299 /* select a tuner type */
278 tun_setup.mode_mask = T_ANALOG_TV; 300 tun_setup.mode_mask = T_ANALOG_TV;
@@ -286,23 +308,17 @@ static int mxb_init_done(struct saa7146_dev* dev)
286 tuner_call(mxb, tuner, s_frequency, &mxb->cur_freq); 308 tuner_call(mxb, tuner, s_frequency, &mxb->cur_freq);
287 309
288 /* set a default video standard */ 310 /* set a default video standard */
289 tuner_call(mxb, tuner, s_std, std); 311 tuner_call(mxb, core, s_std, std);
290 312
291 /* mute audio on tea6420s */ 313 /* mute audio on tea6420s */
292 tea6420_1_call(mxb, audio, s_routing, &TEA6420_line[6][0]); 314 tea6420_route_line(mxb, 6);
293 tea6420_2_call(mxb, audio, s_routing, &TEA6420_line[6][1]); 315 tea6420_route_cd(mxb, 6);
294 tea6420_1_call(mxb, audio, s_routing, &TEA6420_line[6][0]);
295 tea6420_2_call(mxb, audio, s_routing, &TEA6420_line[6][1]);
296 316
297 /* switch to tuner-channel on tea6415c */ 317 /* switch to tuner-channel on tea6415c */
298 route.input = 3; 318 tea6415c_call(mxb, video, s_routing, 3, 17, 0);
299 route.output = 17;
300 tea6415c_call(mxb, video, s_routing, &route);
301 319
302 /* select tuner-output on multicable on tea6415c */ 320 /* select tuner-output on multicable on tea6415c */
303 route.input = 3; 321 tea6415c_call(mxb, video, s_routing, 3, 13, 0);
304 route.output = 13;
305 tea6415c_call(mxb, video, s_routing, &route);
306 322
307 /* the rest for mxb */ 323 /* the rest for mxb */
308 mxb->cur_input = 0; 324 mxb->cur_input = 0;
@@ -426,18 +442,9 @@ static int vidioc_s_ctrl(struct file *file, void *fh, struct v4l2_control *vc)
426 442
427 if (vc->id == V4L2_CID_AUDIO_MUTE) { 443 if (vc->id == V4L2_CID_AUDIO_MUTE) {
428 mxb->cur_mute = vc->value; 444 mxb->cur_mute = vc->value;
429 if (!vc->value) { 445 /* switch the audio-source */
430 /* switch the audio-source */ 446 tea6420_route_line(mxb, vc->value ? 6 :
431 tea6420_1_call(mxb, audio, s_routing, 447 video_audio_connect[mxb->cur_input]);
432 &TEA6420_line[video_audio_connect[mxb->cur_input]][0]);
433 tea6420_2_call(mxb, audio, s_routing,
434 &TEA6420_line[video_audio_connect[mxb->cur_input]][1]);
435 } else {
436 tea6420_1_call(mxb, audio, s_routing,
437 &TEA6420_line[6][0]);
438 tea6420_2_call(mxb, audio, s_routing,
439 &TEA6420_line[6][1]);
440 }
441 DEB_EE(("VIDIOC_S_CTRL, V4L2_CID_AUDIO_MUTE: %d.\n", vc->value)); 448 DEB_EE(("VIDIOC_S_CTRL, V4L2_CID_AUDIO_MUTE: %d.\n", vc->value));
442 } 449 }
443 return 0; 450 return 0;
@@ -466,7 +473,7 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int input)
466{ 473{
467 struct saa7146_dev *dev = ((struct saa7146_fh *)fh)->dev; 474 struct saa7146_dev *dev = ((struct saa7146_fh *)fh)->dev;
468 struct mxb *mxb = (struct mxb *)dev->ext_priv; 475 struct mxb *mxb = (struct mxb *)dev->ext_priv;
469 struct v4l2_routing route; 476 int err = 0;
470 int i = 0; 477 int i = 0;
471 478
472 DEB_EE(("VIDIOC_S_INPUT %d.\n", input)); 479 DEB_EE(("VIDIOC_S_INPUT %d.\n", input));
@@ -484,16 +491,12 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int input)
484 switch (input) { 491 switch (input) {
485 case TUNER: 492 case TUNER:
486 i = SAA7115_COMPOSITE0; 493 i = SAA7115_COMPOSITE0;
487 route.input = 3;
488 route.output = 17;
489 494
490 if (tea6415c_call(mxb, video, s_routing, &route)) { 495 err = tea6415c_call(mxb, video, s_routing, 3, 17, 0);
491 printk(KERN_ERR "VIDIOC_S_INPUT: could not address tea6415c #1\n"); 496
492 return -EFAULT;
493 }
494 /* connect tuner-output always to multicable */ 497 /* connect tuner-output always to multicable */
495 route.input = 3; 498 if (!err)
496 route.output = 13; 499 err = tea6415c_call(mxb, video, s_routing, 3, 13, 0);
497 break; 500 break;
498 case AUX3_YC: 501 case AUX3_YC:
499 /* nothing to be done here. aux3_yc is 502 /* nothing to be done here. aux3_yc is
@@ -507,37 +510,20 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int input)
507 break; 510 break;
508 case AUX1: 511 case AUX1:
509 i = SAA7115_COMPOSITE0; 512 i = SAA7115_COMPOSITE0;
510 route.input = 1; 513 err = tea6415c_call(mxb, video, s_routing, 1, 17, 0);
511 route.output = 17;
512 break; 514 break;
513 } 515 }
514 516
515 /* switch video in tea6415c only if necessary */ 517 if (err)
516 switch (input) { 518 return err;
517 case TUNER:
518 case AUX1:
519 if (tea6415c_call(mxb, video, s_routing, &route)) {
520 printk(KERN_ERR "VIDIOC_S_INPUT: could not address tea6415c #3\n");
521 return -EFAULT;
522 }
523 break;
524 default:
525 break;
526 }
527 519
528 /* switch video in saa7111a */ 520 /* switch video in saa7111a */
529 route.input = i; 521 if (saa7111a_call(mxb, video, s_routing, i, 0, 0))
530 route.output = 0;
531 if (saa7111a_call(mxb, video, s_routing, &route))
532 printk(KERN_ERR "VIDIOC_S_INPUT: could not address saa7111a #1.\n"); 522 printk(KERN_ERR "VIDIOC_S_INPUT: could not address saa7111a #1.\n");
533 523
534 /* switch the audio-source only if necessary */ 524 /* switch the audio-source only if necessary */
535 if (0 == mxb->cur_mute) { 525 if (0 == mxb->cur_mute)
536 tea6420_1_call(mxb, audio, s_routing, 526 tea6420_route_line(mxb, video_audio_connect[input]);
537 &TEA6420_line[video_audio_connect[input]][0]);
538 tea6420_2_call(mxb, audio, s_routing,
539 &TEA6420_line[video_audio_connect[input]][1]);
540 }
541 527
542 return 0; 528 return 0;
543} 529}
@@ -679,9 +665,7 @@ static long vidioc_default(struct file *file, void *fh, int cmd, void *arg)
679 665
680 DEB_EE(("MXB_S_AUDIO_CD: i:%d.\n", i)); 666 DEB_EE(("MXB_S_AUDIO_CD: i:%d.\n", i));
681 667
682 tea6420_1_call(mxb, audio, s_routing, &TEA6420_cd[i][0]); 668 tea6420_route_cd(mxb, i);
683 tea6420_2_call(mxb, audio, s_routing, &TEA6420_cd[i][1]);
684
685 return 0; 669 return 0;
686 } 670 }
687 case MXB_S_AUDIO_LINE: 671 case MXB_S_AUDIO_LINE:
@@ -694,9 +678,7 @@ static long vidioc_default(struct file *file, void *fh, int cmd, void *arg)
694 } 678 }
695 679
696 DEB_EE(("MXB_S_AUDIO_LINE: i:%d.\n", i)); 680 DEB_EE(("MXB_S_AUDIO_LINE: i:%d.\n", i));
697 tea6420_1_call(mxb, audio, s_routing, &TEA6420_line[i][0]); 681 tea6420_route_line(mxb, i);
698 tea6420_2_call(mxb, audio, s_routing, &TEA6420_line[i][1]);
699
700 return 0; 682 return 0;
701 } 683 }
702 default: 684 default:
@@ -788,7 +770,7 @@ static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *standa
788 saa7146_write(dev, GPIO_CTRL, 0x00404050); 770 saa7146_write(dev, GPIO_CTRL, 0x00404050);
789 /* unset the 7111 gpio register -- I don't know what this does exactly */ 771 /* unset the 7111 gpio register -- I don't know what this does exactly */
790 saa7111a_call(mxb, core, s_gpio, 0); 772 saa7111a_call(mxb, core, s_gpio, 0);
791 tuner_call(mxb, tuner, s_std, std); 773 tuner_call(mxb, core, s_std, std);
792 } else { 774 } else {
793 v4l2_std_id std = V4L2_STD_PAL_BG; 775 v4l2_std_id std = V4L2_STD_PAL_BG;
794 776
@@ -797,7 +779,7 @@ static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *standa
797 saa7146_write(dev, GPIO_CTRL, 0x00404050); 779 saa7146_write(dev, GPIO_CTRL, 0x00404050);
798 /* set the 7111 gpio register -- I don't know what this does exactly */ 780 /* set the 7111 gpio register -- I don't know what this does exactly */
799 saa7111a_call(mxb, core, s_gpio, 1); 781 saa7111a_call(mxb, core, s_gpio, 1);
800 tuner_call(mxb, tuner, s_std, std); 782 tuner_call(mxb, core, s_std, std);
801 } 783 }
802 return 0; 784 return 0;
803} 785}
diff --git a/drivers/media/video/ov772x.c b/drivers/media/video/ov772x.c
index 84b0fc1bb237..c0d911252862 100644
--- a/drivers/media/video/ov772x.c
+++ b/drivers/media/video/ov772x.c
@@ -169,11 +169,11 @@
169#define GAM15 0x8C /* Gamma Curve 15th segment input end point */ 169#define GAM15 0x8C /* Gamma Curve 15th segment input end point */
170#define SLOP 0x8D /* Gamma curve highest segment slope */ 170#define SLOP 0x8D /* Gamma curve highest segment slope */
171#define DNSTH 0x8E /* De-noise threshold */ 171#define DNSTH 0x8E /* De-noise threshold */
172#define EDGE0 0x8F /* Edge enhancement control 0 */ 172#define EDGE_STRNGT 0x8F /* Edge strength control when manual mode */
173#define EDGE1 0x90 /* Edge enhancement control 1 */ 173#define EDGE_TRSHLD 0x90 /* Edge threshold control when manual mode */
174#define DNSOFF 0x91 /* Auto De-noise threshold control */ 174#define DNSOFF 0x91 /* Auto De-noise threshold control */
175#define EDGE2 0x92 /* Edge enhancement strength low point control */ 175#define EDGE_UPPER 0x92 /* Edge strength upper limit when Auto mode */
176#define EDGE3 0x93 /* Edge enhancement strength high point control */ 176#define EDGE_LOWER 0x93 /* Edge strength lower limit when Auto mode */
177#define MTX1 0x94 /* Matrix coefficient 1 */ 177#define MTX1 0x94 /* Matrix coefficient 1 */
178#define MTX2 0x95 /* Matrix coefficient 2 */ 178#define MTX2 0x95 /* Matrix coefficient 2 */
179#define MTX3 0x96 /* Matrix coefficient 3 */ 179#define MTX3 0x96 /* Matrix coefficient 3 */
@@ -358,6 +358,14 @@
358#define VOSZ_VGA 0xF0 358#define VOSZ_VGA 0xF0
359#define VOSZ_QVGA 0x78 359#define VOSZ_QVGA 0x78
360 360
361/* DSPAUTO (DSP Auto Function ON/OFF Control) */
362#define AWB_ACTRL 0x80 /* AWB auto threshold control */
363#define DENOISE_ACTRL 0x40 /* De-noise auto threshold control */
364#define EDGE_ACTRL 0x20 /* Edge enhancement auto strength control */
365#define UV_ACTRL 0x10 /* UV adjust auto slope control */
366#define SCAL0_ACTRL 0x08 /* Auto scaling factor control */
367#define SCAL1_2_ACTRL 0x04 /* Auto scaling factor control */
368
361/* 369/*
362 * ID 370 * ID
363 */ 371 */
@@ -670,7 +678,7 @@ static int ov772x_set_bus_param(struct soc_camera_device *icd,
670static unsigned long ov772x_query_bus_param(struct soc_camera_device *icd) 678static unsigned long ov772x_query_bus_param(struct soc_camera_device *icd)
671{ 679{
672 struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd); 680 struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd);
673 struct soc_camera_link *icl = priv->client->dev.platform_data; 681 struct soc_camera_link *icl = &priv->info->link;
674 unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER | 682 unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |
675 SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH | 683 SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |
676 SOCAM_DATA_ACTIVE_HIGH | priv->info->buswidth; 684 SOCAM_DATA_ACTIVE_HIGH | priv->info->buswidth;
@@ -816,6 +824,53 @@ static int ov772x_set_params(struct ov772x_priv *priv, u32 width, u32 height,
816 ov772x_reset(priv->client); 824 ov772x_reset(priv->client);
817 825
818 /* 826 /*
827 * Edge Ctrl
828 */
829 if (priv->info->edgectrl.strength & OV772X_MANUAL_EDGE_CTRL) {
830
831 /*
832 * Manual Edge Control Mode
833 *
834 * Edge auto strength bit is set by default.
835 * Remove it when manual mode.
836 */
837
838 ret = ov772x_mask_set(priv->client, DSPAUTO, EDGE_ACTRL, 0x00);
839 if (ret < 0)
840 goto ov772x_set_fmt_error;
841
842 ret = ov772x_mask_set(priv->client,
843 EDGE_TRSHLD, EDGE_THRESHOLD_MASK,
844 priv->info->edgectrl.threshold);
845 if (ret < 0)
846 goto ov772x_set_fmt_error;
847
848 ret = ov772x_mask_set(priv->client,
849 EDGE_STRNGT, EDGE_STRENGTH_MASK,
850 priv->info->edgectrl.strength);
851 if (ret < 0)
852 goto ov772x_set_fmt_error;
853
854 } else if (priv->info->edgectrl.upper > priv->info->edgectrl.lower) {
855 /*
856 * Auto Edge Control Mode
857 *
858 * set upper and lower limit
859 */
860 ret = ov772x_mask_set(priv->client,
861 EDGE_UPPER, EDGE_UPPER_MASK,
862 priv->info->edgectrl.upper);
863 if (ret < 0)
864 goto ov772x_set_fmt_error;
865
866 ret = ov772x_mask_set(priv->client,
867 EDGE_LOWER, EDGE_LOWER_MASK,
868 priv->info->edgectrl.lower);
869 if (ret < 0)
870 goto ov772x_set_fmt_error;
871 }
872
873 /*
819 * set size format 874 * set size format
820 */ 875 */
821 ret = ov772x_write_array(priv->client, priv->win->regs); 876 ret = ov772x_write_array(priv->client, priv->win->regs);
diff --git a/drivers/media/video/pvrusb2/pvrusb2-audio.c b/drivers/media/video/pvrusb2/pvrusb2-audio.c
index ccf2a3c7ad06..10ef1a2c13ea 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-audio.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-audio.c
@@ -58,9 +58,9 @@ static const struct routing_scheme routing_schemes[] = {
58void pvr2_msp3400_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd) 58void pvr2_msp3400_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
59{ 59{
60 if (hdw->input_dirty || hdw->force_dirty) { 60 if (hdw->input_dirty || hdw->force_dirty) {
61 struct v4l2_routing route;
62 const struct routing_scheme *sp; 61 const struct routing_scheme *sp;
63 unsigned int sid = hdw->hdw_desc->signal_routing_scheme; 62 unsigned int sid = hdw->hdw_desc->signal_routing_scheme;
63 u32 input;
64 64
65 pvr2_trace(PVR2_TRACE_CHIPS, "subdev msp3400 v4l2 set_stereo"); 65 pvr2_trace(PVR2_TRACE_CHIPS, "subdev msp3400 v4l2 set_stereo");
66 66
@@ -68,7 +68,7 @@ void pvr2_msp3400_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
68 ((sp = routing_schemes + sid) != NULL) && 68 ((sp = routing_schemes + sid) != NULL) &&
69 (hdw->input_val >= 0) && 69 (hdw->input_val >= 0) &&
70 (hdw->input_val < sp->cnt)) { 70 (hdw->input_val < sp->cnt)) {
71 route.input = sp->def[hdw->input_val]; 71 input = sp->def[hdw->input_val];
72 } else { 72 } else {
73 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 73 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
74 "*** WARNING *** subdev msp3400 set_input:" 74 "*** WARNING *** subdev msp3400 set_input:"
@@ -77,8 +77,8 @@ void pvr2_msp3400_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
77 sid, hdw->input_val); 77 sid, hdw->input_val);
78 return; 78 return;
79 } 79 }
80 route.output = MSP_OUTPUT(MSP_SC_IN_DSP_SCART1); 80 sd->ops->audio->s_routing(sd, input,
81 sd->ops->audio->s_routing(sd, &route); 81 MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
82 } 82 }
83} 83}
84 84
diff --git a/drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c b/drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c
index b5c3428ebb9f..9023adf3fdcc 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c
@@ -60,16 +60,16 @@ static const struct routing_scheme routing_schemes[] = {
60void pvr2_cs53l32a_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd) 60void pvr2_cs53l32a_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
61{ 61{
62 if (hdw->input_dirty || hdw->force_dirty) { 62 if (hdw->input_dirty || hdw->force_dirty) {
63 struct v4l2_routing route;
64 const struct routing_scheme *sp; 63 const struct routing_scheme *sp;
65 unsigned int sid = hdw->hdw_desc->signal_routing_scheme; 64 unsigned int sid = hdw->hdw_desc->signal_routing_scheme;
65 u32 input;
66 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_input(%d)", 66 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_input(%d)",
67 hdw->input_val); 67 hdw->input_val);
68 if ((sid < ARRAY_SIZE(routing_schemes)) && 68 if ((sid < ARRAY_SIZE(routing_schemes)) &&
69 ((sp = routing_schemes + sid) != NULL) && 69 ((sp = routing_schemes + sid) != NULL) &&
70 (hdw->input_val >= 0) && 70 (hdw->input_val >= 0) &&
71 (hdw->input_val < sp->cnt)) { 71 (hdw->input_val < sp->cnt)) {
72 route.input = sp->def[hdw->input_val]; 72 input = sp->def[hdw->input_val];
73 } else { 73 } else {
74 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 74 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
75 "*** WARNING *** subdev v4l2 set_input:" 75 "*** WARNING *** subdev v4l2 set_input:"
@@ -78,8 +78,7 @@ void pvr2_cs53l32a_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
78 sid, hdw->input_val); 78 sid, hdw->input_val);
79 return; 79 return;
80 } 80 }
81 route.output = 0; 81 sd->ops->audio->s_routing(sd, input, 0, 0);
82 sd->ops->audio->s_routing(sd, &route);
83 } 82 }
84} 83}
85 84
diff --git a/drivers/media/video/pvrusb2/pvrusb2-ctrl.c b/drivers/media/video/pvrusb2/pvrusb2-ctrl.c
index 203f54cd18a1..1b992b847198 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-ctrl.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-ctrl.c
@@ -137,14 +137,12 @@ int pvr2_ctrl_get_min(struct pvr2_ctrl *cptr)
137int pvr2_ctrl_get_def(struct pvr2_ctrl *cptr, int *valptr) 137int pvr2_ctrl_get_def(struct pvr2_ctrl *cptr, int *valptr)
138{ 138{
139 int ret = 0; 139 int ret = 0;
140 if (!cptr) return 0; 140 if (!cptr) return -EINVAL;
141 LOCK_TAKE(cptr->hdw->big_lock); do { 141 LOCK_TAKE(cptr->hdw->big_lock); do {
142 if (cptr->info->type == pvr2_ctl_int) { 142 if (cptr->info->get_def_value) {
143 if (cptr->info->get_def_value) { 143 ret = cptr->info->get_def_value(cptr, valptr);
144 ret = cptr->info->get_def_value(cptr, valptr); 144 } else {
145 } else { 145 *valptr = cptr->info->default_value;
146 *valptr = cptr->info->default_value;
147 }
148 } 146 }
149 } while(0); LOCK_GIVE(cptr->hdw->big_lock); 147 } while(0); LOCK_GIVE(cptr->hdw->big_lock);
150 return ret; 148 return ret;
diff --git a/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c
index 4e017ff26c36..05e52358ae49 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c
@@ -105,14 +105,11 @@ void pvr2_cx25840_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
105{ 105{
106 pvr2_trace(PVR2_TRACE_CHIPS, "subdev cx2584x update..."); 106 pvr2_trace(PVR2_TRACE_CHIPS, "subdev cx2584x update...");
107 if (hdw->input_dirty || hdw->force_dirty) { 107 if (hdw->input_dirty || hdw->force_dirty) {
108 struct v4l2_routing route;
109 enum cx25840_video_input vid_input; 108 enum cx25840_video_input vid_input;
110 enum cx25840_audio_input aud_input; 109 enum cx25840_audio_input aud_input;
111 const struct routing_scheme *sp; 110 const struct routing_scheme *sp;
112 unsigned int sid = hdw->hdw_desc->signal_routing_scheme; 111 unsigned int sid = hdw->hdw_desc->signal_routing_scheme;
113 112
114 memset(&route, 0, sizeof(route));
115
116 if ((sid < ARRAY_SIZE(routing_schemes)) && 113 if ((sid < ARRAY_SIZE(routing_schemes)) &&
117 ((sp = routing_schemes + sid) != NULL) && 114 ((sp = routing_schemes + sid) != NULL) &&
118 (hdw->input_val >= 0) && 115 (hdw->input_val >= 0) &&
@@ -131,10 +128,8 @@ void pvr2_cx25840_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
131 pvr2_trace(PVR2_TRACE_CHIPS, 128 pvr2_trace(PVR2_TRACE_CHIPS,
132 "subdev cx2584x set_input vid=0x%x aud=0x%x", 129 "subdev cx2584x set_input vid=0x%x aud=0x%x",
133 vid_input, aud_input); 130 vid_input, aud_input);
134 route.input = (u32)vid_input; 131 sd->ops->video->s_routing(sd, (u32)vid_input, 0, 0);
135 sd->ops->video->s_routing(sd, &route); 132 sd->ops->audio->s_routing(sd, (u32)aud_input, 0, 0);
136 route.input = (u32)aud_input;
137 sd->ops->audio->s_routing(sd, &route);
138 } 133 }
139} 134}
140 135
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 7a65b42a4f53..d9d974a8f52a 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -2039,7 +2039,7 @@ static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
2039 "Module ID %u:" 2039 "Module ID %u:"
2040 " Setting up with specified i2c address 0x%x", 2040 " Setting up with specified i2c address 0x%x",
2041 mid, i2caddr[0]); 2041 mid, i2caddr[0]);
2042 sd = v4l2_i2c_new_subdev(&hdw->i2c_adap, 2042 sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2043 fname, fname, 2043 fname, fname,
2044 i2caddr[0]); 2044 i2caddr[0]);
2045 } else { 2045 } else {
@@ -2047,7 +2047,7 @@ static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
2047 "Module ID %u:" 2047 "Module ID %u:"
2048 " Setting up with address probe list", 2048 " Setting up with address probe list",
2049 mid); 2049 mid);
2050 sd = v4l2_i2c_new_probed_subdev(&hdw->i2c_adap, 2050 sd = v4l2_i2c_new_probed_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
2051 fname, fname, 2051 fname, fname,
2052 i2caddr); 2052 i2caddr);
2053 } 2053 }
@@ -2185,7 +2185,7 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
2185 pvr2_hdw_load_modules(hdw); 2185 pvr2_hdw_load_modules(hdw);
2186 if (!pvr2_hdw_dev_ok(hdw)) return; 2186 if (!pvr2_hdw_dev_ok(hdw)) return;
2187 2187
2188 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, init, 0); 2188 v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
2189 2189
2190 for (idx = 0; idx < CTRLDEF_COUNT; idx++) { 2190 for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
2191 cptr = hdw->controls + idx; 2191 cptr = hdw->controls + idx;
@@ -2574,7 +2574,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2574 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL); 2574 hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
2575 if (!hdw->ctl_read_urb) goto fail; 2575 if (!hdw->ctl_read_urb) goto fail;
2576 2576
2577 if (v4l2_device_register(&usb_dev->dev, &hdw->v4l2_dev) != 0) { 2577 if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
2578 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 2578 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
2579 "Error registering with v4l core, giving up"); 2579 "Error registering with v4l core, giving up");
2580 goto fail; 2580 goto fail;
@@ -2926,6 +2926,7 @@ static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2926 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)", 2926 pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
2927 hdw->tuner_type); 2927 hdw->tuner_type);
2928 if (((int)(hdw->tuner_type)) >= 0) { 2928 if (((int)(hdw->tuner_type)) >= 0) {
2929 memset(&setup, 0, sizeof(setup));
2929 setup.addr = ADDR_UNSET; 2930 setup.addr = ADDR_UNSET;
2930 setup.type = hdw->tuner_type; 2931 setup.type = hdw->tuner_type;
2931 setup.mode_mask = T_RADIO | T_ANALOG_TV; 2932 setup.mode_mask = T_RADIO | T_ANALOG_TV;
@@ -2943,7 +2944,7 @@ static void pvr2_subdev_update(struct pvr2_hdw *hdw)
2943 v4l2_std_id vs; 2944 v4l2_std_id vs;
2944 vs = hdw->std_mask_cur; 2945 vs = hdw->std_mask_cur;
2945 v4l2_device_call_all(&hdw->v4l2_dev, 0, 2946 v4l2_device_call_all(&hdw->v4l2_dev, 0,
2946 tuner, s_std, vs); 2947 core, s_std, vs);
2947 } 2948 }
2948 hdw->tuner_signal_stale = !0; 2949 hdw->tuner_signal_stale = !0;
2949 hdw->cropcap_stale = !0; 2950 hdw->cropcap_stale = !0;
diff --git a/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c b/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
index 9464862745fa..9af282f9e765 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
@@ -520,16 +520,6 @@ static u32 pvr2_i2c_functionality(struct i2c_adapter *adap)
520 return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C; 520 return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C;
521} 521}
522 522
523static int pvr2_i2c_attach_inform(struct i2c_client *client)
524{
525 return 0;
526}
527
528static int pvr2_i2c_detach_inform(struct i2c_client *client)
529{
530 return 0;
531}
532
533static struct i2c_algorithm pvr2_i2c_algo_template = { 523static struct i2c_algorithm pvr2_i2c_algo_template = {
534 .master_xfer = pvr2_i2c_xfer, 524 .master_xfer = pvr2_i2c_xfer,
535 .functionality = pvr2_i2c_functionality, 525 .functionality = pvr2_i2c_functionality,
@@ -539,8 +529,6 @@ static struct i2c_adapter pvr2_i2c_adap_template = {
539 .owner = THIS_MODULE, 529 .owner = THIS_MODULE,
540 .class = 0, 530 .class = 0,
541 .id = I2C_HW_B_BT848, 531 .id = I2C_HW_B_BT848,
542 .client_register = pvr2_i2c_attach_inform,
543 .client_unregister = pvr2_i2c_detach_inform,
544}; 532};
545 533
546 534
diff --git a/drivers/media/video/pvrusb2/pvrusb2-sysfs.c b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c
index e20ba1e6e0ea..299c1cbc3832 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-sysfs.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c
@@ -153,14 +153,16 @@ static ssize_t show_def(struct device *class_dev,
153 struct pvr2_sysfs_ctl_item *cip; 153 struct pvr2_sysfs_ctl_item *cip;
154 int val; 154 int val;
155 int ret; 155 int ret;
156 unsigned int cnt = 0;
156 cip = container_of(attr, struct pvr2_sysfs_ctl_item, attr_def); 157 cip = container_of(attr, struct pvr2_sysfs_ctl_item, attr_def);
157 ret = pvr2_ctrl_get_def(cip->cptr, &val); 158 ret = pvr2_ctrl_get_def(cip->cptr, &val);
158 pvr2_sysfs_trace("pvr2_sysfs(%p) show_def(cid=%d) is %d, stat=%d", 159 if (ret < 0) return ret;
159 cip->chptr, cip->ctl_id, val, ret); 160 ret = pvr2_ctrl_value_to_sym(cip->cptr, ~0, val,
160 if (ret < 0) { 161 buf, PAGE_SIZE - 1, &cnt);
161 return ret; 162 pvr2_sysfs_trace("pvr2_sysfs(%p) show_def(cid=%d) is %.*s (%d)",
162 } 163 cip->chptr, cip->ctl_id, cnt, buf, val);
163 return scnprintf(buf, PAGE_SIZE, "%d\n", val); 164 buf[cnt] = '\n';
165 return cnt + 1;
164} 166}
165 167
166static ssize_t show_val_norm(struct device *class_dev, 168static ssize_t show_val_norm(struct device *class_dev,
diff --git a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
index b3862f5554bd..d2fe7c8f2c3a 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
@@ -75,16 +75,17 @@ static const struct routing_scheme routing_schemes[] = {
75void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd) 75void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
76{ 76{
77 if (hdw->input_dirty || hdw->force_dirty) { 77 if (hdw->input_dirty || hdw->force_dirty) {
78 struct v4l2_routing route;
79 const struct routing_scheme *sp; 78 const struct routing_scheme *sp;
80 unsigned int sid = hdw->hdw_desc->signal_routing_scheme; 79 unsigned int sid = hdw->hdw_desc->signal_routing_scheme;
80 u32 input;
81
81 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_input(%d)", 82 pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_input(%d)",
82 hdw->input_val); 83 hdw->input_val);
83 if ((sid < ARRAY_SIZE(routing_schemes)) && 84 if ((sid < ARRAY_SIZE(routing_schemes)) &&
84 ((sp = routing_schemes + sid) != NULL) && 85 ((sp = routing_schemes + sid) != NULL) &&
85 (hdw->input_val >= 0) && 86 (hdw->input_val >= 0) &&
86 (hdw->input_val < sp->cnt)) { 87 (hdw->input_val < sp->cnt)) {
87 route.input = sp->def[hdw->input_val]; 88 input = sp->def[hdw->input_val];
88 } else { 89 } else {
89 pvr2_trace(PVR2_TRACE_ERROR_LEGS, 90 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
90 "*** WARNING *** subdev v4l2 set_input:" 91 "*** WARNING *** subdev v4l2 set_input:"
@@ -93,8 +94,7 @@ void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
93 sid, hdw->input_val); 94 sid, hdw->input_val);
94 return; 95 return;
95 } 96 }
96 route.output = 0; 97 sd->ops->video->s_routing(sd, input, 0, 0);
97 sd->ops->video->s_routing(sd, &route);
98 } 98 }
99} 99}
100 100
diff --git a/drivers/media/video/pvrusb2/pvrusb2-wm8775.c b/drivers/media/video/pvrusb2/pvrusb2-wm8775.c
index 1670aa4051ce..8c1eae05aa08 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-wm8775.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-wm8775.c
@@ -39,24 +39,22 @@
39void pvr2_wm8775_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd) 39void pvr2_wm8775_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
40{ 40{
41 if (hdw->input_dirty || hdw->force_dirty) { 41 if (hdw->input_dirty || hdw->force_dirty) {
42 struct v4l2_routing route; 42 u32 input;
43
44 memset(&route, 0, sizeof(route));
45 43
46 switch (hdw->input_val) { 44 switch (hdw->input_val) {
47 case PVR2_CVAL_INPUT_RADIO: 45 case PVR2_CVAL_INPUT_RADIO:
48 route.input = 1; 46 input = 1;
49 break; 47 break;
50 default: 48 default:
51 /* All other cases just use the second input */ 49 /* All other cases just use the second input */
52 route.input = 2; 50 input = 2;
53 break; 51 break;
54 } 52 }
55 pvr2_trace(PVR2_TRACE_CHIPS, "subdev wm8775" 53 pvr2_trace(PVR2_TRACE_CHIPS, "subdev wm8775"
56 " set_input(val=%d route=0x%x)", 54 " set_input(val=%d route=0x%x)",
57 hdw->input_val, route.input); 55 hdw->input_val, input);
58 56
59 sd->ops->audio->s_routing(sd, &route); 57 sd->ops->audio->s_routing(sd, input, 0, 0);
60 } 58 }
61} 59}
62 60
diff --git a/drivers/media/video/pwc/Kconfig b/drivers/media/video/pwc/Kconfig
index 8b9f0aa844a1..340f954aba34 100644
--- a/drivers/media/video/pwc/Kconfig
+++ b/drivers/media/video/pwc/Kconfig
@@ -39,7 +39,7 @@ config USB_PWC_DEBUG
39config USB_PWC_INPUT_EVDEV 39config USB_PWC_INPUT_EVDEV
40 bool "USB Philips Cameras input events device support" 40 bool "USB Philips Cameras input events device support"
41 default y 41 default y
42 depends on USB_PWC && INPUT 42 depends on USB_PWC=INPUT || INPUT=y
43 ---help--- 43 ---help---
44 This option makes USB Philips cameras register the snapshot button as 44 This option makes USB Philips cameras register the snapshot button as
45 an input device to report button events. 45 an input device to report button events.
diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c
index c522616ef38f..c639845460ff 100644
--- a/drivers/media/video/pxa_camera.c
+++ b/drivers/media/video/pxa_camera.c
@@ -163,6 +163,13 @@
163 CICR0_EOFM | CICR0_FOM) 163 CICR0_EOFM | CICR0_FOM)
164 164
165/* 165/*
166 * YUV422P picture size should be a multiple of 16, so the heuristic aligns
167 * height, width on 4 byte boundaries to reach the 16 multiple for the size.
168 */
169#define YUV422P_X_Y_ALIGN 4
170#define YUV422P_SIZE_ALIGN YUV422P_X_Y_ALIGN * YUV422P_X_Y_ALIGN
171
172/*
166 * Structures 173 * Structures
167 */ 174 */
168enum pxa_camera_active_dma { 175enum pxa_camera_active_dma {
@@ -236,20 +243,11 @@ static int pxa_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
236 unsigned int *size) 243 unsigned int *size)
237{ 244{
238 struct soc_camera_device *icd = vq->priv_data; 245 struct soc_camera_device *icd = vq->priv_data;
239 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
240 struct pxa_camera_dev *pcdev = ici->priv;
241 246
242 dev_dbg(&icd->dev, "count=%d, size=%d\n", *count, *size); 247 dev_dbg(&icd->dev, "count=%d, size=%d\n", *count, *size);
243 248
244 /* planar capture requires Y, U and V buffers to be page aligned */ 249 *size = roundup(icd->width * icd->height *
245 if (pcdev->channels == 3) { 250 ((icd->current_fmt->depth + 7) >> 3), 8);
246 *size = PAGE_ALIGN(icd->width * icd->height); /* Y pages */
247 *size += PAGE_ALIGN(icd->width * icd->height / 2); /* U pages */
248 *size += PAGE_ALIGN(icd->width * icd->height / 2); /* V pages */
249 } else {
250 *size = icd->width * icd->height *
251 ((icd->current_fmt->depth + 7) >> 3);
252 }
253 251
254 if (0 == *count) 252 if (0 == *count)
255 *count = 32; 253 *count = 32;
@@ -289,19 +287,63 @@ static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf)
289 buf->vb.state = VIDEOBUF_NEEDS_INIT; 287 buf->vb.state = VIDEOBUF_NEEDS_INIT;
290} 288}
291 289
290static int calculate_dma_sglen(struct scatterlist *sglist, int sglen,
291 int sg_first_ofs, int size)
292{
293 int i, offset, dma_len, xfer_len;
294 struct scatterlist *sg;
295
296 offset = sg_first_ofs;
297 for_each_sg(sglist, sg, sglen, i) {
298 dma_len = sg_dma_len(sg);
299
300 /* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */
301 xfer_len = roundup(min(dma_len - offset, size), 8);
302
303 size = max(0, size - xfer_len);
304 offset = 0;
305 if (size == 0)
306 break;
307 }
308
309 BUG_ON(size != 0);
310 return i + 1;
311}
312
313/**
314 * pxa_init_dma_channel - init dma descriptors
315 * @pcdev: pxa camera device
316 * @buf: pxa buffer to find pxa dma channel
317 * @dma: dma video buffer
318 * @channel: dma channel (0 => 'Y', 1 => 'U', 2 => 'V')
319 * @cibr: camera Receive Buffer Register
320 * @size: bytes to transfer
321 * @sg_first: first element of sg_list
322 * @sg_first_ofs: offset in first element of sg_list
323 *
324 * Prepares the pxa dma descriptors to transfer one camera channel.
325 * Beware sg_first and sg_first_ofs are both input and output parameters.
326 *
327 * Returns 0 or -ENOMEM if no coherent memory is available
328 */
292static int pxa_init_dma_channel(struct pxa_camera_dev *pcdev, 329static int pxa_init_dma_channel(struct pxa_camera_dev *pcdev,
293 struct pxa_buffer *buf, 330 struct pxa_buffer *buf,
294 struct videobuf_dmabuf *dma, int channel, 331 struct videobuf_dmabuf *dma, int channel,
295 int sglen, int sg_start, int cibr, 332 int cibr, int size,
296 unsigned int size) 333 struct scatterlist **sg_first, int *sg_first_ofs)
297{ 334{
298 struct pxa_cam_dma *pxa_dma = &buf->dmas[channel]; 335 struct pxa_cam_dma *pxa_dma = &buf->dmas[channel];
299 int i; 336 struct scatterlist *sg;
337 int i, offset, sglen;
338 int dma_len = 0, xfer_len = 0;
300 339
301 if (pxa_dma->sg_cpu) 340 if (pxa_dma->sg_cpu)
302 dma_free_coherent(pcdev->dev, pxa_dma->sg_size, 341 dma_free_coherent(pcdev->dev, pxa_dma->sg_size,
303 pxa_dma->sg_cpu, pxa_dma->sg_dma); 342 pxa_dma->sg_cpu, pxa_dma->sg_dma);
304 343
344 sglen = calculate_dma_sglen(*sg_first, dma->sglen,
345 *sg_first_ofs, size);
346
305 pxa_dma->sg_size = (sglen + 1) * sizeof(struct pxa_dma_desc); 347 pxa_dma->sg_size = (sglen + 1) * sizeof(struct pxa_dma_desc);
306 pxa_dma->sg_cpu = dma_alloc_coherent(pcdev->dev, pxa_dma->sg_size, 348 pxa_dma->sg_cpu = dma_alloc_coherent(pcdev->dev, pxa_dma->sg_size,
307 &pxa_dma->sg_dma, GFP_KERNEL); 349 &pxa_dma->sg_dma, GFP_KERNEL);
@@ -309,31 +351,75 @@ static int pxa_init_dma_channel(struct pxa_camera_dev *pcdev,
309 return -ENOMEM; 351 return -ENOMEM;
310 352
311 pxa_dma->sglen = sglen; 353 pxa_dma->sglen = sglen;
354 offset = *sg_first_ofs;
312 355
313 for (i = 0; i < sglen; i++) { 356 dev_dbg(pcdev->dev, "DMA: sg_first=%p, sglen=%d, ofs=%d, dma.desc=%x\n",
314 int sg_i = sg_start + i; 357 *sg_first, sglen, *sg_first_ofs, pxa_dma->sg_dma);
315 struct scatterlist *sg = dma->sglist;
316 unsigned int dma_len = sg_dma_len(&sg[sg_i]), xfer_len;
317 358
318 pxa_dma->sg_cpu[i].dsadr = pcdev->res->start + cibr; 359
319 pxa_dma->sg_cpu[i].dtadr = sg_dma_address(&sg[sg_i]); 360 for_each_sg(*sg_first, sg, sglen, i) {
361 dma_len = sg_dma_len(sg);
320 362
321 /* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */ 363 /* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */
322 xfer_len = (min(dma_len, size) + 7) & ~7; 364 xfer_len = roundup(min(dma_len - offset, size), 8);
323 365
366 size = max(0, size - xfer_len);
367
368 pxa_dma->sg_cpu[i].dsadr = pcdev->res->start + cibr;
369 pxa_dma->sg_cpu[i].dtadr = sg_dma_address(sg) + offset;
324 pxa_dma->sg_cpu[i].dcmd = 370 pxa_dma->sg_cpu[i].dcmd =
325 DCMD_FLOWSRC | DCMD_BURST8 | DCMD_INCTRGADDR | xfer_len; 371 DCMD_FLOWSRC | DCMD_BURST8 | DCMD_INCTRGADDR | xfer_len;
326 size -= dma_len; 372#ifdef DEBUG
373 if (!i)
374 pxa_dma->sg_cpu[i].dcmd |= DCMD_STARTIRQEN;
375#endif
327 pxa_dma->sg_cpu[i].ddadr = 376 pxa_dma->sg_cpu[i].ddadr =
328 pxa_dma->sg_dma + (i + 1) * sizeof(struct pxa_dma_desc); 377 pxa_dma->sg_dma + (i + 1) * sizeof(struct pxa_dma_desc);
378
379 dev_vdbg(pcdev->dev, "DMA: desc.%08x->@phys=0x%08x, len=%d\n",
380 pxa_dma->sg_dma + i * sizeof(struct pxa_dma_desc),
381 sg_dma_address(sg) + offset, xfer_len);
382 offset = 0;
383
384 if (size == 0)
385 break;
329 } 386 }
330 387
331 pxa_dma->sg_cpu[sglen - 1].ddadr = DDADR_STOP; 388 pxa_dma->sg_cpu[sglen].ddadr = DDADR_STOP;
332 pxa_dma->sg_cpu[sglen - 1].dcmd |= DCMD_ENDIRQEN; 389 pxa_dma->sg_cpu[sglen].dcmd = DCMD_FLOWSRC | DCMD_BURST8 | DCMD_ENDIRQEN;
390
391 /*
392 * Handle 1 special case :
393 * - in 3 planes (YUV422P format), we might finish with xfer_len equal
394 * to dma_len (end on PAGE boundary). In this case, the sg element
395 * for next plane should be the next after the last used to store the
396 * last scatter gather RAM page
397 */
398 if (xfer_len >= dma_len) {
399 *sg_first_ofs = xfer_len - dma_len;
400 *sg_first = sg_next(sg);
401 } else {
402 *sg_first_ofs = xfer_len;
403 *sg_first = sg;
404 }
333 405
334 return 0; 406 return 0;
335} 407}
336 408
409static void pxa_videobuf_set_actdma(struct pxa_camera_dev *pcdev,
410 struct pxa_buffer *buf)
411{
412 buf->active_dma = DMA_Y;
413 if (pcdev->channels == 3)
414 buf->active_dma |= DMA_U | DMA_V;
415}
416
417/*
418 * Please check the DMA prepared buffer structure in :
419 * Documentation/video4linux/pxa_camera.txt
420 * Please check also in pxa_camera_check_link_miss() to understand why DMA chain
421 * modification while DMA chain is running will work anyway.
422 */
337static int pxa_videobuf_prepare(struct videobuf_queue *vq, 423static int pxa_videobuf_prepare(struct videobuf_queue *vq,
338 struct videobuf_buffer *vb, enum v4l2_field field) 424 struct videobuf_buffer *vb, enum v4l2_field field)
339{ 425{
@@ -342,7 +428,6 @@ static int pxa_videobuf_prepare(struct videobuf_queue *vq,
342 struct pxa_camera_dev *pcdev = ici->priv; 428 struct pxa_camera_dev *pcdev = ici->priv;
343 struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb); 429 struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
344 int ret; 430 int ret;
345 int sglen_y, sglen_yu = 0, sglen_u = 0, sglen_v = 0;
346 int size_y, size_u = 0, size_v = 0; 431 int size_y, size_u = 0, size_v = 0;
347 432
348 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__, 433 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
@@ -381,62 +466,58 @@ static int pxa_videobuf_prepare(struct videobuf_queue *vq,
381 } 466 }
382 467
383 if (vb->state == VIDEOBUF_NEEDS_INIT) { 468 if (vb->state == VIDEOBUF_NEEDS_INIT) {
384 unsigned int size = vb->size; 469 int size = vb->size;
470 int next_ofs = 0;
385 struct videobuf_dmabuf *dma = videobuf_to_dma(vb); 471 struct videobuf_dmabuf *dma = videobuf_to_dma(vb);
472 struct scatterlist *sg;
386 473
387 ret = videobuf_iolock(vq, vb, NULL); 474 ret = videobuf_iolock(vq, vb, NULL);
388 if (ret) 475 if (ret)
389 goto fail; 476 goto fail;
390 477
391 if (pcdev->channels == 3) { 478 if (pcdev->channels == 3) {
392 /* FIXME the calculations should be more precise */
393 sglen_y = dma->sglen / 2;
394 sglen_u = sglen_v = dma->sglen / 4 + 1;
395 sglen_yu = sglen_y + sglen_u;
396 size_y = size / 2; 479 size_y = size / 2;
397 size_u = size_v = size / 4; 480 size_u = size_v = size / 4;
398 } else { 481 } else {
399 sglen_y = dma->sglen;
400 size_y = size; 482 size_y = size;
401 } 483 }
402 484
403 /* init DMA for Y channel */ 485 sg = dma->sglist;
404 ret = pxa_init_dma_channel(pcdev, buf, dma, 0, sglen_y,
405 0, 0x28, size_y);
406 486
487 /* init DMA for Y channel */
488 ret = pxa_init_dma_channel(pcdev, buf, dma, 0, CIBR0, size_y,
489 &sg, &next_ofs);
407 if (ret) { 490 if (ret) {
408 dev_err(pcdev->dev, 491 dev_err(pcdev->dev,
409 "DMA initialization for Y/RGB failed\n"); 492 "DMA initialization for Y/RGB failed\n");
410 goto fail; 493 goto fail;
411 } 494 }
412 495
413 if (pcdev->channels == 3) { 496 /* init DMA for U channel */
414 /* init DMA for U channel */ 497 if (size_u)
415 ret = pxa_init_dma_channel(pcdev, buf, dma, 1, sglen_u, 498 ret = pxa_init_dma_channel(pcdev, buf, dma, 1, CIBR1,
416 sglen_y, 0x30, size_u); 499 size_u, &sg, &next_ofs);
417 if (ret) { 500 if (ret) {
418 dev_err(pcdev->dev, 501 dev_err(pcdev->dev,
419 "DMA initialization for U failed\n"); 502 "DMA initialization for U failed\n");
420 goto fail_u; 503 goto fail_u;
421 } 504 }
422 505
423 /* init DMA for V channel */ 506 /* init DMA for V channel */
424 ret = pxa_init_dma_channel(pcdev, buf, dma, 2, sglen_v, 507 if (size_v)
425 sglen_yu, 0x38, size_v); 508 ret = pxa_init_dma_channel(pcdev, buf, dma, 2, CIBR2,
426 if (ret) { 509 size_v, &sg, &next_ofs);
427 dev_err(pcdev->dev, 510 if (ret) {
428 "DMA initialization for V failed\n"); 511 dev_err(pcdev->dev,
429 goto fail_v; 512 "DMA initialization for V failed\n");
430 } 513 goto fail_v;
431 } 514 }
432 515
433 vb->state = VIDEOBUF_PREPARED; 516 vb->state = VIDEOBUF_PREPARED;
434 } 517 }
435 518
436 buf->inwork = 0; 519 buf->inwork = 0;
437 buf->active_dma = DMA_Y; 520 pxa_videobuf_set_actdma(pcdev, buf);
438 if (pcdev->channels == 3)
439 buf->active_dma |= DMA_U | DMA_V;
440 521
441 return 0; 522 return 0;
442 523
@@ -453,6 +534,92 @@ out:
453 return ret; 534 return ret;
454} 535}
455 536
537/**
538 * pxa_dma_start_channels - start DMA channel for active buffer
539 * @pcdev: pxa camera device
540 *
541 * Initialize DMA channels to the beginning of the active video buffer, and
542 * start these channels.
543 */
544static void pxa_dma_start_channels(struct pxa_camera_dev *pcdev)
545{
546 int i;
547 struct pxa_buffer *active;
548
549 active = pcdev->active;
550
551 for (i = 0; i < pcdev->channels; i++) {
552 dev_dbg(pcdev->dev, "%s (channel=%d) ddadr=%08x\n", __func__,
553 i, active->dmas[i].sg_dma);
554 DDADR(pcdev->dma_chans[i]) = active->dmas[i].sg_dma;
555 DCSR(pcdev->dma_chans[i]) = DCSR_RUN;
556 }
557}
558
559static void pxa_dma_stop_channels(struct pxa_camera_dev *pcdev)
560{
561 int i;
562
563 for (i = 0; i < pcdev->channels; i++) {
564 dev_dbg(pcdev->dev, "%s (channel=%d)\n", __func__, i);
565 DCSR(pcdev->dma_chans[i]) = 0;
566 }
567}
568
569static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,
570 struct pxa_buffer *buf)
571{
572 int i;
573 struct pxa_dma_desc *buf_last_desc;
574
575 for (i = 0; i < pcdev->channels; i++) {
576 buf_last_desc = buf->dmas[i].sg_cpu + buf->dmas[i].sglen;
577 buf_last_desc->ddadr = DDADR_STOP;
578
579 if (pcdev->sg_tail[i])
580 /* Link the new buffer to the old tail */
581 pcdev->sg_tail[i]->ddadr = buf->dmas[i].sg_dma;
582
583 /* Update the channel tail */
584 pcdev->sg_tail[i] = buf_last_desc;
585 }
586}
587
588/**
589 * pxa_camera_start_capture - start video capturing
590 * @pcdev: camera device
591 *
592 * Launch capturing. DMA channels should not be active yet. They should get
593 * activated at the end of frame interrupt, to capture only whole frames, and
594 * never begin the capture of a partial frame.
595 */
596static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev)
597{
598 unsigned long cicr0, cifr;
599
600 dev_dbg(pcdev->dev, "%s\n", __func__);
601 /* Reset the FIFOs */
602 cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
603 __raw_writel(cifr, pcdev->base + CIFR);
604 /* Enable End-Of-Frame Interrupt */
605 cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB;
606 cicr0 &= ~CICR0_EOFM;
607 __raw_writel(cicr0, pcdev->base + CICR0);
608}
609
610static void pxa_camera_stop_capture(struct pxa_camera_dev *pcdev)
611{
612 unsigned long cicr0;
613
614 pxa_dma_stop_channels(pcdev);
615
616 cicr0 = __raw_readl(pcdev->base + CICR0) & ~CICR0_ENB;
617 __raw_writel(cicr0, pcdev->base + CICR0);
618
619 pcdev->active = NULL;
620 dev_dbg(pcdev->dev, "%s\n", __func__);
621}
622
456static void pxa_videobuf_queue(struct videobuf_queue *vq, 623static void pxa_videobuf_queue(struct videobuf_queue *vq,
457 struct videobuf_buffer *vb) 624 struct videobuf_buffer *vb)
458{ 625{
@@ -460,81 +627,20 @@ static void pxa_videobuf_queue(struct videobuf_queue *vq,
460 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); 627 struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
461 struct pxa_camera_dev *pcdev = ici->priv; 628 struct pxa_camera_dev *pcdev = ici->priv;
462 struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb); 629 struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
463 struct pxa_buffer *active;
464 unsigned long flags; 630 unsigned long flags;
465 int i;
466 631
467 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__, 632 dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d active=%p\n", __func__,
468 vb, vb->baddr, vb->bsize); 633 vb, vb->baddr, vb->bsize, pcdev->active);
634
469 spin_lock_irqsave(&pcdev->lock, flags); 635 spin_lock_irqsave(&pcdev->lock, flags);
470 636
471 list_add_tail(&vb->queue, &pcdev->capture); 637 list_add_tail(&vb->queue, &pcdev->capture);
472 638
473 vb->state = VIDEOBUF_ACTIVE; 639 vb->state = VIDEOBUF_ACTIVE;
474 active = pcdev->active; 640 pxa_dma_add_tail_buf(pcdev, buf);
475 641
476 if (!active) { 642 if (!pcdev->active)
477 unsigned long cifr, cicr0; 643 pxa_camera_start_capture(pcdev);
478
479 cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
480 __raw_writel(cifr, pcdev->base + CIFR);
481
482 for (i = 0; i < pcdev->channels; i++) {
483 DDADR(pcdev->dma_chans[i]) = buf->dmas[i].sg_dma;
484 DCSR(pcdev->dma_chans[i]) = DCSR_RUN;
485 pcdev->sg_tail[i] = buf->dmas[i].sg_cpu + buf->dmas[i].sglen - 1;
486 }
487
488 pcdev->active = buf;
489
490 cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB;
491 __raw_writel(cicr0, pcdev->base + CICR0);
492 } else {
493 struct pxa_cam_dma *buf_dma;
494 struct pxa_cam_dma *act_dma;
495 int nents;
496
497 for (i = 0; i < pcdev->channels; i++) {
498 buf_dma = &buf->dmas[i];
499 act_dma = &active->dmas[i];
500 nents = buf_dma->sglen;
501
502 /* Stop DMA engine */
503 DCSR(pcdev->dma_chans[i]) = 0;
504
505 /* Add the descriptors we just initialized to
506 the currently running chain */
507 pcdev->sg_tail[i]->ddadr = buf_dma->sg_dma;
508 pcdev->sg_tail[i] = buf_dma->sg_cpu + buf_dma->sglen - 1;
509
510 /* Setup a dummy descriptor with the DMA engines current
511 * state
512 */
513 buf_dma->sg_cpu[nents].dsadr =
514 pcdev->res->start + 0x28 + i*8; /* CIBRx */
515 buf_dma->sg_cpu[nents].dtadr =
516 DTADR(pcdev->dma_chans[i]);
517 buf_dma->sg_cpu[nents].dcmd =
518 DCMD(pcdev->dma_chans[i]);
519
520 if (DDADR(pcdev->dma_chans[i]) == DDADR_STOP) {
521 /* The DMA engine is on the last
522 descriptor, set the next descriptors
523 address to the descriptors we just
524 initialized */
525 buf_dma->sg_cpu[nents].ddadr = buf_dma->sg_dma;
526 } else {
527 buf_dma->sg_cpu[nents].ddadr =
528 DDADR(pcdev->dma_chans[i]);
529 }
530
531 /* The next descriptor is the dummy descriptor */
532 DDADR(pcdev->dma_chans[i]) = buf_dma->sg_dma + nents *
533 sizeof(struct pxa_dma_desc);
534
535 DCSR(pcdev->dma_chans[i]) = DCSR_RUN;
536 }
537 }
538 644
539 spin_unlock_irqrestore(&pcdev->lock, flags); 645 spin_unlock_irqrestore(&pcdev->lock, flags);
540} 646}
@@ -572,7 +678,7 @@ static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev,
572 struct videobuf_buffer *vb, 678 struct videobuf_buffer *vb,
573 struct pxa_buffer *buf) 679 struct pxa_buffer *buf)
574{ 680{
575 unsigned long cicr0; 681 int i;
576 682
577 /* _init is used to debug races, see comment in pxa_camera_reqbufs() */ 683 /* _init is used to debug races, see comment in pxa_camera_reqbufs() */
578 list_del_init(&vb->queue); 684 list_del_init(&vb->queue);
@@ -580,15 +686,12 @@ static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev,
580 do_gettimeofday(&vb->ts); 686 do_gettimeofday(&vb->ts);
581 vb->field_count++; 687 vb->field_count++;
582 wake_up(&vb->done); 688 wake_up(&vb->done);
689 dev_dbg(pcdev->dev, "%s dequeud buffer (vb=0x%p)\n", __func__, vb);
583 690
584 if (list_empty(&pcdev->capture)) { 691 if (list_empty(&pcdev->capture)) {
585 pcdev->active = NULL; 692 pxa_camera_stop_capture(pcdev);
586 DCSR(pcdev->dma_chans[0]) = 0; 693 for (i = 0; i < pcdev->channels; i++)
587 DCSR(pcdev->dma_chans[1]) = 0; 694 pcdev->sg_tail[i] = NULL;
588 DCSR(pcdev->dma_chans[2]) = 0;
589
590 cicr0 = __raw_readl(pcdev->base + CICR0) & ~CICR0_ENB;
591 __raw_writel(cicr0, pcdev->base + CICR0);
592 return; 695 return;
593 } 696 }
594 697
@@ -596,6 +699,35 @@ static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev,
596 struct pxa_buffer, vb.queue); 699 struct pxa_buffer, vb.queue);
597} 700}
598 701
702/**
703 * pxa_camera_check_link_miss - check missed DMA linking
704 * @pcdev: camera device
705 *
706 * The DMA chaining is done with DMA running. This means a tiny temporal window
707 * remains, where a buffer is queued on the chain, while the chain is already
708 * stopped. This means the tailed buffer would never be transfered by DMA.
709 * This function restarts the capture for this corner case, where :
710 * - DADR() == DADDR_STOP
711 * - a videobuffer is queued on the pcdev->capture list
712 *
713 * Please check the "DMA hot chaining timeslice issue" in
714 * Documentation/video4linux/pxa_camera.txt
715 *
716 * Context: should only be called within the dma irq handler
717 */
718static void pxa_camera_check_link_miss(struct pxa_camera_dev *pcdev)
719{
720 int i, is_dma_stopped = 1;
721
722 for (i = 0; i < pcdev->channels; i++)
723 if (DDADR(pcdev->dma_chans[i]) != DDADR_STOP)
724 is_dma_stopped = 0;
725 dev_dbg(pcdev->dev, "%s : top queued buffer=%p, dma_stopped=%d\n",
726 __func__, pcdev->active, is_dma_stopped);
727 if (pcdev->active && is_dma_stopped)
728 pxa_camera_start_capture(pcdev);
729}
730
599static void pxa_camera_dma_irq(int channel, struct pxa_camera_dev *pcdev, 731static void pxa_camera_dma_irq(int channel, struct pxa_camera_dev *pcdev,
600 enum pxa_camera_active_dma act_dma) 732 enum pxa_camera_active_dma act_dma)
601{ 733{
@@ -603,61 +735,70 @@ static void pxa_camera_dma_irq(int channel, struct pxa_camera_dev *pcdev,
603 unsigned long flags; 735 unsigned long flags;
604 u32 status, camera_status, overrun; 736 u32 status, camera_status, overrun;
605 struct videobuf_buffer *vb; 737 struct videobuf_buffer *vb;
606 unsigned long cifr, cicr0;
607 738
608 spin_lock_irqsave(&pcdev->lock, flags); 739 spin_lock_irqsave(&pcdev->lock, flags);
609 740
610 status = DCSR(channel); 741 status = DCSR(channel);
611 DCSR(channel) = status | DCSR_ENDINTR; 742 DCSR(channel) = status;
743
744 camera_status = __raw_readl(pcdev->base + CISR);
745 overrun = CISR_IFO_0;
746 if (pcdev->channels == 3)
747 overrun |= CISR_IFO_1 | CISR_IFO_2;
612 748
613 if (status & DCSR_BUSERR) { 749 if (status & DCSR_BUSERR) {
614 dev_err(pcdev->dev, "DMA Bus Error IRQ!\n"); 750 dev_err(pcdev->dev, "DMA Bus Error IRQ!\n");
615 goto out; 751 goto out;
616 } 752 }
617 753
618 if (!(status & DCSR_ENDINTR)) { 754 if (!(status & (DCSR_ENDINTR | DCSR_STARTINTR))) {
619 dev_err(pcdev->dev, "Unknown DMA IRQ source, " 755 dev_err(pcdev->dev, "Unknown DMA IRQ source, "
620 "status: 0x%08x\n", status); 756 "status: 0x%08x\n", status);
621 goto out; 757 goto out;
622 } 758 }
623 759
624 if (!pcdev->active) { 760 /*
625 dev_err(pcdev->dev, "DMA End IRQ with no active buffer!\n"); 761 * pcdev->active should not be NULL in DMA irq handler.
626 goto out; 762 *
627 } 763 * But there is one corner case : if capture was stopped due to an
628 764 * overrun of channel 1, and at that same channel 2 was completed.
629 camera_status = __raw_readl(pcdev->base + CISR); 765 *
630 overrun = CISR_IFO_0; 766 * When handling the overrun in DMA irq for channel 1, we'll stop the
631 if (pcdev->channels == 3) 767 * capture and restart it (and thus set pcdev->active to NULL). But the
632 overrun |= CISR_IFO_1 | CISR_IFO_2; 768 * DMA irq handler will already be pending for channel 2. So on entering
633 if (camera_status & overrun) { 769 * the DMA irq handler for channel 2 there will be no active buffer, yet
634 dev_dbg(pcdev->dev, "FIFO overrun! CISR: %x\n", camera_status); 770 * that is normal.
635 /* Stop the Capture Interface */ 771 */
636 cicr0 = __raw_readl(pcdev->base + CICR0) & ~CICR0_ENB; 772 if (!pcdev->active)
637 __raw_writel(cicr0, pcdev->base + CICR0);
638
639 /* Stop DMA */
640 DCSR(channel) = 0;
641 /* Reset the FIFOs */
642 cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
643 __raw_writel(cifr, pcdev->base + CIFR);
644 /* Enable End-Of-Frame Interrupt */
645 cicr0 &= ~CICR0_EOFM;
646 __raw_writel(cicr0, pcdev->base + CICR0);
647 /* Restart the Capture Interface */
648 __raw_writel(cicr0 | CICR0_ENB, pcdev->base + CICR0);
649 goto out; 773 goto out;
650 }
651 774
652 vb = &pcdev->active->vb; 775 vb = &pcdev->active->vb;
653 buf = container_of(vb, struct pxa_buffer, vb); 776 buf = container_of(vb, struct pxa_buffer, vb);
654 WARN_ON(buf->inwork || list_empty(&vb->queue)); 777 WARN_ON(buf->inwork || list_empty(&vb->queue));
655 dev_dbg(pcdev->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
656 vb, vb->baddr, vb->bsize);
657 778
658 buf->active_dma &= ~act_dma; 779 dev_dbg(pcdev->dev, "%s channel=%d %s%s(vb=0x%p) dma.desc=%x\n",
659 if (!buf->active_dma) 780 __func__, channel, status & DCSR_STARTINTR ? "SOF " : "",
660 pxa_camera_wakeup(pcdev, vb, buf); 781 status & DCSR_ENDINTR ? "EOF " : "", vb, DDADR(channel));
782
783 if (status & DCSR_ENDINTR) {
784 /*
785 * It's normal if the last frame creates an overrun, as there
786 * are no more DMA descriptors to fetch from QCI fifos
787 */
788 if (camera_status & overrun &&
789 !list_is_last(pcdev->capture.next, &pcdev->capture)) {
790 dev_dbg(pcdev->dev, "FIFO overrun! CISR: %x\n",
791 camera_status);
792 pxa_camera_stop_capture(pcdev);
793 pxa_camera_start_capture(pcdev);
794 goto out;
795 }
796 buf->active_dma &= ~act_dma;
797 if (!buf->active_dma) {
798 pxa_camera_wakeup(pcdev, vb, buf);
799 pxa_camera_check_link_miss(pcdev);
800 }
801 }
661 802
662out: 803out:
663 spin_unlock_irqrestore(&pcdev->lock, flags); 804 spin_unlock_irqrestore(&pcdev->lock, flags);
@@ -786,6 +927,8 @@ static irqreturn_t pxa_camera_irq(int irq, void *data)
786{ 927{
787 struct pxa_camera_dev *pcdev = data; 928 struct pxa_camera_dev *pcdev = data;
788 unsigned long status, cicr0; 929 unsigned long status, cicr0;
930 struct pxa_buffer *buf;
931 struct videobuf_buffer *vb;
789 932
790 status = __raw_readl(pcdev->base + CISR); 933 status = __raw_readl(pcdev->base + CISR);
791 dev_dbg(pcdev->dev, "Camera interrupt status 0x%lx\n", status); 934 dev_dbg(pcdev->dev, "Camera interrupt status 0x%lx\n", status);
@@ -796,12 +939,14 @@ static irqreturn_t pxa_camera_irq(int irq, void *data)
796 __raw_writel(status, pcdev->base + CISR); 939 __raw_writel(status, pcdev->base + CISR);
797 940
798 if (status & CISR_EOF) { 941 if (status & CISR_EOF) {
799 int i; 942 pcdev->active = list_first_entry(&pcdev->capture,
800 for (i = 0; i < pcdev->channels; i++) { 943 struct pxa_buffer, vb.queue);
801 DDADR(pcdev->dma_chans[i]) = 944 vb = &pcdev->active->vb;
802 pcdev->active->dmas[i].sg_dma; 945 buf = container_of(vb, struct pxa_buffer, vb);
803 DCSR(pcdev->dma_chans[i]) = DCSR_RUN; 946 pxa_videobuf_set_actdma(pcdev, buf);
804 } 947
948 pxa_dma_start_channels(pcdev);
949
805 cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_EOFM; 950 cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_EOFM;
806 __raw_writel(cicr0, pcdev->base + CICR0); 951 __raw_writel(cicr0, pcdev->base + CICR0);
807 } 952 }
@@ -1265,6 +1410,18 @@ static int pxa_camera_try_fmt(struct soc_camera_device *icd,
1265 pix->width = 2048; 1410 pix->width = 2048;
1266 pix->width &= ~0x01; 1411 pix->width &= ~0x01;
1267 1412
1413 /*
1414 * YUV422P planar format requires images size to be a 16 bytes
1415 * multiple. If not, zeros will be inserted between Y and U planes, and
1416 * U and V planes, and YUV422P standard would be violated.
1417 */
1418 if (xlate->host_fmt->fourcc == V4L2_PIX_FMT_YUV422P) {
1419 if (!IS_ALIGNED(pix->width * pix->height, YUV422P_SIZE_ALIGN))
1420 pix->height = ALIGN(pix->height, YUV422P_X_Y_ALIGN);
1421 if (!IS_ALIGNED(pix->width * pix->height, YUV422P_SIZE_ALIGN))
1422 pix->width = ALIGN(pix->width, YUV422P_X_Y_ALIGN);
1423 }
1424
1268 pix->bytesperline = pix->width * 1425 pix->bytesperline = pix->width *
1269 DIV_ROUND_UP(xlate->host_fmt->depth, 8); 1426 DIV_ROUND_UP(xlate->host_fmt->depth, 8);
1270 pix->sizeimage = pix->height * pix->bytesperline; 1427 pix->sizeimage = pix->height * pix->bytesperline;
@@ -1372,18 +1529,8 @@ static int pxa_camera_resume(struct soc_camera_device *icd)
1372 ret = pcdev->icd->ops->resume(pcdev->icd); 1529 ret = pcdev->icd->ops->resume(pcdev->icd);
1373 1530
1374 /* Restart frame capture if active buffer exists */ 1531 /* Restart frame capture if active buffer exists */
1375 if (!ret && pcdev->active) { 1532 if (!ret && pcdev->active)
1376 unsigned long cifr, cicr0; 1533 pxa_camera_start_capture(pcdev);
1377
1378 /* Reset the FIFOs */
1379 cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
1380 __raw_writel(cifr, pcdev->base + CIFR);
1381
1382 cicr0 = __raw_readl(pcdev->base + CICR0);
1383 cicr0 &= ~CICR0_EOFM; /* Enable End-Of-Frame Interrupt */
1384 cicr0 |= CICR0_ENB; /* Restart the Capture Interface */
1385 __raw_writel(cicr0, pcdev->base + CICR0);
1386 }
1387 1534
1388 return ret; 1535 return ret;
1389} 1536}
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c
index b5be633e3bb0..5202cadb2aae 100644
--- a/drivers/media/video/s2255drv.c
+++ b/drivers/media/video/s2255drv.c
@@ -722,7 +722,6 @@ static void free_buffer(struct videobuf_queue *vq, struct s2255_buffer *buf)
722{ 722{
723 dprintk(4, "%s\n", __func__); 723 dprintk(4, "%s\n", __func__);
724 724
725 videobuf_waiton(&buf->vb, 0, 0);
726 videobuf_vmalloc_free(&buf->vb); 725 videobuf_vmalloc_free(&buf->vb);
727 buf->vb.state = VIDEOBUF_NEEDS_INIT; 726 buf->vb.state = VIDEOBUF_NEEDS_INIT;
728} 727}
@@ -1324,7 +1323,6 @@ static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
1324 1323
1325static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i) 1324static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
1326{ 1325{
1327 int res;
1328 struct s2255_fh *fh = priv; 1326 struct s2255_fh *fh = priv;
1329 struct s2255_dev *dev = fh->dev; 1327 struct s2255_dev *dev = fh->dev;
1330 1328
@@ -1338,9 +1336,7 @@ static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
1338 return -EINVAL; 1336 return -EINVAL;
1339 } 1337 }
1340 s2255_stop_acquire(dev, fh->channel); 1338 s2255_stop_acquire(dev, fh->channel);
1341 res = videobuf_streamoff(&fh->vb_vidq); 1339 videobuf_streamoff(&fh->vb_vidq);
1342 if (res < 0)
1343 return res;
1344 res_free(dev, fh); 1340 res_free(dev, fh);
1345 return 0; 1341 return 0;
1346} 1342}
@@ -1707,13 +1703,13 @@ static void s2255_destroy(struct kref *kref)
1707 kfree(dev->fw_data); 1703 kfree(dev->fw_data);
1708 usb_put_dev(dev->udev); 1704 usb_put_dev(dev->udev);
1709 dprintk(1, "%s", __func__); 1705 dprintk(1, "%s", __func__);
1710 kfree(dev);
1711 1706
1712 while (!list_empty(&s2255_devlist)) { 1707 while (!list_empty(&s2255_devlist)) {
1713 list = s2255_devlist.next; 1708 list = s2255_devlist.next;
1714 list_del(list); 1709 list_del(list);
1715 } 1710 }
1716 mutex_unlock(&dev->open_lock); 1711 mutex_unlock(&dev->open_lock);
1712 kfree(dev);
1717} 1713}
1718 1714
1719static int s2255_close(struct file *file) 1715static int s2255_close(struct file *file)
diff --git a/drivers/media/video/saa7110.c b/drivers/media/video/saa7110.c
index df4e08d2dceb..5c24c993ac16 100644
--- a/drivers/media/video/saa7110.c
+++ b/drivers/media/video/saa7110.c
@@ -299,17 +299,18 @@ static int saa7110_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
299 return 0; 299 return 0;
300} 300}
301 301
302static int saa7110_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 302static int saa7110_s_routing(struct v4l2_subdev *sd,
303 u32 input, u32 output, u32 config)
303{ 304{
304 struct saa7110 *decoder = to_saa7110(sd); 305 struct saa7110 *decoder = to_saa7110(sd);
305 306
306 if (route->input < 0 || route->input >= SAA7110_MAX_INPUT) { 307 if (input < 0 || input >= SAA7110_MAX_INPUT) {
307 v4l2_dbg(1, debug, sd, "input=%d not available\n", route->input); 308 v4l2_dbg(1, debug, sd, "input=%d not available\n", input);
308 return -EINVAL; 309 return -EINVAL;
309 } 310 }
310 if (decoder->input != route->input) { 311 if (decoder->input != input) {
311 saa7110_selmux(sd, route->input); 312 saa7110_selmux(sd, input);
312 v4l2_dbg(1, debug, sd, "switched to input=%d\n", route->input); 313 v4l2_dbg(1, debug, sd, "switched to input=%d\n", input);
313 } 314 }
314 return 0; 315 return 0;
315} 316}
@@ -414,9 +415,6 @@ static const struct v4l2_subdev_core_ops saa7110_core_ops = {
414 .g_ctrl = saa7110_g_ctrl, 415 .g_ctrl = saa7110_g_ctrl,
415 .s_ctrl = saa7110_s_ctrl, 416 .s_ctrl = saa7110_s_ctrl,
416 .queryctrl = saa7110_queryctrl, 417 .queryctrl = saa7110_queryctrl,
417};
418
419static const struct v4l2_subdev_tuner_ops saa7110_tuner_ops = {
420 .s_std = saa7110_s_std, 418 .s_std = saa7110_s_std,
421}; 419};
422 420
@@ -429,7 +427,6 @@ static const struct v4l2_subdev_video_ops saa7110_video_ops = {
429 427
430static const struct v4l2_subdev_ops saa7110_ops = { 428static const struct v4l2_subdev_ops saa7110_ops = {
431 .core = &saa7110_core_ops, 429 .core = &saa7110_core_ops,
432 .tuner = &saa7110_tuner_ops,
433 .video = &saa7110_video_ops, 430 .video = &saa7110_video_ops,
434}; 431};
435 432
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index cebf159f52cf..44873a016c2c 100644
--- a/drivers/media/video/saa7115.c
+++ b/drivers/media/video/saa7115.c
@@ -46,7 +46,7 @@
46#include <linux/videodev2.h> 46#include <linux/videodev2.h>
47#include <media/v4l2-device.h> 47#include <media/v4l2-device.h>
48#include <media/v4l2-chip-ident.h> 48#include <media/v4l2-chip-ident.h>
49#include <media/v4l2-i2c-drv-legacy.h> 49#include <media/v4l2-i2c-drv.h>
50#include <media/saa7115.h> 50#include <media/saa7115.h>
51#include <asm/div64.h> 51#include <asm/div64.h>
52 52
@@ -62,12 +62,6 @@ module_param(debug, bool, 0644);
62 62
63MODULE_PARM_DESC(debug, "Debug level (0-1)"); 63MODULE_PARM_DESC(debug, "Debug level (0-1)");
64 64
65static unsigned short normal_i2c[] = {
66 0x4a >> 1, 0x48 >> 1, /* SAA7111, SAA7111A and SAA7113 */
67 0x42 >> 1, 0x40 >> 1, /* SAA7114, SAA7115 and SAA7118 */
68 I2C_CLIENT_END };
69
70I2C_CLIENT_INSMOD;
71 65
72struct saa711x_state { 66struct saa711x_state {
73 struct v4l2_subdev sd; 67 struct v4l2_subdev sd;
@@ -1234,30 +1228,32 @@ static int saa711x_s_radio(struct v4l2_subdev *sd)
1234 return 0; 1228 return 0;
1235} 1229}
1236 1230
1237static int saa711x_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 1231static int saa711x_s_routing(struct v4l2_subdev *sd,
1232 u32 input, u32 output, u32 config)
1238{ 1233{
1239 struct saa711x_state *state = to_state(sd); 1234 struct saa711x_state *state = to_state(sd);
1240 u32 input = route->input;
1241 u8 mask = (state->ident == V4L2_IDENT_SAA7111) ? 0xf8 : 0xf0; 1235 u8 mask = (state->ident == V4L2_IDENT_SAA7111) ? 0xf8 : 0xf0;
1242 1236
1243 v4l2_dbg(1, debug, sd, "decoder set input %d output %d\n", route->input, route->output); 1237 v4l2_dbg(1, debug, sd, "decoder set input %d output %d\n",
1238 input, output);
1239
1244 /* saa7111/3 does not have these inputs */ 1240 /* saa7111/3 does not have these inputs */
1245 if ((state->ident == V4L2_IDENT_SAA7113 || 1241 if ((state->ident == V4L2_IDENT_SAA7113 ||
1246 state->ident == V4L2_IDENT_SAA7111) && 1242 state->ident == V4L2_IDENT_SAA7111) &&
1247 (route->input == SAA7115_COMPOSITE4 || 1243 (input == SAA7115_COMPOSITE4 ||
1248 route->input == SAA7115_COMPOSITE5)) { 1244 input == SAA7115_COMPOSITE5)) {
1249 return -EINVAL; 1245 return -EINVAL;
1250 } 1246 }
1251 if (route->input > SAA7115_SVIDEO3) 1247 if (input > SAA7115_SVIDEO3)
1252 return -EINVAL; 1248 return -EINVAL;
1253 if (route->output > SAA7115_IPORT_ON) 1249 if (output > SAA7115_IPORT_ON)
1254 return -EINVAL; 1250 return -EINVAL;
1255 if (state->input == route->input && state->output == route->output) 1251 if (state->input == input && state->output == output)
1256 return 0; 1252 return 0;
1257 v4l2_dbg(1, debug, sd, "now setting %s input %s output\n", 1253 v4l2_dbg(1, debug, sd, "now setting %s input %s output\n",
1258 (route->input >= SAA7115_SVIDEO0) ? "S-Video" : "Composite", 1254 (input >= SAA7115_SVIDEO0) ? "S-Video" : "Composite",
1259 (route->output == SAA7115_IPORT_ON) ? "iport on" : "iport off"); 1255 (output == SAA7115_IPORT_ON) ? "iport on" : "iport off");
1260 state->input = route->input; 1256 state->input = input;
1261 1257
1262 /* saa7111 has slightly different input numbering */ 1258 /* saa7111 has slightly different input numbering */
1263 if (state->ident == V4L2_IDENT_SAA7111) { 1259 if (state->ident == V4L2_IDENT_SAA7111) {
@@ -1266,10 +1262,10 @@ static int saa711x_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *
1266 /* saa7111 specific */ 1262 /* saa7111 specific */
1267 saa711x_write(sd, R_10_CHROMA_CNTL_2, 1263 saa711x_write(sd, R_10_CHROMA_CNTL_2,
1268 (saa711x_read(sd, R_10_CHROMA_CNTL_2) & 0x3f) | 1264 (saa711x_read(sd, R_10_CHROMA_CNTL_2) & 0x3f) |
1269 ((route->output & 0xc0) ^ 0x40)); 1265 ((output & 0xc0) ^ 0x40));
1270 saa711x_write(sd, R_13_RT_X_PORT_OUT_CNTL, 1266 saa711x_write(sd, R_13_RT_X_PORT_OUT_CNTL,
1271 (saa711x_read(sd, R_13_RT_X_PORT_OUT_CNTL) & 0xf0) | 1267 (saa711x_read(sd, R_13_RT_X_PORT_OUT_CNTL) & 0xf0) |
1272 ((route->output & 2) ? 0x0a : 0)); 1268 ((output & 2) ? 0x0a : 0));
1273 } 1269 }
1274 1270
1275 /* select mode */ 1271 /* select mode */
@@ -1282,7 +1278,7 @@ static int saa711x_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *
1282 (saa711x_read(sd, R_09_LUMA_CNTL) & 0x7f) | 1278 (saa711x_read(sd, R_09_LUMA_CNTL) & 0x7f) |
1283 (state->input >= SAA7115_SVIDEO0 ? 0x80 : 0x0)); 1279 (state->input >= SAA7115_SVIDEO0 ? 0x80 : 0x0));
1284 1280
1285 state->output = route->output; 1281 state->output = output;
1286 if (state->ident == V4L2_IDENT_SAA7114 || 1282 if (state->ident == V4L2_IDENT_SAA7114 ||
1287 state->ident == V4L2_IDENT_SAA7115) { 1283 state->ident == V4L2_IDENT_SAA7115) {
1288 saa711x_write(sd, R_83_X_PORT_I_O_ENA_AND_OUT_CLK, 1284 saa711x_write(sd, R_83_X_PORT_I_O_ENA_AND_OUT_CLK,
@@ -1319,17 +1315,16 @@ static int saa711x_s_stream(struct v4l2_subdev *sd, int enable)
1319 return 0; 1315 return 0;
1320} 1316}
1321 1317
1322static int saa711x_s_crystal_freq(struct v4l2_subdev *sd, struct v4l2_crystal_freq *freq) 1318static int saa711x_s_crystal_freq(struct v4l2_subdev *sd, u32 freq, u32 flags)
1323{ 1319{
1324 struct saa711x_state *state = to_state(sd); 1320 struct saa711x_state *state = to_state(sd);
1325 1321
1326 if (freq->freq != SAA7115_FREQ_32_11_MHZ && 1322 if (freq != SAA7115_FREQ_32_11_MHZ && freq != SAA7115_FREQ_24_576_MHZ)
1327 freq->freq != SAA7115_FREQ_24_576_MHZ)
1328 return -EINVAL; 1323 return -EINVAL;
1329 state->crystal_freq = freq->freq; 1324 state->crystal_freq = freq;
1330 state->cgcdiv = (freq->flags & SAA7115_FREQ_FL_CGCDIV) ? 3 : 4; 1325 state->cgcdiv = (flags & SAA7115_FREQ_FL_CGCDIV) ? 3 : 4;
1331 state->ucgc = (freq->flags & SAA7115_FREQ_FL_UCGC) ? 1 : 0; 1326 state->ucgc = (flags & SAA7115_FREQ_FL_UCGC) ? 1 : 0;
1332 state->apll = (freq->flags & SAA7115_FREQ_FL_APLL) ? 1 : 0; 1327 state->apll = (flags & SAA7115_FREQ_FL_APLL) ? 1 : 0;
1333 saa711x_s_clock_freq(sd, state->audclk_freq); 1328 saa711x_s_clock_freq(sd, state->audclk_freq);
1334 return 0; 1329 return 0;
1335} 1330}
@@ -1498,11 +1493,6 @@ static int saa711x_log_status(struct v4l2_subdev *sd)
1498 return 0; 1493 return 0;
1499} 1494}
1500 1495
1501static int saa711x_command(struct i2c_client *client, unsigned cmd, void *arg)
1502{
1503 return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
1504}
1505
1506/* ----------------------------------------------------------------------- */ 1496/* ----------------------------------------------------------------------- */
1507 1497
1508static const struct v4l2_subdev_core_ops saa711x_core_ops = { 1498static const struct v4l2_subdev_core_ops saa711x_core_ops = {
@@ -1511,6 +1501,7 @@ static const struct v4l2_subdev_core_ops saa711x_core_ops = {
1511 .g_ctrl = saa711x_g_ctrl, 1501 .g_ctrl = saa711x_g_ctrl,
1512 .s_ctrl = saa711x_s_ctrl, 1502 .s_ctrl = saa711x_s_ctrl,
1513 .queryctrl = saa711x_queryctrl, 1503 .queryctrl = saa711x_queryctrl,
1504 .s_std = saa711x_s_std,
1514 .reset = saa711x_reset, 1505 .reset = saa711x_reset,
1515 .s_gpio = saa711x_s_gpio, 1506 .s_gpio = saa711x_s_gpio,
1516#ifdef CONFIG_VIDEO_ADV_DEBUG 1507#ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1520,7 +1511,6 @@ static const struct v4l2_subdev_core_ops saa711x_core_ops = {
1520}; 1511};
1521 1512
1522static const struct v4l2_subdev_tuner_ops saa711x_tuner_ops = { 1513static const struct v4l2_subdev_tuner_ops saa711x_tuner_ops = {
1523 .s_std = saa711x_s_std,
1524 .s_radio = saa711x_s_radio, 1514 .s_radio = saa711x_s_radio,
1525 .g_tuner = saa711x_g_tuner, 1515 .g_tuner = saa711x_g_tuner,
1526}; 1516};
@@ -1676,10 +1666,7 @@ MODULE_DEVICE_TABLE(i2c, saa7115_id);
1676 1666
1677static struct v4l2_i2c_driver_data v4l2_i2c_data = { 1667static struct v4l2_i2c_driver_data v4l2_i2c_data = {
1678 .name = "saa7115", 1668 .name = "saa7115",
1679 .driverid = I2C_DRIVERID_SAA711X,
1680 .command = saa711x_command,
1681 .probe = saa711x_probe, 1669 .probe = saa711x_probe,
1682 .remove = saa711x_remove, 1670 .remove = saa711x_remove,
1683 .legacy_class = I2C_CLASS_TV_ANALOG | I2C_CLASS_TV_DIGITAL,
1684 .id_table = saa7115_id, 1671 .id_table = saa7115_id,
1685}; 1672};
diff --git a/drivers/media/video/saa7127.c b/drivers/media/video/saa7127.c
index 128bb8b8dbbf..2fe7a701b954 100644
--- a/drivers/media/video/saa7127.c
+++ b/drivers/media/video/saa7127.c
@@ -570,15 +570,16 @@ static int saa7127_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
570 return saa7127_set_std(sd, std); 570 return saa7127_set_std(sd, std);
571} 571}
572 572
573static int saa7127_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 573static int saa7127_s_routing(struct v4l2_subdev *sd,
574 u32 input, u32 output, u32 config)
574{ 575{
575 struct saa7127_state *state = to_state(sd); 576 struct saa7127_state *state = to_state(sd);
576 int rc = 0; 577 int rc = 0;
577 578
578 if (state->input_type != route->input) 579 if (state->input_type != input)
579 rc = saa7127_set_input_type(sd, route->input); 580 rc = saa7127_set_input_type(sd, input);
580 if (rc == 0 && state->output_type != route->output) 581 if (rc == 0 && state->output_type != output)
581 rc = saa7127_set_output_type(sd, route->output); 582 rc = saa7127_set_output_type(sd, output);
582 return rc; 583 return rc;
583} 584}
584 585
diff --git a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c
index dc2213e2f86e..63c4b8f1f541 100644
--- a/drivers/media/video/saa7134/saa6752hs.c
+++ b/drivers/media/video/saa7134/saa6752hs.c
@@ -928,9 +928,6 @@ static const struct v4l2_subdev_core_ops saa6752hs_core_ops = {
928 .g_ext_ctrls = saa6752hs_g_ext_ctrls, 928 .g_ext_ctrls = saa6752hs_g_ext_ctrls,
929 .s_ext_ctrls = saa6752hs_s_ext_ctrls, 929 .s_ext_ctrls = saa6752hs_s_ext_ctrls,
930 .try_ext_ctrls = saa6752hs_try_ext_ctrls, 930 .try_ext_ctrls = saa6752hs_try_ext_ctrls,
931};
932
933static const struct v4l2_subdev_tuner_ops saa6752hs_tuner_ops = {
934 .s_std = saa6752hs_s_std, 931 .s_std = saa6752hs_s_std,
935}; 932};
936 933
@@ -941,7 +938,6 @@ static const struct v4l2_subdev_video_ops saa6752hs_video_ops = {
941 938
942static const struct v4l2_subdev_ops saa6752hs_ops = { 939static const struct v4l2_subdev_ops saa6752hs_ops = {
943 .core = &saa6752hs_core_ops, 940 .core = &saa6752hs_core_ops,
944 .tuner = &saa6752hs_tuner_ops,
945 .video = &saa6752hs_video_ops, 941 .video = &saa6752hs_video_ops,
946}; 942};
947 943
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index a790a7246a63..fdb19449d269 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -4508,12 +4508,17 @@ struct saa7134_board saa7134_boards[] = {
4508 /* Matthias Schwarzott <zzam@gentoo.org> */ 4508 /* Matthias Schwarzott <zzam@gentoo.org> */
4509 .name = "Avermedia DVB-S Hybrid+FM A700", 4509 .name = "Avermedia DVB-S Hybrid+FM A700",
4510 .audio_clock = 0x00187de7, 4510 .audio_clock = 0x00187de7,
4511 .tuner_type = TUNER_ABSENT, /* TUNER_XC2028 */ 4511 .tuner_type = TUNER_XC2028,
4512 .radio_type = UNSET, 4512 .radio_type = UNSET,
4513 .tuner_addr = ADDR_UNSET, 4513 .tuner_addr = ADDR_UNSET,
4514 .radio_addr = ADDR_UNSET, 4514 .radio_addr = ADDR_UNSET,
4515 .mpeg = SAA7134_MPEG_DVB, 4515 .mpeg = SAA7134_MPEG_DVB,
4516 .inputs = { { 4516 .inputs = { {
4517 .name = name_tv,
4518 .vmux = 4,
4519 .amux = TV,
4520 .tv = 1,
4521 }, {
4517 .name = name_comp, 4522 .name = name_comp,
4518 .vmux = 1, 4523 .vmux = 1,
4519 .amux = LINE1, 4524 .amux = LINE1,
@@ -4522,6 +4527,10 @@ struct saa7134_board saa7134_boards[] = {
4522 .vmux = 6, 4527 .vmux = 6,
4523 .amux = LINE1, 4528 .amux = LINE1,
4524 } }, 4529 } },
4530 .radio = {
4531 .name = name_radio,
4532 .amux = TV,
4533 },
4525 }, 4534 },
4526 [SAA7134_BOARD_BEHOLD_H6] = { 4535 [SAA7134_BOARD_BEHOLD_H6] = {
4527 /* Igor Kuznetsov <igk@igk.ru> */ 4536 /* Igor Kuznetsov <igk@igk.ru> */
@@ -5914,6 +5923,11 @@ static int saa7134_xc2028_callback(struct saa7134_dev *dev,
5914 msleep(10); 5923 msleep(10);
5915 saa7134_set_gpio(dev, 21, 1); 5924 saa7134_set_gpio(dev, 21, 1);
5916 break; 5925 break;
5926 case SAA7134_BOARD_AVERMEDIA_A700_HYBRID:
5927 saa7134_set_gpio(dev, 18, 0);
5928 msleep(10);
5929 saa7134_set_gpio(dev, 18, 1);
5930 break;
5917 } 5931 }
5918 return 0; 5932 return 0;
5919 } 5933 }
@@ -6259,10 +6273,6 @@ int saa7134_board_init1(struct saa7134_dev *dev)
6259 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0c0007cd, 0x0c0007cd); 6273 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0c0007cd, 0x0c0007cd);
6260 break; 6274 break;
6261 case SAA7134_BOARD_AVERMEDIA_A700_HYBRID: 6275 case SAA7134_BOARD_AVERMEDIA_A700_HYBRID:
6262 printk("%s: %s: hybrid analog/dvb card\n"
6263 "%s: Sorry, of the analog inputs, only analog s-video and composite "
6264 "are supported for now.\n",
6265 dev->name, card(dev).name, dev->name);
6266 case SAA7134_BOARD_AVERMEDIA_A700_PRO: 6276 case SAA7134_BOARD_AVERMEDIA_A700_PRO:
6267 /* write windows gpio values */ 6277 /* write windows gpio values */
6268 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x80040100, 0x80040100); 6278 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x80040100, 0x80040100);
@@ -6326,6 +6336,7 @@ static void saa7134_tuner_setup(struct saa7134_dev *dev)
6326 case SAA7134_BOARD_AVERMEDIA_A16D: 6336 case SAA7134_BOARD_AVERMEDIA_A16D:
6327 case SAA7134_BOARD_AVERMEDIA_CARDBUS_506: 6337 case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
6328 case SAA7134_BOARD_AVERMEDIA_M103: 6338 case SAA7134_BOARD_AVERMEDIA_M103:
6339 case SAA7134_BOARD_AVERMEDIA_A700_HYBRID:
6329 ctl.demod = XC3028_FE_ZARLINK456; 6340 ctl.demod = XC3028_FE_ZARLINK456;
6330 break; 6341 break;
6331 default: 6342 default:
@@ -6599,20 +6610,24 @@ int saa7134_board_init2(struct saa7134_dev *dev)
6599 /* Note: radio tuner address is always filled in, 6610 /* Note: radio tuner address is always filled in,
6600 so we do not need to probe for a radio tuner device. */ 6611 so we do not need to probe for a radio tuner device. */
6601 if (dev->radio_type != UNSET) 6612 if (dev->radio_type != UNSET)
6602 v4l2_i2c_new_subdev(&dev->i2c_adap, 6613 v4l2_i2c_new_subdev(&dev->v4l2_dev,
6603 "tuner", "tuner", dev->radio_addr); 6614 &dev->i2c_adap, "tuner", "tuner",
6615 dev->radio_addr);
6604 if (has_demod) 6616 if (has_demod)
6605 v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner", 6617 v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
6606 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 6618 &dev->i2c_adap, "tuner", "tuner",
6619 v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
6607 if (dev->tuner_addr == ADDR_UNSET) { 6620 if (dev->tuner_addr == ADDR_UNSET) {
6608 enum v4l2_i2c_tuner_type type = 6621 enum v4l2_i2c_tuner_type type =
6609 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV; 6622 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
6610 6623
6611 v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner", 6624 v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
6612 "tuner", v4l2_i2c_tuner_addrs(type)); 6625 &dev->i2c_adap, "tuner", "tuner",
6626 v4l2_i2c_tuner_addrs(type));
6613 } else { 6627 } else {
6614 v4l2_i2c_new_subdev(&dev->i2c_adap, 6628 v4l2_i2c_new_subdev(&dev->v4l2_dev,
6615 "tuner", "tuner", dev->tuner_addr); 6629 &dev->i2c_adap, "tuner", "tuner",
6630 dev->tuner_addr);
6616 } 6631 }
6617 } 6632 }
6618 6633
diff --git a/drivers/media/video/saa7134/saa7134-core.c b/drivers/media/video/saa7134/saa7134-core.c
index dafa0d88bed0..2def6fec814b 100644
--- a/drivers/media/video/saa7134/saa7134-core.c
+++ b/drivers/media/video/saa7134/saa7134-core.c
@@ -911,7 +911,7 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
911 pci_name(pci_dev), dev->pci_rev, pci_dev->irq, 911 pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
912 dev->pci_lat,(unsigned long long)pci_resource_start(pci_dev,0)); 912 dev->pci_lat,(unsigned long long)pci_resource_start(pci_dev,0));
913 pci_set_master(pci_dev); 913 pci_set_master(pci_dev);
914 if (!pci_dma_supported(pci_dev, DMA_32BIT_MASK)) { 914 if (!pci_dma_supported(pci_dev, DMA_BIT_MASK(32))) {
915 printk("%s: Oops: no 32bit PCI DMA ???\n",dev->name); 915 printk("%s: Oops: no 32bit PCI DMA ???\n",dev->name);
916 err = -EIO; 916 err = -EIO;
917 goto fail1; 917 goto fail1;
@@ -982,7 +982,7 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
982 /* load i2c helpers */ 982 /* load i2c helpers */
983 if (card_is_empress(dev)) { 983 if (card_is_empress(dev)) {
984 struct v4l2_subdev *sd = 984 struct v4l2_subdev *sd =
985 v4l2_i2c_new_subdev(&dev->i2c_adap, 985 v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
986 "saa6752hs", "saa6752hs", 986 "saa6752hs", "saa6752hs",
987 saa7134_boards[dev->board].empress_addr); 987 saa7134_boards[dev->board].empress_addr);
988 988
@@ -991,12 +991,11 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
991 } 991 }
992 992
993 if (saa7134_boards[dev->board].rds_addr) { 993 if (saa7134_boards[dev->board].rds_addr) {
994 unsigned short addrs[2] = { 0, I2C_CLIENT_END };
995 struct v4l2_subdev *sd; 994 struct v4l2_subdev *sd;
996 995
997 addrs[0] = saa7134_boards[dev->board].rds_addr; 996 sd = v4l2_i2c_new_probed_subdev_addr(&dev->v4l2_dev,
998 sd = v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "saa6588", 997 &dev->i2c_adap, "saa6588", "saa6588",
999 "saa6588", addrs); 998 saa7134_boards[dev->board].rds_addr);
1000 if (sd) 999 if (sd)
1001 printk(KERN_INFO "%s: found RDS decoder\n", dev->name); 1000 printk(KERN_INFO "%s: found RDS decoder\n", dev->name);
1002 } 1001 }
@@ -1015,7 +1014,7 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
1015 saa7134_irq_video_signalchange(dev); 1014 saa7134_irq_video_signalchange(dev);
1016 1015
1017 if (TUNER_ABSENT != dev->tuner_type) 1016 if (TUNER_ABSENT != dev->tuner_type)
1018 saa_call_all(dev, core, s_standby, 0); 1017 saa_call_all(dev, tuner, s_standby);
1019 1018
1020 /* register v4l devices */ 1019 /* register v4l devices */
1021 if (saa7134_no_overlay > 0) 1020 if (saa7134_no_overlay > 0)
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c
index 404f70eeb355..493cad941460 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -625,10 +625,10 @@ void saa7134_set_tvnorm_hw(struct saa7134_dev *dev)
625 saa7134_set_decoder(dev); 625 saa7134_set_decoder(dev);
626 626
627 if (card_in(dev, dev->ctl_input).tv) 627 if (card_in(dev, dev->ctl_input).tv)
628 saa_call_all(dev, tuner, s_std, dev->tvnorm->id); 628 saa_call_all(dev, core, s_std, dev->tvnorm->id);
629 /* Set the correct norm for the saa6752hs. This function 629 /* Set the correct norm for the saa6752hs. This function
630 does nothing if there is no saa6752hs. */ 630 does nothing if there is no saa6752hs. */
631 saa_call_empress(dev, tuner, s_std, dev->tvnorm->id); 631 saa_call_empress(dev, core, s_std, dev->tvnorm->id);
632} 632}
633 633
634static void set_h_prescale(struct saa7134_dev *dev, int task, int prescale) 634static void set_h_prescale(struct saa7134_dev *dev, int task, int prescale)
@@ -1496,7 +1496,7 @@ static int video_release(struct file *file)
1496 saa_andorb(SAA7134_OFMT_DATA_A, 0x1f, 0); 1496 saa_andorb(SAA7134_OFMT_DATA_A, 0x1f, 0);
1497 saa_andorb(SAA7134_OFMT_DATA_B, 0x1f, 0); 1497 saa_andorb(SAA7134_OFMT_DATA_B, 0x1f, 0);
1498 1498
1499 saa_call_all(dev, core, s_standby, 0); 1499 saa_call_all(dev, tuner, s_standby);
1500 if (fh->radio) 1500 if (fh->radio)
1501 saa_call_all(dev, core, ioctl, RDS_CMD_CLOSE, &cmd); 1501 saa_call_all(dev, core, ioctl, RDS_CMD_CLOSE, &cmd);
1502 1502
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
index a2dd326de5b9..0cbaf90d4874 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -20,7 +20,7 @@
20 */ 20 */
21 21
22#include <linux/version.h> 22#include <linux/version.h>
23#define SAA7134_VERSION_CODE KERNEL_VERSION(0,2,14) 23#define SAA7134_VERSION_CODE KERNEL_VERSION(0,2,15)
24 24
25#include <linux/pci.h> 25#include <linux/pci.h>
26#include <linux/i2c.h> 26#include <linux/i2c.h>
diff --git a/drivers/media/video/saa717x.c b/drivers/media/video/saa717x.c
index 25bf2303a6b5..b15c40908e84 100644
--- a/drivers/media/video/saa717x.c
+++ b/drivers/media/video/saa717x.c
@@ -1104,22 +1104,22 @@ static struct v4l2_queryctrl saa717x_qctrl[] = {
1104 }, 1104 },
1105}; 1105};
1106 1106
1107static int saa717x_s_video_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 1107static int saa717x_s_video_routing(struct v4l2_subdev *sd,
1108 u32 input, u32 output, u32 config)
1108{ 1109{
1109 struct saa717x_state *decoder = to_state(sd); 1110 struct saa717x_state *decoder = to_state(sd);
1110 int inp = route->input; 1111 int is_tuner = input & 0x80; /* tuner input flag */
1111 int is_tuner = inp & 0x80; /* tuner input flag */
1112 1112
1113 inp &= 0x7f; 1113 input &= 0x7f;
1114 1114
1115 v4l2_dbg(1, debug, sd, "decoder set input (%d)\n", inp); 1115 v4l2_dbg(1, debug, sd, "decoder set input (%d)\n", input);
1116 /* inputs from 0-9 are available*/ 1116 /* inputs from 0-9 are available*/
1117 /* saa717x have mode0-mode9 but mode5 is reserved. */ 1117 /* saa717x have mode0-mode9 but mode5 is reserved. */
1118 if (inp < 0 || inp > 9 || inp == 5) 1118 if (input < 0 || input > 9 || input == 5)
1119 return -EINVAL; 1119 return -EINVAL;
1120 1120
1121 if (decoder->input != inp) { 1121 if (decoder->input != input) {
1122 int input_line = inp; 1122 int input_line = input;
1123 1123
1124 decoder->input = input_line; 1124 decoder->input = input_line;
1125 v4l2_dbg(1, debug, sd, "now setting %s input %d\n", 1125 v4l2_dbg(1, debug, sd, "now setting %s input %d\n",
@@ -1276,12 +1276,13 @@ static int saa717x_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
1276 return 0; 1276 return 0;
1277} 1277}
1278 1278
1279static int saa717x_s_audio_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 1279static int saa717x_s_audio_routing(struct v4l2_subdev *sd,
1280 u32 input, u32 output, u32 config)
1280{ 1281{
1281 struct saa717x_state *decoder = to_state(sd); 1282 struct saa717x_state *decoder = to_state(sd);
1282 1283
1283 if (route->input < 3) { /* FIXME! --tadachi */ 1284 if (input < 3) { /* FIXME! --tadachi */
1284 decoder->audio_input = route->input; 1285 decoder->audio_input = input;
1285 v4l2_dbg(1, debug, sd, 1286 v4l2_dbg(1, debug, sd,
1286 "set decoder audio input to %d\n", 1287 "set decoder audio input to %d\n",
1287 decoder->audio_input); 1288 decoder->audio_input);
@@ -1390,12 +1391,12 @@ static const struct v4l2_subdev_core_ops saa717x_core_ops = {
1390 .queryctrl = saa717x_queryctrl, 1391 .queryctrl = saa717x_queryctrl,
1391 .g_ctrl = saa717x_g_ctrl, 1392 .g_ctrl = saa717x_g_ctrl,
1392 .s_ctrl = saa717x_s_ctrl, 1393 .s_ctrl = saa717x_s_ctrl,
1394 .s_std = saa717x_s_std,
1393}; 1395};
1394 1396
1395static const struct v4l2_subdev_tuner_ops saa717x_tuner_ops = { 1397static const struct v4l2_subdev_tuner_ops saa717x_tuner_ops = {
1396 .g_tuner = saa717x_g_tuner, 1398 .g_tuner = saa717x_g_tuner,
1397 .s_tuner = saa717x_s_tuner, 1399 .s_tuner = saa717x_s_tuner,
1398 .s_std = saa717x_s_std,
1399 .s_radio = saa717x_s_radio, 1400 .s_radio = saa717x_s_radio,
1400}; 1401};
1401 1402
diff --git a/drivers/media/video/saa7185.c b/drivers/media/video/saa7185.c
index 75747b104d07..212baa10829b 100644
--- a/drivers/media/video/saa7185.c
+++ b/drivers/media/video/saa7185.c
@@ -245,14 +245,15 @@ static int saa7185_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
245 return 0; 245 return 0;
246} 246}
247 247
248static int saa7185_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 248static int saa7185_s_routing(struct v4l2_subdev *sd,
249 u32 input, u32 output, u32 config)
249{ 250{
250 struct saa7185 *encoder = to_saa7185(sd); 251 struct saa7185 *encoder = to_saa7185(sd);
251 252
252 /* RJ: route->input = 0: input is from SA7111 253 /* RJ: input = 0: input is from SA7111
253 route->input = 1: input is from ZR36060 */ 254 input = 1: input is from ZR36060 */
254 255
255 switch (route->input) { 256 switch (input) {
256 case 0: 257 case 0:
257 /* turn off colorbar */ 258 /* turn off colorbar */
258 saa7185_write(sd, 0x3a, 0x0f); 259 saa7185_write(sd, 0x3a, 0x0f);
diff --git a/drivers/media/video/saa7191.c b/drivers/media/video/saa7191.c
index 3f523aeec56e..a2513772196b 100644
--- a/drivers/media/video/saa7191.c
+++ b/drivers/media/video/saa7191.c
@@ -160,14 +160,14 @@ static int saa7191_write_block(struct v4l2_subdev *sd,
160/* Helper functions */ 160/* Helper functions */
161 161
162static int saa7191_s_routing(struct v4l2_subdev *sd, 162static int saa7191_s_routing(struct v4l2_subdev *sd,
163 const struct v4l2_routing *route) 163 u32 input, u32 output, u32 config)
164{ 164{
165 struct saa7191 *decoder = to_saa7191(sd); 165 struct saa7191 *decoder = to_saa7191(sd);
166 u8 luma = saa7191_read_reg(sd, SAA7191_REG_LUMA); 166 u8 luma = saa7191_read_reg(sd, SAA7191_REG_LUMA);
167 u8 iock = saa7191_read_reg(sd, SAA7191_REG_IOCK); 167 u8 iock = saa7191_read_reg(sd, SAA7191_REG_IOCK);
168 int err; 168 int err;
169 169
170 switch (route->input) { 170 switch (input) {
171 case SAA7191_INPUT_COMPOSITE: /* Set Composite input */ 171 case SAA7191_INPUT_COMPOSITE: /* Set Composite input */
172 iock &= ~(SAA7191_IOCK_CHRS | SAA7191_IOCK_GPSW1 172 iock &= ~(SAA7191_IOCK_CHRS | SAA7191_IOCK_GPSW1
173 | SAA7191_IOCK_GPSW2); 173 | SAA7191_IOCK_GPSW2);
@@ -190,7 +190,7 @@ static int saa7191_s_routing(struct v4l2_subdev *sd,
190 if (err) 190 if (err)
191 return -EIO; 191 return -EIO;
192 192
193 decoder->input = route->input; 193 decoder->input = input;
194 194
195 return 0; 195 return 0;
196} 196}
@@ -582,9 +582,6 @@ static const struct v4l2_subdev_core_ops saa7191_core_ops = {
582 .g_chip_ident = saa7191_g_chip_ident, 582 .g_chip_ident = saa7191_g_chip_ident,
583 .g_ctrl = saa7191_g_ctrl, 583 .g_ctrl = saa7191_g_ctrl,
584 .s_ctrl = saa7191_s_ctrl, 584 .s_ctrl = saa7191_s_ctrl,
585};
586
587static const struct v4l2_subdev_tuner_ops saa7191_tuner_ops = {
588 .s_std = saa7191_s_std, 585 .s_std = saa7191_s_std,
589}; 586};
590 587
@@ -597,7 +594,6 @@ static const struct v4l2_subdev_video_ops saa7191_video_ops = {
597static const struct v4l2_subdev_ops saa7191_ops = { 594static const struct v4l2_subdev_ops saa7191_ops = {
598 .core = &saa7191_core_ops, 595 .core = &saa7191_core_ops,
599 .video = &saa7191_video_ops, 596 .video = &saa7191_video_ops,
600 .tuner = &saa7191_tuner_ops,
601}; 597};
602 598
603static int saa7191_probe(struct i2c_client *client, 599static int saa7191_probe(struct i2c_client *client,
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c
index 6d8bfd4d97e2..0e890cc23377 100644
--- a/drivers/media/video/soc_camera.c
+++ b/drivers/media/video/soc_camera.c
@@ -764,7 +764,10 @@ static int soc_camera_s_register(struct file *file, void *fh,
764 764
765static int device_register_link(struct soc_camera_device *icd) 765static int device_register_link(struct soc_camera_device *icd)
766{ 766{
767 int ret = device_register(&icd->dev); 767 int ret = dev_set_name(&icd->dev, "%u-%u", icd->iface, icd->devnum);
768
769 if (!ret)
770 ret = device_register(&icd->dev);
768 771
769 if (ret < 0) { 772 if (ret < 0) {
770 /* Prevent calling device_unregister() */ 773 /* Prevent calling device_unregister() */
@@ -1060,7 +1063,6 @@ int soc_camera_device_register(struct soc_camera_device *icd)
1060 1063
1061 icd->devnum = num; 1064 icd->devnum = num;
1062 icd->dev.bus = &soc_camera_bus_type; 1065 icd->dev.bus = &soc_camera_bus_type;
1063 dev_set_name(&icd->dev, "%u-%u", icd->iface, icd->devnum);
1064 1066
1065 icd->dev.release = dummy_release; 1067 icd->dev.release = dummy_release;
1066 icd->use_count = 0; 1068 icd->use_count = 0;
diff --git a/drivers/media/video/tda9840.c b/drivers/media/video/tda9840.c
index fe1158094c24..d381fce3db40 100644
--- a/drivers/media/video/tda9840.c
+++ b/drivers/media/video/tda9840.c
@@ -192,7 +192,6 @@ static int tda9840_remove(struct i2c_client *client)
192 return 0; 192 return 0;
193} 193}
194 194
195
196static const struct i2c_device_id tda9840_id[] = { 195static const struct i2c_device_id tda9840_id[] = {
197 { "tda9840", 0 }, 196 { "tda9840", 0 },
198 { } 197 { }
diff --git a/drivers/media/video/tea6415c.c b/drivers/media/video/tea6415c.c
index d61c56f42bcd..d4a9ed45764b 100644
--- a/drivers/media/video/tea6415c.c
+++ b/drivers/media/video/tea6415c.c
@@ -47,12 +47,11 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
47 47
48 48
49/* makes a connection between the input-pin 'i' and the output-pin 'o' */ 49/* makes a connection between the input-pin 'i' and the output-pin 'o' */
50static int tea6415c_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 50static int tea6415c_s_routing(struct v4l2_subdev *sd,
51 u32 i, u32 o, u32 config)
51{ 52{
52 struct i2c_client *client = v4l2_get_subdevdata(sd); 53 struct i2c_client *client = v4l2_get_subdevdata(sd);
53 u8 byte = 0; 54 u8 byte = 0;
54 u32 i = route->input;
55 u32 o = route->output;
56 int ret; 55 int ret;
57 56
58 v4l2_dbg(1, debug, sd, "i=%d, o=%d\n", i, o); 57 v4l2_dbg(1, debug, sd, "i=%d, o=%d\n", i, o);
@@ -170,7 +169,6 @@ static int tea6415c_remove(struct i2c_client *client)
170 return 0; 169 return 0;
171} 170}
172 171
173
174static const struct i2c_device_id tea6415c_id[] = { 172static const struct i2c_device_id tea6415c_id[] = {
175 { "tea6415c", 0 }, 173 { "tea6415c", 0 },
176 { } 174 { }
diff --git a/drivers/media/video/tea6420.c b/drivers/media/video/tea6420.c
index 34922232402a..ced6eadf347a 100644
--- a/drivers/media/video/tea6420.c
+++ b/drivers/media/video/tea6420.c
@@ -48,15 +48,15 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
48 48
49/* make a connection between the input 'i' and the output 'o' 49/* make a connection between the input 'i' and the output 'o'
50 with gain 'g' (note: i = 6 means 'mute') */ 50 with gain 'g' (note: i = 6 means 'mute') */
51static int tea6420_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 51static int tea6420_s_routing(struct v4l2_subdev *sd,
52 u32 i, u32 o, u32 config)
52{ 53{
53 struct i2c_client *client = v4l2_get_subdevdata(sd); 54 struct i2c_client *client = v4l2_get_subdevdata(sd);
54 int i = route->input; 55 int g = (o >> 4) & 0xf;
55 int o = route->output & 0xf;
56 int g = (route->output >> 4) & 0xf;
57 u8 byte; 56 u8 byte;
58 int ret; 57 int ret;
59 58
59 o &= 0xf;
60 v4l2_dbg(1, debug, sd, "i=%d, o=%d, g=%d\n", i, o, g); 60 v4l2_dbg(1, debug, sd, "i=%d, o=%d, g=%d\n", i, o, g);
61 61
62 /* check if the parameters are valid */ 62 /* check if the parameters are valid */
@@ -133,13 +133,8 @@ static int tea6420_probe(struct i2c_client *client,
133 133
134 /* set initial values: set "mute"-input to all outputs at gain 0 */ 134 /* set initial values: set "mute"-input to all outputs at gain 0 */
135 err = 0; 135 err = 0;
136 for (i = 1; i < 5; i++) { 136 for (i = 1; i < 5; i++)
137 struct v4l2_routing route; 137 err += tea6420_s_routing(sd, 6, i, 0);
138
139 route.input = 6;
140 route.output = i;
141 err += tea6420_s_routing(sd, &route);
142 }
143 if (err) { 138 if (err) {
144 v4l_dbg(1, debug, client, "could not initialize tea6420\n"); 139 v4l_dbg(1, debug, client, "could not initialize tea6420\n");
145 return -ENODEV; 140 return -ENODEV;
@@ -156,7 +151,6 @@ static int tea6420_remove(struct i2c_client *client)
156 return 0; 151 return 0;
157} 152}
158 153
159
160static const struct i2c_device_id tea6420_id[] = { 154static const struct i2c_device_id tea6420_id[] = {
161 { "tea6420", 0 }, 155 { "tea6420", 0 },
162 { } 156 { }
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 72d41032742d..78c377a399cb 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -15,12 +15,12 @@
15#include <linux/i2c.h> 15#include <linux/i2c.h>
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/init.h> 17#include <linux/init.h>
18#include <linux/videodev.h> 18#include <linux/videodev2.h>
19#include <media/tuner.h> 19#include <media/tuner.h>
20#include <media/tuner-types.h> 20#include <media/tuner-types.h>
21#include <media/v4l2-device.h> 21#include <media/v4l2-device.h>
22#include <media/v4l2-ioctl.h> 22#include <media/v4l2-ioctl.h>
23#include <media/v4l2-i2c-drv-legacy.h> 23#include <media/v4l2-i2c-drv.h>
24#include "mt20xx.h" 24#include "mt20xx.h"
25#include "tda8290.h" 25#include "tda8290.h"
26#include "tea5761.h" 26#include "tea5761.h"
@@ -101,18 +101,6 @@ static inline struct tuner *to_tuner(struct v4l2_subdev *sd)
101 return container_of(sd, struct tuner, sd); 101 return container_of(sd, struct tuner, sd);
102} 102}
103 103
104/* standard i2c insmod options */
105static unsigned short normal_i2c[] = {
106#if defined(CONFIG_MEDIA_TUNER_TEA5761) || (defined(CONFIG_MEDIA_TUNER_TEA5761_MODULE) && defined(MODULE))
107 0x10,
108#endif
109 0x42, 0x43, 0x4a, 0x4b, /* tda8290 */
110 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
111 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
112 I2C_CLIENT_END
113};
114
115I2C_CLIENT_INSMOD;
116 104
117/* insmod options used at init time => read/only */ 105/* insmod options used at init time => read/only */
118static unsigned int addr; 106static unsigned int addr;
@@ -785,7 +773,7 @@ static int tuner_s_radio(struct v4l2_subdev *sd)
785 return 0; 773 return 0;
786} 774}
787 775
788static int tuner_s_standby(struct v4l2_subdev *sd, u32 standby) 776static int tuner_s_standby(struct v4l2_subdev *sd)
789{ 777{
790 struct tuner *t = to_tuner(sd); 778 struct tuner *t = to_tuner(sd);
791 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops; 779 struct analog_demod_ops *analog_ops = &t->fe.ops.analog_ops;
@@ -951,11 +939,6 @@ static int tuner_log_status(struct v4l2_subdev *sd)
951 return 0; 939 return 0;
952} 940}
953 941
954static int tuner_command(struct i2c_client *client, unsigned cmd, void *arg)
955{
956 return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
957}
958
959static int tuner_suspend(struct i2c_client *c, pm_message_t state) 942static int tuner_suspend(struct i2c_client *c, pm_message_t state)
960{ 943{
961 struct tuner *t = to_tuner(i2c_get_clientdata(c)); 944 struct tuner *t = to_tuner(i2c_get_clientdata(c));
@@ -980,15 +963,28 @@ static int tuner_resume(struct i2c_client *c)
980 return 0; 963 return 0;
981} 964}
982 965
966static int tuner_command(struct i2c_client *client, unsigned cmd, void *arg)
967{
968 struct v4l2_subdev *sd = i2c_get_clientdata(client);
969
970 /* TUNER_SET_CONFIG is still called by tuner-simple.c, so we have
971 to handle it here.
972 There must be a better way of doing this... */
973 switch (cmd) {
974 case TUNER_SET_CONFIG:
975 return tuner_s_config(sd, arg);
976 }
977 return -ENOIOCTLCMD;
978}
979
983/* ----------------------------------------------------------------------- */ 980/* ----------------------------------------------------------------------- */
984 981
985static const struct v4l2_subdev_core_ops tuner_core_ops = { 982static const struct v4l2_subdev_core_ops tuner_core_ops = {
986 .log_status = tuner_log_status, 983 .log_status = tuner_log_status,
987 .s_standby = tuner_s_standby, 984 .s_std = tuner_s_std,
988}; 985};
989 986
990static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = { 987static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
991 .s_std = tuner_s_std,
992 .s_radio = tuner_s_radio, 988 .s_radio = tuner_s_radio,
993 .g_tuner = tuner_g_tuner, 989 .g_tuner = tuner_g_tuner,
994 .s_tuner = tuner_s_tuner, 990 .s_tuner = tuner_s_tuner,
@@ -996,6 +992,7 @@ static const struct v4l2_subdev_tuner_ops tuner_tuner_ops = {
996 .g_frequency = tuner_g_frequency, 992 .g_frequency = tuner_g_frequency,
997 .s_type_addr = tuner_s_type_addr, 993 .s_type_addr = tuner_s_type_addr,
998 .s_config = tuner_s_config, 994 .s_config = tuner_s_config,
995 .s_standby = tuner_s_standby,
999}; 996};
1000 997
1001static const struct v4l2_subdev_ops tuner_ops = { 998static const struct v4l2_subdev_ops tuner_ops = {
@@ -1023,7 +1020,7 @@ static void tuner_lookup(struct i2c_adapter *adap,
1023 int mode_mask; 1020 int mode_mask;
1024 1021
1025 if (pos->i2c->adapter != adap || 1022 if (pos->i2c->adapter != adap ||
1026 pos->i2c->driver->id != I2C_DRIVERID_TUNER) 1023 strcmp(pos->i2c->driver->driver.name, "tuner"))
1027 continue; 1024 continue;
1028 1025
1029 mode_mask = pos->mode_mask & ~T_STANDBY; 1026 mode_mask = pos->mode_mask & ~T_STANDBY;
@@ -1167,40 +1164,6 @@ register_client:
1167 return 0; 1164 return 0;
1168} 1165}
1169 1166
1170static int tuner_legacy_probe(struct i2c_adapter *adap)
1171{
1172 if (0 != addr) {
1173 normal_i2c[0] = addr;
1174 normal_i2c[1] = I2C_CLIENT_END;
1175 }
1176
1177 if ((adap->class & I2C_CLASS_TV_ANALOG) == 0)
1178 return 0;
1179
1180 /* HACK: Ignore 0x6b and 0x6f on cx88 boards.
1181 * FusionHDTV5 RT Gold has an ir receiver at 0x6b
1182 * and an RTC at 0x6f which can get corrupted if probed.
1183 */
1184 if ((adap->id == I2C_HW_B_CX2388x) ||
1185 (adap->id == I2C_HW_B_CX23885)) {
1186 unsigned int i = 0;
1187
1188 while (i < I2C_CLIENT_MAX_OPTS && ignore[i] != I2C_CLIENT_END)
1189 i += 2;
1190 if (i + 4 < I2C_CLIENT_MAX_OPTS) {
1191 ignore[i+0] = adap->nr;
1192 ignore[i+1] = 0x6b;
1193 ignore[i+2] = adap->nr;
1194 ignore[i+3] = 0x6f;
1195 ignore[i+4] = I2C_CLIENT_END;
1196 } else
1197 printk(KERN_WARNING "tuner: "
1198 "too many options specified "
1199 "in i2c probe ignore list!\n");
1200 }
1201 return 1;
1202}
1203
1204static int tuner_remove(struct i2c_client *client) 1167static int tuner_remove(struct i2c_client *client)
1205{ 1168{
1206 struct tuner *t = to_tuner(i2c_get_clientdata(client)); 1169 struct tuner *t = to_tuner(i2c_get_clientdata(client));
@@ -1227,13 +1190,11 @@ MODULE_DEVICE_TABLE(i2c, tuner_id);
1227 1190
1228static struct v4l2_i2c_driver_data v4l2_i2c_data = { 1191static struct v4l2_i2c_driver_data v4l2_i2c_data = {
1229 .name = "tuner", 1192 .name = "tuner",
1230 .driverid = I2C_DRIVERID_TUNER,
1231 .command = tuner_command,
1232 .probe = tuner_probe, 1193 .probe = tuner_probe,
1233 .remove = tuner_remove, 1194 .remove = tuner_remove,
1195 .command = tuner_command,
1234 .suspend = tuner_suspend, 1196 .suspend = tuner_suspend,
1235 .resume = tuner_resume, 1197 .resume = tuner_resume,
1236 .legacy_probe = tuner_legacy_probe,
1237 .id_table = tuner_id, 1198 .id_table = tuner_id,
1238}; 1199};
1239 1200
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
index 226bf3565ac9..0869bafc2b56 100644
--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -35,7 +35,7 @@
35#include <media/tvaudio.h> 35#include <media/tvaudio.h>
36#include <media/v4l2-device.h> 36#include <media/v4l2-device.h>
37#include <media/v4l2-chip-ident.h> 37#include <media/v4l2-chip-ident.h>
38#include <media/v4l2-i2c-drv-legacy.h> 38#include <media/v4l2-i2c-drv.h>
39 39
40#include <media/i2c-addr.h> 40#include <media/i2c-addr.h>
41 41
@@ -136,20 +136,6 @@ static inline struct CHIPSTATE *to_state(struct v4l2_subdev *sd)
136 return container_of(sd, struct CHIPSTATE, sd); 136 return container_of(sd, struct CHIPSTATE, sd);
137} 137}
138 138
139/* ---------------------------------------------------------------------- */
140/* i2c addresses */
141
142static unsigned short normal_i2c[] = {
143 I2C_ADDR_TDA8425 >> 1,
144 I2C_ADDR_TEA6300 >> 1,
145 I2C_ADDR_TEA6420 >> 1,
146 I2C_ADDR_TDA9840 >> 1,
147 I2C_ADDR_TDA985x_L >> 1,
148 I2C_ADDR_TDA985x_H >> 1,
149 I2C_ADDR_TDA9874 >> 1,
150 I2C_ADDR_PIC16C54 >> 1,
151 I2C_CLIENT_END };
152I2C_CLIENT_INSMOD;
153 139
154/* ---------------------------------------------------------------------- */ 140/* ---------------------------------------------------------------------- */
155/* i2c I/O functions */ 141/* i2c I/O functions */
@@ -1795,17 +1781,18 @@ static int tvaudio_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
1795 return -EINVAL; 1781 return -EINVAL;
1796} 1782}
1797 1783
1798static int tvaudio_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *rt) 1784static int tvaudio_s_routing(struct v4l2_subdev *sd,
1785 u32 input, u32 output, u32 config)
1799{ 1786{
1800 struct CHIPSTATE *chip = to_state(sd); 1787 struct CHIPSTATE *chip = to_state(sd);
1801 struct CHIPDESC *desc = chip->desc; 1788 struct CHIPDESC *desc = chip->desc;
1802 1789
1803 if (!(desc->flags & CHIP_HAS_INPUTSEL)) 1790 if (!(desc->flags & CHIP_HAS_INPUTSEL))
1804 return 0; 1791 return 0;
1805 if (rt->input >= 4) 1792 if (input >= 4)
1806 return -EINVAL; 1793 return -EINVAL;
1807 /* There are four inputs: tuner, radio, extern and intern. */ 1794 /* There are four inputs: tuner, radio, extern and intern. */
1808 chip->input = rt->input; 1795 chip->input = input;
1809 if (chip->muted) 1796 if (chip->muted)
1810 return 0; 1797 return 0;
1811 chip_write_masked(chip, desc->inputreg, 1798 chip_write_masked(chip, desc->inputreg,
@@ -1918,11 +1905,6 @@ static int tvaudio_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ide
1918 return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_TVAUDIO, 0); 1905 return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_TVAUDIO, 0);
1919} 1906}
1920 1907
1921static int tvaudio_command(struct i2c_client *client, unsigned cmd, void *arg)
1922{
1923 return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
1924}
1925
1926/* ----------------------------------------------------------------------- */ 1908/* ----------------------------------------------------------------------- */
1927 1909
1928static const struct v4l2_subdev_core_ops tvaudio_core_ops = { 1910static const struct v4l2_subdev_core_ops tvaudio_core_ops = {
@@ -1930,12 +1912,12 @@ static const struct v4l2_subdev_core_ops tvaudio_core_ops = {
1930 .queryctrl = tvaudio_queryctrl, 1912 .queryctrl = tvaudio_queryctrl,
1931 .g_ctrl = tvaudio_g_ctrl, 1913 .g_ctrl = tvaudio_g_ctrl,
1932 .s_ctrl = tvaudio_s_ctrl, 1914 .s_ctrl = tvaudio_s_ctrl,
1915 .s_std = tvaudio_s_std,
1933}; 1916};
1934 1917
1935static const struct v4l2_subdev_tuner_ops tvaudio_tuner_ops = { 1918static const struct v4l2_subdev_tuner_ops tvaudio_tuner_ops = {
1936 .s_radio = tvaudio_s_radio, 1919 .s_radio = tvaudio_s_radio,
1937 .s_frequency = tvaudio_s_frequency, 1920 .s_frequency = tvaudio_s_frequency,
1938 .s_std = tvaudio_s_std,
1939 .s_tuner = tvaudio_s_tuner, 1921 .s_tuner = tvaudio_s_tuner,
1940 .s_tuner = tvaudio_g_tuner, 1922 .s_tuner = tvaudio_g_tuner,
1941}; 1923};
@@ -2088,17 +2070,6 @@ static int tvaudio_remove(struct i2c_client *client)
2088 return 0; 2070 return 0;
2089} 2071}
2090 2072
2091static int tvaudio_legacy_probe(struct i2c_adapter *adap)
2092{
2093 /* don't attach on saa7146 based cards,
2094 because dedicated drivers are used */
2095 if ((adap->id == I2C_HW_SAA7146))
2096 return 0;
2097 if (adap->class & I2C_CLASS_TV_ANALOG)
2098 return 1;
2099 return 0;
2100}
2101
2102/* This driver supports many devices and the idea is to let the driver 2073/* This driver supports many devices and the idea is to let the driver
2103 detect which device is present. So rather than listing all supported 2074 detect which device is present. So rather than listing all supported
2104 devices here, we pretend to support a single, fake device type. */ 2075 devices here, we pretend to support a single, fake device type. */
@@ -2110,10 +2081,7 @@ MODULE_DEVICE_TABLE(i2c, tvaudio_id);
2110 2081
2111static struct v4l2_i2c_driver_data v4l2_i2c_data = { 2082static struct v4l2_i2c_driver_data v4l2_i2c_data = {
2112 .name = "tvaudio", 2083 .name = "tvaudio",
2113 .driverid = I2C_DRIVERID_TVAUDIO,
2114 .command = tvaudio_command,
2115 .probe = tvaudio_probe, 2084 .probe = tvaudio_probe,
2116 .remove = tvaudio_remove, 2085 .remove = tvaudio_remove,
2117 .legacy_probe = tvaudio_legacy_probe,
2118 .id_table = tvaudio_id, 2086 .id_table = tvaudio_id,
2119}; 2087};
diff --git a/drivers/media/video/tvp5150.c b/drivers/media/video/tvp5150.c
index 3a5a95f134b4..2d38e253f14e 100644
--- a/drivers/media/video/tvp5150.c
+++ b/drivers/media/video/tvp5150.c
@@ -10,7 +10,7 @@
10#include <linux/delay.h> 10#include <linux/delay.h>
11#include <media/v4l2-device.h> 11#include <media/v4l2-device.h>
12#include <media/tvp5150.h> 12#include <media/tvp5150.h>
13#include <media/v4l2-i2c-drv-legacy.h> 13#include <media/v4l2-i2c-drv.h>
14#include <media/v4l2-chip-ident.h> 14#include <media/v4l2-chip-ident.h>
15 15
16#include "tvp5150_reg.h" 16#include "tvp5150_reg.h"
@@ -19,14 +19,6 @@ MODULE_DESCRIPTION("Texas Instruments TVP5150A video decoder driver");
19MODULE_AUTHOR("Mauro Carvalho Chehab"); 19MODULE_AUTHOR("Mauro Carvalho Chehab");
20MODULE_LICENSE("GPL"); 20MODULE_LICENSE("GPL");
21 21
22/* standard i2c insmod options */
23static unsigned short normal_i2c[] = {
24 0xb8 >> 1,
25 0xba >> 1,
26 I2C_CLIENT_END
27};
28
29I2C_CLIENT_INSMOD;
30 22
31static int debug; 23static int debug;
32module_param(debug, int, 0); 24module_param(debug, int, 0);
@@ -77,7 +69,8 @@ struct tvp5150 {
77 struct v4l2_subdev sd; 69 struct v4l2_subdev sd;
78 70
79 v4l2_std_id norm; /* Current set standard */ 71 v4l2_std_id norm; /* Current set standard */
80 struct v4l2_routing route; 72 u32 input;
73 u32 output;
81 int enable; 74 int enable;
82 int bright; 75 int bright;
83 int contrast; 76 int contrast;
@@ -288,10 +281,10 @@ static inline void tvp5150_selmux(struct v4l2_subdev *sd)
288 int input = 0; 281 int input = 0;
289 unsigned char val; 282 unsigned char val;
290 283
291 if ((decoder->route.output & TVP5150_BLACK_SCREEN) || !decoder->enable) 284 if ((decoder->output & TVP5150_BLACK_SCREEN) || !decoder->enable)
292 input = 8; 285 input = 8;
293 286
294 switch (decoder->route.input) { 287 switch (decoder->input) {
295 case TVP5150_COMPOSITE1: 288 case TVP5150_COMPOSITE1:
296 input |= 2; 289 input |= 2;
297 /* fall through */ 290 /* fall through */
@@ -307,8 +300,8 @@ static inline void tvp5150_selmux(struct v4l2_subdev *sd)
307 300
308 v4l2_dbg(1, debug, sd, "Selecting video route: route input=%i, output=%i " 301 v4l2_dbg(1, debug, sd, "Selecting video route: route input=%i, output=%i "
309 "=> tvp5150 input=%i, opmode=%i\n", 302 "=> tvp5150 input=%i, opmode=%i\n",
310 decoder->route.input,decoder->route.output, 303 decoder->input, decoder->output,
311 input, opmode ); 304 input, opmode);
312 305
313 tvp5150_write(sd, TVP5150_OP_MODE_CTL, opmode); 306 tvp5150_write(sd, TVP5150_OP_MODE_CTL, opmode);
314 tvp5150_write(sd, TVP5150_VD_IN_SRC_SEL_1, input); 307 tvp5150_write(sd, TVP5150_VD_IN_SRC_SEL_1, input);
@@ -317,7 +310,7 @@ static inline void tvp5150_selmux(struct v4l2_subdev *sd)
317 * For Composite and TV, it should be the reverse 310 * For Composite and TV, it should be the reverse
318 */ 311 */
319 val = tvp5150_read(sd, TVP5150_MISC_CTL); 312 val = tvp5150_read(sd, TVP5150_MISC_CTL);
320 if (decoder->route.input == TVP5150_SVIDEO) 313 if (decoder->input == TVP5150_SVIDEO)
321 val = (val & ~0x40) | 0x10; 314 val = (val & ~0x40) | 0x10;
322 else 315 else
323 val = (val & ~0x10) | 0x40; 316 val = (val & ~0x10) | 0x40;
@@ -886,11 +879,13 @@ static int tvp5150_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
886 I2C Command 879 I2C Command
887 ****************************************************************************/ 880 ****************************************************************************/
888 881
889static int tvp5150_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 882static int tvp5150_s_routing(struct v4l2_subdev *sd,
883 u32 input, u32 output, u32 config)
890{ 884{
891 struct tvp5150 *decoder = to_tvp5150(sd); 885 struct tvp5150 *decoder = to_tvp5150(sd);
892 886
893 decoder->route = *route; 887 decoder->input = input;
888 decoder->output = output;
894 tvp5150_selmux(sd); 889 tvp5150_selmux(sd);
895 return 0; 890 return 0;
896} 891}
@@ -1026,11 +1021,6 @@ static int tvp5150_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
1026 return -EINVAL; 1021 return -EINVAL;
1027} 1022}
1028 1023
1029static int tvp5150_command(struct i2c_client *client, unsigned cmd, void *arg)
1030{
1031 return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
1032}
1033
1034/* ----------------------------------------------------------------------- */ 1024/* ----------------------------------------------------------------------- */
1035 1025
1036static const struct v4l2_subdev_core_ops tvp5150_core_ops = { 1026static const struct v4l2_subdev_core_ops tvp5150_core_ops = {
@@ -1038,6 +1028,7 @@ static const struct v4l2_subdev_core_ops tvp5150_core_ops = {
1038 .g_ctrl = tvp5150_g_ctrl, 1028 .g_ctrl = tvp5150_g_ctrl,
1039 .s_ctrl = tvp5150_s_ctrl, 1029 .s_ctrl = tvp5150_s_ctrl,
1040 .queryctrl = tvp5150_queryctrl, 1030 .queryctrl = tvp5150_queryctrl,
1031 .s_std = tvp5150_s_std,
1041 .reset = tvp5150_reset, 1032 .reset = tvp5150_reset,
1042 .g_chip_ident = tvp5150_g_chip_ident, 1033 .g_chip_ident = tvp5150_g_chip_ident,
1043#ifdef CONFIG_VIDEO_ADV_DEBUG 1034#ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1047,7 +1038,6 @@ static const struct v4l2_subdev_core_ops tvp5150_core_ops = {
1047}; 1038};
1048 1039
1049static const struct v4l2_subdev_tuner_ops tvp5150_tuner_ops = { 1040static const struct v4l2_subdev_tuner_ops tvp5150_tuner_ops = {
1050 .s_std = tvp5150_s_std,
1051 .g_tuner = tvp5150_g_tuner, 1041 .g_tuner = tvp5150_g_tuner,
1052}; 1042};
1053 1043
@@ -1090,7 +1080,7 @@ static int tvp5150_probe(struct i2c_client *c,
1090 c->addr << 1, c->adapter->name); 1080 c->addr << 1, c->adapter->name);
1091 1081
1092 core->norm = V4L2_STD_ALL; /* Default is autodetect */ 1082 core->norm = V4L2_STD_ALL; /* Default is autodetect */
1093 core->route.input = TVP5150_COMPOSITE1; 1083 core->input = TVP5150_COMPOSITE1;
1094 core->enable = 1; 1084 core->enable = 1;
1095 core->bright = 128; 1085 core->bright = 128;
1096 core->contrast = 128; 1086 core->contrast = 128;
@@ -1125,9 +1115,7 @@ MODULE_DEVICE_TABLE(i2c, tvp5150_id);
1125 1115
1126static struct v4l2_i2c_driver_data v4l2_i2c_data = { 1116static struct v4l2_i2c_driver_data v4l2_i2c_data = {
1127 .name = "tvp5150", 1117 .name = "tvp5150",
1128 .command = tvp5150_command,
1129 .probe = tvp5150_probe, 1118 .probe = tvp5150_probe,
1130 .remove = tvp5150_remove, 1119 .remove = tvp5150_remove,
1131 .legacy_class = I2C_CLASS_TV_ANALOG | I2C_CLASS_TV_DIGITAL,
1132 .id_table = tvp5150_id, 1120 .id_table = tvp5150_id,
1133}; 1121};
diff --git a/drivers/media/video/upd64031a.c b/drivers/media/video/upd64031a.c
index c0ac651bb358..a07a3fbb51eb 100644
--- a/drivers/media/video/upd64031a.c
+++ b/drivers/media/video/upd64031a.c
@@ -124,17 +124,18 @@ static int upd64031a_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *
124 124
125/* ------------------------------------------------------------------------ */ 125/* ------------------------------------------------------------------------ */
126 126
127static int upd64031a_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 127static int upd64031a_s_routing(struct v4l2_subdev *sd,
128 u32 input, u32 output, u32 config)
128{ 129{
129 struct upd64031a_state *state = to_state(sd); 130 struct upd64031a_state *state = to_state(sd);
130 u8 r00, r05, r08; 131 u8 r00, r05, r08;
131 132
132 state->gr_mode = (route->input & 3) << 6; 133 state->gr_mode = (input & 3) << 6;
133 state->direct_3dycs_connect = (route->input & 0xc) << 4; 134 state->direct_3dycs_connect = (input & 0xc) << 4;
134 state->ext_comp_sync = 135 state->ext_comp_sync =
135 (route->input & UPD64031A_COMPOSITE_EXTERNAL) << 1; 136 (input & UPD64031A_COMPOSITE_EXTERNAL) << 1;
136 state->ext_vert_sync = 137 state->ext_vert_sync =
137 (route->input & UPD64031A_VERTICAL_EXTERNAL) << 2; 138 (input & UPD64031A_VERTICAL_EXTERNAL) << 2;
138 r00 = (state->regs[R00] & ~GR_MODE_MASK) | state->gr_mode; 139 r00 = (state->regs[R00] & ~GR_MODE_MASK) | state->gr_mode;
139 r05 = (state->regs[R00] & ~SYNC_CIRCUIT_MASK) | 140 r05 = (state->regs[R00] & ~SYNC_CIRCUIT_MASK) |
140 state->ext_comp_sync | state->ext_vert_sync; 141 state->ext_comp_sync | state->ext_vert_sync;
diff --git a/drivers/media/video/upd64083.c b/drivers/media/video/upd64083.c
index 410c915d51fa..6eb0e5b00c32 100644
--- a/drivers/media/video/upd64083.c
+++ b/drivers/media/video/upd64083.c
@@ -102,15 +102,16 @@ static u8 upd64083_read(struct v4l2_subdev *sd, u8 reg)
102 102
103/* ------------------------------------------------------------------------ */ 103/* ------------------------------------------------------------------------ */
104 104
105static int upd64083_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 105static int upd64083_s_routing(struct v4l2_subdev *sd,
106 u32 input, u32 output, u32 config)
106{ 107{
107 struct upd64083_state *state = to_state(sd); 108 struct upd64083_state *state = to_state(sd);
108 u8 r00, r02; 109 u8 r00, r02;
109 110
110 if (route->input > 7 || (route->input & 6) == 6) 111 if (input > 7 || (input & 6) == 6)
111 return -EINVAL; 112 return -EINVAL;
112 state->mode = (route->input & 3) << 6; 113 state->mode = (input & 3) << 6;
113 state->ext_y_adc = (route->input & UPD64083_EXT_Y_ADC) << 3; 114 state->ext_y_adc = (input & UPD64083_EXT_Y_ADC) << 3;
114 r00 = (state->regs[R00] & ~(3 << 6)) | state->mode; 115 r00 = (state->regs[R00] & ~(3 << 6)) | state->mode;
115 r02 = (state->regs[R02] & ~(1 << 5)) | state->ext_y_adc; 116 r02 = (state->regs[R02] & ~(1 << 5)) | state->ext_y_adc;
116 upd64083_write(sd, R00, r00); 117 upd64083_write(sd, R00, r00);
diff --git a/drivers/media/video/usbvision/usbvision-core.c b/drivers/media/video/usbvision/usbvision-core.c
index a0feb1c97736..8bc03b9e1315 100644
--- a/drivers/media/video/usbvision/usbvision-core.c
+++ b/drivers/media/video/usbvision/usbvision-core.c
@@ -2597,7 +2597,6 @@ int usbvision_muxsel(struct usb_usbvision *usbvision, int channel)
2597 /* inputs #1 and #2 are variable for SAA7111 and SAA7113 */ 2597 /* inputs #1 and #2 are variable for SAA7111 and SAA7113 */
2598 int mode[4]= {SAA7115_COMPOSITE0, 0, 0, SAA7115_COMPOSITE3}; 2598 int mode[4]= {SAA7115_COMPOSITE0, 0, 0, SAA7115_COMPOSITE3};
2599 int audio[]= {1, 0, 0, 0}; 2599 int audio[]= {1, 0, 0, 0};
2600 struct v4l2_routing route;
2601 //channel 0 is TV with audiochannel 1 (tuner mono) 2600 //channel 0 is TV with audiochannel 1 (tuner mono)
2602 //channel 1 is Composite with audio channel 0 (line in) 2601 //channel 1 is Composite with audio channel 0 (line in)
2603 //channel 2 is S-Video with audio channel 0 (line in) 2602 //channel 2 is S-Video with audio channel 0 (line in)
@@ -2630,9 +2629,7 @@ int usbvision_muxsel(struct usb_usbvision *usbvision, int channel)
2630 mode[2] = SAA7115_SVIDEO1; 2629 mode[2] = SAA7115_SVIDEO1;
2631 break; 2630 break;
2632 } 2631 }
2633 route.input = mode[channel]; 2632 call_all(usbvision, video, s_routing, mode[channel], 0, 0);
2634 route.output = 0;
2635 call_all(usbvision, video, s_routing, &route);
2636 usbvision_set_audio(usbvision, audio[channel]); 2633 usbvision_set_audio(usbvision, audio[channel]);
2637 return 0; 2634 return 0;
2638} 2635}
diff --git a/drivers/media/video/usbvision/usbvision-i2c.c b/drivers/media/video/usbvision/usbvision-i2c.c
index dd2f8f27c73b..1fe5befbbf85 100644
--- a/drivers/media/video/usbvision/usbvision-i2c.c
+++ b/drivers/media/video/usbvision/usbvision-i2c.c
@@ -28,7 +28,6 @@
28#include <linux/module.h> 28#include <linux/module.h>
29#include <linux/delay.h> 29#include <linux/delay.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <linux/version.h>
32#include <linux/utsname.h> 31#include <linux/utsname.h>
33#include <linux/init.h> 32#include <linux/init.h>
34#include <asm/uaccess.h> 33#include <asm/uaccess.h>
@@ -247,7 +246,8 @@ int usbvision_i2c_register(struct usb_usbvision *usbvision)
247 switch (usbvision_device_data[usbvision->DevModel].Codec) { 246 switch (usbvision_device_data[usbvision->DevModel].Codec) {
248 case CODEC_SAA7113: 247 case CODEC_SAA7113:
249 case CODEC_SAA7111: 248 case CODEC_SAA7111:
250 v4l2_i2c_new_probed_subdev(&usbvision->i2c_adap, "saa7115", 249 v4l2_i2c_new_probed_subdev(&usbvision->v4l2_dev,
250 &usbvision->i2c_adap, "saa7115",
251 "saa7115_auto", saa711x_addrs); 251 "saa7115_auto", saa711x_addrs);
252 break; 252 break;
253 } 253 }
@@ -256,13 +256,15 @@ int usbvision_i2c_register(struct usb_usbvision *usbvision)
256 enum v4l2_i2c_tuner_type type; 256 enum v4l2_i2c_tuner_type type;
257 struct tuner_setup tun_setup; 257 struct tuner_setup tun_setup;
258 258
259 sd = v4l2_i2c_new_probed_subdev(&usbvision->i2c_adap, "tuner", 259 sd = v4l2_i2c_new_probed_subdev(&usbvision->v4l2_dev,
260 &usbvision->i2c_adap, "tuner",
260 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 261 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
261 /* depending on whether we found a demod or not, select 262 /* depending on whether we found a demod or not, select
262 the tuner type. */ 263 the tuner type. */
263 type = sd ? ADDRS_TV_WITH_DEMOD : ADDRS_TV; 264 type = sd ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
264 265
265 sd = v4l2_i2c_new_probed_subdev(&usbvision->i2c_adap, "tuner", 266 sd = v4l2_i2c_new_probed_subdev(&usbvision->v4l2_dev,
267 &usbvision->i2c_adap, "tuner",
266 "tuner", v4l2_i2c_tuner_addrs(type)); 268 "tuner", v4l2_i2c_tuner_addrs(type));
267 269
268 if (usbvision->tuner_type != -1) { 270 if (usbvision->tuner_type != -1) {
diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c
index fa62a2fd7b22..d7056a5b7f9b 100644
--- a/drivers/media/video/usbvision/usbvision-video.c
+++ b/drivers/media/video/usbvision/usbvision-video.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * USB USBVISION Video device driver 0.9.9 2 * USB USBVISION Video device driver 0.9.10
3 * 3 *
4 * 4 *
5 * 5 *
@@ -79,7 +79,7 @@
79#define DRIVER_LICENSE "GPL" 79#define DRIVER_LICENSE "GPL"
80#define USBVISION_DRIVER_VERSION_MAJOR 0 80#define USBVISION_DRIVER_VERSION_MAJOR 0
81#define USBVISION_DRIVER_VERSION_MINOR 9 81#define USBVISION_DRIVER_VERSION_MINOR 9
82#define USBVISION_DRIVER_VERSION_PATCHLEVEL 9 82#define USBVISION_DRIVER_VERSION_PATCHLEVEL 10
83#define USBVISION_DRIVER_VERSION KERNEL_VERSION(USBVISION_DRIVER_VERSION_MAJOR,\ 83#define USBVISION_DRIVER_VERSION KERNEL_VERSION(USBVISION_DRIVER_VERSION_MAJOR,\
84USBVISION_DRIVER_VERSION_MINOR,\ 84USBVISION_DRIVER_VERSION_MINOR,\
85USBVISION_DRIVER_VERSION_PATCHLEVEL) 85USBVISION_DRIVER_VERSION_PATCHLEVEL)
@@ -621,7 +621,7 @@ static int vidioc_s_std (struct file *file, void *priv, v4l2_std_id *id)
621 usbvision->tvnormId=*id; 621 usbvision->tvnormId=*id;
622 622
623 mutex_lock(&usbvision->lock); 623 mutex_lock(&usbvision->lock);
624 call_all(usbvision, tuner, s_std, usbvision->tvnormId); 624 call_all(usbvision, core, s_std, usbvision->tvnormId);
625 mutex_unlock(&usbvision->lock); 625 mutex_unlock(&usbvision->lock);
626 /* propagate the change to the decoder */ 626 /* propagate the change to the decoder */
627 usbvision_muxsel(usbvision, usbvision->ctl_input); 627 usbvision_muxsel(usbvision, usbvision->ctl_input);
@@ -1522,7 +1522,8 @@ static int __devinit usbvision_register_video(struct usb_usbvision *usbvision)
1522 * Returns NULL on error, a pointer to usb_usbvision else. 1522 * Returns NULL on error, a pointer to usb_usbvision else.
1523 * 1523 *
1524 */ 1524 */
1525static struct usb_usbvision *usbvision_alloc(struct usb_device *dev) 1525static struct usb_usbvision *usbvision_alloc(struct usb_device *dev,
1526 struct usb_interface *intf)
1526{ 1527{
1527 struct usb_usbvision *usbvision; 1528 struct usb_usbvision *usbvision;
1528 1529
@@ -1531,7 +1532,7 @@ static struct usb_usbvision *usbvision_alloc(struct usb_device *dev)
1531 return NULL; 1532 return NULL;
1532 1533
1533 usbvision->dev = dev; 1534 usbvision->dev = dev;
1534 if (v4l2_device_register(&dev->dev, &usbvision->v4l2_dev)) 1535 if (v4l2_device_register(&intf->dev, &usbvision->v4l2_dev))
1535 goto err_free; 1536 goto err_free;
1536 1537
1537 mutex_init(&usbvision->lock); /* available */ 1538 mutex_init(&usbvision->lock); /* available */
@@ -1669,7 +1670,8 @@ static int __devinit usbvision_probe(struct usb_interface *intf,
1669 return -ENODEV; 1670 return -ENODEV;
1670 } 1671 }
1671 1672
1672 if ((usbvision = usbvision_alloc(dev)) == NULL) { 1673 usbvision = usbvision_alloc(dev, intf);
1674 if (usbvision == NULL) {
1673 dev_err(&intf->dev, "%s: couldn't allocate USBVision struct\n", __func__); 1675 dev_err(&intf->dev, "%s: couldn't allocate USBVision struct\n", __func__);
1674 return -ENOMEM; 1676 return -ENOMEM;
1675 } 1677 }
diff --git a/drivers/media/video/uvc/Kconfig b/drivers/media/video/uvc/Kconfig
index c2d9760de832..2956a7637219 100644
--- a/drivers/media/video/uvc/Kconfig
+++ b/drivers/media/video/uvc/Kconfig
@@ -9,7 +9,7 @@ config USB_VIDEO_CLASS
9config USB_VIDEO_CLASS_INPUT_EVDEV 9config USB_VIDEO_CLASS_INPUT_EVDEV
10 bool "UVC input events device support" 10 bool "UVC input events device support"
11 default y 11 default y
12 depends on USB_VIDEO_CLASS && INPUT 12 depends on USB_VIDEO_CLASS=INPUT || INPUT=y
13 ---help--- 13 ---help---
14 This option makes USB Video Class devices register an input device 14 This option makes USB Video Class devices register an input device
15 to report button events. 15 to report button events.
diff --git a/drivers/media/video/v4l1-compat.c b/drivers/media/video/v4l1-compat.c
index b617bf05e2d7..02f2a6d18b45 100644
--- a/drivers/media/video/v4l1-compat.c
+++ b/drivers/media/video/v4l1-compat.c
@@ -575,6 +575,8 @@ static noinline long v4l1_compat_get_input_info(
575 chan->norm = VIDEO_MODE_NTSC; 575 chan->norm = VIDEO_MODE_NTSC;
576 if (sid & V4L2_STD_SECAM) 576 if (sid & V4L2_STD_SECAM)
577 chan->norm = VIDEO_MODE_SECAM; 577 chan->norm = VIDEO_MODE_SECAM;
578 if (sid == V4L2_STD_ALL)
579 chan->norm = VIDEO_MODE_AUTO;
578 } 580 }
579done: 581done:
580 return err; 582 return err;
@@ -601,6 +603,9 @@ static noinline long v4l1_compat_set_input(
601 case VIDEO_MODE_SECAM: 603 case VIDEO_MODE_SECAM:
602 sid = V4L2_STD_SECAM; 604 sid = V4L2_STD_SECAM;
603 break; 605 break;
606 case VIDEO_MODE_AUTO:
607 sid = V4L2_STD_ALL;
608 break;
604 } 609 }
605 if (0 != sid) { 610 if (0 != sid) {
606 err = drv(file, VIDIOC_S_STD, &sid); 611 err = drv(file, VIDIOC_S_STD, &sid);
@@ -804,9 +809,9 @@ static noinline long v4l1_compat_select_tuner(
804 809
805 t.index = tun->tuner; 810 t.index = tun->tuner;
806 811
807 err = drv(file, VIDIOC_S_INPUT, &t); 812 err = drv(file, VIDIOC_S_TUNER, &t);
808 if (err < 0) 813 if (err < 0)
809 dprintk("VIDIOCSTUNER / VIDIOC_S_INPUT: %ld\n", err); 814 dprintk("VIDIOCSTUNER / VIDIOC_S_TUNER: %ld\n", err);
810 return err; 815 return err;
811} 816}
812 817
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
index 1da8cb836cb6..f576ef66b807 100644
--- a/drivers/media/video/v4l2-common.c
+++ b/drivers/media/video/v4l2-common.c
@@ -739,33 +739,8 @@ EXPORT_SYMBOL(v4l2_chip_ident_i2c_client);
739 739
740/* ----------------------------------------------------------------- */ 740/* ----------------------------------------------------------------- */
741 741
742/* Helper function for I2C legacy drivers */ 742/* I2C Helper functions */
743 743
744int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver,
745 const char *name,
746 int (*probe)(struct i2c_client *, const struct i2c_device_id *))
747{
748 struct i2c_client *client;
749 int err;
750
751 client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
752 if (!client)
753 return -ENOMEM;
754
755 client->addr = address;
756 client->adapter = adapter;
757 client->driver = driver;
758 strlcpy(client->name, name, sizeof(client->name));
759
760 err = probe(client, NULL);
761 if (err == 0) {
762 i2c_attach_client(client);
763 } else {
764 kfree(client);
765 }
766 return err != -ENOMEM ? 0 : err;
767}
768EXPORT_SYMBOL(v4l2_i2c_attach);
769 744
770void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, 745void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
771 const struct v4l2_subdev_ops *ops) 746 const struct v4l2_subdev_ops *ops)
@@ -785,18 +760,16 @@ EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
785 760
786 761
787 762
788/* Load an i2c sub-device. It assumes that i2c_get_adapdata(adapter) 763/* Load an i2c sub-device. */
789 returns the v4l2_device and that i2c_get_clientdata(client) 764struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
790 returns the v4l2_subdev. */ 765 struct i2c_adapter *adapter,
791struct v4l2_subdev *v4l2_i2c_new_subdev(struct i2c_adapter *adapter,
792 const char *module_name, const char *client_type, u8 addr) 766 const char *module_name, const char *client_type, u8 addr)
793{ 767{
794 struct v4l2_device *dev = i2c_get_adapdata(adapter);
795 struct v4l2_subdev *sd = NULL; 768 struct v4l2_subdev *sd = NULL;
796 struct i2c_client *client; 769 struct i2c_client *client;
797 struct i2c_board_info info; 770 struct i2c_board_info info;
798 771
799 BUG_ON(!dev); 772 BUG_ON(!v4l2_dev);
800 773
801 if (module_name) 774 if (module_name)
802 request_module(module_name); 775 request_module(module_name);
@@ -823,7 +796,7 @@ struct v4l2_subdev *v4l2_i2c_new_subdev(struct i2c_adapter *adapter,
823 796
824 /* Register with the v4l2_device which increases the module's 797 /* Register with the v4l2_device which increases the module's
825 use count as well. */ 798 use count as well. */
826 if (v4l2_device_register_subdev(dev, sd)) 799 if (v4l2_device_register_subdev(v4l2_dev, sd))
827 sd = NULL; 800 sd = NULL;
828 /* Decrease the module use count to match the first try_module_get. */ 801 /* Decrease the module use count to match the first try_module_get. */
829 module_put(client->driver->driver.owner); 802 module_put(client->driver->driver.owner);
@@ -837,19 +810,17 @@ error:
837} 810}
838EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev); 811EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
839 812
840/* Probe and load an i2c sub-device. It assumes that i2c_get_adapdata(adapter) 813/* Probe and load an i2c sub-device. */
841 returns the v4l2_device and that i2c_get_clientdata(client) 814struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device *v4l2_dev,
842 returns the v4l2_subdev. */ 815 struct i2c_adapter *adapter,
843struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter,
844 const char *module_name, const char *client_type, 816 const char *module_name, const char *client_type,
845 const unsigned short *addrs) 817 const unsigned short *addrs)
846{ 818{
847 struct v4l2_device *dev = i2c_get_adapdata(adapter);
848 struct v4l2_subdev *sd = NULL; 819 struct v4l2_subdev *sd = NULL;
849 struct i2c_client *client = NULL; 820 struct i2c_client *client = NULL;
850 struct i2c_board_info info; 821 struct i2c_board_info info;
851 822
852 BUG_ON(!dev); 823 BUG_ON(!v4l2_dev);
853 824
854 if (module_name) 825 if (module_name)
855 request_module(module_name); 826 request_module(module_name);
@@ -875,7 +846,7 @@ struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter,
875 846
876 /* Register with the v4l2_device which increases the module's 847 /* Register with the v4l2_device which increases the module's
877 use count as well. */ 848 use count as well. */
878 if (v4l2_device_register_subdev(dev, sd)) 849 if (v4l2_device_register_subdev(v4l2_dev, sd))
879 sd = NULL; 850 sd = NULL;
880 /* Decrease the module use count to match the first try_module_get. */ 851 /* Decrease the module use count to match the first try_module_get. */
881 module_put(client->driver->driver.owner); 852 module_put(client->driver->driver.owner);
@@ -889,6 +860,17 @@ error:
889} 860}
890EXPORT_SYMBOL_GPL(v4l2_i2c_new_probed_subdev); 861EXPORT_SYMBOL_GPL(v4l2_i2c_new_probed_subdev);
891 862
863struct v4l2_subdev *v4l2_i2c_new_probed_subdev_addr(struct v4l2_device *v4l2_dev,
864 struct i2c_adapter *adapter,
865 const char *module_name, const char *client_type, u8 addr)
866{
867 unsigned short addrs[2] = { addr, I2C_CLIENT_END };
868
869 return v4l2_i2c_new_probed_subdev(v4l2_dev, adapter,
870 module_name, client_type, addrs);
871}
872EXPORT_SYMBOL_GPL(v4l2_i2c_new_probed_subdev_addr);
873
892/* Return i2c client address of v4l2_subdev. */ 874/* Return i2c client address of v4l2_subdev. */
893unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd) 875unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd)
894{ 876{
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
index 91228b3df07d..31eac66411d7 100644
--- a/drivers/media/video/v4l2-dev.c
+++ b/drivers/media/video/v4l2-dev.c
@@ -229,7 +229,7 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
229static int v4l2_open(struct inode *inode, struct file *filp) 229static int v4l2_open(struct inode *inode, struct file *filp)
230{ 230{
231 struct video_device *vdev; 231 struct video_device *vdev;
232 int ret; 232 int ret = 0;
233 233
234 /* Check if the video device is available */ 234 /* Check if the video device is available */
235 mutex_lock(&videodev_lock); 235 mutex_lock(&videodev_lock);
@@ -243,7 +243,9 @@ static int v4l2_open(struct inode *inode, struct file *filp)
243 /* and increase the device refcount */ 243 /* and increase the device refcount */
244 video_get(vdev); 244 video_get(vdev);
245 mutex_unlock(&videodev_lock); 245 mutex_unlock(&videodev_lock);
246 ret = vdev->fops->open(filp); 246 if (vdev->fops->open)
247 ret = vdev->fops->open(filp);
248
247 /* decrease the refcount in case of an error */ 249 /* decrease the refcount in case of an error */
248 if (ret) 250 if (ret)
249 video_put(vdev); 251 video_put(vdev);
@@ -254,7 +256,10 @@ static int v4l2_open(struct inode *inode, struct file *filp)
254static int v4l2_release(struct inode *inode, struct file *filp) 256static int v4l2_release(struct inode *inode, struct file *filp)
255{ 257{
256 struct video_device *vdev = video_devdata(filp); 258 struct video_device *vdev = video_devdata(filp);
257 int ret = vdev->fops->release(filp); 259 int ret = 0;
260
261 if (vdev->fops->release)
262 vdev->fops->release(filp);
258 263
259 /* decrease the refcount unconditionally since the release() 264 /* decrease the refcount unconditionally since the release()
260 return value is ignored. */ 265 return value is ignored. */
diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
index f41c6f506f42..88f10d6cbc92 100644
--- a/drivers/media/video/v4l2-ioctl.c
+++ b/drivers/media/video/v4l2-ioctl.c
@@ -275,32 +275,6 @@ static const char *v4l2_ioctls[] = {
275}; 275};
276#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) 276#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
277 277
278static const char *v4l2_int_ioctls[] = {
279 [_IOC_NR(AUDC_SET_RADIO)] = "AUDC_SET_RADIO",
280
281 [_IOC_NR(TUNER_SET_TYPE_ADDR)] = "TUNER_SET_TYPE_ADDR",
282 [_IOC_NR(TUNER_SET_STANDBY)] = "TUNER_SET_STANDBY",
283 [_IOC_NR(TUNER_SET_CONFIG)] = "TUNER_SET_CONFIG",
284
285 [_IOC_NR(VIDIOC_INT_S_TUNER_MODE)] = "VIDIOC_INT_S_TUNER_MODE",
286 [_IOC_NR(VIDIOC_INT_RESET)] = "VIDIOC_INT_RESET",
287 [_IOC_NR(VIDIOC_INT_AUDIO_CLOCK_FREQ)] = "VIDIOC_INT_AUDIO_CLOCK_FREQ",
288 [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE",
289 [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA",
290 [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA",
291 [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ",
292 [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY",
293 [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING",
294 [_IOC_NR(VIDIOC_INT_G_AUDIO_ROUTING)] = "VIDIOC_INT_G_AUDIO_ROUTING",
295 [_IOC_NR(VIDIOC_INT_S_VIDEO_ROUTING)] = "VIDIOC_INT_S_VIDEO_ROUTING",
296 [_IOC_NR(VIDIOC_INT_G_VIDEO_ROUTING)] = "VIDIOC_INT_G_VIDEO_ROUTING",
297 [_IOC_NR(VIDIOC_INT_S_CRYSTAL_FREQ)] = "VIDIOC_INT_S_CRYSTAL_FREQ",
298 [_IOC_NR(VIDIOC_INT_INIT)] = "VIDIOC_INT_INIT",
299 [_IOC_NR(VIDIOC_INT_G_STD_OUTPUT)] = "VIDIOC_INT_G_STD_OUTPUT",
300 [_IOC_NR(VIDIOC_INT_S_STD_OUTPUT)] = "VIDIOC_INT_S_STD_OUTPUT",
301};
302#define V4L2_INT_IOCTLS ARRAY_SIZE(v4l2_int_ioctls)
303
304/* Common ioctl debug function. This function can be used by 278/* Common ioctl debug function. This function can be used by
305 external ioctl messages as well as internal V4L ioctl */ 279 external ioctl messages as well as internal V4L ioctl */
306void v4l_printk_ioctl(unsigned int cmd) 280void v4l_printk_ioctl(unsigned int cmd)
@@ -309,12 +283,8 @@ void v4l_printk_ioctl(unsigned int cmd)
309 283
310 switch (_IOC_TYPE(cmd)) { 284 switch (_IOC_TYPE(cmd)) {
311 case 'd': 285 case 'd':
312 if (_IOC_NR(cmd) >= V4L2_INT_IOCTLS) { 286 type = "v4l2_int";
313 type = "v4l2_int"; 287 break;
314 break;
315 }
316 printk("%s", v4l2_int_ioctls[_IOC_NR(cmd)]);
317 return;
318#ifdef CONFIG_VIDEO_V4L1_COMPAT 288#ifdef CONFIG_VIDEO_V4L1_COMPAT
319 case 'v': 289 case 'v':
320 if (_IOC_NR(cmd) >= V4L1_IOCTLS) { 290 if (_IOC_NR(cmd) >= V4L1_IOCTLS) {
diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
deleted file mode 100644
index dc881671d536..000000000000
--- a/drivers/media/video/v4l2-subdev.c
+++ /dev/null
@@ -1,128 +0,0 @@
1/*
2 V4L2 sub-device support.
3
4 Copyright (C) 2008 Hans Verkuil <hverkuil@xs4all.nl>
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#include <linux/types.h>
22#include <linux/ioctl.h>
23#include <linux/i2c.h>
24#include <linux/videodev2.h>
25#include <media/v4l2-subdev.h>
26
27int v4l2_subdev_command(struct v4l2_subdev *sd, unsigned cmd, void *arg)
28{
29 switch (cmd) {
30 case VIDIOC_QUERYCTRL:
31 return v4l2_subdev_call(sd, core, queryctrl, arg);
32 case VIDIOC_G_CTRL:
33 return v4l2_subdev_call(sd, core, g_ctrl, arg);
34 case VIDIOC_S_CTRL:
35 return v4l2_subdev_call(sd, core, s_ctrl, arg);
36 case VIDIOC_G_EXT_CTRLS:
37 return v4l2_subdev_call(sd, core, g_ext_ctrls, arg);
38 case VIDIOC_S_EXT_CTRLS:
39 return v4l2_subdev_call(sd, core, s_ext_ctrls, arg);
40 case VIDIOC_TRY_EXT_CTRLS:
41 return v4l2_subdev_call(sd, core, try_ext_ctrls, arg);
42 case VIDIOC_QUERYMENU:
43 return v4l2_subdev_call(sd, core, querymenu, arg);
44 case VIDIOC_LOG_STATUS:
45 return v4l2_subdev_call(sd, core, log_status);
46 case VIDIOC_DBG_G_CHIP_IDENT:
47 return v4l2_subdev_call(sd, core, g_chip_ident, arg);
48 case VIDIOC_INT_S_STANDBY:
49 return v4l2_subdev_call(sd, core, s_standby, arg ? (*(u32 *)arg) : 0);
50 case VIDIOC_INT_RESET:
51 return v4l2_subdev_call(sd, core, reset, arg ? (*(u32 *)arg) : 0);
52 case VIDIOC_INT_S_GPIO:
53 return v4l2_subdev_call(sd, core, s_gpio, arg ? (*(u32 *)arg) : 0);
54 case VIDIOC_INT_INIT:
55 return v4l2_subdev_call(sd, core, init, arg ? (*(u32 *)arg) : 0);
56#ifdef CONFIG_VIDEO_ADV_DEBUG
57 case VIDIOC_DBG_G_REGISTER:
58 return v4l2_subdev_call(sd, core, g_register, arg);
59 case VIDIOC_DBG_S_REGISTER:
60 return v4l2_subdev_call(sd, core, s_register, arg);
61#endif
62
63 case VIDIOC_INT_S_TUNER_MODE:
64 return v4l2_subdev_call(sd, tuner, s_mode, *(enum v4l2_tuner_type *)arg);
65 case AUDC_SET_RADIO:
66 return v4l2_subdev_call(sd, tuner, s_radio);
67 case VIDIOC_S_TUNER:
68 return v4l2_subdev_call(sd, tuner, s_tuner, arg);
69 case VIDIOC_G_TUNER:
70 return v4l2_subdev_call(sd, tuner, g_tuner, arg);
71 case VIDIOC_S_STD:
72 return v4l2_subdev_call(sd, tuner, s_std, *(v4l2_std_id *)arg);
73 case VIDIOC_S_FREQUENCY:
74 return v4l2_subdev_call(sd, tuner, s_frequency, arg);
75 case VIDIOC_G_FREQUENCY:
76 return v4l2_subdev_call(sd, tuner, g_frequency, arg);
77 case TUNER_SET_TYPE_ADDR:
78 return v4l2_subdev_call(sd, tuner, s_type_addr, arg);
79 case TUNER_SET_CONFIG:
80 return v4l2_subdev_call(sd, tuner, s_config, arg);
81
82 case VIDIOC_INT_AUDIO_CLOCK_FREQ:
83 return v4l2_subdev_call(sd, audio, s_clock_freq, *(u32 *)arg);
84 case VIDIOC_INT_S_AUDIO_ROUTING:
85 return v4l2_subdev_call(sd, audio, s_routing, arg);
86 case VIDIOC_INT_I2S_CLOCK_FREQ:
87 return v4l2_subdev_call(sd, audio, s_i2s_clock_freq, *(u32 *)arg);
88
89 case VIDIOC_INT_S_VIDEO_ROUTING:
90 return v4l2_subdev_call(sd, video, s_routing, arg);
91 case VIDIOC_INT_S_CRYSTAL_FREQ:
92 return v4l2_subdev_call(sd, video, s_crystal_freq, arg);
93 case VIDIOC_INT_DECODE_VBI_LINE:
94 return v4l2_subdev_call(sd, video, decode_vbi_line, arg);
95 case VIDIOC_INT_S_VBI_DATA:
96 return v4l2_subdev_call(sd, video, s_vbi_data, arg);
97 case VIDIOC_INT_G_VBI_DATA:
98 return v4l2_subdev_call(sd, video, g_vbi_data, arg);
99 case VIDIOC_G_SLICED_VBI_CAP:
100 return v4l2_subdev_call(sd, video, g_sliced_vbi_cap, arg);
101 case VIDIOC_ENUM_FMT:
102 return v4l2_subdev_call(sd, video, enum_fmt, arg);
103 case VIDIOC_TRY_FMT:
104 return v4l2_subdev_call(sd, video, try_fmt, arg);
105 case VIDIOC_S_FMT:
106 return v4l2_subdev_call(sd, video, s_fmt, arg);
107 case VIDIOC_G_FMT:
108 return v4l2_subdev_call(sd, video, g_fmt, arg);
109 case VIDIOC_INT_S_STD_OUTPUT:
110 return v4l2_subdev_call(sd, video, s_std_output, *(v4l2_std_id *)arg);
111 case VIDIOC_QUERYSTD:
112 return v4l2_subdev_call(sd, video, querystd, arg);
113 case VIDIOC_INT_G_INPUT_STATUS:
114 return v4l2_subdev_call(sd, video, g_input_status, arg);
115 case VIDIOC_STREAMON:
116 return v4l2_subdev_call(sd, video, s_stream, 1);
117 case VIDIOC_STREAMOFF:
118 return v4l2_subdev_call(sd, video, s_stream, 0);
119 case VIDIOC_S_PARM:
120 return v4l2_subdev_call(sd, video, s_parm, arg);
121 case VIDIOC_G_PARM:
122 return v4l2_subdev_call(sd, video, g_parm, arg);
123
124 default:
125 return v4l2_subdev_call(sd, core, ioctl, cmd, arg);
126 }
127}
128EXPORT_SYMBOL_GPL(v4l2_subdev_command);
diff --git a/drivers/media/video/vino.c b/drivers/media/video/vino.c
index 8da4dd1e0e94..43e0998adb53 100644
--- a/drivers/media/video/vino.c
+++ b/drivers/media/video/vino.c
@@ -60,8 +60,8 @@
60// #define VINO_DEBUG 60// #define VINO_DEBUG
61// #define VINO_DEBUG_INT 61// #define VINO_DEBUG_INT
62 62
63#define VINO_MODULE_VERSION "0.0.5" 63#define VINO_MODULE_VERSION "0.0.6"
64#define VINO_VERSION_CODE KERNEL_VERSION(0, 0, 5) 64#define VINO_VERSION_CODE KERNEL_VERSION(0, 0, 6)
65 65
66MODULE_DESCRIPTION("SGI VINO Video4Linux2 driver"); 66MODULE_DESCRIPTION("SGI VINO Video4Linux2 driver");
67MODULE_VERSION(VINO_MODULE_VERSION); 67MODULE_VERSION(VINO_MODULE_VERSION);
@@ -2565,12 +2565,11 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
2565 int input; 2565 int input;
2566 int data_norm; 2566 int data_norm;
2567 v4l2_std_id norm; 2567 v4l2_std_id norm;
2568 struct v4l2_routing route = { 0, 0 };
2569 2568
2570 input = VINO_INPUT_COMPOSITE; 2569 input = VINO_INPUT_COMPOSITE;
2571 2570
2572 route.input = vino_get_saa7191_input(input); 2571 ret = decoder_call(video, s_routing,
2573 ret = decoder_call(video, s_routing, &route); 2572 vino_get_saa7191_input(input), 0, 0);
2574 if (ret) { 2573 if (ret) {
2575 ret = -EINVAL; 2574 ret = -EINVAL;
2576 goto out; 2575 goto out;
@@ -2589,7 +2588,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
2589 } 2588 }
2590 if (data_norm == 3) 2589 if (data_norm == 3)
2591 data_norm = VINO_DATA_NORM_PAL; 2590 data_norm = VINO_DATA_NORM_PAL;
2592 ret = decoder_call(tuner, s_std, norm); 2591 ret = decoder_call(core, s_std, norm);
2593 } 2592 }
2594 2593
2595 spin_lock_irqsave(&vino_drvdata->input_lock, flags); 2594 spin_lock_irqsave(&vino_drvdata->input_lock, flags);
@@ -2656,10 +2655,9 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input)
2656 if (vino_drvdata->decoder_owner == vcs->channel) { 2655 if (vino_drvdata->decoder_owner == vcs->channel) {
2657 int data_norm; 2656 int data_norm;
2658 v4l2_std_id norm; 2657 v4l2_std_id norm;
2659 struct v4l2_routing route = { 0, 0 };
2660 2658
2661 route.input = vino_get_saa7191_input(input); 2659 ret = decoder_call(video, s_routing,
2662 ret = decoder_call(video, s_routing, &route); 2660 vino_get_saa7191_input(input), 0, 0);
2663 if (ret) { 2661 if (ret) {
2664 vino_drvdata->decoder_owner = VINO_NO_CHANNEL; 2662 vino_drvdata->decoder_owner = VINO_NO_CHANNEL;
2665 ret = -EINVAL; 2663 ret = -EINVAL;
@@ -2679,7 +2677,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input)
2679 } 2677 }
2680 if (data_norm == 3) 2678 if (data_norm == 3)
2681 data_norm = VINO_DATA_NORM_PAL; 2679 data_norm = VINO_DATA_NORM_PAL;
2682 ret = decoder_call(tuner, s_std, norm); 2680 ret = decoder_call(core, s_std, norm);
2683 } 2681 }
2684 2682
2685 spin_lock_irqsave(&vino_drvdata->input_lock, flags); 2683 spin_lock_irqsave(&vino_drvdata->input_lock, flags);
@@ -2813,7 +2811,7 @@ static int vino_set_data_norm(struct vino_channel_settings *vcs,
2813 * as it may take a while... */ 2811 * as it may take a while... */
2814 2812
2815 norm = vino_data_norms[data_norm].std; 2813 norm = vino_data_norms[data_norm].std;
2816 err = decoder_call(tuner, s_std, norm); 2814 err = decoder_call(core, s_std, norm);
2817 2815
2818 spin_lock_irqsave(&vino_drvdata->input_lock, *flags); 2816 spin_lock_irqsave(&vino_drvdata->input_lock, *flags);
2819 2817
@@ -4266,7 +4264,6 @@ static int vino_init_channel_settings(struct vino_channel_settings *vcs,
4266 4264
4267static int __init vino_module_init(void) 4265static int __init vino_module_init(void)
4268{ 4266{
4269 unsigned short addr[] = { 0, I2C_CLIENT_END };
4270 int ret; 4267 int ret;
4271 4268
4272 printk(KERN_INFO "SGI VINO driver version %s\n", 4269 printk(KERN_INFO "SGI VINO driver version %s\n",
@@ -4336,12 +4333,12 @@ static int __init vino_module_init(void)
4336 } 4333 }
4337 vino_init_stage++; 4334 vino_init_stage++;
4338 4335
4339 addr[0] = 0x45; 4336 vino_drvdata->decoder =
4340 vino_drvdata->decoder = v4l2_i2c_new_probed_subdev(&vino_i2c_adapter, 4337 v4l2_i2c_new_probed_subdev_addr(&vino_drvdata->v4l2_dev,
4341 "saa7191", "saa7191", addr); 4338 &vino_i2c_adapter, "saa7191", "saa7191", 0x45);
4342 addr[0] = 0x2b; 4339 vino_drvdata->camera =
4343 vino_drvdata->camera = v4l2_i2c_new_probed_subdev(&vino_i2c_adapter, 4340 v4l2_i2c_new_probed_subdev_addr(&vino_drvdata->v4l2_dev,
4344 "indycam", "indycam", addr); 4341 &vino_i2c_adapter, "indycam", "indycam", 0x2b);
4345 4342
4346 dprintk("init complete!\n"); 4343 dprintk("init complete!\n");
4347 4344
diff --git a/drivers/media/video/vp27smpx.c b/drivers/media/video/vp27smpx.c
index 42e23a4fa607..38e53b303cc3 100644
--- a/drivers/media/video/vp27smpx.c
+++ b/drivers/media/video/vp27smpx.c
@@ -134,11 +134,11 @@ static int vp27smpx_log_status(struct v4l2_subdev *sd)
134static const struct v4l2_subdev_core_ops vp27smpx_core_ops = { 134static const struct v4l2_subdev_core_ops vp27smpx_core_ops = {
135 .log_status = vp27smpx_log_status, 135 .log_status = vp27smpx_log_status,
136 .g_chip_ident = vp27smpx_g_chip_ident, 136 .g_chip_ident = vp27smpx_g_chip_ident,
137 .s_std = vp27smpx_s_std,
137}; 138};
138 139
139static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = { 140static const struct v4l2_subdev_tuner_ops vp27smpx_tuner_ops = {
140 .s_radio = vp27smpx_s_radio, 141 .s_radio = vp27smpx_s_radio,
141 .s_std = vp27smpx_s_std,
142 .s_tuner = vp27smpx_s_tuner, 142 .s_tuner = vp27smpx_s_tuner,
143 .g_tuner = vp27smpx_g_tuner, 143 .g_tuner = vp27smpx_g_tuner,
144}; 144};
diff --git a/drivers/media/video/vpx3220.c b/drivers/media/video/vpx3220.c
index 2fa7e8bb5746..97e0ce28ff18 100644
--- a/drivers/media/video/vpx3220.c
+++ b/drivers/media/video/vpx3220.c
@@ -376,33 +376,34 @@ static int vpx3220_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
376 return 0; 376 return 0;
377} 377}
378 378
379static int vpx3220_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 379static int vpx3220_s_routing(struct v4l2_subdev *sd,
380 u32 input, u32 output, u32 config)
380{ 381{
381 int data; 382 int data;
382 383
383 /* RJ: route->input = 0: ST8 (PCTV) input 384 /* RJ: input = 0: ST8 (PCTV) input
384 route->input = 1: COMPOSITE input 385 input = 1: COMPOSITE input
385 route->input = 2: SVHS input */ 386 input = 2: SVHS input */
386 387
387 const int input[3][2] = { 388 const int input_vals[3][2] = {
388 {0x0c, 0}, 389 {0x0c, 0},
389 {0x0d, 0}, 390 {0x0d, 0},
390 {0x0e, 1} 391 {0x0e, 1}
391 }; 392 };
392 393
393 if (route->input < 0 || route->input > 2) 394 if (input < 0 || input > 2)
394 return -EINVAL; 395 return -EINVAL;
395 396
396 v4l2_dbg(1, debug, sd, "input switched to %s\n", inputs[route->input]); 397 v4l2_dbg(1, debug, sd, "input switched to %s\n", inputs[input]);
397 398
398 vpx3220_write(sd, 0x33, input[route->input][0]); 399 vpx3220_write(sd, 0x33, input_vals[input][0]);
399 400
400 data = vpx3220_fp_read(sd, 0xf2) & ~(0x0020); 401 data = vpx3220_fp_read(sd, 0xf2) & ~(0x0020);
401 if (data < 0) 402 if (data < 0)
402 return data; 403 return data;
403 /* 0x0010 is required to latch the setting */ 404 /* 0x0010 is required to latch the setting */
404 vpx3220_fp_write(sd, 0xf2, 405 vpx3220_fp_write(sd, 0xf2,
405 data | (input[route->input][1] << 5) | 0x0010); 406 data | (input_vals[input][1] << 5) | 0x0010);
406 407
407 udelay(10); 408 udelay(10);
408 return 0; 409 return 0;
@@ -516,9 +517,6 @@ static const struct v4l2_subdev_core_ops vpx3220_core_ops = {
516 .g_ctrl = vpx3220_g_ctrl, 517 .g_ctrl = vpx3220_g_ctrl,
517 .s_ctrl = vpx3220_s_ctrl, 518 .s_ctrl = vpx3220_s_ctrl,
518 .queryctrl = vpx3220_queryctrl, 519 .queryctrl = vpx3220_queryctrl,
519};
520
521static const struct v4l2_subdev_tuner_ops vpx3220_tuner_ops = {
522 .s_std = vpx3220_s_std, 520 .s_std = vpx3220_s_std,
523}; 521};
524 522
@@ -531,7 +529,6 @@ static const struct v4l2_subdev_video_ops vpx3220_video_ops = {
531 529
532static const struct v4l2_subdev_ops vpx3220_ops = { 530static const struct v4l2_subdev_ops vpx3220_ops = {
533 .core = &vpx3220_core_ops, 531 .core = &vpx3220_core_ops,
534 .tuner = &vpx3220_tuner_ops,
535 .video = &vpx3220_video_ops, 532 .video = &vpx3220_video_ops,
536}; 533};
537 534
diff --git a/drivers/media/video/w9968cf.c b/drivers/media/video/w9968cf.c
index 3b08bc4af909..f59b2bd07e89 100644
--- a/drivers/media/video/w9968cf.c
+++ b/drivers/media/video/w9968cf.c
@@ -3440,7 +3440,7 @@ w9968cf_usb_probe(struct usb_interface* intf, const struct usb_device_id* id)
3440 if (!cam) 3440 if (!cam)
3441 return -ENOMEM; 3441 return -ENOMEM;
3442 3442
3443 err = v4l2_device_register(&udev->dev, &cam->v4l2_dev); 3443 err = v4l2_device_register(&intf->dev, &cam->v4l2_dev);
3444 if (err) 3444 if (err)
3445 goto fail0; 3445 goto fail0;
3446 3446
@@ -3523,7 +3523,8 @@ w9968cf_usb_probe(struct usb_interface* intf, const struct usb_device_id* id)
3523 w9968cf_turn_on_led(cam); 3523 w9968cf_turn_on_led(cam);
3524 3524
3525 w9968cf_i2c_init(cam); 3525 w9968cf_i2c_init(cam);
3526 cam->sensor_sd = v4l2_i2c_new_probed_subdev(&cam->i2c_adapter, 3526 cam->sensor_sd = v4l2_i2c_new_probed_subdev(&cam->v4l2_dev,
3527 &cam->i2c_adapter,
3527 "ovcamchip", "ovcamchip", addrs); 3528 "ovcamchip", "ovcamchip", addrs);
3528 3529
3529 usb_set_intfdata(intf, cam); 3530 usb_set_intfdata(intf, cam);
diff --git a/drivers/media/video/w9968cf.h b/drivers/media/video/w9968cf.h
index fdfc6a4e1c8f..73ad864b4842 100644
--- a/drivers/media/video/w9968cf.h
+++ b/drivers/media/video/w9968cf.h
@@ -134,7 +134,7 @@ static const struct w9968cf_format w9968cf_formatlist[] = {
134 134
135#define W9968CF_MODULE_NAME "V4L driver for W996[87]CF JPEG USB " \ 135#define W9968CF_MODULE_NAME "V4L driver for W996[87]CF JPEG USB " \
136 "Dual Mode Camera Chip" 136 "Dual Mode Camera Chip"
137#define W9968CF_MODULE_VERSION "1:1.33-basic" 137#define W9968CF_MODULE_VERSION "1:1.34-basic"
138#define W9968CF_MODULE_AUTHOR "(C) 2002-2004 Luca Risolia" 138#define W9968CF_MODULE_AUTHOR "(C) 2002-2004 Luca Risolia"
139#define W9968CF_AUTHOR_EMAIL "<luca.risolia@studio.unibo.it>" 139#define W9968CF_AUTHOR_EMAIL "<luca.risolia@studio.unibo.it>"
140#define W9968CF_MODULE_LICENSE "GPL" 140#define W9968CF_MODULE_LICENSE "GPL"
diff --git a/drivers/media/video/wm8775.c b/drivers/media/video/wm8775.c
index eddf11abe1d9..f1f261a35245 100644
--- a/drivers/media/video/wm8775.c
+++ b/drivers/media/video/wm8775.c
@@ -79,7 +79,8 @@ static int wm8775_write(struct v4l2_subdev *sd, int reg, u16 val)
79 return -1; 79 return -1;
80} 80}
81 81
82static int wm8775_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route) 82static int wm8775_s_routing(struct v4l2_subdev *sd,
83 u32 input, u32 output, u32 config)
83{ 84{
84 struct wm8775_state *state = to_state(sd); 85 struct wm8775_state *state = to_state(sd);
85 86
@@ -88,11 +89,11 @@ static int wm8775_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *r
88 16 combinations. 89 16 combinations.
89 If only one input is active (the normal case) then the 90 If only one input is active (the normal case) then the
90 input values 1, 2, 4 or 8 should be used. */ 91 input values 1, 2, 4 or 8 should be used. */
91 if (route->input > 15) { 92 if (input > 15) {
92 v4l2_err(sd, "Invalid input %d.\n", route->input); 93 v4l2_err(sd, "Invalid input %d.\n", input);
93 return -EINVAL; 94 return -EINVAL;
94 } 95 }
95 state->input = route->input; 96 state->input = input;
96 if (state->muted) 97 if (state->muted)
97 return 0; 98 return 0;
98 wm8775_write(sd, R21, 0x0c0); 99 wm8775_write(sd, R21, 0x0c0);
diff --git a/drivers/media/video/zoran/zoran.h b/drivers/media/video/zoran/zoran.h
index afecf32f1a87..d439c76b27e1 100644
--- a/drivers/media/video/zoran/zoran.h
+++ b/drivers/media/video/zoran/zoran.h
@@ -143,8 +143,8 @@ Private IOCTL to set up for displaying MJPEG
143#ifdef __KERNEL__ 143#ifdef __KERNEL__
144 144
145#define MAJOR_VERSION 0 /* driver major version */ 145#define MAJOR_VERSION 0 /* driver major version */
146#define MINOR_VERSION 9 /* driver minor version */ 146#define MINOR_VERSION 10 /* driver minor version */
147#define RELEASE_VERSION 5 /* release version */ 147#define RELEASE_VERSION 0 /* release version */
148 148
149#define ZORAN_NAME "ZORAN" /* name of the device */ 149#define ZORAN_NAME "ZORAN" /* name of the device */
150 150
diff --git a/drivers/media/video/zoran/zoran_card.c b/drivers/media/video/zoran/zoran_card.c
index f91bba435ed5..ea6c577b0eb3 100644
--- a/drivers/media/video/zoran/zoran_card.c
+++ b/drivers/media/video/zoran/zoran_card.c
@@ -1087,10 +1087,8 @@ zr36057_init (struct zoran *zr)
1087 detect_guest_activity(zr); 1087 detect_guest_activity(zr);
1088 test_interrupts(zr); 1088 test_interrupts(zr);
1089 if (!pass_through) { 1089 if (!pass_through) {
1090 struct v4l2_routing route = { 2, 0 };
1091
1092 decoder_call(zr, video, s_stream, 0); 1090 decoder_call(zr, video, s_stream, 0);
1093 encoder_call(zr, video, s_routing, &route); 1091 encoder_call(zr, video, s_routing, 2, 0, 0);
1094 } 1092 }
1095 1093
1096 zr->zoran_proc = NULL; 1094 zr->zoran_proc = NULL;
@@ -1360,11 +1358,13 @@ static int __devinit zoran_probe(struct pci_dev *pdev,
1360 goto zr_free_irq; 1358 goto zr_free_irq;
1361 } 1359 }
1362 1360
1363 zr->decoder = v4l2_i2c_new_probed_subdev(&zr->i2c_adapter, 1361 zr->decoder = v4l2_i2c_new_probed_subdev(&zr->v4l2_dev,
1364 zr->card.mod_decoder, zr->card.i2c_decoder, zr->card.addrs_decoder); 1362 &zr->i2c_adapter, zr->card.mod_decoder, zr->card.i2c_decoder,
1363 zr->card.addrs_decoder);
1365 1364
1366 if (zr->card.mod_encoder) 1365 if (zr->card.mod_encoder)
1367 zr->encoder = v4l2_i2c_new_probed_subdev(&zr->i2c_adapter, 1366 zr->encoder = v4l2_i2c_new_probed_subdev(&zr->v4l2_dev,
1367 &zr->i2c_adapter,
1368 zr->card.mod_encoder, zr->card.i2c_encoder, 1368 zr->card.mod_encoder, zr->card.i2c_encoder,
1369 zr->card.addrs_encoder); 1369 zr->card.addrs_encoder);
1370 1370
diff --git a/drivers/media/video/zoran/zoran_device.c b/drivers/media/video/zoran/zoran_device.c
index e0223deed35e..f6c2fb4fc3b4 100644
--- a/drivers/media/video/zoran/zoran_device.c
+++ b/drivers/media/video/zoran/zoran_device.c
@@ -971,7 +971,6 @@ zr36057_enable_jpg (struct zoran *zr,
971 struct vfe_settings cap; 971 struct vfe_settings cap;
972 int field_size = 972 int field_size =
973 zr->jpg_buffers.buffer_size / zr->jpg_settings.field_per_buff; 973 zr->jpg_buffers.buffer_size / zr->jpg_settings.field_per_buff;
974 struct v4l2_routing route = { 0, 0 };
975 974
976 zr->codec_mode = mode; 975 zr->codec_mode = mode;
977 976
@@ -994,8 +993,7 @@ zr36057_enable_jpg (struct zoran *zr,
994 */ 993 */
995 set_videobus_dir(zr, 0); 994 set_videobus_dir(zr, 0);
996 decoder_call(zr, video, s_stream, 1); 995 decoder_call(zr, video, s_stream, 1);
997 route.input = 0; 996 encoder_call(zr, video, s_routing, 0, 0, 0);
998 encoder_call(zr, video, s_routing, &route);
999 997
1000 /* Take the JPEG codec and the VFE out of sleep */ 998 /* Take the JPEG codec and the VFE out of sleep */
1001 jpeg_codec_sleep(zr, 0); 999 jpeg_codec_sleep(zr, 0);
@@ -1043,8 +1041,7 @@ zr36057_enable_jpg (struct zoran *zr,
1043 */ 1041 */
1044 decoder_call(zr, video, s_stream, 0); 1042 decoder_call(zr, video, s_stream, 0);
1045 set_videobus_dir(zr, 1); 1043 set_videobus_dir(zr, 1);
1046 route.input = 1; 1044 encoder_call(zr, video, s_routing, 1, 0, 0);
1047 encoder_call(zr, video, s_routing, &route);
1048 1045
1049 /* Take the JPEG codec and the VFE out of sleep */ 1046 /* Take the JPEG codec and the VFE out of sleep */
1050 jpeg_codec_sleep(zr, 0); 1047 jpeg_codec_sleep(zr, 0);
@@ -1089,8 +1086,7 @@ zr36057_enable_jpg (struct zoran *zr,
1089 zr36057_adjust_vfe(zr, mode); 1086 zr36057_adjust_vfe(zr, mode);
1090 1087
1091 decoder_call(zr, video, s_stream, 1); 1088 decoder_call(zr, video, s_stream, 1);
1092 route.input = 0; 1089 encoder_call(zr, video, s_routing, 0, 0, 0);
1093 encoder_call(zr, video, s_routing, &route);
1094 1090
1095 dprintk(2, KERN_INFO "%s: enable_jpg(IDLE)\n", ZR_DEVNAME(zr)); 1091 dprintk(2, KERN_INFO "%s: enable_jpg(IDLE)\n", ZR_DEVNAME(zr));
1096 break; 1092 break;
@@ -1571,8 +1567,6 @@ zoran_set_pci_master (struct zoran *zr,
1571void 1567void
1572zoran_init_hardware (struct zoran *zr) 1568zoran_init_hardware (struct zoran *zr)
1573{ 1569{
1574 struct v4l2_routing route = { 0, 0 };
1575
1576 /* Enable bus-mastering */ 1570 /* Enable bus-mastering */
1577 zoran_set_pci_master(zr, 1); 1571 zoran_set_pci_master(zr, 1);
1578 1572
@@ -1581,16 +1575,14 @@ zoran_init_hardware (struct zoran *zr)
1581 zr->card.init(zr); 1575 zr->card.init(zr);
1582 } 1576 }
1583 1577
1584 route.input = zr->card.input[zr->input].muxsel;
1585
1586 decoder_call(zr, core, init, 0); 1578 decoder_call(zr, core, init, 0);
1587 decoder_call(zr, tuner, s_std, zr->norm); 1579 decoder_call(zr, core, s_std, zr->norm);
1588 decoder_call(zr, video, s_routing, &route); 1580 decoder_call(zr, video, s_routing,
1581 zr->card.input[zr->input].muxsel, 0, 0);
1589 1582
1590 encoder_call(zr, core, init, 0); 1583 encoder_call(zr, core, init, 0);
1591 encoder_call(zr, video, s_std_output, zr->norm); 1584 encoder_call(zr, video, s_std_output, zr->norm);
1592 route.input = 0; 1585 encoder_call(zr, video, s_routing, 0, 0, 0);
1593 encoder_call(zr, video, s_routing, &route);
1594 1586
1595 /* toggle JPEG codec sleep to sync PLL */ 1587 /* toggle JPEG codec sleep to sync PLL */
1596 jpeg_codec_sleep(zr, 1); 1588 jpeg_codec_sleep(zr, 1);
diff --git a/drivers/media/video/zoran/zoran_driver.c b/drivers/media/video/zoran/zoran_driver.c
index f16e57cf11e4..092333b1c34f 100644
--- a/drivers/media/video/zoran/zoran_driver.c
+++ b/drivers/media/video/zoran/zoran_driver.c
@@ -1018,10 +1018,8 @@ zoran_close(struct file *file)
1018 zoran_set_pci_master(zr, 0); 1018 zoran_set_pci_master(zr, 0);
1019 1019
1020 if (!pass_through) { /* Switch to color bar */ 1020 if (!pass_through) { /* Switch to color bar */
1021 struct v4l2_routing route = { 2, 0 };
1022
1023 decoder_call(zr, video, s_stream, 0); 1021 decoder_call(zr, video, s_stream, 0);
1024 encoder_call(zr, video, s_routing, &route); 1022 encoder_call(zr, video, s_routing, 2, 0, 0);
1025 } 1023 }
1026 } 1024 }
1027 1025
@@ -1449,7 +1447,7 @@ zoran_set_norm (struct zoran *zr,
1449 v4l2_std_id std = 0; 1447 v4l2_std_id std = 0;
1450 1448
1451 decoder_call(zr, video, querystd, &std); 1449 decoder_call(zr, video, querystd, &std);
1452 decoder_call(zr, tuner, s_std, std); 1450 decoder_call(zr, core, s_std, std);
1453 1451
1454 /* let changes come into effect */ 1452 /* let changes come into effect */
1455 ssleep(2); 1453 ssleep(2);
@@ -1461,7 +1459,7 @@ zoran_set_norm (struct zoran *zr,
1461 "%s: %s - no norm detected\n", 1459 "%s: %s - no norm detected\n",
1462 ZR_DEVNAME(zr), __func__); 1460 ZR_DEVNAME(zr), __func__);
1463 /* reset norm */ 1461 /* reset norm */
1464 decoder_call(zr, tuner, s_std, zr->norm); 1462 decoder_call(zr, core, s_std, zr->norm);
1465 return -EIO; 1463 return -EIO;
1466 } 1464 }
1467 1465
@@ -1480,7 +1478,7 @@ zoran_set_norm (struct zoran *zr,
1480 if (on) 1478 if (on)
1481 zr36057_overlay(zr, 0); 1479 zr36057_overlay(zr, 0);
1482 1480
1483 decoder_call(zr, tuner, s_std, norm); 1481 decoder_call(zr, core, s_std, norm);
1484 encoder_call(zr, video, s_std_output, norm); 1482 encoder_call(zr, video, s_std_output, norm);
1485 1483
1486 if (on) 1484 if (on)
@@ -1496,8 +1494,6 @@ static int
1496zoran_set_input (struct zoran *zr, 1494zoran_set_input (struct zoran *zr,
1497 int input) 1495 int input)
1498{ 1496{
1499 struct v4l2_routing route = { 0, 0 };
1500
1501 if (input == zr->input) { 1497 if (input == zr->input) {
1502 return 0; 1498 return 0;
1503 } 1499 }
@@ -1519,10 +1515,10 @@ zoran_set_input (struct zoran *zr,
1519 return -EINVAL; 1515 return -EINVAL;
1520 } 1516 }
1521 1517
1522 route.input = zr->card.input[input].muxsel;
1523 zr->input = input; 1518 zr->input = input;
1524 1519
1525 decoder_call(zr, video, s_routing, &route); 1520 decoder_call(zr, video, s_routing,
1521 zr->card.input[input].muxsel, 0, 0);
1526 1522
1527 return 0; 1523 return 0;
1528} 1524}
@@ -1748,7 +1744,6 @@ jpgreqbuf_unlock_and_return:
1748 case BUZIOC_G_STATUS: 1744 case BUZIOC_G_STATUS:
1749 { 1745 {
1750 struct zoran_status *bstat = arg; 1746 struct zoran_status *bstat = arg;
1751 struct v4l2_routing route = { 0, 0 };
1752 int status = 0, res = 0; 1747 int status = 0, res = 0;
1753 v4l2_std_id norm; 1748 v4l2_std_id norm;
1754 1749
@@ -1762,8 +1757,6 @@ jpgreqbuf_unlock_and_return:
1762 return -EINVAL; 1757 return -EINVAL;
1763 } 1758 }
1764 1759
1765 route.input = zr->card.input[bstat->input].muxsel;
1766
1767 mutex_lock(&zr->resource_lock); 1760 mutex_lock(&zr->resource_lock);
1768 1761
1769 if (zr->codec_mode != BUZ_MODE_IDLE) { 1762 if (zr->codec_mode != BUZ_MODE_IDLE) {
@@ -1775,7 +1768,8 @@ jpgreqbuf_unlock_and_return:
1775 goto gstat_unlock_and_return; 1768 goto gstat_unlock_and_return;
1776 } 1769 }
1777 1770
1778 decoder_call(zr, video, s_routing, &route); 1771 decoder_call(zr, video, s_routing,
1772 zr->card.input[bstat->input].muxsel, 0, 0);
1779 1773
1780 /* sleep 1 second */ 1774 /* sleep 1 second */
1781 ssleep(1); 1775 ssleep(1);
@@ -1785,8 +1779,8 @@ jpgreqbuf_unlock_and_return:
1785 decoder_call(zr, video, g_input_status, &status); 1779 decoder_call(zr, video, g_input_status, &status);
1786 1780
1787 /* restore previous input and norm */ 1781 /* restore previous input and norm */
1788 route.input = zr->card.input[zr->input].muxsel; 1782 decoder_call(zr, video, s_routing,
1789 decoder_call(zr, video, s_routing, &route); 1783 zr->card.input[zr->input].muxsel, 0, 0);
1790gstat_unlock_and_return: 1784gstat_unlock_and_return:
1791 mutex_unlock(&zr->resource_lock); 1785 mutex_unlock(&zr->resource_lock);
1792 1786
diff --git a/drivers/media/video/zr364xx.c b/drivers/media/video/zr364xx.c
index 221409fe1682..ac169c9eb18d 100644
--- a/drivers/media/video/zr364xx.c
+++ b/drivers/media/video/zr364xx.c
@@ -26,7 +26,6 @@
26 */ 26 */
27 27
28 28
29#include <linux/version.h>
30#include <linux/module.h> 29#include <linux/module.h>
31#include <linux/init.h> 30#include <linux/init.h>
32#include <linux/usb.h> 31#include <linux/usb.h>
diff --git a/drivers/memstick/host/jmb38x_ms.c b/drivers/memstick/host/jmb38x_ms.c
index 2fb95a5b72eb..f4a162a4bece 100644
--- a/drivers/memstick/host/jmb38x_ms.c
+++ b/drivers/memstick/host/jmb38x_ms.c
@@ -877,7 +877,7 @@ static int jmb38x_ms_probe(struct pci_dev *pdev,
877 int pci_dev_busy = 0; 877 int pci_dev_busy = 0;
878 int rc, cnt; 878 int rc, cnt;
879 879
880 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 880 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
881 if (rc) 881 if (rc)
882 return rc; 882 return rc;
883 883
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index ea3aafbbda44..d0d126c69354 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1534,13 +1534,13 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1534 1534
1535 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision); 1535 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
1536 1536
1537 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK) 1537 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))
1538 && !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) { 1538 && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
1539 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT 1539 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT
1540 ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n", 1540 ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n",
1541 ioc->name)); 1541 ioc->name));
1542 } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK) 1542 } else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
1543 && !pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 1543 && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
1544 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT 1544 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT
1545 ": 32 BIT PCI BUS DMA ADDRESSING SUPPORTED\n", 1545 ": 32 BIT PCI BUS DMA ADDRESSING SUPPORTED\n",
1546 ioc->name)); 1546 ioc->name));
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 12b732512e57..a9019f081b97 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -2279,9 +2279,8 @@ mptsas_delete_expander_phys(MPT_ADAPTER *ioc)
2279 mutex_lock(&ioc->sas_topology_mutex); 2279 mutex_lock(&ioc->sas_topology_mutex);
2280 list_for_each_entry_safe(port_info, n, &ioc->sas_topology, list) { 2280 list_for_each_entry_safe(port_info, n, &ioc->sas_topology, list) {
2281 2281
2282 if (port_info->phy_info && 2282 if (!(port_info->phy_info[0].identify.device_info &
2283 (!(port_info->phy_info[0].identify.device_info & 2283 MPI_SAS_DEVICE_INFO_SMP_TARGET))
2284 MPI_SAS_DEVICE_INFO_SMP_TARGET)))
2285 continue; 2284 continue;
2286 2285
2287 if (mptsas_sas_expander_pg0(ioc, &buffer, 2286 if (mptsas_sas_expander_pg0(ioc, &buffer,
diff --git a/drivers/message/i2o/memory.c b/drivers/message/i2o/memory.c
index f5cc95c564e2..292b41e49fbd 100644
--- a/drivers/message/i2o/memory.c
+++ b/drivers/message/i2o/memory.c
@@ -185,9 +185,9 @@ int i2o_dma_alloc(struct device *dev, struct i2o_dma *addr, size_t len)
185 int dma_64 = 0; 185 int dma_64 = 0;
186 186
187 mutex_lock(&mem_lock); 187 mutex_lock(&mem_lock);
188 if ((sizeof(dma_addr_t) > 4) && (pdev->dma_mask == DMA_64BIT_MASK)) { 188 if ((sizeof(dma_addr_t) > 4) && (pdev->dma_mask == DMA_BIT_MASK(64))) {
189 dma_64 = 1; 189 dma_64 = 1;
190 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 190 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
191 mutex_unlock(&mem_lock); 191 mutex_unlock(&mem_lock);
192 return -ENOMEM; 192 return -ENOMEM;
193 } 193 }
@@ -196,7 +196,7 @@ int i2o_dma_alloc(struct device *dev, struct i2o_dma *addr, size_t len)
196 addr->virt = dma_alloc_coherent(dev, len, &addr->phys, GFP_KERNEL); 196 addr->virt = dma_alloc_coherent(dev, len, &addr->phys, GFP_KERNEL);
197 197
198 if ((sizeof(dma_addr_t) > 4) && dma_64) 198 if ((sizeof(dma_addr_t) > 4) && dma_64)
199 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK)) 199 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
200 printk(KERN_WARNING "i2o: unable to set 64-bit DMA"); 200 printk(KERN_WARNING "i2o: unable to set 64-bit DMA");
201 mutex_unlock(&mem_lock); 201 mutex_unlock(&mem_lock);
202 202
diff --git a/drivers/message/i2o/pci.c b/drivers/message/i2o/pci.c
index 25d6f2341983..35ba2ae38b42 100644
--- a/drivers/message/i2o/pci.c
+++ b/drivers/message/i2o/pci.c
@@ -334,7 +334,7 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev,
334 return rc; 334 return rc;
335 } 335 }
336 336
337 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 337 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
338 printk(KERN_WARNING "i2o: no suitable DMA found for %s\n", 338 printk(KERN_WARNING "i2o: no suitable DMA found for %s\n",
339 pci_name(pdev)); 339 pci_name(pdev));
340 rc = -ENODEV; 340 rc = -ENODEV;
@@ -397,7 +397,7 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev,
397 } 397 }
398#ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 398#ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64
399 if (sizeof(dma_addr_t) > 4) { 399 if (sizeof(dma_addr_t) > 4) {
400 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK)) 400 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
401 printk(KERN_INFO "%s: 64-bit DMA unavailable\n", 401 printk(KERN_INFO "%s: 64-bit DMA unavailable\n",
402 c->name); 402 c->name);
403 else { 403 else {
diff --git a/drivers/misc/tifm_7xx1.c b/drivers/misc/tifm_7xx1.c
index be5672a98702..a6ef18259da0 100644
--- a/drivers/misc/tifm_7xx1.c
+++ b/drivers/misc/tifm_7xx1.c
@@ -324,7 +324,7 @@ static int tifm_7xx1_probe(struct pci_dev *dev,
324 int pci_dev_busy = 0; 324 int pci_dev_busy = 0;
325 int rc; 325 int rc;
326 326
327 rc = pci_set_dma_mask(dev, DMA_32BIT_MASK); 327 rc = pci_set_dma_mask(dev, DMA_BIT_MASK(32));
328 if (rc) 328 if (rc)
329 return rc; 329 return rc;
330 330
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index 406da9a8d453..c5b316e22371 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -380,7 +380,7 @@ static int sdhci_pci_enable_dma(struct sdhci_host *host)
380 "doesn't fully claim to support it.\n"); 380 "doesn't fully claim to support it.\n");
381 } 381 }
382 382
383 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 383 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
384 if (ret) 384 if (ret)
385 return ret; 385 return ret;
386 386
diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile
index 4521b1ecce45..82d1e4de475b 100644
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
@@ -4,7 +4,7 @@
4 4
5# Core functionality. 5# Core functionality.
6obj-$(CONFIG_MTD) += mtd.o 6obj-$(CONFIG_MTD) += mtd.o
7mtd-y := mtdcore.o mtdsuper.o 7mtd-y := mtdcore.o mtdsuper.o mtdbdi.o
8mtd-$(CONFIG_MTD_PARTITIONS) += mtdpart.o 8mtd-$(CONFIG_MTD_PARTITIONS) += mtdpart.o
9 9
10obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o 10obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o
diff --git a/drivers/mtd/ar7part.c b/drivers/mtd/ar7part.c
index ecf170b55c32..6697a1ec72d0 100644
--- a/drivers/mtd/ar7part.c
+++ b/drivers/mtd/ar7part.c
@@ -44,8 +44,6 @@ struct ar7_bin_rec {
44 unsigned int address; 44 unsigned int address;
45}; 45};
46 46
47static struct mtd_partition ar7_parts[AR7_PARTS];
48
49static int create_mtd_partitions(struct mtd_info *master, 47static int create_mtd_partitions(struct mtd_info *master,
50 struct mtd_partition **pparts, 48 struct mtd_partition **pparts,
51 unsigned long origin) 49 unsigned long origin)
@@ -57,7 +55,11 @@ static int create_mtd_partitions(struct mtd_info *master,
57 unsigned int root_offset = ROOT_OFFSET; 55 unsigned int root_offset = ROOT_OFFSET;
58 56
59 int retries = 10; 57 int retries = 10;
58 struct mtd_partition *ar7_parts;
60 59
60 ar7_parts = kzalloc(sizeof(*ar7_parts) * AR7_PARTS, GFP_KERNEL);
61 if (!ar7_parts)
62 return -ENOMEM;
61 ar7_parts[0].name = "loader"; 63 ar7_parts[0].name = "loader";
62 ar7_parts[0].offset = 0; 64 ar7_parts[0].offset = 0;
63 ar7_parts[0].size = master->erasesize; 65 ar7_parts[0].size = master->erasesize;
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
index f5ab6fa1057b..c240454fd113 100644
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
@@ -1236,10 +1236,14 @@ static int inval_cache_and_wait_for_operation(
1236 remove_wait_queue(&chip->wq, &wait); 1236 remove_wait_queue(&chip->wq, &wait);
1237 spin_lock(chip->mutex); 1237 spin_lock(chip->mutex);
1238 } 1238 }
1239 if (chip->erase_suspended || chip->write_suspended) { 1239 if (chip->erase_suspended && chip_state == FL_ERASING) {
1240 /* Suspend has occured while sleep: reset timeout */ 1240 /* Erase suspend occured while sleep: reset timeout */
1241 timeo = reset_timeo; 1241 timeo = reset_timeo;
1242 chip->erase_suspended = 0; 1242 chip->erase_suspended = 0;
1243 }
1244 if (chip->write_suspended && chip_state == FL_WRITING) {
1245 /* Write suspend occured while sleep: reset timeout */
1246 timeo = reset_timeo;
1243 chip->write_suspended = 0; 1247 chip->write_suspended = 0;
1244 } 1248 }
1245 } 1249 }
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
index 94bb61e19047..61ea833e0908 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -282,6 +282,16 @@ static void fixup_s29gl032n_sectors(struct mtd_info *mtd, void *param)
282 } 282 }
283} 283}
284 284
285static void fixup_M29W128G_write_buffer(struct mtd_info *mtd, void *param)
286{
287 struct map_info *map = mtd->priv;
288 struct cfi_private *cfi = map->fldrv_priv;
289 if (cfi->cfiq->BufWriteTimeoutTyp) {
290 pr_warning("Don't use write buffer on ST flash M29W128G\n");
291 cfi->cfiq->BufWriteTimeoutTyp = 0;
292 }
293}
294
285static struct cfi_fixup cfi_fixup_table[] = { 295static struct cfi_fixup cfi_fixup_table[] = {
286 { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, 296 { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
287#ifdef AMD_BOOTLOC_BUG 297#ifdef AMD_BOOTLOC_BUG
@@ -298,6 +308,7 @@ static struct cfi_fixup cfi_fixup_table[] = {
298 { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, }, 308 { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, },
299 { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, }, 309 { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, },
300 { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, }, 310 { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, },
311 { CFI_MFR_ST, 0x227E, fixup_M29W128G_write_buffer, NULL, },
301#if !FORCE_WORD_WRITE 312#if !FORCE_WORD_WRITE
302 { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, 313 { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
303#endif 314#endif
diff --git a/drivers/mtd/chips/jedec_probe.c b/drivers/mtd/chips/jedec_probe.c
index 2f3f2f719ba4..e824b9b9b056 100644
--- a/drivers/mtd/chips/jedec_probe.c
+++ b/drivers/mtd/chips/jedec_probe.c
@@ -159,6 +159,7 @@
159#define SST39LF800 0x2781 159#define SST39LF800 0x2781
160#define SST39LF160 0x2782 160#define SST39LF160 0x2782
161#define SST39VF1601 0x234b 161#define SST39VF1601 0x234b
162#define SST39VF3201 0x235b
162#define SST39LF512 0x00D4 163#define SST39LF512 0x00D4
163#define SST39LF010 0x00D5 164#define SST39LF010 0x00D5
164#define SST39LF020 0x00D6 165#define SST39LF020 0x00D6
@@ -1490,6 +1491,21 @@ static const struct amd_flash_info jedec_table[] = {
1490 ERASEINFO(0x1000,256) 1491 ERASEINFO(0x1000,256)
1491 } 1492 }
1492 }, { 1493 }, {
1494 .mfr_id = MANUFACTURER_SST, /* should be CFI */
1495 .dev_id = SST39VF3201,
1496 .name = "SST 39VF3201",
1497 .devtypes = CFI_DEVICETYPE_X16,
1498 .uaddr = MTD_UADDR_0xAAAA_0x5555,
1499 .dev_size = SIZE_4MiB,
1500 .cmd_set = P_ID_AMD_STD,
1501 .nr_regions = 4,
1502 .regions = {
1503 ERASEINFO(0x1000,256),
1504 ERASEINFO(0x1000,256),
1505 ERASEINFO(0x1000,256),
1506 ERASEINFO(0x1000,256)
1507 }
1508 }, {
1493 .mfr_id = MANUFACTURER_SST, 1509 .mfr_id = MANUFACTURER_SST,
1494 .dev_id = SST36VF3203, 1510 .dev_id = SST36VF3203,
1495 .name = "SST 36VF3203", 1511 .name = "SST 36VF3203",
diff --git a/drivers/mtd/chips/map_ram.c b/drivers/mtd/chips/map_ram.c
index 072dd8abf33a..6bdc50c727e7 100644
--- a/drivers/mtd/chips/map_ram.c
+++ b/drivers/mtd/chips/map_ram.c
@@ -21,6 +21,8 @@ static int mapram_write (struct mtd_info *, loff_t, size_t, size_t *, const u_ch
21static int mapram_erase (struct mtd_info *, struct erase_info *); 21static int mapram_erase (struct mtd_info *, struct erase_info *);
22static void mapram_nop (struct mtd_info *); 22static void mapram_nop (struct mtd_info *);
23static struct mtd_info *map_ram_probe(struct map_info *map); 23static struct mtd_info *map_ram_probe(struct map_info *map);
24static unsigned long mapram_unmapped_area(struct mtd_info *, unsigned long,
25 unsigned long, unsigned long);
24 26
25 27
26static struct mtd_chip_driver mapram_chipdrv = { 28static struct mtd_chip_driver mapram_chipdrv = {
@@ -64,6 +66,7 @@ static struct mtd_info *map_ram_probe(struct map_info *map)
64 mtd->type = MTD_RAM; 66 mtd->type = MTD_RAM;
65 mtd->size = map->size; 67 mtd->size = map->size;
66 mtd->erase = mapram_erase; 68 mtd->erase = mapram_erase;
69 mtd->get_unmapped_area = mapram_unmapped_area;
67 mtd->read = mapram_read; 70 mtd->read = mapram_read;
68 mtd->write = mapram_write; 71 mtd->write = mapram_write;
69 mtd->sync = mapram_nop; 72 mtd->sync = mapram_nop;
@@ -79,6 +82,20 @@ static struct mtd_info *map_ram_probe(struct map_info *map)
79} 82}
80 83
81 84
85/*
86 * Allow NOMMU mmap() to directly map the device (if not NULL)
87 * - return the address to which the offset maps
88 * - return -ENOSYS to indicate refusal to do the mapping
89 */
90static unsigned long mapram_unmapped_area(struct mtd_info *mtd,
91 unsigned long len,
92 unsigned long offset,
93 unsigned long flags)
94{
95 struct map_info *map = mtd->priv;
96 return (unsigned long) map->virt + offset;
97}
98
82static int mapram_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) 99static int mapram_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
83{ 100{
84 struct map_info *map = mtd->priv; 101 struct map_info *map = mtd->priv;
diff --git a/drivers/mtd/chips/map_rom.c b/drivers/mtd/chips/map_rom.c
index c76d6e5f47ee..076090a67b90 100644
--- a/drivers/mtd/chips/map_rom.c
+++ b/drivers/mtd/chips/map_rom.c
@@ -20,6 +20,8 @@ static int maprom_write (struct mtd_info *, loff_t, size_t, size_t *, const u_ch
20static void maprom_nop (struct mtd_info *); 20static void maprom_nop (struct mtd_info *);
21static struct mtd_info *map_rom_probe(struct map_info *map); 21static struct mtd_info *map_rom_probe(struct map_info *map);
22static int maprom_erase (struct mtd_info *mtd, struct erase_info *info); 22static int maprom_erase (struct mtd_info *mtd, struct erase_info *info);
23static unsigned long maprom_unmapped_area(struct mtd_info *, unsigned long,
24 unsigned long, unsigned long);
23 25
24static struct mtd_chip_driver maprom_chipdrv = { 26static struct mtd_chip_driver maprom_chipdrv = {
25 .probe = map_rom_probe, 27 .probe = map_rom_probe,
@@ -40,6 +42,7 @@ static struct mtd_info *map_rom_probe(struct map_info *map)
40 mtd->name = map->name; 42 mtd->name = map->name;
41 mtd->type = MTD_ROM; 43 mtd->type = MTD_ROM;
42 mtd->size = map->size; 44 mtd->size = map->size;
45 mtd->get_unmapped_area = maprom_unmapped_area;
43 mtd->read = maprom_read; 46 mtd->read = maprom_read;
44 mtd->write = maprom_write; 47 mtd->write = maprom_write;
45 mtd->sync = maprom_nop; 48 mtd->sync = maprom_nop;
@@ -53,6 +56,20 @@ static struct mtd_info *map_rom_probe(struct map_info *map)
53} 56}
54 57
55 58
59/*
60 * Allow NOMMU mmap() to directly map the device (if not NULL)
61 * - return the address to which the offset maps
62 * - return -ENOSYS to indicate refusal to do the mapping
63 */
64static unsigned long maprom_unmapped_area(struct mtd_info *mtd,
65 unsigned long len,
66 unsigned long offset,
67 unsigned long flags)
68{
69 struct map_info *map = mtd->priv;
70 return (unsigned long) map->virt + offset;
71}
72
56static int maprom_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) 73static int maprom_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
57{ 74{
58 struct map_info *map = mtd->priv; 75 struct map_info *map = mtd->priv;
diff --git a/drivers/mtd/cmdlinepart.c b/drivers/mtd/cmdlinepart.c
index 50a340388e74..5011fa73f918 100644
--- a/drivers/mtd/cmdlinepart.c
+++ b/drivers/mtd/cmdlinepart.c
@@ -335,7 +335,11 @@ static int parse_cmdline_partitions(struct mtd_info *master,
335 } 335 }
336 offset += part->parts[i].size; 336 offset += part->parts[i].size;
337 } 337 }
338 *pparts = part->parts; 338 *pparts = kmemdup(part->parts,
339 sizeof(*part->parts) * part->num_parts,
340 GFP_KERNEL);
341 if (!*pparts)
342 return -ENOMEM;
339 return part->num_parts; 343 return part->num_parts;
340 } 344 }
341 } 345 }
diff --git a/drivers/mtd/devices/doc2000.c b/drivers/mtd/devices/doc2000.c
index 50de839c77a9..5bf5f460e132 100644
--- a/drivers/mtd/devices/doc2000.c
+++ b/drivers/mtd/devices/doc2000.c
@@ -10,7 +10,6 @@
10#include <asm/errno.h> 10#include <asm/errno.h>
11#include <asm/io.h> 11#include <asm/io.h>
12#include <asm/uaccess.h> 12#include <asm/uaccess.h>
13#include <linux/miscdevice.h>
14#include <linux/delay.h> 13#include <linux/delay.h>
15#include <linux/slab.h> 14#include <linux/slab.h>
16#include <linux/sched.h> 15#include <linux/sched.h>
diff --git a/drivers/mtd/devices/doc2001.c b/drivers/mtd/devices/doc2001.c
index e32c568c1145..0990f7803628 100644
--- a/drivers/mtd/devices/doc2001.c
+++ b/drivers/mtd/devices/doc2001.c
@@ -10,7 +10,6 @@
10#include <asm/errno.h> 10#include <asm/errno.h>
11#include <asm/io.h> 11#include <asm/io.h>
12#include <asm/uaccess.h> 12#include <asm/uaccess.h>
13#include <linux/miscdevice.h>
14#include <linux/delay.h> 13#include <linux/delay.h>
15#include <linux/slab.h> 14#include <linux/slab.h>
16#include <linux/init.h> 15#include <linux/init.h>
diff --git a/drivers/mtd/devices/doc2001plus.c b/drivers/mtd/devices/doc2001plus.c
index d853f891b586..719b2915dc3a 100644
--- a/drivers/mtd/devices/doc2001plus.c
+++ b/drivers/mtd/devices/doc2001plus.c
@@ -14,7 +14,6 @@
14#include <asm/errno.h> 14#include <asm/errno.h>
15#include <asm/io.h> 15#include <asm/io.h>
16#include <asm/uaccess.h> 16#include <asm/uaccess.h>
17#include <linux/miscdevice.h>
18#include <linux/delay.h> 17#include <linux/delay.h>
19#include <linux/slab.h> 18#include <linux/slab.h>
20#include <linux/init.h> 19#include <linux/init.h>
diff --git a/drivers/mtd/devices/docecc.c b/drivers/mtd/devices/docecc.c
index 874e51b110a2..a19cda52da5c 100644
--- a/drivers/mtd/devices/docecc.c
+++ b/drivers/mtd/devices/docecc.c
@@ -26,7 +26,6 @@
26#include <asm/errno.h> 26#include <asm/errno.h>
27#include <asm/io.h> 27#include <asm/io.h>
28#include <asm/uaccess.h> 28#include <asm/uaccess.h>
29#include <linux/miscdevice.h>
30#include <linux/delay.h> 29#include <linux/delay.h>
31#include <linux/slab.h> 30#include <linux/slab.h>
32#include <linux/init.h> 31#include <linux/init.h>
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index 7c3fc766dcf1..8185b1f3e5e6 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -65,12 +65,6 @@
65#define FAST_READ_DUMMY_BYTE 0 65#define FAST_READ_DUMMY_BYTE 0
66#endif 66#endif
67 67
68#ifdef CONFIG_MTD_PARTITIONS
69#define mtd_has_partitions() (1)
70#else
71#define mtd_has_partitions() (0)
72#endif
73
74/****************************************************************************/ 68/****************************************************************************/
75 69
76struct m25p { 70struct m25p {
@@ -678,6 +672,8 @@ static int __devinit m25p_probe(struct spi_device *spi)
678 flash->mtd.erasesize = info->sector_size; 672 flash->mtd.erasesize = info->sector_size;
679 } 673 }
680 674
675 flash->mtd.dev.parent = &spi->dev;
676
681 dev_info(&spi->dev, "%s (%lld Kbytes)\n", info->name, 677 dev_info(&spi->dev, "%s (%lld Kbytes)\n", info->name,
682 (long long)flash->mtd.size >> 10); 678 (long long)flash->mtd.size >> 10);
683 679
@@ -708,12 +704,13 @@ static int __devinit m25p_probe(struct spi_device *spi)
708 struct mtd_partition *parts = NULL; 704 struct mtd_partition *parts = NULL;
709 int nr_parts = 0; 705 int nr_parts = 0;
710 706
711#ifdef CONFIG_MTD_CMDLINE_PARTS 707 if (mtd_has_cmdlinepart()) {
712 static const char *part_probes[] = { "cmdlinepart", NULL, }; 708 static const char *part_probes[]
709 = { "cmdlinepart", NULL, };
713 710
714 nr_parts = parse_mtd_partitions(&flash->mtd, 711 nr_parts = parse_mtd_partitions(&flash->mtd,
715 part_probes, &parts, 0); 712 part_probes, &parts, 0);
716#endif 713 }
717 714
718 if (nr_parts <= 0 && data && data->parts) { 715 if (nr_parts <= 0 && data && data->parts) {
719 parts = data->parts; 716 parts = data->parts;
diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
index 6d9f810565c8..62dee54af0a5 100644
--- a/drivers/mtd/devices/mtd_dataflash.c
+++ b/drivers/mtd/devices/mtd_dataflash.c
@@ -98,12 +98,6 @@ struct dataflash {
98 struct mtd_info mtd; 98 struct mtd_info mtd;
99}; 99};
100 100
101#ifdef CONFIG_MTD_PARTITIONS
102#define mtd_has_partitions() (1)
103#else
104#define mtd_has_partitions() (0)
105#endif
106
107/* ......................................................................... */ 101/* ......................................................................... */
108 102
109/* 103/*
@@ -670,6 +664,8 @@ add_dataflash_otp(struct spi_device *spi, char *name,
670 device->write = dataflash_write; 664 device->write = dataflash_write;
671 device->priv = priv; 665 device->priv = priv;
672 666
667 device->dev.parent = &spi->dev;
668
673 if (revision >= 'c') 669 if (revision >= 'c')
674 otp_tag = otp_setup(device, revision); 670 otp_tag = otp_setup(device, revision);
675 671
@@ -682,11 +678,13 @@ add_dataflash_otp(struct spi_device *spi, char *name,
682 struct mtd_partition *parts; 678 struct mtd_partition *parts;
683 int nr_parts = 0; 679 int nr_parts = 0;
684 680
685#ifdef CONFIG_MTD_CMDLINE_PARTS 681 if (mtd_has_cmdlinepart()) {
686 static const char *part_probes[] = { "cmdlinepart", NULL, }; 682 static const char *part_probes[]
683 = { "cmdlinepart", NULL, };
687 684
688 nr_parts = parse_mtd_partitions(device, part_probes, &parts, 0); 685 nr_parts = parse_mtd_partitions(device,
689#endif 686 part_probes, &parts, 0);
687 }
690 688
691 if (nr_parts <= 0 && pdata && pdata->parts) { 689 if (nr_parts <= 0 && pdata && pdata->parts) {
692 parts = pdata->parts; 690 parts = pdata->parts;
diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c
index 3aaca88847d3..fce5ff7589aa 100644
--- a/drivers/mtd/devices/mtdram.c
+++ b/drivers/mtd/devices/mtdram.c
@@ -65,6 +65,19 @@ static void ram_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
65{ 65{
66} 66}
67 67
68/*
69 * Allow NOMMU mmap() to directly map the device (if not NULL)
70 * - return the address to which the offset maps
71 * - return -ENOSYS to indicate refusal to do the mapping
72 */
73static unsigned long ram_get_unmapped_area(struct mtd_info *mtd,
74 unsigned long len,
75 unsigned long offset,
76 unsigned long flags)
77{
78 return (unsigned long) mtd->priv + offset;
79}
80
68static int ram_read(struct mtd_info *mtd, loff_t from, size_t len, 81static int ram_read(struct mtd_info *mtd, loff_t from, size_t len,
69 size_t *retlen, u_char *buf) 82 size_t *retlen, u_char *buf)
70{ 83{
@@ -116,6 +129,7 @@ int mtdram_init_device(struct mtd_info *mtd, void *mapped_address,
116 mtd->erase = ram_erase; 129 mtd->erase = ram_erase;
117 mtd->point = ram_point; 130 mtd->point = ram_point;
118 mtd->unpoint = ram_unpoint; 131 mtd->unpoint = ram_unpoint;
132 mtd->get_unmapped_area = ram_get_unmapped_area;
119 mtd->read = ram_read; 133 mtd->read = ram_read;
120 mtd->write = ram_write; 134 mtd->write = ram_write;
121 135
diff --git a/drivers/mtd/inftlmount.c b/drivers/mtd/inftlmount.c
index f751dd97c549..32e82aef3e53 100644
--- a/drivers/mtd/inftlmount.c
+++ b/drivers/mtd/inftlmount.c
@@ -28,7 +28,6 @@
28#include <asm/errno.h> 28#include <asm/errno.h>
29#include <asm/io.h> 29#include <asm/io.h>
30#include <asm/uaccess.h> 30#include <asm/uaccess.h>
31#include <linux/miscdevice.h>
32#include <linux/delay.h> 31#include <linux/delay.h>
33#include <linux/slab.h> 32#include <linux/slab.h>
34#include <linux/init.h> 33#include <linux/init.h>
diff --git a/drivers/mtd/internal.h b/drivers/mtd/internal.h
new file mode 100644
index 000000000000..c658fe7216b5
--- /dev/null
+++ b/drivers/mtd/internal.h
@@ -0,0 +1,17 @@
1/* Internal MTD definitions
2 *
3 * Copyright © 2006 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12/*
13 * mtdbdi.c
14 */
15extern struct backing_dev_info mtd_bdi_unmappable;
16extern struct backing_dev_info mtd_bdi_ro_mappable;
17extern struct backing_dev_info mtd_bdi_rw_mappable;
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 729f899a5cd5..82923bd2d9c5 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -529,12 +529,6 @@ config MTD_DMV182
529 help 529 help
530 Map driver for Dy-4 SVME/DMV-182 board. 530 Map driver for Dy-4 SVME/DMV-182 board.
531 531
532config MTD_SHARP_SL
533 tristate "ROM mapped on Sharp SL Series"
534 depends on ARCH_PXA
535 help
536 This enables access to the flash chip on the Sharp SL Series of PDAs.
537
538config MTD_INTEL_VR_NOR 532config MTD_INTEL_VR_NOR
539 tristate "NOR flash on Intel Vermilion Range Expansion Bus CS0" 533 tristate "NOR flash on Intel Vermilion Range Expansion Bus CS0"
540 depends on PCI 534 depends on PCI
@@ -542,6 +536,12 @@ config MTD_INTEL_VR_NOR
542 Map driver for a NOR flash bank located on the Expansion Bus of the 536 Map driver for a NOR flash bank located on the Expansion Bus of the
543 Intel Vermilion Range chipset. 537 Intel Vermilion Range chipset.
544 538
539config MTD_RBTX4939
540 tristate "Map driver for RBTX4939 board"
541 depends on TOSHIBA_RBTX4939 && MTD_CFI && MTD_COMPLEX_MAPPINGS
542 help
543 Map driver for NOR flash chips on RBTX4939 board.
544
545config MTD_PLATRAM 545config MTD_PLATRAM
546 tristate "Map driver for platform device RAM (mtd-ram)" 546 tristate "Map driver for platform device RAM (mtd-ram)"
547 select MTD_RAM 547 select MTD_RAM
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index 26b28a7a90b5..2dbc1bec8488 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -56,9 +56,9 @@ obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o
56obj-$(CONFIG_MTD_IXP2000) += ixp2000.o 56obj-$(CONFIG_MTD_IXP2000) += ixp2000.o
57obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o 57obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o
58obj-$(CONFIG_MTD_DMV182) += dmv182.o 58obj-$(CONFIG_MTD_DMV182) += dmv182.o
59obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o
60obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o 59obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
61obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o 60obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
62obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o 61obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
63obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o 62obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-async-flash.o
63obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o
64obj-$(CONFIG_MTD_VMU) += vmu-flash.o 64obj-$(CONFIG_MTD_VMU) += vmu-flash.o
diff --git a/drivers/mtd/maps/omap_nor.c b/drivers/mtd/maps/omap_nor.c
index 7e50e9b1b781..a24478102b11 100644
--- a/drivers/mtd/maps/omap_nor.c
+++ b/drivers/mtd/maps/omap_nor.c
@@ -115,6 +115,8 @@ static int __init omapflash_probe(struct platform_device *pdev)
115 } 115 }
116 info->mtd->owner = THIS_MODULE; 116 info->mtd->owner = THIS_MODULE;
117 117
118 info->mtd->dev.parent = &pdev->dev;
119
118#ifdef CONFIG_MTD_PARTITIONS 120#ifdef CONFIG_MTD_PARTITIONS
119 err = parse_mtd_partitions(info->mtd, part_probes, &info->parts, 0); 121 err = parse_mtd_partitions(info->mtd, part_probes, &info->parts, 0);
120 if (err > 0) 122 if (err > 0)
diff --git a/drivers/mtd/maps/physmap.c b/drivers/mtd/maps/physmap.c
index 229718222db7..29a901157352 100644
--- a/drivers/mtd/maps/physmap.c
+++ b/drivers/mtd/maps/physmap.c
@@ -147,6 +147,7 @@ static int physmap_flash_probe(struct platform_device *dev)
147 devices_found++; 147 devices_found++;
148 } 148 }
149 info->mtd[i]->owner = THIS_MODULE; 149 info->mtd[i]->owner = THIS_MODULE;
150 info->mtd[i]->dev.parent = &dev->dev;
150 } 151 }
151 152
152 if (devices_found == 1) { 153 if (devices_found == 1) {
diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c
index fbf0ca939d72..c83a60fada53 100644
--- a/drivers/mtd/maps/physmap_of.c
+++ b/drivers/mtd/maps/physmap_of.c
@@ -219,6 +219,7 @@ static int __devinit of_flash_probe(struct of_device *dev,
219 goto err_out; 219 goto err_out;
220 } 220 }
221 info->mtd->owner = THIS_MODULE; 221 info->mtd->owner = THIS_MODULE;
222 info->mtd->dev.parent = &dev->dev;
222 223
223#ifdef CONFIG_MTD_PARTITIONS 224#ifdef CONFIG_MTD_PARTITIONS
224 /* First look for RedBoot table or partitions on the command 225 /* First look for RedBoot table or partitions on the command
diff --git a/drivers/mtd/maps/plat-ram.c b/drivers/mtd/maps/plat-ram.c
index e7dd9c8a965e..49c9ece76477 100644
--- a/drivers/mtd/maps/plat-ram.c
+++ b/drivers/mtd/maps/plat-ram.c
@@ -224,6 +224,7 @@ static int platram_probe(struct platform_device *pdev)
224 } 224 }
225 225
226 info->mtd->owner = THIS_MODULE; 226 info->mtd->owner = THIS_MODULE;
227 info->mtd->dev.parent = &pdev->dev;
227 228
228 platram_setrw(info, PLATRAM_RW); 229 platram_setrw(info, PLATRAM_RW);
229 230
diff --git a/drivers/mtd/maps/rbtx4939-flash.c b/drivers/mtd/maps/rbtx4939-flash.c
new file mode 100644
index 000000000000..d39f0adac846
--- /dev/null
+++ b/drivers/mtd/maps/rbtx4939-flash.c
@@ -0,0 +1,208 @@
1/*
2 * rbtx4939-flash (based on physmap.c)
3 *
4 * This is a simplified physmap driver with map_init callback function.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * Copyright (C) 2009 Atsushi Nemoto <anemo@mba.ocn.ne.jp>
11 */
12
13#include <linux/module.h>
14#include <linux/types.h>
15#include <linux/kernel.h>
16#include <linux/init.h>
17#include <linux/slab.h>
18#include <linux/device.h>
19#include <linux/platform_device.h>
20#include <linux/mtd/mtd.h>
21#include <linux/mtd/map.h>
22#include <linux/mtd/partitions.h>
23#include <asm/txx9/rbtx4939.h>
24
25struct rbtx4939_flash_info {
26 struct mtd_info *mtd;
27 struct map_info map;
28#ifdef CONFIG_MTD_PARTITIONS
29 int nr_parts;
30 struct mtd_partition *parts;
31#endif
32};
33
34static int rbtx4939_flash_remove(struct platform_device *dev)
35{
36 struct rbtx4939_flash_info *info;
37
38 info = platform_get_drvdata(dev);
39 if (!info)
40 return 0;
41 platform_set_drvdata(dev, NULL);
42
43 if (info->mtd) {
44#ifdef CONFIG_MTD_PARTITIONS
45 struct rbtx4939_flash_data *pdata = dev->dev.platform_data;
46
47 if (info->nr_parts) {
48 del_mtd_partitions(info->mtd);
49 kfree(info->parts);
50 } else if (pdata->nr_parts)
51 del_mtd_partitions(info->mtd);
52 else
53 del_mtd_device(info->mtd);
54#else
55 del_mtd_device(info->mtd);
56#endif
57 map_destroy(info->mtd);
58 }
59 return 0;
60}
61
62static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
63#ifdef CONFIG_MTD_PARTITIONS
64static const char *part_probe_types[] = { "cmdlinepart", NULL };
65#endif
66
67static int rbtx4939_flash_probe(struct platform_device *dev)
68{
69 struct rbtx4939_flash_data *pdata;
70 struct rbtx4939_flash_info *info;
71 struct resource *res;
72 const char **probe_type;
73 int err = 0;
74 unsigned long size;
75
76 pdata = dev->dev.platform_data;
77 if (!pdata)
78 return -ENODEV;
79
80 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
81 if (!res)
82 return -ENODEV;
83 info = devm_kzalloc(&dev->dev, sizeof(struct rbtx4939_flash_info),
84 GFP_KERNEL);
85 if (!info)
86 return -ENOMEM;
87
88 platform_set_drvdata(dev, info);
89
90 size = resource_size(res);
91 pr_notice("rbtx4939 platform flash device: %pR\n", res);
92
93 if (!devm_request_mem_region(&dev->dev, res->start, size,
94 dev_name(&dev->dev)))
95 return -EBUSY;
96
97 info->map.name = dev_name(&dev->dev);
98 info->map.phys = res->start;
99 info->map.size = size;
100 info->map.bankwidth = pdata->width;
101
102 info->map.virt = devm_ioremap(&dev->dev, info->map.phys, size);
103 if (!info->map.virt)
104 return -EBUSY;
105
106 if (pdata->map_init)
107 (*pdata->map_init)(&info->map);
108 else
109 simple_map_init(&info->map);
110
111 probe_type = rom_probe_types;
112 for (; !info->mtd && *probe_type; probe_type++)
113 info->mtd = do_map_probe(*probe_type, &info->map);
114 if (!info->mtd) {
115 dev_err(&dev->dev, "map_probe failed\n");
116 err = -ENXIO;
117 goto err_out;
118 }
119 info->mtd->owner = THIS_MODULE;
120 if (err)
121 goto err_out;
122
123#ifdef CONFIG_MTD_PARTITIONS
124 err = parse_mtd_partitions(info->mtd, part_probe_types,
125 &info->parts, 0);
126 if (err > 0) {
127 add_mtd_partitions(info->mtd, info->parts, err);
128 info->nr_parts = err;
129 return 0;
130 }
131
132 if (pdata->nr_parts) {
133 pr_notice("Using rbtx4939 partition information\n");
134 add_mtd_partitions(info->mtd, pdata->parts, pdata->nr_parts);
135 return 0;
136 }
137#endif
138
139 add_mtd_device(info->mtd);
140 return 0;
141
142err_out:
143 rbtx4939_flash_remove(dev);
144 return err;
145}
146
147#ifdef CONFIG_PM
148static int rbtx4939_flash_suspend(struct platform_device *dev,
149 pm_message_t state)
150{
151 struct rbtx4939_flash_info *info = platform_get_drvdata(dev);
152
153 if (info->mtd->suspend)
154 return info->mtd->suspend(info->mtd);
155 return 0;
156}
157
158static int rbtx4939_flash_resume(struct platform_device *dev)
159{
160 struct rbtx4939_flash_info *info = platform_get_drvdata(dev);
161
162 if (info->mtd->resume)
163 info->mtd->resume(info->mtd);
164 return 0;
165}
166
167static void rbtx4939_flash_shutdown(struct platform_device *dev)
168{
169 struct rbtx4939_flash_info *info = platform_get_drvdata(dev);
170
171 if (info->mtd->suspend && info->mtd->resume)
172 if (info->mtd->suspend(info->mtd) == 0)
173 info->mtd->resume(info->mtd);
174}
175#else
176#define rbtx4939_flash_suspend NULL
177#define rbtx4939_flash_resume NULL
178#define rbtx4939_flash_shutdown NULL
179#endif
180
181static struct platform_driver rbtx4939_flash_driver = {
182 .probe = rbtx4939_flash_probe,
183 .remove = rbtx4939_flash_remove,
184 .suspend = rbtx4939_flash_suspend,
185 .resume = rbtx4939_flash_resume,
186 .shutdown = rbtx4939_flash_shutdown,
187 .driver = {
188 .name = "rbtx4939-flash",
189 .owner = THIS_MODULE,
190 },
191};
192
193static int __init rbtx4939_flash_init(void)
194{
195 return platform_driver_register(&rbtx4939_flash_driver);
196}
197
198static void __exit rbtx4939_flash_exit(void)
199{
200 platform_driver_unregister(&rbtx4939_flash_driver);
201}
202
203module_init(rbtx4939_flash_init);
204module_exit(rbtx4939_flash_exit);
205
206MODULE_LICENSE("GPL");
207MODULE_DESCRIPTION("RBTX4939 MTD map driver");
208MODULE_ALIAS("platform:rbtx4939-flash");
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c
index 8f57b6f40aa2..05e9362dc7f0 100644
--- a/drivers/mtd/maps/sa1100-flash.c
+++ b/drivers/mtd/maps/sa1100-flash.c
@@ -351,7 +351,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat)
351 351
352static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; 352static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };
353 353
354static int __init sa1100_mtd_probe(struct platform_device *pdev) 354static int __devinit sa1100_mtd_probe(struct platform_device *pdev)
355{ 355{
356 struct flash_platform_data *plat = pdev->dev.platform_data; 356 struct flash_platform_data *plat = pdev->dev.platform_data;
357 struct mtd_partition *parts; 357 struct mtd_partition *parts;
diff --git a/drivers/mtd/maps/sharpsl-flash.c b/drivers/mtd/maps/sharpsl-flash.c
deleted file mode 100644
index b392f096c706..000000000000
--- a/drivers/mtd/maps/sharpsl-flash.c
+++ /dev/null
@@ -1,116 +0,0 @@
1/*
2 * sharpsl-flash.c
3 *
4 * Copyright (C) 2001 Lineo Japan, Inc.
5 * Copyright (C) 2002 SHARP
6 *
7 * based on rpxlite.c,v 1.15 2001/10/02 15:05:14 dwmw2 Exp
8 * Handle mapping of the flash on the RPX Lite and CLLF boards
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 */
21
22#include <linux/module.h>
23#include <linux/types.h>
24#include <linux/kernel.h>
25#include <linux/mtd/mtd.h>
26#include <linux/mtd/map.h>
27#include <linux/mtd/partitions.h>
28#include <asm/io.h>
29#include <asm/mach-types.h>
30
31#define WINDOW_ADDR 0x00000000
32#define WINDOW_SIZE 0x00800000
33#define BANK_WIDTH 2
34
35static struct mtd_info *mymtd;
36
37struct map_info sharpsl_map = {
38 .name = "sharpsl-flash",
39 .size = WINDOW_SIZE,
40 .bankwidth = BANK_WIDTH,
41 .phys = WINDOW_ADDR
42};
43
44static struct mtd_partition sharpsl_partitions[1] = {
45 {
46 name: "Boot PROM Filesystem",
47 }
48};
49
50static int __init init_sharpsl(void)
51{
52 struct mtd_partition *parts;
53 int nb_parts = 0;
54 char *part_type = "static";
55
56 printk(KERN_NOTICE "Sharp SL series flash device: %x at %x\n",
57 WINDOW_SIZE, WINDOW_ADDR);
58 sharpsl_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);
59 if (!sharpsl_map.virt) {
60 printk("Failed to ioremap\n");
61 return -EIO;
62 }
63
64 simple_map_init(&sharpsl_map);
65
66 mymtd = do_map_probe("map_rom", &sharpsl_map);
67 if (!mymtd) {
68 iounmap(sharpsl_map.virt);
69 return -ENXIO;
70 }
71
72 mymtd->owner = THIS_MODULE;
73
74 if (machine_is_corgi() || machine_is_shepherd() || machine_is_husky()
75 || machine_is_poodle()) {
76 sharpsl_partitions[0].size=0x006d0000;
77 sharpsl_partitions[0].offset=0x00120000;
78 } else if (machine_is_tosa()) {
79 sharpsl_partitions[0].size=0x006a0000;
80 sharpsl_partitions[0].offset=0x00160000;
81 } else if (machine_is_spitz() || machine_is_akita() || machine_is_borzoi()) {
82 sharpsl_partitions[0].size=0x006b0000;
83 sharpsl_partitions[0].offset=0x00140000;
84 } else {
85 map_destroy(mymtd);
86 iounmap(sharpsl_map.virt);
87 return -ENODEV;
88 }
89
90 parts = sharpsl_partitions;
91 nb_parts = ARRAY_SIZE(sharpsl_partitions);
92
93 printk(KERN_NOTICE "Using %s partition definition\n", part_type);
94 add_mtd_partitions(mymtd, parts, nb_parts);
95
96 return 0;
97}
98
99static void __exit cleanup_sharpsl(void)
100{
101 if (mymtd) {
102 del_mtd_partitions(mymtd);
103 map_destroy(mymtd);
104 }
105 if (sharpsl_map.virt) {
106 iounmap(sharpsl_map.virt);
107 sharpsl_map.virt = 0;
108 }
109}
110
111module_init(init_sharpsl);
112module_exit(cleanup_sharpsl);
113
114MODULE_LICENSE("GPL");
115MODULE_AUTHOR("SHARP (Original: Arnold Christensen <AKC@pel.dk>)");
116MODULE_DESCRIPTION("MTD map driver for SHARP SL series");
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
index 1409f01406f6..a49a9c8f2cb1 100644
--- a/drivers/mtd/mtd_blkdevs.c
+++ b/drivers/mtd/mtd_blkdevs.c
@@ -286,6 +286,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
286 gd->private_data = new; 286 gd->private_data = new;
287 new->blkcore_priv = gd; 287 new->blkcore_priv = gd;
288 gd->queue = tr->blkcore_priv->rq; 288 gd->queue = tr->blkcore_priv->rq;
289 gd->driverfs_dev = new->mtd->dev.parent;
289 290
290 if (new->readonly) 291 if (new->readonly)
291 set_disk_ro(gd, 1); 292 set_disk_ro(gd, 1);
@@ -382,11 +383,12 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr)
382 tr->blkcore_priv->thread = kthread_run(mtd_blktrans_thread, tr, 383 tr->blkcore_priv->thread = kthread_run(mtd_blktrans_thread, tr,
383 "%sd", tr->name); 384 "%sd", tr->name);
384 if (IS_ERR(tr->blkcore_priv->thread)) { 385 if (IS_ERR(tr->blkcore_priv->thread)) {
386 int ret = PTR_ERR(tr->blkcore_priv->thread);
385 blk_cleanup_queue(tr->blkcore_priv->rq); 387 blk_cleanup_queue(tr->blkcore_priv->rq);
386 unregister_blkdev(tr->major, tr->name); 388 unregister_blkdev(tr->major, tr->name);
387 kfree(tr->blkcore_priv); 389 kfree(tr->blkcore_priv);
388 mutex_unlock(&mtd_table_mutex); 390 mutex_unlock(&mtd_table_mutex);
389 return PTR_ERR(tr->blkcore_priv->thread); 391 return ret;
390 } 392 }
391 393
392 INIT_LIST_HEAD(&tr->devs); 394 INIT_LIST_HEAD(&tr->devs);
diff --git a/drivers/mtd/mtdbdi.c b/drivers/mtd/mtdbdi.c
new file mode 100644
index 000000000000..5ca5aed0b225
--- /dev/null
+++ b/drivers/mtd/mtdbdi.c
@@ -0,0 +1,43 @@
1/* MTD backing device capabilities
2 *
3 * Copyright © 2006 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12#include <linux/backing-dev.h>
13#include <linux/mtd/mtd.h>
14#include "internal.h"
15
16/*
17 * backing device capabilities for non-mappable devices (such as NAND flash)
18 * - permits private mappings, copies are taken of the data
19 */
20struct backing_dev_info mtd_bdi_unmappable = {
21 .capabilities = BDI_CAP_MAP_COPY,
22};
23
24/*
25 * backing device capabilities for R/O mappable devices (such as ROM)
26 * - permits private mappings, copies are taken of the data
27 * - permits non-writable shared mappings
28 */
29struct backing_dev_info mtd_bdi_ro_mappable = {
30 .capabilities = (BDI_CAP_MAP_COPY | BDI_CAP_MAP_DIRECT |
31 BDI_CAP_EXEC_MAP | BDI_CAP_READ_MAP),
32};
33
34/*
35 * backing device capabilities for writable mappable devices (such as RAM)
36 * - permits private mappings, copies are taken of the data
37 * - permits non-writable shared mappings
38 */
39struct backing_dev_info mtd_bdi_rw_mappable = {
40 .capabilities = (BDI_CAP_MAP_COPY | BDI_CAP_MAP_DIRECT |
41 BDI_CAP_EXEC_MAP | BDI_CAP_READ_MAP |
42 BDI_CAP_WRITE_MAP),
43};
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index e9ec59e9a566..763d3f0a1f42 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -13,39 +13,13 @@
13#include <linux/slab.h> 13#include <linux/slab.h>
14#include <linux/sched.h> 14#include <linux/sched.h>
15#include <linux/smp_lock.h> 15#include <linux/smp_lock.h>
16#include <linux/backing-dev.h>
16 17
17#include <linux/mtd/mtd.h> 18#include <linux/mtd/mtd.h>
18#include <linux/mtd/compatmac.h> 19#include <linux/mtd/compatmac.h>
19 20
20#include <asm/uaccess.h> 21#include <asm/uaccess.h>
21 22
22static struct class *mtd_class;
23
24static void mtd_notify_add(struct mtd_info* mtd)
25{
26 if (!mtd)
27 return;
28
29 device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2),
30 NULL, "mtd%d", mtd->index);
31
32 device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1),
33 NULL, "mtd%dro", mtd->index);
34}
35
36static void mtd_notify_remove(struct mtd_info* mtd)
37{
38 if (!mtd)
39 return;
40
41 device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2));
42 device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1));
43}
44
45static struct mtd_notifier notifier = {
46 .add = mtd_notify_add,
47 .remove = mtd_notify_remove,
48};
49 23
50/* 24/*
51 * Data structure to hold the pointer to the mtd device as well 25 * Data structure to hold the pointer to the mtd device as well
@@ -107,12 +81,15 @@ static int mtd_open(struct inode *inode, struct file *file)
107 goto out; 81 goto out;
108 } 82 }
109 83
110 if (MTD_ABSENT == mtd->type) { 84 if (mtd->type == MTD_ABSENT) {
111 put_mtd_device(mtd); 85 put_mtd_device(mtd);
112 ret = -ENODEV; 86 ret = -ENODEV;
113 goto out; 87 goto out;
114 } 88 }
115 89
90 if (mtd->backing_dev_info)
91 file->f_mapping->backing_dev_info = mtd->backing_dev_info;
92
116 /* You can't open it RW if it's not a writeable device */ 93 /* You can't open it RW if it's not a writeable device */
117 if ((file->f_mode & FMODE_WRITE) && !(mtd->flags & MTD_WRITEABLE)) { 94 if ((file->f_mode & FMODE_WRITE) && !(mtd->flags & MTD_WRITEABLE)) {
118 put_mtd_device(mtd); 95 put_mtd_device(mtd);
@@ -781,6 +758,59 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
781 return ret; 758 return ret;
782} /* memory_ioctl */ 759} /* memory_ioctl */
783 760
761/*
762 * try to determine where a shared mapping can be made
763 * - only supported for NOMMU at the moment (MMU can't doesn't copy private
764 * mappings)
765 */
766#ifndef CONFIG_MMU
767static unsigned long mtd_get_unmapped_area(struct file *file,
768 unsigned long addr,
769 unsigned long len,
770 unsigned long pgoff,
771 unsigned long flags)
772{
773 struct mtd_file_info *mfi = file->private_data;
774 struct mtd_info *mtd = mfi->mtd;
775
776 if (mtd->get_unmapped_area) {
777 unsigned long offset;
778
779 if (addr != 0)
780 return (unsigned long) -EINVAL;
781
782 if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT))
783 return (unsigned long) -EINVAL;
784
785 offset = pgoff << PAGE_SHIFT;
786 if (offset > mtd->size - len)
787 return (unsigned long) -EINVAL;
788
789 return mtd->get_unmapped_area(mtd, len, offset, flags);
790 }
791
792 /* can't map directly */
793 return (unsigned long) -ENOSYS;
794}
795#endif
796
797/*
798 * set up a mapping for shared memory segments
799 */
800static int mtd_mmap(struct file *file, struct vm_area_struct *vma)
801{
802#ifdef CONFIG_MMU
803 struct mtd_file_info *mfi = file->private_data;
804 struct mtd_info *mtd = mfi->mtd;
805
806 if (mtd->type == MTD_RAM || mtd->type == MTD_ROM)
807 return 0;
808 return -ENOSYS;
809#else
810 return vma->vm_flags & VM_SHARED ? 0 : -ENOSYS;
811#endif
812}
813
784static const struct file_operations mtd_fops = { 814static const struct file_operations mtd_fops = {
785 .owner = THIS_MODULE, 815 .owner = THIS_MODULE,
786 .llseek = mtd_lseek, 816 .llseek = mtd_lseek,
@@ -789,39 +819,36 @@ static const struct file_operations mtd_fops = {
789 .ioctl = mtd_ioctl, 819 .ioctl = mtd_ioctl,
790 .open = mtd_open, 820 .open = mtd_open,
791 .release = mtd_close, 821 .release = mtd_close,
822 .mmap = mtd_mmap,
823#ifndef CONFIG_MMU
824 .get_unmapped_area = mtd_get_unmapped_area,
825#endif
792}; 826};
793 827
794static int __init init_mtdchar(void) 828static int __init init_mtdchar(void)
795{ 829{
796 if (register_chrdev(MTD_CHAR_MAJOR, "mtd", &mtd_fops)) { 830 int status;
831
832 status = register_chrdev(MTD_CHAR_MAJOR, "mtd", &mtd_fops);
833 if (status < 0) {
797 printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n", 834 printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n",
798 MTD_CHAR_MAJOR); 835 MTD_CHAR_MAJOR);
799 return -EAGAIN;
800 } 836 }
801 837
802 mtd_class = class_create(THIS_MODULE, "mtd"); 838 return status;
803
804 if (IS_ERR(mtd_class)) {
805 printk(KERN_ERR "Error creating mtd class.\n");
806 unregister_chrdev(MTD_CHAR_MAJOR, "mtd");
807 return PTR_ERR(mtd_class);
808 }
809
810 register_mtd_user(&notifier);
811 return 0;
812} 839}
813 840
814static void __exit cleanup_mtdchar(void) 841static void __exit cleanup_mtdchar(void)
815{ 842{
816 unregister_mtd_user(&notifier);
817 class_destroy(mtd_class);
818 unregister_chrdev(MTD_CHAR_MAJOR, "mtd"); 843 unregister_chrdev(MTD_CHAR_MAJOR, "mtd");
819} 844}
820 845
821module_init(init_mtdchar); 846module_init(init_mtdchar);
822module_exit(cleanup_mtdchar); 847module_exit(cleanup_mtdchar);
823 848
849MODULE_ALIAS_CHARDEV_MAJOR(MTD_CHAR_MAJOR);
824 850
825MODULE_LICENSE("GPL"); 851MODULE_LICENSE("GPL");
826MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); 852MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
827MODULE_DESCRIPTION("Direct character-device access to MTD devices"); 853MODULE_DESCRIPTION("Direct character-device access to MTD devices");
854MODULE_ALIAS_CHARDEV_MAJOR(MTD_CHAR_MAJOR);
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c
index 3dbb1b38db66..792b547786b8 100644
--- a/drivers/mtd/mtdconcat.c
+++ b/drivers/mtd/mtdconcat.c
@@ -13,6 +13,7 @@
13#include <linux/slab.h> 13#include <linux/slab.h>
14#include <linux/sched.h> 14#include <linux/sched.h>
15#include <linux/types.h> 15#include <linux/types.h>
16#include <linux/backing-dev.h>
16 17
17#include <linux/mtd/mtd.h> 18#include <linux/mtd/mtd.h>
18#include <linux/mtd/concat.h> 19#include <linux/mtd/concat.h>
@@ -684,6 +685,40 @@ static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs)
684} 685}
685 686
686/* 687/*
688 * try to support NOMMU mmaps on concatenated devices
689 * - we don't support subdev spanning as we can't guarantee it'll work
690 */
691static unsigned long concat_get_unmapped_area(struct mtd_info *mtd,
692 unsigned long len,
693 unsigned long offset,
694 unsigned long flags)
695{
696 struct mtd_concat *concat = CONCAT(mtd);
697 int i;
698
699 for (i = 0; i < concat->num_subdev; i++) {
700 struct mtd_info *subdev = concat->subdev[i];
701
702 if (offset >= subdev->size) {
703 offset -= subdev->size;
704 continue;
705 }
706
707 /* we've found the subdev over which the mapping will reside */
708 if (offset + len > subdev->size)
709 return (unsigned long) -EINVAL;
710
711 if (subdev->get_unmapped_area)
712 return subdev->get_unmapped_area(subdev, len, offset,
713 flags);
714
715 break;
716 }
717
718 return (unsigned long) -ENOSYS;
719}
720
721/*
687 * This function constructs a virtual MTD device by concatenating 722 * This function constructs a virtual MTD device by concatenating
688 * num_devs MTD devices. A pointer to the new device object is 723 * num_devs MTD devices. A pointer to the new device object is
689 * stored to *new_dev upon success. This function does _not_ 724 * stored to *new_dev upon success. This function does _not_
@@ -740,6 +775,8 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c
740 775
741 concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks; 776 concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks;
742 777
778 concat->mtd.backing_dev_info = subdev[0]->backing_dev_info;
779
743 concat->subdev[0] = subdev[0]; 780 concat->subdev[0] = subdev[0];
744 781
745 for (i = 1; i < num_devs; i++) { 782 for (i = 1; i < num_devs; i++) {
@@ -766,6 +803,15 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c
766 concat->mtd.flags |= 803 concat->mtd.flags |=
767 subdev[i]->flags & MTD_WRITEABLE; 804 subdev[i]->flags & MTD_WRITEABLE;
768 } 805 }
806
807 /* only permit direct mapping if the BDIs are all the same
808 * - copy-mapping is still permitted
809 */
810 if (concat->mtd.backing_dev_info !=
811 subdev[i]->backing_dev_info)
812 concat->mtd.backing_dev_info =
813 &default_backing_dev_info;
814
769 concat->mtd.size += subdev[i]->size; 815 concat->mtd.size += subdev[i]->size;
770 concat->mtd.ecc_stats.badblocks += 816 concat->mtd.ecc_stats.badblocks +=
771 subdev[i]->ecc_stats.badblocks; 817 subdev[i]->ecc_stats.badblocks;
@@ -796,6 +842,7 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c
796 concat->mtd.unlock = concat_unlock; 842 concat->mtd.unlock = concat_unlock;
797 concat->mtd.suspend = concat_suspend; 843 concat->mtd.suspend = concat_suspend;
798 concat->mtd.resume = concat_resume; 844 concat->mtd.resume = concat_resume;
845 concat->mtd.get_unmapped_area = concat_get_unmapped_area;
799 846
800 /* 847 /*
801 * Combine the erase block size info of the subdevices: 848 * Combine the erase block size info of the subdevices:
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 76fe0a1e7a5e..fdd6ae859397 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -19,9 +19,13 @@
19#include <linux/proc_fs.h> 19#include <linux/proc_fs.h>
20 20
21#include <linux/mtd/mtd.h> 21#include <linux/mtd/mtd.h>
22#include "internal.h"
22 23
23#include "mtdcore.h" 24#include "mtdcore.h"
24 25
26
27static struct class *mtd_class;
28
25/* These are exported solely for the purpose of mtd_blkdevs.c. You 29/* These are exported solely for the purpose of mtd_blkdevs.c. You
26 should not use them for _anything_ else */ 30 should not use them for _anything_ else */
27DEFINE_MUTEX(mtd_table_mutex); 31DEFINE_MUTEX(mtd_table_mutex);
@@ -32,6 +36,160 @@ EXPORT_SYMBOL_GPL(mtd_table);
32 36
33static LIST_HEAD(mtd_notifiers); 37static LIST_HEAD(mtd_notifiers);
34 38
39
40#if defined(CONFIG_MTD_CHAR) || defined(CONFIG_MTD_CHAR_MODULE)
41#define MTD_DEVT(index) MKDEV(MTD_CHAR_MAJOR, (index)*2)
42#else
43#define MTD_DEVT(index) 0
44#endif
45
46/* REVISIT once MTD uses the driver model better, whoever allocates
47 * the mtd_info will probably want to use the release() hook...
48 */
49static void mtd_release(struct device *dev)
50{
51 struct mtd_info *mtd = dev_to_mtd(dev);
52
53 /* remove /dev/mtdXro node if needed */
54 if (MTD_DEVT(mtd->index))
55 device_destroy(mtd_class, MTD_DEVT(mtd->index) + 1);
56}
57
58static ssize_t mtd_type_show(struct device *dev,
59 struct device_attribute *attr, char *buf)
60{
61 struct mtd_info *mtd = dev_to_mtd(dev);
62 char *type;
63
64 switch (mtd->type) {
65 case MTD_ABSENT:
66 type = "absent";
67 break;
68 case MTD_RAM:
69 type = "ram";
70 break;
71 case MTD_ROM:
72 type = "rom";
73 break;
74 case MTD_NORFLASH:
75 type = "nor";
76 break;
77 case MTD_NANDFLASH:
78 type = "nand";
79 break;
80 case MTD_DATAFLASH:
81 type = "dataflash";
82 break;
83 case MTD_UBIVOLUME:
84 type = "ubi";
85 break;
86 default:
87 type = "unknown";
88 }
89
90 return snprintf(buf, PAGE_SIZE, "%s\n", type);
91}
92static DEVICE_ATTR(type, S_IRUGO, mtd_type_show, NULL);
93
94static ssize_t mtd_flags_show(struct device *dev,
95 struct device_attribute *attr, char *buf)
96{
97 struct mtd_info *mtd = dev_to_mtd(dev);
98
99 return snprintf(buf, PAGE_SIZE, "0x%lx\n", (unsigned long)mtd->flags);
100
101}
102static DEVICE_ATTR(flags, S_IRUGO, mtd_flags_show, NULL);
103
104static ssize_t mtd_size_show(struct device *dev,
105 struct device_attribute *attr, char *buf)
106{
107 struct mtd_info *mtd = dev_to_mtd(dev);
108
109 return snprintf(buf, PAGE_SIZE, "%llu\n",
110 (unsigned long long)mtd->size);
111
112}
113static DEVICE_ATTR(size, S_IRUGO, mtd_size_show, NULL);
114
115static ssize_t mtd_erasesize_show(struct device *dev,
116 struct device_attribute *attr, char *buf)
117{
118 struct mtd_info *mtd = dev_to_mtd(dev);
119
120 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->erasesize);
121
122}
123static DEVICE_ATTR(erasesize, S_IRUGO, mtd_erasesize_show, NULL);
124
125static ssize_t mtd_writesize_show(struct device *dev,
126 struct device_attribute *attr, char *buf)
127{
128 struct mtd_info *mtd = dev_to_mtd(dev);
129
130 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->writesize);
131
132}
133static DEVICE_ATTR(writesize, S_IRUGO, mtd_writesize_show, NULL);
134
135static ssize_t mtd_oobsize_show(struct device *dev,
136 struct device_attribute *attr, char *buf)
137{
138 struct mtd_info *mtd = dev_to_mtd(dev);
139
140 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->oobsize);
141
142}
143static DEVICE_ATTR(oobsize, S_IRUGO, mtd_oobsize_show, NULL);
144
145static ssize_t mtd_numeraseregions_show(struct device *dev,
146 struct device_attribute *attr, char *buf)
147{
148 struct mtd_info *mtd = dev_to_mtd(dev);
149
150 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->numeraseregions);
151
152}
153static DEVICE_ATTR(numeraseregions, S_IRUGO, mtd_numeraseregions_show,
154 NULL);
155
156static ssize_t mtd_name_show(struct device *dev,
157 struct device_attribute *attr, char *buf)
158{
159 struct mtd_info *mtd = dev_to_mtd(dev);
160
161 return snprintf(buf, PAGE_SIZE, "%s\n", mtd->name);
162
163}
164static DEVICE_ATTR(name, S_IRUGO, mtd_name_show, NULL);
165
166static struct attribute *mtd_attrs[] = {
167 &dev_attr_type.attr,
168 &dev_attr_flags.attr,
169 &dev_attr_size.attr,
170 &dev_attr_erasesize.attr,
171 &dev_attr_writesize.attr,
172 &dev_attr_oobsize.attr,
173 &dev_attr_numeraseregions.attr,
174 &dev_attr_name.attr,
175 NULL,
176};
177
178struct attribute_group mtd_group = {
179 .attrs = mtd_attrs,
180};
181
182struct attribute_group *mtd_groups[] = {
183 &mtd_group,
184 NULL,
185};
186
187static struct device_type mtd_devtype = {
188 .name = "mtd",
189 .groups = mtd_groups,
190 .release = mtd_release,
191};
192
35/** 193/**
36 * add_mtd_device - register an MTD device 194 * add_mtd_device - register an MTD device
37 * @mtd: pointer to new MTD device info structure 195 * @mtd: pointer to new MTD device info structure
@@ -40,12 +198,27 @@ static LIST_HEAD(mtd_notifiers);
40 * notify each currently active MTD 'user' of its arrival. Returns 198 * notify each currently active MTD 'user' of its arrival. Returns
41 * zero on success or 1 on failure, which currently will only happen 199 * zero on success or 1 on failure, which currently will only happen
42 * if the number of present devices exceeds MAX_MTD_DEVICES (i.e. 16) 200 * if the number of present devices exceeds MAX_MTD_DEVICES (i.e. 16)
201 * or there's a sysfs error.
43 */ 202 */
44 203
45int add_mtd_device(struct mtd_info *mtd) 204int add_mtd_device(struct mtd_info *mtd)
46{ 205{
47 int i; 206 int i;
48 207
208 if (!mtd->backing_dev_info) {
209 switch (mtd->type) {
210 case MTD_RAM:
211 mtd->backing_dev_info = &mtd_bdi_rw_mappable;
212 break;
213 case MTD_ROM:
214 mtd->backing_dev_info = &mtd_bdi_ro_mappable;
215 break;
216 default:
217 mtd->backing_dev_info = &mtd_bdi_unmappable;
218 break;
219 }
220 }
221
49 BUG_ON(mtd->writesize == 0); 222 BUG_ON(mtd->writesize == 0);
50 mutex_lock(&mtd_table_mutex); 223 mutex_lock(&mtd_table_mutex);
51 224
@@ -80,6 +253,23 @@ int add_mtd_device(struct mtd_info *mtd)
80 mtd->name); 253 mtd->name);
81 } 254 }
82 255
256 /* Caller should have set dev.parent to match the
257 * physical device.
258 */
259 mtd->dev.type = &mtd_devtype;
260 mtd->dev.class = mtd_class;
261 mtd->dev.devt = MTD_DEVT(i);
262 dev_set_name(&mtd->dev, "mtd%d", i);
263 if (device_register(&mtd->dev) != 0) {
264 mtd_table[i] = NULL;
265 break;
266 }
267
268 if (MTD_DEVT(i))
269 device_create(mtd_class, mtd->dev.parent,
270 MTD_DEVT(i) + 1,
271 NULL, "mtd%dro", i);
272
83 DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name); 273 DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name);
84 /* No need to get a refcount on the module containing 274 /* No need to get a refcount on the module containing
85 the notifier, since we hold the mtd_table_mutex */ 275 the notifier, since we hold the mtd_table_mutex */
@@ -124,6 +314,8 @@ int del_mtd_device (struct mtd_info *mtd)
124 } else { 314 } else {
125 struct mtd_notifier *not; 315 struct mtd_notifier *not;
126 316
317 device_unregister(&mtd->dev);
318
127 /* No need to get a refcount on the module containing 319 /* No need to get a refcount on the module containing
128 the notifier, since we hold the mtd_table_mutex */ 320 the notifier, since we hold the mtd_table_mutex */
129 list_for_each_entry(not, &mtd_notifiers, list) 321 list_for_each_entry(not, &mtd_notifiers, list)
@@ -393,28 +585,38 @@ done:
393 return ((count < begin+len-off) ? count : begin+len-off); 585 return ((count < begin+len-off) ? count : begin+len-off);
394} 586}
395 587
588#endif /* CONFIG_PROC_FS */
589
396/*====================================================================*/ 590/*====================================================================*/
397/* Init code */ 591/* Init code */
398 592
399static int __init init_mtd(void) 593static int __init init_mtd(void)
400{ 594{
595 mtd_class = class_create(THIS_MODULE, "mtd");
596
597 if (IS_ERR(mtd_class)) {
598 pr_err("Error creating mtd class.\n");
599 return PTR_ERR(mtd_class);
600 }
601#ifdef CONFIG_PROC_FS
401 if ((proc_mtd = create_proc_entry( "mtd", 0, NULL ))) 602 if ((proc_mtd = create_proc_entry( "mtd", 0, NULL )))
402 proc_mtd->read_proc = mtd_read_proc; 603 proc_mtd->read_proc = mtd_read_proc;
604#endif /* CONFIG_PROC_FS */
403 return 0; 605 return 0;
404} 606}
405 607
406static void __exit cleanup_mtd(void) 608static void __exit cleanup_mtd(void)
407{ 609{
610#ifdef CONFIG_PROC_FS
408 if (proc_mtd) 611 if (proc_mtd)
409 remove_proc_entry( "mtd", NULL); 612 remove_proc_entry( "mtd", NULL);
613#endif /* CONFIG_PROC_FS */
614 class_destroy(mtd_class);
410} 615}
411 616
412module_init(init_mtd); 617module_init(init_mtd);
413module_exit(cleanup_mtd); 618module_exit(cleanup_mtd);
414 619
415#endif /* CONFIG_PROC_FS */
416
417
418MODULE_LICENSE("GPL"); 620MODULE_LICENSE("GPL");
419MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); 621MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
420MODULE_DESCRIPTION("Core MTD registration and access routines"); 622MODULE_DESCRIPTION("Core MTD registration and access routines");
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c
index 1a6b3beabe8d..1060337c06df 100644
--- a/drivers/mtd/mtdoops.c
+++ b/drivers/mtd/mtdoops.c
@@ -44,6 +44,7 @@ static struct mtdoops_context {
44 int oops_pages; 44 int oops_pages;
45 int nextpage; 45 int nextpage;
46 int nextcount; 46 int nextcount;
47 char *name;
47 48
48 void *oops_buf; 49 void *oops_buf;
49 50
@@ -273,6 +274,9 @@ static void mtdoops_notify_add(struct mtd_info *mtd)
273{ 274{
274 struct mtdoops_context *cxt = &oops_cxt; 275 struct mtdoops_context *cxt = &oops_cxt;
275 276
277 if (cxt->name && !strcmp(mtd->name, cxt->name))
278 cxt->mtd_index = mtd->index;
279
276 if ((mtd->index != cxt->mtd_index) || cxt->mtd_index < 0) 280 if ((mtd->index != cxt->mtd_index) || cxt->mtd_index < 0)
277 return; 281 return;
278 282
@@ -357,8 +361,10 @@ mtdoops_console_write(struct console *co, const char *s, unsigned int count)
357 spin_lock_irqsave(&cxt->writecount_lock, flags); 361 spin_lock_irqsave(&cxt->writecount_lock, flags);
358 362
359 /* Check ready status didn't change whilst waiting for the lock */ 363 /* Check ready status didn't change whilst waiting for the lock */
360 if (!cxt->ready) 364 if (!cxt->ready) {
365 spin_unlock_irqrestore(&cxt->writecount_lock, flags);
361 return; 366 return;
367 }
362 368
363 if (cxt->writecount == 0) { 369 if (cxt->writecount == 0) {
364 u32 *stamp = cxt->oops_buf; 370 u32 *stamp = cxt->oops_buf;
@@ -383,8 +389,12 @@ static int __init mtdoops_console_setup(struct console *co, char *options)
383{ 389{
384 struct mtdoops_context *cxt = co->data; 390 struct mtdoops_context *cxt = co->data;
385 391
386 if (cxt->mtd_index != -1) 392 if (cxt->mtd_index != -1 || cxt->name)
387 return -EBUSY; 393 return -EBUSY;
394 if (options) {
395 cxt->name = kstrdup(options, GFP_KERNEL);
396 return 0;
397 }
388 if (co->index == -1) 398 if (co->index == -1)
389 return -EINVAL; 399 return -EINVAL;
390 400
@@ -412,6 +422,7 @@ static int __init mtdoops_console_init(void)
412 422
413 cxt->mtd_index = -1; 423 cxt->mtd_index = -1;
414 cxt->oops_buf = vmalloc(OOPS_PAGE_SIZE); 424 cxt->oops_buf = vmalloc(OOPS_PAGE_SIZE);
425 spin_lock_init(&cxt->writecount_lock);
415 426
416 if (!cxt->oops_buf) { 427 if (!cxt->oops_buf) {
417 printk(KERN_ERR "Failed to allocate mtdoops buffer workspace\n"); 428 printk(KERN_ERR "Failed to allocate mtdoops buffer workspace\n");
@@ -432,6 +443,7 @@ static void __exit mtdoops_console_exit(void)
432 443
433 unregister_mtd_user(&mtdoops_notifier); 444 unregister_mtd_user(&mtdoops_notifier);
434 unregister_console(&mtdoops_console); 445 unregister_console(&mtdoops_console);
446 kfree(cxt->name);
435 vfree(cxt->oops_buf); 447 vfree(cxt->oops_buf);
436} 448}
437 449
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 144e6b613a77..29675edb44b4 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -48,8 +48,11 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len,
48 size_t *retlen, u_char *buf) 48 size_t *retlen, u_char *buf)
49{ 49{
50 struct mtd_part *part = PART(mtd); 50 struct mtd_part *part = PART(mtd);
51 struct mtd_ecc_stats stats;
51 int res; 52 int res;
52 53
54 stats = part->master->ecc_stats;
55
53 if (from >= mtd->size) 56 if (from >= mtd->size)
54 len = 0; 57 len = 0;
55 else if (from + len > mtd->size) 58 else if (from + len > mtd->size)
@@ -58,9 +61,9 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len,
58 len, retlen, buf); 61 len, retlen, buf);
59 if (unlikely(res)) { 62 if (unlikely(res)) {
60 if (res == -EUCLEAN) 63 if (res == -EUCLEAN)
61 mtd->ecc_stats.corrected++; 64 mtd->ecc_stats.corrected += part->master->ecc_stats.corrected - stats.corrected;
62 if (res == -EBADMSG) 65 if (res == -EBADMSG)
63 mtd->ecc_stats.failed++; 66 mtd->ecc_stats.failed += part->master->ecc_stats.failed - stats.failed;
64 } 67 }
65 return res; 68 return res;
66} 69}
@@ -84,6 +87,18 @@ static void part_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
84 part->master->unpoint(part->master, from + part->offset, len); 87 part->master->unpoint(part->master, from + part->offset, len);
85} 88}
86 89
90static unsigned long part_get_unmapped_area(struct mtd_info *mtd,
91 unsigned long len,
92 unsigned long offset,
93 unsigned long flags)
94{
95 struct mtd_part *part = PART(mtd);
96
97 offset += part->offset;
98 return part->master->get_unmapped_area(part->master, len, offset,
99 flags);
100}
101
87static int part_read_oob(struct mtd_info *mtd, loff_t from, 102static int part_read_oob(struct mtd_info *mtd, loff_t from,
88 struct mtd_oob_ops *ops) 103 struct mtd_oob_ops *ops)
89{ 104{
@@ -342,6 +357,12 @@ static struct mtd_part *add_one_partition(struct mtd_info *master,
342 357
343 slave->mtd.name = part->name; 358 slave->mtd.name = part->name;
344 slave->mtd.owner = master->owner; 359 slave->mtd.owner = master->owner;
360 slave->mtd.backing_dev_info = master->backing_dev_info;
361
362 /* NOTE: we don't arrange MTDs as a tree; it'd be error-prone
363 * to have the same data be in two different partitions.
364 */
365 slave->mtd.dev.parent = master->dev.parent;
345 366
346 slave->mtd.read = part_read; 367 slave->mtd.read = part_read;
347 slave->mtd.write = part_write; 368 slave->mtd.write = part_write;
@@ -354,6 +375,8 @@ static struct mtd_part *add_one_partition(struct mtd_info *master,
354 slave->mtd.unpoint = part_unpoint; 375 slave->mtd.unpoint = part_unpoint;
355 } 376 }
356 377
378 if (master->get_unmapped_area)
379 slave->mtd.get_unmapped_area = part_get_unmapped_area;
357 if (master->read_oob) 380 if (master->read_oob)
358 slave->mtd.read_oob = part_read_oob; 381 slave->mtd.read_oob = part_read_oob;
359 if (master->write_oob) 382 if (master->write_oob)
@@ -493,7 +516,9 @@ out_register:
493 * This function, given a master MTD object and a partition table, creates 516 * This function, given a master MTD object and a partition table, creates
494 * and registers slave MTD objects which are bound to the master according to 517 * and registers slave MTD objects which are bound to the master according to
495 * the partition definitions. 518 * the partition definitions.
496 * (Q: should we register the master MTD object as well?) 519 *
520 * We don't register the master, or expect the caller to have done so,
521 * for reasons of data integrity.
497 */ 522 */
498 523
499int add_mtd_partitions(struct mtd_info *master, 524int add_mtd_partitions(struct mtd_info *master,
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index 2ff88791cebc..890936d0275e 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -334,7 +334,7 @@ config MTD_NAND_ATMEL_ECC_NONE
334endchoice 334endchoice
335 335
336config MTD_NAND_PXA3xx 336config MTD_NAND_PXA3xx
337 bool "Support for NAND flash devices on PXA3xx" 337 tristate "Support for NAND flash devices on PXA3xx"
338 depends on MTD_NAND && PXA3xx 338 depends on MTD_NAND && PXA3xx
339 help 339 help
340 This enables the driver for the NAND flash device found on 340 This enables the driver for the NAND flash device found on
@@ -427,4 +427,23 @@ config MTD_NAND_SH_FLCTL
427 Several Renesas SuperH CPU has FLCTL. This option enables support 427 Several Renesas SuperH CPU has FLCTL. This option enables support
428 for NAND Flash using FLCTL. This driver support SH7723. 428 for NAND Flash using FLCTL. This driver support SH7723.
429 429
430config MTD_NAND_DAVINCI
431 tristate "Support NAND on DaVinci SoC"
432 depends on ARCH_DAVINCI
433 help
434 Enable the driver for NAND flash chips on Texas Instruments
435 DaVinci processors.
436
437config MTD_NAND_TXX9NDFMC
438 tristate "NAND Flash support for TXx9 SoC"
439 depends on SOC_TX4938 || SOC_TX4939
440 help
441 This enables the NAND flash controller on the TXx9 SoCs.
442
443config MTD_NAND_SOCRATES
444 tristate "Support for NAND on Socrates board"
445 depends on MTD_NAND && SOCRATES
446 help
447 Enables support for NAND Flash chips wired onto Socrates board.
448
430endif # MTD_NAND 449endif # MTD_NAND
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
index b661586afbfc..d33860ac42c3 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_MTD_NAND_AU1550) += au1550nd.o
14obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o 14obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o
15obj-$(CONFIG_MTD_NAND_PPCHAMELEONEVB) += ppchameleonevb.o 15obj-$(CONFIG_MTD_NAND_PPCHAMELEONEVB) += ppchameleonevb.o
16obj-$(CONFIG_MTD_NAND_S3C2410) += s3c2410.o 16obj-$(CONFIG_MTD_NAND_S3C2410) += s3c2410.o
17obj-$(CONFIG_MTD_NAND_DAVINCI) += davinci_nand.o
17obj-$(CONFIG_MTD_NAND_DISKONCHIP) += diskonchip.o 18obj-$(CONFIG_MTD_NAND_DISKONCHIP) += diskonchip.o
18obj-$(CONFIG_MTD_NAND_H1900) += h1910.o 19obj-$(CONFIG_MTD_NAND_H1900) += h1910.o
19obj-$(CONFIG_MTD_NAND_RTC_FROM4) += rtc_from4.o 20obj-$(CONFIG_MTD_NAND_RTC_FROM4) += rtc_from4.o
@@ -36,5 +37,7 @@ obj-$(CONFIG_MTD_NAND_FSL_ELBC) += fsl_elbc_nand.o
36obj-$(CONFIG_MTD_NAND_FSL_UPM) += fsl_upm.o 37obj-$(CONFIG_MTD_NAND_FSL_UPM) += fsl_upm.o
37obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o 38obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o
38obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o 39obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o
40obj-$(CONFIG_MTD_NAND_SOCRATES) += socrates_nand.o
41obj-$(CONFIG_MTD_NAND_TXX9NDFMC) += txx9ndfmc.o
39 42
40nand-objs := nand_base.o nand_bbt.o 43nand-objs := nand_base.o nand_bbt.o
diff --git a/drivers/mtd/nand/bf5xx_nand.c b/drivers/mtd/nand/bf5xx_nand.c
index 9af2a2cc1153..4c2a67ca801e 100644
--- a/drivers/mtd/nand/bf5xx_nand.c
+++ b/drivers/mtd/nand/bf5xx_nand.c
@@ -552,7 +552,6 @@ static void bf5xx_nand_dma_write_buf(struct mtd_info *mtd,
552static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info) 552static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info)
553{ 553{
554 int ret; 554 int ret;
555 unsigned short val;
556 555
557 /* Do not use dma */ 556 /* Do not use dma */
558 if (!hardware_ecc) 557 if (!hardware_ecc)
@@ -560,13 +559,6 @@ static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info)
560 559
561 init_completion(&info->dma_completion); 560 init_completion(&info->dma_completion);
562 561
563#ifdef CONFIG_BF54x
564 /* Setup DMAC1 channel mux for NFC which shared with SDH */
565 val = bfin_read_DMAC1_PERIMUX();
566 val &= 0xFFFE;
567 bfin_write_DMAC1_PERIMUX(val);
568 SSYNC();
569#endif
570 /* Request NFC DMA channel */ 562 /* Request NFC DMA channel */
571 ret = request_dma(CH_NFC, "BF5XX NFC driver"); 563 ret = request_dma(CH_NFC, "BF5XX NFC driver");
572 if (ret < 0) { 564 if (ret < 0) {
@@ -574,7 +566,13 @@ static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info)
574 return ret; 566 return ret;
575 } 567 }
576 568
577 set_dma_callback(CH_NFC, (void *) bf5xx_nand_dma_irq, (void *) info); 569#ifdef CONFIG_BF54x
570 /* Setup DMAC1 channel mux for NFC which shared with SDH */
571 bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() & ~1);
572 SSYNC();
573#endif
574
575 set_dma_callback(CH_NFC, bf5xx_nand_dma_irq, info);
578 576
579 /* Turn off the DMA channel first */ 577 /* Turn off the DMA channel first */
580 disable_dma(CH_NFC); 578 disable_dma(CH_NFC);
@@ -632,7 +630,7 @@ static int bf5xx_nand_hw_init(struct bf5xx_nand_info *info)
632/* 630/*
633 * Device management interface 631 * Device management interface
634 */ 632 */
635static int bf5xx_nand_add_partition(struct bf5xx_nand_info *info) 633static int __devinit bf5xx_nand_add_partition(struct bf5xx_nand_info *info)
636{ 634{
637 struct mtd_info *mtd = &info->mtd; 635 struct mtd_info *mtd = &info->mtd;
638 636
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
index 22a6b2e50e91..7c5b257ce8e4 100644
--- a/drivers/mtd/nand/cafe_nand.c
+++ b/drivers/mtd/nand/cafe_nand.c
@@ -654,6 +654,7 @@ static int __devinit cafe_nand_probe(struct pci_dev *pdev,
654 } 654 }
655 cafe = (void *)(&mtd[1]); 655 cafe = (void *)(&mtd[1]);
656 656
657 mtd->dev.parent = &pdev->dev;
657 mtd->priv = cafe; 658 mtd->priv = cafe;
658 mtd->owner = THIS_MODULE; 659 mtd->owner = THIS_MODULE;
659 660
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
new file mode 100644
index 000000000000..0119220de7d0
--- /dev/null
+++ b/drivers/mtd/nand/davinci_nand.c
@@ -0,0 +1,570 @@
1/*
2 * davinci_nand.c - NAND Flash Driver for DaVinci family chips
3 *
4 * Copyright © 2006 Texas Instruments.
5 *
6 * Port to 2.6.23 Copyright © 2008 by:
7 * Sander Huijsen <Shuijsen@optelecom-nkf.com>
8 * Troy Kisky <troy.kisky@boundarydevices.com>
9 * Dirk Behme <Dirk.Behme@gmail.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 */
25
26#include <linux/kernel.h>
27#include <linux/init.h>
28#include <linux/module.h>
29#include <linux/platform_device.h>
30#include <linux/err.h>
31#include <linux/clk.h>
32#include <linux/io.h>
33#include <linux/mtd/nand.h>
34#include <linux/mtd/partitions.h>
35
36#include <mach/nand.h>
37
38#include <asm/mach-types.h>
39
40
41/*
42 * This is a device driver for the NAND flash controller found on the
43 * various DaVinci family chips. It handles up to four SoC chipselects,
44 * and some flavors of secondary chipselect (e.g. based on A12) as used
45 * with multichip packages.
46 *
47 * The 1-bit ECC hardware is supported, but not yet the newer 4-bit ECC
48 * available on chips like the DM355 and OMAP-L137 and needed with the
49 * more error-prone MLC NAND chips.
50 *
51 * This driver assumes EM_WAIT connects all the NAND devices' RDY/nBUSY
52 * outputs in a "wire-AND" configuration, with no per-chip signals.
53 */
54struct davinci_nand_info {
55 struct mtd_info mtd;
56 struct nand_chip chip;
57
58 struct device *dev;
59 struct clk *clk;
60 bool partitioned;
61
62 void __iomem *base;
63 void __iomem *vaddr;
64
65 uint32_t ioaddr;
66 uint32_t current_cs;
67
68 uint32_t mask_chipsel;
69 uint32_t mask_ale;
70 uint32_t mask_cle;
71
72 uint32_t core_chipsel;
73};
74
75static DEFINE_SPINLOCK(davinci_nand_lock);
76
77#define to_davinci_nand(m) container_of(m, struct davinci_nand_info, mtd)
78
79
80static inline unsigned int davinci_nand_readl(struct davinci_nand_info *info,
81 int offset)
82{
83 return __raw_readl(info->base + offset);
84}
85
86static inline void davinci_nand_writel(struct davinci_nand_info *info,
87 int offset, unsigned long value)
88{
89 __raw_writel(value, info->base + offset);
90}
91
92/*----------------------------------------------------------------------*/
93
94/*
95 * Access to hardware control lines: ALE, CLE, secondary chipselect.
96 */
97
98static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd,
99 unsigned int ctrl)
100{
101 struct davinci_nand_info *info = to_davinci_nand(mtd);
102 uint32_t addr = info->current_cs;
103 struct nand_chip *nand = mtd->priv;
104
105 /* Did the control lines change? */
106 if (ctrl & NAND_CTRL_CHANGE) {
107 if ((ctrl & NAND_CTRL_CLE) == NAND_CTRL_CLE)
108 addr |= info->mask_cle;
109 else if ((ctrl & NAND_CTRL_ALE) == NAND_CTRL_ALE)
110 addr |= info->mask_ale;
111
112 nand->IO_ADDR_W = (void __iomem __force *)addr;
113 }
114
115 if (cmd != NAND_CMD_NONE)
116 iowrite8(cmd, nand->IO_ADDR_W);
117}
118
119static void nand_davinci_select_chip(struct mtd_info *mtd, int chip)
120{
121 struct davinci_nand_info *info = to_davinci_nand(mtd);
122 uint32_t addr = info->ioaddr;
123
124 /* maybe kick in a second chipselect */
125 if (chip > 0)
126 addr |= info->mask_chipsel;
127 info->current_cs = addr;
128
129 info->chip.IO_ADDR_W = (void __iomem __force *)addr;
130 info->chip.IO_ADDR_R = info->chip.IO_ADDR_W;
131}
132
133/*----------------------------------------------------------------------*/
134
135/*
136 * 1-bit hardware ECC ... context maintained for each core chipselect
137 */
138
139static inline uint32_t nand_davinci_readecc_1bit(struct mtd_info *mtd)
140{
141 struct davinci_nand_info *info = to_davinci_nand(mtd);
142
143 return davinci_nand_readl(info, NANDF1ECC_OFFSET
144 + 4 * info->core_chipsel);
145}
146
147static void nand_davinci_hwctl_1bit(struct mtd_info *mtd, int mode)
148{
149 struct davinci_nand_info *info;
150 uint32_t nandcfr;
151 unsigned long flags;
152
153 info = to_davinci_nand(mtd);
154
155 /* Reset ECC hardware */
156 nand_davinci_readecc_1bit(mtd);
157
158 spin_lock_irqsave(&davinci_nand_lock, flags);
159
160 /* Restart ECC hardware */
161 nandcfr = davinci_nand_readl(info, NANDFCR_OFFSET);
162 nandcfr |= BIT(8 + info->core_chipsel);
163 davinci_nand_writel(info, NANDFCR_OFFSET, nandcfr);
164
165 spin_unlock_irqrestore(&davinci_nand_lock, flags);
166}
167
168/*
169 * Read hardware ECC value and pack into three bytes
170 */
171static int nand_davinci_calculate_1bit(struct mtd_info *mtd,
172 const u_char *dat, u_char *ecc_code)
173{
174 unsigned int ecc_val = nand_davinci_readecc_1bit(mtd);
175 unsigned int ecc24 = (ecc_val & 0x0fff) | ((ecc_val & 0x0fff0000) >> 4);
176
177 /* invert so that erased block ecc is correct */
178 ecc24 = ~ecc24;
179 ecc_code[0] = (u_char)(ecc24);
180 ecc_code[1] = (u_char)(ecc24 >> 8);
181 ecc_code[2] = (u_char)(ecc24 >> 16);
182
183 return 0;
184}
185
186static int nand_davinci_correct_1bit(struct mtd_info *mtd, u_char *dat,
187 u_char *read_ecc, u_char *calc_ecc)
188{
189 struct nand_chip *chip = mtd->priv;
190 uint32_t eccNand = read_ecc[0] | (read_ecc[1] << 8) |
191 (read_ecc[2] << 16);
192 uint32_t eccCalc = calc_ecc[0] | (calc_ecc[1] << 8) |
193 (calc_ecc[2] << 16);
194 uint32_t diff = eccCalc ^ eccNand;
195
196 if (diff) {
197 if ((((diff >> 12) ^ diff) & 0xfff) == 0xfff) {
198 /* Correctable error */
199 if ((diff >> (12 + 3)) < chip->ecc.size) {
200 dat[diff >> (12 + 3)] ^= BIT((diff >> 12) & 7);
201 return 1;
202 } else {
203 return -1;
204 }
205 } else if (!(diff & (diff - 1))) {
206 /* Single bit ECC error in the ECC itself,
207 * nothing to fix */
208 return 1;
209 } else {
210 /* Uncorrectable error */
211 return -1;
212 }
213
214 }
215 return 0;
216}
217
218/*----------------------------------------------------------------------*/
219
220/*
221 * NOTE: NAND boot requires ALE == EM_A[1], CLE == EM_A[2], so that's
222 * how these chips are normally wired. This translates to both 8 and 16
223 * bit busses using ALE == BIT(3) in byte addresses, and CLE == BIT(4).
224 *
225 * For now we assume that configuration, or any other one which ignores
226 * the two LSBs for NAND access ... so we can issue 32-bit reads/writes
227 * and have that transparently morphed into multiple NAND operations.
228 */
229static void nand_davinci_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
230{
231 struct nand_chip *chip = mtd->priv;
232
233 if ((0x03 & ((unsigned)buf)) == 0 && (0x03 & len) == 0)
234 ioread32_rep(chip->IO_ADDR_R, buf, len >> 2);
235 else if ((0x01 & ((unsigned)buf)) == 0 && (0x01 & len) == 0)
236 ioread16_rep(chip->IO_ADDR_R, buf, len >> 1);
237 else
238 ioread8_rep(chip->IO_ADDR_R, buf, len);
239}
240
241static void nand_davinci_write_buf(struct mtd_info *mtd,
242 const uint8_t *buf, int len)
243{
244 struct nand_chip *chip = mtd->priv;
245
246 if ((0x03 & ((unsigned)buf)) == 0 && (0x03 & len) == 0)
247 iowrite32_rep(chip->IO_ADDR_R, buf, len >> 2);
248 else if ((0x01 & ((unsigned)buf)) == 0 && (0x01 & len) == 0)
249 iowrite16_rep(chip->IO_ADDR_R, buf, len >> 1);
250 else
251 iowrite8_rep(chip->IO_ADDR_R, buf, len);
252}
253
254/*
255 * Check hardware register for wait status. Returns 1 if device is ready,
256 * 0 if it is still busy.
257 */
258static int nand_davinci_dev_ready(struct mtd_info *mtd)
259{
260 struct davinci_nand_info *info = to_davinci_nand(mtd);
261
262 return davinci_nand_readl(info, NANDFSR_OFFSET) & BIT(0);
263}
264
265static void __init nand_dm6446evm_flash_init(struct davinci_nand_info *info)
266{
267 uint32_t regval, a1cr;
268
269 /*
270 * NAND FLASH timings @ PLL1 == 459 MHz
271 * - AEMIF.CLK freq = PLL1/6 = 459/6 = 76.5 MHz
272 * - AEMIF.CLK period = 1/76.5 MHz = 13.1 ns
273 */
274 regval = 0
275 | (0 << 31) /* selectStrobe */
276 | (0 << 30) /* extWait (never with NAND) */
277 | (1 << 26) /* writeSetup 10 ns */
278 | (3 << 20) /* writeStrobe 40 ns */
279 | (1 << 17) /* writeHold 10 ns */
280 | (0 << 13) /* readSetup 10 ns */
281 | (3 << 7) /* readStrobe 60 ns */
282 | (0 << 4) /* readHold 10 ns */
283 | (3 << 2) /* turnAround ?? ns */
284 | (0 << 0) /* asyncSize 8-bit bus */
285 ;
286 a1cr = davinci_nand_readl(info, A1CR_OFFSET);
287 if (a1cr != regval) {
288 dev_dbg(info->dev, "Warning: NAND config: Set A1CR " \
289 "reg to 0x%08x, was 0x%08x, should be done by " \
290 "bootloader.\n", regval, a1cr);
291 davinci_nand_writel(info, A1CR_OFFSET, regval);
292 }
293}
294
295/*----------------------------------------------------------------------*/
296
297static int __init nand_davinci_probe(struct platform_device *pdev)
298{
299 struct davinci_nand_pdata *pdata = pdev->dev.platform_data;
300 struct davinci_nand_info *info;
301 struct resource *res1;
302 struct resource *res2;
303 void __iomem *vaddr;
304 void __iomem *base;
305 int ret;
306 uint32_t val;
307 nand_ecc_modes_t ecc_mode;
308
309 /* which external chipselect will we be managing? */
310 if (pdev->id < 0 || pdev->id > 3)
311 return -ENODEV;
312
313 info = kzalloc(sizeof(*info), GFP_KERNEL);
314 if (!info) {
315 dev_err(&pdev->dev, "unable to allocate memory\n");
316 ret = -ENOMEM;
317 goto err_nomem;
318 }
319
320 platform_set_drvdata(pdev, info);
321
322 res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
323 res2 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
324 if (!res1 || !res2) {
325 dev_err(&pdev->dev, "resource missing\n");
326 ret = -EINVAL;
327 goto err_nomem;
328 }
329
330 vaddr = ioremap(res1->start, res1->end - res1->start);
331 base = ioremap(res2->start, res2->end - res2->start);
332 if (!vaddr || !base) {
333 dev_err(&pdev->dev, "ioremap failed\n");
334 ret = -EINVAL;
335 goto err_ioremap;
336 }
337
338 info->dev = &pdev->dev;
339 info->base = base;
340 info->vaddr = vaddr;
341
342 info->mtd.priv = &info->chip;
343 info->mtd.name = dev_name(&pdev->dev);
344 info->mtd.owner = THIS_MODULE;
345
346 info->mtd.dev.parent = &pdev->dev;
347
348 info->chip.IO_ADDR_R = vaddr;
349 info->chip.IO_ADDR_W = vaddr;
350 info->chip.chip_delay = 0;
351 info->chip.select_chip = nand_davinci_select_chip;
352
353 /* options such as NAND_USE_FLASH_BBT or 16-bit widths */
354 info->chip.options = pdata ? pdata->options : 0;
355
356 info->ioaddr = (uint32_t __force) vaddr;
357
358 info->current_cs = info->ioaddr;
359 info->core_chipsel = pdev->id;
360 info->mask_chipsel = pdata->mask_chipsel;
361
362 /* use nandboot-capable ALE/CLE masks by default */
363 if (pdata && pdata->mask_ale)
364 info->mask_ale = pdata->mask_cle;
365 else
366 info->mask_ale = MASK_ALE;
367 if (pdata && pdata->mask_cle)
368 info->mask_cle = pdata->mask_cle;
369 else
370 info->mask_cle = MASK_CLE;
371
372 /* Set address of hardware control function */
373 info->chip.cmd_ctrl = nand_davinci_hwcontrol;
374 info->chip.dev_ready = nand_davinci_dev_ready;
375
376 /* Speed up buffer I/O */
377 info->chip.read_buf = nand_davinci_read_buf;
378 info->chip.write_buf = nand_davinci_write_buf;
379
380 /* use board-specific ECC config; else, the best available */
381 if (pdata)
382 ecc_mode = pdata->ecc_mode;
383 else
384 ecc_mode = NAND_ECC_HW;
385
386 switch (ecc_mode) {
387 case NAND_ECC_NONE:
388 case NAND_ECC_SOFT:
389 break;
390 case NAND_ECC_HW:
391 info->chip.ecc.calculate = nand_davinci_calculate_1bit;
392 info->chip.ecc.correct = nand_davinci_correct_1bit;
393 info->chip.ecc.hwctl = nand_davinci_hwctl_1bit;
394 info->chip.ecc.size = 512;
395 info->chip.ecc.bytes = 3;
396 break;
397 case NAND_ECC_HW_SYNDROME:
398 /* FIXME implement */
399 info->chip.ecc.size = 512;
400 info->chip.ecc.bytes = 10;
401
402 dev_warn(&pdev->dev, "4-bit ECC nyet supported\n");
403 /* FALL THROUGH */
404 default:
405 ret = -EINVAL;
406 goto err_ecc;
407 }
408 info->chip.ecc.mode = ecc_mode;
409
410 info->clk = clk_get(&pdev->dev, "AEMIFCLK");
411 if (IS_ERR(info->clk)) {
412 ret = PTR_ERR(info->clk);
413 dev_dbg(&pdev->dev, "unable to get AEMIFCLK, err %d\n", ret);
414 goto err_clk;
415 }
416
417 ret = clk_enable(info->clk);
418 if (ret < 0) {
419 dev_dbg(&pdev->dev, "unable to enable AEMIFCLK, err %d\n", ret);
420 goto err_clk_enable;
421 }
422
423 /* EMIF timings should normally be set by the boot loader,
424 * especially after boot-from-NAND. The *only* reason to
425 * have this special casing for the DM6446 EVM is to work
426 * with boot-from-NOR ... with CS0 manually re-jumpered
427 * (after startup) so it addresses the NAND flash, not NOR.
428 * Even for dev boards, that's unusually rude...
429 */
430 if (machine_is_davinci_evm())
431 nand_dm6446evm_flash_init(info);
432
433 spin_lock_irq(&davinci_nand_lock);
434
435 /* put CSxNAND into NAND mode */
436 val = davinci_nand_readl(info, NANDFCR_OFFSET);
437 val |= BIT(info->core_chipsel);
438 davinci_nand_writel(info, NANDFCR_OFFSET, val);
439
440 spin_unlock_irq(&davinci_nand_lock);
441
442 /* Scan to find existence of the device(s) */
443 ret = nand_scan(&info->mtd, pdata->mask_chipsel ? 2 : 1);
444 if (ret < 0) {
445 dev_dbg(&pdev->dev, "no NAND chip(s) found\n");
446 goto err_scan;
447 }
448
449 if (mtd_has_partitions()) {
450 struct mtd_partition *mtd_parts = NULL;
451 int mtd_parts_nb = 0;
452
453 if (mtd_has_cmdlinepart()) {
454 static const char *probes[] __initconst =
455 { "cmdlinepart", NULL };
456
457 const char *master_name;
458
459 /* Set info->mtd.name = 0 temporarily */
460 master_name = info->mtd.name;
461 info->mtd.name = (char *)0;
462
463 /* info->mtd.name == 0, means: don't bother checking
464 <mtd-id> */
465 mtd_parts_nb = parse_mtd_partitions(&info->mtd, probes,
466 &mtd_parts, 0);
467
468 /* Restore info->mtd.name */
469 info->mtd.name = master_name;
470 }
471
472 if (mtd_parts_nb <= 0 && pdata) {
473 mtd_parts = pdata->parts;
474 mtd_parts_nb = pdata->nr_parts;
475 }
476
477 /* Register any partitions */
478 if (mtd_parts_nb > 0) {
479 ret = add_mtd_partitions(&info->mtd,
480 mtd_parts, mtd_parts_nb);
481 if (ret == 0)
482 info->partitioned = true;
483 }
484
485 } else if (pdata && pdata->nr_parts) {
486 dev_warn(&pdev->dev, "ignoring %d default partitions on %s\n",
487 pdata->nr_parts, info->mtd.name);
488 }
489
490 /* If there's no partition info, just package the whole chip
491 * as a single MTD device.
492 */
493 if (!info->partitioned)
494 ret = add_mtd_device(&info->mtd) ? -ENODEV : 0;
495
496 if (ret < 0)
497 goto err_scan;
498
499 val = davinci_nand_readl(info, NRCSR_OFFSET);
500 dev_info(&pdev->dev, "controller rev. %d.%d\n",
501 (val >> 8) & 0xff, val & 0xff);
502
503 return 0;
504
505err_scan:
506 clk_disable(info->clk);
507
508err_clk_enable:
509 clk_put(info->clk);
510
511err_ecc:
512err_clk:
513err_ioremap:
514 if (base)
515 iounmap(base);
516 if (vaddr)
517 iounmap(vaddr);
518
519err_nomem:
520 kfree(info);
521 return ret;
522}
523
524static int __exit nand_davinci_remove(struct platform_device *pdev)
525{
526 struct davinci_nand_info *info = platform_get_drvdata(pdev);
527 int status;
528
529 if (mtd_has_partitions() && info->partitioned)
530 status = del_mtd_partitions(&info->mtd);
531 else
532 status = del_mtd_device(&info->mtd);
533
534 iounmap(info->base);
535 iounmap(info->vaddr);
536
537 nand_release(&info->mtd);
538
539 clk_disable(info->clk);
540 clk_put(info->clk);
541
542 kfree(info);
543
544 return 0;
545}
546
547static struct platform_driver nand_davinci_driver = {
548 .remove = __exit_p(nand_davinci_remove),
549 .driver = {
550 .name = "davinci_nand",
551 },
552};
553MODULE_ALIAS("platform:davinci_nand");
554
555static int __init nand_davinci_init(void)
556{
557 return platform_driver_probe(&nand_davinci_driver, nand_davinci_probe);
558}
559module_init(nand_davinci_init);
560
561static void __exit nand_davinci_exit(void)
562{
563 platform_driver_unregister(&nand_davinci_driver);
564}
565module_exit(nand_davinci_exit);
566
567MODULE_LICENSE("GPL");
568MODULE_AUTHOR("Texas Instruments");
569MODULE_DESCRIPTION("Davinci NAND flash driver");
570
diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c
index 7815a404a632..d120cd8d7267 100644
--- a/drivers/mtd/nand/fsl_upm.c
+++ b/drivers/mtd/nand/fsl_upm.c
@@ -23,6 +23,10 @@
23#include <linux/io.h> 23#include <linux/io.h>
24#include <asm/fsl_lbc.h> 24#include <asm/fsl_lbc.h>
25 25
26#define FSL_UPM_WAIT_RUN_PATTERN 0x1
27#define FSL_UPM_WAIT_WRITE_BYTE 0x2
28#define FSL_UPM_WAIT_WRITE_BUFFER 0x4
29
26struct fsl_upm_nand { 30struct fsl_upm_nand {
27 struct device *dev; 31 struct device *dev;
28 struct mtd_info mtd; 32 struct mtd_info mtd;
@@ -36,8 +40,12 @@ struct fsl_upm_nand {
36 uint8_t upm_addr_offset; 40 uint8_t upm_addr_offset;
37 uint8_t upm_cmd_offset; 41 uint8_t upm_cmd_offset;
38 void __iomem *io_base; 42 void __iomem *io_base;
39 int rnb_gpio; 43 int rnb_gpio[NAND_MAX_CHIPS];
44 uint32_t mchip_offsets[NAND_MAX_CHIPS];
45 uint32_t mchip_count;
46 uint32_t mchip_number;
40 int chip_delay; 47 int chip_delay;
48 uint32_t wait_flags;
41}; 49};
42 50
43#define to_fsl_upm_nand(mtd) container_of(mtd, struct fsl_upm_nand, mtd) 51#define to_fsl_upm_nand(mtd) container_of(mtd, struct fsl_upm_nand, mtd)
@@ -46,7 +54,7 @@ static int fun_chip_ready(struct mtd_info *mtd)
46{ 54{
47 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); 55 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd);
48 56
49 if (gpio_get_value(fun->rnb_gpio)) 57 if (gpio_get_value(fun->rnb_gpio[fun->mchip_number]))
50 return 1; 58 return 1;
51 59
52 dev_vdbg(fun->dev, "busy\n"); 60 dev_vdbg(fun->dev, "busy\n");
@@ -55,9 +63,9 @@ static int fun_chip_ready(struct mtd_info *mtd)
55 63
56static void fun_wait_rnb(struct fsl_upm_nand *fun) 64static void fun_wait_rnb(struct fsl_upm_nand *fun)
57{ 65{
58 int cnt = 1000000; 66 if (fun->rnb_gpio[fun->mchip_number] >= 0) {
67 int cnt = 1000000;
59 68
60 if (fun->rnb_gpio >= 0) {
61 while (--cnt && !fun_chip_ready(&fun->mtd)) 69 while (--cnt && !fun_chip_ready(&fun->mtd))
62 cpu_relax(); 70 cpu_relax();
63 if (!cnt) 71 if (!cnt)
@@ -69,7 +77,9 @@ static void fun_wait_rnb(struct fsl_upm_nand *fun)
69 77
70static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) 78static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
71{ 79{
80 struct nand_chip *chip = mtd->priv;
72 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); 81 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd);
82 u32 mar;
73 83
74 if (!(ctrl & fun->last_ctrl)) { 84 if (!(ctrl & fun->last_ctrl)) {
75 fsl_upm_end_pattern(&fun->upm); 85 fsl_upm_end_pattern(&fun->upm);
@@ -87,9 +97,28 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
87 fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset); 97 fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset);
88 } 98 }
89 99
90 fsl_upm_run_pattern(&fun->upm, fun->io_base, cmd); 100 mar = (cmd << (32 - fun->upm.width)) |
101 fun->mchip_offsets[fun->mchip_number];
102 fsl_upm_run_pattern(&fun->upm, chip->IO_ADDR_R, mar);
103
104 if (fun->wait_flags & FSL_UPM_WAIT_RUN_PATTERN)
105 fun_wait_rnb(fun);
106}
107
108static void fun_select_chip(struct mtd_info *mtd, int mchip_nr)
109{
110 struct nand_chip *chip = mtd->priv;
111 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd);
91 112
92 fun_wait_rnb(fun); 113 if (mchip_nr == -1) {
114 chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);
115 } else if (mchip_nr >= 0) {
116 fun->mchip_number = mchip_nr;
117 chip->IO_ADDR_R = fun->io_base + fun->mchip_offsets[mchip_nr];
118 chip->IO_ADDR_W = chip->IO_ADDR_R;
119 } else {
120 BUG();
121 }
93} 122}
94 123
95static uint8_t fun_read_byte(struct mtd_info *mtd) 124static uint8_t fun_read_byte(struct mtd_info *mtd)
@@ -115,8 +144,11 @@ static void fun_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
115 144
116 for (i = 0; i < len; i++) { 145 for (i = 0; i < len; i++) {
117 out_8(fun->chip.IO_ADDR_W, buf[i]); 146 out_8(fun->chip.IO_ADDR_W, buf[i]);
118 fun_wait_rnb(fun); 147 if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BYTE)
148 fun_wait_rnb(fun);
119 } 149 }
150 if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BUFFER)
151 fun_wait_rnb(fun);
120} 152}
121 153
122static int __devinit fun_chip_init(struct fsl_upm_nand *fun, 154static int __devinit fun_chip_init(struct fsl_upm_nand *fun,
@@ -137,8 +169,10 @@ static int __devinit fun_chip_init(struct fsl_upm_nand *fun,
137 fun->chip.read_buf = fun_read_buf; 169 fun->chip.read_buf = fun_read_buf;
138 fun->chip.write_buf = fun_write_buf; 170 fun->chip.write_buf = fun_write_buf;
139 fun->chip.ecc.mode = NAND_ECC_SOFT; 171 fun->chip.ecc.mode = NAND_ECC_SOFT;
172 if (fun->mchip_count > 1)
173 fun->chip.select_chip = fun_select_chip;
140 174
141 if (fun->rnb_gpio >= 0) 175 if (fun->rnb_gpio[0] >= 0)
142 fun->chip.dev_ready = fun_chip_ready; 176 fun->chip.dev_ready = fun_chip_ready;
143 177
144 fun->mtd.priv = &fun->chip; 178 fun->mtd.priv = &fun->chip;
@@ -155,7 +189,7 @@ static int __devinit fun_chip_init(struct fsl_upm_nand *fun,
155 goto err; 189 goto err;
156 } 190 }
157 191
158 ret = nand_scan(&fun->mtd, 1); 192 ret = nand_scan(&fun->mtd, fun->mchip_count);
159 if (ret) 193 if (ret)
160 goto err; 194 goto err;
161 195
@@ -185,8 +219,10 @@ static int __devinit fun_probe(struct of_device *ofdev,
185 struct fsl_upm_nand *fun; 219 struct fsl_upm_nand *fun;
186 struct resource io_res; 220 struct resource io_res;
187 const uint32_t *prop; 221 const uint32_t *prop;
222 int rnb_gpio;
188 int ret; 223 int ret;
189 int size; 224 int size;
225 int i;
190 226
191 fun = kzalloc(sizeof(*fun), GFP_KERNEL); 227 fun = kzalloc(sizeof(*fun), GFP_KERNEL);
192 if (!fun) 228 if (!fun)
@@ -208,7 +244,7 @@ static int __devinit fun_probe(struct of_device *ofdev,
208 if (!prop || size != sizeof(uint32_t)) { 244 if (!prop || size != sizeof(uint32_t)) {
209 dev_err(&ofdev->dev, "can't get UPM address offset\n"); 245 dev_err(&ofdev->dev, "can't get UPM address offset\n");
210 ret = -EINVAL; 246 ret = -EINVAL;
211 goto err2; 247 goto err1;
212 } 248 }
213 fun->upm_addr_offset = *prop; 249 fun->upm_addr_offset = *prop;
214 250
@@ -216,21 +252,40 @@ static int __devinit fun_probe(struct of_device *ofdev,
216 if (!prop || size != sizeof(uint32_t)) { 252 if (!prop || size != sizeof(uint32_t)) {
217 dev_err(&ofdev->dev, "can't get UPM command offset\n"); 253 dev_err(&ofdev->dev, "can't get UPM command offset\n");
218 ret = -EINVAL; 254 ret = -EINVAL;
219 goto err2; 255 goto err1;
220 } 256 }
221 fun->upm_cmd_offset = *prop; 257 fun->upm_cmd_offset = *prop;
222 258
223 fun->rnb_gpio = of_get_gpio(ofdev->node, 0); 259 prop = of_get_property(ofdev->node,
224 if (fun->rnb_gpio >= 0) { 260 "fsl,upm-addr-line-cs-offsets", &size);
225 ret = gpio_request(fun->rnb_gpio, dev_name(&ofdev->dev)); 261 if (prop && (size / sizeof(uint32_t)) > 0) {
226 if (ret) { 262 fun->mchip_count = size / sizeof(uint32_t);
227 dev_err(&ofdev->dev, "can't request RNB gpio\n"); 263 if (fun->mchip_count >= NAND_MAX_CHIPS) {
264 dev_err(&ofdev->dev, "too much multiple chips\n");
265 goto err1;
266 }
267 for (i = 0; i < fun->mchip_count; i++)
268 fun->mchip_offsets[i] = prop[i];
269 } else {
270 fun->mchip_count = 1;
271 }
272
273 for (i = 0; i < fun->mchip_count; i++) {
274 fun->rnb_gpio[i] = -1;
275 rnb_gpio = of_get_gpio(ofdev->node, i);
276 if (rnb_gpio >= 0) {
277 ret = gpio_request(rnb_gpio, dev_name(&ofdev->dev));
278 if (ret) {
279 dev_err(&ofdev->dev,
280 "can't request RNB gpio #%d\n", i);
281 goto err2;
282 }
283 gpio_direction_input(rnb_gpio);
284 fun->rnb_gpio[i] = rnb_gpio;
285 } else if (rnb_gpio == -EINVAL) {
286 dev_err(&ofdev->dev, "RNB gpio #%d is invalid\n", i);
228 goto err2; 287 goto err2;
229 } 288 }
230 gpio_direction_input(fun->rnb_gpio);
231 } else if (fun->rnb_gpio == -EINVAL) {
232 dev_err(&ofdev->dev, "specified RNB gpio is invalid\n");
233 goto err2;
234 } 289 }
235 290
236 prop = of_get_property(ofdev->node, "chip-delay", NULL); 291 prop = of_get_property(ofdev->node, "chip-delay", NULL);
@@ -239,8 +294,15 @@ static int __devinit fun_probe(struct of_device *ofdev,
239 else 294 else
240 fun->chip_delay = 50; 295 fun->chip_delay = 50;
241 296
297 prop = of_get_property(ofdev->node, "fsl,upm-wait-flags", &size);
298 if (prop && size == sizeof(uint32_t))
299 fun->wait_flags = *prop;
300 else
301 fun->wait_flags = FSL_UPM_WAIT_RUN_PATTERN |
302 FSL_UPM_WAIT_WRITE_BYTE;
303
242 fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start, 304 fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start,
243 io_res.end - io_res.start + 1); 305 io_res.end - io_res.start + 1);
244 if (!fun->io_base) { 306 if (!fun->io_base) {
245 ret = -ENOMEM; 307 ret = -ENOMEM;
246 goto err2; 308 goto err2;
@@ -257,8 +319,11 @@ static int __devinit fun_probe(struct of_device *ofdev,
257 319
258 return 0; 320 return 0;
259err2: 321err2:
260 if (fun->rnb_gpio >= 0) 322 for (i = 0; i < fun->mchip_count; i++) {
261 gpio_free(fun->rnb_gpio); 323 if (fun->rnb_gpio[i] < 0)
324 break;
325 gpio_free(fun->rnb_gpio[i]);
326 }
262err1: 327err1:
263 kfree(fun); 328 kfree(fun);
264 329
@@ -268,12 +333,16 @@ err1:
268static int __devexit fun_remove(struct of_device *ofdev) 333static int __devexit fun_remove(struct of_device *ofdev)
269{ 334{
270 struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev); 335 struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev);
336 int i;
271 337
272 nand_release(&fun->mtd); 338 nand_release(&fun->mtd);
273 kfree(fun->mtd.name); 339 kfree(fun->mtd.name);
274 340
275 if (fun->rnb_gpio >= 0) 341 for (i = 0; i < fun->mchip_count; i++) {
276 gpio_free(fun->rnb_gpio); 342 if (fun->rnb_gpio[i] < 0)
343 break;
344 gpio_free(fun->rnb_gpio[i]);
345 }
277 346
278 kfree(fun); 347 kfree(fun);
279 348
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index bad048aca89a..f3548d048014 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -866,6 +866,7 @@ static int __init mxcnd_probe(struct platform_device *pdev)
866 mtd = &host->mtd; 866 mtd = &host->mtd;
867 mtd->priv = this; 867 mtd->priv = this;
868 mtd->owner = THIS_MODULE; 868 mtd->owner = THIS_MODULE;
869 mtd->dev.parent = &pdev->dev;
869 870
870 /* 50 us command delay time */ 871 /* 50 us command delay time */
871 this->chip_delay = 5; 872 this->chip_delay = 5;
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 5f71371eb1b0..3d7ed432fa41 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -82,6 +82,20 @@ static struct nand_ecclayout nand_oob_64 = {
82 .length = 38}} 82 .length = 38}}
83}; 83};
84 84
85static struct nand_ecclayout nand_oob_128 = {
86 .eccbytes = 48,
87 .eccpos = {
88 80, 81, 82, 83, 84, 85, 86, 87,
89 88, 89, 90, 91, 92, 93, 94, 95,
90 96, 97, 98, 99, 100, 101, 102, 103,
91 104, 105, 106, 107, 108, 109, 110, 111,
92 112, 113, 114, 115, 116, 117, 118, 119,
93 120, 121, 122, 123, 124, 125, 126, 127},
94 .oobfree = {
95 {.offset = 2,
96 .length = 78}}
97};
98
85static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd, 99static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd,
86 int new_state); 100 int new_state);
87 101
@@ -748,6 +762,8 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
748 * @mtd: mtd info structure 762 * @mtd: mtd info structure
749 * @chip: nand chip info structure 763 * @chip: nand chip info structure
750 * @buf: buffer to store read data 764 * @buf: buffer to store read data
765 *
766 * Not for syndrome calculating ecc controllers, which use a special oob layout
751 */ 767 */
752static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, 768static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
753 uint8_t *buf) 769 uint8_t *buf)
@@ -758,6 +774,47 @@ static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
758} 774}
759 775
760/** 776/**
777 * nand_read_page_raw_syndrome - [Intern] read raw page data without ecc
778 * @mtd: mtd info structure
779 * @chip: nand chip info structure
780 * @buf: buffer to store read data
781 *
782 * We need a special oob layout and handling even when OOB isn't used.
783 */
784static int nand_read_page_raw_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
785 uint8_t *buf)
786{
787 int eccsize = chip->ecc.size;
788 int eccbytes = chip->ecc.bytes;
789 uint8_t *oob = chip->oob_poi;
790 int steps, size;
791
792 for (steps = chip->ecc.steps; steps > 0; steps--) {
793 chip->read_buf(mtd, buf, eccsize);
794 buf += eccsize;
795
796 if (chip->ecc.prepad) {
797 chip->read_buf(mtd, oob, chip->ecc.prepad);
798 oob += chip->ecc.prepad;
799 }
800
801 chip->read_buf(mtd, oob, eccbytes);
802 oob += eccbytes;
803
804 if (chip->ecc.postpad) {
805 chip->read_buf(mtd, oob, chip->ecc.postpad);
806 oob += chip->ecc.postpad;
807 }
808 }
809
810 size = mtd->oobsize - (oob - chip->oob_poi);
811 if (size)
812 chip->read_buf(mtd, oob, size);
813
814 return 0;
815}
816
817/**
761 * nand_read_page_swecc - [REPLACABLE] software ecc based page read function 818 * nand_read_page_swecc - [REPLACABLE] software ecc based page read function
762 * @mtd: mtd info structure 819 * @mtd: mtd info structure
763 * @chip: nand chip info structure 820 * @chip: nand chip info structure
@@ -1482,6 +1539,8 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from,
1482 * @mtd: mtd info structure 1539 * @mtd: mtd info structure
1483 * @chip: nand chip info structure 1540 * @chip: nand chip info structure
1484 * @buf: data buffer 1541 * @buf: data buffer
1542 *
1543 * Not for syndrome calculating ecc controllers, which use a special oob layout
1485 */ 1544 */
1486static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, 1545static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1487 const uint8_t *buf) 1546 const uint8_t *buf)
@@ -1491,6 +1550,44 @@ static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1491} 1550}
1492 1551
1493/** 1552/**
1553 * nand_write_page_raw_syndrome - [Intern] raw page write function
1554 * @mtd: mtd info structure
1555 * @chip: nand chip info structure
1556 * @buf: data buffer
1557 *
1558 * We need a special oob layout and handling even when ECC isn't checked.
1559 */
1560static void nand_write_page_raw_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
1561 const uint8_t *buf)
1562{
1563 int eccsize = chip->ecc.size;
1564 int eccbytes = chip->ecc.bytes;
1565 uint8_t *oob = chip->oob_poi;
1566 int steps, size;
1567
1568 for (steps = chip->ecc.steps; steps > 0; steps--) {
1569 chip->write_buf(mtd, buf, eccsize);
1570 buf += eccsize;
1571
1572 if (chip->ecc.prepad) {
1573 chip->write_buf(mtd, oob, chip->ecc.prepad);
1574 oob += chip->ecc.prepad;
1575 }
1576
1577 chip->read_buf(mtd, oob, eccbytes);
1578 oob += eccbytes;
1579
1580 if (chip->ecc.postpad) {
1581 chip->write_buf(mtd, oob, chip->ecc.postpad);
1582 oob += chip->ecc.postpad;
1583 }
1584 }
1585
1586 size = mtd->oobsize - (oob - chip->oob_poi);
1587 if (size)
1588 chip->write_buf(mtd, oob, size);
1589}
1590/**
1494 * nand_write_page_swecc - [REPLACABLE] software ecc based page write function 1591 * nand_write_page_swecc - [REPLACABLE] software ecc based page write function
1495 * @mtd: mtd info structure 1592 * @mtd: mtd info structure
1496 * @chip: nand chip info structure 1593 * @chip: nand chip info structure
@@ -1863,7 +1960,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
1863 } 1960 }
1864 1961
1865 if (unlikely(ops->ooboffs >= len)) { 1962 if (unlikely(ops->ooboffs >= len)) {
1866 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: " 1963 DEBUG(MTD_DEBUG_LEVEL0, "nand_do_write_oob: "
1867 "Attempt to start write outside oob\n"); 1964 "Attempt to start write outside oob\n");
1868 return -EINVAL; 1965 return -EINVAL;
1869 } 1966 }
@@ -1873,7 +1970,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
1873 ops->ooboffs + ops->ooblen > 1970 ops->ooboffs + ops->ooblen >
1874 ((mtd->size >> chip->page_shift) - 1971 ((mtd->size >> chip->page_shift) -
1875 (to >> chip->page_shift)) * len)) { 1972 (to >> chip->page_shift)) * len)) {
1876 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: " 1973 DEBUG(MTD_DEBUG_LEVEL0, "nand_do_write_oob: "
1877 "Attempt write beyond end of device\n"); 1974 "Attempt write beyond end of device\n");
1878 return -EINVAL; 1975 return -EINVAL;
1879 } 1976 }
@@ -1929,8 +2026,8 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to,
1929 2026
1930 /* Do not allow writes past end of device */ 2027 /* Do not allow writes past end of device */
1931 if (ops->datbuf && (to + ops->len) > mtd->size) { 2028 if (ops->datbuf && (to + ops->len) > mtd->size) {
1932 DEBUG(MTD_DEBUG_LEVEL0, "nand_read_oob: " 2029 DEBUG(MTD_DEBUG_LEVEL0, "nand_write_oob: "
1933 "Attempt read beyond end of device\n"); 2030 "Attempt write beyond end of device\n");
1934 return -EINVAL; 2031 return -EINVAL;
1935 } 2032 }
1936 2033
@@ -2555,6 +2652,9 @@ int nand_scan_tail(struct mtd_info *mtd)
2555 case 64: 2652 case 64:
2556 chip->ecc.layout = &nand_oob_64; 2653 chip->ecc.layout = &nand_oob_64;
2557 break; 2654 break;
2655 case 128:
2656 chip->ecc.layout = &nand_oob_128;
2657 break;
2558 default: 2658 default:
2559 printk(KERN_WARNING "No oob scheme defined for " 2659 printk(KERN_WARNING "No oob scheme defined for "
2560 "oobsize %d\n", mtd->oobsize); 2660 "oobsize %d\n", mtd->oobsize);
@@ -2569,10 +2669,6 @@ int nand_scan_tail(struct mtd_info *mtd)
2569 * check ECC mode, default to software if 3byte/512byte hardware ECC is 2669 * check ECC mode, default to software if 3byte/512byte hardware ECC is
2570 * selected and we have 256 byte pagesize fallback to software ECC 2670 * selected and we have 256 byte pagesize fallback to software ECC
2571 */ 2671 */
2572 if (!chip->ecc.read_page_raw)
2573 chip->ecc.read_page_raw = nand_read_page_raw;
2574 if (!chip->ecc.write_page_raw)
2575 chip->ecc.write_page_raw = nand_write_page_raw;
2576 2672
2577 switch (chip->ecc.mode) { 2673 switch (chip->ecc.mode) {
2578 case NAND_ECC_HW: 2674 case NAND_ECC_HW:
@@ -2581,6 +2677,10 @@ int nand_scan_tail(struct mtd_info *mtd)
2581 chip->ecc.read_page = nand_read_page_hwecc; 2677 chip->ecc.read_page = nand_read_page_hwecc;
2582 if (!chip->ecc.write_page) 2678 if (!chip->ecc.write_page)
2583 chip->ecc.write_page = nand_write_page_hwecc; 2679 chip->ecc.write_page = nand_write_page_hwecc;
2680 if (!chip->ecc.read_page_raw)
2681 chip->ecc.read_page_raw = nand_read_page_raw;
2682 if (!chip->ecc.write_page_raw)
2683 chip->ecc.write_page_raw = nand_write_page_raw;
2584 if (!chip->ecc.read_oob) 2684 if (!chip->ecc.read_oob)
2585 chip->ecc.read_oob = nand_read_oob_std; 2685 chip->ecc.read_oob = nand_read_oob_std;
2586 if (!chip->ecc.write_oob) 2686 if (!chip->ecc.write_oob)
@@ -2602,6 +2702,10 @@ int nand_scan_tail(struct mtd_info *mtd)
2602 chip->ecc.read_page = nand_read_page_syndrome; 2702 chip->ecc.read_page = nand_read_page_syndrome;
2603 if (!chip->ecc.write_page) 2703 if (!chip->ecc.write_page)
2604 chip->ecc.write_page = nand_write_page_syndrome; 2704 chip->ecc.write_page = nand_write_page_syndrome;
2705 if (!chip->ecc.read_page_raw)
2706 chip->ecc.read_page_raw = nand_read_page_raw_syndrome;
2707 if (!chip->ecc.write_page_raw)
2708 chip->ecc.write_page_raw = nand_write_page_raw_syndrome;
2605 if (!chip->ecc.read_oob) 2709 if (!chip->ecc.read_oob)
2606 chip->ecc.read_oob = nand_read_oob_syndrome; 2710 chip->ecc.read_oob = nand_read_oob_syndrome;
2607 if (!chip->ecc.write_oob) 2711 if (!chip->ecc.write_oob)
@@ -2620,6 +2724,8 @@ int nand_scan_tail(struct mtd_info *mtd)
2620 chip->ecc.read_page = nand_read_page_swecc; 2724 chip->ecc.read_page = nand_read_page_swecc;
2621 chip->ecc.read_subpage = nand_read_subpage; 2725 chip->ecc.read_subpage = nand_read_subpage;
2622 chip->ecc.write_page = nand_write_page_swecc; 2726 chip->ecc.write_page = nand_write_page_swecc;
2727 chip->ecc.read_page_raw = nand_read_page_raw;
2728 chip->ecc.write_page_raw = nand_write_page_raw;
2623 chip->ecc.read_oob = nand_read_oob_std; 2729 chip->ecc.read_oob = nand_read_oob_std;
2624 chip->ecc.write_oob = nand_write_oob_std; 2730 chip->ecc.write_oob = nand_write_oob_std;
2625 chip->ecc.size = 256; 2731 chip->ecc.size = 256;
@@ -2632,6 +2738,8 @@ int nand_scan_tail(struct mtd_info *mtd)
2632 chip->ecc.read_page = nand_read_page_raw; 2738 chip->ecc.read_page = nand_read_page_raw;
2633 chip->ecc.write_page = nand_write_page_raw; 2739 chip->ecc.write_page = nand_write_page_raw;
2634 chip->ecc.read_oob = nand_read_oob_std; 2740 chip->ecc.read_oob = nand_read_oob_std;
2741 chip->ecc.read_page_raw = nand_read_page_raw;
2742 chip->ecc.write_page_raw = nand_write_page_raw;
2635 chip->ecc.write_oob = nand_write_oob_std; 2743 chip->ecc.write_oob = nand_write_oob_std;
2636 chip->ecc.size = mtd->writesize; 2744 chip->ecc.size = mtd->writesize;
2637 chip->ecc.bytes = 0; 2745 chip->ecc.bytes = 0;
@@ -2676,6 +2784,7 @@ int nand_scan_tail(struct mtd_info *mtd)
2676 break; 2784 break;
2677 case 4: 2785 case 4:
2678 case 8: 2786 case 8:
2787 case 16:
2679 mtd->subpage_sft = 2; 2788 mtd->subpage_sft = 2;
2680 break; 2789 break;
2681 } 2790 }
diff --git a/drivers/mtd/nand/plat_nand.c b/drivers/mtd/nand/plat_nand.c
index 75f9f4874ecf..86e1d08eee00 100644
--- a/drivers/mtd/nand/plat_nand.c
+++ b/drivers/mtd/nand/plat_nand.c
@@ -30,7 +30,7 @@ struct plat_nand_data {
30/* 30/*
31 * Probe for the NAND device. 31 * Probe for the NAND device.
32 */ 32 */
33static int __init plat_nand_probe(struct platform_device *pdev) 33static int __devinit plat_nand_probe(struct platform_device *pdev)
34{ 34{
35 struct platform_nand_data *pdata = pdev->dev.platform_data; 35 struct platform_nand_data *pdata = pdev->dev.platform_data;
36 struct plat_nand_data *data; 36 struct plat_nand_data *data;
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 61b69cc40009..30a8ce6d3e69 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -170,7 +170,13 @@ static int use_dma = 1;
170module_param(use_dma, bool, 0444); 170module_param(use_dma, bool, 0444);
171MODULE_PARM_DESC(use_dma, "enable DMA for data transfering to/from NAND HW"); 171MODULE_PARM_DESC(use_dma, "enable DMA for data transfering to/from NAND HW");
172 172
173#ifdef CONFIG_MTD_NAND_PXA3xx_BUILTIN 173/*
174 * Default NAND flash controller configuration setup by the
175 * bootloader. This configuration is used only when pdata->keep_config is set
176 */
177static struct pxa3xx_nand_timing default_timing;
178static struct pxa3xx_nand_flash default_flash;
179
174static struct pxa3xx_nand_cmdset smallpage_cmdset = { 180static struct pxa3xx_nand_cmdset smallpage_cmdset = {
175 .read1 = 0x0000, 181 .read1 = 0x0000,
176 .read2 = 0x0050, 182 .read2 = 0x0050,
@@ -197,6 +203,7 @@ static struct pxa3xx_nand_cmdset largepage_cmdset = {
197 .lock_status = 0x007A, 203 .lock_status = 0x007A,
198}; 204};
199 205
206#ifdef CONFIG_MTD_NAND_PXA3xx_BUILTIN
200static struct pxa3xx_nand_timing samsung512MbX16_timing = { 207static struct pxa3xx_nand_timing samsung512MbX16_timing = {
201 .tCH = 10, 208 .tCH = 10,
202 .tCS = 0, 209 .tCS = 0,
@@ -296,9 +303,23 @@ static struct pxa3xx_nand_flash *builtin_flash_types[] = {
296#define NDTR1_tWHR(c) (min((c), 15) << 4) 303#define NDTR1_tWHR(c) (min((c), 15) << 4)
297#define NDTR1_tAR(c) (min((c), 15) << 0) 304#define NDTR1_tAR(c) (min((c), 15) << 0)
298 305
306#define tCH_NDTR0(r) (((r) >> 19) & 0x7)
307#define tCS_NDTR0(r) (((r) >> 16) & 0x7)
308#define tWH_NDTR0(r) (((r) >> 11) & 0x7)
309#define tWP_NDTR0(r) (((r) >> 8) & 0x7)
310#define tRH_NDTR0(r) (((r) >> 3) & 0x7)
311#define tRP_NDTR0(r) (((r) >> 0) & 0x7)
312
313#define tR_NDTR1(r) (((r) >> 16) & 0xffff)
314#define tWHR_NDTR1(r) (((r) >> 4) & 0xf)
315#define tAR_NDTR1(r) (((r) >> 0) & 0xf)
316
299/* convert nano-seconds to nand flash controller clock cycles */ 317/* convert nano-seconds to nand flash controller clock cycles */
300#define ns2cycle(ns, clk) (int)(((ns) * (clk / 1000000) / 1000) - 1) 318#define ns2cycle(ns, clk) (int)(((ns) * (clk / 1000000) / 1000) - 1)
301 319
320/* convert nand flash controller clock cycles to nano-seconds */
321#define cycle2ns(c, clk) ((((c) + 1) * 1000000 + clk / 500) / (clk / 1000))
322
302static void pxa3xx_nand_set_timing(struct pxa3xx_nand_info *info, 323static void pxa3xx_nand_set_timing(struct pxa3xx_nand_info *info,
303 const struct pxa3xx_nand_timing *t) 324 const struct pxa3xx_nand_timing *t)
304{ 325{
@@ -920,6 +941,82 @@ static int pxa3xx_nand_config_flash(struct pxa3xx_nand_info *info,
920 return 0; 941 return 0;
921} 942}
922 943
944static void pxa3xx_nand_detect_timing(struct pxa3xx_nand_info *info,
945 struct pxa3xx_nand_timing *t)
946{
947 unsigned long nand_clk = clk_get_rate(info->clk);
948 uint32_t ndtr0 = nand_readl(info, NDTR0CS0);
949 uint32_t ndtr1 = nand_readl(info, NDTR1CS0);
950
951 t->tCH = cycle2ns(tCH_NDTR0(ndtr0), nand_clk);
952 t->tCS = cycle2ns(tCS_NDTR0(ndtr0), nand_clk);
953 t->tWH = cycle2ns(tWH_NDTR0(ndtr0), nand_clk);
954 t->tWP = cycle2ns(tWP_NDTR0(ndtr0), nand_clk);
955 t->tRH = cycle2ns(tRH_NDTR0(ndtr0), nand_clk);
956 t->tRP = cycle2ns(tRP_NDTR0(ndtr0), nand_clk);
957
958 t->tR = cycle2ns(tR_NDTR1(ndtr1), nand_clk);
959 t->tWHR = cycle2ns(tWHR_NDTR1(ndtr1), nand_clk);
960 t->tAR = cycle2ns(tAR_NDTR1(ndtr1), nand_clk);
961}
962
963static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
964{
965 uint32_t ndcr = nand_readl(info, NDCR);
966 struct nand_flash_dev *type = NULL;
967 uint32_t id = -1;
968 int i;
969
970 default_flash.page_per_block = ndcr & NDCR_PG_PER_BLK ? 64 : 32;
971 default_flash.page_size = ndcr & NDCR_PAGE_SZ ? 2048 : 512;
972 default_flash.flash_width = ndcr & NDCR_DWIDTH_M ? 16 : 8;
973 default_flash.dfc_width = ndcr & NDCR_DWIDTH_C ? 16 : 8;
974
975 if (default_flash.page_size == 2048)
976 default_flash.cmdset = &largepage_cmdset;
977 else
978 default_flash.cmdset = &smallpage_cmdset;
979
980 /* set info fields needed to __readid */
981 info->flash_info = &default_flash;
982 info->read_id_bytes = (default_flash.page_size == 2048) ? 4 : 2;
983 info->reg_ndcr = ndcr;
984
985 if (__readid(info, &id))
986 return -ENODEV;
987
988 /* Lookup the flash id */
989 id = (id >> 8) & 0xff; /* device id is byte 2 */
990 for (i = 0; nand_flash_ids[i].name != NULL; i++) {
991 if (id == nand_flash_ids[i].id) {
992 type = &nand_flash_ids[i];
993 break;
994 }
995 }
996
997 if (!type)
998 return -ENODEV;
999
1000 /* fill the missing flash information */
1001 i = __ffs(default_flash.page_per_block * default_flash.page_size);
1002 default_flash.num_blocks = type->chipsize << (20 - i);
1003
1004 info->oob_size = (default_flash.page_size == 2048) ? 64 : 16;
1005
1006 /* calculate addressing information */
1007 info->col_addr_cycles = (default_flash.page_size == 2048) ? 2 : 1;
1008
1009 if (default_flash.num_blocks * default_flash.page_per_block > 65536)
1010 info->row_addr_cycles = 3;
1011 else
1012 info->row_addr_cycles = 2;
1013
1014 pxa3xx_nand_detect_timing(info, &default_timing);
1015 default_flash.timing = &default_timing;
1016
1017 return 0;
1018}
1019
923static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info, 1020static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info,
924 const struct pxa3xx_nand_platform_data *pdata) 1021 const struct pxa3xx_nand_platform_data *pdata)
925{ 1022{
@@ -927,6 +1024,10 @@ static int pxa3xx_nand_detect_flash(struct pxa3xx_nand_info *info,
927 uint32_t id = -1; 1024 uint32_t id = -1;
928 int i; 1025 int i;
929 1026
1027 if (pdata->keep_config)
1028 if (pxa3xx_nand_detect_config(info) == 0)
1029 return 0;
1030
930 for (i = 0; i<pdata->num_flash; ++i) { 1031 for (i = 0; i<pdata->num_flash; ++i) {
931 f = pdata->flash + i; 1032 f = pdata->flash + i;
932 1033
@@ -1078,6 +1179,7 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
1078 1179
1079 this = &info->nand_chip; 1180 this = &info->nand_chip;
1080 mtd->priv = info; 1181 mtd->priv = info;
1182 mtd->owner = THIS_MODULE;
1081 1183
1082 info->clk = clk_get(&pdev->dev, NULL); 1184 info->clk = clk_get(&pdev->dev, NULL);
1083 if (IS_ERR(info->clk)) { 1185 if (IS_ERR(info->clk)) {
@@ -1117,14 +1219,14 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
1117 goto fail_put_clk; 1219 goto fail_put_clk;
1118 } 1220 }
1119 1221
1120 r = request_mem_region(r->start, r->end - r->start + 1, pdev->name); 1222 r = request_mem_region(r->start, resource_size(r), pdev->name);
1121 if (r == NULL) { 1223 if (r == NULL) {
1122 dev_err(&pdev->dev, "failed to request memory resource\n"); 1224 dev_err(&pdev->dev, "failed to request memory resource\n");
1123 ret = -EBUSY; 1225 ret = -EBUSY;
1124 goto fail_put_clk; 1226 goto fail_put_clk;
1125 } 1227 }
1126 1228
1127 info->mmio_base = ioremap(r->start, r->end - r->start + 1); 1229 info->mmio_base = ioremap(r->start, resource_size(r));
1128 if (info->mmio_base == NULL) { 1230 if (info->mmio_base == NULL) {
1129 dev_err(&pdev->dev, "ioremap() failed\n"); 1231 dev_err(&pdev->dev, "ioremap() failed\n");
1130 ret = -ENODEV; 1232 ret = -ENODEV;
@@ -1173,7 +1275,7 @@ fail_free_buf:
1173fail_free_io: 1275fail_free_io:
1174 iounmap(info->mmio_base); 1276 iounmap(info->mmio_base);
1175fail_free_res: 1277fail_free_res:
1176 release_mem_region(r->start, r->end - r->start + 1); 1278 release_mem_region(r->start, resource_size(r));
1177fail_put_clk: 1279fail_put_clk:
1178 clk_disable(info->clk); 1280 clk_disable(info->clk);
1179 clk_put(info->clk); 1281 clk_put(info->clk);
@@ -1186,6 +1288,7 @@ static int pxa3xx_nand_remove(struct platform_device *pdev)
1186{ 1288{
1187 struct mtd_info *mtd = platform_get_drvdata(pdev); 1289 struct mtd_info *mtd = platform_get_drvdata(pdev);
1188 struct pxa3xx_nand_info *info = mtd->priv; 1290 struct pxa3xx_nand_info *info = mtd->priv;
1291 struct resource *r;
1189 1292
1190 platform_set_drvdata(pdev, NULL); 1293 platform_set_drvdata(pdev, NULL);
1191 1294
@@ -1198,6 +1301,14 @@ static int pxa3xx_nand_remove(struct platform_device *pdev)
1198 info->data_buff, info->data_buff_phys); 1301 info->data_buff, info->data_buff_phys);
1199 } else 1302 } else
1200 kfree(info->data_buff); 1303 kfree(info->data_buff);
1304
1305 iounmap(info->mmio_base);
1306 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1307 release_mem_region(r->start, resource_size(r));
1308
1309 clk_disable(info->clk);
1310 clk_put(info->clk);
1311
1201 kfree(mtd); 1312 kfree(mtd);
1202 return 0; 1313 return 0;
1203} 1314}
diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index 821acb08ff1c..2bc896623e2d 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -58,7 +58,7 @@ static struct nand_bbt_descr flctl_4secc_smallpage = {
58}; 58};
59 59
60static struct nand_bbt_descr flctl_4secc_largepage = { 60static struct nand_bbt_descr flctl_4secc_largepage = {
61 .options = 0, 61 .options = NAND_BBT_SCAN2NDPAGE,
62 .offs = 58, 62 .offs = 58,
63 .len = 2, 63 .len = 2,
64 .pattern = scan_ff_pattern, 64 .pattern = scan_ff_pattern,
@@ -149,7 +149,7 @@ static void wait_wfifo_ready(struct sh_flctl *flctl)
149 printk(KERN_ERR "wait_wfifo_ready(): Timeout occured \n"); 149 printk(KERN_ERR "wait_wfifo_ready(): Timeout occured \n");
150} 150}
151 151
152static int wait_recfifo_ready(struct sh_flctl *flctl) 152static int wait_recfifo_ready(struct sh_flctl *flctl, int sector_number)
153{ 153{
154 uint32_t timeout = LOOP_TIMEOUT_MAX; 154 uint32_t timeout = LOOP_TIMEOUT_MAX;
155 int checked[4]; 155 int checked[4];
@@ -183,7 +183,12 @@ static int wait_recfifo_ready(struct sh_flctl *flctl)
183 uint8_t org; 183 uint8_t org;
184 int index; 184 int index;
185 185
186 index = data >> 16; 186 if (flctl->page_size)
187 index = (512 * sector_number) +
188 (data >> 16);
189 else
190 index = data >> 16;
191
187 org = flctl->done_buff[index]; 192 org = flctl->done_buff[index];
188 flctl->done_buff[index] = org ^ (data & 0xFF); 193 flctl->done_buff[index] = org ^ (data & 0xFF);
189 checked[i] = 1; 194 checked[i] = 1;
@@ -238,14 +243,14 @@ static void read_fiforeg(struct sh_flctl *flctl, int rlen, int offset)
238 } 243 }
239} 244}
240 245
241static int read_ecfiforeg(struct sh_flctl *flctl, uint8_t *buff) 246static int read_ecfiforeg(struct sh_flctl *flctl, uint8_t *buff, int sector)
242{ 247{
243 int i; 248 int i;
244 unsigned long *ecc_buf = (unsigned long *)buff; 249 unsigned long *ecc_buf = (unsigned long *)buff;
245 void *fifo_addr = (void *)FLECFIFO(flctl); 250 void *fifo_addr = (void *)FLECFIFO(flctl);
246 251
247 for (i = 0; i < 4; i++) { 252 for (i = 0; i < 4; i++) {
248 if (wait_recfifo_ready(flctl)) 253 if (wait_recfifo_ready(flctl , sector))
249 return 1; 254 return 1;
250 ecc_buf[i] = readl(fifo_addr); 255 ecc_buf[i] = readl(fifo_addr);
251 ecc_buf[i] = be32_to_cpu(ecc_buf[i]); 256 ecc_buf[i] = be32_to_cpu(ecc_buf[i]);
@@ -384,7 +389,8 @@ static void execmd_read_page_sector(struct mtd_info *mtd, int page_addr)
384 read_fiforeg(flctl, 512, 512 * sector); 389 read_fiforeg(flctl, 512, 512 * sector);
385 390
386 ret = read_ecfiforeg(flctl, 391 ret = read_ecfiforeg(flctl,
387 &flctl->done_buff[mtd->writesize + 16 * sector]); 392 &flctl->done_buff[mtd->writesize + 16 * sector],
393 sector);
388 394
389 if (ret) 395 if (ret)
390 flctl->hwecc_cant_correct[sector] = 1; 396 flctl->hwecc_cant_correct[sector] = 1;
diff --git a/drivers/mtd/nand/socrates_nand.c b/drivers/mtd/nand/socrates_nand.c
new file mode 100644
index 000000000000..a4519a7bd683
--- /dev/null
+++ b/drivers/mtd/nand/socrates_nand.c
@@ -0,0 +1,325 @@
1/*
2 * drivers/mtd/nand/socrates_nand.c
3 *
4 * Copyright © 2008 Ilya Yanok, Emcraft Systems
5 *
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 */
12
13#include <linux/slab.h>
14#include <linux/module.h>
15#include <linux/mtd/mtd.h>
16#include <linux/mtd/nand.h>
17#include <linux/mtd/partitions.h>
18#include <linux/of_platform.h>
19#include <linux/io.h>
20
21#define FPGA_NAND_CMD_MASK (0x7 << 28)
22#define FPGA_NAND_CMD_COMMAND (0x0 << 28)
23#define FPGA_NAND_CMD_ADDR (0x1 << 28)
24#define FPGA_NAND_CMD_READ (0x2 << 28)
25#define FPGA_NAND_CMD_WRITE (0x3 << 28)
26#define FPGA_NAND_BUSY (0x1 << 15)
27#define FPGA_NAND_ENABLE (0x1 << 31)
28#define FPGA_NAND_DATA_SHIFT 16
29
30struct socrates_nand_host {
31 struct nand_chip nand_chip;
32 struct mtd_info mtd;
33 void __iomem *io_base;
34 struct device *dev;
35};
36
37/**
38 * socrates_nand_write_buf - write buffer to chip
39 * @mtd: MTD device structure
40 * @buf: data buffer
41 * @len: number of bytes to write
42 */
43static void socrates_nand_write_buf(struct mtd_info *mtd,
44 const uint8_t *buf, int len)
45{
46 int i;
47 struct nand_chip *this = mtd->priv;
48 struct socrates_nand_host *host = this->priv;
49
50 for (i = 0; i < len; i++) {
51 out_be32(host->io_base, FPGA_NAND_ENABLE |
52 FPGA_NAND_CMD_WRITE |
53 (buf[i] << FPGA_NAND_DATA_SHIFT));
54 }
55}
56
57/**
58 * socrates_nand_read_buf - read chip data into buffer
59 * @mtd: MTD device structure
60 * @buf: buffer to store date
61 * @len: number of bytes to read
62 */
63static void socrates_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
64{
65 int i;
66 struct nand_chip *this = mtd->priv;
67 struct socrates_nand_host *host = this->priv;
68 uint32_t val;
69
70 val = FPGA_NAND_ENABLE | FPGA_NAND_CMD_READ;
71
72 out_be32(host->io_base, val);
73 for (i = 0; i < len; i++) {
74 buf[i] = (in_be32(host->io_base) >>
75 FPGA_NAND_DATA_SHIFT) & 0xff;
76 }
77}
78
79/**
80 * socrates_nand_read_byte - read one byte from the chip
81 * @mtd: MTD device structure
82 */
83static uint8_t socrates_nand_read_byte(struct mtd_info *mtd)
84{
85 uint8_t byte;
86 socrates_nand_read_buf(mtd, &byte, sizeof(byte));
87 return byte;
88}
89
90/**
91 * socrates_nand_read_word - read one word from the chip
92 * @mtd: MTD device structure
93 */
94static uint16_t socrates_nand_read_word(struct mtd_info *mtd)
95{
96 uint16_t word;
97 socrates_nand_read_buf(mtd, (uint8_t *)&word, sizeof(word));
98 return word;
99}
100
101/**
102 * socrates_nand_verify_buf - Verify chip data against buffer
103 * @mtd: MTD device structure
104 * @buf: buffer containing the data to compare
105 * @len: number of bytes to compare
106 */
107static int socrates_nand_verify_buf(struct mtd_info *mtd, const u8 *buf,
108 int len)
109{
110 int i;
111
112 for (i = 0; i < len; i++) {
113 if (buf[i] != socrates_nand_read_byte(mtd))
114 return -EFAULT;
115 }
116 return 0;
117}
118
119/*
120 * Hardware specific access to control-lines
121 */
122static void socrates_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
123 unsigned int ctrl)
124{
125 struct nand_chip *nand_chip = mtd->priv;
126 struct socrates_nand_host *host = nand_chip->priv;
127 uint32_t val;
128
129 if (cmd == NAND_CMD_NONE)
130 return;
131
132 if (ctrl & NAND_CLE)
133 val = FPGA_NAND_CMD_COMMAND;
134 else
135 val = FPGA_NAND_CMD_ADDR;
136
137 if (ctrl & NAND_NCE)
138 val |= FPGA_NAND_ENABLE;
139
140 val |= (cmd & 0xff) << FPGA_NAND_DATA_SHIFT;
141
142 out_be32(host->io_base, val);
143}
144
145/*
146 * Read the Device Ready pin.
147 */
148static int socrates_nand_device_ready(struct mtd_info *mtd)
149{
150 struct nand_chip *nand_chip = mtd->priv;
151 struct socrates_nand_host *host = nand_chip->priv;
152
153 if (in_be32(host->io_base) & FPGA_NAND_BUSY)
154 return 0; /* busy */
155 return 1;
156}
157
158#ifdef CONFIG_MTD_PARTITIONS
159static const char *part_probes[] = { "cmdlinepart", NULL };
160#endif
161
162/*
163 * Probe for the NAND device.
164 */
165static int __devinit socrates_nand_probe(struct of_device *ofdev,
166 const struct of_device_id *ofid)
167{
168 struct socrates_nand_host *host;
169 struct mtd_info *mtd;
170 struct nand_chip *nand_chip;
171 int res;
172
173#ifdef CONFIG_MTD_PARTITIONS
174 struct mtd_partition *partitions = NULL;
175 int num_partitions = 0;
176#endif
177
178 /* Allocate memory for the device structure (and zero it) */
179 host = kzalloc(sizeof(struct socrates_nand_host), GFP_KERNEL);
180 if (!host) {
181 printk(KERN_ERR
182 "socrates_nand: failed to allocate device structure.\n");
183 return -ENOMEM;
184 }
185
186 host->io_base = of_iomap(ofdev->node, 0);
187 if (host->io_base == NULL) {
188 printk(KERN_ERR "socrates_nand: ioremap failed\n");
189 kfree(host);
190 return -EIO;
191 }
192
193 mtd = &host->mtd;
194 nand_chip = &host->nand_chip;
195 host->dev = &ofdev->dev;
196
197 nand_chip->priv = host; /* link the private data structures */
198 mtd->priv = nand_chip;
199 mtd->name = "socrates_nand";
200 mtd->owner = THIS_MODULE;
201 mtd->dev.parent = &ofdev->dev;
202
203 /*should never be accessed directly */
204 nand_chip->IO_ADDR_R = (void *)0xdeadbeef;
205 nand_chip->IO_ADDR_W = (void *)0xdeadbeef;
206
207 nand_chip->cmd_ctrl = socrates_nand_cmd_ctrl;
208 nand_chip->read_byte = socrates_nand_read_byte;
209 nand_chip->read_word = socrates_nand_read_word;
210 nand_chip->write_buf = socrates_nand_write_buf;
211 nand_chip->read_buf = socrates_nand_read_buf;
212 nand_chip->verify_buf = socrates_nand_verify_buf;
213 nand_chip->dev_ready = socrates_nand_device_ready;
214
215 nand_chip->ecc.mode = NAND_ECC_SOFT; /* enable ECC */
216
217 /* TODO: I have no idea what real delay is. */
218 nand_chip->chip_delay = 20; /* 20us command delay time */
219
220 dev_set_drvdata(&ofdev->dev, host);
221
222 /* first scan to find the device and get the page size */
223 if (nand_scan_ident(mtd, 1)) {
224 res = -ENXIO;
225 goto out;
226 }
227
228 /* second phase scan */
229 if (nand_scan_tail(mtd)) {
230 res = -ENXIO;
231 goto out;
232 }
233
234#ifdef CONFIG_MTD_PARTITIONS
235#ifdef CONFIG_MTD_CMDLINE_PARTS
236 num_partitions = parse_mtd_partitions(mtd, part_probes,
237 &partitions, 0);
238 if (num_partitions < 0) {
239 res = num_partitions;
240 goto release;
241 }
242#endif
243
244#ifdef CONFIG_MTD_OF_PARTS
245 if (num_partitions == 0) {
246 num_partitions = of_mtd_parse_partitions(&ofdev->dev,
247 ofdev->node,
248 &partitions);
249 if (num_partitions < 0) {
250 res = num_partitions;
251 goto release;
252 }
253 }
254#endif
255 if (partitions && (num_partitions > 0))
256 res = add_mtd_partitions(mtd, partitions, num_partitions);
257 else
258#endif
259 res = add_mtd_device(mtd);
260
261 if (!res)
262 return res;
263
264#ifdef CONFIG_MTD_PARTITIONS
265release:
266#endif
267 nand_release(mtd);
268
269out:
270 dev_set_drvdata(&ofdev->dev, NULL);
271 iounmap(host->io_base);
272 kfree(host);
273 return res;
274}
275
276/*
277 * Remove a NAND device.
278 */
279static int __devexit socrates_nand_remove(struct of_device *ofdev)
280{
281 struct socrates_nand_host *host = dev_get_drvdata(&ofdev->dev);
282 struct mtd_info *mtd = &host->mtd;
283
284 nand_release(mtd);
285
286 dev_set_drvdata(&ofdev->dev, NULL);
287 iounmap(host->io_base);
288 kfree(host);
289
290 return 0;
291}
292
293static struct of_device_id socrates_nand_match[] =
294{
295 {
296 .compatible = "abb,socrates-nand",
297 },
298 {},
299};
300
301MODULE_DEVICE_TABLE(of, socrates_nand_match);
302
303static struct of_platform_driver socrates_nand_driver = {
304 .name = "socrates_nand",
305 .match_table = socrates_nand_match,
306 .probe = socrates_nand_probe,
307 .remove = __devexit_p(socrates_nand_remove),
308};
309
310static int __init socrates_nand_init(void)
311{
312 return of_register_platform_driver(&socrates_nand_driver);
313}
314
315static void __exit socrates_nand_exit(void)
316{
317 of_unregister_platform_driver(&socrates_nand_driver);
318}
319
320module_init(socrates_nand_init);
321module_exit(socrates_nand_exit);
322
323MODULE_LICENSE("GPL");
324MODULE_AUTHOR("Ilya Yanok");
325MODULE_DESCRIPTION("NAND driver for Socrates board");
diff --git a/drivers/mtd/nand/txx9ndfmc.c b/drivers/mtd/nand/txx9ndfmc.c
new file mode 100644
index 000000000000..812479264896
--- /dev/null
+++ b/drivers/mtd/nand/txx9ndfmc.c
@@ -0,0 +1,428 @@
1/*
2 * TXx9 NAND flash memory controller driver
3 * Based on RBTX49xx patch from CELF patch archive.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * (C) Copyright TOSHIBA CORPORATION 2004-2007
10 * All Rights Reserved.
11 */
12#include <linux/init.h>
13#include <linux/slab.h>
14#include <linux/module.h>
15#include <linux/platform_device.h>
16#include <linux/delay.h>
17#include <linux/mtd/mtd.h>
18#include <linux/mtd/nand.h>
19#include <linux/mtd/nand_ecc.h>
20#include <linux/mtd/partitions.h>
21#include <linux/io.h>
22#include <asm/txx9/ndfmc.h>
23
24/* TXX9 NDFMC Registers */
25#define TXX9_NDFDTR 0x00
26#define TXX9_NDFMCR 0x04
27#define TXX9_NDFSR 0x08
28#define TXX9_NDFISR 0x0c
29#define TXX9_NDFIMR 0x10
30#define TXX9_NDFSPR 0x14
31#define TXX9_NDFRSTR 0x18 /* not TX4939 */
32
33/* NDFMCR : NDFMC Mode Control */
34#define TXX9_NDFMCR_WE 0x80
35#define TXX9_NDFMCR_ECC_ALL 0x60
36#define TXX9_NDFMCR_ECC_RESET 0x60
37#define TXX9_NDFMCR_ECC_READ 0x40
38#define TXX9_NDFMCR_ECC_ON 0x20
39#define TXX9_NDFMCR_ECC_OFF 0x00
40#define TXX9_NDFMCR_CE 0x10
41#define TXX9_NDFMCR_BSPRT 0x04 /* TX4925/TX4926 only */
42#define TXX9_NDFMCR_ALE 0x02
43#define TXX9_NDFMCR_CLE 0x01
44/* TX4939 only */
45#define TXX9_NDFMCR_X16 0x0400
46#define TXX9_NDFMCR_DMAREQ_MASK 0x0300
47#define TXX9_NDFMCR_DMAREQ_NODMA 0x0000
48#define TXX9_NDFMCR_DMAREQ_128 0x0100
49#define TXX9_NDFMCR_DMAREQ_256 0x0200
50#define TXX9_NDFMCR_DMAREQ_512 0x0300
51#define TXX9_NDFMCR_CS_MASK 0x0c
52#define TXX9_NDFMCR_CS(ch) ((ch) << 2)
53
54/* NDFMCR : NDFMC Status */
55#define TXX9_NDFSR_BUSY 0x80
56/* TX4939 only */
57#define TXX9_NDFSR_DMARUN 0x40
58
59/* NDFMCR : NDFMC Reset */
60#define TXX9_NDFRSTR_RST 0x01
61
62struct txx9ndfmc_priv {
63 struct platform_device *dev;
64 struct nand_chip chip;
65 struct mtd_info mtd;
66 int cs;
67 char mtdname[BUS_ID_SIZE + 2];
68};
69
70#define MAX_TXX9NDFMC_DEV 4
71struct txx9ndfmc_drvdata {
72 struct mtd_info *mtds[MAX_TXX9NDFMC_DEV];
73 void __iomem *base;
74 unsigned char hold; /* in gbusclock */
75 unsigned char spw; /* in gbusclock */
76 struct nand_hw_control hw_control;
77#ifdef CONFIG_MTD_PARTITIONS
78 struct mtd_partition *parts[MAX_TXX9NDFMC_DEV];
79#endif
80};
81
82static struct platform_device *mtd_to_platdev(struct mtd_info *mtd)
83{
84 struct nand_chip *chip = mtd->priv;
85 struct txx9ndfmc_priv *txx9_priv = chip->priv;
86 return txx9_priv->dev;
87}
88
89static void __iomem *ndregaddr(struct platform_device *dev, unsigned int reg)
90{
91 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev);
92 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data;
93
94 return drvdata->base + (reg << plat->shift);
95}
96
97static u32 txx9ndfmc_read(struct platform_device *dev, unsigned int reg)
98{
99 return __raw_readl(ndregaddr(dev, reg));
100}
101
102static void txx9ndfmc_write(struct platform_device *dev,
103 u32 val, unsigned int reg)
104{
105 __raw_writel(val, ndregaddr(dev, reg));
106}
107
108static uint8_t txx9ndfmc_read_byte(struct mtd_info *mtd)
109{
110 struct platform_device *dev = mtd_to_platdev(mtd);
111
112 return txx9ndfmc_read(dev, TXX9_NDFDTR);
113}
114
115static void txx9ndfmc_write_buf(struct mtd_info *mtd, const uint8_t *buf,
116 int len)
117{
118 struct platform_device *dev = mtd_to_platdev(mtd);
119 void __iomem *ndfdtr = ndregaddr(dev, TXX9_NDFDTR);
120 u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR);
121
122 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_WE, TXX9_NDFMCR);
123 while (len--)
124 __raw_writel(*buf++, ndfdtr);
125 txx9ndfmc_write(dev, mcr, TXX9_NDFMCR);
126}
127
128static void txx9ndfmc_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
129{
130 struct platform_device *dev = mtd_to_platdev(mtd);
131 void __iomem *ndfdtr = ndregaddr(dev, TXX9_NDFDTR);
132
133 while (len--)
134 *buf++ = __raw_readl(ndfdtr);
135}
136
137static int txx9ndfmc_verify_buf(struct mtd_info *mtd, const uint8_t *buf,
138 int len)
139{
140 struct platform_device *dev = mtd_to_platdev(mtd);
141 void __iomem *ndfdtr = ndregaddr(dev, TXX9_NDFDTR);
142
143 while (len--)
144 if (*buf++ != (uint8_t)__raw_readl(ndfdtr))
145 return -EFAULT;
146 return 0;
147}
148
149static void txx9ndfmc_cmd_ctrl(struct mtd_info *mtd, int cmd,
150 unsigned int ctrl)
151{
152 struct nand_chip *chip = mtd->priv;
153 struct txx9ndfmc_priv *txx9_priv = chip->priv;
154 struct platform_device *dev = txx9_priv->dev;
155 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data;
156
157 if (ctrl & NAND_CTRL_CHANGE) {
158 u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR);
159
160 mcr &= ~(TXX9_NDFMCR_CLE | TXX9_NDFMCR_ALE | TXX9_NDFMCR_CE);
161 mcr |= ctrl & NAND_CLE ? TXX9_NDFMCR_CLE : 0;
162 mcr |= ctrl & NAND_ALE ? TXX9_NDFMCR_ALE : 0;
163 /* TXX9_NDFMCR_CE bit is 0:high 1:low */
164 mcr |= ctrl & NAND_NCE ? TXX9_NDFMCR_CE : 0;
165 if (txx9_priv->cs >= 0 && (ctrl & NAND_NCE)) {
166 mcr &= ~TXX9_NDFMCR_CS_MASK;
167 mcr |= TXX9_NDFMCR_CS(txx9_priv->cs);
168 }
169 txx9ndfmc_write(dev, mcr, TXX9_NDFMCR);
170 }
171 if (cmd != NAND_CMD_NONE)
172 txx9ndfmc_write(dev, cmd & 0xff, TXX9_NDFDTR);
173 if (plat->flags & NDFMC_PLAT_FLAG_DUMMYWRITE) {
174 /* dummy write to update external latch */
175 if ((ctrl & NAND_CTRL_CHANGE) && cmd == NAND_CMD_NONE)
176 txx9ndfmc_write(dev, 0, TXX9_NDFDTR);
177 }
178 mmiowb();
179}
180
181static int txx9ndfmc_dev_ready(struct mtd_info *mtd)
182{
183 struct platform_device *dev = mtd_to_platdev(mtd);
184
185 return !(txx9ndfmc_read(dev, TXX9_NDFSR) & TXX9_NDFSR_BUSY);
186}
187
188static int txx9ndfmc_calculate_ecc(struct mtd_info *mtd, const uint8_t *dat,
189 uint8_t *ecc_code)
190{
191 struct platform_device *dev = mtd_to_platdev(mtd);
192 u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR);
193
194 mcr &= ~TXX9_NDFMCR_ECC_ALL;
195 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_OFF, TXX9_NDFMCR);
196 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_READ, TXX9_NDFMCR);
197 ecc_code[1] = txx9ndfmc_read(dev, TXX9_NDFDTR);
198 ecc_code[0] = txx9ndfmc_read(dev, TXX9_NDFDTR);
199 ecc_code[2] = txx9ndfmc_read(dev, TXX9_NDFDTR);
200 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_OFF, TXX9_NDFMCR);
201 return 0;
202}
203
204static void txx9ndfmc_enable_hwecc(struct mtd_info *mtd, int mode)
205{
206 struct platform_device *dev = mtd_to_platdev(mtd);
207 u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR);
208
209 mcr &= ~TXX9_NDFMCR_ECC_ALL;
210 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_RESET, TXX9_NDFMCR);
211 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_OFF, TXX9_NDFMCR);
212 txx9ndfmc_write(dev, mcr | TXX9_NDFMCR_ECC_ON, TXX9_NDFMCR);
213}
214
215static void txx9ndfmc_initialize(struct platform_device *dev)
216{
217 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data;
218 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev);
219 int tmout = 100;
220
221 if (plat->flags & NDFMC_PLAT_FLAG_NO_RSTR)
222 ; /* no NDFRSTR. Write to NDFSPR resets the NDFMC. */
223 else {
224 /* reset NDFMC */
225 txx9ndfmc_write(dev,
226 txx9ndfmc_read(dev, TXX9_NDFRSTR) |
227 TXX9_NDFRSTR_RST,
228 TXX9_NDFRSTR);
229 while (txx9ndfmc_read(dev, TXX9_NDFRSTR) & TXX9_NDFRSTR_RST) {
230 if (--tmout == 0) {
231 dev_err(&dev->dev, "reset failed.\n");
232 break;
233 }
234 udelay(1);
235 }
236 }
237 /* setup Hold Time, Strobe Pulse Width */
238 txx9ndfmc_write(dev, (drvdata->hold << 4) | drvdata->spw, TXX9_NDFSPR);
239 txx9ndfmc_write(dev,
240 (plat->flags & NDFMC_PLAT_FLAG_USE_BSPRT) ?
241 TXX9_NDFMCR_BSPRT : 0, TXX9_NDFMCR);
242}
243
244#define TXX9NDFMC_NS_TO_CYC(gbusclk, ns) \
245 DIV_ROUND_UP((ns) * DIV_ROUND_UP(gbusclk, 1000), 1000000)
246
247static int __init txx9ndfmc_probe(struct platform_device *dev)
248{
249 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data;
250#ifdef CONFIG_MTD_PARTITIONS
251 static const char *probes[] = { "cmdlinepart", NULL };
252#endif
253 int hold, spw;
254 int i;
255 struct txx9ndfmc_drvdata *drvdata;
256 unsigned long gbusclk = plat->gbus_clock;
257 struct resource *res;
258
259 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
260 if (!res)
261 return -ENODEV;
262 drvdata = devm_kzalloc(&dev->dev, sizeof(*drvdata), GFP_KERNEL);
263 if (!drvdata)
264 return -ENOMEM;
265 if (!devm_request_mem_region(&dev->dev, res->start,
266 resource_size(res), dev_name(&dev->dev)))
267 return -EBUSY;
268 drvdata->base = devm_ioremap(&dev->dev, res->start,
269 resource_size(res));
270 if (!drvdata->base)
271 return -EBUSY;
272
273 hold = plat->hold ?: 20; /* tDH */
274 spw = plat->spw ?: 90; /* max(tREADID, tWP, tRP) */
275
276 hold = TXX9NDFMC_NS_TO_CYC(gbusclk, hold);
277 spw = TXX9NDFMC_NS_TO_CYC(gbusclk, spw);
278 if (plat->flags & NDFMC_PLAT_FLAG_HOLDADD)
279 hold -= 2; /* actual hold time : (HOLD + 2) BUSCLK */
280 spw -= 1; /* actual wait time : (SPW + 1) BUSCLK */
281 hold = clamp(hold, 1, 15);
282 drvdata->hold = hold;
283 spw = clamp(spw, 1, 15);
284 drvdata->spw = spw;
285 dev_info(&dev->dev, "CLK:%ldMHz HOLD:%d SPW:%d\n",
286 (gbusclk + 500000) / 1000000, hold, spw);
287
288 spin_lock_init(&drvdata->hw_control.lock);
289 init_waitqueue_head(&drvdata->hw_control.wq);
290
291 platform_set_drvdata(dev, drvdata);
292 txx9ndfmc_initialize(dev);
293
294 for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) {
295 struct txx9ndfmc_priv *txx9_priv;
296 struct nand_chip *chip;
297 struct mtd_info *mtd;
298#ifdef CONFIG_MTD_PARTITIONS
299 int nr_parts;
300#endif
301
302 if (!(plat->ch_mask & (1 << i)))
303 continue;
304 txx9_priv = kzalloc(sizeof(struct txx9ndfmc_priv),
305 GFP_KERNEL);
306 if (!txx9_priv) {
307 dev_err(&dev->dev, "Unable to allocate "
308 "TXx9 NDFMC MTD device structure.\n");
309 continue;
310 }
311 chip = &txx9_priv->chip;
312 mtd = &txx9_priv->mtd;
313 mtd->owner = THIS_MODULE;
314
315 mtd->priv = chip;
316
317 chip->read_byte = txx9ndfmc_read_byte;
318 chip->read_buf = txx9ndfmc_read_buf;
319 chip->write_buf = txx9ndfmc_write_buf;
320 chip->verify_buf = txx9ndfmc_verify_buf;
321 chip->cmd_ctrl = txx9ndfmc_cmd_ctrl;
322 chip->dev_ready = txx9ndfmc_dev_ready;
323 chip->ecc.calculate = txx9ndfmc_calculate_ecc;
324 chip->ecc.correct = nand_correct_data;
325 chip->ecc.hwctl = txx9ndfmc_enable_hwecc;
326 chip->ecc.mode = NAND_ECC_HW;
327 chip->ecc.size = 256;
328 chip->ecc.bytes = 3;
329 chip->chip_delay = 100;
330 chip->controller = &drvdata->hw_control;
331
332 chip->priv = txx9_priv;
333 txx9_priv->dev = dev;
334
335 if (plat->ch_mask != 1) {
336 txx9_priv->cs = i;
337 sprintf(txx9_priv->mtdname, "%s.%u",
338 dev_name(&dev->dev), i);
339 } else {
340 txx9_priv->cs = -1;
341 strcpy(txx9_priv->mtdname, dev_name(&dev->dev));
342 }
343 if (plat->wide_mask & (1 << i))
344 chip->options |= NAND_BUSWIDTH_16;
345
346 if (nand_scan(mtd, 1)) {
347 kfree(txx9_priv);
348 continue;
349 }
350 mtd->name = txx9_priv->mtdname;
351
352#ifdef CONFIG_MTD_PARTITIONS
353 nr_parts = parse_mtd_partitions(mtd, probes,
354 &drvdata->parts[i], 0);
355 if (nr_parts > 0)
356 add_mtd_partitions(mtd, drvdata->parts[i], nr_parts);
357#endif
358 add_mtd_device(mtd);
359 drvdata->mtds[i] = mtd;
360 }
361
362 return 0;
363}
364
365static int __exit txx9ndfmc_remove(struct platform_device *dev)
366{
367 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev);
368 int i;
369
370 platform_set_drvdata(dev, NULL);
371 if (!drvdata)
372 return 0;
373 for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) {
374 struct mtd_info *mtd = drvdata->mtds[i];
375 struct nand_chip *chip;
376 struct txx9ndfmc_priv *txx9_priv;
377
378 if (!mtd)
379 continue;
380 chip = mtd->priv;
381 txx9_priv = chip->priv;
382
383#ifdef CONFIG_MTD_PARTITIONS
384 del_mtd_partitions(mtd);
385 kfree(drvdata->parts[i]);
386#endif
387 del_mtd_device(mtd);
388 kfree(txx9_priv);
389 }
390 return 0;
391}
392
393#ifdef CONFIG_PM
394static int txx9ndfmc_resume(struct platform_device *dev)
395{
396 if (platform_get_drvdata(dev))
397 txx9ndfmc_initialize(dev);
398 return 0;
399}
400#else
401#define txx9ndfmc_resume NULL
402#endif
403
404static struct platform_driver txx9ndfmc_driver = {
405 .remove = __exit_p(txx9ndfmc_remove),
406 .resume = txx9ndfmc_resume,
407 .driver = {
408 .name = "txx9ndfmc",
409 .owner = THIS_MODULE,
410 },
411};
412
413static int __init txx9ndfmc_init(void)
414{
415 return platform_driver_probe(&txx9ndfmc_driver, txx9ndfmc_probe);
416}
417
418static void __exit txx9ndfmc_exit(void)
419{
420 platform_driver_unregister(&txx9ndfmc_driver);
421}
422
423module_init(txx9ndfmc_init);
424module_exit(txx9ndfmc_exit);
425
426MODULE_LICENSE("GPL");
427MODULE_DESCRIPTION("TXx9 SoC NAND flash controller driver");
428MODULE_ALIAS("platform:txx9ndfmc");
diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c
index d1c4546513f7..e3f8495a94c2 100644
--- a/drivers/mtd/nftlcore.c
+++ b/drivers/mtd/nftlcore.c
@@ -15,11 +15,11 @@
15#include <asm/errno.h> 15#include <asm/errno.h>
16#include <asm/io.h> 16#include <asm/io.h>
17#include <asm/uaccess.h> 17#include <asm/uaccess.h>
18#include <linux/miscdevice.h>
19#include <linux/delay.h> 18#include <linux/delay.h>
20#include <linux/slab.h> 19#include <linux/slab.h>
21#include <linux/init.h> 20#include <linux/init.h>
22#include <linux/hdreg.h> 21#include <linux/hdreg.h>
22#include <linux/blkdev.h>
23 23
24#include <linux/kmod.h> 24#include <linux/kmod.h>
25#include <linux/mtd/mtd.h> 25#include <linux/mtd/mtd.h>
@@ -818,3 +818,4 @@ module_exit(cleanup_nftl);
818MODULE_LICENSE("GPL"); 818MODULE_LICENSE("GPL");
819MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>, Fabrice Bellard <fabrice.bellard@netgem.com> et al."); 819MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>, Fabrice Bellard <fabrice.bellard@netgem.com> et al.");
820MODULE_DESCRIPTION("Support code for NAND Flash Translation Layer, used on M-Systems DiskOnChip 2000 and Millennium"); 820MODULE_DESCRIPTION("Support code for NAND Flash Translation Layer, used on M-Systems DiskOnChip 2000 and Millennium");
821MODULE_ALIAS_BLOCKDEV_MAJOR(NFTL_MAJOR);
diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c
index 9e45b3f39c0e..3e164f0c9295 100644
--- a/drivers/mtd/ofpart.c
+++ b/drivers/mtd/ofpart.c
@@ -46,6 +46,13 @@ int __devinit of_mtd_parse_partitions(struct device *dev,
46 const u32 *reg; 46 const u32 *reg;
47 int len; 47 int len;
48 48
49 /* check if this is a partition node */
50 partname = of_get_property(pp, "name", &len);
51 if (strcmp(partname, "partition") != 0) {
52 nr_parts--;
53 continue;
54 }
55
49 reg = of_get_property(pp, "reg", &len); 56 reg = of_get_property(pp, "reg", &len);
50 if (!reg || (len != 2 * sizeof(u32))) { 57 if (!reg || (len != 2 * sizeof(u32))) {
51 of_node_put(pp); 58 of_node_put(pp);
diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
index 77a4f1446156..f2e9de1414df 100644
--- a/drivers/mtd/onenand/omap2.c
+++ b/drivers/mtd/onenand/omap2.c
@@ -294,6 +294,10 @@ static int omap3_onenand_read_bufferram(struct mtd_info *mtd, int area,
294 if (bram_offset & 3 || (size_t)buf & 3 || count < 384) 294 if (bram_offset & 3 || (size_t)buf & 3 || count < 384)
295 goto out_copy; 295 goto out_copy;
296 296
297 /* panic_write() may be in an interrupt context */
298 if (in_interrupt())
299 goto out_copy;
300
297 if (buf >= high_memory) { 301 if (buf >= high_memory) {
298 struct page *p1; 302 struct page *p1;
299 303
@@ -672,6 +676,8 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)
672 c->mtd.priv = &c->onenand; 676 c->mtd.priv = &c->onenand;
673 c->mtd.owner = THIS_MODULE; 677 c->mtd.owner = THIS_MODULE;
674 678
679 c->mtd.dev.parent = &pdev->dev;
680
675 if (c->dma_channel >= 0) { 681 if (c->dma_channel >= 0) {
676 struct onenand_chip *this = &c->onenand; 682 struct onenand_chip *this = &c->onenand;
677 683
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 529af271db17..30d6999e5f9f 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -1455,7 +1455,8 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to,
1455 struct mtd_oob_ops *ops) 1455 struct mtd_oob_ops *ops)
1456{ 1456{
1457 struct onenand_chip *this = mtd->priv; 1457 struct onenand_chip *this = mtd->priv;
1458 int written = 0, column, thislen, subpage; 1458 int written = 0, column, thislen = 0, subpage = 0;
1459 int prev = 0, prevlen = 0, prev_subpage = 0, first = 1;
1459 int oobwritten = 0, oobcolumn, thisooblen, oobsize; 1460 int oobwritten = 0, oobcolumn, thisooblen, oobsize;
1460 size_t len = ops->len; 1461 size_t len = ops->len;
1461 size_t ooblen = ops->ooblen; 1462 size_t ooblen = ops->ooblen;
@@ -1482,6 +1483,10 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to,
1482 return -EINVAL; 1483 return -EINVAL;
1483 } 1484 }
1484 1485
1486 /* Check zero length */
1487 if (!len)
1488 return 0;
1489
1485 if (ops->mode == MTD_OOB_AUTO) 1490 if (ops->mode == MTD_OOB_AUTO)
1486 oobsize = this->ecclayout->oobavail; 1491 oobsize = this->ecclayout->oobavail;
1487 else 1492 else
@@ -1492,79 +1497,121 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to,
1492 column = to & (mtd->writesize - 1); 1497 column = to & (mtd->writesize - 1);
1493 1498
1494 /* Loop until all data write */ 1499 /* Loop until all data write */
1495 while (written < len) { 1500 while (1) {
1496 u_char *wbuf = (u_char *) buf; 1501 if (written < len) {
1502 u_char *wbuf = (u_char *) buf;
1497 1503
1498 thislen = min_t(int, mtd->writesize - column, len - written); 1504 thislen = min_t(int, mtd->writesize - column, len - written);
1499 thisooblen = min_t(int, oobsize - oobcolumn, ooblen - oobwritten); 1505 thisooblen = min_t(int, oobsize - oobcolumn, ooblen - oobwritten);
1500 1506
1501 cond_resched(); 1507 cond_resched();
1502 1508
1503 this->command(mtd, ONENAND_CMD_BUFFERRAM, to, thislen); 1509 this->command(mtd, ONENAND_CMD_BUFFERRAM, to, thislen);
1504 1510
1505 /* Partial page write */ 1511 /* Partial page write */
1506 subpage = thislen < mtd->writesize; 1512 subpage = thislen < mtd->writesize;
1507 if (subpage) { 1513 if (subpage) {
1508 memset(this->page_buf, 0xff, mtd->writesize); 1514 memset(this->page_buf, 0xff, mtd->writesize);
1509 memcpy(this->page_buf + column, buf, thislen); 1515 memcpy(this->page_buf + column, buf, thislen);
1510 wbuf = this->page_buf; 1516 wbuf = this->page_buf;
1511 } 1517 }
1512 1518
1513 this->write_bufferram(mtd, ONENAND_DATARAM, wbuf, 0, mtd->writesize); 1519 this->write_bufferram(mtd, ONENAND_DATARAM, wbuf, 0, mtd->writesize);
1514 1520
1515 if (oob) { 1521 if (oob) {
1516 oobbuf = this->oob_buf; 1522 oobbuf = this->oob_buf;
1517 1523
1518 /* We send data to spare ram with oobsize 1524 /* We send data to spare ram with oobsize
1519 * to prevent byte access */ 1525 * to prevent byte access */
1520 memset(oobbuf, 0xff, mtd->oobsize); 1526 memset(oobbuf, 0xff, mtd->oobsize);
1521 if (ops->mode == MTD_OOB_AUTO) 1527 if (ops->mode == MTD_OOB_AUTO)
1522 onenand_fill_auto_oob(mtd, oobbuf, oob, oobcolumn, thisooblen); 1528 onenand_fill_auto_oob(mtd, oobbuf, oob, oobcolumn, thisooblen);
1523 else 1529 else
1524 memcpy(oobbuf + oobcolumn, oob, thisooblen); 1530 memcpy(oobbuf + oobcolumn, oob, thisooblen);
1525 1531
1526 oobwritten += thisooblen; 1532 oobwritten += thisooblen;
1527 oob += thisooblen; 1533 oob += thisooblen;
1528 oobcolumn = 0; 1534 oobcolumn = 0;
1535 } else
1536 oobbuf = (u_char *) ffchars;
1537
1538 this->write_bufferram(mtd, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize);
1529 } else 1539 } else
1530 oobbuf = (u_char *) ffchars; 1540 ONENAND_SET_NEXT_BUFFERRAM(this);
1531 1541
1532 this->write_bufferram(mtd, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize); 1542 /*
1543 * 2 PLANE, MLC, and Flex-OneNAND doesn't support
1544 * write-while-programe feature.
1545 */
1546 if (!ONENAND_IS_2PLANE(this) && !first) {
1547 ONENAND_SET_PREV_BUFFERRAM(this);
1533 1548
1534 this->command(mtd, ONENAND_CMD_PROG, to, mtd->writesize); 1549 ret = this->wait(mtd, FL_WRITING);
1535 1550
1536 ret = this->wait(mtd, FL_WRITING); 1551 /* In partial page write we don't update bufferram */
1552 onenand_update_bufferram(mtd, prev, !ret && !prev_subpage);
1553 if (ret) {
1554 written -= prevlen;
1555 printk(KERN_ERR "onenand_write_ops_nolock: write filaed %d\n", ret);
1556 break;
1557 }
1537 1558
1538 /* In partial page write we don't update bufferram */ 1559 if (written == len) {
1539 onenand_update_bufferram(mtd, to, !ret && !subpage); 1560 /* Only check verify write turn on */
1540 if (ONENAND_IS_2PLANE(this)) { 1561 ret = onenand_verify(mtd, buf - len, to - len, len);
1541 ONENAND_SET_BUFFERRAM1(this); 1562 if (ret)
1542 onenand_update_bufferram(mtd, to + this->writesize, !ret && !subpage); 1563 printk(KERN_ERR "onenand_write_ops_nolock: verify failed %d\n", ret);
1543 } 1564 break;
1565 }
1544 1566
1545 if (ret) { 1567 ONENAND_SET_NEXT_BUFFERRAM(this);
1546 printk(KERN_ERR "onenand_write_ops_nolock: write filaed %d\n", ret);
1547 break;
1548 } 1568 }
1549 1569
1550 /* Only check verify write turn on */ 1570 this->command(mtd, ONENAND_CMD_PROG, to, mtd->writesize);
1551 ret = onenand_verify(mtd, buf, to, thislen);
1552 if (ret) {
1553 printk(KERN_ERR "onenand_write_ops_nolock: verify failed %d\n", ret);
1554 break;
1555 }
1556 1571
1557 written += thislen; 1572 /*
1573 * 2 PLANE, MLC, and Flex-OneNAND wait here
1574 */
1575 if (ONENAND_IS_2PLANE(this)) {
1576 ret = this->wait(mtd, FL_WRITING);
1558 1577
1559 if (written == len) 1578 /* In partial page write we don't update bufferram */
1560 break; 1579 onenand_update_bufferram(mtd, to, !ret && !subpage);
1580 if (ret) {
1581 printk(KERN_ERR "onenand_write_ops_nolock: write filaed %d\n", ret);
1582 break;
1583 }
1584
1585 /* Only check verify write turn on */
1586 ret = onenand_verify(mtd, buf, to, thislen);
1587 if (ret) {
1588 printk(KERN_ERR "onenand_write_ops_nolock: verify failed %d\n", ret);
1589 break;
1590 }
1591
1592 written += thislen;
1593
1594 if (written == len)
1595 break;
1596
1597 } else
1598 written += thislen;
1561 1599
1562 column = 0; 1600 column = 0;
1601 prev_subpage = subpage;
1602 prev = to;
1603 prevlen = thislen;
1563 to += thislen; 1604 to += thislen;
1564 buf += thislen; 1605 buf += thislen;
1606 first = 0;
1565 } 1607 }
1566 1608
1609 /* In error case, clear all bufferrams */
1610 if (written != len)
1611 onenand_invalidate_bufferram(mtd, 0, -1);
1612
1567 ops->retlen = written; 1613 ops->retlen = written;
1614 ops->oobretlen = oobwritten;
1568 1615
1569 return ret; 1616 return ret;
1570} 1617}
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index e63c8fc3df3a..f8e0f68f2186 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -186,6 +186,16 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin)
186 return new_offset; 186 return new_offset;
187} 187}
188 188
189static int vol_cdev_fsync(struct file *file, struct dentry *dentry,
190 int datasync)
191{
192 struct ubi_volume_desc *desc = file->private_data;
193 struct ubi_device *ubi = desc->vol->ubi;
194
195 return ubi_sync(ubi->ubi_num);
196}
197
198
189static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count, 199static ssize_t vol_cdev_read(struct file *file, __user char *buf, size_t count,
190 loff_t *offp) 200 loff_t *offp)
191{ 201{
@@ -1073,6 +1083,7 @@ const struct file_operations ubi_vol_cdev_operations = {
1073 .llseek = vol_cdev_llseek, 1083 .llseek = vol_cdev_llseek,
1074 .read = vol_cdev_read, 1084 .read = vol_cdev_read,
1075 .write = vol_cdev_write, 1085 .write = vol_cdev_write,
1086 .fsync = vol_cdev_fsync,
1076 .unlocked_ioctl = vol_cdev_ioctl, 1087 .unlocked_ioctl = vol_cdev_ioctl,
1077 .compat_ioctl = vol_cdev_compat_ioctl, 1088 .compat_ioctl = vol_cdev_compat_ioctl,
1078}; 1089};
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index a09e3a7cac4f..02330f3d5a55 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -1530,7 +1530,7 @@ static void cp_get_ethtool_stats (struct net_device *dev,
1530 1530
1531 /* begin NIC statistics dump */ 1531 /* begin NIC statistics dump */
1532 cpw32(StatsAddr + 4, (u64)dma >> 32); 1532 cpw32(StatsAddr + 4, (u64)dma >> 32);
1533 cpw32(StatsAddr, ((u64)dma & DMA_32BIT_MASK) | DumpStats); 1533 cpw32(StatsAddr, ((u64)dma & DMA_BIT_MASK(32)) | DumpStats);
1534 cpr32(StatsAddr); 1534 cpr32(StatsAddr);
1535 1535
1536 for (i = 0; i < 1000; i++) { 1536 for (i = 0; i < 1000; i++) {
@@ -1929,19 +1929,19 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1929 1929
1930 /* Configure DMA attributes. */ 1930 /* Configure DMA attributes. */
1931 if ((sizeof(dma_addr_t) > 4) && 1931 if ((sizeof(dma_addr_t) > 4) &&
1932 !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK) && 1932 !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) &&
1933 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 1933 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
1934 pci_using_dac = 1; 1934 pci_using_dac = 1;
1935 } else { 1935 } else {
1936 pci_using_dac = 0; 1936 pci_using_dac = 0;
1937 1937
1938 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1938 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1939 if (rc) { 1939 if (rc) {
1940 dev_err(&pdev->dev, 1940 dev_err(&pdev->dev,
1941 "No usable DMA configuration, aborting.\n"); 1941 "No usable DMA configuration, aborting.\n");
1942 goto err_out_res; 1942 goto err_out_res;
1943 } 1943 }
1944 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1944 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1945 if (rc) { 1945 if (rc) {
1946 dev_err(&pdev->dev, 1946 dev_err(&pdev->dev,
1947 "No usable consistent DMA configuration, " 1947 "No usable consistent DMA configuration, "
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 16899eee397e..9e7baec45720 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -2234,7 +2234,7 @@ config BNX2
2234 tristate "Broadcom NetXtremeII support" 2234 tristate "Broadcom NetXtremeII support"
2235 depends on PCI 2235 depends on PCI
2236 select CRC32 2236 select CRC32
2237 select ZLIB_INFLATE 2237 select FW_LOADER
2238 help 2238 help
2239 This driver supports Broadcom NetXtremeII gigabit Ethernet cards. 2239 This driver supports Broadcom NetXtremeII gigabit Ethernet cards.
2240 2240
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c
index 06a9f11669f3..57bc71527850 100644
--- a/drivers/net/acenic.c
+++ b/drivers/net/acenic.c
@@ -1161,9 +1161,9 @@ static int __devinit ace_init(struct net_device *dev)
1161 /* 1161 /*
1162 * Configure DMA attributes. 1162 * Configure DMA attributes.
1163 */ 1163 */
1164 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 1164 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
1165 ap->pci_using_dac = 1; 1165 ap->pci_using_dac = 1;
1166 } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 1166 } else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
1167 ap->pci_using_dac = 0; 1167 ap->pci_using_dac = 0;
1168 } else { 1168 } else {
1169 ecode = -ENODEV; 1169 ecode = -ENODEV;
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c
index cb9c95d3ed0a..19831bd64016 100644
--- a/drivers/net/amd8111e.c
+++ b/drivers/net/amd8111e.c
@@ -1871,7 +1871,7 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev,
1871 } 1871 }
1872 1872
1873 /* Initialize DMA */ 1873 /* Initialize DMA */
1874 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) < 0) { 1874 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) < 0) {
1875 printk(KERN_ERR "amd8111e: DMA not supported," 1875 printk(KERN_ERR "amd8111e: DMA not supported,"
1876 "exiting.\n"); 1876 "exiting.\n");
1877 goto err_free_reg; 1877 goto err_free_reg;
diff --git a/drivers/net/atl1e/atl1e_main.c b/drivers/net/atl1e/atl1e_main.c
index c758884728a5..fb57b750866b 100644
--- a/drivers/net/atl1e/atl1e_main.c
+++ b/drivers/net/atl1e/atl1e_main.c
@@ -2326,8 +2326,8 @@ static int __devinit atl1e_probe(struct pci_dev *pdev,
2326 * various kernel subsystems to support the mechanics required by a 2326 * various kernel subsystems to support the mechanics required by a
2327 * fixed-high-32-bit system. 2327 * fixed-high-32-bit system.
2328 */ 2328 */
2329 if ((pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) || 2329 if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) ||
2330 (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) != 0)) { 2330 (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)) {
2331 dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); 2331 dev_err(&pdev->dev, "No usable DMA configuration,aborting\n");
2332 goto err_dma; 2332 goto err_dma;
2333 } 2333 }
diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
index 43fc1b2ca3cd..0ab22540bf59 100644
--- a/drivers/net/atlx/atl1.c
+++ b/drivers/net/atlx/atl1.c
@@ -2929,7 +2929,7 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
2929 * various kernel subsystems to support the mechanics required by a 2929 * various kernel subsystems to support the mechanics required by a
2930 * fixed-high-32-bit system. 2930 * fixed-high-32-bit system.
2931 */ 2931 */
2932 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2932 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2933 if (err) { 2933 if (err) {
2934 dev_err(&pdev->dev, "no usable DMA configuration\n"); 2934 dev_err(&pdev->dev, "no usable DMA configuration\n");
2935 goto err_dma; 2935 goto err_dma;
diff --git a/drivers/net/atlx/atl2.c b/drivers/net/atlx/atl2.c
index 9fe06c3f4097..c734b1983ec1 100644
--- a/drivers/net/atlx/atl2.c
+++ b/drivers/net/atlx/atl2.c
@@ -1358,8 +1358,8 @@ static int __devinit atl2_probe(struct pci_dev *pdev,
1358 * until the kernel has the proper infrastructure to support 64-bit DMA 1358 * until the kernel has the proper infrastructure to support 64-bit DMA
1359 * on these devices. 1359 * on these devices.
1360 */ 1360 */
1361 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) && 1361 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) &&
1362 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 1362 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
1363 printk(KERN_ERR "atl2: No usable DMA configuration, aborting\n"); 1363 printk(KERN_ERR "atl2: No usable DMA configuration, aborting\n");
1364 goto err_dma; 1364 goto err_dma;
1365 } 1365 }
diff --git a/drivers/net/b44.c b/drivers/net/b44.c
index 5c84541e0737..b70b81ec34c3 100644
--- a/drivers/net/b44.c
+++ b/drivers/net/b44.c
@@ -660,7 +660,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
660 /* Hardware bug work-around, the chip is unable to do PCI DMA 660 /* Hardware bug work-around, the chip is unable to do PCI DMA
661 to/from anything above 1GB :-( */ 661 to/from anything above 1GB :-( */
662 if (ssb_dma_mapping_error(bp->sdev, mapping) || 662 if (ssb_dma_mapping_error(bp->sdev, mapping) ||
663 mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) { 663 mapping + RX_PKT_BUF_SZ > DMA_BIT_MASK(30)) {
664 /* Sigh... */ 664 /* Sigh... */
665 if (!ssb_dma_mapping_error(bp->sdev, mapping)) 665 if (!ssb_dma_mapping_error(bp->sdev, mapping))
666 ssb_dma_unmap_single(bp->sdev, mapping, 666 ssb_dma_unmap_single(bp->sdev, mapping,
@@ -673,7 +673,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
673 RX_PKT_BUF_SZ, 673 RX_PKT_BUF_SZ,
674 DMA_FROM_DEVICE); 674 DMA_FROM_DEVICE);
675 if (ssb_dma_mapping_error(bp->sdev, mapping) || 675 if (ssb_dma_mapping_error(bp->sdev, mapping) ||
676 mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) { 676 mapping + RX_PKT_BUF_SZ > DMA_BIT_MASK(30)) {
677 if (!ssb_dma_mapping_error(bp->sdev, mapping)) 677 if (!ssb_dma_mapping_error(bp->sdev, mapping))
678 ssb_dma_unmap_single(bp->sdev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE); 678 ssb_dma_unmap_single(bp->sdev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
679 dev_kfree_skb_any(skb); 679 dev_kfree_skb_any(skb);
@@ -703,7 +703,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
703 703
704 if (bp->flags & B44_FLAG_RX_RING_HACK) 704 if (bp->flags & B44_FLAG_RX_RING_HACK)
705 b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma, 705 b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma,
706 dest_idx * sizeof(dp), 706 dest_idx * sizeof(*dp),
707 DMA_BIDIRECTIONAL); 707 DMA_BIDIRECTIONAL);
708 708
709 return RX_PKT_BUF_SZ; 709 return RX_PKT_BUF_SZ;
@@ -731,7 +731,7 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
731 731
732 if (bp->flags & B44_FLAG_RX_RING_HACK) 732 if (bp->flags & B44_FLAG_RX_RING_HACK)
733 b44_sync_dma_desc_for_cpu(bp->sdev, bp->rx_ring_dma, 733 b44_sync_dma_desc_for_cpu(bp->sdev, bp->rx_ring_dma,
734 src_idx * sizeof(src_desc), 734 src_idx * sizeof(*src_desc),
735 DMA_BIDIRECTIONAL); 735 DMA_BIDIRECTIONAL);
736 736
737 ctrl = src_desc->ctrl; 737 ctrl = src_desc->ctrl;
@@ -747,10 +747,10 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
747 747
748 if (bp->flags & B44_FLAG_RX_RING_HACK) 748 if (bp->flags & B44_FLAG_RX_RING_HACK)
749 b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma, 749 b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma,
750 dest_idx * sizeof(dest_desc), 750 dest_idx * sizeof(*dest_desc),
751 DMA_BIDIRECTIONAL); 751 DMA_BIDIRECTIONAL);
752 752
753 ssb_dma_sync_single_for_device(bp->sdev, le32_to_cpu(src_desc->addr), 753 ssb_dma_sync_single_for_device(bp->sdev, dest_map->mapping,
754 RX_PKT_BUF_SZ, 754 RX_PKT_BUF_SZ,
755 DMA_FROM_DEVICE); 755 DMA_FROM_DEVICE);
756} 756}
@@ -965,7 +965,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
965 } 965 }
966 966
967 mapping = ssb_dma_map_single(bp->sdev, skb->data, len, DMA_TO_DEVICE); 967 mapping = ssb_dma_map_single(bp->sdev, skb->data, len, DMA_TO_DEVICE);
968 if (ssb_dma_mapping_error(bp->sdev, mapping) || mapping + len > DMA_30BIT_MASK) { 968 if (ssb_dma_mapping_error(bp->sdev, mapping) || mapping + len > DMA_BIT_MASK(30)) {
969 struct sk_buff *bounce_skb; 969 struct sk_buff *bounce_skb;
970 970
971 /* Chip can't handle DMA to/from >1GB, use bounce buffer */ 971 /* Chip can't handle DMA to/from >1GB, use bounce buffer */
@@ -979,7 +979,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
979 979
980 mapping = ssb_dma_map_single(bp->sdev, bounce_skb->data, 980 mapping = ssb_dma_map_single(bp->sdev, bounce_skb->data,
981 len, DMA_TO_DEVICE); 981 len, DMA_TO_DEVICE);
982 if (ssb_dma_mapping_error(bp->sdev, mapping) || mapping + len > DMA_30BIT_MASK) { 982 if (ssb_dma_mapping_error(bp->sdev, mapping) || mapping + len > DMA_BIT_MASK(30)) {
983 if (!ssb_dma_mapping_error(bp->sdev, mapping)) 983 if (!ssb_dma_mapping_error(bp->sdev, mapping))
984 ssb_dma_unmap_single(bp->sdev, mapping, 984 ssb_dma_unmap_single(bp->sdev, mapping,
985 len, DMA_TO_DEVICE); 985 len, DMA_TO_DEVICE);
@@ -1204,7 +1204,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
1204 DMA_BIDIRECTIONAL); 1204 DMA_BIDIRECTIONAL);
1205 1205
1206 if (ssb_dma_mapping_error(bp->sdev, rx_ring_dma) || 1206 if (ssb_dma_mapping_error(bp->sdev, rx_ring_dma) ||
1207 rx_ring_dma + size > DMA_30BIT_MASK) { 1207 rx_ring_dma + size > DMA_BIT_MASK(30)) {
1208 kfree(rx_ring); 1208 kfree(rx_ring);
1209 goto out_err; 1209 goto out_err;
1210 } 1210 }
@@ -1231,7 +1231,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
1231 DMA_TO_DEVICE); 1231 DMA_TO_DEVICE);
1232 1232
1233 if (ssb_dma_mapping_error(bp->sdev, tx_ring_dma) || 1233 if (ssb_dma_mapping_error(bp->sdev, tx_ring_dma) ||
1234 tx_ring_dma + size > DMA_30BIT_MASK) { 1234 tx_ring_dma + size > DMA_BIT_MASK(30)) {
1235 kfree(tx_ring); 1235 kfree(tx_ring);
1236 goto out_err; 1236 goto out_err;
1237 } 1237 }
@@ -2180,7 +2180,7 @@ static int __devinit b44_init_one(struct ssb_device *sdev,
2180 "Failed to powerup the bus\n"); 2180 "Failed to powerup the bus\n");
2181 goto err_out_free_dev; 2181 goto err_out_free_dev;
2182 } 2182 }
2183 err = ssb_dma_set_mask(sdev, DMA_30BIT_MASK); 2183 err = ssb_dma_set_mask(sdev, DMA_BIT_MASK(30));
2184 if (err) { 2184 if (err) {
2185 dev_err(sdev->dev, 2185 dev_err(sdev->dev,
2186 "Required 30BIT DMA mask unsupported by the system.\n"); 2186 "Required 30BIT DMA mask unsupported by the system.\n");
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index ad446db8e186..9d268be0b670 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -46,19 +46,20 @@
46#include <linux/crc32.h> 46#include <linux/crc32.h>
47#include <linux/prefetch.h> 47#include <linux/prefetch.h>
48#include <linux/cache.h> 48#include <linux/cache.h>
49#include <linux/zlib.h> 49#include <linux/firmware.h>
50#include <linux/log2.h> 50#include <linux/log2.h>
51 51
52#include "bnx2.h" 52#include "bnx2.h"
53#include "bnx2_fw.h" 53#include "bnx2_fw.h"
54#include "bnx2_fw2.h"
55
56#define FW_BUF_SIZE 0x10000
57 54
58#define DRV_MODULE_NAME "bnx2" 55#define DRV_MODULE_NAME "bnx2"
59#define PFX DRV_MODULE_NAME ": " 56#define PFX DRV_MODULE_NAME ": "
60#define DRV_MODULE_VERSION "1.9.3" 57#define DRV_MODULE_VERSION "2.0.0"
61#define DRV_MODULE_RELDATE "March 17, 2009" 58#define DRV_MODULE_RELDATE "April 2, 2009"
59#define FW_MIPS_FILE_06 "bnx2/bnx2-mips-06-4.6.16.fw"
60#define FW_RV2P_FILE_06 "bnx2/bnx2-rv2p-06-4.6.16.fw"
61#define FW_MIPS_FILE_09 "bnx2/bnx2-mips-09-4.6.17.fw"
62#define FW_RV2P_FILE_09 "bnx2/bnx2-rv2p-09-4.6.15.fw"
62 63
63#define RUN_AT(x) (jiffies + (x)) 64#define RUN_AT(x) (jiffies + (x))
64 65
@@ -72,6 +73,10 @@ MODULE_AUTHOR("Michael Chan <mchan@broadcom.com>");
72MODULE_DESCRIPTION("Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver"); 73MODULE_DESCRIPTION("Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver");
73MODULE_LICENSE("GPL"); 74MODULE_LICENSE("GPL");
74MODULE_VERSION(DRV_MODULE_VERSION); 75MODULE_VERSION(DRV_MODULE_VERSION);
76MODULE_FIRMWARE(FW_MIPS_FILE_06);
77MODULE_FIRMWARE(FW_RV2P_FILE_06);
78MODULE_FIRMWARE(FW_MIPS_FILE_09);
79MODULE_FIRMWARE(FW_RV2P_FILE_09);
75 80
76static int disable_msi = 0; 81static int disable_msi = 0;
77 82
@@ -3391,33 +3396,143 @@ bnx2_set_rx_mode(struct net_device *dev)
3391 spin_unlock_bh(&bp->phy_lock); 3396 spin_unlock_bh(&bp->phy_lock);
3392} 3397}
3393 3398
3394static void 3399static int __devinit
3395load_rv2p_fw(struct bnx2 *bp, __le32 *rv2p_code, u32 rv2p_code_len, 3400check_fw_section(const struct firmware *fw,
3396 u32 rv2p_proc) 3401 const struct bnx2_fw_file_section *section,
3402 u32 alignment, bool non_empty)
3403{
3404 u32 offset = be32_to_cpu(section->offset);
3405 u32 len = be32_to_cpu(section->len);
3406
3407 if ((offset == 0 && len != 0) || offset >= fw->size || offset & 3)
3408 return -EINVAL;
3409 if ((non_empty && len == 0) || len > fw->size - offset ||
3410 len & (alignment - 1))
3411 return -EINVAL;
3412 return 0;
3413}
3414
3415static int __devinit
3416check_mips_fw_entry(const struct firmware *fw,
3417 const struct bnx2_mips_fw_file_entry *entry)
3418{
3419 if (check_fw_section(fw, &entry->text, 4, true) ||
3420 check_fw_section(fw, &entry->data, 4, false) ||
3421 check_fw_section(fw, &entry->rodata, 4, false))
3422 return -EINVAL;
3423 return 0;
3424}
3425
3426static int __devinit
3427bnx2_request_firmware(struct bnx2 *bp)
3397{ 3428{
3429 const char *mips_fw_file, *rv2p_fw_file;
3430 const struct bnx2_mips_fw_file *mips;
3431 const struct bnx2_rv2p_fw_file *rv2p;
3432 int rc;
3433
3434 if (CHIP_NUM(bp) == CHIP_NUM_5709) {
3435 mips_fw_file = FW_MIPS_FILE_09;
3436 rv2p_fw_file = FW_RV2P_FILE_09;
3437 } else {
3438 mips_fw_file = FW_MIPS_FILE_06;
3439 rv2p_fw_file = FW_RV2P_FILE_06;
3440 }
3441
3442 rc = request_firmware(&bp->mips_firmware, mips_fw_file, &bp->pdev->dev);
3443 if (rc) {
3444 printk(KERN_ERR PFX "Can't load firmware file \"%s\"\n",
3445 mips_fw_file);
3446 return rc;
3447 }
3448
3449 rc = request_firmware(&bp->rv2p_firmware, rv2p_fw_file, &bp->pdev->dev);
3450 if (rc) {
3451 printk(KERN_ERR PFX "Can't load firmware file \"%s\"\n",
3452 rv2p_fw_file);
3453 return rc;
3454 }
3455 mips = (const struct bnx2_mips_fw_file *) bp->mips_firmware->data;
3456 rv2p = (const struct bnx2_rv2p_fw_file *) bp->rv2p_firmware->data;
3457 if (bp->mips_firmware->size < sizeof(*mips) ||
3458 check_mips_fw_entry(bp->mips_firmware, &mips->com) ||
3459 check_mips_fw_entry(bp->mips_firmware, &mips->cp) ||
3460 check_mips_fw_entry(bp->mips_firmware, &mips->rxp) ||
3461 check_mips_fw_entry(bp->mips_firmware, &mips->tpat) ||
3462 check_mips_fw_entry(bp->mips_firmware, &mips->txp)) {
3463 printk(KERN_ERR PFX "Firmware file \"%s\" is invalid\n",
3464 mips_fw_file);
3465 return -EINVAL;
3466 }
3467 if (bp->rv2p_firmware->size < sizeof(*rv2p) ||
3468 check_fw_section(bp->rv2p_firmware, &rv2p->proc1.rv2p, 8, true) ||
3469 check_fw_section(bp->rv2p_firmware, &rv2p->proc2.rv2p, 8, true)) {
3470 printk(KERN_ERR PFX "Firmware file \"%s\" is invalid\n",
3471 rv2p_fw_file);
3472 return -EINVAL;
3473 }
3474
3475 return 0;
3476}
3477
3478static u32
3479rv2p_fw_fixup(u32 rv2p_proc, int idx, u32 loc, u32 rv2p_code)
3480{
3481 switch (idx) {
3482 case RV2P_P1_FIXUP_PAGE_SIZE_IDX:
3483 rv2p_code &= ~RV2P_BD_PAGE_SIZE_MSK;
3484 rv2p_code |= RV2P_BD_PAGE_SIZE;
3485 break;
3486 }
3487 return rv2p_code;
3488}
3489
3490static int
3491load_rv2p_fw(struct bnx2 *bp, u32 rv2p_proc,
3492 const struct bnx2_rv2p_fw_file_entry *fw_entry)
3493{
3494 u32 rv2p_code_len, file_offset;
3495 __be32 *rv2p_code;
3398 int i; 3496 int i;
3399 u32 val; 3497 u32 val, cmd, addr;
3498
3499 rv2p_code_len = be32_to_cpu(fw_entry->rv2p.len);
3500 file_offset = be32_to_cpu(fw_entry->rv2p.offset);
3501
3502 rv2p_code = (__be32 *)(bp->rv2p_firmware->data + file_offset);
3400 3503
3401 if (rv2p_proc == RV2P_PROC2 && CHIP_NUM(bp) == CHIP_NUM_5709) { 3504 if (rv2p_proc == RV2P_PROC1) {
3402 val = le32_to_cpu(rv2p_code[XI_RV2P_PROC2_MAX_BD_PAGE_LOC]); 3505 cmd = BNX2_RV2P_PROC1_ADDR_CMD_RDWR;
3403 val &= ~XI_RV2P_PROC2_BD_PAGE_SIZE_MSK; 3506 addr = BNX2_RV2P_PROC1_ADDR_CMD;
3404 val |= XI_RV2P_PROC2_BD_PAGE_SIZE; 3507 } else {
3405 rv2p_code[XI_RV2P_PROC2_MAX_BD_PAGE_LOC] = cpu_to_le32(val); 3508 cmd = BNX2_RV2P_PROC2_ADDR_CMD_RDWR;
3509 addr = BNX2_RV2P_PROC2_ADDR_CMD;
3406 } 3510 }
3407 3511
3408 for (i = 0; i < rv2p_code_len; i += 8) { 3512 for (i = 0; i < rv2p_code_len; i += 8) {
3409 REG_WR(bp, BNX2_RV2P_INSTR_HIGH, le32_to_cpu(*rv2p_code)); 3513 REG_WR(bp, BNX2_RV2P_INSTR_HIGH, be32_to_cpu(*rv2p_code));
3410 rv2p_code++; 3514 rv2p_code++;
3411 REG_WR(bp, BNX2_RV2P_INSTR_LOW, le32_to_cpu(*rv2p_code)); 3515 REG_WR(bp, BNX2_RV2P_INSTR_LOW, be32_to_cpu(*rv2p_code));
3412 rv2p_code++; 3516 rv2p_code++;
3413 3517
3414 if (rv2p_proc == RV2P_PROC1) { 3518 val = (i / 8) | cmd;
3415 val = (i / 8) | BNX2_RV2P_PROC1_ADDR_CMD_RDWR; 3519 REG_WR(bp, addr, val);
3416 REG_WR(bp, BNX2_RV2P_PROC1_ADDR_CMD, val); 3520 }
3417 } 3521
3418 else { 3522 rv2p_code = (__be32 *)(bp->rv2p_firmware->data + file_offset);
3419 val = (i / 8) | BNX2_RV2P_PROC2_ADDR_CMD_RDWR; 3523 for (i = 0; i < 8; i++) {
3420 REG_WR(bp, BNX2_RV2P_PROC2_ADDR_CMD, val); 3524 u32 loc, code;
3525
3526 loc = be32_to_cpu(fw_entry->fixup[i]);
3527 if (loc && ((loc * 4) < rv2p_code_len)) {
3528 code = be32_to_cpu(*(rv2p_code + loc - 1));
3529 REG_WR(bp, BNX2_RV2P_INSTR_HIGH, code);
3530 code = be32_to_cpu(*(rv2p_code + loc));
3531 code = rv2p_fw_fixup(rv2p_proc, i, loc, code);
3532 REG_WR(bp, BNX2_RV2P_INSTR_LOW, code);
3533
3534 val = (loc / 2) | cmd;
3535 REG_WR(bp, addr, val);
3421 } 3536 }
3422 } 3537 }
3423 3538
@@ -3428,14 +3543,18 @@ load_rv2p_fw(struct bnx2 *bp, __le32 *rv2p_code, u32 rv2p_code_len,
3428 else { 3543 else {
3429 REG_WR(bp, BNX2_RV2P_COMMAND, BNX2_RV2P_COMMAND_PROC2_RESET); 3544 REG_WR(bp, BNX2_RV2P_COMMAND, BNX2_RV2P_COMMAND_PROC2_RESET);
3430 } 3545 }
3546
3547 return 0;
3431} 3548}
3432 3549
3433static int 3550static int
3434load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, struct fw_info *fw) 3551load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg,
3552 const struct bnx2_mips_fw_file_entry *fw_entry)
3435{ 3553{
3554 u32 addr, len, file_offset;
3555 __be32 *data;
3436 u32 offset; 3556 u32 offset;
3437 u32 val; 3557 u32 val;
3438 int rc;
3439 3558
3440 /* Halt the CPU. */ 3559 /* Halt the CPU. */
3441 val = bnx2_reg_rd_ind(bp, cpu_reg->mode); 3560 val = bnx2_reg_rd_ind(bp, cpu_reg->mode);
@@ -3444,64 +3563,52 @@ load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, struct fw_info *fw)
3444 bnx2_reg_wr_ind(bp, cpu_reg->state, cpu_reg->state_value_clear); 3563 bnx2_reg_wr_ind(bp, cpu_reg->state, cpu_reg->state_value_clear);
3445 3564
3446 /* Load the Text area. */ 3565 /* Load the Text area. */
3447 offset = cpu_reg->spad_base + (fw->text_addr - cpu_reg->mips_view_base); 3566 addr = be32_to_cpu(fw_entry->text.addr);
3448 if (fw->gz_text) { 3567 len = be32_to_cpu(fw_entry->text.len);
3449 int j; 3568 file_offset = be32_to_cpu(fw_entry->text.offset);
3450 3569 data = (__be32 *)(bp->mips_firmware->data + file_offset);
3451 rc = zlib_inflate_blob(fw->text, FW_BUF_SIZE, fw->gz_text,
3452 fw->gz_text_len);
3453 if (rc < 0)
3454 return rc;
3455 3570
3456 for (j = 0; j < (fw->text_len / 4); j++, offset += 4) { 3571 offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base);
3457 bnx2_reg_wr_ind(bp, offset, le32_to_cpu(fw->text[j])); 3572 if (len) {
3458 }
3459 }
3460
3461 /* Load the Data area. */
3462 offset = cpu_reg->spad_base + (fw->data_addr - cpu_reg->mips_view_base);
3463 if (fw->data) {
3464 int j; 3573 int j;
3465 3574
3466 for (j = 0; j < (fw->data_len / 4); j++, offset += 4) { 3575 for (j = 0; j < (len / 4); j++, offset += 4)
3467 bnx2_reg_wr_ind(bp, offset, fw->data[j]); 3576 bnx2_reg_wr_ind(bp, offset, be32_to_cpu(data[j]));
3468 }
3469 } 3577 }
3470 3578
3471 /* Load the SBSS area. */ 3579 /* Load the Data area. */
3472 offset = cpu_reg->spad_base + (fw->sbss_addr - cpu_reg->mips_view_base); 3580 addr = be32_to_cpu(fw_entry->data.addr);
3473 if (fw->sbss_len) { 3581 len = be32_to_cpu(fw_entry->data.len);
3474 int j; 3582 file_offset = be32_to_cpu(fw_entry->data.offset);
3475 3583 data = (__be32 *)(bp->mips_firmware->data + file_offset);
3476 for (j = 0; j < (fw->sbss_len / 4); j++, offset += 4) {
3477 bnx2_reg_wr_ind(bp, offset, 0);
3478 }
3479 }
3480 3584
3481 /* Load the BSS area. */ 3585 offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base);
3482 offset = cpu_reg->spad_base + (fw->bss_addr - cpu_reg->mips_view_base); 3586 if (len) {
3483 if (fw->bss_len) {
3484 int j; 3587 int j;
3485 3588
3486 for (j = 0; j < (fw->bss_len/4); j++, offset += 4) { 3589 for (j = 0; j < (len / 4); j++, offset += 4)
3487 bnx2_reg_wr_ind(bp, offset, 0); 3590 bnx2_reg_wr_ind(bp, offset, be32_to_cpu(data[j]));
3488 }
3489 } 3591 }
3490 3592
3491 /* Load the Read-Only area. */ 3593 /* Load the Read-Only area. */
3492 offset = cpu_reg->spad_base + 3594 addr = be32_to_cpu(fw_entry->rodata.addr);
3493 (fw->rodata_addr - cpu_reg->mips_view_base); 3595 len = be32_to_cpu(fw_entry->rodata.len);
3494 if (fw->rodata) { 3596 file_offset = be32_to_cpu(fw_entry->rodata.offset);
3597 data = (__be32 *)(bp->mips_firmware->data + file_offset);
3598
3599 offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base);
3600 if (len) {
3495 int j; 3601 int j;
3496 3602
3497 for (j = 0; j < (fw->rodata_len / 4); j++, offset += 4) { 3603 for (j = 0; j < (len / 4); j++, offset += 4)
3498 bnx2_reg_wr_ind(bp, offset, fw->rodata[j]); 3604 bnx2_reg_wr_ind(bp, offset, be32_to_cpu(data[j]));
3499 }
3500 } 3605 }
3501 3606
3502 /* Clear the pre-fetch instruction. */ 3607 /* Clear the pre-fetch instruction. */
3503 bnx2_reg_wr_ind(bp, cpu_reg->inst, 0); 3608 bnx2_reg_wr_ind(bp, cpu_reg->inst, 0);
3504 bnx2_reg_wr_ind(bp, cpu_reg->pc, fw->start_addr); 3609
3610 val = be32_to_cpu(fw_entry->start_addr);
3611 bnx2_reg_wr_ind(bp, cpu_reg->pc, val);
3505 3612
3506 /* Start the CPU. */ 3613 /* Start the CPU. */
3507 val = bnx2_reg_rd_ind(bp, cpu_reg->mode); 3614 val = bnx2_reg_rd_ind(bp, cpu_reg->mode);
@@ -3515,95 +3622,40 @@ load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, struct fw_info *fw)
3515static int 3622static int
3516bnx2_init_cpus(struct bnx2 *bp) 3623bnx2_init_cpus(struct bnx2 *bp)
3517{ 3624{
3518 struct fw_info *fw; 3625 const struct bnx2_mips_fw_file *mips_fw =
3519 int rc, rv2p_len; 3626 (const struct bnx2_mips_fw_file *) bp->mips_firmware->data;
3520 void *text, *rv2p; 3627 const struct bnx2_rv2p_fw_file *rv2p_fw =
3628 (const struct bnx2_rv2p_fw_file *) bp->rv2p_firmware->data;
3629 int rc;
3521 3630
3522 /* Initialize the RV2P processor. */ 3631 /* Initialize the RV2P processor. */
3523 text = vmalloc(FW_BUF_SIZE); 3632 load_rv2p_fw(bp, RV2P_PROC1, &rv2p_fw->proc1);
3524 if (!text) 3633 load_rv2p_fw(bp, RV2P_PROC2, &rv2p_fw->proc2);
3525 return -ENOMEM;
3526 if (CHIP_NUM(bp) == CHIP_NUM_5709) {
3527 rv2p = bnx2_xi_rv2p_proc1;
3528 rv2p_len = sizeof(bnx2_xi_rv2p_proc1);
3529 } else {
3530 rv2p = bnx2_rv2p_proc1;
3531 rv2p_len = sizeof(bnx2_rv2p_proc1);
3532 }
3533 rc = zlib_inflate_blob(text, FW_BUF_SIZE, rv2p, rv2p_len);
3534 if (rc < 0)
3535 goto init_cpu_err;
3536
3537 load_rv2p_fw(bp, text, rc /* == len */, RV2P_PROC1);
3538
3539 if (CHIP_NUM(bp) == CHIP_NUM_5709) {
3540 rv2p = bnx2_xi_rv2p_proc2;
3541 rv2p_len = sizeof(bnx2_xi_rv2p_proc2);
3542 } else {
3543 rv2p = bnx2_rv2p_proc2;
3544 rv2p_len = sizeof(bnx2_rv2p_proc2);
3545 }
3546 rc = zlib_inflate_blob(text, FW_BUF_SIZE, rv2p, rv2p_len);
3547 if (rc < 0)
3548 goto init_cpu_err;
3549
3550 load_rv2p_fw(bp, text, rc /* == len */, RV2P_PROC2);
3551 3634
3552 /* Initialize the RX Processor. */ 3635 /* Initialize the RX Processor. */
3553 if (CHIP_NUM(bp) == CHIP_NUM_5709) 3636 rc = load_cpu_fw(bp, &cpu_reg_rxp, &mips_fw->rxp);
3554 fw = &bnx2_rxp_fw_09;
3555 else
3556 fw = &bnx2_rxp_fw_06;
3557
3558 fw->text = text;
3559 rc = load_cpu_fw(bp, &cpu_reg_rxp, fw);
3560 if (rc) 3637 if (rc)
3561 goto init_cpu_err; 3638 goto init_cpu_err;
3562 3639
3563 /* Initialize the TX Processor. */ 3640 /* Initialize the TX Processor. */
3564 if (CHIP_NUM(bp) == CHIP_NUM_5709) 3641 rc = load_cpu_fw(bp, &cpu_reg_txp, &mips_fw->txp);
3565 fw = &bnx2_txp_fw_09;
3566 else
3567 fw = &bnx2_txp_fw_06;
3568
3569 fw->text = text;
3570 rc = load_cpu_fw(bp, &cpu_reg_txp, fw);
3571 if (rc) 3642 if (rc)
3572 goto init_cpu_err; 3643 goto init_cpu_err;
3573 3644
3574 /* Initialize the TX Patch-up Processor. */ 3645 /* Initialize the TX Patch-up Processor. */
3575 if (CHIP_NUM(bp) == CHIP_NUM_5709) 3646 rc = load_cpu_fw(bp, &cpu_reg_tpat, &mips_fw->tpat);
3576 fw = &bnx2_tpat_fw_09;
3577 else
3578 fw = &bnx2_tpat_fw_06;
3579
3580 fw->text = text;
3581 rc = load_cpu_fw(bp, &cpu_reg_tpat, fw);
3582 if (rc) 3647 if (rc)
3583 goto init_cpu_err; 3648 goto init_cpu_err;
3584 3649
3585 /* Initialize the Completion Processor. */ 3650 /* Initialize the Completion Processor. */
3586 if (CHIP_NUM(bp) == CHIP_NUM_5709) 3651 rc = load_cpu_fw(bp, &cpu_reg_com, &mips_fw->com);
3587 fw = &bnx2_com_fw_09;
3588 else
3589 fw = &bnx2_com_fw_06;
3590
3591 fw->text = text;
3592 rc = load_cpu_fw(bp, &cpu_reg_com, fw);
3593 if (rc) 3652 if (rc)
3594 goto init_cpu_err; 3653 goto init_cpu_err;
3595 3654
3596 /* Initialize the Command Processor. */ 3655 /* Initialize the Command Processor. */
3597 if (CHIP_NUM(bp) == CHIP_NUM_5709) 3656 rc = load_cpu_fw(bp, &cpu_reg_cp, &mips_fw->cp);
3598 fw = &bnx2_cp_fw_09;
3599 else
3600 fw = &bnx2_cp_fw_06;
3601
3602 fw->text = text;
3603 rc = load_cpu_fw(bp, &cpu_reg_cp, fw);
3604 3657
3605init_cpu_err: 3658init_cpu_err:
3606 vfree(text);
3607 return rc; 3659 return rc;
3608} 3660}
3609 3661
@@ -7473,9 +7525,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
7473 7525
7474 /* 5708 cannot support DMA addresses > 40-bit. */ 7526 /* 5708 cannot support DMA addresses > 40-bit. */
7475 if (CHIP_NUM(bp) == CHIP_NUM_5708) 7527 if (CHIP_NUM(bp) == CHIP_NUM_5708)
7476 persist_dma_mask = dma_mask = DMA_40BIT_MASK; 7528 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
7477 else 7529 else
7478 persist_dma_mask = dma_mask = DMA_64BIT_MASK; 7530 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
7479 7531
7480 /* Configure DMA attributes. */ 7532 /* Configure DMA attributes. */
7481 if (pci_set_dma_mask(pdev, dma_mask) == 0) { 7533 if (pci_set_dma_mask(pdev, dma_mask) == 0) {
@@ -7486,7 +7538,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
7486 "pci_set_consistent_dma_mask failed, aborting.\n"); 7538 "pci_set_consistent_dma_mask failed, aborting.\n");
7487 goto err_out_unmap; 7539 goto err_out_unmap;
7488 } 7540 }
7489 } else if ((rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) != 0) { 7541 } else if ((rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
7490 dev_err(&pdev->dev, "System does not support DMA, aborting.\n"); 7542 dev_err(&pdev->dev, "System does not support DMA, aborting.\n");
7491 goto err_out_unmap; 7543 goto err_out_unmap;
7492 } 7544 }
@@ -7807,6 +7859,10 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7807 7859
7808 pci_set_drvdata(pdev, dev); 7860 pci_set_drvdata(pdev, dev);
7809 7861
7862 rc = bnx2_request_firmware(bp);
7863 if (rc)
7864 goto error;
7865
7810 memcpy(dev->dev_addr, bp->mac_addr, 6); 7866 memcpy(dev->dev_addr, bp->mac_addr, 6);
7811 memcpy(dev->perm_addr, bp->mac_addr, 6); 7867 memcpy(dev->perm_addr, bp->mac_addr, 6);
7812 7868
@@ -7823,13 +7879,7 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7823 7879
7824 if ((rc = register_netdev(dev))) { 7880 if ((rc = register_netdev(dev))) {
7825 dev_err(&pdev->dev, "Cannot register net device\n"); 7881 dev_err(&pdev->dev, "Cannot register net device\n");
7826 if (bp->regview) 7882 goto error;
7827 iounmap(bp->regview);
7828 pci_release_regions(pdev);
7829 pci_disable_device(pdev);
7830 pci_set_drvdata(pdev, NULL);
7831 free_netdev(dev);
7832 return rc;
7833 } 7883 }
7834 7884
7835 printk(KERN_INFO "%s: %s (%c%d) %s found at mem %lx, " 7885 printk(KERN_INFO "%s: %s (%c%d) %s found at mem %lx, "
@@ -7843,6 +7893,20 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7843 bp->pdev->irq, dev->dev_addr); 7893 bp->pdev->irq, dev->dev_addr);
7844 7894
7845 return 0; 7895 return 0;
7896
7897error:
7898 if (bp->mips_firmware)
7899 release_firmware(bp->mips_firmware);
7900 if (bp->rv2p_firmware)
7901 release_firmware(bp->rv2p_firmware);
7902
7903 if (bp->regview)
7904 iounmap(bp->regview);
7905 pci_release_regions(pdev);
7906 pci_disable_device(pdev);
7907 pci_set_drvdata(pdev, NULL);
7908 free_netdev(dev);
7909 return rc;
7846} 7910}
7847 7911
7848static void __devexit 7912static void __devexit
@@ -7855,6 +7919,11 @@ bnx2_remove_one(struct pci_dev *pdev)
7855 7919
7856 unregister_netdev(dev); 7920 unregister_netdev(dev);
7857 7921
7922 if (bp->mips_firmware)
7923 release_firmware(bp->mips_firmware);
7924 if (bp->rv2p_firmware)
7925 release_firmware(bp->rv2p_firmware);
7926
7858 if (bp->regview) 7927 if (bp->regview)
7859 iounmap(bp->regview); 7928 iounmap(bp->regview);
7860 7929
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index 704cbbcbf97a..5b570e17c839 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -6885,6 +6885,8 @@ struct bnx2 {
6885 6885
6886 u32 idle_chk_status_idx; 6886 u32 idle_chk_status_idx;
6887 6887
6888 const struct firmware *mips_firmware;
6889 const struct firmware *rv2p_firmware;
6888}; 6890};
6889 6891
6890#define REG_RD(bp, offset) \ 6892#define REG_RD(bp, offset) \
@@ -6915,44 +6917,41 @@ struct cpu_reg {
6915 u32 mips_view_base; 6917 u32 mips_view_base;
6916}; 6918};
6917 6919
6918struct fw_info { 6920struct bnx2_fw_file_section {
6919 const u32 ver_major; 6921 __be32 addr;
6920 const u32 ver_minor; 6922 __be32 len;
6921 const u32 ver_fix; 6923 __be32 offset;
6922
6923 const u32 start_addr;
6924
6925 /* Text section. */
6926 const u32 text_addr;
6927 const u32 text_len;
6928 const u32 text_index;
6929 __le32 *text;
6930 u8 *gz_text;
6931 const u32 gz_text_len;
6932
6933 /* Data section. */
6934 const u32 data_addr;
6935 const u32 data_len;
6936 const u32 data_index;
6937 const u32 *data;
6938
6939 /* SBSS section. */
6940 const u32 sbss_addr;
6941 const u32 sbss_len;
6942 const u32 sbss_index;
6943
6944 /* BSS section. */
6945 const u32 bss_addr;
6946 const u32 bss_len;
6947 const u32 bss_index;
6948
6949 /* Read-only section. */
6950 const u32 rodata_addr;
6951 const u32 rodata_len;
6952 const u32 rodata_index;
6953 const u32 *rodata;
6954}; 6924};
6955 6925
6926struct bnx2_mips_fw_file_entry {
6927 __be32 start_addr;
6928 struct bnx2_fw_file_section text;
6929 struct bnx2_fw_file_section data;
6930 struct bnx2_fw_file_section rodata;
6931};
6932
6933struct bnx2_rv2p_fw_file_entry {
6934 struct bnx2_fw_file_section rv2p;
6935 __be32 fixup[8];
6936};
6937
6938struct bnx2_mips_fw_file {
6939 struct bnx2_mips_fw_file_entry com;
6940 struct bnx2_mips_fw_file_entry cp;
6941 struct bnx2_mips_fw_file_entry rxp;
6942 struct bnx2_mips_fw_file_entry tpat;
6943 struct bnx2_mips_fw_file_entry txp;
6944};
6945
6946struct bnx2_rv2p_fw_file {
6947 struct bnx2_rv2p_fw_file_entry proc1;
6948 struct bnx2_rv2p_fw_file_entry proc2;
6949};
6950
6951#define RV2P_P1_FIXUP_PAGE_SIZE_IDX 0
6952#define RV2P_BD_PAGE_SIZE_MSK 0xffff
6953#define RV2P_BD_PAGE_SIZE ((BCM_PAGE_SIZE / 16) - 1)
6954
6956#define RV2P_PROC1 0 6955#define RV2P_PROC1 0
6957#define RV2P_PROC2 1 6956#define RV2P_PROC2 1
6958 6957
diff --git a/drivers/net/bnx2_fw.h b/drivers/net/bnx2_fw.h
index 6a4f1d695de7..940eb91f209d 100644
--- a/drivers/net/bnx2_fw.h
+++ b/drivers/net/bnx2_fw.h
@@ -4,883 +4,9 @@
4 * 4 *
5 * This program is free software; you can redistribute it and/or modify 5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by 6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, except as noted below. 7 * the Free Software Foundation.
8 *
9 * This file contains firmware data derived from proprietary unpublished
10 * source code, Copyright (c) 2004, 2005, 2006, 2007 Broadcom Corporation.
11 *
12 * Permission is hereby granted for the distribution of this firmware data
13 * in hexadecimal or equivalent format, provided this copyright notice is
14 * accompanying it.
15 */ 8 */
16 9
17static u8 bnx2_COM_b06FwText[] = {
18 0xcd, 0x7c, 0x0d, 0x70, 0x5c, 0xd7, 0x75, 0xde, 0xd9, 0xb7, 0xbb, 0xc0,
19 0x12, 0x04, 0xc1, 0x07, 0x68, 0x05, 0xad, 0x24, 0x24, 0xde, 0x87, 0x7d,
20 0x00, 0x56, 0x22, 0xe4, 0x3c, 0x32, 0x10, 0x0d, 0xb9, 0x5b, 0x72, 0xbd,
21 0x0b, 0x50, 0x90, 0x43, 0x23, 0x90, 0x84, 0x28, 0x6a, 0x86, 0xe3, 0x41,
22 0x97, 0xa0, 0x62, 0x69, 0xdc, 0x86, 0x1e, 0x2b, 0x29, 0xe5, 0x2a, 0xe6,
23 0x6a, 0x01, 0xca, 0x94, 0x02, 0x72, 0x61, 0x12, 0x04, 0xd5, 0x54, 0x6d,
24 0xd7, 0x0b, 0x80, 0x54, 0xd4, 0x25, 0x97, 0x94, 0xfc, 0xa3, 0x99, 0xd8,
25 0x21, 0x4a, 0xd1, 0x92, 0xed, 0x71, 0xa7, 0x92, 0xc7, 0x9d, 0xaa, 0x33,
26 0x9a, 0x94, 0xa5, 0xe4, 0xda, 0xf1, 0x34, 0x8d, 0x6a, 0x7b, 0x1a, 0x25,
27 0xb1, 0xf3, 0xfa, 0x7d, 0xf7, 0xdd, 0x0b, 0x2c, 0x20, 0x48, 0x56, 0x92,
28 0xf1, 0x4c, 0x30, 0xb3, 0xbc, 0xef, 0xde, 0x77, 0x7f, 0xcf, 0x39, 0xf7,
29 0x9c, 0xef, 0x9c, 0x7b, 0x1f, 0x77, 0x89, 0xb4, 0x88, 0xfe, 0xdb, 0x82,
30 0xdf, 0xc0, 0xbf, 0xf8, 0x9d, 0xfd, 0xdb, 0x3f, 0xb8, 0xf3, 0x83, 0x78,
31 0xdc, 0x69, 0xd9, 0x4d, 0x11, 0x96, 0x87, 0xf1, 0x8b, 0xe3, 0xb7, 0x43,
32 0x3f, 0x6f, 0xf4, 0x67, 0xb3, 0x41, 0x48, 0x64, 0xe2, 0x87, 0x22, 0xa1,
33 0x75, 0xef, 0x62, 0xef, 0xd2, 0xe6, 0xbd, 0xfe, 0xac, 0xf7, 0x59, 0xcf,
34 0xfe, 0x7b, 0xf4, 0x6d, 0xfe, 0xc2, 0xba, 0xf9, 0x16, 0xfd, 0x93, 0x98,
35 0x95, 0xb9, 0xfa, 0xb1, 0x9c, 0x2b, 0xb1, 0x70, 0xe6, 0xbb, 0xa3, 0xfb,
36 0x5d, 0x91, 0x6c, 0x6d, 0x5b, 0x32, 0x2f, 0x3f, 0xf3, 0x8b, 0xf1, 0x88,
37 0xb0, 0xfc, 0x97, 0x32, 0x3f, 0x3d, 0xfc, 0xb5, 0x0f, 0x39, 0x6f, 0x55,
38 0xc2, 0x12, 0xb3, 0x33, 0x6f, 0x8b, 0xdd, 0x2b, 0xb1, 0x2e, 0xb4, 0x79,
39 0xba, 0xef, 0x59, 0x4b, 0xda, 0x4c, 0x5f, 0xf6, 0x44, 0x38, 0x23, 0x63,
40 0x93, 0x33, 0x87, 0x7d, 0xcb, 0x95, 0xe2, 0x4d, 0x19, 0x37, 0x59, 0x92,
41 0xd6, 0xc1, 0xe9, 0x81, 0x0f, 0x09, 0xf2, 0x63, 0x93, 0xb5, 0x98, 0xe4,
42 0xea, 0xc5, 0x56, 0xcb, 0x75, 0x91, 0xc6, 0x8a, 0x37, 0x67, 0x24, 0xd6,
43 0x94, 0x79, 0xba, 0xf9, 0x25, 0x97, 0xe3, 0x27, 0x46, 0x73, 0xee, 0xcd,
44 0x12, 0x71, 0x7d, 0x7f, 0x1a, 0xe3, 0xef, 0xa9, 0xfd, 0xcc, 0x7f, 0x2c,
45 0x12, 0x8c, 0x6d, 0x65, 0x8a, 0x61, 0xa6, 0xa1, 0x4c, 0x72, 0xb4, 0xbb,
46 0xa6, 0xf2, 0x4d, 0x41, 0xde, 0x35, 0xf9, 0x2d, 0x41, 0x7e, 0x42, 0xe7,
47 0xed, 0x96, 0x60, 0x2d, 0xb1, 0x4d, 0x58, 0x4b, 0x2c, 0x92, 0x19, 0xda,
48 0x84, 0x3e, 0x63, 0xd1, 0x8c, 0x9b, 0x59, 0x52, 0xf5, 0x3e, 0xa1, 0xeb,
49 0x1d, 0x8c, 0x06, 0xed, 0x26, 0x47, 0x7b, 0x6b, 0x4c, 0x1f, 0x1e, 0xed,
50 0x51, 0xe9, 0xa3, 0xa3, 0x29, 0x95, 0x16, 0x55, 0xbd, 0x50, 0x66, 0x7a,
51 0xd4, 0x55, 0x69, 0x97, 0x2e, 0x4f, 0x8f, 0x26, 0x55, 0xda, 0xaf, 0x53,
52 0x4f, 0xa7, 0x03, 0x3a, 0x1d, 0xd4, 0x69, 0x46, 0xa7, 0x59, 0x9d, 0x0e,
53 0xe9, 0x7e, 0x46, 0x74, 0x7e, 0xaf, 0x4e, 0xc7, 0x74, 0x3a, 0xae, 0xd3,
54 0xfb, 0x75, 0xba, 0x4f, 0xcf, 0xeb, 0x93, 0x3a, 0x7f, 0x50, 0xcf, 0xef,
55 0x10, 0xe6, 0xf1, 0x93, 0x26, 0x2d, 0xbf, 0x58, 0x67, 0x52, 0xf6, 0xcf,
56 0xc4, 0xa4, 0x54, 0x0e, 0x4b, 0x5e, 0xf1, 0xb5, 0x3f, 0x2a, 0x2d, 0x31,
57 0x99, 0xaa, 0xc7, 0xe4, 0xaa, 0x12, 0xdb, 0x1f, 0xf8, 0x5f, 0xeb, 0xb3,
58 0xe5, 0x42, 0x3d, 0x2e, 0x97, 0xea, 0x12, 0x1a, 0xeb, 0xdb, 0x24, 0xd6,
59 0x89, 0x9b, 0x24, 0x6b, 0x87, 0x24, 0xac, 0xe8, 0x9b, 0x94, 0xdc, 0x4c,
60 0x27, 0xf2, 0x4e, 0x42, 0x64, 0x32, 0x1a, 0xf0, 0x33, 0x26, 0xe1, 0x79,
61 0xf2, 0x67, 0x7e, 0xf4, 0xa5, 0xb9, 0x84, 0x44, 0x8e, 0x27, 0xd1, 0x7f,
62 0xab, 0x44, 0xe7, 0xa5, 0x2b, 0x2c, 0x3d, 0x89, 0x07, 0x50, 0x63, 0xa8,
63 0x16, 0x91, 0xe1, 0x5a, 0x08, 0x3c, 0x8b, 0x41, 0x5e, 0x5a, 0xf1, 0xb3,
64 0xf1, 0x8b, 0xe3, 0x97, 0xc0, 0xef, 0x09, 0xf4, 0xd3, 0x25, 0xf9, 0x1a,
65 0xfb, 0xc4, 0xb8, 0x65, 0x8c, 0x5f, 0x76, 0xec, 0x09, 0xe1, 0x9c, 0x12,
66 0xf2, 0xb5, 0xbe, 0x60, 0x4e, 0x97, 0xea, 0xb1, 0x50, 0xee, 0xb4, 0x1c,
67 0xcc, 0x7b, 0x92, 0xb4, 0xdc, 0x16, 0x29, 0xd8, 0xa1, 0xe4, 0x64, 0xba,
68 0x43, 0x8a, 0xe3, 0x78, 0x57, 0x96, 0xac, 0x85, 0xbe, 0x0b, 0xb6, 0x4c,
69 0x04, 0xef, 0x58, 0xf6, 0x37, 0xd8, 0xb7, 0x8e, 0x4d, 0x01, 0xbe, 0x54,
70 0xfe, 0x63, 0x3c, 0xb3, 0xaf, 0xff, 0x17, 0x0e, 0xe6, 0xfc, 0xd7, 0xc8,
71 0xb3, 0xfc, 0xcb, 0x5b, 0x83, 0x3c, 0x9f, 0x59, 0xd7, 0x8c, 0x69, 0xd6,
72 0xca, 0xb1, 0xfb, 0xb0, 0x5e, 0x8e, 0xbf, 0xb2, 0x5e, 0xcc, 0xa3, 0x35,
73 0x94, 0x3f, 0x9d, 0x94, 0x23, 0xe5, 0x5d, 0x92, 0xf3, 0x7c, 0x7f, 0xbf,
74 0x27, 0x71, 0x4b, 0x7a, 0xec, 0x3c, 0xde, 0x56, 0x6b, 0x12, 0xca, 0x95,
75 0x0d, 0x3d, 0xd8, 0x6f, 0x04, 0x65, 0x9d, 0xa8, 0xdf, 0x16, 0x1a, 0x3a,
76 0x8d, 0xb9, 0x67, 0x48, 0x17, 0xc8, 0xae, 0xd7, 0x93, 0x98, 0xc4, 0x78,
77 0x0b, 0xb5, 0x1e, 0xef, 0xb2, 0xd8, 0xe8, 0xb3, 0x03, 0x75, 0x48, 0x23,
78 0xf6, 0xc5, 0x3e, 0xd9, 0x5f, 0x2b, 0xda, 0xc6, 0xf1, 0x8e, 0x73, 0xf2,
79 0xfd, 0x9c, 0x67, 0x33, 0x2f, 0x15, 0xd0, 0xad, 0x42, 0xba, 0xb5, 0x74,
80 0xc9, 0x99, 0x1a, 0xc7, 0xd8, 0x68, 0xde, 0xb7, 0xfe, 0x23, 0x9b, 0x77,
81 0x02, 0xfd, 0xc7, 0x91, 0x6e, 0x0e, 0xe5, 0x4e, 0xfa, 0x18, 0x3f, 0x81,
82 0xe7, 0x8d, 0xd6, 0x70, 0x55, 0xcb, 0x60, 0x02, 0x73, 0x8f, 0xcb, 0x45,
83 0x25, 0x87, 0x9b, 0x25, 0x0c, 0x39, 0x24, 0x8f, 0xdb, 0xe7, 0x6f, 0x97,
84 0x42, 0xdc, 0x49, 0x52, 0x87, 0x76, 0xef, 0xd8, 0x84, 0x35, 0x6a, 0x6d,
85 0x78, 0x3c, 0x0e, 0x39, 0xbc, 0xdc, 0x6e, 0xa1, 0xc4, 0x12, 0xc7, 0xfe,
86 0x2d, 0x29, 0x4a, 0x7e, 0xf1, 0x91, 0x90, 0xb4, 0x58, 0xa8, 0xb7, 0x2d,
87 0x14, 0xd0, 0x80, 0xf4, 0xc9, 0x82, 0x3e, 0x21, 0x09, 0xf6, 0x73, 0x56,
88 0xba, 0x6b, 0xea, 0x7d, 0xd2, 0x52, 0xef, 0x86, 0xf0, 0x2e, 0x22, 0xa9,
89 0x1d, 0xe6, 0xfd, 0x10, 0xde, 0xdf, 0x24, 0x13, 0x36, 0xe6, 0x52, 0x7e,
90 0xc1, 0xca, 0x61, 0x8e, 0x1f, 0x89, 0xa8, 0xb5, 0xa2, 0xee, 0x44, 0x43,
91 0x3f, 0x13, 0xa8, 0xf7, 0x34, 0xc6, 0xc2, 0x7c, 0xcb, 0x49, 0xcc, 0xa5,
92 0x13, 0x73, 0xe1, 0x1c, 0x8b, 0x56, 0xae, 0x1e, 0x41, 0x7e, 0xda, 0xca,
93 0x9f, 0x3d, 0x8a, 0x67, 0xb1, 0xad, 0xcc, 0x0b, 0x4c, 0xd1, 0x7e, 0x5f,
94 0x43, 0xfb, 0x7d, 0x68, 0xcf, 0x31, 0xd8, 0x3e, 0x90, 0xff, 0xa2, 0x92,
95 0xc5, 0xe4, 0x7b, 0xd0, 0x23, 0xfc, 0xf7, 0xa0, 0xc7, 0xd7, 0x34, 0x3d,
96 0x7e, 0x26, 0xbf, 0x78, 0x7a, 0x5c, 0xfd, 0x05, 0xd1, 0x43, 0xa4, 0x70,
97 0x92, 0xcf, 0x11, 0x29, 0x2a, 0xbd, 0xc5, 0x7d, 0x4b, 0x79, 0xa7, 0xce,
98 0x22, 0x9d, 0x28, 0xc7, 0xd8, 0x03, 0xf5, 0x08, 0xd2, 0x67, 0x90, 0x6e,
99 0x0e, 0x8d, 0x9d, 0x7c, 0x13, 0xfc, 0xf7, 0xc5, 0xde, 0x61, 0xec, 0x47,
100 0x31, 0x61, 0x4b, 0x97, 0xd8, 0x1f, 0x84, 0xf1, 0xee, 0x74, 0xec, 0x82,
101 0x7c, 0x9f, 0xef, 0x43, 0xc6, 0xce, 0xe7, 0x66, 0x36, 0xbd, 0x9d, 0x55,
102 0x4f, 0x51, 0xd2, 0x33, 0x6b, 0x65, 0x22, 0xa1, 0x7c, 0x39, 0x39, 0x61,
103 0x65, 0xe2, 0xd0, 0x53, 0xcc, 0x0f, 0x86, 0x82, 0x39, 0x0f, 0xa0, 0xae,
104 0xd1, 0x59, 0x66, 0xee, 0x03, 0x98, 0xfb, 0x7a, 0xdd, 0x95, 0xc5, 0x5c,
105 0x38, 0x07, 0xce, 0xab, 0xa8, 0x75, 0x10, 0xfb, 0x39, 0xa4, 0xfa, 0x09,
106 0x67, 0x06, 0x85, 0xb6, 0xb4, 0x30, 0xc3, 0x7d, 0xc0, 0x76, 0xec, 0x2b,
107 0xd0, 0xc9, 0x85, 0x9a, 0xe9, 0xa3, 0xd8, 0xd8, 0x07, 0xe6, 0x23, 0x5b,
108 0x2d, 0x37, 0x0a, 0xde, 0xb3, 0xab, 0xa3, 0x78, 0xf7, 0xb4, 0xe4, 0xce,
109 0xde, 0x61, 0x61, 0x0d, 0xe8, 0x97, 0x34, 0x1a, 0x83, 0xce, 0xe6, 0x3e,
110 0x8b, 0x49, 0x3e, 0xce, 0xb2, 0x49, 0x3d, 0x6e, 0x44, 0xb2, 0x2a, 0x9f,
111 0x6b, 0x5b, 0x9d, 0xc7, 0x0b, 0x7a, 0x3d, 0x19, 0xac, 0x87, 0x73, 0x30,
112 0x6b, 0xc9, 0x34, 0xac, 0xc5, 0xd0, 0x9a, 0xb4, 0xb0, 0xa1, 0xe3, 0x63,
113 0xda, 0x86, 0xb0, 0xdd, 0x74, 0x03, 0xef, 0xa6, 0xd1, 0x86, 0xb4, 0x47,
114 0x9d, 0x75, 0x76, 0x85, 0x36, 0x65, 0x08, 0xfd, 0x94, 0xe6, 0x2c, 0xc9,
115 0x7b, 0xb0, 0xd9, 0xde, 0xcd, 0x5a, 0x5e, 0x57, 0x65, 0x29, 0xba, 0xa1,
116 0x2c, 0x3d, 0x66, 0x05, 0xfa, 0x1a, 0xb6, 0x05, 0xf6, 0x67, 0x6a, 0xce,
117 0x49, 0x1b, 0x59, 0x2a, 0xcd, 0xbc, 0x1f, 0x59, 0x32, 0xed, 0x63, 0x90,
118 0x5d, 0x33, 0xc6, 0xfa, 0x39, 0x9b, 0x3a, 0x98, 0x63, 0x79, 0x48, 0x63,
119 0x15, 0x8e, 0x13, 0xd8, 0x86, 0xca, 0x1a, 0xdb, 0x70, 0x14, 0x6d, 0x25,
120 0x94, 0xef, 0x6b, 0x95, 0x03, 0x73, 0xa6, 0x8f, 0xa3, 0x4a, 0x66, 0x27,
121 0x67, 0x1c, 0x7b, 0x38, 0x2c, 0xd9, 0xe1, 0xd9, 0x41, 0x19, 0xaa, 0x77,
122 0x81, 0xa7, 0x6f, 0xfb, 0xb0, 0x9d, 0x1f, 0x8c, 0x8a, 0x0b, 0xbd, 0x88,
123 0x35, 0x0f, 0x80, 0xc6, 0xf5, 0xa8, 0x58, 0x19, 0x0f, 0x69, 0x23, 0xd6,
124 0x8a, 0x44, 0x86, 0xd7, 0xe4, 0x9b, 0x50, 0x07, 0x7d, 0x0f, 0xac, 0xaf,
125 0x07, 0xf9, 0x04, 0x6d, 0x73, 0xde, 0xcf, 0x7c, 0xd8, 0x61, 0x6d, 0xb3,
126 0x58, 0x4a, 0x3d, 0x61, 0x74, 0xc4, 0x6f, 0x60, 0x7f, 0xab, 0xbd, 0x50,
127 0x04, 0x76, 0x41, 0x1f, 0xa2, 0xe4, 0xb4, 0x54, 0x7f, 0xce, 0xec, 0x7b,
128 0x55, 0xbe, 0x67, 0x80, 0xb2, 0x57, 0x01, 0x26, 0xe0, 0x9a, 0x16, 0xd5,
129 0x5e, 0xcf, 0xdb, 0x71, 0x99, 0x2e, 0x73, 0x3d, 0x8b, 0x92, 0xaa, 0xfd,
130 0x7b, 0xc9, 0x9f, 0x15, 0xf9, 0xd6, 0x0c, 0xeb, 0x7d, 0x55, 0xd7, 0x7b,
131 0x01, 0xf5, 0x52, 0xc9, 0xa1, 0x90, 0x03, 0x3b, 0xe0, 0x60, 0x9b, 0x6c,
132 0x4b, 0x22, 0xb5, 0x47, 0xf0, 0x1b, 0xa2, 0x91, 0x41, 0xbd, 0x00, 0xfb,
133 0xbc, 0x00, 0x7a, 0x88, 0xdc, 0x5d, 0x6e, 0x86, 0x3e, 0xf9, 0x9f, 0x98,
134 0x6b, 0x5c, 0x9e, 0xc4, 0x3a, 0x5e, 0x9a, 0x21, 0xbe, 0xfa, 0xaa, 0x2c,
135 0xcd, 0x10, 0x6f, 0xbd, 0x20, 0xd3, 0x33, 0x29, 0xef, 0x5b, 0xa0, 0xf3,
136 0x19, 0xe1, 0x5a, 0xb6, 0x79, 0x48, 0x81, 0x05, 0x9d, 0xe4, 0xe3, 0xd0,
137 0x67, 0x7d, 0x3b, 0x82, 0xfe, 0x7a, 0x74, 0x7f, 0x6e, 0xcd, 0x91, 0xab,
138 0x36, 0xf5, 0xd3, 0x3b, 0xf7, 0x78, 0x4e, 0xef, 0xf1, 0x31, 0xaf, 0x4b,
139 0x2c, 0xec, 0xeb, 0xec, 0x78, 0x11, 0xd6, 0x8f, 0xfb, 0xfa, 0x6d, 0x6b,
140 0x15, 0xff, 0x24, 0x80, 0x59, 0x1d, 0x65, 0xef, 0xfe, 0x6e, 0x7b, 0xbc,
141 0x71, 0x6f, 0x73, 0xfc, 0x36, 0xb4, 0x89, 0x20, 0x7d, 0xef, 0x7d, 0x8d,
142 0x3e, 0x1a, 0xda, 0x0e, 0x72, 0x5f, 0xa0, 0xcd, 0xbf, 0x05, 0x2d, 0x48,
143 0xff, 0xf7, 0xb3, 0x9f, 0x6f, 0x0b, 0xbf, 0xaf, 0xfd, 0x3c, 0xfe, 0x5e,
144 0xfb, 0xb9, 0x71, 0x2f, 0x5f, 0x20, 0x2d, 0x30, 0xb6, 0xcc, 0x06, 0xb2,
145 0xd5, 0x03, 0x5a, 0x27, 0x21, 0xa7, 0x98, 0x43, 0xf9, 0x6f, 0xfd, 0x6c,
146 0x24, 0xc0, 0x73, 0x81, 0x3c, 0xb1, 0x9e, 0xa9, 0x13, 0xe8, 0xde, 0xa1,
147 0xfa, 0x55, 0xa5, 0x67, 0x2f, 0x2a, 0x3d, 0xeb, 0x1c, 0x2d, 0x0a, 0xe5,
148 0xed, 0xf6, 0x30, 0xe9, 0x7e, 0xc1, 0xfb, 0x7d, 0xcc, 0xd1, 0x49, 0x26,
149 0xad, 0x9e, 0xa2, 0x65, 0xfd, 0xbe, 0x1c, 0x5c, 0x78, 0x58, 0x0e, 0x96,
150 0xd9, 0xc7, 0x2e, 0xbc, 0x77, 0x51, 0xb6, 0x09, 0xba, 0x96, 0x3a, 0xfd,
151 0xed, 0x50, 0x30, 0x96, 0x05, 0xfb, 0xb5, 0x1c, 0xba, 0xbb, 0x7e, 0x25,
152 0x94, 0x5b, 0xe0, 0xde, 0x45, 0x79, 0xbd, 0x51, 0xe7, 0x1b, 0x7d, 0xff,
153 0x0a, 0xc6, 0x34, 0x72, 0xee, 0x35, 0xe8, 0xd4, 0x69, 0xe2, 0x41, 0x2b,
154 0xe7, 0x91, 0x7f, 0xb4, 0x2d, 0x8f, 0xd8, 0xc1, 0xfa, 0x0f, 0x81, 0x66,
155 0xb4, 0x49, 0xa4, 0x21, 0xec, 0x61, 0x84, 0xfb, 0x97, 0xcf, 0xe2, 0x87,
156 0x33, 0xdc, 0x83, 0x12, 0x09, 0x67, 0x80, 0x7f, 0xe3, 0xac, 0xb3, 0x0b,
157 0x73, 0x0e, 0xf6, 0x77, 0x71, 0x65, 0x7f, 0x77, 0xcb, 0xc4, 0x42, 0x16,
158 0x3a, 0x20, 0xaf, 0xfa, 0x89, 0xba, 0x6b, 0x6c, 0x0b, 0xea, 0x27, 0x35,
159 0x1f, 0x36, 0x1b, 0xfd, 0x87, 0x32, 0x4f, 0x97, 0x35, 0x35, 0x94, 0x19,
160 0x7e, 0x15, 0x30, 0x16, 0x6d, 0xc4, 0x88, 0xc6, 0x3d, 0xbe, 0x9f, 0x27,
161 0x9f, 0xfb, 0xf7, 0x09, 0xf7, 0xc4, 0xa5, 0x72, 0xd1, 0x0e, 0x2b, 0xd9,
162 0x5c, 0xfc, 0xd8, 0xaa, 0x6c, 0x02, 0x27, 0xab, 0x5e, 0x48, 0x5b, 0xce,
163 0xa5, 0x15, 0xb4, 0x1c, 0xc2, 0x1a, 0x40, 0xb3, 0xce, 0x10, 0xe8, 0xd6,
164 0x2a, 0x85, 0xfa, 0x2e, 0xfd, 0x8e, 0xe5, 0x11, 0x19, 0x8b, 0x1b, 0x3b,
165 0xf4, 0xe7, 0x5b, 0x03, 0xac, 0x8b, 0x3a, 0xe5, 0xff, 0x1d, 0x0e, 0x64,
166 0xdf, 0x96, 0xc2, 0xe9, 0x21, 0xc8, 0x18, 0xb1, 0xd8, 0x26, 0x2d, 0x63,
167 0xec, 0x07, 0xe5, 0x67, 0x29, 0xc3, 0xa2, 0xf5, 0xe7, 0x20, 0xd2, 0x1f,
168 0x87, 0x69, 0xb7, 0xd9, 0x57, 0xe1, 0xb4, 0x69, 0x6f, 0xe6, 0xd1, 0xb1,
169 0xd2, 0xcf, 0x98, 0x67, 0x49, 0x58, 0xcd, 0x05, 0x65, 0x67, 0xd7, 0xce,
170 0xc5, 0xea, 0x34, 0x73, 0x79, 0x34, 0x1c, 0xcc, 0xa5, 0xa3, 0xa1, 0xaf,
171 0x78, 0xc3, 0x5c, 0x9a, 0x30, 0x97, 0xb8, 0xb2, 0x37, 0x9c, 0xcb, 0x05,
172 0xf0, 0xbe, 0x70, 0xf6, 0xc6, 0xeb, 0x82, 0x36, 0xf1, 0x86, 0x36, 0x9d,
173 0xeb, 0xda, 0xb0, 0xbe, 0x19, 0x03, 0xef, 0xce, 0x5e, 0xdd, 0x1c, 0xb4,
174 0x61, 0xbd, 0x26, 0xd8, 0x37, 0xbe, 0x53, 0x7e, 0x5b, 0x83, 0xfc, 0x1f,
175 0x84, 0xfc, 0x1b, 0xb9, 0x32, 0xb6, 0xd9, 0xf0, 0x75, 0x53, 0x28, 0x7f,
176 0xf2, 0x03, 0xf4, 0x3d, 0x43, 0x63, 0xe5, 0x25, 0xf8, 0x0f, 0x49, 0x29,
177 0xa4, 0xe1, 0x9b, 0xd8, 0x83, 0xa2, 0xfc, 0x89, 0x34, 0x7c, 0x16, 0x7b,
178 0xb3, 0xc2, 0x5b, 0x85, 0x74, 0xbf, 0xb6, 0x59, 0xdf, 0x97, 0x09, 0xc8,
179 0x70, 0x21, 0x9d, 0xc6, 0x78, 0xd0, 0xd5, 0x6e, 0x2f, 0xda, 0x71, 0xdc,
180 0xb7, 0x22, 0xb4, 0x23, 0x17, 0xca, 0x1f, 0x47, 0x7e, 0x33, 0xde, 0xff,
181 0xa9, 0x9e, 0x4f, 0x1b, 0xea, 0x7c, 0x5a, 0xf9, 0x26, 0x17, 0x54, 0x1d,
182 0xf6, 0x71, 0x19, 0xf9, 0x3b, 0x50, 0x07, 0x9b, 0x1c, 0x12, 0x68, 0xb9,
183 0x3b, 0xf1, 0xfb, 0x36, 0xca, 0x3e, 0x84, 0xb2, 0x2f, 0xa3, 0xec, 0x76,
184 0xe4, 0x5f, 0x5c, 0xd7, 0xef, 0x36, 0xe4, 0x1f, 0xc3, 0x7b, 0xac, 0xd3,
185 0xfe, 0x06, 0xde, 0xdf, 0x81, 0xdf, 0x97, 0xd7, 0xd5, 0xf9, 0x37, 0xeb,
186 0xf2, 0xc6, 0x2f, 0xf8, 0x63, 0x2d, 0x73, 0xc6, 0x27, 0x08, 0xf4, 0xe8,
187 0x54, 0xb9, 0x35, 0x34, 0x7c, 0x3a, 0x16, 0xda, 0x73, 0x9a, 0x78, 0x23,
188 0xa2, 0xfc, 0x80, 0x08, 0xfc, 0x80, 0xe9, 0x39, 0x3a, 0x88, 0x11, 0x94,
189 0x11, 0xbb, 0xcb, 0x40, 0x93, 0xf4, 0x78, 0x57, 0xb0, 0x4f, 0x0a, 0xb5,
190 0x2e, 0xe4, 0xb9, 0x7f, 0x20, 0x63, 0xb5, 0x16, 0xc8, 0x75, 0x4f, 0xba,
191 0x0a, 0x19, 0x3b, 0x00, 0xdf, 0x64, 0x02, 0x36, 0x70, 0xa2, 0xd6, 0x25,
192 0x0f, 0xd4, 0xae, 0x44, 0x02, 0x39, 0x32, 0x63, 0x3f, 0xbd, 0x6e, 0xec,
193 0x18, 0xfd, 0x0a, 0xc8, 0xfd, 0xfc, 0xe8, 0xfe, 0x39, 0x8e, 0x6f, 0x75,
194 0x47, 0xa4, 0x0d, 0x73, 0xa0, 0xff, 0x28, 0xbd, 0x11, 0xe9, 0x49, 0x4e,
195 0x29, 0x07, 0xb5, 0x28, 0xe1, 0x4c, 0x0f, 0xec, 0x83, 0xca, 0xc3, 0x5f,
196 0x84, 0xbe, 0xab, 0xad, 0xfa, 0x91, 0xc3, 0x2b, 0x7e, 0x64, 0x17, 0xfc,
197 0xcc, 0x17, 0x23, 0xc1, 0xde, 0x6f, 0x85, 0x6e, 0xb8, 0x9e, 0x38, 0x47,
198 0xe9, 0x77, 0xee, 0xf1, 0x9c, 0xd7, 0xae, 0xf3, 0x94, 0x65, 0xe8, 0x0b,
199 0x2b, 0xaa, 0xf4, 0x95, 0x58, 0x78, 0x37, 0x40, 0xf9, 0x45, 0x7e, 0xa1,
200 0x71, 0x7f, 0xff, 0x0e, 0xf6, 0x32, 0xdf, 0x1b, 0x39, 0xc3, 0x3f, 0x4a,
201 0xc6, 0x18, 0xbf, 0xf8, 0x8b, 0x75, 0x6b, 0x3b, 0xb0, 0x6e, 0x6d, 0x91,
202 0x15, 0xba, 0x72, 0x8d, 0x51, 0xac, 0x71, 0x69, 0x8e, 0xb4, 0xed, 0x87,
203 0x7c, 0x8a, 0x1b, 0x11, 0xca, 0x31, 0xf5, 0x6a, 0x1b, 0x74, 0x35, 0x69,
204 0x17, 0x11, 0xc6, 0x3c, 0x26, 0xb0, 0xa6, 0x09, 0xac, 0x69, 0xa2, 0x81,
205 0x8e, 0x07, 0x56, 0xd6, 0x64, 0xe6, 0x8d, 0x7a, 0x6a, 0xbf, 0xf1, 0x99,
206 0x3f, 0xe8, 0xa9, 0x36, 0x83, 0x69, 0x38, 0x97, 0xdc, 0xba, 0xb9, 0x90,
207 0x16, 0x9c, 0xcb, 0xca, 0x3c, 0xe2, 0x8c, 0x1c, 0x1d, 0xac, 0x91, 0xaf,
208 0x1c, 0x73, 0xaf, 0x4c, 0x96, 0x3f, 0xa0, 0xe7, 0xd1, 0x8a, 0x79, 0x8c,
209 0x41, 0x6f, 0x70, 0x3c, 0xec, 0xff, 0xda, 0x38, 0x9e, 0xe3, 0xe4, 0xbf,
210 0x9e, 0x8b, 0xa1, 0x05, 0xfd, 0xb6, 0x84, 0xc6, 0xe2, 0x86, 0x5e, 0xae,
211 0xc2, 0x0e, 0x97, 0xca, 0xff, 0x6d, 0x6b, 0x30, 0xb7, 0xa4, 0x9e, 0x47,
212 0x40, 0x63, 0x60, 0x78, 0x60, 0xa9, 0xbc, 0xd6, 0x07, 0x8d, 0x74, 0xbd,
213 0xbb, 0x49, 0xeb, 0x2b, 0xc8, 0x40, 0x63, 0xf9, 0xa7, 0x9a, 0x56, 0xeb,
214 0x32, 0x3f, 0xaf, 0xf3, 0x5b, 0x42, 0xc3, 0x27, 0x4d, 0xd9, 0xd5, 0xa6,
215 0x77, 0xf6, 0xf7, 0xd5, 0x26, 0xa3, 0x3f, 0x2e, 0x95, 0x1b, 0xf7, 0xfb,
216 0x21, 0x2b, 0xb0, 0x3b, 0x45, 0x29, 0x0d, 0x64, 0xa1, 0xe7, 0x68, 0x7f,
217 0x86, 0xac, 0xc0, 0xf6, 0xb0, 0xce, 0x21, 0x85, 0x1d, 0x23, 0x99, 0x2a,
218 0xe5, 0x1e, 0xb4, 0xac, 0x8d, 0xe6, 0x66, 0x7c, 0x7f, 0xca, 0x5b, 0x4e,
219 0x84, 0x85, 0x7a, 0x99, 0xb8, 0x8d, 0xe5, 0xcf, 0xa0, 0x1c, 0x76, 0xbd,
220 0x3e, 0x26, 0x6c, 0xb7, 0x31, 0x3e, 0x4b, 0x6a, 0x7c, 0x16, 0x00, 0xbb,
221 0x9c, 0xc2, 0x53, 0x4f, 0x8d, 0xc2, 0xfe, 0xeb, 0xe7, 0xa7, 0xf1, 0x9c,
222 0x6c, 0xc4, 0x80, 0xe8, 0xb7, 0x32, 0x9a, 0x9b, 0x53, 0x76, 0x00, 0xfb,
223 0x81, 0xbc, 0x3a, 0x03, 0x5e, 0x85, 0x64, 0x5a, 0xd9, 0x04, 0xce, 0x83,
224 0xed, 0x2a, 0xa3, 0xdd, 0x8b, 0x4c, 0xab, 0xa3, 0xee, 0x62, 0x58, 0x0e,
225 0xc4, 0x83, 0xb6, 0xcc, 0x27, 0x17, 0x8d, 0xdd, 0x6e, 0x91, 0x68, 0x86,
226 0xba, 0xcd, 0x49, 0x03, 0x87, 0x62, 0x3d, 0x47, 0x47, 0xa7, 0x5d, 0xda,
227 0xcb, 0xff, 0x03, 0x79, 0x68, 0x91, 0x26, 0x25, 0x27, 0x4f, 0xea, 0xb1,
228 0xce, 0x60, 0xac, 0xad, 0x98, 0x6b, 0x18, 0x3a, 0x32, 0x92, 0xc0, 0x38,
229 0x87, 0x2d, 0x77, 0x1b, 0xc6, 0xa3, 0xd7, 0xd8, 0x25, 0x53, 0x75, 0xca,
230 0xfa, 0xdf, 0x44, 0x56, 0x7d, 0xc5, 0x13, 0x68, 0x67, 0x7c, 0x14, 0x8e,
231 0x57, 0x05, 0x46, 0x69, 0xc1, 0x3a, 0x1c, 0x3b, 0x17, 0x86, 0xed, 0x9b,
232 0x33, 0x75, 0x38, 0xa7, 0xe3, 0xa3, 0xa9, 0xc5, 0x14, 0xfa, 0xea, 0xa2,
233 0xec, 0x41, 0xe6, 0xc2, 0xf8, 0xb1, 0x6f, 0xb6, 0x83, 0x4e, 0x1e, 0x34,
234 0x76, 0x7c, 0xb5, 0xbd, 0x69, 0xd7, 0xbd, 0x38, 0xa2, 0x65, 0xf7, 0xaf,
235 0xfc, 0xec, 0x38, 0xdf, 0x37, 0xc6, 0x07, 0x4c, 0x3b, 0x53, 0x27, 0xac,
236 0xf5, 0xf1, 0x7d, 0xd1, 0xd5, 0x79, 0x3e, 0x35, 0x1a, 0xf8, 0x31, 0x12,
237 0xc9, 0xf7, 0x0d, 0x6a, 0xbe, 0x3d, 0x8d, 0x32, 0xb6, 0xc7, 0x5e, 0xa8,
238 0x37, 0x62, 0xf0, 0xa0, 0xdf, 0x22, 0xb0, 0x47, 0xa9, 0xdc, 0x04, 0x5d,
239 0x93, 0x6d, 0x0f, 0x62, 0x22, 0xef, 0x85, 0xbb, 0xc1, 0x53, 0xf4, 0x53,
240 0x5a, 0x69, 0xab, 0xe2, 0x93, 0xa3, 0x2f, 0xa1, 0xff, 0x23, 0xe5, 0x60,
241 0xaf, 0x05, 0x74, 0x20, 0x5e, 0x0a, 0xc9, 0x92, 0x9b, 0x84, 0x7f, 0x47,
242 0x3b, 0x94, 0x94, 0x97, 0x5d, 0x83, 0x9f, 0x88, 0x9d, 0x50, 0xbf, 0xce,
243 0xf9, 0x70, 0xdd, 0x27, 0xb0, 0x6e, 0x5f, 0x66, 0xbd, 0x40, 0x3e, 0xfa,
244 0xb0, 0x37, 0xff, 0x53, 0xc4, 0x39, 0x4a, 0x3f, 0xe0, 0x6a, 0xa4, 0x71,
245 0x5d, 0xc6, 0x9e, 0x3d, 0xa5, 0x63, 0x93, 0x27, 0x34, 0x2f, 0x2b, 0xe0,
246 0xe5, 0xb6, 0xa4, 0x2d, 0xbd, 0x98, 0x3b, 0xea, 0xf4, 0xf7, 0x00, 0x8f,
247 0xd3, 0xd7, 0x4b, 0x60, 0x3e, 0x36, 0x64, 0x7d, 0xab, 0xb6, 0xfb, 0x9f,
248 0x89, 0x52, 0x5f, 0xb4, 0xab, 0xb8, 0xe7, 0x09, 0x25, 0x6b, 0x81, 0xec,
249 0x85, 0xf5, 0x7b, 0xc3, 0xef, 0x30, 0xcd, 0xae, 0xac, 0xc6, 0xf9, 0x8c,
250 0xae, 0x66, 0xfd, 0x39, 0xd4, 0x0f, 0x61, 0x4d, 0xbe, 0x3f, 0xa9, 0xe6,
251 0x3b, 0x0f, 0x5e, 0x87, 0xa5, 0xb4, 0x22, 0x8f, 0xf3, 0x90, 0xc7, 0x26,
252 0x91, 0x8e, 0x46, 0xb9, 0xa1, 0xac, 0xbc, 0x1e, 0x65, 0x4c, 0x2e, 0x69,
253 0x19, 0xde, 0x45, 0x88, 0xdd, 0x90, 0x37, 0xbc, 0xe3, 0xf3, 0x46, 0x18,
254 0x90, 0x71, 0x27, 0xdf, 0x5f, 0xf2, 0x18, 0x23, 0x6c, 0x96, 0xa2, 0x1d,
255 0xe0, 0x97, 0x92, 0x47, 0x39, 0xcd, 0x25, 0x23, 0xe2, 0x24, 0x0e, 0xc8,
256 0x9b, 0xe8, 0x3b, 0x9b, 0x8e, 0x4a, 0xe0, 0xa7, 0x4e, 0x80, 0x6e, 0xcb,
257 0xb6, 0xef, 0xbf, 0x04, 0xbf, 0xba, 0x0a, 0xbf, 0x66, 0x09, 0x69, 0xa9,
258 0x86, 0x3d, 0xd0, 0x12, 0xc1, 0x9e, 0x32, 0x7b, 0x25, 0x26, 0x15, 0xd4,
259 0x59, 0xc0, 0xbb, 0xc7, 0x6b, 0x86, 0xcb, 0xbe, 0x6f, 0x61, 0x5d, 0xfb,
260 0xdd, 0xbf, 0xf6, 0x0b, 0xf1, 0xc6, 0xba, 0x06, 0x77, 0x11, 0x33, 0x11,
261 0xf3, 0x10, 0xab, 0xf0, 0x1d, 0xf1, 0xc7, 0x61, 0xcc, 0x85, 0x32, 0xdc,
262 0x26, 0xb1, 0x8c, 0x93, 0x18, 0x11, 0xa3, 0x8b, 0x5f, 0x03, 0xff, 0x8b,
263 0x7e, 0xb3, 0xdb, 0x25, 0xcf, 0x83, 0xd7, 0xcf, 0xd5, 0x0d, 0xef, 0x93,
264 0xe0, 0xbd, 0x53, 0x2c, 0x8a, 0x2f, 0x17, 0x3d, 0x37, 0xf9, 0x39, 0xa4,
265 0xdf, 0xf1, 0x7e, 0x85, 0xb4, 0x78, 0x0a, 0x26, 0x0f, 0x38, 0x1b, 0x7a,
266 0x75, 0xd6, 0xe0, 0xc7, 0x36, 0xe2, 0x7d, 0x4d, 0xc7, 0xab, 0xe8, 0xd3,
267 0xb1, 0x2d, 0x80, 0xa5, 0x3b, 0x51, 0x2f, 0x90, 0x6b, 0x53, 0x76, 0x18,
268 0x75, 0x39, 0x07, 0xfa, 0x62, 0xdf, 0xc5, 0x5e, 0xf2, 0xfd, 0x7b, 0xbd,
269 0xc9, 0x86, 0x3d, 0x31, 0x0f, 0x1e, 0x28, 0xd9, 0x1c, 0x68, 0x17, 0xc6,
270 0xee, 0xa4, 0xbf, 0x43, 0xf9, 0x0a, 0x7c, 0x86, 0x8c, 0x0e, 0xd0, 0x26,
271 0x24, 0x55, 0xdc, 0x8f, 0xb6, 0xe7, 0x39, 0xd0, 0xfe, 0xd3, 0x35, 0xf2,
272 0xa1, 0x55, 0xe9, 0xfe, 0xe7, 0xcb, 0xb4, 0xef, 0x01, 0x46, 0x9b, 0x50,
273 0xb1, 0x5c, 0xda, 0x84, 0x34, 0x78, 0x13, 0xc4, 0xf0, 0x1e, 0x50, 0x6d,
274 0x59, 0x8f, 0x6d, 0x1b, 0xf9, 0xc7, 0x3a, 0x5b, 0x81, 0xaf, 0x28, 0x83,
275 0x6d, 0xc0, 0x25, 0xed, 0x72, 0x20, 0xdd, 0x0c, 0xba, 0x77, 0x28, 0x3c,
276 0x65, 0xb9, 0x1f, 0x86, 0xed, 0x02, 0xa6, 0xb3, 0x1d, 0x6f, 0xd5, 0xf7,
277 0xb8, 0x1d, 0x65, 0x3f, 0x05, 0xfd, 0x59, 0xb6, 0x49, 0xc7, 0xaf, 0x1f,
278 0xc6, 0xfe, 0xab, 0x6c, 0x0d, 0xe2, 0x22, 0xe4, 0x83, 0xd1, 0x03, 0xc6,
279 0xfe, 0xd9, 0x1a, 0x47, 0x92, 0x37, 0x41, 0x0c, 0xc5, 0x52, 0x75, 0x89,
280 0xe7, 0x1b, 0xfd, 0x16, 0xee, 0x3b, 0xdf, 0xbf, 0xe8, 0x29, 0x7b, 0x0a,
281 0x1e, 0xec, 0x86, 0x0d, 0x8b, 0x68, 0x5a, 0xb7, 0x82, 0xd6, 0x81, 0x8d,
282 0x4d, 0x76, 0x40, 0xef, 0xb8, 0x56, 0x53, 0x40, 0x3f, 0x62, 0x85, 0xbf,
283 0x85, 0x1f, 0x4f, 0xff, 0x81, 0x38, 0x81, 0x73, 0x47, 0xbb, 0x05, 0xd6,
284 0xa5, 0x2d, 0x7e, 0x0c, 0x63, 0x84, 0x25, 0xd9, 0xc9, 0xfc, 0x03, 0xba,
285 0x0d, 0x9f, 0x7d, 0xe9, 0xdd, 0xd1, 0x28, 0xcf, 0x83, 0x98, 0x27, 0xd7,
286 0x63, 0xe2, 0x7a, 0x5d, 0x4a, 0x07, 0xac, 0xca, 0x85, 0x99, 0x93, 0x19,
287 0x97, 0x73, 0x4b, 0x48, 0x07, 0xe6, 0x76, 0x37, 0x74, 0xf4, 0x8e, 0x0e,
288 0xf6, 0x69, 0xc6, 0x6e, 0x9c, 0x93, 0xc1, 0x2f, 0x81, 0xdd, 0x8d, 0xba,
289 0xcd, 0xb2, 0xa3, 0x93, 0xb4, 0xeb, 0x52, 0xba, 0x7a, 0x95, 0x1f, 0xb4,
290 0xbf, 0x1c, 0x7b, 0x7d, 0xf9, 0x1d, 0x0d, 0xf3, 0x6a, 0x3c, 0x03, 0x20,
291 0x76, 0xd8, 0x89, 0x77, 0x9c, 0x13, 0x9c, 0xe4, 0xb8, 0x2f, 0x7b, 0x14,
292 0xdd, 0x38, 0xb7, 0xc6, 0x79, 0x10, 0x43, 0x71, 0xce, 0x9c, 0xc3, 0x7a,
293 0x6c, 0xc2, 0xf9, 0xfc, 0x57, 0xcd, 0xc3, 0x4d, 0x7a, 0x5d, 0x06, 0xcb,
294 0xa4, 0xd0, 0xf6, 0x3f, 0x60, 0x0d, 0x7c, 0xe6, 0x3a, 0x8c, 0xcd, 0x4e,
295 0x05, 0xfd, 0xb4, 0x98, 0x78, 0xb0, 0x89, 0x6b, 0x70, 0x5e, 0xdc, 0x33,
296 0x86, 0x4e, 0x1d, 0x9a, 0x47, 0xbb, 0xd7, 0x8d, 0xeb, 0x78, 0x6b, 0xf5,
297 0xc8, 0xed, 0x0d, 0xeb, 0xeb, 0x97, 0xe2, 0x02, 0xe5, 0xe2, 0x36, 0xa4,
298 0x06, 0x13, 0x0c, 0x40, 0xf7, 0xbf, 0x2b, 0x26, 0xe0, 0x59, 0xd5, 0x78,
299 0x01, 0x3e, 0x99, 0xd2, 0xfd, 0x6a, 0x2f, 0xc6, 0x90, 0x87, 0x3e, 0xa9,
300 0xdf, 0x43, 0x19, 0x1b, 0x9f, 0xa8, 0x79, 0xe3, 0x93, 0xb5, 0x81, 0x71,
301 0xe2, 0xa9, 0x40, 0xe6, 0x50, 0xbf, 0x26, 0x13, 0xf0, 0xb3, 0xc7, 0x73,
302 0xaa, 0x9d, 0x8a, 0x31, 0x6c, 0xd0, 0x8f, 0x70, 0x3f, 0x4e, 0x04, 0x63,
303 0xc5, 0xc6, 0xf3, 0xd0, 0x41, 0x0b, 0xb3, 0xb0, 0x4b, 0xae, 0x93, 0xa5,
304 0x5c, 0xee, 0xf7, 0x9c, 0x11, 0x25, 0x7b, 0x71, 0x67, 0x8c, 0xbc, 0xac,
305 0xce, 0xfe, 0xb2, 0x2c, 0xcc, 0xf9, 0x72, 0x17, 0x74, 0xe1, 0x43, 0x90,
306 0x55, 0x39, 0x07, 0x45, 0x78, 0x0e, 0xca, 0xeb, 0x5c, 0x5c, 0xac, 0x53,
307 0x5d, 0x12, 0x3d, 0x96, 0x90, 0xc8, 0x31, 0x62, 0xcb, 0x94, 0x7d, 0x97,
308 0x08, 0xec, 0xd8, 0x8b, 0x1f, 0xb2, 0xc4, 0x19, 0xcc, 0x4a, 0x2a, 0xf9,
309 0x38, 0x6c, 0x6f, 0x15, 0x69, 0x49, 0x52, 0xe9, 0xb3, 0xe8, 0x2b, 0x7a,
310 0x0e, 0x75, 0xd1, 0x6e, 0xd3, 0x52, 0x12, 0xbf, 0x4e, 0x69, 0x59, 0x0a,
311 0xf6, 0x4a, 0xcb, 0xd2, 0x5a, 0xff, 0x7c, 0x68, 0xc5, 0x3f, 0xe7, 0xfb,
312 0xb7, 0x75, 0x5c, 0xe1, 0x8b, 0xfa, 0x8c, 0x81, 0x32, 0x42, 0x7b, 0xa4,
313 0x7c, 0x63, 0xe8, 0xfd, 0x2f, 0xc2, 0xc7, 0x02, 0x0e, 0x2c, 0xc3, 0x97,
314 0xca, 0xf8, 0xf2, 0xac, 0x57, 0xf4, 0x73, 0x03, 0xbe, 0xbc, 0xe6, 0xb9,
315 0xc5, 0x82, 0x38, 0x6f, 0x53, 0xdf, 0xfd, 0x85, 0xf7, 0x4f, 0xe4, 0xfe,
316 0x76, 0xe7, 0xfe, 0x6c, 0xa8, 0xe8, 0xb7, 0xc2, 0xb7, 0xba, 0x31, 0x73,
317 0x58, 0xf6, 0x6f, 0x5f, 0x86, 0x0f, 0x9c, 0xbd, 0x11, 0x38, 0x2b, 0x51,
318 0x50, 0xba, 0xea, 0x75, 0xe5, 0xb7, 0x7d, 0xa2, 0xe7, 0xb0, 0x6c, 0xd9,
319 0xee, 0xd8, 0xd7, 0xc2, 0xc4, 0x40, 0x87, 0x25, 0x0f, 0xfd, 0x9f, 0x0f,
320 0xbb, 0xf6, 0x5e, 0x71, 0x46, 0x1e, 0x11, 0x9e, 0x0d, 0xba, 0xd2, 0x7d,
321 0xcc, 0x4d, 0x7c, 0x32, 0xd4, 0x7b, 0xf0, 0x93, 0xc0, 0xae, 0xdd, 0xe7,
322 0x98, 0xf7, 0x25, 0xb6, 0xdd, 0xc6, 0x73, 0x5c, 0xba, 0x4f, 0x25, 0x25,
323 0x05, 0xba, 0xf4, 0x29, 0x9a, 0xf0, 0x6c, 0x22, 0x21, 0xbd, 0xc7, 0x88,
324 0x49, 0x14, 0x6d, 0xfa, 0x40, 0x9b, 0x34, 0x68, 0x03, 0x9f, 0x66, 0x9b,
325 0x7d, 0x0d, 0xe9, 0x65, 0x49, 0x0d, 0x7e, 0x0f, 0xb4, 0xe9, 0x03, 0x6d,
326 0x7a, 0xcf, 0x25, 0xd1, 0x1e, 0x7d, 0x2c, 0x75, 0x23, 0x6d, 0x91, 0x5f,
327 0xbb, 0xbe, 0x13, 0xcf, 0xae, 0xa4, 0x8e, 0xc5, 0x30, 0x46, 0x48, 0xf6,
328 0xf4, 0x14, 0x65, 0x78, 0x3b, 0x30, 0x74, 0xfc, 0xb0, 0x5c, 0x81, 0x1d,
329 0x2a, 0xc3, 0x7f, 0x7b, 0x76, 0xd0, 0x19, 0x5b, 0x86, 0x2e, 0xad, 0xdf,
330 0xed, 0xcb, 0x37, 0xb6, 0x7f, 0xd3, 0x4f, 0x5c, 0xef, 0xdc, 0x2f, 0xa1,
331 0x01, 0x99, 0x2e, 0x2b, 0xfb, 0x90, 0xc8, 0x85, 0x15, 0xd6, 0xc1, 0x1a,
332 0x8b, 0xb0, 0x31, 0x3c, 0xf3, 0x74, 0xa1, 0xeb, 0x1f, 0x91, 0x87, 0x2a,
333 0x53, 0xf8, 0x01, 0x77, 0xcf, 0xb0, 0xee, 0x41, 0xe0, 0xed, 0x87, 0xe5,
334 0xc0, 0x0c, 0xb0, 0x58, 0x06, 0xf3, 0x1e, 0x70, 0x81, 0xcb, 0x33, 0xcd,
335 0xd2, 0x86, 0x32, 0xd0, 0x76, 0xac, 0xbe, 0x1e, 0xd7, 0x2e, 0x83, 0x0f,
336 0x83, 0xf2, 0x27, 0xf5, 0x01, 0xf9, 0x4a, 0xbd, 0x5f, 0xbe, 0x04, 0xdb,
337 0xf2, 0x5c, 0xbd, 0x0b, 0x7b, 0x25, 0x01, 0x9e, 0x64, 0xc0, 0x1f, 0x4f,
338 0xbe, 0x5c, 0x4f, 0xcb, 0x17, 0x41, 0xab, 0xe7, 0xf1, 0x1b, 0x2e, 0xa7,
339 0x65, 0x4f, 0xb9, 0x5f, 0xf3, 0x88, 0xfc, 0x71, 0x31, 0x1f, 0x17, 0x6b,
340 0x77, 0x9e, 0x29, 0x62, 0xff, 0x2d, 0xd4, 0xdd, 0xb7, 0xaa, 0x34, 0xb2,
341 0x6d, 0xb6, 0x9c, 0x59, 0xb1, 0x2f, 0x45, 0xdf, 0x76, 0x9d, 0xa3, 0x13,
342 0xe0, 0x43, 0x15, 0xfb, 0x74, 0x4c, 0xd1, 0x7e, 0xd5, 0xf6, 0x54, 0x03,
343 0xdb, 0x63, 0xd6, 0x37, 0x5b, 0x90, 0xef, 0x48, 0xee, 0xc4, 0xb4, 0xec,
344 0x3f, 0xe9, 0xcb, 0x6f, 0x7a, 0x3e, 0xe4, 0x98, 0xba, 0x78, 0x80, 0x3a,
345 0x3e, 0x39, 0x11, 0xb6, 0x94, 0x9f, 0x1b, 0x60, 0x8d, 0xef, 0x75, 0x60,
346 0xcf, 0xa6, 0xb3, 0xd6, 0x94, 0xa4, 0x4e, 0x4c, 0x49, 0xf7, 0x09, 0xc8,
347 0x82, 0xc7, 0xbe, 0x96, 0x6d, 0xeb, 0x1d, 0xf2, 0xc0, 0x71, 0x9c, 0xc1,
348 0xbc, 0xb8, 0xf6, 0x5b, 0x92, 0xc6, 0xf8, 0x87, 0xa4, 0x07, 0x6d, 0x5c,
349 0xb4, 0xb9, 0xa6, 0xc6, 0x6e, 0xc5, 0xd8, 0xcd, 0x72, 0x24, 0xee, 0x40,
350 0xd6, 0x68, 0xc3, 0xff, 0xaf, 0xe4, 0xaa, 0x4c, 0x7f, 0x24, 0xb9, 0x33,
351 0x6f, 0x37, 0x4b, 0x0b, 0x9f, 0xa1, 0x1a, 0xe6, 0x59, 0xde, 0x8d, 0x94,
352 0xe5, 0xae, 0x58, 0xc7, 0x7f, 0x22, 0xb9, 0xf3, 0x1c, 0xfb, 0x2d, 0x94,
353 0x7f, 0x43, 0x72, 0xc7, 0x7f, 0x8a, 0xfc, 0x15, 0xa4, 0x6f, 0x23, 0x1d,
354 0x93, 0xee, 0xe3, 0xf0, 0x91, 0xcf, 0x7f, 0x1b, 0x79, 0xf8, 0x74, 0xe7,
355 0x8f, 0xa0, 0xde, 0x6e, 0xcc, 0xef, 0xde, 0x18, 0xb0, 0x06, 0x74, 0x5e,
356 0xec, 0xba, 0x60, 0xfe, 0x2c, 0x67, 0x19, 0xdf, 0x1d, 0x81, 0x4e, 0xfb,
357 0x1f, 0xd0, 0x69, 0xfa, 0x79, 0x81, 0x79, 0xea, 0x36, 0x3e, 0x4f, 0x81,
358 0x26, 0x87, 0x90, 0xf7, 0xe5, 0x61, 0x8f, 0xf6, 0x66, 0xa7, 0x8c, 0xdb,
359 0x45, 0xbf, 0x05, 0xb8, 0xa2, 0x15, 0xfb, 0x60, 0x6a, 0xc7, 0xc6, 0xfb,
360 0xe0, 0x68, 0xef, 0x61, 0xd9, 0xb4, 0xdd, 0xac, 0xdf, 0xac, 0xd7, 0xb5,
361 0x7f, 0xa8, 0xe8, 0xe0, 0x14, 0x3f, 0x29, 0x5c, 0x87, 0x9b, 0x78, 0xd2,
362 0xea, 0xbd, 0xff, 0x21, 0xec, 0x03, 0xeb, 0x3c, 0xf3, 0xc1, 0x3e, 0xb0,
363 0xce, 0x43, 0x37, 0xcc, 0xc3, 0x47, 0x9b, 0xef, 0x92, 0xe6, 0xe3, 0xab,
364 0xfb, 0xa0, 0xe9, 0xf8, 0xcf, 0xdf, 0x07, 0xcd, 0xe7, 0x51, 0xef, 0x3c,
365 0x69, 0x86, 0x3e, 0xce, 0x90, 0x66, 0x9d, 0x48, 0x1f, 0xc1, 0x5a, 0x39,
366 0xf7, 0x66, 0xcc, 0x3d, 0xc0, 0x45, 0x1f, 0x82, 0xbc, 0x7f, 0x62, 0xfb,
367 0x21, 0x5d, 0xfe, 0x9f, 0xfd, 0x91, 0xb8, 0x53, 0x91, 0x10, 0x69, 0x8a,
368 0xba, 0x55, 0xd2, 0xf0, 0x79, 0xd0, 0xe6, 0xa0, 0x74, 0x93, 0x7e, 0xd5,
369 0xbd, 0xc8, 0x17, 0xfd, 0x28, 0x7d, 0x74, 0x45, 0x4f, 0xe0, 0xa4, 0x01,
370 0x96, 0xbf, 0x0a, 0x99, 0x21, 0xc6, 0x7c, 0x5d, 0xf6, 0xcf, 0xf8, 0x32,
371 0xee, 0x71, 0xfd, 0x6f, 0x62, 0xfd, 0xd9, 0xed, 0x71, 0x59, 0x4e, 0xc6,
372 0x41, 0x93, 0x05, 0xe8, 0xf6, 0x2b, 0x12, 0xd0, 0x81, 0x31, 0xe7, 0x3d,
373 0xe2, 0x26, 0x86, 0xc5, 0x4d, 0x7f, 0x0f, 0x74, 0x18, 0x86, 0xec, 0xe7,
374 0xeb, 0x94, 0x9d, 0x57, 0x64, 0x08, 0x32, 0xf1, 0x86, 0xe7, 0xa4, 0x81,
375 0x85, 0xa0, 0x2f, 0x28, 0x17, 0x94, 0x89, 0x36, 0xa5, 0x93, 0xe6, 0x3d,
376 0xe7, 0xa9, 0xaa, 0xdc, 0x2a, 0xf3, 0x0a, 0x9b, 0xe2, 0xdd, 0x71, 0x65,
377 0x2f, 0xd2, 0x13, 0x56, 0x0f, 0x74, 0x74, 0x5a, 0xec, 0xde, 0x9b, 0x9b,
378 0xcd, 0x3d, 0x85, 0xc2, 0x89, 0x90, 0x4c, 0xf5, 0x92, 0x57, 0xec, 0x17,
379 0xf9, 0x6a, 0xd1, 0x8f, 0xb8, 0x6f, 0xf9, 0xa7, 0x3b, 0x93, 0xf2, 0xe9,
380 0xde, 0x15, 0xb9, 0xac, 0x88, 0x04, 0xfb, 0x62, 0x48, 0xf1, 0xc3, 0xcc,
381 0xdb, 0xac, 0xc5, 0xbc, 0xeb, 0x6f, 0x78, 0xc7, 0xb5, 0x50, 0xd6, 0x57,
382 0xf6, 0x4e, 0xf2, 0x9d, 0x73, 0xfd, 0x5d, 0xd0, 0xcc, 0x79, 0xaa, 0x24,
383 0xaf, 0x41, 0xf6, 0x40, 0xc3, 0xf3, 0x4c, 0x49, 0xc3, 0x29, 0xc8, 0xfd,
384 0xab, 0xb2, 0xe7, 0x04, 0xf7, 0xcc, 0xab, 0x58, 0xab, 0xd2, 0x25, 0xd0,
385 0x11, 0xec, 0xcf, 0x97, 0x69, 0x8f, 0xb1, 0x92, 0x5b, 0x13, 0x93, 0xf0,
386 0xe1, 0x26, 0x6c, 0x5f, 0x96, 0xbc, 0xa2, 0x2c, 0x0d, 0xa2, 0x4d, 0xf5,
387 0x11, 0xfc, 0xda, 0xf4, 0xda, 0x3e, 0x0b, 0xba, 0x3b, 0xc9, 0x8a, 0xf5,
388 0x19, 0xd0, 0xfd, 0x61, 0x49, 0x1d, 0x5f, 0xd1, 0x35, 0x90, 0xbb, 0x40,
389 0xd7, 0xa4, 0xce, 0xdb, 0x52, 0x2d, 0xbb, 0xf2, 0x71, 0xea, 0x90, 0x32,
390 0xd7, 0x05, 0x1d, 0xc3, 0xf3, 0xdb, 0x32, 0xf4, 0x4c, 0x19, 0x3a, 0x05,
391 0x3a, 0xe4, 0x4b, 0x28, 0xff, 0x22, 0xea, 0x3c, 0x0f, 0x9f, 0xe7, 0x39,
392 0x60, 0xbf, 0x8b, 0xc0, 0x14, 0x17, 0xca, 0x59, 0xed, 0x1b, 0xaa, 0xf5,
393 0xc2, 0x66, 0x29, 0x7f, 0x45, 0xaa, 0x15, 0xd2, 0xe3, 0x27, 0x8a, 0xb7,
394 0x39, 0x6f, 0x2b, 0x71, 0x16, 0x66, 0x26, 0x52, 0xa9, 0x18, 0x9a, 0x50,
395 0xf7, 0x31, 0xf6, 0x6f, 0x74, 0x65, 0xeb, 0x3a, 0x5d, 0x29, 0xf2, 0x62,
396 0x2d, 0xc0, 0x93, 0xc4, 0xc7, 0xa5, 0x99, 0xe4, 0xca, 0x19, 0x59, 0x09,
397 0x76, 0xf3, 0x32, 0xfc, 0x92, 0x58, 0xe6, 0x5b, 0x12, 0x3b, 0xe5, 0xfb,
398 0xdf, 0x87, 0xdd, 0x2c, 0x82, 0x27, 0x56, 0x08, 0xe5, 0x8b, 0x7c, 0x47,
399 0xb9, 0xa7, 0x6c, 0x87, 0x18, 0x2b, 0x97, 0x97, 0x51, 0x56, 0x55, 0x3e,
400 0xd3, 0xb7, 0x31, 0x1f, 0x3d, 0x3f, 0x55, 0xc6, 0x7a, 0xcd, 0x92, 0x1f,
401 0x4f, 0xcb, 0xe3, 0xe5, 0x6d, 0x76, 0x33, 0xda, 0x57, 0x16, 0xd9, 0xc6,
402 0x19, 0xe4, 0x95, 0x9d, 0x97, 0x17, 0x59, 0xde, 0x25, 0x57, 0x66, 0x32,
403 0x6a, 0x0e, 0xd5, 0xb9, 0x8c, 0x04, 0x31, 0x49, 0xea, 0x2b, 0xce, 0x15,
404 0x79, 0xfa, 0x96, 0x65, 0xda, 0xd9, 0x88, 0x14, 0x13, 0xa4, 0x75, 0x42,
405 0x2e, 0xcf, 0xc4, 0x37, 0x31, 0x86, 0x93, 0x73, 0xf9, 0x6c, 0x62, 0x07,
406 0xf6, 0xfb, 0x88, 0x1d, 0x30, 0x5e, 0x10, 0x81, 0x2d, 0x53, 0x31, 0x04,
407 0xa4, 0xc9, 0x06, 0x9f, 0x95, 0xef, 0x03, 0x6c, 0xb4, 0x8a, 0x1f, 0x89,
408 0x27, 0xb9, 0x5e, 0xa7, 0xb8, 0x0c, 0xfd, 0xd1, 0x91, 0x79, 0x49, 0xee,
409 0x99, 0x0f, 0xd6, 0x67, 0x9d, 0x11, 0xde, 0xd3, 0x90, 0x6b, 0x73, 0x8e,
410 0x77, 0x15, 0x98, 0x22, 0x1f, 0xf7, 0xc0, 0xaf, 0x3f, 0x8b, 0x41, 0x7f,
411 0x0d, 0x66, 0xad, 0x3d, 0x9b, 0x02, 0x7c, 0x16, 0x91, 0xa9, 0x19, 0x9e,
412 0xa9, 0x41, 0xb7, 0x01, 0x43, 0xfe, 0xf3, 0x08, 0x9e, 0x6b, 0xcc, 0xc3,
413 0x4f, 0x0b, 0x7c, 0x50, 0x3c, 0x07, 0xfd, 0x91, 0xe6, 0xd6, 0x3c, 0xd7,
414 0x1e, 0x92, 0x7b, 0x80, 0x4e, 0x04, 0xfd, 0x77, 0xeb, 0xb1, 0xba, 0xcf,
415 0xa4, 0x19, 0xc3, 0x93, 0x14, 0xf4, 0x45, 0x6e, 0x2e, 0x82, 0xb1, 0xba,
416 0x34, 0x36, 0xe7, 0xbb, 0xf5, 0xd8, 0xd3, 0xf8, 0x78, 0x69, 0x79, 0xa2,
417 0x6c, 0xb0, 0x5e, 0x1a, 0x36, 0x56, 0x22, 0x23, 0x7d, 0xbe, 0x7c, 0xdf,
418 0x23, 0xbd, 0xfa, 0x91, 0xf7, 0xe4, 0x68, 0xfd, 0xdd, 0xce, 0xce, 0x1a,
419 0xff, 0x5a, 0x31, 0x47, 0xfe, 0x30, 0x3f, 0xe0, 0x23, 0xce, 0xdd, 0x82,
420 0x3d, 0x2f, 0x01, 0x77, 0x59, 0xe7, 0xba, 0xd4, 0x3b, 0x0b, 0xd8, 0xa0,
421 0x3a, 0x03, 0xdd, 0x78, 0x8e, 0xe7, 0x89, 0xd0, 0x6d, 0xe7, 0xa2, 0x52,
422 0x9a, 0xa5, 0x5c, 0x4a, 0x87, 0x05, 0x7e, 0xb1, 0x7e, 0x75, 0xa6, 0x0b,
423 0x69, 0x2b, 0xd2, 0xa4, 0xea, 0xa7, 0x3a, 0xe3, 0xaa, 0xf6, 0xd5, 0x99,
424 0xb4, 0x6a, 0x57, 0x9d, 0xe9, 0x47, 0xea, 0x49, 0xd3, 0x39, 0x38, 0x4e,
425 0xe7, 0x7a, 0x65, 0xea, 0x34, 0xec, 0xcb, 0x80, 0xa5, 0xce, 0xe2, 0x27,
426 0x60, 0x7f, 0x22, 0xf0, 0xb2, 0xae, 0xda, 0x83, 0xc0, 0x58, 0x3b, 0x81,
427 0x41, 0x76, 0x8a, 0x7b, 0x8a, 0xeb, 0xa7, 0xee, 0xbd, 0xcc, 0x78, 0x52,
428 0xe2, 0x41, 0xc9, 0xca, 0x81, 0xd9, 0x66, 0xec, 0xd7, 0x88, 0x5d, 0x92,
429 0x1e, 0x7b, 0x18, 0xf9, 0x42, 0x85, 0x74, 0xbb, 0x4f, 0xf9, 0x6e, 0x39,
430 0xef, 0x1c, 0x78, 0x92, 0xc1, 0x18, 0xef, 0xa7, 0x7d, 0x1f, 0xe4, 0xcf,
431 0xd5, 0x7d, 0x64, 0x30, 0x9f, 0x46, 0x7a, 0xf0, 0x1c, 0x31, 0xfb, 0x73,
432 0xce, 0x11, 0x29, 0xd7, 0xa4, 0xef, 0x7d, 0x72, 0xd9, 0xcd, 0xc8, 0xcb,
433 0x6e, 0x5a, 0xae, 0xb8, 0x3b, 0xe4, 0xeb, 0xb0, 0xd3, 0x2f, 0xb9, 0x7d,
434 0x9b, 0x88, 0x05, 0xaa, 0xea, 0x6c, 0xc6, 0xf0, 0xca, 0xd5, 0xf1, 0xc4,
435 0x1f, 0xc8, 0xd2, 0x0c, 0xb1, 0xb3, 0xbf, 0x7b, 0xbf, 0x57, 0xa4, 0xdd,
436 0xc2, 0x1c, 0x88, 0xd5, 0x8a, 0xb0, 0x7f, 0x87, 0x65, 0xd8, 0xa3, 0xdd,
437 0x53, 0x36, 0x2a, 0x31, 0x1c, 0xec, 0x67, 0xaf, 0x00, 0xbd, 0x7a, 0x79,
438 0x16, 0xfb, 0x49, 0x28, 0xff, 0x78, 0xae, 0x90, 0xef, 0xae, 0x3c, 0x59,
439 0xe6, 0x3a, 0x4b, 0xd7, 0xb5, 0x48, 0x58, 0x46, 0x14, 0x5e, 0x68, 0x93,
440 0x17, 0x17, 0x37, 0x8b, 0x05, 0x0b, 0x65, 0xdd, 0x12, 0x55, 0xb7, 0x18,
441 0xe8, 0x7f, 0x4b, 0x3b, 0xef, 0x22, 0xbd, 0x05, 0xda, 0x30, 0x16, 0x80,
442 0xb5, 0xb5, 0x73, 0x25, 0x26, 0xdf, 0x8f, 0xfd, 0xf5, 0x96, 0xda, 0x6b,
443 0x79, 0x37, 0x8e, 0x67, 0xa6, 0xdc, 0x73, 0x8c, 0x3b, 0x85, 0x75, 0xfc,
444 0xf7, 0xaf, 0xd4, 0xfb, 0x66, 0x77, 0x17, 0x70, 0x1d, 0xe5, 0x15, 0xe9,
445 0x52, 0x30, 0x6e, 0x1e, 0x38, 0xae, 0xd0, 0xcf, 0x3b, 0x14, 0x4e, 0xba,
446 0x88, 0xbd, 0x30, 0xa1, 0xea, 0xef, 0xc4, 0x7e, 0xda, 0xd4, 0x42, 0xfc,
447 0xb0, 0x07, 0xb2, 0xf8, 0xd2, 0x0c, 0x9f, 0xf9, 0x9e, 0xfe, 0x15, 0xe3,
448 0x6b, 0x17, 0x46, 0xa7, 0xdd, 0xdf, 0xd2, 0xfb, 0x47, 0x42, 0x77, 0xf5,
449 0x01, 0x87, 0x1e, 0x6b, 0xc2, 0x5a, 0x9c, 0x64, 0x32, 0x64, 0x75, 0x5a,
450 0xc0, 0xf1, 0xc3, 0xca, 0xe6, 0xf6, 0x61, 0xfe, 0x69, 0x39, 0x93, 0x6e,
451 0x93, 0xaa, 0xed, 0xaa, 0x3b, 0x57, 0xcb, 0xf6, 0x76, 0x62, 0x7d, 0xfc,
452 0x36, 0xa1, 0xac, 0x07, 0x69, 0x33, 0xd2, 0xdb, 0xa4, 0x74, 0xb2, 0xaf,
453 0x25, 0xe8, 0x2f, 0xba, 0x2e, 0xff, 0x75, 0x3d, 0xce, 0x5f, 0x6a, 0x7f,
454 0x8a, 0xe3, 0x44, 0xc5, 0xfd, 0x7c, 0xab, 0xf4, 0x1c, 0xb3, 0x81, 0x6d,
455 0x13, 0xc0, 0xba, 0x5d, 0x92, 0x3e, 0x96, 0x94, 0x5b, 0x8e, 0x99, 0x38,
456 0xd1, 0x97, 0x47, 0x53, 0x2a, 0x66, 0xf8, 0xa5, 0x51, 0xb7, 0xa2, 0xce,
457 0x53, 0xf5, 0xdd, 0xb0, 0x65, 0x7d, 0x67, 0xec, 0x1b, 0xa3, 0x7d, 0x2a,
458 0xfd, 0xf6, 0x68, 0x5a, 0xa5, 0xaf, 0x8c, 0xde, 0x52, 0x0b, 0xfc, 0xa3,
459 0xd2, 0x42, 0x5a, 0x3e, 0x57, 0x26, 0xbe, 0x1c, 0x00, 0x76, 0xf4, 0xa0,
460 0x67, 0xfa, 0xa1, 0x67, 0xd2, 0xd0, 0x33, 0x83, 0xd4, 0x33, 0xd0, 0xdb,
461 0xaf, 0x40, 0x6f, 0x7b, 0xf2, 0x06, 0xe4, 0xf5, 0x82, 0xd7, 0x0c, 0x5c,
462 0xe8, 0xfb, 0xc1, 0x5a, 0x9d, 0xa7, 0x96, 0xc1, 0xdf, 0xea, 0x59, 0x89,
463 0xb5, 0x43, 0x07, 0x6d, 0x9f, 0x6f, 0x92, 0x85, 0xb8, 0xef, 0x9f, 0xf0,
464 0x5c, 0xb9, 0x86, 0xfa, 0x39, 0x97, 0xfb, 0x78, 0xa2, 0x85, 0xfe, 0xd8,
465 0xb5, 0x99, 0x1d, 0xd0, 0x49, 0x94, 0xf7, 0x98, 0x54, 0xc7, 0x13, 0xb2,
466 0x08, 0xff, 0x6c, 0xb5, 0x4e, 0x1a, 0xcf, 0xdc, 0xff, 0xff, 0x12, 0x75,
467 0xd3, 0xb0, 0x0f, 0xb6, 0x2c, 0xf5, 0x25, 0xe5, 0x4c, 0x9f, 0x33, 0x98,
468 0xb4, 0xa8, 0xbb, 0x92, 0x52, 0x81, 0xaf, 0x5f, 0x2d, 0xb3, 0x3e, 0xeb,
469 0x61, 0x7f, 0x96, 0x83, 0x76, 0xd3, 0x65, 0xa3, 0x27, 0x20, 0x9f, 0x73,
470 0x8c, 0x03, 0x06, 0x36, 0xc0, 0xb2, 0x9a, 0x21, 0x07, 0x1e, 0xe8, 0x3f,
471 0x8e, 0xf2, 0x01, 0xde, 0x25, 0x40, 0x19, 0xb1, 0x50, 0x49, 0xf1, 0x38,
472 0xef, 0x8d, 0xa3, 0x8c, 0x6d, 0x9c, 0x44, 0x0a, 0xe5, 0x63, 0x92, 0x4a,
473 0x14, 0xd4, 0xbd, 0xa6, 0x4e, 0x94, 0xb1, 0x8f, 0xb0, 0x8e, 0xc7, 0xcc,
474 0xb6, 0x50, 0x8e, 0xc2, 0xae, 0x29, 0xdf, 0xa6, 0x62, 0x03, 0x59, 0xdb,
475 0xc3, 0x7e, 0x60, 0x59, 0xca, 0x66, 0xbb, 0xbc, 0xe7, 0x29, 0x5d, 0x78,
476 0xaf, 0x3e, 0xb7, 0xb8, 0xa7, 0xd6, 0x2a, 0xf9, 0x5a, 0xd3, 0x7b, 0xe8,
477 0x7f, 0xb3, 0x27, 0x2f, 0x27, 0x6c, 0xe1, 0x19, 0x7b, 0xb0, 0xcf, 0x23,
478 0x3b, 0xb8, 0x27, 0x40, 0x77, 0xd8, 0xdf, 0xe7, 0xb1, 0xde, 0xe7, 0x60,
479 0x7f, 0x2f, 0xc2, 0xfe, 0x5e, 0x28, 0xaf, 0xea, 0x8f, 0xc0, 0xee, 0x52,
480 0x07, 0x3c, 0x03, 0x9e, 0x8d, 0x01, 0xf7, 0xef, 0x85, 0x3f, 0x30, 0x02,
481 0xec, 0x3f, 0x04, 0xfe, 0x65, 0xc0, 0xbb, 0x71, 0xde, 0x45, 0x01, 0x1f,
482 0x07, 0xd5, 0x59, 0xe6, 0xac, 0x3a, 0xcf, 0xff, 0x81, 0xb2, 0xbd, 0x8f,
483 0x97, 0x2d, 0xd8, 0x87, 0xa2, 0x7f, 0x9d, 0xeb, 0x00, 0xff, 0xad, 0xec,
484 0xe7, 0xc1, 0x17, 0xa1, 0x57, 0x7e, 0x8c, 0x79, 0x3d, 0x37, 0x4b, 0x7b,
485 0x8e, 0x3a, 0x01, 0xde, 0xf6, 0x18, 0xeb, 0xc2, 0x7e, 0x3e, 0x7a, 0x59,
486 0x96, 0x81, 0x3b, 0xb2, 0x94, 0x63, 0xf8, 0x0f, 0xce, 0x85, 0x8a, 0xf4,
487 0x52, 0x07, 0x02, 0x13, 0x0d, 0xca, 0xc0, 0xf1, 0x04, 0xb0, 0x1e, 0x90,
488 0xbc, 0x3a, 0xaf, 0xc3, 0xf3, 0xf9, 0x2d, 0x62, 0x11, 0xef, 0x79, 0x3c,
489 0x9b, 0xa1, 0xde, 0x30, 0x18, 0x69, 0x79, 0xb0, 0x43, 0xb2, 0xdb, 0x3b,
490 0x94, 0xee, 0x70, 0xbc, 0x97, 0x31, 0xee, 0x1e, 0xb8, 0x20, 0x6f, 0x00,
491 0x21, 0x58, 0x99, 0x43, 0xf2, 0xbf, 0x3c, 0xc6, 0xa8, 0x02, 0xdf, 0x0f,
492 0x73, 0x89, 0x81, 0x66, 0x9b, 0xf6, 0xbb, 0x76, 0x6c, 0x4f, 0x9d, 0xfd,
493 0xc7, 0x14, 0xc6, 0xca, 0x0b, 0xfb, 0x87, 0x9d, 0xc0, 0x98, 0xa9, 0xe3,
494 0x94, 0xfd, 0x6d, 0xe0, 0xdb, 0x3f, 0x05, 0x06, 0x22, 0x55, 0x87, 0x36,
495 0x07, 0xfb, 0x85, 0xf3, 0x5f, 0x26, 0x9e, 0x60, 0x4c, 0x3d, 0xf0, 0xcb,
496 0x57, 0xe6, 0xb6, 0x13, 0xf6, 0xeb, 0xb6, 0xcd, 0x94, 0x81, 0x71, 0x0f,
497 0x7e, 0xdf, 0xf1, 0xc0, 0x5e, 0x77, 0x9f, 0x47, 0xab, 0x13, 0xd2, 0xc9,
498 0xd3, 0x4e, 0x4b, 0x6e, 0x91, 0x8f, 0x44, 0x82, 0x7e, 0xac, 0x79, 0x1b,
499 0xb2, 0x4a, 0x3d, 0xd0, 0x09, 0x39, 0x67, 0x9e, 0x3a, 0x85, 0x3a, 0x81,
500 0xb2, 0xe0, 0x4a, 0xa9, 0x0e, 0x9d, 0xd0, 0xd6, 0x25, 0x15, 0xd2, 0x6c,
501 0x9e, 0x7a, 0xe2, 0x07, 0x32, 0xbd, 0x4e, 0x57, 0x0e, 0x89, 0xf1, 0x6b,
502 0x5b, 0x25, 0x9a, 0x71, 0xed, 0x7b, 0xd5, 0x1a, 0x03, 0x7d, 0x79, 0x80,
503 0xf8, 0x73, 0x36, 0xeb, 0x74, 0x88, 0xc6, 0x9e, 0x0a, 0x3f, 0xbd, 0x89,
504 0xb5, 0xb2, 0x0f, 0x45, 0xa7, 0xc1, 0xa1, 0xc0, 0x17, 0x50, 0x31, 0x3f,
505 0xe0, 0xe0, 0xc4, 0x8f, 0xa1, 0x6b, 0xf3, 0xc4, 0x25, 0xa0, 0x73, 0xf7,
506 0x09, 0xca, 0xd1, 0x75, 0xea, 0x6c, 0xbc, 0x62, 0xa5, 0xa9, 0xaf, 0x65,
507 0xf1, 0x38, 0x30, 0x97, 0xb5, 0x4b, 0x0a, 0x94, 0x57, 0x9e, 0x7d, 0x2f,
508 0x5a, 0x32, 0x3d, 0xd7, 0x26, 0x3d, 0xf3, 0x8c, 0xaf, 0xee, 0x6e, 0x91,
509 0x36, 0xc6, 0x58, 0x69, 0x83, 0x06, 0x24, 0x8f, 0xf2, 0xee, 0xf9, 0xb0,
510 0x8a, 0x87, 0x55, 0x2c, 0xd2, 0xa8, 0x1f, 0xfa, 0xc0, 0x49, 0x2f, 0x5b,
511 0xff, 0x25, 0x16, 0x60, 0x48, 0xc8, 0x52, 0x19, 0x32, 0x56, 0x86, 0x8c,
512 0x95, 0x21, 0x63, 0x65, 0xc8, 0x18, 0xb0, 0xdf, 0x73, 0xd8, 0x7f, 0x17,
513 0xcb, 0x83, 0xda, 0xae, 0xdf, 0xaf, 0xec, 0xfa, 0x91, 0x32, 0xcf, 0xf0,
514 0xe9, 0x83, 0x26, 0x95, 0x0e, 0xb9, 0xa4, 0x7c, 0x51, 0xe3, 0xa3, 0xbe,
515 0x22, 0xcf, 0xcc, 0xbe, 0x2a, 0x67, 0x66, 0x57, 0x71, 0xe0, 0x54, 0xd9,
516 0x97, 0x97, 0x3d, 0xf8, 0x9f, 0x0b, 0xc4, 0x54, 0xd9, 0xf6, 0x66, 0x85,
517 0xad, 0x0e, 0x4b, 0x41, 0xe1, 0x64, 0x65, 0x47, 0x80, 0xaf, 0x14, 0x2e,
518 0xe4, 0xde, 0x94, 0x8e, 0xed, 0xaf, 0xc9, 0x45, 0xd8, 0xf1, 0xc5, 0xfa,
519 0xeb, 0xf2, 0xbc, 0xc2, 0xe3, 0xa4, 0xc3, 0x07, 0xe4, 0x47, 0x76, 0x70,
520 0x4e, 0x7c, 0x06, 0x58, 0x63, 0xb1, 0x8f, 0xba, 0x23, 0x02, 0x5b, 0xe0,
521 0x14, 0xbb, 0xb1, 0xaf, 0x0f, 0x5a, 0x37, 0x00, 0xd3, 0xf0, 0xfd, 0x16,
522 0x79, 0x71, 0xb6, 0xd8, 0x20, 0x13, 0xd4, 0x0f, 0xce, 0x51, 0xb1, 0x68,
523 0xa7, 0x68, 0x37, 0xb9, 0x5e, 0xda, 0xa9, 0x3f, 0xd8, 0xcc, 0xb3, 0xd4,
524 0xea, 0xc9, 0x73, 0x2d, 0x8c, 0x37, 0xc6, 0x5d, 0xd2, 0xf4, 0x35, 0x39,
525 0x58, 0x63, 0xd9, 0xab, 0xe0, 0x0f, 0xd3, 0xef, 0xf9, 0xf7, 0xc4, 0x39,
526 0x1e, 0xfb, 0x05, 0x6e, 0xea, 0xc4, 0x5a, 0xcb, 0x7f, 0xa9, 0x63, 0x5e,
527 0xfd, 0x0a, 0x47, 0xbf, 0x13, 0x2f, 0x9b, 0x7b, 0x0d, 0xaf, 0xa9, 0x78,
528 0xe0, 0x06, 0x71, 0xe2, 0xa7, 0xb0, 0xaf, 0x8a, 0x57, 0x85, 0x31, 0x4b,
529 0xc6, 0x73, 0x19, 0x2b, 0x6e, 0xd4, 0x18, 0xea, 0xbc, 0x54, 0xee, 0x86,
530 0x7e, 0xb9, 0x07, 0xfa, 0xe5, 0xde, 0x77, 0xdc, 0xaf, 0x35, 0x71, 0xfb,
531 0x9e, 0x62, 0xd8, 0xea, 0x92, 0xb1, 0x5a, 0x63, 0x5b, 0xc6, 0x71, 0x37,
532 0x8a, 0xdb, 0x32, 0xa6, 0x9b, 0x5e, 0x17, 0x0b, 0xa4, 0x6c, 0xf8, 0xf2,
533 0x92, 0xc7, 0xb8, 0x9b, 0xb9, 0x9b, 0xbd, 0x11, 0xfe, 0xfa, 0xc3, 0xcd,
534 0x26, 0xe6, 0x1c, 0xc9, 0x5c, 0x15, 0xde, 0xd1, 0x2e, 0xcd, 0x10, 0x0f,
535 0xa8, 0xb3, 0x40, 0x15, 0xbb, 0xce, 0x07, 0xf1, 0x03, 0x94, 0xc3, 0xea,
536 0xc2, 0xdf, 0x61, 0xec, 0xda, 0xde, 0xe1, 0xd8, 0x63, 0xe1, 0xe0, 0xae,
537 0x1f, 0xf7, 0x72, 0xa0, 0xcb, 0x20, 0x8b, 0xf5, 0xd5, 0x3b, 0x74, 0x43,
538 0x4a, 0x5f, 0x5c, 0xc5, 0x1e, 0x20, 0xbf, 0xe0, 0x2f, 0x60, 0x9f, 0x4c,
539 0x41, 0x3f, 0x15, 0x54, 0x7f, 0x31, 0xca, 0x45, 0x36, 0x17, 0xb6, 0x24,
540 0x7a, 0x8a, 0xbe, 0x50, 0x10, 0x6b, 0xc9, 0x87, 0x1d, 0xa5, 0xbf, 0x31,
541 0x77, 0xe0, 0x33, 0xee, 0xcf, 0xe4, 0x44, 0x73, 0xa6, 0x09, 0x76, 0x15,
542 0xfc, 0xab, 0x33, 0x26, 0x80, 0xbd, 0xbb, 0xf4, 0x5d, 0x39, 0x30, 0x77,
543 0x69, 0x73, 0x20, 0xff, 0x8c, 0x23, 0x73, 0x7d, 0x66, 0x0e, 0x6b, 0xfb,
544 0xb6, 0x4e, 0x49, 0xac, 0x05, 0x36, 0xed, 0xa3, 0xa7, 0x88, 0x07, 0x9a,
545 0x65, 0x39, 0xce, 0x7e, 0x83, 0x3d, 0x33, 0x5d, 0x66, 0xdf, 0xdf, 0x95,
546 0xe1, 0xb9, 0x74, 0x2b, 0xf5, 0xc8, 0x12, 0xf4, 0xc0, 0x65, 0x9b, 0x36,
547 0x74, 0x1c, 0x36, 0xae, 0x53, 0xde, 0x9c, 0xa3, 0x7d, 0x4c, 0xd9, 0x67,
548 0x64, 0x5b, 0xe2, 0x0c, 0xe6, 0xf4, 0x84, 0x17, 0xa1, 0x8f, 0xe6, 0x0f,
549 0xa1, 0xec, 0xeb, 0x92, 0xb2, 0xbb, 0x43, 0x7c, 0xde, 0x66, 0x3f, 0x29,
550 0xbc, 0x6f, 0x90, 0xb2, 0x6f, 0x0d, 0x51, 0x8e, 0xe0, 0x73, 0x2f, 0xad,
551 0xce, 0xf3, 0x7b, 0x73, 0xca, 0x4f, 0x52, 0x7a, 0x66, 0xc9, 0xe3, 0x78,
552 0x97, 0xb4, 0x6e, 0xbb, 0x15, 0xfa, 0x24, 0xa6, 0xcf, 0xc2, 0xd0, 0x86,
553 0xd8, 0xc6, 0x8b, 0xe8, 0xfc, 0x67, 0x25, 0x77, 0x3a, 0x0e, 0x7d, 0xc6,
554 0xbe, 0x8c, 0xef, 0x40, 0x1b, 0x69, 0xf0, 0x36, 0xed, 0xdd, 0x2e, 0xd8,
555 0xbd, 0x9b, 0xd4, 0x7c, 0x46, 0xbc, 0x7e, 0x99, 0x3a, 0xc9, 0xb1, 0xfb,
556 0xa0, 0xcb, 0x13, 0x4a, 0x6e, 0x4b, 0xe5, 0xcb, 0x89, 0x18, 0x74, 0x72,
557 0x6c, 0x3b, 0xe9, 0xf9, 0x61, 0xb9, 0xd3, 0x1d, 0x97, 0xbb, 0x20, 0x3b,
558 0x43, 0xae, 0x27, 0xc3, 0xe0, 0xc5, 0x1e, 0x17, 0x76, 0x47, 0x61, 0xe8,
559 0x66, 0xf8, 0x5d, 0x1c, 0x9b, 0xf7, 0xc4, 0xd9, 0x36, 0xc0, 0x8f, 0x7f,
560 0x54, 0x0f, 0x68, 0x94, 0x9b, 0xfb, 0x88, 0xa2, 0xcd, 0x88, 0xb7, 0x53,
561 0xdb, 0xd9, 0x36, 0xc9, 0xab, 0x7a, 0x3b, 0x95, 0x3d, 0x2e, 0x2d, 0xde,
562 0x87, 0x14, 0xb6, 0x79, 0x11, 0xfa, 0x06, 0x98, 0xbb, 0x54, 0xdb, 0x81,
563 0x3c, 0x6c, 0xe8, 0x62, 0x06, 0xe9, 0x87, 0x91, 0xb2, 0x6e, 0xa8, 0x35,
564 0x88, 0xe5, 0x1a, 0x3c, 0xba, 0x7a, 0xbf, 0xf0, 0xa3, 0x0a, 0x97, 0x5e,
565 0x55, 0xf7, 0xcb, 0x2c, 0x60, 0x9d, 0x1c, 0xf4, 0x4a, 0x2b, 0x30, 0xd0,
566 0xcc, 0x29, 0x27, 0x3d, 0x1c, 0xda, 0x2d, 0xbf, 0x06, 0x5f, 0xbe, 0xea,
567 0x91, 0x97, 0x3b, 0xe4, 0xc1, 0x3b, 0x28, 0x23, 0xbb, 0x65, 0xff, 0x1d,
568 0x21, 0xd9, 0xdf, 0xef, 0x64, 0x39, 0xef, 0x5b, 0x6e, 0x33, 0xfe, 0x74,
569 0xcf, 0x48, 0x2a, 0x34, 0x20, 0x4f, 0x42, 0xc6, 0x8a, 0x90, 0xaf, 0xe1,
570 0x3a, 0x69, 0x4e, 0x7d, 0x4f, 0x3d, 0x9f, 0x06, 0x56, 0x36, 0xd8, 0xcf,
571 0x95, 0x99, 0x7a, 0x93, 0x24, 0xaf, 0x67, 0x3c, 0x39, 0x19, 0x9c, 0x71,
572 0x5c, 0x4f, 0x99, 0x80, 0x0f, 0x72, 0x7d, 0xb0, 0x3f, 0xd5, 0xbd, 0x2e,
573 0xf5, 0x1c, 0xa7, 0xff, 0xeb, 0x13, 0xe7, 0x15, 0x14, 0x5f, 0x68, 0x23,
574 0x98, 0xfe, 0xbb, 0xd6, 0x15, 0x7c, 0xd7, 0x46, 0xff, 0x61, 0x67, 0xeb,
575 0xea, 0xbd, 0xf4, 0xf5, 0xb2, 0x68, 0xe2, 0x6e, 0x15, 0xac, 0x99, 0x36,
576 0xdd, 0xb1, 0xa9, 0x0b, 0xdb, 0xdd, 0xfb, 0xe5, 0x4f, 0x60, 0xdf, 0xbf,
577 0xb2, 0x62, 0xdf, 0xf7, 0x81, 0x1e, 0xeb, 0x31, 0x80, 0x6b, 0xdf, 0x8d,
578 0xb5, 0x8c, 0x80, 0x9f, 0x77, 0xe1, 0x77, 0x67, 0x79, 0x4d, 0x1c, 0x6f,
579 0xb6, 0x08, 0x3c, 0xd9, 0xe4, 0xb2, 0xbf, 0x35, 0xf1, 0xbc, 0x62, 0x41,
580 0x56, 0x62, 0x85, 0x83, 0xd7, 0x84, 0x76, 0xef, 0x2d, 0x89, 0xf6, 0xba,
581 0x6f, 0x75, 0x87, 0xdc, 0x17, 0xac, 0x10, 0xcf, 0x95, 0x3d, 0x39, 0x5b,
582 0x27, 0x0e, 0xbb, 0x22, 0xd6, 0x79, 0x62, 0xb0, 0x6f, 0xa8, 0x18, 0x54,
583 0xb5, 0xfc, 0x6d, 0xa4, 0xa8, 0x0f, 0xfd, 0x18, 0x0e, 0xe2, 0x14, 0x0a,
584 0xab, 0x50, 0xcf, 0xde, 0x05, 0x3e, 0x4c, 0xe1, 0xd7, 0xbd, 0xfd, 0x56,
585 0xec, 0x5f, 0xca, 0x29, 0x63, 0x5f, 0xbd, 0xf6, 0xf6, 0x10, 0xdf, 0x6d,
586 0x14, 0x07, 0xfb, 0x8e, 0x44, 0x4e, 0xc0, 0xd6, 0x59, 0xd4, 0x0f, 0x5c,
587 0x07, 0xed, 0xa4, 0x2d, 0x0b, 0x27, 0xb9, 0xd7, 0x37, 0xaa, 0x6f, 0xea,
588 0x9a, 0xb5, 0x28, 0xbb, 0x91, 0x2d, 0x30, 0xc6, 0x59, 0x26, 0x0f, 0x3c,
589 0xf0, 0xc0, 0x97, 0x53, 0x5e, 0x3b, 0xf4, 0x76, 0x5c, 0xc2, 0xa7, 0x7c,
590 0x19, 0x52, 0xd8, 0x75, 0x1b, 0x30, 0xd7, 0x16, 0x8d, 0x1b, 0xe2, 0x12,
591 0x39, 0xd5, 0x25, 0xcd, 0xc0, 0xd5, 0x4d, 0xc7, 0x68, 0x23, 0x53, 0xc9,
592 0x21, 0x08, 0x41, 0x44, 0xdd, 0x55, 0x74, 0x06, 0xdf, 0x94, 0x6d, 0xc9,
593 0x37, 0x85, 0x78, 0xe9, 0x86, 0x2d, 0xf0, 0x09, 0xbc, 0x2b, 0x1b, 0xd4,
594 0x2f, 0xad, 0xd6, 0x87, 0x1c, 0x31, 0xb6, 0xc6, 0x36, 0x8c, 0xb5, 0xa5,
595 0x06, 0xdf, 0x60, 0x8c, 0x0d, 0xbe, 0x66, 0xd3, 0xb9, 0x60, 0x0e, 0xd6,
596 0x52, 0x87, 0x54, 0x4f, 0x73, 0x8f, 0x32, 0xce, 0x62, 0x07, 0x7e, 0x6a,
597 0x99, 0xfe, 0x2a, 0xdf, 0x27, 0xf5, 0xfb, 0x6e, 0xfd, 0x9e, 0xfe, 0x68,
598 0xd1, 0x6f, 0x02, 0x4d, 0xf7, 0x40, 0x7f, 0xde, 0xb7, 0xc3, 0x55, 0xb8,
599 0xe1, 0xbe, 0x15, 0x9e, 0xed, 0x15, 0xeb, 0x38, 0xfc, 0xd4, 0xf2, 0x61,
600 0x71, 0xb7, 0x2f, 0xa7, 0x23, 0x32, 0x06, 0x5e, 0x30, 0x9f, 0xe5, 0x7c,
601 0xd2, 0x47, 0xe4, 0xa0, 0xe2, 0x4d, 0xf5, 0xa4, 0x73, 0x34, 0x19, 0x9a,
602 0x12, 0xab, 0xca, 0xe7, 0x47, 0x90, 0x1e, 0x01, 0xde, 0x09, 0x62, 0x97,
603 0x56, 0x75, 0x2d, 0x2d, 0x81, 0x31, 0xec, 0x3d, 0x6b, 0xe2, 0x58, 0xab,
604 0x31, 0x2e, 0xbe, 0x1f, 0x52, 0xef, 0xd3, 0x6b, 0xe2, 0x5c, 0x79, 0x8b,
605 0x58, 0xc6, 0xbc, 0x27, 0x2f, 0xc8, 0x2f, 0xd8, 0xe2, 0x93, 0x26, 0xe6,
606 0xd5, 0xa6, 0xf9, 0x42, 0xfe, 0xcc, 0xc8, 0x45, 0xdb, 0x19, 0xa1, 0xfc,
607 0xfd, 0xea, 0x8e, 0x1b, 0x65, 0xa2, 0x93, 0xf1, 0xb6, 0xc6, 0x39, 0xac,
608 0x8f, 0xa3, 0x35, 0x8e, 0xbf, 0x3e, 0xfe, 0xc6, 0xb1, 0x83, 0x18, 0x5b,
609 0x6e, 0x4d, 0x8c, 0xad, 0x71, 0x3c, 0x8e, 0xb5, 0x05, 0xfe, 0x53, 0xd1,
610 0x8f, 0xbb, 0xe4, 0x51, 0x4f, 0x72, 0x8e, 0xf9, 0x2f, 0x58, 0xe0, 0x63,
611 0x1c, 0x76, 0x84, 0xbc, 0x34, 0x67, 0xcf, 0xe4, 0x69, 0x2a, 0x79, 0x24,
612 0xe0, 0xe7, 0x60, 0xc0, 0xf7, 0x80, 0xff, 0x57, 0x56, 0xf8, 0x48, 0xfb,
613 0x40, 0x3e, 0x76, 0x8a, 0x40, 0xcf, 0x5a, 0xc7, 0xc8, 0x43, 0xa6, 0xe4,
614 0x21, 0xdf, 0x91, 0x87, 0xdd, 0xfa, 0x1d, 0xf9, 0x07, 0x9c, 0xf6, 0x79,
615 0x60, 0x0c, 0x2f, 0xa7, 0xbe, 0xb1, 0xe9, 0xee, 0x35, 0x7b, 0x31, 0x2d,
616 0xcf, 0x2f, 0xb4, 0x88, 0x9d, 0x09, 0xd6, 0x35, 0xbe, 0x26, 0xde, 0xce,
617 0xf3, 0xab, 0x7e, 0x62, 0x4f, 0xb3, 0xae, 0x04, 0xd7, 0x75, 0x50, 0x5e,
618 0x93, 0xc2, 0x4c, 0x04, 0x3e, 0x60, 0x1a, 0x38, 0xa7, 0x1f, 0xfa, 0x96,
619 0xf1, 0x51, 0x94, 0xd5, 0x88, 0x57, 0x68, 0xeb, 0xd2, 0xd8, 0x2b, 0xd4,
620 0xc1, 0xc4, 0x23, 0xaf, 0x4a, 0xbe, 0x62, 0x74, 0x0c, 0xfa, 0xb7, 0x4c,
621 0xff, 0xa4, 0x73, 0xf6, 0x96, 0xeb, 0x64, 0x39, 0x79, 0x9d, 0x38, 0xc9,
622 0x45, 0x59, 0xe5, 0xeb, 0xf8, 0xc6, 0x74, 0xf7, 0xee, 0x0b, 0xaf, 0xca,
623 0xc6, 0xf8, 0x06, 0xbc, 0x9f, 0x14, 0xf3, 0xde, 0xf0, 0x7e, 0x43, 0x3e,
624 0x14, 0x5f, 0x11, 0xf2, 0x82, 0x34, 0x20, 0x1e, 0x8e, 0xca, 0xef, 0xc6,
625 0xb9, 0x1f, 0x8b, 0xea, 0x7c, 0x33, 0x65, 0xf5, 0x2a, 0x9d, 0x31, 0xe4,
626 0x05, 0xf2, 0x5a, 0xc4, 0x38, 0xb1, 0x9e, 0xdf, 0xf3, 0x87, 0xe2, 0xf0,
627 0x73, 0x7b, 0xa8, 0x5f, 0xcc, 0x9e, 0x6e, 0x51, 0x7b, 0xfa, 0x09, 0x2f,
628 0x24, 0x25, 0x37, 0x24, 0x53, 0xee, 0x61, 0x85, 0xf1, 0x7f, 0x03, 0x7d,
629 0x3d, 0xa8, 0xfb, 0x9a, 0x92, 0x5e, 0xad, 0x7f, 0x0e, 0x41, 0xce, 0x7d,
630 0xb9, 0xd7, 0xdb, 0x21, 0xbf, 0xda, 0xce, 0x3d, 0x60, 0xd6, 0x7f, 0x58,
631 0x7a, 0x76, 0x2c, 0x27, 0xe1, 0x19, 0xdc, 0x12, 0x5d, 0xa1, 0x01, 0xf7,
632 0x99, 0x91, 0xef, 0x80, 0x0e, 0xc1, 0xfa, 0xd7, 0xac, 0x55, 0xaf, 0x93,
633 0x6b, 0x66, 0x3d, 0xae, 0x35, 0xc0, 0xf2, 0xab, 0x6b, 0x35, 0xf5, 0x5b,
634 0x21, 0x4b, 0x4e, 0x52, 0x42, 0x8d, 0xb4, 0x59, 0xd1, 0x51, 0x23, 0x8c,
635 0x91, 0x2c, 0xdb, 0x4e, 0x3a, 0x19, 0x32, 0xb1, 0xe8, 0x00, 0xeb, 0x76,
636 0x03, 0x87, 0xbb, 0xbd, 0xbd, 0xe9, 0x82, 0x8a, 0x91, 0x5a, 0x6a, 0x5d,
637 0x53, 0xc0, 0x64, 0x0b, 0xde, 0x2b, 0xfe, 0xa7, 0x81, 0x59, 0x27, 0xe4,
638 0x61, 0x09, 0xaf, 0x89, 0xe5, 0x22, 0x7f, 0x9e, 0xf1, 0x5c, 0x27, 0x99,
639 0x05, 0x8f, 0x7f, 0x13, 0x3e, 0x7c, 0x15, 0x7a, 0xff, 0xe3, 0xb4, 0x0d,
640 0x65, 0xd8, 0x0b, 0xe0, 0x92, 0xaf, 0xbc, 0x27, 0x86, 0x9f, 0x68, 0x88,
641 0xe5, 0x06, 0xf8, 0xf4, 0xa2, 0xc2, 0xa4, 0xc4, 0xed, 0x47, 0x43, 0x77,
642 0xf7, 0x85, 0xe1, 0x67, 0x14, 0xfd, 0x98, 0x4b, 0x1c, 0x77, 0x58, 0xee,
643 0x04, 0x7f, 0xce, 0x2e, 0x14, 0x43, 0x7b, 0xca, 0x46, 0x56, 0xe1, 0x57,
644 0xd6, 0x9d, 0xf4, 0x65, 0xd0, 0xe3, 0x19, 0x8d, 0xf9, 0x78, 0x5e, 0x53,
645 0xd5, 0x3e, 0x0b, 0x63, 0x43, 0xa5, 0xfa, 0x61, 0x99, 0xf6, 0x18, 0xdb,
646 0xe9, 0x91, 0x52, 0x3c, 0x7b, 0x63, 0xf3, 0x0a, 0x8d, 0x1c, 0x1b, 0x3e,
647 0x5f, 0x9a, 0xfa, 0xbb, 0xaa, 0xcf, 0x3b, 0x9e, 0x51, 0xf2, 0x65, 0xe2,
648 0xc2, 0xf4, 0x8f, 0x78, 0x5e, 0xd5, 0x63, 0x8f, 0xf0, 0xb9, 0x42, 0x19,
649 0x50, 0x3e, 0x13, 0x68, 0xf9, 0x90, 0x64, 0xc7, 0x92, 0x0a, 0xb7, 0x3c,
650 0x5e, 0xe6, 0x7e, 0x21, 0xfe, 0x7f, 0x0d, 0xd8, 0x3f, 0x02, 0x9e, 0xd1,
651 0x0f, 0xe0, 0xd8, 0xdc, 0x17, 0x28, 0xab, 0xd9, 0xef, 0xb2, 0x2f, 0x5e,
652 0x6b, 0x23, 0xc6, 0xb8, 0x54, 0x16, 0x45, 0xbf, 0x65, 0x31, 0xb1, 0x73,
653 0x85, 0x05, 0x8b, 0xb9, 0x70, 0x48, 0x52, 0x27, 0xfe, 0x35, 0x64, 0xe8,
654 0xd7, 0xe1, 0x23, 0xa9, 0x7a, 0xea, 0xfc, 0x6a, 0x08, 0x98, 0xcb, 0x72,
655 0x6f, 0x90, 0x92, 0x1d, 0x95, 0x92, 0xba, 0xa3, 0xc9, 0xf3, 0xdc, 0xb0,
656 0x8a, 0xed, 0x94, 0x6c, 0x62, 0xfe, 0xff, 0xde, 0x16, 0xd8, 0xfa, 0x0e,
657 0xe4, 0xd9, 0x8e, 0x79, 0x96, 0x4f, 0x49, 0xf4, 0xc4, 0x21, 0x69, 0x3a,
658 0xf1, 0xb0, 0x34, 0x1f, 0x27, 0xc6, 0x63, 0xec, 0xde, 0xda, 0xd5, 0x2c,
659 0xc4, 0xdc, 0x43, 0x18, 0xfb, 0xb0, 0x7c, 0xdf, 0x33, 0x73, 0x5a, 0xc4,
660 0x1c, 0x59, 0xc7, 0xe4, 0x0d, 0x1e, 0xdf, 0x85, 0xf9, 0x70, 0xfd, 0x49,
661 0x8d, 0xfb, 0x76, 0x35, 0xf8, 0xae, 0x4d, 0xda, 0x77, 0x65, 0xbb, 0x4f,
662 0x61, 0xad, 0x27, 0x25, 0xea, 0x9a, 0xf6, 0xbb, 0x51, 0x2f, 0xd1, 0x70,
663 0x07, 0x82, 0x75, 0xf4, 0x9d, 0x80, 0x36, 0xe2, 0x1e, 0x9e, 0xb7, 0xb3,
664 0x2c, 0x38, 0xf3, 0xb7, 0xaa, 0xbb, 0xc2, 0x6b, 0xc7, 0xdf, 0xd9, 0x50,
665 0xd7, 0x94, 0x99, 0x36, 0xd1, 0xc0, 0xe7, 0x1f, 0x88, 0x36, 0xb4, 0x83,
666 0x71, 0x53, 0x69, 0xe0, 0x7b, 0x04, 0x7e, 0x10, 0xd7, 0x90, 0x6e, 0xc0,
667 0x39, 0x6b, 0xbf, 0x45, 0xcc, 0xa3, 0xbc, 0x30, 0x67, 0xee, 0x91, 0x59,
668 0x58, 0x8b, 0x53, 0xa4, 0xff, 0x62, 0xf3, 0x4e, 0xee, 0x5c, 0x11, 0xf3,
669 0xbe, 0x49, 0xdd, 0x25, 0xe2, 0xdd, 0x0d, 0xd4, 0x4b, 0x06, 0xf8, 0x93,
670 0xf9, 0x04, 0x78, 0x7e, 0x5b, 0x97, 0x95, 0xf9, 0xf3, 0x1b, 0x73, 0x03,
671 0xc4, 0x37, 0x5b, 0x79, 0x0e, 0x09, 0xdc, 0x4c, 0x39, 0xfb, 0x2e, 0xe4,
672 0xac, 0x59, 0x9d, 0xfb, 0x94, 0xca, 0xf4, 0xe7, 0x0a, 0x90, 0x1f, 0xde,
673 0x87, 0xa3, 0xdf, 0x57, 0xd0, 0xf1, 0x58, 0xce, 0x93, 0x98, 0xde, 0xf8,
674 0x07, 0xec, 0x73, 0xfd, 0x19, 0x6c, 0xe3, 0xfd, 0x12, 0xca, 0x5b, 0x42,
675 0xcd, 0x79, 0x78, 0x9d, 0xbf, 0x72, 0x04, 0xba, 0x60, 0x01, 0xf2, 0x3c,
676 0x09, 0x1d, 0x38, 0x14, 0xe6, 0xfe, 0x6c, 0xd1, 0xbe, 0xac, 0x4b, 0xbf,
677 0x3d, 0x34, 0x86, 0x3e, 0xac, 0xe3, 0xaf, 0xcb, 0x14, 0xf4, 0xff, 0x74,
678 0x3d, 0xa5, 0xbe, 0x17, 0xc9, 0x26, 0x78, 0x07, 0x8c, 0xe5, 0x63, 0x18,
679 0xff, 0x75, 0xe0, 0xe1, 0xcd, 0xa0, 0xa7, 0xa5, 0x79, 0xf5, 0x2b, 0x3a,
680 0x16, 0x15, 0x63, 0x2c, 0x1e, 0x7a, 0xb3, 0x14, 0x60, 0xcd, 0xf8, 0x34,
681 0xd2, 0xcd, 0x2d, 0x81, 0xbc, 0x4e, 0x6e, 0xd5, 0x77, 0x2f, 0x50, 0xfe,
682 0x98, 0x8a, 0x41, 0x06, 0x6b, 0x72, 0xb4, 0xaf, 0x12, 0x85, 0xcc, 0x71,
683 0x5d, 0xf7, 0xa2, 0x1e, 0x65, 0xad, 0x4f, 0x9f, 0xcd, 0xb6, 0x28, 0xfd,
684 0x98, 0x87, 0x2c, 0x15, 0x94, 0x1f, 0x01, 0x7c, 0xef, 0xb1, 0xdd, 0xaf,
685 0x6f, 0xe5, 0xd9, 0x67, 0x93, 0xab, 0x7c, 0x8b, 0xce, 0xb0, 0x98, 0xb2,
686 0x8f, 0xa0, 0x8c, 0x72, 0x76, 0x03, 0x78, 0xc3, 0xb2, 0x1c, 0xf2, 0x1c,
687 0xeb, 0x46, 0x3d, 0x0e, 0xc7, 0xb8, 0xb4, 0x79, 0xed, 0x9c, 0xb8, 0x96,
688 0xce, 0x75, 0x77, 0xe7, 0x59, 0x76, 0x83, 0x2e, 0x8b, 0xe8, 0xf5, 0xfd,
689 0xa9, 0xfe, 0xb6, 0xc1, 0x39, 0x9a, 0x5d, 0xc1, 0xc6, 0x9c, 0x5f, 0x4c,
690 0xb5, 0xcb, 0xda, 0x81, 0xec, 0x1c, 0x01, 0x3f, 0x22, 0x99, 0xaf, 0xf1,
691 0x4c, 0x19, 0xf4, 0x35, 0x7b, 0x22, 0xa1, 0xfc, 0xce, 0xa4, 0x15, 0xdc,
692 0x5d, 0xba, 0x58, 0x6e, 0xf4, 0x19, 0xcc, 0xfd, 0x6f, 0x57, 0xc6, 0x56,
693 0x78, 0x45, 0xbe, 0x91, 0x5f, 0xef, 0xc6, 0x2b, 0xf2, 0x91, 0xfc, 0x2a,
694 0x48, 0x69, 0x96, 0x7c, 0xa2, 0xbc, 0x8c, 0x29, 0x79, 0x29, 0x55, 0x0c,
695 0x4e, 0xa6, 0x2e, 0xe1, 0x37, 0x0f, 0x1b, 0x9d, 0xd7, 0x9b, 0xbb, 0x61,
696 0xbf, 0x44, 0xfa, 0x85, 0x86, 0xe1, 0x1e, 0x2d, 0xcc, 0x2a, 0x9d, 0x02,
697 0xbb, 0x98, 0x50, 0xba, 0xa2, 0x30, 0xce, 0xfc, 0xd2, 0x56, 0x7e, 0x9b,
698 0x8b, 0x79, 0xa0, 0xbc, 0x53, 0xf3, 0xf5, 0x06, 0x75, 0xbf, 0x89, 0x7b,
699 0xb0, 0x54, 0xa9, 0xab, 0xf7, 0x67, 0xe7, 0x9a, 0x54, 0xfd, 0xb3, 0x73,
700 0xeb, 0xef, 0x28, 0xb1, 0xec, 0x66, 0xc6, 0x55, 0x64, 0x71, 0xa6, 0x49,
701 0x96, 0xe6, 0xfe, 0x90, 0x7e, 0x22, 0x8c, 0xc1, 0xca, 0xf7, 0x1d, 0xfa,
702 0x5b, 0x2c, 0x5f, 0x86, 0x21, 0x37, 0x0b, 0x83, 0xd3, 0x52, 0x1d, 0xa4,
703 0x1f, 0xa4, 0xee, 0x0e, 0x62, 0xbd, 0x4d, 0xc0, 0xc0, 0xc0, 0x85, 0x2e,
704 0xe3, 0xcf, 0x5b, 0xb4, 0x3e, 0x79, 0xb0, 0x75, 0x25, 0x2e, 0x1d, 0x2f,
705 0xfa, 0x55, 0xd7, 0x7c, 0x33, 0xc3, 0x3e, 0xf9, 0xdd, 0x0c, 0x79, 0x66,
706 0xa1, 0x3d, 0xef, 0x64, 0x76, 0x33, 0xae, 0xad, 0xf9, 0x1c, 0x46, 0x7d,
707 0xa6, 0xbf, 0xa7, 0xf3, 0x73, 0x3a, 0xfd, 0xac, 0xec, 0x3f, 0xf9, 0x19,
708 0xcc, 0x7b, 0x53, 0x70, 0xef, 0x4a, 0x1a, 0xbf, 0x9b, 0x88, 0xe8, 0x6f,
709 0x34, 0x3e, 0x8b, 0x32, 0xc6, 0xe2, 0x3e, 0xab, 0xd6, 0xc4, 0xbb, 0x7d,
710 0x45, 0xf9, 0x79, 0x77, 0x54, 0x8c, 0x3f, 0xc8, 0xfb, 0x53, 0x2d, 0xba,
711 0xbf, 0x3d, 0x5a, 0x96, 0xc6, 0x65, 0x3f, 0xec, 0x5d, 0x01, 0xb8, 0x98,
712 0x77, 0xce, 0x26, 0xc2, 0x8d, 0x63, 0x9a, 0xfd, 0x14, 0xc4, 0x1a, 0xcc,
713 0xdd, 0x87, 0xb0, 0xf2, 0x89, 0x56, 0xe2, 0x16, 0xba, 0x7c, 0x5c, 0x0e,
714 0x94, 0x55, 0xfc, 0x42, 0x9d, 0x59, 0x4e, 0x43, 0x2f, 0x0c, 0x29, 0x9b,
715 0x16, 0x0b, 0x0d, 0xd7, 0x32, 0x52, 0x38, 0xbd, 0x17, 0xe3, 0x30, 0x16,
716 0x98, 0xd5, 0x67, 0x83, 0xfb, 0x64, 0x7f, 0x3d, 0x18, 0x7b, 0xb2, 0xcc,
717 0xf7, 0x29, 0xe0, 0x04, 0xbe, 0xcf, 0x27, 0xc2, 0xea, 0x74, 0xe3, 0x56,
718 0xb4, 0x6d, 0xd2, 0x74, 0xe6, 0xbd, 0x6b, 0xb6, 0xa7, 0x0e, 0x00, 0xc0,
719 0x69, 0xc9, 0xe3, 0x3d, 0xdb, 0x98, 0xfe, 0x26, 0x61, 0xb7, 0xe8, 0x9f,
720 0x3f, 0x2a, 0xcb, 0x95, 0x69, 0xb9, 0x5c, 0x31, 0xb2, 0xce, 0xbb, 0xd7,
721 0x9c, 0xfb, 0x5d, 0xc1, 0xb7, 0xbf, 0xe5, 0x2c, 0xf8, 0xb3, 0x96, 0x56,
722 0xf9, 0x35, 0xdf, 0xdb, 0xfc, 0x2b, 0x3b, 0xf8, 0xe6, 0x6d, 0xb7, 0xba,
723 0xc3, 0xb5, 0x76, 0xcf, 0xb1, 0x9f, 0xfd, 0x36, 0xcf, 0x3a, 0x82, 0x7b,
724 0x68, 0x9d, 0x0d, 0xef, 0xe3, 0xfa, 0xee, 0xd7, 0xa7, 0xec, 0x80, 0x8f,
725 0xa4, 0xe7, 0x98, 0x9e, 0xef, 0xad, 0xd8, 0xff, 0xec, 0xf3, 0x31, 0xcd,
726 0x37, 0xa4, 0x0b, 0x7c, 0xe6, 0xfe, 0x5a, 0xd6, 0xe7, 0xbf, 0xb6, 0x1e,
727 0xa3, 0xf1, 0xee, 0x5d, 0x53, 0xc3, 0xb8, 0x6c, 0x4f, 0xfb, 0x64, 0xee,
728 0x80, 0xb3, 0xec, 0xa4, 0xbe, 0xe3, 0x77, 0xb5, 0xa1, 0xcc, 0xdc, 0x45,
729 0x23, 0xbd, 0x18, 0xd3, 0x44, 0x5a, 0x1f, 0xd3, 0xcf, 0x63, 0x0d, 0xdf,
730 0xc8, 0x98, 0x3e, 0x23, 0xe8, 0xc3, 0xdc, 0x41, 0x6f, 0xbc, 0x53, 0xcc,
731 0xef, 0x83, 0x28, 0x8b, 0x16, 0xbf, 0x61, 0xa6, 0x1f, 0x08, 0xec, 0xb6,
732 0x45, 0x26, 0xd5, 0x7c, 0x8a, 0xea, 0xbe, 0x06, 0xbf, 0x9b, 0x19, 0xb2,
733 0x83, 0xfc, 0xe4, 0xc2, 0x7a, 0x39, 0x65, 0xf9, 0x33, 0xcd, 0xd2, 0x52,
734 0xc4, 0x38, 0x7c, 0xbf, 0xd1, 0xf7, 0xf4, 0x51, 0xfd, 0x9d, 0x90, 0x87,
735 0x36, 0x4f, 0x50, 0xde, 0x8b, 0xc5, 0x95, 0x7b, 0xa2, 0xc5, 0xe0, 0x1b,
736 0x26, 0xcb, 0xdc, 0xd7, 0xe4, 0x37, 0xda, 0x22, 0x17, 0x6a, 0xfc, 0x3e,
737 0x69, 0xb7, 0xba, 0x47, 0x13, 0x9c, 0x4d, 0x72, 0x5e, 0x3d, 0xca, 0x2e,
738 0x54, 0x6b, 0x25, 0xd2, 0x54, 0xdb, 0xf6, 0xa8, 0xb6, 0xed, 0xa4, 0xf1,
739 0x08, 0x68, 0xfc, 0x25, 0xcd, 0x17, 0xb6, 0xcf, 0xaa, 0xfb, 0xdd, 0xd9,
740 0x38, 0xcf, 0xc7, 0x1e, 0x53, 0x6b, 0xa1, 0x9d, 0x40, 0xdb, 0x5f, 0x0e,
741 0xab, 0x78, 0xa7, 0xfa, 0x06, 0x1c, 0xf2, 0xc9, 0x6f, 0xba, 0xa1, 0xe3,
742 0xcb, 0xfc, 0x76, 0x7b, 0x04, 0x29, 0xbf, 0xd9, 0xde, 0xab, 0xee, 0xff,
743 0x57, 0xd5, 0x37, 0x01, 0x46, 0x1e, 0xc3, 0x7a, 0xac, 0x6f, 0x62, 0x8c,
744 0x80, 0xef, 0x85, 0x32, 0xbf, 0xe5, 0x36, 0x77, 0x4c, 0x37, 0x2f, 0x73,
745 0x4f, 0x88, 0xf2, 0xf3, 0x83, 0x6f, 0xfb, 0xab, 0xea, 0x3b, 0x82, 0x24,
746 0xbf, 0x2b, 0x84, 0xfd, 0xba, 0x1f, 0xcf, 0x3c, 0x57, 0xde, 0x87, 0x14,
747 0xfa, 0xa7, 0x36, 0x81, 0xf4, 0x61, 0xc9, 0xab, 0xb8, 0x5f, 0x2b, 0xf2,
748 0x93, 0x6a, 0xec, 0x52, 0xed, 0x13, 0xb2, 0xff, 0xf4, 0x43, 0xfc, 0x5e,
749 0x42, 0x7d, 0x77, 0x9e, 0xf3, 0x38, 0xc7, 0xb8, 0x4c, 0xa9, 0x75, 0x17,
750 0x35, 0xed, 0xcd, 0x59, 0xcc, 0xcf, 0xd4, 0xb7, 0x19, 0xc5, 0x5a, 0x2b,
751 0xe6, 0x18, 0xd2, 0xf7, 0x4c, 0xe9, 0x0f, 0x98, 0xf5, 0xb7, 0xf0, 0xee,
752 0xa2, 0xcf, 0xf3, 0xc3, 0xfd, 0x65, 0xde, 0x23, 0x4d, 0xe9, 0x38, 0x01,
753 0x63, 0x87, 0x3c, 0x9f, 0xa0, 0x8c, 0x3b, 0xe9, 0x09, 0x58, 0xa0, 0xa8,
754 0x24, 0x78, 0xb6, 0xad, 0xd7, 0xd2, 0xda, 0xb0, 0x16, 0xde, 0x9d, 0x0d,
755 0xd6, 0xc3, 0xef, 0x21, 0x0a, 0xe5, 0xc6, 0x6f, 0x2a, 0xd4, 0x37, 0xd0,
756 0xfc, 0x76, 0x46, 0x26, 0x6a, 0x9f, 0x94, 0x07, 0xca, 0x5b, 0xf4, 0xf7,
757 0x14, 0x31, 0x79, 0xa0, 0xf6, 0xba, 0xa2, 0x69, 0x41, 0x7d, 0xd7, 0x11,
758 0xd5, 0x3c, 0x33, 0xdf, 0x54, 0x04, 0xfd, 0x1d, 0xa8, 0x39, 0x0d, 0xdf,
759 0x2f, 0x44, 0x65, 0x62, 0xe1, 0x47, 0x91, 0x8d, 0xbf, 0x61, 0x78, 0x54,
760 0x72, 0xa7, 0x69, 0xa3, 0xa7, 0xe5, 0xf1, 0x8a, 0xef, 0xdf, 0xe9, 0x11,
761 0x5b, 0x6e, 0x96, 0xcb, 0xf1, 0xb1, 0x3d, 0x6f, 0xb8, 0x1d, 0xa1, 0xea,
762 0x6c, 0x33, 0x74, 0x2f, 0xf1, 0x8c, 0xb4, 0x30, 0xbf, 0x30, 0xcb, 0x7d,
763 0x1a, 0xc1, 0x1a, 0x1d, 0xfb, 0x9a, 0xdc, 0xde, 0xce, 0xb8, 0xdb, 0x9d,
764 0xf0, 0x65, 0x7f, 0xdb, 0x0b, 0xf4, 0xf5, 0xe7, 0x16, 0xf7, 0xca, 0xe7,
765 0x6a, 0xb1, 0x50, 0x75, 0x86, 0xf7, 0x0d, 0x9d, 0x91, 0x8a, 0xa4, 0x50,
766 0x8f, 0xfd, 0x43, 0x5e, 0x12, 0xd7, 0xc9, 0xb3, 0x27, 0x7f, 0xea, 0x5f,
767 0x73, 0xf1, 0x1e, 0xba, 0xe6, 0xb2, 0x67, 0x62, 0x8b, 0x63, 0xf0, 0x5d,
768 0x59, 0xef, 0x3a, 0xc8, 0x01, 0xb0, 0x03, 0xf6, 0x1c, 0xfd, 0xdc, 0x6b,
769 0x5a, 0x6f, 0x59, 0xc7, 0x6e, 0x92, 0x6b, 0x2b, 0xf7, 0x95, 0x5f, 0x83,
770 0x6c, 0x27, 0x03, 0xfa, 0xab, 0x58, 0xfc, 0x21, 0x09, 0x7f, 0x1e, 0x36,
771 0xe5, 0xf3, 0x4d, 0x4a, 0xb7, 0xd3, 0xb6, 0xc1, 0x07, 0x82, 0x9f, 0x13,
772 0x41, 0x3f, 0xa9, 0xf6, 0x40, 0x66, 0xa7, 0x45, 0xbe, 0xb0, 0x49, 0xb2,
773 0xed, 0xf4, 0xa3, 0xe5, 0xe7, 0xe8, 0xaf, 0xc6, 0x7d, 0x96, 0x96, 0x3f,
774 0xe2, 0x1e, 0xaf, 0x73, 0x2d, 0xa9, 0xc4, 0x9f, 0xc9, 0xa7, 0x65, 0x22,
775 0xc1, 0xb5, 0x3c, 0x2a, 0xc5, 0xca, 0x63, 0xf8, 0x71, 0x9d, 0x9c, 0xf7,
776 0xc7, 0xf4, 0x5d, 0x86, 0x31, 0x29, 0xcd, 0x64, 0x64, 0x6a, 0x6e, 0x92,
777 0xdf, 0xa0, 0x8e, 0xdc, 0xa9, 0xce, 0xf8, 0x9c, 0x44, 0x2a, 0xb4, 0x2d,
778 0x39, 0xc5, 0xbb, 0x1b, 0x6a, 0x3d, 0x93, 0x58, 0xcf, 0xe3, 0xed, 0xbc,
779 0xb3, 0x7e, 0x0d, 0xfa, 0xd7, 0x3a, 0x45, 0x39, 0x74, 0xec, 0xee, 0x10,
780 0xf3, 0xfb, 0xe0, 0xbf, 0xb3, 0x6c, 0x9f, 0x84, 0x8f, 0xad, 0xe8, 0x79,
781 0x94, 0xeb, 0xb3, 0x66, 0xd5, 0xfe, 0x14, 0xda, 0xa2, 0xde, 0x31, 0xd3,
782 0xd6, 0xd4, 0x61, 0x5b, 0xae, 0x73, 0xaf, 0x34, 0x9f, 0x33, 0xf3, 0x82,
783 0x1c, 0x26, 0x1a, 0xe9, 0xdd, 0xb2, 0x8e, 0xde, 0x11, 0x62, 0x5e, 0xd0,
784 0x8b, 0x34, 0x0e, 0x6b, 0x1a, 0x7f, 0x05, 0xfd, 0x1b, 0x1e, 0xdc, 0x89,
785 0x32, 0x5b, 0x7f, 0x93, 0xf4, 0x7e, 0xe8, 0x4e, 0x9a, 0xb3, 0x3e, 0xe9,
786 0x4e, 0xd9, 0xe2, 0x7c, 0x36, 0xa2, 0xf9, 0xeb, 0x9a, 0x2f, 0xfb, 0x40,
787 0x2f, 0xde, 0x2b, 0xdd, 0xa6, 0xbe, 0x2f, 0xc8, 0x8e, 0xef, 0x83, 0xec,
788 0x98, 0x75, 0x6d, 0x83, 0x8c, 0xf1, 0xdc, 0x84, 0xf5, 0x1b, 0x69, 0x12,
789 0xd8, 0xbd, 0x30, 0x63, 0x1f, 0x2e, 0xd7, 0x0a, 0x5c, 0xfa, 0x05, 0xda,
790 0x28, 0x7e, 0x63, 0x7d, 0xb3, 0xb6, 0x51, 0x3f, 0x8f, 0xc7, 0x3f, 0x6a,
791 0x0f, 0x6c, 0x94, 0x0d, 0x9a, 0xb4, 0xe9, 0x36, 0xfb, 0x80, 0x91, 0x19,
792 0x0f, 0x4e, 0x25, 0x1e, 0x14, 0x33, 0x8e, 0xbf, 0x9b, 0x7e, 0xef, 0xd0,
793 0xc0, 0x36, 0xa0, 0x16, 0x75, 0x67, 0x27, 0xc1, 0x3b, 0x40, 0xa9, 0xd0,
794 0x3e, 0x75, 0x7f, 0x63, 0xed, 0xf7, 0x23, 0x69, 0x79, 0x76, 0x55, 0x56,
795 0x46, 0x7e, 0x28, 0x8e, 0x24, 0x6f, 0xa4, 0xac, 0xb0, 0xdf, 0x49, 0xae,
796 0x33, 0xf1, 0x90, 0x5a, 0xa7, 0x0d, 0x3f, 0x92, 0x77, 0x2d, 0xec, 0x50,
797 0x75, 0x8e, 0x7c, 0x47, 0xba, 0xc8, 0x67, 0x73, 0xde, 0xab, 0xf4, 0x0a,
798 0xc6, 0x65, 0x19, 0x75, 0x23, 0xdf, 0x67, 0xf4, 0x79, 0x70, 0x7b, 0x07,
799 0xef, 0x24, 0x14, 0x50, 0x56, 0x59, 0xdc, 0x78, 0x6e, 0xbf, 0xad, 0xe4,
800 0xe0, 0x51, 0xd0, 0xfd, 0x9f, 0xa1, 0xee, 0x63, 0x48, 0xb9, 0xc6, 0xcc,
801 0x0a, 0xdf, 0x49, 0xef, 0x8f, 0xca, 0x20, 0xe4, 0x82, 0xf9, 0x47, 0x81,
802 0x37, 0x69, 0x4f, 0x91, 0x56, 0xf8, 0x4c, 0x5d, 0xef, 0x6a, 0x7b, 0xca,
803 0xb9, 0xec, 0xc3, 0x5c, 0xd4, 0x3a, 0xb5, 0x3c, 0xdd, 0xaf, 0xdb, 0x8d,
804 0xaf, 0xd0, 0xea, 0xa1, 0x77, 0xe0, 0x8d, 0xe8, 0x0a, 0xde, 0x08, 0xc6,
805 0xca, 0x76, 0x18, 0xac, 0x11, 0xac, 0x21, 0xc0, 0x1a, 0x81, 0x9c, 0x4f,
806 0x4a, 0x04, 0x72, 0x1c, 0x5e, 0x95, 0x63, 0xe0, 0x9e, 0x60, 0xcf, 0x4c,
807 0xf1, 0x1c, 0x53, 0xd1, 0x99, 0x72, 0x48, 0xf9, 0x25, 0x1f, 0x1b, 0x79,
808 0x7d, 0xfb, 0xbb, 0xf0, 0xba, 0xd4, 0x61, 0xf0, 0xc3, 0x3f, 0x6c, 0x1f,
809 0x3c, 0xd2, 0xb1, 0xba, 0x0f, 0x6e, 0xfa, 0x05, 0xed, 0x83, 0xf5, 0x72,
810 0xd9, 0x28, 0x53, 0x36, 0xe4, 0x89, 0xfc, 0xa2, 0x3c, 0x51, 0x8e, 0x48,
811 0x4b, 0xea, 0xd3, 0x66, 0xfa, 0x6f, 0x89, 0xab, 0xea, 0xdb, 0x91, 0x69,
812 0xe8, 0xa0, 0x8e, 0x50, 0xa5, 0x12, 0x97, 0xd2, 0xe2, 0x4f, 0x94, 0x4c,
813 0x3f, 0x5b, 0xa7, 0x5e, 0x7a, 0xaf, 0xb5, 0xaf, 0xd5, 0xb9, 0x85, 0x75,
814 0x3a, 0xb7, 0xb0, 0xa2, 0x73, 0xdb, 0xb5, 0xcf, 0xf6, 0x0f, 0xd1, 0xb9,
815 0xf1, 0x86, 0xb3, 0x21, 0x73, 0x2e, 0x24, 0xa1, 0x5c, 0x5f, 0x8b, 0xec,
816 0x81, 0x1d, 0x19, 0x99, 0xd9, 0x2b, 0x7f, 0x30, 0x33, 0xad, 0xee, 0x49,
817 0x7d, 0xd3, 0x4b, 0x25, 0x3e, 0x11, 0xf2, 0xe5, 0xa3, 0xf0, 0xb9, 0x27,
818 0xba, 0x9a, 0x64, 0xcf, 0x6d, 0xea, 0xbc, 0xd3, 0xce, 0x85, 0x3a, 0x85,
819 0x91, 0xf8, 0xbc, 0xe7, 0x78, 0xc9, 0x10, 0xef, 0xcc, 0x35, 0xcb, 0x44,
820 0xbc, 0x55, 0xf6, 0x02, 0x3b, 0x15, 0xaf, 0xf7, 0xd4, 0x37, 0xd3, 0x59,
821 0x75, 0x9e, 0xf4, 0x86, 0xe6, 0x3b, 0xe8, 0xd0, 0x66, 0xcb, 0x7f, 0xac,
822 0x33, 0xcf, 0xf2, 0x07, 0xd7, 0xe5, 0xf9, 0xfc, 0x04, 0xfc, 0xb9, 0x38,
823 0x68, 0xd5, 0x78, 0xff, 0x28, 0xac, 0xe8, 0x59, 0xaa, 0x8c, 0xab, 0x7b,
824 0x5d, 0x57, 0xc3, 0xa4, 0x97, 0xf2, 0xa1, 0x12, 0xb9, 0x30, 0x30, 0xce,
825 0x2c, 0x90, 0xb4, 0x4b, 0xbf, 0x53, 0xe3, 0x4f, 0xe8, 0xff, 0xfd, 0xea,
826 0x7c, 0x79, 0x19, 0xb4, 0xf1, 0x55, 0xfc, 0xb9, 0x10, 0x27, 0xae, 0x5f,
827 0xbd, 0xc3, 0xfc, 0x4e, 0x7c, 0xaf, 0xb0, 0xbd, 0x39, 0x0b, 0xd1, 0xf1,
828 0x2a, 0x1d, 0x07, 0x50, 0x67, 0x7b, 0x1b, 0xfd, 0xbf, 0x0b, 0xc4, 0x7a,
829 0xfc, 0xae, 0x9f, 0xd8, 0xce, 0x39, 0x5a, 0x91, 0x1f, 0x2a, 0x5f, 0x34,
830 0x4b, 0xfa, 0x56, 0xc1, 0xa7, 0xe3, 0x09, 0x63, 0xcf, 0x43, 0xdd, 0xe7,
831 0x1b, 0x7d, 0x51, 0xf6, 0x11, 0x53, 0x77, 0x42, 0x56, 0xff, 0x9f, 0x17,
832 0xc6, 0x98, 0xb2, 0xa1, 0xbb, 0xcb, 0xd3, 0x12, 0x3e, 0x31, 0x26, 0x91,
833 0xe3, 0x8c, 0xe7, 0x67, 0xa5, 0x14, 0xf7, 0xe5, 0x01, 0x6f, 0xad, 0x6f,
834 0xd2, 0x6d, 0xad, 0x9f, 0xfb, 0xa3, 0x32, 0x74, 0xfa, 0x31, 0x89, 0x9e,
835 0xe0, 0xbb, 0x35, 0x67, 0x39, 0xd0, 0x47, 0x9b, 0xa5, 0x12, 0x67, 0x4c,
836 0x3b, 0xaa, 0xce, 0xc6, 0x2f, 0x8f, 0xbf, 0x1e, 0x2d, 0x01, 0x2b, 0x14,
837 0x94, 0x6e, 0x41, 0xba, 0xe2, 0x4b, 0xe4, 0xae, 0xe3, 0x9e, 0x82, 0xbf,
838 0x19, 0x9a, 0xa8, 0x44, 0xd5, 0x1d, 0xa5, 0xcb, 0x71, 0xd6, 0x7d, 0x0c,
839 0x7e, 0x37, 0x71, 0x06, 0x74, 0xc7, 0x98, 0xb4, 0x30, 0x1f, 0x3e, 0xb1,
840 0x8a, 0x33, 0xa8, 0x13, 0x86, 0xbc, 0xb8, 0x44, 0xce, 0x04, 0x6b, 0xe7,
841 0x7f, 0x1c, 0x64, 0xcd, 0xef, 0x95, 0xf0, 0x71, 0x3e, 0x37, 0xfa, 0x43,
842 0xc4, 0xee, 0xb0, 0x0d, 0xe7, 0x7f, 0x1f, 0xfd, 0xf1, 0x5d, 0x56, 0x7f,
843 0x87, 0x8b, 0x7c, 0xf5, 0xef, 0xfa, 0x7f, 0x04, 0x50, 0xf6, 0xff, 0x3f,
844 0xc3, 0x8e, 0xbb, 0xb0, 0xa8, 0x4d, 0x00, 0x00, 0x00 };
845
846static const u32 bnx2_COM_b06FwData[(0x0/4) + 1] = { 0x0 };
847static const u32 bnx2_COM_b06FwRodata[(0x14/4) + 1] = {
848 0x08000e7c, 0x08000ec4, 0x08000f04, 0x08000f50, 0x08000f84, 0x00000000
849};
850
851static struct fw_info bnx2_com_fw_06 = {
852 /* Firmware version: 4.6.16 */
853 .ver_major = 0x4,
854 .ver_minor = 0x6,
855 .ver_fix = 0x10,
856
857 .start_addr = 0x080000f8,
858
859 .text_addr = 0x08000000,
860 .text_len = 0x4da4,
861 .text_index = 0x0,
862 .gz_text = bnx2_COM_b06FwText,
863 .gz_text_len = sizeof(bnx2_COM_b06FwText),
864
865 .data_addr = 0x00000000,
866 .data_len = 0x0,
867 .data_index = 0x0,
868 .data = bnx2_COM_b06FwData,
869
870 .sbss_addr = 0x08004de0,
871 .sbss_len = 0x38,
872 .sbss_index = 0x0,
873
874 .bss_addr = 0x08004e18,
875 .bss_len = 0xbc,
876 .bss_index = 0x0,
877
878 .rodata_addr = 0x08004da4,
879 .rodata_len = 0x14,
880 .rodata_index = 0x0,
881 .rodata = bnx2_COM_b06FwRodata,
882};
883
884/* Initialized Values for the Completion Processor. */ 10/* Initialized Values for the Completion Processor. */
885static const struct cpu_reg cpu_reg_com = { 11static const struct cpu_reg cpu_reg_com = {
886 .mode = BNX2_COM_CPU_MODE, 12 .mode = BNX2_COM_CPU_MODE,
@@ -897,1277 +23,6 @@ static const struct cpu_reg cpu_reg_com = {
897 .mips_view_base = 0x8000000, 23 .mips_view_base = 0x8000000,
898}; 24};
899 25
900static u8 bnx2_CP_b06FwText[] = {
901 0x9d, 0xbc, 0x0d, 0x7c, 0x1b, 0xe5, 0x95, 0x2e, 0xfe, 0xcc, 0x48, 0xb2,
902 0x65, 0x5b, 0xb6, 0xc7, 0x8e, 0x92, 0x28, 0xac, 0x37, 0xd1, 0xc4, 0x23,
903 0x47, 0xc1, 0xa6, 0x8c, 0x12, 0x27, 0xa8, 0xac, 0x4a, 0x54, 0xc7, 0x24,
904 0x4e, 0x48, 0xc1, 0x29, 0x69, 0x6b, 0xb8, 0x2d, 0xa8, 0xf9, 0xc2, 0x84,
905 0x40, 0x43, 0xcb, 0xde, 0x6b, 0xee, 0xed, 0xae, 0x55, 0xdb, 0x49, 0x9c,
906 0x44, 0x96, 0x6c, 0xc7, 0x24, 0xa1, 0xdb, 0xff, 0xa2, 0xc4, 0xce, 0x07,
907 0x54, 0xb6, 0xd2, 0x96, 0xee, 0x86, 0xde, 0x74, 0xd1, 0x4d, 0x02, 0x18,
908 0xca, 0x47, 0xda, 0xe5, 0x76, 0x69, 0x7f, 0xbd, 0xc5, 0x97, 0x42, 0x08,
909 0x5b, 0x0a, 0xe9, 0xe7, 0x86, 0x7e, 0x30, 0xf7, 0x39, 0x23, 0x29, 0x31,
910 0x2c, 0xdb, 0x76, 0xff, 0xfa, 0xfd, 0xe6, 0x27, 0xcd, 0xe8, 0xfd, 0x38,
911 0xef, 0x79, 0xcf, 0x79, 0xce, 0x73, 0xde, 0x79, 0x67, 0xfc, 0x40, 0x39,
912 0x0a, 0x9f, 0x4a, 0x1e, 0x1f, 0x6a, 0xde, 0xb6, 0x61, 0x69, 0xe8, 0x43,
913 0x4b, 0xe5, 0xdc, 0xa9, 0x95, 0x38, 0xf1, 0x67, 0x7e, 0xfc, 0x7f, 0x6e,
914 0xc1, 0xc2, 0x47, 0xe1, 0xd1, 0x58, 0xf8, 0xed, 0x00, 0xb4, 0x62, 0xff,
915 0x72, 0xc0, 0xad, 0x46, 0xc6, 0x3a, 0x5a, 0x0c, 0xb8, 0x1d, 0x91, 0x6d,
916 0xb7, 0x6f, 0x30, 0x80, 0x68, 0xa6, 0xd1, 0xbf, 0x1c, 0x7f, 0xb0, 0xe2,
917 0x5e, 0x27, 0xe4, 0xfa, 0x5f, 0x46, 0x7e, 0xdf, 0xfd, 0xed, 0x6b, 0xf4,
918 0x0b, 0x69, 0x07, 0xdc, 0x5a, 0x24, 0x0e, 0xad, 0x01, 0xee, 0x3a, 0xd6,
919 0xf9, 0xca, 0x82, 0xaf, 0x28, 0xa8, 0x2a, 0xb6, 0x75, 0xde, 0xfa, 0xf6,
920 0x02, 0x5f, 0xac, 0x2c, 0xa2, 0xe1, 0xf1, 0x2c, 0xda, 0x9b, 0x06, 0xba,
921 0xad, 0x4a, 0x23, 0x04, 0xb7, 0x61, 0x74, 0x0c, 0x28, 0x9e, 0xf0, 0x96,
922 0x25, 0xf0, 0x94, 0x1a, 0x88, 0x5f, 0x11, 0x41, 0xfb, 0x95, 0xe3, 0xe5,
923 0x71, 0x67, 0xc4, 0x8d, 0xb6, 0xac, 0x3b, 0xfe, 0x17, 0x11, 0x03, 0x2b,
924 0xb3, 0x46, 0x19, 0xaa, 0x34, 0xf4, 0x65, 0x5f, 0x77, 0xe7, 0xdb, 0x6b,
925 0x2e, 0x7c, 0xdf, 0x56, 0x9b, 0xff, 0x9e, 0x15, 0x73, 0x46, 0x80, 0xed,
926 0x09, 0xcb, 0x2a, 0x89, 0xdc, 0x7c, 0xb3, 0x1a, 0x31, 0x7c, 0x47, 0xb0,
927 0x0c, 0xeb, 0x35, 0x7c, 0x71, 0x47, 0xf3, 0x2f, 0x94, 0x53, 0x23, 0x4d,
928 0x88, 0x1f, 0x75, 0x20, 0xaa, 0x3d, 0xcb, 0xef, 0xb9, 0x73, 0x3b, 0xc2,
929 0x4d, 0x38, 0x70, 0xf4, 0x22, 0xaf, 0x3b, 0xed, 0x6b, 0xbd, 0xfb, 0xe7,
930 0xce, 0xbd, 0x25, 0xfc, 0x2c, 0x1e, 0x3c, 0x2a, 0xbf, 0xef, 0x40, 0x77,
931 0x93, 0x82, 0xa9, 0x9b, 0x37, 0xc3, 0x61, 0x34, 0xa1, 0x6f, 0xbf, 0xe2,
932 0xec, 0x69, 0x52, 0x11, 0xf5, 0xea, 0xc1, 0x18, 0x27, 0xc1, 0x69, 0x20,
933 0x56, 0x1a, 0x09, 0x3b, 0xdf, 0x48, 0x44, 0x34, 0x87, 0x61, 0x59, 0xc1,
934 0xd0, 0x6c, 0x38, 0x6a, 0x2c, 0xeb, 0x31, 0xd3, 0x03, 0xff, 0xa7, 0x9e,
935 0x47, 0x7c, 0xb4, 0x1d, 0xaa, 0xf1, 0x3c, 0x7a, 0x46, 0x9f, 0xc7, 0x43,
936 0x7b, 0xcb, 0x31, 0x35, 0x83, 0xe3, 0x4d, 0xf9, 0xf0, 0xed, 0x05, 0xd2,
937 0xb7, 0xc8, 0xd1, 0xcc, 0xc3, 0x8d, 0x29, 0xc7, 0x39, 0x7e, 0x4b, 0x99,
938 0x8b, 0xd6, 0xd4, 0xec, 0xcb, 0x65, 0xb6, 0xb3, 0x4c, 0xdf, 0xfb, 0xca,
939 0xc4, 0x47, 0x23, 0xf8, 0x4e, 0x42, 0xc1, 0x96, 0x50, 0x15, 0xa2, 0x35,
940 0x32, 0x5e, 0xcb, 0x3a, 0x6a, 0x9e, 0xb3, 0xa6, 0x34, 0xe9, 0x6b, 0x12,
941 0xcf, 0xf2, 0xbf, 0x1d, 0xa1, 0x57, 0xad, 0x9c, 0x57, 0xda, 0xfb, 0x3c,
942 0x6d, 0x68, 0x2d, 0xaf, 0x3b, 0x91, 0x4a, 0x20, 0x56, 0x15, 0xf9, 0x04,
943 0xcf, 0x75, 0xf3, 0x2d, 0xc5, 0xed, 0x7e, 0x3b, 0xe1, 0xfe, 0x54, 0xa5,
944 0xa1, 0xde, 0x57, 0x0d, 0x27, 0x9e, 0xa3, 0xcc, 0x27, 0xcc, 0xcd, 0x70,
945 0x19, 0x5f, 0x10, 0x9b, 0xe3, 0xb8, 0x5e, 0xb4, 0x30, 0xbb, 0x58, 0x5f,
946 0xda, 0xd5, 0xb0, 0x23, 0x65, 0x59, 0xbb, 0xcc, 0xe8, 0x87, 0xcb, 0x68,
947 0x10, 0xa7, 0x13, 0xed, 0x70, 0x47, 0x02, 0xfe, 0xf3, 0x08, 0x63, 0x79,
948 0xd6, 0x8b, 0x27, 0x12, 0x70, 0xb6, 0x2c, 0xa8, 0x43, 0x4f, 0x36, 0x82,
949 0xeb, 0xb3, 0x26, 0x5a, 0xb3, 0x7f, 0xda, 0xca, 0x6e, 0x48, 0xf9, 0x39,
950 0x86, 0x3f, 0x58, 0xf9, 0x31, 0xc8, 0xf8, 0xe4, 0x9b, 0xf3, 0x9a, 0xba,
951 0x02, 0xbb, 0x47, 0x0c, 0xec, 0xe4, 0xfc, 0xad, 0x0a, 0xe5, 0xa2, 0x65,
952 0xd0, 0xcd, 0xf3, 0x88, 0x60, 0x45, 0xd6, 0xe0, 0x9c, 0x46, 0xb0, 0x3c,
953 0x55, 0xaf, 0x8d, 0x62, 0x21, 0xa2, 0xbe, 0xbc, 0x6d, 0xef, 0xe1, 0x78,
954 0xd7, 0x07, 0xda, 0x51, 0x49, 0x1b, 0xc9, 0x2c, 0x09, 0xa3, 0x85, 0xfd,
955 0xaf, 0xf9, 0x33, 0xfa, 0xbf, 0x89, 0xfd, 0xbf, 0xc5, 0xfe, 0x73, 0x76,
956 0xff, 0x70, 0xae, 0xe6, 0xb9, 0x9b, 0xf6, 0xb8, 0x3b, 0xe3, 0x74, 0xae,
957 0x4a, 0x79, 0xb1, 0x2b, 0x63, 0xd2, 0xe6, 0xe4, 0x2f, 0x1f, 0x76, 0x8c,
958 0xd4, 0x61, 0xe7, 0x88, 0xee, 0x7b, 0x8a, 0xbf, 0x7b, 0xc7, 0xae, 0xc0,
959 0xf6, 0x11, 0x05, 0x87, 0x8c, 0x2b, 0xd0, 0xc3, 0xdf, 0x07, 0x46, 0xe6,
960 0xe2, 0xc1, 0x11, 0x07, 0xc2, 0x33, 0xa6, 0x8f, 0x43, 0xbe, 0xaf, 0x40,
961 0x7c, 0xcc, 0x8f, 0x9e, 0xc4, 0xb3, 0xb6, 0x0e, 0x2b, 0x23, 0xdf, 0x2e,
962 0xfa, 0x33, 0x7d, 0xc7, 0x8f, 0x0d, 0x09, 0x1f, 0x7a, 0x52, 0xe2, 0x07,
963 0x6e, 0xda, 0xa6, 0xf8, 0xc1, 0xaf, 0x80, 0x2a, 0xb6, 0x9f, 0x2d, 0xfe,
964 0xaf, 0xc0, 0xc9, 0x79, 0xdb, 0xc8, 0xff, 0x76, 0xa5, 0xc4, 0x26, 0xa4,
965 0x4d, 0xb1, 0x0b, 0xf9, 0x5d, 0x4b, 0xbb, 0x2b, 0x87, 0xff, 0x70, 0x39,
966 0x82, 0x0f, 0x68, 0x78, 0xad, 0x59, 0xae, 0xd3, 0xde, 0x43, 0x52, 0x66,
967 0x10, 0x47, 0x32, 0xe2, 0xa7, 0x7e, 0xb4, 0x24, 0x26, 0xd9, 0x7e, 0x33,
968 0xdb, 0x36, 0xf1, 0x4f, 0xd9, 0x26, 0xfc, 0x63, 0x36, 0x88, 0x7f, 0xa0,
969 0x1e, 0xbf, 0x99, 0xf5, 0xe3, 0xd1, 0x6c, 0x1d, 0xbe, 0x91, 0xf5, 0xe1,
970 0xeb, 0x9c, 0xbf, 0xaf, 0x65, 0xdb, 0x69, 0xfb, 0x1a, 0x8e, 0x67, 0x45,
971 0xff, 0x25, 0x1c, 0x6f, 0x39, 0x7a, 0x47, 0xea, 0x83, 0xa7, 0x69, 0x5b,
972 0xff, 0x60, 0xae, 0x46, 0xae, 0xb6, 0xd9, 0xb6, 0xc9, 0x5d, 0xbc, 0xbe,
973 0x7b, 0xa4, 0x3e, 0x7a, 0xa5, 0x62, 0x59, 0x6a, 0xa8, 0x31, 0x7c, 0x4a,
974 0x55, 0x31, 0xe5, 0xd5, 0xfd, 0x39, 0x55, 0xf7, 0x47, 0xe1, 0x42, 0x82,
975 0xbe, 0x11, 0x9f, 0xa9, 0xa7, 0xe3, 0xb4, 0x29, 0xaf, 0x31, 0xca, 0xf1,
976 0xe8, 0xfe, 0xb8, 0xaa, 0x61, 0x67, 0x4a, 0x3f, 0x10, 0x57, 0xbd, 0x88,
977 0x67, 0xcb, 0xf1, 0xb3, 0x11, 0xbd, 0x3f, 0xae, 0xde, 0x88, 0x78, 0xad,
978 0x65, 0x7d, 0x3d, 0x84, 0x6d, 0xb3, 0x23, 0x88, 0xce, 0x8c, 0x20, 0x36,
979 0x37, 0x52, 0x87, 0x54, 0x0a, 0x78, 0x6b, 0xc0, 0xf0, 0xfd, 0x8b, 0xd2,
980 0x8e, 0xbf, 0x6e, 0xd7, 0xfd, 0x7e, 0xb5, 0x31, 0x3e, 0xaa, 0x2e, 0xa1,
981 0x4b, 0xc3, 0xef, 0x8b, 0xac, 0x44, 0x97, 0x7d, 0x4d, 0x81, 0x66, 0x78,
982 0xd1, 0x9b, 0xfa, 0x30, 0x62, 0xde, 0xfa, 0x8e, 0x21, 0xb5, 0xfe, 0xa2,
983 0xa9, 0xea, 0x93, 0xed, 0xaa, 0x65, 0xfd, 0x7c, 0xf1, 0x5b, 0x96, 0x7f,
984 0x96, 0x65, 0x2d, 0x5a, 0x2c, 0x7d, 0xfa, 0x51, 0x13, 0x31, 0xb1, 0xd6,
985 0x9e, 0xc3, 0x72, 0x9c, 0x1b, 0xa9, 0x65, 0x1f, 0x1a, 0xfe, 0xf7, 0x35,
986 0x7a, 0x70, 0xb3, 0x5a, 0x8e, 0xd7, 0xc6, 0xca, 0xf1, 0x0a, 0xc7, 0xf3,
987 0x8b, 0x11, 0x1f, 0x7e, 0x35, 0x62, 0x59, 0x9f, 0x32, 0xff, 0x0a, 0xc3,
988 0xb5, 0x83, 0xf8, 0xc7, 0x09, 0x2f, 0x7e, 0x96, 0xd0, 0xf0, 0x6a, 0x22,
989 0x7a, 0xef, 0x0c, 0xe8, 0xd1, 0x09, 0xe5, 0xf4, 0xed, 0x55, 0x68, 0x6c,
990 0xaf, 0x52, 0xf4, 0xb6, 0x3d, 0xd0, 0x7d, 0x57, 0x2a, 0x5e, 0x9c, 0xcf,
991 0x68, 0xf8, 0x49, 0xa6, 0x3e, 0xfc, 0xcf, 0xec, 0xf3, 0x37, 0xe6, 0x63,
992 0x56, 0x6e, 0x96, 0xe8, 0x4d, 0x74, 0x44, 0x3d, 0xa7, 0xa8, 0xe7, 0x14,
993 0xf5, 0x9c, 0xa2, 0x9e, 0x29, 0xc3, 0xa3, 0x29, 0xea, 0x99, 0xba, 0xfb,
994 0x3a, 0x6d, 0xea, 0x6b, 0x9c, 0xc7, 0xe3, 0xf6, 0x3c, 0x86, 0x39, 0x5f,
995 0x7f, 0x81, 0xbf, 0xb5, 0xb1, 0xf5, 0x59, 0xeb, 0xbf, 0x79, 0x65, 0x4c,
996 0x0f, 0xcf, 0xcc, 0xe3, 0x97, 0x8c, 0xed, 0x3b, 0x56, 0x4c, 0x93, 0x71,
997 0xc9, 0xf8, 0x6c, 0xfd, 0xf9, 0xb7, 0x29, 0x3b, 0x15, 0x94, 0x5b, 0xd6,
998 0x5e, 0xb3, 0xf0, 0xbf, 0xb7, 0x38, 0xbe, 0x9b, 0x95, 0xbc, 0x5d, 0xfd,
999 0x5d, 0x29, 0xf5, 0x1d, 0x8c, 0xaa, 0x2b, 0x79, 0xae, 0xc7, 0xa3, 0xf8,
1000 0xa8, 0xe3, 0xbd, 0xe7, 0xf7, 0x7a, 0x65, 0x3e, 0xfc, 0x97, 0xce, 0x69,
1001 0x8f, 0x76, 0x7f, 0x77, 0xf2, 0x5c, 0xc6, 0x22, 0xb6, 0x28, 0x36, 0xe0,
1002 0xa5, 0xbd, 0x5c, 0x53, 0xf8, 0x0f, 0x71, 0x35, 0xb2, 0x0d, 0xed, 0xcd,
1003 0x8f, 0xd8, 0x7d, 0x94, 0x24, 0xc5, 0x6f, 0x14, 0xbc, 0xf5, 0x61, 0x05,
1004 0xa7, 0x42, 0x06, 0x6d, 0xe6, 0x18, 0x71, 0x01, 0x28, 0x4d, 0xc2, 0xed,
1005 0x89, 0x44, 0x90, 0x18, 0x80, 0xbb, 0x2c, 0x12, 0xc6, 0xc2, 0x81, 0xfa,
1006 0xce, 0x73, 0xd0, 0x83, 0x03, 0x8a, 0xde, 0xce, 0x58, 0x62, 0x8e, 0x53,
1007 0x8f, 0x57, 0x2a, 0xba, 0xbf, 0x44, 0x81, 0x5b, 0x61, 0xb9, 0x40, 0xe6,
1008 0x18, 0x76, 0x66, 0xe5, 0x77, 0x18, 0x46, 0xe6, 0x37, 0xc5, 0xbe, 0x24,
1009 0xa6, 0xd0, 0xee, 0xcf, 0x71, 0xec, 0xba, 0x9f, 0xf8, 0xea, 0x76, 0x45,
1010 0x3a, 0x71, 0x38, 0x01, 0x77, 0x49, 0x64, 0x2b, 0x9e, 0x4c, 0x84, 0x67,
1011 0x16, 0xcb, 0x29, 0x2c, 0xe7, 0xcf, 0x4c, 0x97, 0xe5, 0xc7, 0x56, 0xd4,
1012 0x9b, 0x97, 0xa5, 0x3c, 0x79, 0x0c, 0x7b, 0x52, 0x52, 0x37, 0x62, 0xd7,
1013 0x75, 0xb2, 0x8f, 0xbe, 0x44, 0x7d, 0xdb, 0x0d, 0x8a, 0x1e, 0x7e, 0x98,
1014 0xf3, 0xd7, 0x83, 0xc6, 0xe8, 0x1b, 0xd0, 0xb5, 0x4e, 0xe4, 0x65, 0x59,
1015 0x90, 0xc9, 0xcb, 0x31, 0x3f, 0x03, 0xe5, 0xf6, 0x14, 0xac, 0x39, 0x06,
1016 0x3c, 0x3e, 0xc3, 0xf0, 0xbf, 0xe3, 0xa8, 0xc5, 0x01, 0xce, 0x4f, 0x1f,
1017 0x7d, 0x45, 0xf0, 0xec, 0xee, 0xbd, 0x7e, 0x78, 0x0c, 0x0b, 0x47, 0x42,
1018 0xb5, 0x78, 0x96, 0x58, 0x5b, 0x45, 0xdf, 0x7c, 0x5e, 0x43, 0x74, 0x4e,
1019 0x24, 0xac, 0xdc, 0x92, 0x1d, 0x2d, 0xcc, 0xc1, 0x8b, 0x35, 0x05, 0x19,
1020 0xdf, 0x77, 0xbd, 0x5a, 0xf9, 0xe0, 0xeb, 0x50, 0x3a, 0x52, 0x7a, 0x30,
1021 0x0e, 0x0b, 0xd5, 0x8b, 0x75, 0xff, 0x94, 0xf2, 0x96, 0x8a, 0x2a, 0x62,
1022 0x75, 0xf6, 0xfd, 0xe5, 0x1a, 0xb5, 0x31, 0xc6, 0x65, 0x07, 0x43, 0x5f,
1023 0x54, 0xd3, 0x4d, 0x36, 0x13, 0x74, 0xd9, 0xd7, 0x1c, 0x48, 0x3b, 0xa3,
1024 0x3e, 0x07, 0x7e, 0x6f, 0x45, 0xd7, 0xc9, 0xb5, 0x72, 0xc4, 0xda, 0x1b,
1025 0x7d, 0x4e, 0x34, 0x86, 0xb7, 0xd3, 0x07, 0xa7, 0xd6, 0xb5, 0xf0, 0xbf,
1026 0x80, 0x79, 0x1a, 0xf5, 0xfe, 0xed, 0x90, 0xdf, 0xef, 0xd0, 0x6e, 0x5a,
1027 0xa4, 0x2e, 0xcb, 0x88, 0x1d, 0xea, 0x9a, 0xf8, 0x78, 0x9f, 0x69, 0x59,
1028 0x87, 0xcd, 0x13, 0x4a, 0x4b, 0xea, 0x5d, 0x2b, 0xea, 0x8c, 0x47, 0x4b,
1029 0x23, 0x01, 0x73, 0x27, 0xc1, 0xd8, 0x11, 0x89, 0x2b, 0xd1, 0x6c, 0x9f,
1030 0x72, 0x7d, 0xb6, 0x5f, 0x59, 0x91, 0x95, 0xf2, 0x27, 0x94, 0xe5, 0x59,
1031 0x29, 0x5f, 0x2c, 0x1b, 0x66, 0x59, 0xe0, 0x48, 0x22, 0x10, 0x2c, 0x96,
1032 0x5f, 0xc1, 0xb2, 0xd7, 0x5f, 0x2a, 0x1b, 0xa6, 0xad, 0x9a, 0x9c, 0x97,
1033 0x0a, 0x6c, 0xd6, 0xf4, 0x68, 0x9c, 0x3a, 0x2f, 0x8d, 0xf8, 0x6e, 0x7d,
1034 0xdd, 0xc8, 0x05, 0x1d, 0x9c, 0x83, 0xa3, 0x1c, 0x59, 0x2b, 0x71, 0x6e,
1035 0x83, 0xe1, 0x42, 0xbf, 0x56, 0x8d, 0x0d, 0xe6, 0x6f, 0xad, 0xcd, 0xeb,
1036 0xe4, 0xbf, 0xbc, 0x6c, 0xb0, 0xcb, 0xd7, 0xb1, 0xbc, 0x6e, 0x1e, 0x2d,
1037 0x60, 0xeb, 0xa9, 0x04, 0x06, 0x1d, 0x11, 0x62, 0x7e, 0x73, 0xc0, 0xdf,
1038 0x03, 0x99, 0x1b, 0x3f, 0xae, 0xa7, 0x2c, 0x69, 0xe7, 0x74, 0xfc, 0x45,
1039 0xfc, 0x72, 0x19, 0xb9, 0x26, 0xe5, 0xa6, 0x68, 0xdf, 0x82, 0x75, 0x96,
1040 0x35, 0x64, 0x8a, 0x9d, 0xfb, 0x68, 0xe7, 0x33, 0xe1, 0xaf, 0xd5, 0xe3,
1041 0x69, 0x56, 0x38, 0x9c, 0x98, 0x81, 0xb4, 0xa6, 0x12, 0x73, 0xef, 0xf2,
1042 0xa0, 0x2a, 0xaa, 0x94, 0x90, 0xdb, 0x60, 0x42, 0xc6, 0x59, 0x89, 0xa8,
1043 0x53, 0x0f, 0xca, 0xdc, 0x95, 0x30, 0xe6, 0x35, 0xa8, 0xac, 0x77, 0xc9,
1044 0x97, 0x65, 0xcc, 0x7e, 0xfa, 0x72, 0xdc, 0xd6, 0x51, 0xeb, 0xa5, 0x71,
1045 0x4b, 0x7b, 0x45, 0x1d, 0xfd, 0x67, 0xea, 0x59, 0xd6, 0x8e, 0x4b, 0xba,
1046 0x2d, 0x89, 0x96, 0x51, 0xb7, 0xc7, 0x12, 0x81, 0xf0, 0xd3, 0x88, 0x2b,
1047 0x6d, 0x59, 0x27, 0xc6, 0x12, 0x52, 0xaf, 0x8f, 0xe5, 0xfb, 0x95, 0x95,
1048 0x97, 0xea, 0x4c, 0x15, 0xfc, 0x56, 0xc6, 0x23, 0xe3, 0xbb, 0x0e, 0x1b,
1049 0xf6, 0xea, 0xf1, 0x38, 0xc4, 0xae, 0xa2, 0x58, 0x6f, 0xea, 0x7e, 0xda,
1050 0x1f, 0xed, 0x06, 0xa8, 0x49, 0xc6, 0xdc, 0x79, 0x0c, 0x00, 0xee, 0xd8,
1051 0xdb, 0xce, 0xb1, 0x5a, 0x78, 0xcd, 0xac, 0xc5, 0x18, 0xbd, 0xb4, 0x3a,
1052 0x29, 0xd7, 0xa7, 0xcb, 0x18, 0x51, 0xd6, 0x1f, 0xf5, 0x97, 0xa1, 0x5c,
1053 0xe4, 0xfc, 0x1b, 0x35, 0x6f, 0xbf, 0x1f, 0x54, 0xff, 0x17, 0xd6, 0x98,
1054 0x37, 0x7f, 0xad, 0x3a, 0x29, 0x9c, 0xaf, 0x1d, 0x5a, 0xd2, 0xc3, 0x78,
1055 0x17, 0xb7, 0x2a, 0x0c, 0xbd, 0xfd, 0x82, 0xd2, 0x8d, 0x1b, 0x43, 0x7a,
1056 0xec, 0x87, 0x8a, 0x1e, 0x1d, 0x50, 0x0c, 0xfa, 0x61, 0x10, 0xab, 0xb2,
1057 0xef, 0xef, 0xeb, 0xfb, 0x50, 0x0f, 0x4b, 0x3f, 0xd2, 0xdf, 0x59, 0xf4,
1058 0xdb, 0x63, 0x2a, 0x8e, 0x47, 0xc6, 0xa6, 0x60, 0xb3, 0x3d, 0xa6, 0x15,
1059 0xb6, 0x7f, 0x7c, 0xd7, 0x74, 0x61, 0xe3, 0xde, 0x53, 0x0b, 0xc5, 0x40,
1060 0x36, 0x1d, 0x8d, 0xa2, 0xb7, 0xd9, 0x85, 0x0d, 0xa3, 0x37, 0xa9, 0x22,
1061 0x1b, 0xd4, 0xf9, 0x65, 0xf9, 0x6f, 0x85, 0xbc, 0xc5, 0x83, 0xf5, 0x59,
1062 0xce, 0x1d, 0x31, 0x74, 0xfd, 0x51, 0x99, 0xdb, 0x5a, 0x7e, 0xcb, 0xdc,
1063 0x7a, 0xf9, 0x2d, 0xf3, 0x3c, 0x8b, 0xdf, 0xd5, 0xf0, 0xcf, 0x12, 0x59,
1064 0x9a, 0x91, 0xd8, 0x0f, 0x77, 0x45, 0xa4, 0x0b, 0x77, 0x0d, 0x58, 0x56,
1065 0x7f, 0xc0, 0xb2, 0xca, 0x42, 0xe4, 0x59, 0x81, 0xc6, 0xf0, 0x95, 0x4a,
1066 0x09, 0xa6, 0xb4, 0x66, 0xf4, 0x1f, 0x2d, 0x89, 0x55, 0x47, 0x66, 0xd1,
1067 0xf7, 0x35, 0xfc, 0x6c, 0x49, 0x3b, 0x26, 0xc6, 0xa7, 0x8f, 0x21, 0x6f,
1068 0x67, 0xdf, 0x5e, 0x50, 0xb4, 0x33, 0x91, 0x5f, 0x64, 0xd7, 0xfb, 0xd3,
1069 0xf4, 0xcb, 0xb8, 0x86, 0x18, 0xfd, 0x83, 0x32, 0xd5, 0xa2, 0xe7, 0x12,
1070 0xa7, 0xfe, 0xa0, 0xfa, 0x17, 0x1b, 0x3b, 0x13, 0xef, 0x5a, 0x0c, 0xa7,
1071 0xfc, 0xe4, 0x1a, 0xef, 0xcd, 0xbc, 0xd7, 0x6e, 0xca, 0x6c, 0xbb, 0x91,
1072 0xb2, 0x17, 0x1b, 0xef, 0xcc, 0xac, 0xb0, 0xc7, 0x9c, 0x66, 0xe1, 0x4d,
1073 0x7b, 0x45, 0xa7, 0xa2, 0x03, 0x0b, 0xc7, 0xcd, 0xeb, 0x88, 0x15, 0xaf,
1074 0x5b, 0x8e, 0x59, 0xd2, 0x46, 0x97, 0xd2, 0x4a, 0x7b, 0x8a, 0x3b, 0x4b,
1075 0x41, 0x4e, 0xad, 0x95, 0x44, 0xa2, 0xca, 0x5a, 0x5b, 0xff, 0xad, 0xca,
1076 0xca, 0xd1, 0xe9, 0x6d, 0x77, 0xd1, 0x77, 0x1f, 0x57, 0xf3, 0xf3, 0x7d,
1077 0xde, 0x1e, 0x43, 0x5e, 0x7e, 0x3f, 0xda, 0x53, 0xd2, 0x8e, 0xe8, 0x35,
1078 0xef, 0x6f, 0xed, 0x12, 0x23, 0x2e, 0xc9, 0x9c, 0xe7, 0x1e, 0x97, 0x31,
1079 0x61, 0xc9, 0x7b, 0xf0, 0xe3, 0x7a, 0xe2, 0x47, 0xf4, 0x3f, 0xc4, 0x8f,
1080 0xa5, 0x7f, 0xa2, 0xec, 0x59, 0xca, 0x21, 0x3c, 0x45, 0xe2, 0x9e, 0xf0,
1081 0x16, 0xe1, 0x2b, 0x41, 0xca, 0x25, 0xfc, 0xa5, 0x68, 0x1b, 0x96, 0xf5,
1082 0x4d, 0x73, 0x01, 0x62, 0xb5, 0xfa, 0x20, 0x50, 0x87, 0x41, 0xca, 0xea,
1083 0x48, 0x22, 0xce, 0x71, 0x52, 0xd7, 0xea, 0x75, 0x0e, 0xa8, 0x4d, 0x0e,
1084 0x74, 0xe3, 0x55, 0xd3, 0xe8, 0xdf, 0x8c, 0xbf, 0x44, 0x8f, 0xd7, 0xc2,
1085 0x61, 0x33, 0x48, 0x5c, 0x2a, 0x47, 0x67, 0x13, 0x27, 0x62, 0xad, 0x17,
1086 0x43, 0xa9, 0x78, 0x07, 0x61, 0x83, 0x31, 0xec, 0xd9, 0x4f, 0x26, 0x02,
1087 0x7a, 0xfb, 0x56, 0xa6, 0x40, 0xab, 0x06, 0xdc, 0xf0, 0x4b, 0x2a, 0xc4,
1088 0x98, 0xf1, 0x75, 0xc6, 0xf9, 0x4d, 0xe6, 0x15, 0xd4, 0x6d, 0x1f, 0x6d,
1089 0x48, 0xa5, 0xbd, 0x48, 0x3f, 0x41, 0xf2, 0x19, 0xa9, 0xcb, 0xb8, 0xd0,
1090 0xa0, 0xe0, 0x86, 0x06, 0xda, 0x27, 0x79, 0xd1, 0xe7, 0x43, 0x4e, 0xfb,
1091 0xff, 0x44, 0xb6, 0x31, 0x7a, 0xb3, 0xfa, 0x23, 0x0b, 0x33, 0xed, 0x36,
1092 0xb4, 0xa8, 0x4a, 0xb9, 0xff, 0x28, 0x27, 0x30, 0x21, 0x5c, 0xad, 0xd2,
1093 0xf8, 0x0d, 0xc6, 0xbd, 0x52, 0xa7, 0x0a, 0x15, 0xc3, 0xf1, 0x59, 0xe5,
1094 0xb4, 0xe1, 0xd2, 0x88, 0x8e, 0xbb, 0x46, 0x2b, 0xe1, 0x18, 0xd6, 0x2f,
1095 0xae, 0x74, 0x20, 0x56, 0x22, 0xfc, 0x70, 0xb4, 0x16, 0x35, 0xfb, 0xac,
1096 0x6e, 0x77, 0xc4, 0xb2, 0x3c, 0x4b, 0x22, 0xb8, 0xf7, 0xa8, 0x06, 0x75,
1097 0x9f, 0x0b, 0x15, 0xcc, 0x43, 0xd6, 0x99, 0x7d, 0xb8, 0x8f, 0xfc, 0x6e,
1098 0x4e, 0x32, 0x88, 0xd5, 0xc4, 0xa2, 0x8b, 0xa9, 0xb6, 0xd6, 0x17, 0x12,
1099 0x0d, 0xdb, 0xe6, 0x38, 0x84, 0xfb, 0xaf, 0xc1, 0xe6, 0xec, 0x1a, 0xdc,
1100 0xc9, 0xd8, 0xf9, 0x9c, 0x81, 0xee, 0x39, 0xf4, 0xd7, 0x3b, 0xc9, 0xff,
1101 0x36, 0xa6, 0xd6, 0x61, 0x63, 0x76, 0x1b, 0xff, 0xeb, 0xc0, 0xdd, 0x3c,
1102 0x36, 0xa5, 0xc4, 0xbf, 0x3f, 0x8d, 0x4d, 0xd9, 0x7a, 0xc4, 0x46, 0x37,
1103 0x62, 0x2b, 0x39, 0xc1, 0x5d, 0xa3, 0x5e, 0xea, 0xb6, 0x0d, 0x1b, 0xb2,
1104 0x6d, 0xb8, 0x97, 0x63, 0xb9, 0x97, 0xf3, 0xa1, 0x26, 0xb7, 0xd2, 0xc7,
1105 0x3c, 0xf0, 0x0e, 0x2f, 0xc5, 0x7d, 0xa3, 0xd7, 0x61, 0x0b, 0xe3, 0xe4,
1106 0xed, 0x4b, 0xae, 0x43, 0xf7, 0xe8, 0x7d, 0xe8, 0x4a, 0x19, 0x5d, 0x73,
1107 0x98, 0x6a, 0xbd, 0xb5, 0xe4, 0x3e, 0xdc, 0x43, 0x39, 0xb6, 0xed, 0xb5,
1108 0x50, 0xb6, 0x68, 0xb1, 0x6a, 0xd4, 0xc4, 0x2d, 0x9f, 0x21, 0xb1, 0xf9,
1109 0xc0, 0xad, 0x7d, 0xc6, 0xee, 0x02, 0xb6, 0x38, 0x51, 0x62, 0x28, 0x62,
1110 0xa3, 0xf9, 0xeb, 0x89, 0xbf, 0xc1, 0xe6, 0x51, 0x17, 0xee, 0x18, 0xed,
1111 0x52, 0x56, 0x8b, 0xad, 0xb8, 0x54, 0xce, 0x67, 0x94, 0xd8, 0xd7, 0xaa,
1112 0xb4, 0x8c, 0xda, 0xf3, 0xac, 0x79, 0x23, 0x5d, 0xca, 0xba, 0xec, 0x9d,
1113 0x0e, 0x94, 0xcb, 0x5c, 0x5c, 0x83, 0xf1, 0xa6, 0xaf, 0x58, 0xe9, 0xfc,
1114 0x7c, 0xa6, 0xe9, 0x3e, 0x6e, 0x5f, 0xe4, 0x57, 0x9f, 0xf4, 0x2d, 0xd0,
1115 0xbb, 0x0e, 0xa8, 0xc2, 0x2b, 0xdd, 0xc8, 0xd9, 0xf3, 0x59, 0xc2, 0x7e,
1116 0x6a, 0x70, 0xc4, 0x9b, 0xe7, 0x12, 0xf3, 0xd8, 0x97, 0x95, 0x72, 0x71,
1117 0xac, 0x94, 0x9b, 0xe3, 0x99, 0x93, 0xf4, 0xe1, 0x7e, 0xea, 0xa7, 0x8b,
1118 0x73, 0xd4, 0x45, 0xbd, 0x7c, 0x2e, 0x75, 0x8a, 0x31, 0x62, 0x1b, 0x3e,
1119 0x57, 0xe8, 0xa7, 0x2f, 0x5b, 0x8a, 0x72, 0xa3, 0x0f, 0x8f, 0x68, 0x25,
1120 0xf4, 0x31, 0xe1, 0x19, 0x07, 0x6e, 0x3d, 0x6c, 0xac, 0xe3, 0x18, 0xbe,
1121 0xc4, 0x36, 0x44, 0xae, 0x46, 0xad, 0x06, 0xf9, 0xb2, 0x3d, 0xc4, 0xec,
1122 0x72, 0xe3, 0x37, 0xd6, 0x23, 0xde, 0x76, 0xbb, 0x6c, 0x15, 0xcb, 0x3e,
1123 0x3f, 0xe0, 0xc7, 0x8d, 0xb4, 0xef, 0xb2, 0x64, 0x94, 0x7a, 0x77, 0x93,
1124 0x53, 0xb5, 0x52, 0xe7, 0x9c, 0x63, 0xea, 0xf5, 0x0e, 0xda, 0xb3, 0x33,
1125 0xb9, 0x86, 0xf3, 0xa0, 0xa1, 0x32, 0xd9, 0xc7, 0x79, 0xf0, 0xc2, 0x9d,
1126 0x6c, 0x47, 0x27, 0xe5, 0x72, 0x25, 0xd7, 0x71, 0x2e, 0xea, 0xe0, 0x49,
1127 0x76, 0x70, 0x2e, 0x80, 0xbb, 0xa8, 0xcb, 0xfb, 0x42, 0xbf, 0x56, 0x7a,
1128 0x6b, 0x65, 0x18, 0x6d, 0x9c, 0xbf, 0x28, 0x36, 0xa7, 0xea, 0xc3, 0x3b,
1129 0x24, 0xee, 0x3b, 0x99, 0x90, 0x19, 0x3f, 0x26, 0x17, 0xa6, 0xf5, 0x1b,
1130 0x3d, 0xfc, 0x5d, 0x94, 0xb3, 0x88, 0xe3, 0x22, 0xa7, 0xc4, 0xd7, 0xa2,
1131 0x9c, 0x2e, 0x94, 0x19, 0xcf, 0x5a, 0x0f, 0x7b, 0xe1, 0x77, 0xb1, 0x6c,
1132 0x39, 0xcb, 0xae, 0xa6, 0x9c, 0xab, 0x29, 0xff, 0xbc, 0xe4, 0xa7, 0xd1,
1133 0x4d, 0x39, 0xe7, 0x0c, 0xbb, 0xc9, 0x51, 0x75, 0xdc, 0x4f, 0xdd, 0x1f,
1134 0x48, 0x95, 0xa1, 0x9a, 0xf3, 0xfc, 0x39, 0xfe, 0xde, 0x41, 0x3f, 0x7a,
1135 0x7e, 0xd0, 0xc2, 0x99, 0x90, 0x86, 0x41, 0xad, 0x0c, 0xbd, 0xc1, 0xad,
1136 0xe4, 0xe5, 0x32, 0x57, 0xcc, 0xa7, 0x8c, 0x0a, 0xc6, 0x75, 0xc4, 0x5d,
1137 0xcd, 0x3a, 0xb6, 0x07, 0xdd, 0x48, 0x7b, 0x11, 0x75, 0x19, 0x51, 0xda,
1138 0xb8, 0x0b, 0x03, 0x9a, 0x02, 0x17, 0xf1, 0xb0, 0x94, 0xfe, 0xb4, 0x93,
1139 0x71, 0xd7, 0x15, 0x91, 0xff, 0x68, 0x27, 0xe4, 0x60, 0xd5, 0x11, 0x23,
1140 0xfe, 0x82, 0x12, 0x68, 0x73, 0xa9, 0xf7, 0x51, 0x47, 0x15, 0x38, 0x33,
1141 0xf8, 0x25, 0x6c, 0x64, 0x5f, 0x7d, 0x29, 0x0f, 0x73, 0x93, 0xbf, 0x53,
1142 0x72, 0x36, 0x7e, 0x7a, 0x90, 0x1c, 0x79, 0xdc, 0x9a, 0x67, 0x88, 0xdd,
1143 0x44, 0x70, 0xcf, 0xd1, 0x2a, 0x0c, 0x0e, 0x5e, 0x87, 0x6d, 0x2c, 0xb7,
1144 0x2b, 0x55, 0x0d, 0x63, 0x68, 0x99, 0x5d, 0x67, 0x84, 0xfe, 0x35, 0x90,
1145 0xbc, 0x0f, 0x2b, 0x53, 0xf5, 0xc1, 0xa3, 0x4a, 0x8c, 0x3a, 0xf4, 0xa2,
1146 0x3f, 0xb9, 0xd1, 0xd6, 0x69, 0x62, 0x5f, 0x27, 0xb6, 0x1e, 0xbd, 0x02,
1147 0x7b, 0xf6, 0x6d, 0xc1, 0x5d, 0x47, 0x99, 0xbf, 0xda, 0xb6, 0xac, 0xa2,
1148 0x77, 0xdf, 0x75, 0xca, 0x06, 0xb6, 0xb7, 0x7b, 0x98, 0xf6, 0x4c, 0x9b,
1149 0xbe, 0x7f, 0xaf, 0x91, 0x5b, 0xe6, 0xd8, 0xa2, 0xf8, 0x6b, 0xaf, 0x43,
1150 0x97, 0x6d, 0x7b, 0x79, 0xbd, 0xed, 0xc8, 0xce, 0x67, 0x9e, 0xf3, 0xb7,
1151 0xd6, 0xa3, 0xde, 0x52, 0x7b, 0x7e, 0x55, 0xea, 0xad, 0x25, 0xc1, 0xdc,
1152 0xbf, 0x96, 0xb9, 0x57, 0xc1, 0x5e, 0x7a, 0xb3, 0x8b, 0xc9, 0x1b, 0xbd,
1153 0xc8, 0x68, 0x41, 0xea, 0xa3, 0x38, 0x0f, 0x0d, 0x05, 0x7b, 0x79, 0x8b,
1154 0x65, 0x6c, 0x5b, 0x7e, 0x9f, 0x2f, 0xc8, 0xfc, 0xb6, 0xa3, 0x86, 0xf1,
1155 0x75, 0x43, 0x68, 0x9d, 0x72, 0xaf, 0x76, 0x69, 0xce, 0x7c, 0xc5, 0x39,
1156 0x93, 0x3c, 0xd1, 0x6e, 0x2b, 0xf1, 0x25, 0xdb, 0x76, 0xaf, 0xcf, 0x36,
1157 0xa3, 0x73, 0x74, 0x7a, 0xfb, 0xc5, 0x3a, 0x65, 0x9c, 0x8b, 0xe2, 0x3c,
1158 0xeb, 0xfd, 0x82, 0x65, 0x81, 0x45, 0x45, 0x2c, 0xbb, 0xb3, 0xd0, 0xff,
1159 0x41, 0x8b, 0x31, 0xc9, 0xe9, 0x32, 0x1c, 0x18, 0x09, 0xfe, 0x57, 0x25,
1160 0x5e, 0xeb, 0xa4, 0xcc, 0x0a, 0xb1, 0xe4, 0xef, 0xac, 0x3d, 0xeb, 0x64,
1161 0x5e, 0x3e, 0x42, 0x43, 0x86, 0xe2, 0xba, 0xe4, 0xb3, 0x6b, 0xb0, 0x3e,
1162 0x25, 0xb2, 0xb6, 0x63, 0x43, 0xca, 0x96, 0xcb, 0x5f, 0x94, 0xab, 0x8f,
1163 0x36, 0xa3, 0x25, 0x77, 0xdb, 0x32, 0xb5, 0xd3, 0xae, 0xee, 0xd9, 0xab,
1164 0xe2, 0xe9, 0xd0, 0x26, 0xc5, 0x3f, 0x53, 0xe2, 0x70, 0x3d, 0xba, 0xf6,
1165 0xca, 0xb7, 0x9f, 0x7c, 0x37, 0xa6, 0x4c, 0xcd, 0x1c, 0x60, 0xb9, 0x65,
1166 0x58, 0xbf, 0xb7, 0x16, 0x73, 0x38, 0xd6, 0xdb, 0xcd, 0xff, 0xa2, 0xbc,
1167 0x33, 0x43, 0xc6, 0xb3, 0xa2, 0x10, 0xcb, 0xeb, 0x71, 0xdf, 0x5e, 0xf1,
1168 0x21, 0xf9, 0xdd, 0x82, 0xde, 0xa5, 0xf5, 0x85, 0x38, 0xff, 0x37, 0x9c,
1169 0x97, 0x2e, 0xe5, 0x06, 0xe2, 0x42, 0x8c, 0xb8, 0x40, 0x9b, 0x52, 0xda,
1170 0x89, 0x0b, 0xd7, 0x17, 0x70, 0xc1, 0x43, 0x5c, 0x58, 0x93, 0x7d, 0x9b,
1171 0xf2, 0x88, 0x2f, 0xbe, 0x57, 0x9e, 0xbb, 0x29, 0xcf, 0xb1, 0xd0, 0x1c,
1172 0xc0, 0x96, 0x67, 0x19, 0x79, 0x4c, 0x2d, 0xe7, 0xd0, 0x62, 0x7c, 0x50,
1173 0x94, 0x11, 0x5b, 0xcf, 0xcb, 0x28, 0xb3, 0xd8, 0x94, 0x45, 0xb9, 0x7f,
1174 0x8f, 0x06, 0x7b, 0x7d, 0xe0, 0xb2, 0x3c, 0xeb, 0xf7, 0xbe, 0xcb, 0x1c,
1175 0x41, 0x7e, 0x13, 0x2f, 0x9a, 0xeb, 0x89, 0x73, 0xcb, 0x88, 0x7b, 0x2e,
1176 0x8e, 0x4b, 0xb0, 0x4e, 0x64, 0x73, 0xd1, 0x2f, 0xa4, 0x6d, 0xd1, 0xc9,
1177 0x52, 0x47, 0x7e, 0x1e, 0x8a, 0xf3, 0xec, 0xa4, 0x1f, 0xbb, 0x51, 0x1d,
1178 0xd1, 0xa3, 0x37, 0x39, 0x64, 0xce, 0x88, 0xf2, 0x43, 0xed, 0x85, 0xbe,
1179 0xfe, 0xbb, 0xd2, 0x50, 0xd3, 0x4f, 0x39, 0x4f, 0x28, 0xb7, 0x70, 0x5c,
1180 0xfe, 0xd2, 0xaa, 0xa8, 0x27, 0x12, 0xe8, 0x48, 0xbc, 0x2f, 0x36, 0xde,
1181 0x90, 0xcd, 0xf3, 0x4b, 0x75, 0x28, 0x6e, 0x95, 0xd3, 0xf6, 0x9d, 0x46,
1182 0xe0, 0xe2, 0x6a, 0xf6, 0x30, 0xef, 0xa0, 0xf0, 0x19, 0x93, 0x6d, 0x15,
1183 0xfb, 0xaa, 0x23, 0x96, 0x84, 0x0a, 0x76, 0xb0, 0x46, 0x61, 0xde, 0xd0,
1184 0x16, 0xb5, 0xed, 0x61, 0x17, 0xf5, 0x75, 0x42, 0xf9, 0x98, 0x70, 0x66,
1185 0x9b, 0x63, 0xc4, 0x95, 0x55, 0xc4, 0x95, 0xea, 0xa4, 0x12, 0xf5, 0x46,
1186 0x1a, 0xb7, 0xd5, 0x20, 0xd0, 0xf6, 0x28, 0xfb, 0xac, 0x21, 0xcf, 0xbc,
1187 0x89, 0xb1, 0x36, 0xc9, 0x3e, 0x57, 0xb1, 0xcf, 0xb5, 0xd9, 0x2d, 0x6c,
1188 0x57, 0xb0, 0x55, 0xc5, 0x9c, 0x7d, 0x70, 0x7b, 0x69, 0x07, 0x23, 0x0d,
1189 0x4e, 0x84, 0x17, 0xff, 0x02, 0x98, 0x81, 0x98, 0xca, 0xfc, 0x7d, 0x5e,
1190 0x52, 0x72, 0xa9, 0x03, 0xb7, 0x2e, 0xcb, 0x08, 0x96, 0x6a, 0xf0, 0x0c,
1191 0x7b, 0x25, 0x1e, 0xa1, 0x2f, 0x54, 0xa7, 0xec, 0xb1, 0xf1, 0x56, 0x45,
1192 0xd9, 0x3e, 0x05, 0x57, 0x85, 0xbe, 0xae, 0xa4, 0x67, 0xe6, 0x31, 0x5f,
1193 0xa5, 0x3e, 0x7a, 0x26, 0x04, 0x1b, 0xd3, 0xc4, 0xc6, 0x63, 0x4a, 0x7e,
1194 0x3d, 0x86, 0x7e, 0x9f, 0x42, 0xbc, 0x2a, 0x22, 0x6b, 0x20, 0x81, 0xce,
1195 0x0f, 0x29, 0xf7, 0x11, 0x0b, 0x5d, 0x8c, 0x43, 0x1e, 0x62, 0xa3, 0xc4,
1196 0xe9, 0xf4, 0xad, 0x89, 0x81, 0x3a, 0xf4, 0xd3, 0xb7, 0x37, 0x1e, 0x3d,
1197 0x75, 0x8b, 0x07, 0xb5, 0xfc, 0xf6, 0xf2, 0x98, 0xc5, 0xc3, 0x4d, 0x5f,
1198 0x76, 0xc3, 0x31, 0x20, 0x7c, 0xaf, 0x89, 0xb1, 0xca, 0x83, 0xf2, 0x01,
1199 0x13, 0x5b, 0x28, 0x4f, 0xe9, 0x50, 0x33, 0xe3, 0x09, 0xfd, 0x3c, 0x55,
1200 0x83, 0xeb, 0x07, 0x97, 0x60, 0x93, 0x8d, 0x5f, 0xb5, 0x38, 0x3b, 0xb8,
1201 0xd4, 0xc6, 0x8d, 0x87, 0x52, 0x33, 0xf0, 0xce, 0xde, 0x6b, 0x6c, 0x8c,
1202 0x1b, 0x64, 0x6c, 0xf6, 0xed, 0x0b, 0xa3, 0x8b, 0x6d, 0x7a, 0xf7, 0x5d,
1203 0x8b, 0xfb, 0x8e, 0xfa, 0xa8, 0x23, 0x83, 0x71, 0x40, 0x7d, 0xd7, 0xff,
1204 0x49, 0xb1, 0xf3, 0xe9, 0xd8, 0x2f, 0x73, 0x2d, 0x75, 0x32, 0x34, 0x56,
1205 0xf9, 0xed, 0xb4, 0xb9, 0x70, 0x5e, 0x47, 0x79, 0x9d, 0x5c, 0x4d, 0x9d,
1206 0xdc, 0x94, 0xa5, 0x39, 0x0c, 0x3b, 0x39, 0xd7, 0xe4, 0x10, 0x35, 0xb5,
1207 0xf4, 0xcb, 0x12, 0x1e, 0xb4, 0xff, 0xd1, 0xbf, 0x60, 0x6c, 0xcf, 0x71,
1208 0x3e, 0xf9, 0xdb, 0x94, 0xf9, 0x94, 0xf8, 0xe9, 0x20, 0xe6, 0x2a, 0xd4,
1209 0xef, 0xff, 0x02, 0x66, 0xe7, 0x73, 0x9b, 0xa2, 0xae, 0x54, 0x8e, 0xbf,
1210 0x25, 0x91, 0xb3, 0x39, 0x3d, 0x33, 0x22, 0x5d, 0xe5, 0x7f, 0x1b, 0x8f,
1211 0x92, 0x73, 0x27, 0xc5, 0x67, 0xbd, 0xb4, 0xe7, 0x26, 0xea, 0x4b, 0x63,
1212 0xec, 0x30, 0x89, 0x73, 0xb3, 0xe0, 0xe2, 0x38, 0x36, 0x51, 0x3f, 0x1e,
1213 0x8e, 0x63, 0x2b, 0xcb, 0xdd, 0xc5, 0xff, 0xee, 0x3a, 0x5a, 0xcb, 0xc3,
1214 0xcb, 0x63, 0x16, 0x8f, 0x9f, 0x12, 0xb3, 0x9a, 0x69, 0xc7, 0x0e, 0x94,
1215 0x0c, 0xab, 0x78, 0xca, 0x54, 0x70, 0xa1, 0x89, 0xfd, 0x35, 0x5c, 0xc6,
1216 0x3a, 0x89, 0x65, 0xde, 0xe4, 0x97, 0x88, 0x73, 0x7e, 0xac, 0x23, 0x27,
1217 0xe8, 0xdc, 0xab, 0xc1, 0x15, 0xca, 0x30, 0x67, 0x12, 0x19, 0x4e, 0x14,
1218 0x38, 0xe6, 0x3c, 0xe6, 0x3a, 0x8d, 0x61, 0xda, 0x90, 0xb6, 0xd9, 0xb6,
1219 0xa1, 0x38, 0xe3, 0x73, 0x90, 0xb9, 0x7e, 0xde, 0x76, 0x5b, 0xde, 0x63,
1220 0x47, 0xf4, 0x31, 0x8e, 0x67, 0x4e, 0x44, 0xf7, 0xdf, 0x42, 0x5f, 0x10,
1221 0xce, 0x57, 0x9a, 0x04, 0x0e, 0x0c, 0xb6, 0xa3, 0x9a, 0x36, 0xe3, 0x5d,
1222 0x7c, 0x14, 0xa9, 0xda, 0x7e, 0xdb, 0x56, 0xf3, 0x6d, 0x97, 0x45, 0x2b,
1223 0x23, 0x8d, 0x31, 0x69, 0x7b, 0xbc, 0xd0, 0xf6, 0x0a, 0xb6, 0x9d, 0x60,
1224 0xdb, 0x2b, 0xff, 0x5d, 0xdb, 0xd3, 0xe3, 0x5d, 0x4f, 0x21, 0x2e, 0x4b,
1225 0xde, 0x5c, 0xc4, 0xed, 0x22, 0xc7, 0xf8, 0x8d, 0xf7, 0x32, 0x4e, 0xee,
1226 0x90, 0xb9, 0xf3, 0xe5, 0x7d, 0xf6, 0xbd, 0xd8, 0x7c, 0xb9, 0xad, 0x3d,
1227 0xc5, 0x18, 0x6f, 0xd6, 0x4c, 0x6b, 0x6b, 0x0e, 0xff, 0xff, 0x70, 0x4a,
1228 0xb8, 0x44, 0x3b, 0x2c, 0xca, 0xfa, 0xac, 0xa1, 0x77, 0x2d, 0x73, 0x18,
1229 0xdb, 0x2e, 0x32, 0xd7, 0xb9, 0xf1, 0x52, 0x5f, 0xb2, 0x36, 0xd2, 0x8e,
1230 0x85, 0x03, 0x7a, 0xe7, 0x2e, 0xf2, 0xd1, 0xc3, 0x21, 0x3d, 0xfa, 0x2d,
1231 0xe8, 0xf1, 0x52, 0xe5, 0x25, 0x94, 0x4c, 0x9c, 0xc5, 0x60, 0xf6, 0x47,
1232 0x92, 0x6f, 0xb2, 0x4d, 0xb7, 0xe2, 0x99, 0xe8, 0x43, 0x8c, 0xf5, 0xdc,
1233 0xac, 0xe7, 0x1e, 0x80, 0xbb, 0x92, 0xf5, 0xc6, 0x07, 0xe2, 0x96, 0x8b,
1234 0x5c, 0x50, 0x8d, 0xe8, 0x1d, 0x95, 0x8a, 0x11, 0xdb, 0xc4, 0xb6, 0xd7,
1235 0x30, 0x96, 0x95, 0x27, 0xbb, 0xc9, 0x03, 0x74, 0xdf, 0x97, 0x55, 0xbd,
1236 0x6b, 0x3d, 0x5e, 0xc2, 0xbf, 0x92, 0x3c, 0xce, 0x4b, 0x9e, 0x45, 0x8a,
1237 0xed, 0x59, 0xe3, 0x1a, 0xf9, 0xcc, 0xbb, 0x56, 0x78, 0x41, 0x85, 0x53,
1238 0xda, 0xbd, 0x38, 0xbe, 0xe0, 0xdd, 0xc4, 0x65, 0x3c, 0xd7, 0x5c, 0x46,
1239 0xe3, 0xfb, 0xf0, 0xa9, 0xa9, 0x75, 0x45, 0x62, 0xfd, 0x56, 0x57, 0x64,
1240 0xdb, 0xfd, 0xc7, 0x9b, 0xf3, 0x76, 0xeb, 0xcf, 0xb8, 0x71, 0xd6, 0x2b,
1241 0xbe, 0xc4, 0xfc, 0x67, 0x7f, 0x13, 0x76, 0xef, 0x67, 0x5e, 0xa9, 0x36,
1242 0x86, 0xcb, 0x95, 0x1a, 0xe6, 0x44, 0xc3, 0x36, 0x1f, 0x76, 0x1a, 0xbb,
1243 0xec, 0x9c, 0x59, 0xe2, 0x83, 0xd4, 0x99, 0x9f, 0x91, 0xf8, 0x27, 0xeb,
1244 0x39, 0x07, 0x6e, 0xdd, 0x90, 0xa0, 0xdf, 0x6a, 0xbd, 0x2c, 0xb3, 0xae,
1245 0xb0, 0x4e, 0x2f, 0x6b, 0x18, 0xbd, 0xd3, 0x38, 0xc9, 0xba, 0x69, 0xb1,
1246 0xaa, 0xd1, 0x5f, 0x73, 0x29, 0x8e, 0x74, 0x14, 0xca, 0x33, 0xd9, 0xb3,
1247 0x65, 0x73, 0x4f, 0xc3, 0xb3, 0x1d, 0xbc, 0x96, 0xf7, 0x85, 0xcb, 0xf1,
1248 0x6e, 0x67, 0x61, 0x6e, 0x0e, 0xb9, 0xf2, 0xb8, 0xff, 0x69, 0x77, 0x71,
1249 0xbd, 0x28, 0x5f, 0xe6, 0xda, 0x12, 0x94, 0xef, 0xb9, 0x14, 0x5b, 0xe2,
1250 0xc4, 0xf2, 0x6d, 0x7b, 0xf3, 0xeb, 0x93, 0x95, 0x4b, 0x05, 0xb7, 0xeb,
1251 0x71, 0xb7, 0xed, 0xf7, 0x5f, 0x75, 0xe5, 0xed, 0xc0, 0x59, 0x18, 0x97,
1252 0x49, 0x1b, 0xbc, 0x52, 0xd6, 0xfc, 0x0b, 0xf8, 0x39, 0x9b, 0xff, 0xf7,
1253 0x42, 0xe6, 0xc2, 0x45, 0xff, 0x7c, 0xdc, 0x74, 0x60, 0x6a, 0x46, 0x9e,
1254 0xaf, 0xab, 0xfb, 0x9a, 0xd0, 0x33, 0x46, 0xbc, 0xa1, 0x0f, 0xb5, 0x85,
1255 0xd6, 0x5a, 0xa8, 0x91, 0x75, 0x83, 0x5a, 0x54, 0xec, 0x13, 0xde, 0x4c,
1256 0x9e, 0x31, 0x76, 0xca, 0x1e, 0x4b, 0x6f, 0x26, 0xbf, 0x2e, 0xb2, 0x33,
1257 0xd5, 0xf7, 0xee, 0x1d, 0x9a, 0xe0, 0x85, 0xd8, 0x46, 0xdd, 0xad, 0x0b,
1258 0x03, 0x39, 0xbf, 0x03, 0xba, 0xb9, 0x4b, 0x56, 0x92, 0x12, 0xb7, 0x61,
1259 0x7b, 0xad, 0x82, 0x2e, 0xa3, 0x1a, 0x8e, 0xc5, 0xbf, 0xb5, 0xee, 0x58,
1260 0x27, 0xff, 0xbd, 0x5b, 0xc0, 0x97, 0x0f, 0xb2, 0x6f, 0x19, 0xb7, 0x70,
1261 0x3a, 0x37, 0x2a, 0xe8, 0x53, 0x37, 0x38, 0x84, 0x73, 0x2a, 0x8c, 0x9d,
1262 0xf6, 0x5c, 0xa0, 0x37, 0xad, 0x60, 0x77, 0x5a, 0x30, 0xd3, 0x49, 0x1c,
1263 0xf4, 0x61, 0x67, 0x5a, 0x70, 0xd0, 0x45, 0x1c, 0x9c, 0x83, 0xed, 0x69,
1264 0xc1, 0xc1, 0x12, 0xbc, 0x3c, 0x78, 0x05, 0x1e, 0xe2, 0xef, 0x07, 0x53,
1265 0xa5, 0x08, 0xef, 0xfd, 0x0b, 0x1c, 0x48, 0x0b, 0x7f, 0x72, 0x23, 0x35,
1266 0x5c, 0x87, 0x54, 0x3a, 0xcf, 0x25, 0xaa, 0x86, 0xff, 0x12, 0x49, 0xfe,
1267 0x1e, 0x20, 0xef, 0xcb, 0x0c, 0xcd, 0x45, 0x82, 0xbf, 0x65, 0xbd, 0xcd,
1268 0x43, 0xf9, 0x13, 0x81, 0x0a, 0x6c, 0x18, 0x92, 0x1c, 0xda, 0x77, 0xeb,
1269 0x5d, 0x81, 0x79, 0xec, 0xb3, 0x0e, 0xbb, 0xc9, 0xd9, 0xda, 0x86, 0xfc,
1270 0xe8, 0xe7, 0xef, 0x9d, 0xa9, 0x4a, 0xbc, 0x36, 0xa8, 0xdb, 0xfd, 0xf5,
1271 0xa4, 0x56, 0xac, 0x70, 0x19, 0x55, 0x58, 0x31, 0x38, 0x1f, 0x3b, 0xd2,
1272 0x82, 0xbd, 0xd5, 0xc4, 0xde, 0x7a, 0x3c, 0x98, 0x16, 0x7e, 0xa9, 0xc1,
1273 0xbb, 0xd7, 0xc0, 0x48, 0x5a, 0xd6, 0x84, 0x6b, 0x70, 0x61, 0x28, 0x80,
1274 0x41, 0xbb, 0x7f, 0x13, 0xc9, 0x54, 0x98, 0xf2, 0x79, 0x51, 0xb9, 0x2f,
1275 0xe7, 0xab, 0x82, 0x82, 0xc9, 0x40, 0x10, 0x03, 0x63, 0xb3, 0x50, 0xbe,
1276 0x4f, 0x37, 0xb7, 0x42, 0xbf, 0x78, 0x17, 0xae, 0xc4, 0xee, 0x31, 0x1f,
1277 0x4a, 0xf7, 0x55, 0xc3, 0x1d, 0x6a, 0xc2, 0xce, 0xb1, 0x0f, 0x61, 0xfb,
1278 0x58, 0x1d, 0xb1, 0x13, 0x78, 0x3a, 0x63, 0xa2, 0x9f, 0x18, 0x3c, 0x87,
1279 0x31, 0xe6, 0x95, 0xac, 0xcc, 0xa3, 0xcc, 0x8f, 0x02, 0x4f, 0xa0, 0x9a,
1280 0x31, 0x4a, 0x7e, 0xcb, 0xb5, 0xb0, 0x8d, 0xed, 0xf9, 0x75, 0x2a, 0x3d,
1281 0xbe, 0x13, 0xb6, 0xbe, 0x91, 0xcb, 0x88, 0xee, 0x65, 0x4d, 0x68, 0xba,
1282 0x3d, 0xed, 0xb4, 0xd7, 0xe8, 0x2f, 0xdb, 0xe5, 0x5f, 0x15, 0xec, 0xd2,
1283 0x5e, 0x53, 0xc3, 0x93, 0x97, 0xf2, 0x5c, 0xb4, 0x96, 0x20, 0x60, 0x3a,
1284 0x15, 0xf8, 0x99, 0xef, 0xfa, 0x9f, 0x7a, 0xdf, 0xda, 0xda, 0xe5, 0xf5,
1285 0x9f, 0xe9, 0x6b, 0xb0, 0x72, 0x6f, 0x49, 0x65, 0x3c, 0x2f, 0x41, 0x5c,
1286 0x93, 0x35, 0xaa, 0x46, 0x8d, 0x5a, 0x79, 0x5f, 0xde, 0x5d, 0x15, 0x2b,
1287 0x8b, 0x34, 0xc3, 0x3f, 0x5e, 0xe7, 0x7f, 0x2d, 0x21, 0x3a, 0xfd, 0xbd,
1288 0xe5, 0x36, 0x0c, 0xdf, 0x31, 0xd4, 0xf9, 0x7f, 0x92, 0x79, 0xbb, 0x04,
1289 0x55, 0x1e, 0x5c, 0x9f, 0xf8, 0xe0, 0x7a, 0x6a, 0x04, 0xca, 0xca, 0x66,
1290 0x1f, 0x79, 0x3f, 0x9c, 0xab, 0x17, 0x60, 0xda, 0x87, 0x7c, 0x24, 0x02,
1291 0xf5, 0x74, 0x73, 0x98, 0xb9, 0x7e, 0xfe, 0x7e, 0xce, 0xf2, 0xac, 0xee,
1292 0x8b, 0x2a, 0xf9, 0x7b, 0x36, 0x9d, 0xa1, 0x3f, 0xd0, 0xae, 0xbb, 0x85,
1293 0xb3, 0xb0, 0x2f, 0x60, 0x6b, 0xc2, 0xb2, 0x9e, 0xa4, 0x0e, 0xe4, 0x5e,
1294 0xe0, 0x9b, 0x99, 0xdf, 0x59, 0x93, 0x5e, 0x27, 0x5e, 0x37, 0xa6, 0xb7,
1295 0x47, 0xae, 0x17, 0x31, 0x19, 0xfb, 0xec, 0x13, 0x75, 0xdc, 0x68, 0xdc,
1296 0x76, 0x98, 0x79, 0xf2, 0xc2, 0x80, 0xee, 0x4f, 0xe2, 0xff, 0x5a, 0xc2,
1297 0x0b, 0xd3, 0x4a, 0x71, 0xdd, 0xee, 0xfd, 0x6b, 0x27, 0x55, 0x31, 0x17,
1298 0xc7, 0x77, 0x28, 0xa1, 0xf7, 0xc7, 0x99, 0xb7, 0x45, 0xbd, 0x88, 0x39,
1299 0x23, 0x75, 0xfe, 0x9d, 0x09, 0x7b, 0x9c, 0xe6, 0x79, 0xce, 0xdd, 0xe9,
1300 0xe6, 0x3a, 0x7f, 0x6f, 0x46, 0x6c, 0x50, 0xe1, 0x58, 0x9a, 0xf1, 0x70,
1301 0x46, 0xc5, 0x9d, 0x0f, 0x78, 0xb1, 0x69, 0xc0, 0x83, 0x6d, 0x03, 0x5f,
1302 0x82, 0x71, 0x95, 0x13, 0x77, 0x30, 0xf7, 0xdb, 0x3c, 0x50, 0x4a, 0x3d,
1303 0x6a, 0xd8, 0x32, 0xe0, 0x44, 0xd3, 0x55, 0x55, 0x88, 0xcf, 0x2c, 0xc5,
1304 0xf3, 0xf4, 0xdd, 0xab, 0x42, 0x15, 0x48, 0xdb, 0x9c, 0x43, 0xb0, 0x41,
1305 0x78, 0x9b, 0xe8, 0x8d, 0x71, 0xd0, 0x10, 0x0c, 0xf9, 0xa0, 0xf5, 0x99,
1306 0xdf, 0x58, 0xb9, 0x99, 0x7b, 0x6c, 0x3e, 0xe9, 0x88, 0x88, 0x6e, 0xa4,
1307 0xae, 0xac, 0x35, 0x79, 0x19, 0x23, 0xdf, 0xa3, 0x47, 0x65, 0x5e, 0x24,
1308 0x30, 0xb9, 0x4c, 0x71, 0x20, 0x1c, 0xa8, 0x8a, 0x55, 0x47, 0xc2, 0x58,
1309 0x99, 0xed, 0xf1, 0xf9, 0xec, 0x7b, 0x59, 0x11, 0x9c, 0x5f, 0x62, 0xe2,
1310 0x96, 0x2c, 0x9c, 0x2b, 0xa9, 0xfb, 0x56, 0xea, 0x75, 0x87, 0xf9, 0x07,
1311 0x2b, 0x9f, 0xd7, 0xb8, 0x89, 0x97, 0x96, 0xb5, 0x99, 0xfa, 0x65, 0x4e,
1312 0x81, 0x9f, 0x16, 0xf4, 0x2b, 0x3a, 0xad, 0x18, 0xff, 0x9d, 0x75, 0x9a,
1313 0xfa, 0x75, 0xb3, 0x3d, 0x37, 0xdb, 0x2b, 0x1b, 0x7f, 0xaf, 0x9e, 0x4b,
1314 0x29, 0xcf, 0x4a, 0x5b, 0x86, 0xd9, 0x72, 0x2f, 0xc0, 0x1f, 0x55, 0x8a,
1315 0x3c, 0xf4, 0x4f, 0x8d, 0xe9, 0x25, 0x7b, 0xbd, 0xed, 0xeb, 0x59, 0xcb,
1316 0x1a, 0x36, 0x45, 0xff, 0x7e, 0xea, 0x5f, 0xd6, 0x5d, 0x64, 0x0e, 0x9a,
1317 0x10, 0xad, 0xd5, 0xfb, 0x01, 0x49, 0x7c, 0x15, 0xcc, 0x60, 0xae, 0xf5,
1318 0x8d, 0x76, 0x0f, 0x5e, 0x4b, 0x54, 0xda, 0xe3, 0xbe, 0xaa, 0xc1, 0xb2,
1319 0xbe, 0x16, 0xf2, 0xe3, 0x4d, 0xa3, 0x31, 0xbc, 0x48, 0xd5, 0x19, 0x13,
1320 0x64, 0xed, 0x83, 0xba, 0x48, 0xcd, 0xe5, 0x7c, 0x89, 0xcf, 0x63, 0x1b,
1321 0xed, 0xc9, 0xef, 0x88, 0x00, 0xaf, 0x26, 0x8c, 0xe0, 0x0e, 0xf6, 0x3f,
1322 0xea, 0x8d, 0x60, 0x7b, 0x4a, 0x6d, 0x75, 0x92, 0x7c, 0x96, 0x31, 0xd7,
1323 0xdb, 0x85, 0x7f, 0xb5, 0xd2, 0x5e, 0x0b, 0x25, 0x21, 0x89, 0x25, 0xf3,
1324 0x70, 0x46, 0x73, 0xe0, 0x99, 0xe0, 0x2c, 0x44, 0x6b, 0x1c, 0xe4, 0x33,
1325 0xaf, 0x5b, 0xff, 0xec, 0x95, 0x7e, 0x64, 0x2c, 0x7f, 0xe0, 0x38, 0x14,
1326 0x1b, 0xef, 0x76, 0xa6, 0x22, 0xd4, 0xf7, 0xfb, 0xfb, 0xff, 0xbf, 0xd6,
1327 0x94, 0x57, 0xfa, 0xd7, 0x35, 0x3f, 0xf9, 0xf9, 0xe3, 0x1f, 0xb8, 0xce,
1328 0x12, 0xe4, 0x78, 0xbf, 0x67, 0x7d, 0xc7, 0x6e, 0xf3, 0x23, 0xa5, 0x79,
1329 0x5e, 0x2f, 0xed, 0x3d, 0xcd, 0xf1, 0x49, 0x9b, 0xc5, 0x7e, 0x44, 0x6f,
1330 0x93, 0xa5, 0x82, 0xd7, 0x3b, 0x53, 0xa2, 0x3f, 0xc9, 0x97, 0x4e, 0x5b,
1331 0x98, 0x25, 0xe7, 0x0f, 0xdb, 0x65, 0xe3, 0xd4, 0x57, 0x0f, 0x6d, 0x88,
1332 0xb1, 0x81, 0xf1, 0x42, 0xee, 0xb2, 0x6a, 0xc4, 0x5c, 0x0b, 0xdb, 0x19,
1333 0xb2, 0xd2, 0xde, 0x6a, 0xec, 0x34, 0x69, 0x77, 0x86, 0x3a, 0xdf, 0x09,
1334 0x0b, 0xa7, 0x4d, 0x39, 0x77, 0x61, 0xca, 0xeb, 0xc0, 0x2e, 0xd3, 0x89,
1335 0x4e, 0x43, 0xd5, 0xe5, 0xba, 0x23, 0x24, 0xe7, 0x2e, 0xf8, 0x67, 0x2a,
1336 0xd8, 0x13, 0x56, 0xb1, 0xc5, 0xe8, 0xf1, 0xcb, 0xf5, 0xe5, 0x21, 0x39,
1337 0x57, 0xb0, 0x91, 0x3a, 0x89, 0x33, 0x57, 0xde, 0xca, 0x76, 0x7b, 0x43,
1338 0xf9, 0x75, 0xf1, 0x18, 0x2c, 0x6b, 0x8f, 0xd9, 0xf2, 0xe1, 0x0a, 0x96,
1339 0x3b, 0x67, 0x4a, 0xec, 0x38, 0x70, 0xcb, 0xc2, 0x40, 0x3c, 0x5a, 0x02,
1340 0x3d, 0x56, 0x46, 0x3f, 0xdd, 0x39, 0x30, 0x8f, 0xf5, 0x04, 0xfb, 0x9d,
1341 0xbe, 0xdd, 0x90, 0xf5, 0xae, 0x80, 0xff, 0x27, 0xe4, 0xde, 0x69, 0xef,
1342 0x02, 0x6a, 0xd6, 0xf0, 0xbf, 0xc2, 0x79, 0xab, 0x36, 0x9c, 0xdb, 0x5e,
1343 0x80, 0xde, 0x59, 0xa6, 0x2c, 0x08, 0x56, 0xc1, 0x85, 0x38, 0xf9, 0xf9,
1344 0xd8, 0x38, 0xf3, 0xeb, 0x94, 0xa1, 0x1d, 0xb1, 0xd7, 0xcc, 0x3d, 0xd4,
1345 0x85, 0x87, 0xf1, 0x22, 0xa0, 0x4d, 0x2a, 0xc5, 0xf3, 0x79, 0x82, 0x0d,
1346 0x31, 0x47, 0x44, 0xf0, 0x2d, 0x6e, 0x3d, 0xd1, 0x4c, 0xd5, 0x19, 0x6e,
1347 0x7f, 0x2c, 0xe3, 0xe1, 0xa1, 0xf1, 0xf0, 0xfa, 0x37, 0x65, 0x7c, 0xfe,
1348 0x8d, 0x19, 0xf8, 0xd7, 0x67, 0x8a, 0x76, 0x59, 0xf4, 0x6d, 0xc1, 0x36,
1349 0xcb, 0x92, 0x7b, 0xc9, 0x8f, 0x67, 0xa5, 0xad, 0x7c, 0x1c, 0x2b, 0xa1,
1350 0xec, 0x4f, 0xd2, 0xd6, 0x5d, 0x8c, 0x55, 0xbb, 0x8c, 0x38, 0xa1, 0xd2,
1351 0xb2, 0x0c, 0xf2, 0x99, 0x12, 0xc5, 0x8f, 0x9d, 0x4d, 0xbf, 0xe5, 0x7c,
1352 0x02, 0x9b, 0x32, 0x01, 0x77, 0x7e, 0x3e, 0xc4, 0xcf, 0x04, 0x03, 0xfc,
1353 0x8c, 0xbf, 0x3e, 0x7f, 0x0f, 0xfb, 0xd9, 0x9e, 0x99, 0xee, 0x03, 0x0a,
1354 0x56, 0xb3, 0xad, 0x96, 0x10, 0x9c, 0x2b, 0x9a, 0xfe, 0xcd, 0xca, 0x79,
1355 0xa7, 0xdf, 0x37, 0x75, 0x33, 0xe6, 0xc2, 0xb9, 0xbe, 0x49, 0xce, 0x15,
1356 0xb4, 0x84, 0xe5, 0x5c, 0xc1, 0x7a, 0x43, 0xce, 0x89, 0xd9, 0x59, 0x39,
1357 0xb7, 0xac, 0xcb, 0xe7, 0xef, 0xc7, 0x22, 0x13, 0x77, 0xa5, 0x64, 0xed,
1358 0x4d, 0xb0, 0xc8, 0xed, 0xff, 0x4e, 0xa6, 0x09, 0x5b, 0x52, 0x72, 0x7f,
1359 0x8c, 0xb9, 0x86, 0xe1, 0xf1, 0x3f, 0x93, 0xb9, 0x16, 0x77, 0xee, 0x0f,
1360 0xa3, 0x73, 0x3f, 0x9a, 0xca, 0x38, 0x86, 0xd2, 0x50, 0xc0, 0x7f, 0x14,
1361 0x9a, 0xff, 0x0c, 0x75, 0x72, 0x8a, 0x72, 0x9e, 0x7e, 0x8f, 0x9c, 0xa2,
1362 0x43, 0xf8, 0xef, 0x4e, 0xb8, 0x91, 0x09, 0xbd, 0x63, 0xc5, 0xed, 0x5c,
1363 0xc8, 0xeb, 0xbf, 0x27, 0xe1, 0x47, 0xce, 0xce, 0xc9, 0xde, 0x28, 0x15,
1364 0xec, 0xee, 0x4b, 0xc5, 0xa3, 0x2a, 0x8a, 0xf3, 0xab, 0x87, 0x65, 0x6e,
1365 0x5f, 0x4d, 0xc8, 0x7f, 0xd1, 0x2f, 0xa9, 0x8c, 0x4b, 0x2a, 0x73, 0xf9,
1366 0x41, 0x59, 0xdf, 0x57, 0x4b, 0x45, 0x3f, 0x72, 0x8f, 0x22, 0x2e, 0x39,
1367 0x63, 0x13, 0xaf, 0x6b, 0x8b, 0x10, 0xab, 0xa1, 0x9e, 0xca, 0x0d, 0xaf,
1368 0xbf, 0x71, 0xc2, 0xe7, 0x37, 0x27, 0xe0, 0xbf, 0x72, 0x62, 0xba, 0x08,
1369 0xe4, 0x0a, 0xea, 0x07, 0x61, 0x81, 0xd7, 0xbf, 0x39, 0x31, 0x8f, 0x3c,
1370 0x33, 0x6e, 0x2d, 0x6f, 0x3e, 0x6f, 0xcd, 0x8b, 0x18, 0xb9, 0xd3, 0x94,
1371 0xe1, 0x9d, 0x6b, 0xf4, 0xf8, 0x1c, 0xc7, 0xa9, 0xfb, 0xb5, 0x69, 0x7d,
1372 0x5c, 0x08, 0xfd, 0xff, 0xed, 0xa3, 0x18, 0xe7, 0x68, 0x0f, 0xcd, 0x32,
1373 0x06, 0x89, 0x77, 0xcc, 0x85, 0x6a, 0x65, 0x2c, 0x81, 0x02, 0x6f, 0x2b,
1374 0x8e, 0x4b, 0xe1, 0x5c, 0xbb, 0xa9, 0x8b, 0x62, 0x0c, 0xb3, 0xac, 0x5e,
1375 0xc3, 0x57, 0x58, 0x03, 0xe7, 0x9c, 0x65, 0x4f, 0x7d, 0xd8, 0xc9, 0x9c,
1376 0xfd, 0x9c, 0xd9, 0xf2, 0x57, 0x4e, 0x44, 0x7d, 0xa5, 0x8c, 0xad, 0xb2,
1377 0xf6, 0x74, 0xa6, 0x69, 0xca, 0x9a, 0x64, 0x1e, 0xd4, 0x92, 0x95, 0xfb,
1378 0x4b, 0x0e, 0xda, 0xb7, 0x85, 0x87, 0x4d, 0xf9, 0x5f, 0x70, 0x26, 0x1e,
1379 0x73, 0xd0, 0x56, 0xdc, 0x86, 0xde, 0xf1, 0x65, 0xa5, 0x8a, 0xae, 0xec,
1380 0x0c, 0x4e, 0x42, 0x0f, 0x6f, 0x51, 0xe8, 0x87, 0x35, 0x0b, 0x4c, 0x99,
1381 0x82, 0x37, 0x12, 0x01, 0x33, 0x50, 0x88, 0x4b, 0xe7, 0x38, 0x77, 0x6f,
1382 0x25, 0x8c, 0xce, 0x27, 0x0b, 0xe7, 0x3f, 0xcb, 0x4c, 0x5f, 0x1f, 0x17,
1383 0x7b, 0x74, 0xbb, 0xb7, 0x27, 0x70, 0xc1, 0xd1, 0x8c, 0x0b, 0x87, 0xcc,
1384 0x12, 0x2c, 0x6f, 0x17, 0x3b, 0x75, 0xbb, 0x77, 0x26, 0x30, 0xe5, 0xe4,
1385 0xb5, 0x73, 0xe6, 0x5c, 0x62, 0x9a, 0xbd, 0x7e, 0x29, 0x31, 0x22, 0xa6,
1386 0x31, 0xbe, 0x96, 0x47, 0xbc, 0xee, 0xf2, 0x09, 0x68, 0x65, 0xe4, 0x40,
1387 0xee, 0x08, 0x5a, 0x1d, 0x49, 0xdd, 0xdf, 0xe6, 0x68, 0xc2, 0xaa, 0xac,
1388 0x9f, 0x3c, 0xfa, 0x05, 0xf2, 0x4e, 0xfb, 0x3e, 0x1f, 0x6d, 0xd2, 0xc9,
1389 0x0a, 0x43, 0xb3, 0xd4, 0x88, 0xe4, 0x76, 0x55, 0xb8, 0x4b, 0xdb, 0xfa,
1390 0x11, 0x35, 0x32, 0x88, 0x9b, 0x9a, 0xdd, 0xad, 0xd5, 0x13, 0x45, 0x9d,
1391 0x20, 0xe6, 0x89, 0x40, 0xab, 0x32, 0xa0, 0x56, 0x46, 0x44, 0x37, 0xfe,
1392 0xd6, 0xe4, 0xb8, 0xc8, 0xaa, 0xb9, 0x07, 0xc6, 0x7f, 0xe3, 0x46, 0x79,
1393 0x94, 0x58, 0xf5, 0x43, 0xdf, 0x7f, 0xae, 0xde, 0x33, 0x6e, 0xc1, 0x7b,
1394 0x97, 0x21, 0xdf, 0xb6, 0x6d, 0x31, 0x1f, 0x19, 0xfb, 0x8c, 0x3b, 0x60,
1395 0x59, 0x8c, 0x93, 0x3e, 0x28, 0x73, 0x39, 0x1e, 0xfa, 0x1a, 0xe3, 0xd2,
1396 0xc6, 0xcc, 0x1f, 0xac, 0x8f, 0x3a, 0x6d, 0x0e, 0x40, 0xde, 0xe4, 0xbf,
1397 0xed, 0x75, 0xe3, 0xf7, 0x96, 0xf0, 0x11, 0x27, 0x7d, 0xba, 0x84, 0x78,
1398 0xbe, 0xdb, 0x74, 0xb6, 0xad, 0x50, 0x14, 0xf4, 0x19, 0x0b, 0xb4, 0x32,
1399 0xc6, 0xa9, 0x5e, 0xfa, 0x75, 0xcc, 0x6b, 0x04, 0x0f, 0x81, 0xe5, 0x32,
1400 0x9b, 0x37, 0xbb, 0x22, 0xf7, 0x7c, 0x76, 0xac, 0x59, 0xb0, 0x60, 0xea,
1401 0xb6, 0x27, 0x8d, 0x0e, 0xf2, 0xaf, 0xaf, 0x90, 0xa7, 0xe5, 0xfb, 0xc9,
1402 0x61, 0xde, 0x07, 0xf4, 0xb3, 0x79, 0x73, 0x69, 0x44, 0x78, 0x58, 0xfa,
1403 0xb6, 0xc3, 0x46, 0x1b, 0x73, 0xb0, 0x7b, 0x3e, 0x7b, 0xae, 0xf9, 0x00,
1404 0xbf, 0xf3, 0x75, 0xd2, 0xa8, 0xfe, 0xc0, 0x3a, 0x15, 0x11, 0xe9, 0xc3,
1405 0xcf, 0x3e, 0xee, 0xf9, 0x6c, 0xe7, 0x92, 0x31, 0x6c, 0xcf, 0x6e, 0xfb,
1406 0x93, 0xfd, 0x54, 0x46, 0x64, 0x3d, 0x34, 0x76, 0xfb, 0xea, 0xc0, 0x3d,
1407 0x9f, 0xcd, 0x2c, 0x19, 0x64, 0x1f, 0x9f, 0x66, 0x7c, 0xc9, 0xd7, 0x89,
1408 0x2a, 0x8e, 0x0f, 0xd4, 0x41, 0x59, 0x64, 0xdb, 0xed, 0x0b, 0x03, 0xbf,
1409 0xb7, 0x16, 0x0c, 0x94, 0xd8, 0x3a, 0x70, 0x51, 0x07, 0x0f, 0x9a, 0xce,
1410 0x5c, 0xc0, 0x61, 0xeb, 0xa0, 0xcb, 0x47, 0x1d, 0x24, 0xa9, 0x83, 0xdc,
1411 0x4c, 0x23, 0xfc, 0x36, 0x75, 0xb0, 0x60, 0x7c, 0xf3, 0xe6, 0xb2, 0x08,
1412 0x9c, 0x0e, 0xe3, 0x47, 0x0e, 0xe6, 0x45, 0xaa, 0xcb, 0xd8, 0x4c, 0xbd,
1413 0xdd, 0xf3, 0xd9, 0xf9, 0x4b, 0x6c, 0x9d, 0xdf, 0xea, 0x0e, 0xdc, 0x47,
1414 0xbb, 0x69, 0xa5, 0xad, 0x6f, 0xe5, 0xd1, 0xce, 0xa3, 0x8f, 0x47, 0x02,
1415 0xbb, 0xb3, 0x1b, 0xa9, 0xab, 0x35, 0x1c, 0xc7, 0x3a, 0xca, 0xd5, 0xc5,
1416 0xdf, 0x31, 0xfe, 0x8e, 0xf3, 0xb7, 0xcc, 0x8f, 0x7a, 0x49, 0xb6, 0xd8,
1417 0x25, 0xd9, 0x1c, 0x94, 0xc7, 0x63, 0xaf, 0x55, 0x96, 0x47, 0x8e, 0xdf,
1418 0xba, 0x3a, 0xd0, 0xc9, 0x36, 0xfe, 0xbf, 0x32, 0xd9, 0x57, 0xe0, 0x32,
1419 0xe2, 0x3e, 0x27, 0x44, 0x3e, 0xbd, 0xa3, 0x13, 0x39, 0x62, 0xef, 0xef,
1420 0xf2, 0xd8, 0x4b, 0xd9, 0xaa, 0x38, 0x3f, 0xcf, 0x2d, 0x49, 0xcf, 0xf6,
1421 0x18, 0xf0, 0xb9, 0x8d, 0x7e, 0x0c, 0x64, 0x47, 0xa8, 0x03, 0xb1, 0x93,
1422 0x2f, 0x52, 0x7f, 0xdd, 0xac, 0x73, 0x8a, 0xb1, 0x4c, 0x8f, 0xd2, 0x67,
1423 0x69, 0xb3, 0x7a, 0x98, 0x07, 0xed, 0xe5, 0x51, 0xb6, 0x9b, 0xa6, 0x4c,
1424 0x25, 0xb4, 0x5f, 0x05, 0x72, 0x0f, 0xf7, 0x0c, 0xdb, 0x3f, 0x6c, 0xfc,
1425 0xba, 0xe2, 0x14, 0xc7, 0x1e, 0xf5, 0x6e, 0xc6, 0x68, 0x93, 0xe8, 0x2a,
1426 0x46, 0x5d, 0xe9, 0x3e, 0xff, 0x34, 0x5d, 0x5e, 0x96, 0xf7, 0x0a, 0xf2,
1427 0x09, 0xcb, 0xfa, 0x89, 0xd1, 0xb2, 0x90, 0x49, 0x21, 0xd2, 0x76, 0xae,
1428 0x64, 0x59, 0x25, 0xf6, 0xfe, 0xb3, 0xd8, 0xed, 0x1b, 0x0c, 0x91, 0xb7,
1429 0xb1, 0x7d, 0x3b, 0x8d, 0x73, 0x73, 0x86, 0xfe, 0x1c, 0xf8, 0x9d, 0x15,
1430 0x9d, 0x29, 0xf5, 0xe6, 0xe1, 0x15, 0xc6, 0xde, 0xa8, 0x16, 0xef, 0x74,
1431 0x0b, 0xbf, 0x37, 0x9c, 0xe1, 0x35, 0x88, 0x33, 0xa1, 0xd4, 0x83, 0x77,
1432 0x92, 0x7b, 0x9e, 0x33, 0xf2, 0x7e, 0x7c, 0x24, 0xa3, 0x47, 0x1f, 0xe6,
1433 0x39, 0x39, 0x30, 0xb9, 0x54, 0x31, 0x4e, 0x05, 0xc9, 0x7b, 0x3d, 0x70,
1434 0x32, 0x87, 0x6a, 0x75, 0xf4, 0x04, 0x5d, 0xa0, 0x2f, 0x96, 0xcb, 0xb8,
1435 0xe2, 0x1c, 0xa3, 0xe0, 0xb6, 0x5b, 0xdb, 0x68, 0x63, 0x79, 0x7c, 0xa1,
1436 0x0b, 0x1e, 0x6d, 0x53, 0xa6, 0x18, 0xe3, 0x3c, 0xda, 0xfa, 0x84, 0xe0,
1437 0x82, 0xdc, 0x77, 0x0d, 0x53, 0xcf, 0x82, 0x0f, 0xaf, 0xda, 0x7b, 0xd5,
1438 0x88, 0x11, 0x55, 0x4e, 0x23, 0xdf, 0xae, 0xc6, 0x76, 0xdb, 0x1d, 0x1a,
1439 0x2e, 0xfb, 0xb8, 0xae, 0xb5, 0x3b, 0x64, 0x1f, 0x1d, 0xd1, 0x2b, 0x53,
1440 0xa8, 0x97, 0xc7, 0xb9, 0x65, 0x2e, 0x1b, 0xe7, 0xd8, 0x06, 0xf3, 0x8e,
1441 0xe5, 0x89, 0xf7, 0xf7, 0x2f, 0xfd, 0x49, 0xbf, 0x3d, 0x35, 0x2a, 0x64,
1442 0x9f, 0x8f, 0xdc, 0x13, 0xeb, 0x64, 0xbe, 0x36, 0x7d, 0xaf, 0x8f, 0x7e,
1443 0x82, 0xed, 0x1f, 0x8f, 0x73, 0x3e, 0xe7, 0x1a, 0xb2, 0x0f, 0x48, 0xee,
1444 0xa1, 0x4d, 0xdf, 0xf7, 0x63, 0xdf, 0x9f, 0x2c, 0x17, 0x2e, 0x73, 0x98,
1445 0x38, 0x19, 0x6d, 0x97, 0xfa, 0x96, 0xf5, 0xe3, 0x05, 0x41, 0xe4, 0x66,
1446 0x38, 0x31, 0xd2, 0x00, 0x0c, 0x27, 0x45, 0xd7, 0xe9, 0xcf, 0x6c, 0x30,
1447 0xfe, 0xcd, 0x8a, 0xd6, 0x36, 0x6a, 0xbd, 0xaa, 0xac, 0x67, 0x8c, 0xdd,
1448 0xda, 0x67, 0xd4, 0x6b, 0x7d, 0x6a, 0xee, 0x18, 0xe3, 0xd0, 0x01, 0xe6,
1449 0xe8, 0xe5, 0x82, 0x15, 0x35, 0x46, 0xb4, 0xbf, 0x06, 0x0d, 0xf0, 0xdb,
1450 0xf7, 0x24, 0xf4, 0xf8, 0x37, 0x54, 0x23, 0xb8, 0x56, 0xf8, 0xa7, 0xfa,
1451 0x8e, 0x95, 0xa6, 0x0d, 0x7c, 0xa1, 0xe1, 0x67, 0x65, 0x79, 0x6c, 0x8f,
1452 0x76, 0xce, 0xe2, 0xbc, 0xbc, 0xb9, 0x48, 0xf7, 0x67, 0x14, 0xd1, 0x91,
1453 0x70, 0xae, 0x11, 0xec, 0x62, 0x3c, 0xfe, 0xb7, 0x86, 0x08, 0x8e, 0xf0,
1454 0xfb, 0xa7, 0xd7, 0xca, 0x1e, 0x37, 0xcb, 0x0a, 0x06, 0x16, 0x84, 0x6b,
1455 0x38, 0x86, 0x67, 0xf8, 0x7f, 0x7f, 0xf6, 0x75, 0xeb, 0xdc, 0x2c, 0x63,
1456 0x70, 0x25, 0x83, 0xe2, 0xf0, 0x84, 0xae, 0x4d, 0xa9, 0xff, 0xd9, 0x3d,
1457 0x37, 0xf6, 0x3a, 0xe3, 0x67, 0x9e, 0x0f, 0x34, 0x6a, 0x49, 0xb5, 0xae,
1458 0x5c, 0xf4, 0x3a, 0x3c, 0xf1, 0x52, 0x21, 0xce, 0xe7, 0xef, 0x75, 0x3e,
1459 0x7e, 0x49, 0x3f, 0x72, 0xdf, 0x76, 0x1e, 0x6d, 0x2e, 0x1a, 0xa7, 0xde,
1460 0xdd, 0x33, 0x38, 0xe6, 0x2f, 0x34, 0xdc, 0x69, 0x8f, 0xb3, 0xd6, 0x98,
1461 0xc3, 0x31, 0x2a, 0xd0, 0x1a, 0x9c, 0xe5, 0x79, 0xfe, 0xd8, 0x42, 0x96,
1462 0x96, 0xb6, 0x5a, 0xe9, 0x43, 0x25, 0xac, 0x73, 0xbd, 0x79, 0x70, 0x76,
1463 0x4f, 0x93, 0xee, 0xfb, 0x02, 0x6d, 0x35, 0xd4, 0xf0, 0x2b, 0x2b, 0xaa,
1464 0x39, 0xcd, 0xaf, 0x73, 0xd4, 0x77, 0x26, 0xa4, 0xac, 0xcc, 0xab, 0x11,
1465 0x6d, 0x50, 0xde, 0xb2, 0x30, 0x33, 0x10, 0x6e, 0xb0, 0xc7, 0x0f, 0xdc,
1466 0x91, 0x19, 0x61, 0xae, 0x2c, 0x6d, 0x2a, 0x58, 0x19, 0x78, 0xc3, 0xf2,
1467 0xcf, 0x1a, 0xc1, 0xce, 0xec, 0x1f, 0xe3, 0xb0, 0x5f, 0x21, 0x87, 0xd6,
1468 0x3b, 0xe2, 0x79, 0xbf, 0x6b, 0x03, 0xfb, 0x2d, 0x37, 0xec, 0x3c, 0xfc,
1469 0xb6, 0x44, 0x40, 0xd6, 0x8c, 0xc6, 0x3e, 0x33, 0x1e, 0x90, 0xbd, 0x19,
1470 0x5e, 0xe4, 0xda, 0xa5, 0x4c, 0xbd, 0x36, 0x8e, 0x1c, 0x19, 0xa6, 0xec,
1471 0x23, 0x39, 0x54, 0x9e, 0x5f, 0x47, 0x70, 0xc8, 0x3a, 0xb8, 0xf6, 0x2a,
1472 0x39, 0x61, 0x9b, 0x21, 0x6d, 0x28, 0x58, 0x18, 0x98, 0x81, 0xc6, 0xb5,
1473 0x3f, 0x7a, 0xb9, 0x24, 0x90, 0xf7, 0xdb, 0x3e, 0xc3, 0xd8, 0x76, 0x1a,
1474 0xbf, 0x26, 0x56, 0xc9, 0x3e, 0x93, 0xb4, 0xd4, 0x63, 0x5b, 0x0d, 0xc8,
1475 0x68, 0x4e, 0x8c, 0x1a, 0xb2, 0x0f, 0xd2, 0xb2, 0x56, 0x07, 0x5e, 0xa3,
1476 0xdf, 0x51, 0x9e, 0xac, 0xb3, 0x50, 0x57, 0xca, 0x14, 0xf6, 0x70, 0x28,
1477 0x2d, 0x9f, 0x15, 0x9d, 0x3c, 0x61, 0xc6, 0x99, 0x35, 0x48, 0x7c, 0x18,
1478 0xfb, 0xcc, 0xeb, 0x86, 0x70, 0x78, 0xdd, 0x5c, 0xa9, 0x54, 0x33, 0xde,
1479 0x3a, 0xfd, 0x63, 0xf6, 0x7a, 0x86, 0x9f, 0x58, 0x2e, 0x3c, 0x54, 0x72,
1480 0x43, 0x27, 0x9e, 0x34, 0x6a, 0xf0, 0x84, 0x96, 0xe7, 0x74, 0xc4, 0x44,
1481 0xbc, 0x90, 0x58, 0x90, 0xa3, 0x87, 0x90, 0x1b, 0x1b, 0x9d, 0x17, 0x95,
1482 0x5f, 0x33, 0x6f, 0x04, 0x9e, 0xcb, 0x74, 0xe1, 0x41, 0xb9, 0x8f, 0xa5,
1483 0xd4, 0xb7, 0x35, 0x3a, 0xa4, 0xbf, 0x2e, 0xec, 0xb2, 0xd7, 0x65, 0xc7,
1484 0x3e, 0x73, 0xd8, 0x78, 0xa4, 0x20, 0xab, 0x60, 0xfe, 0xd8, 0x67, 0x9e,
1485 0x34, 0x4e, 0xdb, 0x73, 0x27, 0x7b, 0x16, 0xfa, 0x4d, 0xc1, 0xc6, 0x72,
1486 0xa8, 0xcc, 0x2f, 0x1c, 0xc6, 0xa7, 0xe1, 0xa8, 0x19, 0xa3, 0xed, 0xc9,
1487 0x7a, 0xcf, 0xed, 0x70, 0xd6, 0xb8, 0xe8, 0x9b, 0x77, 0xc0, 0x55, 0x23,
1488 0x9c, 0xbe, 0xc8, 0xb7, 0xdb, 0xf8, 0xbf, 0xe8, 0x76, 0xca, 0xd6, 0xad,
1489 0x93, 0xd8, 0xd3, 0x27, 0xf9, 0x9f, 0x51, 0x4d, 0x1d, 0xe9, 0x1d, 0xb2,
1490 0xae, 0x5d, 0x49, 0x6c, 0x65, 0x1c, 0x75, 0x57, 0xb3, 0xcc, 0xdb, 0xd4,
1491 0xfb, 0x82, 0x81, 0x0a, 0x72, 0x7d, 0xcb, 0x7a, 0x87, 0x5c, 0x7f, 0x61,
1492 0xa0, 0x31, 0x67, 0x30, 0xfe, 0xe1, 0x66, 0xbd, 0x4d, 0xee, 0x11, 0x6f,
1493 0x30, 0x2e, 0x5a, 0xb1, 0x75, 0x52, 0x46, 0xf7, 0xc5, 0x94, 0x62, 0x1f,
1494 0x8b, 0xe0, 0x9f, 0x61, 0xc1, 0x15, 0xb1, 0x88, 0x5d, 0xba, 0x19, 0x45,
1495 0x8b, 0xec, 0xf5, 0x69, 0x97, 0xf1, 0xbb, 0xe4, 0x7e, 0x03, 0xa2, 0x93,
1496 0x2e, 0x18, 0xb9, 0x23, 0x32, 0x67, 0xb3, 0x2d, 0x04, 0x16, 0xff, 0x8e,
1497 0x39, 0x93, 0xcc, 0x4f, 0x7d, 0xae, 0x49, 0xc9, 0x05, 0x7d, 0xe4, 0xfe,
1498 0x8f, 0x40, 0x6f, 0x4f, 0x50, 0xd7, 0xad, 0x21, 0x1b, 0xf3, 0x7c, 0x09,
1499 0xd8, 0x7c, 0xdf, 0x7c, 0x05, 0x1f, 0x45, 0x25, 0x73, 0xdc, 0x86, 0xf1,
1500 0x35, 0xa8, 0xaa, 0x89, 0xfa, 0xca, 0xb1, 0x94, 0xe7, 0x5b, 0x99, 0xc7,
1501 0x7c, 0x12, 0x55, 0x6b, 0x63, 0x48, 0x70, 0xec, 0x95, 0xc6, 0xad, 0xbc,
1502 0xd6, 0x87, 0x64, 0xca, 0xc5, 0x71, 0xfc, 0xd0, 0xaa, 0x9a, 0x29, 0xb2,
1503 0x99, 0xde, 0x0a, 0x83, 0x79, 0xb7, 0xad, 0x0b, 0x62, 0x79, 0x4a, 0xb8,
1504 0x54, 0x63, 0x74, 0x0b, 0xfe, 0x40, 0xdb, 0xd5, 0x3b, 0x36, 0x2a, 0x71,
1505 0xda, 0x6c, 0x82, 0x3a, 0x97, 0xb2, 0x96, 0xb5, 0x2a, 0xf0, 0x5b, 0xea,
1506 0x38, 0xce, 0x73, 0xc3, 0xff, 0x1a, 0xd4, 0xa5, 0xa5, 0x38, 0x6b, 0xc5,
1507 0x35, 0x1f, 0xed, 0x52, 0x5d, 0x27, 0xbc, 0x6b, 0x45, 0x48, 0xad, 0x40,
1508 0xb9, 0x56, 0xb0, 0xd3, 0x74, 0x41, 0x97, 0x53, 0xb7, 0xf5, 0x19, 0x6f,
1509 0x94, 0xcb, 0x75, 0x87, 0x7d, 0xdd, 0x5f, 0xb8, 0x9e, 0xe6, 0xf5, 0xf3,
1510 0xbc, 0x3e, 0x48, 0xdd, 0xab, 0x57, 0x48, 0xfd, 0xcd, 0xa6, 0xd4, 0x27,
1511 0x1d, 0x31, 0x12, 0x85, 0xf9, 0x88, 0xdd, 0x9e, 0x2f, 0xbb, 0xed, 0xf6,
1512 0x7c, 0x1b, 0x4e, 0xb6, 0x11, 0x8f, 0x96, 0xc3, 0x44, 0x45, 0x40, 0x70,
1513 0x5e, 0xe4, 0xe2, 0xdc, 0x65, 0x45, 0xae, 0xad, 0x8c, 0x8b, 0x3d, 0x4f,
1514 0x97, 0x23, 0xde, 0x35, 0xc7, 0xb6, 0xc3, 0x34, 0x79, 0x8a, 0xee, 0x7f,
1515 0x5d, 0x69, 0xf1, 0xc9, 0xb2, 0x4e, 0x8a, 0x9c, 0xf7, 0x7e, 0xd3, 0x19,
1516 0x6e, 0x72, 0x2c, 0xc8, 0x95, 0xc2, 0x88, 0x5d, 0x54, 0x66, 0x57, 0x08,
1517 0x3e, 0x24, 0x32, 0x2d, 0xcc, 0xd0, 0xe2, 0x41, 0xe6, 0x56, 0xc1, 0x2c,
1518 0x75, 0xbb, 0x9e, 0x88, 0x7d, 0xc2, 0xde, 0xb3, 0xe4, 0x9c, 0x5c, 0x83,
1519 0x16, 0xdd, 0x81, 0x05, 0xe1, 0x39, 0xcc, 0xd0, 0x68, 0x97, 0x66, 0xa9,
1520 0x43, 0xf7, 0xdf, 0x84, 0xff, 0x62, 0xd7, 0x3b, 0x92, 0xc9, 0x75, 0x96,
1521 0x73, 0x4e, 0xbf, 0x4a, 0x39, 0x76, 0x07, 0x44, 0x8e, 0xb1, 0x82, 0x1c,
1522 0x31, 0xc6, 0x5c, 0x53, 0xbb, 0x21, 0x30, 0x78, 0x49, 0x6f, 0x4f, 0xdb,
1523 0x7a, 0xeb, 0xe3, 0x79, 0x29, 0x76, 0x90, 0x3f, 0x9e, 0x6a, 0xf2, 0x16,
1524 0xd6, 0xf6, 0x25, 0xa7, 0x13, 0xfc, 0x3d, 0xfb, 0xa9, 0x0d, 0x86, 0x1e,
1525 0x76, 0xd8, 0xfc, 0xdf, 0x8d, 0xb8, 0xcd, 0xad, 0x1d, 0x10, 0xee, 0xf8,
1526 0xb0, 0x5d, 0xce, 0x45, 0x9d, 0x54, 0xe0, 0x91, 0x82, 0xbf, 0x54, 0x30,
1527 0xbe, 0x7d, 0xd5, 0xfe, 0x9d, 0xe6, 0xdc, 0xba, 0xe8, 0xab, 0xc5, 0x18,
1528 0x25, 0xeb, 0x83, 0xfd, 0xb6, 0xef, 0xa7, 0xf1, 0x7d, 0xfb, 0x3b, 0x97,
1529 0xcf, 0xcb, 0xd0, 0x47, 0x9f, 0x70, 0xb0, 0x8d, 0x5e, 0x7b, 0x2f, 0xaa,
1530 0xac, 0x15, 0x5c, 0x8b, 0x1d, 0x1c, 0x95, 0xdb, 0xe8, 0x44, 0xbf, 0x26,
1531 0x36, 0xd1, 0x8d, 0xa4, 0x66, 0x7a, 0xb3, 0x4d, 0xd3, 0x73, 0x2a, 0x13,
1532 0x87, 0x9a, 0x7e, 0xcf, 0x58, 0x2e, 0xd7, 0xce, 0x5a, 0x87, 0x8d, 0x53,
1533 0x21, 0x7a, 0x70, 0x67, 0x89, 0xad, 0xdf, 0xa9, 0xdb, 0xec, 0x7d, 0x5b,
1534 0x94, 0xf9, 0xe9, 0x84, 0xc4, 0xd1, 0x79, 0xc8, 0x98, 0x22, 0x9b, 0xb3,
1535 0x7d, 0x0f, 0xe7, 0xa4, 0x2f, 0x15, 0x88, 0x5e, 0xc9, 0xff, 0x26, 0x19,
1536 0xcb, 0x7a, 0xa9, 0xcf, 0x58, 0xbb, 0xf0, 0xb8, 0xad, 0x38, 0x40, 0x1b,
1537 0x9b, 0x30, 0x2d, 0xeb, 0x08, 0x31, 0xa2, 0x7a, 0x81, 0x8a, 0xdc, 0xcc,
1538 0xad, 0x48, 0x31, 0x36, 0x1d, 0x31, 0x5a, 0x3e, 0x5a, 0x82, 0xb8, 0x9f,
1539 0x31, 0xdc, 0xb7, 0x93, 0xa3, 0xb9, 0x9f, 0xf3, 0x75, 0xca, 0x14, 0x7e,
1540 0xe9, 0xbc, 0xb8, 0x02, 0x46, 0x78, 0x99, 0xe3, 0x87, 0xd6, 0x94, 0xc8,
1541 0x9e, 0xea, 0xf9, 0x5f, 0x94, 0x61, 0x9b, 0x38, 0x6f, 0x35, 0xe7, 0xf8,
1542 0xed, 0x80, 0xde, 0xf6, 0x02, 0xfb, 0x69, 0x1c, 0x68, 0xe9, 0x14, 0x19,
1543 0x0e, 0x87, 0x9c, 0xb1, 0x23, 0x08, 0xb4, 0x6f, 0x55, 0x8a, 0x39, 0x04,
1544 0x70, 0xe5, 0xb8, 0x89, 0xa3, 0x4d, 0xcf, 0x90, 0xef, 0x48, 0xfd, 0x52,
1545 0x3c, 0x66, 0x3e, 0x65, 0xd5, 0xcf, 0x7e, 0xde, 0x3a, 0x66, 0xa8, 0x5b,
1546 0xa8, 0xed, 0x58, 0x25, 0x64, 0x4d, 0x33, 0x7d, 0xdb, 0x5d, 0x01, 0xdd,
1547 0xdc, 0xc3, 0xb6, 0xce, 0x24, 0x4e, 0x05, 0xdd, 0x6c, 0xeb, 0x11, 0x53,
1548 0x72, 0x08, 0x67, 0x5b, 0x1b, 0xe7, 0xb6, 0x27, 0x15, 0xf0, 0xc9, 0xba,
1549 0xad, 0xe4, 0x79, 0xb7, 0x27, 0x64, 0xcf, 0xf8, 0x18, 0xc7, 0x13, 0xdd,
1550 0xe6, 0x42, 0xcb, 0xfd, 0x55, 0xb4, 0x9f, 0x6a, 0x14, 0x6d, 0x5d, 0xf7,
1551 0x11, 0xef, 0x70, 0x17, 0xcb, 0xbc, 0x1c, 0x98, 0x87, 0xe7, 0x42, 0x2d,
1552 0x6b, 0xe7, 0xc1, 0x19, 0x3b, 0xa6, 0x04, 0xda, 0xb6, 0x2a, 0x71, 0x4d,
1553 0x6c, 0xf1, 0xce, 0x8c, 0x1e, 0x6c, 0x85, 0x60, 0x77, 0x8c, 0xfa, 0x98,
1554 0x87, 0x77, 0x16, 0x8b, 0x5c, 0xce, 0x70, 0xd0, 0x11, 0xe8, 0x7a, 0x8a,
1555 0xf3, 0x5b, 0xb5, 0x40, 0x64, 0x07, 0xb2, 0x19, 0x91, 0x3f, 0x86, 0x64,
1556 0xf6, 0xec, 0xdb, 0x87, 0x0d, 0x38, 0x4f, 0x34, 0x3d, 0x68, 0xc1, 0xde,
1557 0x63, 0xde, 0x22, 0xf3, 0xd0, 0x21, 0xf3, 0x50, 0x4e, 0x7f, 0x5a, 0x4d,
1558 0xb9, 0xb7, 0xd8, 0x72, 0xcf, 0xc3, 0xa8, 0x29, 0xeb, 0x64, 0x4e, 0xed,
1559 0x4e, 0x0c, 0x12, 0x3b, 0x03, 0x17, 0x7b, 0xd8, 0xcf, 0xcb, 0x94, 0x79,
1560 0x01, 0xf5, 0x3e, 0xd5, 0x2e, 0xfc, 0xb6, 0x0f, 0x03, 0xa9, 0xe2, 0x1e,
1561 0x74, 0x05, 0x92, 0x7a, 0x4f, 0x39, 0xfa, 0xc8, 0xf7, 0x7a, 0xac, 0xa9,
1562 0x99, 0x72, 0x3d, 0x8d, 0x1d, 0xa9, 0xa8, 0x46, 0x7f, 0xa0, 0xde, 0xa1,
1563 0xcf, 0x83, 0x3e, 0xf9, 0xaa, 0x23, 0x4a, 0x1f, 0x30, 0xbd, 0x17, 0x89,
1564 0x0d, 0x27, 0xd0, 0x65, 0xa1, 0xc6, 0xb6, 0x87, 0x9f, 0x8e, 0x19, 0x0e,
1565 0x59, 0x6b, 0x0f, 0xe6, 0xa8, 0x03, 0x95, 0x73, 0x22, 0x3a, 0xa8, 0xa4,
1566 0xcf, 0x8e, 0x07, 0x74, 0xff, 0x73, 0x94, 0x67, 0x0f, 0xe5, 0x59, 0x93,
1567 0x9f, 0x43, 0xdf, 0x0e, 0x45, 0x7c, 0x3a, 0xd0, 0xbe, 0x81, 0xd7, 0x77,
1568 0x53, 0x9e, 0xc0, 0x80, 0x82, 0x34, 0xd1, 0xac, 0x8f, 0x7c, 0xf6, 0xc0,
1569 0x34, 0x79, 0xdc, 0xf6, 0x9c, 0xc5, 0xc9, 0x05, 0x4a, 0x71, 0xd8, 0x14,
1570 0xfc, 0xd6, 0x30, 0x4a, 0x3b, 0x3d, 0xc4, 0x19, 0x89, 0x7a, 0x55, 0x94,
1571 0x1a, 0x82, 0x01, 0x33, 0x79, 0xcd, 0xc5, 0xb9, 0xa9, 0xc6, 0x31, 0x2d,
1572 0xcd, 0x38, 0x59, 0xe4, 0x76, 0x7f, 0xb0, 0x8e, 0x7a, 0x85, 0x9f, 0xc9,
1573 0x3a, 0x9a, 0xac, 0x35, 0x7d, 0xb9, 0x22, 0xbf, 0xbf, 0x52, 0xf6, 0x3f,
1574 0xe4, 0xaf, 0x3f, 0xad, 0x09, 0x47, 0x2e, 0x96, 0xff, 0xb9, 0xf5, 0x84,
1575 0x5d, 0x5e, 0xca, 0xb9, 0x6c, 0x2e, 0x5f, 0x6e, 0x97, 0xfb, 0xb9, 0xf5,
1576 0x8c, 0xe6, 0x9c, 0x56, 0xae, 0xb8, 0x07, 0xef, 0xd4, 0x97, 0x5c, 0xc4,
1577 0x3c, 0x47, 0xc3, 0x32, 0x3c, 0x61, 0x9c, 0xad, 0x5f, 0xdf, 0xd4, 0xcd,
1578 0x38, 0x56, 0xe4, 0x5a, 0x75, 0xf4, 0x2b, 0x0b, 0x43, 0xe6, 0xa9, 0xa1,
1579 0x12, 0xf4, 0x90, 0x3b, 0x0a, 0x17, 0x10, 0x8e, 0x2a, 0xeb, 0x7c, 0xb7,
1580 0x96, 0x5f, 0xce, 0x79, 0xf5, 0xa0, 0x5f, 0x6d, 0xb3, 0xb9, 0x61, 0x54,
1581 0x15, 0xdc, 0xad, 0xb3, 0xc7, 0x7e, 0x39, 0xfe, 0x4b, 0xac, 0x98, 0xbe,
1582 0x6e, 0xd7, 0x8d, 0x43, 0x46, 0x91, 0xb3, 0x9c, 0x7a, 0x50, 0x25, 0x4e,
1583 0x0e, 0x9b, 0xcb, 0x24, 0x36, 0xfb, 0x59, 0x3f, 0x18, 0x53, 0xa7, 0x73,
1584 0x9b, 0xbf, 0xa9, 0x40, 0x55, 0xcf, 0x2e, 0x07, 0x64, 0xff, 0xaf, 0xec,
1585 0xd9, 0x96, 0xbe, 0xca, 0x0a, 0xeb, 0x57, 0x1f, 0xc4, 0x35, 0x8a, 0x7d,
1586 0x09, 0xdf, 0xa8, 0x28, 0xca, 0x18, 0x8c, 0xda, 0x72, 0xfe, 0xd2, 0x5a,
1587 0xab, 0xe5, 0xe6, 0x68, 0x78, 0xaf, 0xec, 0xd1, 0x82, 0xec, 0xb1, 0x0f,
1588 0x5c, 0x7f, 0x93, 0x7e, 0xa6, 0xb7, 0x59, 0xdc, 0x7b, 0x2a, 0x6b, 0xb3,
1589 0xf2, 0x9f, 0x82, 0x1e, 0xe2, 0x50, 0x54, 0x6b, 0x61, 0x9c, 0xd7, 0x7d,
1590 0x9b, 0x38, 0x1f, 0x71, 0xaf, 0xec, 0x6b, 0x2d, 0xc6, 0xc8, 0x52, 0xe4,
1591 0xd7, 0x48, 0x81, 0x43, 0x85, 0x75, 0x51, 0xda, 0x3d, 0x7a, 0x32, 0xbf,
1592 0xb3, 0x72, 0x5e, 0x27, 0x63, 0xe1, 0xe5, 0xfd, 0xf7, 0x69, 0xea, 0x75,
1593 0x94, 0xff, 0xed, 0xb8, 0xb4, 0xee, 0x22, 0x6b, 0x4f, 0x12, 0x7b, 0x7f,
1594 0x6b, 0xad, 0x7f, 0x4f, 0xd9, 0xe9, 0x7b, 0x5f, 0x67, 0xc6, 0x64, 0x3f,
1595 0xda, 0xd1, 0xc2, 0xfa, 0x7c, 0xeb, 0xbf, 0xdf, 0x8f, 0x46, 0x5b, 0x42,
1596 0x74, 0x07, 0xb9, 0x5d, 0x1c, 0x7d, 0x38, 0x9a, 0x68, 0xd4, 0x76, 0x42,
1597 0x93, 0x75, 0x69, 0x7e, 0xfa, 0x70, 0x2c, 0x81, 0x68, 0xc9, 0x55, 0xd5,
1598 0xe4, 0x5b, 0x88, 0x3a, 0x64, 0x8f, 0x50, 0xa2, 0xb1, 0x6d, 0x37, 0xc7,
1599 0xe4, 0x5f, 0xdb, 0x87, 0xd1, 0x44, 0xcb, 0xad, 0x8c, 0x23, 0xfe, 0x8a,
1600 0x3c, 0xd7, 0xe9, 0x38, 0x4c, 0x1c, 0xd8, 0x5e, 0x58, 0x1b, 0x5b, 0x9f,
1601 0xf8, 0x15, 0xe5, 0xb7, 0x85, 0x64, 0xbd, 0x3f, 0x56, 0xee, 0x2c, 0x7a,
1602 0x53, 0x67, 0xb1, 0x79, 0x50, 0x11, 0xfb, 0xc2, 0xa6, 0xb4, 0xc8, 0x73,
1603 0x16, 0x1b, 0x07, 0xbf, 0x87, 0x43, 0x83, 0xb3, 0xd1, 0x6a, 0xeb, 0xa6,
1604 0x0b, 0x5b, 0xf7, 0x9e, 0xc4, 0x9e, 0x94, 0x85, 0xdd, 0x21, 0x0f, 0xb6,
1605 0x1c, 0x54, 0xb0, 0x2a, 0x70, 0x06, 0x3b, 0xf7, 0x5a, 0x98, 0x1f, 0xea,
1606 0x46, 0x9b, 0x59, 0x81, 0xd2, 0x9a, 0x05, 0x9d, 0x2a, 0xcb, 0xad, 0x1f,
1607 0xed, 0x52, 0x6e, 0xe4, 0xb8, 0x73, 0xae, 0xe3, 0xc4, 0x02, 0x15, 0x3e,
1608 0x03, 0x5a, 0x75, 0x24, 0xaa, 0xdc, 0x92, 0x6d, 0x55, 0x3a, 0x46, 0x6d,
1609 0x3e, 0xa5, 0xdc, 0x94, 0xf5, 0x55, 0x4a, 0x4c, 0x3f, 0x14, 0x3a, 0x8b,
1610 0x74, 0xba, 0xaa, 0x32, 0xef, 0x2f, 0x67, 0xc9, 0x1d, 0x24, 0xe7, 0x30,
1611 0x69, 0x53, 0x7f, 0xec, 0xb9, 0x02, 0xb1, 0xbb, 0x29, 0xfc, 0x64, 0xe4,
1612 0x15, 0xbc, 0x32, 0xf2, 0x2f, 0x58, 0xae, 0x49, 0x9e, 0x69, 0x75, 0x3b,
1613 0x23, 0x96, 0xb5, 0xbf, 0x39, 0x6e, 0xcd, 0x34, 0x2c, 0xb6, 0x57, 0x85,
1614 0x59, 0x91, 0xef, 0x62, 0xb7, 0xc6, 0xb6, 0x52, 0xc7, 0xed, 0x7b, 0xb7,
1615 0xbe, 0xc8, 0xa7, 0xe1, 0x4b, 0xe5, 0xcc, 0x5a, 0x44, 0x87, 0x6a, 0xa1,
1616 0x6f, 0xab, 0x71, 0x18, 0x5d, 0xff, 0x5b, 0x69, 0xc2, 0x4d, 0xd9, 0x57,
1617 0xf0, 0xe6, 0x48, 0x37, 0x31, 0x53, 0xef, 0xf8, 0x96, 0x62, 0x75, 0xef,
1618 0x0e, 0xe9, 0x6d, 0xff, 0x55, 0x89, 0xc6, 0xcb, 0x69, 0x53, 0x65, 0xcc,
1619 0x09, 0x6e, 0x1e, 0x91, 0x7c, 0xb9, 0x03, 0xee, 0x01, 0x3d, 0xb7, 0x82,
1620 0x3c, 0xfb, 0x0b, 0x8b, 0xe2, 0x73, 0x66, 0xd0, 0x2e, 0x1d, 0x8a, 0x1e,
1621 0x34, 0xd4, 0x6e, 0x3c, 0x6e, 0xea, 0x93, 0xbf, 0x75, 0x18, 0xe9, 0x6f,
1622 0xa2, 0x09, 0xeb, 0xb2, 0x7a, 0x7a, 0x29, 0xf3, 0xb0, 0x9d, 0x49, 0x13,
1623 0xa9, 0xa4, 0xde, 0xd1, 0xe5, 0xe8, 0xc7, 0xdd, 0x81, 0xfa, 0x6d, 0x6f,
1624 0x93, 0xcb, 0x79, 0x88, 0x29, 0xc9, 0x89, 0x0c, 0xf3, 0xdc, 0x7e, 0x6c,
1625 0x3d, 0x18, 0xc1, 0x96, 0xfd, 0x26, 0xfa, 0x92, 0x19, 0xca, 0xf6, 0x1a,
1626 0x6d, 0xdb, 0xb2, 0xda, 0x43, 0xf1, 0x1b, 0x54, 0x04, 0xa2, 0xec, 0xb3,
1627 0x45, 0x8d, 0x04, 0xfc, 0xaa, 0xc2, 0xe8, 0x3f, 0xe1, 0x44, 0x2f, 0xcb,
1628 0x0c, 0xa4, 0x68, 0x73, 0x49, 0x37, 0xe3, 0x65, 0x1d, 0x46, 0xc7, 0x7d,
1629 0x38, 0x32, 0xee, 0x41, 0x7a, 0x5c, 0xe3, 0x51, 0x8e, 0x87, 0x86, 0x2d,
1630 0x62, 0xb9, 0x17, 0x8f, 0x1d, 0x76, 0x63, 0xfb, 0x3e, 0x0f, 0xe6, 0x45,
1631 0x66, 0xe1, 0xf0, 0xe1, 0x72, 0x1c, 0xe0, 0xf5, 0x9a, 0xc5, 0x7e, 0x7c,
1632 0x8d, 0xd7, 0x07, 0xf7, 0xb9, 0x38, 0x0f, 0xf3, 0x71, 0x9c, 0x86, 0x9d,
1633 0x1e, 0xaf, 0x40, 0x6a, 0x98, 0x26, 0x4f, 0xce, 0xfa, 0x3a, 0x33, 0x8c,
1634 0xa3, 0x87, 0x19, 0x1b, 0x0f, 0x9a, 0x48, 0xb0, 0x9f, 0x3d, 0xd4, 0x55,
1635 0x1f, 0x71, 0x6d, 0xeb, 0xb8, 0x60, 0xfc, 0x3a, 0xac, 0x1e, 0xd0, 0xdb,
1636 0x5a, 0x15, 0x23, 0xba, 0x44, 0x09, 0xca, 0x73, 0x2b, 0x6e, 0x95, 0xd7,
1637 0x5a, 0x12, 0xba, 0xd9, 0x8a, 0x6e, 0x9c, 0xe6, 0xb8, 0xff, 0x3b, 0xfd,
1638 0x76, 0x99, 0x43, 0xef, 0xbf, 0x5e, 0x3d, 0x89, 0xa1, 0x6c, 0x8e, 0x5c,
1639 0x1d, 0x08, 0x1f, 0x3a, 0x49, 0xfe, 0xf6, 0x38, 0xf1, 0xe7, 0x65, 0xcb,
1640 0x67, 0xa8, 0xb8, 0xe9, 0x01, 0x23, 0x7c, 0x41, 0x09, 0x6c, 0xfb, 0x25,
1641 0x75, 0x70, 0xe3, 0x61, 0x15, 0x1f, 0x1b, 0x5a, 0x86, 0x4c, 0x28, 0x8a,
1642 0x3d, 0x4b, 0x54, 0xdc, 0x70, 0xf0, 0x24, 0x71, 0xff, 0xac, 0xcd, 0x93,
1643 0x73, 0x99, 0x2f, 0x22, 0x38, 0x20, 0x6b, 0xf7, 0x6e, 0xc6, 0xef, 0x4a,
1644 0x9c, 0x19, 0xec, 0xa6, 0xdf, 0x56, 0xe2, 0x54, 0xfa, 0x24, 0xed, 0xb1,
1645 0x12, 0x8f, 0x0f, 0x1a, 0x93, 0x3f, 0x71, 0x54, 0xe2, 0x31, 0x9e, 0x0f,
1646 0xf1, 0x7c, 0xf1, 0xb0, 0x31, 0xd8, 0xa5, 0x56, 0x62, 0xd1, 0xa1, 0x66,
1647 0x0c, 0x26, 0xc5, 0x36, 0x35, 0x6c, 0x1b, 0x6f, 0x2a, 0xe8, 0x5e, 0x74,
1648 0xee, 0xc5, 0x3d, 0xd4, 0xd5, 0xdd, 0x43, 0xdd, 0xec, 0xcf, 0x47, 0x9d,
1649 0x9f, 0xc4, 0x43, 0xcc, 0xeb, 0x76, 0x27, 0x7d, 0x38, 0x9f, 0x32, 0xfc,
1650 0x9f, 0x52, 0x0c, 0xb3, 0x4c, 0x09, 0x68, 0x67, 0xe0, 0xc3, 0x2b, 0xd9,
1651 0x72, 0xf4, 0x0e, 0xd7, 0xe1, 0x27, 0xb4, 0xcf, 0x07, 0xf7, 0x9d, 0xb4,
1652 0xed, 0xff, 0x40, 0x6a, 0x2e, 0x1e, 0x1b, 0x33, 0xd9, 0xb6, 0xcc, 0x93,
1653 0xc3, 0xde, 0xdb, 0xe4, 0x4a, 0x89, 0x6f, 0x44, 0x87, 0x68, 0x16, 0xc4,
1654 0xc4, 0x93, 0xc8, 0x0e, 0xea, 0xfd, 0x37, 0xab, 0xc2, 0xab, 0x55, 0xea,
1655 0xd2, 0x81, 0x29, 0x4d, 0x8f, 0xd7, 0xa8, 0xf1, 0x41, 0xe6, 0xaf, 0xf1,
1656 0x5a, 0xea, 0xe4, 0xb1, 0x41, 0x27, 0x16, 0x2c, 0x56, 0x79, 0x3d, 0x7e,
1657 0x91, 0xb1, 0x2d, 0x3e, 0x4f, 0x35, 0x71, 0xc0, 0x96, 0x15, 0xf1, 0x12,
1658 0x72, 0xfb, 0xea, 0xc5, 0xf5, 0x8c, 0x5f, 0x0e, 0xb1, 0xbd, 0x58, 0xa5,
1659 0xea, 0xa4, 0xde, 0x5f, 0xc1, 0x18, 0xed, 0xfa, 0x11, 0x1e, 0xc7, 0x47,
1660 0xac, 0xee, 0x55, 0xe4, 0xdc, 0xf3, 0x03, 0x56, 0xf7, 0xcd, 0xa6, 0xe1,
1661 0x2b, 0x51, 0x03, 0xd1, 0x2f, 0xe0, 0x15, 0x1c, 0x1b, 0x93, 0x32, 0xb2,
1662 0x0f, 0x24, 0x86, 0x91, 0xa4, 0xd5, 0x3d, 0x64, 0xce, 0x47, 0xb3, 0x9d,
1663 0x1b, 0xbb, 0x2a, 0xf3, 0x98, 0x29, 0x7e, 0x24, 0x6b, 0x25, 0x53, 0xf8,
1664 0x25, 0xdb, 0xb9, 0x30, 0x52, 0x8d, 0x19, 0xb5, 0xe2, 0x07, 0x67, 0xf1,
1665 0xc6, 0xe0, 0x77, 0x71, 0x7e, 0xd0, 0xc2, 0xa2, 0x90, 0x05, 0x67, 0xa8,
1666 0xd1, 0x6c, 0x55, 0x97, 0x12, 0x23, 0x14, 0xac, 0x6e, 0xf8, 0x1e, 0xde,
1667 0x1a, 0x94, 0xfd, 0xa6, 0x96, 0x2d, 0xcb, 0x00, 0x16, 0x5b, 0x7b, 0x66,
1668 0x8a, 0xdf, 0x48, 0xbd, 0x3f, 0x95, 0x07, 0xeb, 0x8c, 0x86, 0xc5, 0x5c,
1669 0xf8, 0x15, 0x8c, 0x8e, 0x18, 0xd1, 0xcd, 0x45, 0x39, 0x07, 0x5f, 0xa1,
1670 0x0e, 0xec, 0xf8, 0x74, 0xb0, 0x06, 0x0b, 0x2e, 0x32, 0x6b, 0xfc, 0xf0,
1671 0x3c, 0xda, 0xce, 0xa2, 0xc5, 0x01, 0x73, 0xa5, 0xfa, 0x6f, 0xf4, 0xd3,
1672 0x57, 0x70, 0x24, 0x5d, 0xc4, 0x6b, 0x1f, 0x5a, 0xe9, 0xe7, 0xf9, 0x7d,
1673 0xfe, 0x5e, 0xb4, 0xa4, 0x4e, 0xd8, 0xeb, 0x0f, 0xc7, 0x89, 0x8f, 0x83,
1674 0x29, 0x29, 0xa3, 0x61, 0x2c, 0xdb, 0x4a, 0x6c, 0x88, 0xe2, 0x9f, 0xb2,
1675 0x11, 0xe2, 0x43, 0x98, 0xf8, 0xd0, 0x4c, 0x7c, 0x30, 0x89, 0x0f, 0x4d,
1676 0xc4, 0x87, 0x20, 0xf1, 0xc1, 0xb0, 0xd7, 0xd6, 0xd3, 0x47, 0xbf, 0x8b,
1677 0x92, 0xe1, 0xb3, 0x70, 0xd1, 0x07, 0xce, 0x98, 0x16, 0xf9, 0x49, 0xa3,
1678 0xb6, 0x11, 0xf3, 0x95, 0xa8, 0xe6, 0x45, 0x9a, 0xed, 0x95, 0x0d, 0x6b,
1679 0x1c, 0x8b, 0x85, 0x60, 0xa8, 0x3e, 0xdc, 0x4f, 0xac, 0xfe, 0x95, 0xd1,
1680 0xd8, 0xef, 0x45, 0xe3, 0x81, 0x99, 0x30, 0x06, 0x17, 0xab, 0x0d, 0x4a,
1681 0xf4, 0xe3, 0x5e, 0x8e, 0xb3, 0x16, 0x73, 0xf7, 0x69, 0x98, 0xc7, 0xe3,
1682 0x1f, 0x53, 0xf5, 0x93, 0x2f, 0x3b, 0xe0, 0x9d, 0x4d, 0xba, 0x33, 0x87,
1683 0x4c, 0x80, 0xac, 0xd6, 0xeb, 0xc3, 0x95, 0xc7, 0x5f, 0x51, 0x15, 0xe4,
1684 0x3e, 0x2e, 0x31, 0xaf, 0x31, 0xd8, 0xa7, 0xaa, 0xb2, 0x96, 0x44, 0x0c,
1685 0xe7, 0xa1, 0x22, 0x42, 0x16, 0x51, 0xc7, 0xfc, 0xc2, 0xda, 0x68, 0x96,
1686 0x61, 0x47, 0x13, 0x39, 0xa7, 0x57, 0x3f, 0x21, 0x31, 0x6a, 0x36, 0x63,
1687 0x44, 0x79, 0x32, 0x7e, 0xe7, 0x6c, 0x78, 0x50, 0x96, 0xb4, 0xac, 0xaf,
1688 0x86, 0x34, 0x78, 0x22, 0x81, 0xe8, 0x56, 0xa6, 0x91, 0x1f, 0x5f, 0x10,
1689 0xc6, 0xea, 0xec, 0x09, 0x0c, 0x73, 0x7c, 0xab, 0xb2, 0xc5, 0x67, 0xc5,
1690 0xfe, 0xf8, 0xe7, 0xf2, 0x33, 0x67, 0x57, 0x1e, 0x98, 0x0d, 0x43, 0xbb,
1691 0x57, 0x1d, 0xae, 0x22, 0x07, 0x3f, 0xce, 0xb8, 0xa7, 0x4c, 0x7d, 0x42,
1692 0x41, 0xc7, 0x70, 0x1c, 0x33, 0x42, 0x2f, 0x28, 0xb1, 0x5a, 0xdd, 0xef,
1693 0x57, 0x6a, 0xf1, 0x89, 0x7d, 0xd4, 0xf5, 0xa2, 0x1f, 0x7a, 0xe4, 0xb9,
1694 0xb0, 0x6f, 0x1e, 0x15, 0xdd, 0xd6, 0xa7, 0x87, 0x38, 0x8e, 0xc9, 0x86,
1695 0x13, 0x82, 0x93, 0x8f, 0xba, 0xe1, 0x78, 0x74, 0x16, 0xa2, 0x68, 0x6a,
1696 0xb8, 0xb2, 0xeb, 0x5f, 0x54, 0xd1, 0x8b, 0xf0, 0x6b, 0x7d, 0x30, 0xae,
1697 0x18, 0xda, 0xcf, 0x95, 0x13, 0xf6, 0x7d, 0xb8, 0xaf, 0x66, 0x4f, 0x52,
1698 0x97, 0xc7, 0x0b, 0xf9, 0xd2, 0x3a, 0x24, 0x06, 0x64, 0x5f, 0xfe, 0x59,
1699 0xcc, 0x1d, 0xd6, 0xdb, 0x77, 0x29, 0x46, 0xf0, 0x06, 0xe5, 0x2c, 0xe6,
1700 0x0c, 0x07, 0x39, 0x97, 0x1a, 0x56, 0x26, 0x8b, 0xf8, 0x29, 0x18, 0xbc,
1701 0x8e, 0x18, 0x6c, 0x2d, 0xfb, 0x89, 0x19, 0xd7, 0x65, 0x4f, 0x82, 0x53,
1702 0xd1, 0x3b, 0x1a, 0x94, 0x38, 0x63, 0xa8, 0x71, 0x71, 0x3d, 0xeb, 0x78,
1703 0x86, 0x9b, 0x70, 0x3b, 0xc7, 0xdc, 0xc6, 0x79, 0xfb, 0xee, 0x62, 0x0b,
1704 0x4b, 0x16, 0xeb, 0x07, 0xca, 0x1c, 0xd1, 0x7b, 0x6b, 0x90, 0xeb, 0x9a,
1705 0x49, 0xbb, 0xb9, 0x7b, 0x91, 0x1e, 0x7e, 0x81, 0xb8, 0x4b, 0x9c, 0x46,
1706 0x2f, 0xe3, 0xce, 0x46, 0xc6, 0xa2, 0xf2, 0x88, 0xde, 0xcf, 0x1c, 0xf5,
1707 0xc2, 0x1d, 0x8e, 0x68, 0x48, 0x9e, 0xff, 0xf8, 0x32, 0x96, 0xc1, 0x1d,
1708 0xaa, 0x22, 0x0e, 0xea, 0xb9, 0xef, 0x42, 0x3f, 0x70, 0x3b, 0xfa, 0xf1,
1709 0x03, 0xf2, 0xbb, 0x99, 0x57, 0xe5, 0x88, 0x51, 0x19, 0x3c, 0x98, 0x3d,
1710 0x89, 0x03, 0xd9, 0x47, 0xb1, 0x37, 0xbb, 0x5b, 0x49, 0xdb, 0xf7, 0x20,
1711 0x15, 0x79, 0xee, 0x26, 0x5a, 0xa5, 0x7c, 0x06, 0x95, 0xa1, 0xaf, 0x5b,
1712 0xe9, 0x1a, 0x15, 0xd5, 0xa1, 0x20, 0x56, 0x27, 0xe3, 0x70, 0x44, 0xde,
1713 0xb6, 0xe4, 0xb9, 0xcf, 0x2d, 0x13, 0x06, 0xae, 0x4f, 0x96, 0x23, 0x76,
1714 0xc8, 0xb2, 0xfa, 0x9b, 0x9d, 0xd8, 0x34, 0xd1, 0x84, 0x95, 0xc3, 0x0f,
1715 0x59, 0xf3, 0x18, 0x73, 0xde, 0xbd, 0xc6, 0x83, 0x3b, 0x0e, 0x79, 0xb0,
1716 0x3e, 0x19, 0x85, 0x2f, 0x52, 0xc1, 0xdf, 0x01, 0x73, 0x39, 0x8c, 0xc9,
1717 0x49, 0x18, 0xfd, 0xd7, 0x39, 0x02, 0xc7, 0xc2, 0xaa, 0x07, 0x7f, 0x4d,
1718 0x1c, 0x5f, 0x45, 0xdc, 0x89, 0x4d, 0x58, 0xa8, 0x8e, 0x78, 0x71, 0x27,
1719 0xeb, 0x7f, 0x8c, 0x73, 0xff, 0xd6, 0x92, 0xe3, 0xc4, 0x02, 0x23, 0x36,
1720 0xa1, 0x68, 0xd8, 0x3a, 0xe1, 0xa6, 0xae, 0xdc, 0x88, 0x1d, 0xa9, 0xc5,
1721 0xf5, 0xfb, 0xfc, 0xb8, 0x63, 0xc2, 0x83, 0x96, 0xa4, 0xb5, 0xec, 0xb8,
1722 0x19, 0x5f, 0xab, 0xc1, 0xc0, 0xfa, 0x09, 0x2f, 0x6e, 0x4b, 0xea, 0xbe,
1723 0x1b, 0x98, 0xf3, 0x8f, 0x99, 0x41, 0xfc, 0xed, 0x84, 0x0f, 0xb7, 0x24,
1724 0x4f, 0x49, 0x1e, 0xb9, 0xdc, 0xc9, 0xd8, 0x73, 0xff, 0x44, 0x1d, 0xd6,
1725 0x26, 0xf5, 0x8b, 0x93, 0xe4, 0x76, 0xdd, 0x47, 0x4c, 0xdc, 0x3b, 0xa1,
1726 0xa2, 0x83, 0xed, 0x7c, 0x22, 0x39, 0x17, 0x5d, 0x47, 0x9a, 0x29, 0xc3,
1727 0x62, 0xac, 0x1a, 0x76, 0xc2, 0x24, 0x8b, 0xc7, 0x27, 0x81, 0x76, 0xfa,
1728 0x47, 0x22, 0xf5, 0x45, 0xec, 0x19, 0x30, 0x71, 0xd7, 0x84, 0x9c, 0x9f,
1729 0xb4, 0x9f, 0x95, 0xbb, 0x70, 0x70, 0x31, 0x6e, 0x1c, 0x56, 0x89, 0x03,
1730 0xa5, 0x48, 0xaf, 0x55, 0x70, 0x1b, 0xaf, 0xef, 0x4a, 0xd9, 0x7b, 0xab,
1731 0x11, 0x1a, 0x0a, 0x1c, 0xab, 0x21, 0x67, 0x58, 0x72, 0x30, 0x7f, 0xfd,
1732 0x41, 0xe2, 0x7c, 0x19, 0x71, 0xbe, 0x82, 0x1c, 0xf6, 0xba, 0xd1, 0x93,
1733 0x78, 0x80, 0xb8, 0x7c, 0x62, 0xb8, 0x9b, 0x71, 0xa7, 0x12, 0x5f, 0x63,
1734 0x1c, 0x48, 0xf2, 0xfc, 0xec, 0x90, 0xd1, 0x55, 0x46, 0x9c, 0x7e, 0x81,
1735 0xf8, 0xdb, 0x4f, 0xcc, 0xb8, 0x3b, 0x49, 0xb7, 0x1f, 0x62, 0x0e, 0x70,
1736 0x55, 0x74, 0xa1, 0x87, 0x39, 0xd6, 0x0d, 0x4a, 0xc0, 0xf7, 0x1a, 0x2a,
1737 0xe1, 0x38, 0x58, 0x8b, 0x96, 0x7d, 0x52, 0x46, 0xf0, 0x4b, 0x85, 0x7a,
1738 0xd8, 0x49, 0x9d, 0x9f, 0x84, 0x35, 0xe8, 0xe0, 0x78, 0xeb, 0x4d, 0x32,
1739 0x70, 0xfc, 0xd8, 0xd4, 0xb5, 0x7f, 0x22, 0xd6, 0xbe, 0x43, 0x4c, 0xf5,
1740 0xcf, 0x6e, 0x46, 0xab, 0x61, 0xf2, 0x38, 0x89, 0x57, 0x06, 0x0d, 0xf3,
1741 0x10, 0x9c, 0x78, 0x99, 0x3c, 0x6f, 0x6a, 0x36, 0x63, 0xa6, 0x21, 0x7e,
1742 0x98, 0xe1, 0x78, 0x54, 0xc9, 0x4b, 0xe0, 0x18, 0x07, 0xde, 0x38, 0xb8,
1743 0x8c, 0xe3, 0x92, 0x58, 0x2a, 0xf1, 0x2e, 0x43, 0x59, 0x97, 0x61, 0x0d,
1744 0xf5, 0xd1, 0x9a, 0x54, 0x91, 0x39, 0x12, 0xc1, 0x5d, 0xfb, 0xf3, 0x71,
1745 0x78, 0x5b, 0x28, 0x7e, 0x33, 0xe3, 0x70, 0xb8, 0x9c, 0x71, 0xd8, 0x15,
1746 0x11, 0xd9, 0x9c, 0x18, 0x65, 0xdc, 0xde, 0x91, 0x0a, 0xa3, 0x8d, 0x73,
1747 0x38, 0x99, 0x61, 0xbf, 0xc9, 0x3a, 0x9c, 0xc9, 0x78, 0x18, 0xb3, 0x34,
1748 0x1e, 0x44, 0xb5, 0xb1, 0x59, 0x3c, 0xfc, 0x3c, 0xe6, 0xf3, 0x30, 0xec,
1749 0x6b, 0x1b, 0x93, 0x0a, 0xe2, 0xed, 0x8a, 0xcd, 0xe7, 0xcf, 0x64, 0x04,
1750 0x9b, 0x65, 0x2d, 0x73, 0x7b, 0x95, 0x3c, 0x8b, 0x32, 0x98, 0xfa, 0x1e,
1751 0xaa, 0xa9, 0xff, 0xaa, 0x02, 0x0e, 0xfd, 0x34, 0x24, 0xb8, 0x5b, 0x4f,
1752 0xdc, 0x95, 0xe7, 0x04, 0x2c, 0x6b, 0x5d, 0x60, 0x3a, 0x1e, 0xfd, 0x9f,
1753 0x77, 0xa3, 0xf6, 0x33, 0x17, 0x82, 0x49, 0xc4, 0xbf, 0x14, 0xf1, 0x8f,
1754 0x63, 0xe8, 0xb9, 0x96, 0x18, 0x48, 0x99, 0xfe, 0x21, 0x45, 0x0c, 0x24,
1755 0x4e, 0x3f, 0x4a, 0x9c, 0xfe, 0x06, 0x71, 0xfa, 0xeb, 0xc4, 0xe9, 0xaf,
1756 0x11, 0x13, 0xf2, 0x6b, 0x7a, 0x6d, 0x72, 0xff, 0x85, 0xf3, 0xf1, 0x96,
1757 0xbd, 0xb6, 0x38, 0x93, 0xba, 0x9a, 0x3b, 0xac, 0x60, 0x9e, 0xa1, 0x1f,
1758 0x13, 0xbb, 0xff, 0x01, 0xe7, 0xc9, 0x3f, 0xa3, 0xce, 0x7e, 0x26, 0xa6,
1759 0x35, 0xd9, 0x07, 0x77, 0xb2, 0x51, 0xeb, 0x87, 0xfd, 0x2c, 0xb2, 0x29,
1760 0x5c, 0xb4, 0x24, 0xb9, 0x11, 0x8e, 0x64, 0xe3, 0xb1, 0xd3, 0x72, 0x9f,
1761 0x77, 0x96, 0xe4, 0xf5, 0x1b, 0xe1, 0x4c, 0xea, 0xc7, 0xe2, 0x94, 0x65,
1762 0x25, 0xff, 0x73, 0x25, 0x1b, 0xcd, 0xd7, 0x60, 0x63, 0x9b, 0x7f, 0xca,
1763 0xfe, 0xaf, 0xfe, 0xc2, 0x03, 0xd4, 0x57, 0x8e, 0x6d, 0x66, 0xa8, 0xfb,
1764 0x72, 0xf2, 0x95, 0x47, 0xb2, 0xf2, 0xbb, 0xb1, 0x23, 0xa1, 0x1e, 0x43,
1765 0x6c, 0xa6, 0xf0, 0xf1, 0x30, 0x6e, 0x4a, 0x7a, 0x68, 0x07, 0x71, 0x54,
1766 0xd1, 0xb7, 0x3e, 0x37, 0xd1, 0x4c, 0x5f, 0x7b, 0xc8, 0xd2, 0x22, 0x81,
1767 0x8e, 0x09, 0x72, 0x9e, 0x2d, 0x13, 0xcb, 0xb0, 0x62, 0xd8, 0xb2, 0x3c,
1768 0x4b, 0x8d, 0xf0, 0x56, 0xc5, 0x0f, 0x17, 0x7d, 0xd0, 0x41, 0xbf, 0xda,
1769 0x7c, 0x28, 0xa0, 0xbd, 0x46, 0x3c, 0xed, 0x6c, 0x3e, 0x41, 0xfb, 0x30,
1770 0x2e, 0xb6, 0x11, 0x4b, 0x9d, 0x91, 0x00, 0xf3, 0x44, 0x0f, 0x6d, 0xdf,
1771 0x8b, 0x8b, 0x09, 0xf1, 0x2f, 0xbd, 0xeb, 0x9f, 0x98, 0x9b, 0x74, 0xd1,
1772 0x37, 0x7e, 0x9e, 0xa8, 0xa3, 0x0f, 0xb8, 0xf1, 0x46, 0xc2, 0xa0, 0xbf,
1773 0x79, 0xf0, 0x56, 0xa2, 0x89, 0x7d, 0x05, 0x59, 0xc6, 0x8f, 0x7b, 0x26,
1774 0xc2, 0xf4, 0xb3, 0x6b, 0x79, 0xc8, 0x73, 0x99, 0xf5, 0xf1, 0x6f, 0x2a,
1775 0xf5, 0x83, 0x73, 0xd5, 0x1a, 0x44, 0x6b, 0x35, 0x7c, 0x7e, 0xe2, 0x23,
1776 0xf8, 0x57, 0xc6, 0xed, 0x4d, 0x49, 0x70, 0x0e, 0x11, 0x22, 0x0f, 0x9c,
1777 0x3c, 0x22, 0xf7, 0x1c, 0xd1, 0x18, 0x6d, 0x70, 0xe8, 0xcc, 0x6d, 0xf5,
1778 0xdc, 0x79, 0x87, 0x93, 0x7d, 0x92, 0x15, 0xb3, 0xec, 0xcf, 0x07, 0xcb,
1779 0x71, 0xef, 0xa1, 0x13, 0xf4, 0x91, 0x12, 0x2c, 0x7a, 0xc0, 0x8d, 0xcf,
1780 0x1f, 0xc9, 0x90, 0x3b, 0xa8, 0x90, 0xfd, 0xbc, 0x69, 0x12, 0x85, 0x39,
1781 0xa3, 0x11, 0xdc, 0xb9, 0x3f, 0x83, 0xe1, 0x02, 0xcf, 0x0b, 0x85, 0xe2,
1782 0xff, 0x43, 0xc5, 0x09, 0xf2, 0x88, 0x40, 0xe7, 0xd5, 0xb4, 0xb1, 0xaa,
1783 0x48, 0x20, 0x2e, 0xe3, 0x6e, 0xa7, 0x8d, 0xf5, 0x71, 0x3e, 0x33, 0x1c,
1784 0x47, 0x82, 0x36, 0xf6, 0x55, 0xca, 0xbf, 0x87, 0x36, 0x16, 0xa7, 0x8d,
1785 0xc5, 0x69, 0x4f, 0x71, 0xda, 0x98, 0x3c, 0xfb, 0x1b, 0xa7, 0x8d, 0xc5,
1786 0x69, 0x63, 0xf1, 0xcc, 0x32, 0x1c, 0x25, 0xd3, 0xd8, 0x39, 0xd6, 0x4c,
1787 0x1c, 0x53, 0xec, 0xa8, 0x94, 0xbb, 0xf9, 0x23, 0xe4, 0xec, 0xd7, 0xf1,
1788 0x50, 0xd0, 0x46, 0x9f, 0xec, 0x4f, 0x67, 0xc8, 0x79, 0xdc, 0xf8, 0x75,
1789 0x56, 0x38, 0x7e, 0x33, 0xf3, 0xd8, 0x93, 0xe4, 0xf9, 0x2a, 0x9e, 0x30,
1790 0x25, 0x0f, 0x36, 0x79, 0xce, 0x58, 0x93, 0x12, 0xbe, 0x76, 0x12, 0x77,
1791 0x0f, 0x02, 0x37, 0x90, 0x17, 0xd6, 0x92, 0x97, 0x1c, 0x5e, 0xc4, 0xdf,
1792 0x07, 0x4f, 0xd0, 0xe6, 0x4f, 0xda, 0x7b, 0xbb, 0x54, 0xb6, 0x75, 0x66,
1793 0xb0, 0xde, 0x77, 0x3d, 0x7d, 0xf0, 0x7e, 0xd6, 0x75, 0x1e, 0x94, 0x3a,
1794 0x27, 0xd8, 0xb6, 0x1e, 0xfe, 0x35, 0xe7, 0xbf, 0xe3, 0x81, 0x5a, 0xbc,
1795 0xb1, 0x5f, 0x0f, 0xbf, 0x43, 0xcc, 0xab, 0x75, 0x58, 0xcb, 0xae, 0x0e,
1796 0x05, 0xb6, 0x5d, 0xad, 0xe6, 0xf9, 0x5e, 0xfb, 0x90, 0x13, 0xc7, 0x42,
1797 0xcb, 0xe0, 0x59, 0x54, 0xe4, 0x7c, 0xb4, 0xa5, 0x5a, 0xe1, 0x58, 0x7a,
1798 0xf8, 0x3c, 0xb9, 0x4a, 0x92, 0xed, 0x1f, 0xcd, 0x3c, 0x4e, 0x0c, 0xf9,
1799 0x22, 0x9e, 0x63, 0x7e, 0x3e, 0xf6, 0xa1, 0x97, 0xc9, 0x1d, 0xdd, 0x18,
1800 0x27, 0x07, 0x3c, 0x3e, 0x18, 0xfd, 0xa8, 0x93, 0xb8, 0xef, 0x59, 0x54,
1801 0x89, 0x4c, 0x5a, 0xb8, 0x62, 0x25, 0x9e, 0x19, 0x34, 0xb4, 0x1b, 0x94,
1802 0x3c, 0x2f, 0xcc, 0xef, 0xfd, 0x32, 0x2e, 0x8e, 0x22, 0x30, 0x79, 0x9e,
1803 0xdc, 0xf0, 0x9d, 0xb4, 0xc4, 0xb0, 0x93, 0xf4, 0x71, 0x3f, 0xc2, 0x49,
1804 0x0d, 0x27, 0xc6, 0x0d, 0x2c, 0x4c, 0x7a, 0xf1, 0xf0, 0x78, 0x10, 0x57,
1805 0xd3, 0x77, 0xb3, 0xe4, 0x87, 0x1f, 0x4a, 0x8a, 0x2f, 0xd6, 0x61, 0x62,
1806 0xbc, 0x8e, 0x3e, 0x22, 0xbc, 0xfc, 0x67, 0xf0, 0xd4, 0x9e, 0xb5, 0xf7,
1807 0x36, 0x8f, 0xa6, 0xf4, 0xfe, 0x18, 0xc7, 0x13, 0xf3, 0xea, 0xc7, 0x62,
1808 0xd0, 0xd3, 0xc0, 0x87, 0xdf, 0x4d, 0x7f, 0x52, 0xe2, 0xa3, 0xf8, 0xa3,
1809 0x86, 0x09, 0xf2, 0x9d, 0x52, 0x62, 0x6a, 0x79, 0xa4, 0xfe, 0xc2, 0xf7,
1810 0x15, 0x3d, 0xf7, 0x94, 0x6a, 0x59, 0xdf, 0x5b, 0xac, 0xc1, 0x77, 0x44,
1811 0x23, 0xf7, 0x30, 0xed, 0xe7, 0x62, 0xe4, 0x79, 0xf3, 0xd9, 0xfb, 0x6a,
1812 0x31, 0x63, 0x5f, 0x12, 0xff, 0xad, 0x36, 0xfe, 0xd1, 0x59, 0x8c, 0xf3,
1813 0xb3, 0x64, 0x7f, 0x76, 0xf2, 0xf4, 0x6c, 0xb9, 0x57, 0x34, 0xa9, 0x36,
1814 0x76, 0x1c, 0x83, 0x7e, 0xec, 0x15, 0x45, 0xf7, 0x7d, 0x95, 0xb1, 0xc1,
1815 0x45, 0x1b, 0x75, 0x4c, 0x68, 0xf4, 0xdd, 0xc6, 0x13, 0x33, 0x60, 0xc4,
1816 0xaf, 0x51, 0x5d, 0x16, 0x6c, 0x79, 0x6e, 0xa8, 0xca, 0xe7, 0x45, 0x82,
1817 0x3b, 0x12, 0x17, 0xc8, 0x17, 0x89, 0xc1, 0x9d, 0xf4, 0x97, 0x35, 0x76,
1818 0x2c, 0x3a, 0x61, 0xef, 0xfd, 0xde, 0x3a, 0x11, 0xa7, 0x8f, 0x2c, 0x43,
1819 0xc5, 0xb0, 0x07, 0x9f, 0xb3, 0xe3, 0xd0, 0x43, 0x56, 0x0d, 0xfd, 0xe5,
1820 0xae, 0x43, 0x81, 0xce, 0xeb, 0xe9, 0x2f, 0xf5, 0x4b, 0x25, 0x86, 0x31,
1821 0x6e, 0xa7, 0x0c, 0x73, 0x94, 0xd8, 0xf2, 0x50, 0xb3, 0x31, 0xf9, 0x32,
1822 0xf2, 0x3e, 0xb3, 0x6b, 0xa0, 0x16, 0x7f, 0xff, 0xc0, 0x71, 0x7b, 0x2d,
1823 0xe4, 0x4e, 0x9e, 0x27, 0x07, 0x7c, 0xb6, 0x7f, 0xc4, 0xf8, 0xfb, 0x1e,
1824 0xc6, 0xbc, 0x18, 0xfd, 0x68, 0xe7, 0x80, 0xb5, 0xec, 0xf9, 0xc5, 0xf1,
1825 0xb5, 0x55, 0x08, 0x32, 0x26, 0xb9, 0xd1, 0x3f, 0xa0, 0x0f, 0x76, 0x30,
1826 0x06, 0x9d, 0x5d, 0x6c, 0x52, 0x16, 0x0f, 0x86, 0x06, 0x04, 0x53, 0x4f,
1827 0xdd, 0x52, 0x8b, 0xf8, 0xff, 0xd0, 0x38, 0xbe, 0xcf, 0xd9, 0xf7, 0x08,
1828 0xeb, 0xb0, 0xe9, 0xc8, 0x52, 0xca, 0xdc, 0x44, 0x1f, 0x64, 0x5e, 0xcd,
1829 0x7c, 0x67, 0xc3, 0x7e, 0xf1, 0x0b, 0xb4, 0x48, 0x9e, 0xd6, 0x6d, 0x06,
1830 0xcc, 0x57, 0xe9, 0x43, 0x25, 0xe4, 0x3a, 0x0f, 0xa6, 0xec, 0xe7, 0x73,
1831 0x72, 0x15, 0x46, 0x18, 0x8b, 0x69, 0xa3, 0x25, 0x86, 0x0f, 0x33, 0xc8,
1832 0xeb, 0x16, 0x72, 0x3e, 0xca, 0xb2, 0x1e, 0x80, 0x1c, 0x02, 0xc4, 0x27,
1833 0x1c, 0x25, 0x08, 0x1e, 0xf5, 0xf3, 0x98, 0xcf, 0x83, 0x8a, 0xc8, 0xaa,
1834 0x98, 0x79, 0x94, 0x75, 0x47, 0x33, 0xb6, 0x2d, 0xfe, 0x3d, 0xe7, 0x3d,
1835 0x41, 0x5b, 0xff, 0x04, 0xb1, 0x7e, 0x72, 0x2f, 0xd0, 0x7f, 0x30, 0x6f,
1836 0xdb, 0x29, 0xb6, 0xdf, 0x4e, 0xcc, 0xbb, 0x40, 0x9b, 0xed, 0xe3, 0x7c,
1837 0x0f, 0x8d, 0x18, 0xc1, 0x46, 0x35, 0xa0, 0x4d, 0x70, 0x9e, 0x7b, 0xc6,
1838 0x54, 0x0c, 0x0c, 0x2e, 0xc3, 0x28, 0xf3, 0xa0, 0xde, 0xb4, 0xf8, 0x88,
1839 0x94, 0x39, 0x89, 0x6e, 0xfa, 0xc8, 0x2f, 0x17, 0x2b, 0x88, 0x7d, 0x5c,
1840 0xf6, 0xbe, 0x3b, 0x99, 0xef, 0x7f, 0x11, 0x9b, 0x12, 0x8f, 0x5b, 0x95,
1841 0x86, 0xde, 0x9f, 0x56, 0x99, 0x67, 0xd1, 0x36, 0x7b, 0x98, 0x9f, 0x2c,
1842 0x67, 0x7e, 0xd2, 0x5b, 0xb0, 0xcb, 0x33, 0xb4, 0xc3, 0x01, 0xc6, 0xb1,
1843 0x97, 0xd3, 0xf9, 0xb8, 0xf7, 0x83, 0x21, 0x3f, 0x16, 0x5e, 0x53, 0x89,
1844 0xa7, 0x0f, 0xe6, 0x65, 0xdb, 0x4b, 0x9b, 0x7c, 0x8a, 0x7a, 0xbe, 0x83,
1845 0x7a, 0x7d, 0x29, 0x25, 0x18, 0x15, 0xc4, 0x33, 0xe4, 0xd1, 0x5b, 0xc8,
1846 0x05, 0xbe, 0x97, 0xca, 0xdb, 0xe4, 0xe7, 0x27, 0xd6, 0x68, 0xf9, 0xf8,
1847 0xe0, 0x85, 0xba, 0x4f, 0xf6, 0x00, 0x5a, 0xd6, 0x72, 0x33, 0xd7, 0x49,
1848 0x5e, 0xc3, 0xb6, 0x23, 0xe4, 0x46, 0x4e, 0xcc, 0x49, 0x46, 0xb0, 0x22,
1849 0x55, 0xdf, 0xd6, 0x20, 0x9b, 0x3d, 0xe6, 0xe4, 0x39, 0xa0, 0x2b, 0x29,
1850 0xef, 0x0e, 0xd0, 0x50, 0xc1, 0xdc, 0xe9, 0xaf, 0x0b, 0xef, 0x2b, 0xf8,
1851 0xc4, 0x9f, 0xc1, 0x1d, 0xd7, 0x50, 0xa6, 0x14, 0xb9, 0xe3, 0x54, 0xe1,
1852 0x7d, 0x05, 0x37, 0xdb, 0xef, 0x2b, 0x70, 0x63, 0xc6, 0x84, 0xd3, 0xf9,
1853 0xa9, 0x94, 0x07, 0xb3, 0x27, 0x2e, 0x71, 0x50, 0x77, 0x49, 0xa4, 0x15,
1854 0x4f, 0x26, 0x14, 0xcc, 0x32, 0xfe, 0x27, 0xbe, 0x6f, 0xaf, 0x09, 0xd4,
1855 0xda, 0x7b, 0xf6, 0x5d, 0x91, 0x28, 0x0e, 0x27, 0xf4, 0xb6, 0xc7, 0x78,
1856 0x5e, 0x46, 0x3c, 0xad, 0xda, 0xa7, 0xe0, 0xa9, 0x80, 0x17, 0xa5, 0x47,
1857 0x64, 0xaf, 0xbb, 0x65, 0x39, 0x17, 0xaf, 0xb2, 0x76, 0xac, 0x13, 0xfb,
1858 0xe6, 0x1c, 0x1e, 0x09, 0x54, 0x09, 0x06, 0x1e, 0x36, 0x65, 0xdd, 0xd2,
1859 0x40, 0x5f, 0xa2, 0x96, 0xfc, 0xba, 0xbe, 0xb3, 0x15, 0xf5, 0xe6, 0xcf,
1860 0x1c, 0xb5, 0x28, 0x39, 0x72, 0x87, 0x26, 0x6b, 0xf6, 0xdf, 0xe0, 0x9c,
1861 0xf5, 0x12, 0xbb, 0x7a, 0x52, 0xf9, 0xf8, 0xd9, 0x9a, 0xb1, 0xaa, 0x45,
1862 0x2f, 0xbd, 0xe4, 0x27, 0x6a, 0xf2, 0xa2, 0x5d, 0xa6, 0x22, 0x92, 0x23,
1863 0xfe, 0xd4, 0xe1, 0x04, 0xf9, 0x82, 0xc4, 0xd2, 0x0a, 0x1e, 0x95, 0xe4,
1864 0x8d, 0x3f, 0x67, 0x2c, 0xbd, 0x27, 0x94, 0x0b, 0xca, 0x9b, 0x2c, 0x6a,
1865 0xc8, 0xc5, 0xe9, 0x03, 0x38, 0x12, 0xd2, 0xdb, 0x37, 0x38, 0xa2, 0x4f,
1866 0x33, 0x07, 0x0b, 0x2f, 0x63, 0x4e, 0xbe, 0x2a, 0x90, 0xc1, 0x2e, 0xf2,
1867 0xc0, 0x9d, 0xcc, 0xc5, 0x3b, 0x68, 0x9b, 0x9d, 0xfb, 0x19, 0xdb, 0x1c,
1868 0x97, 0x73, 0x71, 0x2d, 0x14, 0xdf, 0x40, 0x0e, 0xd0, 0xe5, 0x51, 0xc5,
1869 0x5e, 0xc5, 0x77, 0x02, 0x1d, 0xaf, 0x12, 0xa3, 0x1b, 0x19, 0x37, 0xc4,
1870 0xde, 0xf7, 0xa4, 0xf4, 0x4e, 0x2a, 0xa0, 0xa6, 0x92, 0xb9, 0xe3, 0xbd,
1871 0xe3, 0xcd, 0xf4, 0x9b, 0xfc, 0x33, 0x73, 0xce, 0x25, 0x75, 0xcc, 0x39,
1872 0xaf, 0x43, 0xef, 0x10, 0xed, 0x9f, 0xbe, 0x74, 0xff, 0x00, 0xc8, 0xcf,
1873 0xd4, 0x9d, 0x9c, 0xbf, 0xdc, 0x11, 0x04, 0x2e, 0xb6, 0xa3, 0xb1, 0xad,
1874 0xc4, 0x21, 0x32, 0xe8, 0xed, 0x6f, 0x90, 0xa7, 0x75, 0x31, 0x3f, 0xdd,
1875 0xc2, 0x5c, 0x3e, 0xc6, 0x5c, 0x3e, 0xc6, 0x7a, 0xa9, 0x21, 0xb9, 0x4f,
1876 0x64, 0xb4, 0x9f, 0x61, 0xfe, 0xf3, 0x39, 0xf2, 0x9f, 0xa1, 0x07, 0x44,
1877 0xae, 0x59, 0xb8, 0xf7, 0xf0, 0x75, 0x48, 0xd2, 0x9e, 0xee, 0xe1, 0xb5,
1878 0x81, 0x07, 0xe6, 0xe3, 0x6e, 0xe6, 0xf1, 0xb1, 0xf1, 0x65, 0x18, 0x64,
1879 0x26, 0xba, 0xed, 0xf0, 0x47, 0xd0, 0x43, 0x3e, 0xb5, 0x9c, 0x18, 0xbd,
1880 0xe1, 0x60, 0xc6, 0xc6, 0x6c, 0xc1, 0xfc, 0x1f, 0x67, 0x80, 0xd7, 0xc8,
1881 0xc9, 0x06, 0x53, 0x27, 0x6c, 0x9e, 0xe6, 0x62, 0x7c, 0x28, 0x25, 0x2e,
1882 0x85, 0xf7, 0x1b, 0x5d, 0x2b, 0x55, 0x6b, 0x59, 0xd9, 0xe2, 0x40, 0xff,
1883 0x1b, 0xf4, 0xd5, 0x9a, 0x23, 0x2a, 0x6a, 0x87, 0x25, 0x57, 0x27, 0x3f,
1884 0x22, 0x46, 0x3f, 0x47, 0x8c, 0xae, 0x3c, 0x94, 0xcf, 0xcb, 0x13, 0xcc,
1885 0xbb, 0x6a, 0x8d, 0x7c, 0x6e, 0xbe, 0x67, 0x40, 0xf6, 0xe8, 0xb8, 0xf1,
1886 0x1d, 0xda, 0xfe, 0xa9, 0x82, 0xed, 0x9f, 0x2e, 0x60, 0xb0, 0xc5, 0xdc,
1887 0xfc, 0x35, 0x1b, 0x7f, 0xf3, 0xb9, 0xf9, 0xc2, 0x61, 0xa3, 0x2b, 0x4c,
1888 0x8c, 0xbe, 0xfa, 0x90, 0xf4, 0xaf, 0xa1, 0x96, 0x78, 0x32, 0x93, 0x58,
1889 0x52, 0x35, 0x2c, 0xeb, 0x33, 0x81, 0xce, 0x09, 0xd5, 0x67, 0xf7, 0xb1,
1890 0x9d, 0xb2, 0xf5, 0xd2, 0x07, 0xbe, 0x9a, 0x30, 0xb4, 0xad, 0x4a, 0xc0,
1891 0x5c, 0x4d, 0x7d, 0x1e, 0xc9, 0x5c, 0x87, 0xce, 0xc1, 0x3a, 0x1c, 0x4b,
1892 0x4b, 0x7c, 0x91, 0xf6, 0x25, 0x17, 0x77, 0xe2, 0x9d, 0xfd, 0x73, 0xf1,
1893 0xce, 0xd8, 0xe5, 0x3c, 0x7c, 0x47, 0x2a, 0x7a, 0x3f, 0xc3, 0xeb, 0x2a,
1894 0xc9, 0xc3, 0xbf, 0xc7, 0x3c, 0xfc, 0x0d, 0x45, 0xd6, 0x10, 0x55, 0x7c,
1895 0x62, 0x91, 0x83, 0xf1, 0x45, 0xf7, 0x7f, 0xd7, 0x11, 0x97, 0xfb, 0xc8,
1896 0xfe, 0x07, 0xf8, 0xff, 0xb3, 0x8c, 0xe7, 0xc3, 0x9c, 0x89, 0x68, 0xad,
1897 0x03, 0x4f, 0x2f, 0x8e, 0x47, 0x65, 0x9d, 0xb4, 0x9f, 0x3c, 0x65, 0x0e,
1898 0xe3, 0xe1, 0xdf, 0xa7, 0xea, 0xc3, 0x0b, 0x1d, 0x0e, 0x5c, 0x34, 0xf5,
1899 0xf6, 0x03, 0xbc, 0xf6, 0x4c, 0x56, 0x7c, 0x31, 0x4c, 0xfc, 0x5a, 0x59,
1900 0xf0, 0xc5, 0x5a, 0x94, 0xd3, 0xce, 0xe7, 0xd2, 0x5e, 0x7f, 0x9c, 0xd2,
1901 0x07, 0x9f, 0xa1, 0x9d, 0xd6, 0x5e, 0xb2, 0x53, 0x59, 0xa3, 0x95, 0xbc,
1902 0xa6, 0x9d, 0x79, 0xcd, 0xf4, 0xe7, 0xa5, 0x8f, 0xa3, 0x2f, 0x7b, 0x1f,
1903 0xee, 0xdd, 0xab, 0x77, 0x39, 0x1d, 0x71, 0x4b, 0x33, 0xba, 0x99, 0xa3,
1904 0x75, 0x23, 0xb0, 0xc8, 0xe8, 0xb8, 0xa0, 0xe8, 0x9d, 0x3f, 0x54, 0xca,
1905 0x99, 0xf3, 0x9d, 0xc1, 0xf6, 0x51, 0x3d, 0x98, 0x51, 0x0c, 0xdc, 0x40,
1906 0x8c, 0x7b, 0x78, 0xa4, 0x84, 0x76, 0xb8, 0x1e, 0x47, 0x06, 0xf5, 0x70,
1907 0x1c, 0x26, 0x31, 0xb4, 0xde, 0x5f, 0xa6, 0x5c, 0xc0, 0x69, 0xf3, 0x2c,
1908 0xb6, 0x67, 0xe7, 0x60, 0xbd, 0x26, 0x7b, 0x9a, 0xd6, 0x63, 0x62, 0xf0,
1909 0x02, 0x71, 0xa8, 0x9d, 0xdc, 0x4a, 0xf2, 0x06, 0x0b, 0x7b, 0x42, 0x57,
1910 0x63, 0x8b, 0xed, 0xbf, 0xa5, 0xf2, 0x4e, 0x0b, 0xcf, 0x3c, 0xc3, 0x20,
1911 0x4e, 0x48, 0x6e, 0xee, 0x9b, 0xb6, 0x3f, 0x57, 0xd6, 0x75, 0x1b, 0xab,
1912 0xf2, 0xf7, 0x95, 0xff, 0x58, 0x99, 0x29, 0x1c, 0x1a, 0x91, 0xf5, 0x85,
1913 0x19, 0xca, 0xe3, 0x83, 0x0d, 0xbe, 0x1e, 0xc6, 0x8f, 0xfb, 0xcd, 0x1c,
1914 0x5e, 0x5f, 0x5c, 0x86, 0x29, 0xaf, 0x82, 0xd0, 0xd5, 0x61, 0xe9, 0x83,
1915 0x9f, 0x73, 0x96, 0xff, 0x93, 0xd2, 0xce, 0x82, 0xc2, 0x9a, 0xc3, 0x3b,
1916 0x35, 0x8c, 0x55, 0x3c, 0x97, 0xe7, 0x03, 0xe5, 0xbc, 0x78, 0xfd, 0x47,
1917 0x56, 0xd4, 0x2b, 0xd7, 0x89, 0xd9, 0xb3, 0xc4, 0x7f, 0x67, 0x28, 0x77,
1918 0x12, 0x6f, 0xe7, 0x87, 0x66, 0x28, 0xeb, 0xd3, 0xc5, 0x3a, 0x2f, 0x22,
1919 0x3b, 0xf2, 0x22, 0xe7, 0x53, 0x0f, 0x4e, 0xc1, 0x55, 0x78, 0x56, 0x5e,
1920 0xf6, 0x81, 0xb9, 0xc8, 0x43, 0x65, 0x2d, 0xfe, 0x1c, 0x86, 0xf6, 0x0b,
1921 0x6f, 0xb4, 0xac, 0x40, 0xc3, 0x39, 0x6c, 0x3f, 0x7a, 0x42, 0xe9, 0x48,
1922 0xbd, 0x6b, 0xa1, 0x74, 0x46, 0x6c, 0x8e, 0xbd, 0xdf, 0x59, 0xda, 0xe8,
1923 0x53, 0xda, 0xb3, 0x81, 0xf0, 0xfd, 0x0c, 0xbe, 0x5a, 0x44, 0x9e, 0x63,
1924 0x97, 0xb1, 0x9d, 0xe0, 0x35, 0xc3, 0x7e, 0x66, 0xe8, 0xb8, 0x3d, 0xce,
1925 0xf7, 0xeb, 0xe1, 0x9b, 0x56, 0xb4, 0x5d, 0xea, 0x16, 0xe5, 0x9a, 0xcf,
1926 0x89, 0x16, 0xd9, 0x8a, 0xff, 0x8f, 0x17, 0x64, 0x2f, 0x25, 0x77, 0xce,
1927 0x97, 0xe9, 0xa4, 0xec, 0x25, 0xa1, 0x28, 0x4e, 0x35, 0x4f, 0x97, 0xbf,
1928 0x38, 0xd6, 0x83, 0xef, 0x69, 0x2f, 0x5f, 0xf6, 0xe3, 0xb5, 0xb2, 0x4f,
1929 0xea, 0x54, 0xf3, 0x24, 0xfe, 0xce, 0x5e, 0xd7, 0x78, 0xd3, 0xde, 0xdf,
1930 0xb9, 0xcb, 0x6c, 0x89, 0x96, 0xe1, 0xa3, 0x50, 0xaf, 0x8a, 0x2f, 0x2c,
1931 0xb3, 0xf9, 0x76, 0xb4, 0xbd, 0x8c, 0x39, 0xb7, 0xdb, 0x88, 0xde, 0xef,
1932 0x46, 0x2e, 0x47, 0x9e, 0xd0, 0x71, 0x51, 0x39, 0xa6, 0xdc, 0x11, 0xd0,
1933 0xb7, 0xbd, 0x4d, 0xfe, 0xf3, 0x6c, 0x20, 0xce, 0x39, 0x37, 0x7c, 0x03,
1934 0x8a, 0x6e, 0x6e, 0x62, 0x8c, 0x7d, 0x86, 0x39, 0xed, 0xc6, 0x40, 0xbf,
1935 0x7d, 0xcf, 0x53, 0x89, 0xac, 0xc1, 0x95, 0xf6, 0xfb, 0x26, 0xda, 0x61,
1936 0x64, 0x5e, 0x94, 0x35, 0x38, 0xfe, 0x8e, 0x61, 0xa1, 0x7d, 0x6d, 0x23,
1937 0x82, 0xf6, 0xf7, 0xba, 0xc2, 0x3b, 0x29, 0x3a, 0x50, 0x6f, 0x7f, 0x7f,
1938 0x1a, 0x0d, 0x99, 0x4b, 0x6b, 0xd5, 0xe8, 0x35, 0x2d, 0xeb, 0x49, 0x53,
1939 0x9e, 0x57, 0xbb, 0xb4, 0xb7, 0x7c, 0x8d, 0x83, 0x39, 0x10, 0x21, 0x25,
1940 0x96, 0x7f, 0x27, 0xcf, 0xe5, 0xe7, 0xc5, 0x56, 0xbc, 0x67, 0x6f, 0xb9,
1941 0xfd, 0xac, 0x93, 0xfd, 0xce, 0xa5, 0x05, 0x4b, 0x9c, 0xf8, 0x4e, 0xa2,
1942 0x2a, 0xe6, 0xe1, 0xef, 0xed, 0x4b, 0x4a, 0xb0, 0x25, 0x44, 0x0e, 0x7a,
1943 0xd5, 0x19, 0x9c, 0xcf, 0x38, 0x71, 0x26, 0x11, 0x0f, 0x8d, 0xb1, 0xbf,
1944 0x53, 0x09, 0x15, 0xa7, 0x47, 0xfa, 0x42, 0x87, 0xec, 0xbe, 0x5f, 0x45,
1945 0xef, 0x51, 0xb9, 0x0f, 0xd9, 0x8e, 0x0d, 0x89, 0xf3, 0x8c, 0xbb, 0xd2,
1946 0x96, 0xac, 0x05, 0xe8, 0xb9, 0x8d, 0xcc, 0x9f, 0x55, 0x47, 0x10, 0xb7,
1947 0x30, 0xde, 0x3d, 0x97, 0xe8, 0x86, 0x6b, 0xb1, 0xde, 0xf5, 0x2d, 0x72,
1948 0x96, 0xaa, 0x88, 0x1e, 0x7c, 0x4b, 0xe9, 0x20, 0x37, 0x74, 0x63, 0x32,
1949 0x21, 0x7e, 0x21, 0xef, 0xac, 0xf9, 0x34, 0x8e, 0x91, 0x23, 0x3f, 0x9b,
1950 0xd0, 0x70, 0xbe, 0xd9, 0x83, 0x0c, 0x39, 0xf3, 0x77, 0x12, 0x6e, 0x7c,
1951 0x95, 0x9c, 0xf9, 0x91, 0x11, 0x59, 0xb3, 0x6c, 0x45, 0x4b, 0x42, 0xd6,
1952 0xab, 0xc9, 0x03, 0xc7, 0xbc, 0xb4, 0x6d, 0xcb, 0xea, 0x35, 0x67, 0xd3,
1953 0x9f, 0xce, 0xb2, 0x4f, 0x59, 0xe7, 0x8c, 0x62, 0x35, 0x79, 0xd0, 0x23,
1954 0x63, 0x3e, 0x3c, 0xcf, 0x5c, 0x21, 0xc9, 0x7a, 0xcf, 0x25, 0xfc, 0x18,
1955 0xc8, 0xf8, 0xf0, 0x14, 0x73, 0x86, 0x9d, 0x3c, 0x97, 0xf7, 0x1f, 0x95,
1956 0x18, 0x41, 0xf2, 0xf2, 0x93, 0xa8, 0x18, 0xb8, 0x02, 0x9b, 0xd7, 0x3e,
1957 0x0a, 0x75, 0xe0, 0x04, 0x8f, 0x6b, 0xc9, 0x21, 0xae, 0x45, 0x6a, 0x24,
1958 0x82, 0xd4, 0xd8, 0x8b, 0xe8, 0x1f, 0x91, 0x71, 0xc9, 0x7b, 0x6c, 0x64,
1959 0x0f, 0x12, 0xb9, 0xe7, 0x80, 0x17, 0xe9, 0x31, 0xe9, 0xa7, 0x96, 0x7d,
1960 0xff, 0xb9, 0xed, 0xff, 0xab, 0xb5, 0xf9, 0x13, 0xd2, 0xf6, 0xa3, 0x7f,
1961 0xa4, 0x7d, 0xd1, 0x95, 0xac, 0xbd, 0xb4, 0x17, 0xd6, 0x5e, 0xdc, 0x6c,
1962 0xd3, 0x03, 0x47, 0x24, 0xb7, 0xb6, 0x12, 0x7a, 0x74, 0xb7, 0x62, 0xb4,
1963 0x55, 0x28, 0xe7, 0xb1, 0x3b, 0x2b, 0xef, 0x45, 0x28, 0xc5, 0x53, 0xc4,
1964 0x6b, 0x57, 0x48, 0xd7, 0xbe, 0x45, 0xdb, 0x59, 0x4e, 0x8c, 0x7b, 0xd5,
1965 0xbc, 0x1a, 0x71, 0x4d, 0xf4, 0x57, 0x8a, 0x17, 0x06, 0xdd, 0xc4, 0xa6,
1966 0x08, 0xf2, 0xcf, 0xc8, 0x79, 0xf0, 0x83, 0x84, 0x97, 0xf3, 0xd5, 0x98,
1967 0x33, 0x1c, 0x0d, 0xf2, 0x0c, 0x9e, 0x7d, 0xed, 0x54, 0x62, 0x23, 0x0e,
1968 0x51, 0xde, 0xe7, 0x12, 0x17, 0x39, 0x3f, 0x9d, 0xd4, 0xbf, 0xe8, 0x3b,
1969 0x5e, 0xd0, 0x75, 0x1f, 0x75, 0x5d, 0x87, 0x67, 0x12, 0x5f, 0xc4, 0x23,
1970 0x94, 0xff, 0xe1, 0x41, 0x23, 0x3a, 0x5f, 0x39, 0x49, 0xfc, 0x2e, 0xc5,
1971 0x69, 0xb6, 0x7d, 0x07, 0x33, 0xf7, 0x29, 0xe9, 0x2b, 0x25, 0xeb, 0xa5,
1972 0x0a, 0xde, 0x5a, 0x72, 0x12, 0x13, 0xfc, 0xef, 0x07, 0x83, 0xf2, 0x1c,
1973 0x5a, 0x35, 0xfb, 0x10, 0xfd, 0xf8, 0xed, 0xdc, 0xa4, 0x87, 0xbc, 0x6b,
1974 0x55, 0xf3, 0x49, 0xec, 0x4a, 0xcb, 0xb5, 0xf5, 0xe8, 0x1f, 0xbc, 0x00,
1975 0x47, 0xa8, 0x04, 0x77, 0x78, 0x9b, 0x69, 0xeb, 0x39, 0xec, 0xce, 0x34,
1976 0xcf, 0xc8, 0x73, 0xe2, 0xaa, 0x19, 0xf2, 0x4c, 0xd6, 0xa9, 0x44, 0x29,
1977 0xbe, 0xc3, 0x3a, 0x9b, 0x89, 0x15, 0xf9, 0x7b, 0x38, 0xe4, 0xfe, 0xc4,
1978 0xfa, 0x0c, 0xfb, 0x48, 0xd8, 0x6d, 0xcc, 0x50, 0x0e, 0xd0, 0x0f, 0xab,
1979 0x17, 0xcf, 0x50, 0x52, 0x69, 0xc9, 0x35, 0x5e, 0xc4, 0x13, 0x0f, 0xe4,
1980 0x75, 0x78, 0xc8, 0xdc, 0x88, 0x74, 0xa6, 0xba, 0xd0, 0xde, 0x4b, 0x85,
1981 0x7b, 0x6d, 0xf2, 0x3c, 0x88, 0x51, 0x78, 0x17, 0xc0, 0xe5, 0x7b, 0x6c,
1982 0xdf, 0xc8, 0x56, 0x91, 0xcf, 0x97, 0xd3, 0xd6, 0x4a, 0x62, 0x5e, 0xc6,
1983 0xf9, 0x8d, 0x8b, 0x34, 0xec, 0x5d, 0xfa, 0xd9, 0x5a, 0x54, 0x69, 0xce,
1984 0x5f, 0x35, 0xbf, 0xc8, 0x7e, 0xaa, 0x62, 0x35, 0x91, 0x47, 0xec, 0x7d,
1985 0x59, 0xa1, 0xa5, 0x33, 0x19, 0xe7, 0xe4, 0x5e, 0x75, 0x0c, 0xaf, 0x27,
1986 0x6a, 0x63, 0xb5, 0x91, 0x6a, 0xe6, 0xf6, 0x17, 0x30, 0x30, 0xea, 0x44,
1987 0x15, 0x79, 0x7c, 0x65, 0xb2, 0x16, 0x6e, 0x7b, 0x5d, 0xf1, 0x0a, 0xf2,
1988 0xa7, 0xb9, 0xe4, 0x48, 0x75, 0xa8, 0x26, 0x4f, 0xf2, 0x84, 0x2c, 0xeb,
1989 0xa7, 0x8b, 0x2d, 0xeb, 0x4a, 0x1e, 0x65, 0x3c, 0xce, 0x85, 0xc4, 0x4f,
1990 0xa3, 0x68, 0xb4, 0xfd, 0xd5, 0x40, 0x93, 0xfd, 0xdd, 0x4a, 0x5f, 0xef,
1991 0x0a, 0x2d, 0x9c, 0xf8, 0x62, 0xa8, 0x61, 0x62, 0x26, 0xd4, 0xe1, 0x59,
1992 0x70, 0xb0, 0xad, 0x8f, 0x2f, 0xb5, 0xd0, 0x6a, 0xca, 0xfb, 0x04, 0x84,
1993 0xa7, 0x6d, 0x24, 0x4f, 0xeb, 0x0f, 0x19, 0x13, 0x8f, 0xe2, 0x7a, 0xc6,
1994 0x5d, 0xf7, 0xb0, 0x8f, 0xfd, 0x48, 0xce, 0xef, 0xcc, 0xcd, 0x23, 0xff,
1995 0xbf, 0x7a, 0xb1, 0x70, 0xb6, 0x0e, 0x79, 0x97, 0x08, 0x3a, 0x26, 0x4e,
1996 0xe2, 0x26, 0x96, 0xf1, 0x0c, 0xbf, 0x84, 0x64, 0xf6, 0x47, 0x18, 0xc8,
1997 0x4a, 0x3c, 0xc9, 0xe1, 0x06, 0xb6, 0x5d, 0x3e, 0xdc, 0x46, 0xae, 0xba,
1998 0x06, 0x9b, 0x27, 0x2c, 0xac, 0x0a, 0x4d, 0x62, 0xd5, 0x04, 0x39, 0xf0,
1999 0x44, 0xd1, 0x5f, 0x85, 0xbf, 0xad, 0x81, 0x3c, 0x7f, 0xe6, 0x26, 0xb6,
2000 0xc8, 0xda, 0x9e, 0x4a, 0x3f, 0x6c, 0xa1, 0x7d, 0x3f, 0x9e, 0x8a, 0x63,
2001 0xc3, 0x84, 0x60, 0xee, 0x7d, 0xe8, 0x9d, 0x90, 0xb5, 0xe2, 0xaf, 0x84,
2002 0xe6, 0x4f, 0xfc, 0x08, 0x2d, 0x13, 0xe9, 0xd0, 0x82, 0x89, 0x31, 0xca,
2003 0x9d, 0xa0, 0x6c, 0x83, 0xa1, 0xfa, 0x89, 0x91, 0x50, 0x70, 0xe2, 0x40,
2004 0x28, 0x30, 0xd1, 0x8e, 0x9d, 0x13, 0xeb, 0xb0, 0x63, 0x62, 0x1b, 0xb6,
2005 0x4f, 0x08, 0x6e, 0x4f, 0x61, 0xe5, 0xc4, 0xab, 0x58, 0x31, 0xf1, 0x2c,
2006 0x5a, 0x27, 0xce, 0x62, 0xf9, 0xc4, 0x8b, 0x68, 0x9b, 0x78, 0x89, 0x63,
2007 0x91, 0xb5, 0x67, 0x59, 0x77, 0x2e, 0xde, 0xe7, 0x9b, 0xbe, 0x97, 0x5a,
2008 0xd6, 0x56, 0xe4, 0x59, 0x30, 0x99, 0x43, 0x17, 0xd6, 0x6a, 0xe7, 0xd0,
2009 0xb7, 0x5f, 0xde, 0xb5, 0xd6, 0xa8, 0xf5, 0x42, 0xee, 0xe1, 0xbe, 0x28,
2010 0xcf, 0x06, 0xd0, 0xc6, 0xa6, 0xef, 0x1b, 0xd6, 0xb5, 0xa9, 0x4b, 0xf7,
2011 0x3c, 0xe5, 0x99, 0x2c, 0x89, 0x3d, 0xe7, 0xd1, 0x93, 0xfd, 0x8d, 0x15,
2012 0xd5, 0xa4, 0xac, 0x3c, 0x2b, 0x26, 0xf6, 0x70, 0x0e, 0x0f, 0xed, 0x3f,
2013 0x4f, 0x0e, 0x35, 0x69, 0xaf, 0x1d, 0xbd, 0xbd, 0x40, 0xde, 0xd3, 0xe3,
2014 0x27, 0x36, 0x9d, 0x43, 0xea, 0x28, 0x30, 0x71, 0x50, 0xfc, 0x70, 0x23,
2015 0xfd, 0x70, 0x52, 0x7c, 0x32, 0x4e, 0x4c, 0xbe, 0xcd, 0x83, 0xfb, 0xc8,
2016 0x93, 0x4a, 0x90, 0x1b, 0x2b, 0xc7, 0xd3, 0x23, 0x71, 0x6b, 0x9e, 0x21,
2017 0xef, 0x2e, 0x31, 0x72, 0x57, 0x32, 0xee, 0xbf, 0xc4, 0x6b, 0x93, 0x83,
2018 0xf0, 0xfb, 0x8c, 0x80, 0x6f, 0x1e, 0xcf, 0x4f, 0xa7, 0x27, 0xc9, 0x71,
2019 0xba, 0x30, 0xc5, 0x6f, 0xc9, 0x89, 0x81, 0x5e, 0xa4, 0xd3, 0xa2, 0xcf,
2020 0x76, 0xea, 0x53, 0x70, 0x51, 0xef, 0x6a, 0x25, 0x1e, 0x5a, 0x8a, 0xe0,
2021 0xa1, 0x8a, 0x8a, 0x7d, 0xc2, 0x25, 0xec, 0x77, 0x9f, 0x98, 0x03, 0xca,
2022 0x8b, 0xf8, 0x0e, 0x73, 0x98, 0xf2, 0x7d, 0xe4, 0x43, 0xc4, 0xca, 0xaa,
2023 0x88, 0x62, 0xac, 0x0a, 0x9c, 0xc3, 0xd3, 0x63, 0x4e, 0xb8, 0x93, 0x4e,
2024 0x4c, 0x12, 0x27, 0x1d, 0x49, 0xd9, 0x3f, 0xa0, 0x51, 0x16, 0x59, 0xa7,
2025 0x3a, 0x8b, 0x9c, 0x7d, 0x7f, 0x4f, 0xee, 0xcf, 0x7c, 0xd7, 0xee, 0xc7,
2026 0x49, 0xd9, 0xfb, 0x88, 0xa5, 0x3d, 0xa9, 0xef, 0xa1, 0x35, 0xed, 0xb1,
2027 0x9f, 0xf3, 0xdb, 0x9d, 0x7a, 0x15, 0xa9, 0xfd, 0x75, 0xb8, 0xdd, 0x7e,
2028 0xd6, 0xcf, 0x84, 0x46, 0xbd, 0xdd, 0x32, 0x6e, 0x22, 0x7a, 0x78, 0x1d,
2029 0xd6, 0x1e, 0xfe, 0x24, 0x8f, 0x59, 0xb8, 0xe9, 0x70, 0x27, 0x6e, 0x1c,
2030 0x8f, 0xa3, 0x63, 0xbc, 0x8f, 0xc7, 0x7a, 0x7c, 0x6c, 0xa8, 0x1a, 0x99,
2031 0x90, 0xc6, 0x1c, 0x7f, 0x3d, 0x73, 0x7c, 0xe1, 0x67, 0x1b, 0xf0, 0x34,
2032 0x71, 0x27, 0x18, 0xda, 0x80, 0x49, 0xdb, 0x17, 0x65, 0x8f, 0xe5, 0x06,
2033 0x6c, 0x67, 0xfe, 0x3e, 0x8a, 0x0d, 0xe8, 0xe1, 0xb5, 0x21, 0x7b, 0x0e,
2034 0x4e, 0x62, 0x19, 0xf3, 0xb3, 0x77, 0xae, 0x39, 0x89, 0x0f, 0x1f, 0x92,
2035 0xbe, 0x2f, 0x20, 0xb5, 0x77, 0x23, 0xdb, 0xcc, 0xa1, 0x7d, 0xfc, 0x9f,
2036 0x71, 0xe3, 0x10, 0xee, 0xac, 0x46, 0x35, 0x9e, 0x0d, 0x05, 0x3a, 0x06,
2037 0x94, 0x7f, 0xb6, 0xdb, 0xde, 0x9e, 0xfa, 0x11, 0x76, 0xa5, 0xce, 0xe3,
2038 0xe1, 0xcc, 0x4b, 0xe8, 0x4f, 0x4d, 0x9f, 0x53, 0x99, 0xcb, 0x37, 0x19,
2039 0x0f, 0xbe, 0x8f, 0x23, 0x63, 0x53, 0xc4, 0xde, 0x57, 0x78, 0xbc, 0xff,
2040 0x7e, 0x7a, 0xfe, 0x39, 0xdc, 0xbc, 0xdd, 0x48, 0x3e, 0x55, 0xe4, 0x6f,
2041 0x71, 0xab, 0xda, 0xc8, 0xed, 0x9a, 0x03, 0x7d, 0x5b, 0x58, 0x95, 0xfb,
2042 0x81, 0x46, 0xec, 0x05, 0x45, 0x6f, 0xff, 0x96, 0xe2, 0x61, 0xae, 0x21,
2043 0xcf, 0x45, 0xea, 0xd1, 0x1b, 0xa8, 0xef, 0xb2, 0x07, 0xbe, 0x0f, 0xe7,
2044 0x03, 0x4e, 0x94, 0x26, 0x65, 0x2d, 0x47, 0xde, 0x2b, 0x23, 0xef, 0x30,
2045 0xc9, 0xe9, 0xa5, 0xf2, 0xae, 0x89, 0xe4, 0x24, 0x63, 0x7f, 0x6e, 0x61,
2046 0x09, 0xe4, 0x39, 0xec, 0xeb, 0xb0, 0x71, 0x30, 0x8a, 0x1e, 0x53, 0x9e,
2047 0x31, 0xca, 0x8f, 0x7f, 0x5e, 0xf3, 0xf7, 0xd1, 0xcb, 0xf8, 0xb3, 0x9e,
2048 0x98, 0x78, 0xbb, 0x7d, 0x6f, 0xf6, 0xfb, 0xe8, 0x1b, 0xf9, 0x47, 0xb7,
2049 0xf0, 0x9d, 0x3e, 0x53, 0x9e, 0xe3, 0xd6, 0xcd, 0xf7, 0xbe, 0xc3, 0x66,
2050 0xbe, 0xec, 0x69, 0xa3, 0x4d, 0xe4, 0x16, 0xba, 0xb0, 0xbd, 0x36, 0xff,
2051 0x1e, 0x95, 0x0f, 0x7a, 0xe7, 0xd0, 0x5f, 0xda, 0xef, 0x1c, 0x92, 0xfb,
2052 0xfa, 0xf2, 0xbe, 0xaa, 0x27, 0x12, 0xf2, 0x1e, 0x09, 0x75, 0x99, 0x0b,
2053 0xaa, 0xd7, 0x45, 0x5e, 0xf8, 0xaa, 0x39, 0x13, 0xbd, 0x5e, 0x0b, 0xd7,
2054 0x53, 0x96, 0x63, 0x4d, 0x1f, 0x63, 0xe6, 0x12, 0xef, 0x70, 0xd9, 0xef,
2055 0x26, 0x39, 0xff, 0xa9, 0x7f, 0xff, 0x6e, 0x92, 0x37, 0x89, 0x93, 0x0a,
2056 0x2a, 0x8d, 0x5b, 0xf0, 0x9c, 0x1d, 0x13, 0x14, 0x54, 0x34, 0xc8, 0xba,
2057 0xa8, 0x1f, 0xcf, 0x18, 0x8d, 0xfe, 0x1a, 0xb9, 0xdf, 0xa5, 0x9c, 0xb3,
2058 0xe2, 0xde, 0x3a, 0xc6, 0x97, 0xff, 0x68, 0x2f, 0xfe, 0xf3, 0xd8, 0xb9,
2059 0x37, 0x4c, 0xce, 0xe8, 0x95, 0x67, 0x23, 0x67, 0x14, 0x9f, 0xc5, 0xdc,
2060 0x91, 0x92, 0x3d, 0xec, 0x0c, 0x8a, 0xe5, 0x6f, 0xd2, 0xcf, 0xde, 0x94,
2061 0x3d, 0x58, 0xe4, 0x3c, 0x7f, 0x85, 0x60, 0xcd, 0x8c, 0xfc, 0x73, 0x52,
2062 0xf6, 0x5e, 0x5f, 0x59, 0x0f, 0xd8, 0x5e, 0x78, 0xef, 0xa2, 0x94, 0x95,
2063 0x7a, 0x6f, 0xda, 0x6b, 0xc2, 0x2e, 0xe3, 0x37, 0xd6, 0x6b, 0xde, 0x5a,
2064 0x96, 0xfd, 0x45, 0xe1, 0xff, 0xf3, 0xe2, 0x33, 0x66, 0x14, 0x72, 0x4d,
2065 0xea, 0x88, 0xae, 0x2e, 0xd7, 0xe9, 0x4d, 0x39, 0x88, 0x7b, 0x67, 0xad,
2066 0x6e, 0xaf, 0x8c, 0x61, 0xec, 0x7d, 0x75, 0x54, 0xfb, 0x1d, 0x84, 0x79,
2067 0xfd, 0x8a, 0x3c, 0xff, 0xbe, 0x4f, 0x59, 0x3f, 0x2e, 0x31, 0x2a, 0x70,
2068 0xae, 0x26, 0xbf, 0xae, 0x73, 0x59, 0xc6, 0x47, 0xbc, 0xb2, 0xef, 0xaf,
2069 0xd4, 0x3e, 0xb7, 0xfb, 0x35, 0x2f, 0xd7, 0xfb, 0x46, 0x61, 0xbc, 0xb5,
2070 0xf6, 0xb3, 0x4a, 0x0f, 0xda, 0xbc, 0xc6, 0x31, 0x6d, 0xdc, 0xcb, 0xbc,
2071 0xef, 0xed, 0x67, 0xa4, 0xd0, 0xaf, 0x6a, 0x3f, 0xef, 0x75, 0xb9, 0x0f,
2072 0x91, 0xeb, 0xa9, 0x42, 0x1d, 0x3d, 0x1c, 0xb5, 0xfb, 0x57, 0x99, 0xbf,
2073 0x15, 0xfb, 0xa4, 0x3f, 0x2d, 0x2e, 0xb6, 0x31, 0x29, 0xf6, 0xd5, 0x5d,
2074 0xca, 0xd8, 0x74, 0xae, 0xf9, 0x3e, 0x6c, 0x4f, 0x88, 0x9e, 0xe5, 0x1d,
2075 0x95, 0xc4, 0x60, 0x9b, 0x6b, 0xb9, 0xe8, 0x6f, 0x4b, 0x91, 0xd6, 0xe2,
2076 0x38, 0xd4, 0x24, 0xcf, 0xe6, 0xb9, 0x68, 0xd3, 0x71, 0x94, 0x91, 0xdb,
2077 0x46, 0x79, 0x4d, 0xf6, 0xb4, 0x1c, 0x31, 0xf5, 0xe8, 0x13, 0xf8, 0x12,
2078 0x1c, 0x57, 0xd9, 0xeb, 0x5f, 0x6d, 0x69, 0xc8, 0x75, 0x93, 0xb9, 0xc9,
2079 0xf4, 0x15, 0x83, 0x32, 0xda, 0x8e, 0xbd, 0x17, 0xdb, 0x94, 0x67, 0xf7,
2080 0x06, 0x12, 0xf2, 0x0c, 0x59, 0x63, 0x8c, 0xfc, 0x10, 0xcf, 0x65, 0x64,
2081 0xff, 0xc3, 0x6f, 0xad, 0xf8, 0x4c, 0xd9, 0x67, 0x39, 0xbd, 0x4e, 0x09,
2082 0x71, 0x29, 0x10, 0xae, 0x52, 0x8a, 0xcf, 0x91, 0x5d, 0xfe, 0xdc, 0x44,
2083 0x9b, 0x39, 0x6f, 0x3f, 0xfb, 0x27, 0x67, 0x11, 0xb4, 0xa4, 0xe4, 0x5d,
2084 0x8c, 0xfa, 0xe4, 0x2a, 0x34, 0xe6, 0xea, 0x1d, 0xce, 0x02, 0xff, 0x08,
2085 0x63, 0x0d, 0xed, 0x66, 0x47, 0x20, 0x6c, 0x3f, 0xe3, 0x26, 0xef, 0xdc,
2086 0x78, 0x18, 0x7a, 0xe7, 0x1b, 0x2c, 0xff, 0xb1, 0xec, 0xf3, 0x56, 0xda,
2087 0x2b, 0x63, 0x2a, 0xfa, 0xb8, 0xbc, 0xdb, 0x87, 0x7a, 0x8c, 0x88, 0x7f,
2088 0x78, 0x50, 0x13, 0x09, 0xd3, 0x0f, 0x25, 0x7e, 0xcb, 0xf3, 0x71, 0xfa,
2089 0x01, 0xc9, 0xab, 0x5a, 0xb2, 0xf2, 0xfc, 0xb7, 0xec, 0x9b, 0xd6, 0xfd,
2090 0x6b, 0x1d, 0xc1, 0xc2, 0xfe, 0xe5, 0x62, 0xbc, 0xb7, 0xbc, 0x85, 0xbd,
2091 0xd5, 0xee, 0x79, 0x8c, 0x6f, 0x96, 0xbd, 0x6f, 0x60, 0xa3, 0x8d, 0x0d,
2092 0x9a, 0xa1, 0x1f, 0xfb, 0xa5, 0xa3, 0x1b, 0x8f, 0x2d, 0x32, 0xba, 0x8e,
2093 0xab, 0xb9, 0xb4, 0x8f, 0x38, 0x71, 0xad, 0x23, 0x3a, 0xc4, 0x6f, 0xff,
2094 0x77, 0x89, 0xcd, 0x37, 0xd9, 0x75, 0xf5, 0xe0, 0x3a, 0xb5, 0xf8, 0x6c,
2095 0xb5, 0x3c, 0x73, 0xa1, 0x77, 0x7c, 0x43, 0xe9, 0xc6, 0xd6, 0x90, 0xd1,
2096 0xbe, 0x4d, 0xd1, 0xdb, 0xbe, 0xac, 0xe8, 0xfe, 0x90, 0x22, 0xe5, 0xec,
2097 0x77, 0xe8, 0x5c, 0x8a, 0x9d, 0x2e, 0xf6, 0x71, 0x38, 0xa1, 0x87, 0x67,
2098 0xb0, 0xec, 0x39, 0xd3, 0xf0, 0x5d, 0x60, 0x9b, 0x3f, 0xe4, 0x31, 0x84,
2099 0x20, 0x96, 0xdb, 0xed, 0x46, 0x17, 0xba, 0xec, 0xf7, 0xa4, 0x76, 0x30,
2100 0x26, 0xc8, 0xfb, 0xb0, 0x62, 0xd0, 0x92, 0x75, 0x34, 0x31, 0xbd, 0xff,
2101 0x66, 0x48, 0x4e, 0xdd, 0xc3, 0x80, 0xed, 0x81, 0x37, 0xd2, 0x8d, 0x86,
2102 0x45, 0x86, 0x6f, 0x89, 0x6a, 0xd7, 0x0f, 0xca, 0xfb, 0x81, 0x96, 0x73,
2103 0x9c, 0x23, 0x90, 0x36, 0x72, 0x96, 0xd6, 0x50, 0x6d, 0xd7, 0x59, 0xa4,
2104 0x7e, 0x14, 0xae, 0x0f, 0xfd, 0xca, 0x4a, 0x6b, 0xd0, 0x6a, 0x0d, 0xa9,
2105 0x13, 0x1f, 0xd2, 0xf0, 0x1f, 0xd5, 0x13, 0x5c, 0xf9, 0xa5, 0x85, 0x59,
2106 0x52, 0x4f, 0xf6, 0xac, 0x7d, 0x1a, 0x77, 0x0d, 0xc8, 0x7b, 0x22, 0xc4,
2107 0x1f, 0xf5, 0xe8, 0x17, 0xc8, 0x35, 0xcb, 0xed, 0xf7, 0x6f, 0x49, 0x2c,
2108 0x59, 0x4f, 0x3c, 0xeb, 0x86, 0x16, 0xd2, 0xfb, 0xaf, 0x50, 0xe5, 0x1d,
2109 0x43, 0x8f, 0xc9, 0xbe, 0x9d, 0x03, 0x0b, 0xd4, 0xfc, 0xfe, 0x9e, 0xd8,
2110 0x1f, 0x7d, 0x5f, 0x11, 0xfb, 0x2a, 0x97, 0xf7, 0x15, 0xd5, 0xd9, 0xcf,
2111 0xa7, 0xac, 0x4f, 0x38, 0x0a, 0xfb, 0x15, 0x2f, 0xbf, 0xc7, 0x73, 0x23,
2112 0x79, 0xfd, 0x26, 0x79, 0x67, 0x1f, 0xc7, 0xba, 0x39, 0x21, 0x4b, 0x5a,
2113 0xff, 0x0f, 0xdd, 0x0f, 0x6b, 0xf2, 0xd0, 0x56, 0x00, 0x00, 0x00 };
2114
2115static const u32 bnx2_CP_b06FwData[(0x84/4) + 1] = {
2116 0x00000000, 0x0000001b, 0x0000000f, 0x0000000a, 0x00000008, 0x00000006,
2117 0x00000005, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000003,
2118 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000002,
2119 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
2120 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
2121 0x00000001, 0x00000001, 0x00000001, 0x00000000 };
2122static const u32 bnx2_CP_b06FwRodata[(0x134/4) + 1] = {
2123 0x08000f30, 0x08000d88, 0x08000fc4, 0x0800106c, 0x08000f58, 0x08000f98,
2124 0x080011a4, 0x08000da4, 0x080011c8, 0x08000df4, 0x08001498, 0x08001440,
2125 0x08000da4, 0x08000da4, 0x08000da4, 0x08001254, 0x08001254, 0x08000da4,
2126 0x08000da4, 0x080016e0, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4,
2127 0x080013d4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4,
2128 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4,
2129 0x08000da4, 0x08000da4, 0x08000da4, 0x08000fb8, 0x08000da4, 0x08000da4,
2130 0x08001690, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4,
2131 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4,
2132 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4,
2133 0x080015bc, 0x08000da4, 0x08000da4, 0x08001348, 0x080012b8, 0x08002e50,
2134 0x08002e58, 0x08002e20, 0x08002e2c, 0x08002e38, 0x08002e44, 0x0800532c,
2135 0x080052ec, 0x080052b8, 0x0800528c, 0x08005268, 0x08005224, 0x00000000
2136};
2137
2138static struct fw_info bnx2_cp_fw_06 = {
2139 /* Firmware version: 4.6.16 */
2140 .ver_major = 0x4,
2141 .ver_minor = 0x6,
2142 .ver_fix = 0x10,
2143
2144 .start_addr = 0x08000080,
2145
2146 .text_addr = 0x08000000,
2147 .text_len = 0x56cc,
2148 .text_index = 0x0,
2149 .gz_text = bnx2_CP_b06FwText,
2150 .gz_text_len = sizeof(bnx2_CP_b06FwText),
2151
2152 .data_addr = 0x08005820,
2153 .data_len = 0x84,
2154 .data_index = 0x0,
2155 .data = bnx2_CP_b06FwData,
2156
2157 .sbss_addr = 0x080058a4,
2158 .sbss_len = 0xf1,
2159 .sbss_index = 0x0,
2160
2161 .bss_addr = 0x08005998,
2162 .bss_len = 0x5d8,
2163 .bss_index = 0x0,
2164
2165 .rodata_addr = 0x080056cc,
2166 .rodata_len = 0x134,
2167 .rodata_index = 0x0,
2168 .rodata = bnx2_CP_b06FwRodata,
2169};
2170
2171/* Initialized Values the Command Processor. */ 26/* Initialized Values the Command Processor. */
2172static const struct cpu_reg cpu_reg_cp = { 27static const struct cpu_reg cpu_reg_cp = {
2173 .mode = BNX2_CP_CPU_MODE, 28 .mode = BNX2_CP_CPU_MODE,
@@ -2184,771 +39,6 @@ static const struct cpu_reg cpu_reg_cp = {
2184 .mips_view_base = 0x8000000, 39 .mips_view_base = 0x8000000,
2185}; 40};
2186 41
2187static u8 bnx2_RXP_b06FwText[] = {
2188 0xec, 0x5b, 0x5d, 0x6c, 0x1c, 0xd7, 0x75, 0x3e, 0x33, 0x3b, 0x24, 0x57,
2189 0x14, 0x45, 0x8e, 0xa8, 0x15, 0xb5, 0xb2, 0x99, 0x64, 0x97, 0x1c, 0x89,
2190 0x1b, 0x93, 0x50, 0x86, 0xec, 0x5a, 0x66, 0x92, 0x45, 0xbc, 0x59, 0x52,
2191 0x16, 0x53, 0x08, 0xf0, 0xda, 0x56, 0x5c, 0xa3, 0x31, 0x90, 0xc5, 0x92,
2192 0x76, 0xd2, 0x37, 0xc9, 0xa9, 0x5d, 0x21, 0xb1, 0xab, 0xf5, 0x92, 0x91,
2193 0x15, 0x75, 0xc5, 0x61, 0x24, 0x26, 0x72, 0x1b, 0xb7, 0xa0, 0xf9, 0x23,
2194 0xaa, 0xc1, 0x4a, 0xe3, 0x9f, 0xd8, 0xf5, 0x43, 0x64, 0x31, 0xb2, 0xad,
2195 0xfa, 0xa5, 0x80, 0xd3, 0x1f, 0xc0, 0x28, 0x8c, 0x56, 0x90, 0x6b, 0xd9,
2196 0x68, 0x81, 0x42, 0x6d, 0x51, 0xd4, 0x6d, 0x64, 0x4d, 0xbf, 0xef, 0xce,
2197 0x0c, 0xb9, 0x22, 0x94, 0xc6, 0x2f, 0x7d, 0x9b, 0x0b, 0x2c, 0xee, 0xdc,
2198 0x3b, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0xe7, 0xf7, 0x0e, 0xf9, 0x44, 0x9b,
2199 0xb4, 0x4a, 0xd0, 0x36, 0xe1, 0x97, 0x3d, 0x70, 0xe8, 0xb1, 0xc1, 0x5d,
2200 0xbb, 0x77, 0xe1, 0x71, 0x77, 0xcc, 0x6c, 0x36, 0x38, 0xaf, 0x49, 0xd4,
2201 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2,
2202 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16,
2203 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5,
2204 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8,
2205 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45,
2206 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xfe, 0x3f, 0x5a, 0x4c, 0xc4, 0x64,
2207 0xbf, 0x29, 0xf8, 0x49, 0x5c, 0xcf, 0xa5, 0x0e, 0x16, 0x2c, 0x89, 0xc7,
2208 0x72, 0x6f, 0x3f, 0x3e, 0x6e, 0x89, 0xe4, 0xeb, 0xfd, 0xa9, 0x11, 0xf9,
2209 0xc4, 0xab, 0x24, 0x0c, 0xe1, 0xfc, 0x67, 0x72, 0xd7, 0x0f, 0x9f, 0xbf,
2210 0x2b, 0x7d, 0x6d, 0x2e, 0x26, 0x71, 0x33, 0xf7, 0xee, 0xa0, 0xb9, 0x53,
2211 0xe2, 0xdd, 0x58, 0xf3, 0x5c, 0xdf, 0xc4, 0x66, 0x69, 0x0f, 0x71, 0x79,
2212 0xde, 0x92, 0xed, 0xc9, 0x25, 0xbb, 0xa2, 0x8d, 0xf4, 0xbd, 0xa6, 0x15,
2213 0x9c, 0x1b, 0x5e, 0xde, 0xd0, 0x45, 0x07, 0xbe, 0x89, 0x7a, 0x5c, 0x1e,
2214 0x59, 0x6c, 0x95, 0x47, 0xe7, 0x36, 0x4a, 0x79, 0x4e, 0x4c, 0x3d, 0x97,
2215 0x94, 0x6f, 0x61, 0xee, 0x72, 0x0c, 0x70, 0xae, 0x94, 0x62, 0xb9, 0x8f,
2216 0xef, 0x2d, 0xd7, 0x08, 0x2f, 0xba, 0x9e, 0x5b, 0xb9, 0x77, 0xa2, 0xfe,
2217 0xe6, 0xbd, 0xe5, 0x3a, 0xe1, 0x08, 0x83, 0x77, 0xf5, 0x8f, 0xbc, 0xf3,
2218 0x7d, 0x09, 0xb9, 0xe0, 0x9a, 0xf2, 0x82, 0xfb, 0x32, 0xf6, 0x4c, 0x57,
2219 0x2a, 0xd2, 0x24, 0xe5, 0x93, 0x37, 0xbc, 0x98, 0x95, 0x4e, 0x61, 0x13,
2220 0x73, 0x44, 0xf0, 0xde, 0xc1, 0x7b, 0x07, 0xf3, 0x0b, 0x3f, 0xdf, 0x2c,
2221 0xad, 0x49, 0x39, 0xdf, 0xc7, 0x75, 0x5c, 0xc3, 0xb5, 0x8b, 0xed, 0xfe,
2222 0x3a, 0xc1, 0xba, 0xa2, 0xc4, 0x2c, 0x4f, 0x0a, 0xb6, 0x21, 0x23, 0x09,
2223 0xd1, 0x74, 0xab, 0x02, 0x3a, 0x7e, 0xd1, 0x26, 0xad, 0xc4, 0x55, 0xd1,
2224 0xf2, 0x2e, 0xfb, 0x10, 0xdf, 0x53, 0x1d, 0x3e, 0xae, 0x67, 0x81, 0xab,
2225 0x24, 0xaf, 0xbb, 0x0f, 0xcb, 0x5f, 0xb8, 0x63, 0xf2, 0x92, 0x3b, 0x01,
2226 0x9c, 0x0f, 0xc9, 0xab, 0xee, 0x7e, 0x79, 0xc5, 0x2d, 0xca, 0xcf, 0xdc,
2227 0x7d, 0xf2, 0xb2, 0x3b, 0x2a, 0x2f, 0xba, 0x79, 0xec, 0x97, 0xd1, 0x8a,
2228 0xce, 0xdd, 0x32, 0x7e, 0x92, 0x34, 0xa6, 0xaf, 0x41, 0x36, 0xf2, 0x98,
2229 0xdd, 0x67, 0xea, 0xa2, 0x61, 0xcf, 0xf4, 0x6b, 0x22, 0x8f, 0x4a, 0x3e,
2230 0x31, 0x2c, 0x73, 0x6e, 0x97, 0x56, 0x38, 0xd9, 0xa9, 0x8d, 0x9c, 0x24,
2231 0x2d, 0x9e, 0x8c, 0xdb, 0xe9, 0x54, 0x21, 0x96, 0x36, 0x47, 0x62, 0x92,
2232 0xdf, 0x03, 0xb9, 0x55, 0x9d, 0xa4, 0xe4, 0x4d, 0xc9, 0x1f, 0xb5, 0x0c,
2233 0xc8, 0x53, 0x93, 0x58, 0x8e, 0x7c, 0x6e, 0xe1, 0x1c, 0x5a, 0x9b, 0x2c,
2234 0xd4, 0x6c, 0x29, 0x3b, 0xf3, 0x5a, 0x39, 0xa1, 0x51, 0x04, 0x18, 0x0f,
2235 0x60, 0xfc, 0x67, 0xc1, 0xf8, 0x4b, 0x52, 0x3e, 0x25, 0xf9, 0xc9, 0x59,
2236 0xcf, 0x2b, 0xd8, 0x7f, 0x1c, 0xcc, 0x0d, 0x63, 0x4e, 0x97, 0xd8, 0x8f,
2237 0x38, 0x37, 0x1b, 0xcc, 0x51, 0x1e, 0x9e, 0x8c, 0xd8, 0x14, 0x23, 0xe8,
2238 0x35, 0x8b, 0xe8, 0x9b, 0xd1, 0x73, 0x8f, 0x8d, 0x9b, 0xfc, 0xff, 0x03,
2239 0xe2, 0xf9, 0x26, 0xf0, 0x6c, 0x83, 0x66, 0x89, 0x7f, 0x36, 0x77, 0xf4,
2240 0xe0, 0x3f, 0xf4, 0xad, 0x8d, 0xf5, 0xdc, 0x7b, 0x52, 0xa8, 0x69, 0x4a,
2241 0x57, 0x34, 0x3c, 0xf7, 0xd4, 0x9f, 0xea, 0xf4, 0xf5, 0xc2, 0x69, 0x97,
2242 0x56, 0xc8, 0xc9, 0x21, 0xfd, 0x29, 0xd0, 0xbf, 0x49, 0xb6, 0xfc, 0x90,
2243 0x3c, 0xf4, 0xa7, 0x74, 0xc9, 0xa7, 0x0d, 0xb1, 0x65, 0xd1, 0x35, 0xb4,
2244 0x11, 0x27, 0x2f, 0x7a, 0xce, 0x4a, 0x96, 0x45, 0x97, 0x52, 0x22, 0x2f,
2245 0xcf, 0x64, 0xd3, 0xc3, 0x15, 0x49, 0x49, 0x79, 0xc8, 0x96, 0x65, 0x17,
2246 0x90, 0x89, 0x8a, 0x5c, 0xcd, 0xa6, 0xed, 0xcb, 0xb2, 0x51, 0x56, 0x4c,
2247 0x5b, 0x4e, 0xbb, 0x71, 0x79, 0xeb, 0xe4, 0x3e, 0xf9, 0x96, 0xc3, 0x73,
2248 0x92, 0xfe, 0x26, 0x79, 0x5a, 0x96, 0xb2, 0x4f, 0x5f, 0x5b, 0xb2, 0x8f,
2249 0xb7, 0x49, 0x3b, 0x75, 0xb0, 0xd6, 0xee, 0xd3, 0xfd, 0x15, 0xf0, 0x96,
2250 0x87, 0x6c, 0xdb, 0x21, 0x33, 0x43, 0xf1, 0x55, 0x78, 0xb0, 0x13, 0x3d,
2251 0xd7, 0xfd, 0xfd, 0x16, 0xe8, 0x83, 0x2d, 0x5a, 0x48, 0x63, 0x93, 0x14,
2252 0xba, 0xb8, 0xe6, 0x25, 0xe0, 0xc0, 0xfb, 0x55, 0xda, 0x6f, 0xd3, 0x0a,
2253 0xa7, 0xda, 0xc5, 0xf8, 0xd1, 0x9d, 0x38, 0x4f, 0x43, 0x1e, 0x19, 0xf2,
2254 0xbc, 0xaf, 0xdb, 0x46, 0x6a, 0x42, 0x72, 0xa4, 0x5d, 0x36, 0x1f, 0xdf,
2255 0x2a, 0x73, 0x66, 0x5c, 0x12, 0xc7, 0xc3, 0xbd, 0x5a, 0x82, 0xf3, 0xf9,
2256 0x32, 0xf1, 0xa7, 0x52, 0xfa, 0xa6, 0x60, 0x1c, 0xd2, 0x34, 0x8a, 0x33,
2257 0xea, 0x35, 0x7b, 0xf4, 0x21, 0x2d, 0xaf, 0xfe, 0x8f, 0x6a, 0x2c, 0x18,
2258 0xef, 0xd2, 0xbe, 0x6a, 0x74, 0x89, 0x61, 0xcd, 0x43, 0xae, 0x86, 0x5c,
2259 0x74, 0xc2, 0xf9, 0xb8, 0xf8, 0x70, 0x94, 0xb3, 0x0c, 0xae, 0xc9, 0x59,
2260 0x06, 0x7b, 0xea, 0x4f, 0x07, 0x38, 0xf3, 0x01, 0xec, 0x06, 0xc9, 0x27,
2261 0xdb, 0x78, 0xa6, 0x01, 0xec, 0x75, 0xf9, 0xce, 0x50, 0xfa, 0x0c, 0xff,
2262 0x57, 0x6b, 0x6d, 0x0d, 0xdf, 0xdb, 0x32, 0xef, 0xaa, 0x35, 0xc9, 0xfb,
2263 0x70, 0xb6, 0xa5, 0xe4, 0x1d, 0xe6, 0x82, 0x1e, 0xd3, 0xf2, 0x09, 0xe2,
2264 0x6a, 0x96, 0xc7, 0x13, 0xbd, 0x18, 0x6b, 0x52, 0xfe, 0x12, 0xf5, 0xf5,
2265 0x13, 0xf1, 0xe7, 0x39, 0x97, 0x3e, 0xda, 0xab, 0x1f, 0x03, 0x7d, 0x94,
2266 0x41, 0x3a, 0x29, 0x10, 0x7e, 0x79, 0xe8, 0x36, 0xf0, 0x67, 0xa2, 0x0f,
2267 0xf9, 0xdf, 0x2c, 0xf9, 0x22, 0xe9, 0x57, 0x76, 0x0a, 0x39, 0x27, 0xb1,
2268 0xdf, 0xdd, 0xb0, 0xc9, 0xf5, 0xf6, 0x0a, 0x1b, 0x6d, 0xa7, 0xad, 0x7e,
2269 0x11, 0x3c, 0xa7, 0x33, 0x22, 0x16, 0xe4, 0x95, 0x94, 0x66, 0x6b, 0x1a,
2270 0x3c, 0x51, 0x2f, 0xb7, 0x61, 0x7e, 0xc3, 0xc7, 0x79, 0xc5, 0x7a, 0x38,
2271 0xf7, 0x41, 0x20, 0xcb, 0x7d, 0x32, 0xe1, 0xec, 0x57, 0x3c, 0x57, 0xf5,
2272 0xcb, 0x92, 0xef, 0xee, 0x35, 0xa7, 0x40, 0x6f, 0xc1, 0x48, 0xcf, 0x55,
2273 0x24, 0x29, 0x0b, 0xf0, 0x13, 0x2f, 0xc2, 0xe6, 0x5f, 0x71, 0x53, 0xb0,
2274 0xaf, 0xbc, 0x3c, 0xea, 0xe4, 0x64, 0xe2, 0x14, 0x6d, 0x2c, 0x9d, 0x29,
2275 0xc4, 0x72, 0x32, 0xef, 0xa4, 0x33, 0x0b, 0xd0, 0xbd, 0x05, 0xc7, 0xf3,
2276 0xa6, 0xec, 0xfe, 0xd4, 0x28, 0x30, 0x5e, 0x74, 0x76, 0x24, 0x27, 0x20,
2277 0xc8, 0x25, 0x2b, 0x25, 0x4b, 0x6e, 0x06, 0x3a, 0x86, 0xf7, 0xae, 0x85,
2278 0x7e, 0x00, 0x3a, 0x9e, 0x85, 0x7d, 0x93, 0x16, 0x53, 0x16, 0xfb, 0x20,
2279 0x3b, 0x47, 0x07, 0x2e, 0x4d, 0xf2, 0xfb, 0x6f, 0x40, 0xbe, 0x21, 0xdf,
2280 0x77, 0x81, 0xb6, 0x04, 0x70, 0x92, 0xae, 0xdb, 0xa4, 0xda, 0x05, 0xf9,
2281 0x0d, 0x25, 0x94, 0x5d, 0x16, 0x3a, 0xb7, 0x4a, 0xe1, 0x8e, 0x66, 0xbc,
2282 0xef, 0xc2, 0x98, 0xf2, 0x6f, 0xc1, 0x1c, 0xdf, 0xff, 0x4b, 0x60, 0x5f,
2283 0x4d, 0xeb, 0xc6, 0x57, 0xd1, 0xb7, 0xcb, 0x36, 0x8b, 0xbd, 0x89, 0xfe,
2284 0x9f, 0xd1, 0x77, 0xa2, 0xef, 0xc5, 0x5e, 0xe7, 0x21, 0x43, 0xca, 0x0f,
2285 0xcf, 0x0b, 0x5c, 0xb3, 0x3d, 0xd8, 0x97, 0x78, 0xdb, 0x81, 0x67, 0x53,
2286 0xb0, 0x57, 0x3b, 0xc6, 0xad, 0xc1, 0x5e, 0x16, 0x68, 0x8e, 0x29, 0x19,
2287 0x16, 0xac, 0xf8, 0xba, 0xb1, 0x86, 0x3e, 0x0e, 0xdc, 0x84, 0xd7, 0xe5,
2288 0x4a, 0x57, 0x17, 0x9e, 0xb9, 0x27, 0x61, 0xf8, 0x1e, 0xbd, 0x4b, 0xfc,
2289 0x1c, 0xe7, 0xe5, 0x09, 0x07, 0xfe, 0x89, 0xfa, 0xe6, 0x52, 0x8e, 0xbb,
2290 0x65, 0x02, 0xbc, 0x8f, 0x3b, 0xe9, 0x99, 0xaa, 0xee, 0x79, 0x7a, 0xd6,
2291 0x30, 0xab, 0x92, 0x86, 0x1d, 0x8f, 0xc9, 0x38, 0xe4, 0x77, 0xda, 0x89,
2292 0xcb, 0x45, 0x65, 0x7b, 0xe4, 0xe9, 0x21, 0xc8, 0x05, 0xf1, 0xa4, 0x8b,
2293 0xf6, 0x49, 0x9b, 0x82, 0xfc, 0x8a, 0xa6, 0x5c, 0xca, 0xd2, 0x96, 0xb3,
2294 0xb2, 0xbc, 0x6a, 0xcb, 0x15, 0xd8, 0x32, 0xed, 0xb8, 0x02, 0x7b, 0xf6,
2295 0xf5, 0xfa, 0x41, 0xd9, 0x06, 0xbd, 0x4e, 0x62, 0x3f, 0xea, 0xf5, 0xb3,
2296 0xd0, 0x6b, 0xc8, 0xd4, 0x86, 0xae, 0x9b, 0xd4, 0x89, 0x6f, 0xc3, 0xa7,
2297 0x81, 0xdf, 0x44, 0xf0, 0xbc, 0xfc, 0x5d, 0x29, 0x9c, 0x6a, 0x05, 0xdd,
2298 0x7b, 0xdb, 0x29, 0xb3, 0xf2, 0x32, 0x7f, 0xa1, 0x2e, 0x3e, 0x05, 0xf9,
2299 0xc1, 0x8f, 0x2a, 0x1d, 0x04, 0x6f, 0xd9, 0x3d, 0x80, 0x19, 0xc6, 0x39,
2300 0xb7, 0x02, 0x3f, 0x69, 0xbc, 0x15, 0x1c, 0xdf, 0x83, 0xee, 0x2c, 0xf5,
2301 0x15, 0xf3, 0x0b, 0xe1, 0x79, 0xb7, 0xa9, 0x3d, 0xcb, 0x43, 0xad, 0x01,
2302 0x7f, 0x94, 0x03, 0xf5, 0x3e, 0x09, 0xbd, 0xd5, 0x64, 0x5c, 0xe9, 0x6e,
2303 0x5e, 0xc9, 0x61, 0xde, 0xa1, 0xfe, 0x02, 0x87, 0x4d, 0x19, 0x98, 0x72,
2304 0xbf, 0x82, 0x4f, 0xae, 0xd9, 0x77, 0x37, 0x69, 0xe7, 0x78, 0x83, 0xf4,
2305 0x28, 0x1f, 0xd4, 0x1d, 0xe8, 0x76, 0x13, 0x6c, 0x9f, 0xef, 0x1e, 0x92,
2306 0xc7, 0xdc, 0x61, 0x9c, 0x43, 0x52, 0x0e, 0xba, 0xdd, 0xf2, 0xfb, 0xee,
2307 0x46, 0xb9, 0xdc, 0x09, 0xba, 0x56, 0x6d, 0xec, 0x6e, 0xf9, 0x03, 0xc6,
2308 0x3c, 0xf5, 0x0c, 0x3f, 0xa9, 0xdf, 0x05, 0x1a, 0x68, 0x4f, 0xb4, 0x2b,
2309 0xc2, 0xc5, 0xa4, 0xa4, 0xf6, 0xfc, 0x89, 0xef, 0xdb, 0x80, 0x77, 0xae,
2310 0x93, 0xf6, 0x4b, 0xda, 0x8c, 0xc0, 0x66, 0xd3, 0x66, 0x49, 0xc8, 0x33,
2311 0x69, 0xe5, 0x73, 0xa3, 0x2c, 0xd8, 0x37, 0xca, 0x20, 0xc4, 0x13, 0xda,
2312 0xe5, 0xa8, 0xe4, 0x5d, 0xf6, 0xf4, 0x97, 0x88, 0x91, 0x0e, 0x62, 0xa4,
2313 0x83, 0xd8, 0x08, 0x5b, 0x78, 0xc5, 0x41, 0x6c, 0x74, 0x10, 0x1b, 0xe1,
2314 0xcf, 0x5e, 0x72, 0x10, 0x1f, 0xa1, 0x43, 0x2f, 0x38, 0x8c, 0xeb, 0xdf,
2315 0x46, 0x4c, 0x35, 0xe4, 0x99, 0x9a, 0xc8, 0x91, 0x5a, 0x1a, 0xd4, 0xa5,
2316 0x87, 0x3f, 0x90, 0xfe, 0xcc, 0x07, 0x92, 0xb6, 0x2f, 0xe2, 0xf7, 0x96,
2317 0xe0, 0x9d, 0xca, 0x11, 0xf0, 0xbe, 0x1e, 0xe6, 0x13, 0x38, 0x7f, 0x8b,
2318 0x39, 0x83, 0x3f, 0x0f, 0x97, 0x88, 0xb8, 0x41, 0x9b, 0x1e, 0x93, 0xf9,
2319 0x59, 0xda, 0xf2, 0xed, 0x38, 0x8b, 0x4e, 0x99, 0xb2, 0xfc, 0x71, 0xc1,
2320 0xbe, 0xc3, 0x1c, 0xa5, 0xee, 0x98, 0x31, 0xd0, 0x76, 0x1b, 0x7e, 0x29,
2321 0xc4, 0xda, 0x3f, 0xd2, 0x0a, 0x0b, 0x71, 0xc4, 0x56, 0xc6, 0x5b, 0xc9,
2322 0xfb, 0x7a, 0x74, 0xc3, 0x1b, 0x5f, 0x5d, 0xd3, 0x0f, 0xfd, 0x86, 0xdc,
2323 0x13, 0x09, 0xc0, 0xcc, 0x6a, 0x23, 0xcb, 0x6f, 0xfb, 0x76, 0x92, 0xe5,
2324 0xf8, 0x46, 0x60, 0x7b, 0xdc, 0x1f, 0x63, 0x97, 0x78, 0xf9, 0x4c, 0x9c,
2325 0x97, 0x91, 0x1f, 0x24, 0x91, 0x17, 0x24, 0xe0, 0x7b, 0x98, 0x73, 0x74,
2326 0x23, 0x3f, 0xf0, 0xbc, 0x17, 0x6d, 0xcf, 0x7b, 0x07, 0xbf, 0x7f, 0xb7,
2327 0x57, 0x79, 0x40, 0xab, 0x68, 0xa3, 0x6e, 0x4a, 0x46, 0xdd, 0x9f, 0xb6,
2328 0xfb, 0x72, 0x8c, 0xcb, 0xa4, 0x93, 0x90, 0x29, 0xa7, 0xa6, 0xdd, 0xb7,
2329 0x3c, 0xad, 0x15, 0x97, 0x67, 0xb0, 0xaf, 0x81, 0x39, 0xa9, 0x54, 0xed,
2330 0x33, 0xda, 0x88, 0x7b, 0x54, 0xbb, 0x7f, 0xb9, 0x5d, 0xd9, 0x79, 0xd5,
2331 0x61, 0xce, 0x70, 0x5d, 0xe5, 0x2e, 0x05, 0x2b, 0x6d, 0xfe, 0x2e, 0x14,
2332 0xaf, 0x50, 0x23, 0xdd, 0xcd, 0x01, 0xcd, 0xb0, 0xc3, 0x9c, 0x77, 0xb8,
2333 0x90, 0xb5, 0x60, 0x8b, 0xa4, 0x51, 0xcd, 0x5d, 0xf0, 0xe9, 0x3e, 0xad,
2334 0x15, 0x96, 0xdb, 0xb4, 0x91, 0x53, 0x8c, 0xc7, 0xd2, 0x1d, 0x13, 0xae,
2335 0xdb, 0x01, 0x7b, 0xad, 0x63, 0x0f, 0xe6, 0x5b, 0x94, 0x2d, 0xe8, 0x86,
2336 0x0e, 0xbf, 0x04, 0x7a, 0x5e, 0x54, 0xf9, 0x0f, 0xf9, 0x4b, 0xe1, 0xac,
2337 0x42, 0xfe, 0x3c, 0xef, 0xaf, 0xed, 0x90, 0xfe, 0x74, 0x2a, 0xaf, 0x87,
2338 0xfc, 0x7a, 0xde, 0xbf, 0xd9, 0xe4, 0x99, 0x3c, 0x79, 0xde, 0x0b, 0x76,
2339 0x02, 0xf4, 0x7b, 0x17, 0x74, 0xab, 0x06, 0x7e, 0x18, 0xdb, 0x29, 0xf3,
2340 0x69, 0xf0, 0x71, 0x14, 0x3c, 0x9e, 0x06, 0x7f, 0x33, 0xa0, 0xe5, 0x37,
2341 0xed, 0xd9, 0x98, 0x4b, 0x4a, 0x8a, 0xb2, 0x2e, 0x2f, 0x32, 0xa7, 0x64,
2342 0x1e, 0x69, 0x4a, 0x69, 0x31, 0x5c, 0x1f, 0xea, 0xc3, 0x01, 0xd9, 0xeb,
2343 0x74, 0x42, 0x3e, 0x94, 0xe7, 0x35, 0xd0, 0x4b, 0x9f, 0x5f, 0xcd, 0xe8,
2344 0x08, 0x80, 0x65, 0x1b, 0xb1, 0x5e, 0x46, 0x94, 0x2e, 0x2c, 0x5a, 0x92,
2345 0x2f, 0xdb, 0x26, 0xed, 0x36, 0x55, 0xb6, 0x2b, 0xc8, 0x0c, 0x7c, 0x39,
2346 0x8e, 0xd4, 0x0c, 0xbc, 0xe3, 0x58, 0x60, 0xf3, 0xa1, 0x6c, 0x0d, 0xd8,
2347 0x5d, 0x28, 0xf3, 0x70, 0xee, 0xc1, 0x0e, 0xfa, 0xcc, 0x79, 0xf7, 0x0b,
2348 0xc0, 0x41, 0xbc, 0xbf, 0x09, 0x47, 0x1c, 0x31, 0x84, 0x78, 0xe2, 0x72,
2349 0xc6, 0x21, 0x3c, 0xf3, 0x8b, 0xb8, 0xb4, 0x22, 0x26, 0x6f, 0xc8, 0x89,
2350 0xf6, 0xf9, 0x1d, 0x69, 0x73, 0x31, 0x16, 0x93, 0x63, 0x09, 0xb9, 0xc3,
2351 0x60, 0x00, 0xd8, 0xec, 0x67, 0xea, 0x85, 0x19, 0x0d, 0xba, 0xdc, 0x26,
2352 0x93, 0x03, 0x69, 0x73, 0x1e, 0x7b, 0xe8, 0xd8, 0xe3, 0x6b, 0x9c, 0xaf,
2353 0xfd, 0x87, 0x57, 0x4a, 0xec, 0x84, 0x9d, 0x48, 0xdc, 0xc8, 0x19, 0x83,
2354 0x53, 0xb5, 0x03, 0xc2, 0xfc, 0x6a, 0x72, 0x60, 0x03, 0xec, 0xbc, 0x77,
2355 0x78, 0xaf, 0x30, 0x97, 0x8f, 0x0f, 0x8e, 0x5b, 0x3e, 0x5d, 0x23, 0xb0,
2356 0xeb, 0x49, 0xe4, 0x79, 0x7b, 0xeb, 0xcc, 0x01, 0x8c, 0xc1, 0xde, 0xba,
2357 0x21, 0x47, 0x60, 0xaf, 0xcd, 0xd0, 0x9f, 0x15, 0xa5, 0xcb, 0x26, 0x64,
2358 0x4d, 0xdf, 0x3a, 0x0c, 0xdc, 0xef, 0x40, 0x6e, 0x16, 0x62, 0x67, 0x37,
2359 0xf2, 0xd9, 0x0c, 0xce, 0x33, 0x85, 0xd8, 0xd7, 0xa8, 0xd7, 0x12, 0xdf,
2360 0x0a, 0xb8, 0x57, 0x76, 0x32, 0x2f, 0xf3, 0xbc, 0x07, 0xac, 0xf4, 0xb3,
2361 0xe4, 0x65, 0xca, 0x91, 0x7c, 0xd5, 0x56, 0xbe, 0x10, 0x3a, 0x9b, 0x62,
2362 0x3e, 0x07, 0xfd, 0x83, 0x4e, 0x16, 0x39, 0x5e, 0xd5, 0xc1, 0xe4, 0xa4,
2363 0xcc, 0x43, 0x76, 0x62, 0x16, 0xb2, 0x84, 0x0d, 0xe1, 0x5a, 0x02, 0xdd,
2364 0xf6, 0xbc, 0x18, 0x74, 0x77, 0x3c, 0x4b, 0x38, 0xa9, 0x28, 0x9b, 0x83,
2365 0xcc, 0x26, 0xdd, 0x5d, 0x1d, 0x7e, 0x3e, 0x09, 0x5f, 0x99, 0xe0, 0x5e,
2366 0x9f, 0x85, 0x0e, 0x77, 0x23, 0x86, 0x78, 0x1e, 0x6c, 0x38, 0xa1, 0x0b,
2367 0x75, 0x18, 0xf6, 0xe2, 0xf2, 0x5d, 0x1b, 0xe6, 0xc5, 0x9c, 0x84, 0x4f,
2368 0x2b, 0x99, 0x9e, 0x77, 0x0f, 0x68, 0xa9, 0xda, 0x1d, 0x58, 0xd7, 0x24,
2369 0x08, 0x7b, 0xa6, 0xbf, 0xdf, 0x46, 0x15, 0x3b, 0x30, 0x6e, 0xc7, 0x7e,
2370 0x9b, 0x98, 0x7b, 0x4e, 0xd2, 0x16, 0xb2, 0xb4, 0x7d, 0x23, 0xf0, 0xe7,
2371 0x6f, 0x82, 0x4e, 0xae, 0x51, 0x70, 0xf1, 0xa6, 0x5c, 0x56, 0x96, 0x6a,
2372 0xdb, 0x65, 0x6e, 0x3f, 0xf7, 0xe8, 0xa6, 0x1d, 0x22, 0xfe, 0xf3, 0x99,
2373 0x74, 0xd3, 0x8f, 0x74, 0x06, 0x63, 0xed, 0x73, 0xfe, 0x1e, 0x62, 0x32,
2374 0xdf, 0x1d, 0x51, 0xf4, 0x8a, 0x7e, 0xd1, 0xde, 0xe8, 0xc7, 0xa8, 0x5c,
2375 0xbb, 0x76, 0x0f, 0x72, 0xf0, 0xbd, 0xbb, 0xa9, 0x03, 0x86, 0x5c, 0xb2,
2376 0x3c, 0xef, 0x92, 0xdd, 0x04, 0xfe, 0x74, 0x69, 0xb2, 0x8e, 0x9b, 0xd2,
2377 0x0a, 0x99, 0x3b, 0x5a, 0x20, 0x97, 0x36, 0x25, 0x97, 0x49, 0x15, 0xf7,
2378 0xde, 0xc5, 0xd9, 0x70, 0x6d, 0x45, 0xc5, 0x97, 0x82, 0x5a, 0xc7, 0x35,
2379 0x3c, 0xd3, 0x77, 0x91, 0x73, 0x1f, 0xc3, 0xda, 0x98, 0xb4, 0x28, 0xdd,
2380 0x66, 0xfc, 0x27, 0xaf, 0xd2, 0xe1, 0xe3, 0x61, 0xac, 0xa5, 0x0e, 0x87,
2381 0xfc, 0x8f, 0x06, 0x3c, 0x12, 0xaf, 0x0d, 0xbc, 0x6d, 0xaa, 0xce, 0x28,
2382 0xfb, 0xe7, 0xd7, 0x11, 0x53, 0xf2, 0x40, 0x5d, 0x94, 0x0b, 0x7d, 0x21,
2383 0x41, 0x43, 0xba, 0x9f, 0xc1, 0x3e, 0xa4, 0x61, 0x13, 0xf2, 0x5e, 0xd1,
2384 0xaa, 0xe4, 0xcb, 0x0c, 0xf7, 0x11, 0x3d, 0x96, 0x6b, 0x91, 0x11, 0x68,
2385 0x5d, 0xd5, 0xb1, 0xcc, 0x07, 0xa0, 0x7b, 0x5f, 0x07, 0x8f, 0x85, 0x19,
2386 0xfa, 0xaa, 0x2f, 0x61, 0xdd, 0x4a, 0x5a, 0xf7, 0xb7, 0x95, 0x23, 0x0e,
2387 0x65, 0xfa, 0x0e, 0x64, 0xaa, 0x77, 0x35, 0x4b, 0x87, 0x14, 0x91, 0x4f,
2388 0xcd, 0x0f, 0x83, 0xaf, 0x81, 0x36, 0x89, 0xed, 0xa2, 0xaf, 0x42, 0xed,
2389 0x93, 0x58, 0x41, 0x60, 0xb8, 0xee, 0xe9, 0x3b, 0xb1, 0x7e, 0x20, 0x01,
2390 0xf9, 0x52, 0x66, 0x7a, 0x00, 0x47, 0x18, 0x14, 0x4a, 0x66, 0xa1, 0xb3,
2391 0x59, 0x88, 0x9b, 0xef, 0xfa, 0x93, 0xa6, 0x70, 0x1e, 0x3e, 0xbd, 0xc8,
2392 0xb5, 0xa4, 0xd9, 0x5f, 0xd3, 0x64, 0x85, 0xb2, 0xfe, 0x2b, 0xf8, 0xa7,
2393 0x5f, 0x79, 0x7b, 0x87, 0xc2, 0xf7, 0xe4, 0x87, 0x7c, 0xe1, 0x0c, 0x41,
2394 0xd3, 0xe6, 0x9c, 0x25, 0x83, 0xd3, 0xa2, 0x15, 0x90, 0x7b, 0x50, 0x47,
2395 0x7a, 0x86, 0xd2, 0x95, 0x94, 0xbe, 0x0d, 0xbc, 0x1a, 0xb2, 0x7f, 0x88,
2396 0xfc, 0x6e, 0x0d, 0xf2, 0x8e, 0x46, 0x9e, 0x3b, 0x02, 0x9e, 0xd5, 0x7e,
2397 0xc3, 0x79, 0x7d, 0x8d, 0xf7, 0xd1, 0x99, 0x70, 0x5f, 0x03, 0xb6, 0xbc,
2398 0x82, 0x9a, 0x87, 0xfb, 0x93, 0x9e, 0x1b, 0x9e, 0x6e, 0x59, 0x95, 0x1e,
2399 0xfd, 0x57, 0xde, 0xfd, 0x43, 0x9a, 0xca, 0xd3, 0x74, 0xe4, 0x8c, 0xfa,
2400 0x10, 0x78, 0x1d, 0xe2, 0x79, 0xe9, 0x72, 0xff, 0x6e, 0xe2, 0x3b, 0x42,
2401 0xde, 0x80, 0xb3, 0xd5, 0xaf, 0x61, 0x86, 0xc2, 0x3d, 0x1a, 0xf5, 0x27,
2402 0xc4, 0x49, 0x5c, 0x84, 0xe1, 0x99, 0xd0, 0xdf, 0x4a, 0xbc, 0x60, 0xc7,
2403 0x83, 0xb3, 0x0e, 0xd7, 0x89, 0x66, 0x58, 0xeb, 0xd7, 0xc1, 0x68, 0x1f,
2404 0xa4, 0xde, 0xf5, 0x04, 0x76, 0x16, 0xea, 0x21, 0xf7, 0x64, 0x7f, 0x2b,
2405 0x9d, 0xe5, 0x3a, 0xae, 0x27, 0x3c, 0x61, 0xe0, 0x33, 0xe0, 0x83, 0x7e,
2406 0x06, 0xdb, 0x78, 0xf9, 0x26, 0x5f, 0xce, 0xd8, 0x4e, 0x1f, 0x63, 0xaf,
2407 0xf7, 0xe7, 0xac, 0x7d, 0xf0, 0xac, 0xc3, 0x7e, 0x1b, 0xfd, 0x3a, 0xe7,
2408 0x50, 0x4f, 0x2c, 0x8e, 0xa2, 0xb7, 0x64, 0xed, 0x1e, 0x80, 0x7e, 0x3e,
2409 0xac, 0xe7, 0xdb, 0x4a, 0x46, 0x8e, 0x35, 0xbd, 0x14, 0xab, 0xb5, 0xc3,
2410 0x88, 0xc9, 0x52, 0xb9, 0x4d, 0xd5, 0xc6, 0x6d, 0xc3, 0x85, 0x2c, 0xe6,
2411 0xea, 0x8c, 0xcb, 0x30, 0x7f, 0xac, 0x43, 0x6c, 0x88, 0xeb, 0xd3, 0xf1,
2412 0xca, 0xed, 0x39, 0xda, 0x49, 0x4a, 0x52, 0xf5, 0x6b, 0x88, 0x79, 0xc8,
2413 0x1f, 0x95, 0x0e, 0x7d, 0xf1, 0x76, 0xd2, 0x5f, 0x45, 0xec, 0x32, 0x72,
2414 0x62, 0xe8, 0xb9, 0xe6, 0xf8, 0x64, 0xb6, 0x0d, 0xb1, 0x7e, 0x6c, 0xbb,
2415 0x7e, 0x6e, 0xdf, 0xf6, 0xd8, 0xb9, 0xae, 0x52, 0x53, 0xae, 0xb2, 0x5d,
2416 0x9f, 0x86, 0x2f, 0xaf, 0x89, 0x8e, 0x98, 0x8a, 0x1a, 0x01, 0xe3, 0x73,
2417 0x0f, 0x3c, 0xa0, 0xe7, 0x62, 0x52, 0x4e, 0xc8, 0x93, 0x8b, 0x59, 0xf8,
2418 0xf5, 0x5a, 0x3a, 0x55, 0x94, 0x27, 0xa5, 0x5a, 0x3b, 0x24, 0x93, 0xb5,
2419 0xf0, 0xde, 0x80, 0x77, 0x06, 0x49, 0xe5, 0xbf, 0xe8, 0x5f, 0x27, 0x03,
2420 0xda, 0x41, 0x73, 0x7e, 0x84, 0x31, 0x3a, 0x4b, 0xdf, 0x7d, 0x0d, 0x3a,
2421 0xd1, 0x12, 0xd4, 0xda, 0xbe, 0xfe, 0x19, 0xb9, 0x8f, 0x30, 0x47, 0xfd,
2422 0xdb, 0xb0, 0x7a, 0x6e, 0x7b, 0x4e, 0xfd, 0x89, 0x8a, 0xa9, 0x4b, 0x36,
2423 0x9f, 0x09, 0xf3, 0xf6, 0xe0, 0x94, 0x75, 0xdd, 0x64, 0x6d, 0x70, 0xc1,
2424 0x21, 0x3e, 0x53, 0x9d, 0xb5, 0x91, 0xbb, 0x8c, 0xb5, 0xad, 0xa4, 0x0b,
2425 0xcd, 0xc0, 0x3c, 0xf6, 0x77, 0x9a, 0x83, 0x71, 0xb8, 0xf6, 0xb5, 0x86,
2426 0xb5, 0x9c, 0x63, 0x4f, 0xdc, 0xd8, 0xa3, 0xe1, 0xce, 0xe4, 0x82, 0x9b,
2427 0x51, 0x35, 0x7b, 0xc1, 0x55, 0xb9, 0x02, 0x6a, 0x74, 0xe8, 0x93, 0xba,
2428 0x43, 0x81, 0x3f, 0x72, 0xff, 0xce, 0xf4, 0xcf, 0x9d, 0xfe, 0x63, 0x45,
2429 0x18, 0xdf, 0xa8, 0x6f, 0x53, 0xca, 0x4f, 0xbd, 0xd9, 0x70, 0x17, 0xf0,
2430 0x26, 0xfc, 0xd2, 0x9d, 0x9b, 0xfd, 0x9a, 0xc6, 0x0c, 0x7c, 0x5a, 0xab,
2431 0xca, 0x53, 0x7c, 0x9f, 0x96, 0x6a, 0x80, 0x4d, 0xf1, 0xde, 0xa0, 0xc3,
2432 0xaf, 0xbd, 0x7f, 0x2b, 0x58, 0xc3, 0xfc, 0xc1, 0x32, 0x99, 0x3b, 0xf8,
2433 0xb2, 0xf0, 0x9e, 0x59, 0x1d, 0x27, 0x4a, 0x01, 0xbe, 0xa6, 0xe0, 0xdd,
2434 0x5b, 0x6d, 0x3e, 0x4d, 0xe1, 0xda, 0x3f, 0x0d, 0xee, 0xa6, 0x94, 0x2f,
2435 0xcc, 0x03, 0x16, 0x3c, 0xa4, 0x4a, 0x3a, 0xf4, 0x66, 0xa4, 0xee, 0xcb,
2436 0x1b, 0xf1, 0x8e, 0xf7, 0x4f, 0x8a, 0xb6, 0x0b, 0x2a, 0xe7, 0x68, 0xe4,
2437 0x3f, 0x4f, 0xbe, 0xf3, 0x06, 0x69, 0x74, 0xc7, 0xb0, 0x56, 0x0e, 0xf8,
2438 0x77, 0x14, 0xa6, 0x4c, 0x98, 0xfd, 0xe6, 0x24, 0xf1, 0x26, 0x04, 0xf8,
2439 0x90, 0x97, 0xe4, 0xc2, 0x33, 0xfc, 0x26, 0xf7, 0x06, 0xde, 0x8d, 0x1c,
2440 0xa3, 0xff, 0x66, 0x40, 0xcb, 0x8f, 0x03, 0x79, 0x85, 0xef, 0x7f, 0xb1,
2441 0xf9, 0xe6, 0xf1, 0x3d, 0xb7, 0x07, 0xf2, 0xc4, 0xf3, 0xa1, 0x5f, 0x43,
2442 0x13, 0xf5, 0xfd, 0x34, 0xf0, 0xa8, 0x18, 0x5c, 0xd1, 0x73, 0x88, 0xf9,
2443 0x59, 0x64, 0x34, 0x35, 0xd8, 0xb4, 0x20, 0xf6, 0xbb, 0x69, 0xbb, 0x84,
2444 0x55, 0x1f, 0xd5, 0xe8, 0x57, 0xaf, 0xc3, 0xaf, 0xf2, 0xac, 0x3f, 0x96,
2445 0xa9, 0x5a, 0xaf, 0xdd, 0xac, 0xa9, 0xfc, 0x3a, 0x73, 0x5a, 0xfa, 0xed,
2446 0xd3, 0xc8, 0x3d, 0x50, 0xa3, 0xa5, 0x8e, 0x08, 0x65, 0x7e, 0x5d, 0x76,
2447 0xa8, 0x9c, 0xe0, 0x63, 0xb1, 0x20, 0x93, 0x22, 0xea, 0x04, 0x7d, 0xe8,
2448 0x5f, 0x3d, 0x95, 0xd3, 0x68, 0xa8, 0x42, 0x6f, 0x81, 0xeb, 0x6d, 0x85,
2449 0x87, 0xf8, 0x1a, 0x71, 0x69, 0xd2, 0x32, 0x14, 0xe2, 0x4b, 0xc9, 0x51,
2450 0x37, 0xc4, 0x69, 0xc8, 0x65, 0x64, 0x2d, 0xfa, 0x90, 0x17, 0xf0, 0xcf,
2451 0xe7, 0x5f, 0x7a, 0xcc, 0x09, 0xf4, 0xdc, 0xdd, 0x81, 0x0c, 0x7e, 0x8f,
2452 0x32, 0xc0, 0x18, 0x3a, 0xef, 0x7c, 0xc5, 0xaf, 0x45, 0x54, 0x2d, 0x37,
2453 0x86, 0x9a, 0x82, 0x73, 0x2b, 0x2d, 0x05, 0x3b, 0x3c, 0xe3, 0x7d, 0x98,
2454 0x2b, 0xe2, 0x47, 0xb9, 0x10, 0x66, 0x3f, 0x9e, 0xf3, 0x01, 0x9c, 0x0c,
2455 0xfb, 0x35, 0x79, 0x58, 0x8b, 0x84, 0x39, 0xa1, 0xcc, 0xe8, 0x39, 0xe6,
2456 0xef, 0x3b, 0x40, 0x2b, 0x73, 0x56, 0x9c, 0xe7, 0xaa, 0xff, 0x59, 0x85,
2457 0xa9, 0xac, 0xc1, 0xf8, 0xb9, 0xe7, 0xa8, 0x1b, 0xe6, 0xbb, 0xcc, 0x69,
2458 0xc3, 0xdc, 0x27, 0xaf, 0x15, 0x9d, 0x31, 0xed, 0x3e, 0x87, 0xf0, 0xfa,
2459 0xec, 0x66, 0xb1, 0x52, 0x3d, 0xba, 0x27, 0x23, 0x43, 0xac, 0x9d, 0x8f,
2460 0xe1, 0xcc, 0x3b, 0xa4, 0x9c, 0x41, 0x1e, 0x60, 0xde, 0x85, 0xbe, 0x19,
2461 0x73, 0x5f, 0xc6, 0x1c, 0x74, 0x23, 0xc3, 0xfc, 0x66, 0x83, 0xaa, 0x41,
2462 0x4a, 0x2a, 0x76, 0xec, 0x08, 0xf4, 0xe5, 0x89, 0x4e, 0x5f, 0x3f, 0xbe,
2463 0x87, 0xf1, 0x46, 0xcc, 0x7f, 0x03, 0xbd, 0xe7, 0xf5, 0x0c, 0x85, 0xf3,
2464 0xd4, 0xfb, 0x61, 0xcc, 0xdf, 0x09, 0x1c, 0x15, 0x3c, 0x7f, 0x0e, 0xcf,
2465 0x7f, 0xb8, 0x6e, 0xed, 0x77, 0x31, 0xae, 0x60, 0xbe, 0xb0, 0x6e, 0x3e,
2466 0xf4, 0xb3, 0xdc, 0xaf, 0xa2, 0x15, 0xdd, 0x29, 0x2d, 0xaf, 0xea, 0x88,
2467 0x63, 0xa8, 0x55, 0xe8, 0x6b, 0x59, 0xb3, 0xcc, 0x20, 0x17, 0xa7, 0x9f,
2468 0x3d, 0x88, 0x35, 0x8b, 0xd0, 0xbb, 0x56, 0x95, 0x65, 0xea, 0xca, 0x1e,
2469 0x0f, 0x1d, 0xec, 0x99, 0x63, 0x5f, 0x39, 0x68, 0xd7, 0x09, 0xc3, 0xe7,
2470 0x27, 0x0f, 0xf6, 0xd4, 0x0f, 0x01, 0x96, 0xf9, 0x7a, 0xe3, 0x1d, 0xef,
2471 0x37, 0xd6, 0xed, 0xe9, 0xd7, 0x38, 0x45, 0x75, 0x37, 0x78, 0xe8, 0x60,
2472 0x61, 0x86, 0x71, 0x9a, 0xf5, 0x26, 0xf3, 0xd2, 0xca, 0xc1, 0xf1, 0xda,
2473 0x54, 0x50, 0xd3, 0x84, 0xef, 0xf9, 0x8e, 0xf2, 0xbf, 0x15, 0x6d, 0xa4,
2474 0xab, 0x11, 0x8f, 0xca, 0x6b, 0x80, 0xe7, 0x49, 0xe0, 0x61, 0x6d, 0xa4,
2475 0xee, 0x90, 0x15, 0xbd, 0xa9, 0xb9, 0x5b, 0xd1, 0x46, 0x5c, 0xdc, 0x2b,
2476 0xc4, 0x77, 0x02, 0x75, 0xc7, 0x77, 0x48, 0x2f, 0xf0, 0x7c, 0x26, 0xc8,
2477 0x6d, 0x78, 0x37, 0x65, 0xf8, 0x77, 0x38, 0x6a, 0x1c, 0xd6, 0xbe, 0x4d,
2478 0xeb, 0x6a, 0xdf, 0xa6, 0xe0, 0x1e, 0x8b, 0xb0, 0x7a, 0x00, 0xab, 0xee,
2479 0xd0, 0x31, 0x97, 0x0a, 0xee, 0x94, 0xe3, 0xbc, 0x53, 0x6e, 0x90, 0x45,
2480 0x53, 0x20, 0x7f, 0xd2, 0x11, 0xd6, 0x2b, 0x8d, 0xf4, 0xf1, 0xbe, 0x79,
2481 0x0a, 0xef, 0xc3, 0xb3, 0x09, 0x79, 0x5f, 0xc4, 0x3c, 0xe9, 0x3d, 0x03,
2482 0xf8, 0x90, 0xde, 0x4f, 0x7b, 0xa6, 0x5c, 0x7b, 0x06, 0xbf, 0x70, 0xbf,
2483 0x50, 0x2e, 0xa4, 0xf5, 0xd7, 0xd5, 0x5a, 0xa1, 0xdf, 0x5b, 0x0c, 0x62,
2484 0x3a, 0xe9, 0xa2, 0x0f, 0xa2, 0x3f, 0x0e, 0xef, 0xc0, 0x59, 0x63, 0x33,
2485 0x56, 0xf0, 0xbc, 0x5a, 0xa0, 0x2b, 0x84, 0xd3, 0x90, 0x5f, 0xeb, 0xcc,
2486 0xc3, 0x52, 0xa8, 0x35, 0x92, 0x8f, 0xc8, 0x0f, 0xb0, 0x57, 0x3e, 0xd3,
2487 0xa4, 0xec, 0x88, 0xf7, 0x08, 0xcd, 0xb2, 0x02, 0x9d, 0xbe, 0x84, 0xfa,
2488 0x63, 0x1e, 0xb5, 0xd1, 0x12, 0xef, 0xb5, 0xeb, 0x27, 0x3b, 0x79, 0x1f,
2489 0x32, 0x65, 0xad, 0xd5, 0xf1, 0x73, 0x80, 0x59, 0xb0, 0x58, 0xeb, 0x4b,
2490 0xd0, 0x10, 0x23, 0x91, 0x67, 0x8c, 0x5b, 0xff, 0xe3, 0x95, 0x13, 0x8d,
2491 0xb0, 0xb7, 0xaa, 0xb3, 0xdb, 0xa4, 0x3a, 0x9b, 0x3e, 0x3a, 0x87, 0x7a,
2492 0x77, 0xc6, 0xd2, 0xb7, 0xe8, 0x7e, 0xad, 0x34, 0x03, 0xdf, 0xa4, 0x6a,
2493 0xad, 0x39, 0x79, 0xae, 0x93, 0x67, 0xd7, 0x64, 0xf5, 0x9b, 0x9d, 0xfa,
2494 0xef, 0x50, 0x17, 0x15, 0xe5, 0xb1, 0x13, 0x1b, 0xa4, 0x3c, 0x70, 0x1f,
2495 0x72, 0x2d, 0xc8, 0xf3, 0x44, 0x05, 0x95, 0x21, 0xf5, 0xea, 0xbd, 0x03,
2496 0xe3, 0x16, 0x6b, 0x26, 0xf1, 0xe3, 0x9a, 0xf8, 0x3c, 0xc6, 0x4e, 0xb4,
2497 0x29, 0x9f, 0xe4, 0xdf, 0x99, 0xf7, 0x9a, 0x45, 0xe4, 0x63, 0x85, 0x01,
2498 0x24, 0x8d, 0xc8, 0x5e, 0xcc, 0x9d, 0x22, 0x3d, 0xcc, 0x19, 0xe1, 0x8f,
2499 0x7b, 0xce, 0xc1, 0xcb, 0x9d, 0x20, 0xbc, 0x2e, 0xc6, 0x89, 0x98, 0x34,
2500 0x9d, 0x60, 0x9d, 0x2d, 0x5d, 0xa8, 0x51, 0x88, 0xb3, 0xc7, 0x40, 0x3f,
2501 0x8a, 0xdf, 0x1e, 0xe4, 0x51, 0x26, 0xf2, 0xda, 0x5b, 0xc0, 0x03, 0x96,
2502 0x6b, 0x6e, 0x05, 0xff, 0x6a, 0x27, 0xeb, 0xce, 0x9e, 0x73, 0x84, 0xe7,
2503 0x7d, 0x76, 0x17, 0xe8, 0xf1, 0xf7, 0x27, 0x0e, 0xe3, 0x84, 0x48, 0xef,
2504 0xb4, 0x74, 0xea, 0x6a, 0x8d, 0x21, 0xe3, 0x59, 0xbe, 0x6b, 0x03, 0xfc,
2505 0xab, 0xca, 0x3e, 0x7b, 0xd5, 0x3a, 0xff, 0xce, 0xa2, 0xbc, 0x46, 0x37,
2506 0xe6, 0x34, 0x3c, 0x23, 0x57, 0xca, 0x9a, 0xd2, 0x3b, 0xef, 0xc3, 0xf6,
2507 0x9c, 0xeb, 0xd8, 0xe2, 0xdf, 0xed, 0xf8, 0xb4, 0xf1, 0x6e, 0xb0, 0x0c,
2508 0xa9, 0x1a, 0x3b, 0x59, 0xf3, 0x13, 0x86, 0xdf, 0x52, 0xd8, 0x73, 0x2d,
2509 0xe5, 0xe7, 0xcf, 0xe9, 0xfa, 0xff, 0xa5, 0x5f, 0xeb, 0xbf, 0xe1, 0x84,
2510 0x77, 0x4b, 0xa9, 0x86, 0xbb, 0xa5, 0x74, 0xc3, 0xb7, 0x97, 0x9f, 0xb4,
2511 0x05, 0x7a, 0x27, 0x93, 0xb6, 0x27, 0xe1, 0xf7, 0xa5, 0xbd, 0x37, 0xe5,
2512 0x90, 0x19, 0x15, 0xa7, 0xc7, 0x21, 0xfb, 0x2b, 0x75, 0xd2, 0x8b, 0x98,
2513 0x53, 0x8f, 0xcb, 0xfb, 0x8b, 0xad, 0x72, 0x65, 0xce, 0xcf, 0x29, 0xaf,
2514 0xa8, 0x6f, 0x4e, 0xa6, 0x7c, 0x80, 0xc2, 0xff, 0x72, 0x3d, 0x83, 0x5f,
2515 0xa7, 0x5c, 0x5d, 0xbc, 0x39, 0xa7, 0xbc, 0xe0, 0xde, 0x0d, 0x5a, 0x3a,
2516 0x03, 0x1b, 0x46, 0xdd, 0x86, 0x18, 0x58, 0x09, 0xee, 0xea, 0x55, 0xce,
2517 0x62, 0xd0, 0x16, 0x78, 0x27, 0x1f, 0xde, 0x57, 0xf7, 0x9a, 0x17, 0x21,
2518 0xe3, 0xaf, 0x1a, 0x9d, 0xa8, 0xa3, 0x79, 0xd7, 0x16, 0xc6, 0xec, 0x30,
2519 0xf6, 0x90, 0xee, 0xb7, 0x81, 0x7b, 0x00, 0x7a, 0x4a, 0xdd, 0xb4, 0xa1,
2520 0xb3, 0xa6, 0x2c, 0xf5, 0xa5, 0x67, 0x2a, 0xc2, 0xef, 0x02, 0x59, 0xec,
2521 0xb9, 0x0c, 0xbd, 0xcc, 0x40, 0x1e, 0xcc, 0xf5, 0x28, 0x57, 0x9c, 0xed,
2522 0xf4, 0x94, 0x94, 0xdd, 0xad, 0xc0, 0x97, 0x97, 0x92, 0x3b, 0x8c, 0xbd,
2523 0x8e, 0x43, 0x6f, 0x7f, 0xb9, 0x85, 0x77, 0x99, 0xcd, 0x56, 0x16, 0x34,
2524 0xde, 0x25, 0xe3, 0x27, 0xa7, 0x64, 0xc2, 0x59, 0xfd, 0x66, 0x94, 0xe1,
2525 0xf7, 0x94, 0x45, 0xd4, 0xb4, 0xbe, 0x3d, 0xe6, 0x64, 0xfc, 0x14, 0x70,
2526 0x38, 0xac, 0x8d, 0x7b, 0xa1, 0x37, 0xfd, 0xaa, 0x36, 0x2e, 0x29, 0x9f,
2527 0xc4, 0xf9, 0xef, 0x01, 0x57, 0x6f, 0x65, 0x0f, 0xe0, 0xca, 0xa8, 0x9f,
2528 0x8b, 0xc8, 0x85, 0x17, 0x1c, 0x43, 0xca, 0x36, 0x7c, 0x6b, 0x31, 0xa9,
2529 0xeb, 0xbb, 0xba, 0x65, 0xde, 0xe9, 0x37, 0x75, 0xde, 0x3d, 0x26, 0x7c,
2530 0xdf, 0x57, 0x56, 0xf6, 0x9d, 0xd4, 0x0d, 0xab, 0x5b, 0x16, 0x9d, 0x8a,
2531 0x54, 0x07, 0x38, 0xe6, 0xf9, 0x55, 0xc4, 0xb4, 0x7c, 0x5f, 0x99, 0xd7,
2532 0x35, 0x75, 0xb7, 0x5d, 0x76, 0xd5, 0xfd, 0x68, 0xca, 0x94, 0xc3, 0xa0,
2533 0x0f, 0xcf, 0x0b, 0xd0, 0xf1, 0x69, 0xe6, 0x78, 0xfe, 0x9d, 0xf1, 0x81,
2534 0xe5, 0x22, 0x68, 0x68, 0x97, 0xde, 0x1f, 0xd3, 0xc6, 0x1e, 0xc2, 0x1c,
2535 0xc7, 0x69, 0xe8, 0xeb, 0xc3, 0x78, 0x26, 0x6c, 0x12, 0x3d, 0xe5, 0xd0,
2536 0x8d, 0xde, 0x04, 0x2d, 0xd0, 0x4b, 0xd6, 0xa5, 0xfb, 0x53, 0x32, 0x7f,
2537 0x72, 0xb7, 0x94, 0x16, 0x76, 0x03, 0xff, 0x3f, 0x22, 0xe7, 0xbf, 0x33,
2538 0xb8, 0x8b, 0x65, 0xde, 0xcf, 0x7d, 0x5e, 0xdc, 0xa2, 0x6c, 0x63, 0x9a,
2539 0xf3, 0xec, 0xf7, 0x61, 0x3d, 0xea, 0x07, 0x47, 0xdd, 0x4f, 0x03, 0x06,
2540 0x67, 0xe7, 0x36, 0x7e, 0xfb, 0xeb, 0x84, 0x9f, 0xae, 0xb0, 0x76, 0x40,
2541 0x6c, 0x99, 0x1b, 0x2c, 0xd4, 0xd2, 0x66, 0x41, 0x7d, 0x97, 0xc8, 0x88,
2542 0x1f, 0x6f, 0x38, 0x17, 0x17, 0x6b, 0x1a, 0xf5, 0x68, 0x8e, 0xef, 0x0e,
2543 0xab, 0xfb, 0x1f, 0xf5, 0x7d, 0x4e, 0xde, 0x95, 0x51, 0xe8, 0x58, 0xef,
2544 0x74, 0x06, 0x39, 0xf1, 0x7b, 0xc8, 0x27, 0x7f, 0x1e, 0xc8, 0x60, 0x38,
2545 0xd0, 0x8d, 0xd6, 0x06, 0x9d, 0xc0, 0x39, 0x3b, 0x38, 0x7b, 0x07, 0x7a,
2546 0xe0, 0xe0, 0xac, 0x57, 0xf5, 0x63, 0xb8, 0xc1, 0xe7, 0x6e, 0x92, 0xbf,
2547 0x9c, 0x49, 0x67, 0x56, 0xa0, 0x3f, 0x57, 0xc1, 0xeb, 0x0a, 0xea, 0xbc,
2548 0x2b, 0x88, 0x23, 0x0b, 0x35, 0x7e, 0x4b, 0xe0, 0xb7, 0x38, 0x8e, 0xb7,
2549 0xe1, 0x3c, 0x42, 0x7f, 0xfc, 0x52, 0x60, 0x17, 0x9b, 0xd4, 0x7d, 0xe7,
2550 0xfb, 0x38, 0xc3, 0x15, 0xd3, 0xcf, 0x17, 0xfd, 0x35, 0x9b, 0x24, 0xfc,
2551 0xde, 0xe7, 0xeb, 0x0f, 0x69, 0xa1, 0xfe, 0x7c, 0xb2, 0xc5, 0xcf, 0xfb,
2552 0xf9, 0x0d, 0x8c, 0xf5, 0x0b, 0x9f, 0xef, 0xdf, 0xe2, 0xe3, 0x6a, 0xd4,
2553 0xdb, 0x8f, 0x3d, 0xd6, 0x6a, 0x85, 0x3e, 0xf8, 0x6c, 0xd7, 0x93, 0x63,
2554 0xf6, 0xcd, 0xf6, 0x76, 0x8f, 0x13, 0xca, 0x87, 0xf2, 0x2b, 0xca, 0x11,
2555 0x37, 0x0d, 0x5b, 0xa0, 0xec, 0xac, 0x06, 0xd9, 0x89, 0xfc, 0xb9, 0x23,
2556 0xbc, 0xef, 0xc2, 0x3b, 0x25, 0xbb, 0x64, 0x21, 0xd6, 0xca, 0xfb, 0x5a,
2557 0xe8, 0xe3, 0xdf, 0xca, 0xc4, 0xac, 0xc8, 0x32, 0xde, 0x2f, 0x39, 0xb4,
2558 0xd1, 0x0c, 0xf2, 0xd7, 0x8d, 0x32, 0x3f, 0x87, 0x3a, 0xcb, 0x91, 0x52,
2559 0xe1, 0x4e, 0xc6, 0x99, 0xb8, 0x5c, 0x51, 0xf7, 0x7b, 0x22, 0x3b, 0xcf,
2560 0x1a, 0x62, 0x9c, 0x45, 0x41, 0x07, 0x99, 0x9f, 0xef, 0x0b, 0xef, 0xfb,
2561 0x7c, 0x5b, 0xaf, 0xd6, 0xb0, 0xd6, 0xe9, 0x55, 0xfe, 0xb1, 0x5a, 0x1f,
2562 0x97, 0xf2, 0x0c, 0xf7, 0x42, 0x3f, 0x97, 0xc2, 0x3b, 0x5b, 0x26, 0x4f,
2563 0x66, 0xe4, 0xfb, 0xfc, 0x5e, 0x93, 0x1d, 0xc5, 0x1e, 0x05, 0xa9, 0x2c,
2564 0x63, 0xbe, 0xfe, 0x4f, 0x32, 0xb7, 0x38, 0x2e, 0xf3, 0x33, 0x17, 0x1a,
2565 0xee, 0x73, 0x31, 0x9e, 0x6b, 0xac, 0x4f, 0x8b, 0xac, 0xa9, 0x50, 0x7f,
2566 0x5a, 0x18, 0xc3, 0x06, 0xea, 0x93, 0xa5, 0x9b, 0xef, 0x1f, 0x1b, 0xeb,
2567 0xd2, 0x51, 0x39, 0x8a, 0x33, 0xae, 0x9e, 0xcc, 0xa8, 0xba, 0xa6, 0x25,
2568 0x37, 0xfb, 0xf8, 0x87, 0x88, 0x11, 0x63, 0x42, 0x3d, 0xbb, 0x2e, 0x5f,
2569 0xb3, 0x8f, 0xca, 0x23, 0x88, 0x1d, 0x47, 0x90, 0x5f, 0xff, 0x36, 0xea,
2570 0xba, 0xd4, 0x66, 0x9e, 0x21, 0xe8, 0xb5, 0x58, 0x57, 0x7a, 0x32, 0x6a,
2571 0xdf, 0x61, 0xfe, 0x00, 0x92, 0x7d, 0xbf, 0xce, 0xf8, 0xf8, 0xdf, 0x5e,
2572 0x1e, 0xf1, 0xee, 0x43, 0x0b, 0x3e, 0x41, 0xc1, 0x69, 0x3e, 0xdc, 0x0c,
2573 0xe1, 0xfa, 0xcd, 0x63, 0x84, 0x9b, 0xd3, 0x02, 0x38, 0x0d, 0x70, 0x31,
2574 0xb9, 0x68, 0x1b, 0xd0, 0x8d, 0x51, 0xf0, 0x09, 0xdf, 0x3e, 0x18, 0x7e,
2575 0x6f, 0xdc, 0x80, 0x98, 0xba, 0xb6, 0xfe, 0x8d, 0x60, 0xfd, 0xf7, 0x83,
2576 0xf5, 0x97, 0x56, 0xd7, 0x87, 0x71, 0xf5, 0x13, 0x4f, 0x1a, 0xe8, 0x7a,
2577 0xa3, 0xe6, 0xc3, 0x1f, 0x0d, 0xe8, 0xba, 0xb4, 0x4a, 0x57, 0x08, 0x0f,
2578 0x79, 0x2a, 0x9e, 0xe9, 0x93, 0xe9, 0x9b, 0x7b, 0x21, 0x47, 0x7e, 0x47,
2579 0x86, 0x4d, 0x38, 0xfc, 0x7e, 0x4b, 0x3b, 0xd1, 0x65, 0x25, 0x71, 0x54,
2580 0xc6, 0xac, 0xf4, 0xf0, 0xa4, 0xc4, 0xa0, 0xc3, 0xf4, 0x29, 0x31, 0x99,
2581 0xa7, 0xaf, 0x41, 0x5f, 0xb6, 0x6f, 0x4d, 0xeb, 0xfb, 0x0d, 0xb4, 0xc6,
2582 0x9e, 0x27, 0x8d, 0x3e, 0xad, 0xf1, 0x1d, 0x6b, 0xb4, 0xfa, 0xf0, 0x3e,
2583 0xad, 0xef, 0xd7, 0x1a, 0xe0, 0xcf, 0x1a, 0x01, 0xbc, 0xd1, 0x00, 0x4f,
2584 0x7d, 0x66, 0x3e, 0x41, 0x7d, 0x26, 0x6d, 0x5f, 0x50, 0xf7, 0x66, 0x1b,
2585 0x72, 0xb3, 0x07, 0x3f, 0xbf, 0xc3, 0x93, 0x38, 0xf2, 0x8c, 0x66, 0xbc,
2586 0xbb, 0x32, 0xc3, 0x1c, 0x44, 0xef, 0x69, 0x96, 0x9d, 0xd0, 0x59, 0x9e,
2587 0x5d, 0xe3, 0x9d, 0xab, 0x27, 0x8f, 0xd8, 0xa4, 0xe5, 0x3f, 0xbd, 0x33,
2588 0x89, 0x9d, 0x76, 0x55, 0xfa, 0xcc, 0x66, 0xe1, 0x9d, 0xae, 0xc2, 0x99,
2589 0x21, 0x2d, 0xa7, 0xfb, 0x7a, 0xcd, 0xb7, 0xc0, 0xe7, 0xe8, 0x8c, 0x26,
2590 0xf3, 0x56, 0x3a, 0x79, 0x1e, 0x38, 0xf6, 0xe0, 0x6c, 0xe6, 0x07, 0x48,
2591 0x8f, 0xc8, 0x04, 0xf4, 0x7b, 0x5e, 0xc5, 0x43, 0xea, 0x71, 0x7a, 0xac,
2592 0x82, 0x1c, 0xe7, 0xa7, 0x2a, 0xa6, 0x79, 0xde, 0x87, 0x88, 0x6b, 0x63,
2593 0xeb, 0x74, 0x4f, 0x3f, 0xeb, 0xeb, 0x9e, 0x7e, 0x16, 0xb5, 0xf1, 0xf1,
2594 0xb8, 0xb4, 0x2c, 0xc1, 0x7e, 0x9e, 0xef, 0x52, 0xfa, 0xa7, 0x3f, 0xcf,
2595 0x6f, 0x19, 0xf0, 0x73, 0xc7, 0x0d, 0xb1, 0x8e, 0xab, 0x38, 0x00, 0x79,
2596 0x17, 0x64, 0xf2, 0x14, 0x7d, 0xa9, 0x25, 0x3b, 0x8e, 0xf3, 0x3c, 0x98,
2597 0xcf, 0xcc, 0x0d, 0x8e, 0xc3, 0x46, 0xa6, 0xf8, 0x7d, 0x70, 0xe9, 0x23,
2598 0x19, 0xb7, 0x28, 0x07, 0x94, 0xfa, 0x4b, 0xa6, 0xc4, 0x96, 0xe0, 0x13,
2599 0x96, 0x92, 0xd2, 0x04, 0xdb, 0xd2, 0xcf, 0x26, 0xb4, 0xea, 0xec, 0x7f,
2600 0xc1, 0x1e, 0xf8, 0x4d, 0x20, 0x83, 0x71, 0x52, 0xab, 0xd6, 0x06, 0xd0,
2601 0x53, 0xcf, 0x91, 0x46, 0x9d, 0xa5, 0x9e, 0x93, 0x8e, 0xd0, 0x5e, 0xf0,
2602 0x7c, 0x36, 0xa3, 0xee, 0x6c, 0x3f, 0xb4, 0xc9, 0xcb, 0xdf, 0x48, 0x61,
2603 0x26, 0xfc, 0x1b, 0x10, 0xd9, 0x8c, 0x1c, 0xa6, 0xa3, 0x60, 0xef, 0x18,
2604 0xbe, 0x22, 0x9f, 0x96, 0xaf, 0x6d, 0x9f, 0x82, 0x2f, 0xf2, 0xd1, 0xc8,
2605 0x17, 0x79, 0x6a, 0x97, 0x26, 0xc5, 0x57, 0xc8, 0x0f, 0x04, 0x0d, 0x7e,
2606 0x7a, 0x8e, 0x27, 0x81, 0xff, 0x61, 0xf8, 0x80, 0x6e, 0xf4, 0x0f, 0xa1,
2607 0x47, 0x28, 0x3b, 0x4b, 0xde, 0xc9, 0xeb, 0x55, 0xe4, 0x8b, 0x21, 0x9f,
2608 0x25, 0x3c, 0xbf, 0x2e, 0x93, 0xb3, 0xde, 0x61, 0xc4, 0x53, 0xde, 0x27,
2609 0x77, 0xea, 0x4a, 0x77, 0xd7, 0xf3, 0xfe, 0xba, 0xf8, 0xf2, 0xe1, 0x5d,
2610 0x3c, 0x9e, 0x17, 0xd7, 0xcb, 0xa2, 0xd1, 0x77, 0x24, 0x83, 0xbf, 0x7b,
2611 0xa1, 0x9f, 0xa0, 0x8c, 0xae, 0x4a, 0x61, 0x96, 0x77, 0x5a, 0x3e, 0xbe,
2612 0xd2, 0xea, 0xdf, 0xbe, 0x34, 0xae, 0x19, 0x00, 0x5c, 0x37, 0xe0, 0x48,
2613 0xd7, 0x0a, 0xe5, 0x07, 0x9f, 0xb3, 0xbd, 0xc1, 0xd7, 0x34, 0xae, 0xcb,
2614 0xca, 0x33, 0x88, 0xff, 0x6f, 0xd8, 0x37, 0xc9, 0xb5, 0xc4, 0x1c, 0x68,
2615 0xbe, 0xbe, 0x0f, 0x36, 0xd9, 0x04, 0x5f, 0x66, 0xca, 0x95, 0x5a, 0xb3,
2616 0xcc, 0x23, 0xcf, 0x59, 0x58, 0xa4, 0x2f, 0x24, 0xed, 0xad, 0x98, 0xf7,
2617 0xfd, 0x17, 0x7d, 0xed, 0x95, 0x1a, 0xe2, 0x2b, 0x6c, 0xfb, 0x4a, 0x2d,
2618 0x81, 0xbe, 0x1b, 0xbd, 0x85, 0x3e, 0x85, 0x3e, 0x83, 0x7e, 0x00, 0xfd,
2619 0x00, 0x7a, 0x0b, 0x6b, 0x93, 0xe8, 0xc3, 0x5a, 0x82, 0xb8, 0xd6, 0xf8,
2620 0xae, 0xaa, 0xfd, 0xf8, 0xdd, 0x90, 0xb1, 0xcc, 0xb0, 0x47, 0x50, 0x63,
2621 0x17, 0x06, 0xc2, 0xbf, 0xb9, 0xb9, 0xe1, 0x99, 0x16, 0x6b, 0xf7, 0x8a,
2622 0xb6, 0x47, 0x7d, 0x5f, 0x98, 0x41, 0x5c, 0x78, 0x6e, 0xab, 0xb4, 0x5a,
2623 0xe6, 0x3d, 0xea, 0xee, 0x68, 0x16, 0x63, 0x3e, 0xa3, 0x3e, 0x4e, 0x4c,
2624 0x21, 0x3e, 0xd1, 0x7f, 0xfe, 0x6f, 0xe7, 0xd6, 0x1b, 0xdb, 0xc6, 0x59,
2625 0xc6, 0x1f, 0x9f, 0x9d, 0x34, 0xe9, 0x9a, 0xf6, 0x92, 0x38, 0xa9, 0x93,
2626 0x85, 0xcd, 0x8e, 0x2f, 0xad, 0x45, 0xd2, 0x71, 0xed, 0x2c, 0x16, 0xa6,
2627 0x8c, 0x78, 0x76, 0x92, 0x76, 0x30, 0xa6, 0xb4, 0x74, 0xd3, 0x84, 0x10,
2628 0x58, 0xc9, 0xba, 0x75, 0x13, 0xd2, 0x28, 0x30, 0x34, 0x89, 0xa2, 0x18,
2629 0x27, 0x61, 0x19, 0x18, 0xc7, 0x0b, 0x81, 0x4e, 0xf0, 0xc5, 0x38, 0xd1,
2630 0x06, 0x22, 0x4a, 0x3a, 0x8d, 0x0f, 0x08, 0x6d, 0x74, 0xb8, 0x83, 0xef,
2631 0xfc, 0x11, 0x62, 0x12, 0x1f, 0xaa, 0xa8, 0x63, 0x20, 0x21, 0xe0, 0x23,
2632 0xd2, 0x98, 0x8e, 0xdf, 0xef, 0x79, 0xef, 0x12, 0xc7, 0x64, 0x54, 0xf0,
2633 0xc1, 0x3a, 0xbf, 0x77, 0xf7, 0xbe, 0xf7, 0xde, 0xfb, 0x3c, 0xef, 0xef,
2634 0xf9, 0x3d, 0x7f, 0xce, 0x43, 0x9f, 0x19, 0xe0, 0xf8, 0x11, 0x61, 0x0c,
2635 0x36, 0x9b, 0xc6, 0xff, 0xea, 0xc5, 0x1e, 0x63, 0x4b, 0xc1, 0xdb, 0x77,
2636 0xb8, 0x61, 0x60, 0xab, 0x46, 0xd0, 0x67, 0x3f, 0x9f, 0x00, 0x36, 0xb0,
2637 0x92, 0xa8, 0x54, 0xb1, 0x07, 0x7f, 0xed, 0xce, 0x29, 0xa7, 0xa3, 0x2c,
2638 0x16, 0xc1, 0x4d, 0x73, 0x65, 0x72, 0x97, 0xcb, 0xf0, 0x47, 0xe0, 0xcb,
2639 0x45, 0xe9, 0xbb, 0xd3, 0x16, 0x90, 0x83, 0xfe, 0x12, 0x73, 0xa3, 0x1d,
2640 0xf8, 0x26, 0x9e, 0x87, 0xf7, 0x5a, 0xf3, 0xb0, 0x66, 0xa7, 0xc1, 0x05,
2641 0x3d, 0x2f, 0xe2, 0x4c, 0x4a, 0xfc, 0x1c, 0x31, 0x47, 0xd0, 0xdf, 0xc4,
2642 0xb2, 0xc8, 0xab, 0x32, 0xd3, 0x9a, 0x83, 0x84, 0x72, 0xfd, 0x0e, 0x7d,
2643 0x7b, 0xc4, 0xc4, 0xa7, 0x18, 0x7f, 0x16, 0x99, 0x2c, 0x1b, 0x2e, 0x0b,
2644 0xbf, 0xac, 0x61, 0xbc, 0xbb, 0xfd, 0xf1, 0x78, 0xdd, 0xd2, 0x71, 0x6a,
2645 0xd2, 0x6b, 0x62, 0xbb, 0x63, 0x23, 0xb0, 0x11, 0x51, 0xa9, 0x43, 0x2e,
2646 0xd7, 0x21, 0x93, 0x37, 0x4b, 0xd4, 0xf5, 0x61, 0xe8, 0x7d, 0x0b, 0xf3,
2647 0xb3, 0x18, 0x6b, 0x44, 0x9f, 0x5d, 0x2f, 0x01, 0x3b, 0x6d, 0xf5, 0x4f,
2648 0x7b, 0xc9, 0x0b, 0x69, 0x07, 0xcd, 0x38, 0x03, 0xe6, 0x3e, 0x09, 0xae,
2649 0x75, 0xeb, 0x7c, 0x6a, 0x1a, 0x03, 0xe3, 0x3a, 0x41, 0x07, 0x4b, 0xdd,
2650 0xfe, 0x3d, 0x5e, 0x8f, 0xa9, 0x77, 0xe2, 0x39, 0xbe, 0xc7, 0x88, 0x64,
2651 0xcb, 0x41, 0xbf, 0x4e, 0xf4, 0x6b, 0x6f, 0x18, 0xeb, 0x68, 0xd3, 0x3b,
2652 0x58, 0xfe, 0x3b, 0xf0, 0x7a, 0x33, 0xdf, 0x4f, 0xd8, 0x05, 0x09, 0x38,
2653 0x3f, 0xed, 0x2f, 0x65, 0x93, 0xd6, 0xfc, 0xb6, 0x91, 0xcf, 0x80, 0xef,
2654 0x03, 0x24, 0x96, 0x0a, 0x02, 0xbe, 0x18, 0xa5, 0x8c, 0xd2, 0xd8, 0xd7,
2655 0x3f, 0x89, 0xca, 0x61, 0x57, 0x2a, 0xa5, 0x03, 0x62, 0x75, 0xb5, 0x68,
2656 0x8d, 0x4e, 0xdc, 0x6a, 0x7c, 0xe6, 0x67, 0xfd, 0x67, 0xc2, 0xf7, 0x5e,
2657 0x69, 0xd7, 0xb8, 0x34, 0xec, 0x0c, 0xee, 0x39, 0xd4, 0x34, 0xb7, 0x87,
2658 0xfd, 0xfb, 0x78, 0xdd, 0x91, 0x02, 0xf8, 0x67, 0xae, 0x0c, 0x26, 0x0f,
2659 0xfc, 0xb6, 0xc6, 0x98, 0xe3, 0x61, 0x0c, 0x6f, 0x38, 0x3e, 0x8f, 0x39,
2660 0x16, 0xec, 0x31, 0xc6, 0xcd, 0x30, 0x46, 0x5f, 0xd3, 0x18, 0x13, 0xfe,
2661 0x18, 0x59, 0x29, 0x5e, 0x99, 0xc0, 0x5e, 0x1b, 0x83, 0x7d, 0x4f, 0xda,
2662 0xa7, 0xe5, 0x23, 0x22, 0x9d, 0x38, 0xf7, 0x72, 0x0a, 0x72, 0xf2, 0xbc,
2663 0x49, 0x77, 0x1a, 0xf3, 0x7e, 0x0d, 0xb6, 0x35, 0xe0, 0x3c, 0xc5, 0x58,
2664 0x18, 0x36, 0xec, 0xf3, 0x2e, 0xe3, 0x62, 0x05, 0x30, 0xb2, 0x84, 0x6d,
2665 0x85, 0x86, 0x53, 0x35, 0xf0, 0xba, 0x2a, 0x2c, 0x69, 0xd1, 0xe1, 0x7b,
2666 0x76, 0x48, 0xd1, 0x0e, 0x8d, 0x87, 0xc1, 0x6b, 0xb2, 0x65, 0xee, 0x23,
2667 0x19, 0x0a, 0x8f, 0xb5, 0x82, 0x8b, 0x7a, 0xf2, 0x36, 0xa0, 0xa6, 0x58,
2668 0x5a, 0x92, 0xfa, 0x86, 0x8d, 0xe3, 0x05, 0xc8, 0xe1, 0x45, 0xfc, 0x7f,
2669 0x3e, 0xaa, 0x75, 0x4a, 0xe0, 0xeb, 0x8b, 0x78, 0x1f, 0xf2, 0x19, 0xf2,
2670 0x88, 0x1a, 0xec, 0xad, 0x05, 0x5b, 0x03, 0x5e, 0x35, 0x4a, 0xde, 0xf5,
2671 0xdc, 0xda, 0x4d, 0x79, 0x73, 0x35, 0x81, 0x67, 0xd1, 0x2e, 0x9f, 0x21,
2672 0x1e, 0xd8, 0x0b, 0x69, 0x9c, 0x5b, 0x37, 0xdc, 0xb7, 0xb8, 0x85, 0x0d,
2673 0xd4, 0x05, 0x8e, 0x00, 0x8e, 0xbd, 0x0d, 0x0c, 0x2c, 0xe2, 0xfe, 0xfa,
2674 0x6a, 0x44, 0xd6, 0x1c, 0xf2, 0x22, 0x89, 0x67, 0x71, 0x6f, 0x7d, 0x7d,
2675 0xb1, 0xd7, 0xe4, 0x51, 0xd8, 0x7f, 0x42, 0x0a, 0xe0, 0x75, 0xa7, 0xb5,
2676 0xef, 0xad, 0xe4, 0xcc, 0x39, 0x35, 0xfa, 0x77, 0xb3, 0x52, 0xe7, 0x7e,
2677 0xd2, 0xdc, 0x03, 0xb9, 0xc1, 0x65, 0xe8, 0x2c, 0x39, 0x3b, 0xfd, 0x00,
2678 0xfc, 0xdf, 0xe0, 0x75, 0xbe, 0x3b, 0x8e, 0xd5, 0x24, 0xd6, 0x86, 0xfb,
2679 0xbe, 0x10, 0x9a, 0x3e, 0x0e, 0x3b, 0x6a, 0x71, 0xaf, 0x17, 0x15, 0x0b,
2680 0x8a, 0xcb, 0xb3, 0xb0, 0x29, 0xac, 0xb5, 0xe8, 0x83, 0x2e, 0x3e, 0x08,
2681 0x59, 0xa6, 0x71, 0x5f, 0x93, 0x2d, 0xd9, 0x2c, 0x2a, 0x2f, 0xb3, 0x5e,
2682 0x32, 0xb8, 0x66, 0xd5, 0xc0, 0xd1, 0xb0, 0x7f, 0xac, 0x4d, 0xe8, 0x16,
2683 0xf6, 0x90, 0xb5, 0x19, 0xc5, 0x11, 0x78, 0xbc, 0x09, 0xbf, 0x02, 0xf8,
2684 0x66, 0x6d, 0xc2, 0x27, 0x00, 0xbe, 0x59, 0x9b, 0x29, 0x1c, 0x81, 0xf1,
2685 0x9b, 0x01, 0xae, 0x71, 0xfc, 0x94, 0xe6, 0xe1, 0x0d, 0xbe, 0x90, 0x4b,
2686 0x12, 0x5f, 0x02, 0x3e, 0x69, 0x74, 0xe1, 0xeb, 0xcb, 0xc4, 0x10, 0xea,
2687 0x75, 0x12, 0xb8, 0x45, 0x5d, 0x30, 0x5c, 0x72, 0xbd, 0x62, 0xd6, 0x6c,
2688 0x7e, 0xeb, 0x9a, 0xda, 0x88, 0x29, 0x71, 0xa0, 0x63, 0x5c, 0x3b, 0x5c,
2689 0x53, 0x1b, 0xf0, 0xba, 0x64, 0xf4, 0xc8, 0x35, 0xfb, 0xb9, 0x64, 0xd6,
2690 0x53, 0xf2, 0x0d, 0xc5, 0xad, 0x00, 0xb3, 0xc8, 0x21, 0x63, 0x58, 0x3f,
2691 0x47, 0x9e, 0xff, 0xf6, 0x4d, 0xc9, 0x7e, 0x87, 0xb8, 0x35, 0x1c, 0x6b,
2692 0x0f, 0x11, 0xab, 0x3c, 0xd9, 0x80, 0x6d, 0x3a, 0xed, 0x26, 0x1e, 0x65,
2693 0xfd, 0x66, 0x1e, 0xba, 0xd2, 0x7a, 0x32, 0xe1, 0xc6, 0x43, 0xc9, 0x47,
2694 0xdb, 0x43, 0xb4, 0x8d, 0xc3, 0xf6, 0x45, 0x39, 0xe5, 0xc7, 0xa3, 0x0e,
2695 0xc8, 0x45, 0xe5, 0xfe, 0x2c, 0xcf, 0x78, 0x57, 0x73, 0x23, 0xef, 0xa4,
2696 0xb9, 0xd6, 0x68, 0x6f, 0x6a, 0xdc, 0xa8, 0xed, 0x9d, 0x74, 0x8b, 0x14,
2697 0x7b, 0x3c, 0xef, 0xc2, 0xc9, 0xb7, 0xa2, 0x26, 0xce, 0xd5, 0x7f, 0xd4,
2698 0x60, 0x01, 0x00, 0x4c, 0xdb, 0x9f, 0xc0, 0x91, 0xba, 0x4d, 0x7b, 0x4b,
2699 0xfb, 0x48, 0xb9, 0xe1, 0xb8, 0xce, 0xff, 0xb4, 0xbd, 0x4b, 0xb0, 0xbd,
2700 0xb4, 0x97, 0x47, 0x24, 0xc7, 0x9c, 0x9c, 0xa5, 0xe7, 0x0b, 0x86, 0x4b,
2701 0xfb, 0xf7, 0x55, 0xf2, 0x32, 0x5f, 0x21, 0x87, 0xaa, 0xc3, 0x96, 0xb1,
2702 0xf6, 0x91, 0x36, 0x6d, 0x0e, 0xf6, 0x9c, 0xb9, 0x5a, 0x5c, 0xab, 0xb2,
2703 0x5f, 0x22, 0x15, 0xb7, 0xf0, 0xce, 0x3b, 0x3a, 0x55, 0x82, 0xfe, 0x51,
2704 0x9f, 0x20, 0xf7, 0x17, 0xe8, 0x5b, 0x0c, 0xa9, 0x8e, 0x64, 0x7f, 0xc0,
2705 0xb5, 0xf7, 0xbc, 0x33, 0x2e, 0xd4, 0xb0, 0xd3, 0xec, 0x01, 0xf2, 0x80,
2706 0x8f, 0x63, 0x5d, 0xa6, 0xdc, 0x9b, 0xb4, 0xdd, 0x7f, 0xb7, 0x9c, 0xe1,
2707 0xd4, 0xc5, 0x10, 0xf7, 0x36, 0xda, 0xeb, 0x61, 0xa9, 0x46, 0xf9, 0xfe,
2708 0x58, 0xaf, 0x10, 0xf7, 0xce, 0x7e, 0xeb, 0xd0, 0xbc, 0x06, 0x59, 0xac,
2709 0x01, 0xd7, 0x32, 0x58, 0x03, 0xfe, 0x9f, 0x80, 0xbc, 0xe8, 0x33, 0x10,
2710 0x87, 0xf1, 0x7f, 0xcb, 0x3c, 0x9b, 0x75, 0x99, 0xbb, 0x73, 0xe6, 0x7c,
2711 0x29, 0xd3, 0xd7, 0x25, 0xa7, 0xf2, 0x5d, 0x92, 0x5c, 0xe5, 0x75, 0x99,
2712 0xac, 0x2c, 0xc9, 0x03, 0xce, 0x38, 0xde, 0xf7, 0x86, 0x37, 0xeb, 0xa8,
2713 0xaf, 0x32, 0x3a, 0x83, 0x67, 0xcf, 0x8e, 0xf4, 0xc9, 0x9f, 0x5d, 0x47,
2714 0x16, 0xd7, 0x6c, 0xc9, 0xdb, 0x69, 0x79, 0x5e, 0x63, 0xf9, 0xf4, 0x4f,
2715 0x42, 0xe0, 0xa4, 0xcc, 0xc9, 0xb7, 0x89, 0xf4, 0x38, 0xb1, 0x6d, 0x21,
2716 0xa7, 0x6c, 0x81, 0xac, 0xe3, 0x86, 0x37, 0xdb, 0xe6, 0xfa, 0xb1, 0x17,
2717 0xc0, 0xdd, 0xdd, 0xb7, 0x7a, 0x83, 0xf8, 0xb0, 0xe1, 0xb7, 0x7f, 0xf0,
2718 0xf3, 0x62, 0x69, 0xa9, 0x30, 0x07, 0xa7, 0x38, 0xeb, 0x40, 0x97, 0x98,
2719 0xc3, 0x8f, 0x69, 0xdc, 0xa1, 0xa5, 0x4c, 0x8c, 0xba, 0x0a, 0x8c, 0x1a,
2720 0x25, 0x76, 0x8d, 0xaf, 0xb9, 0x8c, 0x0b, 0x44, 0xe5, 0xb7, 0x25, 0xe2,
2721 0x70, 0x5c, 0x7e, 0x53, 0x7a, 0x16, 0xf3, 0x49, 0x54, 0x19, 0xcf, 0xbc,
2722 0x5e, 0x29, 0x90, 0x27, 0x29, 0x9f, 0xcf, 0xba, 0x5f, 0x54, 0x3b, 0x10,
2723 0xb7, 0x8a, 0xdd, 0x2d, 0x8a, 0x37, 0x4f, 0x6b, 0x1e, 0x36, 0x6e, 0x0d,
2724 0xc8, 0xf5, 0x55, 0xbe, 0x6f, 0x0a, 0x63, 0x47, 0x43, 0xb9, 0x75, 0xda,
2725 0xa5, 0x64, 0x6c, 0xc6, 0x3a, 0x20, 0x17, 0xa2, 0x8c, 0x53, 0x8f, 0x11,
2726 0x9f, 0x61, 0x0b, 0x87, 0xed, 0x19, 0xd6, 0x38, 0xa9, 0xfd, 0x89, 0x35,
2727 0xe1, 0xec, 0xd3, 0x3e, 0xce, 0xf2, 0xda, 0x18, 0x64, 0x4a, 0x5b, 0x94,
2728 0xa8, 0x4c, 0x58, 0x49, 0xd8, 0x3c, 0xfc, 0xdf, 0xe0, 0xf8, 0x71, 0xf9,
2729 0xc2, 0xc6, 0x45, 0xf0, 0xef, 0x61, 0xfb, 0x1c, 0xed, 0xaa, 0x3d, 0x8a,
2730 0x7b, 0xf9, 0xfc, 0x0f, 0x34, 0x8d, 0xf5, 0x69, 0x7f, 0x2c, 0x5e, 0xc7,
2731 0x3e, 0x2f, 0x3b, 0x32, 0x5b, 0x62, 0x2e, 0xda, 0xcc, 0x75, 0xef, 0xbd,
2732 0x67, 0x77, 0x9e, 0xbb, 0xb0, 0x4c, 0x7e, 0x63, 0xea, 0xdc, 0x8a, 0xe0,
2733 0x42, 0x9f, 0xec, 0xe2, 0x33, 0xf9, 0xbc, 0xc3, 0x92, 0x7d, 0x04, 0xf8,
2734 0x52, 0xe6, 0xaf, 0xe0, 0xd7, 0xde, 0xc2, 0x5f, 0x89, 0xf6, 0xef, 0x63,
2735 0x9b, 0xee, 0xf3, 0xc7, 0xfb, 0x3d, 0x74, 0x28, 0xda, 0x70, 0x3f, 0x63,
2736 0x2a, 0x6c, 0xc7, 0xa5, 0xb0, 0xc1, 0xa3, 0xe7, 0x75, 0x39, 0xad, 0x72,
2737 0xce, 0xbe, 0xbd, 0x69, 0x8c, 0x13, 0x38, 0x67, 0x38, 0x41, 0xb8, 0x1c,
2738 0xf2, 0xb9, 0xc5, 0x9d, 0xe4, 0x4d, 0xfe, 0xff, 0x36, 0x8d, 0xc5, 0xc4,
2739 0xad, 0xfe, 0xa6, 0xf7, 0xb8, 0x73, 0xc7, 0x0e, 0xc7, 0x2d, 0x62, 0xe7,
2740 0x8f, 0x71, 0x8d, 0x3a, 0xe4, 0x29, 0x8f, 0x8f, 0x80, 0xe7, 0xe7, 0x80,
2741 0x05, 0x51, 0xe7, 0xb6, 0x18, 0x8b, 0x4d, 0xae, 0x2d, 0x9b, 0x7a, 0x54,
2742 0x72, 0xe0, 0x6b, 0xfb, 0xe6, 0x6a, 0x53, 0xd0, 0x65, 0x8c, 0x7f, 0x90,
2743 0xe3, 0x8f, 0xf8, 0xeb, 0x9c, 0x70, 0x0b, 0xd6, 0x87, 0x65, 0x66, 0xd5,
2744 0xe8, 0x5f, 0xd6, 0x81, 0xee, 0x1d, 0x46, 0x7b, 0x9d, 0x36, 0xe1, 0xfd,
2745 0xc6, 0x09, 0x6c, 0x43, 0x4a, 0x6d, 0xc3, 0xfc, 0x32, 0xf5, 0x93, 0x7a,
2746 0x19, 0xe8, 0x63, 0x80, 0x79, 0xd4, 0x51, 0xe2, 0x6c, 0x5a, 0x5e, 0x58,
2747 0xe6, 0xda, 0x64, 0x34, 0xa7, 0x35, 0xb4, 0x32, 0xab, 0xf5, 0x3d, 0x83,
2748 0xe5, 0xc4, 0x8b, 0x05, 0x19, 0x97, 0xab, 0x2e, 0xd7, 0x2c, 0x51, 0xcd,
2749 0x87, 0x3b, 0x1a, 0xde, 0xff, 0x9c, 0xbf, 0x66, 0x29, 0xd5, 0xab, 0xc1,
2750 0xf2, 0xe5, 0x1d, 0x79, 0xe7, 0xad, 0xc3, 0x4d, 0xeb, 0x14, 0x70, 0xb8,
2751 0xb8, 0x90, 0x3f, 0x44, 0xba, 0xd8, 0x87, 0xcf, 0x25, 0xe7, 0xe3, 0xb3,
2752 0x68, 0x5b, 0xef, 0x60, 0x3d, 0x83, 0xd0, 0x8f, 0x8b, 0x3c, 0x62, 0xb8,
2753 0x45, 0xde, 0x7a, 0x18, 0xeb, 0x76, 0x50, 0xeb, 0x28, 0xe7, 0xbf, 0xfb,
2754 0x1e, 0xfa, 0xe7, 0x7d, 0x7e, 0x9e, 0xc6, 0x78, 0x7c, 0x77, 0xee, 0xa9,
2755 0xd2, 0x49, 0xea, 0xe6, 0xa4, 0xe6, 0x03, 0xd9, 0x87, 0xfb, 0x96, 0x6b,
2756 0x44, 0x39, 0x5c, 0x8e, 0x19, 0x7b, 0x7a, 0xa2, 0x69, 0x3e, 0x49, 0x7f,
2757 0x3e, 0xc1, 0xf5, 0x16, 0x89, 0xf4, 0xa6, 0xb4, 0x96, 0x24, 0x59, 0xa6,
2758 0x8f, 0x02, 0x5b, 0x35, 0xcd, 0xb1, 0x6e, 0x8d, 0xbd, 0xf9, 0xff, 0x13,
2759 0x7b, 0xf3, 0x56, 0x49, 0xe7, 0xd8, 0xe2, 0xfc, 0x2f, 0x72, 0x6c, 0xac,
2760 0xa7, 0x37, 0x72, 0x7b, 0x6e, 0x99, 0xf6, 0x29, 0xa3, 0xb1, 0xe3, 0x3f,
2761 0x95, 0xb8, 0x96, 0x9c, 0xe3, 0x55, 0xce, 0x71, 0xbc, 0xae, 0xb5, 0x74,
2762 0x0f, 0xe9, 0x9e, 0x5d, 0x5c, 0x26, 0xa6, 0x74, 0xc8, 0x5a, 0x25, 0xc0,
2763 0x95, 0x07, 0x7c, 0x4e, 0x5b, 0xec, 0x6e, 0xc5, 0x3e, 0x39, 0xe3, 0x5a,
2764 0x5a, 0x47, 0x68, 0x3d, 0xcc, 0x73, 0x03, 0x52, 0x5b, 0xa5, 0x9d, 0x4d,
2765 0xc2, 0xaf, 0x88, 0x86, 0x6a, 0xeb, 0xcc, 0x45, 0xb2, 0x4e, 0x64, 0x5c,
2766 0x98, 0xbb, 0xcf, 0xd9, 0xf3, 0xd8, 0x5f, 0x31, 0xf8, 0xfd, 0xe4, 0xf0,
2767 0x8c, 0x8f, 0x35, 0xcb, 0x7b, 0x74, 0x87, 0x03, 0xee, 0x95, 0xf3, 0x2f,
2768 0xb0, 0xde, 0xd4, 0x6b, 0xc7, 0xbe, 0x0e, 0x3b, 0x99, 0x8b, 0xf2, 0xff,
2769 0x0c, 0xb8, 0x3f, 0x7d, 0x8d, 0xb8, 0xfa, 0x1a, 0xb5, 0x6a, 0x46, 0x96,
2770 0x54, 0xf7, 0x3b, 0xfc, 0x58, 0x52, 0x87, 0xea, 0x07, 0x75, 0x2c, 0xaf,
2771 0x9c, 0x7b, 0x54, 0x71, 0xaa, 0x58, 0x1a, 0x36, 0x75, 0x26, 0x76, 0xcc,
2772 0xaf, 0x27, 0x6f, 0x7c, 0x7e, 0xcc, 0x7f, 0xfe, 0x5f, 0x7c, 0xf9, 0xda,
2773 0x8a, 0x31, 0xba, 0xd6, 0x56, 0x52, 0x7d, 0xcb, 0xf9, 0x65, 0xea, 0x07,
2774 0xf5, 0x84, 0x38, 0x17, 0xdc, 0x17, 0xc8, 0x24, 0x68, 0xf3, 0x7e, 0xea,
2775 0x7c, 0x63, 0x4d, 0x41, 0xb0, 0x3f, 0x83, 0x73, 0x81, 0x8c, 0x78, 0xad,
2776 0xd1, 0x0e, 0x70, 0xaf, 0xc5, 0x21, 0xa7, 0xdd, 0xfd, 0xd6, 0x55, 0xde,
2777 0x95, 0x4d, 0xf6, 0x14, 0xe7, 0x7f, 0x99, 0x71, 0x5c, 0xec, 0xb1, 0xfd,
2778 0xe4, 0xf3, 0x65, 0x95, 0x4f, 0x1e, 0xf2, 0xe9, 0x52, 0xdc, 0xa7, 0x8f,
2779 0x77, 0xc9, 0xd7, 0xb9, 0x0e, 0xac, 0x19, 0xe3, 0xb2, 0xc0, 0xb7, 0xf3,
2780 0xc4, 0xf9, 0xbe, 0x3e, 0xe2, 0x0b, 0x63, 0x8a, 0x99, 0xe9, 0x43, 0xc0,
2781 0x30, 0xb6, 0x8f, 0x2b, 0x07, 0x31, 0x3e, 0x56, 0x5c, 0x63, 0x8b, 0x61,
2782 0x60, 0x72, 0xad, 0x04, 0x7e, 0xc6, 0xba, 0xaf, 0x3d, 0xf2, 0x7a, 0xca,
2783 0x5f, 0xaf, 0x89, 0x3e, 0xca, 0x87, 0xfb, 0x80, 0x58, 0xd9, 0x89, 0xf1,
2784 0xce, 0x46, 0x53, 0xd0, 0xb1, 0x71, 0x9c, 0x1f, 0x52, 0x1f, 0x22, 0x8c,
2785 0x7d, 0xbe, 0x5d, 0xea, 0xf5, 0xfd, 0x36, 0x07, 0x6d, 0xf8, 0xaa, 0xa5,
2786 0x2e, 0xfa, 0x11, 0x1a, 0x47, 0x6c, 0x2d, 0xc3, 0x67, 0x05, 0x76, 0xd7,
2787 0xd5, 0x06, 0x8d, 0xe0, 0xfa, 0x6d, 0xac, 0x89, 0xd3, 0xda, 0xe0, 0x6d,
2788 0x95, 0x19, 0x7d, 0xcd, 0x63, 0xba, 0xa6, 0xb5, 0x52, 0x22, 0xf6, 0xb8,
2789 0xf8, 0xe7, 0xa6, 0xf9, 0xdc, 0xc1, 0x86, 0x79, 0x4d, 0xca, 0xd9, 0x1d,
2790 0x1b, 0x41, 0xdf, 0x19, 0xbc, 0xbd, 0x62, 0x6c, 0x40, 0xb1, 0x9a, 0xd2,
2791 0xfa, 0xa5, 0xf0, 0xd8, 0x06, 0xd6, 0x92, 0x3c, 0xf4, 0x06, 0xb8, 0xf7,
2792 0x08, 0xd6, 0x90, 0x5c, 0xdb, 0x9b, 0x5b, 0x70, 0x33, 0xcc, 0x85, 0xc1,
2793 0x86, 0xcd, 0x49, 0x0e, 0xbe, 0x40, 0x2e, 0x7c, 0x98, 0x31, 0x64, 0xf0,
2794 0xc1, 0x82, 0x1f, 0x6f, 0x1c, 0x61, 0x9c, 0x54, 0x56, 0xd6, 0x39, 0x77,
2795 0xee, 0x6f, 0xe3, 0x6f, 0xd7, 0x4a, 0x9c, 0xaf, 0x89, 0x3d, 0xb0, 0x6d,
2796 0x95, 0x5d, 0x1c, 0xb9, 0x16, 0x69, 0x1c, 0xef, 0xc5, 0x9e, 0xe0, 0xbd,
2797 0x38, 0xae, 0xdf, 0x90, 0x5f, 0xad, 0x06, 0xf6, 0x3c, 0x24, 0x6f, 0x3a,
2798 0xde, 0xdc, 0xbc, 0xdb, 0xcd, 0x35, 0x70, 0x0b, 0xcc, 0x65, 0x3b, 0x8e,
2799 0x5b, 0x14, 0xcf, 0xab, 0xbb, 0xf5, 0x6e, 0x4b, 0x65, 0x49, 0x0c, 0xf8,
2800 0x1a, 0xd6, 0xf0, 0x8d, 0xbb, 0x2d, 0x31, 0xf2, 0xa3, 0x6c, 0xae, 0xfd,
2801 0x57, 0xfc, 0x0f, 0x30, 0x90, 0xfa, 0x48, 0xbd, 0xbc, 0x21, 0x53, 0x8a,
2802 0xf9, 0xfb, 0xf5, 0x6b, 0xc4, 0x89, 0x80, 0xd3, 0x12, 0xd3, 0xa9, 0x8b,
2803 0x31, 0xf5, 0x09, 0x8e, 0x95, 0x9b, 0x71, 0xe1, 0x33, 0x7e, 0x0e, 0x61,
2804 0x3f, 0xdd, 0x7b, 0xd4, 0xc7, 0x86, 0x31, 0xe5, 0xcb, 0x19, 0x9b, 0x18,
2805 0xc1, 0xf9, 0x1c, 0x94, 0xd9, 0x2b, 0x8d, 0x38, 0x4c, 0x5f, 0xcf, 0xe0,
2806 0x87, 0x7e, 0xe3, 0xa1, 0xfc, 0xd7, 0x92, 0xc1, 0x15, 0xf2, 0x25, 0x07,
2807 0x58, 0xda, 0x23, 0xf9, 0xe9, 0xb0, 0x24, 0x57, 0x7e, 0xd6, 0x67, 0xf8,
2808 0x2d, 0xf5, 0x0f, 0xfb, 0x4d, 0xcf, 0xb1, 0x5d, 0xc7, 0xf9, 0x23, 0xc2,
2809 0x67, 0x1b, 0x7d, 0xc6, 0x7e, 0x3e, 0x1f, 0x5c, 0xb3, 0x9b, 0x74, 0xf4,
2810 0x5e, 0x5f, 0x47, 0x79, 0xdd, 0x32, 0xb9, 0x0e, 0xdc, 0x3b, 0xb8, 0xc2,
2811 0x39, 0x9a, 0x7e, 0x83, 0x2b, 0xc6, 0x47, 0xdf, 0xdb, 0x6f, 0x64, 0xa7,
2812 0x1f, 0xae, 0x83, 0xef, 0x9a, 0xb1, 0xa7, 0x46, 0xc1, 0xe3, 0x46, 0x58,
2813 0x83, 0x44, 0x9b, 0x3d, 0xe4, 0x4e, 0x09, 0xf5, 0x3d, 0xe1, 0xeb, 0x1c,
2814 0xf1, 0xa6, 0xcb, 0xc7, 0x9b, 0x5d, 0x1b, 0x93, 0x33, 0x35, 0x27, 0x8c,
2815 0x83, 0x34, 0xd8, 0x18, 0xe9, 0xff, 0x4f, 0x1b, 0x73, 0xc4, 0x1f, 0x27,
2816 0xb8, 0x16, 0xe0, 0x4a, 0xd0, 0x0e, 0x70, 0xa5, 0x99, 0xc7, 0x06, 0xb2,
2817 0x6f, 0x3c, 0xdf, 0xe8, 0xe7, 0x65, 0x7c, 0x7f, 0xde, 0xd2, 0xfd, 0xf3,
2818 0xca, 0x8e, 0x1f, 0x4f, 0x19, 0x27, 0xa0, 0x7a, 0x25, 0xec, 0xed, 0xf7,
2819 0xd4, 0x6f, 0x5e, 0xbc, 0x32, 0xa1, 0xb1, 0x9c, 0x9a, 0xca, 0xfa, 0xab,
2820 0x58, 0x9f, 0x33, 0xd8, 0x47, 0x0f, 0x46, 0x77, 0xeb, 0x86, 0x56, 0x9f,
2821 0xc9, 0xfa, 0xbc, 0x25, 0x23, 0x5d, 0x98, 0x5f, 0x5a, 0xeb, 0xb0, 0xda,
2822 0x9d, 0xaf, 0xc8, 0x03, 0x66, 0xee, 0x6d, 0x6d, 0x63, 0xeb, 0xcf, 0xb4,
2823 0x7d, 0x2b, 0xd0, 0x73, 0xea, 0xcf, 0xea, 0x33, 0xb3, 0x15, 0x6f, 0x3c,
2824 0x72, 0x72, 0xd8, 0x2e, 0x0a, 0x6b, 0xbd, 0xc7, 0xe5, 0x09, 0x97, 0xd7,
2825 0x7f, 0x88, 0xeb, 0xd3, 0xf4, 0x21, 0x13, 0x11, 0xfd, 0xfe, 0x20, 0x11,
2826 0x7b, 0x0c, 0x7b, 0x6f, 0x46, 0xbf, 0xf7, 0x38, 0xa4, 0x35, 0xe2, 0x35,
2827 0x21, 0x97, 0x62, 0x8d, 0xc1, 0xb3, 0xf2, 0xb8, 0x3b, 0xe4, 0xd6, 0xc5,
2828 0x70, 0xdc, 0x19, 0xcd, 0xf7, 0x1c, 0x90, 0xc7, 0xdc, 0x48, 0x5b, 0x76,
2829 0xcb, 0xe8, 0xfc, 0x44, 0x38, 0xd3, 0xbe, 0xe0, 0x44, 0xdb, 0xa6, 0xb6,
2830 0xb0, 0xa7, 0xb7, 0x80, 0xf7, 0x5b, 0xb1, 0x50, 0x6e, 0x83, 0xef, 0x1e,
2831 0x36, 0x35, 0x1d, 0xea, 0x5f, 0x11, 0x43, 0xee, 0x93, 0x6d, 0xfb, 0xb8,
2832 0x6c, 0xa7, 0xf8, 0x4d, 0xd6, 0x29, 0xb4, 0x07, 0x35, 0xe7, 0xb2, 0x0d,
2833 0xbc, 0xd9, 0x4e, 0xb5, 0xa9, 0x0e, 0xaa, 0x1f, 0x06, 0x9c, 0xda, 0xb6,
2834 0x89, 0x4f, 0x77, 0xf0, 0x88, 0x77, 0x9e, 0x83, 0x1c, 0x58, 0xef, 0x71,
2835 0x02, 0x6d, 0xe2, 0x9a, 0xdd, 0x74, 0xbe, 0x1f, 0xed, 0xbb, 0x31, 0x46,
2836 0xab, 0xbe, 0xa3, 0xe5, 0x9c, 0x34, 0x79, 0xcc, 0x3d, 0xf7, 0x74, 0x36,
2837 0xb5, 0x3f, 0x77, 0xd4, 0x7c, 0x6f, 0xf4, 0x3d, 0xca, 0xb8, 0x90, 0x91,
2838 0xbf, 0xc5, 0xf6, 0xb6, 0x97, 0xfb, 0xf6, 0xb6, 0x0f, 0x4b, 0x7b, 0x0f,
2839 0x45, 0xd1, 0xdd, 0x74, 0x5f, 0xa0, 0x43, 0x41, 0xfb, 0x28, 0x71, 0x85,
2840 0x76, 0x4b, 0x7d, 0xa6, 0xed, 0x28, 0x9f, 0xb5, 0xd8, 0xd4, 0x87, 0xff,
2841 0xd9, 0x87, 0x7d, 0x19, 0xbf, 0xfb, 0xbe, 0xd1, 0x33, 0x8b, 0xbe, 0x3f,
2842 0xe3, 0x17, 0xd4, 0xd3, 0xfd, 0xfc, 0xa9, 0x84, 0x7e, 0x1f, 0xb4, 0xbf,
2843 0xae, 0x05, 0x38, 0x12, 0xf3, 0x63, 0x0a, 0x26, 0xef, 0x64, 0xe2, 0xbe,
2844 0x94, 0x9d, 0xe6, 0x9d, 0x62, 0xd7, 0x21, 0xe7, 0x0b, 0x90, 0xf3, 0x64,
2845 0x98, 0xbe, 0x1f, 0xf3, 0x4b, 0x8e, 0xe4, 0xb6, 0x28, 0x6f, 0xda, 0x75,
2846 0xea, 0x26, 0x78, 0xc4, 0x16, 0x31, 0xc5, 0x02, 0x07, 0xca, 0x60, 0x8e,
2847 0xaf, 0xe1, 0xbc, 0xe5, 0xd7, 0x6f, 0xa4, 0x61, 0xd3, 0x5c, 0xfc, 0x28,
2848 0x77, 0xf8, 0xf4, 0x6b, 0x94, 0x31, 0xeb, 0xd9, 0x18, 0x0b, 0xe0, 0xfc,
2849 0x98, 0x63, 0x77, 0xa1, 0xd3, 0x13, 0xd0, 0xdd, 0x88, 0x38, 0xe5, 0x13,
2850 0x52, 0x98, 0x9e, 0x50, 0xfb, 0x3f, 0x08, 0xfb, 0x34, 0xef, 0x66, 0x65,
2851 0xe1, 0xe5, 0x3b, 0xb1, 0x4f, 0xe9, 0xe7, 0x6b, 0x0c, 0xc3, 0x6b, 0x51,
2852 0x9d, 0x26, 0xe7, 0x60, 0xdc, 0xcd, 0xe4, 0x92, 0xfd, 0xef, 0xaa, 0xfa,
2853 0xe5, 0x70, 0x56, 0x2a, 0x57, 0x6c, 0xad, 0x85, 0xc9, 0xc8, 0x7b, 0x1e,
2854 0x65, 0x38, 0x73, 0x3e, 0x0e, 0x9c, 0x22, 0x77, 0xff, 0x60, 0xd4, 0xac,
2855 0xe9, 0x5f, 0xfb, 0xe9, 0x03, 0x27, 0xcb, 0x8d, 0x63, 0x68, 0xfd, 0x0c,
2856 0xae, 0x3d, 0x74, 0xd4, 0xec, 0x1f, 0xfa, 0xc3, 0x37, 0xbd, 0x4c, 0x94,
2857 0xcf, 0xe4, 0xbd, 0xcc, 0xd1, 0x52, 0x57, 0x38, 0xb7, 0x77, 0x7d, 0xbd,
2858 0xfe, 0x28, 0xc6, 0x8b, 0xcb, 0xe0, 0xe6, 0x84, 0xfa, 0xf1, 0xf3, 0x7b,
2859 0x7c, 0x56, 0x13, 0x1f, 0x30, 0x7e, 0xeb, 0x1b, 0xf2, 0xd8, 0x06, 0xe5,
2860 0x44, 0xfb, 0x1e, 0x92, 0x1f, 0x39, 0xc3, 0xf6, 0x93, 0x5a, 0x77, 0x9c,
2861 0xc8, 0x30, 0x1f, 0x73, 0xd0, 0x49, 0xda, 0x6b, 0x12, 0x19, 0xfd, 0x98,
2862 0xf0, 0x9b, 0x16, 0xd6, 0x7a, 0x0c, 0xbb, 0x4f, 0x4a, 0x50, 0xef, 0x31,
2863 0x94, 0x39, 0x10, 0xfa, 0xa7, 0xf7, 0xc6, 0x79, 0xde, 0x63, 0xea, 0x3d,
2864 0x24, 0x44, 0xb9, 0xfd, 0xf1, 0x0e, 0x7e, 0xe3, 0xb9, 0x37, 0xde, 0x77,
2865 0xff, 0xd3, 0xe7, 0xd2, 0x89, 0x25, 0xfa, 0xac, 0x2d, 0xce, 0xbf, 0xfa,
2866 0xcd, 0xbb, 0x16, 0x0a, 0x9d, 0xa2, 0xf9, 0xb2, 0x4b, 0xef, 0x38, 0xac,
2867 0x7b, 0x48, 0xc4, 0x0e, 0x58, 0x8c, 0x7b, 0x13, 0xdf, 0x98, 0x43, 0x61,
2868 0x8c, 0x0d, 0x6d, 0x70, 0x86, 0x97, 0x46, 0x2c, 0xb9, 0x3f, 0x92, 0x89,
2869 0x5b, 0x72, 0x2c, 0xbe, 0x22, 0x78, 0x26, 0xf3, 0x29, 0x1b, 0x89, 0x02,
2870 0xef, 0x8f, 0x94, 0x39, 0x5e, 0x5c, 0xfd, 0x93, 0xe4, 0x31, 0xcf, 0xbb,
2871 0xe4, 0x4a, 0x28, 0x79, 0xd7, 0xdb, 0x1e, 0x73, 0xde, 0xd6, 0xe6, 0xfb,
2872 0xd5, 0x23, 0x10, 0x37, 0x16, 0x9e, 0x32, 0xb5, 0x87, 0x4b, 0x97, 0x06,
2873 0x37, 0xf4, 0x9b, 0xb9, 0x69, 0xd3, 0x2e, 0xa1, 0xdd, 0xea, 0xd7, 0x41,
2874 0x55, 0x2e, 0x0d, 0x56, 0x8f, 0xdc, 0x6e, 0xfc, 0x6d, 0xf2, 0xab, 0xc0,
2875 0x87, 0x89, 0xef, 0xa9, 0x0b, 0x3b, 0xbb, 0x7c, 0x26, 0x74, 0x66, 0xd9,
2876 0x5a, 0x6d, 0x63, 0x0e, 0xec, 0x94, 0x27, 0xdd, 0x27, 0x83, 0x38, 0x15,
2877 0xe3, 0x5a, 0x22, 0x9d, 0x9b, 0x13, 0x26, 0xe7, 0xb1, 0x69, 0x29, 0x17,
2878 0xea, 0x7a, 0x89, 0xb1, 0xaa, 0xa8, 0x62, 0x43, 0xf7, 0x26, 0xeb, 0xc1,
2879 0x7a, 0x64, 0x46, 0x31, 0xa3, 0x47, 0xf1, 0xc0, 0xe8, 0x5d, 0x97, 0xc6,
2880 0x61, 0xc9, 0x97, 0xae, 0x2d, 0xbb, 0x03, 0xac, 0xe1, 0x79, 0x75, 0xf9,
2881 0x09, 0xb4, 0x89, 0x33, 0xf7, 0x34, 0x9d, 0x6f, 0xcc, 0xc9, 0x26, 0xec,
2882 0x41, 0xab, 0x39, 0x1f, 0xcb, 0x73, 0xcd, 0x79, 0xd8, 0x57, 0x25, 0xdf,
2883 0xcb, 0xdc, 0x6b, 0x10, 0x6f, 0x77, 0xfd, 0x78, 0xfb, 0x87, 0x06, 0xa8,
2884 0x83, 0xf0, 0x6f, 0xf2, 0x91, 0xb1, 0xb6, 0x91, 0xf9, 0x52, 0xf8, 0x1f,
2885 0xbb, 0xb1, 0x53, 0xb4, 0x37, 0x76, 0xf2, 0xe3, 0xb8, 0xf6, 0x25, 0x70,
2886 0x92, 0x22, 0xf8, 0x45, 0xc1, 0xaf, 0xc3, 0xe7, 0xf5, 0x9d, 0xfe, 0xb7,
2887 0x98, 0xd3, 0x41, 0xcd, 0xad, 0x0f, 0xee, 0xc9, 0xad, 0xdf, 0x35, 0xc0,
2888 0xda, 0xe3, 0xe2, 0xd6, 0x6e, 0xdf, 0x88, 0xdf, 0x77, 0xe2, 0x96, 0xef,
2889 0x63, 0xf6, 0x4c, 0x51, 0xf7, 0xcc, 0x65, 0x8d, 0x11, 0xcf, 0x6f, 0x2d,
2890 0xc9, 0x8c, 0xd3, 0x25, 0xb9, 0xd5, 0xc0, 0x4e, 0x78, 0xe3, 0xb3, 0x6e,
2891 0xa1, 0x2f, 0x2c, 0xec, 0xcf, 0xe7, 0x29, 0x47, 0x8b, 0xe5, 0xc2, 0x1c,
2892 0xff, 0x90, 0x44, 0xc6, 0x68, 0x3b, 0x68, 0x13, 0x3e, 0x05, 0x2c, 0x03,
2893 0x4f, 0xdf, 0x6a, 0xcc, 0x7d, 0xbf, 0x9f, 0x1c, 0x29, 0xc3, 0xe0, 0x9d,
2894 0x0b, 0x5e, 0x2b, 0xf6, 0xdf, 0x31, 0xd6, 0xb4, 0xec, 0xcc, 0x95, 0x36,
2895 0x4b, 0x6d, 0x93, 0xbe, 0xc7, 0x94, 0xff, 0x1e, 0x61, 0xcc, 0x67, 0xb6,
2896 0x14, 0xdc, 0x33, 0x27, 0xc7, 0x4f, 0x25, 0x62, 0x49, 0x4b, 0xe7, 0xa5,
2897 0xf6, 0x2b, 0xeb, 0xce, 0xc1, 0x2e, 0xd1, 0x86, 0x29, 0xae, 0x81, 0xab,
2898 0x12, 0xd7, 0x68, 0x9f, 0xd4, 0xa6, 0xc5, 0x8b, 0x98, 0x67, 0x6e, 0x4b,
2899 0xf3, 0x0f, 0xb1, 0xd3, 0xe1, 0x44, 0x65, 0x46, 0xb1, 0x0e, 0x7c, 0x55,
2900 0xe7, 0x0e, 0x7b, 0x1c, 0x6a, 0xcc, 0x2d, 0xd1, 0xbf, 0x64, 0x1e, 0xa6,
2901 0x43, 0xb2, 0x15, 0x91, 0x57, 0xa0, 0xdf, 0x57, 0xd7, 0xb9, 0xe7, 0xc2,
2902 0xbd, 0xc6, 0x47, 0xac, 0xdf, 0x63, 0x49, 0xaf, 0xe6, 0x6b, 0x8b, 0x58,
2903 0x2f, 0xf0, 0xab, 0xf1, 0xf0, 0x29, 0xf8, 0x09, 0x5a, 0x27, 0xc1, 0x18,
2904 0xeb, 0x2c, 0x7c, 0xca, 0xc6, 0xb8, 0x10, 0x30, 0x62, 0x9a, 0xe7, 0x67,
2905 0xc0, 0x8b, 0x77, 0x73, 0x35, 0xc5, 0xea, 0x82, 0xc6, 0x63, 0x6b, 0xeb,
2906 0x1d, 0x6a, 0x2f, 0x6a, 0xd5, 0x3e, 0xac, 0x8b, 0x1c, 0xb7, 0xc6, 0x8a,
2907 0xfe, 0xf9, 0x16, 0xa9, 0x56, 0xd9, 0x96, 0x81, 0x56, 0xd5, 0x97, 0x20,
2908 0x1f, 0x65, 0xcb, 0x1a, 0xb8, 0x6e, 0x75, 0xc3, 0xc1, 0x2f, 0x85, 0xdf,
2909 0x08, 0x7e, 0x0f, 0x4a, 0xb6, 0x4c, 0xfe, 0xcd, 0xfc, 0x53, 0x47, 0xd3,
2910 0xf3, 0x5b, 0xf4, 0xfb, 0x11, 0xd6, 0xb4, 0x15, 0x7d, 0x3f, 0xad, 0x58,
2911 0xdd, 0x8f, 0x9b, 0x32, 0xbe, 0x9b, 0xf2, 0xb1, 0xee, 0xa7, 0x7e, 0x6d,
2912 0xed, 0xbf, 0x01, 0x17, 0x24, 0x5e, 0x9d, 0xe0, 0x70, 0x00, 0x00, 0x00 };
2913
2914static const u32 bnx2_RXP_b06FwData[(0x0/4) + 1] = { 0x0 };
2915static const u32 bnx2_RXP_b06FwRodata[(0x24/4) + 1] = {
2916 0x08004c28, 0x08004c28, 0x08004ba0, 0x08004bd8, 0x08004c0c, 0x08004c30,
2917 0x08004c30, 0x08004c30, 0x08004b10, 0x00000000 };
2918
2919static struct fw_info bnx2_rxp_fw_06 = {
2920 /* Firmware version: 4.6.16 */
2921 .ver_major = 0x4,
2922 .ver_minor = 0x6,
2923 .ver_fix = 0x10,
2924
2925 .start_addr = 0x080031d8,
2926
2927 .text_addr = 0x08000000,
2928 .text_len = 0x70dc,
2929 .text_index = 0x0,
2930 .gz_text = bnx2_RXP_b06FwText,
2931 .gz_text_len = sizeof(bnx2_RXP_b06FwText),
2932
2933 .data_addr = 0x00000000,
2934 .data_len = 0x0,
2935 .data_index = 0x0,
2936 .data = bnx2_RXP_b06FwData,
2937
2938 .sbss_addr = 0x08007120,
2939 .sbss_len = 0x54,
2940 .sbss_index = 0x0,
2941
2942 .bss_addr = 0x08007178,
2943 .bss_len = 0x450,
2944 .bss_index = 0x0,
2945
2946 .rodata_addr = 0x080070dc,
2947 .rodata_len = 0x24,
2948 .rodata_index = 0x0,
2949 .rodata = bnx2_RXP_b06FwRodata,
2950};
2951
2952/* Initialized Values for the RX Processor. */ 42/* Initialized Values for the RX Processor. */
2953static const struct cpu_reg cpu_reg_rxp = { 43static const struct cpu_reg cpu_reg_rxp = {
2954 .mode = BNX2_RXP_CPU_MODE, 44 .mode = BNX2_RXP_CPU_MODE,
@@ -2965,595 +55,6 @@ static const struct cpu_reg cpu_reg_rxp = {
2965 .mips_view_base = 0x8000000, 55 .mips_view_base = 0x8000000,
2966}; 56};
2967 57
2968static u8 bnx2_rv2p_proc1[] = {
2969 /* Date: 02/03/2009 14:20 */
2970 0xa5, 0x56, 0x4f, 0x68, 0x14, 0x67, 0x14, 0x7f, 0x33, 0xbb, 0xb3, 0xb3,
2971 0x99, 0x9d, 0xd9, 0xdd, 0x92, 0x18, 0x96, 0x18, 0xcc, 0x1a, 0x84, 0x92,
2972 0x75, 0xb7, 0x6e, 0x6c, 0x0f, 0x42, 0x03, 0x29, 0xb9, 0x08, 0x35, 0x87,
2973 0x12, 0x11, 0x8a, 0x2d, 0x68, 0xb7, 0x22, 0x14, 0x0a, 0xa5, 0x07, 0x8f,
2974 0xa5, 0x83, 0x71, 0x53, 0x5a, 0xbc, 0xe4, 0xd0, 0x80, 0x42, 0x35, 0x27,
2975 0x5b, 0x62, 0x0e, 0x3b, 0xe0, 0xa1, 0x88, 0xe0, 0x41, 0x8f, 0x7a, 0xaa,
2976 0x7f, 0x5a, 0x28, 0x46, 0x29, 0xb5, 0x87, 0x82, 0xc7, 0xde, 0x9a, 0xe9,
2977 0xf7, 0xfe, 0x7c, 0xbb, 0x33, 0x5f, 0x66, 0x13, 0xa1, 0x42, 0xfc, 0xf1,
2978 0xbd, 0x79, 0xef, 0xfb, 0xde, 0x9f, 0xdf, 0x7b, 0x6f, 0xab, 0x00, 0x60,
2979 0x43, 0x18, 0x4d, 0x29, 0x04, 0x2b, 0x67, 0x15, 0x11, 0x00, 0x36, 0x81,
2980 0xff, 0x39, 0x3e, 0x9d, 0xc3, 0x23, 0x72, 0x3e, 0xcc, 0x10, 0x1e, 0xae,
2981 0xaa, 0xff, 0x3f, 0x85, 0xf9, 0x3a, 0x62, 0x0e, 0xe6, 0x0f, 0x22, 0x1e,
2982 0x85, 0xbb, 0xf5, 0x9a, 0xc2, 0x7f, 0x63, 0x08, 0xf1, 0x1c, 0xf4, 0x7e,
2983 0x8e, 0x4a, 0x74, 0xff, 0x96, 0xd8, 0xff, 0x9a, 0x63, 0x3c, 0xd6, 0xac,
2984 0x12, 0x3e, 0x5a, 0xc5, 0xf7, 0x4e, 0x9d, 0x82, 0x02, 0xda, 0x5d, 0x50,
2985 0x17, 0x23, 0x96, 0xd4, 0x83, 0x45, 0xb2, 0x03, 0xbb, 0xa2, 0x70, 0x12,
2986 0x9e, 0x2f, 0xa0, 0xfe, 0x1b, 0xde, 0xa5, 0x55, 0xc4, 0x12, 0x74, 0x9a,
2987 0xa8, 0x77, 0x00, 0xb2, 0xf5, 0x6a, 0x4a, 0x0f, 0xe5, 0x11, 0x84, 0x4d,
2988 0xc4, 0x11, 0x80, 0x56, 0xf2, 0x3d, 0xd7, 0x0a, 0x5b, 0x68, 0xff, 0x85,
2989 0xbc, 0xb7, 0x4f, 0xee, 0x51, 0x71, 0x47, 0x88, 0x3d, 0xb1, 0x53, 0x7f,
2990 0x2d, 0x96, 0xb3, 0xfe, 0x67, 0x4a, 0x4f, 0xc7, 0xe3, 0x73, 0xde, 0xa6,
2991 0x38, 0x1e, 0x57, 0xe2, 0x79, 0xb6, 0xaa, 0xf3, 0x86, 0xfa, 0xbf, 0xc7,
2992 0x69, 0x7d, 0xd8, 0x43, 0xff, 0x89, 0xd2, 0x4f, 0xdf, 0xcb, 0xf2, 0x5f,
2993 0x06, 0xf2, 0x99, 0xf4, 0xf7, 0xad, 0x06, 0xfa, 0xe7, 0x00, 0x34, 0x24,
2994 0x8f, 0xa4, 0xff, 0x30, 0xe6, 0x78, 0xe6, 0xe0, 0x90, 0x5d, 0x23, 0xbd,
2995 0x3c, 0xd4, 0x28, 0x3f, 0x1c, 0xef, 0x01, 0xc1, 0x25, 0xc1, 0x6b, 0x82,
2996 0x3f, 0x08, 0xc2, 0xff, 0xc4, 0xad, 0x21, 0xf2, 0x7d, 0x82, 0xfb, 0x0d,
2997 0xf9, 0x2d, 0xc1, 0xb7, 0x0c, 0x7b, 0xcf, 0x62, 0x7c, 0xac, 0xbf, 0xcb,
2998 0xf9, 0x5d, 0xc3, 0xfe, 0x4b, 0xe0, 0xfc, 0x58, 0x46, 0xde, 0x36, 0x85,
2999 0x87, 0x58, 0x77, 0xf9, 0x3e, 0xa3, 0xf5, 0x84, 0x37, 0x8d, 0xa4, 0xfe,
3000 0x8d, 0x5d, 0xf4, 0x59, 0x6d, 0x61, 0x26, 0xcb, 0xee, 0x7a, 0x2c, 0x79,
3001 0x14, 0x7b, 0xaf, 0x77, 0x67, 0x08, 0xef, 0xe7, 0x32, 0x79, 0x3f, 0x2e,
3002 0x71, 0xa8, 0xa6, 0x23, 0xfb, 0xdb, 0x16, 0xf3, 0xdb, 0x11, 0x5e, 0xee,
3003 0xc6, 0x63, 0xe1, 0xd5, 0x8c, 0xe6, 0x57, 0x9a, 0x57, 0xcc, 0x8f, 0x82,
3004 0xc1, 0x8f, 0x6f, 0xf7, 0xc8, 0x4b, 0xc9, 0x88, 0x6f, 0x39, 0xd6, 0xf9,
3005 0xb6, 0x45, 0x7c, 0xb1, 0x50, 0xa5, 0x7b, 0xbf, 0x8b, 0xe8, 0x38, 0xe6,
3006 0xaf, 0xe0, 0x39, 0x0f, 0x97, 0x23, 0x6d, 0x27, 0xfd, 0xd4, 0xd0, 0xef,
3007 0xb0, 0x7d, 0x20, 0x9f, 0x6d, 0x47, 0xfb, 0xc9, 0x72, 0x0f, 0xf0, 0x3c,
3008 0xda, 0x5b, 0x37, 0xf2, 0x56, 0xa7, 0xb8, 0x41, 0xe2, 0x07, 0x23, 0x7e,
3009 0x9d, 0xbf, 0x57, 0xc2, 0xf7, 0x49, 0x95, 0x0f, 0xfe, 0x3e, 0x05, 0xfa,
3010 0x7e, 0x9c, 0x0b, 0x45, 0x38, 0x7b, 0xbc, 0x42, 0xfe, 0x94, 0x0b, 0x7c,
3011 0xcd, 0x87, 0x15, 0xc6, 0x73, 0x1e, 0xe3, 0x9f, 0x9e, 0xca, 0x2d, 0xc4,
3012 0xf1, 0xf9, 0x12, 0x9f, 0x3f, 0x09, 0xf0, 0xde, 0x51, 0xf5, 0xb0, 0xb6,
3013 0xd7, 0x7e, 0xed, 0xe6, 0x0f, 0xbe, 0xaf, 0xdf, 0xd1, 0x7e, 0xe8, 0xf7,
3014 0xd2, 0x75, 0x19, 0xfe, 0x2e, 0x63, 0xc7, 0x4e, 0xe7, 0x21, 0x3f, 0xcb,
3015 0x78, 0xb5, 0x4d, 0x50, 0x5b, 0xf3, 0xd9, 0xee, 0x8a, 0x9f, 0xc7, 0xf3,
3016 0x3b, 0x57, 0x1e, 0xe0, 0xfd, 0xf6, 0xd1, 0xb5, 0x48, 0xfc, 0xab, 0xe8,
3017 0xba, 0x92, 0x1c, 0xa6, 0x81, 0xcf, 0x4b, 0xc2, 0x93, 0x25, 0xe2, 0x71,
3018 0x59, 0x7d, 0x42, 0x9c, 0x80, 0xd0, 0x26, 0x3d, 0xef, 0x3e, 0xd9, 0xe7,
3019 0x44, 0xae, 0xea, 0x37, 0x9d, 0xe6, 0xff, 0x16, 0xf3, 0xa2, 0x98, 0xe6,
3020 0xd3, 0x7c, 0x62, 0xce, 0x25, 0xf3, 0x61, 0xf5, 0x79, 0xb4, 0xb3, 0x8e,
3021 0xe9, 0x7a, 0x3d, 0x5a, 0xd5, 0xf9, 0x61, 0xbe, 0xb2, 0x9e, 0x2a, 0x56,
3022 0x8b, 0xd5, 0xc3, 0xb6, 0x24, 0x72, 0x56, 0xbe, 0xb7, 0x4c, 0xde, 0x66,
3023 0xf1, 0xbe, 0x6a, 0xf0, 0xb8, 0x21, 0xbc, 0x1f, 0xe9, 0xad, 0xbf, 0xd6,
3024 0x7e, 0xb8, 0x29, 0xbc, 0xaf, 0x0e, 0xf6, 0xc3, 0x26, 0xed, 0x27, 0x75,
3025 0x26, 0xf5, 0x5e, 0x98, 0x4b, 0xd5, 0xe9, 0x3d, 0xc8, 0xec, 0xef, 0xab,
3026 0x72, 0x4f, 0x5b, 0xfa, 0xbc, 0x90, 0xd8, 0x23, 0xa4, 0x5e, 0x06, 0xf2,
3027 0xc3, 0x35, 0xfa, 0x74, 0x2c, 0x96, 0x77, 0x54, 0xbf, 0x65, 0xc5, 0xeb,
3028 0xc2, 0x5f, 0xc2, 0x83, 0x0e, 0xf5, 0x93, 0x33, 0xf6, 0xf9, 0xed, 0x54,
3029 0x9d, 0x00, 0x0e, 0xea, 0xfd, 0x90, 0xf4, 0x2b, 0xb9, 0xdf, 0xf0, 0xbe,
3030 0x1a, 0x74, 0x66, 0x93, 0x7b, 0xee, 0x72, 0xbf, 0xdf, 0x03, 0xea, 0xa3,
3031 0xf2, 0x8e, 0xbe, 0xd4, 0xf3, 0xac, 0xde, 0x4c, 0xf6, 0xf7, 0x98, 0xcc,
3032 0x2f, 0x5b, 0xf6, 0x73, 0xc9, 0x8c, 0x53, 0xed, 0xbd, 0xec, 0x7a, 0x71,
3033 0xbc, 0xff, 0x6c, 0xbf, 0xde, 0xbc, 0xdb, 0xab, 0xee, 0x9e, 0x51, 0xf7,
3034 0xbf, 0xb7, 0x75, 0x1e, 0x6d, 0x27, 0x6b, 0xbf, 0x7f, 0xa0, 0xee, 0x15,
3035 0x7d, 0x99, 0x1b, 0x67, 0xea, 0x59, 0x7c, 0x2d, 0xee, 0xd0, 0x4b, 0xcf,
3036 0x2f, 0xed, 0xe7, 0xc6, 0x06, 0xd7, 0xfd, 0xa3, 0xb8, 0xbf, 0x97, 0x52,
3037 0xf3, 0x75, 0x44, 0xea, 0xac, 0xf4, 0xc8, 0xbf, 0xa7, 0xdb, 0x83, 0x79,
3038 0x9c, 0xe4, 0xcd, 0x49, 0xe1, 0xab, 0x3d, 0xb7, 0x4e, 0xfd, 0xe1, 0x76,
3039 0x5e, 0x1a, 0x75, 0x98, 0x6d, 0x62, 0xfd, 0xbf, 0x86, 0x48, 0xfc, 0xfc,
3040 0x2d, 0xe5, 0x6f, 0x20, 0xfd, 0x55, 0x80, 0x9f, 0x22, 0x1d, 0x97, 0xae,
3041 0x1b, 0xe3, 0x8f, 0x4d, 0xe9, 0x93, 0x7e, 0x7c, 0xf8, 0xee, 0xa2, 0xbc,
3042 0x5b, 0x85, 0x1b, 0x91, 0x9e, 0x63, 0x38, 0xd7, 0x5c, 0x68, 0xcb, 0xdc,
3043 0x3c, 0x2b, 0xf3, 0xeb, 0x85, 0xc7, 0xf3, 0xb1, 0x73, 0x82, 0x78, 0x08,
3044 0xe3, 0x32, 0xc7, 0x3a, 0x01, 0x9f, 0x27, 0x02, 0xfe, 0x7d, 0xd8, 0x76,
3045 0x7d, 0xd2, 0x9b, 0x08, 0x18, 0xc7, 0x4b, 0x68, 0x57, 0x83, 0x3f, 0x16,
3046 0x49, 0xbd, 0x39, 0x98, 0x63, 0xe6, 0xfc, 0x92, 0x38, 0xdf, 0x46, 0xb9,
3047 0xda, 0x93, 0xd3, 0x7c, 0xe6, 0x3a, 0xfb, 0x7d, 0x5e, 0x5f, 0x97, 0xaa,
3048 0xd4, 0x2b, 0xc9, 0x3c, 0xeb, 0x3e, 0xba, 0x69, 0xe4, 0x57, 0xd7, 0xe7,
3049 0xcd, 0x58, 0xcf, 0xf7, 0xe9, 0xe3, 0xe8, 0x6f, 0x05, 0xca, 0x2e, 0xf3,
3050 0x82, 0x51, 0xdd, 0x63, 0xbb, 0x68, 0x36, 0xd9, 0x95, 0x79, 0xd8, 0xbd,
3051 0x48, 0xd7, 0x2c, 0x76, 0xb5, 0x7c, 0x81, 0x1a, 0x61, 0x69, 0xe3, 0x1e,
3052 0xc9, 0xcb, 0x51, 0x8e, 0xe5, 0xee, 0x09, 0x9d, 0xaf, 0x0a, 0xc5, 0xbf,
3053 0xc6, 0xf9, 0xfa, 0xf8, 0x7b, 0xc6, 0xd3, 0xf0, 0x3e, 0xa1, 0x37, 0x98,
3054 0xe3, 0x45, 0x42, 0x08, 0x92, 0x73, 0xdc, 0x51, 0xee, 0x55, 0xc9, 0x9f,
3055 0x41, 0xfd, 0xcc, 0xfd, 0xb8, 0x5b, 0x1d, 0x47, 0x13, 0xfc, 0xd3, 0x75,
3056 0x34, 0xe7, 0x39, 0xf1, 0xc4, 0xe0, 0x63, 0x77, 0x08, 0x1f, 0xad, 0x21,
3057 0x7c, 0x36, 0xe7, 0xd6, 0x57, 0xd2, 0xc7, 0x79, 0x70, 0x72, 0xb4, 0x70,
3058 0xfd, 0xfc, 0x32, 0xd5, 0xd5, 0xee, 0xf2, 0x0f, 0x08, 0xdf, 0x59, 0xb1,
3059 0x28, 0x5f, 0xfe, 0x0a, 0xeb, 0xe5, 0x59, 0x5e, 0xd3, 0xf8, 0xcd, 0xb2,
3060 0xfe, 0xbd, 0xf1, 0x1f, 0xb6, 0x34, 0x9b, 0xb9, 0xa0, 0x0c, 0x00, 0x00,
3061 0x00 };
3062
3063static u8 bnx2_rv2p_proc2[] = {
3064 /* Date: 02/03/2009 14:20 */
3065 0xad, 0x57, 0x4d, 0x68, 0x5c, 0x55, 0x14, 0x3e, 0xf3, 0xe6, 0xef, 0xcd,
3066 0xcc, 0x9b, 0xcc, 0x34, 0x8d, 0x93, 0x31, 0x29, 0x26, 0x4d, 0x68, 0xea,
3067 0xc8, 0x44, 0xf3, 0x47, 0x05, 0x5d, 0x18, 0x46, 0x48, 0x7f, 0x2c, 0x34,
3068 0x8d, 0x2e, 0x8a, 0x9b, 0x36, 0x53, 0x3b, 0x3a, 0x6d, 0xed, 0xc2, 0xec,
3069 0xdc, 0xf8, 0xb0, 0x35, 0x41, 0x98, 0x45, 0x53, 0x4c, 0x13, 0x44, 0xa8,
3070 0xe8, 0xce, 0xdd, 0x88, 0x9a, 0xd6, 0x8d, 0x50, 0x68, 0x28, 0x76, 0x51,
3071 0x04, 0x05, 0xed, 0x42, 0x10, 0xad, 0xa1, 0x15, 0x41, 0x51, 0xb3, 0x92,
3072 0x8c, 0xf7, 0x9e, 0xef, 0xdc, 0x37, 0xef, 0x4d, 0xa6, 0xa4, 0x0b, 0x67,
3073 0xf3, 0xe5, 0xdc, 0x77, 0xee, 0xb9, 0xe7, 0xe7, 0x3b, 0xe7, 0xde, 0x64,
3074 0x89, 0x28, 0x42, 0x6e, 0xbd, 0x4f, 0x21, 0x85, 0xc2, 0x21, 0x5b, 0x41,
3075 0x83, 0x28, 0x9a, 0xd7, 0x32, 0x59, 0x24, 0xbf, 0x27, 0xb2, 0x0c, 0xdf,
3076 0xd6, 0x1d, 0xad, 0x46, 0x6e, 0x41, 0xeb, 0xd9, 0xf4, 0x92, 0x05, 0xbd,
3077 0x08, 0x69, 0x54, 0x3a, 0xae, 0xc6, 0x1d, 0x82, 0xcf, 0x08, 0x46, 0x42,
3078 0xc0, 0xb0, 0xa0, 0xd5, 0x82, 0x24, 0x7a, 0x5d, 0x22, 0x6f, 0x8a, 0xec,
3079 0x08, 0xe6, 0x65, 0xfd, 0xb4, 0xe0, 0xab, 0xb2, 0x7e, 0x47, 0x70, 0x5d,
3080 0xa1, 0xf1, 0x53, 0xcb, 0xbf, 0x35, 0x9a, 0xb2, 0x03, 0xf3, 0x05, 0xf8,
3081 0xff, 0x62, 0x3f, 0xeb, 0x37, 0x82, 0xfa, 0x77, 0x1b, 0xc6, 0x0f, 0x13,
3082 0xaf, 0x15, 0xd5, 0xfa, 0xbb, 0x27, 0x2e, 0x2f, 0x62, 0xdf, 0xf1, 0x7e,
3083 0xac, 0x3f, 0x56, 0xd4, 0x71, 0xc7, 0xc8, 0x15, 0xa4, 0x61, 0x9b, 0xe3,
3084 0x70, 0x87, 0x4d, 0xa2, 0xa0, 0xff, 0xe3, 0x22, 0xa4, 0xd9, 0x34, 0xec,
3085 0x26, 0x03, 0x76, 0x73, 0x5b, 0xec, 0x7e, 0x9f, 0xf0, 0xdb, 0xff, 0x54,
3086 0xec, 0x27, 0xb7, 0xb5, 0x5f, 0x4e, 0x03, 0x77, 0x16, 0xdb, 0x9d, 0x93,
3087 0xd8, 0xc6, 0xff, 0xd3, 0xdb, 0xda, 0x7f, 0xd3, 0xf3, 0xdf, 0xac, 0x03,
3088 0xfb, 0xf0, 0xf9, 0x13, 0xf7, 0x29, 0x93, 0x47, 0x13, 0xaf, 0xf8, 0x15,
3089 0x06, 0x4e, 0x16, 0x19, 0x6a, 0x27, 0x25, 0xb1, 0x53, 0x43, 0xfa, 0xbc,
3090 0x4e, 0x8a, 0x58, 0xda, 0xce, 0x5e, 0x3b, 0x76, 0x0d, 0xeb, 0xc7, 0x32,
3091 0xc0, 0x57, 0x24, 0x80, 0xbb, 0x49, 0x9d, 0x90, 0x46, 0xa3, 0x92, 0x12,
3092 0xfb, 0x28, 0x23, 0xb9, 0x29, 0xec, 0x5f, 0x73, 0xb4, 0x5f, 0xb7, 0x54,
3093 0xdd, 0xb4, 0x1c, 0x26, 0x37, 0x13, 0xf4, 0xff, 0x0a, 0x41, 0x6f, 0xc7,
3094 0x5e, 0xac, 0x5e, 0xac, 0x40, 0xee, 0xfd, 0x38, 0xcb, 0xfa, 0x2b, 0x75,
3095 0x13, 0x87, 0x5e, 0x57, 0xfc, 0xcf, 0xc0, 0x0e, 0x0d, 0xd8, 0x7c, 0x18,
3096 0xf2, 0xa3, 0x0e, 0x1d, 0x36, 0xf6, 0xf0, 0xbb, 0xbc, 0xc7, 0xf0, 0x09,
3097 0x72, 0x25, 0xc6, 0x90, 0x9f, 0x9d, 0xd7, 0xfe, 0x66, 0xe8, 0x84, 0xa5,
3098 0x1d, 0xb1, 0x24, 0xbe, 0xb0, 0xed, 0x7c, 0x01, 0xfd, 0xaf, 0xfa, 0x1c,
3099 0xf6, 0xad, 0x32, 0x8e, 0x7d, 0x5d, 0x63, 0xc0, 0xa5, 0xb1, 0xa8, 0x86,
3100 0x62, 0x65, 0x8e, 0xc5, 0x27, 0x7f, 0x1e, 0xb5, 0x59, 0xcf, 0x1d, 0x36,
3101 0x7c, 0x35, 0x79, 0xd7, 0xf1, 0x5e, 0x6c, 0xf2, 0x76, 0x10, 0xf9, 0xf9,
3102 0x75, 0x8f, 0xd6, 0x57, 0x49, 0x1a, 0xc0, 0x39, 0x33, 0xd5, 0x76, 0x7c,
3103 0x7f, 0x57, 0xed, 0x7b, 0xb8, 0xfa, 0x4d, 0x72, 0xdc, 0x93, 0x12, 0x7f,
3104 0xbf, 0xf0, 0x63, 0x57, 0x1b, 0x7e, 0x64, 0xf8, 0xef, 0xfb, 0xa5, 0x2c,
3105 0xe7, 0xef, 0x08, 0xd6, 0x2f, 0x4d, 0xad, 0x22, 0xcf, 0x07, 0x39, 0x7e,
3106 0x4a, 0x5e, 0xf8, 0x1c, 0xbb, 0x66, 0xd3, 0x5a, 0x7e, 0x79, 0xa2, 0xf2,
3107 0x25, 0xe4, 0x72, 0x58, 0xcb, 0xc7, 0x9c, 0x93, 0x57, 0xa1, 0x1f, 0x3d,
3108 0x9f, 0xe5, 0xbc, 0x1d, 0x91, 0x53, 0x0e, 0xaa, 0x51, 0xa1, 0x7e, 0xb5,
3109 0xd8, 0x79, 0x16, 0x9d, 0x35, 0xfe, 0x9e, 0xa5, 0x85, 0x3a, 0xbe, 0x9f,
3110 0x4b, 0xe9, 0xb8, 0xce, 0xa8, 0xb8, 0x58, 0xaf, 0xab, 0x1a, 0xc3, 0xfe,
3111 0xda, 0xa2, 0xb6, 0x17, 0xa2, 0x7b, 0x9f, 0x69, 0xf9, 0x70, 0xf1, 0x1e,
3112 0xf4, 0x8b, 0xd5, 0x79, 0x31, 0x6c, 0x21, 0x6f, 0xf7, 0x2d, 0xe8, 0x0b,
3113 0xad, 0x92, 0x11, 0xae, 0x5b, 0x88, 0x9c, 0x29, 0xe0, 0x3b, 0xfc, 0xfd,
3114 0xdf, 0x50, 0x8d, 0xf3, 0xf5, 0x7c, 0x47, 0x64, 0xd5, 0xe4, 0x47, 0x30,
3115 0x63, 0xe2, 0x02, 0x3e, 0x2c, 0x6f, 0xe7, 0x1d, 0xc3, 0x57, 0xa9, 0x57,
3116 0xe1, 0x41, 0x7c, 0x05, 0x4e, 0x0d, 0x01, 0x63, 0x83, 0x5a, 0x2f, 0xda,
3117 0x86, 0xb7, 0xc1, 0xba, 0x48, 0x5d, 0x7d, 0xfc, 0x62, 0x50, 0xbc, 0x0a,
3118 0xf0, 0x4c, 0xf1, 0x98, 0xe7, 0x90, 0xca, 0xa7, 0xe1, 0x8b, 0x36, 0x14,
3119 0xa7, 0x33, 0x62, 0xaf, 0x2a, 0x71, 0x9d, 0x95, 0xb8, 0x7e, 0x4f, 0x9a,
3120 0xbc, 0x9b, 0x78, 0x80, 0x0b, 0x5e, 0x3c, 0x86, 0x6f, 0xb8, 0x1f, 0x66,
3121 0xaa, 0x01, 0x7f, 0x6a, 0x37, 0x06, 0xf0, 0x47, 0xef, 0x20, 0xd0, 0x8b,
3122 0x73, 0x88, 0xfb, 0xa4, 0xa3, 0xfb, 0xaa, 0xf1, 0x43, 0xd7, 0x75, 0x43,
3123 0xf8, 0x6a, 0xa9, 0x78, 0xfd, 0xfd, 0xd9, 0xd3, 0xa6, 0x3f, 0x83, 0xfd,
3124 0x62, 0xe2, 0x3f, 0x97, 0xe6, 0x01, 0x34, 0x71, 0x7b, 0x3d, 0xd8, 0x0f,
3125 0xe0, 0x7f, 0xdc, 0xe3, 0x51, 0xd7, 0x3e, 0xc9, 0x93, 0x60, 0xee, 0x69,
3126 0x6d, 0x6f, 0x5a, 0xec, 0x8f, 0x88, 0x7d, 0xc7, 0xd7, 0x8f, 0xda, 0xbf,
3127 0x3e, 0xaf, 0x0f, 0x4d, 0x7d, 0x9a, 0xfd, 0x68, 0xf2, 0xc4, 0xe7, 0x17,
3128 0x6f, 0xaf, 0xeb, 0xfd, 0xbd, 0xdb, 0xf4, 0xe7, 0x23, 0x9e, 0xbd, 0xef,
3129 0xbc, 0x7e, 0xd4, 0xdf, 0x53, 0xf4, 0x9c, 0x88, 0xc1, 0x39, 0xf3, 0x87,
3130 0x9a, 0x33, 0x1c, 0x87, 0xed, 0xac, 0xca, 0x5c, 0x99, 0xd3, 0xe7, 0xe4,
3131 0xc5, 0xef, 0xbc, 0x99, 0xeb, 0xca, 0x6f, 0x99, 0x3f, 0xc7, 0xfd, 0x73,
3132 0x24, 0xde, 0xe6, 0x3c, 0xc0, 0x64, 0xb1, 0x35, 0x5f, 0xc8, 0x3b, 0xec,
3133 0xaa, 0xfc, 0x9b, 0x39, 0x30, 0x6e, 0xec, 0x43, 0x74, 0x47, 0xfd, 0xfa,
3134 0xad, 0xf5, 0x89, 0x3c, 0x60, 0x9e, 0x6d, 0x6c, 0xe2, 0xde, 0xfd, 0x67,
3135 0xb3, 0x79, 0x1f, 0x07, 0xea, 0xe8, 0x12, 0xd7, 0x3d, 0xae, 0xea, 0xcf,
3136 0xef, 0x03, 0xef, 0x9e, 0xb7, 0xa2, 0x7a, 0x5d, 0xe5, 0x42, 0x78, 0xf5,
3137 0xfa, 0xe3, 0xb2, 0xbf, 0x80, 0xb9, 0xf4, 0xda, 0x29, 0xce, 0xff, 0x7b,
3138 0x67, 0x37, 0x78, 0x3e, 0x7d, 0xf8, 0xc6, 0x35, 0x1d, 0xd7, 0xa3, 0xb4,
3139 0x3e, 0xe7, 0xb0, 0x3f, 0xa5, 0xdd, 0x50, 0xdf, 0x78, 0xb6, 0xb5, 0x1e,
3140 0x78, 0xd7, 0xa0, 0x5e, 0x4a, 0x6f, 0x36, 0x78, 0xaf, 0x36, 0xfd, 0x43,
3141 0xbf, 0xec, 0xcf, 0x40, 0xdf, 0xf4, 0x73, 0xb0, 0xae, 0x77, 0x36, 0x9b,
3142 0x73, 0xd7, 0xe4, 0x3b, 0xc8, 0xd3, 0xa3, 0xe3, 0x7e, 0xbb, 0x83, 0xb4,
3143 0x56, 0x87, 0xdd, 0x69, 0xe9, 0xc3, 0x13, 0x72, 0xf0, 0x4f, 0xc9, 0x0c,
3144 0x9f, 0x53, 0x7e, 0x81, 0x79, 0x46, 0xb9, 0x14, 0xe2, 0x2c, 0x1f, 0xc6,
3145 0xf7, 0x72, 0x1a, 0xeb, 0x3d, 0x69, 0xdc, 0x6f, 0xd3, 0x71, 0x87, 0xf5,
3146 0x7b, 0xd2, 0xc0, 0x9c, 0xf4, 0xeb, 0x9a, 0x37, 0x8f, 0x80, 0x2b, 0x31,
3147 0x7f, 0xff, 0x46, 0xe8, 0x7a, 0x4c, 0x2b, 0xa8, 0xcb, 0xba, 0x80, 0xfe,
3148 0x2b, 0x0d, 0x39, 0xfc, 0x7d, 0xa6, 0x80, 0xb9, 0x4a, 0x03, 0xc1, 0xfb,
3149 0x50, 0xfa, 0xb9, 0xa7, 0x39, 0xb7, 0xfc, 0x73, 0x2d, 0x31, 0xb6, 0x5c,
3150 0x0f, 0xde, 0x97, 0x2b, 0x31, 0xff, 0x9c, 0xd0, 0x76, 0x59, 0x54, 0xf3,
3151 0xc1, 0x3f, 0xd7, 0xc2, 0x52, 0xef, 0xbf, 0x64, 0x0e, 0xec, 0xa4, 0x9b,
3152 0x75, 0xc4, 0xb5, 0x56, 0x6f, 0xcd, 0xb3, 0x39, 0xcf, 0xd8, 0x83, 0xdf,
3153 0x26, 0x8e, 0xa6, 0x7d, 0x9c, 0x7f, 0x4a, 0xfc, 0xfc, 0x85, 0xdf, 0x21,
3154 0x39, 0x89, 0x47, 0xdb, 0xc5, 0xfa, 0x01, 0x99, 0xb3, 0xae, 0x27, 0x07,
3155 0xe7, 0xe3, 0x34, 0xfb, 0xd5, 0x49, 0x78, 0x77, 0xe4, 0xbc, 0xbe, 0x36,
3156 0xf1, 0x75, 0x8d, 0x00, 0x97, 0x46, 0x4c, 0x1d, 0x4c, 0xbd, 0x4c, 0x7d,
3157 0x50, 0xc7, 0xdc, 0x28, 0xab, 0x4d, 0x94, 0x47, 0x99, 0xa7, 0x23, 0xe5,
3158 0x3f, 0x83, 0xef, 0xb4, 0xa3, 0x45, 0xad, 0xff, 0x16, 0x7d, 0xc3, 0x7d,
3159 0x44, 0xf4, 0x83, 0x60, 0x73, 0x1e, 0x49, 0x01, 0x02, 0xef, 0xb2, 0x30,
3160 0x5d, 0x8f, 0xca, 0xf2, 0xb8, 0xe9, 0x9b, 0x60, 0xdf, 0x5d, 0xe1, 0x77,
3161 0xfa, 0xc2, 0xe6, 0xd6, 0xfe, 0x37, 0xf1, 0x69, 0xbd, 0x61, 0xe1, 0xa1,
3162 0x4d, 0xa5, 0xfd, 0x78, 0xd7, 0x74, 0xc4, 0xc1, 0xf3, 0x8e, 0xb8, 0xbf,
3163 0x4e, 0x8a, 0x0f, 0x89, 0xb8, 0x16, 0x77, 0x75, 0x26, 0x38, 0x8e, 0x4b,
3164 0x5f, 0xdf, 0xe2, 0xcf, 0x1f, 0x2d, 0xa7, 0xb0, 0xde, 0x5d, 0x82, 0xf9,
3165 0x08, 0xf3, 0x35, 0x4c, 0x17, 0xc0, 0xe7, 0x0f, 0x96, 0x80, 0xef, 0xd3,
3166 0x21, 0xd8, 0xe9, 0x7c, 0x9b, 0xef, 0x71, 0xbb, 0x1b, 0xe9, 0xac, 0x2d,
3167 0x0b, 0x4f, 0xf3, 0x16, 0xff, 0x3f, 0xd2, 0xa0, 0xb4, 0xbc, 0x5b, 0xa5,
3168 0xcf, 0xc0, 0xcf, 0x88, 0xaf, 0xce, 0xdb, 0xf1, 0x55, 0xa3, 0xa3, 0xf8,
3169 0x88, 0xed, 0xc2, 0x5b, 0xbb, 0x95, 0xb7, 0xa6, 0x8e, 0x79, 0xab, 0x2d,
3170 0x4f, 0xf7, 0x05, 0x79, 0x1a, 0x13, 0x9e, 0xfe, 0xed, 0xcd, 0xd3, 0xad,
3171 0x76, 0x31, 0xc7, 0x6f, 0xfe, 0x6f, 0xbc, 0x05, 0x1e, 0x18, 0xd4, 0xe7,
3172 0x77, 0xfb, 0xf8, 0x67, 0xfc, 0xf2, 0xcf, 0x9f, 0x43, 0x6a, 0xae, 0xfe,
3173 0x07, 0x92, 0xe2, 0x88, 0x7c, 0xe0, 0x0d, 0x00, 0x00, 0x00 };
3174
3175static u8 bnx2_TPAT_b06FwText[] = {
3176 0xbd, 0x58, 0x6d, 0x70, 0x5c, 0xd5, 0x79, 0x7e, 0xce, 0xbd, 0x77, 0xb5,
3177 0xd7, 0xd2, 0x4a, 0xba, 0xb2, 0xd6, 0x66, 0x5d, 0xdc, 0xfa, 0x1e, 0x74,
3178 0x57, 0x52, 0x58, 0x01, 0x77, 0x6d, 0x01, 0xeb, 0xe6, 0xb6, 0xbe, 0xc8,
3179 0xb2, 0xbc, 0xfe, 0x00, 0xe4, 0xc0, 0x4c, 0xe4, 0x96, 0x8e, 0x37, 0xc6,
3180 0x18, 0xd9, 0x90, 0xa9, 0x28, 0xfc, 0x58, 0x37, 0x4c, 0xbd, 0x95, 0x65,
3181 0x63, 0xc3, 0x4a, 0x6b, 0x0c, 0xb1, 0x4c, 0xda, 0x99, 0x78, 0x84, 0xb1,
3182 0x4c, 0x22, 0x7b, 0x0d, 0xe4, 0x07, 0x49, 0xc3, 0xa0, 0xc1, 0x0e, 0x08,
3183 0x06, 0xf3, 0x31, 0x6d, 0x67, 0x98, 0xe9, 0xa4, 0xf5, 0x18, 0xf3, 0x11,
3184 0x92, 0x18, 0x87, 0x4e, 0x3a, 0xa2, 0x10, 0x9f, 0x3e, 0x67, 0x77, 0xc5,
3185 0x57, 0x32, 0xd3, 0xfe, 0xaa, 0x66, 0x56, 0x7b, 0xf7, 0xec, 0xf9, 0x78,
3186 0xcf, 0xfb, 0x3e, 0xef, 0xf3, 0x3e, 0xef, 0x5e, 0x21, 0x50, 0x8f, 0xda,
3187 0x5f, 0x23, 0x5f, 0xdd, 0xdf, 0x1a, 0xba, 0x2f, 0x7d, 0xf5, 0x75, 0x57,
3188 0xf3, 0xf1, 0x3a, 0xe1, 0xd4, 0x59, 0xf8, 0x7f, 0xfc, 0x33, 0x01, 0x67,
3189 0xce, 0x0e, 0xfd, 0x82, 0x6d, 0x04, 0x85, 0xcb, 0x7b, 0x3c, 0xd8, 0x66,
3190 0x10, 0x77, 0x6f, 0xf7, 0x80, 0x70, 0x2a, 0xe5, 0xae, 0xc4, 0xef, 0x54,
3191 0x21, 0x6e, 0x41, 0x8f, 0xff, 0x71, 0xf0, 0xe9, 0x35, 0xcf, 0x5d, 0x2f,
3192 0x2f, 0x1e, 0x36, 0x61, 0x3b, 0xc1, 0x5e, 0xcb, 0x69, 0x87, 0xbd, 0x98,
3193 0x6b, 0xfe, 0xb1, 0xe3, 0x2f, 0x04, 0x9a, 0xe6, 0xf6, 0x52, 0x6a, 0xc4,
3194 0x8f, 0x62, 0xd8, 0x4f, 0x60, 0x77, 0xc9, 0x40, 0xe8, 0x44, 0xb1, 0xcb,
3195 0x9b, 0x55, 0x5b, 0x7c, 0xe9, 0xef, 0x86, 0x5a, 0x72, 0xda, 0x97, 0x89,
3196 0x5e, 0x13, 0xe1, 0x77, 0xbc, 0xc5, 0xd8, 0x5d, 0x4e, 0x60, 0xa4, 0x6c,
3197 0xe3, 0xac, 0x39, 0x82, 0xde, 0xf2, 0xdc, 0x3a, 0x97, 0xeb, 0x3a, 0xb1,
3198 0xe7, 0xcb, 0x6b, 0xdd, 0xdd, 0x48, 0x25, 0xf6, 0xc0, 0x40, 0x2e, 0xee,
3199 0x71, 0x5d, 0x9b, 0xbb, 0x07, 0xb2, 0x93, 0xfb, 0x14, 0xea, 0xba, 0x5d,
3200 0xee, 0x51, 0xe0, 0x7a, 0xe9, 0x1e, 0x85, 0xde, 0x2b, 0xc3, 0xcf, 0x6f,
3201 0xa9, 0xe7, 0x3a, 0x16, 0xe3, 0x19, 0xee, 0xff, 0x74, 0xd9, 0xc1, 0xc9,
3202 0xb2, 0x87, 0xe7, 0xcb, 0x2e, 0x7e, 0x54, 0x8e, 0xe3, 0xa9, 0xb2, 0x9d,
3203 0xb3, 0x03, 0xf4, 0xc7, 0x47, 0x77, 0xaa, 0x84, 0x87, 0xc2, 0x1f, 0x05,
3204 0xde, 0xa1, 0x43, 0x46, 0x2c, 0xf3, 0x37, 0xd7, 0xa1, 0x7f, 0xfe, 0x71,
3205 0x1b, 0x1b, 0x4a, 0x8b, 0x73, 0xd1, 0x00, 0x9c, 0x23, 0xe0, 0x5f, 0x67,
3206 0xa3, 0x9f, 0x7b, 0x14, 0xb8, 0x7f, 0x58, 0x1e, 0xe1, 0xcb, 0xc6, 0xbb,
3207 0x45, 0xdb, 0x6e, 0x1e, 0x5d, 0xa8, 0xe7, 0xe0, 0x57, 0xc5, 0x8b, 0xea,
3208 0x42, 0xda, 0xc1, 0x2b, 0xcb, 0x95, 0x6a, 0x0c, 0x50, 0x68, 0xe8, 0x2e,
3209 0xc0, 0x0c, 0x64, 0x76, 0x9d, 0x29, 0xd0, 0x7b, 0x95, 0xd7, 0x39, 0x2a,
3210 0x6e, 0xb9, 0xc5, 0x08, 0x60, 0x8b, 0xc0, 0xb5, 0xda, 0xa6, 0x32, 0xd8,
3211 0x57, 0xe6, 0xbd, 0x68, 0xcf, 0x48, 0x19, 0xe1, 0x5f, 0x76, 0x98, 0x98,
3212 0x88, 0xe3, 0xfe, 0xb7, 0xbb, 0x2d, 0x7c, 0x5c, 0x94, 0x89, 0x4e, 0xf3,
3213 0x7e, 0xec, 0x2c, 0xe6, 0x71, 0x47, 0x11, 0x05, 0x23, 0x18, 0xc2, 0x37,
3214 0xba, 0x03, 0xde, 0x33, 0xc4, 0xf7, 0xcb, 0xb0, 0x5b, 0x83, 0xd3, 0x97,
3215 0xdf, 0xdb, 0x2e, 0x0f, 0x87, 0x06, 0x90, 0x1d, 0x03, 0xfa, 0x4a, 0x02,
3216 0xa7, 0x32, 0x02, 0x5b, 0xfc, 0xcb, 0x50, 0x70, 0xba, 0xb1, 0xb7, 0x2c,
3217 0xb3, 0x05, 0x7e, 0x77, 0xd5, 0x28, 0xec, 0x45, 0xc1, 0x6d, 0xd6, 0xf2,
3218 0x12, 0xec, 0x96, 0x60, 0xc0, 0x4a, 0x8f, 0xb5, 0xcd, 0x1e, 0x13, 0x32,
3219 0xbf, 0xc2, 0x94, 0x21, 0x20, 0x33, 0x9d, 0x46, 0xaa, 0xa0, 0x84, 0x1c,
3220 0xba, 0x08, 0x6d, 0xd3, 0x6d, 0xd6, 0x35, 0x53, 0xfa, 0x7d, 0xc0, 0xba,
3221 0x7a, 0x0a, 0x58, 0xcf, 0x3d, 0x1f, 0x5a, 0x2e, 0xb0, 0x3d, 0xfd, 0x6b,
3222 0x15, 0x2e, 0x90, 0xe1, 0x61, 0xd1, 0x8d, 0xd1, 0x32, 0x70, 0xd3, 0x18,
3223 0xec, 0x18, 0xe7, 0x16, 0xb9, 0x77, 0x3d, 0xe7, 0xae, 0x1d, 0x6d, 0x1b,
3224 0x9c, 0x11, 0x92, 0x77, 0x93, 0x03, 0x40, 0xca, 0x3f, 0x0e, 0xe9, 0xae,
3225 0x13, 0xd2, 0xd9, 0x53, 0xdb, 0x33, 0x59, 0xdb, 0xf3, 0x8a, 0x29, 0x5b,
3226 0xac, 0x2a, 0x41, 0xf4, 0x96, 0xe0, 0x3e, 0xe9, 0x83, 0x77, 0x89, 0xf1,
3227 0xde, 0xf5, 0x70, 0x5b, 0xa4, 0x7f, 0x98, 0x73, 0xa3, 0x41, 0x97, 0xf5,
3228 0x5e, 0x51, 0xe0, 0x43, 0x4f, 0xcf, 0xef, 0xd2, 0xb6, 0x84, 0x4e, 0x90,
3229 0x11, 0xfd, 0xe5, 0xfd, 0x73, 0x39, 0x62, 0x9c, 0xf4, 0xe3, 0xc0, 0x42,
3230 0x34, 0xb7, 0x78, 0xf3, 0xf1, 0xb0, 0x83, 0xc6, 0xa8, 0xb7, 0xcc, 0x78,
3231 0xc0, 0xa9, 0xc3, 0x49, 0xff, 0xb7, 0x0a, 0xdf, 0xd0, 0xf3, 0x81, 0x6f,
3232 0x3f, 0xe2, 0x20, 0xe6, 0x5d, 0xc4, 0xd1, 0xf4, 0x36, 0xe3, 0x55, 0x67,
3233 0x08, 0x4d, 0xde, 0xcf, 0x8d, 0xd7, 0x9c, 0x38, 0x1e, 0xe2, 0x7d, 0xee,
3234 0x4c, 0xc6, 0xf1, 0x40, 0xf9, 0xab, 0xfb, 0x5a, 0x22, 0x3b, 0xfe, 0x8e,
3235 0x42, 0x4b, 0x65, 0x7d, 0xf8, 0xac, 0x3f, 0x01, 0x5c, 0xa6, 0xc7, 0xf3,
3236 0x62, 0x63, 0xe9, 0x92, 0x72, 0xa3, 0x19, 0x3c, 0x50, 0xb2, 0x31, 0x8f,
3237 0x76, 0x45, 0x3c, 0x1b, 0x6f, 0x17, 0xf3, 0x62, 0x55, 0x39, 0x14, 0x6b,
3238 0x26, 0x7b, 0x44, 0x38, 0x69, 0x89, 0x9e, 0x71, 0x10, 0x9b, 0x4a, 0xad,
3239 0xf1, 0x05, 0xfe, 0xc3, 0xff, 0x57, 0xe3, 0x6c, 0xab, 0x0c, 0x5d, 0x71,
3240 0x49, 0x79, 0x49, 0x03, 0xf5, 0x5e, 0x9f, 0x58, 0x3b, 0xa9, 0xd4, 0x5e,
3241 0x3f, 0x2b, 0x7a, 0x27, 0x61, 0x37, 0x04, 0x81, 0x75, 0xd7, 0xe8, 0x69,
3242 0x23, 0xb7, 0x20, 0x86, 0x52, 0xc9, 0xc5, 0x29, 0x5f, 0xe3, 0x77, 0x1e,
3243 0x2c, 0x4f, 0xf0, 0x85, 0xd8, 0x19, 0x1f, 0x56, 0x8c, 0xcf, 0x53, 0x1b,
3244 0x2c, 0x8c, 0x74, 0xaf, 0xad, 0xac, 0x89, 0x10, 0x2b, 0x4f, 0x14, 0xb3,
3245 0x30, 0x88, 0xbf, 0x45, 0x41, 0x72, 0x76, 0x82, 0x98, 0x7f, 0xcb, 0x4f,
3246 0x76, 0x7e, 0x6c, 0x92, 0x1c, 0x5a, 0x65, 0x82, 0x86, 0x0a, 0x2b, 0x48,
3247 0x76, 0x1e, 0x81, 0x80, 0xe9, 0x59, 0x78, 0xc5, 0x8f, 0x20, 0xdc, 0x60,
3248 0x63, 0x17, 0x71, 0x55, 0xc7, 0xf1, 0xa3, 0x95, 0x71, 0xfd, 0x19, 0xce,
3249 0xaa, 0xf2, 0x57, 0x73, 0x9e, 0xe3, 0xa5, 0x36, 0xe4, 0x2a, 0x79, 0x0f,
3250 0x67, 0x1d, 0xef, 0xfb, 0xad, 0x88, 0x7e, 0xfc, 0x93, 0xcf, 0xc6, 0x6e,
3251 0xa4, 0x9d, 0x66, 0xe0, 0xe5, 0x1e, 0x17, 0x8b, 0x50, 0x68, 0x01, 0xed,
3252 0x36, 0x70, 0x21, 0xbd, 0x10, 0xd3, 0x2d, 0xfa, 0xeb, 0xb8, 0xd3, 0x3f,
3253 0xde, 0xaa, 0x63, 0xa2, 0xf7, 0x72, 0x56, 0x8d, 0x2b, 0xf5, 0xbc, 0x5f,
3254 0x87, 0xd9, 0x8e, 0xe1, 0x19, 0x66, 0x89, 0xbf, 0x88, 0x39, 0xf9, 0x12,
3255 0xcf, 0x6f, 0x59, 0x66, 0xc2, 0x5c, 0xe6, 0x9a, 0xee, 0x7c, 0x60, 0xa2,
3256 0xa8, 0x39, 0x41, 0xce, 0xbe, 0xc4, 0xff, 0xe7, 0xca, 0x1a, 0x9f, 0x3e,
3257 0xf1, 0x29, 0xd0, 0xde, 0xa1, 0xe3, 0xee, 0x5b, 0xed, 0xc4, 0xde, 0x76,
3258 0xfa, 0x33, 0xc2, 0x3c, 0x78, 0x90, 0xf6, 0x9e, 0x2b, 0x7e, 0xcf, 0x58,
3259 0xe5, 0x48, 0x57, 0x9f, 0xf0, 0x4e, 0x11, 0xe2, 0x79, 0xff, 0xef, 0xb4,
3260 0x8f, 0x5d, 0x6e, 0x4b, 0xcc, 0xdc, 0x47, 0xcc, 0x68, 0xee, 0x59, 0x6f,
3261 0x39, 0x63, 0x72, 0xe0, 0x7d, 0x1a, 0x91, 0x08, 0x86, 0xac, 0x44, 0x29,
3262 0xb5, 0x77, 0x90, 0xdf, 0xdb, 0x41, 0xd6, 0xb2, 0x47, 0x65, 0x9e, 0xe7,
3263 0xe5, 0x2c, 0x43, 0x26, 0x9a, 0xcd, 0xd4, 0xd0, 0x88, 0x90, 0x83, 0xcd,
3264 0x42, 0xf6, 0xdf, 0x03, 0xe9, 0x9c, 0x10, 0xfa, 0xcc, 0xf5, 0x56, 0x57,
3265 0x05, 0xa3, 0x59, 0x62, 0x54, 0xbf, 0xdf, 0x67, 0xa5, 0x2a, 0xef, 0x43,
3266 0xd6, 0x95, 0x53, 0x09, 0x8c, 0x96, 0xa4, 0xef, 0x8a, 0x28, 0xbe, 0x96,
3267 0xb6, 0x71, 0x22, 0xa9, 0x96, 0xbc, 0x90, 0x96, 0xb9, 0x1e, 0x73, 0x31,
3268 0x73, 0x21, 0x81, 0x61, 0x62, 0xe9, 0x1f, 0x92, 0x23, 0xe8, 0x29, 0x9b,
3269 0xc4, 0xb1, 0x8b, 0xfd, 0xa5, 0x28, 0x66, 0xc8, 0x4f, 0x75, 0xe9, 0x4e,
3270 0x8c, 0x94, 0x64, 0xe7, 0x1b, 0x48, 0xe5, 0x8f, 0x30, 0x5e, 0x67, 0x17,
3271 0x78, 0xd8, 0x5f, 0x6e, 0x63, 0x8c, 0xa4, 0xbb, 0x8a, 0x1c, 0x65, 0x76,
3272 0x4b, 0x67, 0x17, 0x7d, 0x5b, 0x17, 0x90, 0xdb, 0xca, 0x19, 0xee, 0x53,
3273 0xc0, 0xaa, 0x72, 0x5e, 0xf4, 0x95, 0xe7, 0x70, 0xfa, 0x73, 0x62, 0x53,
3274 0x63, 0xd5, 0xc6, 0xe6, 0x12, 0x70, 0x67, 0xc9, 0x47, 0x8b, 0x67, 0xbc,
3275 0x18, 0xc5, 0x45, 0xfa, 0x71, 0x02, 0xf7, 0x38, 0x21, 0x16, 0x79, 0xeb,
3276 0xd4, 0x8e, 0xb8, 0x9e, 0x9f, 0x17, 0x6b, 0x19, 0xb7, 0x30, 0x02, 0x63,
3277 0xd2, 0x37, 0x71, 0x36, 0x3e, 0x3c, 0x3f, 0x52, 0xe1, 0x5d, 0xfd, 0x6e,
3278 0xa2, 0xdf, 0xc7, 0x1a, 0x07, 0x72, 0xc8, 0x17, 0x85, 0xc1, 0x26, 0xfa,
3279 0xe1, 0xa4, 0x28, 0x0c, 0xc4, 0x20, 0x0b, 0xf7, 0x0a, 0x3a, 0x6b, 0x8c,
3280 0x24, 0xb1, 0x60, 0x8e, 0xa7, 0x2d, 0xfc, 0x75, 0xe9, 0x29, 0xe3, 0x5c,
3281 0xa4, 0x0e, 0xe6, 0x81, 0x08, 0xa2, 0x07, 0x2c, 0x34, 0x1f, 0x10, 0xc4,
3282 0x5d, 0xa1, 0x33, 0xaa, 0xd7, 0x21, 0x81, 0x7d, 0xa3, 0x36, 0xee, 0xe9,
3283 0x88, 0xe0, 0x42, 0x52, 0x0e, 0x5e, 0x21, 0x86, 0xfd, 0x26, 0x8e, 0x8d,
3284 0x1e, 0x97, 0xae, 0x6b, 0x14, 0x22, 0x68, 0x8a, 0x23, 0xd2, 0x5e, 0x87,
3285 0x06, 0xae, 0xdb, 0x59, 0x52, 0x3b, 0xed, 0xa0, 0xe0, 0x36, 0x40, 0xfa,
3286 0x0f, 0x73, 0xdf, 0x53, 0x45, 0xa5, 0xea, 0xaf, 0xf5, 0x66, 0x3e, 0x30,
3287 0xe5, 0xf4, 0x0e, 0x7e, 0x7e, 0x6b, 0xaa, 0xba, 0xff, 0xbc, 0x03, 0x36,
3288 0x1a, 0x0f, 0x56, 0xf6, 0x9f, 0x7d, 0x8a, 0x16, 0x7c, 0x58, 0xd2, 0xf9,
3289 0xa4, 0x54, 0x34, 0xf0, 0xfa, 0xdf, 0x13, 0x4a, 0xdd, 0xe4, 0xcb, 0xdc,
3290 0xcb, 0xa2, 0x6d, 0x60, 0x94, 0xcf, 0x83, 0xe9, 0xa4, 0x9b, 0xa5, 0xcd,
3291 0xe7, 0xcb, 0x51, 0xda, 0xc7, 0x5c, 0xf0, 0xb6, 0x19, 0x3b, 0x1c, 0x13,
3292 0x75, 0xde, 0x0e, 0x63, 0x6b, 0x05, 0xab, 0x0e, 0x16, 0x8d, 0xd5, 0x63,
3293 0x89, 0x17, 0x8a, 0x4d, 0xcc, 0xcd, 0x8d, 0x93, 0x16, 0xe7, 0xe9, 0xdc,
3294 0x14, 0x88, 0x7a, 0xbd, 0x62, 0xe5, 0x64, 0x5f, 0x25, 0x5f, 0x07, 0xc6,
3295 0x0d, 0xbc, 0xe9, 0xdf, 0x80, 0x48, 0x90, 0x15, 0x03, 0x93, 0x3a, 0x7f,
3296 0xd6, 0x8a, 0xd5, 0x93, 0x8c, 0xdf, 0x7c, 0x9d, 0x3b, 0x37, 0x88, 0x48,
3297 0xa0, 0xf3, 0xe5, 0xf3, 0x1c, 0xb2, 0x99, 0x43, 0xc7, 0xfe, 0x97, 0x1c,
3298 0x7a, 0xa8, 0x64, 0x21, 0xd7, 0x52, 0xcd, 0x97, 0x5e, 0xc6, 0xe2, 0xef,
3299 0x6b, 0x75, 0x7b, 0x3b, 0xc7, 0xa3, 0x07, 0x74, 0x0e, 0xf7, 0x32, 0x87,
3300 0x35, 0x9e, 0x2d, 0xb1, 0x69, 0x1c, 0x76, 0x73, 0x10, 0x5a, 0x1f, 0x8e,
3301 0x2a, 0xbc, 0xed, 0x2b, 0xf5, 0xf1, 0x32, 0xed, 0x13, 0x39, 0xf8, 0x2c,
3302 0xf1, 0x08, 0x12, 0xd2, 0xbb, 0x9e, 0x52, 0x33, 0x7e, 0x2a, 0xfb, 0x2c,
3303 0x79, 0xf9, 0x9c, 0xd0, 0xf7, 0x8f, 0xc2, 0x49, 0x6b, 0x3c, 0xf6, 0x5a,
3304 0x57, 0x55, 0x70, 0x19, 0x12, 0xaf, 0xac, 0xd5, 0xf3, 0x35, 0x36, 0xa3,
3305 0x68, 0x48, 0xce, 0xd2, 0x37, 0x72, 0xa8, 0x51, 0xa8, 0x25, 0xaf, 0xa6,
3306 0xab, 0xb8, 0x2c, 0xb2, 0x36, 0xad, 0xe7, 0x59, 0xbd, 0xe3, 0xb2, 0xb0,
3307 0xde, 0xac, 0xd6, 0xd1, 0xbd, 0xc4, 0x86, 0xe6, 0xb8, 0xcb, 0xdb, 0xa3,
3308 0xd8, 0x47, 0x8c, 0x7a, 0x69, 0x17, 0xc3, 0xac, 0xab, 0xbb, 0x4b, 0xd2,
3309 0x1d, 0x26, 0x4e, 0x77, 0xd7, 0x70, 0x3a, 0xcc, 0x5a, 0xba, 0x1b, 0x72,
3310 0xaf, 0xae, 0xa5, 0x11, 0xe2, 0x94, 0x34, 0x56, 0xc1, 0xe9, 0x48, 0x0d,
3311 0xa7, 0xbd, 0x15, 0x9c, 0xee, 0x36, 0x34, 0x3e, 0x35, 0xf6, 0x36, 0xf1,
3312 0xbe, 0x67, 0xa3, 0x30, 0x7e, 0xc0, 0xfd, 0xc3, 0x05, 0xc3, 0x3d, 0x35,
3313 0xec, 0xf5, 0x68, 0xec, 0x19, 0x69, 0xdc, 0x63, 0xf0, 0x6e, 0x2f, 0x88,
3314 0x42, 0xae, 0x11, 0x32, 0x3b, 0x2c, 0x0a, 0x9d, 0xf3, 0x88, 0xbd, 0x67,
3315 0x38, 0xa3, 0x81, 0xd8, 0xab, 0xfa, 0x4c, 0xcf, 0x8f, 0x11, 0x7b, 0xff,
3316 0x29, 0xce, 0x46, 0x34, 0xd7, 0xea, 0xd8, 0x02, 0x8b, 0x4e, 0x68, 0xae,
3317 0x8d, 0x92, 0x30, 0x2c, 0xe4, 0x4b, 0xc6, 0xe2, 0x04, 0x14, 0xb6, 0x92,
3318 0xdb, 0xde, 0xf4, 0x76, 0xf9, 0x2d, 0xb8, 0x01, 0xa7, 0xbb, 0x0c, 0x68,
3319 0x1d, 0x62, 0x4e, 0x54, 0xb1, 0x7b, 0x17, 0x39, 0xa3, 0x29, 0x90, 0x9d,
3320 0x67, 0xa9, 0x37, 0xb6, 0xa4, 0x1b, 0x50, 0xf2, 0x86, 0xc3, 0x66, 0x56,
3321 0x43, 0x9b, 0xe7, 0xae, 0x86, 0xae, 0x85, 0x71, 0x58, 0xed, 0x36, 0x1a,
3322 0x8e, 0x7a, 0xb9, 0x13, 0x42, 0xe3, 0x15, 0xe8, 0x3a, 0x6e, 0xd3, 0x7e,
3323 0x38, 0xf5, 0x81, 0x97, 0xf9, 0xc0, 0x7c, 0x5c, 0x9c, 0x75, 0xaa, 0xf5,
3324 0xa0, 0x6f, 0x5c, 0x63, 0xec, 0x57, 0xea, 0x4d, 0xcf, 0xc0, 0x1d, 0xdd,
3325 0x4a, 0x79, 0x4b, 0xa3, 0x88, 0x4c, 0xd8, 0xa8, 0x3b, 0xd8, 0x8a, 0x97,
3326 0xba, 0x22, 0x38, 0x7b, 0xab, 0xfe, 0x3e, 0x8a, 0x7a, 0xe2, 0x70, 0xd3,
3327 0xb5, 0x51, 0x2c, 0x99, 0xa8, 0x62, 0xb2, 0xc1, 0xfb, 0x89, 0xb8, 0x8b,
3328 0x98, 0x9c, 0xe7, 0x9d, 0x11, 0xdb, 0x9c, 0x0c, 0xf6, 0xd2, 0xa6, 0xd7,
3329 0xc9, 0xf1, 0xe7, 0x93, 0xbb, 0x66, 0x2c, 0xda, 0xbf, 0x62, 0x59, 0xa1,
3330 0x73, 0x09, 0x22, 0x58, 0x34, 0x21, 0x07, 0x8e, 0xe9, 0x0a, 0x33, 0x6a,
3331 0x89, 0x0d, 0xc4, 0xbb, 0xe6, 0x57, 0x93, 0x71, 0xba, 0x62, 0x69, 0xdb,
3332 0xd0, 0xcd, 0xb8, 0xa4, 0xce, 0x24, 0x93, 0xd9, 0x51, 0x62, 0x7d, 0xdb,
3333 0xf1, 0x08, 0xea, 0x0e, 0xfc, 0x97, 0x32, 0x02, 0xe6, 0x42, 0xb7, 0x22,
3334 0x3e, 0x0b, 0x99, 0x7a, 0x72, 0xc8, 0x45, 0xc4, 0xf1, 0xd8, 0xfe, 0x9d,
3335 0x6a, 0x09, 0xc7, 0xdf, 0xbb, 0xbe, 0x19, 0x6d, 0xcb, 0x64, 0x7e, 0x2b,
3336 0xf7, 0x9f, 0x4d, 0x17, 0x3a, 0x13, 0x8c, 0xdd, 0x49, 0xb8, 0xb8, 0x6a,
3337 0x4c, 0xe6, 0x8e, 0xa1, 0x0e, 0xcd, 0x13, 0x5e, 0xf6, 0x84, 0x88, 0xa1,
3338 0xf1, 0x44, 0x0c, 0xfb, 0x8e, 0xeb, 0xfc, 0x8c, 0xc1, 0x1a, 0xf3, 0x66,
3339 0x3b, 0x44, 0xa1, 0x9f, 0xf9, 0x39, 0xd3, 0x2f, 0xda, 0xd1, 0x3e, 0x2e,
3340 0xa7, 0xb3, 0xc2, 0x0b, 0x1f, 0x80, 0x87, 0x76, 0xd6, 0x65, 0xfb, 0x84,
3341 0x8b, 0x15, 0xba, 0x7e, 0x94, 0x75, 0xfe, 0xe8, 0x7a, 0x6a, 0xf0, 0x4e,
3342 0xa1, 0x58, 0x5f, 0xa9, 0x79, 0xbd, 0x7c, 0xf5, 0xb1, 0xfe, 0x59, 0x62,
3343 0xdd, 0xb8, 0xce, 0x2d, 0x03, 0x33, 0xfe, 0x25, 0xb5, 0x3d, 0x99, 0x65,
3344 0xad, 0x9b, 0xc7, 0xbc, 0xaa, 0xe6, 0x13, 0x5a, 0x74, 0x6e, 0xcd, 0xab,
3345 0xe5, 0x93, 0x85, 0x33, 0x8c, 0xdd, 0xe1, 0xff, 0x73, 0x5d, 0xb2, 0x90,
3346 0x38, 0x60, 0xa0, 0xa5, 0x23, 0x8a, 0x6b, 0x96, 0xb6, 0x39, 0xcd, 0x88,
3347 0xe2, 0x26, 0xdf, 0x41, 0x13, 0x31, 0xb1, 0x9f, 0x39, 0x85, 0xf9, 0xd5,
3348 0x5c, 0x5b, 0xa9, 0xeb, 0x55, 0x2d, 0xd7, 0xf2, 0xa5, 0x04, 0x6b, 0x93,
3349 0xae, 0x05, 0xbd, 0xac, 0x05, 0x16, 0x0e, 0x95, 0xb5, 0x6f, 0x1d, 0xbc,
3350 0x4b, 0xce, 0x7e, 0xc5, 0xd7, 0xbe, 0x5d, 0x8c, 0x12, 0x73, 0xe3, 0x41,
3351 0xe6, 0xc6, 0xda, 0xf2, 0x25, 0xb5, 0xc6, 0xd3, 0xf5, 0x38, 0x64, 0x3d,
3352 0xb6, 0xc4, 0x4d, 0xe3, 0x72, 0xd0, 0x15, 0xa7, 0xee, 0x24, 0x36, 0x3b,
3353 0x1b, 0x0d, 0xa5, 0x5e, 0x4e, 0xa7, 0x42, 0xea, 0x98, 0xcc, 0xdd, 0x42,
3354 0xba, 0xef, 0x93, 0x9b, 0xd6, 0x9a, 0x51, 0x2c, 0xaf, 0xe5, 0x60, 0xb2,
3355 0x96, 0x83, 0x1e, 0x73, 0xd0, 0x6d, 0x45, 0xf8, 0x09, 0x6d, 0x6c, 0x63,
3356 0x0e, 0x6e, 0xa3, 0x4e, 0xfd, 0x7e, 0xa9, 0xc2, 0xfb, 0x99, 0x15, 0x22,
3357 0x35, 0x73, 0x9e, 0xf9, 0xe4, 0x5e, 0xe6, 0x51, 0xaf, 0xb5, 0x65, 0xce,
3358 0x33, 0x66, 0xab, 0x6b, 0xf9, 0xb4, 0xbb, 0xc6, 0xfb, 0x0f, 0xd4, 0xf2,
3359 0x69, 0xf5, 0x97, 0xf2, 0x49, 0xf3, 0xd3, 0x0b, 0xbf, 0x43, 0xab, 0xd6,
3360 0x22, 0x79, 0xa1, 0xef, 0x97, 0xb3, 0x10, 0xfe, 0xd8, 0xd7, 0x67, 0xd9,
3361 0xb0, 0x82, 0xc6, 0x0a, 0xdf, 0x58, 0x41, 0x28, 0x7a, 0x59, 0x3b, 0x6d,
3362 0x2f, 0x2f, 0xb2, 0xf4, 0x9d, 0x5e, 0xb7, 0x96, 0xb1, 0xd8, 0x99, 0xfe,
3363 0x05, 0xce, 0xb6, 0x2a, 0xd5, 0x97, 0xbe, 0xa4, 0xde, 0x60, 0x5c, 0x62,
3364 0xd4, 0x1f, 0xeb, 0x27, 0xb3, 0xa2, 0x7f, 0x52, 0xfb, 0xa6, 0x11, 0x11,
3365 0x6f, 0xad, 0x58, 0x35, 0x09, 0xdc, 0x43, 0x3d, 0x73, 0x8e, 0x7e, 0x59,
3366 0xe3, 0xcb, 0xa1, 0x35, 0xbc, 0xdb, 0x19, 0xdf, 0xc2, 0xc3, 0xe5, 0xaa,
3367 0x7f, 0xf6, 0x95, 0x65, 0x66, 0x1a, 0x23, 0x58, 0xc3, 0x9a, 0x76, 0x98,
3368 0x7c, 0xf1, 0x6f, 0xc9, 0x28, 0x5e, 0x24, 0x5f, 0xbc, 0xc4, 0xfb, 0x1d,
3369 0xaa, 0xde, 0xcf, 0x9f, 0x45, 0x2a, 0x73, 0x5a, 0xf3, 0x05, 0xb5, 0xf7,
3370 0xa1, 0x72, 0x9b, 0x7f, 0x9a, 0x78, 0x7c, 0xb0, 0x24, 0x07, 0xfa, 0x78,
3371 0x47, 0xbb, 0x5b, 0xce, 0x0e, 0x0a, 0x81, 0x8d, 0x49, 0x38, 0x66, 0xa0,
3372 0xef, 0xe1, 0x52, 0xe3, 0x66, 0xe8, 0x87, 0x02, 0xfa, 0x78, 0xd7, 0x95,
3373 0xac, 0x71, 0x8f, 0x95, 0xbf, 0xa4, 0xeb, 0xb0, 0xad, 0xa4, 0xb9, 0x4a,
3374 0xa9, 0x8e, 0xb4, 0xd6, 0x4a, 0x79, 0x71, 0xb3, 0xe6, 0x94, 0x48, 0x14,
3375 0xca, 0x6f, 0x4b, 0x2c, 0x61, 0xec, 0xf3, 0xc4, 0xd7, 0xbb, 0x5e, 0x3d,
3376 0x79, 0x21, 0x24, 0xaf, 0xf7, 0x90, 0xb7, 0x7b, 0x45, 0x5f, 0x85, 0xcf,
3377 0xb3, 0x22, 0x3b, 0x69, 0x8b, 0x1e, 0x6a, 0x94, 0x0d, 0xcc, 0x33, 0x77,
3378 0xe1, 0x3c, 0x62, 0x4a, 0xe3, 0xca, 0xc0, 0x0f, 0xfc, 0xb5, 0xe4, 0xfc,
3379 0x1b, 0xe8, 0x2b, 0xf2, 0x52, 0x05, 0x8b, 0x37, 0x50, 0x27, 0x55, 0xb1,
3380 0xf8, 0x43, 0x62, 0x31, 0x57, 0xc3, 0x62, 0x24, 0x48, 0x92, 0xef, 0x3e,
3381 0xc7, 0x62, 0xef, 0x1f, 0xe0, 0xf7, 0x2f, 0x62, 0x6e, 0xbd, 0xe6, 0xf7,
3382 0xc8, 0x1c, 0xe6, 0x58, 0x9f, 0x3b, 0x02, 0xf2, 0xb0, 0xc6, 0x9b, 0x8d,
3383 0xbe, 0x47, 0xeb, 0xb1, 0xe1, 0xd1, 0x18, 0x6e, 0x7e, 0x54, 0xa9, 0xd7,
3384 0x7c, 0x78, 0x2d, 0xe4, 0xa2, 0x5f, 0xa4, 0x27, 0x70, 0xa6, 0x25, 0xe9,
3385 0xee, 0x83, 0xee, 0xa3, 0x7a, 0xad, 0xdb, 0x8b, 0x5a, 0xa3, 0x84, 0xd4,
3386 0x28, 0xb2, 0xff, 0x7d, 0xe6, 0xfa, 0xa6, 0xa4, 0xcc, 0xef, 0xac, 0x70,
3387 0x7f, 0xca, 0xa7, 0x16, 0xdf, 0x6b, 0x98, 0x32, 0xdb, 0x6e, 0x54, 0xb1,
3388 0x76, 0x4d, 0x0d, 0x6b, 0x5f, 0x9b, 0xb2, 0xf1, 0x4b, 0xd6, 0x85, 0xcd,
3389 0xe9, 0x28, 0x56, 0xeb, 0x1a, 0xef, 0xe8, 0x5e, 0x2a, 0x8a, 0x7e, 0xc6,
3390 0xc5, 0x58, 0xaa, 0xa8, 0x37, 0xa8, 0x3b, 0x18, 0xcb, 0x55, 0xec, 0xa7,
3391 0xce, 0x50, 0x9f, 0xdc, 0x68, 0x56, 0x7b, 0xa9, 0xd1, 0x9a, 0x3e, 0xb9,
3392 0xb1, 0xac, 0xf3, 0xd1, 0x25, 0x06, 0xa2, 0x38, 0xcd, 0x35, 0x7b, 0xfc,
3393 0xaa, 0x3e, 0x79, 0x1d, 0xa9, 0xac, 0xd6, 0x27, 0x2e, 0x79, 0xbf, 0x54,
3394 0xd1, 0x27, 0x5a, 0x8f, 0x68, 0x2d, 0xa2, 0xfb, 0x85, 0x6e, 0xf6, 0x0b,
3395 0x72, 0x5a, 0xeb, 0x15, 0xa3, 0x5b, 0xfa, 0x86, 0x19, 0x61, 0x8d, 0xcc,
3396 0x30, 0x96, 0x97, 0x61, 0xd7, 0x23, 0x4d, 0x8c, 0x45, 0x23, 0x76, 0x38,
3397 0x2b, 0xac, 0x25, 0x9e, 0xe6, 0x4f, 0x6a, 0x90, 0xdf, 0xd3, 0x2e, 0x47,
3398 0x35, 0xc7, 0x32, 0xfe, 0x73, 0xe3, 0xff, 0x5e, 0x1b, 0xd7, 0xf3, 0xb3,
3399 0xac, 0xd1, 0x7a, 0xcd, 0x8f, 0xac, 0x2a, 0xee, 0xd1, 0xdc, 0xe4, 0xfd,
3400 0x19, 0x2e, 0xd0, 0xc6, 0x37, 0xbf, 0x14, 0x47, 0x9b, 0x79, 0xa1, 0xe3,
3401 0xf8, 0x09, 0xd7, 0xea, 0x78, 0xdb, 0x78, 0x87, 0x3e, 0x3e, 0x47, 0x1f,
3402 0xff, 0xf2, 0xd1, 0x80, 0xdc, 0x84, 0x4f, 0x0d, 0xfa, 0x78, 0x3b, 0x71,
3403 0xf3, 0x63, 0xff, 0x7a, 0xb4, 0xb7, 0x26, 0xdd, 0x0f, 0xcc, 0xb9, 0x7a,
3404 0x0b, 0x7b, 0x09, 0x7d, 0xa7, 0xe8, 0x67, 0xdd, 0xeb, 0x1c, 0xa3, 0x7f,
3405 0x99, 0xcb, 0x15, 0x0d, 0xd2, 0x6e, 0x56, 0xfd, 0xdb, 0x51, 0xf3, 0x6f,
3406 0x66, 0x6a, 0x1b, 0xcf, 0xd1, 0xf5, 0x54, 0xeb, 0xd1, 0xfb, 0x2b, 0xfd,
3407 0x92, 0x19, 0xdc, 0x5a, 0x89, 0x55, 0x5d, 0x90, 0xb7, 0x5e, 0x2c, 0xea,
3408 0x9a, 0xdd, 0xcf, 0x9a, 0xcd, 0x9e, 0xc9, 0x94, 0x83, 0x83, 0x48, 0x4d,
3409 0x73, 0xaf, 0xbd, 0xa7, 0x91, 0x0a, 0xd9, 0x4f, 0x0d, 0x9d, 0x67, 0xef,
3410 0x93, 0x31, 0x64, 0x6e, 0xa6, 0xa2, 0x27, 0x6f, 0xad, 0xd5, 0xe9, 0xfe,
3411 0x9a, 0xae, 0xbc, 0xbf, 0x76, 0x4e, 0x9e, 0xba, 0x72, 0xee, 0x1c, 0x7d,
3412 0x97, 0xcb, 0x2d, 0xfd, 0xac, 0xfb, 0x80, 0x37, 0xfc, 0x9f, 0x29, 0x2c,
3413 0x6c, 0xac, 0xe8, 0x8e, 0xcf, 0xef, 0x6c, 0x89, 0x8d, 0xe3, 0x17, 0x55,
3414 0xa6, 0xe3, 0x2e, 0x13, 0xf5, 0x4a, 0x59, 0xcb, 0x42, 0x14, 0x4b, 0x33,
3415 0xaa, 0x18, 0x97, 0x05, 0x0d, 0xca, 0x96, 0xe0, 0x6e, 0xc6, 0x07, 0xb6,
3416 0x15, 0x0c, 0x5a, 0x23, 0x45, 0x39, 0xc4, 0x5e, 0x2e, 0xcf, 0x3e, 0x2c,
3417 0xdc, 0x0f, 0xad, 0x6f, 0xf5, 0x79, 0x77, 0xeb, 0x3e, 0x8e, 0xef, 0x83,
3418 0xb4, 0x67, 0xee, 0xdc, 0x10, 0x8f, 0x95, 0xfe, 0x4a, 0x3d, 0x16, 0x97,
3419 0x39, 0xbd, 0x47, 0x84, 0x73, 0x9e, 0xa8, 0xe8, 0xe7, 0x41, 0xad, 0x9f,
3420 0x5d, 0x8d, 0xc7, 0x31, 0x4f, 0xce, 0x9e, 0x40, 0x6a, 0xe0, 0x82, 0x29,
3421 0xfb, 0x63, 0xd4, 0xcc, 0xeb, 0x6a, 0x7b, 0xad, 0xa8, 0xed, 0xd5, 0x36,
3422 0xf5, 0x10, 0xed, 0xd6, 0x78, 0xac, 0xd6, 0x37, 0x23, 0x88, 0xa1, 0x69,
3423 0xd4, 0x63, 0x8d, 0x4f, 0xe6, 0x8e, 0xb0, 0xce, 0xc4, 0x8e, 0xef, 0xa8,
3424 0xd8, 0xfb, 0xba, 0xff, 0xa4, 0x59, 0xc9, 0xef, 0x13, 0xba, 0x4e, 0x58,
3425 0xb0, 0x58, 0x77, 0xae, 0x1c, 0x93, 0xe1, 0x16, 0xf1, 0x91, 0x5a, 0x92,
3426 0xf4, 0x12, 0xab, 0x85, 0xd6, 0x3e, 0x49, 0x6a, 0x9f, 0x18, 0x32, 0x27,
3427 0xfe, 0x85, 0xf6, 0x69, 0xfd, 0xa6, 0x6b, 0xa1, 0x83, 0x96, 0x51, 0xaf,
3428 0xb3, 0xcd, 0x48, 0x52, 0x3b, 0x3b, 0x68, 0xfe, 0x6c, 0x3f, 0x4b, 0xac,
3429 0xe2, 0x3e, 0x75, 0x07, 0x1c, 0x5c, 0x33, 0x26, 0x9d, 0xa3, 0xb8, 0x40,
3430 0x0e, 0xf7, 0x06, 0xb5, 0x4e, 0xbc, 0x3a, 0x9d, 0x64, 0x4d, 0x77, 0xd0,
3431 0xf5, 0xd9, 0x3e, 0x31, 0xd4, 0x8d, 0xe9, 0xb3, 0x0b, 0xd3, 0x26, 0xe3,
3432 0xe4, 0x98, 0x47, 0x39, 0xee, 0xa2, 0xfd, 0x44, 0x23, 0xfb, 0x2d, 0xa5,
3433 0xfa, 0x59, 0x0f, 0x2c, 0xd6, 0xdc, 0x5e, 0xb4, 0x0f, 0x8e, 0x88, 0xd4,
3434 0x40, 0x23, 0x52, 0xfd, 0x31, 0x78, 0xce, 0x3a, 0xa1, 0x7f, 0x63, 0x98,
3435 0xd3, 0x24, 0xc0, 0xe3, 0xc5, 0x3f, 0xe7, 0xba, 0xa4, 0xb3, 0x85, 0x18,
3436 0x6b, 0xf9, 0xd3, 0x54, 0xbe, 0x05, 0xa9, 0x21, 0x07, 0x9e, 0xfb, 0x3a,
3437 0xe7, 0x15, 0xbe, 0x30, 0xef, 0xd9, 0xca, 0x3c, 0xfa, 0xe2, 0x7a, 0xad,
3438 0xb5, 0x94, 0x7a, 0x82, 0x7a, 0xab, 0xe0, 0x68, 0xce, 0x11, 0x18, 0xf6,
3439 0xf5, 0x9e, 0x3d, 0xae, 0x05, 0x99, 0xb8, 0x03, 0x9f, 0xa8, 0x42, 0x3c,
3440 0xec, 0x8c, 0x54, 0x7e, 0x97, 0x90, 0x4e, 0x8e, 0xdc, 0x36, 0x5d, 0xed,
3441 0xb3, 0xd8, 0x17, 0x29, 0xf5, 0x22, 0xb9, 0xe9, 0x09, 0x6a, 0x9f, 0xe1,
3442 0xa9, 0x4f, 0xd4, 0x34, 0xb5, 0xcd, 0x88, 0xa7, 0xe7, 0x55, 0x39, 0xe8,
3443 0xb0, 0xa3, 0xd4, 0xe3, 0xfc, 0x6e, 0xcf, 0xd4, 0x1c, 0x2f, 0xf1, 0x3c,
3444 0x72, 0xc2, 0xed, 0xde, 0x7f, 0xab, 0xcd, 0x5f, 0x9a, 0xab, 0xd4, 0x18,
3445 0x6d, 0x78, 0xcb, 0xc7, 0xfd, 0x11, 0x24, 0x73, 0xb3, 0xf4, 0xcf, 0x99,
3446 0xe5, 0xb2, 0x7f, 0x8a, 0xf7, 0x5c, 0x2f, 0x64, 0x96, 0x77, 0xec, 0x9d,
3447 0x07, 0xcd, 0xb5, 0x92, 0xf9, 0x60, 0x78, 0x75, 0x7c, 0xfe, 0x99, 0x2f,
3448 0x13, 0x47, 0xf8, 0xbe, 0x39, 0xa3, 0xf7, 0x50, 0xaa, 0xc7, 0xd7, 0x3d,
3449 0xfe, 0x08, 0x7b, 0xfc, 0x82, 0x6a, 0xf0, 0xde, 0x50, 0xcf, 0x75, 0xc8,
3450 0xfe, 0x11, 0xe1, 0x71, 0xad, 0xcb, 0xba, 0xa0, 0xfb, 0xaa, 0x11, 0xf6,
3451 0x55, 0x2e, 0x9e, 0x26, 0xc7, 0x9c, 0x2c, 0x77, 0xe2, 0xf9, 0xb2, 0x87,
3452 0x67, 0x58, 0x3f, 0x9e, 0x2a, 0x5b, 0xd8, 0xfa, 0x88, 0xcc, 0x58, 0x62,
3453 0x27, 0xce, 0xfb, 0xd2, 0xf9, 0x1e, 0xed, 0x36, 0x03, 0xb9, 0x7f, 0x25,
3454 0x79, 0x85, 0x67, 0x14, 0x72, 0x66, 0x8b, 0xb0, 0x03, 0x1b, 0xdf, 0xe9,
3455 0x30, 0x70, 0x38, 0x3e, 0x84, 0xbe, 0xf6, 0xbb, 0xf9, 0xb2, 0xd0, 0x7a,
3456 0x40, 0xd7, 0x6a, 0xdd, 0x6f, 0x34, 0xe3, 0x4e, 0xf2, 0xd9, 0xd5, 0x4b,
3457 0x43, 0xfc, 0x3a, 0xdd, 0xd6, 0xf9, 0x92, 0xa0, 0x66, 0x68, 0x91, 0x59,
3458 0xe0, 0xa7, 0xd8, 0xc8, 0x7e, 0x21, 0xb3, 0x6c, 0x7f, 0xad, 0x37, 0xff,
3459 0x29, 0x56, 0xea, 0x3e, 0xc3, 0x6f, 0x66, 0xbd, 0xab, 0xc6, 0xe1, 0x70,
3460 0xc5, 0x8f, 0x06, 0x9a, 0x0e, 0x16, 0x54, 0xbd, 0x27, 0x73, 0x93, 0x15,
3461 0x1d, 0xb5, 0xd0, 0xb9, 0x91, 0x7d, 0x40, 0xc3, 0x01, 0xcf, 0x5d, 0x27,
3462 0x14, 0x63, 0xb1, 0x9b, 0xb1, 0x48, 0x86, 0x31, 0xb6, 0xdb, 0xcd, 0x41,
3463 0x32, 0x6c, 0x16, 0x79, 0x71, 0x8b, 0xae, 0xb1, 0x75, 0xf5, 0xec, 0xbf,
3464 0x59, 0x53, 0x27, 0x0d, 0xf6, 0x23, 0xba, 0x1f, 0x8f, 0x62, 0x2a, 0xdd,
3465 0xc6, 0x3e, 0x29, 0x8a, 0xed, 0xe9, 0x1e, 0xea, 0x1a, 0x03, 0xc6, 0xc1,
3466 0x4b, 0x6a, 0xe5, 0x17, 0xfa, 0x88, 0x4d, 0xe3, 0x9a, 0xc3, 0x6c, 0xb1,
3467 0x91, 0xf9, 0x9b, 0x59, 0x46, 0xb1, 0x76, 0x8b, 0xee, 0xe1, 0xf5, 0x1d,
3468 0x1c, 0xf6, 0xc7, 0x06, 0xa6, 0x17, 0x38, 0xd8, 0xd5, 0x2d, 0x13, 0x05,
3469 0xe8, 0x5c, 0xfe, 0x6a, 0x4d, 0x81, 0x93, 0xfd, 0xbd, 0x3a, 0x03, 0x67,
3470 0x03, 0x6d, 0x91, 0x75, 0x4a, 0xb5, 0xa6, 0x4d, 0xe4, 0x2a, 0xf5, 0x26,
3471 0xe1, 0x64, 0xd9, 0xff, 0xcd, 0x4c, 0xb1, 0x27, 0x3b, 0xa8, 0xd4, 0x4e,
3472 0x62, 0xe9, 0xe3, 0x8e, 0xe1, 0x43, 0xec, 0xc4, 0xf7, 0xb6, 0xb2, 0xb7,
3473 0xfa, 0x3a, 0xdb, 0xb7, 0xb7, 0x8a, 0xdf, 0x24, 0x7f, 0x1b, 0xdd, 0x09,
3474 0xe8, 0x7e, 0xa7, 0xa0, 0x22, 0x9e, 0x37, 0xfb, 0x38, 0xb5, 0xe0, 0x6f,
3475 0x96, 0x75, 0xc1, 0x9d, 0x5f, 0xf5, 0xd5, 0x6a, 0x6a, 0xa9, 0x8f, 0xc8,
3476 0xf9, 0x61, 0xe5, 0x73, 0xcc, 0x59, 0x37, 0x7e, 0x49, 0x6d, 0xa6, 0x6f,
3477 0x7a, 0xaa, 0x76, 0x59, 0xf5, 0x01, 0x9b, 0xc4, 0x6b, 0xe1, 0xac, 0xf9,
3478 0x03, 0x36, 0x7d, 0x5e, 0xef, 0x62, 0xce, 0x9a, 0xf1, 0xc5, 0xb4, 0x51,
3479 0xba, 0xd3, 0x15, 0xfc, 0xf8, 0xf8, 0xc8, 0x1b, 0x4e, 0xcc, 0x47, 0xa1,
3480 0x93, 0x39, 0x36, 0xfb, 0x4f, 0x1c, 0x6b, 0x5f, 0x0a, 0xfc, 0xa6, 0xfc,
3481 0x5d, 0xf2, 0xbe, 0xd1, 0xd5, 0x82, 0xc2, 0x0c, 0x6d, 0x3c, 0xf4, 0x75,
3482 0x62, 0x32, 0x3f, 0x86, 0xfb, 0xd8, 0x46, 0xe0, 0x59, 0xd6, 0xdb, 0x63,
3483 0xe4, 0x8c, 0xe6, 0xb4, 0x83, 0x32, 0x9f, 0x8f, 0x94, 0x92, 0x83, 0xa7,
3484 0x99, 0xb7, 0xc7, 0xf9, 0x7c, 0x94, 0xf7, 0xdc, 0x4a, 0x7d, 0x77, 0xef,
3485 0x78, 0x3d, 0xbe, 0x3d, 0x1e, 0xc3, 0xd6, 0xf1, 0x80, 0x9a, 0x02, 0xb7,
3486 0x35, 0x72, 0xdf, 0x57, 0x89, 0xe7, 0xcd, 0x4b, 0xaf, 0xc3, 0x5a, 0x27,
3487 0xe9, 0xde, 0xcd, 0xdc, 0xab, 0x3b, 0x08, 0xc7, 0x21, 0x8e, 0xfe, 0xd9,
3488 0x5b, 0x2e, 0xd0, 0x44, 0xbd, 0xbf, 0xd4, 0x12, 0xeb, 0xc7, 0x57, 0x57,
3489 0x9e, 0x47, 0xd2, 0x79, 0x6a, 0x0b, 0x62, 0xb2, 0x44, 0x4c, 0x32, 0x36,
3490 0x4f, 0x97, 0x88, 0x4b, 0x6a, 0xc3, 0x93, 0x25, 0x8d, 0x6d, 0x1f, 0xcf,
3491 0x75, 0x0c, 0xa9, 0x2a, 0x56, 0x3e, 0x55, 0x4f, 0x78, 0xaf, 0x45, 0x50,
3492 0x6f, 0xe9, 0xdf, 0x76, 0xf0, 0x66, 0x31, 0xe1, 0x6c, 0x28, 0x6b, 0x3c,
3493 0xfc, 0x6d, 0x0d, 0x0f, 0x6f, 0x47, 0xaa, 0xfa, 0x44, 0xce, 0x4c, 0x42,
3494 0x73, 0xdd, 0x62, 0xe7, 0xa6, 0xd2, 0xf0, 0x34, 0x7d, 0x9f, 0xa7, 0xc6,
3495 0x76, 0xdf, 0x67, 0xc8, 0xc7, 0xa6, 0x8c, 0x2e, 0xf6, 0xd4, 0xf4, 0x87,
3496 0xbe, 0x33, 0xf3, 0x37, 0x2d, 0x3b, 0x75, 0x4c, 0x8e, 0x17, 0x71, 0x2b,
3497 0xfb, 0x1e, 0x3f, 0x44, 0xf5, 0x6e, 0x53, 0xbc, 0xf3, 0x43, 0xbc, 0xf3,
3498 0x0f, 0xf9, 0x3c, 0x51, 0x4a, 0x66, 0x7b, 0x78, 0xe7, 0x27, 0xf9, 0x3c,
3499 0x59, 0x6a, 0xad, 0xd3, 0x67, 0x4c, 0x4e, 0x85, 0xac, 0x03, 0x2f, 0xab,
3500 0x52, 0xbc, 0x12, 0x0e, 0xf6, 0xc0, 0x06, 0x1a, 0x0e, 0xce, 0xf1, 0xb3,
3501 0xfe, 0x6d, 0x49, 0xd7, 0x38, 0xcd, 0xf9, 0x83, 0xba, 0x26, 0x67, 0xae,
3502 0x14, 0x97, 0xd4, 0x47, 0x9e, 0x0c, 0x9f, 0xc6, 0x29, 0x35, 0x1f, 0xa9,
3503 0x99, 0xf9, 0x42, 0x4e, 0xaf, 0x30, 0xa4, 0xbb, 0xc8, 0xac, 0x72, 0x75,
3504 0x67, 0x8d, 0xab, 0xbd, 0xa9, 0x1b, 0xeb, 0xaa, 0x77, 0x48, 0x39, 0x47,
3505 0x30, 0x8f, 0xd8, 0xd7, 0x35, 0x55, 0xf3, 0x8f, 0xfe, 0x4c, 0x7d, 0x67,
3506 0x85, 0x09, 0x93, 0x7e, 0x08, 0x6f, 0xd5, 0x63, 0xd1, 0xda, 0x6f, 0x3e,
3507 0x29, 0x5f, 0xf7, 0x82, 0xd3, 0xf1, 0x1e, 0x7e, 0xa7, 0x7b, 0xc1, 0x4f,
3508 0x54, 0x2e, 0xde, 0xf3, 0x19, 0x67, 0x15, 0xd0, 0x45, 0xed, 0xf1, 0x3e,
3509 0x39, 0xa1, 0x83, 0x2a, 0x4a, 0xe0, 0x14, 0xfb, 0xb0, 0x23, 0x5d, 0x49,
3510 0x67, 0x17, 0xf7, 0x0b, 0x1d, 0x87, 0x5c, 0xb0, 0x93, 0x3a, 0x93, 0x73,
3511 0xca, 0x1d, 0x5c, 0xa3, 0xb9, 0xf0, 0x3e, 0xfa, 0xe6, 0xb7, 0xed, 0x96,
3512 0xe7, 0x63, 0x57, 0xe9, 0x39, 0xc3, 0xf2, 0xb4, 0x5f, 0x52, 0x99, 0x5d,
3513 0xb4, 0xe7, 0x2c, 0xed, 0x89, 0x78, 0x21, 0xb9, 0x31, 0x55, 0x59, 0x5f,
3514 0xb0, 0xb4, 0x1d, 0x15, 0x7b, 0x38, 0xa6, 0x39, 0x4f, 0xf6, 0x9f, 0x62,
3515 0x8d, 0xdd, 0x02, 0xfd, 0x3b, 0x85, 0xb6, 0xa1, 0x2d, 0xb1, 0x85, 0xf6,
3516 0x1c, 0x8e, 0x57, 0xf8, 0x94, 0xdf, 0xf1, 0xbc, 0x92, 0xb1, 0xbe, 0x9e,
3517 0x78, 0xbf, 0x22, 0x9d, 0x60, 0x6c, 0xbb, 0xa8, 0xef, 0xab, 0x71, 0xde,
3518 0x57, 0xc1, 0xf2, 0xff, 0x00, 0xb0, 0x60, 0x72, 0xf9, 0x60, 0x17, 0x00,
3519 0x00, 0x00 };
3520
3521static const u32 bnx2_TPAT_b06FwData[(0x0/4) + 1] = { 0x0 };
3522static const u32 bnx2_TPAT_b06FwRodata[(0x0/4) + 1] = { 0x0 };
3523
3524static struct fw_info bnx2_tpat_fw_06 = {
3525 /* Firmware version: 4.6.16 */
3526 .ver_major = 0x4,
3527 .ver_minor = 0x6,
3528 .ver_fix = 0x10,
3529
3530 .start_addr = 0x08000488,
3531
3532 .text_addr = 0x08000400,
3533 .text_len = 0x175c,
3534 .text_index = 0x0,
3535 .gz_text = bnx2_TPAT_b06FwText,
3536 .gz_text_len = sizeof(bnx2_TPAT_b06FwText),
3537
3538 .data_addr = 0x00000000,
3539 .data_len = 0x0,
3540 .data_index = 0x0,
3541 .data = bnx2_TPAT_b06FwData,
3542
3543 .sbss_addr = 0x08001b80,
3544 .sbss_len = 0x44,
3545 .sbss_index = 0x0,
3546
3547 .bss_addr = 0x08001bc4,
3548 .bss_len = 0x450,
3549 .bss_index = 0x0,
3550
3551 .rodata_addr = 0x00000000,
3552 .rodata_len = 0x0,
3553 .rodata_index = 0x0,
3554 .rodata = bnx2_TPAT_b06FwRodata,
3555};
3556
3557/* Initialized Values for the TX Patch-up Processor. */ 58/* Initialized Values for the TX Patch-up Processor. */
3558static const struct cpu_reg cpu_reg_tpat = { 59static const struct cpu_reg cpu_reg_tpat = {
3559 .mode = BNX2_TPAT_CPU_MODE, 60 .mode = BNX2_TPAT_CPU_MODE,
@@ -3570,882 +71,6 @@ static const struct cpu_reg cpu_reg_tpat = {
3570 .mips_view_base = 0x8000000, 71 .mips_view_base = 0x8000000,
3571}; 72};
3572 73
3573static u8 bnx2_TXP_b06FwText[] = {
3574 0xad, 0x7b, 0x0f, 0x70, 0x54, 0xe7, 0x75, 0xef, 0xef, 0xee, 0x1f, 0x69,
3575 0x57, 0x5a, 0xad, 0x2e, 0x78, 0xc1, 0xab, 0x54, 0x29, 0x7b, 0xd9, 0xbb,
3576 0xd2, 0x1a, 0x09, 0xb8, 0x0b, 0xc2, 0x88, 0xe8, 0xd6, 0x6c, 0x85, 0x00,
3577 0x21, 0x64, 0x2c, 0x63, 0x25, 0x15, 0x7d, 0x9e, 0x5a, 0x0f, 0x64, 0x23,
3578 0xdb, 0xd8, 0x16, 0x35, 0x6d, 0xe5, 0xd4, 0xad, 0xd6, 0x92, 0xc0, 0xc2,
3579 0xac, 0xb8, 0x22, 0x0b, 0x11, 0xee, 0xf4, 0xbd, 0xc8, 0x96, 0xb0, 0xb0,
3580 0xb3, 0x62, 0xed, 0xa4, 0xaf, 0xd3, 0xcc, 0x34, 0xe3, 0x7d, 0xfe, 0x83,
3581 0x49, 0x1e, 0xb6, 0xd3, 0x4e, 0xe7, 0x3d, 0xa7, 0xf3, 0xde, 0x84, 0x17,
3582 0x63, 0x62, 0xa7, 0x89, 0xed, 0xe6, 0xa5, 0xf3, 0x44, 0xea, 0xf8, 0xbe,
3583 0xdf, 0xb9, 0x77, 0x17, 0x88, 0x9b, 0x4e, 0x67, 0x3a, 0x4f, 0x33, 0x9a,
3584 0xd5, 0xde, 0x3f, 0xdf, 0x77, 0xce, 0xf9, 0xce, 0xf9, 0x9d, 0xdf, 0x39,
3585 0xdf, 0xa7, 0x06, 0xa0, 0x0a, 0xa5, 0x9f, 0x1a, 0xfe, 0xb6, 0x0c, 0x0d,
3586 0x1f, 0x4a, 0xad, 0xb9, 0x75, 0x0d, 0xff, 0xbc, 0x15, 0x6a, 0x85, 0x4f,
3587 0x6e, 0xde, 0xaa, 0x00, 0xfd, 0x3f, 0xc6, 0xbf, 0xeb, 0xe7, 0xf3, 0xff,
3588 0xbe, 0xd7, 0x9c, 0x1f, 0x2f, 0xa0, 0x96, 0xe5, 0x92, 0x5f, 0x04, 0x3c,
3589 0xe6, 0xcc, 0x17, 0xda, 0x75, 0x04, 0xbc, 0x66, 0xaf, 0xb9, 0x4f, 0x07,
3590 0xd2, 0xf9, 0xa6, 0xd8, 0x16, 0xfc, 0xd2, 0xce, 0x44, 0x7c, 0x90, 0xeb,
3591 0x9f, 0x37, 0x3f, 0x19, 0xf9, 0xf6, 0x46, 0xed, 0xe3, 0x19, 0x2f, 0x02,
3592 0xaa, 0x79, 0x1a, 0x6a, 0x03, 0x02, 0xf5, 0x7c, 0xe7, 0xcf, 0x1b, 0xfd,
3593 0x5e, 0x84, 0xcb, 0x63, 0xb5, 0x62, 0xcc, 0x42, 0x26, 0x60, 0x0e, 0xa1,
3594 0x72, 0x03, 0xf0, 0x5e, 0x36, 0x61, 0x8c, 0x01, 0x53, 0x1e, 0x33, 0x11,
3595 0x7b, 0x05, 0x06, 0x0e, 0x17, 0x62, 0xe8, 0xe0, 0xef, 0x0e, 0xeb, 0x53,
3596 0x3b, 0xe6, 0x47, 0xc6, 0xcb, 0xe7, 0xf6, 0xb6, 0x00, 0x5b, 0xb3, 0x06,
3597 0x8e, 0x58, 0x08, 0xd4, 0x99, 0x8f, 0x63, 0x13, 0x3f, 0xc3, 0xe6, 0x30,
3598 0xde, 0x9a, 0x8c, 0xc7, 0x9e, 0x83, 0xd6, 0xa7, 0x7b, 0xb5, 0x61, 0xa0,
3599 0x69, 0x70, 0x40, 0xd1, 0xfa, 0xdf, 0x56, 0xb4, 0x9e, 0x49, 0x05, 0x01,
3600 0x85, 0xcf, 0x35, 0xe5, 0xe5, 0x73, 0x18, 0xab, 0xf2, 0x01, 0x5c, 0xf2,
3601 0xca, 0xfc, 0xbf, 0x45, 0x7b, 0x2b, 0xf0, 0xe9, 0xad, 0x18, 0xa7, 0x0c,
3602 0x7e, 0x53, 0xc1, 0xb3, 0x2d, 0x89, 0xe8, 0x28, 0xe4, 0x7e, 0x0c, 0x5b,
3603 0x0a, 0xf2, 0xa9, 0x51, 0x6b, 0xdb, 0x1e, 0x37, 0x6c, 0xfb, 0x8c, 0x51,
3604 0x89, 0x8c, 0xaa, 0x45, 0x01, 0x05, 0xa3, 0x86, 0x07, 0x69, 0xb5, 0x3d,
3605 0xe6, 0x83, 0x16, 0xbd, 0x17, 0xff, 0x4c, 0x9d, 0xd3, 0x49, 0x3f, 0xdc,
3606 0xe7, 0xfb, 0x51, 0x89, 0xa2, 0xea, 0x5a, 0xed, 0xd9, 0xac, 0x6d, 0x9f,
3607 0xd7, 0x7d, 0x38, 0x43, 0xfb, 0x8c, 0xe6, 0xff, 0xd9, 0x2e, 0xd2, 0x36,
3608 0xe3, 0x7a, 0x79, 0xfe, 0x00, 0x66, 0x54, 0xdb, 0x9e, 0xe5, 0xbd, 0x23,
3609 0xf9, 0xb2, 0x9d, 0x6d, 0xdb, 0xa3, 0xdb, 0xf6, 0x3e, 0xfd, 0x17, 0xf6,
3610 0xde, 0x5f, 0x79, 0xd6, 0xb6, 0x9f, 0x32, 0x6e, 0xc2, 0xd9, 0x5c, 0x87,
3611 0xd2, 0x35, 0xbf, 0x3c, 0xbc, 0x63, 0xda, 0xc6, 0x79, 0x03, 0xaa, 0xc7,
3612 0xdc, 0xa6, 0xec, 0x98, 0xef, 0x54, 0xb6, 0x16, 0x76, 0x2b, 0xdb, 0x66,
3613 0x7f, 0x57, 0xe9, 0x9c, 0xef, 0x57, 0xb6, 0x17, 0xa2, 0x98, 0xb3, 0x22,
3614 0x98, 0xb5, 0xfa, 0x94, 0x8e, 0xf9, 0x5e, 0xc5, 0xd5, 0x63, 0x58, 0x69,
3615 0x2f, 0x94, 0xc7, 0xba, 0x6e, 0xc7, 0x1d, 0x59, 0x13, 0x13, 0x56, 0x25,
3616 0xe7, 0x59, 0xb4, 0xbf, 0xdd, 0xb8, 0x48, 0x3d, 0x0d, 0x1c, 0x2d, 0x3c,
3617 0x85, 0xdb, 0xa7, 0x6d, 0x3b, 0x9f, 0x02, 0xf2, 0x05, 0xe0, 0xeb, 0x56,
3618 0xbc, 0x67, 0x50, 0xb1, 0xed, 0xed, 0x09, 0x7b, 0xc5, 0x15, 0xa3, 0x29,
3619 0xf9, 0x1a, 0xfe, 0xaf, 0x3d, 0x13, 0x41, 0x26, 0xc4, 0x31, 0x8e, 0x71,
3620 0xcd, 0x1e, 0x98, 0x44, 0xa0, 0xd2, 0x1c, 0xc7, 0x8f, 0xb2, 0x08, 0x54,
3621 0x98, 0x19, 0x9c, 0xcf, 0x8e, 0xaa, 0x01, 0xc4, 0xa3, 0x3b, 0x94, 0xcc,
3622 0xb0, 0x07, 0xda, 0xd0, 0xbb, 0xd0, 0x62, 0x5c, 0x8f, 0x0b, 0xaf, 0x2a,
3623 0x5a, 0xf1, 0x35, 0x68, 0xe9, 0x5f, 0x28, 0x5a, 0x67, 0x9d, 0x17, 0x69,
3624 0x4f, 0x22, 0x80, 0x6f, 0x37, 0xca, 0x9a, 0x8c, 0x63, 0x8d, 0xb3, 0x36,
3625 0x19, 0xdc, 0x72, 0x6d, 0x6d, 0x4c, 0x8c, 0x52, 0xae, 0x23, 0x94, 0xeb,
3626 0x75, 0x43, 0x8b, 0x3e, 0x0b, 0x7b, 0xc5, 0x80, 0x21, 0xf7, 0x4c, 0x8c,
3627 0x17, 0xec, 0x58, 0xd8, 0xbc, 0x44, 0x79, 0x91, 0xf9, 0x9c, 0x19, 0xc8,
3628 0xd4, 0x9a, 0xbf, 0xb4, 0xdf, 0xdc, 0x10, 0xc5, 0xcb, 0x85, 0x08, 0x5e,
3629 0x2a, 0xa8, 0x78, 0xb1, 0xd0, 0x01, 0xab, 0x80, 0xf0, 0xed, 0x85, 0x5f,
3630 0xe7, 0xc7, 0x36, 0x42, 0x7c, 0x9e, 0x72, 0x87, 0x77, 0x16, 0x7c, 0xfd,
3631 0x15, 0x26, 0x7a, 0xbe, 0x93, 0x1d, 0xb1, 0xab, 0x74, 0xf4, 0x2f, 0x31,
3632 0xf5, 0xf4, 0x2a, 0x25, 0xd4, 0x4a, 0x3f, 0xec, 0x79, 0x23, 0xdf, 0xea,
3633 0xd3, 0x8f, 0x07, 0xe1, 0xa7, 0xfd, 0xb7, 0x16, 0x6c, 0x7b, 0xcc, 0x38,
3634 0xb8, 0x76, 0x6f, 0xeb, 0x37, 0x8b, 0x3d, 0x7a, 0x37, 0x32, 0x85, 0x01,
3635 0x20, 0x6c, 0xf2, 0x93, 0xa1, 0xb8, 0xbb, 0xb9, 0x23, 0x76, 0xae, 0xdf,
3636 0xe7, 0xfa, 0x33, 0x65, 0xa0, 0xdd, 0x5f, 0xb2, 0x28, 0x83, 0xf5, 0x47,
3637 0x61, 0x54, 0xc5, 0xa8, 0xdf, 0xf7, 0x28, 0x67, 0x12, 0xdf, 0x28, 0xe8,
3638 0x94, 0xad, 0x99, 0x32, 0xc6, 0x28, 0x5f, 0x00, 0x7b, 0x73, 0xda, 0x54,
3639 0x06, 0xda, 0xc4, 0x0c, 0x56, 0x23, 0x1d, 0x51, 0xe9, 0x83, 0x7f, 0x06,
3640 0x77, 0x8c, 0x6e, 0x1c, 0xb7, 0xb0, 0x4e, 0x35, 0xb9, 0xbe, 0x29, 0x3c,
3641 0x5e, 0x81, 0x44, 0xff, 0xc7, 0x8a, 0x82, 0x37, 0x13, 0xdd, 0x98, 0xa4,
3642 0x3e, 0xdd, 0xf9, 0x20, 0x1e, 0xcc, 0x55, 0xe1, 0xfe, 0x9c, 0x8d, 0x07,
3643 0x52, 0x30, 0xab, 0xa8, 0x4f, 0x32, 0x95, 0x88, 0xbd, 0x0f, 0x1f, 0x3a,
3644 0xf2, 0xdd, 0x8c, 0xa5, 0x2d, 0x48, 0x57, 0x04, 0xb0, 0x25, 0x1f, 0x62,
3645 0x3c, 0xa6, 0x71, 0x7a, 0x3a, 0x00, 0xff, 0x7a, 0x0f, 0x66, 0x22, 0x15,
3646 0x48, 0x36, 0x78, 0xf8, 0x1b, 0x09, 0xb7, 0x4f, 0xd7, 0x87, 0xb7, 0x5a,
3647 0x3e, 0xec, 0xb7, 0x3c, 0x18, 0xc9, 0xd9, 0x76, 0x87, 0x61, 0xe3, 0xea,
3648 0x7a, 0x15, 0xdf, 0xa2, 0xfd, 0x0e, 0x5a, 0x51, 0x9c, 0x2d, 0x3c, 0x49,
3649 0x59, 0x22, 0xae, 0xbc, 0x16, 0x65, 0xb7, 0x28, 0xbb, 0x45, 0xb9, 0x2d,
3650 0x91, 0xf3, 0x55, 0xc6, 0x8c, 0x41, 0xbd, 0x82, 0x94, 0xa1, 0x1a, 0x83,
3651 0x94, 0x23, 0x9e, 0xb2, 0xe1, 0x49, 0x69, 0x99, 0xbd, 0x04, 0xaf, 0x15,
3652 0x0d, 0xb6, 0xfd, 0xf1, 0x7a, 0xd1, 0x85, 0x6b, 0xee, 0xe9, 0x96, 0x18,
3653 0xfd, 0xed, 0x1a, 0xc6, 0xd5, 0xf7, 0x69, 0xb7, 0xa7, 0x0b, 0x41, 0x0c,
3654 0xe7, 0x1c, 0xbf, 0x3d, 0x54, 0x41, 0xb9, 0x45, 0xae, 0x82, 0x9e, 0x60,
3655 0x8c, 0x26, 0xfa, 0x18, 0xa3, 0xd8, 0x49, 0x99, 0x1f, 0xb0, 0x22, 0xe1,
3656 0x8e, 0xe9, 0x44, 0xeb, 0x6e, 0xc5, 0x87, 0xed, 0xf9, 0xeb, 0x72, 0x52,
3657 0x5f, 0x89, 0x41, 0xea, 0xaa, 0x52, 0xbe, 0x08, 0xf6, 0x51, 0xce, 0x97,
3658 0x4a, 0x72, 0xce, 0x16, 0x64, 0xae, 0xcf, 0xca, 0x5a, 0x96, 0x13, 0x99,
3659 0xa5, 0x66, 0x44, 0x41, 0x55, 0x08, 0xbb, 0xf3, 0xef, 0x70, 0x2d, 0xea,
3660 0xf1, 0x4d, 0xae, 0xc1, 0xcb, 0x8c, 0x91, 0x6f, 0x5c, 0xf3, 0x17, 0x59,
3661 0x8f, 0x27, 0xb8, 0x0e, 0xda, 0xe9, 0x0c, 0x42, 0xe8, 0x2f, 0xa4, 0x71,
3662 0x78, 0x1a, 0xe9, 0x39, 0xe3, 0x18, 0xe3, 0x7d, 0x39, 0xbc, 0x7a, 0x65,
3663 0x5a, 0xd5, 0xab, 0xb0, 0x6f, 0x36, 0x82, 0xa1, 0x42, 0x3b, 0xac, 0x5c,
3664 0x04, 0x07, 0xe8, 0x9b, 0x1f, 0xa6, 0xd2, 0x0f, 0x84, 0x21, 0xb2, 0x47,
3665 0xf0, 0x20, 0xdf, 0x79, 0x6a, 0x3a, 0x82, 0x41, 0xda, 0x68, 0x47, 0x2a,
3666 0xd1, 0x1a, 0xe4, 0xb5, 0xfd, 0xbc, 0x76, 0x84, 0xf6, 0x7f, 0xd5, 0x98,
3667 0x44, 0x7f, 0x8f, 0x96, 0x04, 0x22, 0xb8, 0xcf, 0x82, 0x4a, 0x17, 0x7e,
3668 0x82, 0xf8, 0x96, 0x7c, 0x95, 0xdf, 0xef, 0x2d, 0x54, 0x51, 0xdf, 0x30,
3669 0xa2, 0xfa, 0x27, 0xb6, 0xbf, 0xc5, 0xb6, 0xbf, 0x66, 0x24, 0x2e, 0xfc,
3670 0xd0, 0xeb, 0xc3, 0x63, 0x05, 0x0f, 0x86, 0x67, 0xab, 0xf0, 0xfb, 0x39,
3671 0x1f, 0xee, 0x6c, 0xa8, 0xc2, 0xc1, 0xd9, 0x34, 0xc6, 0xa6, 0xab, 0x30,
3672 0x90, 0xc3, 0x8a, 0xfb, 0x8c, 0xb1, 0x25, 0x15, 0xd0, 0x16, 0x3b, 0x90,
3673 0xc4, 0x55, 0xae, 0xc3, 0x63, 0xb3, 0xa1, 0x70, 0xdf, 0xb4, 0x8a, 0xe1,
3674 0xf9, 0x20, 0x9f, 0xf7, 0xf0, 0xf9, 0x4a, 0x18, 0xeb, 0xe2, 0xc3, 0x2a,
3675 0x44, 0xc6, 0x6a, 0x3c, 0x3c, 0x1b, 0xc4, 0x43, 0x39, 0x15, 0x07, 0xa6,
3676 0x5b, 0x30, 0x65, 0xa5, 0x71, 0x94, 0xd8, 0xf1, 0xf5, 0x94, 0xd6, 0x73,
3677 0x40, 0xd1, 0xd2, 0x5b, 0x95, 0x34, 0x1a, 0x53, 0x7e, 0x5c, 0x22, 0x0e,
3678 0xf9, 0x53, 0x4d, 0xad, 0x2f, 0x12, 0x1b, 0x2a, 0xcc, 0x08, 0xbf, 0x6b,
3679 0x13, 0x8c, 0xd9, 0xb4, 0xdf, 0xb3, 0x1e, 0x58, 0x26, 0xf1, 0x1b, 0x09,
3680 0x77, 0x59, 0x6a, 0xb8, 0xab, 0x50, 0x1f, 0xde, 0x61, 0x45, 0xc3, 0x3b,
3681 0x18, 0x5f, 0x5b, 0xc5, 0x1f, 0xad, 0x00, 0x8e, 0xa5, 0x7e, 0x69, 0xf7,
3682 0x2f, 0x71, 0xf0, 0x2c, 0x7c, 0xfb, 0xb4, 0x96, 0x99, 0x81, 0x66, 0x30,
3683 0x1b, 0x60, 0x72, 0xde, 0xc7, 0xf5, 0x53, 0xb0, 0x44, 0x6f, 0x21, 0x8e,
3684 0xab, 0x78, 0x98, 0x98, 0xf2, 0xb7, 0xc4, 0x94, 0x81, 0xe3, 0x71, 0x75,
3685 0x0a, 0x41, 0xda, 0x1b, 0xd8, 0x7b, 0x2e, 0xc2, 0x35, 0xef, 0xc4, 0x93,
3686 0x94, 0x6b, 0xc7, 0x86, 0x08, 0xee, 0x2f, 0xa8, 0xe1, 0x4e, 0xae, 0xdf,
3687 0xfb, 0xf9, 0x68, 0x78, 0x0b, 0xd7, 0xf2, 0xdd, 0xbc, 0x16, 0x2b, 0xe2,
3688 0x9f, 0xc4, 0x9f, 0x92, 0xf0, 0x00, 0xf7, 0x1d, 0xf7, 0xa3, 0x18, 0x91,
3689 0xb9, 0x68, 0x73, 0xeb, 0x65, 0x3b, 0xa4, 0xeb, 0xa7, 0x0f, 0xd0, 0xd6,
3690 0x8f, 0x16, 0x42, 0x78, 0xc8, 0xd2, 0x92, 0xdf, 0x50, 0x42, 0xb4, 0x69,
3691 0x80, 0x76, 0x20, 0xc0, 0x2c, 0x97, 0xe7, 0x52, 0x88, 0x2d, 0x77, 0xb1,
3692 0xf6, 0xe0, 0xac, 0xf8, 0x09, 0xd7, 0xde, 0xa2, 0x0f, 0xd0, 0x7f, 0xbe,
3693 0x71, 0x2d, 0x56, 0x35, 0x35, 0xe3, 0x60, 0x77, 0x92, 0xfe, 0xe2, 0xda,
3694 0xe8, 0xc4, 0xb4, 0xd8, 0x41, 0x9b, 0x82, 0x27, 0x8d, 0xb5, 0xeb, 0xfe,
3695 0xd6, 0xbe, 0xb4, 0x4c, 0xec, 0xa1, 0x62, 0x84, 0x36, 0x3c, 0x6d, 0xd9,
3696 0xf6, 0xd5, 0xf5, 0x3f, 0xb5, 0x5b, 0x6f, 0x16, 0xbb, 0x88, 0xae, 0xdf,
3697 0x52, 0x24, 0x8f, 0x2c, 0xd1, 0xc3, 0xff, 0x1f, 0x7c, 0xe5, 0x0f, 0xed,
3698 0x7e, 0x47, 0x3f, 0xf1, 0x17, 0x1f, 0x7d, 0xf1, 0x49, 0x8e, 0xed, 0x41,
3699 0x3f, 0xc7, 0x7b, 0xc4, 0xb2, 0x3f, 0xaa, 0x33, 0x3f, 0xb5, 0x5b, 0x37,
3700 0xea, 0x43, 0x8b, 0xca, 0xff, 0xe0, 0xf5, 0x08, 0x1e, 0x2e, 0xb4, 0xd2,
3701 0x76, 0x1d, 0x78, 0xca, 0x12, 0x3c, 0xec, 0x64, 0xbc, 0x45, 0xe9, 0xcf,
3702 0xf5, 0xf4, 0x6f, 0x9f, 0xb2, 0xd5, 0xca, 0x63, 0xc7, 0x64, 0x06, 0xdb,
3703 0xe9, 0xef, 0x17, 0xb2, 0xf1, 0xd6, 0xe7, 0xa1, 0x65, 0xa8, 0x43, 0xb8,
3704 0x93, 0x36, 0xee, 0xb0, 0xb4, 0x4e, 0x59, 0xd3, 0x0e, 0xe2, 0xd2, 0x2b,
3705 0xd9, 0x68, 0xb8, 0xbd, 0x20, 0xf6, 0xae, 0x0f, 0x6f, 0x29, 0xdc, 0xca,
3706 0xb5, 0x57, 0xb0, 0x69, 0x75, 0x80, 0x38, 0x73, 0x07, 0xdc, 0x75, 0x75,
3707 0xd7, 0xee, 0xcd, 0x54, 0x53, 0xff, 0x4f, 0xd1, 0x85, 0xcc, 0x32, 0xf7,
3708 0xda, 0x30, 0xaf, 0xd5, 0xae, 0x47, 0xf8, 0x0e, 0xfa, 0xc1, 0x3d, 0xf4,
3709 0x83, 0xab, 0xeb, 0x7f, 0x69, 0xc7, 0x6e, 0x72, 0xfd, 0xa0, 0x7d, 0xda,
3710 0x17, 0xde, 0x46, 0x3b, 0x6d, 0x35, 0x14, 0xcc, 0x1a, 0x4f, 0xa1, 0xff,
3711 0x1a, 0x77, 0x48, 0xcf, 0x9c, 0x35, 0xd2, 0xc4, 0x91, 0x36, 0xf8, 0x96,
3712 0x60, 0xe6, 0x79, 0xe3, 0x30, 0x62, 0xae, 0xef, 0xe0, 0x40, 0x2e, 0x88,
3713 0xcc, 0x9d, 0x2a, 0xe6, 0x1a, 0x55, 0x3c, 0xc2, 0xb1, 0x3f, 0x4c, 0x35,
3714 0x0d, 0xbe, 0x45, 0x1b, 0xcc, 0x2c, 0x91, 0x6b, 0x69, 0xfc, 0x95, 0xf1,
3715 0x65, 0xe0, 0x26, 0x77, 0xee, 0x79, 0x89, 0xd1, 0xf9, 0x16, 0x1c, 0x29,
3716 0xf4, 0x29, 0x2e, 0x6e, 0x6a, 0x9d, 0x69, 0x7c, 0xcf, 0x16, 0x2c, 0x9d,
3717 0x27, 0x86, 0xb4, 0xd3, 0xa7, 0xc6, 0xe9, 0x47, 0xa3, 0xc4, 0x90, 0xed,
3718 0xf4, 0xa3, 0x27, 0xf3, 0xa2, 0x53, 0xc2, 0x30, 0xbc, 0x37, 0x33, 0x37,
3719 0xd3, 0x3e, 0x96, 0x93, 0xf3, 0x6b, 0x55, 0xfd, 0x30, 0xa6, 0x1c, 0xd9,
3720 0x86, 0x95, 0x3b, 0xc8, 0x31, 0x2e, 0xf9, 0x51, 0x1b, 0xd5, 0x1f, 0xc1,
3721 0x69, 0xe7, 0x5a, 0x84, 0xef, 0xa6, 0x3d, 0x1e, 0x1d, 0xaa, 0x6a, 0x76,
3722 0x30, 0xaf, 0x8a, 0xef, 0x77, 0x2a, 0x3b, 0x98, 0x6b, 0xd3, 0xcc, 0xb5,
3723 0x69, 0xe6, 0xda, 0x34, 0xe7, 0x4f, 0x33, 0xc7, 0xb6, 0x17, 0x86, 0x95,
3724 0x1e, 0xb1, 0xbb, 0xd8, 0xdf, 0x72, 0xf9, 0x03, 0xb1, 0x27, 0xbc, 0xbd,
3725 0xb0, 0xc6, 0xe3, 0x72, 0xba, 0x61, 0xa5, 0xc4, 0x61, 0x02, 0x55, 0x3a,
3726 0x73, 0x98, 0x35, 0xac, 0x74, 0x31, 0xcf, 0xf6, 0x39, 0x36, 0x8c, 0x0f,
3727 0x5d, 0x66, 0x7e, 0x7d, 0x93, 0xf9, 0x35, 0x9f, 0x62, 0x3c, 0xad, 0xbe,
3728 0x6a, 0xf7, 0x2f, 0x73, 0x73, 0xc1, 0x18, 0xe5, 0xfc, 0x1a, 0xd7, 0xaa,
3729 0xc8, 0x1c, 0xda, 0xe1, 0x55, 0x70, 0x9f, 0x8e, 0xda, 0x3a, 0x62, 0xe9,
3730 0x91, 0x02, 0xf1, 0xdf, 0x88, 0xb7, 0x7e, 0x40, 0x83, 0x1e, 0xd1, 0xfd,
3731 0xb8, 0x7a, 0x13, 0x49, 0x8e, 0xde, 0x8e, 0x63, 0xb9, 0x4a, 0x0c, 0xa6,
3732 0xd2, 0x4b, 0x03, 0xe4, 0x28, 0x9d, 0x2d, 0x78, 0x9c, 0x53, 0x2b, 0x51,
3733 0x33, 0x41, 0x7f, 0x41, 0xfa, 0x38, 0xf3, 0xc3, 0xa4, 0x75, 0x2b, 0xf2,
3734 0xcc, 0xa3, 0x73, 0x86, 0x0f, 0x6f, 0xe6, 0xd7, 0x10, 0xdf, 0x12, 0x46,
3735 0x48, 0xa9, 0x62, 0xdc, 0x9a, 0xc8, 0x5a, 0x82, 0x4b, 0xb6, 0x3d, 0x27,
3736 0x32, 0x24, 0x12, 0xe9, 0x51, 0x08, 0x56, 0xd9, 0x2b, 0xee, 0x4d, 0x55,
3737 0x60, 0x53, 0x22, 0x8c, 0x15, 0x7a, 0xbf, 0xd2, 0x59, 0x48, 0x18, 0xaf,
3738 0xe2, 0x77, 0x95, 0x7b, 0xe6, 0x4d, 0xc6, 0x74, 0x9f, 0xb2, 0x67, 0xbe,
3739 0x0a, 0x97, 0x22, 0x22, 0x23, 0x6a, 0xfd, 0xba, 0x07, 0xef, 0xdd, 0xa5,
3740 0x40, 0xd5, 0xd3, 0x38, 0xdf, 0xa2, 0xd2, 0x9f, 0x3a, 0xc9, 0x2d, 0x62,
3741 0xf0, 0x2e, 0x44, 0xc3, 0x3b, 0xb9, 0x06, 0xd5, 0x0b, 0xb2, 0x2e, 0x1d,
3742 0xb4, 0x55, 0x3d, 0xfd, 0xaf, 0x53, 0xe9, 0xa0, 0x1d, 0xbb, 0x66, 0xa1,
3743 0x56, 0x99, 0xbd, 0xca, 0xb6, 0x82, 0x46, 0x3b, 0x89, 0x4d, 0x86, 0xc9,
3744 0x91, 0xc4, 0x47, 0xca, 0x6b, 0x28, 0x7e, 0x7a, 0xe3, 0x3a, 0xf6, 0x79,
3745 0x24, 0xd6, 0x36, 0xad, 0x36, 0x19, 0x87, 0x1e, 0xca, 0x25, 0x32, 0x04,
3746 0x50, 0xdb, 0x68, 0xaf, 0xf8, 0x30, 0xb5, 0xc0, 0x7b, 0x26, 0x8e, 0x17,
3747 0xba, 0xb9, 0x2e, 0xcd, 0x25, 0xbf, 0x52, 0xe9, 0x87, 0x1d, 0x1c, 0x5f,
3748 0xfc, 0x3b, 0x0d, 0x77, 0x2d, 0x3b, 0xc9, 0x89, 0xfe, 0xb5, 0x35, 0x3c,
3749 0xc8, 0x31, 0x64, 0x1d, 0x2b, 0xca, 0x7e, 0x19, 0xbe, 0x67, 0x3a, 0x8d,
3750 0xf7, 0x9c, 0x1c, 0x5a, 0xf6, 0xe1, 0x61, 0xa5, 0x93, 0x6b, 0x09, 0xbf,
3751 0x3b, 0xfe, 0xae, 0x69, 0xf8, 0x6b, 0x4c, 0xc4, 0xbc, 0xe4, 0x6d, 0x17,
3752 0x53, 0x09, 0x75, 0x52, 0xe9, 0xe6, 0x58, 0x8c, 0x2d, 0x62, 0x7d, 0x35,
3753 0xfd, 0xa6, 0x83, 0xfa, 0x76, 0x51, 0xdf, 0x2e, 0x67, 0x4e, 0xf1, 0xbb,
3754 0x5f, 0x9d, 0x77, 0x4b, 0xe1, 0x1e, 0x47, 0xf7, 0x9d, 0x7c, 0x67, 0x0f,
3755 0x65, 0xdd, 0xc3, 0xe7, 0xb7, 0x58, 0xdf, 0xe7, 0x35, 0x91, 0x57, 0xe2,
3756 0xfa, 0xc6, 0x5c, 0x25, 0xb1, 0xfd, 0xdd, 0x12, 0x57, 0x40, 0xc6, 0x63,
3757 0x4a, 0xec, 0x0f, 0xa1, 0xa7, 0x05, 0x81, 0xa5, 0xe6, 0x50, 0xdb, 0xee,
3758 0x06, 0xe2, 0x14, 0x71, 0x32, 0x70, 0x9c, 0x1c, 0x99, 0xd8, 0x3b, 0xd7,
3759 0xaa, 0x60, 0xcc, 0xb8, 0x99, 0xf1, 0x67, 0x60, 0xa2, 0xa0, 0x75, 0xc6,
3760 0x78, 0xaf, 0x79, 0x52, 0xb8, 0xfb, 0x01, 0xb4, 0x93, 0xaf, 0x45, 0xcd,
3761 0x41, 0x44, 0xad, 0x78, 0x74, 0x42, 0xd1, 0x06, 0xb7, 0x40, 0xbb, 0x40,
3762 0xcc, 0x1f, 0x9e, 0x55, 0xb4, 0xa1, 0x3a, 0xaf, 0x96, 0x7e, 0xdb, 0xe1,
3763 0xcd, 0x07, 0xb0, 0xda, 0xe1, 0x66, 0x83, 0x48, 0x92, 0xa3, 0xee, 0xe4,
3764 0x98, 0xfb, 0x37, 0x29, 0xb8, 0x62, 0xfc, 0x94, 0xeb, 0xa4, 0xa5, 0x33,
3765 0x8a, 0x81, 0x2c, 0xe3, 0x3f, 0x7a, 0x5c, 0x38, 0xf8, 0x01, 0x72, 0x70,
3766 0x04, 0x42, 0x7c, 0x36, 0x3b, 0x19, 0x1f, 0x0e, 0x78, 0xb5, 0x24, 0xf9,
3767 0x77, 0x9a, 0x63, 0x1a, 0x05, 0xf2, 0x72, 0xce, 0x11, 0xbb, 0xaf, 0x34,
3768 0x66, 0xa2, 0x34, 0xa6, 0x9e, 0x07, 0xe3, 0x62, 0x02, 0xdb, 0x13, 0xcc,
3769 0x01, 0xc4, 0xb2, 0xa3, 0xc2, 0xf5, 0x39, 0x5e, 0xe5, 0x71, 0x83, 0xdf,
3770 0x87, 0x95, 0x3d, 0x12, 0x33, 0x95, 0x2e, 0x73, 0xab, 0xe5, 0x1c, 0x35,
3771 0xe6, 0x21, 0x2c, 0x38, 0x73, 0x0c, 0xc9, 0x1c, 0x43, 0x3f, 0x52, 0xb4,
3772 0xe4, 0x39, 0x45, 0x30, 0xb8, 0xa9, 0xef, 0x1c, 0x63, 0xe4, 0x88, 0xa2,
3773 0xb5, 0x1e, 0xa3, 0xfa, 0x41, 0x5d, 0xc6, 0x3f, 0x54, 0x9a, 0x67, 0x08,
3774 0x8d, 0x79, 0xc6, 0x5f, 0x21, 0xa0, 0x6c, 0xc9, 0xb5, 0x63, 0x6c, 0xb6,
3775 0x1d, 0xa3, 0x39, 0x05, 0xf7, 0x18, 0xcb, 0x70, 0xe9, 0x66, 0xa7, 0xfe,
3776 0xa8, 0x59, 0xa1, 0xd7, 0x61, 0x44, 0x45, 0xad, 0x47, 0xff, 0x3c, 0xf6,
3777 0x96, 0xb8, 0xfb, 0xf6, 0x13, 0x3d, 0xc4, 0x73, 0x1b, 0x1f, 0x30, 0x56,
3778 0xe2, 0x4b, 0x90, 0xf6, 0x9b, 0xad, 0xe4, 0xd9, 0x4b, 0xbd, 0x6e, 0x3c,
3779 0xff, 0x7d, 0xc0, 0x5d, 0x03, 0xb1, 0xff, 0x67, 0xef, 0xb5, 0xe3, 0xe9,
3780 0x5c, 0x05, 0x5a, 0xd7, 0xe3, 0xce, 0x28, 0x6a, 0x3c, 0xcc, 0x5d, 0xef,
3781 0xec, 0x56, 0x1e, 0xe6, 0x3d, 0xe7, 0xd9, 0xc0, 0x6f, 0x98, 0x1f, 0xb7,
3782 0xfd, 0x71, 0xa3, 0x5c, 0x97, 0x67, 0x6f, 0xbc, 0xae, 0x9a, 0xff, 0xf2,
3783 0xba, 0x82, 0x17, 0x08, 0x50, 0x5f, 0x67, 0xae, 0xc8, 0x67, 0x6d, 0x78,
3784 0x4d, 0x1f, 0x06, 0x27, 0x63, 0x38, 0xb0, 0x10, 0xc1, 0x42, 0x56, 0xeb,
3785 0xbf, 0xc4, 0xba, 0x60, 0x6f, 0x8b, 0x8e, 0x87, 0x16, 0xa2, 0x98, 0xcf,
3786 0xc2, 0x0e, 0x9a, 0x7a, 0x31, 0xa8, 0x24, 0xb1, 0x7f, 0xa1, 0x1e, 0xe7,
3787 0xb2, 0xfa, 0x85, 0x51, 0x25, 0x31, 0x5c, 0x47, 0x3e, 0xf1, 0xc8, 0x42,
3788 0x33, 0x1e, 0x5e, 0x08, 0xf0, 0x1d, 0x1b, 0x5d, 0xa9, 0x7a, 0x3e, 0xef,
3789 0xc1, 0xf3, 0x27, 0x6d, 0x5b, 0xf8, 0xd4, 0xe0, 0x02, 0x30, 0x3f, 0xc5,
3790 0x1c, 0x73, 0x86, 0xf9, 0xe6, 0x19, 0x60, 0xff, 0x33, 0x1e, 0xcc, 0x4e,
3791 0xd9, 0xd8, 0x6b, 0x8c, 0xd6, 0x79, 0xe8, 0xe4, 0xfd, 0xcc, 0x07, 0x7e,
3792 0xe6, 0xb6, 0x7b, 0x55, 0x17, 0xa7, 0x2f, 0x11, 0x87, 0x1e, 0x78, 0x26,
3793 0x89, 0x77, 0xb2, 0x19, 0x74, 0x91, 0x77, 0x0f, 0x53, 0x96, 0xb7, 0xb3,
3794 0xcc, 0x4f, 0x0b, 0x06, 0xde, 0xca, 0x06, 0x38, 0x4f, 0x33, 0x5e, 0xcb,
3795 0xca, 0x33, 0xf2, 0x6c, 0x08, 0x03, 0x94, 0xe5, 0xcd, 0x6c, 0x94, 0x73,
3796 0x46, 0xf0, 0x1d, 0x3e, 0x77, 0xff, 0x82, 0xce, 0x7c, 0x14, 0xe0, 0xbc,
3797 0x31, 0xbc, 0x91, 0x0d, 0x51, 0xd6, 0x08, 0x73, 0xd0, 0x00, 0xc6, 0xb2,
3798 0x4d, 0x17, 0xb6, 0x90, 0xb3, 0xb8, 0x39, 0x44, 0xae, 0x5d, 0xb6, 0xbb,
3799 0x9d, 0x98, 0x93, 0x79, 0xca, 0xf3, 0x0e, 0x60, 0x34, 0xfb, 0x9a, 0xb7,
3800 0x5c, 0x27, 0xbf, 0x30, 0xb5, 0xe8, 0x70, 0xba, 0xe7, 0x2d, 0xfe, 0x3d,
3801 0x0b, 0x9c, 0xb3, 0x32, 0x76, 0xad, 0x49, 0x0e, 0xcb, 0xdc, 0xf3, 0xc3,
3802 0x0d, 0xcd, 0x9c, 0x57, 0xef, 0x7f, 0x45, 0x91, 0x3a, 0xc6, 0x87, 0xd8,
3803 0x33, 0x62, 0x2f, 0xc6, 0xf1, 0x3c, 0xf0, 0x57, 0xe4, 0x95, 0x8d, 0x93,
3804 0x9a, 0xf8, 0x7d, 0x1f, 0xf9, 0x4a, 0x4f, 0x11, 0x0d, 0xc9, 0x87, 0x30,
3805 0x62, 0x57, 0x90, 0x77, 0xd7, 0x92, 0xaf, 0x2e, 0x34, 0x33, 0xff, 0x6c,
3806 0xb0, 0xed, 0xef, 0xb7, 0xc0, 0xf6, 0x98, 0xba, 0x51, 0xe7, 0x2d, 0x7e,
3807 0xbe, 0x06, 0xfa, 0x85, 0xb0, 0xa2, 0x17, 0x7f, 0x88, 0xc4, 0xd0, 0xab,
3808 0x10, 0xbb, 0x02, 0x6b, 0x16, 0x7c, 0x58, 0x4b, 0x7d, 0xb6, 0x4e, 0x72,
3809 0x6e, 0xf2, 0x8e, 0x04, 0x75, 0xba, 0x7d, 0x92, 0x5c, 0x4a, 0x0f, 0x61,
3810 0x35, 0x6d, 0x3c, 0x78, 0xca, 0xb6, 0x2b, 0x69, 0xe3, 0x46, 0xae, 0xcf,
3811 0x7d, 0x27, 0x6c, 0xbc, 0x62, 0xbc, 0x42, 0x9b, 0x2a, 0xe4, 0x83, 0x2d,
3812 0x7c, 0x27, 0xc2, 0xe7, 0x03, 0xd8, 0x3f, 0x29, 0x75, 0x50, 0x3d, 0x9f,
3813 0xb9, 0x88, 0x63, 0xd9, 0x24, 0x9a, 0x69, 0xbf, 0x18, 0xc7, 0x6c, 0xe2,
3814 0x3b, 0xb1, 0x05, 0x37, 0x97, 0xc4, 0x16, 0x7e, 0x1d, 0x0e, 0x00, 0xa7,
3815 0xa7, 0xb4, 0x89, 0x22, 0xb9, 0x74, 0x8d, 0x39, 0x02, 0xe6, 0x62, 0xbc,
3816 0x3d, 0xa3, 0xe0, 0xf8, 0x14, 0x6b, 0xb7, 0x0d, 0xb0, 0xab, 0xa8, 0xc7,
3817 0x5b, 0x33, 0xbf, 0x89, 0xe7, 0x4e, 0x52, 0xf7, 0x67, 0x23, 0xf8, 0x7a,
3818 0xd6, 0x87, 0x5b, 0x8e, 0x0b, 0x3f, 0xd3, 0x93, 0x07, 0x14, 0xa9, 0x75,
3819 0xa4, 0x06, 0x49, 0xc4, 0xfc, 0x8a, 0x07, 0x0d, 0xcf, 0xf9, 0xa0, 0x9f,
3820 0x8b, 0xc1, 0xdf, 0x10, 0x80, 0xde, 0xf0, 0xfb, 0xc4, 0x17, 0x0f, 0x2a,
3821 0x58, 0x97, 0x6e, 0xff, 0x4a, 0x92, 0xd7, 0x22, 0xbc, 0x86, 0xdf, 0xac,
3822 0x84, 0x77, 0xb9, 0x97, 0xf9, 0xb8, 0x42, 0x27, 0xb7, 0xf2, 0xd9, 0xb6,
3823 0x97, 0x78, 0xbf, 0xe7, 0xab, 0xb6, 0x1d, 0x5f, 0x2f, 0xcf, 0xab, 0x88,
3824 0x9f, 0xd3, 0xf9, 0x9c, 0x9b, 0x03, 0xaf, 0x73, 0x2b, 0x2f, 0x7d, 0x47,
3825 0xe2, 0xf3, 0x71, 0xb8, 0xf5, 0x90, 0xcb, 0xc1, 0x5f, 0x2a, 0x08, 0x4f,
3826 0x89, 0x39, 0x3a, 0x9c, 0x9d, 0x52, 0x88, 0x73, 0x26, 0x9f, 0xdd, 0x0c,
3827 0x6f, 0x4a, 0x9b, 0xc8, 0x70, 0xed, 0xf7, 0xaa, 0xad, 0x78, 0xc1, 0xf2,
3828 0xa3, 0x5a, 0x5f, 0x8e, 0x07, 0x7b, 0x54, 0xbc, 0x40, 0x8e, 0xcf, 0x75,
3829 0x4a, 0x16, 0x51, 0xc9, 0x5a, 0x8b, 0xe3, 0x79, 0xfe, 0x1a, 0xfa, 0x57,
3830 0x3c, 0xc4, 0x36, 0xaf, 0x83, 0x6d, 0x15, 0x0d, 0x40, 0x31, 0xef, 0xc3,
3831 0x79, 0xdd, 0xe5, 0x77, 0x2f, 0x39, 0x79, 0x58, 0x53, 0x8b, 0xd7, 0x78,
3832 0x9d, 0xd6, 0x9a, 0x56, 0x0e, 0x7b, 0x45, 0xce, 0x17, 0x0b, 0x3b, 0x7d,
3833 0xae, 0xff, 0x5c, 0xf4, 0x4a, 0xfd, 0x70, 0xfd, 0x7b, 0x15, 0x3c, 0xa6,
3834 0x16, 0x6d, 0xf7, 0x22, 0xe0, 0x33, 0x03, 0x6d, 0xe3, 0xfa, 0xe7, 0x6e,
3835 0x90, 0xbd, 0x19, 0x63, 0x85, 0xeb, 0x75, 0x73, 0x67, 0xd6, 0xf1, 0x9b,
3836 0x4e, 0xb1, 0xfd, 0x53, 0x86, 0x60, 0xeb, 0xb0, 0xd2, 0x41, 0xac, 0xca,
3837 0xf8, 0xdc, 0xba, 0xf8, 0x08, 0xeb, 0xe2, 0xd7, 0xb3, 0xd2, 0x1b, 0x39,
3838 0x84, 0x7d, 0x0e, 0xce, 0x0e, 0x09, 0xce, 0xc6, 0xce, 0x42, 0x1b, 0x1c,
3839 0x28, 0xe1, 0xec, 0x9c, 0x8b, 0xb3, 0xfd, 0x2e, 0xce, 0x1e, 0x2a, 0xe1,
3840 0xec, 0x10, 0x9a, 0xf3, 0x11, 0x72, 0xe0, 0x0e, 0xe6, 0xda, 0x6e, 0x72,
3841 0x0e, 0xc9, 0x91, 0x7d, 0xca, 0xce, 0xf9, 0x80, 0xb2, 0x2d, 0x17, 0xc0,
3842 0xeb, 0xe4, 0x53, 0x33, 0xbd, 0x50, 0x6f, 0xd9, 0x80, 0xe0, 0xce, 0x5c,
3843 0x0f, 0x2a, 0x75, 0xa9, 0x03, 0x2b, 0xb1, 0xdd, 0xc9, 0x55, 0x52, 0x2f,
3844 0x49, 0x2f, 0xa0, 0x97, 0x58, 0x07, 0x35, 0x68, 0xba, 0x75, 0xbf, 0xe0,
3845 0xde, 0xed, 0x7c, 0xf7, 0x2c, 0xfd, 0x10, 0x6e, 0x4e, 0x53, 0xee, 0x60,
3846 0x3d, 0xf0, 0x61, 0x4a, 0x41, 0xf1, 0xce, 0x00, 0x38, 0x16, 0xf5, 0x3d,
3847 0xd0, 0x36, 0x3e, 0xd5, 0xa3, 0x74, 0xcc, 0xce, 0x05, 0x99, 0xb7, 0x99,
3848 0x93, 0x66, 0x82, 0x6e, 0xae, 0xfe, 0xec, 0x58, 0xd2, 0x73, 0x49, 0xb6,
3849 0x6d, 0x22, 0xc7, 0x69, 0x5d, 0xff, 0x8f, 0x36, 0x7e, 0x47, 0xde, 0xff,
3850 0xcf, 0x25, 0xfb, 0xa5, 0x29, 0x4f, 0x24, 0xb0, 0xbd, 0xa0, 0x06, 0xd2,
3851 0x85, 0x0e, 0xbe, 0xdf, 0xc3, 0xb1, 0x7a, 0x83, 0x1d, 0xd6, 0xdd, 0xc1,
3852 0xad, 0x56, 0x77, 0x70, 0x9b, 0xc5, 0xd8, 0x2d, 0xf4, 0xd2, 0x8e, 0x3d,
3853 0xac, 0xe1, 0xef, 0x26, 0x7f, 0x90, 0x31, 0xfb, 0xc9, 0x65, 0x82, 0xd4,
3854 0x6d, 0x84, 0xba, 0x15, 0xa3, 0x7e, 0xa4, 0x35, 0x3f, 0x34, 0x75, 0xcc,
3855 0x59, 0xb7, 0x09, 0xa7, 0x8f, 0x54, 0x65, 0xae, 0x6e, 0xeb, 0x3a, 0x41,
3856 0x4c, 0x37, 0x1b, 0xda, 0x6e, 0x39, 0x85, 0x25, 0x7e, 0x53, 0xea, 0x5e,
3857 0xd6, 0xb2, 0x89, 0x84, 0xf1, 0x3e, 0x12, 0xd1, 0xd7, 0xf9, 0xec, 0x28,
3858 0x7d, 0x75, 0xcc, 0xe9, 0x1d, 0x70, 0x01, 0xf2, 0xcd, 0xe8, 0xb2, 0x02,
3859 0xc1, 0xdb, 0x59, 0x57, 0x85, 0x4d, 0xad, 0x75, 0x97, 0x57, 0x7a, 0x19,
3860 0xc5, 0xdf, 0x0e, 0xa1, 0x19, 0x9d, 0x85, 0x40, 0x70, 0xcb, 0xf4, 0xe7,
3861 0xf0, 0x0f, 0x27, 0x99, 0xbb, 0x20, 0x7e, 0x67, 0xdb, 0xf7, 0xb3, 0x26,
3862 0x39, 0x9a, 0xaf, 0xc7, 0x15, 0x67, 0x4d, 0x7d, 0x38, 0x92, 0x8f, 0xe1,
3863 0x32, 0xf1, 0xc9, 0xb7, 0x50, 0x87, 0x77, 0xa7, 0xbc, 0xd8, 0x67, 0xdc,
3864 0x56, 0xca, 0x09, 0x1e, 0xdc, 0x9b, 0x3c, 0x48, 0x1e, 0xe0, 0x41, 0x2d,
3865 0x39, 0xd8, 0x23, 0xce, 0x35, 0x2f, 0x6b, 0xb7, 0x2f, 0x62, 0xd8, 0xcd,
3866 0x19, 0x94, 0xb1, 0x9e, 0x32, 0xb6, 0x04, 0xb7, 0xe4, 0xb4, 0xe0, 0x1d,
3867 0x39, 0x04, 0xfc, 0xe6, 0xca, 0xb6, 0x33, 0x27, 0x6d, 0x0c, 0x18, 0xab,
3868 0xf0, 0xe1, 0xc9, 0xd1, 0x41, 0x1f, 0xfd, 0xe5, 0x27, 0xa9, 0x3e, 0x58,
3869 0xd3, 0x38, 0x4f, 0x26, 0x71, 0x31, 0x44, 0xfc, 0x6e, 0x24, 0x67, 0xa0,
3870 0x1f, 0x18, 0xf3, 0x8c, 0xc5, 0x6d, 0xf4, 0x0f, 0xfa, 0x43, 0xda, 0x6b,
3871 0x26, 0xfa, 0xc7, 0x48, 0x00, 0x6b, 0x28, 0x4f, 0x90, 0xf8, 0x1c, 0x5a,
3872 0x88, 0x05, 0xf7, 0x30, 0xa7, 0x44, 0x59, 0x9b, 0x05, 0x13, 0xb8, 0xad,
3873 0x0e, 0x89, 0xe4, 0x22, 0xf5, 0xf6, 0x2f, 0x34, 0x07, 0x77, 0x31, 0x47,
3874 0x5c, 0x49, 0xd8, 0x23, 0xaf, 0x18, 0x21, 0x84, 0x17, 0x0c, 0xda, 0xbb,
3875 0x0f, 0xa3, 0xf3, 0x2c, 0x97, 0x12, 0xac, 0xd7, 0x17, 0x5a, 0x83, 0xb7,
3876 0x33, 0x16, 0x6b, 0x88, 0x53, 0x4d, 0x0b, 0xe9, 0xa0, 0xd4, 0x6b, 0xcd,
3877 0x0b, 0x1b, 0x29, 0x9f, 0xac, 0x63, 0x73, 0xdb, 0x26, 0xfa, 0x41, 0x6c,
3878 0x01, 0xdb, 0x09, 0x65, 0xaf, 0x71, 0xcc, 0xbe, 0x28, 0x79, 0xe8, 0xfe,
3879 0x0d, 0x21, 0x62, 0x91, 0xd8, 0x92, 0x76, 0x2c, 0x94, 0x75, 0x92, 0xdc,
3880 0xdb, 0xd0, 0xb6, 0x70, 0x4a, 0x72, 0x6f, 0xb4, 0x2d, 0x7b, 0x4a, 0xc7,
3881 0x65, 0xe6, 0x8f, 0x35, 0x29, 0xcd, 0x38, 0xa7, 0xc4, 0xa3, 0x17, 0xa9,
3882 0x8b, 0x0f, 0x3f, 0xb3, 0xf7, 0xea, 0x89, 0xe2, 0x4a, 0xc6, 0x4f, 0x2d,
3883 0xf1, 0x2f, 0x4a, 0x5c, 0xaf, 0x5d, 0xa0, 0x61, 0x16, 0x7e, 0x46, 0xff,
3884 0x88, 0x22, 0x90, 0xd0, 0xf1, 0xde, 0xc9, 0x24, 0xed, 0x70, 0x6d, 0xcc,
3885 0x03, 0xa4, 0x50, 0x03, 0x4c, 0x77, 0x4f, 0x3c, 0x47, 0x1f, 0x1c, 0xe7,
3886 0xbc, 0x15, 0x0b, 0x22, 0xb3, 0x3c, 0x1f, 0xe1, 0xf3, 0xd7, 0xe7, 0xae,
3887 0xe5, 0xdc, 0x1f, 0x9d, 0x92, 0xfe, 0x52, 0xb4, 0xed, 0xfc, 0x49, 0x77,
3888 0xee, 0x44, 0x2a, 0x89, 0x9f, 0x9e, 0xd4, 0x86, 0xde, 0x53, 0xe2, 0xfd,
3889 0xe7, 0x15, 0x99, 0x1f, 0xf5, 0x35, 0xf8, 0xd0, 0x1e, 0x4d, 0x24, 0x86,
3890 0xf7, 0x72, 0xcc, 0xd6, 0x8d, 0xb4, 0xbf, 0x23, 0x07, 0x13, 0x3b, 0xb1,
3891 0xd4, 0x4f, 0x79, 0x5c, 0x59, 0xea, 0x39, 0xf6, 0xc9, 0x52, 0x9d, 0xc5,
3892 0x1a, 0xf3, 0xba, 0x3c, 0x11, 0xda, 0x21, 0xb0, 0xa7, 0x25, 0x84, 0x3a,
3893 0xe7, 0x39, 0x95, 0xcf, 0x89, 0x1d, 0x7e, 0xae, 0x78, 0xf4, 0xf7, 0x89,
3894 0x5b, 0x82, 0x1d, 0x11, 0x62, 0xd6, 0xdd, 0x52, 0x8f, 0x66, 0x32, 0xf4,
3895 0x77, 0x3f, 0xfd, 0x7d, 0xab, 0xf8, 0xb4, 0x45, 0x9f, 0xb6, 0xe8, 0xd3,
3896 0x96, 0x16, 0x1d, 0x42, 0x5c, 0x1d, 0xe0, 0xba, 0xa5, 0xa3, 0xe2, 0xeb,
3897 0xbd, 0xd8, 0xc7, 0xdf, 0xfb, 0x78, 0xff, 0x08, 0x6b, 0x54, 0x2c, 0x95,
3898 0x39, 0x0f, 0xa1, 0xc3, 0x7a, 0x02, 0x83, 0x39, 0xfc, 0x22, 0xd8, 0x52,
3899 0x89, 0xca, 0xd5, 0x52, 0x7f, 0x6b, 0xea, 0x51, 0x3c, 0xc1, 0x1a, 0xe8,
3900 0xe7, 0x4a, 0xb5, 0xee, 0xeb, 0x39, 0xa6, 0x68, 0x6a, 0x07, 0x6b, 0xd9,
3901 0xbd, 0x85, 0xbb, 0xb9, 0xbe, 0xf1, 0xc1, 0xd7, 0x15, 0xd6, 0x41, 0x75,
3902 0x9c, 0x9b, 0xb1, 0x74, 0x07, 0xe7, 0xb1, 0x44, 0x0e, 0x07, 0x5f, 0x7f,
3903 0x0f, 0x62, 0xdb, 0x6f, 0x37, 0x0e, 0x70, 0x7e, 0x57, 0x8e, 0x51, 0xd6,
3904 0x83, 0x03, 0x8c, 0xb1, 0x7d, 0x4e, 0x7c, 0xf5, 0x72, 0x8c, 0xeb, 0xb8,
3905 0xb5, 0x25, 0x2b, 0xf9, 0xd2, 0xc6, 0x93, 0x86, 0x8d, 0xe7, 0xf9, 0x7b,
3906 0x81, 0xd8, 0x35, 0x76, 0x03, 0x76, 0x79, 0xf8, 0xdc, 0x1e, 0x3e, 0xd7,
3907 0x4a, 0xdc, 0x9e, 0x9f, 0x95, 0xbe, 0xde, 0x21, 0xe9, 0xeb, 0x21, 0x6f,
3908 0x89, 0xed, 0x87, 0x70, 0x3e, 0x1b, 0x1f, 0xf6, 0x7a, 0xed, 0x11, 0xc6,
3909 0xd5, 0x85, 0x8f, 0xe8, 0xbb, 0x6f, 0x6e, 0xd0, 0x7a, 0x68, 0xc3, 0xe4,
3910 0xa4, 0xa2, 0x45, 0xbf, 0x8b, 0xe2, 0xf6, 0x00, 0x9a, 0x62, 0x6b, 0xbd,
3911 0x09, 0x95, 0x38, 0x57, 0x1c, 0xa0, 0xa6, 0xcf, 0x16, 0x5c, 0x6c, 0xdb,
3912 0x54, 0xc2, 0xb6, 0xd6, 0x7c, 0x15, 0xb1, 0x87, 0x39, 0x78, 0xd6, 0xce,
3913 0x84, 0x99, 0x9f, 0x0a, 0xb3, 0x32, 0xf6, 0x08, 0x9a, 0x52, 0x32, 0x96,
3914 0xde, 0x39, 0xa9, 0xe0, 0x4b, 0xd5, 0x48, 0x30, 0x37, 0xc1, 0xa8, 0xd4,
3915 0x33, 0x36, 0x73, 0x90, 0xea, 0x37, 0x25, 0x3f, 0x76, 0x13, 0x0f, 0x7b,
3916 0x89, 0x87, 0xc2, 0x99, 0xa5, 0xd7, 0xe9, 0xe2, 0xd1, 0xd6, 0x82, 0xac,
3917 0x8b, 0xac, 0x89, 0xac, 0xcd, 0x21, 0xdc, 0x6b, 0x49, 0xdd, 0x6e, 0x63,
3918 0xca, 0x48, 0xc4, 0x9e, 0x83, 0xac, 0xd3, 0x21, 0xda, 0xc2, 0x8f, 0x7d,
3919 0xc4, 0xbf, 0xbd, 0x2d, 0xb4, 0x55, 0xd8, 0x8f, 0xbd, 0x4e, 0x1f, 0xa0,
3920 0x6c, 0x3f, 0x3f, 0xd7, 0x50, 0x61, 0x4e, 0xfb, 0xaa, 0xdf, 0xb5, 0xa3,
3921 0xdb, 0x57, 0xf4, 0x9a, 0x32, 0x5e, 0xb9, 0xa7, 0xe8, 0xda, 0x6e, 0x7b,
3922 0x56, 0xc6, 0xb5, 0x71, 0xd6, 0x70, 0xb9, 0x69, 0xd9, 0x66, 0x82, 0xed,
3923 0x4b, 0x36, 0x02, 0x6b, 0x6f, 0xe0, 0xa7, 0x55, 0xbc, 0xd6, 0x75, 0x9d,
3924 0x9f, 0xf6, 0x09, 0x07, 0x26, 0x3f, 0xed, 0xdc, 0x49, 0x7e, 0xda, 0xa0,
3925 0x94, 0xb9, 0xa9, 0xf4, 0x14, 0xca, 0xfc, 0xb4, 0xb6, 0x84, 0xcd, 0x87,
3926 0xb0, 0x97, 0xdc, 0xa5, 0xae, 0x61, 0x04, 0x81, 0x75, 0x9e, 0x4f, 0x3d,
3927 0x18, 0x61, 0xed, 0x51, 0x01, 0x2c, 0xb3, 0xb1, 0x72, 0x7d, 0xc6, 0xae,
3928 0xd4, 0x1b, 0x62, 0x95, 0x1e, 0xe9, 0x19, 0x27, 0x32, 0x63, 0xc4, 0x12,
3929 0xcf, 0x3a, 0x2d, 0x93, 0x46, 0x40, 0x5d, 0xa2, 0xdf, 0x5d, 0xaa, 0x09,
3930 0xa2, 0x81, 0x1d, 0xe4, 0x36, 0x89, 0xd4, 0x2f, 0xed, 0x99, 0xc8, 0x08,
3931 0xa2, 0xeb, 0x8a, 0xc3, 0x51, 0xa4, 0x0f, 0x46, 0x1d, 0x5c, 0x99, 0x40,
3932 0x3e, 0x11, 0x0d, 0x74, 0x17, 0x32, 0xc1, 0xae, 0xc6, 0x18, 0x76, 0x4e,
3933 0x76, 0xb0, 0xe6, 0xd0, 0xb1, 0x6d, 0xb2, 0x93, 0xf5, 0x51, 0x8f, 0xd2,
3934 0x33, 0x2b, 0xf6, 0x11, 0xfb, 0x6a, 0x6a, 0xcc, 0x73, 0x63, 0x2f, 0xb3,
3935 0x5c, 0xcf, 0xbe, 0xef, 0xf8, 0xce, 0xb8, 0xa1, 0xd2, 0x2e, 0xff, 0xdb,
3936 0x8f, 0xb0, 0x8d, 0x33, 0x86, 0xf8, 0x1c, 0xbf, 0xb3, 0xb6, 0xda, 0xda,
3937 0x32, 0x65, 0xfb, 0x74, 0xe9, 0x49, 0x47, 0x9d, 0xf5, 0x92, 0x1a, 0xab,
3938 0x63, 0xb6, 0x97, 0x6b, 0x54, 0xee, 0x3f, 0xdf, 0xb8, 0x56, 0x9b, 0x83,
3939 0x5b, 0x89, 0x67, 0xac, 0xc7, 0x02, 0x01, 0x62, 0x64, 0xe0, 0x94, 0x8d,
3940 0x59, 0xe3, 0x1d, 0xfb, 0x49, 0xdd, 0xc7, 0xf5, 0xb8, 0x95, 0x78, 0x2b,
3941 0xfc, 0xc3, 0x0c, 0xee, 0x9a, 0xf6, 0x79, 0x58, 0x5b, 0xb5, 0x54, 0xc0,
3942 0xa9, 0xad, 0x9c, 0x3e, 0xe1, 0xb1, 0xfc, 0x6d, 0xc1, 0xae, 0x1c, 0xeb,
3943 0x04, 0xd6, 0xa9, 0x6e, 0x8d, 0x76, 0x6b, 0xf0, 0x9e, 0x9c, 0x57, 0xa9,
3944 0x33, 0xe1, 0x6d, 0xdd, 0x68, 0xe3, 0xe3, 0xf5, 0x89, 0xe1, 0xa8, 0x87,
3945 0xd8, 0xc8, 0xb1, 0xac, 0x7c, 0x4b, 0xb0, 0x8f, 0x58, 0x7c, 0x7b, 0x0e,
3946 0x69, 0xe9, 0xa9, 0x86, 0xd7, 0x8f, 0xf6, 0x87, 0x21, 0xfd, 0x2f, 0x7c,
3947 0x89, 0xd1, 0x18, 0xa1, 0xaf, 0x45, 0xdb, 0x95, 0xc4, 0xe2, 0x20, 0x12,
3948 0x17, 0x3e, 0xf6, 0xbe, 0x63, 0x3f, 0x9d, 0xdf, 0xc8, 0xe7, 0x3b, 0x89,
3949 0x93, 0x69, 0xe2, 0xe6, 0xe8, 0xb0, 0x1f, 0xf2, 0x8e, 0xd6, 0xf7, 0xb6,
3950 0x12, 0xa7, 0x8f, 0xe3, 0x77, 0xf8, 0xbc, 0xba, 0x8d, 0x18, 0x39, 0x6b,
3951 0x24, 0xd2, 0x5b, 0x90, 0xe9, 0xac, 0x85, 0x66, 0x34, 0x2a, 0xd2, 0xaf,
3952 0x12, 0xfb, 0x27, 0xf1, 0x3d, 0xce, 0xe9, 0xd3, 0xc5, 0x8e, 0x9b, 0x31,
3953 0x30, 0xab, 0xa9, 0xd7, 0xfd, 0x4c, 0x6c, 0x20, 0x76, 0xe9, 0xa8, 0x40,
3954 0xd5, 0x52, 0xea, 0xf6, 0x3d, 0x07, 0x4f, 0x82, 0xba, 0x8e, 0xff, 0x42,
3955 0x1e, 0xf4, 0x17, 0x05, 0xe9, 0x4b, 0x96, 0xb9, 0x9d, 0xf8, 0x44, 0x73,
3956 0xdb, 0x2d, 0x33, 0xc9, 0x52, 0x9f, 0x32, 0x10, 0xec, 0x9c, 0xb6, 0x71,
3957 0xd2, 0x08, 0x43, 0xea, 0xf3, 0xca, 0x54, 0x91, 0x19, 0xbf, 0x19, 0xdb,
3958 0x78, 0xbd, 0x63, 0xba, 0x5a, 0xe9, 0xc8, 0xd9, 0xf8, 0xa6, 0xa1, 0x65,
3959 0xda, 0xbd, 0x8c, 0x65, 0x43, 0x3b, 0x0b, 0x5c, 0x26, 0x27, 0x12, 0xdf,
3960 0xf2, 0x21, 0xa4, 0xbb, 0x63, 0x35, 0xcf, 0xdc, 0x46, 0xbe, 0x20, 0xb1,
3961 0xe5, 0x5d, 0x53, 0x85, 0x94, 0x32, 0xe3, 0x13, 0xbb, 0x75, 0x22, 0x5d,
3962 0xa8, 0x56, 0x76, 0xd3, 0x96, 0x77, 0xac, 0xab, 0xc0, 0x25, 0xc7, 0x96,
3963 0xb7, 0xd1, 0x96, 0x78, 0x6b, 0x05, 0xbc, 0xe7, 0xeb, 0xd0, 0xa9, 0xc0,
3964 0xa9, 0xbd, 0xaa, 0x99, 0x9f, 0xd3, 0xe4, 0xae, 0xe4, 0x7d, 0x6a, 0x2f,
3965 0xbe, 0x42, 0x9c, 0x79, 0x92, 0x3e, 0xfa, 0x33, 0xbd, 0x19, 0x55, 0x5f,
3966 0x6d, 0xe1, 0x3a, 0x6e, 0x0c, 0xee, 0xc8, 0xf5, 0xe1, 0xa9, 0x79, 0x1b,
3967 0xcf, 0x31, 0x3e, 0x1a, 0x53, 0x19, 0xb5, 0x92, 0xb5, 0x18, 0x73, 0xd9,
3968 0xe2, 0x09, 0xc7, 0xbf, 0x57, 0xb6, 0x6d, 0x9e, 0x8b, 0xc2, 0xfb, 0x15,
3969 0xf9, 0xbb, 0xbe, 0x2d, 0x36, 0x27, 0x9f, 0x51, 0x7e, 0xda, 0x18, 0x32,
3970 0xb4, 0xf4, 0xc7, 0xde, 0x2a, 0x54, 0x27, 0x6c, 0x7b, 0x28, 0x25, 0xd7,
3971 0xf5, 0xb6, 0xa4, 0x73, 0xbf, 0x81, 0x9f, 0xe5, 0x3e, 0xf2, 0xeb, 0xc2,
3972 0xf9, 0x62, 0x69, 0xea, 0xbc, 0x93, 0x79, 0xbd, 0x8f, 0x79, 0xbd, 0xce,
3973 0xd4, 0xd2, 0x7b, 0xbc, 0xd2, 0x3b, 0x29, 0x1e, 0xac, 0xe5, 0xf5, 0x5d,
3974 0xa5, 0xbc, 0x5e, 0x73, 0x4a, 0xfa, 0x70, 0xe4, 0x7a, 0x70, 0xf7, 0x2f,
3975 0xba, 0x99, 0xd7, 0xab, 0x26, 0x7d, 0xe8, 0x62, 0x4e, 0xf7, 0x93, 0x67,
3976 0x6f, 0xcd, 0xd7, 0x21, 0x78, 0xc2, 0x8b, 0x78, 0xea, 0xdb, 0x38, 0x48,
3977 0x1f, 0x3b, 0x98, 0xf4, 0x2a, 0xb1, 0xe5, 0x1e, 0xda, 0xe9, 0x9f, 0x70,
3978 0x40, 0xf5, 0xa2, 0x46, 0xff, 0x2e, 0x1e, 0xfa, 0x35, 0xb9, 0xbc, 0x2f,
3979 0x27, 0x31, 0xbd, 0xb2, 0xad, 0xeb, 0x94, 0x9b, 0xcb, 0x43, 0xa7, 0x46,
3980 0x17, 0x25, 0x97, 0xd7, 0xad, 0xef, 0xc3, 0xe9, 0x69, 0xfc, 0xe1, 0x0a,
3981 0x92, 0xc4, 0x3a, 0xce, 0xd9, 0x90, 0x4a, 0xb0, 0x6e, 0xd6, 0x06, 0xb7,
3982 0x29, 0x89, 0x89, 0x1a, 0xc6, 0xfe, 0x69, 0xe6, 0xf2, 0x80, 0x99, 0x50,
3983 0x93, 0x1e, 0x74, 0xfb, 0xb9, 0x1e, 0x1f, 0xb0, 0x86, 0xfe, 0x61, 0x3e,
3984 0xc6, 0x31, 0x2b, 0xe0, 0x63, 0x2e, 0xff, 0x40, 0xc7, 0xa7, 0x5e, 0xfa,
3985 0xde, 0x65, 0x6f, 0x00, 0x57, 0xf3, 0x6e, 0x2e, 0xaf, 0x6d, 0xb4, 0x47,
3986 0xae, 0xa4, 0x42, 0xf8, 0x30, 0x6f, 0xd0, 0x07, 0xfb, 0x70, 0x84, 0xb9,
3987 0xfc, 0x8a, 0xae, 0xe2, 0xa7, 0xf9, 0x56, 0xfa, 0x65, 0x04, 0x3f, 0x21,
3988 0xcf, 0x5d, 0xc7, 0x5c, 0x7e, 0x27, 0x7d, 0x2a, 0xc5, 0x5c, 0xde, 0xee,
3989 0xf0, 0x8c, 0xe6, 0xb6, 0x33, 0x53, 0x4e, 0x2e, 0x6f, 0x64, 0x89, 0x5f,
3990 0xef, 0x47, 0x62, 0x91, 0xf8, 0x60, 0xff, 0x6c, 0x63, 0x88, 0xcf, 0xd2,
3991 0x6e, 0x85, 0xf5, 0x98, 0x71, 0x72, 0xcf, 0xe6, 0xe0, 0x6e, 0xce, 0xbd,
3992 0xcc, 0x89, 0x33, 0x1b, 0x3b, 0xd7, 0xbd, 0x89, 0x3f, 0x58, 0xe2, 0xa1,
3993 0x1f, 0x9a, 0xc1, 0x3b, 0x18, 0x6b, 0x61, 0xfa, 0xd7, 0x4f, 0x53, 0x89,
3994 0xfe, 0x73, 0xac, 0x21, 0x7f, 0xc2, 0x38, 0xbb, 0x93, 0xbe, 0xb1, 0x72,
3995 0x5d, 0x80, 0xeb, 0xee, 0xc6, 0x59, 0x07, 0xe3, 0x2c, 0xca, 0x38, 0x5b,
3996 0xc1, 0x38, 0x7b, 0xda, 0x48, 0x24, 0x37, 0x93, 0x6f, 0xbd, 0x9e, 0x97,
3997 0x58, 0x6b, 0xe1, 0xb8, 0x1a, 0xf5, 0x1a, 0xed, 0x97, 0x98, 0xd9, 0xb9,
3998 0x6e, 0xf4, 0x6c, 0x35, 0xc4, 0x56, 0xf8, 0x74, 0x19, 0xb9, 0x05, 0x11,
3999 0xe9, 0xc2, 0xa2, 0x37, 0x31, 0xbc, 0xca, 0x9b, 0x18, 0x7a, 0x5f, 0x79,
4000 0xc7, 0x7e, 0x8b, 0x71, 0x76, 0x3b, 0xe3, 0x6c, 0x37, 0xe3, 0xac, 0xdd,
4001 0xb2, 0xf1, 0x52, 0x4a, 0xeb, 0x6b, 0xf6, 0xc4, 0x8d, 0x76, 0x0f, 0x56,
4002 0x54, 0x33, 0x25, 0x04, 0x91, 0xe8, 0xfc, 0x03, 0xca, 0x7f, 0xc1, 0x48,
4003 0xf4, 0x24, 0x15, 0x89, 0xad, 0x18, 0x7e, 0x4c, 0xbd, 0x2b, 0x4b, 0xb1,
4004 0xb5, 0x7f, 0xf6, 0xd5, 0x92, 0x6f, 0x94, 0x75, 0xf7, 0xe2, 0x45, 0x83,
4005 0x18, 0xba, 0x54, 0x8b, 0x65, 0x3c, 0xbd, 0x98, 0xa0, 0x1d, 0x83, 0x89,
4006 0x5e, 0x1c, 0x65, 0x1e, 0xbc, 0x9f, 0xf9, 0xf7, 0x01, 0x2b, 0xde, 0xba,
4007 0x83, 0x75, 0xce, 0xa5, 0xa8, 0x16, 0x8b, 0x29, 0xbd, 0x18, 0xa0, 0x0f,
4008 0x0f, 0x30, 0x5f, 0xb4, 0x5b, 0x3f, 0x57, 0xb6, 0x91, 0x23, 0xdc, 0x57,
4009 0x90, 0xf7, 0xb4, 0x64, 0xbf, 0x67, 0x10, 0xfd, 0xf3, 0x82, 0x6d, 0x50,
4010 0x6f, 0x32, 0x7b, 0x71, 0xdc, 0xaa, 0x40, 0x6f, 0x4b, 0xb7, 0xb2, 0xab,
4011 0x20, 0xbd, 0x33, 0xc6, 0xa3, 0xc5, 0x78, 0x75, 0xe4, 0x55, 0x88, 0xa5,
4012 0xdd, 0xc8, 0x4a, 0x7c, 0x5a, 0xbb, 0x95, 0x3b, 0x67, 0x25, 0xc6, 0x7b,
4013 0x95, 0x5e, 0x89, 0x61, 0x6b, 0x58, 0xb9, 0x4b, 0x62, 0xda, 0xe9, 0x33,
4014 0x4b, 0xdc, 0xcb, 0x3e, 0xc4, 0x6d, 0xe4, 0x6f, 0x60, 0x4c, 0x79, 0xbf,
4015 0x1a, 0x65, 0xdc, 0xb5, 0x57, 0x78, 0xe8, 0xa7, 0x71, 0xae, 0x9d, 0x07,
4016 0x1d, 0xc6, 0x6f, 0xda, 0x19, 0xb5, 0x9f, 0x31, 0xd5, 0x8b, 0x23, 0xd6,
4017 0x6f, 0xd8, 0x57, 0x1c, 0x5e, 0x52, 0xc6, 0xf3, 0xcd, 0xb8, 0x37, 0xb7,
4018 0x1c, 0x01, 0x5d, 0xf2, 0x75, 0x08, 0xc9, 0x25, 0x01, 0x54, 0xe9, 0x92,
4019 0x67, 0x9a, 0xdb, 0x16, 0x4e, 0x50, 0x86, 0x0d, 0xe5, 0xf8, 0xde, 0x8c,
4020 0x07, 0x89, 0x03, 0xfb, 0x52, 0xf7, 0xe2, 0x01, 0xb5, 0x0a, 0x61, 0xda,
4021 0xe9, 0x61, 0x35, 0x44, 0x7c, 0xfd, 0xbd, 0xd2, 0x38, 0xff, 0xa9, 0xa2,
4022 0x54, 0x33, 0x5f, 0xe3, 0x54, 0x75, 0x8c, 0xb1, 0x4d, 0xd3, 0x52, 0x9b,
4023 0x44, 0xdb, 0xa2, 0xd3, 0x3a, 0xc2, 0xac, 0x55, 0x37, 0xa7, 0xb4, 0xe1,
4024 0xcd, 0xde, 0xf8, 0xe0, 0xa2, 0x82, 0x6c, 0x98, 0x7c, 0x2e, 0x9f, 0x48,
4025 0xf4, 0x34, 0x8b, 0x8d, 0xf5, 0x28, 0xb6, 0xd3, 0x4e, 0x5d, 0xf9, 0x08,
4026 0x63, 0xe8, 0xbd, 0x0a, 0xe1, 0x46, 0xe9, 0xfc, 0xf5, 0xb1, 0xa2, 0x1c,
4027 0x2b, 0x3a, 0x2d, 0x3c, 0x2d, 0x4a, 0x9e, 0xa6, 0x33, 0x0e, 0x6d, 0x7b,
4028 0x13, 0xf9, 0x59, 0xe8, 0x94, 0xd4, 0x38, 0xf1, 0x09, 0x72, 0xda, 0x66,
4029 0xf2, 0xdd, 0x5e, 0x7a, 0xb5, 0xbd, 0xb2, 0x21, 0x61, 0xb4, 0x2b, 0x78,
4030 0x62, 0xae, 0x85, 0xf5, 0x11, 0xc7, 0xbc, 0x9c, 0x57, 0x71, 0x25, 0x1f,
4031 0xc5, 0xbb, 0x1c, 0xfb, 0x92, 0x33, 0x76, 0x3d, 0x7e, 0x54, 0xc2, 0xad,
4032 0x14, 0x71, 0x6b, 0x4b, 0x4e, 0xa1, 0xbf, 0xc6, 0x30, 0x62, 0xfc, 0xdd,
4033 0xa7, 0x97, 0x6e, 0x0e, 0xd0, 0x6e, 0xa2, 0x8b, 0x8f, 0x9f, 0xe3, 0x78,
4034 0xd8, 0xc1, 0xe9, 0x37, 0x3f, 0x9d, 0x59, 0xc2, 0xb5, 0xa2, 0xed, 0x6b,
4035 0x4b, 0xef, 0xad, 0x9d, 0xf9, 0xf3, 0x92, 0xbe, 0x3a, 0x3c, 0xa7, 0x92,
4036 0xa8, 0x38, 0x75, 0x4d, 0x56, 0x5d, 0xe2, 0x83, 0x19, 0xf5, 0x89, 0xaf,
4037 0x71, 0xfe, 0xc7, 0xc8, 0xf5, 0x6c, 0xce, 0x7f, 0xd5, 0x99, 0x37, 0xc2,
4038 0x79, 0x95, 0x6b, 0xbc, 0x30, 0x7a, 0xed, 0x1d, 0x95, 0xba, 0xe3, 0xf1,
4039 0x28, 0x6d, 0xf7, 0xe1, 0x06, 0x79, 0x2e, 0x84, 0x5d, 0xf9, 0x15, 0x95,
4040 0x82, 0xe3, 0x41, 0xd6, 0x01, 0xae, 0x2f, 0x91, 0xe7, 0x59, 0xcf, 0xf1,
4041 0x9e, 0xf0, 0xae, 0xcd, 0xe4, 0x18, 0x9f, 0xb5, 0x7b, 0x84, 0x6b, 0xf1,
4042 0x7f, 0xf8, 0x8e, 0xdc, 0xfb, 0x75, 0x79, 0xf4, 0x4f, 0x31, 0xcc, 0x1a,
4043 0xe8, 0xb1, 0x5c, 0x06, 0x0f, 0xe7, 0xbe, 0xec, 0xec, 0xab, 0xad, 0x5d,
4044 0x8f, 0xfb, 0x38, 0xe7, 0x81, 0x5a, 0xc6, 0xd1, 0x7f, 0x4b, 0x25, 0x84,
4045 0x1b, 0xed, 0xae, 0x86, 0xe4, 0xda, 0x44, 0xeb, 0x2a, 0xc5, 0x46, 0x45,
4046 0x0a, 0x43, 0x1d, 0x2d, 0x89, 0xe4, 0x15, 0x3c, 0x61, 0x4b, 0x5f, 0xd3,
4047 0x5b, 0xca, 0xbb, 0x52, 0xff, 0x49, 0x6f, 0xb5, 0xbd, 0xc4, 0x91, 0xb6,
4048 0x14, 0xde, 0xf9, 0x4c, 0xef, 0x40, 0xea, 0x6e, 0xc9, 0x37, 0x41, 0xa5,
4049 0x9d, 0xf3, 0x1c, 0x21, 0x66, 0xbf, 0x68, 0xbc, 0x12, 0x65, 0x36, 0x86,
4050 0x6f, 0x9d, 0x82, 0x83, 0x86, 0x1f, 0x99, 0x88, 0x8d, 0xdd, 0xfc, 0xdc,
4051 0x4f, 0xde, 0xf4, 0x9e, 0x51, 0x83, 0x19, 0x55, 0x25, 0x57, 0x24, 0x06,
4052 0x7b, 0xde, 0xf4, 0xcb, 0x5e, 0x4c, 0xcc, 0x23, 0xfb, 0xe6, 0xff, 0xd6,
4053 0x5e, 0xca, 0x3a, 0xf2, 0x16, 0xd1, 0x3d, 0xa8, 0x10, 0x43, 0x93, 0x20,
4054 0x97, 0xd9, 0x6b, 0x14, 0x63, 0x1e, 0xa4, 0xaf, 0x7a, 0xa0, 0x9d, 0xbe,
4055 0xcc, 0xfa, 0xee, 0xb1, 0x06, 0xed, 0x74, 0x9b, 0x57, 0xc7, 0xf0, 0xf1,
4056 0x00, 0x1e, 0x39, 0xbe, 0x0d, 0xb5, 0x4e, 0xef, 0x67, 0x9c, 0x36, 0xf5,
4057 0xb0, 0xae, 0x1a, 0xfd, 0xa5, 0x8f, 0xf5, 0xd5, 0xd5, 0xf5, 0x8f, 0xa3,
4058 0xd5, 0xb9, 0x3e, 0x86, 0xfb, 0x72, 0x41, 0xa5, 0x2b, 0xe7, 0xc3, 0xb6,
4059 0x3b, 0x1f, 0x87, 0x7f, 0x5d, 0x3f, 0xe5, 0x92, 0xeb, 0xf2, 0xf7, 0x5d,
4060 0xac, 0xcb, 0x44, 0xbe, 0x0a, 0xc4, 0x96, 0x53, 0xb6, 0x75, 0x3a, 0x46,
4061 0x8e, 0xfb, 0x94, 0x3d, 0xd6, 0x7f, 0xb7, 0xaf, 0x3a, 0xfb, 0x34, 0x72,
4062 0xad, 0x4a, 0xf6, 0xef, 0xf9, 0x8c, 0x60, 0xce, 0x00, 0x72, 0x8c, 0xed,
4063 0xbb, 0x9c, 0xf7, 0xff, 0xb8, 0xc2, 0xd5, 0x29, 0xcd, 0x7a, 0xb5, 0x83,
4064 0xeb, 0x27, 0xcf, 0x24, 0x4b, 0xd7, 0x9a, 0x03, 0xee, 0x19, 0x01, 0xf1,
4065 0x85, 0x01, 0xdc, 0xc2, 0x45, 0x68, 0x48, 0x88, 0x8f, 0x0d, 0xa0, 0x21,
4066 0x4f, 0x40, 0x5d, 0xee, 0xca, 0xfb, 0x90, 0x55, 0x64, 0xad, 0xa9, 0x13,
4067 0x37, 0x69, 0xbb, 0x65, 0xf2, 0xfe, 0x2f, 0x2a, 0x7f, 0xf5, 0x7d, 0xc1,
4068 0x5b, 0x72, 0xcc, 0xb0, 0x70, 0xcd, 0x5f, 0x77, 0xff, 0xb7, 0x20, 0xf7,
4069 0x7c, 0xfa, 0x9f, 0x30, 0x8e, 0x13, 0x3d, 0xd5, 0x1e, 0xf1, 0x9f, 0x3f,
4070 0xc1, 0x03, 0xb3, 0x8f, 0xf0, 0xbe, 0x8c, 0x7f, 0x88, 0x35, 0x84, 0x4f,
4071 0xe9, 0x24, 0xfe, 0xec, 0x3f, 0xee, 0xd9, 0x55, 0x81, 0xbf, 0xb4, 0x2b,
4072 0x97, 0x8d, 0xa0, 0x21, 0x35, 0xc6, 0xe7, 0x15, 0x74, 0x90, 0x2f, 0x3e,
4073 0x65, 0x6c, 0xc1, 0xb6, 0x25, 0x82, 0x01, 0x2f, 0xda, 0x03, 0xbd, 0x62,
4074 0x43, 0x05, 0x5b, 0x79, 0xfd, 0x25, 0xae, 0xef, 0xb3, 0x86, 0x0f, 0x0d,
4075 0x4b, 0xa5, 0x8f, 0xa7, 0x4d, 0xa5, 0xd1, 0x1e, 0x70, 0xf7, 0xab, 0x32,
4076 0x76, 0xad, 0xae, 0x0f, 0xdd, 0xe1, 0x69, 0x98, 0x7a, 0x9b, 0xfe, 0xd4,
4077 0xbe, 0xee, 0xc6, 0x7b, 0x65, 0x9b, 0x18, 0xe4, 0x90, 0x2f, 0xd8, 0xb8,
4078 0x69, 0x14, 0xea, 0xba, 0x1b, 0xd7, 0xbf, 0x2c, 0xf7, 0x21, 0xc6, 0x20,
4079 0x32, 0xb5, 0xa6, 0xf4, 0x79, 0x12, 0x1c, 0xe7, 0x10, 0x7e, 0xbf, 0x30,
4080 0x86, 0x83, 0xb9, 0x12, 0xa7, 0xa6, 0x6f, 0xeb, 0xeb, 0xae, 0xeb, 0xf6,
4081 0x50, 0x2e, 0xd1, 0x5f, 0x53, 0xd2, 0xed, 0x00, 0xeb, 0x8b, 0x6a, 0x62,
4082 0xec, 0x83, 0xb4, 0xe9, 0x90, 0x63, 0xd3, 0x5e, 0x18, 0xf9, 0xeb, 0xe3,
4083 0x0e, 0x72, 0xdc, 0xa0, 0x29, 0x76, 0x93, 0x3d, 0xb2, 0x43, 0xd8, 0xcf,
4084 0x71, 0xf7, 0xdd, 0x30, 0xee, 0x80, 0x71, 0x7d, 0xdc, 0xbd, 0xb9, 0xc4,
4085 0x69, 0x4f, 0x69, 0xdc, 0x47, 0x67, 0xcb, 0x63, 0x64, 0x70, 0xfb, 0xba,
4086 0x0c, 0xf2, 0x9b, 0x0e, 0xd8, 0x07, 0x1c, 0x7b, 0x9c, 0x72, 0xae, 0x6f,
4087 0x6d, 0x10, 0xee, 0xc5, 0x3f, 0x4d, 0xd9, 0x8f, 0x4f, 0x92, 0x7b, 0xe9,
4088 0xce, 0x9e, 0xf0, 0x37, 0x0a, 0xe5, 0xbe, 0x94, 0xf6, 0x4e, 0x97, 0x37,
4089 0xcd, 0xd8, 0x8e, 0x04, 0x76, 0x7c, 0xa6, 0x97, 0xb1, 0x8d, 0xf5, 0xd7,
4090 0x76, 0xab, 0x3b, 0xd8, 0x69, 0x05, 0xc8, 0xbb, 0xaa, 0x95, 0xad, 0x39,
4091 0xe9, 0x69, 0x48, 0x2c, 0x97, 0xb8, 0x70, 0x41, 0xea, 0xbc, 0xbb, 0x59,
4092 0x1f, 0x2c, 0x0f, 0x20, 0xdc, 0x8f, 0x89, 0xc2, 0xef, 0x2a, 0xe9, 0x88,
4093 0xec, 0x4d, 0x4b, 0x5e, 0x01, 0x73, 0x5e, 0x0f, 0xaa, 0xe9, 0x4b, 0x11,
4094 0xd3, 0x30, 0x4f, 0x36, 0xd8, 0x20, 0x47, 0x09, 0x2c, 0x35, 0xd3, 0xe6,
4095 0xee, 0x06, 0x2f, 0x8e, 0x39, 0xfc, 0x4b, 0x9b, 0xe1, 0xef, 0x94, 0xc4,
4096 0xcc, 0x1d, 0x39, 0xc9, 0x63, 0xa4, 0x90, 0xfa, 0x08, 0xfe, 0x31, 0x55,
4097 0x1c, 0x5a, 0x82, 0xf4, 0xfd, 0x4b, 0x20, 0xf5, 0xc4, 0x04, 0xfe, 0x4a,
4098 0x8f, 0x06, 0xfa, 0x0a, 0x3e, 0xa5, 0xcb, 0x9a, 0x0b, 0xee, 0xb4, 0xc2,
4099 0x08, 0xb1, 0x1e, 0xeb, 0xf6, 0xc6, 0x59, 0x5f, 0x88, 0x1d, 0x03, 0x6d,
4100 0xb7, 0xe4, 0xfb, 0x82, 0x1d, 0x96, 0x8b, 0x85, 0x2b, 0x67, 0x02, 0xc1,
4101 0x6d, 0xd3, 0xf1, 0xe8, 0x84, 0xc3, 0xc5, 0x42, 0x6d, 0xf1, 0xbc, 0x6d,
4102 0xbf, 0x61, 0x14, 0xaf, 0x56, 0x3a, 0xdf, 0x8d, 0xb6, 0x64, 0xbe, 0x19,
4103 0xf7, 0x90, 0x3f, 0xb5, 0x4f, 0x37, 0xc3, 0x98, 0x06, 0x4e, 0x1c, 0x8f,
4104 0x62, 0x6d, 0x4e, 0x3b, 0x3d, 0xec, 0xed, 0xc3, 0xd4, 0x7c, 0x27, 0x72,
4105 0x85, 0xe0, 0x62, 0xcc, 0x43, 0x5e, 0x9d, 0xf2, 0x60, 0x97, 0x71, 0x5c,
4106 0x29, 0x2e, 0x53, 0x70, 0x17, 0x11, 0xbc, 0xdf, 0xe1, 0x13, 0x73, 0xac,
4107 0x47, 0x15, 0xdc, 0xe4, 0xe0, 0x6e, 0x4b, 0xdb, 0x5a, 0xf2, 0xed, 0x3b,
4108 0xc9, 0x07, 0x77, 0x11, 0x57, 0x12, 0xeb, 0x6c, 0xbc, 0x99, 0xca, 0xf4,
4109 0xd7, 0x40, 0xeb, 0x39, 0xcc, 0x1a, 0xa8, 0x47, 0x71, 0xf9, 0x5d, 0xd3,
4110 0x9c, 0xcb, 0x09, 0x57, 0xcd, 0xb5, 0x90, 0x37, 0xb2, 0xae, 0x49, 0x69,
4111 0x31, 0x8f, 0x47, 0xc5, 0x94, 0x33, 0x46, 0xac, 0xcd, 0x98, 0xab, 0x60,
4112 0xbe, 0xeb, 0xc5, 0xd3, 0x8e, 0xfc, 0x49, 0xca, 0x77, 0x37, 0xbe, 0x66,
4113 0xf5, 0x05, 0xfb, 0x2c, 0xd9, 0xbf, 0x8c, 0x27, 0xaf, 0x7a, 0x4d, 0xf2,
4114 0xd7, 0x78, 0xac, 0xce, 0xfb, 0x05, 0x25, 0xe3, 0x6b, 0x6a, 0x9d, 0x83,
4115 0xa9, 0x5c, 0x2a, 0x71, 0x36, 0xd1, 0x2f, 0x41, 0x8e, 0xd5, 0x7e, 0x3c,
4116 0xb8, 0x98, 0x86, 0xdb, 0xb3, 0xd9, 0x66, 0xfc, 0x2f, 0x14, 0x23, 0xda,
4117 0x44, 0x9a, 0x18, 0xb0, 0x85, 0x98, 0xdb, 0xdf, 0xeb, 0xe3, 0x7d, 0xe9,
4118 0x79, 0xa9, 0x6d, 0xe3, 0x59, 0x14, 0x83, 0x66, 0x22, 0x73, 0x94, 0x9e,
4119 0xd3, 0x53, 0x90, 0xfd, 0x8d, 0x00, 0x1e, 0x60, 0xed, 0x94, 0x2e, 0xed,
4120 0xfd, 0x6c, 0x9d, 0x76, 0xf7, 0xb3, 0x0e, 0xcf, 0xfb, 0xc2, 0xdd, 0x56,
4121 0x0b, 0xf3, 0xbd, 0xef, 0x86, 0xb1, 0x13, 0x13, 0x2b, 0x3d, 0x1e, 0xac,
4122 0x5e, 0xb7, 0x47, 0x99, 0x59, 0x56, 0xce, 0xad, 0x51, 0x27, 0x1f, 0x56,
4123 0x50, 0xcf, 0xf3, 0x27, 0x65, 0x8e, 0xcf, 0xb5, 0x8d, 0x9f, 0x94, 0x5c,
4124 0xab, 0xb6, 0x6d, 0xb2, 0xb4, 0x3e, 0xa9, 0xfd, 0xa2, 0xb4, 0x53, 0x94,
4125 0xba, 0xad, 0x30, 0xd7, 0xb4, 0xd9, 0xd3, 0x5a, 0x74, 0x40, 0x49, 0x93,
4126 0xf7, 0x69, 0xc9, 0x5b, 0xbc, 0x1e, 0x3c, 0xa2, 0x6b, 0x83, 0xd2, 0x13,
4127 0x7c, 0x19, 0x2e, 0x07, 0x6e, 0x9a, 0x1b, 0x60, 0x5e, 0x73, 0x6d, 0xeb,
4128 0xf6, 0x07, 0xeb, 0xdb, 0x9a, 0x1d, 0x5e, 0x6c, 0xdb, 0x97, 0x53, 0xdd,
4129 0xe4, 0x0c, 0xc2, 0x8b, 0xe5, 0xfa, 0xea, 0xb6, 0xc6, 0x99, 0x00, 0x65,
4130 0x53, 0xf0, 0x3e, 0x73, 0xd2, 0x44, 0xa1, 0x2c, 0xa3, 0xcb, 0x99, 0x77,
4131 0x90, 0x33, 0x57, 0x99, 0x5a, 0x6b, 0x17, 0x39, 0xb3, 0x9e, 0x2a, 0xd6,
4132 0xf9, 0xd0, 0x8b, 0xa7, 0xac, 0x66, 0x39, 0xe3, 0xe4, 0xf0, 0xe6, 0x2b,
4133 0x27, 0xb5, 0xb4, 0x70, 0xe6, 0x1f, 0x18, 0xc0, 0x3d, 0xe4, 0xcc, 0x57,
4134 0xb3, 0x3e, 0xec, 0x21, 0x67, 0x5e, 0xcc, 0x06, 0xd0, 0x47, 0xce, 0xfc,
4135 0x11, 0xf9, 0xd5, 0xbb, 0xa9, 0x2b, 0x78, 0xb4, 0xd4, 0x07, 0xdb, 0x9b,
4136 0xf4, 0xd0, 0xaf, 0x85, 0x37, 0xff, 0xbc, 0xc4, 0x9b, 0xe7, 0xff, 0x05,
4137 0x6f, 0xde, 0x4a, 0x3e, 0xd8, 0x9d, 0x13, 0x4e, 0xb0, 0x92, 0x9c, 0xc0,
4138 0xc6, 0xcb, 0xa5, 0x1e, 0xd8, 0x0a, 0xe6, 0xb3, 0xa7, 0x53, 0x7d, 0xc8,
4139 0x4e, 0x63, 0x79, 0x8d, 0xd3, 0x77, 0x12, 0x99, 0x34, 0xe3, 0xb2, 0x92,
4140 0xe8, 0xec, 0x43, 0x82, 0xf5, 0xb1, 0x96, 0xbc, 0xe8, 0xf6, 0xc0, 0x16,
4141 0xdf, 0x85, 0xf4, 0x88, 0x7c, 0xa8, 0x59, 0x00, 0x56, 0xdc, 0xd0, 0x03,
4142 0xab, 0x49, 0xe0, 0x4f, 0xeb, 0x20, 0xfb, 0x9a, 0x0c, 0xb3, 0x85, 0x66,
4143 0xc6, 0xa7, 0x82, 0x23, 0x89, 0x10, 0xba, 0x8f, 0x93, 0xf3, 0x38, 0x3d,
4144 0x30, 0x7b, 0xe4, 0x3b, 0x46, 0x1f, 0x8e, 0xce, 0xbb, 0x3d, 0xb0, 0xed,
4145 0xe4, 0x6e, 0xbe, 0x44, 0x04, 0x95, 0x0b, 0x3e, 0xbc, 0x40, 0xee, 0xbc,
4146 0x95, 0xeb, 0x7c, 0xa6, 0xd4, 0x07, 0x5b, 0xc1, 0x18, 0xb1, 0x73, 0x2a,
4147 0x66, 0x16, 0xf0, 0x86, 0x17, 0xb8, 0xb8, 0xc2, 0xe9, 0xed, 0x4b, 0xff,
4148 0x3f, 0x84, 0x73, 0x0e, 0x77, 0x0e, 0x2e, 0x66, 0x14, 0x57, 0xb7, 0x0a,
4149 0xae, 0x89, 0xac, 0xab, 0x87, 0xeb, 0xda, 0x7e, 0x52, 0xeb, 0x7c, 0x85,
4150 0xb6, 0x68, 0x4a, 0xbc, 0xea, 0xac, 0xc7, 0x40, 0x4a, 0x6a, 0xd9, 0x40,
4151 0x5b, 0xc0, 0x39, 0x0f, 0xa5, 0xb6, 0xfd, 0x28, 0x1b, 0xef, 0xa9, 0x2c,
4152 0xc5, 0xe3, 0xaa, 0x7c, 0x05, 0xd2, 0x25, 0x1f, 0x09, 0xd0, 0xa7, 0x03,
4153 0x93, 0x69, 0x54, 0x6d, 0x70, 0xfd, 0x7b, 0x55, 0x7e, 0x9c, 0xbc, 0xb5,
4154 0x53, 0xea, 0xe8, 0xf0, 0x76, 0xab, 0x13, 0x53, 0x56, 0x0c, 0x95, 0xe7,
4155 0x4a, 0x7b, 0xa6, 0xe7, 0xe4, 0xec, 0x5c, 0x7d, 0x9b, 0xfa, 0xd5, 0x32,
4156 0x1f, 0x4c, 0x93, 0xe3, 0x44, 0x02, 0x77, 0x14, 0x84, 0x2b, 0xf6, 0xe0,
4157 0xa8, 0xa5, 0x45, 0xbf, 0x87, 0xf8, 0xd0, 0xfd, 0xb4, 0x51, 0xb1, 0xee,
4158 0x7a, 0xbf, 0x69, 0x40, 0xfa, 0x51, 0x9f, 0xe9, 0x37, 0x0d, 0xe7, 0xf0,
4159 0x8b, 0xba, 0x96, 0x4a, 0x78, 0xd6, 0xfa, 0xc9, 0xe7, 0xb5, 0xe8, 0xd3,
4160 0x78, 0x02, 0x23, 0xb9, 0x9f, 0x2b, 0x21, 0xdd, 0x37, 0xf8, 0x13, 0xaf,
4161 0x16, 0x9d, 0x53, 0x42, 0x7c, 0xf7, 0xee, 0x60, 0x97, 0x75, 0x37, 0x71,
4162 0x27, 0x9e, 0xec, 0x54, 0xbc, 0x98, 0x89, 0x3a, 0x5c, 0x34, 0xd8, 0xc3,
4163 0x6b, 0x53, 0x85, 0x32, 0xa7, 0x71, 0x6b, 0xfe, 0xed, 0xc7, 0x5d, 0xfc,
4164 0x88, 0xe7, 0x83, 0x8b, 0x97, 0xe0, 0xea, 0x56, 0x4d, 0x5d, 0x1f, 0x9c,
4165 0x54, 0xed, 0xfe, 0x65, 0x12, 0xc3, 0x3a, 0xf6, 0xd0, 0xf7, 0xee, 0x99,
4166 0x1e, 0xa0, 0x9c, 0xc2, 0xa5, 0x57, 0x10, 0xa7, 0xfa, 0x30, 0x4e, 0x9c,
4167 0xb1, 0x28, 0x5f, 0x8e, 0x35, 0xe4, 0xe2, 0xfa, 0x8c, 0x3d, 0xb9, 0x41,
4168 0x37, 0x56, 0x7b, 0x8b, 0x4b, 0xa2, 0xe4, 0x36, 0xeb, 0x98, 0xb7, 0xdb,
4169 0x0b, 0xcd, 0xb8, 0x7c, 0x46, 0x67, 0x7d, 0xdb, 0x41, 0xee, 0xde, 0x83,
4170 0x87, 0xa9, 0xcf, 0xa3, 0x85, 0xc7, 0x91, 0xfe, 0x92, 0x0f, 0x87, 0x8f,
4171 0xa7, 0xb1, 0x6a, 0x5d, 0x0a, 0xe9, 0x2f, 0x06, 0x88, 0x53, 0x21, 0x4c,
4172 0x30, 0x16, 0xa1, 0xb8, 0x7e, 0x2e, 0xe7, 0x7f, 0xfe, 0x82, 0x36, 0xfb,
4173 0x26, 0xed, 0xf7, 0x8d, 0x6b, 0x7b, 0x00, 0x65, 0xfe, 0x7d, 0x9d, 0xab,
4174 0x7a, 0xb9, 0x86, 0xfb, 0x9c, 0xd8, 0x8c, 0x32, 0x36, 0x75, 0x5c, 0x2d,
4175 0xf5, 0x12, 0x17, 0x4f, 0x6a, 0x8b, 0xf7, 0x22, 0x3e, 0x7c, 0xd9, 0x8b,
4176 0x81, 0x3a, 0xfa, 0x5d, 0x94, 0x5c, 0xf5, 0xc3, 0x44, 0xc2, 0x38, 0x47,
4177 0xae, 0x3a, 0xba, 0xc1, 0xe5, 0xaa, 0x9e, 0x05, 0x15, 0x15, 0x0b, 0xac,
4178 0x65, 0x9d, 0x5e, 0xe2, 0x37, 0x83, 0x6e, 0x2f, 0x51, 0xf8, 0x4d, 0xab,
4179 0x9c, 0x75, 0xba, 0x8d, 0xb5, 0x5c, 0xfa, 0x0a, 0x32, 0xe8, 0x2c, 0xcc,
4180 0x04, 0xef, 0x21, 0x36, 0xf7, 0x49, 0x6f, 0xa4, 0x10, 0x09, 0xdf, 0x43,
4181 0xde, 0xf5, 0x2d, 0xae, 0xaf, 0xec, 0xed, 0xf6, 0x15, 0x56, 0xf3, 0xbd,
4182 0x28, 0x3f, 0x05, 0x57, 0x45, 0xf6, 0x1b, 0xf5, 0xe8, 0xa9, 0x92, 0xbd,
4183 0x86, 0x97, 0xa9, 0x43, 0xff, 0xdc, 0x4a, 0x3c, 0x3a, 0xe7, 0xaf, 0x12,
4184 0xc2, 0xff, 0x68, 0xde, 0xc5, 0xb6, 0x58, 0xfe, 0xae, 0xa0, 0xf0, 0xc9,
4185 0xf6, 0xe3, 0xee, 0x77, 0xfd, 0x86, 0xef, 0x65, 0xfd, 0x56, 0x50, 0x3f,
4186 0x7b, 0x5a, 0xea, 0xa2, 0x68, 0xdb, 0x19, 0xea, 0xb7, 0x78, 0xd2, 0x89,
4187 0x2f, 0xd6, 0x98, 0xf1, 0xe1, 0x84, 0x57, 0xf4, 0xfa, 0x99, 0xe8, 0x45,
4188 0xae, 0xc2, 0x78, 0xe1, 0xb8, 0x1e, 0x3d, 0xe2, 0xe8, 0xe5, 0xea, 0xe3,
4189 0xf6, 0x69, 0xaf, 0x9c, 0x4c, 0xde, 0xd8, 0x17, 0xd5, 0xc9, 0x97, 0x3f,
4190 0x61, 0x6c, 0x3c, 0x71, 0x98, 0x9c, 0xf9, 0x2a, 0x6b, 0x4a, 0x3f, 0x9f,
4191 0xaf, 0x73, 0x9e, 0x97, 0x3e, 0xad, 0xe7, 0x1a, 0x67, 0x5e, 0xbc, 0xfe,
4192 0x4e, 0x89, 0x2f, 0x4b, 0x4f, 0x5a, 0x9e, 0x53, 0x1d, 0x3b, 0xed, 0x76,
4193 0x78, 0xa0, 0x70, 0x2b, 0x1b, 0x1d, 0xeb, 0xfe, 0xad, 0x35, 0x0b, 0x2e,
4194 0xce, 0x38, 0x6e, 0xd5, 0x55, 0x25, 0x7b, 0xe1, 0xab, 0xd6, 0x3d, 0x68,
4195 0xbb, 0xfe, 0x1c, 0x09, 0xef, 0x62, 0x9c, 0x7c, 0x85, 0xef, 0xec, 0x3a,
4196 0x57, 0x1f, 0xbe, 0xcb, 0x6a, 0x71, 0x6c, 0x74, 0xd7, 0xb9, 0x28, 0x46,
4197 0x2d, 0xe9, 0xeb, 0x43, 0xf1, 0x99, 0x87, 0xb1, 0x7d, 0x2a, 0x86, 0x77,
4198 0x8d, 0x60, 0xe9, 0xec, 0x89, 0xc4, 0xa4, 0xc1, 0x98, 0x8c, 0xd0, 0x77,
4199 0xe3, 0xb1, 0x77, 0xc9, 0x51, 0x33, 0x3e, 0xe0, 0x68, 0x8e, 0xb8, 0x46,
4200 0xde, 0x08, 0xc5, 0x3d, 0xbb, 0xe9, 0xbe, 0x5b, 0xfe, 0xbb, 0x1a, 0xb1,
4201 0x25, 0xf1, 0xd6, 0xfd, 0xa8, 0x47, 0x96, 0xd8, 0x1f, 0xd4, 0xff, 0x1a,
4202 0xc7, 0x4e, 0x78, 0x98, 0x1f, 0x08, 0x4e, 0x77, 0x1a, 0xfc, 0xde, 0x34,
4203 0xf8, 0x01, 0xfe, 0xd1, 0x9e, 0x91, 0xf3, 0x51, 0x8a, 0x9c, 0xc5, 0xf8,
4204 0xc4, 0xae, 0xd3, 0xf5, 0xe2, 0xb7, 0xa0, 0x0f, 0x5f, 0x45, 0xd3, 0xd0,
4205 0x22, 0x7e, 0x6c, 0x17, 0x79, 0xef, 0x7d, 0xc6, 0xd1, 0x2b, 0x46, 0x3c,
4206 0xea, 0xa1, 0xf0, 0xc5, 0x88, 0x17, 0xf7, 0x1b, 0xb2, 0xa7, 0xa4, 0x0d,
4207 0x3d, 0x0f, 0x6d, 0xf0, 0xbc, 0x22, 0x67, 0x6a, 0x2e, 0xd9, 0x99, 0x25,
4208 0x32, 0xaf, 0x82, 0xb5, 0xab, 0x9b, 0x3a, 0x2b, 0xa0, 0xb5, 0xfa, 0x15,
4209 0xdd, 0xf8, 0x40, 0xf9, 0x7b, 0xbb, 0x18, 0xf9, 0xc4, 0xbe, 0xac, 0x97,
4210 0xc7, 0xd5, 0x62, 0x01, 0x6f, 0x59, 0xb6, 0x7a, 0x1c, 0xb3, 0x64, 0x2f,
4211 0xee, 0xaf, 0xf1, 0xc0, 0x09, 0x1f, 0x3a, 0x52, 0x3f, 0xb1, 0x33, 0x11,
4212 0x19, 0xf3, 0x13, 0xda, 0x42, 0xc6, 0x77, 0xfb, 0xd5, 0x2f, 0x17, 0xa0,
4213 0x6c, 0xb3, 0x84, 0x33, 0x8b, 0x5f, 0x4c, 0xc1, 0xb6, 0xa4, 0x87, 0x68,
4214 0xe3, 0x8e, 0xd4, 0x08, 0xde, 0x4f, 0xa5, 0xff, 0x63, 0x00, 0xda, 0x85,
4215 0x2b, 0x5e, 0xad, 0xd8, 0xec, 0x8d, 0x29, 0xc1, 0x46, 0x7d, 0xa8, 0xd1,
4216 0xdd, 0x9f, 0x67, 0xfd, 0x14, 0x0a, 0xec, 0x2a, 0x48, 0x9d, 0x39, 0x85,
4217 0x85, 0xc9, 0x0c, 0x7c, 0xe4, 0x77, 0xa3, 0x2d, 0x5a, 0xdf, 0x73, 0x8a,
4218 0x16, 0x3d, 0xa0, 0xc4, 0x94, 0x7b, 0xf5, 0x61, 0xbc, 0x60, 0x24, 0xd2,
4219 0xed, 0x4a, 0x7d, 0xa0, 0xb3, 0x50, 0x1e, 0xbb, 0x83, 0xb8, 0xa1, 0x15,
4220 0xaf, 0x78, 0x2b, 0x51, 0xb7, 0x5e, 0xef, 0xac, 0xf4, 0x6a, 0xc3, 0x5f,
4221 0x60, 0x1d, 0xb0, 0xa3, 0x50, 0x0c, 0x7e, 0x90, 0xf0, 0x60, 0x8d, 0xb3,
4222 0x87, 0x90, 0x2d, 0xf5, 0x47, 0xa7, 0xd0, 0x35, 0x69, 0x6f, 0xbe, 0x98,
4223 0xd2, 0xa2, 0xcf, 0x29, 0x99, 0x3d, 0x21, 0xf2, 0x9a, 0x07, 0xa1, 0xc7,
4224 0xe6, 0x19, 0xc7, 0x1d, 0x05, 0x0f, 0x56, 0x3a, 0x7e, 0x9c, 0xe5, 0x98,
4225 0x87, 0x51, 0x79, 0xc2, 0xde, 0xbc, 0xc7, 0xd0, 0x86, 0xaf, 0x78, 0x33,
4226 0xff, 0xb5, 0x8e, 0x76, 0xdb, 0xa6, 0x68, 0xac, 0x4f, 0x47, 0x70, 0x91,
4227 0x3a, 0x7c, 0x3d, 0xa5, 0x25, 0xff, 0x4c, 0xd1, 0x7a, 0xbe, 0x4c, 0x5f,
4228 0xf6, 0x9a, 0x61, 0xca, 0xa9, 0x25, 0x67, 0x21, 0xbd, 0xf3, 0x18, 0xae,
4229 0x18, 0x99, 0xe0, 0xf6, 0xc6, 0x24, 0xf9, 0x59, 0x94, 0xf9, 0x30, 0x86,
4230 0xa3, 0xe4, 0x77, 0x87, 0x0b, 0x15, 0x28, 0xaa, 0x3a, 0xf9, 0x59, 0x0f,
4231 0x3c, 0x93, 0x21, 0x65, 0x2e, 0x1b, 0x37, 0x3a, 0xf0, 0x47, 0x28, 0x3a,
4232 0x38, 0x77, 0x18, 0xa1, 0x13, 0x3f, 0xb0, 0x6b, 0x74, 0xbd, 0x75, 0x52,
4233 0xe1, 0xbc, 0xcf, 0x44, 0x69, 0x63, 0xbe, 0x27, 0xe7, 0x4e, 0xac, 0x6e,
4234 0xdc, 0x3b, 0x19, 0xe1, 0xfb, 0x35, 0x58, 0x7b, 0x22, 0x86, 0x0f, 0x53,
4235 0x37, 0xa3, 0xe8, 0x70, 0x04, 0x85, 0x7e, 0x40, 0x3f, 0x62, 0xad, 0x95,
4236 0x21, 0x8f, 0x94, 0x7d, 0xa3, 0xc3, 0x96, 0xd4, 0xe8, 0x3e, 0x7e, 0x0f,
4237 0xf1, 0x57, 0xec, 0xf9, 0x39, 0x72, 0x1d, 0xf9, 0x5c, 0xd3, 0x16, 0x9b,
4238 0xfb, 0x5e, 0x95, 0xb3, 0x7f, 0x89, 0x18, 0x9f, 0x53, 0x9d, 0xde, 0xe0,
4239 0x28, 0xc7, 0x3c, 0x3b, 0x25, 0xb5, 0x5b, 0xfb, 0xa6, 0x40, 0x69, 0x7f,
4240 0xfd, 0x87, 0x86, 0x07, 0x9b, 0x59, 0xdf, 0x47, 0x75, 0x39, 0x9b, 0x39,
4241 0xaa, 0xd5, 0x61, 0x13, 0x4e, 0xab, 0x2c, 0xc4, 0xf5, 0xff, 0x80, 0x09,
4242 0x35, 0x49, 0xac, 0xd1, 0xf1, 0x5e, 0xf6, 0x37, 0x58, 0xf3, 0xd4, 0xcb,
4243 0xd9, 0x1b, 0xac, 0x3c, 0xe1, 0xe7, 0x9c, 0x9b, 0xc9, 0x75, 0xb6, 0xe3,
4244 0xbb, 0xaa, 0x5b, 0x6f, 0x10, 0x8f, 0x30, 0x3e, 0x1b, 0x22, 0x1f, 0x0d,
4245 0xf0, 0xf7, 0x46, 0xd9, 0x7e, 0x9d, 0x4c, 0xa2, 0xcb, 0xbf, 0x25, 0x53,
4246 0x80, 0x7c, 0x80, 0x78, 0x99, 0x7d, 0x0d, 0x1f, 0x72, 0xec, 0xcc, 0xac,
4247 0x3b, 0xe6, 0xf1, 0x82, 0x8c, 0x2b, 0xf3, 0xc5, 0x99, 0x37, 0x65, 0xfc,
4248 0x90, 0x9c, 0xbf, 0xfd, 0x77, 0xce, 0x41, 0x86, 0x77, 0x82, 0x35, 0xb2,
4249 0xd1, 0x88, 0x0e, 0x95, 0xeb, 0x65, 0xc9, 0x1c, 0x1a, 0xeb, 0x51, 0x79,
4250 0x37, 0x8a, 0x35, 0x93, 0xf6, 0x48, 0xd4, 0x94, 0xeb, 0xb6, 0x5d, 0xbb,
4251 0x51, 0x8f, 0xbe, 0xad, 0xf8, 0x98, 0xf3, 0x7c, 0xb4, 0xc1, 0x38, 0xce,
4252 0x66, 0x9b, 0x2e, 0xbc, 0x4f, 0x0e, 0x15, 0x63, 0xbd, 0x77, 0xc9, 0x3b,
4253 0x8e, 0xb9, 0xec, 0xb1, 0x6a, 0xe9, 0x13, 0x30, 0x0f, 0x2a, 0xb3, 0xd9,
4254 0xfb, 0xab, 0x05, 0xab, 0xc6, 0xe8, 0x0b, 0xcd, 0x93, 0x22, 0xab, 0x3d,
4255 0x52, 0xc3, 0x71, 0x8e, 0x72, 0x9c, 0xd9, 0x0d, 0x7a, 0xdf, 0x98, 0x22,
4256 0x36, 0x0b, 0xe1, 0x58, 0xe1, 0xa2, 0xf4, 0xd0, 0x68, 0xb7, 0x69, 0x3e,
4257 0x2f, 0x76, 0x8b, 0xe0, 0xbb, 0xa5, 0x71, 0x9e, 0x2a, 0x5c, 0xc0, 0x6c,
4258 0xf6, 0x2d, 0xe7, 0xef, 0x31, 0xd6, 0x0d, 0xe3, 0xac, 0x21, 0xf3, 0xc4,
4259 0x93, 0xc9, 0x6c, 0x53, 0xdf, 0x24, 0xe5, 0x70, 0xcf, 0xca, 0x0d, 0xe0,
4260 0xd9, 0xd2, 0x33, 0xa3, 0x7c, 0x77, 0xf4, 0xda, 0xdf, 0x62, 0x23, 0x77,
4261 0x0f, 0xdf, 0xdd, 0x53, 0xa8, 0xe4, 0xda, 0xb9, 0xb5, 0xf8, 0x11, 0xcb,
4262 0x2f, 0x7d, 0x70, 0xbc, 0x36, 0xb5, 0x19, 0x63, 0xc6, 0x5f, 0x62, 0x2f,
4263 0xf5, 0x1e, 0xa7, 0x3d, 0x4f, 0x58, 0xce, 0x5e, 0xbd, 0x9c, 0xcb, 0x22,
4264 0x96, 0x87, 0xda, 0xce, 0x90, 0x93, 0x1d, 0x63, 0xcc, 0xdc, 0x97, 0x6a,
4265 0xea, 0x79, 0x9d, 0x7e, 0x97, 0xfe, 0xa2, 0xec, 0x87, 0x03, 0x93, 0xb9,
4266 0x47, 0x31, 0xb3, 0xa4, 0x69, 0xf1, 0x45, 0x62, 0xc2, 0x69, 0xe2, 0x94,
4267 0x8f, 0x98, 0x50, 0x9b, 0xf3, 0x94, 0xf6, 0x77, 0x0d, 0x7e, 0x6f, 0xba,
4268 0x30, 0x87, 0xbf, 0xa1, 0x5d, 0x44, 0xbe, 0x78, 0x72, 0x0e, 0xf2, 0xac,
4269 0xdb, 0x83, 0xd5, 0xe7, 0x06, 0x71, 0xe9, 0x66, 0xb7, 0x8f, 0xe6, 0x65,
4270 0xee, 0xde, 0x97, 0x6d, 0x52, 0xc7, 0x64, 0xec, 0x5e, 0x2d, 0x9a, 0xe1,
4271 0x5a, 0x4d, 0x38, 0x1c, 0x5c, 0x65, 0x8e, 0x97, 0x73, 0x58, 0x35, 0xf0,
4272 0xd1, 0xf7, 0xc7, 0x0c, 0x39, 0xbf, 0x10, 0x0d, 0xef, 0xe0, 0x1a, 0x8e,
4273 0x59, 0x4d, 0xad, 0x71, 0x65, 0x0f, 0xca, 0xfc, 0xdb, 0xe5, 0xd4, 0x5a,
4274 0xdf, 0x51, 0x34, 0xf5, 0x3c, 0x88, 0x2f, 0x21, 0xbd, 0xa4, 0xa9, 0x7f,
4275 0x0a, 0x71, 0xe3, 0x7e, 0xc8, 0x39, 0x4e, 0x77, 0xac, 0x86, 0x3c, 0x33,
4276 0xc9, 0xd2, 0x4f, 0xec, 0x15, 0xfa, 0x53, 0x98, 0x22, 0x77, 0x6c, 0x5c,
4277 0xa7, 0x5f, 0xf8, 0x5a, 0xe9, 0x9e, 0xbb, 0x4f, 0x24, 0xfe, 0x12, 0xa0,
4278 0x0d, 0x2a, 0xe1, 0x5b, 0x5a, 0xcf, 0x39, 0x68, 0x0b, 0xe7, 0x8c, 0xef,
4279 0x45, 0x1c, 0xa4, 0xbf, 0x4d, 0x15, 0x14, 0x18, 0x0d, 0x17, 0x31, 0x24,
4280 0xb9, 0x8b, 0xef, 0xb4, 0x67, 0x43, 0xe4, 0xb2, 0x51, 0x54, 0xea, 0xf1,
4281 0xd8, 0x28, 0xf5, 0x6b, 0x27, 0x96, 0x8f, 0x13, 0x43, 0x32, 0x6a, 0xc8,
4282 0x39, 0x77, 0x5a, 0xa9, 0x47, 0x9d, 0xff, 0x15, 0x90, 0x5a, 0xa8, 0x71,
4283 0x46, 0xf6, 0xa8, 0x0f, 0xe3, 0xe2, 0x54, 0x11, 0xc7, 0x52, 0x69, 0xec,
4284 0x5f, 0xa2, 0x62, 0xd2, 0x5a, 0xe6, 0xf4, 0x0e, 0xa4, 0xe6, 0xea, 0xca,
4285 0x1d, 0x72, 0xfa, 0x91, 0x5b, 0x53, 0x9e, 0x06, 0x39, 0xa7, 0x31, 0xcb,
4286 0xda, 0x6b, 0xca, 0x18, 0xc1, 0x41, 0xe3, 0xcb, 0x30, 0x96, 0x0a, 0x76,
4287 0x8e, 0xe1, 0xd5, 0x19, 0xc9, 0x71, 0xc9, 0xb6, 0x5b, 0x26, 0xc5, 0x3e,
4288 0x1e, 0x72, 0xdf, 0x00, 0x9a, 0x1d, 0x2e, 0xf7, 0x50, 0xdb, 0xea, 0x19,
4289 0x97, 0xd3, 0x35, 0xe7, 0xe5, 0xac, 0x74, 0x0d, 0xc2, 0xb4, 0xd7, 0xf9,
4290 0x94, 0x9f, 0x98, 0x23, 0xf6, 0x94, 0x33, 0x7a, 0xae, 0x9e, 0xc9, 0xbc,
4291 0x82, 0xb1, 0x96, 0x1b, 0xf7, 0x58, 0xe4, 0xff, 0x06, 0xae, 0x9d, 0x1b,
4292 0x2c, 0xf5, 0xc7, 0xff, 0xcc, 0xbe, 0x74, 0x93, 0xe8, 0xbd, 0x22, 0x44,
4293 0x4c, 0x8f, 0xcd, 0x5c, 0xb3, 0xaf, 0xd8, 0xf4, 0x9c, 0xe4, 0x0c, 0xc7,
4294 0xe6, 0x6e, 0xcf, 0x4d, 0x1b, 0xba, 0xac, 0x34, 0x31, 0x9f, 0xd0, 0xaf,
4295 0x96, 0xd0, 0xdf, 0x9a, 0xd1, 0xbf, 0xc2, 0xf4, 0xf5, 0x5e, 0xb5, 0x36,
4296 0xa3, 0x75, 0xfd, 0x7b, 0x36, 0x6e, 0x6e, 0x87, 0x57, 0x97, 0xeb, 0x33,
4297 0x76, 0x5a, 0x95, 0xbf, 0xff, 0x24, 0x24, 0xb9, 0xfe, 0x65, 0xab, 0x68,
4298 0xaf, 0x5e, 0xe6, 0x72, 0xc4, 0x1f, 0x64, 0x65, 0xdf, 0x2b, 0x63, 0xb3,
4299 0xde, 0xbe, 0xf0, 0xae, 0xf7, 0x10, 0xbe, 0x9f, 0x3f, 0x8c, 0x77, 0xa6,
4300 0x7c, 0x08, 0xeb, 0xa2, 0xcb, 0x66, 0xd4, 0xae, 0x4f, 0xa4, 0xdf, 0x23,
4301 0x2e, 0x5e, 0x98, 0x29, 0xfb, 0xc5, 0x43, 0x6d, 0x6b, 0x66, 0x14, 0x8e,
4302 0x55, 0x83, 0x0a, 0xea, 0xf9, 0x1d, 0xc3, 0x8b, 0x58, 0x89, 0xe3, 0x7a,
4303 0x29, 0xa7, 0x9c, 0x7b, 0x10, 0xee, 0x1b, 0xcf, 0x1f, 0x0a, 0xb9, 0x3d,
4304 0xb0, 0x10, 0x71, 0x74, 0x1c, 0x13, 0xd9, 0xa6, 0xe4, 0xfb, 0x72, 0x0e,
4305 0x87, 0x35, 0xd9, 0x25, 0x8c, 0xe3, 0x44, 0xb6, 0x8c, 0xa1, 0x51, 0x39,
4306 0x97, 0x9a, 0x8c, 0x79, 0x5c, 0x8c, 0x8c, 0x79, 0xb4, 0x4c, 0xcc, 0xe3,
4307 0x0f, 0x09, 0x77, 0x18, 0x2d, 0xc4, 0xa3, 0x95, 0xf0, 0xe2, 0x3e, 0xc3,
4308 0xf5, 0x8f, 0x86, 0x39, 0x3f, 0x62, 0x4b, 0x25, 0x2f, 0x4b, 0x4e, 0xf6,
4309 0x31, 0x27, 0x2f, 0x23, 0xbf, 0xf6, 0xe1, 0x4d, 0x5d, 0xec, 0xb1, 0xa6,
4310 0x6c, 0x0f, 0xe3, 0x1c, 0x1e, 0xb6, 0x8b, 0x3d, 0xe2, 0x4b, 0x7e, 0x1c,
4311 0x6e, 0x9e, 0xb5, 0x67, 0x22, 0xa2, 0xbb, 0x17, 0xa7, 0x89, 0xaf, 0xb8,
4312 0x39, 0x1e, 0x3d, 0xcd, 0x9c, 0x3d, 0xa6, 0x97, 0x7d, 0xfc, 0xb7, 0x4b,
4313 0x72, 0xea, 0x7d, 0xf3, 0xb8, 0x9f, 0x7f, 0x37, 0x44, 0xf7, 0x2b, 0xee,
4314 0x7c, 0xab, 0xe7, 0xfe, 0x26, 0x54, 0xee, 0x9f, 0xca, 0xb3, 0xb1, 0xfc,
4315 0xe3, 0xfc, 0x2e, 0x63, 0x85, 0xe8, 0x9f, 0x95, 0xe8, 0x8f, 0xc8, 0xff,
4316 0x89, 0x88, 0x5d, 0x64, 0x3f, 0x11, 0xb4, 0x87, 0x8d, 0xd7, 0x68, 0x8f,
4317 0xc3, 0xd7, 0xce, 0x4c, 0xb9, 0xf8, 0x55, 0xc5, 0xeb, 0x3b, 0x52, 0xaf,
4318 0x6c, 0x0a, 0xe2, 0x17, 0xf6, 0xa5, 0x48, 0x94, 0x98, 0x50, 0xe6, 0xa1,
4319 0x62, 0x33, 0xc3, 0xb1, 0x99, 0x5b, 0x2b, 0x5e, 0xd3, 0xa3, 0x38, 0x40,
4320 0xbe, 0xbd, 0x90, 0x2d, 0x9f, 0x15, 0x89, 0x13, 0x6b, 0x3e, 0x8f, 0xfe,
4321 0x3a, 0x19, 0xaf, 0x9e, 0xfe, 0x95, 0xa4, 0x0d, 0xd4, 0xf0, 0xce, 0x69,
4322 0xa9, 0xb5, 0xc9, 0x8f, 0x27, 0xe3, 0xc6, 0x43, 0xe4, 0x91, 0x13, 0x93,
4323 0xb6, 0xfd, 0x96, 0x81, 0x3b, 0xc3, 0xcc, 0xef, 0x2f, 0x90, 0x4f, 0x90,
4324 0x6f, 0xc4, 0x2a, 0x95, 0xa6, 0xe8, 0x2a, 0xe6, 0xfa, 0x31, 0xd6, 0x0a,
4325 0x4f, 0x13, 0xe3, 0x4e, 0x2f, 0x54, 0xc1, 0x3a, 0x21, 0xfb, 0x82, 0x55,
4326 0x98, 0x7c, 0x26, 0x49, 0xd9, 0x97, 0x72, 0x9c, 0x00, 0xaa, 0xcf, 0xb4,
4327 0xa2, 0xea, 0x94, 0x82, 0x1d, 0x89, 0x56, 0x04, 0xcf, 0xd4, 0x30, 0xff,
4328 0x06, 0x70, 0xa5, 0x85, 0x6b, 0xfc, 0x4c, 0x59, 0x0f, 0x67, 0x8f, 0x14,
4329 0x4f, 0xe6, 0x62, 0xe4, 0xf1, 0x11, 0x2c, 0x58, 0xb2, 0x1f, 0x1c, 0x70,
4330 0xb0, 0xf4, 0xc2, 0x86, 0x7a, 0x67, 0xcf, 0xea, 0xc5, 0x82, 0x1e, 0x3d,
4331 0xab, 0xd4, 0xe0, 0xc7, 0x27, 0x8a, 0x37, 0x57, 0xc2, 0x7e, 0x79, 0x85,
4332 0x99, 0xe8, 0xdb, 0x4b, 0xff, 0x5f, 0xb3, 0x3a, 0xc2, 0xfa, 0xc6, 0xb6,
4333 0xaf, 0x6e, 0x94, 0x3a, 0xd8, 0x70, 0xea, 0x60, 0x77, 0x6f, 0x5f, 0x1f,
4334 0x7c, 0x4c, 0xc9, 0x6c, 0x0f, 0xc3, 0xfe, 0xa8, 0xd2, 0xb4, 0x3f, 0xf6,
4335 0x9b, 0x09, 0xbe, 0x2f, 0x7b, 0x7c, 0xb6, 0xfd, 0xc3, 0x16, 0xdb, 0xce,
4336 0xb7, 0xc4, 0xfb, 0x54, 0xaf, 0x8a, 0x33, 0x8d, 0xb2, 0x2f, 0xe8, 0xc1,
4337 0x8f, 0x13, 0x7a, 0x74, 0x2f, 0x64, 0x0f, 0x9e, 0x78, 0xbf, 0x4c, 0xce,
4338 0x18, 0xd6, 0x87, 0x3b, 0xad, 0xa5, 0x78, 0x61, 0x7e, 0x23, 0xfa, 0xfd,
4339 0x70, 0xce, 0xc5, 0xd8, 0x06, 0xde, 0x5e, 0x01, 0xc9, 0xe1, 0x89, 0xd6,
4340 0xc7, 0x10, 0xc1, 0x7c, 0xe1, 0x30, 0x1e, 0x39, 0x21, 0xf5, 0xd7, 0xea,
4341 0xb6, 0xc0, 0x09, 0xfb, 0x07, 0x51, 0xb3, 0x48, 0x8c, 0xb4, 0xed, 0xaa,
4342 0x8d, 0x4d, 0x51, 0xa6, 0x26, 0xf2, 0x8d, 0x18, 0x79, 0xb3, 0x3e, 0xf8,
4343 0x63, 0x2c, 0xc1, 0xd9, 0xd9, 0xf4, 0xcd, 0xe4, 0xf2, 0x9d, 0xcf, 0x2a,
4344 0xc2, 0xdb, 0x23, 0x78, 0xbe, 0x20, 0x9c, 0x65, 0x6d, 0x5b, 0xd7, 0x89,
4345 0xe5, 0x78, 0x79, 0x3e, 0x82, 0xb3, 0x96, 0x4e, 0xce, 0x04, 0xa5, 0xda,
4346 0xb4, 0x6b, 0x6b, 0x29, 0x6b, 0xb5, 0xd7, 0x8b, 0xed, 0x29, 0xa9, 0x19,
4347 0xf5, 0xc1, 0x90, 0x82, 0xe5, 0x95, 0xd0, 0x17, 0x1f, 0x06, 0x86, 0x82,
4348 0x66, 0xe2, 0xc2, 0xb3, 0x4a, 0xa2, 0xef, 0x03, 0x6f, 0x04, 0xdf, 0x22,
4349 0x16, 0x7d, 0xbd, 0x20, 0x67, 0xa5, 0x88, 0x37, 0xb3, 0x31, 0xae, 0x5b,
4350 0x00, 0x9e, 0x86, 0x1a, 0x1c, 0x61, 0xec, 0xbc, 0x66, 0x54, 0x10, 0xaf,
4351 0xe4, 0xec, 0x94, 0x60, 0x7d, 0xbd, 0x9c, 0x19, 0xb1, 0x5f, 0xd4, 0xdd,
4352 0x7a, 0xdf, 0x98, 0xbb, 0xf1, 0x4c, 0xb1, 0x4a, 0x8c, 0x6f, 0xea, 0x89,
4353 0x2a, 0x6f, 0xd8, 0xe9, 0x2f, 0x2a, 0xd4, 0xb3, 0xb7, 0x06, 0x55, 0x8e,
4354 0xae, 0x18, 0xcd, 0x95, 0xf3, 0x4b, 0xad, 0xd4, 0x77, 0x3d, 0x99, 0x92,
4355 0x3f, 0x56, 0x33, 0xee, 0x8f, 0x32, 0x5f, 0x57, 0x9e, 0x90, 0xbc, 0x42,
4356 0xfe, 0xad, 0x6c, 0x26, 0x2f, 0x16, 0x0e, 0x11, 0xc0, 0x83, 0xaa, 0xf8,
4357 0x86, 0x4a, 0xfd, 0x36, 0xf9, 0xe4, 0x2c, 0xd4, 0x0b, 0x05, 0xc9, 0xeb,
4358 0x82, 0x0b, 0xe5, 0xf9, 0xa2, 0xa8, 0x9b, 0x94, 0x35, 0x52, 0xdb, 0x3e,
4359 0x9a, 0x0c, 0xc9, 0xd9, 0xf7, 0x11, 0x0f, 0xeb, 0xef, 0x00, 0xfd, 0xeb,
4360 0x9e, 0x16, 0x7d, 0x70, 0xb3, 0x57, 0x63, 0x0d, 0x1e, 0x67, 0x2d, 0xa1,
4361 0xb5, 0x4e, 0x28, 0x37, 0x8e, 0xf3, 0x6c, 0x8d, 0xc4, 0x4b, 0x86, 0x7a,
4362 0x3e, 0xe9, 0xe8, 0xb4, 0x86, 0x3a, 0x09, 0x5e, 0x27, 0x89, 0xd7, 0x35,
4363 0xb8, 0x32, 0x05, 0x9d, 0x11, 0x8c, 0x57, 0x0d, 0x02, 0x95, 0x9a, 0x48,
4364 0x77, 0x40, 0x62, 0x41, 0xeb, 0x17, 0x3e, 0x55, 0x4d, 0x7c, 0x9e, 0x9d,
4365 0x92, 0x7c, 0xa3, 0x08, 0x57, 0xc9, 0xd4, 0x9a, 0x43, 0xf8, 0x70, 0x03,
4366 0xf0, 0xc6, 0xa4, 0xbb, 0xef, 0xde, 0x27, 0x67, 0x6f, 0x2b, 0xdd, 0x33,
4367 0x0d, 0x8f, 0x39, 0x67, 0x15, 0x64, 0xfc, 0x43, 0x38, 0x93, 0x15, 0x7e,
4368 0x39, 0x44, 0x7e, 0x19, 0x1f, 0x26, 0xf7, 0x6c, 0x2d, 0x40, 0x62, 0xb2,
4369 0xc9, 0xf8, 0x88, 0xbe, 0xff, 0x2c, 0x79, 0xeb, 0x11, 0xb8, 0xfb, 0xee,
4370 0x8d, 0xa5, 0xb3, 0x08, 0xf1, 0x7c, 0xa7, 0xb2, 0xd3, 0x39, 0xcf, 0x64,
4371 0x30, 0xde, 0x3a, 0x94, 0x1d, 0xf3, 0xdb, 0x94, 0xae, 0xf9, 0x6e, 0x65,
4372 0x4f, 0x41, 0xea, 0xd8, 0xd5, 0x6d, 0x0f, 0x9e, 0xd8, 0xad, 0xec, 0x9c,
4373 0xed, 0x55, 0xc8, 0x6f, 0xd5, 0x80, 0xd9, 0xa7, 0x74, 0xcf, 0xbb, 0xfd,
4374 0xf4, 0x4e, 0xd6, 0x70, 0x3b, 0x2d, 0xf1, 0x07, 0xb5, 0xad, 0x6b, 0x52,
4375 0xfe, 0x17, 0x2b, 0x22, 0xff, 0xf7, 0xd0, 0xbf, 0x55, 0xb1, 0xed, 0x55,
4376 0xa9, 0xd7, 0x65, 0x3d, 0xec, 0xe7, 0x53, 0xcc, 0x93, 0x56, 0x0d, 0x06,
4377 0x58, 0x83, 0x8c, 0x1a, 0xb7, 0x94, 0xf6, 0xcf, 0x44, 0x27, 0x39, 0x2f,
4378 0x21, 0xfe, 0x8a, 0x4c, 0x25, 0x65, 0xf8, 0x07, 0xca, 0xbf, 0xbf, 0xa4,
4379 0x57, 0xb7, 0x9c, 0x27, 0xf0, 0x23, 0x23, 0x3a, 0xe4, 0xa9, 0xef, 0xb1,
4380 0xc9, 0xeb, 0x7a, 0xf9, 0x78, 0x6d, 0x9c, 0x5c, 0x75, 0xbf, 0xa2, 0x0d,
4381 0x3f, 0xe7, 0xea, 0x75, 0xe1, 0x8a, 0xa2, 0x15, 0x47, 0x21, 0xb8, 0xe0,
4382 0xea, 0xb5, 0xb6, 0xa4, 0xd7, 0x9a, 0x7c, 0xa7, 0x73, 0x4e, 0xab, 0x86,
4383 0x7a, 0x2d, 0x4c, 0x76, 0x28, 0x9d, 0xf3, 0xd2, 0xcb, 0x14, 0xdd, 0x44,
4384 0x8f, 0x13, 0x76, 0x95, 0xde, 0xad, 0xdc, 0xee, 0x9c, 0x2b, 0x93, 0xb3,
4385 0x5d, 0xb2, 0xdf, 0x5f, 0xd6, 0x4b, 0x72, 0xfa, 0xd2, 0xf0, 0xb6, 0x69,
4386 0x35, 0xbc, 0x75, 0xda, 0xb6, 0xbf, 0x6b, 0xfc, 0xb3, 0xa3, 0xcb, 0x59,
4387 0x43, 0x74, 0x91, 0x73, 0x23, 0x65, 0x7d, 0xbe, 0x50, 0xd2, 0x47, 0xd6,
4388 0xea, 0xfa, 0x3a, 0x95, 0xff, 0x87, 0xef, 0xdd, 0xac, 0x7b, 0xa6, 0xa4,
4389 0xac, 0x4f, 0xd8, 0x2c, 0x9f, 0x2f, 0x1b, 0xc2, 0x1b, 0xbc, 0xff, 0x93,
4390 0x6c, 0x59, 0x2f, 0x2f, 0xe6, 0x66, 0xc5, 0xfe, 0x43, 0xf2, 0x3f, 0x7c,
4391 0xc4, 0x91, 0xb8, 0x31, 0x46, 0x3f, 0x72, 0xf5, 0xd3, 0x86, 0x57, 0x7a,
4392 0x9b, 0x8a, 0x57, 0xa0, 0xf5, 0x2f, 0x2a, 0x89, 0x34, 0x6b, 0x70, 0x9c,
4393 0x2d, 0xfc, 0xea, 0xfa, 0x35, 0xe7, 0xab, 0x94, 0x6d, 0x39, 0x19, 0xfb,
4394 0x21, 0x8e, 0x2d, 0x67, 0x4a, 0x14, 0x3c, 0x37, 0x0b, 0xcc, 0x5a, 0x9c,
4395 0xd6, 0x1c, 0xc1, 0xd3, 0x86, 0x6d, 0x3f, 0xdb, 0xa2, 0xcb, 0x59, 0xa0,
4396 0xf3, 0x6e, 0xaf, 0x08, 0x46, 0x8d, 0x2e, 0x7b, 0x79, 0x72, 0x9e, 0xa4,
4397 0x97, 0x36, 0x10, 0xdd, 0xc5, 0x07, 0xca, 0x6b, 0x2f, 0xe7, 0xdc, 0x32,
4398 0xb4, 0x8f, 0xd8, 0xa6, 0x7c, 0xde, 0x4d, 0xfa, 0x30, 0x37, 0xda, 0x64,
4399 0x6d, 0xd8, 0x59, 0x5f, 0x43, 0xfc, 0x95, 0xe8, 0x43, 0x5f, 0x9d, 0x23,
4400 0x97, 0x18, 0x33, 0xfc, 0x0e, 0x6f, 0x3b, 0x42, 0xae, 0x32, 0xc1, 0xd8,
4401 0x79, 0xd2, 0xba, 0x80, 0x0b, 0xf9, 0xd7, 0xf0, 0xc6, 0xb5, 0xff, 0x67,
4402 0x13, 0x7f, 0xb9, 0xb8, 0xb1, 0xcb, 0x39, 0xd3, 0x74, 0xba, 0xf5, 0x96,
4403 0x84, 0xe0, 0x50, 0x77, 0xb3, 0x9c, 0x71, 0xaa, 0x34, 0xf3, 0x9b, 0x64,
4404 0xbf, 0xab, 0xc2, 0x34, 0x6f, 0x3d, 0xaf, 0x8b, 0x6d, 0xfe, 0x62, 0xfd,
4405 0x19, 0x5d, 0xf4, 0xfa, 0x9f, 0x6b, 0xc7, 0x9d, 0xff, 0xaf, 0xfc, 0xbb,
4406 0x5b, 0xf7, 0xe9, 0x12, 0x3b, 0x67, 0x5b, 0xda, 0x1d, 0x4c, 0x68, 0x35,
4407 0x57, 0x39, 0x36, 0x68, 0x31, 0x6f, 0x71, 0x3e, 0x0d, 0x33, 0xe9, 0x7c,
4408 0x9a, 0xa6, 0x6b, 0x9b, 0x6e, 0xb3, 0xc1, 0xf9, 0xec, 0x30, 0xdd, 0xf3,
4409 0xcf, 0x69, 0x53, 0x77, 0x3e, 0x7b, 0xcc, 0xb8, 0xf3, 0xd9, 0x69, 0xae,
4410 0xbc, 0x2e, 0x17, 0x7f, 0xfe, 0x1f, 0x9b, 0x97, 0x53, 0xd9, 0x78, 0x3a,
4411 0x00, 0x00, 0x00 };
4412
4413static const u32 bnx2_TXP_b06FwData[(0x0/4) + 1] = { 0x0 };
4414static const u32 bnx2_TXP_b06FwRodata[(0x0/4) + 1] = { 0x0 };
4415
4416static struct fw_info bnx2_txp_fw_06 = {
4417 /* Firmware version: 4.6.16 */
4418 .ver_major = 0x4,
4419 .ver_minor = 0x6,
4420 .ver_fix = 0x10,
4421
4422 .start_addr = 0x08000098,
4423
4424 .text_addr = 0x08000000,
4425 .text_len = 0x3a74,
4426 .text_index = 0x0,
4427 .gz_text = bnx2_TXP_b06FwText,
4428 .gz_text_len = sizeof(bnx2_TXP_b06FwText),
4429
4430 .data_addr = 0x00000000,
4431 .data_len = 0x0,
4432 .data_index = 0x0,
4433 .data = bnx2_TXP_b06FwData,
4434
4435 .sbss_addr = 0x08003aa0,
4436 .sbss_len = 0x68,
4437 .sbss_index = 0x0,
4438
4439 .bss_addr = 0x08003b08,
4440 .bss_len = 0x14c,
4441 .bss_index = 0x0,
4442
4443 .rodata_addr = 0x00000000,
4444 .rodata_len = 0x0,
4445 .rodata_index = 0x0,
4446 .rodata = bnx2_TXP_b06FwRodata,
4447};
4448
4449/* Initialized Values for the TX Processor. */ 74/* Initialized Values for the TX Processor. */
4450static const struct cpu_reg cpu_reg_txp = { 75static const struct cpu_reg cpu_reg_txp = {
4451 .mode = BNX2_TXP_CPU_MODE, 76 .mode = BNX2_TXP_CPU_MODE,
@@ -4461,4 +86,3 @@ static const struct cpu_reg cpu_reg_txp = {
4461 .spad_base = BNX2_TXP_SCRATCH, 86 .spad_base = BNX2_TXP_SCRATCH,
4462 .mips_view_base = 0x8000000, 87 .mips_view_base = 0x8000000,
4463}; 88};
4464
diff --git a/drivers/net/bnx2_fw2.h b/drivers/net/bnx2_fw2.h
deleted file mode 100644
index c54e4886b8bb..000000000000
--- a/drivers/net/bnx2_fw2.h
+++ /dev/null
@@ -1,4547 +0,0 @@
1/* bnx2_fw2.h: Broadcom NX2 network driver.
2 *
3 * Copyright (c) 2004, 2005, 2006, 2007 Broadcom Corporation
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, except as noted below.
8 *
9 * This file contains firmware data derived from proprietary unpublished
10 * source code, Copyright (c) 2004, 2005, 2006, 2007 Broadcom Corporation.
11 *
12 * Permission is hereby granted for the distribution of this firmware data
13 * in hexadecimal or equivalent format, provided this copyright notice is
14 * accompanying it.
15 */
16
17static u8 bnx2_COM_b09FwText[] = {
18 0xcd, 0x7c, 0x7b, 0x6c, 0x5c, 0xd7, 0x99, 0xdf, 0x77, 0xef, 0xcc, 0x90,
19 0x43, 0x6a, 0x44, 0x5d, 0x32, 0x13, 0x66, 0x1c, 0x33, 0xcd, 0x3c, 0x2e,
20 0x29, 0xda, 0x64, 0x92, 0x31, 0x77, 0xa4, 0xd0, 0xc9, 0xad, 0x3d, 0x99,
21 0x19, 0xc9, 0x4c, 0xa8, 0x0d, 0xe8, 0x44, 0x2e, 0x52, 0x54, 0x28, 0xd8,
22 0x21, 0xe5, 0x28, 0x8b, 0xec, 0xae, 0xf2, 0x28, 0x9a, 0x2e, 0xd2, 0xd5,
23 0x64, 0x48, 0x29, 0xca, 0x62, 0xc4, 0x19, 0xd3, 0x34, 0x93, 0xa2, 0x01,
24 0x32, 0x19, 0x92, 0x72, 0x76, 0x31, 0x12, 0x15, 0xdb, 0xcd, 0x1a, 0x41,
25 0xe2, 0xb0, 0xd4, 0x23, 0xde, 0x20, 0x2d, 0xb4, 0x1b, 0x17, 0x4d, 0xd3,
26 0x45, 0x21, 0xc8, 0x4e, 0x6c, 0x6c, 0xb3, 0x6d, 0x50, 0x2c, 0x10, 0x77,
27 0x91, 0x64, 0xfa, 0xfb, 0x9d, 0x73, 0xee, 0x70, 0x44, 0x31, 0x4e, 0xba,
28 0x7f, 0x95, 0xc0, 0xe0, 0xdc, 0x7b, 0x9e, 0xdf, 0xf9, 0xce, 0xf7, 0x3e,
29 0xdf, 0xe5, 0x43, 0x22, 0xbd, 0x62, 0xfe, 0xf6, 0xe3, 0x97, 0xf9, 0xfd,
30 0x3f, 0x9c, 0x7b, 0xe0, 0x9d, 0x87, 0xdf, 0x89, 0xc7, 0x43, 0xf6, 0x81,
31 0xae, 0x20, 0xeb, 0x03, 0xf8, 0x45, 0xf1, 0x9b, 0x30, 0xcf, 0x7b, 0xfd,
32 0x39, 0xf8, 0x1d, 0xb6, 0x44, 0x66, 0xff, 0x46, 0xc4, 0xda, 0xd5, 0x16,
33 0xfe, 0x35, 0x63, 0xde, 0xe8, 0xcf, 0xfe, 0x2d, 0xfb, 0x39, 0xff, 0x80,
34 0xb9, 0xfd, 0xbf, 0x80, 0x19, 0xbe, 0xdf, 0xfc, 0x24, 0x6c, 0x7b, 0xb7,
35 0x3e, 0x90, 0x73, 0x25, 0x1c, 0xf0, 0x7e, 0x38, 0x3d, 0xe7, 0x8a, 0x64,
36 0x9b, 0x63, 0xf1, 0xbc, 0xfc, 0xb2, 0x55, 0x8a, 0x06, 0x85, 0xf5, 0x6f,
37 0xf3, 0x7e, 0xf1, 0x95, 0x6f, 0xbf, 0x3b, 0xf1, 0xb3, 0x7a, 0x40, 0xc2,
38 0x8e, 0xf7, 0xba, 0x38, 0x23, 0x12, 0x1e, 0xc2, 0x98, 0x2f, 0x1f, 0x9c,
39 0xb5, 0xa5, 0xcf, 0x9f, 0xeb, 0xb5, 0xd6, 0xb7, 0x0f, 0x4a, 0xc9, 0xf6,
40 0x1c, 0xb9, 0xb2, 0x19, 0x95, 0xef, 0x6c, 0x8a, 0x35, 0x93, 0xe9, 0x11,
41 0x7b, 0xf9, 0xad, 0x92, 0x75, 0x2c, 0x09, 0xb8, 0x5c, 0x27, 0x2e, 0xb9,
42 0xca, 0x20, 0xde, 0x13, 0x31, 0x91, 0x7f, 0xbe, 0x5f, 0x8f, 0x0d, 0x4b,
43 0x60, 0x55, 0xc2, 0x5d, 0xde, 0x0b, 0xd3, 0x37, 0x56, 0x62, 0x12, 0x5c,
44 0x1a, 0x97, 0x72, 0x35, 0x22, 0xa1, 0x55, 0x19, 0x0a, 0xc8, 0x70, 0xec,
45 0x71, 0xf4, 0x28, 0x34, 0x83, 0x72, 0xa4, 0x69, 0x49, 0xd0, 0x0d, 0x03,
46 0xb6, 0x08, 0x7e, 0x0e, 0x7e, 0x51, 0xfc, 0x62, 0xf8, 0x9d, 0xc5, 0x3c,
47 0x43, 0x92, 0x6f, 0x72, 0x4e, 0xac, 0x5b, 0xc5, 0xfa, 0xd5, 0x84, 0x33,
48 0x8b, 0x79, 0x6f, 0x05, 0x62, 0xf2, 0xed, 0x83, 0x84, 0xcb, 0x21, 0x3c,
49 0x80, 0x2d, 0x6c, 0xe5, 0x56, 0xe4, 0x74, 0x3e, 0x2d, 0x71, 0xdb, 0xed,
50 0x95, 0xa2, 0x63, 0xc5, 0xe7, 0x47, 0x07, 0xa4, 0x74, 0x1c, 0xed, 0x55,
51 0xc9, 0xda, 0x98, 0xbf, 0xe8, 0xc8, 0xac, 0x6e, 0x63, 0xdd, 0x17, 0x41,
52 0x27, 0x09, 0x87, 0x08, 0xfb, 0x4e, 0xf5, 0x31, 0x3c, 0x73, 0xbe, 0x78,
53 0x50, 0xc3, 0xbd, 0x8a, 0x77, 0xd6, 0xff, 0x41, 0x44, 0xbf, 0xf3, 0x99,
54 0x7d, 0xfd, 0x75, 0xfd, 0xfd, 0x72, 0xfd, 0x51, 0xec, 0x99, 0x30, 0xf8,
55 0x7b, 0x96, 0x52, 0x08, 0xb0, 0x34, 0x56, 0x22, 0xd6, 0xda, 0xca, 0xb8,
56 0x9c, 0xab, 0x3e, 0x24, 0xb9, 0x74, 0xab, 0x35, 0x97, 0x96, 0xa8, 0x2d,
57 0xc3, 0x4e, 0x1e, 0x1d, 0xb6, 0x9b, 0x62, 0x35, 0x2a, 0x12, 0xee, 0x06,
58 0x5e, 0x5e, 0x5d, 0xe1, 0xdc, 0x41, 0xd4, 0x0d, 0xa2, 0x7f, 0x9f, 0xb5,
59 0xbe, 0x02, 0xf8, 0x3d, 0xe2, 0xa7, 0xd5, 0x5a, 0x4c, 0x0f, 0xc7, 0xe6,
60 0xb1, 0xe6, 0xd5, 0xe6, 0xf0, 0xe4, 0x6d, 0x71, 0x30, 0xe7, 0x00, 0xfa,
61 0x10, 0x57, 0x9c, 0x8b, 0x73, 0x72, 0xbe, 0x08, 0xc6, 0x46, 0xd1, 0x46,
62 0xb8, 0x5a, 0xad, 0x5c, 0xda, 0xe1, 0xbb, 0x6c, 0x01, 0x7f, 0x5b, 0xc4,
63 0x5f, 0xef, 0x90, 0x7c, 0xb7, 0xc9, 0x35, 0xda, 0xb0, 0x97, 0xba, 0xbc,
64 0xe7, 0xed, 0xed, 0x0a, 0xcf, 0x2d, 0x2c, 0xef, 0x0b, 0x26, 0x46, 0x4b,
65 0x8a, 0x4e, 0x66, 0xb1, 0x1f, 0x4b, 0xd1, 0x84, 0x85, 0xe7, 0x64, 0x93,
66 0xfd, 0x89, 0xeb, 0xb8, 0x2c, 0xe0, 0x5c, 0xcb, 0x2b, 0x25, 0xfb, 0x6a,
67 0xf3, 0x17, 0xad, 0x9c, 0xbb, 0x68, 0x6f, 0xaf, 0xb3, 0xff, 0x09, 0xf4,
68 0x0f, 0xca, 0x62, 0xa5, 0x4f, 0x08, 0x93, 0x1e, 0x77, 0x02, 0xe3, 0xc4,
69 0xb1, 0xbd, 0x73, 0xf6, 0xd5, 0xf5, 0xf3, 0xf6, 0x35, 0x75, 0x6e, 0x58,
70 0xab, 0x3d, 0x57, 0x27, 0xde, 0xc6, 0xfe, 0x3f, 0xc4, 0x5b, 0x0c, 0xf3,
71 0x47, 0x51, 0xee, 0xb3, 0x1a, 0xb5, 0x16, 0xd6, 0x8f, 0xe1, 0x79, 0x2f,
72 0x1c, 0xde, 0x52, 0x74, 0x77, 0x05, 0x74, 0xe7, 0x78, 0x31, 0x79, 0x66,
73 0x73, 0x08, 0xfb, 0x88, 0xca, 0xd7, 0xc1, 0x17, 0x03, 0x87, 0xf7, 0x49,
74 0x1e, 0x7c, 0x41, 0x7a, 0x7b, 0x74, 0xf5, 0x9f, 0x49, 0x31, 0x9a, 0x18,
75 0xa5, 0xfc, 0x48, 0x4e, 0x80, 0x9e, 0x0d, 0x6b, 0xe7, 0x96, 0xb2, 0x29,
76 0x5b, 0x1e, 0x16, 0xdb, 0xc3, 0xba, 0x99, 0x31, 0xa7, 0x20, 0x41, 0xb4,
77 0x65, 0x25, 0xe0, 0x45, 0x25, 0xb7, 0xfa, 0x5e, 0x0b, 0x74, 0x19, 0x5f,
78 0xc0, 0xa0, 0xc0, 0x92, 0x58, 0xb6, 0xdb, 0x25, 0xc5, 0xe3, 0xac, 0x0f,
79 0x83, 0xc6, 0xc1, 0xb3, 0x2b, 0x07, 0x00, 0x97, 0x0c, 0xdb, 0xc2, 0xba,
80 0x61, 0xa7, 0x2c, 0x25, 0xb1, 0x2f, 0xff, 0xa1, 0x65, 0x64, 0x9e, 0xc1,
81 0xef, 0xa8, 0x59, 0xab, 0xcd, 0x87, 0x96, 0xbd, 0x1a, 0xb1, 0x02, 0xab,
82 0xe3, 0x72, 0x76, 0x0f, 0xbc, 0x36, 0x80, 0x57, 0x7b, 0xc9, 0xe7, 0xd3,
83 0x20, 0xde, 0x07, 0xd1, 0xb7, 0xcf, 0x0a, 0xae, 0xde, 0x8d, 0xd3, 0xb5,
84 0xe6, 0x70, 0x7a, 0x1b, 0x38, 0xb5, 0x57, 0x07, 0xd0, 0xe7, 0x6e, 0x9c,
85 0x36, 0x80, 0x53, 0x7b, 0x55, 0xe3, 0xb3, 0x01, 0x7c, 0xda, 0x4b, 0x51,
86 0x94, 0xfb, 0x2c, 0x7b, 0x59, 0xe3, 0xb3, 0x61, 0x78, 0xfa, 0x62, 0x93,
87 0xb0, 0x66, 0x3b, 0x68, 0x2e, 0x4b, 0xda, 0x81, 0x9c, 0x2a, 0xc8, 0x5c,
88 0xc5, 0x06, 0xbe, 0x82, 0xe2, 0x4e, 0x58, 0x32, 0xa7, 0xda, 0x0a, 0x92,
89 0x02, 0x0d, 0x95, 0x9c, 0xb1, 0x51, 0x5b, 0x12, 0xf1, 0xac, 0x0d, 0x7c,
90 0x57, 0x81, 0xf7, 0x2a, 0x70, 0xae, 0x64, 0xc2, 0x8b, 0xe0, 0xd7, 0x38,
91 0xce, 0x65, 0x77, 0x7d, 0xc2, 0xa9, 0x2b, 0x9e, 0x8d, 0x9b, 0x33, 0x23,
92 0xed, 0xf3, 0x9c, 0x62, 0x38, 0x2f, 0x75, 0x7e, 0xd6, 0x5f, 0x66, 0xf6,
93 0x49, 0x6a, 0x39, 0xa0, 0xce, 0x2b, 0xbd, 0xfa, 0xae, 0xf6, 0x79, 0xd9,
94 0x13, 0x94, 0x65, 0x3c, 0x23, 0x91, 0xd4, 0x12, 0xcf, 0x29, 0x9b, 0x0a,
95 0x08, 0xcf, 0x2a, 0x24, 0xd9, 0x19, 0x9e, 0x4b, 0x54, 0x92, 0xab, 0x3c,
96 0xb3, 0x0d, 0x73, 0x5e, 0xfa, 0x9c, 0x92, 0x7b, 0x9c, 0x53, 0xd2, 0x9c,
97 0xd3, 0x76, 0xf3, 0x8a, 0x39, 0xa7, 0x7f, 0x2b, 0x86, 0xe6, 0xdf, 0x10,
98 0x07, 0x36, 0x70, 0x10, 0xbc, 0x03, 0x07, 0xdd, 0x6d, 0x1c, 0xc4, 0x6d,
99 0xec, 0xe1, 0xae, 0xfd, 0x77, 0xd6, 0x75, 0xee, 0x5d, 0x4a, 0x41, 0x4f,
100 0xac, 0x85, 0x0a, 0xe1, 0x0e, 0x48, 0x71, 0x86, 0x30, 0x52, 0xae, 0x6b,
101 0x58, 0xf3, 0x2b, 0x94, 0x6d, 0x07, 0x04, 0x34, 0xf1, 0xb6, 0x80, 0x1a,
102 0x53, 0x92, 0x85, 0x26, 0xdb, 0x4a, 0x92, 0xcb, 0x80, 0x5e, 0x6b, 0xac,
103 0x03, 0x83, 0x6e, 0x6a, 0x3e, 0xde, 0xd1, 0x07, 0xd1, 0x36, 0x1e, 0xf3,
104 0x95, 0x38, 0xe4, 0x74, 0x10, 0xe5, 0xd7, 0x50, 0xee, 0xb3, 0x66, 0x6a,
105 0x7f, 0x65, 0x49, 0x5f, 0x4b, 0x9c, 0x09, 0xee, 0x31, 0x36, 0x9d, 0x73,
106 0x4b, 0x31, 0x47, 0xde, 0x26, 0xce, 0x3b, 0x43, 0x22, 0x83, 0x09, 0xa7,
107 0x28, 0xff, 0x05, 0xed, 0x89, 0x58, 0x56, 0xfe, 0xb7, 0x4f, 0xbb, 0xc0,
108 0x43, 0xcf, 0xeb, 0x59, 0xf5, 0xc4, 0x7a, 0x8e, 0xcb, 0xa0, 0x2e, 0x24,
109 0xb3, 0xd0, 0x31, 0x05, 0x97, 0xeb, 0x71, 0xfe, 0xf8, 0x2c, 0xd7, 0xcd,
110 0x37, 0x7d, 0x7d, 0x20, 0xd9, 0x80, 0xc7, 0x36, 0xf2, 0xe5, 0xa4, 0x95,
111 0x6f, 0x12, 0x57, 0x19, 0x71, 0x9b, 0x1a, 0x66, 0x0d, 0x6b, 0x1b, 0x4e,
112 0xf0, 0x6b, 0x16, 0x34, 0x49, 0xd8, 0xe2, 0xe0, 0x9b, 0x73, 0x01, 0xff,
113 0x1c, 0x82, 0xde, 0xa4, 0x2c, 0x42, 0x3f, 0x96, 0x2b, 0x9c, 0xef, 0x33,
114 0x56, 0xe0, 0xb2, 0x3f, 0x3f, 0xcf, 0x86, 0x73, 0xeb, 0xf9, 0xca, 0xcd,
115 0xd7, 0x0c, 0xef, 0x2b, 0x3d, 0x88, 0xf9, 0x4a, 0x1d, 0xf3, 0x95, 0xc8,
116 0xb3, 0x07, 0x94, 0xae, 0x39, 0x4e, 0xfc, 0x9d, 0x47, 0xdb, 0x2d, 0xd0,
117 0x08, 0xf9, 0x81, 0xfc, 0x41, 0x5e, 0x7d, 0xb7, 0x8d, 0xfd, 0x76, 0xe0,
118 0x76, 0x06, 0x72, 0x98, 0xbc, 0x11, 0x96, 0x7c, 0x94, 0xf5, 0x8f, 0x1b,
119 0x98, 0x20, 0x13, 0xd4, 0xfb, 0xf1, 0x1e, 0x5f, 0x3e, 0x82, 0x16, 0x01,
120 0xdb, 0xf3, 0x6a, 0x8f, 0xb6, 0xe7, 0x01, 0x37, 0x9d, 0x30, 0x72, 0xdf,
121 0x9e, 0x91, 0xdb, 0x3e, 0xbc, 0x3c, 0x2b, 0xca, 0x55, 0xb1, 0xd6, 0x33,
122 0x61, 0xc8, 0x70, 0x5b, 0xf2, 0x69, 0xd0, 0x66, 0x3a, 0x60, 0xe4, 0xc3,
123 0x8b, 0xc6, 0x56, 0xd2, 0x38, 0x0e, 0x2a, 0x3d, 0xbe, 0x88, 0x79, 0x4f,
124 0x00, 0x46, 0xce, 0x19, 0xb4, 0xd6, 0x2a, 0x11, 0xe8, 0x6c, 0xc0, 0xe6,
125 0x24, 0xe2, 0x80, 0x09, 0xef, 0x7e, 0x9f, 0x88, 0x2c, 0x6c, 0xfa, 0xeb,
126 0x2e, 0xb6, 0xf5, 0x45, 0x49, 0xe1, 0xdb, 0x99, 0x0d, 0xec, 0xd0, 0xc6,
127 0xcc, 0xc9, 0xca, 0x99, 0x96, 0xed, 0x92, 0x06, 0xdd, 0xd1, 0x86, 0x44,
128 0x26, 0x37, 0x32, 0xef, 0x06, 0xbf, 0xa1, 0x1e, 0x63, 0xca, 0xcd, 0x52,
129 0xc4, 0x76, 0x5d, 0x94, 0x94, 0x3f, 0x27, 0xba, 0x6f, 0xb8, 0x3e, 0xbd,
130 0x0c, 0x49, 0xc8, 0x6d, 0xb5, 0x36, 0x70, 0x26, 0x47, 0x9b, 0xbf, 0x6c,
131 0x7d, 0x35, 0xa8, 0xed, 0x15, 0xdb, 0xfb, 0xa9, 0xa5, 0xd7, 0x8c, 0x4f,
132 0x27, 0x15, 0x1e, 0x62, 0x5d, 0xfa, 0xdd, 0x35, 0xef, 0xd7, 0x22, 0x46,
133 0x87, 0x99, 0xf7, 0xf9, 0xa0, 0xb6, 0x7f, 0xc2, 0x3d, 0xe4, 0xa3, 0xa0,
134 0xe7, 0xf4, 0xe0, 0x9c, 0xc3, 0x21, 0x6f, 0x6a, 0x7c, 0x43, 0xf5, 0x2b,
135 0x99, 0x7e, 0xd1, 0x6e, 0x3d, 0xee, 0xd4, 0xf4, 0x88, 0xa2, 0xa1, 0x4f,
136 0x4f, 0x0f, 0xab, 0xf2, 0xb3, 0xd3, 0x29, 0x55, 0x2e, 0x4e, 0xbb, 0xaa,
137 0x3c, 0xaf, 0xfa, 0x5b, 0xde, 0x90, 0xa9, 0x1f, 0x9d, 0x8e, 0xab, 0x72,
138 0xdc, 0x94, 0x69, 0x53, 0x66, 0x4c, 0x39, 0x69, 0x4a, 0xcf, 0x94, 0x59,
139 0x53, 0x16, 0xcc, 0x7c, 0x53, 0xe6, 0xfd, 0x98, 0x29, 0x67, 0x4c, 0x79,
140 0xdc, 0x94, 0x1f, 0x31, 0xe5, 0x09, 0x03, 0xd7, 0xbc, 0x29, 0x3f, 0x6e,
141 0xea, 0x4f, 0x1b, 0x38, 0x3f, 0x03, 0x78, 0x1e, 0x09, 0xed, 0xd0, 0xca,
142 0x69, 0x4d, 0x5f, 0x15, 0x47, 0xca, 0x9b, 0xdc, 0x7f, 0x1c, 0x32, 0x25,
143 0x88, 0xb3, 0x04, 0xbf, 0x3b, 0xa4, 0x09, 0x17, 0x72, 0x38, 0x88, 0x33,
144 0xe4, 0xf3, 0x69, 0xf9, 0x53, 0xf4, 0x1d, 0xbd, 0xe0, 0xc8, 0x62, 0x95,
145 0xfa, 0xf5, 0x5b, 0xf2, 0x6a, 0x85, 0xe7, 0xf1, 0xbc, 0xdc, 0xa8, 0xa4,
146 0xe2, 0x41, 0x8b, 0x74, 0x94, 0x98, 0x7c, 0x45, 0x12, 0x90, 0xfd, 0x63,
147 0x71, 0x96, 0xd7, 0xa8, 0x54, 0xd0, 0xef, 0xa0, 0x5a, 0xfb, 0x79, 0x01,
148 0x4c, 0x72, 0xa5, 0xd2, 0x0d, 0x99, 0xf5, 0x4a, 0x8b, 0x7a, 0xfd, 0xfc,
149 0xa6, 0xc8, 0xc8, 0x05, 0xe2, 0xf9, 0x5b, 0xb2, 0x51, 0x21, 0xde, 0x9f,
150 0x87, 0xad, 0x90, 0x4a, 0xbf, 0x28, 0x89, 0xd1, 0x8b, 0xc2, 0xf9, 0xc6,
151 0xd2, 0x28, 0xe3, 0x65, 0xfc, 0xce, 0x41, 0xde, 0x76, 0x4f, 0xe8, 0xf9,
152 0x86, 0xcd, 0x7c, 0x2e, 0xec, 0xc2, 0x5b, 0x0e, 0x65, 0xe0, 0x7f, 0xb5,
153 0xf4, 0x9e, 0xb4, 0x3c, 0xcc, 0x3a, 0x41, 0x96, 0xb6, 0xcf, 0x23, 0xf6,
154 0xc4, 0xf5, 0x16, 0xe4, 0x31, 0xf9, 0xdf, 0xd4, 0x6d, 0x1b, 0xfe, 0x92,
155 0x9a, 0xed, 0x81, 0x3e, 0x33, 0xc3, 0x58, 0x83, 0xef, 0x71, 0xd8, 0x9a,
156 0x52, 0x22, 0x1e, 0x8a, 0x95, 0x5f, 0xb5, 0xb2, 0x41, 0x6d, 0x9f, 0x6a,
157 0x19, 0xc1, 0x76, 0x4b, 0xf2, 0xe8, 0xbb, 0x60, 0x64, 0x66, 0xa1, 0x79,
158 0x4b, 0xc9, 0x8d, 0xaf, 0x2b, 0x1a, 0x4e, 0x9c, 0x2f, 0x09, 0x75, 0x86,
159 0x1d, 0xa0, 0x4c, 0xbb, 0x92, 0xae, 0xb7, 0x16, 0xaa, 0x94, 0xc1, 0xc3,
160 0x52, 0xac, 0x0d, 0x97, 0x6c, 0x94, 0xa7, 0xeb, 0x31, 0x39, 0x5d, 0xe1,
161 0x3c, 0xfb, 0xd1, 0xc7, 0x45, 0x1d, 0x18, 0x6b, 0x90, 0xf2, 0x98, 0x6b,
162 0xbe, 0x6e, 0xe9, 0x35, 0xb1, 0x07, 0x77, 0xcb, 0xfa, 0x44, 0xf3, 0x9a,
163 0x55, 0xac, 0xd3, 0x4e, 0x42, 0x7d, 0xb3, 0x53, 0x66, 0xfb, 0xf2, 0xfa,
164 0x79, 0xac, 0x5d, 0xc0, 0x7a, 0x59, 0x25, 0xb3, 0xba, 0x21, 0xf7, 0x7e,
165 0x52, 0xf9, 0x72, 0xab, 0x5c, 0x1d, 0x95, 0x8b, 0x9b, 0x71, 0x39, 0x52,
166 0x19, 0x97, 0x8d, 0x4d, 0x4f, 0x0a, 0x95, 0xb4, 0xac, 0xa3, 0x4f, 0xbe,
167 0x92, 0x91, 0xb5, 0xcd, 0x63, 0xea, 0xac, 0x2f, 0x42, 0x2e, 0x6d, 0xa0,
168 0x4f, 0x63, 0x73, 0x12, 0x3f, 0xdf, 0x1e, 0x88, 0xa1, 0xdf, 0x10, 0xfa,
169 0x88, 0xf5, 0xb3, 0xca, 0x3d, 0xc0, 0x21, 0xe6, 0xae, 0xfa, 0xb6, 0xc1,
170 0xb8, 0x2c, 0x54, 0x79, 0x4e, 0x2f, 0x4c, 0x6f, 0xac, 0xc4, 0xb2, 0xd4,
171 0x77, 0xa7, 0x9b, 0xc3, 0xe0, 0x53, 0xe8, 0xef, 0x2a, 0x65, 0x42, 0x50,
172 0x8a, 0x90, 0xb5, 0x0d, 0xc0, 0x46, 0x58, 0x1b, 0xb0, 0xdf, 0x8b, 0xcd,
173 0x21, 0x94, 0x0e, 0x4a, 0xac, 0x03, 0xd8, 0x8b, 0x4d, 0x17, 0x65, 0x0c,
174 0xa5, 0xd6, 0xed, 0x27, 0x9b, 0x9c, 0x3f, 0xab, 0x74, 0x90, 0xc6, 0xf1,
175 0xd4, 0x1d, 0xb6, 0x7a, 0xc0, 0x5b, 0xb4, 0x8a, 0x2b, 0x62, 0xe7, 0xd2,
176 0x21, 0xfa, 0x0b, 0x90, 0x2b, 0x37, 0x0f, 0x68, 0x58, 0x3e, 0x1b, 0xa0,
177 0xdc, 0x09, 0xba, 0xe7, 0x81, 0xaf, 0x5e, 0xc9, 0x06, 0x69, 0x73, 0xf1,
178 0x59, 0x5a, 0x01, 0xcf, 0xa5, 0xad, 0x12, 0x0c, 0x50, 0x5f, 0x45, 0xd9,
179 0xa7, 0xde, 0xa2, 0x5c, 0xca, 0xd5, 0xb4, 0x6d, 0x5e, 0x6a, 0xdb, 0xe6,
180 0xeb, 0xa8, 0xb7, 0x20, 0x3b, 0xe0, 0x9b, 0xd4, 0x79, 0x1e, 0x03, 0x98,
181 0x33, 0x6b, 0x15, 0x2a, 0xfe, 0x79, 0xd6, 0x5b, 0x4f, 0x54, 0x69, 0xaf,
182 0xd1, 0x6e, 0x53, 0xf2, 0x49, 0x92, 0xcb, 0x71, 0x23, 0x83, 0x23, 0x8a,
183 0x37, 0x88, 0x83, 0xe4, 0x72, 0xda, 0xd4, 0x75, 0x77, 0xd4, 0xf9, 0xb2,
184 0xfa, 0x73, 0x80, 0x61, 0x48, 0x9d, 0xad, 0xed, 0x4d, 0x59, 0x39, 0x65,
185 0x2b, 0xb6, 0x5a, 0x79, 0x37, 0x24, 0xc5, 0xf1, 0x3f, 0xc2, 0x9e, 0xd8,
186 0x56, 0x72, 0x40, 0x5a, 0xe0, 0xbb, 0xca, 0x07, 0xe6, 0xdc, 0x84, 0xb2,
187 0xb3, 0x72, 0x15, 0xf8, 0x38, 0x5a, 0xd5, 0x95, 0xfa, 0xa1, 0x87, 0xdc,
188 0x25, 0xd2, 0x53, 0xbd, 0xb5, 0x0c, 0x9c, 0xce, 0x2c, 0x15, 0xac, 0xe4,
189 0x12, 0xe8, 0x63, 0x10, 0xb6, 0x87, 0x1b, 0x91, 0xdc, 0x65, 0xd2, 0x11,
190 0xfb, 0xb0, 0xbe, 0x4b, 0x66, 0xa2, 0xbb, 0x6d, 0x9b, 0x87, 0x0e, 0x68,
191 0x9d, 0x8f, 0xbe, 0x4b, 0x70, 0xe6, 0x7a, 0xb5, 0x9f, 0x92, 0x5c, 0xa5,
192 0x9c, 0x2d, 0x40, 0xd7, 0x53, 0xe7, 0xf4, 0xc0, 0x9e, 0x61, 0x3d, 0xe7,
193 0x44, 0xdb, 0xc5, 0xac, 0x05, 0xfd, 0x66, 0x97, 0x95, 0x8d, 0x3e, 0x89,
194 0xf2, 0xde, 0x20, 0x6d, 0x5b, 0xea, 0x90, 0xe4, 0xaa, 0x3f, 0x47, 0x27,
195 0x3e, 0xf6, 0x29, 0x9d, 0x34, 0xe0, 0x0d, 0xa8, 0x79, 0x61, 0x97, 0x58,
196 0x73, 0x6a, 0xde, 0x58, 0xc7, 0xbc, 0x68, 0xbb, 0xf8, 0xb7, 0x01, 0x3d,
197 0x0f, 0xf0, 0xac, 0xf6, 0xc4, 0x36, 0x8e, 0x29, 0x58, 0x79, 0xd8, 0x4e,
198 0x33, 0x69, 0x5b, 0x02, 0x83, 0x7e, 0x5f, 0xbd, 0xaf, 0x02, 0xf6, 0x95,
199 0xc3, 0xbe, 0xec, 0xc1, 0xdd, 0xfb, 0x2a, 0x05, 0xf4, 0xbe, 0x06, 0x3a,
200 0x60, 0x8a, 0xee, 0x5a, 0xbf, 0x73, 0x5f, 0x68, 0xbb, 0xb8, 0x7b, 0x8e,
201 0xc7, 0x06, 0xf4, 0x1c, 0xd1, 0x8e, 0x39, 0x06, 0x77, 0xcd, 0x01, 0x7a,
202 0x8e, 0x72, 0xfc, 0xe0, 0x1e, 0xe3, 0x5f, 0xef, 0xd5, 0xe3, 0x39, 0xa6,
203 0x0b, 0x7a, 0x58, 0x9d, 0x75, 0x58, 0xc9, 0xd4, 0xb6, 0xad, 0x76, 0x1a,
204 0x3a, 0xaf, 0x73, 0xcc, 0x9d, 0x76, 0xa6, 0xad, 0xec, 0xcc, 0x3b, 0xe8,
205 0xcc, 0x7a, 0x14, 0x3e, 0x73, 0x6a, 0x19, 0xbe, 0x73, 0xe5, 0xed, 0x58,
206 0xf7, 0xcf, 0xe0, 0x87, 0x42, 0x16, 0x8d, 0xd2, 0x2f, 0x98, 0x14, 0xe5,
207 0x97, 0x8e, 0xc2, 0xff, 0x75, 0xf6, 0x29, 0x5b, 0xb4, 0x38, 0x3a, 0xee,
208 0xfb, 0x0b, 0xd6, 0x2c, 0xe4, 0x46, 0x71, 0x14, 0x36, 0x7d, 0x14, 0xf8,
209 0x72, 0x47, 0x30, 0x8e, 0xf0, 0xbc, 0x3b, 0x44, 0x9f, 0xf5, 0x99, 0xea,
210 0x2c, 0xde, 0xf7, 0xa1, 0xfd, 0xe7, 0x06, 0xce, 0x3e, 0xf4, 0xf9, 0x57,
211 0xa8, 0x63, 0x1b, 0xfb, 0x70, 0x8a, 0x1f, 0xe0, 0xfd, 0x41, 0xf4, 0x01,
212 0x4f, 0x81, 0x53, 0x6c, 0xf7, 0x30, 0x7e, 0x2f, 0xa3, 0xee, 0xdd, 0xa8,
213 0xbb, 0x8e, 0xba, 0x43, 0x78, 0xff, 0xe1, 0xae, 0x79, 0xdf, 0x81, 0xf7,
214 0xcf, 0xa1, 0x1d, 0xfb, 0x77, 0x5e, 0x44, 0xfb, 0x83, 0xf8, 0xfd, 0xc5,
215 0xae, 0x3e, 0x8d, 0x5d, 0xef, 0xbe, 0xbc, 0x79, 0xc9, 0xf0, 0xc0, 0x8e,
216 0x6f, 0x07, 0xfe, 0xb1, 0xa8, 0x8f, 0x0a, 0x15, 0xca, 0x9b, 0xb0, 0x3c,
217 0xb2, 0xe2, 0xcb, 0x1c, 0x91, 0x79, 0xc8, 0xfa, 0x42, 0x45, 0xbc, 0x6e,
218 0x19, 0x9e, 0xfc, 0x31, 0x64, 0xfa, 0x3c, 0xf0, 0x5a, 0x80, 0x7d, 0x71,
219 0x74, 0x25, 0x8c, 0xe7, 0x21, 0xc8, 0x3b, 0xc9, 0x74, 0x09, 0x79, 0x3e,
220 0x02, 0xd9, 0xd2, 0x0b, 0x9e, 0x57, 0x3e, 0x88, 0x3c, 0x0e, 0xb9, 0x34,
221 0x8b, 0xbe, 0xb3, 0xe8, 0xf3, 0xd1, 0xe6, 0xff, 0x31, 0xb4, 0xec, 0xc3,
222 0xf0, 0xec, 0x2e, 0x18, 0xc2, 0xe2, 0xae, 0x92, 0x1f, 0x5f, 0x98, 0x9e,
223 0x5b, 0x89, 0xc8, 0xf0, 0xaa, 0x9d, 0xa4, 0xb3, 0x3f, 0xb2, 0xca, 0x98,
224 0x84, 0x8c, 0x04, 0x85, 0xb2, 0x5f, 0xc6, 0x43, 0xb0, 0xd1, 0x02, 0xde,
225 0x30, 0x74, 0x94, 0x7a, 0x97, 0x2c, 0x60, 0xcb, 0x36, 0x77, 0x62, 0x13,
226 0x47, 0xda, 0xb1, 0x89, 0x21, 0xe8, 0x88, 0xd7, 0x83, 0x5a, 0x5e, 0x45,
227 0x40, 0x27, 0x6f, 0x01, 0xfe, 0x29, 0x5b, 0x42, 0xe0, 0x1f, 0x07, 0xbc,
228 0xf3, 0x26, 0xda, 0x6f, 0xd4, 0x5b, 0xa0, 0x77, 0xc8, 0x38, 0x9b, 0xf5,
229 0x2c, 0xd1, 0x96, 0x21, 0x0f, 0xe0, 0xbd, 0xd1, 0xc9, 0x6b, 0xe7, 0xb4,
230 0x8d, 0x75, 0x97, 0x6f, 0xf3, 0xa0, 0xa3, 0x69, 0x91, 0xf6, 0xfa, 0xe1,
231 0xd0, 0x9d, 0x7b, 0xfc, 0xa3, 0x5d, 0x7b, 0x0c, 0x4a, 0x72, 0x89, 0xf8,
232 0x8d, 0xa8, 0xbd, 0xfa, 0xf8, 0x2d, 0x2a, 0x5b, 0x7e, 0x1c, 0x3e, 0x89,
233 0x40, 0x9a, 0x2b, 0x5b, 0x14, 0x3a, 0xb1, 0x0f, 0xb2, 0x9e, 0x72, 0x9e,
234 0xf8, 0x0e, 0x03, 0x87, 0x11, 0xfc, 0x1c, 0xfc, 0x76, 0x70, 0x7a, 0xb2,
235 0xbd, 0x3f, 0x7f, 0x0f, 0xeb, 0x90, 0x55, 0x2c, 0x09, 0x3f, 0xf0, 0x71,
236 0x91, 0xcf, 0x90, 0xaf, 0x7d, 0x94, 0xb7, 0x3e, 0x4c, 0x8f, 0xed, 0x82,
237 0x89, 0xb8, 0x21, 0x4c, 0xf5, 0x16, 0x6c, 0x8b, 0x28, 0xa3, 0x60, 0xa7,
238 0x9b, 0xd4, 0x29, 0x5c, 0x73, 0x92, 0xf6, 0xb6, 0x81, 0x93, 0x7a, 0xc5,
239 0x93, 0x73, 0x95, 0xb7, 0x1b, 0xb8, 0x78, 0xbe, 0xb0, 0xf9, 0x96, 0xb8,
240 0x7e, 0x54, 0xe9, 0x1e, 0x0d, 0xd3, 0x6e, 0xfc, 0xd0, 0x3f, 0x27, 0x7e,
241 0xa8, 0x0f, 0x88, 0x4b, 0xda, 0xd4, 0xc4, 0xe7, 0xef, 0x00, 0x9f, 0xec,
242 0xeb, 0x1a, 0xdd, 0xf2, 0x2e, 0x03, 0xd7, 0xdd, 0xfa, 0xf8, 0xf4, 0x1d,
243 0xfa, 0xd8, 0xc7, 0xf1, 0x5e, 0x67, 0xf1, 0xfb, 0x7d, 0xbe, 0xcc, 0x1d,
244 0x5e, 0xdd, 0xab, 0x7d, 0xd9, 0xb4, 0xb3, 0xad, 0xb3, 0xfe, 0xdb, 0x7d,
245 0xfe, 0x19, 0x0e, 0x2f, 0xef, 0x6e, 0xeb, 0x3b, 0xb0, 0x33, 0x66, 0xf7,
246 0x7c, 0x3f, 0xee, 0xdb, 0xdb, 0xaf, 0xdd, 0xf1, 0xeb, 0xe0, 0xab, 0xd8,
247 0x3b, 0x7b, 0xc9, 0xda, 0xf3, 0xcd, 0x82, 0xad, 0xf7, 0xc2, 0x3e, 0x68,
248 0x6b, 0x6e, 0xf5, 0x07, 0x95, 0x6e, 0xcc, 0xda, 0xf4, 0x63, 0x4a, 0x6b,
249 0x7c, 0xbe, 0x07, 0x65, 0xe7, 0xd8, 0x21, 0xf0, 0x40, 0x16, 0x7d, 0x39,
250 0xc7, 0xee, 0xf1, 0xbe, 0x8d, 0x94, 0x96, 0x85, 0x5a, 0x08, 0xed, 0x89,
251 0x6c, 0x49, 0x1e, 0x86, 0xaf, 0x98, 0x98, 0xa2, 0xdf, 0x00, 0x7f, 0x79,
252 0x46, 0xe4, 0x98, 0x94, 0x6b, 0x1f, 0x94, 0x85, 0x95, 0x96, 0xbc, 0x1f,
253 0x7a, 0xf0, 0xf7, 0xa0, 0x47, 0xe5, 0x12, 0x84, 0xd7, 0x25, 0x1c, 0xc6,
254 0xa5, 0xa8, 0xd8, 0x4f, 0xc1, 0x96, 0xbf, 0x10, 0x93, 0xe0, 0x05, 0xd2,
255 0x5e, 0xca, 0x79, 0xbf, 0x48, 0xbf, 0x2d, 0x57, 0xe1, 0x08, 0x25, 0x26,
256 0xb3, 0x92, 0x82, 0xfd, 0x37, 0xe6, 0x34, 0x50, 0x96, 0x25, 0x35, 0xfa,
257 0xb4, 0xa0, 0xef, 0x25, 0xf4, 0xc5, 0xb8, 0x9e, 0x8d, 0x38, 0x7e, 0x83,
258 0xd2, 0xbb, 0x41, 0x18, 0x92, 0xa6, 0x24, 0x2c, 0x3f, 0x6c, 0xd1, 0xd7,
259 0x7d, 0x66, 0x33, 0x0c, 0xdd, 0x14, 0x97, 0xe7, 0x20, 0x67, 0x9f, 0x55,
260 0xf1, 0x17, 0xb7, 0xed, 0x8f, 0x3e, 0x7a, 0x18, 0x74, 0xb7, 0x2c, 0xe1,
261 0xa8, 0xf7, 0x73, 0x59, 0x59, 0x6e, 0xc1, 0xef, 0xa1, 0xac, 0x7f, 0x00,
262 0xf2, 0x2a, 0xf1, 0xa5, 0x12, 0x6d, 0x49, 0x37, 0x03, 0xd8, 0x4b, 0x32,
263 0x73, 0xf8, 0x5d, 0x03, 0x9a, 0x3e, 0x8e, 0x49, 0x70, 0xb9, 0x00, 0xfb,
264 0xf9, 0x8c, 0x2c, 0xa6, 0xe1, 0x9f, 0xda, 0xa5, 0x56, 0xc0, 0x75, 0x63,
265 0xd0, 0xdb, 0xd0, 0xa7, 0x2b, 0xf4, 0x87, 0xe5, 0xc8, 0x32, 0xfb, 0x9c,
266 0x01, 0x6d, 0x75, 0x01, 0x77, 0xdd, 0x72, 0x36, 0x9a, 0x28, 0xe5, 0xc1,
267 0x4f, 0xb6, 0xdb, 0x0f, 0x5e, 0x66, 0x49, 0xfd, 0xf6, 0x34, 0xe8, 0x87,
268 0xcf, 0x38, 0xce, 0x55, 0xd6, 0x27, 0x51, 0xb2, 0xde, 0x15, 0x7b, 0x29,
269 0x8c, 0xb9, 0xa0, 0x93, 0x2e, 0x97, 0xe4, 0x6c, 0xe6, 0x98, 0x34, 0x6a,
270 0xf0, 0xc9, 0x33, 0xb0, 0xa3, 0xea, 0x9e, 0x34, 0x2a, 0xb4, 0x9f, 0x4e,
271 0x81, 0x1f, 0x5e, 0x41, 0x39, 0x8f, 0xf2, 0x16, 0xca, 0x8f, 0xa3, 0x7c,
272 0x0d, 0x25, 0x61, 0x3f, 0x25, 0x8d, 0xfa, 0x55, 0xcc, 0xcd, 0x39, 0xa6,
273 0x0c, 0xcc, 0xf0, 0x21, 0x0f, 0x9f, 0x82, 0x9d, 0xe3, 0xd7, 0x9f, 0x12,
274 0x69, 0x7c, 0x0c, 0xbf, 0x96, 0x7a, 0xa7, 0x8f, 0xb9, 0x90, 0x99, 0x84,
275 0xbd, 0x2b, 0xd6, 0xd9, 0xcc, 0xc7, 0xcd, 0x3c, 0x1f, 0xc3, 0x7a, 0xd7,
276 0xb1, 0x76, 0x18, 0xe7, 0xd9, 0x92, 0x47, 0xd3, 0x67, 0xe4, 0x93, 0xe9,
277 0x7b, 0x65, 0x62, 0x20, 0x5c, 0x0a, 0x7b, 0xdc, 0x3f, 0xed, 0xda, 0xbd,
278 0xf6, 0xef, 0xef, 0x9b, 0x7b, 0x8e, 0x60, 0x2f, 0xfb, 0xb5, 0xed, 0x66,
279 0xff, 0x13, 0xe3, 0x73, 0x58, 0x92, 0x1c, 0xe1, 0x7c, 0x9e, 0x04, 0x96,
280 0x47, 0x9c, 0x8c, 0x3d, 0x06, 0xeb, 0x3d, 0x85, 0xdf, 0x19, 0xd0, 0x8a,
281 0x7b, 0x3e, 0x69, 0xff, 0x47, 0xc0, 0x84, 0xb6, 0x06, 0xd7, 0x11, 0x2b,
282 0x78, 0xe8, 0x26, 0xf6, 0x56, 0x92, 0xee, 0x43, 0x9e, 0xdc, 0x6e, 0xf2,
283 0x19, 0x92, 0xf2, 0xd2, 0x31, 0xf9, 0x71, 0xed, 0xba, 0x9c, 0xab, 0x1d,
284 0x93, 0x97, 0x51, 0x2e, 0xd6, 0x4a, 0xc0, 0x23, 0x7d, 0x46, 0xce, 0xd1,
285 0xc2, 0xb9, 0x50, 0x2e, 0xdf, 0x1f, 0x9b, 0xc7, 0xf9, 0xcd, 0x3a, 0x2d,
286 0xd9, 0x48, 0x97, 0x64, 0x63, 0x12, 0x63, 0xea, 0x3d, 0x12, 0xfa, 0x2a,
287 0xf7, 0xdb, 0x27, 0xf9, 0x5a, 0x49, 0x0a, 0x19, 0xfa, 0x34, 0xbd, 0x92,
288 0x87, 0x4d, 0x0e, 0x3b, 0xe8, 0x8c, 0x8e, 0xb3, 0xb9, 0xb1, 0x22, 0x6c,
289 0xf8, 0x85, 0xe6, 0xeb, 0x56, 0xa3, 0x6d, 0xff, 0x6f, 0x59, 0xcf, 0xc2,
290 0x76, 0xfd, 0x0e, 0xe4, 0xc6, 0x73, 0xb0, 0x09, 0x9f, 0xbd, 0x83, 0xc7,
291 0x48, 0x23, 0xd7, 0xac, 0x46, 0x7d, 0x94, 0x7c, 0x66, 0xf8, 0x01, 0x63,
292 0xe1, 0xe7, 0x34, 0x6a, 0xb7, 0x0c, 0xfd, 0x29, 0x5b, 0x00, 0xe7, 0x42,
293 0xbd, 0xf2, 0x77, 0xf0, 0xaf, 0x28, 0x77, 0x7c, 0xbd, 0xaf, 0xfd, 0x86,
294 0x3a, 0x60, 0xcd, 0x47, 0x13, 0x80, 0x4a, 0xa4, 0x5e, 0x2f, 0x28, 0x5c,
295 0xb9, 0xcb, 0x43, 0x52, 0xab, 0x12, 0xbf, 0x09, 0xc7, 0xb6, 0x95, 0x5d,
296 0x0b, 0xbc, 0xba, 0x38, 0x1f, 0xbf, 0x3d, 0x01, 0xff, 0xe1, 0x8c, 0x38,
297 0x13, 0xbd, 0xd8, 0x13, 0x9f, 0x45, 0x66, 0x2e, 0xff, 0x3a, 0x19, 0xd0,
298 0x05, 0xbf, 0x3e, 0x84, 0xb3, 0x8c, 0xc8, 0x59, 0xd8, 0xff, 0xe7, 0x40,
299 0x47, 0x9f, 0xaf, 0x0c, 0xc9, 0xf9, 0x4a, 0x1c, 0xfe, 0x16, 0xed, 0x94,
300 0xe5, 0xe9, 0xe4, 0x3a, 0xcb, 0x27, 0xa6, 0x53, 0x75, 0x96, 0x5f, 0x32,
301 0xfe, 0xe2, 0x97, 0x8d, 0x1f, 0xb9, 0x3e, 0xad, 0x7d, 0xb8, 0xaf, 0x4d,
302 0x8f, 0xaa, 0xb2, 0x39, 0xbd, 0x13, 0x3b, 0x09, 0x1b, 0xbd, 0x9d, 0xa1,
303 0x7e, 0x06, 0x8c, 0x12, 0x3c, 0x09, 0x7a, 0x9a, 0x87, 0xdc, 0xce, 0xc1,
304 0xf7, 0x38, 0x0b, 0x1f, 0xa4, 0xd8, 0x84, 0x4c, 0xf0, 0xd2, 0x28, 0xc5,
305 0xfc, 0xf9, 0x63, 0xbb, 0x18, 0xdf, 0xe4, 0x99, 0x19, 0xff, 0x2b, 0x4d,
306 0xff, 0xab, 0xf3, 0x8f, 0xf3, 0x81, 0x36, 0xa9, 0x2b, 0x7f, 0x09, 0x9f,
307 0x51, 0x82, 0xc5, 0x0c, 0xc7, 0xa6, 0xe9, 0xaf, 0xca, 0x36, 0xec, 0x83,
308 0xb0, 0xf7, 0x3d, 0x09, 0x3f, 0xd5, 0x6a, 0xbd, 0x0a, 0x59, 0x53, 0x82,
309 0xcf, 0x68, 0x5b, 0xa8, 0x5f, 0x67, 0x1b, 0xe5, 0xc8, 0x98, 0x73, 0x1b,
310 0x34, 0x97, 0x3d, 0x2e, 0xf2, 0x5d, 0xd4, 0x35, 0x56, 0x78, 0x06, 0xdf,
311 0xc7, 0x19, 0x98, 0x33, 0x51, 0x75, 0xec, 0x07, 0xfb, 0x3d, 0xca, 0x7d,
312 0x8c, 0x39, 0xdd, 0x18, 0x5f, 0x5f, 0xe7, 0x98, 0xc4, 0x24, 0xaf, 0x74,
313 0xbe, 0xbb, 0xae, 0xf7, 0x77, 0x34, 0x33, 0x2a, 0x57, 0x2b, 0x6a, 0x0e,
314 0xd0, 0xfa, 0xaf, 0x30, 0x66, 0x0b, 0x74, 0xcb, 0x18, 0x95, 0x27, 0x65,
315 0xe8, 0xa4, 0x72, 0x25, 0x05, 0xda, 0x09, 0xca, 0x6c, 0x8c, 0x60, 0xbb,
316 0xb2, 0x5d, 0xf9, 0x72, 0x97, 0x8e, 0x8f, 0xf0, 0x19, 0x3a, 0xac, 0x39,
317 0x23, 0xbc, 0x1b, 0x81, 0x7d, 0x83, 0x3d, 0x75, 0xe2, 0x42, 0xff, 0x15,
318 0x71, 0x16, 0x66, 0x8f, 0xea, 0x4f, 0xaf, 0x83, 0xf1, 0x66, 0x9d, 0x02,
319 0x14, 0x77, 0x1e, 0xeb, 0xa7, 0x2e, 0x05, 0x83, 0x8c, 0xa9, 0x27, 0x2f,
320 0x81, 0xad, 0x3c, 0x83, 0x8b, 0xa6, 0x4f, 0x6b, 0xbe, 0x2f, 0x4a, 0xda,
321 0x22, 0x0e, 0x12, 0xa5, 0x2d, 0x20, 0x7b, 0xc0, 0xbb, 0x21, 0x1f, 0x5a,
322 0xd5, 0x7b, 0xb6, 0x2f, 0x0a, 0xef, 0x5b, 0xe4, 0xf6, 0x4a, 0x22, 0x7d,
323 0x0b, 0xb2, 0x39, 0x1f, 0x4d, 0x83, 0x56, 0x3e, 0xd1, 0x05, 0x9e, 0x9e,
324 0xcc, 0xda, 0x3f, 0xe8, 0xd2, 0xb6, 0x20, 0x7c, 0x7e, 0xc6, 0x01, 0x2a,
325 0x59, 0x8c, 0xe9, 0x96, 0x7f, 0x11, 0xc4, 0x73, 0x93, 0xef, 0xb0, 0x73,
326 0x82, 0x1a, 0xbe, 0xb2, 0xc1, 0x21, 0xfc, 0x04, 0xd1, 0xb1, 0x5c, 0x4b,
327 0x3e, 0x04, 0x29, 0x2f, 0x98, 0x3f, 0x69, 0xd6, 0x4a, 0x5e, 0x0c, 0xb7,
328 0x6d, 0xba, 0xd4, 0xaa, 0x07, 0xdb, 0x22, 0x68, 0x7c, 0x22, 0xca, 0x18,
329 0xd9, 0xc3, 0xa6, 0xee, 0xb4, 0x8f, 0xc3, 0x2a, 0x5e, 0xc7, 0x7b, 0x24,
330 0xd2, 0xd6, 0x94, 0xa1, 0xad, 0x8f, 0x81, 0xb6, 0x4e, 0x29, 0xda, 0x6a,
331 0xc9, 0xab, 0xe9, 0xb4, 0x7c, 0x61, 0x4f, 0xfa, 0xda, 0xfd, 0x17, 0x01,
332 0xbc, 0xfc, 0x0d, 0xca, 0xc2, 0x17, 0xb1, 0x2e, 0xf4, 0x4e, 0xb9, 0x92,
333 0xc8, 0xce, 0xd2, 0x16, 0x82, 0x1e, 0x29, 0xc3, 0xe7, 0x4a, 0x5e, 0x1a,
334 0x52, 0x7d, 0x92, 0xd0, 0x29, 0x0d, 0xd0, 0x1b, 0xf1, 0x5b, 0xae, 0x40,
335 0x0e, 0x5f, 0x0a, 0x41, 0x6f, 0x91, 0x67, 0x65, 0xc0, 0x86, 0x6c, 0x60,
336 0xff, 0x06, 0x78, 0x27, 0x79, 0x29, 0x82, 0x32, 0xae, 0xe6, 0x6a, 0x54,
337 0x5c, 0x35, 0xbe, 0x51, 0x19, 0x55, 0xe3, 0x1a, 0xb0, 0x5f, 0x93, 0x97,
338 0x20, 0xdf, 0x33, 0x69, 0x19, 0xb9, 0x94, 0x91, 0xf8, 0x25, 0x4b, 0x8a,
339 0x33, 0xad, 0x56, 0x18, 0xb0, 0x8f, 0x5e, 0xea, 0x97, 0x5b, 0x2a, 0xb6,
340 0x1a, 0x56, 0xf1, 0xd6, 0xc5, 0xcc, 0x0c, 0x78, 0x93, 0xf8, 0xf3, 0x30,
341 0xa6, 0x00, 0xfd, 0x58, 0x90, 0xb3, 0x2b, 0xc4, 0x0f, 0xe3, 0xe5, 0xdb,
342 0xb1, 0x80, 0x24, 0x20, 0xcb, 0x8e, 0xcb, 0x7c, 0xad, 0x1b, 0xb2, 0x2c,
343 0x08, 0x1d, 0xf8, 0x50, 0xb7, 0xf4, 0x0e, 0x93, 0x1e, 0x80, 0x17, 0x0f,
344 0x73, 0x17, 0x24, 0x8f, 0x31, 0x85, 0x95, 0x9d, 0xfe, 0x45, 0xe9, 0x06,
345 0x4f, 0x1d, 0x97, 0x93, 0x35, 0xce, 0x13, 0x74, 0xca, 0x72, 0x10, 0x34,
346 0xe4, 0x3a, 0x47, 0x30, 0x0f, 0xf4, 0x76, 0xc7, 0x1f, 0xf9, 0x2f, 0xfb,
347 0x06, 0x34, 0xe9, 0xf3, 0x5d, 0xb8, 0xd4, 0xe5, 0xcd, 0x58, 0xdb, 0x19,
348 0x09, 0xce, 0x65, 0x3e, 0x60, 0x7d, 0x37, 0x93, 0xb1, 0xae, 0x65, 0xb2,
349 0xd6, 0xf5, 0x4c, 0xc1, 0xba, 0x01, 0xdd, 0xd4, 0xd8, 0x7c, 0x0e, 0xf4,
350 0x03, 0xdd, 0xcf, 0x98, 0x79, 0xfb, 0x0c, 0xa3, 0x26, 0x66, 0xf0, 0x9a,
351 0x6c, 0x54, 0x68, 0x3b, 0xb4, 0x1e, 0x9e, 0x4b, 0x97, 0xee, 0x01, 0x7c,
352 0x80, 0x83, 0xbe, 0xee, 0x8e, 0xee, 0x08, 0x79, 0xa3, 0xb2, 0xa6, 0x74,
353 0x47, 0x84, 0xba, 0x23, 0x9d, 0x97, 0xfd, 0xb2, 0x5d, 0x03, 0xff, 0x89,
354 0xb2, 0x83, 0x65, 0xbb, 0x1e, 0x95, 0x2f, 0x54, 0x7d, 0x5a, 0xe2, 0x7e,
355 0xcb, 0x6f, 0xea, 0x91, 0x80, 0x4c, 0x29, 0x7d, 0xdd, 0x27, 0x57, 0xd7,
356 0xe1, 0x0f, 0xc1, 0x5a, 0xb0, 0xef, 0x63, 0xac, 0xc0, 0x56, 0xbe, 0xb1,
357 0xf4, 0xf3, 0xee, 0xea, 0x2c, 0x70, 0xc5, 0xfb, 0x25, 0xec, 0xb3, 0x9f,
358 0x3b, 0xf2, 0xdf, 0xc7, 0xc1, 0x93, 0x7c, 0xb6, 0x24, 0x0f, 0xbb, 0x91,
359 0xf7, 0x5c, 0x79, 0xd8, 0x3d, 0xdb, 0x95, 0x31, 0xc0, 0x15, 0x80, 0x4d,
360 0x1e, 0x06, 0x1c, 0x55, 0xd5, 0xde, 0xed, 0x8a, 0x35, 0x07, 0x3d, 0x5c,
361 0x54, 0xf7, 0x57, 0x28, 0xd7, 0xf5, 0xda, 0x79, 0xf8, 0xab, 0xc5, 0xf1,
362 0x1e, 0xea, 0xb7, 0xd1, 0x12, 0xf9, 0x5e, 0xd9, 0xf1, 0x19, 0xf0, 0xdc,
363 0x57, 0xba, 0xa9, 0xdb, 0x8f, 0xa6, 0x27, 0xe5, 0x46, 0x85, 0xcf, 0x6c,
364 0x4f, 0xa4, 0x45, 0xc5, 0x8f, 0x2b, 0xd3, 0x8b, 0xee, 0x6b, 0x86, 0xc7,
365 0x6a, 0xa0, 0xf1, 0x53, 0xf2, 0x8d, 0xcd, 0x79, 0xf9, 0xf7, 0x9b, 0xb3,
366 0xb0, 0x4f, 0x4e, 0xc0, 0x3e, 0xf9, 0x08, 0x78, 0xf8, 0x38, 0x78, 0xf8,
367 0xe3, 0xa0, 0xfb, 0x19, 0x15, 0x77, 0xa8, 0x55, 0x12, 0x57, 0x4a, 0x2a,
368 0xce, 0xfd, 0x1a, 0x68, 0x7e, 0x42, 0x82, 0xab, 0x43, 0xc0, 0x6b, 0xa9,
369 0x15, 0x75, 0x5b, 0x0f, 0xc3, 0x06, 0xc1, 0x59, 0x97, 0x12, 0x41, 0x45,
370 0x23, 0xae, 0xf3, 0x69, 0xe0, 0xf2, 0x4d, 0x5e, 0xa2, 0xc6, 0x23, 0xde,
371 0xa8, 0x8d, 0x4a, 0xf1, 0x32, 0xfa, 0x2f, 0x47, 0x80, 0x37, 0xea, 0xc6,
372 0xc4, 0xf9, 0xa2, 0x6c, 0x81, 0x2e, 0xb2, 0xc0, 0xcf, 0x3b, 0xa4, 0x1c,
373 0x4d, 0x7c, 0x4d, 0x64, 0x52, 0x0e, 0x2d, 0x81, 0xa6, 0x97, 0x6c, 0xec,
374 0x99, 0xb8, 0xc4, 0xf3, 0x65, 0x4f, 0xec, 0x65, 0xca, 0xa2, 0x03, 0xc6,
375 0x37, 0xd1, 0xfa, 0xbe, 0x2e, 0x5c, 0x97, 0xeb, 0x7d, 0x46, 0xe6, 0xa1,
376 0x53, 0x61, 0x7f, 0x43, 0x66, 0xbb, 0x31, 0xac, 0x19, 0x9e, 0xbb, 0xec,
377 0x84, 0xe7, 0x2f, 0x73, 0x9e, 0xb0, 0x04, 0x96, 0x78, 0xb6, 0x9c, 0x07,
378 0x3c, 0x80, 0xb9, 0x53, 0x4b, 0xc4, 0xdb, 0x18, 0xc6, 0xfd, 0x63, 0xe8,
379 0x63, 0x4d, 0x57, 0xb9, 0x65, 0x2d, 0x1f, 0x72, 0x8d, 0x4e, 0x9d, 0x88,
380 0x33, 0x80, 0xfc, 0xc8, 0x36, 0xb4, 0x7e, 0x2b, 0x28, 0xfd, 0xa7, 0x75,
381 0xdf, 0x71, 0x81, 0x51, 0xd7, 0xeb, 0xaa, 0xfd, 0x04, 0x96, 0xb7, 0xa8,
382 0xef, 0xb1, 0x06, 0xc7, 0x84, 0x3a, 0xe0, 0xce, 0x40, 0xee, 0xdc, 0x1b,
383 0x26, 0xee, 0x1f, 0x83, 0x7e, 0x4d, 0x2e, 0xe9, 0x98, 0x7c, 0xf2, 0x72,
384 0x1a, 0xfb, 0x91, 0x41, 0x46, 0x17, 0x6c, 0xec, 0xe1, 0x7d, 0x4a, 0x7e,
385 0x4d, 0x40, 0x66, 0x39, 0xb2, 0x7e, 0x90, 0x67, 0x33, 0x28, 0x8d, 0xa7,
386 0xf9, 0xce, 0x33, 0xe2, 0x79, 0x93, 0x17, 0xa3, 0xd0, 0x2f, 0x38, 0xa7,
387 0xbe, 0x21, 0xa9, 0x6f, 0xb2, 0x6d, 0x48, 0xd1, 0x72, 0x10, 0x67, 0xb0,
388 0x58, 0x69, 0x3d, 0x9c, 0x4b, 0x97, 0x40, 0x6d, 0xc4, 0x39, 0xf1, 0x41,
389 0xbc, 0x8f, 0x03, 0x36, 0xe2, 0xb8, 0x8f, 0xba, 0x18, 0x75, 0xfb, 0xa5,
390 0x58, 0x23, 0x3d, 0xa3, 0xac, 0xef, 0x37, 0xbe, 0xde, 0x67, 0x78, 0x27,
391 0x84, 0xbd, 0x6b, 0x3a, 0x2e, 0x80, 0xa6, 0xca, 0xf0, 0xbb, 0xae, 0x2e,
392 0x49, 0xf8, 0x4d, 0x90, 0xcf, 0x9f, 0xa2, 0x0c, 0x05, 0x7d, 0x95, 0xd7,
393 0x27, 0x40, 0x6b, 0x7d, 0x90, 0x97, 0xad, 0xd6, 0x71, 0xd8, 0xc9, 0xa7,
394 0xd3, 0xc4, 0xd1, 0x4d, 0xe0, 0xa8, 0x3b, 0x76, 0x1a, 0xe7, 0xb5, 0xf6,
395 0xf4, 0x43, 0x4a, 0x5e, 0xc0, 0xd6, 0x51, 0x7a, 0x4b, 0xc7, 0x38, 0xd2,
396 0xb4, 0x8d, 0x14, 0x0f, 0xe7, 0x5c, 0xca, 0xc3, 0x3c, 0xf0, 0x30, 0xae,
397 0xe4, 0xb7, 0x96, 0x2d, 0x3d, 0x52, 0x3c, 0x9e, 0xc5, 0x7e, 0x27, 0x77,
398 0xf5, 0xcb, 0xe0, 0x1d, 0xb6, 0x5f, 0xf3, 0x43, 0x61, 0xc6, 0x43, 0x03,
399 0xde, 0xa4, 0x6c, 0x1c, 0x9c, 0x92, 0x8b, 0x07, 0x13, 0x93, 0xb3, 0x36,
400 0x75, 0xc2, 0x94, 0xd4, 0x9f, 0xce, 0xca, 0x5a, 0x55, 0xeb, 0xe6, 0x39,
401 0x77, 0x52, 0xf2, 0xcd, 0x02, 0xde, 0x3d, 0x94, 0xec, 0xef, 0xcb, 0x5d,
402 0x7f, 0x4f, 0x39, 0xee, 0x09, 0x32, 0x42, 0xeb, 0x5e, 0xdb, 0xee, 0xc6,
403 0xf9, 0x50, 0x2e, 0x7c, 0x10, 0xf5, 0x39, 0xc8, 0x36, 0x9e, 0x67, 0x0a,
404 0x67, 0x77, 0x4a, 0x9d, 0x53, 0x3e, 0x4d, 0x7f, 0x80, 0x63, 0x12, 0xb1,
405 0x39, 0xd4, 0xcf, 0x08, 0x75, 0x28, 0xf7, 0xe6, 0xcf, 0xe7, 0x19, 0xf8,
406 0x03, 0x8c, 0x31, 0xe1, 0xef, 0x33, 0x61, 0xf2, 0x64, 0xc0, 0xf5, 0xeb,
407 0xc7, 0xa0, 0x7f, 0x43, 0x6a, 0x8d, 0x72, 0x95, 0x75, 0x29, 0x87, 0xe3,
408 0xf3, 0x69, 0xbe, 0x8b, 0x3c, 0x66, 0xfc, 0xf2, 0xe3, 0xf0, 0x5b, 0xf3,
409 0xcd, 0xae, 0xdf, 0xa0, 0x7f, 0x77, 0x64, 0x9d, 0x96, 0xcb, 0xdb, 0x31,
410 0xc7, 0xc8, 0xde, 0x93, 0x35, 0xc6, 0xac, 0x2d, 0xe9, 0x82, 0x2c, 0x3d,
411 0x2a, 0xc3, 0x46, 0x8e, 0x72, 0x3f, 0x7d, 0x4a, 0xd7, 0xe5, 0x67, 0x62,
412 0x72, 0x6e, 0xed, 0xff, 0x85, 0xae, 0x7f, 0xbd, 0x5d, 0x57, 0xd8, 0xc3,
413 0xae, 0xbb, 0x79, 0x19, 0xf2, 0xa0, 0x0a, 0x59, 0x51, 0x85, 0xac, 0xa8,
414 0x42, 0x56, 0x54, 0x21, 0x2b, 0xaa, 0x90, 0x15, 0x55, 0xc8, 0x8a, 0xea,
415 0x8c, 0xd1, 0x9b, 0xa7, 0x21, 0x73, 0xe9, 0xf3, 0xd0, 0xcf, 0xe9, 0xb4,
416 0x05, 0xe2, 0x90, 0x25, 0xf4, 0x67, 0x12, 0xa5, 0x5b, 0xc0, 0xcd, 0xd7,
417 0xd3, 0xf4, 0xb9, 0x5b, 0xf2, 0x57, 0xe9, 0xce, 0xdd, 0xab, 0xf8, 0x86,
418 0x3c, 0x0a, 0x7c, 0x7d, 0x08, 0xf8, 0xfa, 0xf0, 0x5d, 0x39, 0x16, 0x7e,
419 0x4c, 0x64, 0xb8, 0x14, 0x80, 0xff, 0x39, 0x73, 0x07, 0xee, 0xe8, 0x7b,
420 0x63, 0x8d, 0xbb, 0x6c, 0x63, 0xfa, 0xdc, 0xa3, 0xea, 0xde, 0x7c, 0x03,
421 0x76, 0xf9, 0x8d, 0x74, 0x29, 0x12, 0x50, 0xf7, 0x73, 0x2e, 0x69, 0x67,
422 0x8f, 0xbf, 0x6f, 0x84, 0xb5, 0x5c, 0xd4, 0x67, 0x9f, 0xcf, 0xf4, 0x81,
423 0x0f, 0x68, 0xdf, 0xdd, 0x50, 0xf6, 0xdd, 0xd1, 0x74, 0x50, 0xb6, 0xa2,
424 0xd4, 0xa9, 0x3f, 0x92, 0x93, 0x2b, 0x91, 0x1e, 0xfa, 0xdf, 0x8b, 0xd5,
425 0x83, 0xb2, 0xad, 0x64, 0xca, 0x07, 0xd1, 0xd7, 0x93, 0x79, 0xd0, 0xc4,
426 0x11, 0xf8, 0x8e, 0x17, 0x65, 0x2c, 0x76, 0x11, 0x7b, 0xfd, 0x3c, 0xc6,
427 0xc0, 0x07, 0x68, 0x15, 0x50, 0x77, 0x1d, 0x7e, 0xc6, 0x6d, 0xe1, 0xf3,
428 0x98, 0x73, 0x1e, 0x88, 0xce, 0x3a, 0x29, 0xe7, 0x35, 0xf1, 0xe9, 0x8c,
429 0x34, 0xc5, 0xbb, 0xb6, 0x41, 0xc9, 0xaf, 0xd3, 0x2f, 0xeb, 0x03, 0x1f,
430 0xfe, 0x08, 0x7a, 0x98, 0x6b, 0x50, 0x2e, 0x70, 0x0f, 0xff, 0x0d, 0xf0,
431 0xc5, 0x67, 0xbb, 0xbd, 0xfb, 0xa1, 0x7b, 0x29, 0xf7, 0xb5, 0xef, 0x94,
432 0xc7, 0x18, 0xa5, 0x1b, 0xd2, 0xbc, 0x77, 0xe0, 0xfe, 0xfe, 0x18, 0x76,
433 0x4e, 0x14, 0x74, 0x80, 0xfa, 0x75, 0xdf, 0xce, 0xf5, 0xed, 0x19, 0x1d,
434 0xeb, 0xbb, 0xa2, 0x6c, 0x9a, 0x1c, 0xf4, 0xd8, 0x31, 0xf4, 0x65, 0xac,
435 0xbd, 0xd5, 0x3a, 0x95, 0x86, 0xdf, 0xf1, 0x24, 0x65, 0xd9, 0x7d, 0xe0,
436 0x69, 0xda, 0x45, 0xd4, 0xb9, 0x62, 0xdd, 0xcc, 0x6c, 0x3b, 0x61, 0xe8,
437 0xcb, 0x19, 0xd0, 0x5c, 0x0e, 0x74, 0x18, 0x78, 0x60, 0x0a, 0xfa, 0x57,
438 0xc5, 0x9c, 0x41, 0xeb, 0x5c, 0xf7, 0x83, 0xd6, 0x5f, 0x64, 0xc6, 0xa1,
439 0x8f, 0x1f, 0x82, 0x3e, 0xe6, 0x7d, 0x74, 0x0e, 0x3a, 0x99, 0xfa, 0xd8,
440 0x91, 0x3f, 0xdd, 0xcc, 0x41, 0x76, 0xdd, 0xd7, 0x43, 0x5e, 0x9b, 0x6a,
441 0xf3, 0x54, 0xc1, 0xf0, 0xdc, 0x01, 0x13, 0xfb, 0x28, 0x28, 0xde, 0x2c,
442 0xaf, 0xd3, 0x0e, 0x01, 0x9f, 0xae, 0x53, 0x46, 0xd0, 0xa6, 0xa4, 0xec,
443 0x80, 0xac, 0x59, 0xff, 0x00, 0xca, 0x29, 0x94, 0xda, 0x56, 0xbb, 0x52,
444 0x7d, 0x35, 0xec, 0xdf, 0x23, 0xef, 0xd8, 0x6b, 0x75, 0xec, 0xef, 0x18,
445 0x73, 0x1b, 0x4a, 0xfd, 0xde, 0x47, 0xb0, 0xc7, 0xe3, 0xa0, 0xc1, 0x19,
446 0xd0, 0xe0, 0x14, 0xf6, 0x7a, 0xde, 0x1a, 0x39, 0x1c, 0x80, 0x3e, 0x3f,
447 0x23, 0x85, 0x34, 0x64, 0xee, 0x5a, 0xc9, 0x9a, 0x58, 0x12, 0xf5, 0x9e,
448 0x4f, 0xf3, 0x4e, 0xfd, 0xbd, 0x2a, 0x3e, 0xb8, 0xbc, 0x19, 0x34, 0x71,
449 0xc4, 0x20, 0xea, 0xa8, 0xc3, 0x21, 0xb3, 0x1c, 0xcc, 0x55, 0xfd, 0x59,
450 0xaf, 0xf4, 0x62, 0xbe, 0xea, 0x34, 0xde, 0x19, 0x5b, 0x38, 0x66, 0xdd,
451 0x59, 0xcf, 0xd8, 0x45, 0xc2, 0xc9, 0xc1, 0x17, 0x0d, 0xba, 0x8c, 0x5f,
452 0xb8, 0x38, 0x9f, 0xac, 0xe4, 0x47, 0x60, 0x93, 0x29, 0x99, 0xdc, 0x6b,
453 0x64, 0x32, 0xe4, 0x5d, 0xcd, 0x93, 0xb5, 0x4d, 0xda, 0x4e, 0x9e, 0xf2,
454 0xa7, 0x29, 0xc7, 0x8a, 0x35, 0xd8, 0x3f, 0xe9, 0xdf, 0xb3, 0xb2, 0x6a,
455 0xce, 0xb0, 0xca, 0xd5, 0x28, 0xad, 0x89, 0xe5, 0x1c, 0xbe, 0x09, 0xff,
456 0x35, 0x03, 0x1e, 0xf6, 0x20, 0x37, 0x1d, 0xc8, 0x45, 0xea, 0xb5, 0xaf,
457 0x76, 0x4b, 0x1f, 0xea, 0x2f, 0xc3, 0xe6, 0x79, 0x92, 0x7c, 0x7b, 0x5d,
458 0xec, 0xc6, 0x1b, 0xc5, 0x47, 0x18, 0x1b, 0x19, 0x32, 0x77, 0xb3, 0xff,
459 0x0b, 0xf0, 0xea, 0x35, 0x42, 0xb0, 0xeb, 0xaf, 0xd6, 0xf6, 0xc1, 0x47,
460 0x3c, 0x66, 0xe5, 0xa3, 0xac, 0x2b, 0xc9, 0x7a, 0x86, 0x76, 0x28, 0x63,
461 0x24, 0x61, 0xd4, 0xef, 0xf6, 0x49, 0xa9, 0xff, 0x9f, 0x53, 0x77, 0x34,
462 0x0b, 0x4a, 0xee, 0xfa, 0xf1, 0xe5, 0xe7, 0x24, 0xd9, 0xf4, 0xe3, 0x54,
463 0x5c, 0x7f, 0xcb, 0x2a, 0x36, 0xff, 0x1c, 0xeb, 0x10, 0x06, 0xee, 0x45,
464 0xaf, 0x63, 0x2f, 0x4f, 0x98, 0x75, 0x1c, 0x2b, 0x74, 0x38, 0x86, 0xfd,
465 0xec, 0xef, 0x93, 0xbe, 0x00, 0xe4, 0xd9, 0x28, 0x9e, 0x6f, 0xa1, 0x6e,
466 0xe7, 0xbd, 0x51, 0x15, 0x2b, 0x70, 0x18, 0xde, 0x33, 0xf4, 0x77, 0x03,
467 0x32, 0xc7, 0x86, 0xfe, 0x6c, 0x54, 0x3f, 0x8e, 0x12, 0xe3, 0x9e, 0xbc,
468 0x2e, 0x73, 0xda, 0xdf, 0x86, 0x4d, 0x39, 0xac, 0x74, 0xf0, 0x4c, 0x9a,
469 0xb1, 0x90, 0x33, 0x90, 0x8f, 0xf7, 0xa3, 0x8e, 0x7e, 0x53, 0x49, 0x9c,
470 0xf7, 0x14, 0x8c, 0xbf, 0xaf, 0xcf, 0x25, 0xa0, 0xf4, 0xf5, 0x0a, 0xce,
471 0x83, 0x73, 0x50, 0xdf, 0xfd, 0x5c, 0x3e, 0xd5, 0x11, 0x47, 0xc9, 0xd9,
472 0xed, 0xb8, 0x41, 0x36, 0x0f, 0x1d, 0xbd, 0x56, 0x25, 0x0f, 0x66, 0x70,
473 0xde, 0x59, 0xf9, 0xda, 0xe6, 0x3d, 0xc0, 0x75, 0x54, 0x02, 0x4f, 0xb5,
474 0x40, 0x3f, 0xd4, 0x0d, 0x63, 0x90, 0xc9, 0x8e, 0xb1, 0x25, 0xa2, 0x12,
475 0x7c, 0x6a, 0x48, 0xba, 0x2f, 0xc4, 0xa4, 0xeb, 0x02, 0xf3, 0x4f, 0x52,
476 0x71, 0xd8, 0xc5, 0xb4, 0x87, 0x78, 0x0f, 0xc9, 0xfb, 0xc3, 0xb8, 0xbe,
477 0x8f, 0xe4, 0x5d, 0x24, 0xfa, 0xc1, 0x76, 0xef, 0xba, 0xe4, 0x00, 0x3f,
478 0x7a, 0xce, 0xdd, 0x63, 0xcb, 0x7a, 0x2c, 0xef, 0x31, 0x63, 0x25, 0x49,
479 0x99, 0x7b, 0xcc, 0x14, 0xc6, 0xa6, 0x26, 0x5f, 0x6e, 0x8f, 0xe7, 0x58,
480 0xea, 0xc4, 0x28, 0xf8, 0xfb, 0xad, 0xd2, 0xf8, 0x22, 0xf9, 0xdc, 0xbf,
481 0xeb, 0x1a, 0x32, 0x77, 0x5f, 0xec, 0x13, 0x37, 0xed, 0x49, 0xd3, 0xee,
482 0x2a, 0x3d, 0x19, 0x6c, 0xc7, 0x5b, 0x78, 0x2f, 0x96, 0x38, 0xcf, 0xe4,
483 0x11, 0x7d, 0x47, 0x46, 0x5f, 0x0a, 0xbe, 0xc5, 0x93, 0xb0, 0x31, 0xeb,
484 0x2c, 0x7b, 0xa4, 0x5c, 0x3f, 0x25, 0xb3, 0xea, 0xf9, 0x43, 0xf2, 0xa8,
485 0x43, 0xdc, 0x9d, 0x91, 0xf4, 0x84, 0xb6, 0xc7, 0xc4, 0xd6, 0xb8, 0xed,
486 0x76, 0xcf, 0xc8, 0xd1, 0xb4, 0xd2, 0x21, 0xce, 0x23, 0xc0, 0x71, 0xb1,
487 0xd9, 0x45, 0x7a, 0x07, 0xec, 0x1e, 0x78, 0x2c, 0x2b, 0x17, 0x37, 0xd1,
488 0x17, 0x67, 0xf5, 0x08, 0xdf, 0xeb, 0xc0, 0x27, 0x63, 0x16, 0x4f, 0x11,
489 0x9f, 0xdc, 0x3b, 0x75, 0x28, 0x71, 0x4a, 0x1c, 0x50, 0x2f, 0x33, 0xe6,
490 0x96, 0x98, 0xbc, 0x2d, 0xf4, 0x9b, 0x89, 0x33, 0xce, 0xe3, 0xef, 0x5b,
491 0x8f, 0xb3, 0x37, 0x06, 0x85, 0xe6, 0x98, 0x7d, 0xc1, 0x11, 0xfb, 0x12,
492 0xcb, 0x08, 0x4a, 0xb6, 0x01, 0xa4, 0x8d, 0xa4, 0x69, 0x73, 0x51, 0x07,
493 0x3b, 0xf2, 0x09, 0xf2, 0x96, 0xce, 0xff, 0x4b, 0x8e, 0x4c, 0xca, 0x95,
494 0xb5, 0xbb, 0xf9, 0x2b, 0x70, 0x41, 0xdb, 0x25, 0x77, 0xf2, 0xd7, 0xe4,
495 0x3f, 0x80, 0xbf, 0xb8, 0xc6, 0x19, 0x95, 0xbb, 0xf0, 0xa9, 0x68, 0x22,
496 0x9e, 0xd5, 0xfe, 0x85, 0x93, 0xb2, 0x47, 0xe2, 0xb4, 0x47, 0x1b, 0x4f,
497 0x8e, 0xe3, 0xdc, 0x5b, 0xf2, 0x44, 0xda, 0xa7, 0x2f, 0xe6, 0xf8, 0xb5,
498 0xa4, 0x06, 0xfd, 0x5c, 0x76, 0x2d, 0x59, 0x70, 0xcf, 0x28, 0x7b, 0xf2,
499 0xc3, 0xd1, 0x96, 0x9c, 0x4e, 0xeb, 0xb1, 0x0b, 0x32, 0x62, 0x68, 0x5c,
500 0xf9, 0x6b, 0x90, 0xbf, 0x3c, 0x2f, 0xbe, 0xdf, 0x23, 0xe9, 0x81, 0x33,
501 0x92, 0x9c, 0xd8, 0x22, 0xbe, 0x70, 0x0e, 0x94, 0x3b, 0xbf, 0x36, 0x16,
502 0xa6, 0x72, 0x9e, 0xf2, 0x15, 0xc2, 0xb4, 0x0f, 0x74, 0x9b, 0x85, 0xbf,
503 0xb4, 0x13, 0x0f, 0x4b, 0x8d, 0x94, 0x5a, 0x21, 0xac, 0x5d, 0x84, 0x3f,
504 0xf1, 0xe1, 0xa8, 0x1b, 0x1f, 0xb6, 0x47, 0x62, 0x67, 0xa5, 0xa6, 0x60,
505 0xfd, 0x44, 0x5a, 0xd3, 0xcb, 0x62, 0x66, 0xaf, 0x18, 0x55, 0x67, 0x8c,
506 0x9a, 0x73, 0x6d, 0x59, 0x9f, 0x6c, 0xea, 0x78, 0xd4, 0x4e, 0x9c, 0x7a,
507 0x47, 0xe6, 0x04, 0x8d, 0x2c, 0x28, 0xd7, 0xde, 0x25, 0xbe, 0xcc, 0xa9,
508 0x65, 0x70, 0x56, 0xcb, 0x3c, 0xa3, 0xb8, 0xb9, 0x47, 0x0a, 0x77, 0xd8,
509 0xca, 0x21, 0xe6, 0xfd, 0xc5, 0xb3, 0xf6, 0x32, 0x64, 0xc3, 0x93, 0x12,
510 0x72, 0xfd, 0xb9, 0x98, 0xd3, 0x19, 0x33, 0xf7, 0x11, 0xfb, 0x19, 0xb7,
511 0x42, 0x9f, 0x07, 0xd1, 0x7e, 0x3f, 0xfa, 0x51, 0x57, 0xf2, 0x1e, 0x80,
512 0x7a, 0x93, 0xb1, 0xf6, 0x01, 0xf4, 0xeb, 0x91, 0x7c, 0x7d, 0xbf, 0xa9,
513 0xf3, 0xe7, 0x38, 0xdc, 0xd1, 0xdf, 0xaf, 0xd3, 0xf7, 0x07, 0x59, 0x1b,
514 0x32, 0x7e, 0x99, 0x7d, 0xe3, 0xed, 0x3b, 0x10, 0xbb, 0xf1, 0xa0, 0xa3,
515 0xc7, 0xb3, 0x1f, 0x65, 0x3e, 0x74, 0x4b, 0x15, 0xfa, 0xa6, 0x3a, 0xc5,
516 0xbb, 0x40, 0x63, 0x57, 0xcc, 0x9a, 0x7c, 0x16, 0xda, 0x17, 0xaf, 0x19,
517 0x7d, 0xbb, 0x93, 0x8b, 0x7a, 0x24, 0xe3, 0xe7, 0xf5, 0x30, 0x17, 0x91,
518 0xeb, 0xf2, 0x3c, 0x40, 0x53, 0x9b, 0xda, 0x96, 0xb6, 0x33, 0x5d, 0xbc,
519 0x6b, 0x83, 0x7e, 0xd7, 0xfa, 0xbf, 0x01, 0xfd, 0xbf, 0xb1, 0x02, 0x9d,
520 0xdf, 0x47, 0xdd, 0xaf, 0xf3, 0x4f, 0xec, 0x76, 0xbe, 0x8f, 0x7f, 0x8f,
521 0xbc, 0xa5, 0xee, 0xf1, 0x7a, 0x3c, 0xca, 0xf4, 0x8c, 0xfc, 0x39, 0x6c,
522 0xad, 0x67, 0x36, 0x27, 0xb1, 0x5e, 0x1a, 0x7e, 0xdd, 0x38, 0xfc, 0xba,
523 0x51, 0xf8, 0x75, 0x2e, 0x74, 0xe1, 0x90, 0xca, 0x27, 0xa3, 0xde, 0x9f,
524 0x38, 0x24, 0xd6, 0xd7, 0x32, 0x62, 0x1d, 0xbc, 0x00, 0x1b, 0x61, 0xe9,
525 0x25, 0xd0, 0x7f, 0xe2, 0x79, 0x11, 0xf2, 0x04, 0xf9, 0xef, 0x31, 0xc9,
526 0xc6, 0x86, 0xe4, 0xf3, 0x9b, 0x6c, 0x23, 0x3d, 0x65, 0xe5, 0x15, 0xf7,
527 0x25, 0xc5, 0x67, 0x17, 0x6b, 0xd7, 0x25, 0xf4, 0x84, 0x96, 0xb5, 0x3f,
528 0x80, 0x3d, 0xd5, 0x48, 0x6b, 0xda, 0xbb, 0x2d, 0xa4, 0x3d, 0xe8, 0xa7,
529 0x35, 0xca, 0xd8, 0x9b, 0x12, 0xbd, 0xf0, 0x92, 0xbc, 0xf9, 0x82, 0xab,
530 0xe2, 0x12, 0x6b, 0x4f, 0x2a, 0xdd, 0x07, 0xb9, 0x16, 0x95, 0xf5, 0xcd,
531 0xdf, 0x91, 0x4f, 0x39, 0x89, 0x2b, 0x94, 0x99, 0x94, 0x5d, 0x5a, 0xa7,
532 0x41, 0xc6, 0x56, 0x12, 0xa5, 0x32, 0x6c, 0xef, 0x2b, 0xf6, 0x98, 0x64,
533 0x83, 0xa5, 0x56, 0x3f, 0xfd, 0x82, 0x9a, 0xeb, 0x24, 0x6d, 0x9e, 0xef,
534 0xbd, 0xb0, 0xad, 0x13, 0x75, 0x25, 0xa3, 0xa8, 0x27, 0x33, 0xd4, 0x9b,
535 0xd4, 0x7d, 0xd4, 0x3f, 0x8c, 0x97, 0xe3, 0x79, 0x8d, 0xba, 0xe9, 0xef,
536 0xd4, 0x9d, 0x67, 0x71, 0xc6, 0x91, 0xfa, 0x1a, 0xe5, 0x13, 0xf4, 0xfc,
537 0x93, 0xb4, 0x73, 0x45, 0xd1, 0x3f, 0xed, 0xdc, 0x47, 0xc5, 0xb7, 0x71,
538 0xd9, 0xb6, 0xdb, 0xc6, 0xfd, 0x83, 0x7d, 0xd2, 0x1b, 0x05, 0x7e, 0xc8,
539 0xff, 0x3b, 0x36, 0x60, 0x2e, 0x73, 0x13, 0xb6, 0x26, 0xf7, 0x61, 0xc9,
540 0xa0, 0x7b, 0x1d, 0x74, 0xc4, 0xb5, 0x6f, 0xb6, 0x3e, 0x1c, 0xe5, 0x1e,
541 0x2c, 0x65, 0x23, 0x6c, 0x0f, 0xfe, 0xa6, 0x3b, 0x0a, 0xca, 0x88, 0x7d,
542 0xb0, 0xcd, 0x6d, 0x43, 0xb3, 0x9f, 0x34, 0xbe, 0x04, 0xf8, 0x79, 0x95,
543 0x7b, 0x28, 0xf3, 0x4e, 0x04, 0x36, 0xd7, 0x22, 0x63, 0x52, 0x6a, 0xdd,
544 0xf7, 0x67, 0x22, 0x92, 0xbc, 0xd0, 0x25, 0xa9, 0xa7, 0xec, 0x41, 0x9d,
545 0xb7, 0xf8, 0x30, 0x74, 0xcf, 0x41, 0xb4, 0x1f, 0x90, 0xb2, 0x13, 0x85,
546 0x3f, 0x33, 0x2a, 0xe5, 0xd1, 0x30, 0x78, 0xe6, 0x01, 0xde, 0x75, 0x28,
547 0x38, 0xca, 0xce, 0x30, 0xca, 0x6e, 0x94, 0xf7, 0x48, 0xf9, 0xc9, 0x4b,
548 0xfb, 0xb4, 0x2d, 0xbb, 0xfb, 0xfd, 0x9f, 0x76, 0xab, 0xd8, 0xb9, 0xf5,
549 0x8e, 0x88, 0xb9, 0x47, 0xff, 0x2d, 0x60, 0xf7, 0xfb, 0x12, 0x9e, 0x90,
550 0xb8, 0x4f, 0x44, 0x64, 0x18, 0xb2, 0x77, 0x04, 0x7a, 0xeb, 0xe0, 0x85,
551 0x21, 0x19, 0xbd, 0x10, 0x97, 0xfb, 0x2e, 0xf8, 0xf6, 0xc0, 0xf2, 0x74,
552 0xca, 0xc4, 0x71, 0xdd, 0xdf, 0x32, 0x8e, 0x7b, 0x9f, 0x9a, 0x1f, 0x30,
553 0xae, 0x41, 0x1e, 0x46, 0x3f, 0xa7, 0xec, 0x06, 0x8d, 0xfb, 0x1f, 0xc9,
554 0x91, 0x95, 0x90, 0x1c, 0x55, 0xbc, 0xe8, 0xdb, 0xf0, 0xff, 0x13, 0xfb,
555 0x48, 0x80, 0x47, 0x4e, 0x18, 0xbf, 0xb3, 0x17, 0x78, 0x25, 0x0e, 0xa1,
556 0xeb, 0xe0, 0x8b, 0x32, 0x3f, 0xb5, 0x98, 0xee, 0x1c, 0xcf, 0xb1, 0x3f,
557 0xc5, 0x98, 0x2c, 0x6c, 0x0b, 0xb6, 0xcb, 0x60, 0x40, 0xf6, 0x6a, 0x7f,
558 0x1f, 0xda, 0x29, 0x73, 0x8e, 0x42, 0xe6, 0xec, 0x6e, 0xcf, 0xa1, 0x8d,
559 0xeb, 0xdf, 0x83, 0x75, 0xc9, 0x8f, 0x5c, 0xd7, 0xc7, 0x09, 0xcf, 0x75,
560 0x10, 0xfe, 0x07, 0xcf, 0xb5, 0x4b, 0x0a, 0x0e, 0x73, 0x37, 0x59, 0xf7,
561 0x16, 0x73, 0xd6, 0x13, 0xe6, 0xac, 0x05, 0xb6, 0x31, 0xed, 0x2d, 0x9d,
562 0xaf, 0x50, 0x88, 0x26, 0x4a, 0x22, 0x71, 0x15, 0xbf, 0x5b, 0xaf, 0xf8,
563 0xf6, 0x49, 0xb6, 0x9f, 0xf7, 0x10, 0x8b, 0x69, 0x15, 0x5b, 0x8b, 0x07,
564 0x3c, 0xda, 0x37, 0xe9, 0x30, 0xf3, 0x92, 0x1b, 0x2b, 0xbc, 0x93, 0x0c,
565 0xe0, 0x07, 0x3c, 0x07, 0x2d, 0x71, 0x5c, 0xd6, 0x95, 0xb4, 0x6e, 0x9b,
566 0x01, 0xff, 0xda, 0xaa, 0x4f, 0x3c, 0x97, 0x1e, 0x34, 0xef, 0x31, 0x59,
567 0xab, 0xbc, 0x63, 0xc8, 0xf6, 0xfe, 0xf6, 0x9e, 0x5c, 0xa6, 0x9f, 0xf7,
568 0x49, 0xa8, 0x23, 0x9f, 0xbc, 0xa4, 0x72, 0x15, 0xb5, 0xef, 0x10, 0xe4,
569 0x3d, 0x24, 0xf6, 0xf9, 0x53, 0xd0, 0xf5, 0xee, 0x3d, 0x77, 0x99, 0x3d,
570 0x73, 0xbf, 0xc4, 0x37, 0xc7, 0xfb, 0x7a, 0x8e, 0x38, 0x0f, 0x77, 0xf8,
571 0x1b, 0x91, 0x81, 0x9d, 0xfb, 0x73, 0xca, 0x42, 0xca, 0xbf, 0x49, 0x95,
572 0xef, 0x72, 0xcb, 0x86, 0x1c, 0xaa, 0x42, 0x2e, 0x55, 0x21, 0x8b, 0xaa,
573 0x90, 0x45, 0xb0, 0x41, 0x9e, 0x85, 0x5c, 0x7d, 0x06, 0xbe, 0xda, 0xd7,
574 0xab, 0xbe, 0xfd, 0x9e, 0x85, 0x1c, 0x53, 0x36, 0x1d, 0xed, 0x9f, 0x9a,
575 0xed, 0x75, 0xff, 0xd6, 0xf9, 0x50, 0x01, 0xcf, 0x1f, 0xd7, 0x2d, 0x45,
576 0x35, 0x26, 0x2e, 0xf3, 0xcd, 0xbd, 0xfa, 0x72, 0x7f, 0xa1, 0x8e, 0xfd,
577 0x9a, 0xbb, 0x7e, 0x15, 0x8b, 0xa0, 0x0c, 0xfe, 0x4d, 0x3c, 0xd0, 0x99,
578 0xa7, 0xc9, 0x33, 0x56, 0x39, 0x42, 0x38, 0x53, 0xe2, 0x9d, 0x76, 0x61,
579 0x59, 0x16, 0x26, 0x17, 0xa5, 0x3c, 0x69, 0xc9, 0xdc, 0x38, 0xce, 0x68,
580 0x7c, 0x18, 0x3a, 0x32, 0x0d, 0x5d, 0xbb, 0x80, 0x79, 0xc8, 0x7f, 0x0f,
581 0xe2, 0x5c, 0x1c, 0x73, 0x27, 0xfe, 0xa5, 0xe9, 0x5c, 0x4d, 0xac, 0x6b,
582 0x2a, 0x47, 0x7c, 0x79, 0xfa, 0xd5, 0x95, 0x87, 0x61, 0x3f, 0x4d, 0xc8,
583 0xd5, 0xc9, 0x87, 0x65, 0xfb, 0x8e, 0xf1, 0x38, 0x07, 0xc8, 0xe1, 0xcf,
584 0x6f, 0xf2, 0x1e, 0xb4, 0x4b, 0x66, 0xa3, 0x8c, 0x81, 0xc1, 0xc6, 0x71,
585 0xfb, 0x65, 0x5b, 0xf9, 0xa1, 0x07, 0xe4, 0xb6, 0xa2, 0x2d, 0xd6, 0x85,
586 0x50, 0xa7, 0xed, 0xd1, 0xb5, 0x8a, 0x6f, 0x5b, 0x28, 0x1c, 0x99, 0x98,
587 0x1f, 0xf5, 0x0d, 0xe3, 0x49, 0x8c, 0x2f, 0xad, 0x45, 0x76, 0x64, 0x01,
588 0x4b, 0xff, 0x5c, 0x3b, 0xfd, 0xe3, 0xbf, 0x8e, 0xe8, 0x6f, 0x0b, 0xba,
589 0xa4, 0x1c, 0x2d, 0xb5, 0xca, 0x6e, 0xd0, 0xba, 0xda, 0xce, 0x69, 0xf5,
590 0xdb, 0x48, 0xcb, 0x36, 0x60, 0x25, 0x1d, 0x24, 0x55, 0xee, 0xce, 0x77,
591 0xaa, 0x03, 0xfb, 0xf4, 0x37, 0x0a, 0x01, 0x8c, 0xe3, 0xfb, 0x89, 0x88,
592 0x7e, 0xf7, 0xef, 0xdd, 0xdf, 0x86, 0xbe, 0x31, 0x25, 0xaf, 0xd6, 0x6a,
593 0x01, 0xf0, 0xf0, 0x20, 0x9e, 0x5f, 0x44, 0x9f, 0x30, 0xce, 0x86, 0xb1,
594 0xa4, 0xb7, 0xa8, 0xfc, 0x9b, 0x80, 0xeb, 0xe7, 0xf5, 0x52, 0x77, 0xff,
595 0x67, 0xd5, 0xfe, 0xf4, 0x4a, 0x37, 0xf3, 0x55, 0x51, 0x52, 0xaf, 0xff,
596 0x0a, 0xbe, 0x56, 0x48, 0xf2, 0x35, 0x17, 0xb6, 0x78, 0x88, 0xf4, 0x8b,
597 0xfa, 0x7b, 0xa1, 0xa3, 0x04, 0xfc, 0xd4, 0x05, 0xbd, 0xa9, 0x70, 0x0d,
598 0x4a, 0xa2, 0x4f, 0xef, 0xe7, 0x99, 0x6a, 0x38, 0x42, 0xde, 0xf7, 0x98,
599 0x6f, 0x10, 0x0e, 0x78, 0x2f, 0x4d, 0xcf, 0x55, 0x68, 0x2b, 0xb5, 0x5a,
600 0xd0, 0x65, 0xd8, 0xc9, 0xcf, 0x94, 0x5f, 0xb1, 0x2d, 0xda, 0x57, 0x5b,
601 0x50, 0xf9, 0x96, 0x37, 0xa7, 0x35, 0x8d, 0x74, 0xde, 0x9f, 0xbc, 0xd1,
602 0xdd, 0x49, 0x58, 0xb6, 0xd3, 0x3d, 0x86, 0x2f, 0xc2, 0xc1, 0x62, 0x25,
603 0x12, 0x9c, 0x53, 0xf7, 0x5b, 0x5b, 0x26, 0x1f, 0xf3, 0xda, 0x74, 0xaa,
604 0x19, 0x56, 0xb9, 0x00, 0xbc, 0x4b, 0xc8, 0x57, 0x78, 0x97, 0xa2, 0xdb,
605 0x53, 0xa6, 0x3d, 0xd9, 0x54, 0x6d, 0x2a, 0xde, 0xc5, 0x18, 0x57, 0x37,
606 0xca, 0xdb, 0x15, 0xca, 0x07, 0xcc, 0xaf, 0x65, 0x09, 0x60, 0x7f, 0x71,
607 0x7a, 0x6e, 0x85, 0xf0, 0x7d, 0x7f, 0x3a, 0xb7, 0xc2, 0x1c, 0xc8, 0xff,
608 0x34, 0x7d, 0x63, 0xc5, 0x92, 0x0d, 0x37, 0xa1, 0xe2, 0x57, 0xeb, 0x8c,
609 0xb1, 0x72, 0x9c, 0x9a, 0xf3, 0x45, 0x23, 0x93, 0xbf, 0x37, 0x3d, 0xbc,
610 0x1e, 0x90, 0x73, 0x66, 0x0e, 0xbe, 0xc7, 0xd7, 0xef, 0xa0, 0x6b, 0xd0,
611 0xca, 0x15, 0xd0, 0x4a, 0x2f, 0x6c, 0x09, 0xd2, 0x37, 0x7d, 0xb2, 0x5e,
612 0xc8, 0x01, 0xae, 0xf3, 0x8c, 0x5a, 0x27, 0x80, 0x75, 0xe6, 0x54, 0xce,
613 0x78, 0x80, 0x79, 0xb7, 0xb0, 0x35, 0x61, 0x13, 0xba, 0x8c, 0x59, 0xdb,
614 0xd8, 0xf3, 0x28, 0xf4, 0x12, 0xf3, 0x3f, 0xfe, 0x7b, 0x64, 0x27, 0x6f,
615 0xfc, 0x39, 0x33, 0xee, 0x9b, 0x18, 0xc7, 0x33, 0x51, 0xf9, 0xe6, 0x6f,
616 0xb6, 0x65, 0x58, 0xd9, 0x90, 0x3a, 0x07, 0x89, 0x30, 0xd4, 0xb1, 0x57,
617 0xea, 0xe2, 0x2e, 0xc9, 0xab, 0x7d, 0x7d, 0x53, 0x8d, 0xb3, 0xbc, 0x6f,
618 0x00, 0x76, 0xda, 0x25, 0x98, 0xbb, 0xaa, 0xe3, 0x6d, 0x79, 0xc5, 0xd3,
619 0xe0, 0x91, 0x49, 0x3f, 0x57, 0x4f, 0x8f, 0xf3, 0xfb, 0x27, 0xd7, 0x8f,
620 0x98, 0x9c, 0x8e, 0xbf, 0x6f, 0x65, 0x8f, 0xf7, 0x2a, 0x1b, 0x6c, 0xe7,
621 0x9b, 0x08, 0x7f, 0x8c, 0xdf, 0xc7, 0xcf, 0x31, 0x7e, 0x74, 0xff, 0x0e,
622 0xcc, 0x5b, 0xe6, 0xcc, 0x39, 0x8e, 0xb1, 0x49, 0x95, 0xaf, 0xcb, 0xba,
623 0xe0, 0x7c, 0x86, 0x73, 0x74, 0xde, 0xf7, 0x8c, 0x83, 0x47, 0xb5, 0xcd,
624 0x57, 0x82, 0x9d, 0x55, 0x06, 0xbf, 0x04, 0x3c, 0xca, 0xf1, 0x61, 0x13,
625 0x57, 0x7b, 0xa3, 0x38, 0x1f, 0xef, 0x12, 0xc7, 0x21, 0x7b, 0xfc, 0xf1,
626 0x3c, 0xc7, 0x6b, 0xd3, 0x37, 0x2a, 0xae, 0x9c, 0xad, 0xea, 0x7c, 0x47,
627 0x8d, 0x07, 0xc6, 0x6e, 0x78, 0xb6, 0x71, 0x99, 0x73, 0xa9, 0x67, 0xe3,
628 0xf2, 0x5d, 0xd7, 0x8f, 0xad, 0xf1, 0x7e, 0x0a, 0xfd, 0x61, 0xeb, 0x2d,
629 0x6c, 0x72, 0xff, 0xdf, 0xc4, 0xfe, 0xe9, 0x53, 0x68, 0x5a, 0x3a, 0x08,
630 0xb9, 0xf5, 0x1f, 0x82, 0xf0, 0x19, 0xa0, 0xbb, 0x6f, 0x05, 0x3b, 0xf7,
631 0xe7, 0xeb, 0x6b, 0x4d, 0x97, 0x41, 0xd0, 0xc8, 0x62, 0x1b, 0xef, 0x96,
632 0x04, 0xde, 0x39, 0x02, 0x1d, 0x64, 0x49, 0x61, 0xdc, 0x8d, 0x2d, 0xf0,
633 0x6e, 0xc1, 0x19, 0x73, 0x1c, 0x95, 0xc7, 0x16, 0x07, 0xbc, 0x7c, 0xe6,
634 0xb7, 0x02, 0xcc, 0x39, 0x8b, 0xab, 0x5c, 0xdd, 0x6c, 0xd4, 0x05, 0xbc,
635 0x8e, 0xb2, 0x4f, 0xb4, 0x5e, 0xfe, 0x97, 0xfb, 0x29, 0x6b, 0xfa, 0x5d,
636 0xff, 0xec, 0x39, 0xf7, 0x8b, 0x98, 0x3b, 0x60, 0xda, 0x7d, 0x1a, 0x09,
637 0x30, 0xe5, 0x4d, 0x76, 0xbe, 0x01, 0xf1, 0xe3, 0x7c, 0xec, 0xff, 0x2d,
638 0x05, 0xcb, 0x1c, 0xf4, 0xd0, 0xbc, 0xda, 0xcf, 0x0b, 0xa0, 0x05, 0xca,
639 0x15, 0x9f, 0x7e, 0x5f, 0x00, 0xfd, 0xee, 0x63, 0x0a, 0xdf, 0x1e, 0xb4,
640 0xe6, 0xd3, 0x18, 0xe9, 0x8b, 0xb4, 0xf5, 0x8a, 0xe2, 0xb9, 0x52, 0xfb,
641 0xdc, 0x29, 0xb3, 0x12, 0x4e, 0xdc, 0xf6, 0xcf, 0x9d, 0xcf, 0x7b, 0xe5,
642 0xb8, 0xfa, 0xfc, 0x91, 0xf9, 0x07, 0x9c, 0x6d, 0xda, 0x9c, 0x6d, 0xa6,
643 0xe3, 0x9b, 0x04, 0x7f, 0x3e, 0xfa, 0xfb, 0xd4, 0xaf, 0xbc, 0x0b, 0xe2,
644 0xf7, 0x12, 0xca, 0x44, 0x90, 0x72, 0x9a, 0x7c, 0x94, 0x8b, 0xf3, 0x3e,
645 0xe5, 0xa4, 0x04, 0xfa, 0x60, 0xb7, 0x8c, 0x86, 0xc4, 0xff, 0x2e, 0xa9,
646 0x4b, 0xb6, 0x9c, 0x56, 0xeb, 0x06, 0xef, 0x8d, 0x2b, 0x41, 0xd9, 0x50,
647 0x77, 0x9f, 0xe0, 0xd1, 0xde, 0xa0, 0x2c, 0xba, 0x6d, 0x3d, 0x27, 0x75,
648 0xf4, 0x59, 0x43, 0xdb, 0xb9, 0x36, 0x6c, 0xd4, 0x07, 0xb0, 0x21, 0xdd,
649 0xbf, 0x6f, 0x15, 0xa3, 0x77, 0xf4, 0x35, 0x32, 0x96, 0xb1, 0x47, 0xc6,
650 0xa7, 0x1d, 0xc9, 0xaf, 0x0f, 0xe0, 0x07, 0x19, 0xaf, 0xe4, 0x02, 0x63,
651 0x91, 0x8c, 0xe7, 0x96, 0xe0, 0x9f, 0x6a, 0x3f, 0x9f, 0xf6, 0xf6, 0x95,
652 0xcd, 0x44, 0xa9, 0x24, 0x6e, 0xfc, 0x91, 0xf6, 0x77, 0x3c, 0x7d, 0xa5,
653 0xb0, 0xd7, 0x19, 0xf3, 0x8d, 0xab, 0xfc, 0xd9, 0x1e, 0x2f, 0x11, 0x3b,
654 0x05, 0xdf, 0xf5, 0xeb, 0x69, 0xc6, 0x7a, 0xef, 0x23, 0xbe, 0xbf, 0xc4,
655 0x4d, 0xda, 0x23, 0xe3, 0xe2, 0x5e, 0x72, 0x47, 0x1f, 0x11, 0xfa, 0xa7,
656 0x89, 0xf8, 0x14, 0xf1, 0xd6, 0xfe, 0xbe, 0x20, 0x68, 0xec, 0xa5, 0x71,
657 0x19, 0xbe, 0xf4, 0x23, 0x15, 0x63, 0xff, 0x70, 0x7a, 0x37, 0x6d, 0xa8,
658 0x58, 0xf1, 0x78, 0xbf, 0x0c, 0x8f, 0xae, 0x89, 0x40, 0x5b, 0xf0, 0x7b,
659 0x03, 0x0b, 0x3e, 0xaa, 0x7a, 0x87, 0xbd, 0x1e, 0x57, 0xdf, 0x5c, 0x65,
660 0x55, 0xde, 0x23, 0x63, 0xc9, 0x3c, 0xd3, 0x88, 0xca, 0x85, 0x7b, 0x16,
661 0x67, 0x5b, 0x68, 0xf2, 0x7c, 0x19, 0x57, 0x66, 0xdc, 0x98, 0xb1, 0x65,
662 0xc6, 0x88, 0xf5, 0xf7, 0x53, 0x47, 0x9a, 0x7b, 0xc5, 0x91, 0x89, 0x8b,
663 0x51, 0xf3, 0x4d, 0x9a, 0x58, 0xdb, 0xd0, 0xbb, 0xf9, 0x9a, 0xa3, 0xee,
664 0xfd, 0x8a, 0x4e, 0xbf, 0x9c, 0x1c, 0xed, 0x06, 0xce, 0x07, 0x54, 0x3e,
665 0xa4, 0xed, 0xbe, 0x07, 0x7e, 0x25, 0xfd, 0x38, 0xea, 0x5b, 0x1f, 0xcf,
666 0x87, 0x50, 0xf7, 0x0b, 0xe0, 0x9e, 0x75, 0xf0, 0x39, 0x95, 0xee, 0xfd,
667 0xb4, 0x6c, 0x57, 0x98, 0x9f, 0x5d, 0x3f, 0x90, 0x53, 0xe7, 0xc1, 0x98,
668 0x8d, 0x2f, 0x9b, 0xfc, 0x5c, 0x35, 0xfa, 0xcc, 0x8e, 0xb9, 0xab, 0x66,
669 0xcc, 0x66, 0x40, 0x8a, 0xeb, 0x94, 0x3f, 0x96, 0x5a, 0xeb, 0x56, 0xe0,
670 0xad, 0x52, 0xaa, 0xef, 0x75, 0xef, 0xde, 0x6a, 0x3d, 0x93, 0x56, 0xbe,
671 0xec, 0xf9, 0x92, 0x39, 0x63, 0xfd, 0x1d, 0x64, 0x70, 0x27, 0x7f, 0x38,
672 0xaa, 0xe3, 0x09, 0xd9, 0x81, 0x5e, 0xfa, 0x0f, 0x7d, 0x1a, 0xbf, 0xf4,
673 0x7b, 0x7f, 0x65, 0x6c, 0x51, 0xfa, 0xbc, 0x03, 0x4a, 0x4f, 0xdb, 0x0d,
674 0x9f, 0x4e, 0x98, 0x73, 0x43, 0x7f, 0xf8, 0xa0, 0x64, 0xeb, 0x90, 0x9b,
675 0x83, 0x7c, 0x3f, 0x6b, 0xc6, 0xf2, 0xb9, 0x25, 0x47, 0x27, 0x76, 0xdf,
676 0xa7, 0x4f, 0x6a, 0x3f, 0xbb, 0xd7, 0xbf, 0x53, 0xf7, 0x73, 0x4d, 0x7d,
677 0x78, 0x15, 0x9c, 0xa0, 0x27, 0x1f, 0x06, 0xbd, 0xd6, 0x11, 0xc0, 0xcb,
678 0x18, 0xe4, 0x80, 0xcb, 0x5c, 0x9d, 0x80, 0x4c, 0x0c, 0x24, 0x98, 0xc3,
679 0xa7, 0xe0, 0x69, 0xd4, 0x43, 0x68, 0xf3, 0xe1, 0xd4, 0xfe, 0x79, 0xa3,
680 0xce, 0xf6, 0x38, 0xd6, 0xea, 0x96, 0x89, 0x41, 0xe2, 0x79, 0x37, 0x1c,
681 0x03, 0x81, 0xbd, 0x73, 0xd4, 0x1e, 0xec, 0x80, 0xef, 0xee, 0xef, 0x47,
682 0x73, 0xf0, 0xc3, 0x72, 0x2b, 0x8c, 0x15, 0x10, 0xc6, 0x01, 0xc8, 0x39,
683 0xec, 0x31, 0xed, 0xe7, 0x0e, 0xfb, 0x78, 0xf1, 0x63, 0x0c, 0x21, 0x45,
684 0x17, 0x73, 0x19, 0xee, 0x25, 0x64, 0x62, 0x0e, 0x84, 0x2b, 0x61, 0xf2,
685 0x0f, 0x09, 0x9f, 0x7d, 0x40, 0x9f, 0xff, 0xfd, 0x66, 0xbf, 0x7e, 0xce,
686 0x22, 0xe7, 0xba, 0x17, 0xe3, 0xbf, 0xd2, 0xc2, 0x5a, 0x34, 0xe8, 0xc0,
687 0xff, 0xbe, 0xaf, 0x7f, 0xaf, 0x9e, 0xab, 0xd7, 0xff, 0xa6, 0x2f, 0x66,
688 0xbe, 0xe3, 0x23, 0x9c, 0xe4, 0x2f, 0x1f, 0x87, 0x9c, 0x63, 0xc0, 0xdc,
689 0x23, 0x10, 0x86, 0x9e, 0x5d, 0x30, 0x24, 0xd2, 0x77, 0xca, 0xb8, 0x43,
690 0x1d, 0x7b, 0x27, 0xad, 0xf5, 0xc9, 0x42, 0xad, 0x57, 0xca, 0x35, 0xe6,
691 0x53, 0xf3, 0xfb, 0x32, 0xda, 0x59, 0xe4, 0x4b, 0x95, 0x37, 0x69, 0xf2,
692 0x15, 0x7d, 0xfe, 0xec, 0x43, 0x3f, 0xea, 0x10, 0x94, 0x75, 0x2d, 0x9f,
693 0xea, 0x72, 0x77, 0xce, 0xe2, 0x7c, 0x3b, 0x67, 0x51, 0xe7, 0x25, 0x15,
694 0xdb, 0x79, 0x22, 0xcc, 0x89, 0xeb, 0xcc, 0x41, 0x2a, 0xc9, 0xa3, 0x87,
695 0x7b, 0x24, 0xb9, 0xdc, 0x6b, 0x68, 0xf4, 0x3d, 0x66, 0x1d, 0xac, 0xb7,
696 0x34, 0x29, 0xc9, 0xa5, 0x3f, 0x86, 0x6f, 0xaf, 0xf2, 0x22, 0x3b, 0xf2,
697 0xdb, 0x87, 0xcd, 0xb7, 0x48, 0x59, 0x8b, 0xf9, 0x28, 0xf9, 0x25, 0x9c,
698 0xd7, 0xe1, 0xc4, 0x68, 0xdc, 0xe6, 0xb7, 0xb8, 0x27, 0x24, 0xb9, 0x3a,
699 0xa9, 0xbf, 0x89, 0x4b, 0xf3, 0x46, 0x3e, 0xa1, 0xec, 0xe9, 0xd4, 0x65,
700 0x3d, 0x9f, 0xbb, 0xc4, 0xf6, 0x14, 0x6c, 0x47, 0xb6, 0xe7, 0x63, 0x01,
701 0x75, 0x6b, 0x7f, 0x3f, 0xe8, 0xa9, 0xcb, 0xd8, 0x03, 0xcc, 0xe9, 0xe4,
702 0x78, 0xda, 0x1e, 0xa7, 0x71, 0x66, 0xf9, 0xb8, 0x2d, 0x1c, 0xa3, 0xe6,
703 0xc3, 0xb3, 0x7f, 0x47, 0x44, 0x5c, 0x8f, 0xcb, 0x7a, 0xd3, 0x05, 0x4f,
704 0xe8, 0x9c, 0xf8, 0x62, 0xdd, 0xcf, 0xe5, 0x7c, 0xb4, 0x9d, 0xcb, 0x49,
705 0x18, 0x0b, 0x95, 0xdd, 0xb4, 0x77, 0xc8, 0xe4, 0x54, 0xf6, 0xa8, 0xfb,
706 0xd9, 0x0e, 0xf9, 0x67, 0xfa, 0x3f, 0x73, 0x80, 0x77, 0xf7, 0x22, 0x6c,
707 0x1f, 0x34, 0xed, 0xb0, 0x8f, 0xa2, 0x51, 0xc5, 0x07, 0xc9, 0x86, 0xdf,
708 0xef, 0xfa, 0x01, 0x9d, 0x0b, 0x4a, 0x3c, 0x79, 0x06, 0xe6, 0x09, 0xf8,
709 0xb1, 0xac, 0x3b, 0x88, 0xb1, 0x3c, 0x27, 0x94, 0x8d, 0x83, 0x2a, 0xd7,
710 0x30, 0xe0, 0x4d, 0x99, 0x7b, 0xc1, 0x41, 0xb5, 0x96, 0xe3, 0x71, 0x7e,
711 0x5f, 0x36, 0xf4, 0x74, 0xac, 0xbf, 0x1b, 0x5e, 0xc6, 0xe0, 0xfc, 0xdc,
712 0x51, 0xb6, 0xf3, 0x7d, 0x77, 0x1f, 0x3f, 0x4f, 0x34, 0x6b, 0x05, 0xdb,
713 0x39, 0xf6, 0xc4, 0x25, 0xef, 0x96, 0x51, 0x5e, 0xf6, 0x00, 0x23, 0x9f,
714 0x51, 0x9a, 0x6f, 0x07, 0x82, 0x4b, 0xfc, 0xed, 0x9e, 0x27, 0x88, 0xb9,
715 0x7d, 0x9e, 0xdd, 0x3b, 0xa7, 0xb4, 0xcb, 0x3b, 0x6f, 0x6d, 0x57, 0x98,
716 0x27, 0x51, 0x92, 0x93, 0x99, 0x3e, 0x99, 0xab, 0xd9, 0xfc, 0xc6, 0x93,
717 0x31, 0x7a, 0xde, 0x83, 0xcb, 0xbc, 0x92, 0x71, 0x23, 0xc6, 0xe7, 0xee,
718 0x81, 0x6f, 0x4e, 0x7a, 0x1e, 0x91, 0xf5, 0xfa, 0x4c, 0x47, 0xfe, 0x6d,
719 0x97, 0xa1, 0xb3, 0x7f, 0x1d, 0x92, 0xde, 0x12, 0x7c, 0x32, 0x9f, 0xa7,
720 0x47, 0xa4, 0x50, 0xef, 0xbc, 0x3b, 0x63, 0xae, 0x4f, 0xe7, 0x37, 0xb4,
721 0x4a, 0x0f, 0xd6, 0x4a, 0xb4, 0xab, 0xa2, 0x8c, 0x4b, 0xb0, 0xdf, 0x7e,
722 0xa3, 0x6f, 0xe1, 0x08, 0xf5, 0xbe, 0xc5, 0x12, 0x97, 0xb0, 0x41, 0x47,
723 0xa8, 0x75, 0x52, 0x72, 0x34, 0x5a, 0x82, 0x8f, 0x3a, 0x62, 0xd6, 0x7d,
724 0x3b, 0xde, 0xd9, 0xf7, 0x80, 0x69, 0xbf, 0xd7, 0xbc, 0xf7, 0x9a, 0xf7,
725 0x00, 0xde, 0xeb, 0xad, 0x5a, 0x95, 0x73, 0xb2, 0xe4, 0xf7, 0x22, 0xbc,
726 0xdb, 0xf2, 0x24, 0x74, 0x59, 0xa0, 0xa7, 0x7a, 0xe5, 0xf1, 0xba, 0xc2,
727 0xaf, 0xe5, 0x2e, 0xd1, 0x20, 0xd8, 0x6f, 0x9e, 0xef, 0xe6, 0xc1, 0x4f,
728 0xde, 0x91, 0x37, 0x3c, 0xec, 0x98, 0xdc, 0xec, 0x0e, 0x78, 0xb3, 0x80,
729 0xf5, 0xd7, 0xe5, 0x41, 0x51, 0x47, 0x69, 0x5f, 0xb9, 0x50, 0xd1, 0xf9,
730 0x3e, 0x27, 0x2b, 0x80, 0xb5, 0xf6, 0x3f, 0x0e, 0xe8, 0xdc, 0x14, 0x3f,
731 0x9f, 0x91, 0xf9, 0xee, 0x23, 0x26, 0x27, 0x82, 0x63, 0x99, 0x57, 0xe9,
732 0xdf, 0x39, 0x76, 0xda, 0xaa, 0xd4, 0x45, 0xd4, 0x33, 0xfc, 0x6e, 0x25,
733 0x8d, 0xbe, 0x8b, 0x94, 0x35, 0xd0, 0x53, 0xbe, 0x2d, 0xf1, 0x39, 0xe5,
734 0x1f, 0x76, 0x7e, 0xf7, 0x73, 0x0e, 0xb0, 0xfe, 0x65, 0x93, 0x71, 0xe1,
735 0x1e, 0x09, 0x2c, 0xfb, 0x79, 0x50, 0x3c, 0x63, 0xda, 0x61, 0xfc, 0xb6,
736 0xfa, 0x77, 0x77, 0xc5, 0x8c, 0x7d, 0x5b, 0x81, 0x74, 0x3e, 0xe7, 0x30,
737 0xc7, 0xd4, 0xf1, 0xfc, 0x38, 0x33, 0x73, 0x6b, 0x68, 0x73, 0x1d, 0x14,
738 0x5b, 0xc5, 0x8d, 0xd8, 0x56, 0x92, 0xfe, 0xc3, 0xbf, 0x4b, 0xde, 0xf8,
739 0x47, 0xfc, 0x16, 0x46, 0xe7, 0x79, 0xab, 0x75, 0xa2, 0xda, 0x86, 0xe4,
740 0x37, 0xda, 0x69, 0xf0, 0xd5, 0xbe, 0x2d, 0x9d, 0xf3, 0x1d, 0xc1, 0x7b,
741 0x06, 0x74, 0x0c, 0x99, 0x2a, 0xfc, 0x1e, 0x9b, 0x7c, 0xc7, 0xef, 0xb1,
742 0x3d, 0x95, 0x6f, 0xb2, 0x6d, 0xbe, 0x2f, 0xba, 0xde, 0x0c, 0x8a, 0xbd,
743 0x34, 0xce, 0x6f, 0xd5, 0xf8, 0x6d, 0x23, 0x6c, 0xb5, 0x38, 0xda, 0x99,
744 0xc7, 0x36, 0xa4, 0xf2, 0x54, 0xca, 0xcd, 0x8f, 0xa0, 0xfc, 0x34, 0xfc,
745 0x75, 0x1d, 0x9f, 0x2f, 0x37, 0x99, 0xaf, 0xe2, 0xa8, 0x7b, 0xcf, 0xe4,
746 0x52, 0x01, 0xeb, 0xf9, 0xdf, 0x3e, 0x47, 0x51, 0x47, 0xf8, 0x4a, 0x86,
747 0x47, 0xfd, 0x5c, 0x84, 0x0d, 0x87, 0x3a, 0xa1, 0xd4, 0x8c, 0xa8, 0x1c,
748 0x17, 0x6d, 0x8f, 0xd0, 0xd6, 0x0b, 0xa3, 0x2f, 0xf7, 0xda, 0x4b, 0x7d,
749 0xd5, 0xa2, 0x4c, 0x4a, 0x61, 0x9d, 0x86, 0xca, 0x0f, 0x24, 0x9e, 0x5d,
750 0xa7, 0x48, 0x7f, 0x4d, 0xc9, 0xf8, 0xc4, 0xe8, 0xac, 0xe4, 0x9d, 0x10,
751 0x7c, 0xb1, 0xb2, 0xf2, 0x73, 0x5e, 0x80, 0x0d, 0x1d, 0xd9, 0x0a, 0x78,
752 0xdc, 0x1b, 0xd7, 0xa6, 0x1f, 0xa2, 0xf7, 0xa3, 0xef, 0x8e, 0xc4, 0x2a,
753 0xab, 0xef, 0xf5, 0x58, 0xcf, 0x7b, 0x01, 0xff, 0x7b, 0x6c, 0xe6, 0xef,
754 0xc3, 0x4f, 0x68, 0x4e, 0xc9, 0xd9, 0xca, 0x7e, 0xe6, 0xc6, 0xa7, 0xb7,
755 0x81, 0xb7, 0x93, 0xed, 0x7c, 0x7d, 0xe6, 0xb0, 0xf9, 0xba, 0x87, 0x67,
756 0xc5, 0x5c, 0x79, 0xd2, 0x19, 0xf3, 0xe5, 0x69, 0x87, 0x0d, 0xc9, 0xe3,
757 0x4d, 0x3f, 0x47, 0x7e, 0x2f, 0x3b, 0x9c, 0x34, 0xf8, 0x59, 0xf8, 0x86,
758 0x7e, 0x2e, 0x24, 0x73, 0x36, 0x5b, 0xad, 0x93, 0x69, 0xde, 0xc7, 0xce,
759 0x1c, 0x5d, 0xc3, 0x1e, 0xaf, 0xd5, 0x81, 0xc3, 0xe3, 0xac, 0x63, 0xee,
760 0x56, 0xb7, 0xe4, 0xc6, 0x55, 0xbc, 0xaf, 0x77, 0xcd, 0xdd, 0x2f, 0x57,
761 0x6b, 0x51, 0x95, 0x87, 0x56, 0x84, 0x9d, 0xdf, 0x90, 0xdb, 0x0e, 0xef,
762 0xa3, 0x8f, 0xa8, 0xf1, 0x3e, 0xbf, 0x73, 0x9d, 0xa8, 0x1c, 0x59, 0xd7,
763 0xf2, 0xe4, 0x54, 0x06, 0x76, 0xcb, 0x25, 0xb1, 0x3e, 0x9a, 0x19, 0x82,
764 0xef, 0xcd, 0xb5, 0x52, 0x18, 0x07, 0xda, 0x89, 0x91, 0xd7, 0x7f, 0xd1,
765 0x6a, 0x00, 0xde, 0xdb, 0x4d, 0xda, 0xeb, 0xb0, 0xa1, 0x66, 0x38, 0xc6,
766 0x13, 0xfb, 0x02, 0xfb, 0x0c, 0x80, 0xfe, 0x42, 0xfa, 0x7b, 0xb4, 0xca,
767 0x01, 0x69, 0x38, 0x6c, 0xe3, 0x73, 0x4c, 0x1a, 0x51, 0xdf, 0x4f, 0xf9,
768 0x21, 0xf0, 0x17, 0x57, 0x32, 0xc9, 0xbf, 0xc3, 0x67, 0x4e, 0xe9, 0x5c,
769 0xed, 0x18, 0x78, 0x28, 0x68, 0x6c, 0xb3, 0x20, 0xe6, 0xf8, 0xbe, 0xa3,
770 0x6d, 0x05, 0xde, 0xf1, 0x6b, 0x5b, 0x44, 0xeb, 0x18, 0xde, 0xfb, 0x05,
771 0xe1, 0x0b, 0xf8, 0x7c, 0x79, 0xc8, 0xd8, 0x14, 0x9d, 0xbe, 0x7c, 0x2a,
772 0x76, 0x91, 0xff, 0x0f, 0x62, 0xf3, 0x83, 0x32, 0x0b, 0x98, 0xcf, 0x9b,
773 0x7d, 0x3e, 0x92, 0x71, 0xe5, 0x56, 0x9d, 0x77, 0xf0, 0x07, 0x51, 0x32,
774 0xdf, 0x90, 0x30, 0x8f, 0x99, 0x9c, 0x4a, 0x0f, 0x7b, 0x3d, 0x21, 0x2f,
775 0xc3, 0xbe, 0x7e, 0xa5, 0x92, 0x4a, 0x1f, 0x51, 0x71, 0xe7, 0x44, 0xec,
776 0xaa, 0x8c, 0xc5, 0xe9, 0x03, 0x96, 0x9c, 0x44, 0xec, 0x16, 0xe8, 0xe1,
777 0x76, 0xe5, 0x50, 0x3f, 0xff, 0x27, 0x45, 0x03, 0xfa, 0xf0, 0xb6, 0xca,
778 0x81, 0x49, 0x30, 0x66, 0x82, 0xf7, 0x21, 0x93, 0x87, 0xc3, 0x75, 0xd8,
779 0x36, 0x24, 0x2f, 0x57, 0xda, 0xfa, 0x97, 0xeb, 0xe8, 0xdc, 0x36, 0xa5,
780 0x5f, 0x8f, 0xf6, 0x53, 0x0e, 0x71, 0x3d, 0x3d, 0x87, 0xdf, 0x87, 0x78,
781 0xf5, 0x63, 0x91, 0x8e, 0xfe, 0xbe, 0xc1, 0x62, 0xde, 0x0b, 0xf7, 0xfe,
782 0x13, 0x47, 0xdb, 0x40, 0x1c, 0x97, 0x72, 0x8e, 0xaa, 0xf9, 0x78, 0xdf,
783 0x3b, 0x24, 0x3f, 0x6e, 0xfa, 0xf3, 0x30, 0x1f, 0x87, 0x39, 0x3f, 0x94,
784 0x7d, 0x9d, 0x30, 0x68, 0xfd, 0xff, 0xb2, 0x8a, 0xeb, 0x4d, 0xa2, 0x3f,
785 0x75, 0x34, 0xe8, 0xa5, 0x1e, 0xd3, 0xff, 0xdf, 0xa1, 0x2d, 0xe3, 0xf8,
786 0x4c, 0x7c, 0x72, 0x1d, 0xd8, 0xf8, 0x0f, 0x38, 0xa6, 0xdd, 0xb7, 0x4b,
787 0x87, 0xc0, 0xaf, 0x27, 0xa4, 0xb1, 0x92, 0x8a, 0x3d, 0x2e, 0xfe, 0xbc,
788 0xad, 0x87, 0x79, 0x2f, 0x56, 0xc8, 0x8c, 0x39, 0x0b, 0x0a, 0x1e, 0xde,
789 0xdd, 0x26, 0x9c, 0xab, 0x58, 0xaf, 0xd1, 0xdc, 0x1d, 0x7b, 0x48, 0x64,
790 0xb7, 0x24, 0x95, 0xd6, 0x67, 0x33, 0x22, 0x5b, 0x38, 0x9b, 0x3f, 0x31,
791 0x67, 0xf3, 0x7e, 0xcc, 0xed, 0x5e, 0x18, 0x97, 0xd4, 0x85, 0x54, 0xfc,
792 0xbc, 0xf0, 0x8e, 0xf9, 0x00, 0xef, 0x98, 0xad, 0x47, 0x32, 0x71, 0xec,
793 0x37, 0x81, 0xfd, 0xa2, 0x6c, 0xf2, 0x99, 0xdf, 0xf7, 0xef, 0x23, 0x6f,
794 0x3f, 0x4c, 0x99, 0x49, 0x5c, 0x14, 0x54, 0x1b, 0xec, 0x93, 0xa7, 0x08,
795 0xd3, 0xbf, 0xe3, 0xf9, 0xa8, 0x58, 0xe8, 0xad, 0x26, 0xbf, 0x5b, 0xd5,
796 0xf0, 0xe5, 0x01, 0xdf, 0xbc, 0x86, 0x2f, 0x3e, 0xdb, 0xb6, 0x5d, 0x13,
797 0xb1, 0xb3, 0x42, 0x7b, 0x89, 0xf6, 0x0b, 0xed, 0xfa, 0xbf, 0xe9, 0xd7,
798 0xb1, 0x3d, 0xf8, 0xb1, 0x0f, 0x64, 0xdb, 0x7b, 0xef, 0x42, 0xdf, 0x6b,
799 0x19, 0x95, 0x63, 0xec, 0x4c, 0xc9, 0x7b, 0x25, 0xfb, 0x91, 0x44, 0x3c,
800 0x6b, 0xb9, 0xc6, 0x06, 0x44, 0x59, 0xe7, 0x33, 0x65, 0xae, 0x6b, 0x6c,
801 0x0b, 0x9e, 0x4d, 0x06, 0x6b, 0x29, 0xdc, 0xc2, 0x67, 0x1a, 0x02, 0xcd,
802 0x93, 0xd6, 0xde, 0x05, 0x1e, 0xd2, 0xff, 0x13, 0xe3, 0x2a, 0xf0, 0x58,
803 0x06, 0x1e, 0x4f, 0xdd, 0x65, 0x83, 0x85, 0xda, 0x36, 0xd8, 0xb6, 0x5a,
804 0xef, 0x26, 0x60, 0xca, 0x3b, 0xb4, 0xbf, 0xca, 0x6d, 0x5a, 0x21, 0x4c,
805 0xe3, 0xfc, 0x2e, 0x5b, 0xae, 0x67, 0x78, 0x1e, 0xb0, 0xc1, 0x30, 0xdf,
806 0xda, 0x0e, 0x2d, 0x61, 0xff, 0x8a, 0x7e, 0x41, 0xbb, 0x09, 0x27, 0x68,
807 0xf1, 0x2c, 0x38, 0x9f, 0x58, 0x37, 0x00, 0xcb, 0xb6, 0xa2, 0x03, 0x4d,
808 0x03, 0xdb, 0xf5, 0xde, 0x37, 0xa0, 0x01, 0xee, 0x93, 0xf4, 0xe7, 0xd3,
809 0x5e, 0xfb, 0xbb, 0x75, 0xf8, 0xb7, 0x25, 0xb9, 0xff, 0x90, 0x27, 0xb9,
810 0x0b, 0x2d, 0x59, 0x48, 0x8b, 0x35, 0x76, 0x88, 0x34, 0x49, 0x3b, 0x01,
811 0x36, 0x64, 0x8c, 0x38, 0xd6, 0xf6, 0xe0, 0xec, 0x57, 0xf7, 0xe3, 0xf7,
812 0x6f, 0xfa, 0x79, 0xbf, 0x94, 0xdb, 0xa0, 0xbc, 0x12, 0xeb, 0xbe, 0x43,
813 0xda, 0x3f, 0xbc, 0x1d, 0x05, 0xce, 0xd1, 0x9e, 0x7c, 0xa2, 0xcb, 0xc4,
814 0x51, 0xb5, 0x5e, 0x4e, 0x3e, 0x41, 0xbc, 0xa2, 0xfc, 0xea, 0x4f, 0x1c,
815 0x3f, 0x27, 0x49, 0xc7, 0x04, 0xc9, 0x17, 0x25, 0x99, 0xcf, 0x30, 0x27,
816 0xb4, 0x57, 0x8e, 0x40, 0xae, 0x4d, 0x55, 0x26, 0xe5, 0x0b, 0x95, 0x88,
817 0xb2, 0x1b, 0xfe, 0x2c, 0x9d, 0x8a, 0x8d, 0x5a, 0x2d, 0x79, 0x04, 0xf6,
818 0xcf, 0xec, 0x50, 0x97, 0xbc, 0x32, 0xae, 0xf3, 0x6f, 0x6f, 0x33, 0xb9,
819 0xce, 0x61, 0xce, 0x28, 0xf7, 0x03, 0xb9, 0x6f, 0xc1, 0x17, 0xb0, 0xba,
820 0x65, 0x36, 0x1a, 0x91, 0xe9, 0x34, 0xca, 0x37, 0xa7, 0xd5, 0x37, 0xa4,
821 0xd9, 0x68, 0xa7, 0x1c, 0x21, 0xcc, 0x2c, 0xdf, 0x62, 0xca, 0x9f, 0xf5,
822 0x77, 0xc0, 0x62, 0xcd, 0x67, 0x02, 0x6a, 0x7f, 0xe5, 0x3a, 0xe5, 0x1b,
823 0xc7, 0x40, 0x9e, 0x34, 0x79, 0x0f, 0x59, 0x92, 0x35, 0xc8, 0x97, 0x62,
824 0x4d, 0xac, 0x8d, 0x0c, 0x2c, 0x6a, 0x57, 0xdb, 0x9f, 0x45, 0xd0, 0xd7,
825 0x5c, 0x8d, 0xf2, 0x6f, 0x4a, 0xe5, 0x4e, 0xcf, 0xc1, 0xd6, 0x85, 0x4f,
826 0x3c, 0xdb, 0xed, 0x99, 0x7b, 0xce, 0x5e, 0xc6, 0x43, 0x3a, 0x65, 0x98,
827 0xff, 0x3f, 0x73, 0x0e, 0x0f, 0x48, 0x5f, 0x09, 0xe7, 0xe2, 0xdb, 0xdc,
828 0xc0, 0x29, 0xd6, 0xcc, 0xa9, 0x73, 0xf2, 0xcf, 0x84, 0xb2, 0xa7, 0x33,
829 0x67, 0xdb, 0xb7, 0x39, 0xc8, 0xb3, 0xd4, 0x17, 0x52, 0x0a, 0xc3, 0xa6,
830 0xed, 0xb9, 0x00, 0xdd, 0x5d, 0xf3, 0x40, 0x2b, 0x93, 0xd0, 0x87, 0x93,
831 0x52, 0x86, 0xed, 0xf6, 0xd1, 0xf4, 0x67, 0xc5, 0x7e, 0xea, 0xa0, 0xac,
832 0xd5, 0x7a, 0x80, 0x0f, 0xea, 0x85, 0x90, 0xf2, 0xaf, 0x6f, 0x1f, 0xa7,
833 0xbe, 0xa3, 0x2e, 0xd1, 0x67, 0xb1, 0x5d, 0xff, 0xc4, 0x80, 0xfe, 0x7e,
834 0x65, 0xbf, 0x6c, 0xd5, 0x7d, 0x5d, 0x08, 0xff, 0xb0, 0x16, 0x32, 0x7a,
835 0xb9, 0x17, 0xb2, 0xfb, 0xaf, 0x43, 0x0d, 0xe5, 0xab, 0x73, 0xff, 0xd4,
836 0x41, 0xea, 0xff, 0x70, 0xf4, 0x36, 0x5c, 0xee, 0xbd, 0x53, 0x07, 0x69,
837 0xbb, 0xc3, 0x39, 0xcc, 0xf5, 0x78, 0x1f, 0xc7, 0x3d, 0x46, 0x25, 0x74,
838 0xf1, 0x84, 0xd8, 0xf0, 0x5b, 0x02, 0x4b, 0xb4, 0xf5, 0xee, 0xf4, 0x5d,
839 0x02, 0x97, 0x6d, 0xf3, 0xad, 0xed, 0xb0, 0xb6, 0x65, 0x32, 0x28, 0x1b,
840 0xfe, 0xf7, 0xb7, 0xfc, 0xdd, 0xe1, 0xdb, 0x1d, 0x78, 0x03, 0x5d, 0x8a,
841 0xbf, 0xff, 0x0b, 0xc4, 0xbf, 0x6d, 0x24, 0x80, 0x4a, 0x00, 0x00, 0x00 };
842
843static const u32 bnx2_COM_b09FwData[(0x0/4) + 1] = { 0x0 };
844static const u32 bnx2_COM_b09FwRodata[(0x30/4) + 1] = {
845 0x80080100, 0x80080080, 0x80080000, 0x80080240, 0x08000ea4, 0x08000efc,
846 0x08000f40, 0x08000fd4, 0x08001018, 0x80080100, 0x80080080, 0x80080000,
847 0x00000000 };
848
849static struct fw_info bnx2_com_fw_09 = {
850 /* Firmware version: 4.6.15 */
851 .ver_major = 0x4,
852 .ver_minor = 0x6,
853 .ver_fix = 0xf,
854
855 .start_addr = 0x080000f8,
856
857 .text_addr = 0x08000000,
858 .text_len = 0x4a7c,
859 .text_index = 0x0,
860 .gz_text = bnx2_COM_b09FwText,
861 .gz_text_len = sizeof(bnx2_COM_b09FwText),
862
863 .data_addr = 0x00000000,
864 .data_len = 0x0,
865 .data_index = 0x0,
866 .data = bnx2_COM_b09FwData,
867
868 .sbss_addr = 0x08004ae0,
869 .sbss_len = 0x38,
870 .sbss_index = 0x0,
871
872 .bss_addr = 0x08004b18,
873 .bss_len = 0xc0,
874 .bss_index = 0x0,
875
876 .rodata_addr = 0x08004a7c,
877 .rodata_len = 0x30,
878 .rodata_index = 0x0,
879 .rodata = bnx2_COM_b09FwRodata,
880};
881
882static u8 bnx2_CP_b09FwText[] = {
883 0xa5, 0xbc, 0x0d, 0x74, 0x1c, 0xe5, 0x95, 0x26, 0xfc, 0x54, 0x75, 0xb7,
884 0xd4, 0x92, 0x5a, 0x52, 0x49, 0x6e, 0x8b, 0x36, 0x68, 0x70, 0xb5, 0x55,
885 0x2d, 0x0b, 0x4b, 0x40, 0xb5, 0x24, 0x3b, 0xed, 0x6c, 0x83, 0x3b, 0xb6,
886 0x6c, 0x64, 0x63, 0x40, 0x36, 0x06, 0xc4, 0xb7, 0xfe, 0x3e, 0x7a, 0xfc,
887 0x03, 0x86, 0x38, 0x19, 0x91, 0xcd, 0xce, 0x0a, 0xd6, 0x59, 0x55, 0xe4,
888 0x3f, 0xd9, 0x6e, 0x75, 0x4b, 0x42, 0xfe, 0xe1, 0xec, 0x9c, 0xa5, 0x2d,
889 0xcb, 0x96, 0x21, 0xad, 0x16, 0x24, 0x6c, 0xc6, 0x39, 0x27, 0x09, 0x1a,
890 0x63, 0x83, 0x0d, 0x18, 0xc8, 0x24, 0xf9, 0x86, 0xc9, 0xd9, 0x5d, 0x34,
891 0xc6, 0xfc, 0x19, 0x70, 0x1c, 0x92, 0xc9, 0x9a, 0x19, 0x4c, 0xed, 0x73,
892 0xab, 0xd5, 0xb6, 0xec, 0x30, 0xc9, 0xcc, 0x59, 0x9d, 0xd3, 0xa7, 0xab,
893 0xab, 0xde, 0x9f, 0xfb, 0xde, 0xf7, 0xde, 0xe7, 0x3e, 0xf7, 0x7d, 0xdf,
894 0x92, 0x0e, 0x14, 0x63, 0xf2, 0xaf, 0x94, 0x9f, 0x9b, 0x9a, 0x3b, 0xd6,
895 0xce, 0x0d, 0xdf, 0x34, 0x4f, 0x7e, 0xbb, 0xcb, 0x0b, 0xdc, 0xf8, 0xb2,
896 0xbf, 0x28, 0x22, 0x57, 0xdf, 0xd2, 0xbf, 0xb4, 0xe0, 0xbf, 0xf0, 0x17,
897 0x41, 0x50, 0xe1, 0x57, 0xfd, 0xe4, 0x4f, 0x17, 0xa0, 0xe5, 0xfb, 0x97,
898 0x0f, 0xbc, 0x6a, 0xd4, 0xb8, 0x77, 0xa1, 0x01, 0xaf, 0x2b, 0xba, 0xaa,
899 0x7d, 0xad, 0x01, 0xc4, 0x32, 0xf5, 0xfa, 0x22, 0x5c, 0xb4, 0x2d, 0xbf,
900 0x1b, 0x72, 0xff, 0xcf, 0xa2, 0x9f, 0x3f, 0xf5, 0x93, 0xaf, 0x04, 0xcf,
901 0xa7, 0x5d, 0xf0, 0x6a, 0x51, 0x0b, 0x5a, 0x2d, 0xbc, 0xd5, 0xac, 0xf3,
902 0x57, 0xb3, 0xb7, 0xa9, 0x28, 0xcb, 0xb7, 0x15, 0x0c, 0xa4, 0x11, 0xd4,
903 0x2c, 0x04, 0xeb, 0x2c, 0x20, 0xee, 0x8e, 0x22, 0x5e, 0x18, 0xf5, 0xa2,
904 0xc0, 0x28, 0x40, 0x5c, 0xeb, 0xd4, 0xb7, 0x34, 0x03, 0x0b, 0x13, 0x5e,
905 0xfd, 0x74, 0x06, 0x58, 0x9b, 0xf0, 0x62, 0xc2, 0xe5, 0xd3, 0xdf, 0xc9,
906 0x44, 0xca, 0x72, 0xfa, 0x88, 0xc1, 0x65, 0x20, 0xae, 0x46, 0xe5, 0x3e,
907 0xf4, 0x45, 0x19, 0xa9, 0x0b, 0x6c, 0x4b, 0x7d, 0x5b, 0x7f, 0x37, 0x11,
908 0xd4, 0xb6, 0xa1, 0x3e, 0x30, 0x84, 0x42, 0xc4, 0xfd, 0xc1, 0x3a, 0xe0,
909 0xf3, 0x8b, 0x3b, 0x53, 0x0a, 0x3c, 0xc6, 0x34, 0xb4, 0xec, 0x07, 0x76,
910 0xa4, 0x82, 0x31, 0x83, 0xc3, 0xeb, 0x19, 0x93, 0xba, 0x41, 0x2d, 0xcd,
911 0xe7, 0x5b, 0x52, 0xc0, 0xd6, 0xd4, 0x34, 0x6c, 0xeb, 0xb3, 0xf1, 0xa2,
912 0x59, 0xa3, 0x1d, 0x60, 0x0f, 0xdd, 0xce, 0xf3, 0x69, 0xb0, 0xd2, 0xf2,
913 0xfc, 0x03, 0xfb, 0x27, 0xb3, 0x35, 0x3c, 0x3b, 0xe6, 0xc7, 0x0b, 0x63,
914 0x15, 0xd8, 0xd1, 0x57, 0x81, 0xed, 0x7d, 0x75, 0x50, 0x0d, 0x1b, 0x75,
915 0xe1, 0x3a, 0x14, 0xcc, 0xb7, 0xf1, 0x8e, 0xd9, 0x80, 0xad, 0x6c, 0xf8,
916 0xcd, 0x86, 0x2a, 0xac, 0xd1, 0xaa, 0xb1, 0xc5, 0xf8, 0x0a, 0x72, 0x63,
917 0xfd, 0xfc, 0x62, 0x2a, 0x85, 0xb8, 0x27, 0xea, 0x56, 0x55, 0xe3, 0x56,
918 0x9c, 0xdb, 0x1d, 0xc5, 0x27, 0xbb, 0xb1, 0xba, 0x0c, 0xb6, 0x9d, 0x09,
919 0x87, 0xda, 0x36, 0x2a, 0x9a, 0xfe, 0x4c, 0x86, 0x02, 0xad, 0x74, 0xb3,
920 0x3d, 0xe8, 0x43, 0x99, 0xa9, 0x53, 0xc1, 0xfe, 0x52, 0xec, 0x37, 0x25,
921 0xb2, 0x04, 0xf0, 0x93, 0xd9, 0x7f, 0x41, 0x7b, 0xc8, 0x8d, 0x69, 0x6b,
922 0xea, 0x2d, 0xca, 0xa4, 0x53, 0x9e, 0x6a, 0xfc, 0x60, 0x2c, 0x80, 0xef,
923 0x53, 0xb6, 0xe7, 0xc6, 0x44, 0xc6, 0xe0, 0x3e, 0x0b, 0x15, 0x18, 0xee,
924 0xab, 0xc6, 0xb3, 0x46, 0x03, 0x9e, 0xa3, 0x8c, 0x9b, 0xcd, 0x3a, 0xac,
925 0x89, 0xdc, 0x4f, 0x79, 0x14, 0xac, 0x6c, 0xf8, 0xf3, 0x49, 0xb9, 0x82,
926 0x3a, 0x54, 0x15, 0xb1, 0xca, 0x60, 0x9d, 0xae, 0x4a, 0x9b, 0x97, 0xe5,
927 0xed, 0x4d, 0xc1, 0xf2, 0x46, 0x45, 0xe6, 0x5b, 0x91, 0xa1, 0xbc, 0xdf,
928 0xdb, 0x1d, 0x32, 0x37, 0xa8, 0x58, 0xee, 0xa3, 0xcc, 0x8f, 0x84, 0x43,
929 0x91, 0x39, 0x94, 0x79, 0x24, 0xa3, 0x72, 0x3c, 0x7e, 0xfd, 0x10, 0x65,
930 0x8f, 0xad, 0x54, 0x29, 0x3b, 0x65, 0x49, 0x51, 0x96, 0x14, 0x65, 0x49,
931 0x51, 0x16, 0x47, 0xee, 0x3a, 0xca, 0x9c, 0x9b, 0xa3, 0xa1, 0xcc, 0x04,
932 0xe5, 0x9d, 0x2a, 0x67, 0x35, 0x65, 0x47, 0xbc, 0x22, 0xfa, 0x6d, 0xbd,
933 0x26, 0x49, 0x7d, 0xa7, 0x6c, 0xfb, 0x4d, 0xd3, 0xb6, 0x3f, 0x35, 0x7d,
934 0xd4, 0x5f, 0x8a, 0x76, 0x90, 0x97, 0x67, 0xa6, 0x55, 0x10, 0x45, 0x0b,
935 0x4d, 0xd0, 0x3e, 0xde, 0x1c, 0x8a, 0x54, 0x2a, 0x2a, 0xdc, 0x86, 0xa6,
936 0xcf, 0xce, 0x06, 0x4d, 0xea, 0x47, 0x0f, 0x65, 0xa1, 0x1b, 0x59, 0xb6,
937 0x75, 0x45, 0xbf, 0x41, 0x6d, 0x1c, 0xd2, 0xaf, 0xce, 0xfe, 0x27, 0x26,
938 0xe7, 0x4e, 0xda, 0x0f, 0xb0, 0x4f, 0xe9, 0x5f, 0xda, 0xb6, 0xed, 0xdf,
939 0x98, 0x30, 0x34, 0x84, 0xac, 0x7e, 0xda, 0x9f, 0x2b, 0xaa, 0xe9, 0x1d,
940 0x19, 0x3e, 0xbf, 0xd4, 0x46, 0x6e, 0x3e, 0xd6, 0x64, 0xf4, 0xc9, 0x31,
941 0x04, 0x29, 0x82, 0xd8, 0x41, 0x20, 0xee, 0x8b, 0x6a, 0x22, 0x7b, 0xdb,
942 0xbe, 0xde, 0x2e, 0x7b, 0x86, 0x21, 0xba, 0x32, 0x3a, 0x67, 0xb8, 0x7c,
943 0x91, 0x73, 0x73, 0x1f, 0xb5, 0x4a, 0x9b, 0xc3, 0x28, 0x36, 0xe0, 0x2b,
944 0x32, 0xd0, 0x96, 0x1c, 0x2d, 0xb6, 0x4a, 0xa2, 0x3f, 0xbe, 0xbb, 0x77,
945 0xd4, 0x8b, 0xe2, 0x51, 0x03, 0x45, 0xa3, 0x4f, 0xbb, 0x51, 0xd6, 0x80,
946 0x5d, 0x63, 0x0f, 0xb9, 0x73, 0x63, 0x5b, 0x32, 0x39, 0x46, 0xc7, 0xf6,
947 0xbd, 0xef, 0x26, 0xce, 0xdb, 0x05, 0x46, 0xd1, 0x7d, 0xae, 0xa8, 0xa1,
948 0x1f, 0x02, 0xce, 0xaf, 0x69, 0x5e, 0x84, 0x6e, 0x4d, 0xc1, 0x4c, 0xe3,
949 0x95, 0x12, 0x94, 0x45, 0x60, 0x8d, 0x55, 0xc5, 0x0b, 0xa2, 0xfe, 0x38,
950 0xe7, 0x06, 0x2f, 0x27, 0xd2, 0xf0, 0xf4, 0xda, 0xb6, 0x94, 0x7d, 0x07,
951 0x77, 0xdf, 0xad, 0x46, 0x8f, 0xde, 0xec, 0x41, 0x0b, 0xcb, 0x63, 0xd3,
952 0x89, 0xe6, 0x4f, 0x15, 0x75, 0x77, 0x1b, 0xac, 0x11, 0x17, 0x62, 0x5a,
953 0x9c, 0xdf, 0xd7, 0x5f, 0xbf, 0x3c, 0xd2, 0x86, 0xc4, 0xc8, 0x05, 0xde,
954 0x77, 0xf3, 0x5e, 0x04, 0xc9, 0xd4, 0xf5, 0xd7, 0xdf, 0x11, 0x89, 0xa3,
955 0x77, 0x44, 0xae, 0xdd, 0x18, 0xaf, 0x88, 0x63, 0xfb, 0x5e, 0x1d, 0xe5,
956 0x46, 0x1b, 0x52, 0x23, 0x72, 0x6d, 0xdb, 0x67, 0xcc, 0xef, 0x62, 0x5f,
957 0x03, 0xfd, 0xff, 0x9a, 0x36, 0x6c, 0xdb, 0x6b, 0xa1, 0xd0, 0xb0, 0xa8,
958 0x7b, 0xc5, 0xfd, 0xf7, 0x0d, 0x0a, 0xf4, 0xbb, 0xe1, 0x2e, 0x30, 0x44,
959 0x6f, 0x11, 0xf7, 0xfa, 0x44, 0x54, 0x9b, 0x69, 0xd8, 0xf6, 0x90, 0x39,
960 0x07, 0x0f, 0xb4, 0xad, 0x81, 0x75, 0xc0, 0x07, 0x6b, 0x95, 0x7c, 0xb7,
961 0x51, 0x87, 0x6b, 0xd0, 0x7d, 0x60, 0x0d, 0x7a, 0x9e, 0xa0, 0xe3, 0x56,
962 0x68, 0xce, 0x3c, 0xfd, 0x64, 0xb6, 0xc8, 0x24, 0xf2, 0xb5, 0xf3, 0x23,
963 0xba, 0xfd, 0x4b, 0x7e, 0x4b, 0x99, 0x0b, 0x36, 0xa6, 0x5f, 0x2e, 0xb3,
964 0x9d, 0x65, 0xb6, 0x5d, 0x51, 0x26, 0x82, 0xa7, 0xc6, 0x44, 0x17, 0xa2,
965 0xb2, 0x3f, 0xa5, 0x8b, 0x9f, 0xda, 0xdd, 0x7e, 0xd1, 0x85, 0xd5, 0xee,
966 0x41, 0xb0, 0xed, 0x41, 0xc5, 0x8d, 0xa5, 0xbd, 0x60, 0x1d, 0x3a, 0x41,
967 0x71, 0x30, 0x56, 0xab, 0x44, 0x51, 0xdc, 0xab, 0x60, 0x69, 0xb8, 0x08,
968 0x7a, 0x85, 0xb4, 0xf7, 0x4b, 0xdb, 0xd2, 0x44, 0xde, 0x13, 0x28, 0xe1,
969 0xfd, 0x75, 0xe1, 0x9f, 0x13, 0xcf, 0x44, 0xa6, 0x30, 0xcb, 0xaf, 0xe0,
970 0xfd, 0x37, 0xa6, 0xfc, 0x96, 0x72, 0xb6, 0xbd, 0x99, 0x3e, 0xdf, 0x43,
971 0x1b, 0xdf, 0x9e, 0x8a, 0x05, 0xa9, 0x25, 0xcb, 0x13, 0xe5, 0xfd, 0x68,
972 0xa8, 0xb5, 0x1b, 0xd2, 0x0f, 0x94, 0xe2, 0x28, 0xdc, 0x99, 0xe6, 0x09,
973 0xef, 0xa9, 0x84, 0xd1, 0xfe, 0x8c, 0xe2, 0xa1, 0xb1, 0x4b, 0x3f, 0x13,
974 0xde, 0x37, 0x12, 0x0a, 0xde, 0x37, 0x42, 0x1d, 0x67, 0x95, 0x09, 0xef,
975 0xeb, 0x19, 0x0d, 0x33, 0x7a, 0x83, 0xed, 0x96, 0x12, 0xc1, 0x8f, 0x32,
976 0x7e, 0x04, 0x7a, 0xa3, 0x38, 0x92, 0x31, 0xf1, 0xf4, 0x15, 0x38, 0xf0,
977 0xa5, 0x7f, 0x96, 0x8b, 0x63, 0x5f, 0x97, 0xd0, 0xd1, 0x6d, 0x5e, 0xb4,
978 0x63, 0x1a, 0xe2, 0xe5, 0xd1, 0x09, 0xef, 0x27, 0xbd, 0x50, 0xca, 0xa2,
979 0x46, 0x20, 0xab, 0xfc, 0x83, 0x1d, 0xf7, 0x4b, 0x31, 0xca, 0xe7, 0x60,
980 0x59, 0x94, 0x76, 0x47, 0x8c, 0x4a, 0x9d, 0xb7, 0x4b, 0x68, 0xb3, 0x05,
981 0xd1, 0x6b, 0x31, 0x32, 0x68, 0xe0, 0xe9, 0x84, 0x6d, 0x7f, 0x6c, 0x8e,
982 0x47, 0x7c, 0x30, 0xda, 0x3e, 0x42, 0x30, 0x36, 0x87, 0x7a, 0x39, 0x91,
983 0x31, 0x30, 0x9c, 0x88, 0xe2, 0xc5, 0x44, 0x8d, 0xb6, 0x19, 0x4d, 0x88,
984 0x05, 0x72, 0x31, 0x64, 0x94, 0x72, 0x0f, 0x85, 0xda, 0x50, 0x1e, 0x8d,
985 0xe0, 0x28, 0xe5, 0x3e, 0x37, 0x57, 0xda, 0x31, 0xf1, 0xfa, 0xbf, 0x42,
986 0x56, 0xe2, 0x3b, 0x9e, 0xa4, 0xac, 0x91, 0xa6, 0x8b, 0x36, 0xa6, 0x79,
987 0x71, 0xda, 0xbc, 0x86, 0x76, 0x08, 0xab, 0x28, 0xea, 0x75, 0xf7, 0x24,
988 0x34, 0x1c, 0xce, 0xf8, 0xdc, 0x9b, 0x13, 0x7e, 0x1c, 0xa0, 0xbf, 0xcd,
989 0x88, 0xc2, 0x0a, 0xb0, 0xdd, 0x19, 0xc4, 0xb5, 0xec, 0x60, 0x35, 0xc6,
990 0x06, 0x83, 0xe6, 0x1b, 0x4a, 0x00, 0x87, 0x86, 0xaf, 0xc5, 0xe8, 0xa0,
991 0x82, 0x91, 0x10, 0x65, 0xe7, 0xf5, 0xf7, 0x06, 0xaf, 0x47, 0x66, 0xd0,
992 0x85, 0x5d, 0x8e, 0x5e, 0x1d, 0x9c, 0x99, 0xfc, 0xbe, 0x16, 0xe9, 0x61,
993 0xb8, 0xe7, 0xf4, 0x6a, 0x78, 0x26, 0xe3, 0x76, 0x1b, 0xbd, 0x7e, 0x0c,
994 0x67, 0x7e, 0xca, 0x79, 0x93, 0xb6, 0x75, 0x0c, 0x25, 0x0e, 0x39, 0x73,
995 0x58, 0x1e, 0x65, 0x63, 0xb9, 0xf8, 0xca, 0x58, 0xa6, 0x33, 0xce, 0x34,
996 0x13, 0x87, 0xc4, 0xc7, 0xbd, 0xc4, 0x20, 0xf1, 0xf1, 0xb7, 0x14, 0x94,
997 0x35, 0x63, 0xf3, 0x58, 0xfe, 0xb9, 0x42, 0xfb, 0x77, 0x63, 0x9d, 0xd6,
998 0x80, 0x44, 0x4a, 0xec, 0x34, 0x8f, 0xcb, 0x72, 0x2d, 0xf3, 0x5f, 0x0c,
999 0xeb, 0x60, 0x31, 0x76, 0xd1, 0xc7, 0x76, 0xee, 0x96, 0xfb, 0xb6, 0xfd,
1000 0x50, 0xb8, 0x9c, 0x36, 0x86, 0xc5, 0x45, 0x08, 0x99, 0x1f, 0x38, 0xb2,
1001 0x59, 0x38, 0x94, 0x91, 0x18, 0xaa, 0x33, 0xbe, 0x9d, 0x60, 0x5f, 0xcd,
1002 0xec, 0xc7, 0xc4, 0x4f, 0x39, 0x37, 0x7f, 0x3d, 0x56, 0x87, 0x1f, 0x8e,
1003 0x19, 0xf8, 0xef, 0x63, 0x3a, 0x9e, 0xbf, 0x02, 0xd7, 0xef, 0xa6, 0xae,
1004 0x04, 0xc3, 0x1a, 0xb0, 0x25, 0x55, 0x80, 0x6d, 0x83, 0xc5, 0xd8, 0x3c,
1005 0x58, 0x53, 0xf7, 0x22, 0xf1, 0xf8, 0x87, 0xe6, 0x1d, 0x18, 0xaf, 0x6c,
1006 0x76, 0x7c, 0x66, 0x07, 0xef, 0xef, 0x1c, 0xac, 0xe1, 0x1c, 0xda, 0xb6,
1007 0x1a, 0xae, 0x8f, 0x1c, 0x25, 0xbe, 0x4f, 0xf8, 0x83, 0xfa, 0xb8, 0x1a,
1008 0xd4, 0x63, 0xf0, 0x20, 0xd1, 0xa0, 0xc2, 0x9a, 0x1e, 0x4c, 0xd3, 0x8b,
1009 0xe1, 0x37, 0x1e, 0xe2, 0xd8, 0x82, 0xba, 0xa5, 0x36, 0xd0, 0x7e, 0x19,
1010 0x33, 0x54, 0x93, 0xf8, 0x52, 0x8c, 0x4f, 0x06, 0x83, 0x3d, 0x96, 0xba,
1011 0x02, 0x56, 0xa5, 0x6d, 0x7f, 0x3f, 0x8c, 0x8e, 0x6b, 0xa2, 0x88, 0x4d,
1012 0x67, 0x2c, 0xb8, 0x3e, 0x1a, 0x05, 0xe3, 0x18, 0xce, 0xf5, 0x1a, 0x81,
1013 0xbf, 0x53, 0xee, 0xc6, 0x7f, 0x6c, 0x0b, 0xea, 0xba, 0x5a, 0x6f, 0x1d,
1014 0x50, 0x49, 0x36, 0xaa, 0xa0, 0x07, 0xa2, 0xcb, 0xd0, 0xe9, 0xf0, 0x04,
1015 0x05, 0x9a, 0x61, 0x62, 0x73, 0x8a, 0x95, 0xfc, 0x35, 0xed, 0xfd, 0x6a,
1016 0xcd, 0x05, 0x53, 0x0d, 0x9e, 0x68, 0x53, 0x89, 0xb7, 0x4d, 0xe7, 0x6c,
1017 0xbd, 0xca, 0xb6, 0x1b, 0x9b, 0xa4, 0x4f, 0x1d, 0x95, 0x9c, 0xe7, 0x0a,
1018 0xce, 0x73, 0x63, 0xb6, 0x18, 0x67, 0x07, 0x61, 0x5d, 0x13, 0x0d, 0xb6,
1019 0x3e, 0xa2, 0x16, 0xe3, 0xc3, 0xe1, 0x62, 0xbc, 0x33, 0xe8, 0xc6, 0x07,
1020 0x83, 0xb6, 0xbd, 0xde, 0x2c, 0x47, 0x41, 0x18, 0xd3, 0x0b, 0x10, 0x3a,
1021 0x3f, 0x04, 0x0b, 0x5f, 0xb0, 0xec, 0xef, 0x06, 0x03, 0xf8, 0xc7, 0xc1,
1022 0xaf, 0xe2, 0xf9, 0xca, 0xd8, 0xc9, 0x69, 0x8c, 0x91, 0x17, 0x68, 0x3f,
1023 0xe7, 0x12, 0xc1, 0xf6, 0x19, 0xae, 0x60, 0x27, 0x79, 0xcb, 0x86, 0xc7,
1024 0x94, 0x60, 0xfc, 0x0d, 0x25, 0xa8, 0xf7, 0x2a, 0x7e, 0x7c, 0x44, 0x3b,
1025 0x3d, 0x93, 0xa9, 0x89, 0xfc, 0x9c, 0xfd, 0xff, 0xde, 0xfc, 0xa1, 0x3d,
1026 0x5e, 0x25, 0x3a, 0x14, 0x7d, 0x51, 0xe7, 0x29, 0xea, 0x9c, 0xfe, 0xfb,
1027 0xc3, 0x14, 0x75, 0x4e, 0x79, 0x9e, 0xff, 0x83, 0xf8, 0x25, 0xf3, 0x15,
1028 0xe1, 0x3c, 0x5e, 0x87, 0xff, 0xe2, 0x8c, 0xed, 0xa4, 0xfd, 0x9f, 0xfc,
1029 0x32, 0xbe, 0xcf, 0xfd, 0x39, 0x0c, 0x92, 0x71, 0x9e, 0xb0, 0xe3, 0x9a,
1030 0x8c, 0x51, 0xc6, 0xea, 0xe8, 0x52, 0xef, 0x50, 0x1e, 0x55, 0x51, 0x6c,
1031 0xdb, 0x4f, 0x98, 0x93, 0xcf, 0xfd, 0xf9, 0xb1, 0x7e, 0x95, 0xf7, 0x65,
1032 0xbc, 0x67, 0x5d, 0xa2, 0x7b, 0x5d, 0xbd, 0x89, 0xbf, 0x83, 0x56, 0x0c,
1033 0xa7, 0x0b, 0xf9, 0xbb, 0x2e, 0x76, 0xe9, 0xf7, 0x93, 0xa5, 0x57, 0x3e,
1034 0xa7, 0x9d, 0x3a, 0xfd, 0xdd, 0xcd, 0xdf, 0x32, 0x96, 0x37, 0x69, 0x37,
1035 0x5f, 0x66, 0x27, 0x62, 0x23, 0x75, 0xb4, 0xa7, 0x33, 0x12, 0x57, 0x2c,
1036 0x7f, 0xd4, 0x6b, 0xa9, 0x51, 0xe8, 0x74, 0x7d, 0xaf, 0x12, 0xed, 0x80,
1037 0x9e, 0xb1, 0x70, 0x4f, 0xb3, 0x0b, 0xdf, 0x6a, 0x56, 0x30, 0xcd, 0xe8,
1038 0x40, 0xdf, 0x3c, 0xcb, 0xae, 0x30, 0xf6, 0xab, 0xe2, 0x03, 0x05, 0x49,
1039 0x58, 0xf4, 0x3b, 0x44, 0xc8, 0x95, 0xca, 0xff, 0x9d, 0x82, 0xd3, 0xe1,
1040 0x10, 0x6d, 0x6e, 0x0b, 0x39, 0x15, 0x50, 0x98, 0x84, 0xb7, 0x94, 0xf3,
1041 0x3f, 0xda, 0x0b, 0x6f, 0x31, 0x7d, 0x7f, 0x59, 0x6f, 0x4d, 0xc7, 0x7b,
1042 0xc4, 0x8a, 0xac, 0x12, 0x6c, 0xa7, 0xbe, 0xcd, 0x32, 0x25, 0xd8, 0x7a,
1043 0x3b, 0xf5, 0x5d, 0xab, 0x48, 0x3f, 0x51, 0xd4, 0x65, 0xb6, 0x10, 0x73,
1044 0xe4, 0x3a, 0x02, 0x23, 0xf3, 0xab, 0x49, 0xd9, 0xe1, 0xf5, 0x50, 0x86,
1045 0x83, 0x89, 0x77, 0xed, 0xb4, 0x16, 0xd4, 0xd3, 0xce, 0xef, 0x0d, 0xfc,
1046 0x0d, 0x6f, 0x41, 0x74, 0x23, 0x5e, 0x4a, 0x3c, 0xe5, 0xcf, 0x97, 0xcb,
1047 0xc9, 0x7a, 0xb5, 0x3c, 0xff, 0xd3, 0x8e, 0xf9, 0x73, 0xf2, 0xf8, 0x92,
1048 0x5b, 0x40, 0x8e, 0xe2, 0x2d, 0x64, 0x5f, 0xef, 0x3b, 0xf5, 0x23, 0xac,
1049 0x5f, 0xd3, 0xde, 0xab, 0x04, 0xeb, 0x3e, 0x42, 0xbd, 0xfe, 0x3d, 0x04,
1050 0x5b, 0x8f, 0x92, 0x5b, 0x1a, 0x93, 0xf2, 0x84, 0x32, 0x0e, 0x9f, 0x71,
1051 0xe4, 0x99, 0x95, 0x81, 0xe2, 0xea, 0x85, 0x6f, 0xa6, 0x51, 0x8b, 0x2e,
1052 0x67, 0x4e, 0xa1, 0x04, 0x7a, 0x75, 0x94, 0x91, 0xbf, 0x04, 0x46, 0x81,
1053 0xb1, 0x01, 0x72, 0xb9, 0x70, 0x0d, 0xbe, 0xc9, 0x58, 0x30, 0x83, 0x65,
1054 0x1e, 0xd3, 0x2e, 0xe1, 0x97, 0xd2, 0x93, 0x20, 0xc0, 0x4c, 0xcf, 0xf1,
1055 0xb2, 0xf8, 0xbd, 0x88, 0xc9, 0xbd, 0x27, 0x13, 0x50, 0x52, 0x89, 0xe0,
1056 0x3e, 0xc0, 0x18, 0x0f, 0xbb, 0x62, 0x0f, 0x07, 0xd0, 0x85, 0x73, 0xe1,
1057 0x50, 0x3c, 0xab, 0x84, 0xda, 0x07, 0x14, 0xd3, 0xbb, 0x8b, 0xfd, 0x6d,
1058 0x67, 0x99, 0x1d, 0xfc, 0x9c, 0x35, 0x0c, 0x73, 0x85, 0x12, 0xbb, 0xa1,
1059 0x80, 0x65, 0x6a, 0xc2, 0x21, 0xf2, 0xcc, 0xd0, 0x85, 0x95, 0x30, 0xbd,
1060 0x4f, 0x65, 0xa4, 0xad, 0x88, 0xb2, 0x25, 0xfb, 0xa4, 0x9a, 0xc3, 0xa3,
1061 0xdf, 0x4f, 0xea, 0xec, 0x1d, 0xf9, 0xed, 0xf4, 0xed, 0xee, 0xfd, 0xaf,
1062 0x85, 0x7f, 0x78, 0xef, 0xaf, 0xa7, 0x5d, 0x79, 0xaf, 0x5e, 0x1b, 0xa6,
1063 0xff, 0xb9, 0x8c, 0x22, 0xce, 0x9d, 0xf0, 0xa3, 0x58, 0x9d, 0x07, 0x72,
1064 0xcf, 0x85, 0xb4, 0x3b, 0x16, 0x70, 0xe1, 0x73, 0x3b, 0xb6, 0x4a, 0xee,
1065 0x15, 0x23, 0xde, 0x56, 0x1f, 0x70, 0xa3, 0x3e, 0xb2, 0x95, 0x58, 0x30,
1066 0xb1, 0x6a, 0x21, 0x9f, 0x85, 0xcc, 0x17, 0x51, 0xa3, 0x6f, 0x85, 0x5c,
1067 0x7f, 0x46, 0x9b, 0x5d, 0x28, 0x75, 0x59, 0x26, 0xc7, 0x7d, 0x04, 0x6b,
1068 0xb6, 0x98, 0x36, 0x5e, 0x22, 0x4c, 0x14, 0x46, 0x8f, 0x28, 0xa7, 0x13,
1069 0x5f, 0xd8, 0x31, 0x37, 0x96, 0xd3, 0x2f, 0x4d, 0xea, 0x59, 0xf7, 0x46,
1070 0x43, 0xfa, 0x09, 0x66, 0x0a, 0xae, 0xa8, 0xa5, 0x4c, 0x64, 0xb6, 0x28,
1071 0xef, 0x66, 0x7a, 0x94, 0x33, 0x19, 0xa9, 0x7b, 0x44, 0x79, 0x27, 0x23,
1072 0xf1, 0xb0, 0x5a, 0x3f, 0x4e, 0x7e, 0x43, 0x4e, 0xa5, 0x6e, 0x36, 0xa1,
1073 0x6c, 0x33, 0xcb, 0xc8, 0xf3, 0x8d, 0xba, 0x21, 0xca, 0x7b, 0xb0, 0x19,
1074 0xe6, 0x76, 0xd3, 0x83, 0x09, 0x0d, 0xbe, 0xcd, 0xa6, 0x5b, 0x7e, 0x33,
1075 0x1f, 0x90, 0xba, 0xd5, 0xfa, 0xd6, 0xcc, 0x45, 0xfa, 0x57, 0xee, 0xf7,
1076 0xc1, 0xe6, 0xfc, 0xbd, 0xdf, 0xda, 0xe3, 0xab, 0x54, 0xfe, 0xfe, 0x77,
1077 0x2e, 0x0e, 0x85, 0x75, 0xa7, 0xf2, 0x73, 0xe1, 0x52, 0x2a, 0xf9, 0x63,
1078 0x05, 0x2c, 0x2d, 0x68, 0xa5, 0x99, 0x0e, 0x6d, 0x4e, 0x35, 0xd2, 0xdf,
1079 0x02, 0x8c, 0x95, 0x51, 0xe2, 0x3b, 0x79, 0x2f, 0xfb, 0x2c, 0x30, 0x7c,
1080 0x58, 0x9c, 0xa8, 0x71, 0xe5, 0xf4, 0xa7, 0x12, 0xc3, 0x5c, 0x8c, 0xe9,
1081 0xc2, 0xf1, 0xae, 0xe6, 0xdc, 0xd5, 0xfa, 0x07, 0x94, 0xbb, 0xc8, 0x30,
1082 0xea, 0x8a, 0x94, 0x6a, 0xfd, 0xdd, 0x4c, 0x94, 0x3e, 0xde, 0xce, 0x7e,
1083 0x7d, 0x78, 0x37, 0x51, 0xc6, 0x1c, 0x24, 0x18, 0xb3, 0xd8, 0xe0, 0x92,
1084 0xe6, 0x00, 0xc8, 0xf9, 0xa6, 0xfc, 0xb5, 0x81, 0xf1, 0x5f, 0x62, 0xb4,
1085 0x7a, 0xdb, 0xdc, 0x08, 0x36, 0x64, 0xe0, 0x5e, 0xd7, 0x1c, 0xc5, 0x7a,
1086 0xc6, 0xf6, 0x87, 0x18, 0x2f, 0x37, 0x32, 0x16, 0xee, 0x0a, 0x73, 0x6c,
1087 0x15, 0xb6, 0x5d, 0x68, 0x74, 0x49, 0x3e, 0x83, 0x5e, 0xc6, 0xe2, 0xb5,
1088 0x8c, 0x2f, 0x5b, 0x78, 0x7d, 0x2a, 0xf3, 0xcf, 0xf6, 0x43, 0xcc, 0xa7,
1089 0x5e, 0xba, 0xa2, 0x4d, 0xa8, 0xc3, 0x46, 0x7d, 0xdd, 0x56, 0xc6, 0x62,
1090 0xb6, 0x6b, 0x95, 0x45, 0x6d, 0xfb, 0x86, 0x50, 0x30, 0xe6, 0x51, 0x4c,
1091 0xbc, 0x38, 0x3a, 0x61, 0xeb, 0xd3, 0x25, 0x97, 0xca, 0xc7, 0x41, 0x19,
1092 0xab, 0xe4, 0x08, 0x82, 0x0f, 0x92, 0x27, 0x4c, 0xc5, 0x08, 0x15, 0x4b,
1093 0x06, 0x25, 0x4f, 0x08, 0x60, 0x65, 0xe2, 0xbb, 0x78, 0xb1, 0xc1, 0x8d,
1094 0x56, 0xe6, 0x58, 0xb7, 0x25, 0x7c, 0x58, 0x41, 0x2c, 0x5d, 0x9a, 0x60,
1095 0xee, 0xa4, 0xf9, 0xb1, 0x2c, 0xe1, 0xc6, 0xb1, 0x06, 0xe6, 0x40, 0xfe,
1096 0x42, 0x7c, 0x64, 0xba, 0x70, 0xdc, 0xd4, 0x90, 0x76, 0xfc, 0x61, 0x17,
1097 0x31, 0x90, 0x7a, 0x54, 0x25, 0x77, 0x10, 0x1d, 0xba, 0xa8, 0x4f, 0x15,
1098 0xf1, 0x4b, 0x3a, 0xfc, 0xb2, 0x5c, 0x40, 0xe4, 0x92, 0x7c, 0xe0, 0x37,
1099 0x76, 0x7c, 0xba, 0xd4, 0x87, 0xe5, 0x8b, 0xca, 0x38, 0x84, 0xdf, 0x12,
1100 0x27, 0x47, 0x4d, 0x72, 0xbb, 0xa9, 0x43, 0x3d, 0x4f, 0x6e, 0x5d, 0x8e,
1101 0xb7, 0x0c, 0xe1, 0xd6, 0x6f, 0x42, 0xa3, 0xef, 0xf6, 0x8c, 0x86, 0x3a,
1102 0xce, 0x2b, 0x2e, 0x9c, 0x32, 0xca, 0xc8, 0xfb, 0x38, 0x0f, 0xa3, 0x70,
1103 0x6f, 0x9d, 0x6b, 0x22, 0x39, 0xda, 0x1d, 0x29, 0xe5, 0x78, 0xdd, 0x73,
1104 0x73, 0x9c, 0xe8, 0xeb, 0xd4, 0xed, 0x9a, 0xb0, 0xc3, 0x89, 0x72, 0x7c,
1105 0x40, 0xb3, 0xed, 0x77, 0x0c, 0xd1, 0x33, 0x70, 0x78, 0x52, 0xc7, 0x07,
1106 0x79, 0xdd, 0x33, 0xa9, 0xe3, 0x2d, 0x6c, 0x8f, 0xfe, 0x87, 0x6d, 0x57,
1107 0xf0, 0x18, 0x1d, 0xcc, 0x29, 0xc9, 0x6f, 0x88, 0xc3, 0xc4, 0x95, 0x18,
1108 0x75, 0xfc, 0x72, 0x66, 0x83, 0xe0, 0x36, 0xa7, 0xbb, 0xd1, 0xc1, 0xef,
1109 0x98, 0x7a, 0x98, 0x76, 0x20, 0x7a, 0x78, 0x6b, 0x32, 0xb7, 0xb1, 0xed,
1110 0x01, 0x53, 0x74, 0x9c, 0xcf, 0xcb, 0x44, 0xd7, 0x37, 0x4a, 0x8e, 0xd5,
1111 0x03, 0x7c, 0xc1, 0xb2, 0x2e, 0xe2, 0xee, 0x42, 0xfc, 0xa0, 0x4d, 0x6c,
1112 0xa7, 0xd4, 0x89, 0x95, 0xf3, 0x6b, 0x6d, 0x3b, 0xdc, 0xa4, 0xe3, 0x82,
1113 0x51, 0x1f, 0x69, 0x54, 0x67, 0x51, 0xd6, 0x28, 0xf6, 0x91, 0x0f, 0x74,
1114 0xa7, 0x66, 0x22, 0xe6, 0x17, 0x5b, 0x43, 0x47, 0x41, 0x0e, 0xc3, 0x71,
1115 0x26, 0x61, 0xd4, 0x6d, 0xc3, 0x0c, 0x1c, 0xf0, 0xb7, 0x90, 0xc7, 0xa9,
1116 0x2d, 0x4c, 0xff, 0xc9, 0x9f, 0x0c, 0x6b, 0x07, 0xce, 0xda, 0x69, 0xbf,
1117 0xcd, 0x38, 0x49, 0x18, 0xa0, 0x2e, 0x5f, 0xd1, 0x5c, 0x78, 0xb5, 0xee,
1118 0x9a, 0x49, 0xbe, 0x29, 0x9c, 0xe5, 0x3d, 0xfb, 0x98, 0x5f, 0xfa, 0x62,
1119 0x9e, 0xa7, 0x2e, 0x73, 0x49, 0x1e, 0xe8, 0x36, 0xa4, 0x6d, 0xe6, 0x0b,
1120 0x63, 0x57, 0xcb, 0x30, 0x61, 0x4f, 0xf8, 0x45, 0x86, 0xa0, 0xa6, 0xab,
1121 0x7f, 0x6c, 0x1e, 0xaf, 0xc3, 0xcf, 0x35, 0x37, 0x7c, 0xe4, 0xc5, 0xaf,
1122 0xf9, 0x73, 0x6d, 0xf4, 0x9a, 0xe3, 0x33, 0x4a, 0x1d, 0xac, 0x3c, 0xa2,
1123 0x24, 0x89, 0x0f, 0xe3, 0x1e, 0x68, 0xe5, 0x51, 0xb7, 0xae, 0x11, 0x13,
1124 0x36, 0x13, 0x13, 0x2c, 0x62, 0x42, 0x5f, 0xe6, 0x88, 0x92, 0xca, 0x7c,
1125 0x46, 0x5d, 0x48, 0x1d, 0xb1, 0x9d, 0x2d, 0x94, 0xe5, 0x27, 0x36, 0xaa,
1126 0x44, 0x9e, 0x0b, 0xbc, 0xdf, 0x42, 0x1e, 0x92, 0x97, 0x53, 0x7c, 0x95,
1127 0x10, 0x54, 0x2c, 0xcf, 0x52, 0xb9, 0xdf, 0xaa, 0x5c, 0xcf, 0x70, 0x4b,
1128 0xb9, 0xee, 0xb1, 0xa3, 0x4b, 0xdd, 0x58, 0x80, 0xd9, 0xe1, 0x85, 0x8b,
1129 0x44, 0x17, 0x6a, 0x34, 0xa6, 0x7b, 0x61, 0x55, 0xb9, 0x88, 0xe5, 0xef,
1130 0x35, 0x34, 0x60, 0x11, 0x73, 0xce, 0xb3, 0x04, 0xa7, 0x6e, 0xc3, 0x85,
1131 0x71, 0xea, 0xe7, 0x69, 0x53, 0xd6, 0x1b, 0x6c, 0xdc, 0x16, 0xb6, 0xe2,
1132 0xf4, 0x78, 0xab, 0x94, 0xb6, 0x57, 0x6c, 0x08, 0x4f, 0x28, 0x43, 0x49,
1133 0xd4, 0x5d, 0x77, 0x16, 0x41, 0x73, 0x17, 0x79, 0x92, 0x5e, 0x31, 0x3b,
1134 0xe2, 0xa1, 0xe6, 0x5e, 0x4f, 0x84, 0x22, 0xc7, 0x95, 0x9c, 0x3f, 0xbd,
1135 0x4c, 0xdb, 0x78, 0x2b, 0x61, 0x74, 0x16, 0xba, 0x72, 0xbf, 0xdf, 0x70,
1136 0xf2, 0xd9, 0xbc, 0x3f, 0x05, 0x26, 0x71, 0xc7, 0xeb, 0x3d, 0x93, 0xc0,
1137 0x79, 0xb5, 0x59, 0xf2, 0x5a, 0x9c, 0xdf, 0x6c, 0x8e, 0x2b, 0x1e, 0xa3,
1138 0x8c, 0xfa, 0x10, 0x2c, 0x2e, 0x20, 0xa7, 0x14, 0xee, 0xe0, 0xf5, 0x9e,
1139 0x65, 0x19, 0x72, 0xc2, 0x89, 0xba, 0xf9, 0xf5, 0x11, 0x2f, 0x62, 0x56,
1140 0x21, 0xfd, 0xba, 0x34, 0xea, 0xf7, 0xde, 0x98, 0xb5, 0xaa, 0x7c, 0xf4,
1141 0x8b, 0x12, 0xe6, 0xbb, 0xb3, 0x93, 0x0b, 0xcb, 0x24, 0x57, 0xdc, 0x38,
1142 0xca, 0x91, 0x55, 0xf6, 0x57, 0xa9, 0x51, 0x59, 0xc3, 0xd0, 0xe0, 0xa9,
1143 0xdc, 0x78, 0x8b, 0x1a, 0x9d, 0x40, 0x7b, 0xb3, 0xb7, 0x25, 0x92, 0x85,
1144 0xb7, 0x22, 0xba, 0x09, 0xe1, 0xa4, 0xe4, 0xad, 0x82, 0xb1, 0xb1, 0xad,
1145 0x44, 0xbd, 0xaa, 0xf2, 0x79, 0xf9, 0xb9, 0x82, 0x5a, 0x16, 0x95, 0xfc,
1146 0x55, 0x6f, 0x79, 0xc3, 0xc1, 0x62, 0x8d, 0xf9, 0xc6, 0xaf, 0x02, 0xff,
1147 0x77, 0xf5, 0x5b, 0xdd, 0x32, 0x77, 0x1e, 0x43, 0xbe, 0x65, 0xdd, 0x00,
1148 0x6e, 0x95, 0x58, 0xda, 0x3d, 0xe2, 0x66, 0x7e, 0x26, 0xf3, 0x25, 0xf1,
1149 0xf8, 0xc8, 0xbd, 0x2f, 0xd1, 0xdf, 0x3c, 0xd4, 0xfd, 0x0e, 0xc3, 0x62,
1150 0x98, 0xb0, 0x6d, 0x23, 0x1c, 0x0c, 0x14, 0x28, 0x3a, 0xb6, 0x37, 0xfc,
1151 0x13, 0xed, 0x0b, 0xc4, 0x41, 0x90, 0x98, 0x97, 0x61, 0xcb, 0x48, 0xc1,
1152 0x94, 0x7a, 0x91, 0xfb, 0xf2, 0xf5, 0x7a, 0x0d, 0x2b, 0x2e, 0xf5, 0x86,
1153 0xc3, 0xc1, 0xf6, 0x6d, 0xac, 0xb7, 0x93, 0xf5, 0x62, 0x8c, 0xbd, 0xeb,
1154 0x47, 0x35, 0x27, 0x1f, 0xb4, 0x46, 0x8a, 0xa7, 0xf6, 0x77, 0xa9, 0xde,
1155 0x93, 0x86, 0x35, 0xee, 0xf4, 0xd7, 0x14, 0xec, 0x2c, 0x70, 0xb9, 0x91,
1156 0x64, 0xbd, 0x71, 0xd6, 0x7b, 0x77, 0x54, 0xd6, 0x33, 0x70, 0xcb, 0x48,
1157 0x22, 0x35, 0xe1, 0x32, 0x0c, 0xed, 0x1d, 0xc4, 0x88, 0xd9, 0xce, 0x5c,
1158 0xde, 0x72, 0x28, 0xd3, 0x85, 0xed, 0xc6, 0xd1, 0x70, 0x21, 0xeb, 0x1d,
1159 0x37, 0x8e, 0x06, 0x3c, 0xf4, 0x99, 0x75, 0x6c, 0xaf, 0x9b, 0x79, 0x91,
1160 0x4a, 0x8c, 0xdc, 0x32, 0x22, 0xdc, 0xc1, 0xc4, 0x6c, 0xe6, 0x67, 0x8e,
1161 0x6d, 0xca, 0xda, 0x09, 0x64, 0x4e, 0x65, 0x7c, 0xc1, 0xba, 0x11, 0x67,
1162 0x7c, 0xca, 0x35, 0x87, 0x25, 0x57, 0xae, 0xb0, 0xb0, 0xb9, 0x41, 0xe2,
1163 0xa7, 0x42, 0xec, 0x0e, 0xd6, 0x8d, 0x33, 0x9e, 0x6c, 0x1b, 0xfb, 0x33,
1164 0x8c, 0x6b, 0x95, 0xcc, 0x65, 0x6d, 0xfb, 0x15, 0x63, 0x61, 0x05, 0x43,
1165 0xbc, 0xd7, 0x4b, 0x99, 0xbd, 0xa1, 0x62, 0x89, 0xd3, 0x4e, 0x5b, 0x31,
1166 0x08, 0x3e, 0x29, 0x48, 0x1a, 0xd6, 0x06, 0x91, 0xff, 0x58, 0x38, 0x18,
1167 0x3f, 0xac, 0xd4, 0xb7, 0x6f, 0xc3, 0x3f, 0x11, 0x2f, 0x41, 0xac, 0x9b,
1168 0x89, 0x21, 0x93, 0xd6, 0xd2, 0x66, 0x31, 0x42, 0x4a, 0x8c, 0x77, 0x9f,
1169 0x58, 0xc4, 0x08, 0xe7, 0x46, 0xb0, 0xb3, 0x95, 0xe5, 0x23, 0xb9, 0x75,
1170 0x16, 0x5c, 0x18, 0x0d, 0x32, 0x0e, 0x8b, 0x2e, 0x80, 0xad, 0x99, 0x7c,
1171 0x2c, 0xb0, 0xed, 0x83, 0xa6, 0x6d, 0xbf, 0x64, 0xce, 0xc4, 0x61, 0x33,
1172 0x18, 0x17, 0x1f, 0x78, 0xdf, 0x5c, 0x78, 0x83, 0xe4, 0xc5, 0x80, 0xc8,
1173 0xa6, 0x30, 0x76, 0x29, 0x28, 0xe1, 0x27, 0x10, 0x72, 0xeb, 0x25, 0x8a,
1174 0x0d, 0x6f, 0x53, 0x6d, 0x67, 0x2d, 0xf5, 0x5e, 0x36, 0x5f, 0xc1, 0x27,
1175 0x37, 0x2a, 0x38, 0x7a, 0x63, 0x28, 0x30, 0xa4, 0x94, 0x32, 0x2e, 0x84,
1176 0xda, 0x5a, 0x14, 0xeb, 0x04, 0xeb, 0xc6, 0x1a, 0x5c, 0xc1, 0x00, 0x94,
1177 0x72, 0x62, 0xd6, 0x6c, 0x5d, 0x68, 0x8b, 0xbb, 0x37, 0x14, 0xd8, 0xc9,
1178 0x6f, 0xd7, 0xa8, 0x82, 0x51, 0x23, 0x18, 0x83, 0xd3, 0x3e, 0xfb, 0x66,
1179 0xca, 0x7c, 0x53, 0xc8, 0xb6, 0x4f, 0x86, 0xeb, 0xb5, 0x93, 0x78, 0x9f,
1180 0xb8, 0x2c, 0xfd, 0xe4, 0x65, 0x03, 0xf3, 0x70, 0x23, 0xd6, 0xa2, 0xdc,
1181 0x24, 0xb4, 0x84, 0x71, 0x52, 0x62, 0x79, 0x5e, 0xde, 0x7c, 0x4c, 0xb7,
1182 0xed, 0xf7, 0xcd, 0x5c, 0x5b, 0x5a, 0x73, 0x30, 0x0e, 0xcc, 0xc4, 0x98,
1183 0x11, 0x6c, 0x1d, 0xa7, 0x1e, 0x02, 0xf4, 0xf5, 0x19, 0x46, 0x15, 0x26,
1184 0x3c, 0x41, 0x6d, 0x42, 0x59, 0xf4, 0x99, 0x8a, 0x39, 0x1b, 0x9e, 0x52,
1185 0xea, 0x3b, 0x8a, 0x60, 0x90, 0x9f, 0x5e, 0x23, 0xf3, 0x11, 0xf0, 0x91,
1186 0x0b, 0xae, 0x83, 0xc3, 0x2f, 0x70, 0x7b, 0xc2, 0x1d, 0xbb, 0x80, 0x1a,
1187 0xfa, 0x9d, 0xd1, 0xfe, 0x90, 0x12, 0x64, 0xf2, 0xf2, 0x35, 0x26, 0x38,
1188 0x22, 0x6b, 0x15, 0xe2, 0xf7, 0xd8, 0xf6, 0xc3, 0x94, 0x75, 0x17, 0x65,
1189 0xdd, 0x18, 0xfe, 0xd8, 0xfe, 0x07, 0xa7, 0xcd, 0x5b, 0x31, 0x64, 0x5c,
1190 0xdd, 0xee, 0x47, 0x36, 0xa6, 0x4b, 0xbb, 0x1e, 0x2c, 0x99, 0xce, 0x5c,
1191 0xab, 0x59, 0xf0, 0xaa, 0xd2, 0x43, 0x7c, 0x62, 0x7b, 0x8c, 0x7f, 0xea,
1192 0xd5, 0x1c, 0xc2, 0x05, 0xc6, 0xe6, 0x40, 0x5c, 0x51, 0xab, 0x4b, 0xa0,
1193 0xc1, 0x6b, 0xd8, 0x78, 0x84, 0x7c, 0x27, 0x36, 0xbd, 0x1c, 0xdf, 0xe4,
1194 0x9c, 0x96, 0x86, 0xd4, 0x6b, 0x5d, 0x9c, 0x93, 0xc3, 0x61, 0xf9, 0xed,
1195 0xc1, 0xf8, 0x74, 0x17, 0xba, 0x38, 0xcb, 0x5a, 0x48, 0x9d, 0x21, 0xf7,
1196 0xbd, 0x8d, 0xf2, 0x9b, 0xf2, 0x5f, 0xa3, 0xe0, 0x61, 0x5a, 0xa4, 0x1a,
1197 0xea, 0x0e, 0xc8, 0xfd, 0x56, 0x53, 0x7e, 0x2b, 0xe4, 0x92, 0x6e, 0xce,
1198 0x8b, 0x0d, 0x97, 0x2c, 0x4d, 0x84, 0x78, 0x3f, 0x2c, 0xd7, 0xb1, 0x87,
1199 0x39, 0xee, 0xd8, 0x01, 0x45, 0x30, 0xee, 0x97, 0xf6, 0x2b, 0x8c, 0x81,
1200 0x1a, 0x9f, 0x7f, 0x93, 0x7d, 0x9f, 0x08, 0xbf, 0x64, 0xcf, 0xa8, 0x50,
1201 0x70, 0x32, 0xa2, 0x63, 0xe6, 0x8d, 0xd5, 0x98, 0xb8, 0x5b, 0xc6, 0xac,
1202 0xa0, 0xd4, 0x38, 0xe8, 0x91, 0x1c, 0xb9, 0xcc, 0xb8, 0x06, 0x4b, 0x56,
1203 0xe4, 0xee, 0x15, 0x85, 0x64, 0x8d, 0x53, 0x47, 0xd1, 0x8d, 0x95, 0xd0,
1204 0x27, 0xef, 0x2d, 0x0a, 0xb9, 0xdb, 0x4a, 0x15, 0x43, 0xbb, 0x5d, 0x91,
1205 0xe7, 0xbf, 0x23, 0x2f, 0xb7, 0xed, 0x47, 0x38, 0x5f, 0xb3, 0xc3, 0x3e,
1206 0x9c, 0x63, 0x3f, 0xdd, 0xd4, 0xdf, 0xf2, 0x4b, 0xf3, 0x95, 0xaf, 0xff,
1207 0xa9, 0xad, 0xdf, 0x23, 0x75, 0xa5, 0x8d, 0xda, 0xd6, 0x25, 0xca, 0x03,
1208 0x1e, 0xc9, 0x91, 0x36, 0x86, 0x1d, 0x9d, 0xb1, 0xec, 0x73, 0xce, 0x6f,
1209 0xad, 0xf9, 0xad, 0x4b, 0xeb, 0x75, 0xe7, 0x9d, 0x58, 0xba, 0x70, 0xbe,
1210 0x86, 0x09, 0xbb, 0xa2, 0xd1, 0xd2, 0x0a, 0x21, 0x31, 0xb5, 0xa6, 0xee,
1211 0x39, 0xb6, 0xfb, 0x73, 0x33, 0x17, 0x6f, 0x0f, 0x9a, 0xc1, 0x3e, 0x8b,
1212 0xfe, 0x13, 0x67, 0x8e, 0xdb, 0x22, 0xbc, 0x63, 0xec, 0x16, 0xce, 0xc3,
1213 0x4c, 0x14, 0x36, 0x06, 0x7b, 0x66, 0x31, 0xe7, 0x73, 0x35, 0x4b, 0x9c,
1214 0x96, 0xf9, 0x71, 0xca, 0xb0, 0xaf, 0x22, 0x2c, 0xa2, 0x8c, 0xe1, 0xc6,
1215 0x3f, 0x15, 0xdf, 0xa4, 0x1d, 0xb1, 0xce, 0x60, 0x4f, 0x0c, 0x7f, 0xaa,
1216 0x2c, 0xc8, 0x28, 0x64, 0x2d, 0xcc, 0x7b, 0x4b, 0x3c, 0xa3, 0x92, 0x23,
1217 0x15, 0x68, 0xdd, 0xcd, 0x55, 0xfc, 0xc8, 0x73, 0xf7, 0x2d, 0x6b, 0x32,
1218 0x97, 0xd6, 0x20, 0xd1, 0x67, 0x16, 0x40, 0xbd, 0x49, 0xe2, 0x05, 0x7d,
1219 0x59, 0x93, 0xf1, 0x59, 0xb4, 0x72, 0x59, 0x5f, 0x30, 0x56, 0xad, 0x25,
1220 0x5e, 0xbc, 0xc8, 0x1e, 0x87, 0xc9, 0xc5, 0x2c, 0xc7, 0x33, 0x9c, 0xf8,
1221 0x37, 0x65, 0x4d, 0x52, 0xe2, 0x57, 0x7e, 0x5d, 0xb3, 0x12, 0xfd, 0x7b,
1222 0x57, 0x40, 0xaf, 0xca, 0x61, 0xa0, 0x1a, 0x6d, 0xc2, 0xc2, 0xbe, 0x40,
1223 0x41, 0x2e, 0x7f, 0x28, 0x43, 0xef, 0xde, 0x30, 0xd2, 0xd3, 0x9d, 0xfa,
1224 0xbc, 0xe7, 0x85, 0x60, 0xf4, 0xf6, 0xbd, 0xd7, 0xca, 0x7a, 0x40, 0x40,
1225 0xda, 0x8d, 0xd3, 0x77, 0x54, 0xe3, 0x43, 0xdb, 0xd2, 0xa4, 0xfd, 0xa3,
1226 0x37, 0x10, 0x47, 0xcc, 0xc5, 0xa8, 0x6f, 0x3f, 0x84, 0x33, 0xe4, 0xa4,
1227 0x4e, 0xbe, 0xa4, 0x17, 0x46, 0xc7, 0x1f, 0xf6, 0x20, 0x14, 0x1f, 0x21,
1228 0x0e, 0xf8, 0x46, 0xbd, 0xe4, 0x56, 0x33, 0x9d, 0x75, 0xaf, 0x85, 0xc4,
1229 0x96, 0x38, 0x79, 0xf9, 0xd7, 0xdc, 0x6e, 0xac, 0x25, 0x66, 0x1c, 0x34,
1230 0xea, 0x3b, 0x0e, 0xe1, 0x1f, 0x89, 0xb3, 0x52, 0x5e, 0x65, 0x7f, 0xd2,
1231 0xa6, 0x9b, 0xfd, 0xc1, 0x4b, 0x2e, 0x70, 0x2f, 0xf9, 0xac, 0xdb, 0x63,
1232 0xfc, 0xc4, 0x23, 0xbc, 0x43, 0x78, 0xf7, 0xae, 0xbd, 0x0a, 0x5a, 0xd8,
1233 0xce, 0x4e, 0xda, 0xcc, 0xc3, 0x21, 0xb8, 0x5b, 0x6f, 0x24, 0xbf, 0x02,
1234 0x5d, 0x70, 0xba, 0x0f, 0x3b, 0x46, 0x10, 0xc9, 0x18, 0xe3, 0x33, 0x7c,
1235 0xa8, 0x62, 0x3b, 0x12, 0x53, 0x0a, 0x26, 0xdb, 0x89, 0xdc, 0x77, 0x65,
1236 0x3b, 0x65, 0x78, 0x72, 0xb2, 0x9d, 0x7d, 0x6c, 0xe7, 0xe6, 0xd9, 0x70,
1237 0x97, 0xdd, 0x2c, 0x73, 0xd5, 0x40, 0xff, 0x29, 0x43, 0xca, 0x89, 0x2b,
1238 0xe4, 0xa3, 0x5f, 0x85, 0x62, 0xd4, 0x4a, 0xee, 0x72, 0xd6, 0xa9, 0xb7,
1239 0xb8, 0x61, 0xfc, 0x02, 0x69, 0x91, 0x72, 0x7e, 0xf6, 0x38, 0x1d, 0x35,
1240 0xaf, 0x9b, 0x2a, 0x6c, 0xdd, 0x5b, 0x9c, 0x97, 0x97, 0xfd, 0xe4, 0xfb,
1241 0xa8, 0xe4, 0x3d, 0x3f, 0x76, 0x30, 0x07, 0x5d, 0xcc, 0x7e, 0x0e, 0x9b,
1242 0xc2, 0x23, 0xeb, 0xcd, 0x22, 0x45, 0x72, 0xf2, 0x00, 0x39, 0x45, 0x25,
1243 0x36, 0x3b, 0x71, 0x28, 0xc0, 0xfa, 0x0d, 0x65, 0x39, 0x7e, 0x02, 0xcf,
1244 0x32, 0x96, 0x6d, 0x09, 0xe7, 0xfa, 0x23, 0x0e, 0x33, 0xcf, 0x6d, 0xc4,
1245 0xc1, 0xc1, 0x4b, 0xcf, 0x83, 0x8b, 0x8d, 0xa9, 0xf3, 0x35, 0x1e, 0xf4,
1246 0xa0, 0x8d, 0xdf, 0x05, 0x12, 0x67, 0xae, 0x18, 0xfb, 0x96, 0x91, 0x47,
1247 0xf8, 0x5d, 0x8c, 0xad, 0x23, 0x36, 0xb6, 0x38, 0x39, 0x4e, 0x01, 0xba,
1248 0x1b, 0x04, 0x0f, 0xc5, 0x96, 0xa6, 0x4b, 0xec, 0x88, 0xa4, 0x21, 0xf1,
1249 0x55, 0xec, 0x27, 0xea, 0xd8, 0x8f, 0x4b, 0x99, 0x6a, 0x3f, 0x5d, 0x78,
1250 0xcd, 0x38, 0xba, 0xa2, 0x10, 0x47, 0xef, 0x97, 0xb5, 0xfb, 0x8e, 0x30,
1251 0x8e, 0xdd, 0x46, 0xdf, 0x7c, 0x97, 0xd8, 0xb2, 0x65, 0x36, 0xe3, 0x97,
1252 0x83, 0x59, 0x0a, 0x0a, 0xc9, 0x2b, 0xb6, 0xed, 0x0d, 0xea, 0x05, 0xaa,
1253 0xc6, 0x3e, 0xaf, 0xc6, 0x2e, 0x91, 0xdf, 0x64, 0x9e, 0x7e, 0xf4, 0xb1,
1254 0x42, 0xf8, 0x24, 0x5f, 0x7a, 0xfb, 0x0c, 0xdb, 0x58, 0x6c, 0xe6, 0x75,
1255 0xe5, 0xe8, 0x69, 0xb2, 0x9d, 0x4a, 0x24, 0xf7, 0xe6, 0xeb, 0x2b, 0x38,
1256 0x15, 0x0a, 0x4c, 0xae, 0x9d, 0x57, 0xa2, 0x77, 0xe4, 0xe8, 0x49, 0xf2,
1257 0x1c, 0xc6, 0xa9, 0xa3, 0x9d, 0x01, 0xca, 0x72, 0x3e, 0x9c, 0x9f, 0x53,
1258 0xf1, 0xcd, 0xa9, 0x6d, 0x88, 0xed, 0x42, 0x29, 0xab, 0xc5, 0x96, 0x32,
1259 0xda, 0x68, 0x26, 0x84, 0x78, 0x49, 0xb4, 0x0c, 0x89, 0x11, 0xfa, 0xd6,
1260 0x68, 0x01, 0xdc, 0xf3, 0x24, 0xee, 0x0a, 0xd7, 0x72, 0xdf, 0x72, 0x3a,
1261 0x51, 0x80, 0x07, 0xcc, 0x8b, 0xb6, 0xe0, 0xe2, 0x49, 0x03, 0xd7, 0x15,
1262 0x10, 0x13, 0x6b, 0xc3, 0xa1, 0xd8, 0x3a, 0xe6, 0xb4, 0xc7, 0x1b, 0xdc,
1263 0xb7, 0x7c, 0x90, 0xf9, 0x3d, 0x79, 0xf1, 0xd5, 0xe3, 0x11, 0x7d, 0xe0,
1264 0xc4, 0xd2, 0x90, 0xf4, 0x29, 0xfd, 0xe5, 0x6d, 0x54, 0xfa, 0xb7, 0xed,
1265 0x50, 0xd8, 0xe7, 0xcc, 0x79, 0x7e, 0x0c, 0xef, 0x19, 0xf9, 0x31, 0xf8,
1266 0x9c, 0xf8, 0xcd, 0x1c, 0x98, 0x98, 0x23, 0x79, 0xc1, 0x11, 0xe5, 0xa8,
1267 0x93, 0x03, 0x5b, 0x31, 0xe6, 0xbe, 0x91, 0x9e, 0xc9, 0xdc, 0x77, 0x9c,
1268 0x3c, 0xf7, 0x38, 0x79, 0xee, 0xcb, 0x93, 0xb9, 0xef, 0x8b, 0x19, 0xa9,
1269 0x33, 0xb5, 0x7c, 0x24, 0x26, 0x6b, 0xd6, 0x23, 0x89, 0x50, 0x5d, 0xbe,
1270 0xce, 0xcb, 0x2c, 0x7f, 0xfc, 0x52, 0xf9, 0xd5, 0xcc, 0x57, 0x57, 0x61,
1271 0x5b, 0xaa, 0x04, 0x0f, 0x6a, 0x4e, 0x6e, 0xe9, 0x2d, 0x8c, 0x9e, 0xb8,
1272 0xef, 0x7d, 0x63, 0xbc, 0xce, 0x45, 0x1c, 0x1a, 0xe1, 0xe0, 0x5b, 0x12,
1273 0x0a, 0xfd, 0xce, 0x83, 0x1e, 0xad, 0x1c, 0x6b, 0xcd, 0x7f, 0xb2, 0x1f,
1274 0x5c, 0x25, 0xcf, 0xf2, 0x7b, 0x14, 0x52, 0xfe, 0x35, 0x96, 0x0f, 0x9a,
1275 0x23, 0x93, 0xb9, 0xe0, 0xd1, 0x04, 0xfa, 0x24, 0xcf, 0x5a, 0xd3, 0x1c,
1276 0xd2, 0xbb, 0x9d, 0x75, 0x63, 0x1d, 0xeb, 0x32, 0x3a, 0xd6, 0x53, 0x9e,
1277 0xb4, 0x7b, 0x32, 0x47, 0xca, 0xc5, 0x62, 0x4b, 0x78, 0xe6, 0x22, 0x96,
1278 0xdb, 0x3c, 0x89, 0x33, 0x2d, 0x97, 0x78, 0xae, 0x6d, 0xf7, 0x9b, 0x79,
1279 0xae, 0xcb, 0x58, 0x50, 0x29, 0xb9, 0x35, 0x68, 0x17, 0x15, 0x48, 0xfb,
1280 0x65, 0x4f, 0x66, 0xea, 0x18, 0x11, 0x2b, 0x8c, 0x86, 0xf4, 0xd9, 0xea,
1281 0x54, 0xec, 0x92, 0xb1, 0x0a, 0x6e, 0x59, 0x8e, 0x7e, 0x8e, 0x5d, 0x1a,
1282 0x6f, 0x7d, 0xa1, 0x60, 0xd6, 0xc1, 0x44, 0x77, 0x01, 0x6d, 0x4b, 0x2d,
1283 0x10, 0x7b, 0x40, 0xee, 0x1e, 0xb2, 0xb6, 0xbd, 0xfd, 0x0a, 0xdd, 0x15,
1284 0xc4, 0x98, 0x0a, 0xe0, 0xe9, 0x44, 0x28, 0x76, 0x16, 0x96, 0x72, 0x32,
1285 0xe3, 0xa6, 0xad, 0x4b, 0xbb, 0x5b, 0xd8, 0x5e, 0x8f, 0x72, 0xe2, 0x52,
1286 0x9b, 0x17, 0x2e, 0x6e, 0x76, 0xd6, 0x71, 0xf3, 0xbe, 0xe2, 0xc5, 0x43,
1287 0x7d, 0xf9, 0xbd, 0xc6, 0x18, 0xde, 0x33, 0x05, 0x17, 0xbd, 0xe4, 0x3d,
1288 0xcc, 0xd2, 0x13, 0xdb, 0x90, 0xf3, 0x4b, 0xf9, 0xe4, 0xe7, 0xfd, 0xa0,
1289 0x5b, 0x30, 0xec, 0x27, 0xb3, 0x63, 0x93, 0x6b, 0x2e, 0x7f, 0xac, 0x4c,
1290 0x1e, 0xdb, 0x2f, 0x5c, 0xec, 0x4b, 0x55, 0x4f, 0xc9, 0xb3, 0x69, 0x5f,
1291 0x03, 0xc1, 0x1e, 0x0b, 0x95, 0x6c, 0xc3, 0x8d, 0xbf, 0x65, 0xfc, 0x76,
1292 0x0f, 0x1c, 0xbd, 0x41, 0x52, 0x32, 0xcf, 0xa1, 0x18, 0x36, 0x37, 0x7b,
1293 0xe0, 0x1a, 0xaa, 0x2e, 0xcc, 0xad, 0xf3, 0x91, 0x3c, 0x3b, 0xdf, 0x8a,
1294 0x83, 0xd3, 0x6a, 0x56, 0xf2, 0x6a, 0xd2, 0x88, 0x43, 0xa2, 0xd7, 0x4a,
1295 0x7e, 0x8b, 0x5e, 0xfc, 0xfc, 0x16, 0x1d, 0x55, 0xf1, 0xbb, 0x1c, 0xb1,
1296 0x2a, 0xd9, 0xf3, 0x6a, 0x47, 0x82, 0x98, 0x55, 0x12, 0xed, 0xc4, 0xd7,
1297 0x7b, 0x6d, 0xbb, 0x87, 0x7e, 0x59, 0xc4, 0x18, 0xff, 0x48, 0xa8, 0x3e,
1298 0x32, 0x47, 0x29, 0x20, 0xdf, 0x69, 0x47, 0xcf, 0x48, 0x41, 0xbc, 0x3c,
1299 0x5a, 0xc5, 0x98, 0xae, 0xe1, 0x93, 0xb9, 0x6d, 0xc8, 0x8e, 0x5e, 0xbd,
1300 0x57, 0x36, 0x75, 0x9f, 0x2c, 0xbf, 0x3f, 0x26, 0xe3, 0x11, 0xb9, 0x45,
1301 0xfe, 0x0b, 0x17, 0xb7, 0xa6, 0x44, 0x36, 0x0f, 0x0e, 0xf4, 0x89, 0xbc,
1302 0x36, 0x3a, 0xcc, 0x5b, 0x29, 0x27, 0x91, 0xbe, 0x72, 0xea, 0xfc, 0xe6,
1303 0xdb, 0x91, 0x75, 0xf0, 0x4e, 0x65, 0x98, 0xf3, 0x65, 0xb9, 0x0b, 0xc5,
1304 0xbf, 0x34, 0xe6, 0x15, 0xca, 0x73, 0x19, 0x69, 0xa3, 0x45, 0x19, 0x49,
1305 0x4f, 0xad, 0xd3, 0xa9, 0x1c, 0xca, 0x3c, 0x5c, 0x28, 0x9c, 0xe3, 0xb2,
1306 0x1e, 0xf3, 0x32, 0x90, 0xdc, 0xd2, 0x5e, 0x2a, 0x92, 0xa2, 0x7f, 0xd1,
1307 0x8f, 0x0e, 0x77, 0x96, 0xbf, 0xb3, 0x5f, 0xd6, 0xe7, 0xd5, 0x3e, 0x36,
1308 0xf7, 0x0a, 0x9f, 0x3c, 0x4e, 0x9f, 0x1c, 0xff, 0xa3, 0x3e, 0x39, 0xef,
1309 0x4f, 0x94, 0xcf, 0xaf, 0xb7, 0xda, 0xf6, 0x6e, 0x53, 0xd6, 0xe8, 0x65,
1310 0xdd, 0xb5, 0xe1, 0x4b, 0xf6, 0x5e, 0x65, 0x3d, 0x7e, 0x36, 0xd2, 0x95,
1311 0xc1, 0xb4, 0xac, 0xbf, 0x0c, 0xa4, 0x80, 0x45, 0x49, 0xe9, 0x27, 0x46,
1312 0x7d, 0xa9, 0xb7, 0x32, 0x1a, 0x31, 0x43, 0xe8, 0xc2, 0x19, 0xd3, 0xd8,
1313 0xf7, 0x20, 0x79, 0x77, 0x37, 0x73, 0xd2, 0x83, 0xe6, 0x72, 0xfa, 0x7b,
1314 0x31, 0x36, 0x34, 0xd0, 0x18, 0x57, 0x98, 0xf4, 0x7b, 0xab, 0x9d, 0xae,
1315 0xe8, 0xf5, 0x45, 0xdb, 0x57, 0x25, 0x42, 0xc1, 0xb6, 0x8d, 0xc4, 0xf3,
1316 0xa5, 0xbd, 0x5e, 0xe8, 0x8a, 0xc3, 0x07, 0x5a, 0x7f, 0xa1, 0x0a, 0x46,
1317 0x9d, 0x29, 0xc8, 0xe5, 0xcd, 0xb2, 0xe6, 0x22, 0xfd, 0x2c, 0x67, 0x5e,
1318 0x22, 0x75, 0x75, 0xb4, 0xd7, 0x2a, 0x48, 0xd5, 0x06, 0xfb, 0xe0, 0xb2,
1319 0xed, 0xdf, 0x91, 0x17, 0x8e, 0x3b, 0xb9, 0x7c, 0x7d, 0xdd, 0x6e, 0xf5,
1320 0x7f, 0x10, 0x0b, 0x9d, 0x36, 0x34, 0x59, 0xf3, 0x7f, 0xe1, 0x4f, 0xae,
1321 0x7b, 0x9b, 0x90, 0xbd, 0x89, 0x42, 0x63, 0x89, 0x32, 0xe2, 0xcf, 0x71,
1322 0x8a, 0xdb, 0x06, 0x3e, 0xbf, 0xf8, 0x64, 0x4a, 0xec, 0x1c, 0x55, 0x01,
1323 0x63, 0x06, 0x66, 0x1f, 0x28, 0xc5, 0xb2, 0x01, 0xe1, 0x0a, 0x3e, 0xab,
1324 0x30, 0x1a, 0xc0, 0x9c, 0x03, 0x95, 0x68, 0xd9, 0x23, 0xfb, 0x50, 0x76,
1325 0x57, 0x45, 0x74, 0x35, 0xdc, 0x87, 0x34, 0x3c, 0xb0, 0xc7, 0xb6, 0x67,
1326 0xcd, 0x23, 0xb5, 0x63, 0x4c, 0x7c, 0xb7, 0x69, 0x15, 0x3c, 0xd9, 0x6a,
1327 0x2c, 0x49, 0xd6, 0x39, 0x6b, 0xad, 0x1f, 0x26, 0x5a, 0x5b, 0xce, 0xf5,
1328 0xd6, 0x6e, 0xa8, 0x55, 0x82, 0xe6, 0x29, 0x25, 0x82, 0x82, 0x6c, 0x04,
1329 0xae, 0xa4, 0x82, 0x57, 0x0d, 0x74, 0x95, 0x45, 0xa3, 0x70, 0x65, 0xa3,
1330 0xf0, 0x25, 0xdd, 0x68, 0xa0, 0xbe, 0x4b, 0x38, 0xf7, 0xd3, 0x92, 0xd5,
1331 0x98, 0x96, 0xbd, 0x0e, 0xfa, 0x81, 0x06, 0xfa, 0x48, 0x25, 0xfb, 0xf3,
1332 0xa3, 0x25, 0xd9, 0x86, 0x69, 0x46, 0x33, 0x6d, 0xa3, 0x19, 0x33, 0x93,
1333 0x7e, 0x2c, 0xe0, 0x7c, 0x2c, 0x4e, 0xb6, 0xb2, 0x1f, 0x1f, 0xda, 0x07,
1334 0xee, 0x44, 0x60, 0xc8, 0x8b, 0xf2, 0x01, 0x1d, 0x1f, 0xce, 0xf5, 0xa2,
1335 0x68, 0x28, 0x80, 0xd2, 0xa4, 0xec, 0x8d, 0x21, 0xb6, 0xb1, 0x39, 0x00,
1336 0x5f, 0x16, 0x28, 0x19, 0xb0, 0xf1, 0xad, 0xf0, 0xa8, 0x7a, 0x77, 0xa5,
1337 0x65, 0x4f, 0x73, 0x62, 0x41, 0x6b, 0xfb, 0x16, 0xe3, 0xce, 0x49, 0xbf,
1338 0x77, 0x33, 0xcf, 0x52, 0xc8, 0xd7, 0x25, 0x06, 0xb6, 0xb6, 0x1f, 0x4c,
1339 0xc8, 0xda, 0x46, 0x88, 0x7e, 0xeb, 0x81, 0x77, 0xa8, 0x53, 0xe9, 0xa3,
1340 0xed, 0xa0, 0x40, 0xf4, 0xaf, 0xd2, 0xbf, 0xa0, 0x95, 0xd2, 0xce, 0xb7,
1341 0x66, 0x5a, 0x94, 0x64, 0xba, 0x53, 0xe9, 0xcd, 0x94, 0x78, 0x51, 0x2c,
1342 0xf3, 0xf2, 0x15, 0x8c, 0x36, 0x3c, 0x69, 0xa7, 0x2b, 0x9c, 0xb9, 0xb5,
1343 0x3c, 0x90, 0x9c, 0xdb, 0x5a, 0x15, 0xae, 0x0d, 0x76, 0x56, 0xa8, 0xb2,
1344 0x9f, 0x42, 0x1c, 0x52, 0x72, 0x7d, 0x69, 0x46, 0x12, 0xcf, 0xfa, 0x65,
1345 0x7d, 0x55, 0xe6, 0xbf, 0xb5, 0x3d, 0xd1, 0x7b, 0xe1, 0xa2, 0xcc, 0xe9,
1346 0xc7, 0xb4, 0xc3, 0xdb, 0x93, 0x9f, 0x5f, 0xdc, 0x97, 0x6a, 0x63, 0x9e,
1347 0x66, 0xe2, 0x55, 0xfe, 0x5e, 0xc4, 0x71, 0xbf, 0x98, 0xf1, 0x61, 0x61,
1348 0xb2, 0xd9, 0xd9, 0x8b, 0x5b, 0x96, 0x8c, 0xe0, 0x15, 0x7e, 0xb7, 0x24,
1349 0x57, 0xe1, 0x18, 0xf3, 0xd4, 0x07, 0x92, 0x51, 0xbc, 0x9d, 0x09, 0xe0,
1350 0x7e, 0xea, 0x6f, 0x06, 0xed, 0xf4, 0xae, 0xa4, 0x8e, 0x37, 0x32, 0xc0,
1351 0xcf, 0xfa, 0x6c, 0x84, 0x1a, 0xbf, 0xa3, 0x3e, 0xed, 0xac, 0x8d, 0x35,
1352 0xe3, 0x67, 0x09, 0x13, 0x6f, 0x24, 0x6a, 0xcc, 0x9b, 0xd5, 0xdf, 0x62,
1353 0xdc, 0x9d, 0xa0, 0x4d, 0x9d, 0x47, 0xbc, 0x52, 0xd6, 0xf1, 0x72, 0xf2,
1354 0x77, 0x8f, 0x79, 0x98, 0x63, 0x6d, 0xc0, 0x11, 0xbf, 0xb3, 0x2e, 0x71,
1355 0x85, 0x5c, 0xb2, 0x36, 0xb1, 0x88, 0x72, 0x3d, 0x95, 0x22, 0x57, 0x34,
1356 0xaa, 0x29, 0x8f, 0x17, 0x0b, 0x07, 0xbc, 0xa8, 0xa4, 0x6d, 0x9c, 0x3e,
1357 0x10, 0xc5, 0xce, 0x54, 0x11, 0x5a, 0xfa, 0x03, 0x38, 0xc3, 0xeb, 0xad,
1358 0xb4, 0xf1, 0x1f, 0xb1, 0x6f, 0xa3, 0x49, 0xc3, 0x80, 0x56, 0x84, 0x9e,
1359 0xba, 0x1f, 0x93, 0xef, 0xa9, 0xcc, 0x39, 0x98, 0x1b, 0x18, 0x25, 0xd8,
1360 0xc1, 0xb4, 0xbe, 0xb0, 0x39, 0x88, 0xfe, 0x3a, 0xda, 0x7a, 0x15, 0xe3,
1361 0x87, 0x11, 0x43, 0x39, 0x31, 0x26, 0xc5, 0x5c, 0xb1, 0x30, 0x6a, 0x51,
1362 0x06, 0x15, 0xfb, 0x34, 0x55, 0xd6, 0xe4, 0xf8, 0x2c, 0x80, 0x63, 0x09,
1363 0xd8, 0xc5, 0x51, 0xe3, 0xc2, 0x4e, 0x84, 0x4e, 0xbc, 0xcf, 0xb8, 0xfe,
1364 0xf7, 0x99, 0x12, 0x7c, 0xbf, 0x6f, 0x36, 0xfe, 0x36, 0x2d, 0xeb, 0xbd,
1365 0x3e, 0xac, 0x1f, 0x0c, 0xab, 0xb9, 0xb5, 0x4a, 0x1f, 0x1e, 0x1a, 0x84,
1366 0x35, 0x93, 0xf6, 0xf8, 0xf2, 0x70, 0x19, 0xd6, 0xf4, 0xbd, 0x60, 0x33,
1367 0x77, 0xa6, 0x5d, 0x7b, 0x71, 0x34, 0x2d, 0x32, 0x96, 0x53, 0xc6, 0x22,
1368 0x1c, 0xe3, 0x75, 0x0f, 0x6d, 0xbf, 0xb2, 0xf7, 0xdb, 0xf8, 0x2c, 0x55,
1369 0x53, 0x77, 0xbf, 0xda, 0x8e, 0xe3, 0xce, 0x7e, 0x6c, 0x03, 0xde, 0xa2,
1370 0x1e, 0xcb, 0x77, 0xdb, 0xf6, 0x6f, 0xc2, 0x31, 0xfc, 0x2c, 0x73, 0x2d,
1371 0x8a, 0x78, 0x6d, 0x86, 0x5b, 0xf0, 0x66, 0xa6, 0x1a, 0x65, 0xbd, 0xad,
1372 0x78, 0x9d, 0x9c, 0xbf, 0x74, 0x77, 0x27, 0x4e, 0xb1, 0x7d, 0x5f, 0xbf,
1373 0x17, 0xaf, 0xa5, 0xbd, 0x78, 0xb5, 0xcf, 0xd0, 0xd6, 0x2a, 0x7f, 0xa7,
1374 0xc4, 0x2b, 0x73, 0xfd, 0x0c, 0xa4, 0x72, 0xfa, 0xdc, 0x3e, 0x56, 0x00,
1375 0xc1, 0xf2, 0x43, 0x7e, 0x59, 0xbf, 0x95, 0xf3, 0x31, 0xad, 0xed, 0x5a,
1376 0xf2, 0x77, 0x17, 0x13, 0xd4, 0xe7, 0x9b, 0xa3, 0x01, 0xdc, 0x91, 0x14,
1377 0xdd, 0x7e, 0x7e, 0x71, 0x17, 0xb1, 0xa3, 0x77, 0x34, 0x82, 0x13, 0x09,
1378 0x8f, 0xb3, 0xe7, 0xd8, 0x33, 0x2a, 0xfb, 0xb1, 0xdf, 0xe5, 0xdc, 0x00,
1379 0x6b, 0x47, 0x73, 0x6d, 0x6d, 0x19, 0x2b, 0xa4, 0xee, 0x6e, 0xc7, 0xd3,
1380 0x5a, 0x81, 0xc4, 0xdf, 0x9c, 0x8d, 0x1a, 0x41, 0xda, 0xee, 0x77, 0x9d,
1381 0xf5, 0xbd, 0x81, 0x54, 0xbd, 0x36, 0x0d, 0xf9, 0x79, 0xac, 0xc1, 0x4c,
1382 0xe3, 0xf7, 0xf6, 0x0b, 0x7e, 0x59, 0x77, 0x15, 0xbe, 0xd8, 0xda, 0xbe,
1383 0x36, 0x21, 0xfd, 0xe8, 0xd8, 0x3c, 0x7a, 0xe1, 0x62, 0x3f, 0xf9, 0xfa,
1384 0x12, 0xda, 0xc8, 0xba, 0x90, 0x1f, 0x8b, 0x6b, 0xeb, 0x50, 0x9b, 0x95,
1385 0x35, 0xdd, 0x08, 0x39, 0xab, 0x89, 0x8e, 0x50, 0xd4, 0xd9, 0xd7, 0x82,
1386 0x9a, 0xbf, 0xe7, 0xc5, 0xbb, 0x7f, 0xe0, 0x2b, 0xc0, 0xac, 0x81, 0x36,
1387 0xf6, 0x6b, 0x63, 0x99, 0xf9, 0x0f, 0x76, 0xcb, 0x3d, 0xd2, 0x7f, 0x4d,
1388 0x59, 0xee, 0x19, 0x27, 0xbc, 0x58, 0x7e, 0x37, 0xd1, 0x97, 0x1a, 0x71,
1389 0xd8, 0x2f, 0x3c, 0x43, 0xfc, 0xa0, 0xb5, 0x3d, 0x4c, 0xfb, 0xd9, 0x41,
1390 0x19, 0x56, 0xd0, 0x76, 0x96, 0x11, 0x17, 0xca, 0x8d, 0x0b, 0x17, 0x7b,
1391 0x53, 0x26, 0xe6, 0x8c, 0xfa, 0x68, 0xcb, 0x45, 0xec, 0xaf, 0x19, 0xc6,
1392 0x28, 0x71, 0x84, 0xf6, 0xbd, 0x60, 0xd4, 0x4f, 0x7b, 0xd6, 0x31, 0x7f,
1393 0x54, 0x7c, 0xdc, 0x40, 0x88, 0xb1, 0xac, 0x9d, 0x75, 0x22, 0xa3, 0x15,
1394 0xb8, 0x79, 0xbf, 0x1b, 0x77, 0x26, 0xc3, 0xd4, 0x4f, 0x1d, 0x63, 0xdc,
1395 0x65, 0x7d, 0x6f, 0x1b, 0x9b, 0x85, 0x0a, 0xe3, 0x88, 0xfd, 0x9c, 0x83,
1396 0x61, 0x85, 0x8e, 0x9e, 0x02, 0xec, 0x37, 0x90, 0x82, 0x55, 0xce, 0xf8,
1397 0x72, 0x61, 0xf4, 0xb9, 0x2f, 0xe2, 0xf7, 0x8a, 0x2e, 0xa7, 0x8e, 0x47,
1398 0x30, 0xe5, 0x02, 0xb1, 0x0e, 0x68, 0x7c, 0xc2, 0xc6, 0xe2, 0xc6, 0x8d,
1399 0xca, 0x0f, 0x1c, 0x5b, 0x92, 0x76, 0x85, 0x3b, 0xe4, 0xf5, 0x9f, 0xd7,
1400 0xf9, 0x6f, 0x0a, 0x72, 0x3a, 0xcf, 0x8f, 0x33, 0xb8, 0x4f, 0x70, 0x7a,
1401 0x7d, 0x63, 0x1e, 0xa7, 0xa5, 0xbc, 0xdc, 0x5f, 0x61, 0xf7, 0x6a, 0x70,
1402 0x17, 0x1a, 0x2e, 0x6c, 0xaf, 0x7b, 0x46, 0x99, 0xd0, 0xc4, 0xe7, 0x15,
1403 0x62, 0xc7, 0xed, 0x36, 0xdd, 0x96, 0x76, 0xfd, 0x12, 0xcb, 0x41, 0x29,
1404 0xbc, 0x34, 0x97, 0xc2, 0x3f, 0xba, 0x27, 0xe7, 0x52, 0x78, 0x6f, 0x7e,
1405 0x4c, 0x79, 0x59, 0x23, 0xe4, 0x76, 0x22, 0xaf, 0xd8, 0x86, 0x94, 0x79,
1406 0xb0, 0xc8, 0x59, 0x8f, 0x46, 0xf7, 0x14, 0x7b, 0xc8, 0x73, 0x18, 0xa7,
1407 0x0d, 0x0d, 0x97, 0xec, 0xc1, 0x8d, 0xb6, 0xa4, 0xcc, 0x3b, 0xac, 0x62,
1408 0xea, 0xa1, 0x6d, 0xd4, 0xc3, 0xf9, 0x13, 0x2e, 0xae, 0x62, 0x89, 0xb9,
1409 0x5d, 0x19, 0xf7, 0xef, 0x64, 0x1b, 0x9f, 0x5f, 0x64, 0x1d, 0xde, 0xeb,
1410 0xe5, 0xf5, 0x75, 0xb8, 0x9d, 0x38, 0xba, 0x36, 0x6c, 0x29, 0xb9, 0x73,
1411 0x05, 0x45, 0xb8, 0x71, 0xa0, 0x12, 0x3e, 0x43, 0xd6, 0x2d, 0xfe, 0xb3,
1412 0xe2, 0xab, 0x90, 0xf1, 0x3b, 0x9c, 0x81, 0x76, 0x72, 0x1d, 0x16, 0x0f,
1413 0x30, 0x64, 0x3b, 0x7b, 0x04, 0x0b, 0xf1, 0x74, 0xf3, 0x75, 0x58, 0xea,
1414 0x70, 0x9d, 0x10, 0x6e, 0x1a, 0x12, 0x0c, 0xed, 0x54, 0xfa, 0x89, 0x9d,
1415 0x4c, 0x38, 0xe8, 0xd7, 0x31, 0xa5, 0x8f, 0x98, 0xb9, 0xcf, 0xf1, 0x11,
1416 0x59, 0x2f, 0xee, 0x54, 0x52, 0x99, 0x0a, 0x8e, 0x43, 0x6c, 0xf7, 0xb2,
1417 0x8c, 0x33, 0x29, 0xe3, 0x79, 0x62, 0xd1, 0xfc, 0x49, 0x19, 0x67, 0x37,
1418 0x49, 0x2e, 0x2b, 0x32, 0x16, 0xa1, 0x96, 0x72, 0x54, 0x52, 0x8e, 0x63,
1419 0x66, 0x85, 0x32, 0xa0, 0xe5, 0x64, 0xab, 0x61, 0xff, 0x8c, 0x39, 0x58,
1420 0x63, 0xfa, 0x94, 0x65, 0xce, 0xbd, 0xbc, 0x6c, 0x9f, 0x5f, 0xec, 0x49,
1421 0x7d, 0x61, 0xfb, 0x8c, 0x9c, 0x9c, 0x65, 0xfd, 0x3a, 0x4e, 0xcd, 0xbd,
1422 0x0e, 0xa5, 0xfb, 0x8b, 0xd0, 0x48, 0x5c, 0xaf, 0x1f, 0x30, 0xfa, 0x36,
1423 0x2a, 0x22, 0xab, 0x87, 0xbf, 0x9d, 0x75, 0x03, 0xea, 0xf3, 0xff, 0x2f,
1424 0xbc, 0xd2, 0x8e, 0xdd, 0x58, 0x91, 0xcc, 0xd9, 0xb0, 0xe3, 0xbf, 0xb5,
1425 0x62, 0xbf, 0xb2, 0x46, 0x48, 0x7b, 0xce, 0xb8, 0xb0, 0x84, 0x7d, 0x1f,
1426 0x33, 0x1f, 0x56, 0x2c, 0xed, 0xc2, 0x45, 0xd9, 0xaf, 0x57, 0x29, 0x63,
1427 0x77, 0xfa, 0x3a, 0xdc, 0x31, 0x30, 0x6e, 0x7b, 0x8d, 0x05, 0xc8, 0x84,
1428 0x43, 0xed, 0x3d, 0x8a, 0x17, 0xbb, 0xd2, 0x2e, 0x2c, 0x1a, 0x20, 0x5f,
1429 0x33, 0xe3, 0x4a, 0x6c, 0x7a, 0x8e, 0x87, 0x2f, 0x4c, 0x32, 0x1f, 0xcd,
1430 0x4a, 0x7e, 0xd8, 0xd6, 0xbe, 0x30, 0xf1, 0x80, 0x12, 0xd3, 0x3e, 0xbf,
1431 0x98, 0x4c, 0x1d, 0xfd, 0xae, 0xea, 0xf0, 0x30, 0x1f, 0xde, 0x3c, 0xe8,
1432 0xa3, 0x2f, 0x28, 0xf4, 0x13, 0x3f, 0x7d, 0xbf, 0x01, 0x6f, 0xd3, 0x37,
1433 0xee, 0x67, 0x5c, 0xfc, 0xfb, 0xd1, 0x2a, 0xdc, 0xb6, 0x27, 0x8a, 0x97,
1434 0x0f, 0xfa, 0xd1, 0xbe, 0xe7, 0x56, 0xbc, 0xc5, 0x72, 0x63, 0x8c, 0x07,
1435 0x63, 0xc3, 0x95, 0xfc, 0xf8, 0xf9, 0xa9, 0xe2, 0x67, 0x2d, 0xf1, 0xa8,
1436 0x02, 0x27, 0xf7, 0xbb, 0xd0, 0x32, 0xa0, 0x62, 0xc0, 0x54, 0x70, 0xf7,
1437 0x4d, 0x32, 0x1e, 0x2f, 0xd6, 0xd4, 0x5e, 0xb6, 0x8b, 0x25, 0x49, 0xe1,
1438 0x70, 0x5e, 0xce, 0x93, 0x8e, 0x43, 0xf4, 0xcb, 0xdb, 0xc8, 0xc1, 0x76,
1439 0xf4, 0xb5, 0xd1, 0x8f, 0x6c, 0xcc, 0x0a, 0xff, 0x18, 0x2b, 0xb4, 0x1e,
1440 0xc9, 0x6b, 0x9d, 0x75, 0xfe, 0x14, 0xe7, 0x71, 0xc2, 0x53, 0x6f, 0x4d,
1441 0x43, 0x51, 0x2c, 0x10, 0x0d, 0x69, 0x47, 0xb0, 0x1c, 0x7d, 0x63, 0xd0,
1442 0x64, 0xcd, 0x7f, 0x1b, 0x79, 0xd4, 0x76, 0xf2, 0xa8, 0xee, 0xcc, 0x11,
1443 0xce, 0xb1, 0xcf, 0x2b, 0x7b, 0xdf, 0xdb, 0xa8, 0xbb, 0xc5, 0x0e, 0x27,
1444 0xf2, 0x5a, 0x45, 0x6c, 0xff, 0x38, 0x63, 0xd2, 0x82, 0xfe, 0x1c, 0x6e,
1445 0x7c, 0xd6, 0xf4, 0x3c, 0x8c, 0x69, 0x3d, 0xf4, 0xf9, 0x5c, 0xdb, 0x3b,
1446 0x85, 0x9b, 0x79, 0xca, 0x62, 0x65, 0xd1, 0xd0, 0x86, 0xd7, 0xa9, 0x7c,
1447 0x2f, 0xdb, 0xdc, 0x3a, 0xb9, 0x8f, 0xd0, 0xcb, 0x36, 0x7b, 0x58, 0xb7,
1448 0xbe, 0xdf, 0xe2, 0x5c, 0xba, 0x59, 0x3f, 0x14, 0xd8, 0xa8, 0x98, 0xac,
1449 0xeb, 0xe4, 0x11, 0xa8, 0xd9, 0x7f, 0x79, 0xae, 0xda, 0x88, 0x31, 0xfd,
1450 0x93, 0xfe, 0x7e, 0x7e, 0xf4, 0x3a, 0x84, 0x68, 0x24, 0x4f, 0x9b, 0x9b,
1451 0xa0, 0xd3, 0x66, 0x5d, 0x93, 0x7d, 0x6d, 0x97, 0x71, 0xb8, 0x67, 0xc6,
1452 0x66, 0xb2, 0x8f, 0xbe, 0x4c, 0x48, 0xeb, 0x42, 0xfd, 0x89, 0x69, 0x90,
1453 0x71, 0x48, 0x7f, 0xcb, 0xf1, 0xe4, 0xd8, 0xd5, 0xe3, 0xa8, 0x26, 0x3e,
1454 0x5d, 0x2c, 0x98, 0x3c, 0x33, 0xe7, 0xe4, 0xe2, 0x31, 0xc7, 0xc7, 0x76,
1455 0x38, 0xf2, 0x7b, 0xd8, 0x66, 0x36, 0xb7, 0x07, 0x22, 0x69, 0x95, 0x32,
1456 0xc2, 0x58, 0xd1, 0x96, 0x54, 0x62, 0x15, 0xd1, 0xfa, 0xce, 0x69, 0x08,
1457 0x45, 0x7e, 0xc6, 0xb6, 0xa7, 0xb1, 0xed, 0x67, 0xd9, 0x76, 0x8a, 0x6d,
1458 0x8f, 0xb0, 0xed, 0x1f, 0x5c, 0x6a, 0x5b, 0xc5, 0xfd, 0x7b, 0xf2, 0xb6,
1459 0xe5, 0x46, 0xa4, 0x89, 0x59, 0xdf, 0x34, 0xd9, 0x03, 0xad, 0xe6, 0xdc,
1460 0x8b, 0xee, 0x74, 0xc6, 0xf6, 0x9c, 0xbd, 0x2d, 0x60, 0xec, 0xb9, 0x6b,
1461 0x8f, 0x82, 0xf7, 0xc3, 0xef, 0x63, 0xc2, 0x9f, 0xe3, 0x11, 0x79, 0x1b,
1462 0xd2, 0x68, 0x43, 0x5a, 0xf2, 0x7f, 0xd2, 0xf4, 0xa5, 0x8e, 0xd8, 0x8f,
1463 0xec, 0x3f, 0x90, 0x3f, 0x27, 0x44, 0x1f, 0xbf, 0x23, 0xee, 0x86, 0x4e,
1464 0xbc, 0xc7, 0xd8, 0xf9, 0xa3, 0x8c, 0x07, 0xe9, 0xb4, 0x0f, 0xcf, 0x66,
1465 0x04, 0x1b, 0xdb, 0x88, 0x8d, 0x82, 0xf7, 0xe4, 0x81, 0xc3, 0x47, 0x1f,
1466 0x0b, 0xb0, 0xf2, 0xb3, 0xb4, 0x9f, 0x67, 0x69, 0x3f, 0xcf, 0x0e, 0xfb,
1467 0x70, 0xf3, 0x21, 0x2f, 0xce, 0x11, 0x6b, 0x7a, 0x59, 0x26, 0x91, 0x6a,
1468 0xc0, 0x4d, 0xe4, 0x59, 0x87, 0x7b, 0x19, 0x97, 0x19, 0xff, 0xeb, 0xb2,
1469 0x1a, 0x76, 0xf5, 0x57, 0xa0, 0x7e, 0x48, 0x62, 0x70, 0x05, 0x1e, 0xe9,
1470 0xf3, 0x62, 0xce, 0x7e, 0xd9, 0x87, 0x24, 0x2f, 0xec, 0xbb, 0x13, 0xc3,
1471 0x8e, 0x8f, 0x4f, 0xa3, 0x7f, 0x54, 0xa2, 0x76, 0x48, 0xae, 0xc9, 0x53,
1472 0x68, 0xb3, 0x0b, 0x0e, 0x55, 0x71, 0xbc, 0xb7, 0x62, 0xfe, 0xa1, 0x00,
1473 0xf1, 0xdc, 0x8f, 0x48, 0x76, 0xf9, 0x45, 0xc1, 0xe4, 0xed, 0x63, 0x53,
1474 0x63, 0x9a, 0xf8, 0xa1, 0x83, 0x61, 0x91, 0x3c, 0x86, 0x5d, 0x7e, 0x3e,
1475 0x15, 0x27, 0x7f, 0xcb, 0x67, 0x52, 0x26, 0x1f, 0x7b, 0xa6, 0xe2, 0xe2,
1476 0x65, 0x7c, 0x6a, 0x1c, 0x90, 0x6f, 0x0d, 0xed, 0xf3, 0xc4, 0xd7, 0xaf,
1477 0x43, 0xc4, 0x91, 0xe7, 0xfe, 0x62, 0x96, 0x0b, 0xe4, 0xfc, 0x7d, 0x2a,
1478 0x9e, 0xfb, 0x26, 0xfd, 0xd4, 0x85, 0x58, 0x45, 0x8e, 0x0b, 0xdf, 0xbe,
1479 0xa7, 0x01, 0xbb, 0xa8, 0x8f, 0x56, 0xfa, 0x91, 0x2f, 0x1c, 0xb5, 0xad,
1480 0x0a, 0xc9, 0x5b, 0x2b, 0x71, 0xe7, 0x1e, 0x3f, 0x63, 0xf8, 0xb5, 0x48,
1481 0x0e, 0xcf, 0x66, 0x5b, 0xd5, 0xe8, 0x9d, 0xcc, 0xe7, 0xb7, 0xa7, 0x96,
1482 0xd9, 0x0f, 0x39, 0x7b, 0xf2, 0xb2, 0xf6, 0xff, 0xda, 0x7d, 0xde, 0xd0,
1483 0xb8, 0xce, 0x7c, 0xde, 0x64, 0xce, 0x41, 0x0e, 0x76, 0x02, 0xa1, 0x4a,
1484 0xe6, 0xe7, 0x46, 0x39, 0x16, 0x31, 0x9f, 0x7f, 0xc8, 0x2f, 0xcf, 0x6e,
1485 0x15, 0x59, 0x9c, 0xf2, 0x97, 0xc7, 0xb8, 0x6b, 0xca, 0x18, 0xeb, 0x23,
1486 0xd3, 0x90, 0xe7, 0x63, 0x5f, 0xd8, 0x7f, 0x6f, 0x40, 0xe9, 0x0f, 0xd1,
1487 0x6a, 0x1b, 0x83, 0x7d, 0x0f, 0x29, 0x86, 0xd6, 0xa4, 0x12, 0xba, 0x46,
1488 0xdf, 0xc4, 0x92, 0xec, 0x2f, 0x10, 0xcb, 0xae, 0xf6, 0x8a, 0x2c, 0xf7,
1489 0x67, 0x57, 0x61, 0x9c, 0x73, 0x5c, 0xc4, 0x3a, 0x37, 0xf4, 0xfa, 0x68,
1490 0xa3, 0x50, 0x0e, 0x37, 0xd7, 0xe1, 0x43, 0xf2, 0x9c, 0xb6, 0xe4, 0x9b,
1491 0xd0, 0x18, 0x5f, 0xef, 0x4c, 0xfe, 0x02, 0x65, 0xc4, 0x94, 0x3b, 0x92,
1492 0x5f, 0xd8, 0x23, 0xa1, 0x7d, 0x4e, 0xbd, 0xc2, 0xd1, 0x03, 0x17, 0xfb,
1493 0x2e, 0xc7, 0x27, 0xad, 0xd0, 0x78, 0xe5, 0x2a, 0x3c, 0x6c, 0x68, 0xd9,
1494 0x9c, 0x18, 0xfd, 0x5f, 0x9e, 0xe8, 0xaf, 0x7f, 0xfa, 0xfd, 0xe6, 0x9c,
1495 0x5d, 0xea, 0x99, 0xbb, 0xf0, 0x2d, 0x07, 0x77, 0xd7, 0x6c, 0x74, 0x47,
1496 0x3b, 0x1e, 0x93, 0xb5, 0xd0, 0x35, 0xce, 0x3a, 0x41, 0x3b, 0x76, 0xee,
1497 0x6d, 0xc3, 0xe6, 0xbd, 0x82, 0xad, 0xf5, 0xad, 0x8b, 0x94, 0x19, 0xf4,
1498 0xc3, 0x01, 0x27, 0x97, 0x71, 0x1b, 0x9f, 0xca, 0x9a, 0xab, 0xea, 0x71,
1499 0xf6, 0xc0, 0x74, 0xac, 0x19, 0xcd, 0xb5, 0x35, 0x2b, 0x53, 0x4a, 0xff,
1500 0x8a, 0x22, 0xc9, 0x9c, 0xc5, 0xc7, 0xd8, 0xc9, 0x79, 0xc1, 0xa9, 0x7e,
1501 0x89, 0x3b, 0x0a, 0x7c, 0xf7, 0xc8, 0x5e, 0xe6, 0x32, 0xe4, 0xf9, 0x7a,
1502 0x4c, 0xdb, 0xcc, 0xdf, 0x3b, 0x8a, 0x73, 0x72, 0x6d, 0xbe, 0x8a, 0x17,
1503 0xe5, 0xed, 0x41, 0x74, 0x97, 0xb7, 0xa1, 0x4f, 0x39, 0x06, 0xe6, 0xd8,
1504 0xe4, 0x83, 0x97, 0xfd, 0xf9, 0x8b, 0x22, 0x67, 0x5d, 0x30, 0x3b, 0x35,
1505 0xbe, 0x6f, 0x9f, 0xd4, 0xfd, 0x75, 0xc5, 0xf9, 0xd8, 0x94, 0x93, 0xd7,
1506 0x24, 0x16, 0x5e, 0x83, 0x98, 0x3f, 0xef, 0xff, 0xdf, 0xe4, 0xf3, 0xcd,
1507 0x82, 0x01, 0x93, 0x75, 0xef, 0x2e, 0x41, 0xf1, 0x76, 0x87, 0xc3, 0x5d,
1508 0x6e, 0x9f, 0x64, 0xf8, 0x8a, 0xf6, 0xa7, 0xda, 0xaf, 0xb4, 0x2f, 0x71,
1509 0x5a, 0x74, 0xda, 0xc8, 0xba, 0xa2, 0x3f, 0x07, 0xa3, 0x65, 0x4d, 0x96,
1510 0xdc, 0xad, 0xcd, 0xd9, 0xa7, 0x29, 0x26, 0x6f, 0xee, 0x66, 0x0e, 0x55,
1511 0xb2, 0x9f, 0xd7, 0xe4, 0x3e, 0x4b, 0x07, 0x02, 0x28, 0xda, 0xef, 0x21,
1512 0xae, 0xcf, 0x80, 0x7b, 0x7f, 0x01, 0xed, 0x55, 0x38, 0xc2, 0x6b, 0xf7,
1513 0x6d, 0x31, 0xae, 0x85, 0x6b, 0x7f, 0x21, 0x79, 0xb9, 0x70, 0xbe, 0x13,
1514 0xf7, 0xad, 0x65, 0x1c, 0x57, 0xf7, 0x7b, 0x19, 0x9f, 0xab, 0xe1, 0x61,
1515 0xcc, 0x5b, 0x32, 0xf0, 0x67, 0x28, 0xd8, 0x5f, 0x8c, 0x07, 0x06, 0xae,
1516 0xc7, 0xcc, 0xfd, 0x25, 0xb8, 0x7f, 0x60, 0x26, 0x66, 0xec, 0x97, 0xdc,
1517 0x49, 0x47, 0x60, 0x7f, 0x29, 0x56, 0x0c, 0x04, 0x51, 0xb1, 0xbf, 0x0c,
1518 0x6d, 0x03, 0xb3, 0xa0, 0xed, 0x2f, 0xc7, 0x5d, 0x03, 0x35, 0x28, 0xdf,
1519 0xaf, 0xe1, 0xce, 0x01, 0x03, 0x65, 0xfb, 0x2b, 0x18, 0xd3, 0x42, 0x8c,
1520 0x9d, 0x7e, 0x2c, 0xdf, 0xc3, 0xb9, 0x39, 0x58, 0x45, 0xbf, 0x58, 0x45,
1521 0x4e, 0xbd, 0x1a, 0xfb, 0x52, 0x73, 0x50, 0x72, 0x30, 0x80, 0xa5, 0x7b,
1522 0xc6, 0x35, 0x52, 0x1a, 0x2c, 0x0e, 0x35, 0xa0, 0xe8, 0xa0, 0xe4, 0x7e,
1523 0xc1, 0x13, 0x2d, 0x08, 0x5e, 0x58, 0x84, 0x72, 0xe6, 0xbe, 0xc0, 0x7b,
1524 0x63, 0xc0, 0xec, 0x31, 0x17, 0x8e, 0x68, 0xab, 0xb0, 0x75, 0xec, 0x9b,
1525 0x93, 0x36, 0x2f, 0xfb, 0x47, 0xe5, 0x9c, 0x5f, 0xb9, 0x96, 0x7b, 0xab,
1526 0xd1, 0x33, 0x96, 0x5f, 0x07, 0x0b, 0xf6, 0x6d, 0xa7, 0x06, 0xc7, 0x33,
1527 0xf2, 0x4c, 0x7c, 0x04, 0xb4, 0x6f, 0xa5, 0x5b, 0xce, 0x8f, 0xbb, 0xa2,
1528 0x6a, 0x59, 0x77, 0xf3, 0x86, 0x5b, 0xe2, 0x99, 0x4d, 0xcc, 0xbb, 0x24,
1529 0x87, 0xdd, 0x78, 0xcb, 0x9a, 0xcc, 0x07, 0x97, 0xf6, 0x13, 0xfa, 0xcc,
1530 0x85, 0x01, 0x0d, 0x5f, 0xc3, 0x1a, 0x67, 0x0d, 0x55, 0xe5, 0x9c, 0xc9,
1531 0x79, 0x56, 0xe7, 0x2c, 0x39, 0xed, 0x2c, 0x0e, 0xd3, 0xc1, 0xd4, 0x75,
1532 0xa8, 0xc9, 0x38, 0x6b, 0xb5, 0x75, 0x71, 0xbc, 0xa0, 0xb6, 0x1a, 0xd6,
1533 0xe4, 0xd9, 0x0f, 0x6b, 0xbe, 0x86, 0x98, 0xa9, 0x5d, 0x3a, 0x1f, 0x12,
1534 0xd4, 0x47, 0x10, 0x0c, 0x6c, 0xc3, 0x3a, 0xe7, 0x7c, 0xa0, 0x12, 0x6d,
1535 0x97, 0x73, 0x46, 0xfc, 0x5e, 0x0d, 0x23, 0x93, 0x5f, 0x6b, 0x94, 0xb3,
1536 0xd7, 0xb2, 0x8f, 0x65, 0x33, 0xe7, 0x97, 0x3c, 0xf9, 0x88, 0xa2, 0xf6,
1537 0x3a, 0xeb, 0x63, 0xab, 0x5c, 0x8c, 0x01, 0x2d, 0x0a, 0xe2, 0x45, 0xd1,
1538 0x90, 0xfe, 0xe1, 0xe4, 0xba, 0x83, 0x67, 0x74, 0x8b, 0x52, 0x30, 0xda,
1539 0xa3, 0xb8, 0x47, 0x73, 0xeb, 0x0e, 0x2e, 0xf2, 0xd8, 0x6d, 0xa9, 0x4a,
1540 0x96, 0xd1, 0x30, 0x7b, 0xae, 0x1b, 0xaf, 0x26, 0xca, 0x9c, 0xb3, 0xc7,
1541 0x5b, 0xe7, 0x16, 0xe0, 0x11, 0xda, 0x7e, 0xeb, 0x8d, 0xc7, 0xf0, 0x41,
1542 0x86, 0x5c, 0x23, 0x61, 0x85, 0x87, 0xd9, 0xe7, 0xd1, 0x84, 0x8a, 0x17,
1543 0x07, 0xb7, 0x84, 0x87, 0x9c, 0xfe, 0xbf, 0x8d, 0xcd, 0x23, 0x92, 0x77,
1544 0xb5, 0xd9, 0xdb, 0x53, 0xed, 0xb6, 0xc4, 0xdd, 0x6c, 0xa2, 0x92, 0xb9,
1545 0xb9, 0x86, 0x0f, 0xe6, 0x6e, 0xc0, 0x39, 0x96, 0x19, 0x4d, 0x6c, 0xc4,
1546 0x27, 0xe4, 0x08, 0x99, 0xc4, 0x72, 0xbc, 0xc6, 0x5c, 0xf2, 0x7b, 0x89,
1547 0x56, 0xe6, 0x96, 0xab, 0xf0, 0xca, 0xa0, 0xf0, 0x8f, 0x16, 0x2c, 0x4c,
1548 0x28, 0x58, 0x1a, 0x5a, 0x85, 0x93, 0xc3, 0xcc, 0x29, 0x07, 0xe5, 0xbc,
1549 0xeb, 0x35, 0x58, 0x93, 0x3b, 0x0f, 0xc5, 0xe7, 0x31, 0x3e, 0x5f, 0x89,
1550 0xa3, 0xc3, 0x01, 0x1c, 0x60, 0x0e, 0xf9, 0x0e, 0x31, 0x64, 0x28, 0xd1,
1551 0x80, 0xd3, 0xcc, 0x95, 0x7e, 0x94, 0x88, 0xe0, 0x33, 0xfe, 0x3e, 0x92,
1552 0x90, 0xf5, 0xef, 0x66, 0x5c, 0xc8, 0xfc, 0x18, 0x05, 0xbd, 0x33, 0x70,
1553 0xbc, 0xed, 0x79, 0x52, 0xc9, 0x23, 0xfc, 0xb4, 0xe2, 0xf4, 0x70, 0x2b,
1554 0xce, 0x0c, 0x2e, 0xc3, 0x99, 0xe1, 0x5f, 0xe1, 0x83, 0x41, 0x91, 0x57,
1555 0xce, 0x2c, 0x3a, 0xef, 0x16, 0xb0, 0x5d, 0xe2, 0xd4, 0xf0, 0xbf, 0xa5,
1556 0xed, 0x8f, 0xec, 0xe3, 0xab, 0xa4, 0xdd, 0xe7, 0xff, 0x48, 0xdb, 0xa2,
1557 0x4b, 0x89, 0xf5, 0x5e, 0x9c, 0x4c, 0x78, 0x99, 0x57, 0x8d, 0xdf, 0x50,
1558 0x84, 0xf1, 0xf9, 0xcc, 0x36, 0xb1, 0x3d, 0x53, 0x88, 0x17, 0xfb, 0xdc,
1559 0xe4, 0x8a, 0x5f, 0x25, 0x7e, 0x74, 0xd2, 0x0e, 0x0b, 0x99, 0xbf, 0x79,
1560 0xa9, 0xe3, 0xf9, 0xc4, 0xfb, 0x55, 0xd4, 0x9f, 0x0f, 0xa7, 0x12, 0x7e,
1561 0xbc, 0x9e, 0xa8, 0x8f, 0x67, 0x95, 0x46, 0x58, 0x15, 0xb9, 0xbc, 0xf2,
1562 0x68, 0xa2, 0xc3, 0x91, 0xe9, 0xd5, 0x44, 0x9b, 0xbd, 0x95, 0x3a, 0xee,
1563 0x49, 0x7d, 0xdb, 0x39, 0x6f, 0xf8, 0x4a, 0xe2, 0x82, 0x2d, 0xe7, 0x88,
1564 0x9f, 0xa1, 0x4e, 0x4f, 0x26, 0xe2, 0x28, 0x62, 0x9e, 0x72, 0x2c, 0x31,
1565 0x8e, 0x61, 0xda, 0xe5, 0x3b, 0x7d, 0xc6, 0x89, 0x35, 0xd8, 0x84, 0xcf,
1566 0xd2, 0x85, 0x78, 0x8b, 0x7d, 0x94, 0x37, 0xb9, 0x31, 0xe1, 0xb4, 0xb7,
1567 0x09, 0x9f, 0xf4, 0x29, 0xc8, 0xcc, 0xdd, 0x84, 0x8f, 0xf9, 0xec, 0x0d,
1568 0x5e, 0x9f, 0x0b, 0x53, 0xc2, 0xc9, 0x67, 0x67, 0xfa, 0x54, 0x27, 0x07,
1569 0xee, 0x6e, 0xde, 0x84, 0xd3, 0xe9, 0x8f, 0x71, 0x80, 0xb9, 0xf4, 0x63,
1570 0xe6, 0x34, 0x44, 0xa6, 0x11, 0x70, 0x8d, 0x42, 0x9c, 0xe4, 0xf3, 0x5a,
1571 0x59, 0xef, 0xd1, 0x72, 0xe5, 0x3f, 0xe2, 0x78, 0x1e, 0x61, 0x5b, 0x67,
1572 0xd3, 0xdf, 0x61, 0xbb, 0xc2, 0x39, 0xbf, 0xc3, 0x76, 0x7f, 0x85, 0x91,
1573 0x49, 0x7d, 0x9c, 0x36, 0x65, 0x5c, 0x1b, 0x7c, 0x28, 0xf6, 0x73, 0x1c,
1574 0x0f, 0xf3, 0xbb, 0x03, 0x13, 0x99, 0x9d, 0xfc, 0x7e, 0x0d, 0x87, 0x33,
1575 0x12, 0xdb, 0xf3, 0x67, 0x87, 0x64, 0x7d, 0x4b, 0xfc, 0x47, 0x9f, 0x5c,
1576 0x97, 0x9b, 0x8e, 0x54, 0x7f, 0x59, 0x7c, 0x1a, 0xed, 0xe8, 0x3f, 0xcc,
1577 0x2b, 0xc7, 0x47, 0x61, 0x0b, 0xbb, 0x0e, 0xb8, 0x91, 0xea, 0x25, 0x9f,
1578 0xed, 0xad, 0xc4, 0x53, 0xbb, 0x35, 0x3c, 0xb9, 0xfb, 0x5a, 0x6c, 0xd9,
1579 0x7d, 0x3d, 0xf6, 0xed, 0xae, 0x46, 0x92, 0xb9, 0xf2, 0x27, 0x4d, 0xb6,
1580 0x3d, 0x87, 0x9f, 0x1d, 0xf4, 0x05, 0x2f, 0xbf, 0x5f, 0x0e, 0x8b, 0x9f,
1581 0x18, 0xb8, 0xd1, 0xf1, 0x97, 0x16, 0xdc, 0xe0, 0x7c, 0xc7, 0x30, 0x27,
1582 0xd3, 0x19, 0xde, 0x90, 0xdd, 0x14, 0x7e, 0x28, 0x3b, 0x1d, 0x5b, 0xfb,
1583 0xab, 0xd0, 0xbf, 0xbb, 0x32, 0x5e, 0xc9, 0x7e, 0x56, 0xce, 0xb3, 0x31,
1584 0xc4, 0xba, 0x66, 0x63, 0x4f, 0x78, 0x4d, 0xf6, 0x79, 0xb4, 0x65, 0xfd,
1585 0xd8, 0xdc, 0x1f, 0x60, 0x5f, 0xb2, 0x86, 0xef, 0x3e, 0xf1, 0x20, 0x6c,
1586 0xfb, 0x42, 0xd3, 0x11, 0xc6, 0xb7, 0x1f, 0xa3, 0x9d, 0xcf, 0x92, 0xfd,
1587 0x1b, 0xc8, 0xa9, 0x0a, 0xe2, 0xde, 0xa8, 0x8d, 0x53, 0xe1, 0x71, 0xdc,
1588 0xc1, 0xf6, 0x76, 0xf6, 0x97, 0x51, 0xa6, 0xe2, 0x78, 0x21, 0xef, 0x2d,
1589 0x0d, 0x6f, 0xc4, 0xae, 0x31, 0x59, 0x03, 0x3c, 0x81, 0xa5, 0xe4, 0x2c,
1590 0x15, 0x73, 0x7f, 0x56, 0x82, 0x32, 0xcd, 0x7d, 0xbe, 0x59, 0xec, 0x2f,
1591 0x4e, 0xfb, 0x13, 0xac, 0x5c, 0x87, 0xb5, 0xce, 0xd9, 0xc2, 0x76, 0xbc,
1592 0x94, 0x10, 0x9c, 0x5e, 0x8d, 0x83, 0x89, 0x75, 0xd8, 0x92, 0x92, 0x7d,
1593 0xc0, 0xe5, 0xa8, 0xc9, 0xfe, 0x55, 0x78, 0x3d, 0xe3, 0xa9, 0x2b, 0xfb,
1594 0x3f, 0xb0, 0x38, 0x9b, 0xa6, 0x5c, 0xc3, 0xe1, 0xb5, 0xd9, 0x7d, 0xe1,
1595 0x07, 0xb3, 0xad, 0x98, 0x95, 0x95, 0xf5, 0xb4, 0x36, 0xe2, 0xbb, 0xac,
1596 0xa7, 0x4d, 0x60, 0x61, 0xf6, 0x0c, 0x16, 0x65, 0xdf, 0x62, 0x2c, 0x16,
1597 0xdc, 0x90, 0x75, 0xb6, 0x5f, 0x31, 0x39, 0x91, 0x7d, 0xc3, 0xbf, 0xc4,
1598 0xd6, 0xbd, 0x71, 0xc6, 0xc2, 0x3c, 0x46, 0xd5, 0x6b, 0x07, 0x04, 0x5f,
1599 0xc6, 0x3c, 0x4e, 0x2c, 0xe8, 0x4b, 0xdd, 0x43, 0x7b, 0x54, 0xc9, 0xf3,
1600 0x25, 0xce, 0xac, 0xa3, 0x2f, 0x77, 0x92, 0x9f, 0x4b, 0xfc, 0xbb, 0x6b,
1601 0xf2, 0xbe, 0xf0, 0x3a, 0x89, 0x7d, 0x3a, 0x8e, 0x66, 0x9c, 0xbd, 0x0c,
1602 0xdd, 0x6b, 0xdc, 0xc1, 0x67, 0x52, 0xff, 0x2f, 0x91, 0xdc, 0xbb, 0xca,
1603 0xde, 0xe9, 0xac, 0x19, 0x29, 0x38, 0x1e, 0x62, 0x5f, 0xa4, 0x91, 0x4b,
1604 0xf7, 0xcb, 0x59, 0xce, 0x75, 0x72, 0x96, 0xd3, 0x72, 0x19, 0x6d, 0xf6,
1605 0x96, 0x14, 0x1e, 0x2c, 0x45, 0x00, 0xcb, 0x47, 0x0b, 0x10, 0x3b, 0x58,
1606 0x8c, 0xdb, 0x77, 0xb7, 0xd3, 0x96, 0x2d, 0xda, 0xaf, 0x61, 0xae, 0x55,
1607 0x8a, 0xb1, 0x84, 0xf7, 0x1e, 0xe8, 0x0f, 0xb6, 0x02, 0xa1, 0x13, 0xa7,
1608 0x5d, 0xc5, 0xb8, 0x9f, 0xb1, 0x23, 0x9d, 0x5e, 0x8e, 0xd8, 0xfe, 0xe3,
1609 0xb0, 0xd2, 0xb4, 0xc9, 0x3d, 0xc4, 0x99, 0xbd, 0x6e, 0xa8, 0xd1, 0x5f,
1610 0x61, 0xdf, 0xb0, 0x8a, 0xf2, 0x3d, 0x2f, 0xd8, 0x01, 0x43, 0x31, 0xce,
1611 0x85, 0xb2, 0xe4, 0x40, 0x6e, 0x94, 0x26, 0x5b, 0x30, 0x4a, 0xac, 0xf1,
1612 0x25, 0x63, 0xc8, 0x64, 0xda, 0x90, 0x26, 0x96, 0xa4, 0xc9, 0x9b, 0x4a,
1613 0x92, 0x26, 0x63, 0x79, 0x1d, 0x76, 0xd1, 0x5f, 0x0a, 0x98, 0xcb, 0x6f,
1614 0xcb, 0xdc, 0x0a, 0x6b, 0xf8, 0x4e, 0x6c, 0x1f, 0x6e, 0xe3, 0x87, 0xfc,
1615 0x71, 0xf8, 0xdb, 0x58, 0x38, 0x7a, 0x02, 0x3d, 0x99, 0x38, 0xed, 0xf1,
1616 0x63, 0x6c, 0x4f, 0x1f, 0xc3, 0x53, 0x7d, 0x5d, 0xcc, 0x11, 0x8e, 0xe1,
1617 0x49, 0x5e, 0xf7, 0xf5, 0x19, 0x9d, 0x01, 0xf5, 0x18, 0x52, 0xe9, 0x4d,
1618 0xb8, 0xb3, 0x5f, 0x61, 0x0e, 0xb7, 0x09, 0x77, 0xec, 0xa7, 0x2d, 0x3e,
1619 0xd1, 0x81, 0xd6, 0xd1, 0xd7, 0x90, 0xc8, 0xbc, 0xc4, 0xfc, 0x6a, 0x23,
1620 0x7a, 0x52, 0x1b, 0xc8, 0xbd, 0x9e, 0x67, 0x3b, 0x47, 0xe8, 0xe7, 0x9d,
1621 0x1c, 0xe3, 0xe3, 0xfc, 0x5c, 0xc2, 0x70, 0x4d, 0x57, 0xf2, 0x58, 0x4d,
1622 0xbf, 0x4f, 0x49, 0xee, 0xb0, 0x8e, 0x38, 0x71, 0x6f, 0x29, 0x8a, 0x45,
1623 0xbf, 0xf9, 0x35, 0x69, 0x99, 0x0b, 0xb1, 0x7d, 0x59, 0x9b, 0x76, 0xa3,
1624 0x28, 0x29, 0xeb, 0xd1, 0xe3, 0xc1, 0x22, 0x72, 0x00, 0x6f, 0x52, 0x74,
1625 0xd8, 0x6e, 0x77, 0xa7, 0x04, 0x4b, 0x72, 0xdc, 0xfc, 0xe5, 0xcc, 0xaf,
1626 0xb0, 0x75, 0x70, 0x1a, 0x16, 0xf5, 0x55, 0x23, 0xee, 0xb7, 0xed, 0xe7,
1627 0xe8, 0x6b, 0x09, 0xe6, 0x58, 0xbb, 0xfa, 0x63, 0xc4, 0x94, 0x12, 0xe4,
1628 0x72, 0x3d, 0xd1, 0x4d, 0xd0, 0xd4, 0xaf, 0xd8, 0x23, 0x99, 0xc5, 0x79,
1629 0x13, 0xee, 0x3a, 0x7e, 0x43, 0x29, 0xce, 0x97, 0xe4, 0xd6, 0xc5, 0xff,
1630 0xfc, 0x12, 0xb7, 0xf9, 0xd7, 0x95, 0xbf, 0xff, 0xdf, 0x58, 0x7e, 0x62,
1631 0xca, 0xd9, 0xb5, 0xfc, 0x7b, 0x39, 0x32, 0xd6, 0xeb, 0xe5, 0xdc, 0x9a,
1632 0x25, 0x7c, 0x49, 0xce, 0xdc, 0x1e, 0x4f, 0x14, 0x30, 0x4e, 0xaa, 0x0b,
1633 0x3c, 0x50, 0xfd, 0x1e, 0x14, 0x32, 0x9e, 0x55, 0x61, 0xb3, 0xdf, 0xc6,
1634 0x62, 0xb3, 0x00, 0x87, 0x1b, 0x62, 0x72, 0xce, 0xa2, 0xdd, 0xe3, 0xf0,
1635 0xd1, 0xd5, 0xf7, 0xfc, 0xe1, 0xba, 0xf5, 0x26, 0x72, 0x37, 0x39, 0x5f,
1636 0xd0, 0x86, 0x53, 0x15, 0xf2, 0xae, 0xd0, 0x26, 0xe7, 0xdc, 0x59, 0x51,
1637 0xad, 0xac, 0xa3, 0xe9, 0x38, 0x61, 0xd4, 0xeb, 0x95, 0x2a, 0xe3, 0xb9,
1638 0xf2, 0xae, 0x6d, 0xf9, 0xa3, 0x8c, 0xf5, 0x72, 0x86, 0xe2, 0x5f, 0xda,
1639 0xa7, 0x58, 0x83, 0xed, 0x4f, 0x34, 0x63, 0x62, 0x95, 0xc4, 0xff, 0xff,
1640 0xe6, 0xcb, 0x73, 0xba, 0x6d, 0xa9, 0x1f, 0x96, 0xca, 0xb9, 0x24, 0x69,
1641 0x7b, 0x3b, 0xf3, 0x27, 0x8f, 0x11, 0xc6, 0xbb, 0xc2, 0xd2, 0x9c, 0xfd,
1642 0xa4, 0x1c, 0xa7, 0x28, 0x34, 0xce, 0x4f, 0xbe, 0x3b, 0xf2, 0xd7, 0xa5,
1643 0xc2, 0x0f, 0xb7, 0xa5, 0x36, 0x91, 0x9b, 0x8b, 0x3c, 0xbf, 0xb7, 0xd7,
1644 0xf8, 0x2b, 0x59, 0xf6, 0xee, 0xc9, 0xf6, 0xc4, 0x16, 0xe4, 0x4c, 0x8e,
1645 0xdc, 0x93, 0x3a, 0xa2, 0xb3, 0xa9, 0x75, 0x5c, 0xcc, 0x85, 0x6f, 0xc0,
1646 0xa3, 0xf4, 0xc1, 0x99, 0xc6, 0xeb, 0x76, 0x97, 0x9c, 0x9f, 0xa9, 0xd5,
1647 0xa6, 0xf4, 0xf5, 0x0b, 0x47, 0x96, 0x42, 0xca, 0xd2, 0x9f, 0x92, 0xb3,
1648 0xa8, 0x9f, 0xd9, 0xb5, 0x55, 0xf2, 0xfc, 0xc2, 0x64, 0xfb, 0x35, 0xce,
1649 0xd9, 0xbe, 0x7d, 0xa9, 0xbc, 0xdc, 0xb2, 0xde, 0xea, 0xcf, 0xf7, 0x55,
1650 0x77, 0x79, 0x3c, 0x22, 0x5b, 0xbc, 0xf4, 0x4a, 0x99, 0xe1, 0xcb, 0x9f,
1651 0x59, 0x9d, 0xe1, 0xd4, 0xc9, 0xf7, 0x29, 0x32, 0x6e, 0x62, 0x9e, 0x7a,
1652 0xf5, 0x18, 0xb5, 0x29, 0x63, 0x92, 0x3a, 0x32, 0x2e, 0x6d, 0xd2, 0x0e,
1653 0x4a, 0xcb, 0x50, 0x2c, 0x75, 0x84, 0xbb, 0x6a, 0x0e, 0x07, 0x2f, 0x17,
1654 0x5e, 0x2e, 0xb6, 0x51, 0x66, 0xdb, 0xef, 0x39, 0x31, 0x53, 0xda, 0xe1,
1655 0x38, 0xc6, 0x56, 0xd1, 0xce, 0xed, 0x2e, 0xe2, 0xa7, 0xfd, 0x5e, 0x73,
1656 0x00, 0x5b, 0x13, 0xa2, 0x6b, 0x23, 0x70, 0x88, 0xd8, 0xb1, 0xd9, 0xe1,
1657 0x1b, 0x1e, 0x74, 0xa7, 0xf3, 0xfb, 0xa3, 0x85, 0x72, 0xf6, 0x36, 0x20,
1658 0x3a, 0xef, 0x36, 0xc9, 0xb3, 0xb4, 0x85, 0xba, 0x9b, 0x5c, 0x69, 0x3d,
1659 0xfe, 0x99, 0xf3, 0x2b, 0xe7, 0x8f, 0x73, 0x7b, 0x95, 0x71, 0xda, 0x51,
1660 0x2e, 0x5e, 0x81, 0xf1, 0x9d, 0x3c, 0x69, 0xf2, 0x5c, 0x66, 0x77, 0xe6,
1661 0x9f, 0xed, 0x71, 0xe7, 0x5c, 0xe6, 0xe5, 0x77, 0x3a, 0xd2, 0x9a, 0x6d,
1662 0x1f, 0xe0, 0xb3, 0xcb, 0x67, 0x34, 0x19, 0xd3, 0x0d, 0x39, 0xcb, 0xf9,
1663 0x4f, 0x9c, 0xbb, 0xa9, 0x65, 0xc7, 0x2b, 0x72, 0x67, 0x96, 0x63, 0xea,
1664 0x42, 0x23, 0x8f, 0xab, 0x41, 0xcb, 0x72, 0x70, 0xf5, 0x0e, 0x67, 0x0f,
1665 0x3e, 0x8d, 0x60, 0x6b, 0x1b, 0x2c, 0xbb, 0xd8, 0xc8, 0xe3, 0x80, 0x61,
1666 0xce, 0x51, 0xba, 0x30, 0x3b, 0x5c, 0x2c, 0x1c, 0x3b, 0xe8, 0x8e, 0x06,
1667 0xb5, 0x0f, 0x10, 0xaa, 0x3b, 0xe6, 0xec, 0x95, 0x0a, 0x36, 0x18, 0x58,
1668 0x9f, 0x21, 0xdf, 0x1e, 0x93, 0x77, 0x1d, 0xe5, 0xda, 0x69, 0x9f, 0xd7,
1669 0x82, 0xa5, 0xed, 0xc4, 0x52, 0xeb, 0xcf, 0x3d, 0x4e, 0x7b, 0xc1, 0xf6,
1670 0x61, 0x25, 0xd8, 0xba, 0x51, 0xc9, 0xb7, 0xe7, 0xfb, 0x92, 0xf6, 0xea,
1671 0x58, 0xbf, 0x7a, 0xf2, 0xfd, 0x42, 0x83, 0x6d, 0x5c, 0xbd, 0x9f, 0x3c,
1672 0x3d, 0x2e, 0x7b, 0x51, 0x87, 0x27, 0x39, 0xe1, 0xb1, 0x3f, 0xd8, 0x8b,
1673 0xfa, 0xd2, 0x3e, 0x63, 0xec, 0xb3, 0xb5, 0x58, 0x89, 0x91, 0x31, 0x74,
1674 0xa1, 0x30, 0x1c, 0xaa, 0x7b, 0x19, 0xd0, 0xdd, 0xd1, 0x50, 0x60, 0xd8,
1675 0xd9, 0xd3, 0x35, 0xbd, 0x8b, 0x9c, 0xfa, 0xd5, 0xe4, 0xc5, 0x7f, 0x5c,
1676 0x27, 0x25, 0x86, 0xd1, 0x56, 0xaf, 0xc4, 0xe6, 0x17, 0xb3, 0x9d, 0xba,
1677 0x30, 0xf4, 0x82, 0x68, 0x5e, 0x47, 0xa1, 0xba, 0x0f, 0x38, 0x9f, 0x47,
1678 0x9b, 0x43, 0x81, 0x21, 0xe7, 0x8c, 0xa7, 0xe8, 0xc5, 0xf4, 0xe6, 0xe6,
1679 0x5e, 0x17, 0xbe, 0xcd, 0x7c, 0x32, 0x8e, 0x91, 0x84, 0x97, 0x63, 0xa9,
1680 0xd7, 0xb6, 0xa3, 0x82, 0x36, 0x8e, 0xd8, 0xe6, 0x06, 0xe2, 0x77, 0x02,
1681 0x31, 0xd7, 0x8d, 0xe5, 0x88, 0x93, 0x40, 0xbb, 0x8c, 0x38, 0x39, 0x51,
1682 0x7d, 0xdd, 0x0e, 0xda, 0x6f, 0xda, 0x1f, 0x0c, 0x58, 0x88, 0xe3, 0xc5,
1683 0xc4, 0xc2, 0xff, 0xc7, 0x05, 0xcb, 0x2c, 0x81, 0xbc, 0x5f, 0x90, 0xbe,
1684 0x67, 0x59, 0x28, 0xa8, 0xbf, 0x32, 0xb9, 0x27, 0xdd, 0x9d, 0xf8, 0xad,
1685 0xbc, 0xc7, 0xc4, 0x7a, 0x7f, 0xac, 0x8c, 0xf4, 0xed, 0xc5, 0xa1, 0xbe,
1686 0x3e, 0x6c, 0x79, 0x82, 0x32, 0x1a, 0x36, 0x16, 0x9a, 0x5d, 0xcc, 0xa5,
1687 0x7d, 0x58, 0xa7, 0xcd, 0x8e, 0xa8, 0x2c, 0x37, 0x94, 0xce, 0xad, 0x3b,
1688 0x6e, 0x75, 0xf6, 0xbc, 0x7b, 0x98, 0xa3, 0x38, 0xf1, 0x53, 0xf3, 0x46,
1689 0x63, 0xca, 0xce, 0x4c, 0x8b, 0xb2, 0x23, 0x2d, 0x6d, 0x75, 0x2a, 0x3d,
1690 0x99, 0xbf, 0xa5, 0x4f, 0x58, 0x38, 0x6d, 0xca, 0xbb, 0x39, 0xd2, 0xae,
1691 0x85, 0xe1, 0xe6, 0x7f, 0xcd, 0x3b, 0x3a, 0xa2, 0xd3, 0x4e, 0x6c, 0x1e,
1692 0x7c, 0x1c, 0xdd, 0x83, 0xa7, 0x9c, 0x33, 0x46, 0x1e, 0xc3, 0x6b, 0x5d,
1693 0x1f, 0x0d, 0x1e, 0xb1, 0x90, 0x2d, 0x97, 0xf3, 0xf9, 0x55, 0xd1, 0x13,
1694 0xd8, 0xa9, 0xc9, 0xbb, 0x27, 0x3d, 0xe4, 0x11, 0xb2, 0x6f, 0xbb, 0x1a,
1695 0x5f, 0xef, 0x95, 0x39, 0x2c, 0xb3, 0x0a, 0xa3, 0xc1, 0xd8, 0x3a, 0x67,
1696 0x0e, 0x1b, 0x70, 0x32, 0xfb, 0x38, 0xde, 0xdb, 0xd3, 0x05, 0x35, 0x1c,
1697 0x0c, 0xdc, 0x06, 0xbb, 0xeb, 0xb8, 0x19, 0xb3, 0x3c, 0x08, 0x1e, 0x76,
1698 0xa9, 0xc0, 0x0b, 0x7b, 0xe0, 0x9d, 0xc1, 0xf9, 0x9f, 0xcf, 0x18, 0x5d,
1699 0x6e, 0xd8, 0x0b, 0xfe, 0xb1, 0x29, 0xd8, 0x63, 0xb8, 0xac, 0xbf, 0x99,
1700 0x8e, 0x60, 0x5f, 0x44, 0x35, 0xda, 0xef, 0x52, 0xa1, 0xf8, 0xa2, 0xf2,
1701 0x5e, 0x69, 0x17, 0xee, 0x6c, 0xf4, 0x59, 0xa5, 0xd1, 0x60, 0xdf, 0x29,
1702 0x25, 0x58, 0x67, 0xa9, 0x6d, 0x9c, 0xe7, 0x3a, 0xbc, 0x42, 0x0e, 0xd2,
1703 0xca, 0xd8, 0xbb, 0x34, 0xa9, 0x3b, 0xeb, 0x4c, 0xaa, 0x51, 0x13, 0x29,
1704 0x52, 0x34, 0xdc, 0x96, 0x05, 0x8e, 0xa6, 0x57, 0xe3, 0x9d, 0x3d, 0x26,
1705 0xf3, 0x54, 0x9d, 0xb8, 0xf5, 0xbd, 0x32, 0xc1, 0x80, 0x0e, 0xd3, 0xaa,
1706 0x57, 0x19, 0xfb, 0x3d, 0x2a, 0x16, 0xce, 0x8c, 0x86, 0xc6, 0x17, 0xb8,
1707 0xdc, 0x88, 0x64, 0x65, 0xfd, 0x53, 0x97, 0xb3, 0xc9, 0xb8, 0x2b, 0xe9,
1708 0x25, 0xff, 0xac, 0xc6, 0x6f, 0xc8, 0x83, 0x7f, 0x4d, 0xbe, 0x3b, 0xc1,
1709 0x78, 0x3e, 0x91, 0x29, 0x66, 0xbe, 0xe8, 0x91, 0x1c, 0x78, 0xdc, 0xc3,
1710 0xb9, 0x28, 0x6b, 0xf4, 0xe3, 0xdc, 0xb0, 0x17, 0x77, 0xec, 0x09, 0xee,
1711 0x9b, 0x50, 0xab, 0xf0, 0xc9, 0x70, 0x31, 0x96, 0x0f, 0x78, 0x29, 0x9b,
1712 0x8d, 0x5d, 0xc4, 0xff, 0x8f, 0xf8, 0xac, 0x65, 0x0f, 0x94, 0xcc, 0xdc,
1713 0x59, 0xe4, 0xec, 0x06, 0xeb, 0x97, 0x60, 0xd9, 0x80, 0xf0, 0x34, 0x15,
1714 0x1f, 0x0e, 0x2b, 0xf8, 0x20, 0x6d, 0x62, 0x21, 0xfb, 0xdb, 0x9c, 0x7a,
1715 0xc1, 0xf6, 0xd2, 0xcf, 0xd7, 0x64, 0x4c, 0x3c, 0x98, 0xd6, 0x19, 0x53,
1716 0xde, 0xb6, 0x5d, 0x46, 0x23, 0xde, 0xde, 0x6d, 0x9c, 0x78, 0xd7, 0x15,
1717 0x1a, 0x9f, 0xeb, 0x6a, 0xc4, 0x5b, 0x07, 0x1b, 0xf1, 0xb3, 0xfe, 0x05,
1718 0xb8, 0xb9, 0x31, 0x86, 0xf3, 0x73, 0x1b, 0xf1, 0xe6, 0x7e, 0x1d, 0x3b,
1719 0x52, 0xcd, 0xd0, 0x47, 0xc7, 0xc9, 0x4f, 0x23, 0xa8, 0x67, 0x4e, 0x65,
1720 0xf4, 0xdb, 0x5d, 0x25, 0xd1, 0x2e, 0xec, 0x34, 0xa3, 0x98, 0xb3, 0x5f,
1721 0xf4, 0x60, 0xdb, 0xeb, 0xe6, 0x46, 0xf1, 0x72, 0x9f, 0x41, 0x3f, 0x8d,
1722 0x52, 0x0f, 0x3a, 0x9e, 0x24, 0x36, 0x87, 0x9e, 0x30, 0x2e, 0x1c, 0xe0,
1723 0xef, 0x05, 0x07, 0x9a, 0xd1, 0xce, 0xfe, 0x13, 0xa9, 0x18, 0xf6, 0x8d,
1724 0x36, 0x70, 0xcc, 0x26, 0xc7, 0x5f, 0x63, 0xfd, 0x46, 0x69, 0x41, 0xdf,
1725 0x68, 0x2b, 0xf9, 0x66, 0x17, 0x79, 0x66, 0x2b, 0x7a, 0xd9, 0xd6, 0xd6,
1726 0x94, 0x89, 0x65, 0xc9, 0x56, 0x3c, 0x9d, 0x90, 0x33, 0x8d, 0x46, 0x64,
1727 0x9e, 0x22, 0xef, 0x7d, 0xb5, 0xe2, 0x10, 0x75, 0xb2, 0x70, 0x60, 0x39,
1728 0xed, 0xd0, 0x8b, 0x45, 0x7b, 0x74, 0x3c, 0x95, 0xba, 0x13, 0xef, 0x8c,
1729 0x98, 0x68, 0x4b, 0x8a, 0xbe, 0xe5, 0x5c, 0x4d, 0x1c, 0xc7, 0x19, 0x5b,
1730 0x7e, 0x33, 0x10, 0xfb, 0x1b, 0x4e, 0xf3, 0x49, 0x15, 0xc1, 0xce, 0x19,
1731 0x9c, 0xf0, 0x9b, 0x1a, 0xe5, 0x6c, 0x94, 0x8b, 0xa8, 0x16, 0xb4, 0xca,
1732 0x55, 0x4b, 0xe7, 0x7d, 0xcb, 0xad, 0x6e, 0xc2, 0x37, 0x06, 0xdc, 0xe4,
1733 0xf4, 0x2a, 0x73, 0x11, 0xab, 0x83, 0xb6, 0x61, 0x95, 0xa9, 0xb9, 0x79,
1734 0xdb, 0x2e, 0xef, 0xa1, 0x19, 0x2e, 0xec, 0x32, 0x6b, 0xda, 0x4a, 0x58,
1735 0x6f, 0x69, 0x38, 0x18, 0x2b, 0x52, 0x9b, 0x99, 0x27, 0x3e, 0x8e, 0x75,
1736 0x7b, 0x1e, 0xc7, 0x1a, 0x7e, 0x3a, 0xf6, 0xd8, 0x5d, 0x4b, 0x4c, 0x05,
1737 0x2f, 0x1a, 0x76, 0x57, 0x97, 0x69, 0x70, 0x6e, 0x65, 0x5e, 0x1f, 0x47,
1738 0xe7, 0xa1, 0xc7, 0xf1, 0x28, 0xed, 0xab, 0x92, 0x7e, 0xbc, 0x32, 0x69,
1739 0x77, 0xdd, 0xdc, 0x58, 0x87, 0x4f, 0x9d, 0xfc, 0x43, 0xec, 0x75, 0xab,
1740 0x93, 0x13, 0xa7, 0x55, 0xb9, 0xde, 0xed, 0x5c, 0x5b, 0xea, 0x2b, 0x65,
1741 0xf9, 0xd8, 0xf2, 0x5b, 0xb6, 0xfb, 0xbb, 0x3d, 0xe5, 0x78, 0xa2, 0x52,
1742 0xe2, 0x87, 0xac, 0xed, 0x42, 0x31, 0xe6, 0x32, 0xcf, 0x7a, 0xe2, 0x38,
1743 0xb6, 0x93, 0xb7, 0xf9, 0xc3, 0x92, 0x03, 0xd7, 0x9b, 0x5b, 0xd4, 0x5b,
1744 0x89, 0xed, 0x0a, 0x76, 0xd6, 0xf6, 0xa1, 0x97, 0xbe, 0xba, 0xab, 0x36,
1745 0x18, 0xef, 0x45, 0xd4, 0xde, 0x35, 0xbd, 0xe7, 0xdf, 0xf0, 0x5e, 0x96,
1746 0xbc, 0xb7, 0x9d, 0x7f, 0x37, 0xeb, 0x71, 0x74, 0xed, 0x91, 0xf9, 0x7f,
1747 0x1c, 0x8f, 0x51, 0xfe, 0xce, 0x81, 0xc7, 0xf1, 0x4d, 0xda, 0x4e, 0x45,
1748 0xd3, 0xd1, 0xc7, 0x2a, 0x30, 0xbb, 0xaf, 0x1c, 0xe3, 0x0f, 0x57, 0xca,
1749 0x39, 0x28, 0x62, 0x62, 0xaf, 0xf2, 0x38, 0xd6, 0x0f, 0x1d, 0xa0, 0x2f,
1750 0x3a, 0xfe, 0x47, 0x2c, 0xce, 0xc7, 0xab, 0x00, 0xd6, 0x11, 0x93, 0x73,
1751 0xb8, 0xee, 0xc7, 0x9a, 0xc4, 0x61, 0xc7, 0xf7, 0x0b, 0xa2, 0xab, 0xe8,
1752 0xf7, 0x6d, 0xf4, 0xfb, 0xe5, 0xf4, 0xfb, 0x56, 0xfa, 0x7d, 0x0b, 0xfd,
1753 0x3e, 0x46, 0xbf, 0x8f, 0xd2, 0xef, 0x23, 0xf4, 0xfb, 0x66, 0xfa, 0xbd,
1754 0x49, 0xbf, 0x87, 0x72, 0xa2, 0xf9, 0x38, 0x3c, 0xfd, 0x5e, 0xda, 0x50,
1755 0xee, 0x3d, 0x99, 0x83, 0xc4, 0x9f, 0xd3, 0xe6, 0x9c, 0xc0, 0x62, 0xc6,
1756 0xd5, 0x61, 0x62, 0x44, 0x7a, 0xe4, 0xaf, 0x9c, 0x77, 0x2a, 0xd2, 0xc4,
1757 0xfd, 0x57, 0xa8, 0x8f, 0xa5, 0xe1, 0x1a, 0xf3, 0x69, 0xc6, 0xb0, 0x5f,
1758 0x18, 0xf5, 0x3d, 0x7e, 0x96, 0xf9, 0x41, 0xaa, 0xbe, 0x6f, 0x1a, 0x0c,
1759 0xab, 0x51, 0xdd, 0x0a, 0xac, 0xf4, 0x73, 0xcc, 0x72, 0xde, 0x6e, 0x25,
1760 0x1e, 0x1b, 0x6c, 0xc3, 0x7f, 0x19, 0xd4, 0xa8, 0x8b, 0x9a, 0xf1, 0x5b,
1761 0x5d, 0xf8, 0x71, 0x00, 0x2e, 0xff, 0x35, 0xc0, 0xe7, 0x55, 0x98, 0x73,
1762 0x58, 0xde, 0xef, 0x4b, 0x57, 0xb9, 0x1a, 0x66, 0x42, 0x6c, 0x04, 0x44,
1763 0x6a, 0x17, 0x33, 0xc1, 0x39, 0xce, 0x3b, 0x40, 0xb1, 0x55, 0x82, 0xe9,
1764 0x45, 0xd8, 0x5a, 0xe7, 0xe0, 0xec, 0xb3, 0x72, 0x6e, 0xb0, 0x8a, 0x78,
1765 0xe4, 0x8b, 0xb6, 0x62, 0x5b, 0xaf, 0x75, 0x7f, 0x15, 0x96, 0xa3, 0xa7,
1766 0x37, 0xa7, 0x83, 0x87, 0xc3, 0x1a, 0xa9, 0x42, 0x48, 0x9f, 0xa3, 0xc0,
1767 0xdd, 0xd1, 0x1c, 0xc1, 0x83, 0x99, 0x04, 0xfa, 0x38, 0xc6, 0x0d, 0xf4,
1768 0xb3, 0x75, 0x7f, 0xfa, 0xdd, 0x4e, 0x7c, 0x33, 0xa1, 0xd3, 0xfe, 0x2f,
1769 0xda, 0xe9, 0x8a, 0x39, 0x7d, 0x55, 0x30, 0x3a, 0x57, 0xa8, 0xf3, 0x98,
1770 0xd3, 0x06, 0x8f, 0xc8, 0xc2, 0xf7, 0xf4, 0xa8, 0xd7, 0xaa, 0x20, 0x36,
1771 0xcf, 0x1a, 0x80, 0x32, 0x9c, 0x94, 0xf7, 0x20, 0xba, 0xf0, 0xff, 0x99,
1772 0x6d, 0x8e, 0xfd, 0x8c, 0xbb, 0x34, 0xcc, 0x4c, 0xca, 0x7d, 0x7b, 0xc1,
1773 0x67, 0x4d, 0xc1, 0x3a, 0xdd, 0xb5, 0x81, 0xf7, 0xab, 0xf1, 0x23, 0xc6,
1774 0xd9, 0xc0, 0xc0, 0x02, 0xa8, 0x4d, 0x5e, 0xdc, 0xdd, 0x50, 0x8a, 0xf8,
1775 0x4a, 0xe1, 0xa1, 0x92, 0xef, 0xbb, 0xa9, 0xcf, 0xff, 0x17, 0x0f, 0x99,
1776 0xcf, 0x61, 0xc2, 0x9f, 0x70, 0xf6, 0xdd, 0xd7, 0x99, 0x77, 0x28, 0x16,
1777 0xaf, 0xb7, 0xa5, 0x2c, 0x6c, 0x30, 0x99, 0x0b, 0xdd, 0x53, 0xc9, 0x9c,
1778 0x44, 0xca, 0x4b, 0xbb, 0x5b, 0x9d, 0xf6, 0x0e, 0xa6, 0xe4, 0x7a, 0xf7,
1779 0x64, 0x9f, 0x77, 0x01, 0x95, 0x5e, 0xe2, 0xad, 0x82, 0x33, 0xb5, 0x09,
1780 0xfa, 0x34, 0x7e, 0xec, 0x46, 0x4d, 0xba, 0x5f, 0x75, 0xfd, 0xf8, 0x1a,
1781 0xcc, 0x31, 0x7f, 0xaf, 0xca, 0x7c, 0xc4, 0xf0, 0x54, 0x48, 0x41, 0xa5,
1782 0x61, 0x9c, 0xff, 0x19, 0x7d, 0x6b, 0xc2, 0x95, 0xc0, 0x53, 0x63, 0xa7,
1783 0xec, 0xf1, 0x6b, 0xfc, 0x9c, 0x73, 0xa9, 0xdb, 0x86, 0x0f, 0x06, 0x65,
1784 0xce, 0x64, 0x9d, 0x9f, 0xb1, 0x5d, 0xd5, 0x51, 0xca, 0x7b, 0xa7, 0x87,
1785 0x4d, 0xe6, 0x3a, 0x6d, 0xf8, 0xc7, 0xc1, 0x95, 0xf8, 0xfd, 0x60, 0x4d,
1786 0xdb, 0x7f, 0x52, 0x6d, 0x7b, 0x69, 0xf8, 0x6b, 0xf8, 0x65, 0xa5, 0x86,
1787 0xa7, 0x69, 0x43, 0xbf, 0x4f, 0x58, 0x4b, 0xaf, 0x21, 0x16, 0xfc, 0xef,
1788 0x44, 0xf0, 0xc2, 0x49, 0x67, 0x5f, 0xa9, 0xde, 0xfc, 0xd0, 0x15, 0x8c,
1789 0x9f, 0x51, 0x83, 0xd6, 0x36, 0x65, 0x39, 0xec, 0x4c, 0x2b, 0xce, 0x67,
1790 0xa6, 0xda, 0x42, 0x97, 0x8d, 0x2a, 0xb1, 0x03, 0xb1, 0x07, 0xda, 0x22,
1791 0x73, 0xb9, 0x9f, 0x92, 0x47, 0x77, 0x7f, 0x95, 0xf6, 0x98, 0xa2, 0x3d,
1792 0xa6, 0x68, 0x8f, 0xc4, 0xa4, 0xe7, 0x89, 0x55, 0x3f, 0x48, 0xd1, 0x1e,
1793 0xe9, 0x3f, 0xcf, 0xd1, 0x7f, 0x72, 0x5c, 0xb9, 0xdd, 0x39, 0xb7, 0xf6,
1794 0x06, 0x63, 0x62, 0xe2, 0x09, 0x79, 0x27, 0xad, 0x66, 0x43, 0x16, 0xc1,
1795 0xf6, 0x5e, 0xe5, 0xb3, 0x72, 0x39, 0x67, 0xfb, 0xed, 0x90, 0xf8, 0x40,
1796 0x6e, 0x3f, 0xe0, 0xc8, 0xc8, 0x63, 0x65, 0xf2, 0x7e, 0xd4, 0xc1, 0xbd,
1797 0xff, 0x92, 0xce, 0xfe, 0x3b, 0xe5, 0x10, 0x7d, 0xfd, 0x5b, 0xc7, 0x2e,
1798 0xba, 0xfc, 0x1b, 0xfb, 0x97, 0x55, 0x32, 0xfe, 0x55, 0xf8, 0x62, 0xb0,
1799 0x05, 0xe7, 0x19, 0x7f, 0xdf, 0x6a, 0x1a, 0xef, 0x0c, 0x20, 0xd8, 0x51,
1800 0xae, 0x46, 0x91, 0xcd, 0xb4, 0xe0, 0xb3, 0x44, 0x14, 0x07, 0x12, 0x35,
1801 0xed, 0x35, 0xae, 0xb3, 0x6a, 0x7c, 0x86, 0x58, 0x54, 0x0c, 0x9f, 0x92,
1802 0x5f, 0x2e, 0xac, 0x8d, 0x60, 0x88, 0x6d, 0x7a, 0xa2, 0x1a, 0x46, 0x9a,
1803 0xc5, 0x56, 0x73, 0xef, 0x4e, 0xfd, 0xa9, 0xbf, 0x2e, 0xda, 0xe3, 0x7b,
1804 0x4d, 0x17, 0xed, 0x71, 0xcd, 0x6b, 0x69, 0xf4, 0xe1, 0xd2, 0x3d, 0xf2,
1805 0x6e, 0xa9, 0xf8, 0xb3, 0x82, 0x1f, 0x84, 0xc7, 0xdb, 0xa6, 0x21, 0xf8,
1806 0xec, 0x7d, 0xb4, 0xf5, 0x93, 0x49, 0x59, 0x53, 0x6c, 0xc1, 0xfb, 0x2c,
1807 0xef, 0xa6, 0x5f, 0x9c, 0xcc, 0xb8, 0xdd, 0xbf, 0x4c, 0x2a, 0xcc, 0x4b,
1808 0x97, 0xe3, 0x97, 0x99, 0x37, 0xd5, 0x8f, 0x35, 0x13, 0x67, 0xb2, 0x2b,
1809 0x69, 0x4f, 0x92, 0xff, 0xc7, 0x98, 0xff, 0x07, 0x3b, 0x8f, 0x60, 0x25,
1810 0xca, 0x0f, 0xad, 0x42, 0xd9, 0x1e, 0xe2, 0x67, 0x88, 0xf9, 0x3f, 0xaf,
1811 0x67, 0xec, 0x91, 0xf7, 0x0d, 0xca, 0xed, 0xed, 0xab, 0x44, 0x2f, 0x82,
1812 0x27, 0x7f, 0x57, 0x8e, 0xb2, 0x55, 0xc0, 0x21, 0xa9, 0x67, 0xb0, 0xde,
1813 0x4a, 0x54, 0xee, 0xa9, 0x89, 0x2c, 0x46, 0xcd, 0xf9, 0xdb, 0xd4, 0x95,
1814 0xb8, 0xfe, 0xd0, 0x3f, 0x73, 0x0e, 0xa4, 0x6c, 0x35, 0x9e, 0xa0, 0xdd,
1815 0x16, 0x92, 0x13, 0xb6, 0x24, 0x7f, 0x6d, 0xcf, 0xa4, 0x2f, 0x7e, 0xf6,
1816 0x15, 0x60, 0x5d, 0xd6, 0x60, 0xbc, 0x2b, 0x46, 0x7c, 0xe8, 0x29, 0xbb,
1817 0x3c, 0xea, 0xc6, 0x9a, 0x6c, 0x03, 0x16, 0x0f, 0xd8, 0xf6, 0xb9, 0xb9,
1818 0x31, 0xf8, 0xa2, 0x3e, 0x62, 0x98, 0x0f, 0x8f, 0x26, 0x4b, 0xf8, 0x2d,
1819 0xc7, 0x4f, 0x42, 0xe3, 0xb3, 0x55, 0x63, 0xc3, 0x0c, 0x97, 0xd1, 0x9e,
1820 0x55, 0x24, 0xee, 0xfb, 0xf0, 0x08, 0xe3, 0xf3, 0xd2, 0x64, 0x00, 0xf1,
1821 0xac, 0x6d, 0xbf, 0xd9, 0xec, 0xc7, 0xc3, 0xac, 0xdf, 0x9a, 0xec, 0x41,
1822 0x37, 0xed, 0x22, 0x7e, 0xc8, 0xd0, 0x35, 0xc6, 0xfb, 0x75, 0x59, 0x2f,
1823 0x63, 0x58, 0x25, 0x6e, 0x63, 0x2c, 0x7a, 0x54, 0xce, 0xca, 0xd0, 0x07,
1824 0xdf, 0x31, 0xad, 0x1b, 0x5c, 0x30, 0xd0, 0x99, 0xf5, 0x63, 0x79, 0x32,
1825 0x78, 0x41, 0xde, 0xcd, 0xfb, 0xcc, 0xac, 0xc3, 0xc6, 0x6c, 0x00, 0xb7,
1826 0x27, 0x8f, 0x3e, 0x3a, 0x13, 0xd6, 0x7f, 0x9e, 0x81, 0x06, 0x7c, 0x3d,
1827 0x5b, 0xcd, 0xf6, 0x83, 0x1b, 0xde, 0x50, 0xaa, 0xf1, 0x8d, 0x43, 0x26,
1828 0xdb, 0x57, 0xb1, 0x8c, 0xed, 0x2c, 0x49, 0x5e, 0x8f, 0x47, 0x0e, 0x35,
1829 0xe3, 0xc1, 0x6c, 0x13, 0x16, 0x31, 0x3e, 0x75, 0x30, 0x37, 0xc4, 0xbd,
1830 0xc0, 0xed, 0x03, 0xa2, 0x7b, 0x28, 0x6f, 0x36, 0x8f, 0x33, 0x5f, 0x36,
1831 0x41, 0x43, 0x74, 0xf6, 0x92, 0x77, 0xd2, 0x56, 0x6f, 0xdf, 0xdf, 0x84,
1832 0xa5, 0x03, 0x2a, 0x6a, 0xc2, 0x85, 0x88, 0xb7, 0x29, 0x68, 0x19, 0x90,
1833 0x38, 0x2b, 0xdc, 0xc6, 0x64, 0x5c, 0x0d, 0xb1, 0x0f, 0x93, 0x71, 0x35,
1834 0x77, 0xbf, 0x3b, 0x25, 0x6b, 0x0b, 0x6f, 0x93, 0x2f, 0x85, 0xd1, 0xe2,
1835 0xc4, 0x68, 0x59, 0x13, 0xb7, 0xe0, 0x66, 0xec, 0x0e, 0xd3, 0xc6, 0x17,
1836 0x34, 0x4a, 0xac, 0xd6, 0x9d, 0xbd, 0xa9, 0xb1, 0x7e, 0xa3, 0xe3, 0x82,
1837 0x42, 0xfb, 0xda, 0x2f, 0x31, 0xd1, 0x8f, 0x8d, 0xc9, 0x28, 0xde, 0xe9,
1838 0x63, 0xbc, 0xb9, 0x31, 0xb6, 0xb4, 0x04, 0x86, 0xf9, 0x08, 0x42, 0xd6,
1839 0x49, 0xc6, 0xf6, 0xf3, 0xe9, 0x4a, 0x2c, 0xde, 0x23, 0x65, 0x1a, 0xf1,
1840 0xee, 0xb0, 0xec, 0x4d, 0x6e, 0xc2, 0x53, 0x7d, 0x2e, 0x0c, 0x99, 0x35,
1841 0x3d, 0x2a, 0xe3, 0xe7, 0xfc, 0xc6, 0xa0, 0xf6, 0x23, 0x72, 0xd5, 0x0b,
1842 0x4d, 0x8c, 0xca, 0xd7, 0x34, 0xa3, 0x85, 0x72, 0xb5, 0x18, 0xe2, 0x93,
1843 0x16, 0x1e, 0x6c, 0xde, 0x84, 0x93, 0x7d, 0x86, 0xf5, 0xb4, 0xac, 0x03,
1844 0x34, 0xf2, 0xf9, 0x74, 0x37, 0x36, 0x1b, 0xc2, 0x69, 0x75, 0xfa, 0x16,
1845 0x59, 0xa7, 0xd1, 0x8c, 0x77, 0x68, 0xaf, 0x3d, 0xe9, 0x05, 0x8c, 0xfd,
1846 0x12, 0xf3, 0xbd, 0x56, 0x80, 0xf5, 0xca, 0xbf, 0xa2, 0xe0, 0xf4, 0x01,
1847 0xe1, 0x58, 0x0b, 0x70, 0xff, 0x80, 0xec, 0x0b, 0xa8, 0x98, 0x7f, 0x68,
1848 0x35, 0xce, 0xed, 0xce, 0x71, 0xae, 0x37, 0xc3, 0xd6, 0xd7, 0xc9, 0xb9,
1849 0xda, 0x4b, 0xc9, 0xb9, 0xc8, 0xe5, 0xea, 0x36, 0x2a, 0x6e, 0x84, 0xb2,
1850 0x11, 0xf2, 0x0a, 0xe1, 0x17, 0x01, 0x3c, 0x93, 0x69, 0xc6, 0x6d, 0xc9,
1851 0x6a, 0x8c, 0x90, 0x6f, 0xa5, 0x89, 0x17, 0xe9, 0x0c, 0xe3, 0xca, 0x70,
1852 0x15, 0x3f, 0x3a, 0x3f, 0xb3, 0xf8, 0x31, 0x9c, 0x7b, 0x6b, 0x68, 0xcb,
1853 0xb1, 0x36, 0xc5, 0xd9, 0xdb, 0x18, 0xca, 0x48, 0xac, 0x56, 0x98, 0xb7,
1854 0xde, 0xa5, 0x49, 0x6e, 0x2a, 0xe7, 0x0e, 0x7e, 0xde, 0xa7, 0xe3, 0x5b,
1855 0x8d, 0x3b, 0x95, 0x58, 0xa5, 0xf3, 0x5e, 0x92, 0x55, 0x4c, 0xd9, 0x6e,
1856 0x9b, 0x2b, 0x6b, 0x94, 0x62, 0x97, 0x6c, 0x83, 0x39, 0xfa, 0xc3, 0x66,
1857 0x05, 0xf4, 0x0a, 0x5d, 0xce, 0x50, 0xd2, 0xdf, 0xfd, 0x78, 0x35, 0x11,
1858 0x47, 0x26, 0x51, 0xdf, 0xb3, 0x51, 0x71, 0xc9, 0xd9, 0xf3, 0xba, 0xb8,
1859 0x22, 0x3e, 0x16, 0x87, 0x27, 0xe9, 0xb5, 0xca, 0x59, 0xff, 0x9d, 0xb9,
1860 0x1d, 0x8c, 0x07, 0xf5, 0x9c, 0x62, 0xd5, 0x39, 0x7f, 0x9e, 0x46, 0x07,
1861 0xd6, 0x25, 0x0c, 0xc6, 0xc0, 0xd5, 0x76, 0x37, 0xe7, 0xe1, 0x58, 0xa2,
1862 0x03, 0xf7, 0x27, 0xea, 0xc7, 0x9f, 0xa4, 0x6d, 0xe1, 0xee, 0x0e, 0xb4,
1863 0xf0, 0xd9, 0x50, 0xaa, 0xe6, 0x42, 0x37, 0x75, 0x3d, 0x31, 0xad, 0xce,
1864 0x59, 0x97, 0x77, 0x1b, 0x3a, 0xcb, 0xeb, 0xc4, 0xb3, 0xfa, 0xd8, 0x80,
1865 0xfa, 0xef, 0x15, 0x4c, 0x97, 0x5c, 0x32, 0x82, 0xe3, 0x09, 0x1f, 0xbe,
1866 0x9e, 0xb4, 0xe8, 0x03, 0xc0, 0xfa, 0x6c, 0x33, 0xf3, 0x88, 0xa7, 0xec,
1867 0x0a, 0x87, 0xeb, 0xba, 0x69, 0x83, 0x0b, 0x70, 0x82, 0xb1, 0xb7, 0x66,
1868 0x9e, 0xa1, 0x2d, 0x52, 0xe4, 0x7d, 0xeb, 0x5f, 0xdb, 0xee, 0x68, 0x09,
1869 0x36, 0x0c, 0x85, 0x22, 0x2b, 0x19, 0x67, 0x9f, 0x6a, 0x36, 0xc6, 0x6d,
1870 0xc6, 0xc0, 0x19, 0xd1, 0x04, 0xe7, 0x3a, 0x24, 0xff, 0xaf, 0x03, 0x7f,
1871 0x41, 0x3b, 0xff, 0x24, 0x21, 0x7e, 0x62, 0x10, 0x37, 0xfd, 0xf8, 0x06,
1872 0xed, 0xfc, 0x7c, 0xa2, 0x0e, 0x59, 0xfa, 0x65, 0x07, 0xfd, 0xe3, 0xdd,
1873 0x44, 0x30, 0x7e, 0x93, 0xca, 0x7c, 0x8f, 0xfe, 0xf1, 0x51, 0x22, 0x42,
1874 0xdf, 0xf9, 0x2a, 0x3f, 0x0d, 0xf4, 0x87, 0x3a, 0xd6, 0xd1, 0xe9, 0x07,
1875 0x7e, 0x9c, 0x65, 0xf9, 0x03, 0xa9, 0x9a, 0xd6, 0x15, 0x4a, 0x8d, 0x59,
1876 0xa3, 0x54, 0x30, 0x9f, 0xd5, 0x68, 0xff, 0xb7, 0xe0, 0x43, 0x59, 0x4f,
1877 0x4e, 0x12, 0x8b, 0x92, 0xe8, 0x2f, 0x22, 0x97, 0x5b, 0xe9, 0x9c, 0xe5,
1878 0xaf, 0x3f, 0xf1, 0xa9, 0x12, 0x1c, 0x3f, 0xe3, 0x0a, 0x76, 0xcc, 0x20,
1879 0x8f, 0xfe, 0x0b, 0xfa, 0xc1, 0x37, 0x59, 0xf6, 0x93, 0xbe, 0x62, 0x7c,
1880 0x63, 0x88, 0x31, 0x37, 0x55, 0x80, 0x82, 0x3d, 0x5e, 0x3c, 0x78, 0x48,
1881 0xc7, 0x3e, 0x27, 0x57, 0x17, 0x9d, 0x52, 0x77, 0xc4, 0x88, 0x73, 0x73,
1882 0x81, 0x19, 0x07, 0x56, 0xe3, 0xd4, 0x6e, 0x9d, 0x71, 0x2f, 0x67, 0x27,
1883 0xcf, 0x86, 0x1d, 0x6e, 0x1e, 0x17, 0x6e, 0x5e, 0xc0, 0x71, 0x6d, 0x4d,
1884 0x85, 0xda, 0xb7, 0x51, 0x17, 0xb7, 0x67, 0xc5, 0xfe, 0x22, 0x78, 0x8e,
1885 0x63, 0xeb, 0xa7, 0xad, 0x1c, 0x48, 0x54, 0x33, 0x47, 0xf7, 0xc1, 0xa2,
1886 0xad, 0x58, 0xf2, 0x0e, 0x13, 0x6d, 0xc5, 0xa2, 0xad, 0x58, 0xb4, 0x15,
1887 0x8b, 0xb6, 0x62, 0x65, 0x16, 0xe0, 0x99, 0x3e, 0x03, 0x23, 0xec, 0x73,
1888 0xe7, 0x30, 0x39, 0xbc, 0xf3, 0x3e, 0x50, 0x9d, 0xe4, 0x29, 0xca, 0xc4,
1889 0xdd, 0xb7, 0x60, 0xa8, 0xef, 0x56, 0x7e, 0x14, 0xb4, 0xd2, 0x66, 0x7a,
1890 0xd2, 0x62, 0x83, 0x22, 0x93, 0x17, 0xc3, 0x99, 0x9b, 0x2b, 0x51, 0x2c,
1891 0xf1, 0x5d, 0xc1, 0x0e, 0xe7, 0x7e, 0xde, 0xd6, 0xe4, 0x9e, 0x85, 0x9a,
1892 0x79, 0x9b, 0xf0, 0x48, 0x9f, 0x8a, 0xdb, 0xc2, 0xf2, 0x7f, 0x08, 0x9a,
1893 0x99, 0x0f, 0xc8, 0xfe, 0x7c, 0x82, 0xfe, 0x99, 0xb3, 0x15, 0x19, 0x53,
1894 0xa6, 0x7f, 0x13, 0x4e, 0xf4, 0x1b, 0x8c, 0x59, 0x26, 0x32, 0xe9, 0x04,
1895 0x7d, 0x42, 0xfc, 0xdc, 0xc0, 0x33, 0x6c, 0x6b, 0xf6, 0x80, 0x0b, 0x95,
1896 0x8d, 0x6e, 0x94, 0xd0, 0xdf, 0x6f, 0x4b, 0xd7, 0x04, 0xbe, 0xa5, 0x24,
1897 0x9c, 0xf5, 0xd7, 0x5d, 0x29, 0x8c, 0xcf, 0x34, 0x2a, 0xb1, 0x6f, 0xb0,
1898 0x11, 0x8f, 0xed, 0x76, 0xd1, 0x46, 0xed, 0x05, 0xe5, 0x4d, 0x46, 0xc7,
1899 0x02, 0x97, 0xe0, 0x45, 0x23, 0xbe, 0xc1, 0x1c, 0x60, 0x7d, 0x7f, 0xd0,
1900 0x7c, 0x05, 0x41, 0xf3, 0x24, 0x16, 0xe0, 0x59, 0x93, 0xb8, 0x39, 0xaf,
1901 0x11, 0x1b, 0xf7, 0x1b, 0xb4, 0x29, 0x37, 0xf3, 0x63, 0xf9, 0xbf, 0x37,
1902 0xba, 0xb3, 0xc6, 0xf3, 0x32, 0xe4, 0x9c, 0x43, 0xb3, 0xfc, 0x4f, 0x06,
1903 0xa5, 0x87, 0xf8, 0x34, 0xa3, 0xd7, 0xe0, 0xb8, 0x5f, 0xb0, 0x4b, 0x0d,
1904 0xf9, 0x7f, 0x1c, 0xc4, 0x11, 0x8e, 0xfb, 0xc2, 0xcd, 0x6f, 0xdb, 0x95,
1905 0x86, 0xc4, 0x50, 0xe2, 0x49, 0x5a, 0xfa, 0x8f, 0xed, 0x08, 0x10, 0x3b,
1906 0x3a, 0xfa, 0x8d, 0x78, 0x29, 0x63, 0xd8, 0x46, 0x07, 0x63, 0x04, 0x5f,
1907 0x8c, 0xb6, 0x6f, 0x21, 0xa4, 0xad, 0x20, 0xee, 0x9c, 0xe6, 0x58, 0x7a,
1908 0x52, 0x82, 0x51, 0x3a, 0x8a, 0x7a, 0x63, 0xb8, 0x81, 0x39, 0x63, 0x41,
1909 0x6f, 0x0b, 0x6a, 0x99, 0x3f, 0xba, 0x7b, 0x5b, 0x61, 0x30, 0x97, 0x9c,
1910 0xd9, 0xbb, 0x1c, 0x0b, 0xc6, 0xf2, 0x1c, 0x5a, 0xc7, 0x11, 0x67, 0xdd,
1911 0xea, 0x29, 0x78, 0xee, 0xd3, 0x69, 0x53, 0x72, 0xe6, 0xc5, 0x6b, 0x55,
1912 0x12, 0x37, 0xcf, 0x50, 0xd7, 0xed, 0x03, 0xab, 0xed, 0x81, 0x94, 0xf0,
1913 0xa6, 0x2e, 0x78, 0x9a, 0x24, 0xf7, 0xd1, 0x31, 0x46, 0x8e, 0x3c, 0xcc,
1914 0x1c, 0xec, 0x8d, 0xfd, 0xab, 0x71, 0xff, 0x9e, 0xcb, 0x39, 0x9b, 0xd9,
1915 0x64, 0xfd, 0x7b, 0xda, 0xc5, 0x86, 0x12, 0xda, 0x85, 0x97, 0x76, 0xb1,
1916 0x2b, 0x15, 0x32, 0x0f, 0xd3, 0x2e, 0x6a, 0x89, 0x21, 0x1d, 0xbd, 0x92,
1917 0xef, 0x38, 0xef, 0xed, 0x55, 0x78, 0x10, 0xc0, 0x9b, 0xb4, 0x8f, 0x8d,
1918 0xbd, 0x76, 0x97, 0x9b, 0xb1, 0xa7, 0xa7, 0xb9, 0x1a, 0xaf, 0x65, 0x6e,
1919 0xc5, 0xa3, 0xfd, 0xd5, 0x78, 0x85, 0xb6, 0xf3, 0x76, 0x02, 0xf3, 0x2b,
1920 0xa0, 0xce, 0xac, 0x60, 0xac, 0xbe, 0x4d, 0x09, 0xb5, 0x2e, 0x42, 0xfd,
1921 0xf8, 0xcb, 0x4a, 0xb0, 0x93, 0x9c, 0xe5, 0xc4, 0x05, 0x62, 0xff, 0xeb,
1922 0x19, 0x39, 0x77, 0xe7, 0xc3, 0x38, 0xed, 0x6a, 0x9c, 0xf5, 0xbe, 0xd1,
1923 0x5f, 0xc7, 0x79, 0xf3, 0xa0, 0xd0, 0xf0, 0xe3, 0x14, 0xb1, 0xb4, 0x63,
1924 0x37, 0xc6, 0x03, 0x86, 0x71, 0xa2, 0x55, 0xa9, 0xc2, 0x9b, 0xc3, 0xb7,
1925 0x62, 0x63, 0x7f, 0x50, 0x8f, 0xd1, 0x37, 0x5f, 0xe3, 0xb3, 0xf5, 0xbb,
1926 0x67, 0xe1, 0x38, 0x6d, 0x6f, 0x9c, 0xb6, 0xb7, 0xb6, 0x5f, 0xc5, 0x8b,
1927 0xc3, 0xb7, 0xb0, 0x5f, 0x05, 0xb3, 0x6a, 0x15, 0x27, 0xff, 0xda, 0x91,
1928 0x72, 0xfe, 0x77, 0x81, 0xf3, 0x8e, 0xde, 0x9c, 0x51, 0x13, 0xb3, 0xf7,
1929 0xcb, 0xf8, 0xc8, 0xc3, 0x9c, 0xb5, 0xe9, 0x46, 0xdc, 0xbc, 0xa7, 0x12,
1930 0xe7, 0xf6, 0x1a, 0x56, 0xb9, 0xcb, 0x5e, 0x70, 0x2a, 0x1c, 0xe2, 0x3c,
1931 0x34, 0xa2, 0xe1, 0x50, 0x23, 0x42, 0x03, 0xb9, 0x18, 0xa1, 0x19, 0x0b,
1932 0xf0, 0x3d, 0xce, 0xfb, 0x5a, 0xe6, 0x80, 0x35, 0x43, 0x82, 0xbd, 0x36,
1933 0x73, 0xc5, 0x66, 0x4c, 0x8c, 0x8d, 0x73, 0x6c, 0x11, 0x9c, 0x25, 0xbf,
1934 0x7d, 0x9f, 0x31, 0xe3, 0x43, 0xe6, 0x80, 0x1f, 0x3a, 0x31, 0x43, 0xde,
1935 0xa5, 0xbd, 0x32, 0x6e, 0xec, 0xe2, 0x9c, 0x6e, 0xec, 0x37, 0xea, 0xfa,
1936 0xf8, 0x7b, 0xbd, 0x33, 0xc7, 0x31, 0xe2, 0xb9, 0x60, 0x85, 0xe0, 0x7f,
1937 0x0b, 0x73, 0xde, 0x56, 0x9c, 0xed, 0x0b, 0x99, 0x0b, 0x95, 0x56, 0xbc,
1938 0x47, 0x99, 0xfb, 0x28, 0x5f, 0x92, 0xbc, 0x6c, 0x66, 0xd2, 0x18, 0xff,
1939 0xd0, 0x25, 0x18, 0xd3, 0x8a, 0xf2, 0xec, 0xad, 0x38, 0xd5, 0xbf, 0x1c,
1940 0xa5, 0x43, 0xc2, 0x35, 0xa5, 0x4d, 0x37, 0xb6, 0xee, 0xbe, 0x13, 0xeb,
1941 0x0f, 0xe6, 0x72, 0xbe, 0xf5, 0x89, 0x4d, 0xcc, 0x75, 0x85, 0xbf, 0xd7,
1942 0xe1, 0x50, 0x2a, 0x26, 0x47, 0x42, 0x77, 0x30, 0x9f, 0x8b, 0xac, 0x20,
1943 0x7e, 0x2e, 0x0d, 0x13, 0x63, 0x2b, 0x82, 0x81, 0x97, 0x61, 0xe9, 0xbc,
1944 0x17, 0x58, 0x07, 0xd1, 0x89, 0x85, 0x65, 0x8c, 0x3b, 0xb7, 0xf5, 0xbb,
1945 0x29, 0xbb, 0x3c, 0xaf, 0xc3, 0x8f, 0x52, 0x56, 0x5c, 0x9e, 0x6f, 0x84,
1946 0xf8, 0x8a, 0xe8, 0xc9, 0x05, 0xb3, 0xa9, 0x26, 0xd6, 0x41, 0x8c, 0x2e,
1947 0x0d, 0x07, 0xcd, 0x6f, 0xa0, 0x99, 0x73, 0x2f, 0x32, 0x47, 0xb0, 0xfe,
1948 0x10, 0x9c, 0x7d, 0x7f, 0x79, 0x47, 0xe4, 0x3f, 0xf4, 0xed, 0x76, 0xec,
1949 0x69, 0x7d, 0xe3, 0x65, 0x1b, 0x3c, 0x90, 0xaa, 0xef, 0x74, 0xa1, 0xc6,
1950 0x2a, 0x87, 0x91, 0xee, 0x23, 0x2f, 0x8d, 0x23, 0xd8, 0x13, 0x87, 0xc4,
1951 0x8c, 0x7a, 0x4b, 0x43, 0x35, 0xdb, 0x8e, 0xe0, 0xad, 0x84, 0x4b, 0xb0,
1952 0x09, 0xf2, 0x4f, 0x8a, 0x22, 0xc4, 0xe1, 0x37, 0x12, 0xc5, 0xd0, 0x87,
1953 0x12, 0xce, 0xff, 0x11, 0xba, 0x39, 0x6b, 0x91, 0xaf, 0x2d, 0xc0, 0xab,
1954 0xfd, 0x3e, 0xcc, 0x27, 0x4f, 0xa9, 0x4b, 0x3e, 0x65, 0x97, 0x12, 0x87,
1955 0xeb, 0x87, 0x42, 0x9a, 0x47, 0xb1, 0xed, 0x03, 0x73, 0x7f, 0x6d, 0x4f,
1956 0x8b, 0x4a, 0x59, 0x23, 0xb2, 0x48, 0xfe, 0x9f, 0xd4, 0x3c, 0xa3, 0xf5,
1957 0x2c, 0x7c, 0xb8, 0x81, 0x58, 0x7a, 0xac, 0xb7, 0x12, 0x6f, 0xed, 0xee,
1958 0x91, 0x35, 0x4b, 0x18, 0xfc, 0xfd, 0x5a, 0x6f, 0x00, 0x3a, 0xb1, 0x4c,
1959 0xe7, 0x75, 0x03, 0x31, 0x5a, 0x27, 0x3e, 0xbf, 0xdd, 0x6b, 0x2f, 0xf0,
1960 0x35, 0x59, 0x6c, 0xbd, 0x0e, 0x0b, 0x88, 0xd1, 0x6f, 0xf4, 0x06, 0x4f,
1961 0x2c, 0x51, 0x15, 0x94, 0x34, 0x99, 0xec, 0xdb, 0x87, 0x17, 0x69, 0xdf,
1962 0x4f, 0xa4, 0x8e, 0x7e, 0x6d, 0x06, 0xac, 0xfa, 0x12, 0x04, 0x37, 0x78,
1963 0x14, 0x59, 0xe3, 0x90, 0xd8, 0x56, 0x8d, 0x1b, 0xc9, 0x4d, 0x74, 0xe2,
1964 0x77, 0x4d, 0x56, 0xe2, 0x1c, 0xb0, 0x66, 0x68, 0x35, 0x3e, 0x1c, 0x14,
1965 0x1f, 0xc5, 0x42, 0xb1, 0xff, 0x05, 0xe1, 0x90, 0x79, 0x86, 0xb8, 0x5c,
1966 0x3b, 0x96, 0x20, 0xfe, 0xca, 0xb9, 0x3c, 0x8c, 0xab, 0xc4, 0x81, 0xca,
1967 0x94, 0x60, 0x57, 0x00, 0x8d, 0xcc, 0xf7, 0xca, 0x53, 0xe2, 0x93, 0x96,
1968 0x9c, 0x1b, 0xc1, 0xcd, 0x63, 0x3e, 0xe8, 0x63, 0x1a, 0x3f, 0x7e, 0xe8,
1969 0x23, 0x55, 0xfc, 0x50, 0xd6, 0x91, 0x59, 0xfc, 0x50, 0x56, 0xc6, 0x31,
1970 0x73, 0x44, 0xc1, 0x4d, 0x8e, 0x6d, 0x89, 0x0f, 0x7a, 0xf1, 0xec, 0x28,
1971 0xb0, 0xa1, 0xdf, 0xc4, 0xe1, 0xfd, 0x39, 0x9c, 0xdb, 0xcc, 0x3e, 0x42,
1972 0x03, 0x61, 0xac, 0x4f, 0x8b, 0x7d, 0x36, 0xe2, 0xb7, 0x7b, 0x8d, 0xb6,
1973 0x35, 0x6a, 0x28, 0xb2, 0x9c, 0x18, 0xf6, 0xfe, 0x48, 0x23, 0x3e, 0x7c,
1974 0x62, 0x01, 0x8c, 0x70, 0x23, 0xce, 0x1c, 0xd8, 0x84, 0xf2, 0x27, 0x54,
1975 0xe2, 0x8f, 0x8a, 0xf1, 0xe9, 0x82, 0xed, 0x82, 0xa3, 0x5e, 0xab, 0x8c,
1976 0xb8, 0xb5, 0x8d, 0xb8, 0xf5, 0xb3, 0xb9, 0xe3, 0x98, 0x9f, 0x94, 0x73,
1977 0xad, 0xcc, 0xaf, 0xd4, 0x08, 0x9e, 0x24, 0x6e, 0xed, 0xea, 0x93, 0xf9,
1978 0xe2, 0xdc, 0x12, 0xb3, 0xb6, 0xa6, 0x73, 0x9c, 0xe8, 0x70, 0xbf, 0xa1,
1979 0xb9, 0x68, 0xcb, 0x43, 0x93, 0x78, 0xf5, 0x5b, 0xc6, 0xff, 0x47, 0xe6,
1980 0x45, 0x71, 0x36, 0x2d, 0x7e, 0x25, 0x71, 0x45, 0xc7, 0x87, 0xb4, 0xf1,
1981 0xa5, 0xd4, 0xf5, 0x19, 0xe6, 0x16, 0x2d, 0x8c, 0x73, 0x1f, 0xd3, 0x9e,
1982 0x97, 0x93, 0x3f, 0xbe, 0x97, 0x12, 0x1b, 0x59, 0x8e, 0x25, 0x59, 0xb1,
1983 0x05, 0x67, 0x9d, 0x95, 0xdf, 0x31, 0x9c, 0x4e, 0xfc, 0xb1, 0xb8, 0xb0,
1984 0x12, 0xaf, 0x0e, 0xca, 0x79, 0x17, 0x03, 0xde, 0xde, 0xa0, 0x56, 0xa2,
1985 0xc8, 0x9e, 0x6e, 0x9e, 0xfb, 0x4e, 0x38, 0x39, 0x76, 0x69, 0x34, 0xbf,
1986 0xbf, 0x98, 0xdf, 0x77, 0xb0, 0xf0, 0xfd, 0xb9, 0x01, 0xf2, 0x4f, 0x28,
1987 0x87, 0xe7, 0x16, 0xe0, 0xf6, 0x3d, 0x6d, 0x18, 0xd9, 0xfd, 0x31, 0x8a,
1988 0xfa, 0xd5, 0x7b, 0x7d, 0xa8, 0xa9, 0x7b, 0x48, 0xe9, 0xc2, 0xa2, 0xb0,
1989 0xbc, 0xe7, 0x23, 0x6b, 0xe6, 0x7d, 0xd8, 0x7c, 0x80, 0x79, 0xcc, 0xd8,
1990 0x75, 0x38, 0xaa, 0x31, 0x1e, 0x9a, 0x1f, 0xa3, 0xa0, 0xdf, 0xe3, 0x9c,
1991 0x05, 0x3c, 0x6a, 0x36, 0x61, 0xe5, 0xe4, 0x59, 0x40, 0x54, 0x5d, 0xbd,
1992 0x97, 0x00, 0x5f, 0xe9, 0xe4, 0xff, 0x1f, 0xc8, 0xbd, 0xdb, 0x63, 0xa0,
1993 0x77, 0xf4, 0x7f, 0x95, 0xe7, 0xce, 0x06, 0xfd, 0x6b, 0xca, 0x76, 0xa2,
1994 0x7d, 0xcf, 0xe3, 0x58, 0xb1, 0xe7, 0x3b, 0xb8, 0x73, 0xa0, 0xb6, 0x33,
1995 0xc2, 0x5c, 0xe7, 0x83, 0xf0, 0x38, 0x8e, 0x85, 0x8b, 0x60, 0xf9, 0xc9,
1996 0xb1, 0x6e, 0xfc, 0x8a, 0xbc, 0x4e, 0xca, 0xbf, 0xd3, 0xb6, 0x7e, 0xaf,
1997 0xb4, 0xf7, 0xf6, 0xa4, 0x7f, 0xfd, 0x7c, 0x9a, 0x9c, 0xa7, 0x79, 0x21,
1998 0xf5, 0x2b, 0x5b, 0x77, 0x9e, 0xe7, 0xef, 0xbf, 0x65, 0xc7, 0xfc, 0x72,
1999 0x7f, 0xd6, 0x64, 0xbd, 0xef, 0xe0, 0x01, 0xe6, 0xbf, 0xa7, 0x9b, 0xbe,
2000 0x83, 0x85, 0x43, 0x97, 0xea, 0xa0, 0x68, 0xf7, 0x3a, 0x07, 0xbb, 0xe9,
2001 0x61, 0xe4, 0x48, 0xb2, 0x57, 0x25, 0xfb, 0x27, 0x7f, 0x89, 0xcd, 0x7b,
2002 0x65, 0x6d, 0xd3, 0xb6, 0xd7, 0x1b, 0xb2, 0xc7, 0x97, 0x3f, 0x37, 0x27,
2003 0xed, 0x58, 0x8a, 0x95, 0x91, 0xba, 0x5b, 0x94, 0xbe, 0xcc, 0xd4, 0x31,
2004 0x4d, 0x93, 0xff, 0x97, 0xa7, 0x95, 0x44, 0xa7, 0x8e, 0xad, 0x47, 0xd9,
2005 0x9e, 0x39, 0xa2, 0xec, 0xca, 0x5c, 0xad, 0x8f, 0xe7, 0xec, 0x58, 0x9b,
2006 0xb4, 0x21, 0x32, 0xc1, 0x8f, 0x62, 0x91, 0x2b, 0xff, 0xec, 0x99, 0x49,
2007 0xb9, 0x0b, 0xa1, 0x57, 0xe6, 0xe4, 0xbe, 0x9f, 0x72, 0x9b, 0x4d, 0x31,
2008 0xa8, 0xf3, 0xa6, 0xca, 0x9e, 0x1f, 0xe7, 0x7f, 0xbb, 0xd4, 0x56, 0xae,
2009 0xdc, 0xcd, 0x7e, 0xb1, 0x21, 0x75, 0xde, 0xd4, 0x35, 0xfb, 0x02, 0xe2,
2010 0x47, 0x48, 0xdb, 0x8a, 0x5c, 0xbe, 0xb7, 0xe6, 0xca, 0x7c, 0x4f, 0xb0,
2011 0x0b, 0x23, 0x09, 0x0d, 0xef, 0x99, 0x92, 0xdf, 0xc9, 0xad, 0x28, 0xbe,
2012 0xc7, 0xfc, 0xf1, 0x99, 0x44, 0xb0, 0x75, 0x9d, 0x52, 0x1f, 0x9b, 0xc3,
2013 0x38, 0x87, 0x0a, 0x59, 0x4f, 0x8f, 0x38, 0xff, 0xaf, 0x2a, 0x13, 0x8a,
2014 0x20, 0x43, 0x7f, 0x78, 0x23, 0x11, 0xec, 0x38, 0xa3, 0xe4, 0xfe, 0x0f,
2015 0xd6, 0xeb, 0xce, 0xfb, 0x1c, 0x79, 0xbb, 0x13, 0xce, 0x39, 0x75, 0x3d,
2016 0x57, 0x6c, 0x30, 0xd8, 0x97, 0x46, 0xa5, 0xac, 0x9b, 0x58, 0x16, 0xf3,
2017 0xa1, 0xee, 0x94, 0x15, 0x50, 0xf1, 0x15, 0xc4, 0xfd, 0xb2, 0x47, 0x72,
2018 0xcb, 0xe4, 0xff, 0xa9, 0x11, 0x7e, 0xf4, 0x2f, 0xaf, 0x4f, 0xc9, 0xff,
2019 0x06, 0xca, 0xdb, 0x8b, 0x35, 0x76, 0x3d, 0xd2, 0x9a, 0xac, 0x7d, 0xc0,
2020 0x9a, 0x46, 0x5d, 0xfb, 0x8d, 0x4d, 0x1c, 0xb7, 0x07, 0xd3, 0x99, 0xdb,
2021 0x85, 0x6b, 0xeb, 0xdb, 0x1a, 0xd5, 0x6b, 0x10, 0xab, 0x08, 0x6a, 0x31,
2022 0x72, 0xcd, 0x1e, 0xe7, 0xff, 0xed, 0xc8, 0xb9, 0x14, 0xab, 0xd5, 0x4b,
2023 0x4c, 0x6f, 0x52, 0x14, 0x14, 0x84, 0xe0, 0x7e, 0x28, 0xe3, 0x86, 0x56,
2024 0xfb, 0x5b, 0xfb, 0x17, 0x7e, 0x03, 0xdb, 0xc6, 0x6e, 0xb9, 0xf4, 0xff,
2025 0x87, 0xfe, 0x63, 0xf6, 0xea, 0xec, 0x37, 0xdf, 0xe6, 0xc7, 0x76, 0x6c,
2026 0xba, 0xf4, 0x2d, 0xed, 0xfe, 0x31, 0x59, 0xf3, 0xef, 0x7a, 0xd4, 0xe8,
2027 0x2e, 0x94, 0x63, 0xab, 0xb9, 0xde, 0x2f, 0x67, 0xe5, 0xd6, 0x43, 0xf6,
2028 0xff, 0x65, 0x0e, 0xe4, 0x1d, 0xc3, 0x08, 0xf3, 0x6e, 0xd1, 0x4b, 0x14,
2029 0x0f, 0x66, 0xe4, 0x9d, 0xa0, 0x59, 0x90, 0xff, 0xfb, 0xf5, 0x60, 0x26,
2030 0xa7, 0xbf, 0x47, 0x33, 0x3e, 0xe6, 0x00, 0x3e, 0xda, 0x60, 0x07, 0xf9,
2031 0x0b, 0xf9, 0xd3, 0x25, 0x5d, 0xde, 0xeb, 0x97, 0x75, 0x85, 0xef, 0xd3,
2032 0xa7, 0xdd, 0xb5, 0x72, 0x6d, 0xc9, 0xb9, 0x51, 0x25, 0x77, 0x7d, 0xde,
2033 0x79, 0x37, 0x52, 0x8d, 0xae, 0xc3, 0xc2, 0xc4, 0x34, 0x39, 0x3f, 0x29,
2034 0x6b, 0x36, 0x96, 0x3f, 0x2a, 0xef, 0x61, 0xf8, 0x88, 0xb1, 0x5f, 0xf5,
2035 0x4f, 0xbe, 0x73, 0xd5, 0xba, 0x82, 0x38, 0x36, 0x27, 0x6c, 0xc4, 0x9a,
2036 0x94, 0xa0, 0xbe, 0x52, 0x69, 0x63, 0xbd, 0x3a, 0xf4, 0x64, 0xa5, 0x0d,
2037 0xc5, 0xf9, 0xdf, 0x92, 0x1e, 0xb6, 0x71, 0x30, 0x51, 0xaf, 0x7b, 0xd4,
2038 0x4f, 0x6d, 0xcb, 0x39, 0x03, 0x29, 0xfb, 0xf6, 0x71, 0xbc, 0x94, 0x98,
2039 0x4e, 0x94, 0xba, 0xba, 0xdd, 0x4b, 0xeb, 0xe7, 0x7f, 0xa3, 0x21, 0xc6,
2040 0xb6, 0x82, 0x9d, 0x61, 0x57, 0x70, 0xc3, 0x05, 0xe2, 0x4a, 0x36, 0x6c,
2041 0xc4, 0x7f, 0xc0, 0x3e, 0xfe, 0x56, 0xa9, 0x43, 0x62, 0x4a, 0xfb, 0xb9,
2042 0xb6, 0xea, 0xdb, 0x0b, 0xd4, 0xf3, 0xce, 0xbb, 0xf8, 0xd2, 0xbe, 0x16,
2043 0x5d, 0x0d, 0x2d, 0x69, 0xd9, 0x7e, 0xb6, 0x39, 0x33, 0x1a, 0xdc, 0x57,
2044 0x41, 0x30, 0xfa, 0xb6, 0xda, 0x85, 0x35, 0x72, 0x3c, 0x24, 0x1a, 0xd4,
2045 0x1f, 0xa0, 0x7d, 0x34, 0x3a, 0x6d, 0xc4, 0xea, 0x0a, 0x20, 0x9c, 0xf2,
2046 0x4b, 0xed, 0x84, 0x39, 0x81, 0x70, 0x31, 0x96, 0x73, 0xce, 0x03, 0xc8,
2047 0xb9, 0x49, 0xe6, 0x0d, 0x09, 0xf9, 0xbf, 0x7d, 0x4e, 0x37, 0x93, 0x7b,
2048 0x5a, 0xcc, 0xd7, 0x19, 0xaf, 0xd7, 0xcb, 0xff, 0x48, 0x2a, 0xf6, 0xe1,
2049 0xc1, 0x84, 0xac, 0x81, 0xfc, 0x1f, 0x05, 0x3f, 0x96, 0xb4, 0x1c, 0x54,
2050 0x00, 0x00, 0x00 };
2051
2052static const u32 bnx2_CP_b09FwData[(0x84/4) + 1] = {
2053 0x00000000, 0x0000001b, 0x0000000f, 0x0000000a, 0x00000008, 0x00000006,
2054 0x00000005, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000003,
2055 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000002,
2056 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
2057 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
2058 0x00000001, 0x00000001, 0x00000001, 0x00000000 };
2059static const u32 bnx2_CP_b09FwRodata[(0x16c/4) + 1] = {
2060 0x80080100, 0x80080080, 0x80080000, 0x08001800, 0x08001800, 0x08001838,
2061 0x08001838, 0x0800184c, 0x0800181c, 0x08001a74, 0x08001a40, 0x08001acc,
2062 0x08001acc, 0x08001b54, 0x08001a84, 0x80080240, 0x080021c4, 0x08002010,
2063 0x080021ec, 0x08002284, 0x080023d4, 0x08002420, 0x08002544, 0x0800244c,
2064 0x080024d0, 0x08002080, 0x080029f8, 0x0800299c, 0x0800202c, 0x0800202c,
2065 0x0800202c, 0x080025b8, 0x080025b8, 0x0800202c, 0x0800202c, 0x08002874,
2066 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x080028d4, 0x0800202c,
2067 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c,
2068 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c,
2069 0x0800202c, 0x08002440, 0x0800202c, 0x0800202c, 0x08002944, 0x0800202c,
2070 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c,
2071 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c,
2072 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x08002798, 0x0800202c,
2073 0x0800202c, 0x08002700, 0x0800265c, 0x080037c0, 0x08003794, 0x08003760,
2074 0x08003734, 0x08003714, 0x080036c8, 0x80080100, 0x80080080, 0x80080000,
2075 0x80080080, 0x00000000 };
2076
2077static struct fw_info bnx2_cp_fw_09 = {
2078 /* Firmware version: 4.6.15 */
2079 .ver_major = 0x4,
2080 .ver_minor = 0x6,
2081 .ver_fix = 0xf,
2082
2083 .start_addr = 0x08000080,
2084
2085 .text_addr = 0x08000000,
2086 .text_len = 0x5418,
2087 .text_index = 0x0,
2088 .gz_text = bnx2_CP_b09FwText,
2089 .gz_text_len = sizeof(bnx2_CP_b09FwText),
2090
2091 .data_addr = 0x080055a0,
2092 .data_len = 0x84,
2093 .data_index = 0x0,
2094 .data = bnx2_CP_b09FwData,
2095
2096 .sbss_addr = 0x08005624,
2097 .sbss_len = 0x91,
2098 .sbss_index = 0x0,
2099
2100 .bss_addr = 0x080056b8,
2101 .bss_len = 0x19c,
2102 .bss_index = 0x0,
2103
2104 .rodata_addr = 0x08005418,
2105 .rodata_len = 0x16c,
2106 .rodata_index = 0x0,
2107 .rodata = bnx2_CP_b09FwRodata,
2108};
2109
2110static u8 bnx2_RXP_b09FwText[] = {
2111 0xec, 0x5c, 0x7d, 0x70, 0x1c, 0xe5, 0x79, 0xff, 0xbd, 0x7b, 0x7b, 0xd2,
2112 0x4a, 0x3a, 0x9d, 0x56, 0xa7, 0x93, 0x7c, 0x22, 0x04, 0xef, 0xa2, 0x3d,
2113 0xf9, 0xb0, 0x0c, 0xec, 0x9d, 0x4f, 0xb6, 0xa0, 0xdb, 0xb2, 0x83, 0x0d,
2114 0x11, 0x21, 0x13, 0x84, 0x4d, 0x52, 0x33, 0x49, 0x27, 0x37, 0xc6, 0x18,
2115 0x81, 0x4d, 0x70, 0x0d, 0x6d, 0x55, 0x86, 0x19, 0x6f, 0x2c, 0x7f, 0x01,
2116 0x27, 0x9d, 0x62, 0x64, 0x63, 0xd2, 0x0e, 0x68, 0x6c, 0x59, 0x08, 0x7c,
2117 0xd2, 0x61, 0x20, 0xad, 0xe8, 0x84, 0xfa, 0x26, 0xd8, 0xe0, 0x94, 0xcf,
2118 0x21, 0x0c, 0xc3, 0x1f, 0xcd, 0xa0, 0x62, 0x3e, 0xcc, 0x94, 0xa1, 0x26,
2119 0x38, 0xa9, 0xdd, 0xb8, 0x7e, 0xfb, 0x3c, 0x7b, 0x3a, 0x9b, 0x90, 0x26,
2120 0x9d, 0xfc, 0xd1, 0xff, 0xf6, 0x99, 0xb9, 0xb9, 0xbd, 0x77, 0xdf, 0xf7,
2121 0xf9, 0xfe, 0x7c, 0x3d, 0xf2, 0x5f, 0x47, 0x50, 0x8f, 0x39, 0x68, 0xa4,
2122 0x4f, 0x76, 0xc3, 0xc0, 0xc6, 0xf4, 0x65, 0x4b, 0x2e, 0xa3, 0xc7, 0xee,
2123 0x50, 0x53, 0x8d, 0xca, 0xeb, 0x02, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01,
2124 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10,
2125 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00,
2126 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04,
2127 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40,
2128 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0xfc, 0x7f, 0x40, 0x08, 0xd0,
2129 0xf9, 0xbb, 0x71, 0xee, 0x03, 0x4d, 0x71, 0xdc, 0x7b, 0xaf, 0xb6, 0xa0,
2130 0x85, 0x9c, 0x99, 0x7b, 0x6f, 0xb1, 0x00, 0xb7, 0xd8, 0x65, 0x2c, 0xc3,
2131 0x7f, 0x4b, 0x2f, 0xae, 0x82, 0xd7, 0xbf, 0xea, 0x9c, 0x79, 0xec, 0xf9,
2132 0xa5, 0xe6, 0x89, 0xb1, 0x10, 0x34, 0xdd, 0x79, 0x27, 0xad, 0x77, 0x42,
2133 0xbb, 0x90, 0xce, 0xfc, 0xfd, 0x82, 0x95, 0x31, 0x44, 0xab, 0xb8, 0xe0,
2134 0x29, 0x8e, 0x94, 0xfb, 0x6d, 0x89, 0x17, 0x6d, 0x4f, 0x2c, 0xcb, 0xc2,
2135 0xd3, 0x9c, 0x19, 0x51, 0x37, 0x74, 0x56, 0x1a, 0xe1, 0x0a, 0xe5, 0x35,
2136 0x45, 0x05, 0xaa, 0xa5, 0xe1, 0xd6, 0xf1, 0x7a, 0xac, 0x1d, 0x6b, 0xc0,
2137 0x9a, 0xb1, 0x04, 0x6e, 0x2b, 0x42, 0x0f, 0x39, 0x1a, 0x66, 0x43, 0x33,
2138 0x22, 0x34, 0x85, 0x5c, 0xd8, 0x39, 0x75, 0xc3, 0xde, 0xfc, 0x59, 0xe9,
2139 0xfa, 0x7f, 0x63, 0x52, 0xbe, 0x61, 0xdc, 0x7f, 0x0f, 0x45, 0x75, 0x0e,
2140 0xd3, 0x33, 0xef, 0x3b, 0x75, 0xc3, 0xbe, 0xe2, 0x71, 0xf9, 0xfc, 0x82,
2141 0x38, 0x0e, 0x95, 0x74, 0x3c, 0x55, 0xda, 0x4f, 0x3c, 0x98, 0x9e, 0x07,
2142 0xcd, 0x53, 0x1d, 0x0f, 0x5b, 0xb3, 0x61, 0x4c, 0x8c, 0x9c, 0x95, 0x21,
2143 0xcb, 0x34, 0xa0, 0x58, 0xfa, 0x0b, 0xa0, 0x7d, 0x05, 0xda, 0x57, 0x08,
2144 0x63, 0xef, 0x58, 0x29, 0x86, 0xfa, 0x04, 0x9e, 0x5f, 0xc0, 0xe7, 0xf9,
2145 0x2c, 0xe3, 0x78, 0x3b, 0x5a, 0x3d, 0x5f, 0x43, 0xe7, 0x8f, 0x64, 0x81,
2146 0xf1, 0x91, 0x3e, 0x3a, 0x2a, 0x31, 0x68, 0xd7, 0x62, 0xb5, 0x0e, 0xaf,
2147 0xce, 0x61, 0x5c, 0x55, 0x3c, 0x9e, 0x30, 0xa6, 0x8e, 0x34, 0x55, 0xf0,
2148 0x40, 0x68, 0x16, 0xbc, 0xda, 0x2f, 0xbd, 0x3f, 0x5e, 0xac, 0xbe, 0xdf,
2149 0x41, 0x74, 0x34, 0xd2, 0xc3, 0x06, 0xfc, 0x73, 0xa9, 0x1f, 0xff, 0x50,
2150 0xca, 0xe1, 0xd9, 0x52, 0x1f, 0xd1, 0xbd, 0x87, 0xe8, 0xae, 0xc7, 0x3f,
2151 0x96, 0xd6, 0xe0, 0xc7, 0xa5, 0xef, 0xe2, 0x99, 0xd2, 0x2a, 0x3c, 0x5d,
2152 0xba, 0x09, 0x07, 0x4b, 0x1e, 0xc2, 0xdd, 0x8c, 0x2f, 0x25, 0x3e, 0xcb,
2153 0xd7, 0x11, 0x1f, 0x5b, 0x30, 0x5b, 0x64, 0x79, 0x24, 0x46, 0x6c, 0x73,
2154 0x0c, 0x58, 0x90, 0xa8, 0x81, 0xc0, 0x6a, 0xdb, 0x7c, 0x0a, 0xb8, 0x0d,
2155 0x6e, 0xdc, 0x3c, 0xc1, 0x5a, 0x7a, 0x62, 0xc4, 0x40, 0x98, 0xf8, 0xb5,
2156 0xd2, 0x6d, 0xd8, 0xaa, 0xf7, 0xa1, 0xde, 0x1a, 0xc2, 0x03, 0xbe, 0x8d,
2157 0xa1, 0x45, 0x9c, 0x7f, 0x45, 0x7e, 0x48, 0xe0, 0xc1, 0x24, 0x34, 0x41,
2158 0xcf, 0x5d, 0xc5, 0xbf, 0x6b, 0xa9, 0xd8, 0x8c, 0x78, 0x28, 0x10, 0x5f,
2159 0x05, 0xe2, 0xa3, 0x40, 0xbc, 0x15, 0x88, 0x97, 0x02, 0xf1, 0x57, 0x20,
2160 0x7e, 0x0a, 0xc4, 0x4f, 0x81, 0xf8, 0x29, 0x10, 0xaf, 0x05, 0xd6, 0xf9,
2161 0x00, 0xc9, 0x52, 0xb1, 0x71, 0xab, 0x63, 0x63, 0xac, 0xd4, 0x26, 0xf6,
2162 0xee, 0x56, 0xc5, 0x73, 0xc3, 0x06, 0xe6, 0x3b, 0x88, 0x3c, 0xbd, 0xc4,
2163 0x2a, 0x5f, 0x15, 0xea, 0x9a, 0x49, 0xc0, 0x4d, 0xcf, 0x83, 0x8d, 0x89,
2164 0x92, 0x2a, 0xa6, 0x87, 0xa5, 0x5c, 0x69, 0xbb, 0x68, 0x72, 0xcc, 0x9e,
2165 0x8d, 0x8a, 0xd5, 0xff, 0xba, 0x68, 0xc4, 0x2f, 0x47, 0x7a, 0x31, 0xd6,
2166 0xec, 0xe2, 0x70, 0xd6, 0xc0, 0xb2, 0x8c, 0x82, 0x5c, 0xdc, 0xc3, 0xb6,
2167 0xac, 0x69, 0x7b, 0x18, 0x45, 0x39, 0xce, 0xe7, 0x34, 0xd2, 0xb5, 0x87,
2168 0x64, 0xb7, 0x86, 0xc9, 0x11, 0x17, 0x35, 0xe9, 0x1a, 0x94, 0xfb, 0x58,
2169 0x7f, 0x2a, 0xc9, 0xb4, 0x0f, 0xf5, 0xb1, 0x18, 0x1a, 0xac, 0x4b, 0xd0,
2170 0x10, 0xe3, 0x35, 0x88, 0x56, 0xd2, 0xd5, 0x3c, 0xe7, 0x02, 0xf1, 0xf9,
2171 0xee, 0x28, 0x3e, 0x1d, 0xd5, 0x50, 0xda, 0xa9, 0xe2, 0x1b, 0x19, 0x29,
2172 0xff, 0x2a, 0xa3, 0xf6, 0x7f, 0x2a, 0x1c, 0x4c, 0x95, 0x54, 0x7c, 0x9e,
2173 0x4f, 0xc3, 0x6b, 0xd6, 0xf0, 0x9f, 0x79, 0x0f, 0x21, 0xc2, 0x3b, 0x40,
2174 0x78, 0x6b, 0x17, 0xa7, 0x30, 0x1b, 0x67, 0x71, 0xfa, 0xb0, 0x31, 0xdf,
2175 0xb1, 0x63, 0xa3, 0x52, 0x03, 0xa3, 0x06, 0x64, 0xff, 0x2c, 0x36, 0xe5,
2176 0x3b, 0x8e, 0x6e, 0x52, 0xb6, 0xe0, 0xe2, 0x5a, 0x0d, 0x9b, 0x87, 0x79,
2177 0x6d, 0x39, 0xca, 0x45, 0x41, 0xfe, 0xf0, 0xc7, 0xea, 0x6b, 0x26, 0x42,
2178 0x7e, 0x65, 0xfc, 0xf1, 0x7a, 0x4e, 0x34, 0xa2, 0xde, 0x34, 0xca, 0x58,
2179 0x1f, 0xe7, 0xf3, 0x39, 0xe5, 0x5d, 0xe9, 0xc6, 0x99, 0x0f, 0xcd, 0x0b,
2180 0x91, 0x6e, 0x6e, 0xc9, 0x66, 0xb1, 0x26, 0xdf, 0xa1, 0xaf, 0x51, 0x48,
2181 0xdb, 0x6a, 0xc5, 0xc6, 0x71, 0x07, 0xe9, 0xd1, 0x61, 0x81, 0x91, 0x4e,
2182 0xb6, 0x31, 0xd2, 0x76, 0xd1, 0x8f, 0x09, 0xc3, 0x50, 0x2a, 0x31, 0xf1,
2183 0x58, 0x36, 0x89, 0xb3, 0x0f, 0xf1, 0x6f, 0x15, 0x3f, 0x5b, 0x9a, 0xc4,
2184 0xc7, 0xfb, 0x4a, 0x73, 0x71, 0xfb, 0x68, 0xa4, 0xb2, 0xef, 0x1a, 0xa2,
2185 0xc9, 0x32, 0x32, 0xae, 0xc9, 0x7b, 0x47, 0x3b, 0x6b, 0xe9, 0x77, 0xc5,
2186 0xd6, 0xfd, 0xf9, 0x0e, 0xbb, 0x5f, 0xd1, 0x50, 0x4e, 0x44, 0x48, 0xf7,
2187 0xd0, 0xea, 0x08, 0xff, 0x25, 0x43, 0x67, 0xb0, 0x22, 0x63, 0x4e, 0xf2,
2188 0xdf, 0x80, 0x25, 0x93, 0x15, 0x9a, 0xc9, 0xa2, 0x8d, 0x03, 0x25, 0x1b,
2189 0x77, 0xe4, 0x3b, 0xdc, 0x95, 0x62, 0x16, 0x68, 0x5f, 0x98, 0x9b, 0x54,
2190 0x7e, 0x21, 0xbd, 0x56, 0xa6, 0xb3, 0x10, 0x93, 0xb1, 0x8e, 0x81, 0x49,
2191 0xc5, 0xdc, 0xd3, 0xaf, 0x48, 0xf9, 0xab, 0xb4, 0x82, 0xaf, 0x65, 0xb2,
2192 0x98, 0xd5, 0x75, 0xdc, 0x9c, 0xd1, 0xbc, 0x16, 0xe2, 0x71, 0xc3, 0x12,
2193 0x0d, 0x17, 0xed, 0x74, 0xf1, 0xf6, 0xe2, 0x9f, 0xa3, 0xbc, 0x82, 0x75,
2194 0xcf, 0x7c, 0xb1, 0x1c, 0x09, 0xc4, 0xac, 0x3a, 0xc4, 0xf6, 0x86, 0x31,
2195 0x6f, 0xe7, 0x59, 0x99, 0xb0, 0x78, 0xdd, 0x9a, 0x3c, 0xa5, 0xb0, 0x0c,
2196 0x61, 0xb4, 0xee, 0xbd, 0x82, 0x72, 0x8a, 0x99, 0x02, 0xbe, 0x16, 0xe7,
2197 0xbd, 0x35, 0x56, 0x55, 0x96, 0x08, 0x76, 0xef, 0xac, 0xc8, 0xff, 0x68,
2198 0xb6, 0x07, 0x2f, 0x15, 0xb0, 0xaf, 0x0d, 0x3f, 0xc0, 0xc8, 0x12, 0xce,
2199 0x4f, 0x8c, 0x63, 0x88, 0x64, 0xff, 0xc1, 0x89, 0x70, 0xa6, 0x6a, 0xe3,
2200 0xea, 0x39, 0x81, 0x6f, 0x5e, 0x29, 0xf0, 0x6a, 0x7a, 0x5a, 0x8e, 0xb5,
2201 0x32, 0xbf, 0x0f, 0x37, 0x56, 0xfe, 0x16, 0xae, 0xee, 0x94, 0x8b, 0x36,
2202 0xa2, 0x55, 0xdd, 0xc7, 0x38, 0x2e, 0x69, 0x25, 0xfd, 0xa5, 0x66, 0xf1,
2203 0x5f, 0x11, 0xd4, 0xb3, 0x9d, 0xef, 0x96, 0x46, 0x4b, 0x85, 0xe6, 0xfd,
2204 0x44, 0xb3, 0x63, 0x48, 0xc5, 0xe6, 0x7c, 0xc7, 0xa9, 0xf7, 0x94, 0xef,
2205 0xcb, 0xd9, 0xf9, 0x4c, 0xa7, 0xc3, 0x3e, 0xa6, 0x08, 0xfc, 0x54, 0x35,
2206 0x67, 0x72, 0x48, 0x60, 0xb2, 0x04, 0xaf, 0xdd, 0xd1, 0x29, 0xfe, 0xe3,
2207 0x94, 0x07, 0x0c, 0xd1, 0xf9, 0xb0, 0x8d, 0x85, 0x43, 0xdf, 0x85, 0xb5,
2208 0xcb, 0xc1, 0x4c, 0xc1, 0xc6, 0x54, 0x41, 0xca, 0xed, 0xb6, 0x94, 0xef,
2209 0xda, 0xe6, 0x86, 0xe3, 0x21, 0xb8, 0x97, 0x2f, 0xed, 0x4a, 0xd5, 0x86,
2210 0x54, 0xd6, 0x4d, 0xee, 0x75, 0x91, 0x5c, 0xb5, 0x5f, 0xf4, 0xe2, 0x89,
2211 0x92, 0x81, 0x62, 0x29, 0x85, 0x27, 0x4b, 0xac, 0x7f, 0x8b, 0xbe, 0x17,
2212 0x51, 0x7c, 0x66, 0x29, 0xb7, 0x30, 0xbf, 0x3a, 0xc6, 0x17, 0xd8, 0x98,
2213 0x2c, 0x28, 0x08, 0x91, 0xce, 0x73, 0x3a, 0xed, 0x2f, 0x9c, 0x25, 0xdb,
2214 0x69, 0xe8, 0xf8, 0xa1, 0x8b, 0xdb, 0xed, 0x16, 0x18, 0x37, 0x5a, 0x18,
2215 0x2f, 0x68, 0x94, 0xbb, 0x55, 0xf4, 0xe6, 0xc7, 0x31, 0xaf, 0x39, 0x4e,
2216 0xb1, 0x26, 0xb0, 0x2a, 0x13, 0x01, 0x56, 0xf2, 0xbb, 0x08, 0xda, 0xad,
2217 0x32, 0xda, 0x63, 0x8d, 0x98, 0xbf, 0xf0, 0x9f, 0x30, 0xdb, 0x12, 0x25,
2218 0x1d, 0xd7, 0x93, 0x1e, 0x04, 0x54, 0xb2, 0x53, 0x9b, 0x65, 0x11, 0x4e,
2219 0x01, 0x2b, 0x49, 0x7b, 0x29, 0x7e, 0x13, 0x24, 0x7b, 0x78, 0x69, 0x1c,
2220 0x8f, 0x13, 0xff, 0xa5, 0xbc, 0x94, 0x91, 0xac, 0xb9, 0x61, 0x3b, 0xe5,
2221 0x84, 0xe9, 0x62, 0x0f, 0x4a, 0xa5, 0x6f, 0x62, 0x6a, 0x84, 0xf8, 0xcc,
2222 0x3b, 0xc4, 0x93, 0xaa, 0x17, 0x85, 0xd9, 0xb7, 0x5a, 0x64, 0xf1, 0x24,
2223 0xf9, 0xce, 0x44, 0xc1, 0x34, 0x8e, 0x93, 0x9f, 0xbd, 0x60, 0x37, 0x10,
2224 0x9f, 0x2e, 0xe1, 0x32, 0xf0, 0x5c, 0xbe, 0x00, 0xab, 0x85, 0xed, 0x15,
2225 0xc1, 0xfd, 0x3b, 0xb3, 0x84, 0x13, 0x83, 0x75, 0xf0, 0xa0, 0x2e, 0xf1,
2226 0x4e, 0x6c, 0xb5, 0x87, 0x22, 0x55, 0x1f, 0xaf, 0x27, 0x9a, 0x7d, 0xdd,
2227 0x36, 0x42, 0xc3, 0x3d, 0x84, 0x97, 0xfc, 0x15, 0xb7, 0x92, 0xbf, 0x7a,
2228 0xb8, 0x9c, 0xe2, 0x21, 0xea, 0xec, 0x49, 0xbf, 0x36, 0xe4, 0xc9, 0x5a,
2229 0xcb, 0xea, 0xff, 0x48, 0x6c, 0xc2, 0x27, 0x69, 0xb6, 0x83, 0x4a, 0xf2,
2230 0xea, 0x78, 0x39, 0x3d, 0x82, 0x57, 0x8b, 0x7f, 0x82, 0x5c, 0xb3, 0x99,
2231 0xda, 0x2c, 0xd6, 0x61, 0x66, 0xe4, 0x0a, 0xe0, 0xcf, 0xd9, 0x7e, 0x02,
2232 0xf3, 0xad, 0x75, 0x38, 0x34, 0x76, 0x2f, 0x8e, 0x8c, 0xd6, 0xe3, 0x39,
2233 0x2b, 0x86, 0xf6, 0x89, 0x0a, 0x9d, 0x6b, 0xe6, 0x72, 0x93, 0x9e, 0xa6,
2234 0xe0, 0x6b, 0xe3, 0x98, 0x14, 0xb8, 0x3e, 0xb3, 0x0e, 0x39, 0xdf, 0xcf,
2235 0x3d, 0xac, 0xa1, 0xdc, 0x96, 0xcf, 0xbb, 0x14, 0xd7, 0x75, 0xd8, 0xd9,
2236 0x0c, 0x71, 0x0b, 0xd5, 0x93, 0x3b, 0x29, 0x5e, 0xef, 0x54, 0x62, 0x70,
2237 0x13, 0x2e, 0xd9, 0x55, 0xe0, 0x22, 0xcb, 0xc0, 0x9e, 0x22, 0x70, 0x77,
2238 0x51, 0xc5, 0xdf, 0x14, 0x2f, 0x45, 0xb9, 0x8d, 0xcf, 0x2e, 0x40, 0x79,
2239 0x1e, 0x7f, 0x87, 0x31, 0x16, 0x33, 0x13, 0x20, 0x9d, 0xed, 0x2f, 0xa8,
2240 0xf8, 0xb1, 0xbd, 0xeb, 0xec, 0xd8, 0x0a, 0x53, 0xcf, 0x51, 0xac, 0x85,
2241 0xac, 0xd3, 0xe4, 0x67, 0xfc, 0x0c, 0x7c, 0x3f, 0xff, 0x99, 0xfc, 0xb9,
2242 0x4f, 0x53, 0xc5, 0x6d, 0xf9, 0x8e, 0x81, 0x8f, 0x94, 0x8f, 0xe5, 0xbf,
2243 0x85, 0x19, 0xff, 0x77, 0xa2, 0x15, 0x7f, 0xdd, 0xc3, 0x79, 0xc4, 0xad,
2244 0xf8, 0xed, 0xbc, 0x2f, 0xf8, 0x6d, 0xc5, 0x3f, 0x47, 0xb2, 0xcc, 0x47,
2245 0x35, 0xc6, 0x62, 0xb8, 0x68, 0x22, 0x89, 0xba, 0x9d, 0xfc, 0x9b, 0xd7,
2246 0x05, 0x2e, 0xee, 0xe6, 0xf8, 0x4a, 0x42, 0xd9, 0x7b, 0x2d, 0xe1, 0x63,
2247 0xd9, 0xab, 0xb9, 0xe2, 0x7b, 0x73, 0xf8, 0xcf, 0xe7, 0x98, 0x76, 0xc2,
2248 0xb7, 0x74, 0x29, 0x3f, 0xf3, 0x99, 0x3a, 0xfc, 0x7a, 0xaf, 0x69, 0x97,
2249 0x95, 0xa5, 0x44, 0x93, 0x63, 0x92, 0x63, 0xf3, 0x2f, 0xe6, 0xce, 0x24,
2250 0xc8, 0xce, 0xd3, 0xb2, 0xbc, 0x8a, 0xf1, 0x55, 0xcf, 0x27, 0x11, 0x3a,
2251 0x47, 0x57, 0xc5, 0xea, 0xec, 0x97, 0xe9, 0xda, 0x94, 0xf7, 0x5b, 0xd1,
2252 0xb0, 0xd0, 0x22, 0x3b, 0xb5, 0xa1, 0x91, 0xe2, 0x3a, 0x62, 0xad, 0x92,
2253 0x91, 0x6f, 0xb3, 0x8f, 0x6a, 0x5e, 0xd8, 0xf9, 0x0a, 0x4a, 0x23, 0xcf,
2254 0x93, 0x7d, 0xa3, 0xec, 0x8b, 0x1b, 0x3e, 0x12, 0x5f, 0xc1, 0xf4, 0x98,
2255 0x88, 0xb2, 0xac, 0xab, 0x28, 0xb6, 0xe7, 0x53, 0x7d, 0xf8, 0xe0, 0xe1,
2256 0xbb, 0xe4, 0x58, 0x9f, 0x8e, 0x17, 0xb3, 0x49, 0x5a, 0x67, 0x5f, 0xb2,
2257 0xf1, 0x4c, 0x5e, 0xc3, 0xee, 0xe1, 0x84, 0xef, 0xc7, 0xf7, 0x74, 0xd6,
2258 0x9d, 0x2a, 0x2b, 0x36, 0x9e, 0x25, 0x3f, 0x3c, 0x58, 0x60, 0x1d, 0xab,
2259 0xb8, 0x38, 0xf3, 0x75, 0x59, 0xd3, 0xc6, 0xbe, 0x1d, 0xa1, 0x33, 0x3a,
2260 0xe1, 0x8e, 0x42, 0xb7, 0x96, 0xcb, 0x37, 0x56, 0xf0, 0x73, 0x03, 0xad,
2261 0xb5, 0xd1, 0xf7, 0x12, 0xd9, 0xf8, 0x3b, 0x7c, 0xe8, 0xff, 0x1b, 0x1f,
2262 0xf4, 0x1d, 0xa3, 0x75, 0x90, 0xbf, 0xcc, 0x88, 0xd5, 0x95, 0xfe, 0x46,
2263 0x53, 0xad, 0x19, 0xb1, 0xc6, 0xef, 0x69, 0xfc, 0x34, 0x4e, 0x38, 0x7a,
2264 0xb1, 0x77, 0x54, 0xca, 0x2d, 0x76, 0x3b, 0x5c, 0x3d, 0x86, 0x2d, 0x16,
2265 0xc5, 0xeb, 0x28, 0x9f, 0x91, 0x32, 0x95, 0x5e, 0xd8, 0xa3, 0x8a, 0x16,
2266 0xca, 0x99, 0x9e, 0x58, 0x9b, 0x35, 0xc4, 0x9d, 0xa3, 0x2a, 0xf2, 0x85,
2267 0x0b, 0x28, 0x27, 0x4b, 0xf9, 0x64, 0x1a, 0xee, 0x60, 0xba, 0x01, 0x2f,
2268 0x8f, 0xe9, 0x14, 0x3b, 0x67, 0xe5, 0xf2, 0x64, 0x2f, 0x4a, 0x84, 0xe7,
2269 0xd3, 0x74, 0x57, 0xea, 0xb0, 0x88, 0x60, 0x2c, 0x1e, 0xc1, 0x9e, 0x42,
2270 0x1c, 0x87, 0xc7, 0x23, 0xd8, 0x46, 0xfe, 0xf7, 0xd3, 0x2c, 0xd3, 0x8c,
2271 0x60, 0x73, 0x89, 0x7b, 0x8d, 0x10, 0xe9, 0xc0, 0x13, 0xef, 0xf9, 0x6b,
2272 0x0d, 0x58, 0x3e, 0xc6, 0x7b, 0xcf, 0xca, 0x76, 0xcb, 0xd2, 0xdb, 0x43,
2273 0xd5, 0x7d, 0xef, 0x50, 0x1f, 0x63, 0x50, 0xef, 0x72, 0x21, 0xe5, 0xaa,
2274 0x04, 0xf5, 0x2a, 0x71, 0xea, 0x55, 0xac, 0xb9, 0xfe, 0xcb, 0xa4, 0x48,
2275 0x93, 0xf2, 0x19, 0xca, 0x53, 0x6f, 0xd2, 0xe7, 0xa4, 0x4d, 0xe5, 0x96,
2276 0x64, 0xbc, 0x78, 0x98, 0x65, 0xf4, 0x84, 0xbd, 0x84, 0x3a, 0xce, 0x69,
2277 0xd3, 0x70, 0x95, 0x5f, 0x50, 0x9f, 0x65, 0xa0, 0x63, 0x9a, 0x79, 0x50,
2278 0xb1, 0xb5, 0x00, 0x0c, 0x16, 0xe0, 0x1d, 0xa6, 0xd8, 0x6e, 0x99, 0x88,
2279 0x22, 0x36, 0xa1, 0x23, 0x3c, 0x91, 0xa2, 0xbd, 0x1a, 0xe2, 0xf4, 0xdb,
2280 0xa3, 0xbe, 0xab, 0xc9, 0x69, 0x13, 0x8b, 0x76, 0x9f, 0x91, 0x0f, 0x52,
2281 0xac, 0xdd, 0x91, 0x34, 0x7b, 0x6f, 0x14, 0x70, 0x53, 0x43, 0x52, 0xd6,
2282 0xa6, 0x6b, 0xa9, 0x7e, 0xcb, 0x43, 0x71, 0x92, 0x3d, 0xea, 0xc8, 0x4d,
2283 0xaf, 0x76, 0x5b, 0xf6, 0xab, 0x20, 0xbc, 0x25, 0x3e, 0xc3, 0xeb, 0x9e,
2284 0xf8, 0xac, 0xdb, 0xda, 0xf3, 0x16, 0x3a, 0xb1, 0x78, 0x42, 0x15, 0xbf,
2285 0x1c, 0x5a, 0x84, 0xcc, 0x34, 0xf4, 0x1a, 0xe2, 0xeb, 0xc3, 0x29, 0xe2,
2286 0xbb, 0x40, 0xb2, 0x14, 0x48, 0x96, 0x02, 0xc9, 0x42, 0x7a, 0x39, 0xe8,
2287 0xf7, 0x6d, 0x2c, 0x6b, 0x8a, 0xea, 0xef, 0x3b, 0x7e, 0x6f, 0x79, 0xb0,
2288 0xc4, 0x72, 0x98, 0xae, 0x07, 0x96, 0x9b, 0xe5, 0x94, 0xf2, 0x2d, 0x9b,
2289 0xe5, 0x31, 0x0d, 0x4f, 0x21, 0x6b, 0x4d, 0x1b, 0x48, 0x4d, 0x57, 0xf5,
2290 0x21, 0xe5, 0xe7, 0x36, 0xeb, 0x83, 0x65, 0x94, 0xf2, 0x69, 0x92, 0x69,
2291 0x2b, 0xc9, 0x38, 0x58, 0x90, 0x87, 0x6a, 0x2c, 0xcb, 0x98, 0x20, 0xde,
2292 0x62, 0x24, 0x53, 0x7c, 0x42, 0x23, 0x59, 0x3b, 0xa1, 0x92, 0xac, 0xa1,
2293 0x09, 0xe8, 0x0a, 0xeb, 0x69, 0xfa, 0xff, 0xe2, 0x87, 0xfb, 0x6a, 0x4f,
2294 0x5c, 0x43, 0xfd, 0xb4, 0x4a, 0xfb, 0x07, 0xc9, 0x77, 0x72, 0x2a, 0x8c,
2295 0x5a, 0x4b, 0xa1, 0x3c, 0xac, 0xe1, 0xf1, 0xf1, 0x06, 0x4c, 0x90, 0xdd,
2296 0xc7, 0xc6, 0xa1, 0x87, 0xe9, 0xfd, 0xd6, 0x73, 0xfe, 0x04, 0xf2, 0xa7,
2297 0x0d, 0x18, 0xa7, 0xfc, 0xf3, 0x40, 0x3e, 0x26, 0x26, 0x46, 0x54, 0x6c,
2298 0x29, 0x9c, 0x20, 0xd9, 0x24, 0xe5, 0xd8, 0xcd, 0x09, 0xda, 0x22, 0x36,
2299 0xdb, 0x66, 0x0f, 0x70, 0x05, 0xf9, 0x5a, 0x08, 0x6b, 0x2d, 0xb8, 0xdb,
2300 0xed, 0x2b, 0x30, 0xdb, 0x07, 0x63, 0x87, 0xed, 0xe9, 0x35, 0x30, 0x8f,
2301 0x5e, 0x43, 0xa3, 0xc0, 0xe5, 0x24, 0xc7, 0x80, 0xe5, 0x6d, 0xa0, 0x84,
2302 0x44, 0xf9, 0xdb, 0xec, 0x3f, 0x42, 0x36, 0x28, 0x52, 0x5d, 0x2b, 0x52,
2303 0x0f, 0x78, 0x60, 0xf4, 0x8c, 0xbc, 0x3d, 0x6d, 0xba, 0x49, 0x5a, 0x0b,
2304 0x0f, 0x69, 0xd8, 0x5f, 0xd2, 0x28, 0x5e, 0x4c, 0x1b, 0xe0, 0x98, 0x87,
2305 0x56, 0x4b, 0x3d, 0xda, 0x47, 0xd6, 0xa3, 0xd4, 0x0b, 0x6b, 0xa0, 0x3e,
2306 0x19, 0x57, 0x8f, 0x08, 0xec, 0xa7, 0xf8, 0x9d, 0x5a, 0x64, 0x1e, 0x5d,
2307 0x0d, 0xaf, 0xdc, 0x0e, 0x73, 0xa0, 0x96, 0x18, 0xf9, 0x74, 0xa8, 0x86,
2308 0xfa, 0xc2, 0x4e, 0xfb, 0x35, 0x98, 0xfa, 0xfe, 0xd0, 0xaf, 0xe4, 0x64,
2309 0x1c, 0x17, 0x84, 0x71, 0x52, 0x1a, 0xdf, 0xe2, 0x33, 0x2c, 0xf7, 0x06,
2310 0x6c, 0xcf, 0x42, 0x0b, 0x3b, 0x6a, 0x7a, 0x7f, 0x1e, 0x38, 0x96, 0x37,
2311 0x30, 0xb9, 0xa8, 0x0e, 0x68, 0xee, 0xe8, 0xb9, 0x03, 0xde, 0xaa, 0xb0,
2312 0xdf, 0xe7, 0x6a, 0xe9, 0x3c, 0xf9, 0xc8, 0x7a, 0x21, 0xf0, 0x24, 0xd1,
2313 0x5a, 0x30, 0xc5, 0x7d, 0x89, 0x9a, 0x5e, 0x48, 0x79, 0x76, 0x5b, 0x49,
2314 0xa0, 0xd6, 0x32, 0xf5, 0x59, 0xb0, 0x6e, 0x74, 0xd2, 0xe9, 0x19, 0x89,
2315 0x66, 0x96, 0xdd, 0xcb, 0x91, 0x9c, 0xab, 0xb6, 0x12, 0xff, 0x6b, 0x48,
2316 0xa6, 0xdb, 0x2d, 0xaf, 0x87, 0xb0, 0x52, 0xed, 0x31, 0x13, 0x1f, 0x90,
2317 0xec, 0x6b, 0x29, 0x47, 0x8c, 0x95, 0x86, 0x9b, 0x38, 0x1f, 0x4c, 0x94,
2318 0x78, 0x4e, 0xea, 0xc1, 0xd5, 0xf9, 0x6a, 0x2c, 0xb0, 0xdd, 0xd9, 0xe6,
2319 0x17, 0xfa, 0xf5, 0xfb, 0xa0, 0xef, 0x23, 0xdc, 0x3f, 0xf5, 0x60, 0xb4,
2320 0x53, 0xa1, 0xde, 0x5c, 0xca, 0x15, 0x96, 0x39, 0xc2, 0xf9, 0x99, 0x7c,
2321 0xdd, 0xdd, 0x67, 0x37, 0x51, 0x6c, 0xc2, 0x7b, 0xc2, 0x36, 0x50, 0xe3,
2322 0xb0, 0x4f, 0x34, 0x90, 0x8f, 0x47, 0xb0, 0x9d, 0x7c, 0x44, 0xb3, 0xac,
2323 0x14, 0x35, 0x53, 0xfa, 0xb1, 0x2c, 0xed, 0x2d, 0xc1, 0x28, 0xd9, 0xf5,
2324 0x98, 0x6d, 0x55, 0xd1, 0xec, 0x1c, 0x92, 0x2d, 0xd6, 0x7f, 0x10, 0x7d,
2325 0x4b, 0xbf, 0x1b, 0xab, 0x61, 0xb4, 0x1a, 0x68, 0x70, 0xf8, 0xfd, 0x69,
2326 0x39, 0xdb, 0x1c, 0x21, 0xff, 0xe2, 0x3d, 0x96, 0x77, 0x10, 0xbf, 0x96,
2327 0x88, 0xf1, 0x5e, 0x97, 0xf2, 0x27, 0xc4, 0x0c, 0xd1, 0x42, 0x0b, 0xc7,
2328 0x2d, 0xf7, 0xe7, 0xd6, 0xd1, 0x43, 0x54, 0x53, 0x8c, 0x16, 0x50, 0x2e,
2329 0x55, 0x11, 0x72, 0x2c, 0x7d, 0x1f, 0x8e, 0x92, 0xcd, 0xd9, 0x45, 0x2e,
2330 0x12, 0xd7, 0xed, 0xba, 0x50, 0xf4, 0xee, 0x92, 0xb2, 0x33, 0x0d, 0x9a,
2331 0xc2, 0x92, 0xc6, 0x4b, 0xb4, 0xba, 0x85, 0x7c, 0xbf, 0xd1, 0x89, 0x88,
2332 0xe2, 0x2e, 0xe8, 0x07, 0x6c, 0x8d, 0xf2, 0xae, 0x94, 0xdb, 0xd2, 0x06,
2333 0xa6, 0x6d, 0xea, 0xc7, 0x5b, 0xc3, 0x68, 0xb6, 0xa0, 0xeb, 0x8e, 0x35,
2334 0xf0, 0x14, 0xee, 0x26, 0x3e, 0x11, 0x99, 0x4f, 0x35, 0x90, 0xd6, 0xc4,
2335 0x5e, 0xbb, 0x0e, 0xee, 0x4d, 0x02, 0x11, 0x27, 0x4e, 0xbc, 0xd5, 0x20,
2336 0xe7, 0x3f, 0xb3, 0x8c, 0x70, 0xdf, 0xb7, 0x7f, 0x44, 0xf2, 0x8a, 0xf9,
2337 0xf5, 0x0e, 0xaf, 0x59, 0x76, 0x11, 0xeb, 0xa9, 0xe7, 0xa7, 0x25, 0x7a,
2338 0xbf, 0x85, 0xde, 0x3f, 0x44, 0xb8, 0x73, 0x31, 0x7f, 0xd6, 0x6b, 0x6a,
2339 0x77, 0xac, 0xf2, 0x73, 0x78, 0x90, 0x64, 0xe0, 0xfc, 0xcd, 0x6b, 0xcc,
2340 0xf3, 0x22, 0xe6, 0x99, 0x6a, 0x37, 0xfb, 0x95, 0x8d, 0x8f, 0xf2, 0x77,
2341 0x73, 0x0f, 0xef, 0xee, 0xb0, 0x21, 0x26, 0xec, 0x3d, 0x28, 0xeb, 0x68,
2342 0x8a, 0x3a, 0x56, 0xff, 0x34, 0xa0, 0x44, 0x9c, 0x51, 0x14, 0x9b, 0x81,
2343 0x87, 0x0a, 0x96, 0xb7, 0x51, 0x31, 0x07, 0xe2, 0xd4, 0xf7, 0x9e, 0xfc,
2344 0xa1, 0x8a, 0x9d, 0x9d, 0x65, 0x33, 0x46, 0x46, 0x8f, 0x3a, 0x51, 0xf1,
2345 0xe2, 0x2e, 0x05, 0x0b, 0x96, 0xa8, 0x78, 0x8b, 0x72, 0xc8, 0x36, 0x9a,
2346 0x45, 0xc2, 0x96, 0xda, 0x54, 0xe9, 0x89, 0x7f, 0x5f, 0x3c, 0x9a, 0xa4,
2347 0xb1, 0x6a, 0x4c, 0x5a, 0x7d, 0x07, 0xf0, 0xa8, 0x74, 0x9b, 0xd9, 0x16,
2348 0x11, 0xca, 0xc3, 0xe7, 0xf2, 0x50, 0x6a, 0x8a, 0xf0, 0x0f, 0x76, 0xbf,
2349 0xeb, 0xfb, 0x0c, 0xd9, 0xd2, 0x7d, 0x23, 0x0f, 0xd1, 0x94, 0x71, 0x30,
2350 0xdb, 0xcc, 0x76, 0xe1, 0xf9, 0x99, 0x94, 0x37, 0x4c, 0xc3, 0x47, 0x8b,
2351 0x8a, 0xc5, 0x19, 0x34, 0x29, 0x8e, 0x75, 0x6a, 0x2f, 0xf1, 0xdc, 0xee,
2352 0x34, 0xe1, 0x74, 0x0b, 0xe7, 0xc4, 0xa8, 0xf8, 0xd9, 0xa8, 0xd9, 0x43,
2353 0x3d, 0xee, 0xaa, 0x8d, 0x30, 0xfb, 0xee, 0x11, 0xd4, 0x97, 0x11, 0xef,
2354 0x56, 0x92, 0xf8, 0xb4, 0x55, 0xc4, 0x93, 0x65, 0x33, 0x8e, 0x2a, 0xbf,
2355 0x67, 0x65, 0xcc, 0xb2, 0xbc, 0x98, 0xf2, 0x1b, 0x99, 0xce, 0xb0, 0x8f,
2356 0xdf, 0x85, 0xda, 0x98, 0x40, 0x4d, 0x66, 0xc4, 0xd7, 0x6d, 0x94, 0xec,
2357 0xdd, 0x94, 0x51, 0x89, 0xb6, 0x4a, 0x39, 0x9d, 0x68, 0x2f, 0x1e, 0xa0,
2358 0x9e, 0x85, 0x75, 0xfa, 0x92, 0xcc, 0x7d, 0x9b, 0xe5, 0xbc, 0x65, 0x4e,
2359 0x66, 0xd2, 0x6c, 0x3d, 0xff, 0x96, 0x0d, 0xac, 0xfb, 0x43, 0x94, 0xcf,
2360 0x17, 0x2f, 0xed, 0xda, 0x31, 0xa0, 0x3c, 0x20, 0x8d, 0x15, 0x6c, 0xdb,
2361 0x46, 0x7a, 0xef, 0xdb, 0x9d, 0xfa, 0xa9, 0x77, 0xf0, 0xda, 0x50, 0x54,
2362 0x34, 0xed, 0xf6, 0xfc, 0xda, 0xf9, 0x2a, 0xf1, 0xf5, 0x61, 0x9a, 0xf9,
2363 0xe1, 0x78, 0x7b, 0x07, 0x97, 0x16, 0xff, 0x94, 0xf6, 0x86, 0x88, 0x17,
2364 0x68, 0x31, 0x92, 0x75, 0x05, 0xcd, 0x25, 0x57, 0x67, 0x0e, 0x48, 0x57,
2365 0x67, 0xfc, 0xa4, 0xf7, 0x51, 0xd6, 0x3b, 0xcf, 0x45, 0x55, 0xdd, 0xf3,
2366 0x7e, 0x3e, 0x3f, 0x4c, 0x31, 0xc9, 0xb6, 0x44, 0x53, 0x83, 0xc3, 0xfa,
2367 0x85, 0xa8, 0x73, 0xba, 0x8c, 0x85, 0x62, 0x87, 0xf4, 0xe2, 0xd5, 0x7c,
2368 0x16, 0x15, 0x13, 0xfe, 0x79, 0xa6, 0xfd, 0xe5, 0xf3, 0x6d, 0xe2, 0xd8,
2369 0xc3, 0x54, 0x7c, 0xeb, 0x7d, 0x7f, 0xe9, 0x7d, 0x92, 0xe2, 0x49, 0x73,
2370 0x6e, 0x95, 0xa9, 0x56, 0xf6, 0x37, 0x28, 0x2f, 0xdb, 0xb7, 0xc8, 0x5c,
2371 0x2b, 0xfb, 0x1d, 0xbc, 0x38, 0xe1, 0xd9, 0xb9, 0xfb, 0x3c, 0x1f, 0xd7,
2372 0x74, 0x4a, 0x39, 0x61, 0x5f, 0x45, 0xba, 0x60, 0x3c, 0x55, 0x5d, 0xfc,
2373 0xe5, 0x9c, 0x6e, 0xa8, 0x89, 0xae, 0xaf, 0xd4, 0x2b, 0xce, 0x69, 0x35,
2374 0xce, 0x1b, 0x78, 0x31, 0xaf, 0xb4, 0x85, 0xd1, 0x84, 0x3e, 0x5b, 0xe0,
2375 0xdd, 0x1e, 0x81, 0xd3, 0x97, 0x47, 0x10, 0xba, 0xcc, 0x2a, 0x77, 0x84,
2376 0xfa, 0x25, 0xe6, 0x95, 0xc9, 0x51, 0xce, 0x48, 0xad, 0x53, 0x45, 0xed,
2377 0xa5, 0x5c, 0xa7, 0xd8, 0x0e, 0x0a, 0xfe, 0x85, 0xf6, 0x5d, 0x77, 0xa9,
2378 0x65, 0x74, 0x50, 0x4b, 0xe0, 0xf5, 0x5d, 0x9d, 0x09, 0x9f, 0xf3, 0x43,
2379 0xe6, 0xe1, 0x4a, 0x5f, 0x06, 0xf6, 0xc7, 0xc5, 0x64, 0xc7, 0xdc, 0x0a,
2380 0x05, 0xe9, 0x25, 0xf0, 0x22, 0xf4, 0x7e, 0xdb, 0x2e, 0xf6, 0x85, 0x47,
2381 0x74, 0x9e, 0x09, 0x81, 0xae, 0x84, 0x0e, 0x6b, 0xd5, 0x0b, 0x44, 0x9b,
2382 0xfa, 0x4d, 0xd2, 0x07, 0xd3, 0xaa, 0xe2, 0xa9, 0xe2, 0x88, 0x8a, 0xd3,
2383 0x0f, 0xf3, 0x19, 0x08, 0xd6, 0x51, 0x7a, 0x01, 0xc5, 0x76, 0x46, 0x9d,
2384 0x93, 0x6d, 0x40, 0xaf, 0xf4, 0x61, 0x51, 0x31, 0x35, 0xca, 0xf8, 0x7c,
2385 0x3f, 0x42, 0x91, 0x7d, 0x2b, 0xcd, 0x7b, 0x7e, 0x23, 0x17, 0x64, 0xfe,
2386 0x9d, 0xf6, 0x30, 0xde, 0xa8, 0x38, 0xe2, 0xd3, 0xae, 0xe8, 0x68, 0x8a,
2387 0x74, 0x3d, 0x91, 0xae, 0xe2, 0xd9, 0x48, 0x7b, 0xd8, 0xe7, 0x98, 0x87,
2388 0x5e, 0xf1, 0x78, 0x9e, 0xf2, 0x0a, 0xd5, 0xdc, 0x89, 0xac, 0x62, 0xd5,
2389 0x42, 0x62, 0xb3, 0xad, 0x63, 0x99, 0x5e, 0xa9, 0x57, 0xf7, 0xe7, 0xab,
2390 0xf7, 0x3f, 0xbd, 0xa2, 0x90, 0x57, 0xa8, 0x7f, 0x83, 0x5e, 0xef, 0x28,
2391 0xf7, 0x34, 0x51, 0x2c, 0xbd, 0x46, 0xb5, 0xeb, 0xd5, 0xb1, 0x5e, 0x91,
2392 0xcf, 0xeb, 0x78, 0x65, 0x7c, 0xb9, 0x78, 0x30, 0x6f, 0xe1, 0xe5, 0x62,
2393 0xe5, 0x2e, 0xe8, 0x81, 0xa2, 0x2b, 0xc6, 0xf3, 0xdc, 0xfb, 0x98, 0xa9,
2394 0x32, 0x66, 0xc4, 0x5a, 0xc2, 0x53, 0x56, 0x2f, 0xf4, 0xeb, 0xc8, 0x78,
2395 0xb1, 0x01, 0x93, 0x63, 0x95, 0x7a, 0x77, 0xeb, 0xb9, 0x7a, 0xf7, 0xc5,
2396 0x3b, 0x9d, 0x48, 0x4e, 0x77, 0xd0, 0xd7, 0x38, 0xbc, 0x49, 0x46, 0xad,
2397 0x10, 0xd5, 0x49, 0x2b, 0x37, 0x2d, 0x22, 0x3d, 0x3b, 0xba, 0x99, 0x5f,
2398 0xf4, 0x69, 0xd4, 0x63, 0x4c, 0x14, 0xd9, 0x5f, 0x0d, 0x18, 0xc5, 0x6f,
2399 0xb5, 0x56, 0xec, 0xdc, 0x96, 0xd3, 0x1c, 0xa0, 0x9e, 0xfa, 0x8b, 0x06,
2400 0x9a, 0x0d, 0xea, 0x9c, 0x1b, 0xbd, 0x8e, 0x6e, 0xe4, 0x54, 0xc7, 0xea,
2401 0xb9, 0x5e, 0xac, 0x5c, 0xa9, 0x38, 0xf7, 0xad, 0x0c, 0x4d, 0x1b, 0xc6,
2402 0x16, 0xbf, 0x0e, 0x9d, 0x1c, 0xd8, 0x4f, 0x33, 0x50, 0x0d, 0xcd, 0xa5,
2403 0xef, 0xe9, 0xb8, 0x2f, 0xd4, 0x7d, 0x1f, 0x36, 0xe5, 0x07, 0xf0, 0xb7,
2404 0x79, 0xce, 0x13, 0x3a, 0x1e, 0x63, 0x1e, 0x0a, 0x7c, 0xff, 0x73, 0xb0,
2405 0x85, 0x6b, 0xdf, 0x23, 0x25, 0x8a, 0xc3, 0x21, 0xe4, 0x12, 0x8e, 0x9f,
2406 0x47, 0x12, 0xa7, 0xc4, 0xf9, 0xfd, 0xbf, 0xbb, 0x97, 0xf5, 0x46, 0xfd,
2407 0x1c, 0xcd, 0x4e, 0x4a, 0xf6, 0x4a, 0xbe, 0x7f, 0xf2, 0x03, 0x74, 0x3b,
2408 0xe5, 0x91, 0x0f, 0x6c, 0x13, 0x63, 0x7a, 0xc5, 0x7e, 0xdb, 0x47, 0xb9,
2409 0x1e, 0x7d, 0x42, 0xf5, 0x28, 0x2a, 0xb6, 0xd2, 0x73, 0xa3, 0xf3, 0x4a,
2410 0x7a, 0x8a, 0x78, 0x3f, 0x46, 0x39, 0x26, 0xe1, 0x1c, 0x47, 0xa2, 0xc0,
2411 0xb3, 0xfa, 0x51, 0x9a, 0xd5, 0xcd, 0xdc, 0x32, 0x8a, 0xe7, 0x03, 0x76,
2412 0xd7, 0xc0, 0xa0, 0x30, 0x8f, 0x52, 0x6d, 0x4e, 0x1c, 0xa0, 0xb9, 0x8b,
2413 0xbe, 0x37, 0xb4, 0x87, 0xba, 0xec, 0x75, 0x30, 0xdd, 0x85, 0xc2, 0x34,
2414 0x5e, 0x17, 0xa6, 0x5e, 0x23, 0x58, 0x27, 0x9f, 0x60, 0x91, 0xaf, 0x9b,
2415 0xe3, 0xb0, 0xfc, 0xef, 0x57, 0xd2, 0x1d, 0xfe, 0xf7, 0xd1, 0xf4, 0xc5,
2416 0xe7, 0x7b, 0x0b, 0x77, 0x07, 0xd5, 0xc6, 0x7c, 0x21, 0x83, 0x48, 0x33,
2417 0xd7, 0x8a, 0xa8, 0x38, 0xb0, 0x0b, 0x5a, 0xbd, 0xf3, 0x3e, 0xbe, 0x3e,
2418 0x04, 0x4d, 0x73, 0xa8, 0xd2, 0x12, 0x2f, 0xd4, 0x1b, 0xa4, 0xae, 0x13,
2419 0xdc, 0x0f, 0x74, 0xe5, 0x9e, 0x80, 0xd9, 0x53, 0x43, 0x34, 0x3e, 0x01,
2420 0xe3, 0x7a, 0x1f, 0x49, 0x1f, 0xe7, 0x2c, 0xce, 0xe3, 0x8c, 0x8a, 0xc1,
2421 0xd1, 0xa8, 0xd8, 0x4c, 0xb2, 0xb4, 0x3b, 0x27, 0x71, 0x85, 0xcf, 0xff,
2422 0x2b, 0xc4, 0x3f, 0xe7, 0x9c, 0x13, 0x94, 0x73, 0x18, 0xef, 0xd1, 0x34,
2423 0xe3, 0x1d, 0xa0, 0x3e, 0xf3, 0x7a, 0xdb, 0x4c, 0xf5, 0x84, 0xcc, 0x44,
2424 0x97, 0x30, 0x29, 0xa9, 0xb1, 0x3c, 0x5d, 0xfd, 0x33, 0xe0, 0xb9, 0xd8,
2425 0x97, 0xa9, 0xa7, 0x9e, 0x64, 0x1a, 0x22, 0x7a, 0x1f, 0xfa, 0xf4, 0x4e,
2426 0xce, 0xd1, 0x3b, 0xf1, 0x07, 0x64, 0x52, 0xdd, 0xfb, 0xc9, 0x1e, 0xdb,
2427 0x0a, 0xaf, 0xc8, 0xce, 0xd6, 0x8a, 0x4c, 0x83, 0x3e, 0x2f, 0x3f, 0x49,
2428 0x33, 0x2f, 0x51, 0x67, 0x86, 0xe6, 0x48, 0xa6, 0x6d, 0xae, 0x22, 0xba,
2429 0x44, 0xb3, 0xcb, 0x18, 0x10, 0x66, 0x3f, 0xe9, 0xad, 0x6f, 0xdc, 0xd7,
2430 0xdb, 0x4f, 0xd2, 0x5d, 0x3e, 0xce, 0x19, 0xea, 0x39, 0xbe, 0xe8, 0x93,
2431 0xec, 0x73, 0xd5, 0xbb, 0xca, 0x94, 0x78, 0x8a, 0x7a, 0x97, 0xa7, 0x8a,
2432 0xaa, 0xd8, 0x47, 0xf6, 0x1c, 0xa7, 0xb8, 0x19, 0xf4, 0xef, 0x1f, 0xa9,
2433 0x06, 0x96, 0xbe, 0xd7, 0x3c, 0x97, 0x6f, 0xc8, 0xae, 0x65, 0xb2, 0x6b,
2434 0x27, 0x65, 0x65, 0xee, 0xd9, 0xb8, 0xde, 0x1d, 0xa6, 0x7a, 0x27, 0xf0,
2435 0xa1, 0x9f, 0x63, 0x0f, 0xa3, 0xb3, 0xc8, 0x3d, 0xa1, 0x25, 0x96, 0xe7,
2436 0x8d, 0xdc, 0x7c, 0xc2, 0xfd, 0x7e, 0xa9, 0x92, 0x1f, 0xa9, 0x36, 0xba,
2437 0x21, 0xa7, 0x47, 0xbc, 0x50, 0xe4, 0x9f, 0x54, 0x4c, 0x62, 0xec, 0x5b,
2438 0xae, 0x68, 0xea, 0xf4, 0xd0, 0xde, 0xe9, 0x49, 0xd5, 0xb2, 0xca, 0xef,
2439 0x0b, 0xeb, 0x94, 0x15, 0x72, 0x6f, 0x9f, 0x8f, 0x4d, 0xb8, 0x6c, 0xb1,
2440 0x7b, 0x73, 0x02, 0xfe, 0x4c, 0x6c, 0x50, 0x4c, 0xa2, 0xb7, 0x3b, 0xd9,
2441 0x33, 0x2d, 0x92, 0xd4, 0x43, 0x25, 0xbd, 0x94, 0x48, 0xa6, 0x8e, 0xc3,
2442 0xd6, 0x8e, 0x14, 0x6d, 0xed, 0x8d, 0x62, 0xf5, 0x6e, 0x93, 0xe5, 0x62,
2443 0x5f, 0xe5, 0xf8, 0xb0, 0xdc, 0xfb, 0x29, 0x0f, 0xc1, 0xef, 0x43, 0xe4,
2444 0xa1, 0x46, 0x8a, 0xb1, 0x3b, 0x51, 0x4b, 0x4d, 0xb3, 0xdc, 0xde, 0x44,
2445 0xf3, 0xcf, 0x5d, 0x44, 0xbf, 0xdc, 0x9a, 0x03, 0xd7, 0x93, 0x47, 0xf8,
2446 0xc2, 0xb9, 0x85, 0x79, 0x7a, 0x33, 0x52, 0x91, 0x91, 0xca, 0x70, 0xe5,
2447 0xff, 0x17, 0xd2, 0x1a, 0x28, 0x06, 0xd7, 0x0d, 0x09, 0xea, 0xef, 0x2b,
2448 0xf1, 0xb8, 0x90, 0xef, 0x4e, 0xfd, 0x7b, 0xb3, 0x57, 0x64, 0xa5, 0xde,
2449 0x7f, 0xdc, 0xcc, 0x77, 0x51, 0x8a, 0x33, 0x1c, 0xfb, 0xed, 0xb3, 0x15,
2450 0xdd, 0xf2, 0x1c, 0x7f, 0xa8, 0xe4, 0x8a, 0x6b, 0xf3, 0xd8, 0x40, 0xbd,
2451 0x83, 0x1b, 0x26, 0x1c, 0xd7, 0x16, 0x7b, 0x49, 0x37, 0x96, 0x31, 0x48,
2452 0x44, 0xb7, 0xea, 0x5d, 0xfa, 0x38, 0xf5, 0x5a, 0x84, 0xcb, 0xa0, 0x7e,
2453 0x94, 0x62, 0x7c, 0x1e, 0x76, 0xcc, 0xc5, 0x54, 0xbd, 0xc3, 0x77, 0xbb,
2454 0x03, 0x62, 0xe1, 0x54, 0x25, 0xcd, 0x1f, 0x3a, 0x27, 0xdf, 0x69, 0xb9,
2455 0xfd, 0x26, 0x7e, 0x5f, 0x3f, 0x67, 0x93, 0x2b, 0x99, 0x26, 0xfd, 0x7e,
2456 0x76, 0x8e, 0x87, 0x3f, 0x74, 0xf6, 0x8e, 0xaf, 0xfe, 0xf6, 0x99, 0x59,
2457 0xe2, 0x93, 0x7b, 0x45, 0x78, 0x31, 0x87, 0xfb, 0xc4, 0x0b, 0xe7, 0x7c,
2458 0xe1, 0x52, 0xc2, 0xbd, 0x01, 0x37, 0xd2, 0x7c, 0xd4, 0x49, 0x73, 0x28,
2459 0xcd, 0x2e, 0x48, 0x0d, 0xb3, 0x3e, 0xce, 0x90, 0x3e, 0xd8, 0xe6, 0xa7,
2460 0xc8, 0xe6, 0x1d, 0x39, 0x8a, 0x99, 0xd4, 0x7a, 0x61, 0xf6, 0x92, 0xbf,
2461 0x51, 0xed, 0x32, 0x13, 0x1f, 0xc3, 0x34, 0xd6, 0xfa, 0x3e, 0x7d, 0x66,
2462 0xce, 0xa7, 0x4f, 0xb1, 0x4f, 0xa3, 0x6f, 0x38, 0x04, 0x25, 0xf3, 0x29,
2463 0xe9, 0x8c, 0xe2, 0x4d, 0x30, 0x4e, 0xce, 0x53, 0x67, 0x40, 0xfd, 0xb2,
2464 0x36, 0x9f, 0xf6, 0xc8, 0x42, 0x47, 0xe2, 0x28, 0xf5, 0xdb, 0xfb, 0xc0,
2465 0x25, 0xa3, 0xeb, 0xe8, 0x31, 0x61, 0x96, 0xdf, 0x0b, 0x71, 0x0e, 0x10,
2466 0x68, 0xcc, 0x54, 0xf0, 0x5d, 0x5e, 0x4c, 0x60, 0x47, 0xa9, 0x82, 0xf3,
2467 0x32, 0xf2, 0xe1, 0x31, 0xff, 0x7e, 0x41, 0x81, 0x96, 0x79, 0x9b, 0x6b,
2468 0x33, 0xc1, 0x25, 0x73, 0xf2, 0x7f, 0x67, 0xce, 0x06, 0x6f, 0xce, 0xe9,
2469 0x67, 0x4b, 0x8c, 0x6b, 0x8f, 0x96, 0xe1, 0x7c, 0x0d, 0xb1, 0x26, 0xff,
2470 0x67, 0x54, 0x03, 0x34, 0xea, 0x81, 0xfd, 0xbc, 0x8f, 0x5c, 0x11, 0x94,
2471 0xbf, 0xcb, 0xb5, 0x47, 0xec, 0xf0, 0x5c, 0xfe, 0xfa, 0x06, 0xad, 0xf5,
2472 0xd1, 0x87, 0x75, 0xc6, 0x77, 0x12, 0x37, 0xd1, 0xb3, 0xeb, 0xef, 0xeb,
2473 0xcf, 0xa3, 0xa7, 0x36, 0x4d, 0xfd, 0xad, 0xbf, 0xcf, 0xbf, 0xaf, 0xa0,
2474 0x3d, 0xcb, 0xf9, 0xdd, 0x08, 0xdf, 0xb5, 0xac, 0xce, 0x26, 0x8d, 0xcd,
2475 0x60, 0x3a, 0x06, 0xd6, 0x14, 0x0d, 0xdc, 0x4a, 0x75, 0x61, 0xcc, 0xbf,
2476 0x07, 0x3d, 0x3f, 0xf7, 0x28, 0xb4, 0x6f, 0x19, 0xed, 0x1b, 0xf4, 0xd7,
2477 0x0c, 0x2c, 0x2f, 0x9e, 0x9f, 0xe9, 0x54, 0x3a, 0x77, 0xe8, 0xdc, 0x1c,
2478 0xcb, 0x76, 0x70, 0xc5, 0xce, 0x7c, 0xaf, 0x18, 0xc9, 0x47, 0x89, 0x96,
2479 0x42, 0x19, 0x40, 0xa2, 0x23, 0x73, 0x33, 0xe5, 0x5d, 0x2b, 0xa5, 0x2a,
2480 0x4d, 0x58, 0x9b, 0x22, 0x3f, 0xd6, 0x97, 0xe2, 0x8e, 0x54, 0x0d, 0xf5,
2481 0x34, 0xc3, 0xb8, 0x4d, 0xaf, 0x45, 0x7f, 0xea, 0x52, 0xe0, 0xc6, 0x3a,
2482 0xea, 0x41, 0x06, 0xfc, 0x9e, 0xbe, 0x86, 0xe8, 0xd5, 0x59, 0x4f, 0xe1,
2483 0xf6, 0x73, 0xff, 0xae, 0x42, 0x34, 0x7e, 0xef, 0x3c, 0x77, 0x33, 0xdc,
2484 0xe6, 0x1e, 0xaa, 0x83, 0xdd, 0x58, 0x97, 0x0a, 0x53, 0x6f, 0xcd, 0xf9,
2485 0x61, 0x3e, 0x22, 0xd6, 0x67, 0x72, 0xfd, 0xb9, 0x3e, 0x67, 0x46, 0xcc,
2486 0x90, 0x5c, 0xa8, 0xf5, 0xc4, 0x73, 0x34, 0xbf, 0x65, 0x4a, 0x7c, 0x1f,
2487 0xa5, 0x20, 0x66, 0xf1, 0xcc, 0x48, 0xc3, 0x1f, 0xcd, 0x59, 0xe9, 0xc7,
2488 0xeb, 0x71, 0xd5, 0xbe, 0x06, 0x64, 0xf6, 0xe9, 0xb0, 0x1f, 0xb7, 0x68,
2489 0x2d, 0x45, 0x9f, 0x19, 0xb1, 0xb7, 0xf8, 0x87, 0x68, 0x77, 0x60, 0x8d,
2490 0xfe, 0x3f, 0x95, 0x7d, 0x0b, 0x70, 0x54, 0xe7, 0x95, 0xe6, 0x77, 0xfb,
2491 0x21, 0xb5, 0x9e, 0x5c, 0x09, 0x09, 0x5a, 0x20, 0x9b, 0x6e, 0xf7, 0x6d,
2492 0xa9, 0x8d, 0x3a, 0xe1, 0x36, 0x88, 0xb5, 0x9c, 0xed, 0x2d, 0x1a, 0x2c,
2493 0x8c, 0x08, 0x60, 0xcb, 0xb6, 0x3c, 0x83, 0x77, 0x32, 0x6b, 0xc5, 0x36,
2494 0x18, 0x3f, 0x92, 0x91, 0x09, 0x5b, 0x25, 0x53, 0x53, 0xd1, 0x1d, 0x01,
2495 0x42, 0x40, 0xbf, 0x24, 0xc1, 0x00, 0x33, 0x53, 0xe3, 0x46, 0x0f, 0x20,
2496 0xb8, 0x5b, 0xc2, 0x71, 0x66, 0x4a, 0xc9, 0xd4, 0x56, 0x34, 0x20, 0x0c,
2497 0x04, 0x63, 0x3c, 0x93, 0x99, 0x29, 0xb2, 0xeb, 0x2d, 0x13, 0x1c, 0xc0,
2498 0x0f, 0xfc, 0x4c, 0xb2, 0x16, 0xf1, 0xc4, 0x77, 0xbf, 0x73, 0xbb, 0x1b,
2499 0x04, 0x45, 0x3c, 0x35, 0x54, 0x75, 0xb5, 0x6e, 0xdf, 0xff, 0xfe, 0x8f,
2500 0xf3, 0x9f, 0xf3, 0x9d, 0xef, 0x9c, 0xf3, 0xdf, 0xa2, 0x84, 0xfe, 0xfb,
2501 0xdf, 0xcc, 0x75, 0x8c, 0x4f, 0xdc, 0x0b, 0x69, 0x66, 0xb3, 0x65, 0xbc,
2502 0x0b, 0x5f, 0x0e, 0x24, 0x9c, 0xe8, 0xea, 0x77, 0xe0, 0xda, 0xa2, 0x73,
2503 0xa6, 0x67, 0xf6, 0x8d, 0xfc, 0x4e, 0xc4, 0xe6, 0xc4, 0x33, 0xfd, 0xf2,
2504 0xed, 0x40, 0x60, 0x71, 0x36, 0xe7, 0xba, 0x61, 0xd0, 0x89, 0xa7, 0xd9,
2505 0xf6, 0xa2, 0x6e, 0xcb, 0xed, 0xb1, 0x55, 0x1b, 0xc0, 0x73, 0xfd, 0x8c,
2506 0x6d, 0x34, 0x13, 0xcf, 0x86, 0x8a, 0x71, 0x7f, 0x75, 0x76, 0x1d, 0xc3,
2507 0x5c, 0x87, 0xe1, 0x30, 0x94, 0x4c, 0xa3, 0x13, 0xe5, 0x9c, 0x3f, 0xb9,
2508 0x18, 0x7e, 0x98, 0x29, 0xc1, 0xe8, 0x81, 0x71, 0x25, 0x9d, 0xce, 0xb6,
2509 0x19, 0xb2, 0x62, 0x5a, 0x43, 0x19, 0x6b, 0xb4, 0x61, 0x26, 0xfd, 0xfb,
2510 0x85, 0x8c, 0x03, 0x9f, 0x65, 0x5c, 0xf8, 0x74, 0xa4, 0x18, 0xbf, 0x3e,
2511 0x50, 0xc2, 0x8f, 0x8a, 0x4f, 0x46, 0x34, 0xfe, 0xde, 0xac, 0xbc, 0x12,
2512 0x95, 0xd8, 0x23, 0x80, 0x4f, 0x33, 0xe3, 0xca, 0xd1, 0xaf, 0x5c, 0x6b,
2513 0xc6, 0xfc, 0x8e, 0x6a, 0x70, 0xcc, 0xbf, 0x36, 0xbf, 0x3b, 0x4d, 0xae,
2514 0xd3, 0xc7, 0xaa, 0xd4, 0x4a, 0xf0, 0xd9, 0x01, 0x19, 0x47, 0xfa, 0x6f,
2515 0x56, 0x5e, 0x8d, 0x8a, 0x7c, 0x2b, 0xf1, 0xeb, 0x11, 0x91, 0xe3, 0x27,
2516 0xd4, 0x69, 0xe9, 0x7f, 0x5c, 0x39, 0x9e, 0x7b, 0xe6, 0xe7, 0xdc, 0x8b,
2517 0x8d, 0xa3, 0x0e, 0x90, 0x4c, 0xf0, 0x59, 0x17, 0x5e, 0x38, 0x68, 0x23,
2518 0x27, 0x2e, 0xc6, 0xc6, 0xc1, 0x12, 0xbc, 0x30, 0xa8, 0xa2, 0xe3, 0x60,
2519 0xb3, 0x42, 0xbe, 0xaf, 0xce, 0x20, 0xef, 0xed, 0x18, 0x0d, 0xb0, 0xdd,
2520 0xb8, 0x72, 0x2e, 0xdd, 0x30, 0x33, 0xdb, 0x4f, 0x36, 0xf7, 0x93, 0xe5,
2521 0x31, 0x86, 0xc2, 0x38, 0x8d, 0x5c, 0x72, 0xdf, 0xe6, 0xd7, 0x18, 0x21,
2522 0x3e, 0x9c, 0xb6, 0x53, 0xc7, 0x24, 0x1e, 0x15, 0xbb, 0x4f, 0x6d, 0xbe,
2523 0x12, 0x95, 0xb9, 0x1a, 0xca, 0x91, 0x46, 0x9b, 0xc5, 0xb1, 0x5f, 0x67,
2524 0x5c, 0xb8, 0x82, 0xb6, 0xf2, 0x10, 0xe5, 0xb1, 0x9a, 0xf2, 0x68, 0xa6,
2525 0x3c, 0x5a, 0x39, 0xdf, 0x97, 0xa3, 0x82, 0x93, 0xde, 0x40, 0x44, 0xd1,
2526 0xb0, 0x2a, 0x23, 0x7d, 0x58, 0xe3, 0xb8, 0x1c, 0xe1, 0xbf, 0xd9, 0xbc,
2527 0x35, 0x7a, 0xab, 0x5c, 0xa0, 0x96, 0x87, 0xc5, 0xaf, 0x89, 0x6c, 0x02,
2528 0xe4, 0x50, 0xe3, 0xca, 0xa8, 0x15, 0x23, 0xef, 0xdb, 0xec, 0x49, 0xe5,
2529 0x6d, 0xa7, 0x44, 0xec, 0x53, 0xf2, 0xe1, 0xca, 0x3e, 0x72, 0xb5, 0x1a,
2530 0x2d, 0x7b, 0xff, 0xde, 0x94, 0x7c, 0xa7, 0x36, 0x2f, 0xb4, 0xf0, 0xe6,
2531 0x6f, 0x36, 0x37, 0x5d, 0x5f, 0xd3, 0xb8, 0xf2, 0x36, 0xd7, 0x73, 0x81,
2532 0x7a, 0x7a, 0x92, 0x73, 0x2d, 0x92, 0xbd, 0x4b, 0x73, 0xef, 0x38, 0xd7,
2533 0x4f, 0x87, 0x8b, 0xf1, 0x5e, 0xaa, 0x84, 0x1f, 0xca, 0x76, 0x98, 0x7b,
2534 0x97, 0x6e, 0x56, 0x4e, 0x59, 0xf2, 0x0d, 0xe0, 0x5d, 0x8e, 0x7d, 0xec,
2535 0x7a, 0x1f, 0x59, 0xde, 0x96, 0xad, 0xc3, 0xe5, 0xed, 0x57, 0xf0, 0x54,
2536 0xd6, 0x66, 0x28, 0x91, 0xeb, 0xb5, 0x34, 0xc9, 0x8b, 0x49, 0x7d, 0x91,
2537 0x3e, 0x46, 0x95, 0xfc, 0xa8, 0x42, 0x8c, 0xa1, 0xfe, 0xa9, 0xcb, 0x3c,
2538 0x0e, 0xe2, 0xe2, 0x3a, 0x7c, 0xc1, 0x38, 0x21, 0x42, 0x8b, 0x92, 0xb5,
2539 0x48, 0x8e, 0xb4, 0x50, 0x62, 0x42, 0xeb, 0xdf, 0x20, 0xb9, 0xd4, 0x6b,
2540 0xe4, 0xb9, 0x54, 0x21, 0x74, 0xa7, 0xbf, 0x30, 0x27, 0xaa, 0xe8, 0x57,
2541 0xb5, 0xeb, 0x79, 0x37, 0xae, 0xd9, 0x34, 0x87, 0x78, 0xaf, 0x27, 0x8d,
2542 0xdc, 0x3f, 0x72, 0x2f, 0xf2, 0xdd, 0x27, 0xb5, 0xdf, 0x99, 0x4f, 0xdc,
2543 0xd4, 0x36, 0x8f, 0xe5, 0xf9, 0x78, 0x5f, 0xb0, 0xbc, 0x14, 0x3d, 0xbb,
2544 0xbd, 0xc9, 0x14, 0xaa, 0x90, 0xd4, 0x6c, 0x73, 0x0b, 0x38, 0x3b, 0x3b,
2545 0xbc, 0xbd, 0xcd, 0xb0, 0xf2, 0x20, 0x9e, 0x14, 0xfe, 0x61, 0xa6, 0xd8,
2546 0x8c, 0x53, 0x6b, 0xf0, 0x54, 0xd8, 0x2a, 0x65, 0xee, 0xd6, 0xac, 0xec,
2547 0xfd, 0x45, 0x58, 0x17, 0x2c, 0x42, 0xaa, 0x95, 0x18, 0xd7, 0x6f, 0xb4,
2548 0xb0, 0x7b, 0xf2, 0xa7, 0xc0, 0x8b, 0xdf, 0xf4, 0x0b, 0x1f, 0x03, 0x0a,
2549 0x63, 0x1c, 0x13, 0x39, 0x0c, 0xec, 0xf7, 0x1a, 0x36, 0x9b, 0x3c, 0xff,
2550 0x99, 0x69, 0xb4, 0xc9, 0xb3, 0xd2, 0x47, 0xad, 0xc5, 0x1b, 0x6f, 0xd6,
2551 0x7b, 0x0f, 0xe5, 0xf4, 0xaf, 0x33, 0x25, 0xe7, 0xa8, 0xd6, 0x31, 0xee,
2552 0xe9, 0x97, 0x9a, 0x4d, 0x04, 0xbb, 0xaa, 0x7d, 0x1d, 0xba, 0xad, 0x18,
2553 0x67, 0xbf, 0xf6, 0xdf, 0x88, 0xe9, 0x05, 0x70, 0xd5, 0x01, 0xf7, 0xc5,
2554 0x6d, 0xb0, 0xd5, 0x11, 0xab, 0xa9, 0xd3, 0xcd, 0xa3, 0x36, 0xcc, 0xeb,
2555 0x57, 0xf0, 0x58, 0xd2, 0x86, 0x07, 0x92, 0x76, 0xac, 0x4a, 0xe2, 0xfb,
2556 0xf3, 0x80, 0xc9, 0x1a, 0xf8, 0xdb, 0xa7, 0xe8, 0x9a, 0xcb, 0xe1, 0x6f,
2557 0x8d, 0x91, 0x17, 0xac, 0x62, 0x2c, 0xba, 0x72, 0x94, 0x38, 0xc8, 0xb6,
2558 0xce, 0x3e, 0xea, 0x66, 0x9f, 0x1d, 0x35, 0x7d, 0xb8, 0xb3, 0x10, 0xa0,
2559 0x75, 0xfb, 0xa7, 0xe8, 0x97, 0x2a, 0x1d, 0xf0, 0xd3, 0xaf, 0xf8, 0x3b,
2560 0x6b, 0xec, 0x0c, 0xc4, 0xea, 0xfe, 0xd5, 0xe2, 0xb4, 0x0f, 0xd2, 0x5e,
2561 0xe6, 0xf5, 0xb3, 0x7d, 0x9d, 0x0d, 0x2a, 0xf5, 0xf9, 0x93, 0x3f, 0x96,
2562 0x7c, 0xaf, 0xdc, 0x93, 0xba, 0xab, 0x82, 0xf2, 0x7e, 0x3b, 0xf1, 0xf0,
2563 0x8c, 0x79, 0xb6, 0xda, 0xaa, 0x41, 0xe1, 0x31, 0xce, 0xcd, 0xcd, 0xdf,
2564 0xd4, 0x3a, 0x17, 0x16, 0xdc, 0xa3, 0x62, 0xed, 0xa0, 0xb4, 0x85, 0xd5,
2565 0x8f, 0x93, 0xb8, 0x53, 0xa0, 0x4d, 0x98, 0x07, 0xab, 0xa4, 0xad, 0x8d,
2566 0x6b, 0xb4, 0xa3, 0xa4, 0x1f, 0x58, 0x19, 0xc7, 0xc3, 0xa5, 0xf0, 0x47,
2567 0x64, 0x8e, 0xf5, 0x8b, 0x1d, 0x7c, 0xb6, 0x14, 0x2d, 0xa3, 0xd9, 0xe7,
2568 0x56, 0x8c, 0xbe, 0x37, 0x33, 0x9b, 0xfb, 0xfe, 0xc3, 0x75, 0xe3, 0x2d,
2569 0x8d, 0x7e, 0xac, 0x4b, 0x52, 0xe7, 0x6c, 0x1e, 0x0c, 0xe6, 0x72, 0xd0,
2570 0x4f, 0xa4, 0xbc, 0xd3, 0xea, 0xba, 0x7f, 0x5b, 0x9a, 0xab, 0xf9, 0xd2,
2571 0x8e, 0xa7, 0xd8, 0x8f, 0x65, 0xc3, 0x18, 0x1c, 0x33, 0x11, 0xd5, 0x4d,
2572 0x64, 0xf8, 0x79, 0x43, 0x87, 0x51, 0x42, 0x1b, 0x7f, 0x2a, 0x26, 0x98,
2573 0x97, 0xd5, 0xa4, 0x1f, 0x24, 0x02, 0xca, 0x86, 0x18, 0x70, 0x84, 0xf1,
2574 0xe3, 0x21, 0x7e, 0x86, 0x13, 0x5c, 0x03, 0xe7, 0x6d, 0x23, 0x6e, 0x6c,
2575 0x4b, 0x01, 0x43, 0x09, 0x44, 0xf6, 0x2f, 0x96, 0x58, 0xa6, 0x84, 0xe3,
2576 0x01, 0xe3, 0x6c, 0x93, 0xe6, 0xe7, 0x20, 0x3f, 0x63, 0xdc, 0x53, 0x8e,
2577 0x87, 0x00, 0xf1, 0x30, 0x92, 0xd1, 0x60, 0x64, 0x02, 0x98, 0xa0, 0x6d,
2578 0x5d, 0x1b, 0x56, 0x51, 0x76, 0xa8, 0x12, 0x1f, 0x8d, 0x64, 0x63, 0xa5,
2579 0x75, 0x19, 0xa9, 0x5d, 0xcb, 0xda, 0xa4, 0x7e, 0x2d, 0xb6, 0x54, 0x84,
2580 0x43, 0xc9, 0x4a, 0xab, 0x86, 0xfd, 0x8e, 0xce, 0x7e, 0x55, 0xa9, 0xb1,
2581 0xb6, 0xe2, 0x70, 0xd4, 0xe7, 0xe9, 0xa5, 0xbe, 0x1b, 0x0e, 0xb1, 0xaf,
2582 0x46, 0x1c, 0x89, 0xe6, 0x6b, 0x67, 0xbe, 0x96, 0x9f, 0x49, 0x8e, 0xc8,
2583 0x59, 0x49, 0xd9, 0xca, 0xbd, 0xbc, 0xdf, 0x95, 0xf5, 0x4a, 0x0e, 0x3f,
2584 0xcf, 0x71, 0xa6, 0xff, 0x7e, 0x8a, 0xe3, 0x05, 0x69, 0x07, 0xde, 0xde,
2585 0x14, 0x74, 0xcb, 0x97, 0x8e, 0xd4, 0x7b, 0x93, 0x06, 0x64, 0x6f, 0x1b,
2586 0x39, 0x87, 0xd7, 0xa8, 0xf7, 0x01, 0xca, 0xf9, 0x2f, 0xe8, 0x23, 0x5c,
2587 0x8c, 0x65, 0x2b, 0xb0, 0xab, 0xaf, 0x12, 0x3b, 0xfb, 0x0c, 0xf4, 0x2c,
2588 0x6e, 0xc3, 0xa9, 0xa8, 0x89, 0x75, 0x21, 0x13, 0x2b, 0x19, 0x23, 0xfc,
2589 0x00, 0x0d, 0x4d, 0x87, 0xf1, 0x20, 0x63, 0x65, 0x95, 0xf2, 0xf8, 0x16,
2590 0xde, 0xde, 0xed, 0xc0, 0x7a, 0xfd, 0x8f, 0x68, 0xbf, 0xa6, 0xf9, 0xab,
2591 0x45, 0xb5, 0x18, 0x4c, 0x34, 0xa8, 0xdd, 0x9c, 0x5f, 0xa4, 0x8d, 0xfb,
2592 0x14, 0x74, 0xe0, 0x69, 0xfd, 0xfb, 0x6c, 0xeb, 0xb6, 0x39, 0x34, 0xb9,
2593 0x96, 0xba, 0x96, 0xec, 0xa3, 0x41, 0xdd, 0xca, 0xfb, 0xac, 0x6c, 0xad,
2594 0x74, 0x7d, 0xa3, 0xe4, 0x44, 0x4a, 0x71, 0x92, 0x32, 0x3b, 0x96, 0x8c,
2595 0xd0, 0x55, 0x43, 0x79, 0xba, 0xb1, 0x0b, 0x8f, 0x93, 0x9b, 0xbc, 0x4d,
2596 0xd2, 0x70, 0x6f, 0x5c, 0x41, 0x53, 0xbd, 0x8e, 0xf3, 0xe9, 0x6f, 0xe1,
2597 0xcd, 0xe1, 0x30, 0xde, 0x20, 0x07, 0x58, 0xf0, 0x97, 0xc2, 0xe9, 0x3d,
2598 0x38, 0x9b, 0x0e, 0xe3, 0x4c, 0xd4, 0xdb, 0xfa, 0xbc, 0x52, 0x8b, 0x9f,
2599 0x11, 0xd3, 0xee, 0x8e, 0x03, 0xef, 0xb1, 0x1f, 0x7f, 0xdc, 0x81, 0x4b,
2600 0x69, 0x15, 0x87, 0xb9, 0x37, 0x8e, 0xd0, 0x02, 0x18, 0x6d, 0x1e, 0x1c,
2601 0x1c, 0x78, 0x00, 0x13, 0xa9, 0x07, 0x70, 0x22, 0xf9, 0xb6, 0xe9, 0xd2,
2602 0xa4, 0x06, 0xe6, 0xc2, 0x25, 0x62, 0xea, 0x24, 0xa5, 0x51, 0x7a, 0x4f,
2603 0x2b, 0x71, 0x51, 0x33, 0x44, 0xee, 0x6f, 0xf2, 0xb7, 0x7b, 0xe3, 0x4d,
2604 0xd8, 0x9f, 0xa1, 0x48, 0x13, 0x3a, 0x12, 0x31, 0x19, 0xab, 0x11, 0x31,
2605 0x72, 0xc8, 0x5d, 0x7d, 0xe2, 0x37, 0xef, 0xc6, 0xca, 0x0a, 0x28, 0x2d,
2606 0x75, 0x63, 0xb9, 0x75, 0x34, 0x4d, 0xab, 0x6d, 0x4a, 0xbc, 0x49, 0xb9,
2607 0xf2, 0xb9, 0x1f, 0x26, 0x28, 0xf7, 0x04, 0x65, 0x7b, 0x7d, 0x3f, 0x9a,
2608 0xb8, 0x1f, 0xdf, 0xc2, 0xf9, 0xdd, 0x6d, 0x78, 0x93, 0x58, 0x57, 0xbe,
2609 0xc8, 0xd7, 0xe9, 0xb4, 0x35, 0xb0, 0xef, 0xb4, 0x99, 0xaa, 0x16, 0x99,
2610 0xb6, 0xe1, 0x17, 0x51, 0x91, 0x69, 0x9a, 0xd8, 0xe7, 0xf3, 0xf8, 0xed,
2611 0x23, 0x55, 0xd4, 0x65, 0x5b, 0x77, 0x30, 0x5b, 0xaf, 0x2b, 0xbd, 0xc7,
2612 0x85, 0xcb, 0xd6, 0xdc, 0x64, 0xae, 0x5f, 0x35, 0xbf, 0x5f, 0x98, 0x2b,
2613 0xab, 0x65, 0x7e, 0x86, 0xc9, 0x98, 0x3a, 0xc0, 0x78, 0x91, 0xb6, 0x13,
2614 0x80, 0xe4, 0x9c, 0xeb, 0xe3, 0x5d, 0xb0, 0x87, 0x4a, 0x0d, 0x35, 0xec,
2615 0x9d, 0xea, 0xc0, 0x9b, 0xb8, 0x42, 0x8e, 0x72, 0x57, 0x5c, 0x63, 0x7c,
2616 0x7b, 0x81, 0x63, 0xfd, 0x0b, 0x2e, 0xf2, 0xda, 0x17, 0xcf, 0xda, 0x5a,
2617 0x77, 0x63, 0x1b, 0xee, 0x4b, 0xcb, 0xfa, 0xfe, 0x0b, 0x07, 0xd2, 0x11,
2618 0x49, 0xcb, 0x3a, 0x63, 0xb4, 0x0b, 0x59, 0x67, 0xe5, 0x7f, 0xb0, 0xce,
2619 0x23, 0xec, 0xaf, 0x96, 0x76, 0x94, 0xf7, 0x1b, 0x65, 0x38, 0x98, 0x54,
2620 0x71, 0x52, 0x2f, 0xc5, 0x05, 0x55, 0xf2, 0xf5, 0xd9, 0x5a, 0x66, 0x33,
2621 0xe3, 0xd3, 0x21, 0x7e, 0x9e, 0x62, 0x0c, 0x75, 0x5a, 0x77, 0xe0, 0x84,
2622 0x5e, 0x4b, 0x9c, 0xbf, 0x55, 0x87, 0xe5, 0x1e, 0x03, 0x83, 0x8a, 0x4a,
2623 0x9c, 0x91, 0x9c, 0xaa, 0x75, 0x5f, 0xce, 0x16, 0xb8, 0x20, 0x39, 0x8d,
2624 0x82, 0xd8, 0x6f, 0xcd, 0xcb, 0x16, 0xce, 0xdc, 0x3a, 0xbf, 0x5b, 0xfb,
2625 0x21, 0x55, 0xd0, 0xde, 0x33, 0x9f, 0xad, 0xce, 0xf9, 0x2d, 0x65, 0x47,
2626 0x55, 0x16, 0x2b, 0xc4, 0x87, 0x8d, 0xe7, 0x71, 0x83, 0x7c, 0x7c, 0xdf,
2627 0xa3, 0xf4, 0x41, 0xf4, 0xcf, 0xcd, 0xdf, 0xdb, 0xaa, 0x49, 0x9c, 0x97,
2628 0x7a, 0x74, 0x99, 0x56, 0x00, 0xbb, 0xe5, 0x67, 0x0f, 0x6f, 0xce, 0xf2,
2629 0xf9, 0xf4, 0xe6, 0x6c, 0x8c, 0x7a, 0x74, 0xf3, 0x5d, 0xd6, 0xf7, 0x8f,
2630 0x36, 0xfb, 0x52, 0x37, 0x7c, 0x55, 0x96, 0x2f, 0x5b, 0x67, 0x6d, 0xd0,
2631 0xab, 0x1b, 0xca, 0x8a, 0x46, 0xf1, 0xd7, 0x79, 0x8e, 0x22, 0x6d, 0x02,
2632 0xca, 0x89, 0xa8, 0x61, 0xba, 0xb5, 0x62, 0xfa, 0x7a, 0x28, 0x63, 0x8c,
2633 0xc5, 0xa6, 0xac, 0xba, 0xa7, 0x86, 0x37, 0xd2, 0x12, 0x13, 0x83, 0xfa,
2634 0xfb, 0xbf, 0xb1, 0x6b, 0x37, 0xda, 0x8b, 0x16, 0x93, 0xb3, 0xd3, 0xcf,
2635 0x3d, 0x1b, 0x72, 0xe0, 0xfd, 0x74, 0x76, 0x3d, 0xef, 0x0d, 0x97, 0xe0,
2636 0xdd, 0x94, 0xf8, 0x6b, 0xa8, 0x85, 0xec, 0xf7, 0x64, 0x5a, 0x63, 0x6c,
2637 0x2a, 0xe3, 0xb6, 0x61, 0xdb, 0x98, 0x03, 0xfb, 0xa3, 0x1a, 0x62, 0x89,
2638 0x9f, 0x9a, 0x45, 0x9a, 0x6f, 0xc2, 0x6f, 0x77, 0x60, 0x5f, 0x7a, 0x12,
2639 0x63, 0x7d, 0x1f, 0x9b, 0x76, 0xad, 0x0b, 0x1f, 0x85, 0x26, 0xc9, 0xeb,
2640 0xa4, 0xfe, 0xa9, 0x63, 0xd7, 0x80, 0xc6, 0x58, 0xda, 0x86, 0x9d, 0x8b,
2641 0x5b, 0xb0, 0x6b, 0xac, 0x19, 0xc6, 0x21, 0x0f, 0x76, 0x92, 0xf0, 0x4d,
2642 0x0c, 0x4f, 0xe2, 0x54, 0x52, 0x6b, 0x2a, 0x52, 0x26, 0x71, 0x92, 0xe3,
2643 0x6c, 0x4d, 0xbc, 0x05, 0x83, 0x7d, 0x6c, 0x4b, 0x4a, 0x8e, 0x57, 0xc6,
2644 0x99, 0x44, 0x77, 0xea, 0x76, 0x35, 0x8f, 0x36, 0xec, 0x48, 0x6c, 0x69,
2645 0xcf, 0xd6, 0x3d, 0x88, 0xab, 0x69, 0x4d, 0xe9, 0xe5, 0x1e, 0x1d, 0x4e,
2646 0xe7, 0x6b, 0x20, 0x82, 0xa1, 0x59, 0x3c, 0xdc, 0x96, 0xd6, 0xd1, 0x3b,
2647 0xd0, 0xc2, 0xf6, 0x1a, 0xba, 0x13, 0x52, 0x3f, 0xf6, 0x71, 0x3c, 0x13,
2648 0xef, 0xe9, 0x5e, 0xf7, 0x5d, 0xfc, 0x1e, 0xd1, 0x3b, 0xb1, 0x81, 0xfd,
2649 0x08, 0xe7, 0xd2, 0x14, 0x6f, 0x93, 0x01, 0x3b, 0x7e, 0xa5, 0xdb, 0x61,
2650 0x54, 0xd9, 0x71, 0x44, 0x2f, 0x23, 0x3f, 0xb7, 0xa3, 0x21, 0x44, 0xdf,
2651 0x9c, 0xf3, 0xd5, 0x1f, 0x26, 0x15, 0x3c, 0x40, 0x2c, 0x3d, 0x16, 0x6a,
2652 0x68, 0x5f, 0x2e, 0x6c, 0xf7, 0x80, 0x82, 0x2b, 0xda, 0x35, 0xd3, 0xa0,
2653 0xbf, 0x72, 0xf9, 0xf3, 0x7b, 0xf3, 0x6b, 0x33, 0x5b, 0x03, 0xfe, 0xc2,
2654 0xcc, 0x3f, 0x37, 0xc5, 0xf9, 0x3d, 0xc6, 0xe7, 0xee, 0x5a, 0xd4, 0xd0,
2655 0x29, 0xcf, 0xb9, 0x89, 0xe3, 0xf2, 0x9c, 0xe4, 0xf6, 0x6f, 0x3c, 0xa7,
2656 0x63, 0xdb, 0x40, 0xc4, 0x9a, 0xef, 0xf6, 0x04, 0x16, 0x3a, 0x20, 0x76,
2657 0xd4, 0xa0, 0x5e, 0x02, 0xba, 0x26, 0xf5, 0x19, 0xe4, 0x37, 0xfe, 0xc0,
2658 0x53, 0x10, 0x39, 0x49, 0xbc, 0xf9, 0x16, 0x76, 0x46, 0x87, 0xc1, 0x98,
2659 0x93, 0xf8, 0xe6, 0x5f, 0x3b, 0x84, 0x14, 0x9e, 0x4b, 0xa7, 0xf0, 0xbc,
2660 0x70, 0x6c, 0x2b, 0xc7, 0x96, 0xc6, 0x77, 0xa2, 0x6f, 0x21, 0x66, 0xc5,
2661 0x55, 0x87, 0xf1, 0x44, 0xf4, 0xdd, 0x6a, 0xc9, 0x65, 0x6e, 0x4d, 0x2c,
2662 0x65, 0xff, 0x22, 0x53, 0x6f, 0xab, 0x81, 0x2f, 0xd9, 0xff, 0x52, 0x6c,
2663 0x19, 0x92, 0x9c, 0x90, 0x89, 0xd7, 0xc9, 0xa9, 0xae, 0x50, 0x8f, 0x5a,
2664 0x1a, 0xa5, 0xff, 0x71, 0x45, 0xb3, 0x7c, 0x57, 0x1b, 0xf7, 0x78, 0x16,
2665 0xdc, 0x94, 0x73, 0x59, 0x46, 0x53, 0xee, 0x8a, 0xc9, 0x9e, 0x3b, 0x60,
2666 0xcb, 0x78, 0xf0, 0x18, 0x79, 0x49, 0xe1, 0xc8, 0x8f, 0x14, 0xf1, 0x5f,
2667 0x35, 0xe4, 0xa2, 0xee, 0x03, 0x1e, 0x65, 0xc1, 0x1e, 0x17, 0x1e, 0x88,
2668 0x91, 0xa3, 0xc6, 0x9a, 0xb1, 0x65, 0xaf, 0xc6, 0x36, 0x5e, 0xfd, 0x1c,
2669 0xe3, 0xd6, 0x93, 0xf0, 0x79, 0x86, 0xc8, 0xa5, 0xdc, 0xc4, 0x60, 0xc7,
2670 0x48, 0x39, 0x4a, 0xc8, 0xb3, 0xa5, 0xdc, 0x5c, 0x3a, 0xe2, 0x46, 0x0d,
2671 0xfd, 0x99, 0x3b, 0x73, 0x1e, 0x63, 0x7b, 0xa0, 0x96, 0x84, 0x3f, 0x37,
2672 0x0b, 0x35, 0xa9, 0x57, 0x06, 0x50, 0x9e, 0xd9, 0x84, 0x74, 0x2c, 0x88,
2673 0x52, 0xf2, 0xfb, 0x06, 0x8e, 0x77, 0x7f, 0x4c, 0x63, 0x3f, 0x59, 0x6e,
2674 0xb3, 0x9c, 0xcf, 0xf4, 0x26, 0xbc, 0x6b, 0xa5, 0xde, 0x78, 0x45, 0x7f,
2675 0x0d, 0x45, 0x7d, 0x37, 0xce, 0x9c, 0x69, 0x21, 0xcc, 0x21, 0xf7, 0x68,
2676 0x7d, 0x1a, 0xd9, 0xf3, 0x67, 0x2b, 0x72, 0xeb, 0x09, 0xca, 0x7a, 0x9c,
2677 0x6d, 0xd4, 0x83, 0xd9, 0x98, 0xc1, 0xf5, 0x5c, 0xa4, 0xde, 0xdc, 0xcb,
2678 0xb9, 0x5e, 0x63, 0xec, 0xd0, 0xc9, 0xb5, 0xbc, 0x3f, 0xfc, 0x23, 0xa5,
2679 0x86, 0x6b, 0x99, 0x22, 0x57, 0xfd, 0x38, 0xe5, 0x51, 0x7c, 0x5c, 0xcb,
2680 0x77, 0x79, 0xff, 0x3b, 0x5c, 0xcb, 0xd6, 0xbd, 0xde, 0xd6, 0xe3, 0x8a,
2681 0xb7, 0x7d, 0x8d, 0xe2, 0x53, 0xb7, 0x2a, 0xa5, 0xb8, 0x38, 0x5c, 0x8e,
2682 0x4b, 0xf4, 0xbd, 0xd7, 0x86, 0x2b, 0x71, 0x79, 0xb8, 0x8a, 0x36, 0xa2,
2683 0xb1, 0x0f, 0xd3, 0x2c, 0xd3, 0xdc, 0x98, 0x4a, 0x3f, 0x8f, 0x19, 0xb1,
2684 0x5a, 0x7c, 0x9c, 0xde, 0x80, 0xf2, 0x98, 0xc4, 0x00, 0x1e, 0x7c, 0xc4,
2685 0xfb, 0x1f, 0xa6, 0x47, 0x51, 0xbc, 0xe7, 0x73, 0xb6, 0x31, 0xcd, 0xfb,
2686 0xb9, 0xbe, 0xcb, 0xe9, 0x0e, 0x94, 0xee, 0xd9, 0x08, 0xc7, 0x1e, 0xb3,
2687 0x6b, 0x4b, 0x08, 0x3f, 0xb3, 0x73, 0x2d, 0xdd, 0xba, 0x77, 0xe2, 0x2e,
2688 0x7b, 0x90, 0x7d, 0x8c, 0x2b, 0x0b, 0x32, 0x1b, 0x51, 0xbe, 0xc7, 0x83,
2689 0x67, 0x29, 0xc3, 0x51, 0x68, 0x81, 0x35, 0xca, 0x46, 0x14, 0x8c, 0x64,
2690 0xd7, 0xbf, 0x2e, 0x93, 0xb5, 0x8b, 0xfb, 0x1b, 0xa7, 0xc7, 0x32, 0x6e,
2691 0x8b, 0x77, 0x4f, 0xa6, 0x4b, 0x70, 0x3a, 0x25, 0xf2, 0x81, 0xea, 0x08,
2692 0x8f, 0xa2, 0x70, 0x0f, 0x31, 0x71, 0x58, 0xb7, 0xf8, 0x82, 0xd8, 0xc4,
2693 0x70, 0xfa, 0x76, 0x36, 0x15, 0xc4, 0xce, 0x44, 0x0d, 0xed, 0xa9, 0x16,
2694 0x2b, 0xf7, 0x48, 0x8d, 0x79, 0xe2, 0x5e, 0x17, 0xb5, 0xe8, 0x50, 0xfa,
2695 0x56, 0x7b, 0x6a, 0xa4, 0x6e, 0x0a, 0xb6, 0x9a, 0x98, 0xd4, 0xb3, 0x78,
2696 0x73, 0xcc, 0xaa, 0x61, 0x8b, 0x4d, 0xb6, 0x62, 0xcb, 0x00, 0xda, 0xf7,
2697 0x37, 0x8a, 0x4d, 0x3a, 0x31, 0x44, 0xbe, 0x7f, 0x91, 0xb1, 0xc3, 0x0c,
2698 0xed, 0x73, 0x62, 0x42, 0x01, 0x06, 0x87, 0x5d, 0xf8, 0xf1, 0xb0, 0x07,
2699 0xee, 0x58, 0x31, 0xc6, 0x29, 0xe3, 0x31, 0x72, 0x9c, 0x8f, 0x18, 0x65,
2700 0x8f, 0xd2, 0xa7, 0x7e, 0x18, 0xad, 0x42, 0x26, 0x5d, 0x8b, 0xab, 0xc4,
2701 0x94, 0x34, 0xf7, 0xe3, 0x83, 0x68, 0x00, 0x2f, 0xa7, 0x83, 0x78, 0x3f,
2702 0x2a, 0xd8, 0x13, 0xc4, 0x11, 0xca, 0xaf, 0x28, 0xe6, 0x66, 0xbf, 0x82,
2703 0x43, 0x1e, 0x38, 0x63, 0x9a, 0x67, 0x28, 0xa7, 0x0b, 0x8e, 0x4c, 0x2b,
2704 0xed, 0x46, 0xce, 0x44, 0x88, 0x1f, 0x70, 0xe8, 0x43, 0x8c, 0xb9, 0x07,
2705 0x83, 0xf9, 0xfc, 0xaf, 0xd7, 0x3d, 0x81, 0x99, 0xb4, 0x9d, 0x2f, 0x4d,
2706 0x55, 0x93, 0x98, 0x2a, 0x19, 0xba, 0x12, 0xd5, 0x24, 0x17, 0x48, 0x6c,
2707 0x37, 0x14, 0xe7, 0x62, 0x72, 0x89, 0xaa, 0xad, 0x92, 0x17, 0xe6, 0xfc,
2708 0xe5, 0x6c, 0x99, 0xc9, 0x76, 0x57, 0x31, 0xff, 0xc0, 0xd6, 0x59, 0xb9,
2709 0x1c, 0x93, 0x7a, 0x83, 0xf7, 0xe5, 0x31, 0x5e, 0xe2, 0xb5, 0xdd, 0xa1,
2710 0xd7, 0xa2, 0x7f, 0x3f, 0x4b, 0xea, 0x71, 0xc7, 0x11, 0xa4, 0x4c, 0x6e,
2711 0x17, 0x0f, 0x98, 0x78, 0x93, 0x18, 0x72, 0x39, 0x29, 0xbc, 0x48, 0xf8,
2712 0x50, 0x17, 0x7d, 0x4f, 0x19, 0xf9, 0x80, 0x86, 0x6d, 0xe4, 0xeb, 0xbe,
2713 0xf8, 0x04, 0xe3, 0x91, 0xaf, 0x93, 0x93, 0x95, 0xb3, 0x9b, 0x1f, 0x70,
2714 0xbc, 0x56, 0xec, 0xa4, 0x2d, 0x16, 0x69, 0x77, 0x61, 0x25, 0xf9, 0x8e,
2715 0x43, 0xa3, 0xcb, 0x78, 0x58, 0xfc, 0x86, 0xe4, 0x70, 0x54, 0xa9, 0x95,
2716 0xad, 0x7d, 0x1d, 0xf7, 0xa2, 0xbd, 0xda, 0x05, 0xa9, 0x6f, 0xbd, 0x81,
2717 0x25, 0x48, 0x3d, 0x2a, 0xbe, 0x93, 0x1c, 0x39, 0xac, 0x19, 0xe7, 0x31,
2718 0xcf, 0x62, 0xdd, 0xc5, 0x61, 0x99, 0x4f, 0x15, 0x65, 0xaf, 0xe2, 0x1d,
2719 0xca, 0xf5, 0x52, 0xd4, 0x37, 0x75, 0x1f, 0x1a, 0x4e, 0x5d, 0xb2, 0x4b,
2720 0xed, 0x4f, 0xda, 0x07, 0xa1, 0xb1, 0xbf, 0x4f, 0xa3, 0x21, 0xf4, 0xa9,
2721 0x72, 0x2d, 0xfc, 0xb0, 0x15, 0xdd, 0x43, 0x32, 0x07, 0xd3, 0xac, 0x24,
2722 0x1e, 0x3e, 0x6c, 0x8d, 0x2f, 0x63, 0xdf, 0x1a, 0x5b, 0x78, 0x19, 0x49,
2723 0xe7, 0xe3, 0x8b, 0x49, 0x1c, 0x4e, 0x52, 0xfe, 0x8b, 0xdf, 0xa6, 0x1c,
2724 0x26, 0x31, 0x9c, 0xd2, 0xc8, 0x1d, 0x4b, 0xe0, 0xa9, 0x0e, 0x62, 0x17,
2725 0xfd, 0x75, 0x8c, 0xed, 0xd3, 0xb1, 0x12, 0x18, 0xd5, 0xd9, 0x31, 0xbf,
2726 0x1e, 0xbf, 0x6a, 0x4e, 0x3c, 0x64, 0xc5, 0xa9, 0xbc, 0xfe, 0x1d, 0x9f,
2727 0x99, 0x2d, 0xc7, 0x32, 0xb1, 0x3e, 0x76, 0xd9, 0x9c, 0x68, 0x9d, 0xfe,
2728 0x7b, 0x85, 0x75, 0xa6, 0x2a, 0x62, 0xab, 0xe6, 0x77, 0x56, 0x2e, 0xdd,
2729 0x94, 0xcb, 0x0c, 0xed, 0x2d, 0xf3, 0x41, 0x6b, 0x5e, 0xef, 0xcd, 0x12,
2730 0x2e, 0x5f, 0x17, 0xf7, 0xcc, 0x46, 0x71, 0x15, 0xdb, 0x10, 0x43, 0xc3,
2731 0x5a, 0xd3, 0x29, 0xfc, 0x8b, 0x79, 0xe1, 0xa6, 0x7e, 0x66, 0xf2, 0x9e,
2732 0xf8, 0x9e, 0x0b, 0xb9, 0x9c, 0x8f, 0x3b, 0xc7, 0xf7, 0x27, 0x71, 0x3c,
2733 0x29, 0xd8, 0xef, 0xc1, 0x13, 0x92, 0x9b, 0x52, 0xbd, 0xbd, 0x06, 0x26,
2734 0xc8, 0xf1, 0xde, 0xa6, 0xec, 0x25, 0xff, 0x38, 0x41, 0x9e, 0x37, 0xdd,
2735 0x37, 0x45, 0x90, 0xaa, 0x92, 0x1a, 0x8c, 0xe0, 0xe7, 0x24, 0xb6, 0x27,
2736 0x7f, 0x4a, 0x1c, 0xfb, 0x98, 0xbc, 0xa7, 0x8b, 0x9c, 0x7a, 0x12, 0x5b,
2737 0x52, 0xcd, 0x78, 0x69, 0x6f, 0x0b, 0x71, 0x45, 0xb0, 0xd1, 0x77, 0xea,
2738 0xa2, 0xbd, 0x19, 0xfb, 0x0f, 0xa5, 0x91, 0x1a, 0x11, 0x7f, 0x28, 0x3e,
2739 0x57, 0x7c, 0xa1, 0x86, 0x68, 0xe2, 0x24, 0x0c, 0x7e, 0xef, 0x4c, 0x6c,
2740 0x44, 0x64, 0xe4, 0x2d, 0xf2, 0xf8, 0x49, 0x2c, 0xef, 0xd3, 0xd6, 0x1e,
2741 0xc4, 0x24, 0x56, 0xd1, 0x57, 0x26, 0x13, 0x2d, 0xec, 0xbf, 0x19, 0x3d,
2742 0x7b, 0xbd, 0x56, 0xbe, 0x49, 0x62, 0xf8, 0x6d, 0x63, 0x11, 0x18, 0x43,
2743 0x72, 0x36, 0xc3, 0x85, 0x60, 0xdc, 0xa3, 0x7c, 0x48, 0x3e, 0xdc, 0x10,
2744 0xf7, 0x32, 0x06, 0xf3, 0x1a, 0xab, 0x14, 0x9f, 0xa7, 0xc0, 0x26, 0xb5,
2745 0xc0, 0x19, 0x38, 0xa5, 0x2b, 0x28, 0xba, 0x57, 0x41, 0x88, 0xbe, 0xca,
2746 0x33, 0x8b, 0x3e, 0x64, 0x48, 0x47, 0xcf, 0x00, 0xd7, 0x7b, 0x7d, 0xdf,
2747 0x64, 0xbf, 0x56, 0xb3, 0x3f, 0xd9, 0xbb, 0x16, 0xf4, 0x8c, 0xf9, 0x3a,
2748 0x4e, 0xc1, 0x6d, 0x71, 0xab, 0x9e, 0x81, 0xeb, 0x79, 0x81, 0xd2, 0x8f,
2749 0x1b, 0xbd, 0x81, 0x19, 0x8a, 0xb4, 0xdd, 0x4a, 0xcc, 0x9a, 0xde, 0xde,
2750 0x50, 0x92, 0x8b, 0xc9, 0x3f, 0x6d, 0x62, 0x17, 0xdd, 0x96, 0xbd, 0x88,
2751 0x2c, 0x7a, 0x92, 0x11, 0xea, 0xf4, 0x4f, 0xcc, 0x54, 0x6b, 0x2b, 0xe7,
2752 0xd9, 0x28, 0xb5, 0x31, 0x0b, 0x13, 0xce, 0x4a, 0x2e, 0xce, 0x29, 0x98,
2753 0xd0, 0xdd, 0xee, 0xa2, 0x3e, 0x15, 0x12, 0x97, 0x8a, 0x46, 0x5d, 0x70,
2754 0x1d, 0x2c, 0x41, 0xe1, 0xa0, 0xf0, 0x31, 0xc9, 0x41, 0xa8, 0xb0, 0x8f,
2755 0x96, 0xd2, 0x06, 0xb8, 0x87, 0xa3, 0xb4, 0xb1, 0xa8, 0x1b, 0xf3, 0x46,
2756 0xdd, 0xf8, 0x31, 0x31, 0xa0, 0x66, 0x54, 0xc3, 0x38, 0x31, 0xc0, 0x3d,
2757 0x1a, 0xc0, 0x58, 0x34, 0x88, 0x19, 0xa3, 0xe3, 0xca, 0x1b, 0xe9, 0x66,
2758 0xee, 0xb7, 0x8c, 0x23, 0x32, 0xcc, 0xef, 0xa9, 0xec, 0x67, 0x0b, 0xb1,
2759 0x4e, 0xf6, 0x36, 0x80, 0x1d, 0x03, 0x69, 0x2c, 0xdb, 0x63, 0xe2, 0x9f,
2760 0xf4, 0x06, 0x77, 0x91, 0x22, 0xb1, 0x80, 0x89, 0x34, 0xfd, 0xda, 0x0a,
2761 0xdd, 0xbb, 0x56, 0xce, 0x3b, 0xb7, 0x57, 0x99, 0x28, 0x08, 0x79, 0x75,
2762 0xa2, 0xfb, 0xda, 0x22, 0x45, 0x7c, 0x54, 0x83, 0x67, 0x03, 0xe6, 0x22,
2763 0x5b, 0x57, 0xbc, 0x0f, 0x1b, 0x54, 0x85, 0xb6, 0xd8, 0x82, 0x9d, 0x15,
2764 0x86, 0xeb, 0x4a, 0xa3, 0x69, 0xae, 0x0b, 0xd5, 0xcd, 0xb2, 0x72, 0xd0,
2765 0xb6, 0xf5, 0xfc, 0x6e, 0xe3, 0x9a, 0x65, 0xdd, 0x1d, 0x88, 0xed, 0x56,
2766 0x90, 0xf6, 0x77, 0x20, 0x3a, 0xdc, 0x21, 0xfc, 0x89, 0x78, 0xd0, 0x4b,
2767 0x3c, 0x30, 0xbb, 0x9e, 0x0e, 0x3d, 0x88, 0xcb, 0x96, 0xc7, 0x97, 0x67,
2768 0xbc, 0x01, 0x8f, 0x6d, 0xfa, 0x1e, 0xe8, 0xb3, 0x25, 0xcf, 0x21, 0x76,
2769 0xd3, 0xdc, 0x27, 0xbc, 0xd9, 0xdf, 0xdb, 0xc3, 0xbd, 0x7f, 0xe8, 0x80,
2770 0xf8, 0x17, 0xd3, 0xec, 0x25, 0x2f, 0x45, 0x85, 0xac, 0x41, 0x43, 0x3c,
2771 0x61, 0x7e, 0x5c, 0xa3, 0xf9, 0xa6, 0x76, 0xd1, 0x8f, 0x9f, 0xdf, 0xd3,
2772 0xb0, 0x61, 0x83, 0x70, 0x96, 0x45, 0x1a, 0x63, 0xe9, 0x34, 0xce, 0x8d,
2773 0xcc, 0x47, 0xea, 0x21, 0xae, 0x87, 0xfb, 0xe4, 0x8c, 0x7f, 0xc1, 0x38,
2774 0x43, 0xb0, 0x4f, 0x53, 0x0f, 0x13, 0xf7, 0x6c, 0xa3, 0x7e, 0x6c, 0xa9,
2775 0x80, 0x71, 0xa5, 0x51, 0xc6, 0xbf, 0x3e, 0x7f, 0xae, 0xb7, 0x19, 0xbb,
2776 0xf6, 0x0a, 0xaf, 0x10, 0xfe, 0xe5, 0x33, 0x3e, 0x40, 0x0b, 0x92, 0x63,
2777 0xd9, 0xb1, 0xa2, 0x89, 0x5b, 0xf5, 0x44, 0xf6, 0xfc, 0x24, 0x76, 0x50,
2778 0x27, 0x5d, 0xec, 0x9f, 0x3e, 0x85, 0xfd, 0x69, 0x81, 0x22, 0x19, 0x6f,
2779 0xf4, 0x27, 0xe6, 0xce, 0x6a, 0x91, 0x8d, 0xf4, 0xff, 0x9b, 0x6a, 0xc1,
2780 0x8b, 0x75, 0xa1, 0xaf, 0x5a, 0xeb, 0x15, 0x7e, 0x4b, 0xce, 0x3a, 0x3f,
2781 0x1f, 0x79, 0xe6, 0x76, 0xf3, 0xf9, 0x9c, 0xed, 0x64, 0x4e, 0x1d, 0xd8,
2782 0xb1, 0x1b, 0x46, 0xb1, 0xa6, 0x45, 0xe6, 0x2b, 0x1d, 0xe8, 0xa5, 0x7c,
2783 0xb7, 0x25, 0x3b, 0xb0, 0x9f, 0xf6, 0x3a, 0xa8, 0x1f, 0xab, 0xb1, 0xa1,
2784 0x7e, 0xca, 0x8e, 0x89, 0x7f, 0x94, 0x9a, 0xc5, 0x82, 0x45, 0x7e, 0xda,
2785 0x56, 0x07, 0xe2, 0xa9, 0x73, 0xb3, 0xad, 0x9a, 0xa8, 0x4d, 0x7c, 0x9e,
2786 0xc8, 0xa2, 0x13, 0xc5, 0x7d, 0x27, 0xe1, 0xec, 0xeb, 0x44, 0x91, 0x7f,
2787 0x09, 0x56, 0x84, 0x2e, 0x98, 0x97, 0x35, 0x87, 0xfb, 0x38, 0xe5, 0x73,
2788 0x2c, 0x58, 0xc3, 0x98, 0x91, 0x71, 0xca, 0xd0, 0x1c, 0xda, 0x7d, 0x23,
2789 0x76, 0x8c, 0xc9, 0x59, 0x08, 0x1b, 0x56, 0x2d, 0x96, 0x58, 0x5c, 0xa1,
2790 0x5e, 0xcf, 0x62, 0x3c, 0xa9, 0xa9, 0xcf, 0x59, 0xe7, 0x56, 0xc8, 0xb9,
2791 0xaa, 0x3c, 0x78, 0xd2, 0x3a, 0xaf, 0x21, 0xf7, 0x37, 0x31, 0x0e, 0xd8,
2792 0x84, 0x9a, 0x98, 0x61, 0x8a, 0xbc, 0x8f, 0x23, 0xf2, 0xa2, 0x8d, 0xf3,
2793 0x68, 0x5a, 0xe4, 0xdf, 0x30, 0xa5, 0x88, 0x3e, 0xfb, 0xdb, 0x47, 0x15,
2794 0xdd, 0xb5, 0x3a, 0xa3, 0x20, 0xd0, 0xc7, 0xbe, 0x42, 0x23, 0xb3, 0xb3,
2795 0xb9, 0xf1, 0x3c, 0xbf, 0xdb, 0x44, 0x5e, 0xb0, 0x09, 0x65, 0x31, 0xe1,
2796 0xe4, 0x82, 0x0b, 0x91, 0xa5, 0xe5, 0x7c, 0x3e, 0x1d, 0xf2, 0xb7, 0x96,
2797 0x2a, 0xc2, 0x7d, 0xfc, 0x4d, 0xab, 0x14, 0xe1, 0x2a, 0xf2, 0x9c, 0xee,
2798 0xaa, 0xcf, 0x9c, 0xcf, 0xd5, 0x31, 0x1b, 0x89, 0x0d, 0x72, 0xce, 0x24,
2799 0x7f, 0xd6, 0xea, 0x46, 0xce, 0xda, 0x19, 0x97, 0xd8, 0xe1, 0x68, 0x68,
2800 0x59, 0xb4, 0x89, 0x38, 0x67, 0x2e, 0x39, 0x44, 0xbd, 0xbf, 0x88, 0x2a,
2801 0xfc, 0x73, 0x54, 0x30, 0xcd, 0x83, 0x9f, 0x47, 0x0b, 0x25, 0x26, 0x4e,
2802 0x49, 0x5e, 0xf6, 0x4c, 0xd2, 0x30, 0x29, 0xd7, 0x96, 0x55, 0xd4, 0xa5,
2803 0x40, 0xa8, 0x14, 0xa8, 0xee, 0x7e, 0xd2, 0x69, 0xc5, 0xe8, 0x65, 0xa8,
2804 0x20, 0xfe, 0xf7, 0x0d, 0xfd, 0xa1, 0xf3, 0x0e, 0xc4, 0xe0, 0x62, 0xc9,
2805 0x15, 0xda, 0xb1, 0x2d, 0xf4, 0x1b, 0x33, 0xd5, 0x26, 0xcf, 0xd4, 0xe2,
2806 0xdc, 0x6e, 0xd1, 0xd3, 0x00, 0x0a, 0xe3, 0xe7, 0xa9, 0x93, 0x2a, 0xce,
2807 0x46, 0x7d, 0xfa, 0x1a, 0xdb, 0xb7, 0xa8, 0xff, 0xf3, 0x6e, 0xc2, 0xed,
2808 0x79, 0xda, 0x03, 0x78, 0xdc, 0xc2, 0xed, 0x30, 0xb6, 0xd0, 0x2f, 0x90,
2809 0xb7, 0xed, 0x7b, 0xd2, 0xa6, 0xd2, 0x9f, 0xfb, 0x54, 0x1f, 0x63, 0xea,
2810 0x2d, 0x1c, 0x43, 0xf8, 0xe4, 0x4c, 0xf2, 0xbd, 0xa7, 0xa3, 0x0d, 0x9e,
2811 0x5f, 0xe3, 0x09, 0xda, 0xa3, 0x8c, 0x21, 0x6b, 0xd2, 0x50, 0xca, 0xd8,
2812 0xf1, 0x04, 0xd7, 0xb1, 0xad, 0x22, 0x3b, 0x6e, 0x79, 0xae, 0xef, 0xf8,
2813 0x90, 0xf0, 0xad, 0x7b, 0xb0, 0xc6, 0xea, 0x3b, 0x68, 0xd9, 0xe6, 0xbe,
2814 0xa8, 0x82, 0x19, 0xf5, 0x1a, 0x12, 0xe9, 0x66, 0x6c, 0xac, 0xac, 0xc5,
2815 0xfe, 0xc4, 0x26, 0x2c, 0x24, 0xe7, 0x7d, 0xa4, 0xd2, 0xa0, 0x5f, 0x24,
2816 0x06, 0xc5, 0x35, 0x75, 0xbe, 0xf2, 0x8d, 0x5c, 0xae, 0xba, 0x0a, 0x8e,
2817 0xb8, 0xf8, 0xbb, 0x02, 0xf4, 0xab, 0x73, 0x51, 0x62, 0x9d, 0x81, 0xcc,
2818 0xf6, 0xbd, 0x6b, 0xc8, 0x9b, 0xf3, 0x81, 0x44, 0x8d, 0xb8, 0x75, 0x4e,
2819 0x25, 0xf0, 0x3c, 0x79, 0x44, 0x8a, 0xde, 0xaf, 0x20, 0xac, 0xa5, 0xd6,
2820 0xa3, 0x08, 0xc6, 0x2c, 0xc1, 0x43, 0x79, 0x66, 0xce, 0x2d, 0x73, 0xaa,
2821 0xcc, 0xcd, 0x29, 0x7f, 0xff, 0x34, 0xef, 0x89, 0x6e, 0x09, 0xb7, 0x90,
2822 0xdf, 0x8b, 0xd1, 0x4a, 0x7d, 0xaa, 0xe2, 0x9c, 0x13, 0x09, 0xb9, 0xef,
2823 0xd5, 0x0d, 0x5b, 0x23, 0x3e, 0xdb, 0x93, 0xd5, 0xc1, 0xb5, 0x75, 0xdc,
2824 0xff, 0xf2, 0x46, 0x4c, 0x8d, 0x88, 0x2f, 0xfb, 0xc3, 0x67, 0x50, 0x8c,
2825 0xeb, 0x67, 0x50, 0x44, 0xae, 0xde, 0x53, 0xef, 0xa0, 0x61, 0xe2, 0x31,
2826 0xdb, 0x61, 0x13, 0x33, 0x45, 0xc6, 0x71, 0xb7, 0xc4, 0x9a, 0x36, 0x72,
2827 0x08, 0x23, 0x3d, 0xee, 0x16, 0x3f, 0xe9, 0x88, 0x03, 0xf3, 0xe2, 0x06,
2828 0x0a, 0xc3, 0xda, 0xbe, 0x2b, 0xf6, 0x6b, 0x66, 0xfb, 0xac, 0x39, 0x8c,
2829 0xf9, 0x6e, 0xac, 0xb9, 0x97, 0x73, 0xb7, 0x6b, 0x3f, 0x31, 0xef, 0xab,
2830 0x92, 0x39, 0xfe, 0xd2, 0x9d, 0x3d, 0xfb, 0x70, 0x07, 0xe5, 0x92, 0x97,
2831 0x89, 0x49, 0xfd, 0xf9, 0x2b, 0xf3, 0x9b, 0x37, 0xdd, 0x17, 0x2e, 0x23,
2832 0x7a, 0x3a, 0xfd, 0x3c, 0xa0, 0xe8, 0xac, 0xd4, 0x56, 0x26, 0x71, 0x28,
2833 0x29, 0xba, 0x2b, 0x32, 0x8e, 0xe0, 0x22, 0x79, 0x61, 0x41, 0xff, 0x24,
2834 0x06, 0xc9, 0x0b, 0xed, 0x71, 0xef, 0x3e, 0x4a, 0x12, 0x1b, 0xd5, 0x25,
2835 0xc4, 0xea, 0x32, 0xce, 0x23, 0x3f, 0x87, 0x3a, 0x4b, 0xee, 0xe2, 0x5f,
2836 0x76, 0x72, 0xbd, 0x45, 0xe4, 0x48, 0xcd, 0xb1, 0x42, 0x68, 0x15, 0xe5,
2837 0x28, 0xd5, 0xe4, 0x0c, 0x7c, 0xb6, 0x5d, 0x94, 0x73, 0x29, 0xd1, 0xe6,
2838 0x62, 0x95, 0xd5, 0xd6, 0x63, 0x9d, 0x01, 0xd1, 0x2a, 0xc5, 0xff, 0x8a,
2839 0xcf, 0x25, 0xdf, 0x5e, 0x2c, 0x3e, 0x37, 0xcc, 0xb9, 0xcd, 0xc9, 0xd5,
2840 0x99, 0x56, 0x59, 0xf7, 0xf7, 0x25, 0x2e, 0x7c, 0xd9, 0x9f, 0xf8, 0x3d,
2841 0x9f, 0xe9, 0x80, 0xba, 0xb7, 0x18, 0x0f, 0xfd, 0x65, 0x09, 0xf4, 0xca,
2842 0x6c, 0xae, 0x7c, 0x5e, 0x38, 0x1a, 0x32, 0x13, 0xc2, 0x93, 0xee, 0x84,
2843 0x67, 0xb6, 0x8c, 0x25, 0x18, 0x20, 0x7b, 0x21, 0x7b, 0x27, 0x39, 0xdc,
2844 0xdb, 0xd5, 0x18, 0xbc, 0xea, 0xc4, 0xf5, 0x7d, 0x98, 0x0f, 0xed, 0xe1,
2845 0x2a, 0xae, 0x2d, 0xeb, 0x23, 0x76, 0xd0, 0x47, 0x04, 0xfc, 0x59, 0x0c,
2846 0x93, 0x1a, 0xbd, 0x93, 0x3e, 0x62, 0x84, 0x3e, 0xe2, 0xa2, 0x5e, 0x8e,
2847 0xe5, 0x39, 0x1f, 0xd1, 0x6e, 0xd3, 0xad, 0xfe, 0x9d, 0xda, 0x7d, 0x35,
2848 0xc4, 0x30, 0x8e, 0xf1, 0xb5, 0x9b, 0xb8, 0xd8, 0x4c, 0xed, 0x97, 0xe6,
2849 0x23, 0x55, 0xb2, 0xc6, 0xe6, 0x9a, 0x6c, 0x8e, 0xbc, 0x03, 0xfb, 0x88,
2850 0x8f, 0x35, 0x9a, 0x3c, 0xa3, 0x25, 0x6b, 0xec, 0x1d, 0xe8, 0x67, 0xff,
2851 0x7d, 0xc4, 0xc8, 0x18, 0x31, 0x52, 0x5f, 0x78, 0xec, 0x45, 0x15, 0xf5,
2852 0x1d, 0x64, 0x0f, 0xdf, 0x16, 0x6c, 0x79, 0x99, 0xd8, 0xf2, 0x3c, 0x31,
2853 0x72, 0x67, 0x4a, 0xc6, 0x91, 0xf1, 0xf2, 0xe3, 0x48, 0x9f, 0xff, 0x66,
2854 0xae, 0xaf, 0x92, 0xb9, 0xde, 0x6e, 0x1e, 0xf2, 0xdb, 0x9f, 0xf2, 0xef,
2855 0x62, 0x8b, 0x43, 0xf5, 0x26, 0xa6, 0x9f, 0xa9, 0x98, 0x24, 0xbe, 0x5a,
2856 0x71, 0x00, 0xfd, 0x6b, 0x04, 0x2b, 0x17, 0xab, 0xb8, 0x1c, 0x9d, 0x44,
2857 0xd1, 0x81, 0x3c, 0x16, 0x99, 0x4b, 0x4e, 0x10, 0x87, 0x06, 0x21, 0xd8,
2858 0xd3, 0xc4, 0x3d, 0x30, 0x68, 0x13, 0x65, 0x18, 0x4d, 0xca, 0xd9, 0x0b,
2859 0x13, 0xbb, 0x42, 0x2e, 0x72, 0xd8, 0xee, 0xe3, 0x05, 0x96, 0x4f, 0x28,
2860 0x23, 0x5e, 0xe7, 0xf9, 0xb5, 0x70, 0x6b, 0xc1, 0x1a, 0xc6, 0x11, 0x43,
2861 0x76, 0x14, 0x2c, 0xca, 0xc6, 0x0e, 0xe7, 0xda, 0xa4, 0x5d, 0x2d, 0x06,
2862 0x77, 0x8b, 0xae, 0xf9, 0x50, 0xa3, 0x9d, 0x67, 0x2c, 0x01, 0xbc, 0x1b,
2863 0xb5, 0xdd, 0xe9, 0x22, 0x07, 0xee, 0xd2, 0x17, 0xe3, 0xda, 0xcc, 0x2d,
2864 0xb4, 0x6f, 0x37, 0x7f, 0x9b, 0xc0, 0xc1, 0xa8, 0x0b, 0x05, 0x56, 0x8d,
2865 0xb2, 0x9c, 0xeb, 0xc9, 0xea, 0xcb, 0x36, 0xea, 0x4b, 0x21, 0x63, 0xb3,
2866 0x15, 0x96, 0x5d, 0x4a, 0x3f, 0x93, 0xd6, 0xbb, 0x32, 0xda, 0x62, 0xe1,
2867 0xad, 0x41, 0xfa, 0xc0, 0x32, 0xc4, 0xfb, 0xba, 0x70, 0x36, 0x54, 0x86,
2868 0xd8, 0x01, 0xb1, 0xa7, 0x5a, 0xc1, 0x4d, 0x8e, 0xdb, 0x44, 0xf9, 0xa8,
2869 0xc4, 0x95, 0x86, 0x4e, 0xbb, 0xbd, 0x0c, 0x17, 0x2a, 0x18, 0xaf, 0x5a,
2870 0xef, 0x13, 0xb5, 0x62, 0x7f, 0x6e, 0x8f, 0x54, 0xf2, 0x9b, 0xd6, 0xeb,
2871 0x7c, 0x39, 0xbf, 0x96, 0xbc, 0x7d, 0x66, 0x6b, 0xe4, 0x3d, 0xe4, 0x30,
2872 0x2f, 0x49, 0x3e, 0xc8, 0xe6, 0xa3, 0xdf, 0x60, 0x5c, 0x34, 0x26, 0xb2,
2873 0xce, 0xeb, 0xd6, 0xeb, 0x35, 0xd9, 0x33, 0x3d, 0xf9, 0x3d, 0xc8, 0x5f,
2874 0x6b, 0x6b, 0x8b, 0x95, 0x5f, 0x98, 0xcf, 0x56, 0xcb, 0xfc, 0xae, 0x32,
2875 0x0e, 0xfb, 0x31, 0x7f, 0x5f, 0x86, 0x9e, 0xa1, 0xe9, 0x7e, 0x41, 0x6c,
2876 0xce, 0x73, 0xd3, 0xd9, 0xc3, 0x8a, 0xb8, 0xbc, 0xbf, 0x75, 0x34, 0xf4,
2877 0x24, 0xf7, 0xc1, 0xbf, 0xb0, 0xc1, 0xca, 0xa5, 0x90, 0xe3, 0x32, 0xfe,
2878 0x10, 0x3c, 0x35, 0xe8, 0xcf, 0xcb, 0xf0, 0xb3, 0xa4, 0xf8, 0x57, 0x13,
2879 0x85, 0xa1, 0x12, 0xfa, 0xbb, 0xee, 0xe7, 0x2a, 0x2c, 0xce, 0x5c, 0x86,
2880 0x4a, 0xea, 0x5e, 0xff, 0xd0, 0xed, 0xf4, 0xfc, 0x86, 0x0f, 0x48, 0x87,
2881 0x14, 0x62, 0xc2, 0x6f, 0xcc, 0x5d, 0x8f, 0x66, 0x9f, 0x39, 0x97, 0x74,
2882 0xe1, 0xa3, 0x50, 0x3b, 0x26, 0x2a, 0xc2, 0x18, 0x48, 0x14, 0xa1, 0x7d,
2883 0x56, 0xbd, 0xf5, 0xce, 0x45, 0x4d, 0xdc, 0x83, 0xf3, 0x51, 0x27, 0x9a,
2884 0x66, 0x7b, 0xac, 0x7c, 0x92, 0x8d, 0x76, 0xf1, 0x76, 0x34, 0x42, 0x5f,
2885 0xe0, 0xb9, 0xc9, 0x3f, 0x14, 0x68, 0x8b, 0x70, 0x7f, 0x0e, 0xc3, 0xf7,
2886 0x27, 0x3e, 0x27, 0xc6, 0x94, 0x1b, 0x33, 0xc3, 0x65, 0xb8, 0x7b, 0x40,
2887 0xce, 0x29, 0x48, 0x9d, 0x4a, 0x9b, 0x9a, 0xaf, 0x94, 0x61, 0xc9, 0x90,
2888 0xe0, 0xb9, 0x9c, 0xfd, 0x48, 0x87, 0x5c, 0xb1, 0x36, 0xee, 0x51, 0x27,
2889 0xea, 0xf7, 0x5a, 0x72, 0x55, 0xed, 0x8a, 0xd9, 0x75, 0x49, 0x8f, 0xe8,
2890 0xf4, 0x67, 0x9d, 0xf7, 0x53, 0xef, 0xa7, 0x42, 0xde, 0xf6, 0x99, 0x76,
2891 0xad, 0xe3, 0x57, 0x4a, 0x10, 0xa3, 0x19, 0xa0, 0x6f, 0x24, 0x80, 0x0f,
2892 0x12, 0xc2, 0xed, 0x03, 0x78, 0x7f, 0x2c, 0x88, 0x77, 0xe8, 0x87, 0x8a,
2893 0xe2, 0xde, 0xc8, 0x33, 0x8c, 0xdd, 0xde, 0xe5, 0x75, 0x61, 0x5c, 0xc7,
2894 0x15, 0xca, 0xcf, 0x19, 0x6f, 0xc4, 0xa5, 0xb1, 0x6f, 0xe0, 0xf2, 0x5e,
2895 0x05, 0xc7, 0xb4, 0x6f, 0xe0, 0xe2, 0xa1, 0x4e, 0x2c, 0xda, 0x2b, 0x67,
2896 0xf5, 0x8e, 0x86, 0x54, 0xfa, 0x81, 0x27, 0xeb, 0xcc, 0xae, 0x17, 0xf4,
2897 0x7a, 0x62, 0x86, 0x57, 0x6f, 0x67, 0x6c, 0x24, 0xf8, 0x1d, 0xb1, 0xc9,
2898 0x9e, 0xc9, 0xde, 0x75, 0xe2, 0xb2, 0x85, 0xd9, 0xb7, 0xc7, 0x89, 0x1b,
2899 0x78, 0x2d, 0xe3, 0x88, 0x6d, 0xdf, 0x81, 0x57, 0x19, 0x94, 0x6e, 0x61,
2900 0x3b, 0x17, 0x71, 0xee, 0xe9, 0x68, 0x11, 0x0a, 0xab, 0xcb, 0x2d, 0x7b,
2901 0x2b, 0x8e, 0x07, 0x70, 0x9a, 0xb2, 0x5b, 0x59, 0xed, 0xe5, 0xb5, 0xf8,
2902 0xd8, 0x20, 0xe3, 0x93, 0x99, 0xf8, 0xe0, 0x26, 0xdf, 0xfa, 0xaa, 0x85,
2903 0x0d, 0x0e, 0xed, 0x81, 0x39, 0x59, 0x6c, 0x20, 0xa0, 0x13, 0x93, 0x25,
2904 0x27, 0x58, 0xae, 0x69, 0x1b, 0xbe, 0x4b, 0x1b, 0x4f, 0x87, 0x8e, 0xfd,
2905 0x49, 0x29, 0x39, 0xf0, 0x0b, 0xa1, 0x7a, 0xa3, 0x02, 0x2b, 0x78, 0x7f,
2906 0x62, 0x91, 0x8a, 0x75, 0xfc, 0xf6, 0xb3, 0x5d, 0x90, 0xf3, 0xb8, 0x6a,
2907 0xa6, 0x54, 0x1f, 0xff, 0xae, 0xa5, 0x2f, 0xdf, 0x84, 0xb3, 0xb1, 0x86,
2908 0xf6, 0x11, 0xe5, 0x8a, 0x69, 0x54, 0xd7, 0xf1, 0xb7, 0x2a, 0x9c, 0x8b,
2909 0x7a, 0x27, 0x0e, 0xa1, 0xc1, 0x33, 0xa5, 0xec, 0x37, 0x0d, 0x55, 0xf6,
2910 0x47, 0xd6, 0x2b, 0xcf, 0xdf, 0xc5, 0xfb, 0x17, 0xa6, 0xe9, 0xe1, 0x8d,
2911 0xf8, 0xca, 0x79, 0x5d, 0xff, 0x84, 0x83, 0x98, 0x4b, 0x86, 0xf5, 0x06,
2912 0x75, 0x0b, 0xb1, 0x20, 0xa2, 0xde, 0x4e, 0xff, 0x8a, 0xa8, 0x7f, 0x61,
2913 0xc6, 0x8b, 0x65, 0x50, 0x2d, 0x5f, 0xd4, 0x8a, 0xe4, 0xd0, 0x74, 0x1e,
2914 0x29, 0x7a, 0x97, 0xe5, 0xa4, 0xed, 0x15, 0xdd, 0xc7, 0x9d, 0xf4, 0x87,
2915 0x09, 0x62, 0x78, 0x9c, 0x18, 0x5e, 0x48, 0x0c, 0xbf, 0xba, 0xa7, 0x18,
2916 0x67, 0xf7, 0x34, 0x21, 0x5d, 0x21, 0xcf, 0xd8, 0xe1, 0xe4, 0xea, 0x52,
2917 0x96, 0x6f, 0xb7, 0xa1, 0xa6, 0x7f, 0xa9, 0x9c, 0x75, 0x85, 0xf8, 0xd0,
2918 0x82, 0x38, 0x11, 0xb1, 0xd5, 0x0e, 0x87, 0xf5, 0x7e, 0xc1, 0x8c, 0x9b,
2919 0xf4, 0xcf, 0xa5, 0x15, 0xa2, 0xa5, 0x4a, 0xf0, 0xe1, 0xe2, 0x1c, 0xf1,
2920 0x99, 0x3f, 0xe5, 0x5c, 0x8e, 0x53, 0xa7, 0x9f, 0xd2, 0xef, 0x91, 0x1a,
2921 0x1d, 0xdb, 0xcb, 0x73, 0x12, 0xc3, 0x98, 0xd8, 0x41, 0x0d, 0xab, 0xaf,
2922 0x36, 0x91, 0xd0, 0xc3, 0xf4, 0x4f, 0x21, 0x44, 0x2a, 0x82, 0xf4, 0x4b,
2923 0x72, 0xad, 0xe2, 0x12, 0xe3, 0xaf, 0x4c, 0x50, 0xc1, 0x47, 0x5f, 0x13,
2924 0xbf, 0xef, 0xd7, 0xcf, 0x2a, 0xa7, 0x67, 0x65, 0xdf, 0x6b, 0x10, 0x8c,
2925 0x28, 0xb7, 0x30, 0xa2, 0xd0, 0xe2, 0x40, 0xb3, 0x2d, 0x6c, 0xf1, 0xd8,
2926 0xe4, 0x4c, 0x51, 0x34, 0x74, 0x6f, 0xa2, 0x61, 0xc2, 0x67, 0x27, 0x1f,
2927 0xfb, 0xe3, 0xaf, 0x91, 0x87, 0x59, 0x7c, 0x60, 0xba, 0xdf, 0x69, 0x02,
2928 0xa6, 0xcb, 0x23, 0x7f, 0x76, 0xd9, 0x93, 0xc5, 0xca, 0x72, 0xe1, 0x6d,
2929 0xff, 0xcf, 0x6c, 0xbd, 0x69, 0xfe, 0x79, 0x1c, 0xf9, 0x25, 0xaf, 0xe5,
2930 0x79, 0xb1, 0x3b, 0xea, 0x45, 0xfc, 0x1f, 0xcd, 0xc7, 0x2d, 0xee, 0x76,
2931 0x6c, 0x8e, 0x9c, 0xcb, 0x74, 0xf4, 0xff, 0xfd, 0x1c, 0x79, 0x9f, 0xc1,
2932 0x36, 0x8d, 0x03, 0x64, 0xfd, 0xea, 0x3b, 0xe6, 0x2a, 0x6b, 0xae, 0xa7,
2933 0x73, 0xed, 0x24, 0x56, 0x96, 0xb9, 0x28, 0xf8, 0x81, 0xd6, 0xa0, 0x9e,
2934 0x46, 0xa9, 0xe0, 0x49, 0x44, 0xea, 0x91, 0xc5, 0x9a, 0xcf, 0x7d, 0x90,
2935 0xdf, 0xbb, 0x78, 0xff, 0x35, 0xcd, 0xd1, 0xf4, 0x2c, 0xa4, 0x06, 0x6b,
2936 0xe3, 0x5e, 0x35, 0xb8, 0x4f, 0xc3, 0x1f, 0x29, 0x54, 0xa6, 0xcc, 0xf6,
2937 0x2a, 0x69, 0x93, 0xad, 0xc5, 0x42, 0x39, 0x6f, 0xe5, 0x49, 0xb2, 0x3a,
2938 0x53, 0x4b, 0x9d, 0x11, 0xec, 0x12, 0xde, 0xb1, 0x80, 0x6b, 0x57, 0x31,
2939 0x34, 0x26, 0x1c, 0xc1, 0x65, 0xf1, 0x20, 0xb5, 0xae, 0xce, 0xb3, 0x1e,
2940 0xca, 0x5c, 0x62, 0x2c, 0xb6, 0xea, 0xb8, 0xd3, 0x86, 0xb7, 0xee, 0xb4,
2941 0x85, 0x97, 0xfe, 0xd9, 0xfd, 0x8d, 0x77, 0xcf, 0x95, 0x77, 0x5f, 0xc8,
2942 0xe6, 0x24, 0x2f, 0xeb, 0x96, 0xba, 0xe1, 0x72, 0xf2, 0xaa, 0x41, 0xc6,
2943 0xf2, 0xcb, 0x83, 0xbf, 0x33, 0xbf, 0xed, 0x88, 0x78, 0xec, 0xa8, 0xf3,
2944 0xf4, 0xe0, 0x9a, 0x99, 0xaa, 0xb2, 0xee, 0xcf, 0x95, 0xf7, 0x0d, 0x9c,
2945 0xd2, 0x3f, 0xb9, 0xc8, 0xdd, 0x75, 0x26, 0xe3, 0x64, 0xdb, 0x32, 0x3b,
2946 0xed, 0x82, 0x32, 0x33, 0xeb, 0x67, 0xd5, 0xb9, 0x6d, 0x4a, 0x3d, 0xb5,
2947 0xa3, 0x0a, 0x47, 0xa8, 0xbf, 0x47, 0xc6, 0xc4, 0xff, 0xa9, 0x38, 0x4c,
2948 0x3b, 0x3d, 0x54, 0xef, 0xeb, 0xbc, 0xcc, 0xb8, 0xf1, 0x43, 0xf2, 0xf9,
2949 0x37, 0x34, 0x6f, 0xfb, 0x29, 0xc9, 0x29, 0x86, 0x1c, 0x38, 0x13, 0xbc,
2950 0x66, 0xe5, 0x78, 0x63, 0x07, 0x54, 0x0c, 0x26, 0xb2, 0xf6, 0xfe, 0x0a,
2951 0xed, 0xf8, 0xc6, 0x99, 0x03, 0x1d, 0x5b, 0x06, 0xc4, 0x3e, 0x1a, 0x2d,
2952 0x3b, 0xba, 0x91, 0x13, 0x12, 0xbc, 0x16, 0xbb, 0x78, 0x42, 0x6a, 0x71,
2953 0x46, 0x0a, 0x0e, 0xca, 0x77, 0x39, 0xf9, 0xae, 0xf8, 0xd8, 0x00, 0x63,
2954 0x5b, 0x07, 0xed, 0xe7, 0x14, 0xe3, 0x0c, 0xce, 0x2d, 0x6c, 0x9a, 0xef,
2955 0x30, 0xee, 0x1a, 0x42, 0x83, 0x7a, 0x02, 0x6b, 0xc8, 0x59, 0xc9, 0x67,
2956 0xc6, 0x9a, 0xb1, 0xd3, 0x8a, 0x9b, 0x7c, 0xea, 0x0a, 0x65, 0x21, 0xd7,
2957 0xdf, 0x8c, 0xee, 0x43, 0xb5, 0xe4, 0x35, 0xa6, 0xb9, 0x5a, 0xff, 0x73,
2958 0x54, 0x0e, 0x74, 0x77, 0x56, 0x52, 0x1e, 0x9f, 0x86, 0x8c, 0x0e, 0x62,
2959 0xfa, 0x86, 0x13, 0x4a, 0xc3, 0xda, 0x98, 0xf2, 0x6d, 0xee, 0x87, 0xe4,
2960 0x41, 0x3c, 0x8c, 0xc7, 0x57, 0xd3, 0x9f, 0xfd, 0x0f, 0xec, 0x50, 0x95,
2961 0x25, 0xb6, 0xb0, 0xf0, 0x41, 0xf8, 0xd5, 0xb0, 0x76, 0xea, 0xa2, 0x7d,
2962 0x33, 0xbd, 0x4f, 0x23, 0xef, 0x89, 0x5f, 0x97, 0xb6, 0x72, 0xb6, 0xbe,
2963 0x13, 0xc7, 0xd3, 0xd4, 0xeb, 0x68, 0x2f, 0x4e, 0xa4, 0x65, 0x4c, 0xe1,
2964 0x53, 0x01, 0xc4, 0x06, 0xec, 0x18, 0xd5, 0x7d, 0x91, 0x72, 0xca, 0xa5,
2965 0x38, 0xe4, 0x8d, 0xac, 0x51, 0x02, 0xe4, 0x6d, 0x69, 0x9c, 0xd9, 0xed,
2966 0x6d, 0xaf, 0x67, 0x8c, 0x18, 0x1d, 0x83, 0xfa, 0xcc, 0xe2, 0x34, 0x4e,
2967 0x0f, 0x3f, 0x04, 0xcf, 0x2c, 0xaf, 0x67, 0xb9, 0xd2, 0x82, 0xad, 0x63,
2968 0xff, 0x51, 0x2e, 0xc9, 0xc3, 0xb1, 0x5b, 0x60, 0x50, 0xf6, 0xdb, 0xd1,
2969 0x3f, 0x57, 0x6c, 0xbe, 0x67, 0xac, 0x14, 0xf3, 0xe8, 0x8f, 0x5e, 0xb2,
2970 0xfc, 0x6c, 0xd6, 0x8e, 0x6a, 0xb4, 0x8f, 0xcc, 0xc7, 0x72, 0x3e, 0xfc,
2971 0xab, 0xe5, 0xf5, 0x77, 0x66, 0x44, 0x15, 0x79, 0xc9, 0x73, 0x35, 0x28,
2972 0x62, 0x3f, 0x3b, 0x72, 0xfe, 0xba, 0x42, 0xfb, 0xbf, 0xe6, 0x43, 0x56,
2973 0x1f, 0x4f, 0xcd, 0x95, 0xa0, 0x60, 0x9b, 0x15, 0xd3, 0xcb, 0xba, 0x75,
2974 0x7c, 0x16, 0x95, 0x9c, 0x86, 0x8a, 0x13, 0xba, 0xe0, 0x48, 0x0b, 0x6d,
2975 0xd5, 0x89, 0x0d, 0x41, 0x9a, 0xa3, 0x95, 0xcf, 0x9f, 0xc4, 0xce, 0xe4,
2976 0xbf, 0x9b, 0xcf, 0x51, 0x8f, 0x56, 0x92, 0xc3, 0x78, 0x88, 0x03, 0x4f,
2977 0x85, 0x56, 0x93, 0x73, 0x72, 0xcd, 0x09, 0x07, 0x31, 0x48, 0x41, 0xa2,
2978 0x89, 0xf6, 0x1f, 0x5a, 0x80, 0x09, 0xab, 0x7d, 0xd5, 0xdc, 0x6c, 0x0e,
2979 0xf1, 0x83, 0xb9, 0xd9, 0x38, 0x50, 0xe4, 0xff, 0x9f, 0x91, 0xdf, 0x2b,
2980 0xa6, 0xa7, 0x52, 0xe4, 0xe7, 0x80, 0x9b, 0x7e, 0x6b, 0x1f, 0xdb, 0x9c,
2981 0xdb, 0xed, 0x40, 0xbf, 0xd6, 0x82, 0xfe, 0x31, 0x78, 0x3e, 0x65, 0x9b,
2982 0x7f, 0x1a, 0x1e, 0x98, 0x9b, 0xe5, 0x0a, 0x6f, 0xa1, 0x3b, 0xfa, 0xbc,
2983 0xb9, 0xac, 0x52, 0xd6, 0xeb, 0x84, 0x9b, 0xeb, 0xdd, 0x77, 0x3d, 0x9f,
2984 0xb7, 0xde, 0x7c, 0xd8, 0xf2, 0x13, 0xbb, 0xe7, 0x4a, 0xbd, 0xec, 0xa7,
2985 0x09, 0x13, 0x97, 0xf4, 0xa3, 0x56, 0x1c, 0x2e, 0xd8, 0xd0, 0x93, 0x90,
2986 0xbd, 0x95, 0xb9, 0x6d, 0xcd, 0xc9, 0xe3, 0xff, 0x54, 0xdf, 0x3c, 0xef,
2987 0x65, 0x39, 0x5d, 0x96, 0x5a, 0x75, 0x9e, 0xe3, 0x8b, 0x2e, 0x8b, 0x1e,
2988 0x5b, 0xef, 0xfd, 0x24, 0xe5, 0xfd, 0xd9, 0x27, 0xd4, 0xdf, 0x73, 0x0c,
2989 0xc9, 0xa9, 0xb4, 0xb0, 0x0f, 0xd3, 0x5c, 0xaf, 0x37, 0x78, 0x4e, 0xe0,
2990 0x8f, 0xa8, 0xdb, 0x3a, 0xb6, 0x0f, 0x48, 0xbe, 0xd5, 0xa3, 0x38, 0xf6,
2991 0xac, 0xc1, 0x25, 0xfa, 0xff, 0x9d, 0x96, 0x1e, 0x0a, 0xae, 0xc8, 0x3c,
2992 0x04, 0x5b, 0xda, 0xe8, 0xc7, 0xad, 0xb3, 0x2e, 0x91, 0x9a, 0x70, 0xa7,
2993 0xf2, 0x61, 0x7d, 0x27, 0x8e, 0x86, 0x0c, 0xb3, 0x5c, 0xf3, 0xaf, 0x65,
2994 0xd0, 0x5f, 0x34, 0xd6, 0x58, 0x88, 0xf1, 0x90, 0xf0, 0x47, 0xb8, 0xd2,
2995 0x69, 0xaf, 0x31, 0xc3, 0xae, 0xba, 0x5e, 0x4e, 0xe7, 0xb0, 0xd2, 0xf6,
2996 0xc0, 0x5c, 0x89, 0x97, 0x92, 0x16, 0x8e, 0x7c, 0x1d, 0xf7, 0x59, 0x7b,
2997 0xab, 0xd2, 0x87, 0x4a, 0xbe, 0xf7, 0x68, 0xe8, 0x4a, 0x54, 0x30, 0xc5,
2998 0x5c, 0xd2, 0x1c, 0x6a, 0x50, 0xb7, 0xe3, 0x4e, 0x62, 0xd7, 0x12, 0x9c,
2999 0xd1, 0xa5, 0xae, 0x61, 0x7c, 0xdb, 0x01, 0xa9, 0xc1, 0x1d, 0x0e, 0x6d,
3000 0x8d, 0x2e, 0xc5, 0xbe, 0x01, 0x43, 0x71, 0x86, 0xbd, 0x91, 0x18, 0xb9,
3001 0x10, 0xe3, 0x71, 0x2b, 0xdf, 0x27, 0xf9, 0x84, 0xc1, 0xc6, 0x4e, 0x6c,
3002 0xd7, 0x0b, 0xd1, 0xa3, 0x47, 0x8a, 0xb6, 0x2c, 0xee, 0xc2, 0x7e, 0xbd,
3003 0xd4, 0x98, 0x17, 0x36, 0x88, 0xe9, 0xda, 0x86, 0x24, 0xfc, 0x2d, 0x17,
3004 0xc9, 0x39, 0x8e, 0xc3, 0xdb, 0xb1, 0xc4, 0x4e, 0xcc, 0xbd, 0xc7, 0xe1,
3005 0x8a, 0x65, 0x9a, 0x90, 0x18, 0xab, 0x72, 0xed, 0xc8, 0x04, 0x11, 0x1f,
3006 0xe3, 0x7e, 0x33, 0xae, 0x75, 0x64, 0x96, 0x92, 0x83, 0x8a, 0x1c, 0xed,
3007 0xd4, 0xc5, 0x7a, 0x3c, 0xd3, 0x7a, 0xc1, 0x7c, 0xd2, 0x2f, 0xf8, 0x59,
3008 0x8b, 0x67, 0x55, 0x9f, 0xc5, 0x29, 0x23, 0xb6, 0xaf, 0xb2, 0x0f, 0x3b,
3009 0x75, 0xee, 0x55, 0xd3, 0xf3, 0xa8, 0xc8, 0x8d, 0xc1, 0x56, 0xf1, 0x6a,
3010 0xe2, 0xa7, 0xfc, 0x2d, 0xb2, 0x13, 0x19, 0x9a, 0x58, 0xa7, 0x4b, 0x2e,
3011 0xaf, 0x91, 0x36, 0xe3, 0xc6, 0xdb, 0xea, 0x8d, 0x7d, 0x78, 0x5a, 0xf7,
3012 0xe9, 0x87, 0x20, 0x39, 0xbc, 0xff, 0xce, 0xe7, 0x24, 0xdf, 0xd2, 0x84,
3013 0x17, 0x2b, 0xb2, 0xf1, 0x87, 0xc7, 0x56, 0x42, 0xdc, 0xcd, 0xfb, 0x11,
3014 0xb9, 0xef, 0x4d, 0x46, 0xa8, 0xa7, 0x1b, 0x83, 0x53, 0x66, 0xa4, 0xd2,
3015 0xe8, 0x94, 0xb3, 0x28, 0xee, 0xf0, 0xea, 0x17, 0xdd, 0xf5, 0xde, 0x8e,
3016 0x29, 0x05, 0x38, 0x13, 0xa3, 0x1f, 0xb6, 0xfe, 0xbb, 0x47, 0xe9, 0xdb,
3017 0x89, 0xa1, 0xe0, 0x1d, 0x68, 0x6f, 0x93, 0xb1, 0x9a, 0xd1, 0xbb, 0xd7,
3018 0x34, 0x4b, 0x43, 0x3e, 0x35, 0x0d, 0x27, 0x56, 0x04, 0xed, 0xb8, 0xa0,
3019 0x9a, 0x70, 0x84, 0xfe, 0xdd, 0xcc, 0xd0, 0x3f, 0x0e, 0xd3, 0x4e, 0x76,
3020 0x50, 0xc7, 0xe4, 0x5d, 0x28, 0x3f, 0xed, 0x24, 0x4e, 0x3b, 0x39, 0x13,
3021 0x9a, 0x9f, 0x7b, 0x57, 0x52, 0x23, 0xaf, 0x98, 0xc4, 0x92, 0x01, 0x15,
3022 0x9f, 0xde, 0x33, 0x89, 0xd0, 0x50, 0x7e, 0xee, 0x62, 0x97, 0xf9, 0xf9,
3023 0x4b, 0x6d, 0x50, 0xe6, 0x2e, 0x73, 0x94, 0xb5, 0xc8, 0xdf, 0xf9, 0x7b,
3024 0xf9, 0xdf, 0xc4, 0xcf, 0x3a, 0xd1, 0x6a, 0xad, 0xed, 0x2f, 0x6a, 0xb2,
3025 0x98, 0x91, 0x5f, 0x93, 0xeb, 0x96, 0xeb, 0x4b, 0xb7, 0x5c, 0x3f, 0xee,
3026 0xbe, 0xf9, 0x7a, 0xfb, 0x9c, 0x9b, 0xaf, 0xf3, 0x36, 0x71, 0x43, 0xae,
3027 0x1d, 0xba, 0x6f, 0xe2, 0x28, 0xd7, 0x3a, 0x63, 0xc1, 0x21, 0xf3, 0x42,
3028 0x85, 0xcc, 0x45, 0x62, 0xd6, 0xec, 0x5c, 0x97, 0x65, 0xa6, 0xcf, 0xf5,
3029 0xcd, 0x5c, 0x6d, 0xc0, 0x3a, 0xf7, 0x4b, 0xbb, 0xd1, 0xe4, 0x1d, 0xdf,
3030 0xdc, 0x3b, 0x74, 0xd9, 0xb3, 0x88, 0xa5, 0xe1, 0x80, 0xd2, 0x1b, 0x33,
3031 0xcc, 0x19, 0x5a, 0xb1, 0x21, 0xef, 0x4a, 0xa9, 0x7e, 0x03, 0x25, 0x7e,
3032 0x6d, 0xc3, 0x0c, 0x5b, 0x17, 0x9c, 0x0b, 0xb5, 0x8e, 0x3f, 0x53, 0x92,
3033 0x88, 0x67, 0xbc, 0x81, 0x43, 0x94, 0x55, 0x2c, 0x73, 0x95, 0x71, 0x75,
3034 0x17, 0x9e, 0x09, 0x39, 0x8c, 0xe2, 0xb0, 0xd7, 0x3d, 0x5f, 0x59, 0x86,
3035 0xed, 0x43, 0x7f, 0x8e, 0xf5, 0x49, 0xe1, 0xf8, 0xb5, 0xd8, 0x32, 0x66,
3036 0xc3, 0x31, 0xea, 0x77, 0x2f, 0xc7, 0x21, 0xfe, 0xb9, 0x53, 0x90, 0xb3,
3037 0x79, 0x8d, 0x8c, 0x91, 0x75, 0xeb, 0xb3, 0x75, 0xe8, 0x75, 0xac, 0x8f,
3038 0x9a, 0xf8, 0x54, 0xa7, 0xef, 0xd1, 0x64, 0x7e, 0x12, 0x3b, 0xb7, 0x5a,
3039 0x58, 0xfa, 0x48, 0x9c, 0xfb, 0x39, 0x4b, 0x6c, 0x75, 0x29, 0x6d, 0x56,
3040 0xc1, 0x67, 0x52, 0x77, 0xac, 0xe4, 0x9c, 0xc9, 0x0d, 0xc7, 0xa3, 0x9b,
3041 0x30, 0x1c, 0x35, 0xe4, 0x7d, 0xc0, 0xde, 0x1a, 0x7b, 0xe4, 0x85, 0x0a,
3042 0xf2, 0xec, 0x84, 0xee, 0x6f, 0x3f, 0xa7, 0xc0, 0x53, 0x16, 0xf6, 0xd3,
3043 0xcf, 0x7c, 0x89, 0xdf, 0xea, 0x92, 0x4f, 0xd3, 0x5d, 0xab, 0xa8, 0xef,
3044 0x7b, 0x86, 0x02, 0x56, 0x7e, 0xe0, 0xef, 0x6e, 0x9b, 0xbf, 0x90, 0x1a,
3045 0xb3, 0x9e, 0xcb, 0x35, 0xbe, 0x8e, 0x83, 0x69, 0x17, 0x1e, 0x8b, 0x7b,
3046 0x94, 0x79, 0x7b, 0x54, 0xdc, 0x1f, 0xf7, 0x4e, 0x2c, 0xb1, 0x93, 0x7f,
3047 0x2c, 0x9a, 0xc1, 0xfe, 0x14, 0xfc, 0x68, 0xa1, 0xf8, 0x82, 0xff, 0x0a,
3048 0x63, 0x56, 0x84, 0x7d, 0xa2, 0xb4, 0x60, 0xb1, 0x57, 0x3d, 0x68, 0xf3,
3049 0xb9, 0x7f, 0x8b, 0xad, 0xb0, 0x67, 0x56, 0xa3, 0x9b, 0xf3, 0x5f, 0x19,
3050 0x97, 0x9a, 0x55, 0x03, 0x50, 0xd1, 0x8c, 0x1d, 0x87, 0xc4, 0x36, 0xe5,
3051 0x9d, 0x75, 0x78, 0xaa, 0xc2, 0x2d, 0x77, 0xa0, 0xf8, 0x4b, 0x72, 0xed,
3052 0x49, 0x89, 0x3f, 0x37, 0x94, 0xdb, 0x4c, 0xc6, 0x2f, 0xf3, 0x73, 0x35,
3053 0x89, 0xa5, 0xd8, 0x3a, 0x20, 0xf9, 0x76, 0xe2, 0xb6, 0xce, 0x38, 0xa8,
3054 0x42, 0x0b, 0x3c, 0x65, 0x93, 0x3a, 0xd0, 0x26, 0xf8, 0x62, 0x9b, 0x10,
3055 0x88, 0x89, 0xcd, 0x6a, 0x6a, 0x07, 0x22, 0xa7, 0x25, 0xcf, 0x37, 0x2f,
3056 0xe4, 0xe7, 0xbc, 0xfc, 0xbd, 0x55, 0x76, 0xdd, 0xf5, 0xca, 0xa8, 0x8a,
3057 0x09, 0x35, 0x1b, 0x47, 0x1e, 0x4a, 0x6a, 0x6b, 0x0b, 0x6d, 0x72, 0x26,
3058 0xe2, 0xb2, 0x19, 0xb1, 0xfa, 0x55, 0x6a, 0x51, 0xde, 0x8c, 0xbe, 0xbd,
3059 0xef, 0xd2, 0x07, 0xc9, 0x18, 0xbf, 0x37, 0x9d, 0xd4, 0xcb, 0xe5, 0x6d,
3060 0x1e, 0xdc, 0x17, 0x97, 0x3c, 0x69, 0x4f, 0x75, 0xf6, 0x4c, 0x87, 0x5c,
3061 0x3b, 0xd0, 0xa1, 0x13, 0x64, 0x67, 0x7d, 0x61, 0x56, 0x59, 0x71, 0xe9,
3062 0x97, 0x59, 0x9d, 0x49, 0xdc, 0x7d, 0x87, 0xd8, 0x78, 0xcf, 0x58, 0x83,
3063 0x3b, 0xab, 0x77, 0x4d, 0xbc, 0x96, 0xbe, 0xb4, 0x7d, 0x9b, 0xe4, 0x34,
3064 0x2e, 0xf9, 0xcc, 0x23, 0xa3, 0xd3, 0xdb, 0xe7, 0x73, 0x30, 0x55, 0x39,
3065 0x4e, 0x95, 0xd7, 0x37, 0xa9, 0xf5, 0x45, 0x94, 0x87, 0xa3, 0x2d, 0xca,
3066 0xaa, 0xa8, 0xd4, 0xfb, 0x6c, 0xd1, 0x12, 0xeb, 0x5c, 0xab, 0x89, 0xef,
3067 0x85, 0xc6, 0x95, 0x6d, 0xd6, 0x99, 0x59, 0x43, 0x49, 0x36, 0x02, 0x95,
3068 0xa3, 0xcd, 0xca, 0xf6, 0xe8, 0x27, 0xe6, 0x53, 0x56, 0x5d, 0x7d, 0xa6,
3069 0x75, 0xbe, 0xa6, 0x70, 0xd4, 0x85, 0x8a, 0x83, 0x25, 0x28, 0x18, 0xd4,
3070 0x30, 0x73, 0xf4, 0x41, 0xf2, 0x56, 0xe1, 0x3a, 0x46, 0x8b, 0xc3, 0x3a,
3071 0xa3, 0xf6, 0xfa, 0xf5, 0x33, 0x6a, 0x0e, 0xe2, 0x82, 0x01, 0xeb, 0x1f,
3072 0x63, 0xa5, 0xc3, 0x8c, 0x95, 0xcc, 0x25, 0xdf, 0x0b, 0x19, 0x3b, 0x66,
3073 0xc2, 0x1b, 0xa8, 0xb4, 0x19, 0xa6, 0xe4, 0x6e, 0x5e, 0x21, 0x61, 0x5c,
3074 0x53, 0x67, 0x60, 0x45, 0x9d, 0xbc, 0x9b, 0xe9, 0x30, 0xec, 0xe1, 0x2e,
3075 0x1c, 0x0e, 0x75, 0xe1, 0x3d, 0xbd, 0x0b, 0x3b, 0xf5, 0x62, 0xa3, 0x3c,
3076 0x5c, 0x2a, 0x67, 0xd9, 0x27, 0xa2, 0xd0, 0xf4, 0xb4, 0xa2, 0x9d, 0xba,
3077 0x0a, 0xef, 0x3e, 0x9f, 0xe2, 0x35, 0x96, 0x29, 0x1a, 0x2e, 0x67, 0xbc,
3078 0x53, 0xe5, 0xb4, 0x81, 0x6b, 0x99, 0x00, 0xa6, 0x88, 0xab, 0xc9, 0x31,
3079 0x39, 0x4f, 0x52, 0x8b, 0x81, 0xb1, 0xff, 0x29, 0xdc, 0xc0, 0x20, 0x26,
3080 0x59, 0x67, 0x2a, 0x9f, 0x93, 0x5a, 0xa6, 0x33, 0x98, 0xe3, 0x30, 0x86,
3081 0xb2, 0xae, 0xb1, 0x0c, 0xd7, 0xe8, 0x9d, 0x7e, 0x98, 0xee, 0x64, 0x3c,
3082 0x87, 0xd7, 0x6a, 0x60, 0xff, 0xbe, 0x1b, 0xf5, 0xc9, 0x19, 0x38, 0x56,
3083 0x5f, 0x89, 0x02, 0x1c, 0x1d, 0xee, 0x20, 0xc7, 0xef, 0x6e, 0x2f, 0x67,
3084 0x7c, 0x3a, 0x3a, 0xec, 0x44, 0x2a, 0x25, 0x39, 0x07, 0xab, 0x36, 0x39,
3085 0xe9, 0xa0, 0x2d, 0xed, 0x4a, 0xa0, 0xbe, 0x26, 0xec, 0x4f, 0xd6, 0xd8,
3086 0x55, 0xf6, 0x51, 0x85, 0x54, 0x5a, 0xe3, 0x27, 0xc0, 0x4f, 0x90, 0x9f,
3087 0x26, 0x7c, 0x8f, 0x36, 0x5b, 0x41, 0xbc, 0x7d, 0x35, 0x5d, 0x86, 0x4f,
3088 0x92, 0x5a, 0x40, 0xa7, 0x1e, 0x0c, 0x33, 0x46, 0x30, 0x2c, 0x39, 0x95,
3089 0xe1, 0x2a, 0xed, 0xf4, 0xa5, 0x50, 0x19, 0xcc, 0xd4, 0xed, 0x62, 0x42,
3090 0x79, 0xff, 0x25, 0x7f, 0x0e, 0x33, 0x5b, 0x5f, 0x3d, 0x92, 0x81, 0xf2,
3091 0x78, 0x9d, 0x41, 0x7d, 0x61, 0x0c, 0xbb, 0x48, 0x6a, 0x29, 0x5a, 0xe7,
3092 0x25, 0x7b, 0xb1, 0x51, 0x13, 0xf6, 0x7a, 0x6a, 0xec, 0x1a, 0xce, 0xa5,
3093 0x27, 0x11, 0x4f, 0xca, 0xbb, 0x6d, 0xa2, 0xc7, 0xef, 0x9b, 0x46, 0x85,
3094 0x9c, 0xc9, 0xe8, 0x44, 0x5c, 0xab, 0x64, 0x1c, 0x24, 0xef, 0x3e, 0x1e,
3095 0x0e, 0x45, 0x63, 0xa5, 0xf2, 0x9e, 0xf0, 0x92, 0x97, 0x43, 0xde, 0x96,
3096 0x7e, 0xc5, 0x78, 0xa8, 0xc4, 0x7a, 0xaf, 0xa3, 0x8b, 0x58, 0xac, 0xa9,
3097 0x4e, 0xc5, 0xdb, 0xb4, 0x05, 0x01, 0x1c, 0x4b, 0x8b, 0xdc, 0x28, 0xa7,
3098 0xb1, 0xac, 0xdc, 0x6e, 0x9c, 0x9d, 0xce, 0xea, 0xc1, 0xc6, 0xa8, 0x83,
3099 0xdf, 0xb2, 0xf7, 0x72, 0xae, 0x95, 0x3e, 0xc2, 0xda, 0xff, 0x9f, 0xdf,
3100 0x91, 0x3b, 0xbf, 0xda, 0x5e, 0x19, 0x76, 0x05, 0x97, 0xc7, 0xed, 0x9f,
3101 0xc8, 0xfb, 0xc8, 0x4f, 0x34, 0xca, 0x7b, 0x6b, 0xae, 0xe0, 0xe3, 0xa3,
3102 0xae, 0xe0, 0xda, 0xf8, 0x51, 0x85, 0xf2, 0xda, 0x57, 0x63, 0x77, 0x05,
3103 0x1f, 0xb9, 0xd1, 0x9e, 0xfb, 0xde, 0x85, 0xb1, 0x50, 0xb1, 0xa1, 0x86,
3104 0xc5, 0xa7, 0x7b, 0x03, 0x9f, 0x28, 0x96, 0x2f, 0x37, 0x4a, 0xe8, 0x63,
3105 0x9f, 0xcf, 0x8c, 0x9b, 0xed, 0xb3, 0x04, 0xab, 0xec, 0x1c, 0xeb, 0x2a,
3106 0x5e, 0x49, 0xdd, 0x78, 0xae, 0x85, 0xcf, 0x15, 0xf3, 0xb9, 0x92, 0xb0,
3107 0xc4, 0x8d, 0x5e, 0x7d, 0x95, 0xa2, 0x79, 0x8a, 0x14, 0xa9, 0x87, 0x69,
3108 0xf8, 0x55, 0xfa, 0x9f, 0xef, 0x90, 0x78, 0xb7, 0x67, 0xac, 0x12, 0x6b,
3109 0x76, 0x9b, 0x4b, 0xe6, 0x2d, 0x34, 0x97, 0xa4, 0x43, 0x31, 0xf3, 0xa5,
3110 0x6a, 0xd9, 0x4f, 0xa9, 0xf1, 0xc9, 0x33, 0x9a, 0xea, 0x63, 0x9c, 0xf9,
3111 0x4d, 0x7d, 0xbb, 0xbc, 0xa3, 0x07, 0x79, 0x7f, 0xa9, 0x90, 0x63, 0x9c,
3112 0x4c, 0x89, 0x8e, 0x6c, 0x6d, 0x77, 0x31, 0x16, 0x95, 0x77, 0x67, 0x0f,
3113 0x73, 0xef, 0x0f, 0xa6, 0xfe, 0xd7, 0x1d, 0x72, 0x76, 0x5d, 0xce, 0x06,
3114 0x00, 0xff, 0x1f, 0x17, 0x23, 0xca, 0x76, 0xf8, 0x78, 0x00, 0x00, 0x00 };
3115
3116static const u32 bnx2_RXP_b09FwData[(0x0/4) + 1] = { 0x0 };
3117static const u32 bnx2_RXP_b09FwRodata[(0x124/4) + 1] = {
3118 0x5f865437, 0xe4ac62cc, 0x50103a45, 0x36621985, 0xbf14c0e8, 0x1bc27a1e,
3119 0x84f4b556, 0x094ea6fe, 0x7dda01e7, 0xc04d7481, 0x80080100, 0x80080080,
3120 0x80080000, 0x08004fbc, 0x08004fbc, 0x08005098, 0x0800506c, 0x08005050,
3121 0x08004f8c, 0x08004f8c, 0x08004f8c, 0x08004fc4, 0x080072ac, 0x080072f8,
3122 0x080072b8, 0x080071dc, 0x080072b8, 0x080072e8, 0x080072b8, 0x080071dc,
3123 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc,
3124 0x080071dc, 0x080071dc, 0x080071dc, 0x080072d8, 0x080072c8, 0x080071dc,
3125 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc,
3126 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080072c8,
3127 0x0800787c, 0x08007748, 0x08007844, 0x08007748, 0x08007814, 0x08007630,
3128 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748,
3129 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748,
3130 0x08007770, 0x00000000 };
3131
3132static struct fw_info bnx2_rxp_fw_09 = {
3133 /* Firmware version: 4.6.15 */
3134 .ver_major = 0x4,
3135 .ver_minor = 0x6,
3136 .ver_fix = 0xf,
3137
3138 .start_addr = 0x080031d8,
3139
3140 .text_addr = 0x08000000,
3141 .text_len = 0x78f4,
3142 .text_index = 0x0,
3143 .gz_text = bnx2_RXP_b09FwText,
3144 .gz_text_len = sizeof(bnx2_RXP_b09FwText),
3145
3146 .data_addr = 0x00000000,
3147 .data_len = 0x0,
3148 .data_index = 0x0,
3149 .data = bnx2_RXP_b09FwData,
3150
3151 .sbss_addr = 0x08007a40,
3152 .sbss_len = 0x58,
3153 .sbss_index = 0x0,
3154
3155 .bss_addr = 0x08007a98,
3156 .bss_len = 0x20,
3157 .bss_index = 0x0,
3158
3159 .rodata_addr = 0x080078f4,
3160 .rodata_len = 0x124,
3161 .rodata_index = 0x0,
3162 .rodata = bnx2_RXP_b09FwRodata,
3163};
3164
3165static u8 bnx2_xi_rv2p_proc1[] = {
3166 /* Date: 01/27/2009 19:01 */
3167#define XI_RV2P_PROC1_POST_WAIT_TIMEOUT_MSK 0xffff
3168 0xa5, 0x56, 0xdd, 0x6b, 0x1c, 0x55, 0x14, 0x3f, 0x33, 0xbb, 0x33, 0xb3,
3169 0xd9, 0x9d, 0xd9, 0x5d, 0x9a, 0x34, 0x8e, 0xb1, 0x34, 0xdb, 0x20, 0xca,
3170 0xa6, 0x13, 0xdd, 0x68, 0x1f, 0x04, 0x03, 0x2d, 0x01, 0x29, 0x98, 0xe2,
3171 0x43, 0xa0, 0x52, 0x8a, 0x60, 0x5c, 0xb4, 0x08, 0xf6, 0x2f, 0x10, 0xc1,
3172 0x21, 0x31, 0x11, 0xc4, 0xaf, 0x7d, 0xe8, 0x42, 0x02, 0x6a, 0x40, 0x50,
3173 0x09, 0x11, 0x77, 0xdf, 0x24, 0x16, 0x7c, 0x68, 0xf1, 0x41, 0xda, 0xa7,
3174 0x16, 0xd4, 0x97, 0x46, 0x11, 0xbf, 0x5e, 0x04, 0xd1, 0xc7, 0x9a, 0xf1,
3175 0x9e, 0x8f, 0xbb, 0x3b, 0x73, 0xb3, 0x9b, 0x14, 0x5c, 0x48, 0x7e, 0x9c,
3176 0x7b, 0xcf, 0x39, 0xf7, 0x7c, 0x9f, 0xa9, 0x02, 0x80, 0x0d, 0x71, 0x77,
3177 0x52, 0x21, 0x58, 0xb9, 0x5c, 0x01, 0x01, 0x60, 0x1b, 0xf8, 0xe7, 0xf8,
3178 0x44, 0xc7, 0x8f, 0x0a, 0x7d, 0x92, 0x21, 0x3e, 0x59, 0x55, 0xff, 0x2f,
3179 0xc3, 0xe9, 0x1a, 0x62, 0x0e, 0x4e, 0x9f, 0x40, 0x7c, 0x12, 0xbe, 0xae,
3180 0x85, 0x0a, 0xff, 0x4d, 0x20, 0x46, 0xfa, 0x68, 0xe7, 0xcb, 0x6e, 0x89,
3181 0xf4, 0xef, 0x8a, 0xfc, 0xf7, 0x39, 0xc6, 0x27, 0xa2, 0x02, 0xeb, 0x11,
3182 0x84, 0x99, 0x2a, 0xc1, 0xed, 0x16, 0xd2, 0xe7, 0xcf, 0x83, 0x8b, 0x7a,
3183 0xde, 0x53, 0x0c, 0x48, 0x1f, 0xb3, 0xe2, 0x19, 0xb1, 0xcb, 0x66, 0xbe,
3184 0x3b, 0xad, 0x0a, 0x9e, 0xc3, 0x8f, 0xf3, 0x48, 0xdf, 0x57, 0x7c, 0xa3,
3185 0x85, 0x38, 0x0e, 0x97, 0x0a, 0x3e, 0xfb, 0x53, 0x17, 0x9c, 0x64, 0xf5,
3186 0xbb, 0xd3, 0x28, 0xaf, 0x64, 0xa6, 0x45, 0xbf, 0x83, 0xfa, 0x7f, 0x4f,
3187 0x58, 0x3f, 0xea, 0x4d, 0xeb, 0xbb, 0x5f, 0xe9, 0xc3, 0x73, 0x57, 0xec,
3188 0x73, 0x0d, 0xfb, 0x5c, 0x65, 0x0f, 0xca, 0xaf, 0x00, 0xfb, 0x39, 0xaa,
3189 0xde, 0x45, 0xfa, 0xaf, 0xbe, 0xbe, 0x2e, 0xa2, 0x6f, 0xb1, 0xbc, 0xfa,
3190 0x13, 0xfb, 0x59, 0xee, 0x35, 0x25, 0xa7, 0xe3, 0x92, 0xb5, 0xd3, 0x8b,
3191 0xb4, 0x7f, 0x3a, 0xfe, 0xc8, 0x7f, 0x2b, 0xc9, 0xf2, 0xc3, 0x21, 0xfc,
3192 0x37, 0x15, 0x7f, 0x56, 0x2f, 0x9f, 0x7f, 0xdb, 0x3f, 0x1f, 0x18, 0x1f,
3193 0xc7, 0x88, 0xcf, 0x75, 0xf1, 0xe7, 0x29, 0x78, 0xd0, 0x0e, 0x89, 0x2f,
3194 0x0f, 0x21, 0xc5, 0x09, 0x62, 0xc4, 0xe3, 0x82, 0x2f, 0x09, 0x7e, 0x2e,
3195 0xb8, 0x2d, 0x08, 0xff, 0x13, 0xff, 0x1e, 0x72, 0x7e, 0x54, 0xf0, 0x01,
3196 0xe3, 0xfc, 0x9a, 0xe0, 0x23, 0x86, 0xfc, 0x71, 0x8b, 0xf1, 0x0f, 0xa1,
3197 0xe7, 0x85, 0x7e, 0xc6, 0x90, 0x8f, 0x81, 0xe3, 0x63, 0x19, 0x71, 0xfb,
3198 0x58, 0xea, 0x19, 0xf3, 0x2f, 0xf7, 0x75, 0xcd, 0x57, 0xa0, 0x38, 0xc2,
3199 0x74, 0x9a, 0xff, 0x83, 0x03, 0xf8, 0x99, 0x6d, 0xbe, 0x3e, 0x48, 0xae,
3200 0x9d, 0xb0, 0x1d, 0x57, 0x44, 0xbe, 0xd8, 0xb9, 0x3a, 0xa4, 0x7f, 0xe6,
3201 0xa2, 0x41, 0xfd, 0x52, 0x17, 0x3f, 0xbe, 0x92, 0xba, 0xdc, 0xb1, 0x9a,
3202 0x51, 0xc8, 0x79, 0xa5, 0x3c, 0x06, 0x52, 0x8f, 0x23, 0x46, 0x3d, 0x7b,
3203 0xaa, 0x9e, 0xa5, 0xae, 0xea, 0xba, 0xbe, 0xb2, 0x75, 0xc5, 0xf5, 0xe1,
3204 0x1a, 0xf5, 0x11, 0x1f, 0x12, 0x97, 0x92, 0xe1, 0xdf, 0xab, 0x09, 0x86,
3205 0x18, 0x7f, 0xb6, 0xcd, 0xb8, 0xc1, 0x18, 0xf9, 0x6e, 0x1e, 0xf1, 0x94,
3206 0xff, 0x0d, 0xeb, 0x9b, 0x04, 0x44, 0x3f, 0x6c, 0x53, 0x1f, 0xe5, 0xa1,
3207 0xed, 0x2a, 0x9b, 0xe1, 0x6e, 0xf2, 0x0e, 0xf3, 0x4d, 0x38, 0x37, 0x09,
3208 0xc3, 0x8d, 0x1b, 0xcc, 0xff, 0x5d, 0x8d, 0xed, 0x7e, 0x56, 0xe6, 0x53,
3209 0xff, 0xa7, 0xef, 0xa5, 0xff, 0x2a, 0x48, 0xff, 0x63, 0xc5, 0x5d, 0xfd,
3210 0x8e, 0xc8, 0xbd, 0xa2, 0xeb, 0x9b, 0x7f, 0xcb, 0x6e, 0x95, 0xfc, 0x7d,
3211 0xab, 0x4b, 0xe4, 0x98, 0xbf, 0x56, 0xa5, 0xdb, 0xb7, 0xbb, 0xda, 0x1f,
3212 0xe9, 0xf3, 0x69, 0xed, 0x3f, 0xcb, 0x07, 0x72, 0x6d, 0x3b, 0x3a, 0x7e,
3213 0x7c, 0x5e, 0x24, 0x3b, 0x46, 0x3b, 0x9b, 0x46, 0x3e, 0x6b, 0xf7, 0x34,
3214 0x07, 0xff, 0x4c, 0xfa, 0x73, 0x30, 0x1d, 0x1f, 0x3d, 0x07, 0x0b, 0xb0,
3215 0x74, 0xb6, 0x42, 0xf6, 0x94, 0x5d, 0x56, 0x73, 0xa1, 0xc2, 0xf8, 0x62,
3216 0x91, 0xf1, 0x97, 0x22, 0xc6, 0x2f, 0x49, 0x2e, 0x95, 0x98, 0x7e, 0x21,
3217 0x40, 0xbd, 0xa3, 0xea, 0x61, 0x2d, 0xaf, 0xed, 0x3a, 0xc8, 0x1e, 0x7c,
3218 0x5f, 0xbf, 0xa3, 0xed, 0xd0, 0xef, 0x65, 0xeb, 0x65, 0xf8, 0xbb, 0x8c,
3219 0x4d, 0x3b, 0x1b, 0x87, 0xfc, 0x2c, 0xe3, 0x46, 0x03, 0xed, 0xba, 0x9a,
3220 0xf4, 0xfa, 0xb0, 0x5e, 0x25, 0xbe, 0x29, 0x60, 0x7a, 0x51, 0xea, 0x73,
3221 0x91, 0xfa, 0xa7, 0xac, 0xae, 0x10, 0x27, 0x20, 0xa6, 0xbd, 0x60, 0x17,
3222 0xaf, 0x53, 0xbd, 0xe4, 0xe4, 0x5c, 0xe5, 0x67, 0x2a, 0xdb, 0x77, 0xbb,
3223 0x5c, 0x8f, 0x85, 0x6c, 0x1d, 0x3f, 0x9c, 0x9a, 0xaf, 0x69, 0x7f, 0xad,
3224 0x5e, 0xfd, 0xee, 0xcf, 0x53, 0x36, 0x1f, 0xb7, 0x5b, 0xda, 0x7f, 0x73,
3225 0x6f, 0x30, 0x7b, 0xdc, 0x90, 0x40, 0xcd, 0xca, 0xfd, 0x8c, 0xd9, 0x2f,
3226 0x83, 0xfa, 0xad, 0x6a, 0xf4, 0xcf, 0x11, 0xe9, 0xb7, 0x91, 0xce, 0x66,
3227 0xeb, 0xb0, 0x7e, 0x46, 0xfe, 0x2f, 0x64, 0x9e, 0x54, 0xa1, 0xb7, 0x97,
3228 0xb6, 0x91, 0x2e, 0x81, 0xf4, 0x61, 0x27, 0xce, 0x65, 0xf2, 0x70, 0x06,
3229 0x06, 0xce, 0x95, 0x0f, 0x45, 0x4f, 0x43, 0xe6, 0x8b, 0x9b, 0xda, 0x5f,
3230 0xc4, 0x5e, 0x06, 0xb2, 0xc3, 0x33, 0xe6, 0xc3, 0xdd, 0x3d, 0xdd, 0xef,
3231 0xcb, 0xee, 0x20, 0x7f, 0x3d, 0xf8, 0xcd, 0xe7, 0xfa, 0x68, 0x52, 0xbf,
3232 0x38, 0x63, 0x97, 0x77, 0x32, 0x79, 0x02, 0x38, 0xa1, 0xf7, 0x52, 0xda,
3233 0xae, 0xf4, 0x5e, 0x45, 0x7d, 0x21, 0x34, 0x67, 0xd3, 0xfb, 0xf5, 0xfd,
3234 0x44, 0xcf, 0xf5, 0x80, 0xfa, 0xa4, 0xbc, 0xaf, 0xef, 0xf4, 0x1c, 0xad,
3235 0x45, 0xe9, 0xfe, 0x1d, 0x93, 0xb9, 0x69, 0x03, 0xcf, 0xcd, 0x92, 0xe9,
3236 0xa7, 0xda, 0xb7, 0x83, 0xf3, 0xc5, 0xfe, 0xde, 0xd9, 0xbb, 0xb7, 0x39,
3237 0x7b, 0x58, 0xde, 0x8b, 0x46, 0xde, 0x6f, 0xf5, 0xe2, 0x68, 0x3b, 0x83,
3238 0xbe, 0x2b, 0x4e, 0x29, 0xbd, 0xc2, 0x2f, 0x73, 0xe1, 0x79, 0x9a, 0x77,
3239 0x67, 0x84, 0x6f, 0x2e, 0x55, 0xaf, 0x83, 0xf8, 0x62, 0xa3, 0xae, 0x0b,
3240 0xfb, 0xf8, 0xb2, 0x73, 0x4c, 0xfb, 0xb3, 0xb5, 0xc5, 0xf5, 0x71, 0x31,
3241 0xd5, 0xaf, 0xe9, 0xf9, 0x3f, 0x22, 0xf5, 0xa0, 0xf8, 0xc8, 0x8f, 0x9d,
3242 0xbd, 0xfe, 0xbe, 0x48, 0xd7, 0xd7, 0xa2, 0xd4, 0xb5, 0x3d, 0xb7, 0x49,
3243 0x7d, 0xe4, 0x35, 0x7f, 0x35, 0xf2, 0x35, 0x1b, 0x61, 0x9d, 0xbc, 0x0e,
3244 0x5d, 0xb1, 0xf3, 0x87, 0x8c, 0xbd, 0x81, 0xf4, 0xa1, 0x0b, 0x9f, 0x75,
3245 0xb5, 0x5f, 0x7c, 0x5d, 0x8b, 0x18, 0x3f, 0x8d, 0xa4, 0x9f, 0x7a, 0xfe,
3246 0xe1, 0xbb, 0x0b, 0xf2, 0x6e, 0x15, 0x3e, 0xe9, 0xed, 0x03, 0x9c, 0x6f,
3247 0x1e, 0x34, 0x64, 0x7e, 0x2e, 0xc9, 0x1c, 0xfb, 0xa9, 0xc8, 0x73, 0xb2,
3248 0xb9, 0x40, 0xf5, 0x0a, 0xe3, 0x32, 0xcf, 0x9a, 0x01, 0xd3, 0x13, 0x01,
3249 0x7f, 0x07, 0x37, 0x3c, 0x9f, 0xf8, 0x26, 0x02, 0xc6, 0xf1, 0x12, 0xca,
3250 0x85, 0xf0, 0xf3, 0x39, 0x62, 0x8f, 0xd6, 0x7d, 0xde, 0x73, 0xeb, 0x37,
3251 0x64, 0x9e, 0x54, 0x74, 0xdc, 0xc4, 0xcf, 0xc7, 0xf1, 0x7c, 0x5c, 0xcd,
3252 0x2d, 0xa6, 0xb9, 0x1e, 0xfc, 0x5e, 0xfd, 0x7f, 0x24, 0x59, 0xa9, 0x55,
3253 0xd2, 0x71, 0xd6, 0xfd, 0xf6, 0xae, 0x11, 0x5f, 0x9d, 0x9f, 0x87, 0x12,
3254 0x3d, 0xe7, 0xa7, 0xce, 0xa2, 0xbd, 0x15, 0x28, 0x7b, 0x5c, 0x3f, 0x8c,
3255 0x4a, 0x8f, 0xed, 0xa1, 0xd8, 0xb1, 0x55, 0x99, 0x9b, 0xab, 0xcb, 0xa4,
3256 0xe6, 0xdc, 0xaa, 0x3e, 0x9f, 0xa7, 0x86, 0x59, 0xdc, 0xba, 0x46, 0xe7,
3257 0xe5, 0x6e, 0x8e, 0xcf, 0xbd, 0x05, 0x1d, 0xaf, 0x0a, 0xf9, 0xdf, 0xe6,
3258 0x78, 0x3d, 0x77, 0x85, 0xf1, 0x22, 0x3c, 0x4d, 0x58, 0x6c, 0x4b, 0x9f,
3259 0xaf, 0xfb, 0x05, 0x42, 0xa0, 0x78, 0xd9, 0x8f, 0xf1, 0x7e, 0x77, 0x64,
3260 0x2f, 0x17, 0x52, 0xf9, 0x33, 0xf7, 0xe4, 0x41, 0x79, 0x3c, 0x62, 0xec,
3261 0x0b, 0xbd, 0xd7, 0x2d, 0xe3, 0xfb, 0x36, 0x30, 0xea, 0xf1, 0xe5, 0x21,
3262 0xf5, 0x08, 0x43, 0xea, 0xd9, 0x9c, 0x6f, 0x4b, 0xd2, 0xef, 0x79, 0x70,
3263 0x72, 0xb4, 0x78, 0xfd, 0xfc, 0x0a, 0xe5, 0xd5, 0x5e, 0xe5, 0xef, 0x1a,
3264 0xdf, 0x59, 0xb3, 0x28, 0x5e, 0xfe, 0x1a, 0xf3, 0xe5, 0xf9, 0x3c, 0xd4,
3265 0xf8, 0xe6, 0x0a, 0xf7, 0x95, 0x0d, 0xff, 0x01, 0xd7, 0x0e, 0x41, 0x60,
3266 0x88, 0x0d, 0x00, 0x00, 0x00 };
3267
3268static u8 bnx2_xi_rv2p_proc2[] = {
3269 /* Date: 01/27/2009 19:01 */
3270#define XI_RV2P_PROC2_MAX_BD_PAGE_LOC 5
3271#define XI_RV2P_PROC2_BD_PAGE_SIZE_MSK 0xffff
3272#define XI_RV2P_PROC2_BD_PAGE_SIZE ((BCM_PAGE_SIZE / 16) - 1)
3273 0xad, 0x57, 0x4d, 0x68, 0x5c, 0x55, 0x14, 0xbe, 0x33, 0x6f, 0x7e, 0xde,
3274 0xcc, 0xbc, 0xc9, 0x4c, 0x93, 0x38, 0x99, 0x26, 0xc5, 0xa4, 0x09, 0x8d,
3275 0x4e, 0x9d, 0x69, 0x27, 0x3f, 0x44, 0xb0, 0x42, 0x43, 0x90, 0xb4, 0xb5,
3276 0x4a, 0xd3, 0x28, 0xc5, 0x5d, 0x92, 0xa9, 0x1d, 0x8c, 0x69, 0x23, 0x18,
3277 0x70, 0xe1, 0xc6, 0x47, 0x5a, 0xd3, 0xcd, 0x2c, 0x4c, 0x31, 0x3f, 0x8a,
3278 0xa0, 0xd8, 0x9d, 0xb8, 0x19, 0x50, 0xdb, 0x8a, 0x22, 0x14, 0x0c, 0x52,
3279 0x17, 0x45, 0xb0, 0x58, 0x37, 0x8a, 0x58, 0x1b, 0x1a, 0x11, 0x8d, 0x8b,
3280 0xae, 0x24, 0xe3, 0xbd, 0xe7, 0x3b, 0xf7, 0xcd, 0xbc, 0xc9, 0x8b, 0x89,
3281 0x62, 0x36, 0x27, 0xe7, 0xbe, 0x73, 0xcf, 0x39, 0xf7, 0x9c, 0xef, 0x7c,
3282 0xf7, 0x4e, 0x52, 0x08, 0x11, 0x10, 0x76, 0xb9, 0x5d, 0x4a, 0xe1, 0x33,
3283 0x0c, 0x53, 0x8a, 0x8a, 0x10, 0xc1, 0xb4, 0xd2, 0x85, 0x5f, 0xf0, 0xdf,
3284 0xfe, 0x24, 0x89, 0x6f, 0xcb, 0x96, 0x32, 0x13, 0x76, 0x46, 0xd9, 0x45,
3285 0xc4, 0xb3, 0xfe, 0x88, 0x94, 0x87, 0xc5, 0x68, 0x06, 0xf6, 0x01, 0xa1,
3286 0xa4, 0xb4, 0xb5, 0x95, 0xdc, 0xc5, 0xf2, 0x38, 0xcb, 0xc7, 0x7d, 0x90,
3287 0x87, 0x58, 0x3e, 0x56, 0x27, 0x05, 0xdb, 0x3d, 0xcd, 0xfa, 0x00, 0x4b,
3288 0x8b, 0xd7, 0x47, 0x59, 0xff, 0x90, 0xa5, 0xcd, 0xeb, 0x61, 0xd6, 0x1f,
3289 0xf0, 0xa9, 0x25, 0xe4, 0xab, 0xf4, 0xb5, 0x4a, 0x55, 0xb7, 0xe0, 0x3e,
3290 0x83, 0x73, 0x3c, 0xd3, 0xa1, 0xbe, 0xdf, 0xad, 0xb8, 0xed, 0xef, 0x38,
3291 0xfa, 0xac, 0xa1, 0xf4, 0x1f, 0xa5, 0xee, 0x53, 0x6a, 0x73, 0x0a, 0xdb,
3292 0x9b, 0xd3, 0x25, 0xb5, 0xdf, 0x10, 0xcb, 0xf3, 0x26, 0x55, 0x67, 0xd1,
3293 0x82, 0x6e, 0x97, 0x4d, 0xaa, 0xcb, 0xa2, 0xc5, 0xfe, 0x58, 0xee, 0x8e,
3294 0x23, 0xde, 0xa9, 0x0e, 0xd4, 0xed, 0xbb, 0x47, 0x60, 0x67, 0x27, 0x74,
3295 0x61, 0xf1, 0xbd, 0x5d, 0xf0, 0xf7, 0x29, 0xa5, 0xaf, 0xfb, 0x9a, 0x7c,
3296 0xa8, 0x47, 0x98, 0xad, 0xfc, 0x41, 0xb5, 0xbe, 0xb7, 0x7f, 0x71, 0x1e,
3297 0xf6, 0x63, 0x1d, 0x58, 0x7f, 0x30, 0xab, 0xfc, 0x85, 0x84, 0xcd, 0x52,
3298 0xe4, 0x28, 0x2f, 0x9f, 0x9d, 0x73, 0xfb, 0xff, 0x61, 0x1e, 0xda, 0x44,
3299 0x1c, 0x7e, 0xa3, 0x2e, 0xbf, 0xa9, 0x4d, 0x7e, 0x6f, 0x47, 0x6a, 0xfd,
3300 0x37, 0xf8, 0xe0, 0x3f, 0xba, 0xad, 0xff, 0x42, 0x1c, 0xb2, 0x29, 0xeb,
3301 0x15, 0x27, 0xb2, 0x4d, 0xfe, 0x2f, 0x6e, 0xeb, 0xff, 0x55, 0x27, 0x7f,
3302 0xbd, 0x5e, 0x5f, 0x3f, 0x52, 0x3f, 0xb0, 0x0f, 0xf2, 0xf6, 0xfd, 0xfa,
3303 0xdc, 0x9c, 0x9f, 0x01, 0x39, 0x98, 0x25, 0x51, 0x3a, 0xcd, 0x00, 0x1f,
3304 0xee, 0x56, 0x71, 0x1b, 0x45, 0xc0, 0xaf, 0xfc, 0x1d, 0x30, 0x43, 0xd7,
3305 0xb0, 0xfe, 0x1c, 0xf7, 0xe9, 0x79, 0x3e, 0xc8, 0x2f, 0x51, 0x55, 0x98,
3306 0x4a, 0xa5, 0x18, 0x63, 0xff, 0xdc, 0x67, 0x3b, 0x86, 0xfd, 0x2b, 0x96,
3307 0xca, 0xef, 0x86, 0xc4, 0x8d, 0x57, 0xdf, 0x8d, 0x7f, 0xe8, 0x3b, 0xf6,
3308 0xef, 0x7a, 0x08, 0x5f, 0xdf, 0x28, 0x42, 0x6f, 0xbb, 0x9c, 0xa4, 0xfa,
3309 0x2c, 0x97, 0xbd, 0x70, 0x52, 0xef, 0x5f, 0xce, 0x71, 0x02, 0x71, 0x44,
3310 0xa7, 0x49, 0xc9, 0xa1, 0xae, 0xd2, 0x26, 0xe7, 0x59, 0x27, 0xb1, 0xb8,
3311 0x4f, 0xcf, 0x05, 0xf4, 0x62, 0x88, 0x44, 0x7a, 0x62, 0x4e, 0x9d, 0x33,
3312 0x21, 0xc6, 0xfd, 0x2a, 0x61, 0x3f, 0xd7, 0xc5, 0x30, 0xad, 0x4f, 0x60,
3313 0xff, 0x45, 0xbb, 0x45, 0x67, 0x28, 0xf6, 0x61, 0x5f, 0x73, 0x2f, 0xe4,
3314 0x42, 0x6f, 0x50, 0x89, 0x6c, 0x71, 0x86, 0xd4, 0x03, 0x3f, 0xf7, 0x98,
3315 0x64, 0x67, 0xe7, 0xf4, 0xdc, 0xe9, 0xbe, 0xa9, 0x3a, 0xbd, 0x52, 0x9d,
3316 0xbf, 0x2e, 0xd4, 0xf5, 0xee, 0x3e, 0x65, 0x2f, 0x8b, 0xdb, 0x89, 0x38,
3317 0xa3, 0x93, 0x5e, 0x73, 0xfb, 0x92, 0x53, 0xdf, 0x9d, 0xf6, 0x7f, 0x90,
3318 0xea, 0x30, 0xc8, 0xf5, 0xe8, 0x60, 0x9c, 0xed, 0xf1, 0xc0, 0x59, 0x82,
3319 0xfe, 0x5f, 0x1b, 0x4a, 0x52, 0x3d, 0x4f, 0x60, 0xfd, 0xd2, 0xf0, 0x15,
3320 0xf4, 0xe3, 0x18, 0xd5, 0x41, 0x44, 0x2f, 0x7c, 0x8c, 0x5d, 0x13, 0x34,
3321 0xdf, 0xe7, 0xfa, 0x8b, 0x9f, 0x42, 0x2f, 0x18, 0x4a, 0x9f, 0xb2, 0x4e,
3322 0x5f, 0x85, 0x7d, 0xf0, 0x7c, 0x92, 0xea, 0x77, 0x82, 0xa3, 0x1c, 0x33,
3323 0x88, 0x4f, 0x4a, 0xa1, 0xf3, 0xa4, 0x5a, 0x2b, 0xf4, 0x3d, 0x29, 0x2e,
3324 0x96, 0xf1, 0x7d, 0x3a, 0xa6, 0xce, 0x37, 0xe2, 0xf0, 0xce, 0x64, 0x08,
3325 0xfb, 0x4b, 0xf3, 0xe0, 0x8d, 0x7b, 0x1f, 0x29, 0x7d, 0x2c, 0x7b, 0x0f,
3326 0xf6, 0xd9, 0xc9, 0x39, 0x76, 0xec, 0x47, 0xfd, 0xd6, 0xfc, 0xb0, 0x67,
3327 0x58, 0x46, 0x03, 0xd4, 0x3f, 0x9f, 0xb0, 0x86, 0x21, 0x5f, 0xa7, 0xef,
3328 0x7f, 0xf9, 0x4a, 0x54, 0xb7, 0x53, 0x0d, 0x81, 0x2b, 0xba, 0x3e, 0x2c,
3329 0x13, 0xfa, 0x5c, 0x90, 0x3b, 0xc5, 0xfd, 0x9c, 0xb5, 0x15, 0xde, 0xb9,
3330 0x8f, 0x99, 0xed, 0xf0, 0x0e, 0x39, 0xdc, 0x0d, 0x19, 0xea, 0x22, 0xbe,
3331 0xf8, 0x17, 0xb8, 0xe7, 0xbc, 0x36, 0xcd, 0x15, 0x56, 0xab, 0xf8, 0x24,
3332 0x21, 0x71, 0xe9, 0xc2, 0xa9, 0x9c, 0x03, 0xe2, 0x57, 0xd9, 0x07, 0x8d,
3333 0x37, 0xe5, 0x30, 0x2c, 0xa6, 0xd8, 0xef, 0x24, 0xd7, 0xe3, 0x2c, 0xd7,
3334 0xe3, 0x37, 0x96, 0xd3, 0x31, 0x5d, 0x07, 0xc8, 0x8b, 0x34, 0xff, 0x69,
3335 0x8f, 0x7b, 0x43, 0xdf, 0x0f, 0xe8, 0xcf, 0x32, 0xf7, 0xf3, 0x2d, 0xe7,
3336 0x9e, 0xd0, 0x75, 0xdd, 0xea, 0xbe, 0xd0, 0xf8, 0xc7, 0xfa, 0xe8, 0xa4,
3337 0xe7, 0x39, 0x4b, 0x5f, 0x76, 0xc2, 0x4d, 0x63, 0x17, 0xa4, 0x53, 0xdf,
3338 0x6e, 0x9a, 0xdf, 0x86, 0x96, 0xab, 0xfa, 0x7c, 0x2a, 0xcf, 0x5f, 0xf5,
3339 0xfc, 0x35, 0x2c, 0xcd, 0x92, 0x8c, 0x36, 0x5e, 0x56, 0xf1, 0x5a, 0x3d,
3340 0xf8, 0xc3, 0x3d, 0xc7, 0xf5, 0xf5, 0x9d, 0x8e, 0x13, 0xb1, 0xf6, 0xdf,
3341 0x5c, 0x75, 0xcf, 0x2b, 0xe6, 0x33, 0xec, 0xe0, 0xbb, 0x79, 0x80, 0xfb,
3342 0xc0, 0x32, 0xf5, 0xa8, 0xf2, 0x3b, 0xc2, 0x71, 0xf2, 0x1c, 0xc7, 0xaa,
3343 0xe1, 0x0b, 0x95, 0xe7, 0xfa, 0x86, 0xe6, 0x09, 0x8d, 0x8f, 0x2a, 0x5f,
3344 0xe8, 0x3e, 0x50, 0xfc, 0xec, 0xcd, 0x55, 0xb5, 0xbf, 0x6d, 0x1b, 0xfe,
3345 0x58, 0x75, 0xfc, 0xdd, 0x72, 0x78, 0x22, 0x49, 0x71, 0x0f, 0xb3, 0xea,
3346 0xe6, 0xc1, 0x3f, 0x24, 0x0f, 0xaa, 0xef, 0xa6, 0x69, 0x39, 0xf3, 0xc2,
3347 0xfc, 0x37, 0xa3, 0xe2, 0xa5, 0x39, 0xff, 0xb4, 0xbe, 0xbf, 0x64, 0xfe,
3348 0xcc, 0x93, 0x63, 0xb5, 0x7c, 0x77, 0xdb, 0x23, 0xee, 0x7f, 0xf5, 0xc7,
3349 0xf3, 0x95, 0x65, 0xbe, 0xcf, 0x51, 0x9e, 0x95, 0xf1, 0x3c, 0xe3, 0x25,
3350 0x57, 0xdf, 0x07, 0xf4, 0x15, 0xf6, 0xb2, 0xbf, 0x9a, 0xf7, 0xfa, 0xb4,
3351 0x7f, 0xa8, 0x76, 0x4f, 0xad, 0x7d, 0x7d, 0xff, 0x03, 0x5b, 0xf0, 0xf8,
3352 0xe7, 0x1b, 0x78, 0x7f, 0x7d, 0xb6, 0x51, 0x7d, 0x4f, 0x79, 0xe2, 0xc4,
3353 0x16, 0x74, 0x3f, 0x85, 0x25, 0x9e, 0xe9, 0xbd, 0x26, 0xb4, 0xbd, 0x3f,
3354 0x88, 0xf7, 0xa4, 0x60, 0xfc, 0x9e, 0x7b, 0x98, 0xfd, 0x64, 0xc0, 0xc7,
3355 0x2f, 0x9c, 0xa1, 0xfe, 0xbe, 0x79, 0xf6, 0x3e, 0xf1, 0xf2, 0x7b, 0x2f,
3356 0x5f, 0x53, 0x7e, 0x77, 0x8b, 0xd5, 0x19, 0x8b, 0xf2, 0x1a, 0xda, 0x0b,
3357 0xf3, 0xfb, 0x87, 0xea, 0xfb, 0xad, 0xfc, 0x9a, 0x8c, 0x07, 0x69, 0x37,
3358 0xe1, 0x7e, 0x97, 0x6c, 0xce, 0x13, 0x73, 0x7f, 0x24, 0x81, 0x7d, 0x9a,
3359 0xbf, 0xdc, 0xf8, 0x79, 0x77, 0xa3, 0x7a, 0xff, 0xc0, 0xcd, 0xad, 0x83,
3360 0xde, 0x73, 0x71, 0xb2, 0xaf, 0x36, 0x4e, 0x46, 0xac, 0x94, 0xe1, 0x7f,
3361 0x84, 0x79, 0x65, 0x9c, 0x13, 0xf9, 0x29, 0x9a, 0xa0, 0x78, 0x85, 0xe3,
3362 0x84, 0x6b, 0x91, 0x8a, 0xe1, 0xdc, 0x85, 0xa7, 0xf0, 0xbd, 0x10, 0xc7,
3363 0x7a, 0x6b, 0x1c, 0xef, 0xcd, 0x91, 0xb0, 0x45, 0xf6, 0xad, 0x71, 0xc8,
3364 0x14, 0xf3, 0xcf, 0x8a, 0xc3, 0xcb, 0x90, 0xcb, 0xa1, 0xad, 0x78, 0x19,
3365 0xf7, 0xdb, 0xf5, 0x90, 0x5a, 0x97, 0x8f, 0xa0, 0x0c, 0x78, 0x69, 0xa8,
3366 0xdb, 0xa2, 0xef, 0xa3, 0x19, 0xe0, 0x48, 0x74, 0x7a, 0x9f, 0xab, 0x0d,
3367 0xfc, 0xd2, 0x5a, 0xe5, 0xef, 0x5a, 0x9e, 0xb7, 0x7a, 0x97, 0x1c, 0x1e,
3368 0x75, 0xe7, 0x01, 0xfe, 0x52, 0xfe, 0x49, 0x95, 0x7c, 0xb5, 0x13, 0x7e,
3369 0x37, 0x18, 0x2f, 0xbf, 0xf3, 0xbd, 0xdf, 0x24, 0xbe, 0x2a, 0xa3, 0x0e,
3370 0x2b, 0xe5, 0xfa, 0xfe, 0xe8, 0x3c, 0x74, 0x1c, 0x9c, 0x4b, 0x9f, 0xb3,
3371 0x1a, 0x17, 0x79, 0x9d, 0xe1, 0xfc, 0xef, 0xd0, 0xfb, 0x2f, 0xc5, 0xe7,
3372 0x55, 0x7e, 0xb1, 0x7e, 0x94, 0xee, 0xa1, 0xa0, 0x7c, 0xdf, 0x6b, 0xdd,
3373 0x7d, 0x3f, 0x8c, 0x50, 0x5e, 0x8d, 0x72, 0x41, 0xef, 0x77, 0x9f, 0xbb,
3374 0x39, 0x0f, 0xb9, 0x90, 0xd7, 0x7d, 0xd3, 0xfd, 0xd5, 0xfd, 0x44, 0xdf,
3375 0x53, 0x3d, 0x64, 0xd6, 0x5f, 0xe8, 0x21, 0x9c, 0xe7, 0x0b, 0xeb, 0xee,
3376 0x77, 0xf2, 0xc9, 0xac, 0xb2, 0x7f, 0x4d, 0x7c, 0x43, 0xf3, 0x28, 0xc4,
3377 0xf7, 0x2c, 0xab, 0x7c, 0x29, 0xf8, 0xaf, 0x96, 0x77, 0x0d, 0x71, 0x3d,
3378 0xc8, 0xcb, 0x7d, 0x7a, 0xee, 0xdc, 0xf3, 0x5b, 0xad, 0xbb, 0x3a, 0xc7,
3379 0x13, 0x1e, 0xfc, 0xa4, 0xcf, 0xa9, 0xec, 0xf3, 0x8c, 0x5f, 0x53, 0x0c,
3380 0x1d, 0xc1, 0xfb, 0xb0, 0x21, 0x8c, 0x39, 0x69, 0x08, 0x7b, 0xdd, 0xef,
3381 0x12, 0x3f, 0x11, 0xfa, 0x05, 0xb3, 0xa7, 0x31, 0x42, 0xe7, 0xba, 0x74,
3382 0xe3, 0x6b, 0x32, 0x7b, 0x7f, 0x29, 0x86, 0xf5, 0x96, 0x21, 0x84, 0x09,
3383 0x10, 0xde, 0x0d, 0x71, 0x01, 0xf3, 0xf0, 0xce, 0x02, 0xe4, 0xdb, 0xe2,
3384 0x49, 0xf8, 0x69, 0x9c, 0xa5, 0xfb, 0xd4, 0x6c, 0x41, 0x79, 0x4b, 0x4b,
3385 0x8c, 0xf3, 0xb4, 0x9f, 0x7e, 0xaf, 0x56, 0x44, 0x9c, 0x7f, 0x47, 0xf0,
3386 0xbc, 0x02, 0xcf, 0x81, 0x9a, 0xbe, 0xef, 0x14, 0xdf, 0x4a, 0x8f, 0x4b,
3387 0xfc, 0xc2, 0x0d, 0xe3, 0xdc, 0xac, 0xc7, 0xb9, 0xee, 0x6f, 0xda, 0xef,
3388 0x89, 0xeb, 0x81, 0xcd, 0xb8, 0xd6, 0xf9, 0xa9, 0x3a, 0xff, 0xe9, 0xbc,
3389 0x7b, 0x37, 0xfb, 0x57, 0xfb, 0x62, 0x12, 0xdf, 0xff, 0x17, 0xae, 0x21,
3390 0x8f, 0x76, 0xa9, 0xf8, 0x2d, 0x35, 0xf8, 0xf4, 0x9e, 0x3b, 0xf0, 0x9b,
3391 0x21, 0x79, 0xfc, 0x6f, 0x6a, 0x8c, 0x09, 0xd0, 0x18, 0x10, 0x00, 0x00,
3392 0x00 };
3393
3394static u8 bnx2_TPAT_b09FwText[] = {
3395 0xbd, 0x58, 0x5d, 0x6c, 0x1c, 0x57, 0x15, 0x3e, 0x73, 0xe7, 0xee, 0xee,
3396 0x78, 0xb1, 0xe3, 0x71, 0x3b, 0xa4, 0xdb, 0x62, 0xc8, 0x8c, 0x7d, 0xfd,
3397 0x03, 0xb6, 0xc2, 0x94, 0x6e, 0xdb, 0xad, 0x18, 0x45, 0xc3, 0xec, 0xda,
3398 0xb1, 0xa2, 0x3c, 0xb8, 0x52, 0xa4, 0x46, 0x6a, 0x04, 0x66, 0x1d, 0x93,
3399 0x3e, 0xa6, 0x88, 0x07, 0xa4, 0x3e, 0x64, 0x59, 0x3b, 0xa9, 0x1f, 0x96,
3400 0x2c, 0xb8, 0xc8, 0x7e, 0x41, 0x28, 0x72, 0x6a, 0xbb, 0x48, 0x8b, 0x37,
3401 0x11, 0x48, 0x3c, 0x45, 0x8d, 0x1c, 0x14, 0x55, 0xea, 0x0b, 0x0f, 0xfc,
3402 0x3d, 0x46, 0x6a, 0x45, 0xfb, 0x50, 0x90, 0x55, 0xa9, 0xa8, 0x82, 0xe0,
3403 0xcb, 0x77, 0x66, 0x67, 0x9c, 0x4d, 0xec, 0x08, 0x9e, 0xb0, 0xb4, 0xba,
3404 0x33, 0x73, 0xef, 0x39, 0xf7, 0xdc, 0x73, 0xbe, 0xef, 0x9c, 0x73, 0x3d,
3405 0x64, 0x50, 0x9e, 0x92, 0xbf, 0x3e, 0xfc, 0x8a, 0xdf, 0xbd, 0xf8, 0x83,
3406 0x67, 0x8f, 0xbf, 0x70, 0x1c, 0x8f, 0xcf, 0x1b, 0xfd, 0x59, 0x49, 0xff,
3407 0xc7, 0x3f, 0x93, 0xc8, 0x4e, 0xed, 0xe0, 0x1f, 0x59, 0x22, 0xb8, 0xfd,
3408 0x54, 0xa4, 0xc8, 0x32, 0x83, 0xdf, 0x7c, 0x6d, 0x5e, 0x11, 0x85, 0xad,
3409 0x09, 0xb7, 0x4c, 0xff, 0xd6, 0x35, 0x47, 0x12, 0x7f, 0xff, 0x72, 0x70,
3410 0xff, 0xeb, 0xb7, 0x5e, 0xf4, 0x76, 0xaf, 0x99, 0x64, 0xd9, 0xc1, 0xb2,
3411 0xb4, 0x47, 0xc9, 0x1a, 0x84, 0xcc, 0xcf, 0xc7, 0xbe, 0x2d, 0xe8, 0x48,
3412 0xaa, 0xab, 0xa6, 0x85, 0xba, 0xa7, 0x6f, 0x8d, 0x29, 0xbb, 0x8e, 0x0d,
3413 0x6e, 0xb4, 0x5d, 0x8a, 0xda, 0x05, 0x7a, 0xb7, 0xed, 0xd0, 0xcd, 0xb6,
3414 0xa4, 0x85, 0xb7, 0x2e, 0xd1, 0x92, 0xef, 0x15, 0x2a, 0xa6, 0x45, 0x22,
3415 0xf0, 0x0a, 0x55, 0x72, 0x69, 0xc3, 0xf7, 0x6a, 0x73, 0xe6, 0x80, 0x61,
3416 0x05, 0x16, 0xbd, 0x31, 0x26, 0xe8, 0x9a, 0x73, 0x8e, 0xbe, 0xa7, 0xce,
3417 0xe2, 0x27, 0x49, 0xac, 0x48, 0xa3, 0xbc, 0x26, 0x49, 0xae, 0xf4, 0xd3,
3418 0x49, 0x5f, 0xeb, 0x79, 0x3f, 0x84, 0xfc, 0xf0, 0xf8, 0x05, 0xea, 0xa1,
3419 0x9a, 0xed, 0xcd, 0x10, 0x65, 0x78, 0x0d, 0x45, 0x7e, 0x86, 0x42, 0xbb,
3420 0x73, 0xae, 0x6b, 0xf1, 0x78, 0x5f, 0x6f, 0x40, 0xbe, 0x47, 0xa5, 0xf3,
3421 0x4f, 0x24, 0xf3, 0x76, 0x32, 0x2f, 0x48, 0xac, 0x7a, 0xee, 0x16, 0x8d,
3422 0x84, 0xd2, 0xd8, 0xd3, 0x91, 0x3a, 0x6a, 0x47, 0x5b, 0x92, 0xcc, 0x15,
3423 0xb6, 0x5f, 0xd9, 0x65, 0xd2, 0x90, 0x31, 0x59, 0x46, 0x8a, 0xe0, 0xfb,
3424 0x88, 0xdb, 0x48, 0x28, 0x0c, 0xa2, 0x9d, 0x46, 0xc1, 0x8e, 0xda, 0x3f,
3425 0x34, 0xa2, 0xe6, 0x9e, 0x0e, 0x65, 0x9e, 0x84, 0x0a, 0x8d, 0x68, 0x8b,
3426 0x75, 0xf5, 0x90, 0x54, 0x39, 0xc8, 0x0c, 0xdb, 0x82, 0x78, 0x8c, 0x92,
3427 0xef, 0xac, 0xbb, 0x82, 0xe7, 0x69, 0x23, 0xdc, 0x92, 0x46, 0xb4, 0x36,
3428 0x83, 0x67, 0x0b, 0xf2, 0xf0, 0x8b, 0x6f, 0x50, 0x38, 0x6b, 0x40, 0x8e,
3429 0xcf, 0x69, 0xe3, 0x5d, 0x50, 0xe8, 0xd8, 0xb4, 0x58, 0xf4, 0x0a, 0x35,
3430 0x3a, 0x65, 0x94, 0xb7, 0x0e, 0x04, 0xcd, 0x9e, 0x69, 0x1f, 0xfc, 0xc6,
3431 0xb6, 0x7c, 0x4b, 0x6a, 0x2d, 0x9e, 0xcd, 0x25, 0x67, 0x64, 0x7d, 0x61,
3432 0xc7, 0x7e, 0x87, 0xdf, 0x61, 0x73, 0x13, 0xb6, 0xb7, 0xb2, 0xb0, 0x47,
3433 0x6b, 0xde, 0x27, 0x52, 0x65, 0xd8, 0x19, 0xe2, 0xe7, 0x2d, 0x57, 0x01,
3434 0x85, 0xa1, 0xd5, 0x3e, 0x72, 0x07, 0xb4, 0xae, 0xf8, 0x9e, 0xbd, 0x45,
3435 0x01, 0x2d, 0x36, 0x07, 0xed, 0xa9, 0x66, 0x1d, 0xf3, 0x35, 0x5e, 0x03,
3436 0x7f, 0x10, 0x4d, 0xb5, 0xb4, 0xde, 0xf4, 0x7f, 0x9b, 0xa1, 0x23, 0x62,
3437 0x32, 0x43, 0x9e, 0x1b, 0xe2, 0xdb, 0xd0, 0xe6, 0xa3, 0x3e, 0x3b, 0x96,
3438 0xd8, 0xc0, 0x7e, 0xc7, 0x3e, 0xfe, 0x97, 0x92, 0xf7, 0x5e, 0x3b, 0x5a,
3439 0x4b, 0xfd, 0x1c, 0xdb, 0x0d, 0xbf, 0xfa, 0x14, 0x15, 0x61, 0xff, 0x63,
3440 0xcf, 0x94, 0xca, 0xb1, 0x2d, 0x6c, 0x37, 0xd6, 0xab, 0x07, 0x36, 0xbd,
3441 0x7a, 0xc0, 0x26, 0xb6, 0x47, 0x90, 0x5c, 0xb5, 0x68, 0x49, 0x7d, 0x64,
3442 0xd0, 0x11, 0xad, 0x97, 0x7c, 0x69, 0x54, 0xd6, 0x3e, 0x4b, 0x9e, 0x81,
3443 0xc3, 0x26, 0x70, 0xd8, 0x04, 0x2e, 0x9b, 0x64, 0x8b, 0xc0, 0xa5, 0x5b,
3444 0x63, 0x16, 0xdd, 0x33, 0x11, 0xcf, 0x36, 0xcf, 0xe7, 0xa8, 0xee, 0x2b,
3445 0xba, 0xdc, 0x64, 0xcf, 0xe4, 0x68, 0x51, 0x7d, 0xae, 0xcf, 0xc3, 0x1f,
3446 0x6f, 0x93, 0x3e, 0x16, 0x01, 0xb3, 0x11, 0xdc, 0xf9, 0x86, 0x1a, 0xa7,
3447 0xcb, 0x6d, 0x45, 0xf5, 0x36, 0xcb, 0x2d, 0x51, 0x47, 0xae, 0x1f, 0x72,
3448 0x93, 0x90, 0x2b, 0xd2, 0x95, 0x58, 0xb6, 0x1f, 0xb2, 0xbb, 0x89, 0xec,
3449 0x44, 0x61, 0x9a, 0x7c, 0xc8, 0x0c, 0xbb, 0xd3, 0xc0, 0xdc, 0x9c, 0x33,
3450 0x09, 0xd9, 0x49, 0x5a, 0xc2, 0xaf, 0xde, 0xa4, 0x9a, 0x2c, 0xb2, 0x5e,
3451 0xaf, 0x70, 0x9e, 0x7d, 0x1e, 0xeb, 0xac, 0x41, 0xa7, 0x83, 0x39, 0x0b,
3452 0x7a, 0x24, 0xc6, 0x0f, 0x75, 0xbd, 0x09, 0x6c, 0x3b, 0xfc, 0xfc, 0xae,
3453 0x16, 0x01, 0xfc, 0x50, 0x54, 0x6e, 0x9d, 0xf8, 0x3d, 0x4b, 0x65, 0xc4,
3454 0x52, 0xa8, 0x7e, 0xaa, 0xda, 0x86, 0x21, 0x02, 0x93, 0xaa, 0xf0, 0x42,
3455 0x38, 0x2b, 0xe3, 0x6f, 0x73, 0xb6, 0x01, 0x8e, 0x1d, 0x17, 0x9d, 0x9c,
3456 0x93, 0xc1, 0x1a, 0xc4, 0x5f, 0xf5, 0x52, 0xd5, 0x19, 0xc0, 0x5a, 0x10,
3457 0x2d, 0x3f, 0x02, 0x8e, 0x0e, 0x60, 0x0d, 0x8f, 0x1c, 0x07, 0xac, 0x57,
3458 0xbc, 0xbe, 0x17, 0x36, 0xa6, 0xdf, 0x7a, 0xa9, 0xf6, 0x50, 0x7c, 0xd8,
3459 0xc6, 0x38, 0x2e, 0xd8, 0x5f, 0x26, 0xb1, 0xed, 0x8e, 0x57, 0x3a, 0x6f,
3460 0x63, 0x7e, 0xe7, 0xab, 0x82, 0x76, 0xf5, 0x75, 0x15, 0x15, 0xf0, 0xe9,
3461 0xf3, 0x8a, 0x0a, 0x07, 0xcc, 0x18, 0x4b, 0x29, 0xa6, 0x78, 0xe4, 0x7c,
3462 0x43, 0x85, 0x79, 0x65, 0x98, 0x4b, 0x93, 0x4f, 0x52, 0xcd, 0xf1, 0xfc,
3463 0x32, 0x15, 0x68, 0xa9, 0x39, 0x01, 0xdf, 0xf5, 0xe3, 0xdc, 0x9e, 0x4f,
3464 0x34, 0x8c, 0xe7, 0xf0, 0x69, 0xc8, 0x20, 0x5f, 0xd4, 0xa0, 0x8b, 0xc7,
3465 0x41, 0xe8, 0xf7, 0x60, 0x23, 0xfc, 0xa1, 0x26, 0xec, 0x29, 0xf8, 0x23,
3466 0x74, 0x78, 0x8e, 0xf3, 0x98, 0xf3, 0x4c, 0xa4, 0x3c, 0xbf, 0x1a, 0xdb,
3467 0xe2, 0xd9, 0xb7, 0x89, 0xf3, 0x51, 0x9a, 0x83, 0x38, 0x27, 0x59, 0x73,
3468 0x32, 0xa0, 0xd9, 0x7a, 0xe3, 0x92, 0x36, 0x15, 0xcd, 0x65, 0x03, 0xc6,
3469 0x6e, 0x6f, 0x09, 0x58, 0x9c, 0xad, 0xb7, 0x06, 0x4f, 0xef, 0x34, 0xa8,
3470 0xf6, 0x4c, 0x20, 0x8e, 0x0a, 0xec, 0x1f, 0xf9, 0xcc, 0x29, 0xec, 0xd5,
3471 0x1e, 0x3c, 0x7d, 0xa7, 0x71, 0x0c, 0xbe, 0xa2, 0xfb, 0xf0, 0x3f, 0xf6,
3472 0xdf, 0x79, 0xda, 0x84, 0x9d, 0x1c, 0x33, 0x70, 0x2b, 0x7c, 0x75, 0xcc,
3473 0x00, 0x96, 0xf1, 0x0c, 0x6c, 0xd4, 0xda, 0x83, 0x73, 0x22, 0xa8, 0x51,
3474 0xd8, 0x5e, 0xc2, 0xcf, 0xa2, 0xa9, 0x86, 0x65, 0xdd, 0x81, 0x4e, 0x51,
3475 0xf4, 0xdc, 0xc8, 0xdc, 0x65, 0xae, 0xf0, 0x39, 0x58, 0x97, 0x65, 0x04,
3476 0xae, 0x1c, 0x6a, 0xf5, 0xbc, 0x22, 0x82, 0x00, 0x98, 0x90, 0x88, 0x4d,
3477 0x11, 0x58, 0xe1, 0x38, 0x5c, 0x45, 0x1c, 0x80, 0x03, 0xd8, 0x0c, 0xff,
3478 0xd7, 0x44, 0x70, 0x91, 0x2a, 0x45, 0xa2, 0xc5, 0x06, 0x61, 0x3f, 0xec,
3479 0x55, 0xc2, 0x0f, 0x78, 0x0e, 0xed, 0x12, 0x6c, 0xf0, 0xc2, 0x1a, 0x79,
3480 0xfe, 0x1c, 0xbc, 0x9e, 0xfb, 0x31, 0x59, 0x99, 0xe0, 0x9c, 0xdc, 0x68,
3481 0x90, 0x25, 0x83, 0xb3, 0x72, 0xa9, 0x31, 0xec, 0xff, 0x15, 0xbe, 0x26,
3482 0xf2, 0xc6, 0x37, 0x69, 0xc2, 0xdf, 0x04, 0x6f, 0xeb, 0xf8, 0x5d, 0x21,
3483 0xde, 0xfb, 0x9c, 0x1c, 0x69, 0xf1, 0x78, 0x56, 0xaa, 0x56, 0xb7, 0xde,
3484 0xbf, 0x69, 0xf6, 0xfb, 0x3d, 0x2a, 0xd1, 0x9b, 0xc9, 0xde, 0xf0, 0x0d,
3485 0x9d, 0x6c, 0x94, 0x80, 0xef, 0x03, 0xfa, 0x4b, 0xa9, 0xfe, 0xad, 0x58,
3486 0x37, 0x63, 0x77, 0xc2, 0xdf, 0x3a, 0x74, 0x8f, 0xa3, 0x69, 0x7e, 0x42,
3487 0x1e, 0xec, 0xe4, 0xeb, 0xc5, 0x66, 0x0e, 0x9c, 0xd0, 0xba, 0xaa, 0x7e,
3488 0x8f, 0xf3, 0xe6, 0x81, 0x5f, 0x1b, 0x3f, 0xc4, 0x72, 0x96, 0xe7, 0x0c,
3489 0xaa, 0xa2, 0x0e, 0xd5, 0xdb, 0xfc, 0xcc, 0x73, 0x9c, 0xcf, 0x72, 0x18,
3490 0xff, 0x8c, 0xb5, 0x1f, 0xea, 0x5a, 0x9b, 0xb9, 0xc6, 0xbe, 0x02, 0x47,
3491 0xda, 0x96, 0x51, 0x6e, 0x92, 0x51, 0x69, 0x92, 0x5b, 0xf5, 0x65, 0x1c,
3492 0x97, 0xd0, 0xb6, 0xe1, 0x53, 0xc6, 0xc3, 0xa4, 0x8c, 0x1a, 0x46, 0x5c,
3493 0xc3, 0x0c, 0x3c, 0x0f, 0xb5, 0x7e, 0x9d, 0x01, 0x27, 0x42, 0xf8, 0x5f,
3494 0x2c, 0x20, 0x47, 0x5e, 0x73, 0xa8, 0x5f, 0xa8, 0x39, 0x51, 0x77, 0xa8,
3495 0x4f, 0x28, 0xb6, 0xed, 0x3d, 0x01, 0xdb, 0x78, 0x3e, 0xac, 0xfa, 0xbf,
3496 0xc2, 0x9e, 0x41, 0xcc, 0xc7, 0x4a, 0x23, 0xcd, 0xfb, 0xd0, 0xa9, 0x38,
3497 0x67, 0x58, 0x49, 0xfe, 0x8f, 0x92, 0xdc, 0x2e, 0x81, 0x5b, 0xad, 0x5f,
3498 0x46, 0x5e, 0xaf, 0xc7, 0xb8, 0xf1, 0x6a, 0xae, 0xd8, 0xd3, 0xc3, 0xa3,
3499 0xcc, 0x51, 0xad, 0x2f, 0xfa, 0xd3, 0x58, 0x2b, 0x4d, 0xca, 0xcf, 0x20,
3500 0xb7, 0x73, 0x3d, 0x60, 0xdb, 0x02, 0xd8, 0xd6, 0xd7, 0xc9, 0xfb, 0xa8,
3501 0x09, 0xf5, 0xb8, 0x06, 0xf4, 0x90, 0xa9, 0x0c, 0xfc, 0x3c, 0x77, 0x8e,
3502 0xf8, 0x3b, 0xf5, 0x08, 0xbc, 0x57, 0xc1, 0xeb, 0xa5, 0xe2, 0x29, 0xa3,
3503 0xb2, 0x75, 0xcc, 0x4c, 0xfa, 0x08, 0xd8, 0x0d, 0x5e, 0x3b, 0x2c, 0x97,
3504 0x85, 0x5c, 0x1f, 0x64, 0xbe, 0x82, 0xb9, 0x0c, 0xc6, 0x6e, 0x3d, 0x71,
3505 0x2d, 0xc1, 0x5e, 0x2e, 0xf6, 0x9a, 0x21, 0x19, 0xe4, 0x51, 0xaf, 0x47,
3506 0xdc, 0x0a, 0x3d, 0x97, 0xd4, 0x6d, 0xe6, 0xf2, 0x89, 0x2e, 0x2e, 0xbb,
3507 0x64, 0xc6, 0x9c, 0x78, 0x29, 0xc9, 0x41, 0x9c, 0xc7, 0x5f, 0x48, 0xe6,
3508 0x1d, 0xe4, 0xe3, 0xe7, 0x92, 0xba, 0x62, 0xe1, 0x39, 0xa0, 0xe5, 0x38,
3509 0x37, 0x67, 0x39, 0x37, 0x17, 0x90, 0x9b, 0x4b, 0xe0, 0xa7, 0xff, 0x31,
3510 0x19, 0xc8, 0x4d, 0x44, 0xbf, 0x6b, 0x48, 0xe4, 0x21, 0x13, 0xf2, 0xdc,
3511 0x1b, 0xcc, 0xc1, 0x36, 0xcf, 0xfe, 0x18, 0x67, 0x0a, 0xcf, 0x70, 0xde,
3512 0xd4, 0x3a, 0x13, 0x28, 0xf7, 0x32, 0x8d, 0x16, 0x2e, 0x23, 0x4f, 0x9a,
3513 0x34, 0x81, 0xdd, 0x78, 0xdf, 0xb4, 0x96, 0xa7, 0x3d, 0x05, 0xff, 0xbd,
3514 0x6f, 0x90, 0xe2, 0xfa, 0xfb, 0x1d, 0xe8, 0x18, 0x71, 0xa7, 0xc0, 0xfb,
3515 0xc5, 0xd2, 0x7f, 0x93, 0xf9, 0x43, 0x22, 0x83, 0xba, 0x56, 0xe4, 0x7d,
3516 0x89, 0x2a, 0x2d, 0xf6, 0x83, 0xdf, 0x85, 0x07, 0x1f, 0x78, 0x20, 0xaa,
3517 0x36, 0xc1, 0x3f, 0xc4, 0x38, 0xc6, 0x1a, 0xd6, 0x8b, 0x22, 0x72, 0xaa,
3518 0xc3, 0xb8, 0x66, 0xbc, 0x9f, 0x49, 0xf0, 0x3e, 0x0b, 0xbc, 0x7b, 0xe3,
3519 0x37, 0xc0, 0xa3, 0x1b, 0x0f, 0xf1, 0xe8, 0x4c, 0x82, 0xf1, 0x59, 0x60,
3520 0xfc, 0x97, 0xc0, 0x96, 0x85, 0x9a, 0x0e, 0xdc, 0x36, 0xc8, 0x88, 0x50,
3521 0x1b, 0x80, 0x83, 0x44, 0xcf, 0xe9, 0x44, 0xcf, 0xcc, 0x63, 0xf4, 0x9c,
3522 0x4e, 0xf4, 0xcc, 0x74, 0xeb, 0x81, 0x5c, 0x25, 0x91, 0x0b, 0x1f, 0x23,
3523 0x57, 0x49, 0xe4, 0xc2, 0x2e, 0x39, 0x0b, 0x67, 0xe2, 0x73, 0x71, 0x1e,
3524 0xdb, 0x45, 0x2c, 0x7c, 0x8a, 0xb1, 0x62, 0x87, 0x18, 0xef, 0x61, 0x04,
3525 0x66, 0x9a, 0x37, 0xb1, 0x96, 0xfd, 0x90, 0x61, 0x0e, 0x3c, 0xe2, 0xbb,
3526 0x3d, 0xf8, 0x6e, 0x1f, 0xef, 0xf8, 0xfb, 0x66, 0x82, 0x15, 0xae, 0x45,
3527 0x5e, 0x2d, 0x7c, 0x68, 0x6d, 0x46, 0xb0, 0x9f, 0xc5, 0xd5, 0xc3, 0x62,
3528 0x60, 0x61, 0x0e, 0x35, 0xa7, 0x69, 0x52, 0x59, 0x32, 0x57, 0x5f, 0x91,
3529 0x31, 0x76, 0xb7, 0xb1, 0x7e, 0xbb, 0xc3, 0xab, 0x99, 0x46, 0x8e, 0x68,
3530 0xbd, 0x97, 0x16, 0x50, 0x4f, 0xce, 0x03, 0x4b, 0xd7, 0x7d, 0xb0, 0x90,
3531 0x86, 0x81, 0x0b, 0x0d, 0x5c, 0x7b, 0x71, 0x6c, 0x23, 0xb5, 0x08, 0x66,
3532 0xfc, 0x88, 0x76, 0x26, 0xf3, 0x94, 0xd9, 0xec, 0xd4, 0x43, 0xb9, 0xde,
3533 0xbd, 0x8f, 0x8b, 0x7d, 0x02, 0xd4, 0xe0, 0x3f, 0xa2, 0x17, 0x70, 0x48,
3534 0x8e, 0x22, 0x97, 0x36, 0x39, 0x27, 0x80, 0xa3, 0x9b, 0x5c, 0xeb, 0x39,
3535 0xe7, 0x5a, 0xc0, 0x62, 0x9a, 0x7f, 0x72, 0xe8, 0x5b, 0x3e, 0x41, 0xed,
3536 0x10, 0x34, 0x5f, 0xd4, 0x7a, 0xca, 0xff, 0x04, 0xb8, 0xc2, 0xb7, 0x75,
3537 0x9e, 0xdb, 0xc5, 0x77, 0xfe, 0x66, 0x51, 0x76, 0xf5, 0x49, 0xec, 0x89,
3538 0xfd, 0xce, 0xf0, 0xfa, 0x1c, 0x7a, 0x1a, 0xce, 0xf3, 0x18, 0xd7, 0xf9,
3539 0xdd, 0x48, 0x7c, 0x6a, 0x62, 0xfc, 0x02, 0x46, 0x3e, 0x4f, 0x0f, 0xce,
3540 0xa7, 0xf5, 0x5d, 0x9f, 0x9f, 0xb5, 0x96, 0x41, 0x2f, 0x95, 0x1b, 0x0a,
3541 0xf5, 0x7d, 0xa4, 0xb0, 0x00, 0x9e, 0x95, 0x5b, 0xe9, 0x3c, 0xcf, 0xd9,
3542 0x5d, 0x73, 0x78, 0x6e, 0xf1, 0x77, 0x41, 0x3b, 0x6a, 0x11, 0x75, 0x11,
3543 0xfd, 0xd3, 0x3a, 0xf7, 0x61, 0xdc, 0x53, 0xc5, 0xf5, 0x72, 0x9c, 0x7b,
3544 0xb0, 0x77, 0x90, 0xff, 0xd7, 0xc1, 0x29, 0xf0, 0xfb, 0x29, 0x41, 0x4f,
3545 0x50, 0xd9, 0x49, 0xcf, 0xa3, 0x35, 0x38, 0x5b, 0x30, 0x0d, 0xe6, 0xe2,
3546 0xb0, 0x3d, 0x4d, 0xdc, 0x6b, 0x8d, 0x84, 0x55, 0x96, 0x69, 0x21, 0x1f,
3547 0xac, 0x68, 0xaa, 0x76, 0xf4, 0xd8, 0xb3, 0xc8, 0xd1, 0xd1, 0x4f, 0xb8,
3548 0xb6, 0xb1, 0x6f, 0x4f, 0xc0, 0x1e, 0xf4, 0x05, 0xeb, 0x92, 0xde, 0x6e,
3549 0xb0, 0x9e, 0x3c, 0x99, 0xe8, 0x11, 0x97, 0xfd, 0x54, 0xcf, 0x9f, 0xa0,
3550 0x87, 0x1c, 0x41, 0xdc, 0xff, 0x4a, 0xe8, 0x62, 0x1f, 0x64, 0xd0, 0x8f,
3551 0x8f, 0xd3, 0xbc, 0x5a, 0x8c, 0x6b, 0xf1, 0x79, 0xd4, 0xde, 0xa8, 0x98,
3552 0x85, 0xef, 0x72, 0xb1, 0x9e, 0x7a, 0xf3, 0x5f, 0x9a, 0xf3, 0x0f, 0xea,
3553 0x24, 0xf4, 0xe3, 0xbd, 0x8d, 0xb9, 0x95, 0x80, 0xde, 0x6c, 0xc6, 0xb5,
3554 0xdb, 0xbe, 0x88, 0x9e, 0xbf, 0xd2, 0xf8, 0x47, 0xda, 0xcb, 0x84, 0xc0,
3555 0x71, 0xe1, 0x02, 0x7c, 0x23, 0xb7, 0x7b, 0xe9, 0x35, 0xf4, 0xa8, 0x99,
3556 0x15, 0xd4, 0x65, 0xf8, 0x4d, 0x5c, 0xad, 0x8d, 0x73, 0x9f, 0x79, 0x03,
3557 0x5c, 0x9f, 0x2f, 0x2a, 0xdf, 0x34, 0x46, 0x69, 0xf9, 0x67, 0x5c, 0x67,
3558 0xe2, 0x7a, 0x0d, 0xfc, 0xb8, 0x74, 0xa5, 0xa5, 0x68, 0xb9, 0x65, 0xc3,
3559 0x2e, 0xfb, 0x41, 0x2f, 0xae, 0x38, 0x1f, 0x57, 0xf0, 0x8b, 0xf3, 0x2d,
3560 0xce, 0x04, 0x3e, 0x04, 0xec, 0x0f, 0xee, 0xbd, 0x39, 0x66, 0x9c, 0xff,
3561 0x4e, 0xe1, 0x99, 0xcf, 0xca, 0xbd, 0x32, 0xfb, 0x81, 0x7b, 0xe2, 0xee,
3562 0xfe, 0x9d, 0x73, 0x23, 0x74, 0x6e, 0x33, 0x87, 0xb8, 0x47, 0xa9, 0xc8,
3563 0xf9, 0x86, 0x1d, 0xf3, 0xaa, 0xde, 0xee, 0xf8, 0x3b, 0xf2, 0x59, 0xa7,
3564 0x57, 0x0a, 0xe9, 0xce, 0x8b, 0x22, 0xee, 0x3b, 0x42, 0xe4, 0x15, 0x3e,
3565 0xcb, 0x04, 0xee, 0x27, 0x1e, 0x7c, 0xe7, 0xa1, 0x2f, 0xe9, 0xf0, 0x73,
3566 0x38, 0xe1, 0xe7, 0x50, 0xeb, 0x44, 0x26, 0xed, 0xc7, 0x0e, 0x72, 0xee,
3567 0x17, 0xe2, 0x7f, 0xe7, 0xdc, 0x46, 0xc2, 0xb9, 0x6c, 0x8c, 0x4d, 0xb1,
3568 0xd2, 0x3d, 0xf7, 0x0e, 0xe6, 0x72, 0x5d, 0xf7, 0xa2, 0xc3, 0x62, 0x12,
3569 0xf3, 0x03, 0x9c, 0xe4, 0x75, 0x88, 0xff, 0x4a, 0x2f, 0x99, 0x57, 0x99,
3570 0x97, 0x29, 0x46, 0x5c, 0xe0, 0x31, 0xd5, 0xd1, 0x83, 0x3d, 0x70, 0xd7,
3571 0x59, 0xcd, 0xc4, 0xf8, 0x37, 0x83, 0x74, 0x4d, 0x81, 0xa6, 0x1b, 0x9e,
3572 0x7f, 0x87, 0xc7, 0x16, 0xcf, 0x4b, 0xca, 0xae, 0x58, 0xf4, 0xfa, 0x98,
3573 0xe7, 0xba, 0xc2, 0xf3, 0x77, 0x60, 0xf7, 0x5d, 0xe5, 0x50, 0x66, 0x94,
3574 0x39, 0xc9, 0x15, 0x2a, 0x0b, 0xdc, 0xe0, 0x0e, 0xd8, 0xd4, 0x97, 0xd0,
3575 0x1f, 0xb9, 0x12, 0xb1, 0xfd, 0x29, 0x6c, 0xe1, 0x7c, 0x0b, 0xbb, 0xc6,
3576 0xd7, 0x81, 0x83, 0x05, 0x7e, 0xdf, 0xc7, 0x18, 0xdf, 0x2d, 0x78, 0x7f,
3577 0x07, 0x67, 0xb0, 0x28, 0xb7, 0xaa, 0x71, 0xf7, 0x7b, 0x20, 0x77, 0x25,
3578 0xc1, 0x6b, 0x06, 0xdf, 0xe7, 0x63, 0xbc, 0x72, 0x1c, 0xd9, 0xe7, 0x5a,
3579 0x7f, 0x80, 0x38, 0x96, 0xe9, 0x2f, 0x31, 0x8f, 0xef, 0xfa, 0x31, 0x7e,
3580 0x61, 0x0f, 0x64, 0x5a, 0x9f, 0xca, 0x98, 0xe7, 0xe0, 0xc3, 0x65, 0x3f,
3581 0xc6, 0xd7, 0xf8, 0x4d, 0x1c, 0xbb, 0x83, 0xfd, 0x6e, 0x3d, 0xc3, 0xf6,
3582 0x49, 0x8a, 0x39, 0xe5, 0x2e, 0x72, 0x8f, 0xe9, 0x8f, 0x20, 0xdf, 0x62,
3583 0x5d, 0x2b, 0xe5, 0x7d, 0x16, 0x7c, 0x67, 0x5f, 0x33, 0xf7, 0x07, 0x92,
3584 0xe7, 0x2f, 0x22, 0xb6, 0x36, 0xfc, 0xd8, 0xe9, 0x05, 0xcc, 0x15, 0xb6,
3585 0xad, 0x97, 0xd4, 0xd5, 0xd4, 0xae, 0x4f, 0x63, 0x7b, 0x1e, 0xd6, 0x89,
3586 0xf9, 0xed, 0xc3, 0xe4, 0xec, 0x2e, 0xb9, 0xbf, 0x1f, 0x22, 0x87, 0xf9,
3587 0x6d, 0x96, 0xc9, 0xef, 0xf7, 0x20, 0xe5, 0x7d, 0x3c, 0x87, 0xc0, 0x3b,
3588 0xcb, 0x3e, 0x7a, 0xef, 0xec, 0xc6, 0x7e, 0x5a, 0xfb, 0x19, 0xdf, 0xbc,
3589 0xa7, 0xe7, 0x72, 0xef, 0xde, 0xc1, 0x76, 0x1e, 0x79, 0x2f, 0xf6, 0x03,
3590 0x72, 0xa6, 0x37, 0x3e, 0x47, 0x29, 0xfe, 0x1f, 0x60, 0x7c, 0x01, 0x76,
3591 0x55, 0x68, 0xa2, 0xc4, 0xe3, 0xc9, 0x03, 0x18, 0xe7, 0xfb, 0x3a, 0xd7,
3592 0xa6, 0x3c, 0xee, 0x61, 0x5c, 0xe7, 0xf9, 0x2e, 0xd6, 0xc9, 0x53, 0x95,
3593 0x35, 0x7e, 0xff, 0x2c, 0x79, 0xe7, 0xbc, 0xcc, 0x7d, 0xd4, 0x0d, 0x9c,
3594 0x9f, 0xeb, 0xd1, 0x18, 0xd5, 0x1d, 0xf8, 0xd5, 0x67, 0x1b, 0x2e, 0xd0,
3595 0x83, 0x1e, 0xec, 0xb0, 0xba, 0xb2, 0x6a, 0x76, 0x71, 0xe5, 0xb0, 0x7e,
3596 0x8c, 0xef, 0x27, 0x46, 0x79, 0xcd, 0x48, 0x7a, 0x78, 0xee, 0xbf, 0xf6,
3597 0xb4, 0x19, 0xf7, 0x62, 0x9c, 0x17, 0xb8, 0x07, 0x7b, 0x0d, 0xfb, 0xf6,
3598 0xc5, 0xef, 0xe1, 0x16, 0x8f, 0xec, 0x17, 0x8a, 0x79, 0xd1, 0xe1, 0x79,
3599 0x6a, 0x77, 0x84, 0x75, 0xf0, 0x8f, 0x88, 0x52, 0x9b, 0xa8, 0xfa, 0x16,
3600 0xd7, 0x54, 0x3b, 0xc9, 0xff, 0x17, 0x31, 0x3e, 0x9f, 0x60, 0x20, 0x3d,
3601 0x4b, 0xec, 0x57, 0xec, 0xaf, 0xf5, 0x2c, 0x30, 0xf5, 0xba, 0x9f, 0xda,
3602 0x0a, 0x6c, 0x7f, 0x23, 0xcd, 0x31, 0x88, 0x97, 0xda, 0xd3, 0x72, 0x34,
3603 0x84, 0x2d, 0xfc, 0xff, 0x82, 0x0a, 0x7a, 0x3b, 0xb6, 0x65, 0xc6, 0x78,
3604 0x79, 0xff, 0x7f, 0x04, 0x8f, 0xf6, 0x71, 0x1c, 0x3f, 0x8e, 0xef, 0x7e,
3605 0xfc, 0xac, 0x1c, 0x7c, 0xff, 0x51, 0xc3, 0xb3, 0x07, 0x04, 0xe7, 0x23,
3606 0xb2, 0xb2, 0x88, 0xc1, 0x5d, 0xc4, 0x28, 0x24, 0xaf, 0xf4, 0x41, 0xdc,
3607 0x9b, 0x13, 0x38, 0x37, 0x11, 0xe2, 0x19, 0x1c, 0xc0, 0xd9, 0x46, 0x3d,
3608 0xff, 0x3d, 0xe2, 0x38, 0x58, 0xb8, 0x6b, 0x74, 0x62, 0x37, 0x96, 0xc4,
3609 0x6e, 0xb4, 0xf5, 0xf0, 0x99, 0x5d, 0xf1, 0x52, 0xf2, 0xce, 0x67, 0xe2,
3610 0x5e, 0xc1, 0xe5, 0x1e, 0x09, 0x3e, 0x28, 0x19, 0x9d, 0x7b, 0x7b, 0x93,
3611 0xef, 0x97, 0x35, 0xce, 0xe5, 0xdc, 0xcf, 0x81, 0x6b, 0xa8, 0x96, 0x23,
3612 0xb8, 0x6b, 0x68, 0x5d, 0x2f, 0x31, 0x76, 0x27, 0xc6, 0xa7, 0x62, 0x0c,
3613 0x8b, 0x41, 0x41, 0x29, 0xb7, 0xba, 0x9f, 0x31, 0x96, 0xf8, 0x9e, 0xc6,
3614 0xef, 0x1d, 0x1d, 0x1b, 0xc0, 0x1d, 0x6e, 0x32, 0xb8, 0x1d, 0xb2, 0x7e,
3615 0xa3, 0xd3, 0x13, 0xdb, 0x11, 0xf3, 0x1e, 0xb8, 0x7b, 0x1f, 0x76, 0x85,
3616 0xe0, 0x6d, 0xe7, 0x6e, 0x37, 0x87, 0x9c, 0x72, 0x1b, 0xb1, 0xbd, 0xab,
3617 0x3a, 0x75, 0x71, 0x83, 0xfb, 0xae, 0x16, 0xf2, 0x4d, 0x1e, 0xbd, 0xb2,
3618 0x4a, 0xef, 0xa2, 0x16, 0x5d, 0xc3, 0x9a, 0xeb, 0x98, 0xbb, 0xd2, 0x4a,
3619 0x71, 0x84, 0x1e, 0x0f, 0xd8, 0x9c, 0x57, 0xff, 0xd4, 0x55, 0xa7, 0x7b,
3620 0x2d, 0xff, 0xfd, 0x07, 0x5d, 0xe7, 0x92, 0xbb, 0xa8, 0x13, 0x00, 0x00,
3621 0x00 };
3622
3623static const u32 bnx2_TPAT_b09FwData[(0x0/4) + 1] = { 0x0 };
3624static const u32 bnx2_TPAT_b09FwRodata[(0x4/4) + 1] = {
3625 0x00000001, 0x00000000 };
3626
3627static struct fw_info bnx2_tpat_fw_09 = {
3628 /* Firmware version: 4.6.15 */
3629 .ver_major = 0x4,
3630 .ver_minor = 0x6,
3631 .ver_fix = 0xf,
3632
3633 .start_addr = 0x08000488,
3634
3635 .text_addr = 0x08000400,
3636 .text_len = 0x13a4,
3637 .text_index = 0x0,
3638 .gz_text = bnx2_TPAT_b09FwText,
3639 .gz_text_len = sizeof(bnx2_TPAT_b09FwText),
3640
3641 .data_addr = 0x00000000,
3642 .data_len = 0x0,
3643 .data_index = 0x0,
3644 .data = bnx2_TPAT_b09FwData,
3645
3646 .sbss_addr = 0x080017c0,
3647 .sbss_len = 0x40,
3648 .sbss_index = 0x0,
3649
3650 .bss_addr = 0x08001800,
3651 .bss_len = 0x12b4,
3652 .bss_index = 0x0,
3653
3654 .rodata_addr = 0x080017a4,
3655 .rodata_len = 0x4,
3656 .rodata_index = 0x0,
3657 .rodata = bnx2_TPAT_b09FwRodata,
3658};
3659
3660static u8 bnx2_TXP_b09FwText[] = {
3661 0xc5, 0x7b, 0x7d, 0x70, 0x1b, 0xe7, 0x79, 0xe7, 0xef, 0xc5, 0x02, 0xe4,
3662 0x02, 0x04, 0x41, 0x90, 0x82, 0x64, 0xf0, 0xca, 0x44, 0x58, 0x61, 0x41,
3663 0xc1, 0x26, 0x2d, 0x2f, 0x28, 0x50, 0x82, 0xcb, 0x55, 0x85, 0x4a, 0xb4,
3664 0x44, 0xc7, 0x74, 0x43, 0x3b, 0x6a, 0x4b, 0x67, 0x3c, 0x09, 0x2a, 0x51,
3665 0x16, 0x2d, 0xcb, 0x16, 0xed, 0xf8, 0x7a, 0xec, 0x9c, 0x27, 0xda, 0x50,
3666 0x1f, 0x96, 0x25, 0x10, 0x00, 0x3f, 0x64, 0xca, 0x9d, 0xce, 0x19, 0x26,
3667 0x29, 0x51, 0xb6, 0xf1, 0x21, 0xc7, 0x4a, 0x6a, 0xcf, 0x24, 0x11, 0x4e,
3668 0x96, 0x65, 0xd9, 0x89, 0x3f, 0x92, 0xf8, 0x7a, 0x4e, 0xa7, 0x37, 0xd5,
3669 0x48, 0xfe, 0x90, 0x2c, 0xf9, 0xa3, 0x69, 0x6f, 0x2a, 0xb5, 0x4e, 0xf7,
3670 0x9e, 0x67, 0x17, 0x94, 0x15, 0xd7, 0x9d, 0x9b, 0xf6, 0xfe, 0x38, 0xce,
3671 0x70, 0x00, 0xec, 0xbe, 0xfb, 0xbe, 0xcf, 0xf7, 0xf3, 0x7b, 0x9e, 0xf7,
3672 0xdd, 0x56, 0xc0, 0x83, 0xea, 0x5f, 0x3d, 0xfd, 0xc7, 0x87, 0x86, 0x1f,
3673 0x8e, 0x2d, 0x5b, 0xb1, 0x8c, 0xbe, 0x76, 0xa2, 0xa1, 0xc6, 0xc9, 0x37,
3674 0x57, 0x08, 0x20, 0xf5, 0x21, 0xfe, 0x43, 0x7f, 0x5f, 0xf9, 0x8f, 0x3d,
3675 0x66, 0xfd, 0x49, 0x80, 0x7f, 0x9e, 0x2e, 0xfe, 0x87, 0xec, 0xd0, 0x93,
3676 0x5d, 0x6b, 0x54, 0xc8, 0x92, 0x7e, 0x79, 0xd5, 0x26, 0x15, 0x48, 0x16,
3677 0xda, 0x42, 0x6b, 0xf1, 0x1b, 0xd3, 0x08, 0x38, 0xc1, 0xd7, 0xbf, 0xa2,
3678 0x7f, 0xb6, 0xe3, 0xc7, 0x2b, 0x95, 0x4f, 0xf3, 0x12, 0x64, 0xbf, 0x7e,
3679 0x10, 0xfe, 0x56, 0xc8, 0x2d, 0xf4, 0xcc, 0x5f, 0x2c, 0x2d, 0x39, 0xe1,
3680 0x9b, 0x9f, 0x0b, 0x86, 0x4b, 0xd7, 0xb0, 0x33, 0x3b, 0x84, 0x23, 0x71,
3681 0xa0, 0x76, 0x34, 0xa2, 0xed, 0x04, 0x72, 0x0e, 0x3d, 0x12, 0x3a, 0x81,
3682 0x10, 0x66, 0x0b, 0x2a, 0x1e, 0x2d, 0xc3, 0x70, 0xea, 0x21, 0x3c, 0x96,
3683 0xfe, 0x17, 0x33, 0xe4, 0xe2, 0x47, 0x86, 0xb0, 0x8b, 0xc6, 0xee, 0x4e,
3684 0x43, 0x0e, 0xea, 0x8f, 0x20, 0x98, 0x85, 0x5c, 0xaf, 0x0f, 0xa3, 0x38,
3685 0x1a, 0x3e, 0x3d, 0x07, 0xa5, 0xaf, 0x59, 0x52, 0x86, 0x80, 0xb6, 0xd4,
3686 0x5d, 0x42, 0xe9, 0x2f, 0x09, 0x25, 0xb1, 0x4d, 0x40, 0x16, 0x34, 0xee,
3687 0x86, 0x02, 0x7f, 0x0e, 0x63, 0x69, 0x41, 0xc6, 0x19, 0x89, 0xe7, 0x59,
3688 0x45, 0xf2, 0x16, 0x70, 0xaa, 0x1a, 0x76, 0x67, 0x79, 0x0d, 0x81, 0x9d,
3689 0xf1, 0x88, 0x7f, 0x06, 0x7c, 0x3f, 0x84, 0x11, 0x6b, 0x9c, 0x42, 0x5c,
3690 0x9b, 0xe6, 0x2e, 0xcd, 0x34, 0x0f, 0x69, 0xb5, 0x30, 0xfc, 0x4a, 0x10,
3691 0x10, 0x18, 0xd1, 0x1c, 0x48, 0xfa, 0xd7, 0x84, 0x9c, 0x50, 0x82, 0x9b,
3692 0xf1, 0xcf, 0xc4, 0x73, 0x32, 0xea, 0x82, 0x3d, 0x3e, 0x85, 0x5a, 0x54,
3693 0xfc, 0xb6, 0xd4, 0xa6, 0xd3, 0xa6, 0x79, 0x4a, 0x75, 0xe2, 0x10, 0xc9,
3694 0x67, 0xa4, 0xf0, 0xcf, 0x66, 0x85, 0x64, 0xb3, 0x4b, 0x9d, 0x5f, 0x5f,
3695 0x46, 0xde, 0x6f, 0x9a, 0x33, 0x74, 0x6f, 0x4f, 0x61, 0x5e, 0xce, 0xa6,
3696 0xe9, 0x50, 0x4d, 0x73, 0x93, 0xfa, 0x4f, 0xe6, 0xc6, 0xdf, 0x1a, 0x1b,
3697 0xc3, 0x33, 0x39, 0x3f, 0x9e, 0xcd, 0x26, 0x51, 0x48, 0x9b, 0x90, 0x74,
3698 0x27, 0x06, 0x47, 0x43, 0xd8, 0x56, 0xec, 0x46, 0x31, 0xad, 0xa4, 0xce,
3699 0xd0, 0x73, 0x1b, 0xe3, 0x2a, 0xee, 0x2f, 0xf6, 0x60, 0x2e, 0x0d, 0xd3,
3700 0xad, 0xab, 0x15, 0xb7, 0x88, 0x62, 0x4b, 0xb1, 0x17, 0xa5, 0xb4, 0x7a,
3701 0x7a, 0x44, 0x44, 0x86, 0x9b, 0x25, 0x27, 0xb6, 0x17, 0xdb, 0xf1, 0x40,
3702 0x31, 0x41, 0xcf, 0x98, 0xf8, 0x5a, 0xac, 0x85, 0xc6, 0x77, 0xe0, 0xe9,
3703 0x49, 0xd3, 0x8c, 0xc6, 0xfc, 0x18, 0x2c, 0x6a, 0x98, 0xcb, 0x39, 0x90,
3704 0x3a, 0xe4, 0x44, 0xea, 0x29, 0x60, 0xcb, 0x53, 0x1d, 0x98, 0xc9, 0x99,
3705 0xd8, 0xa8, 0x8d, 0x34, 0x3b, 0xe0, 0x42, 0xca, 0x2f, 0xe0, 0x52, 0x7d,
3706 0xd8, 0xec, 0xb7, 0x69, 0x3f, 0x23, 0x09, 0x6c, 0x7d, 0x2a, 0x8a, 0x77,
3707 0xd2, 0x06, 0xbe, 0xd6, 0x19, 0xc4, 0x70, 0x31, 0x80, 0x37, 0xd3, 0x01,
3708 0x5a, 0x43, 0xc3, 0x1b, 0x69, 0x99, 0xd6, 0x69, 0xc7, 0xc9, 0x34, 0x8f,
3709 0xe1, 0xb1, 0x5e, 0x0c, 0x14, 0x5b, 0xf0, 0x7a, 0x3a, 0x48, 0x6b, 0x06,
3710 0xf0, 0x2a, 0x8d, 0xbb, 0xb7, 0xa8, 0xe2, 0x34, 0x8d, 0x1b, 0x2c, 0x86,
3711 0xf0, 0x4a, 0xda, 0x4b, 0xb4, 0x06, 0x70, 0x22, 0x3d, 0x84, 0x9d, 0xe9,
3712 0xb6, 0xd3, 0x6b, 0x49, 0x86, 0xa1, 0x05, 0xbc, 0x0e, 0x5f, 0x7b, 0xd7,
3713 0xec, 0x0d, 0x58, 0xa6, 0x42, 0xeb, 0xcc, 0xaf, 0x3b, 0x84, 0x91, 0xf4,
3714 0xa9, 0xaa, 0xbf, 0x68, 0x78, 0x2c, 0x77, 0xd9, 0xfc, 0xf1, 0xd2, 0x16,
3715 0x1c, 0xc9, 0x02, 0x4f, 0xcf, 0x00, 0x33, 0x59, 0xc3, 0xac, 0xd7, 0x4d,
3716 0x73, 0xba, 0xb3, 0x9d, 0xe4, 0xa5, 0xf6, 0x6f, 0xa4, 0x51, 0xcf, 0x96,
3717 0x9d, 0xc0, 0x53, 0x4a, 0x7f, 0x05, 0x0e, 0xe4, 0xe7, 0x9c, 0xa8, 0x19,
3718 0x55, 0x7a, 0xf2, 0x50, 0x4e, 0x6f, 0x21, 0x8f, 0x3a, 0x94, 0x55, 0xfa,
3719 0x0c, 0xec, 0x30, 0x83, 0x7a, 0x6b, 0xa8, 0x5d, 0x32, 0xe1, 0x23, 0x5b,
3720 0x48, 0xb7, 0x9b, 0x66, 0xc3, 0x4a, 0xd3, 0x7c, 0xbd, 0x13, 0xa6, 0x43,
3721 0x57, 0x4f, 0x97, 0xa1, 0x56, 0x3e, 0x82, 0x3a, 0x7c, 0x02, 0x95, 0xaf,
3722 0x78, 0x11, 0x19, 0x0c, 0x4b, 0x91, 0xa1, 0xcb, 0xf4, 0x6c, 0x7d, 0x91,
3723 0xcc, 0x99, 0x78, 0x51, 0x47, 0x81, 0x62, 0x59, 0x86, 0x93, 0xf8, 0x69,
3724 0x1f, 0x35, 0x4d, 0xa7, 0xea, 0x85, 0x97, 0xe4, 0xbb, 0xfe, 0x80, 0x69,
3725 0xbe, 0xaf, 0xf9, 0x51, 0x43, 0xba, 0xb9, 0x65, 0xcc, 0xc4, 0xb4, 0x76,
3726 0x82, 0xe4, 0x29, 0x90, 0xea, 0x8b, 0xd3, 0x33, 0x01, 0x1a, 0x9f, 0xc0,
3727 0xfa, 0xd1, 0x20, 0x9e, 0xc9, 0xca, 0xf8, 0xf1, 0xd2, 0x28, 0xea, 0x68,
3728 0x2e, 0x0f, 0xc9, 0xaa, 0x96, 0xe4, 0x87, 0x22, 0x99, 0x5b, 0xd1, 0xb6,
3729 0x47, 0x14, 0xcf, 0x10, 0x8f, 0x41, 0x7c, 0xbf, 0x1c, 0xc0, 0x73, 0x65,
3730 0x3f, 0x8e, 0x96, 0x5b, 0x70, 0xbc, 0xac, 0xe1, 0x60, 0x4e, 0xd9, 0x5b,
3731 0x81, 0x89, 0x7a, 0x7d, 0x07, 0x1a, 0x96, 0x03, 0x6f, 0xe6, 0x63, 0xc8,
3732 0xe4, 0x4c, 0xb3, 0x40, 0x74, 0x7b, 0x88, 0x8f, 0x37, 0xf2, 0x5f, 0xc5,
3733 0xe1, 0x49, 0x27, 0x42, 0xd3, 0x01, 0x3c, 0x9b, 0x76, 0xe2, 0xfa, 0x8c,
3734 0x62, 0xe4, 0xa1, 0x46, 0xb7, 0x09, 0x35, 0x79, 0x83, 0x50, 0x72, 0x06,
3735 0x22, 0x21, 0x97, 0x70, 0xa0, 0xf5, 0xb0, 0x13, 0x6a, 0x29, 0x04, 0x57,
3736 0xab, 0x0c, 0xb5, 0xf5, 0x21, 0xc0, 0xe7, 0x40, 0x0d, 0xf9, 0xc6, 0xfa,
3737 0xf1, 0x28, 0x5d, 0x0b, 0xd0, 0x35, 0x7c, 0xb5, 0x16, 0xd2, 0x22, 0x09,
3738 0x24, 0x3b, 0x55, 0x42, 0xd2, 0x69, 0x9a, 0x92, 0xda, 0x81, 0xbb, 0x1e,
3739 0x37, 0xcd, 0xf0, 0x72, 0x1e, 0xef, 0x47, 0xb8, 0x44, 0x72, 0x68, 0x25,
3740 0xba, 0xb2, 0x44, 0x67, 0x96, 0xe8, 0xcc, 0x12, 0x9d, 0x59, 0x89, 0xec,
3741 0x46, 0xd1, 0x80, 0x47, 0x48, 0x5f, 0x21, 0xe2, 0xf1, 0x1d, 0x4b, 0x57,
3742 0xcf, 0x95, 0x83, 0xc4, 0x43, 0xc8, 0xe2, 0xe1, 0xe9, 0x9c, 0x80, 0x43,
3743 0x55, 0xfa, 0xce, 0x60, 0x35, 0xc2, 0x31, 0x25, 0x99, 0x47, 0x92, 0x9e,
3744 0x53, 0xf6, 0x1a, 0x50, 0x7a, 0x2a, 0x64, 0x03, 0x1b, 0xfd, 0x09, 0xcc,
3745 0x65, 0x5d, 0xa8, 0x53, 0x95, 0x10, 0xe9, 0x2c, 0x5a, 0xc1, 0x02, 0xdc,
3746 0xe7, 0xa7, 0x39, 0x1d, 0xb2, 0xb0, 0x63, 0xc9, 0x23, 0x88, 0x8c, 0x3b,
3747 0x30, 0xab, 0x49, 0xe4, 0xa3, 0x1a, 0xa4, 0x56, 0x5a, 0xae, 0x14, 0xa7,
3748 0x4f, 0x9a, 0x3f, 0x4b, 0x6b, 0x11, 0x3d, 0x34, 0x1f, 0xf9, 0x26, 0xcb,
3749 0x32, 0x4a, 0x34, 0x3c, 0x6a, 0xd1, 0x7b, 0xb4, 0xfc, 0x75, 0x61, 0xdb,
3750 0x90, 0x4e, 0x36, 0xa3, 0x84, 0x20, 0x94, 0x68, 0x48, 0x28, 0x5a, 0x52,
3751 0xf8, 0x31, 0x53, 0x7e, 0x83, 0xc6, 0x04, 0xae, 0x19, 0xd3, 0x87, 0x91,
3752 0xac, 0xc0, 0x5a, 0xd5, 0xc4, 0x1a, 0xad, 0x0f, 0x3b, 0xcb, 0xf3, 0xbe,
3753 0xc9, 0x31, 0xcc, 0xef, 0x9b, 0x49, 0x77, 0x63, 0x57, 0x36, 0x84, 0x9d,
3754 0x85, 0xa0, 0x6f, 0x3a, 0xcd, 0xf7, 0x54, 0xf2, 0x79, 0xbe, 0x17, 0xb8,
3755 0xe6, 0x5e, 0xcb, 0x35, 0xf7, 0x12, 0x18, 0x99, 0xf8, 0x1d, 0x8a, 0x23,
3756 0x0d, 0xd8, 0xa9, 0x7e, 0x4a, 0xf6, 0xa2, 0x26, 0x06, 0xd0, 0x8c, 0x33,
3757 0xfe, 0x76, 0xec, 0x9f, 0xea, 0xc5, 0xae, 0xa9, 0x65, 0x78, 0x6c, 0xa2,
3758 0x25, 0xe5, 0xd1, 0x49, 0x38, 0x9e, 0x70, 0x72, 0x40, 0x28, 0x43, 0x92,
3759 0x08, 0x47, 0x07, 0xc8, 0x7e, 0x5b, 0x1b, 0x4d, 0xf3, 0x44, 0x8c, 0xec,
3760 0x5b, 0x6b, 0xd3, 0xd6, 0x93, 0x00, 0x2a, 0x7d, 0x4a, 0xcf, 0xbb, 0xf0,
3761 0xe2, 0x76, 0xb2, 0xbb, 0x99, 0x18, 0x06, 0x24, 0x48, 0xed, 0x5e, 0xfc,
3762 0xbd, 0xf9, 0x94, 0x93, 0xe5, 0x6e, 0xee, 0xd8, 0xa4, 0xed, 0x15, 0x1c,
3763 0xeb, 0x6a, 0xae, 0xc6, 0x13, 0x9e, 0x9f, 0x9f, 0x21, 0xdd, 0xd1, 0x3c,
3764 0x83, 0xb1, 0xb6, 0xc4, 0x20, 0x2e, 0x9b, 0x67, 0x36, 0xf4, 0x62, 0xe7,
3765 0xdc, 0x32, 0xec, 0x9b, 0x70, 0x21, 0xd9, 0x28, 0xd0, 0xa0, 0x86, 0x2b,
3766 0xf7, 0x61, 0x19, 0x8c, 0x19, 0x7e, 0xae, 0x17, 0x07, 0xe7, 0xec, 0xdf,
3767 0xd9, 0xab, 0xbf, 0xe7, 0xe7, 0x3b, 0x4f, 0x3a, 0x65, 0x79, 0x72, 0xac,
3768 0x24, 0x15, 0xe8, 0x6d, 0x38, 0x32, 0x11, 0x20, 0xdd, 0x76, 0x0b, 0xe7,
3769 0xe1, 0x45, 0x3e, 0xcf, 0xe3, 0x26, 0x4e, 0x69, 0xa4, 0xe7, 0xec, 0x3a,
3770 0xe1, 0x39, 0xdc, 0x23, 0x5c, 0xa5, 0x3b, 0x45, 0xcd, 0xf4, 0x37, 0x85,
3771 0x7c, 0x38, 0x25, 0x6a, 0x4b, 0xed, 0x24, 0xfb, 0x7e, 0xe1, 0x3e, 0xac,
3772 0x84, 0x42, 0xe2, 0x11, 0xd2, 0xe7, 0x06, 0x21, 0x95, 0xe0, 0x77, 0xe8,
3773 0xc3, 0xc2, 0x51, 0xa2, 0x39, 0x2c, 0x1b, 0xe2, 0x75, 0x82, 0xa4, 0x37,
3774 0x18, 0x92, 0x3e, 0x84, 0x8d, 0x14, 0xff, 0x6f, 0x4d, 0xeb, 0x78, 0x34,
3775 0x5b, 0x4b, 0x31, 0x92, 0x7d, 0xff, 0x32, 0xad, 0xab, 0xe2, 0x31, 0xca,
3776 0x15, 0xb2, 0xbe, 0x0f, 0x3e, 0xf2, 0xb9, 0xd7, 0x63, 0xec, 0x8f, 0x40,
3777 0x21, 0x1b, 0xee, 0x7f, 0x54, 0x98, 0xe6, 0xd6, 0x88, 0xb9, 0x78, 0x5d,
3778 0xac, 0x2d, 0x7a, 0x12, 0xff, 0x68, 0xe6, 0x03, 0x43, 0xa8, 0xef, 0xa4,
3779 0x7b, 0xa3, 0x90, 0x5d, 0xfa, 0x2e, 0x1c, 0xa2, 0x5c, 0xe2, 0xd1, 0x29,
3780 0xbe, 0x8c, 0x86, 0xfb, 0x1f, 0x13, 0x1c, 0xf3, 0x95, 0xca, 0xb3, 0x18,
3781 0x39, 0x5d, 0x0b, 0x25, 0xb4, 0x46, 0xb4, 0x69, 0x75, 0x92, 0x91, 0x68,
3782 0xa6, 0x14, 0xe7, 0xee, 0x54, 0x86, 0xf7, 0x40, 0xf1, 0x5f, 0x00, 0xfb,
3783 0x2a, 0xe7, 0x93, 0x5d, 0x48, 0x58, 0x79, 0xc5, 0xc0, 0x4d, 0x57, 0xf3,
3784 0x8a, 0x4e, 0x76, 0x52, 0x8b, 0x3d, 0x44, 0xd7, 0xcb, 0x9a, 0x12, 0x9c,
3785 0x86, 0xb9, 0x78, 0x40, 0xe3, 0x7b, 0x3a, 0x76, 0x95, 0xcd, 0x90, 0xa4,
3786 0xb3, 0xac, 0x90, 0xaa, 0xd5, 0x99, 0x56, 0x3f, 0xf9, 0xc6, 0x6f, 0xcc,
3787 0x81, 0xb8, 0xac, 0xbd, 0x57, 0xf0, 0x93, 0xbc, 0xe0, 0x73, 0x16, 0xbf,
3788 0x2c, 0xff, 0x9a, 0x70, 0xe8, 0xbf, 0x31, 0xbf, 0x1d, 0x87, 0x6f, 0x71,
3789 0xd1, 0x99, 0xaa, 0xd3, 0xd1, 0x37, 0x3c, 0xba, 0xc3, 0x6c, 0x56, 0x1d,
3790 0x14, 0xab, 0x54, 0x8a, 0xed, 0xde, 0xc4, 0xa5, 0x4e, 0xb7, 0x78, 0xbd,
3791 0x33, 0xd8, 0xfb, 0x51, 0xc1, 0x4d, 0x7a, 0x46, 0xdf, 0xb6, 0x62, 0xc2,
3792 0xf9, 0x21, 0xd9, 0x5a, 0x0d, 0xc5, 0x55, 0x14, 0x5b, 0x7a, 0x2f, 0x50,
3793 0x2e, 0xba, 0x25, 0xe6, 0xfe, 0xe3, 0x1a, 0xdd, 0xf1, 0x55, 0x37, 0x1e,
3794 0xbc, 0x69, 0x36, 0xd1, 0x40, 0xb1, 0xdd, 0x8f, 0xd3, 0xf1, 0x1e, 0x8c,
3795 0x94, 0x6b, 0xc9, 0x0e, 0x9f, 0xaf, 0xec, 0x56, 0x5b, 0x7a, 0x2f, 0xa6,
3796 0x17, 0x53, 0x2c, 0xc1, 0x67, 0x85, 0x4e, 0xb5, 0x6f, 0x9b, 0x38, 0x71,
3797 0xab, 0x07, 0x71, 0x92, 0xab, 0x2c, 0x5f, 0x49, 0xe3, 0xd3, 0xc5, 0xaa,
3798 0x5a, 0x59, 0x2d, 0xb5, 0x0e, 0xc9, 0x52, 0xeb, 0x70, 0x0d, 0xc5, 0xe1,
3799 0xf3, 0x37, 0x0a, 0x9c, 0xba, 0x31, 0x92, 0xa8, 0x11, 0x6e, 0x9c, 0xe9,
3800 0x4b, 0x90, 0x9d, 0xb4, 0xa4, 0xdc, 0x3a, 0xc5, 0x8f, 0x51, 0x01, 0x49,
3801 0x4d, 0x60, 0xe7, 0x0c, 0x1e, 0x19, 0xd1, 0x7a, 0x61, 0xcc, 0xb1, 0x0d,
3802 0xb5, 0x63, 0x64, 0xae, 0x0f, 0x46, 0x59, 0x42, 0x3e, 0x40, 0xcc, 0x97,
3803 0x91, 0x72, 0xe9, 0xed, 0xdd, 0xf9, 0xc2, 0x5d, 0x2e, 0xdb, 0x87, 0x89,
3804 0xff, 0xec, 0xa4, 0x0f, 0x1e, 0xd6, 0xf3, 0x69, 0x92, 0x51, 0x3b, 0x9e,
3805 0x2f, 0x47, 0x29, 0xde, 0x69, 0x24, 0x17, 0x95, 0xe2, 0x45, 0x88, 0xec,
3806 0x4b, 0xc6, 0xc6, 0x09, 0xe5, 0x20, 0xc5, 0x85, 0x5c, 0x9e, 0x40, 0x51,
3807 0x32, 0xe0, 0xa7, 0xfc, 0xfd, 0x6a, 0x35, 0x06, 0x0c, 0xd2, 0xa7, 0x62,
3808 0x24, 0x81, 0x93, 0x0e, 0xa0, 0xa3, 0x59, 0x8f, 0xec, 0x6d, 0x26, 0x7d,
3809 0x34, 0x96, 0xdc, 0xd8, 0x3e, 0xd1, 0x84, 0x07, 0xa6, 0x3c, 0xd8, 0x3a,
3810 0x61, 0xe2, 0x52, 0x8c, 0x6d, 0x43, 0xe9, 0x27, 0x12, 0xbb, 0xeb, 0x48,
3811 0xae, 0xb7, 0xc6, 0x22, 0x09, 0xb7, 0x70, 0xa2, 0xb6, 0xd4, 0x47, 0x38,
3812 0x20, 0xc9, 0x7e, 0xa1, 0xd1, 0x1c, 0xa1, 0x9d, 0xda, 0xed, 0x48, 0x05,
3813 0x64, 0xb8, 0x4a, 0x5e, 0x8a, 0x25, 0xec, 0xc7, 0x7c, 0xef, 0xeb, 0xd8,
3814 0x58, 0xe3, 0x85, 0x94, 0x91, 0x91, 0x23, 0x0c, 0x80, 0x45, 0x35, 0xe8,
3815 0x69, 0x75, 0xd0, 0x7f, 0xc0, 0x37, 0x3b, 0xd9, 0xe2, 0x3b, 0x44, 0xf1,
3816 0x75, 0x4b, 0xd6, 0xc1, 0xeb, 0x30, 0x66, 0xa0, 0xb9, 0xfd, 0x78, 0x9a,
3817 0xe2, 0xf5, 0x43, 0x14, 0x7f, 0x8e, 0x94, 0xcb, 0x82, 0xe3, 0x89, 0xc5,
3818 0x4f, 0x96, 0x78, 0xcb, 0x12, 0x6f, 0x59, 0xe2, 0x8b, 0xe2, 0xc2, 0xd1,
3819 0x2c, 0xf3, 0xf1, 0x6b, 0xf2, 0xd1, 0x04, 0xf1, 0xee, 0xc6, 0x66, 0xa2,
3820 0xf7, 0xc1, 0xa9, 0x3a, 0x6c, 0x23, 0x7a, 0x8b, 0x9a, 0xa2, 0x3d, 0x27,
3821 0x4c, 0xec, 0x8f, 0x29, 0xc6, 0x4f, 0x29, 0x10, 0x39, 0x5a, 0x4d, 0xb3,
3822 0x4f, 0x63, 0x9e, 0x29, 0x5e, 0x39, 0x2c, 0x9e, 0xf7, 0x26, 0xe1, 0xc6,
3823 0x20, 0x3d, 0x33, 0x30, 0x85, 0xcf, 0x1c, 0xc4, 0x93, 0x9b, 0x78, 0xdc,
3824 0xa7, 0x29, 0x89, 0x1b, 0x28, 0xae, 0x9f, 0x53, 0x23, 0x95, 0x73, 0x12,
3825 0x7e, 0x9f, 0xe4, 0x31, 0xcc, 0xf2, 0xb8, 0x89, 0xf8, 0x79, 0x80, 0xf0,
3826 0x4e, 0x3d, 0xc5, 0xa5, 0xc2, 0x81, 0x48, 0xf4, 0x97, 0xc4, 0x7b, 0xa4,
3827 0x44, 0xb4, 0x8f, 0xda, 0xb4, 0xdf, 0xc7, 0xb4, 0xc7, 0x4c, 0xdc, 0x43,
3828 0xb4, 0x1f, 0x26, 0xda, 0x07, 0xb3, 0x2c, 0x0f, 0xce, 0x3b, 0x36, 0xfd,
3829 0x47, 0xca, 0xbc, 0xee, 0x97, 0xf1, 0x30, 0x4f, 0x7f, 0x13, 0x36, 0x4e,
3830 0xcd, 0xcb, 0xcb, 0x34, 0xbf, 0xad, 0x1d, 0x33, 0xff, 0x84, 0x64, 0xb6,
3831 0xb8, 0xc4, 0x72, 0x83, 0x51, 0xab, 0x47, 0x0e, 0x6e, 0xc1, 0x7d, 0x0e,
3832 0x78, 0xbc, 0x58, 0x50, 0xe2, 0x5c, 0x10, 0xc2, 0x31, 0xd2, 0xef, 0x71,
3833 0xca, 0x67, 0xcf, 0x97, 0xaf, 0xcd, 0x6f, 0xac, 0xeb, 0x49, 0xd2, 0xb1,
3834 0x92, 0x37, 0x28, 0xb6, 0xa5, 0xca, 0x49, 0xec, 0x9e, 0x42, 0x72, 0x56,
3835 0xfb, 0x6f, 0x14, 0x60, 0x16, 0x91, 0x7d, 0xd5, 0x26, 0xfd, 0xaa, 0x07,
3836 0x9b, 0x66, 0x02, 0x18, 0x2a, 0xaf, 0x41, 0x96, 0xe2, 0xcd, 0x36, 0x8a,
3837 0xcf, 0x1f, 0xc7, 0x92, 0x5b, 0x7d, 0x88, 0x90, 0x7e, 0x03, 0xb8, 0x8f,
3838 0x9e, 0xd9, 0x37, 0xc5, 0x3c, 0xf8, 0xab, 0x7a, 0x0e, 0x60, 0x0b, 0x5d,
3839 0xdb, 0x33, 0x25, 0xe3, 0x25, 0xed, 0x49, 0xc2, 0x34, 0x36, 0xc6, 0xb8,
3840 0x27, 0x0b, 0x3f, 0xb9, 0x27, 0x61, 0xc0, 0x48, 0xf4, 0x25, 0xfa, 0xbd,
3841 0xb9, 0xec, 0xf1, 0x8d, 0x4c, 0xe2, 0x7b, 0x8b, 0x75, 0x1f, 0x16, 0x10,
3842 0x1e, 0xbb, 0x4b, 0x8b, 0x90, 0xdd, 0x3b, 0x31, 0x5c, 0x76, 0xe0, 0x3b,
3843 0x33, 0x1e, 0x3c, 0x34, 0xf1, 0x99, 0x59, 0x13, 0x77, 0xe2, 0x8e, 0x56,
3844 0x0f, 0x1e, 0x9c, 0x49, 0x62, 0xef, 0x14, 0x42, 0xb5, 0xb1, 0x31, 0x8a,
3845 0xdd, 0x76, 0x3e, 0xa8, 0x23, 0xde, 0x1f, 0x9b, 0xf2, 0xfa, 0x06, 0x0f,
3846 0xb0, 0x0c, 0xd6, 0x04, 0xdd, 0x40, 0xa5, 0x36, 0x26, 0x61, 0xb3, 0x26,
3847 0x2d, 0xa8, 0x25, 0x43, 0x7f, 0x92, 0xe6, 0x9b, 0x86, 0xf4, 0xda, 0x62,
3848 0x44, 0x0e, 0x36, 0x4b, 0x95, 0xdc, 0x02, 0x34, 0xe1, 0xa1, 0xb9, 0x24,
3849 0xc6, 0xc8, 0x46, 0xb7, 0x4f, 0x8c, 0x7c, 0xaf, 0x91, 0x62, 0x88, 0xaf,
3850 0x43, 0x19, 0x7c, 0x53, 0xe8, 0x28, 0x44, 0xdc, 0xd8, 0x36, 0xe3, 0xf5,
3851 0x6d, 0x3d, 0x60, 0xae, 0x66, 0x7b, 0xba, 0x77, 0xae, 0x09, 0xf7, 0x4f,
3852 0xd1, 0xb5, 0x09, 0xb6, 0x61, 0xb2, 0xb5, 0x48, 0x2d, 0xf1, 0x16, 0x4e,
3853 0xba, 0x09, 0x33, 0x49, 0xb1, 0x3a, 0x92, 0x87, 0x1b, 0x5b, 0x2c, 0x5b,
3854 0xf0, 0x63, 0xf3, 0x94, 0x89, 0xb3, 0x5a, 0x14, 0x39, 0xb2, 0xeb, 0x83,
3855 0x53, 0xca, 0xe5, 0x6e, 0xc2, 0x3b, 0xef, 0x49, 0xca, 0xc1, 0x56, 0x29,
3856 0x89, 0xa6, 0xe5, 0x14, 0xe3, 0x9b, 0x4c, 0xf3, 0x9e, 0x8e, 0xb6, 0xa1,
3857 0xb7, 0x88, 0xe6, 0x46, 0x7d, 0x11, 0x2a, 0x8d, 0x4a, 0x8e, 0xb0, 0xf3,
3858 0x70, 0x8d, 0xe3, 0x46, 0x9c, 0x59, 0x48, 0x7a, 0x06, 0xc7, 0xf2, 0x80,
3859 0xaf, 0x29, 0x63, 0xe7, 0xb8, 0x26, 0xb2, 0x93, 0xc6, 0x4c, 0xd0, 0xd7,
3860 0x58, 0x82, 0xaf, 0xa6, 0x04, 0xbc, 0x40, 0xf1, 0x65, 0xc1, 0xf2, 0xdf,
3861 0x98, 0xa9, 0x26, 0x0b, 0x13, 0xfa, 0x5e, 0x9c, 0x54, 0x8c, 0x0a, 0x94,
3862 0xbd, 0x14, 0x2a, 0xf1, 0xc4, 0x9c, 0xd3, 0x77, 0x98, 0xf0, 0x5f, 0x93,
3863 0x1a, 0xc5, 0x1e, 0xd2, 0xe7, 0x0e, 0xb2, 0x85, 0xbf, 0x27, 0x7c, 0xf2,
3864 0x58, 0x26, 0x1c, 0xd2, 0x44, 0x3f, 0x4d, 0x0c, 0xec, 0x2a, 0x51, 0xcc,
3865 0x77, 0xac, 0xa5, 0x20, 0xa6, 0x44, 0x29, 0xad, 0x21, 0x9d, 0x71, 0xc1,
3866 0x58, 0x68, 0xeb, 0xe4, 0xfe, 0xec, 0x71, 0xd3, 0xa7, 0xaa, 0xf9, 0x12,
3867 0xe9, 0xec, 0xe1, 0xb2, 0x17, 0xc3, 0x84, 0x07, 0x16, 0x10, 0x8e, 0x7c,
3868 0x90, 0xec, 0x62, 0xfb, 0x84, 0x44, 0xf4, 0xf1, 0xb8, 0x24, 0x92, 0x8b,
3869 0x6c, 0x3c, 0xfa, 0xd0, 0x0c, 0xdb, 0x25, 0xd9, 0x11, 0xd9, 0xe2, 0x31,
3870 0xca, 0xf9, 0xcf, 0xff, 0x16, 0x06, 0x51, 0xfc, 0xc6, 0xd5, 0xdc, 0x6f,
3871 0xcb, 0x63, 0x64, 0x8a, 0x79, 0x56, 0x0e, 0xc2, 0x91, 0xc4, 0x2d, 0xda,
3872 0xaf, 0x28, 0x27, 0x30, 0xef, 0x84, 0x83, 0xa7, 0xa2, 0x94, 0x57, 0x08,
3873 0xdb, 0xc4, 0x2e, 0x99, 0x5b, 0x02, 0x2c, 0x03, 0xe6, 0xe7, 0x66, 0x89,
3874 0xf3, 0x67, 0x13, 0xe1, 0xdf, 0xff, 0x77, 0xbb, 0xdb, 0x64, 0xa6, 0x2c,
3875 0x3c, 0x4b, 0x38, 0x9b, 0xec, 0x29, 0x75, 0xd5, 0x7e, 0x1e, 0x34, 0xcf,
3876 0x04, 0x38, 0x5f, 0x37, 0x21, 0x75, 0xd5, 0x16, 0xd8, 0x96, 0xb0, 0x58,
3877 0xeb, 0xd8, 0xf9, 0xa0, 0x1f, 0x6c, 0x0f, 0xd1, 0x6b, 0xec, 0xc1, 0x43,
3878 0x34, 0xf9, 0xb1, 0x75, 0x8e, 0xed, 0xd7, 0xfc, 0x64, 0xb1, 0xfe, 0x2f,
3879 0xe6, 0x95, 0x95, 0xea, 0xc1, 0x5f, 0xe1, 0xeb, 0x74, 0x3d, 0x80, 0xef,
3880 0x90, 0x1f, 0xdd, 0x47, 0x7c, 0x6e, 0xed, 0x7c, 0xc0, 0xf2, 0xdb, 0xad,
3881 0xe5, 0xdf, 0xa3, 0xeb, 0x2c, 0xef, 0x6e, 0x8a, 0x73, 0x1a, 0xf6, 0x65,
3882 0x2b, 0x9c, 0x87, 0xc8, 0xe6, 0xe3, 0xf8, 0x4b, 0x8a, 0xb3, 0xc7, 0xca,
3883 0x8c, 0xc9, 0x12, 0x16, 0x1e, 0xfb, 0x61, 0xb9, 0x1d, 0x3f, 0x20, 0x9f,
3884 0x7c, 0x9e, 0x62, 0xee, 0xf7, 0x2d, 0x9c, 0xe6, 0x14, 0x8f, 0xa6, 0x55,
3885 0x3c, 0x4d, 0x58, 0x7f, 0x5f, 0x21, 0x84, 0x23, 0xe9, 0xf0, 0xde, 0x0b,
3886 0x50, 0x5e, 0x20, 0x79, 0xf9, 0xf6, 0x52, 0x8d, 0x76, 0x38, 0xad, 0xe4,
3887 0x81, 0xa0, 0x6f, 0x4f, 0xc1, 0xef, 0x1b, 0x49, 0x07, 0x7c, 0x23, 0x84,
3888 0x81, 0x76, 0xa6, 0x5b, 0x7c, 0x3b, 0x0b, 0xcb, 0x11, 0x6a, 0x82, 0xb1,
3889 0x88, 0x72, 0xc2, 0x7d, 0x13, 0x1b, 0x90, 0x6a, 0xb4, 0xe3, 0xfc, 0x03,
3890 0x53, 0x1c, 0x83, 0xdb, 0x52, 0x37, 0x3a, 0xbe, 0x5e, 0xd5, 0xb7, 0x1f,
3891 0x43, 0x74, 0xad, 0xa1, 0x03, 0xbe, 0x37, 0xad, 0x58, 0x0b, 0x3c, 0x4f,
3892 0xb6, 0xf5, 0x50, 0xc7, 0x6f, 0xcc, 0x64, 0xd5, 0xb6, 0x7e, 0x30, 0xe9,
3893 0xa4, 0xf8, 0x6a, 0x9a, 0x47, 0x3b, 0x04, 0x02, 0x1d, 0xdd, 0x30, 0x9a,
3894 0xe6, 0x6b, 0xc8, 0x64, 0xbe, 0xb9, 0x83, 0x22, 0x94, 0x7a, 0x0b, 0x12,
3895 0x0b, 0x28, 0xb5, 0x74, 0xac, 0xae, 0xde, 0x93, 0xf1, 0x9d, 0x09, 0x37,
3896 0x52, 0x4d, 0x7e, 0xcc, 0x12, 0x36, 0xd9, 0x68, 0xc5, 0xa2, 0xb6, 0xd3,
3897 0xc7, 0xa9, 0x96, 0x09, 0x7d, 0xc3, 0x4f, 0xbc, 0x26, 0x21, 0x77, 0x10,
3898 0x90, 0xa8, 0xd2, 0xc4, 0xbf, 0x73, 0x73, 0x51, 0xec, 0x2e, 0xff, 0xd8,
3899 0x61, 0xe7, 0x13, 0x25, 0x9f, 0xc4, 0x4f, 0x28, 0x2f, 0xd2, 0xbd, 0xec,
3900 0x9b, 0x66, 0xc8, 0xb2, 0x33, 0x81, 0xc7, 0x97, 0x45, 0xf6, 0xfe, 0x4f,
3901 0xc7, 0x75, 0xc4, 0x17, 0xc9, 0x2a, 0x6b, 0xd5, 0x8e, 0x0d, 0xd7, 0xa9,
3902 0x0f, 0xe2, 0x2f, 0xfd, 0x2c, 0xcb, 0x61, 0x91, 0xa5, 0x3a, 0xf5, 0x8c,
3903 0x0b, 0x0d, 0x41, 0x35, 0x8b, 0x17, 0xfa, 0xf8, 0x5a, 0xc0, 0xf7, 0x44,
3904 0x3a, 0xe9, 0x08, 0xa8, 0xf0, 0xbb, 0xf4, 0x6e, 0xf1, 0x04, 0x61, 0xc0,
3905 0x89, 0x74, 0x8f, 0x98, 0x28, 0xdc, 0x29, 0x8c, 0xfc, 0x37, 0x85, 0x31,
3906 0x9b, 0x12, 0x46, 0xa1, 0x9f, 0x3e, 0x37, 0x88, 0xc9, 0xc2, 0xb0, 0xd8,
3907 0x5d, 0xe0, 0x79, 0x49, 0x27, 0x34, 0xf7, 0x0f, 0x29, 0xc6, 0xfe, 0x80,
3908 0x62, 0xec, 0x31, 0x8a, 0xb1, 0xcf, 0x93, 0x5d, 0x7f, 0xff, 0x2a, 0x96,
3909 0x65, 0x5b, 0x4e, 0x32, 0x06, 0xf1, 0xfd, 0xbc, 0xf4, 0x12, 0xe9, 0x95,
3910 0x65, 0xf6, 0x13, 0xb2, 0x61, 0x96, 0xc5, 0x7f, 0xe6, 0x9c, 0x40, 0xfa,
3911 0xf8, 0xd0, 0xb2, 0xd9, 0xc7, 0x97, 0x31, 0x66, 0x1a, 0x16, 0x3b, 0x98,
3912 0xae, 0x5a, 0xaa, 0xdb, 0x55, 0xc2, 0x21, 0xd9, 0x61, 0xb1, 0xb1, 0xc0,
3913 0xd7, 0xf7, 0xe1, 0x3e, 0xaa, 0xff, 0xb6, 0xc6, 0xc2, 0x89, 0x6e, 0xc2,
3914 0x48, 0x17, 0x54, 0x73, 0x71, 0x34, 0x46, 0x98, 0xe1, 0xc6, 0x2b, 0x54,
3915 0xab, 0x22, 0xb9, 0x2d, 0xae, 0xe4, 0xf3, 0x76, 0x5e, 0xcd, 0xa5, 0xc1,
3916 0x75, 0x3a, 0x1a, 0x9c, 0xaa, 0x72, 0x24, 0x89, 0xf0, 0xde, 0xb8, 0x03,
3917 0x46, 0x8d, 0xee, 0xc2, 0x80, 0x55, 0x17, 0xae, 0x41, 0x66, 0x42, 0xe0,
3918 0x65, 0xf2, 0x01, 0x17, 0xc9, 0xe8, 0x50, 0x27, 0x3e, 0x23, 0xb5, 0x0a,
3919 0xaa, 0xe3, 0x4f, 0x9f, 0xa5, 0x9c, 0x73, 0x17, 0xe5, 0xd6, 0x89, 0xec,
3920 0x0a, 0x04, 0x3b, 0x64, 0x34, 0x74, 0x38, 0xf1, 0x8d, 0xd2, 0xef, 0xe3,
3921 0x4c, 0x63, 0xe4, 0xe0, 0x0b, 0xf0, 0xf8, 0x5e, 0x9a, 0x64, 0x7a, 0xf0,
3922 0xbd, 0x3a, 0xaa, 0xd7, 0xb6, 0x12, 0x4e, 0x1a, 0x27, 0x1a, 0x7a, 0x3a,
3923 0x22, 0x3d, 0xb7, 0x09, 0xf8, 0x6b, 0xf5, 0x1a, 0x8c, 0xb7, 0xfa, 0xe0,
3924 0x57, 0x53, 0xe2, 0xd5, 0x02, 0xe5, 0x0d, 0xc7, 0x37, 0xc5, 0x5b, 0xb3,
3925 0x3a, 0xf6, 0x96, 0xfb, 0xc5, 0x2f, 0x66, 0x65, 0x90, 0x4e, 0x28, 0x3e,
3926 0x69, 0xc8, 0x10, 0x5d, 0x2e, 0xc2, 0x42, 0x2f, 0xdf, 0x21, 0x70, 0x9d,
3927 0x9a, 0xc4, 0x77, 0x56, 0xb0, 0xcd, 0xdb, 0xb1, 0x2b, 0x98, 0x51, 0x42,
3928 0x49, 0x47, 0xb7, 0x08, 0x52, 0xec, 0x6a, 0xc8, 0xf4, 0x88, 0x06, 0xc2,
3929 0x9e, 0x0b, 0xa7, 0x37, 0x88, 0x05, 0x25, 0xc6, 0x9a, 0xf0, 0x2f, 0x24,
3930 0xd9, 0x2c, 0x2c, 0x7d, 0x20, 0xd9, 0x18, 0xdf, 0xc5, 0xb6, 0x43, 0x39,
3931 0x4a, 0xf6, 0xfd, 0x7a, 0x32, 0x89, 0x5b, 0x3b, 0xd6, 0x20, 0x64, 0xd9,
3932 0xc7, 0xb0, 0xd8, 0x47, 0xf2, 0x4b, 0x5a, 0xfd, 0x07, 0xbf, 0xef, 0xc0,
3933 0x24, 0x5c, 0x7e, 0x1d, 0x21, 0x89, 0x72, 0x43, 0xa9, 0x23, 0x32, 0xf8,
3934 0x96, 0xe8, 0x15, 0xa3, 0x85, 0x80, 0x2f, 0x9d, 0x86, 0xbf, 0x8e, 0x74,
3935 0x9c, 0x26, 0x1d, 0xef, 0x21, 0x1d, 0xef, 0xf9, 0x12, 0x1d, 0xef, 0x24,
3936 0x1d, 0xef, 0x2f, 0xfc, 0x9d, 0xa5, 0x33, 0xa7, 0xae, 0x63, 0x94, 0x72,
3937 0xee, 0x78, 0xab, 0xcd, 0x4f, 0x81, 0x30, 0xea, 0x9e, 0x58, 0xaf, 0x13,
3938 0x1e, 0x9d, 0x62, 0x66, 0x2f, 0x3d, 0xd3, 0x5c, 0xb5, 0x65, 0xbf, 0xef,
3939 0xc9, 0x74, 0xb7, 0x78, 0xd2, 0xf2, 0x2b, 0xc6, 0x8d, 0x49, 0x34, 0xaa,
3940 0x3d, 0x34, 0x17, 0xdb, 0xca, 0x9d, 0x02, 0x4f, 0xb1, 0xbd, 0x7c, 0x93,
3941 0x04, 0xcf, 0x36, 0x93, 0x12, 0x28, 0xb2, 0xdd, 0xf4, 0xd3, 0x6f, 0xb6,
3942 0x9d, 0x0d, 0xa2, 0xb1, 0xf8, 0x45, 0xfb, 0x81, 0xdf, 0xa9, 0xb3, 0xfd,
3943 0xb0, 0x1d, 0x0d, 0x0b, 0x67, 0x91, 0x7c, 0x96, 0xe6, 0x1f, 0x21, 0xba,
3944 0x77, 0xa6, 0xf7, 0x3b, 0x99, 0x36, 0x59, 0x67, 0x3b, 0x62, 0xfb, 0xb9,
3945 0x48, 0xb4, 0xb2, 0xcd, 0x5f, 0xed, 0xd9, 0xd0, 0xdf, 0xef, 0x4a, 0x50,
3946 0xb7, 0x38, 0x6d, 0x1e, 0x38, 0x87, 0x73, 0xce, 0xe6, 0x78, 0xea, 0xb7,
3947 0x6a, 0xba, 0x63, 0x57, 0x73, 0x39, 0xe7, 0x75, 0xc8, 0x0b, 0xf4, 0x80,
3948 0xfe, 0x9d, 0xd6, 0x2b, 0x34, 0xdf, 0x10, 0xb4, 0x15, 0x90, 0x03, 0xfa,
3949 0xa4, 0x3e, 0xd9, 0x4a, 0xf1, 0x96, 0xe6, 0x94, 0x33, 0x80, 0x9a, 0x11,
3950 0xd8, 0x99, 0x10, 0x84, 0x47, 0x17, 0x91, 0xbf, 0xc1, 0xf0, 0xe8, 0x4a,
3951 0x4f, 0x92, 0xee, 0x2d, 0x25, 0x7c, 0xbe, 0x58, 0xdf, 0x06, 0x33, 0x0b,
3952 0xb9, 0x41, 0x1f, 0xc4, 0x27, 0xa3, 0x61, 0xff, 0x79, 0x28, 0xa9, 0xb3,
3953 0x92, 0x52, 0xa1, 0x3c, 0x35, 0x34, 0x22, 0x94, 0xc1, 0xcb, 0x42, 0x49,
3954 0x96, 0xac, 0x1e, 0xcf, 0x36, 0xb4, 0x5b, 0x58, 0x7c, 0x10, 0xd1, 0x02,
3955 0x70, 0x1b, 0x01, 0xbc, 0x7b, 0x6e, 0x26, 0x9b, 0xd4, 0x3e, 0xe2, 0xd8,
3956 0x9e, 0x3c, 0x43, 0x54, 0x2f, 0xce, 0x70, 0xcf, 0x68, 0x5b, 0xb5, 0x67,
3957 0x34, 0x68, 0xf5, 0x8c, 0xce, 0x4b, 0x4a, 0x62, 0xbe, 0x67, 0x74, 0x05,
3958 0x3c, 0x97, 0xd2, 0xef, 0xad, 0xce, 0xb7, 0xb4, 0x3a, 0x5f, 0x5b, 0x01,
3959 0x22, 0x9a, 0x31, 0xcc, 0x1a, 0xd5, 0x43, 0xfc, 0x26, 0x1d, 0xae, 0x88,
3960 0xda, 0x73, 0x18, 0x21, 0x44, 0xa9, 0xde, 0xbd, 0x9e, 0xf2, 0xa0, 0x3b,
3961 0xb3, 0x03, 0x33, 0x9a, 0xd2, 0x37, 0x00, 0xb6, 0x9d, 0x6e, 0xec, 0xa3,
3962 0x18, 0xba, 0xb7, 0xcc, 0xf5, 0xc8, 0xb0, 0x38, 0xcb, 0x76, 0xe3, 0xb4,
3963 0xa5, 0x66, 0xaf, 0xff, 0x70, 0x75, 0xfd, 0x21, 0x6b, 0xfd, 0x0b, 0x92,
3964 0xd2, 0x5f, 0x5d, 0x5f, 0xfb, 0x33, 0xa1, 0xa4, 0x68, 0xfd, 0x9e, 0x3d,
3965 0xb4, 0xbe, 0x4b, 0xe5, 0xb5, 0x1f, 0xe6, 0xb5, 0xe9, 0x73, 0x08, 0xd7,
3966 0x93, 0xdd, 0xbc, 0x57, 0x90, 0xc5, 0xbb, 0xb9, 0x35, 0xd8, 0x35, 0xb3,
3967 0x06, 0x3b, 0xc9, 0xdf, 0xb6, 0x6a, 0x0d, 0x54, 0xa7, 0xa1, 0xde, 0xa7,
3968 0xe2, 0xb2, 0x23, 0x22, 0xa4, 0xf5, 0xed, 0x2d, 0x84, 0x41, 0x4e, 0x34,
3969 0xcb, 0xf8, 0xd4, 0x1c, 0x50, 0xd7, 0xf4, 0x39, 0x91, 0xfc, 0x7d, 0x0f,
3970 0xfe, 0x5c, 0x22, 0xff, 0x7d, 0x67, 0x81, 0x40, 0xd2, 0x63, 0xd5, 0x1c,
3971 0x09, 0xe1, 0x29, 0xfe, 0xd8, 0x69, 0xdb, 0x7b, 0x2b, 0x7c, 0x8d, 0x68,
3972 0x68, 0x50, 0x6f, 0x40, 0x43, 0xa3, 0x6c, 0x38, 0xa8, 0x8e, 0x59, 0x4f,
3973 0x21, 0xd1, 0xcc, 0xf5, 0x51, 0x3c, 0x35, 0x71, 0x65, 0xf9, 0xdf, 0x9b,
3974 0x89, 0xeb, 0xf8, 0x39, 0x02, 0x15, 0x56, 0x4c, 0xfc, 0xb2, 0x39, 0xe2,
3975 0xe4, 0xbf, 0x6d, 0x54, 0x97, 0xd6, 0x51, 0xf0, 0xed, 0xc1, 0x9e, 0xac,
3976 0x92, 0xda, 0x43, 0x75, 0xe5, 0xfe, 0x48, 0x5b, 0xcf, 0x26, 0x51, 0x83,
3977 0xd0, 0xc2, 0xf0, 0xe0, 0x00, 0x92, 0xcd, 0xf5, 0x55, 0x3a, 0x1e, 0x46,
3978 0xb3, 0x8b, 0x9e, 0xe3, 0x79, 0xae, 0xb1, 0xa7, 0x22, 0xd9, 0x13, 0xdf,
3979 0xe7, 0xef, 0x57, 0xef, 0xcb, 0xbf, 0xa3, 0x4f, 0xae, 0xfa, 0xaf, 0x4b,
3980 0xbf, 0xec, 0xfa, 0xb1, 0x2f, 0xb9, 0xfe, 0x6f, 0xd5, 0xe7, 0x95, 0x46,
3981 0xa7, 0x95, 0xfb, 0x93, 0x0e, 0xee, 0x4b, 0x3a, 0xf5, 0x42, 0xd7, 0x2e,
3982 0xf5, 0x3f, 0x51, 0xcc, 0xe2, 0x7e, 0x04, 0xe7, 0xdb, 0x33, 0x56, 0x3f,
3983 0xe2, 0xf8, 0x6f, 0x61, 0x4f, 0x8e, 0x1d, 0x6e, 0x51, 0x37, 0x6e, 0x98,
3984 0x4d, 0xea, 0x1f, 0x51, 0x7d, 0xb2, 0x03, 0x03, 0x31, 0x0d, 0x63, 0x59,
3985 0xa5, 0xef, 0x0e, 0xa8, 0xc9, 0x3b, 0x05, 0x4d, 0x54, 0x72, 0x0b, 0x69,
3986 0xbc, 0x7a, 0x4f, 0x33, 0xa8, 0xe6, 0xaa, 0xa0, 0x96, 0x62, 0x8f, 0x53,
3987 0xf5, 0xcb, 0x28, 0x05, 0x64, 0x67, 0x29, 0x28, 0xd7, 0x94, 0x5a, 0xe4,
3988 0x5a, 0x1a, 0xe7, 0x1d, 0x57, 0x2e, 0xdf, 0x81, 0x1d, 0xb8, 0xbc, 0xdc,
3989 0x63, 0x34, 0xeb, 0x8a, 0xbf, 0x59, 0xda, 0x81, 0x5d, 0x31, 0x7e, 0xb6,
3990 0x9b, 0x6a, 0x2f, 0x88, 0xc6, 0x0c, 0x21, 0x5c, 0x5d, 0x60, 0x37, 0xd5,
3991 0x97, 0x4b, 0x1c, 0x6a, 0xcf, 0xaf, 0x85, 0x53, 0x76, 0x97, 0x20, 0x7c,
3992 0x19, 0x07, 0x0e, 0x76, 0xc2, 0xed, 0x5e, 0xa1, 0x0c, 0x9e, 0x10, 0xc3,
3993 0x78, 0x36, 0x16, 0xe9, 0xdb, 0x2c, 0x42, 0xb2, 0x87, 0xee, 0xb9, 0x32,
3994 0x10, 0x72, 0xc6, 0x70, 0xbb, 0x56, 0x28, 0x41, 0x87, 0x48, 0x62, 0x40,
3995 0x55, 0xb5, 0x71, 0xc8, 0xb4, 0x26, 0x44, 0x6d, 0x46, 0xb9, 0x7c, 0x96,
3996 0xb0, 0xd1, 0x95, 0xa5, 0xc3, 0xe8, 0x58, 0x1e, 0xd9, 0xdb, 0xef, 0x50,
3997 0x65, 0xc2, 0x6c, 0xc2, 0x99, 0xf1, 0xe2, 0xa6, 0x03, 0xf3, 0xfd, 0x19,
3998 0xd3, 0xfc, 0x38, 0x56, 0xb9, 0x97, 0x44, 0x28, 0xd7, 0x97, 0xa2, 0xb2,
3999 0x97, 0xf0, 0x79, 0xdb, 0x01, 0xc6, 0x4b, 0x9c, 0x0f, 0x2a, 0x64, 0x37,
4000 0xed, 0xc4, 0x63, 0x1f, 0x66, 0xd2, 0x8c, 0x9f, 0x74, 0x4c, 0x53, 0x6d,
4001 0xa3, 0x8e, 0xb6, 0x50, 0xae, 0x4f, 0x60, 0x2e, 0xcd, 0x7d, 0x9c, 0x41,
4002 0x92, 0x71, 0x3f, 0xd1, 0xbf, 0x81, 0xea, 0xda, 0x14, 0xc5, 0x2b, 0x96,
4003 0xf1, 0x00, 0xf7, 0x6b, 0xa9, 0x96, 0xfe, 0x79, 0xd7, 0xd7, 0xc6, 0x20,
4004 0xbb, 0xf5, 0xd7, 0xba, 0xae, 0x3f, 0x80, 0x46, 0xca, 0xe7, 0x3a, 0x55,
4005 0x2e, 0x88, 0x46, 0x22, 0xda, 0x79, 0x44, 0x82, 0x2f, 0x93, 0x3e, 0x46,
4006 0x54, 0x60, 0xa7, 0x55, 0x33, 0x3b, 0x61, 0x14, 0xd8, 0xa6, 0xe0, 0xae,
4007 0xed, 0x6c, 0xc4, 0xfb, 0xb9, 0xa8, 0xd5, 0x0b, 0x32, 0xa8, 0x8e, 0x79,
4008 0x49, 0x53, 0x52, 0x79, 0x7a, 0x6e, 0xa3, 0xff, 0x7f, 0xed, 0xa9, 0x8b,
4009 0x43, 0xae, 0x53, 0xd9, 0xbf, 0xfe, 0xdc, 0x73, 0x96, 0x6c, 0xf4, 0xae,
4010 0xc9, 0xbf, 0xf0, 0x7c, 0x12, 0xcf, 0x7b, 0x3e, 0x8a, 0x9b, 0x66, 0x82,
4011 0x70, 0x65, 0x3f, 0xd5, 0xcd, 0x1f, 0x8f, 0x1a, 0x9e, 0xf3, 0x71, 0xee,
4012 0xe9, 0x3a, 0xf1, 0x07, 0xf4, 0xfb, 0xe9, 0x51, 0x19, 0xb7, 0x16, 0x9b,
4013 0xe1, 0x1a, 0x93, 0xc8, 0x3f, 0xd7, 0x52, 0xae, 0x72, 0xe0, 0x9e, 0xe8,
4014 0x51, 0x54, 0x02, 0x0e, 0x1a, 0xb3, 0x9f, 0x7e, 0x73, 0x6f, 0xea, 0x71,
4015 0x6c, 0xf6, 0xcf, 0x7a, 0xde, 0x8f, 0x33, 0xbd, 0x15, 0xa6, 0x97, 0x72,
4016 0xe4, 0xed, 0xd8, 0x78, 0x07, 0x0c, 0x9f, 0x6e, 0xfd, 0xbb, 0x5f, 0xee,
4017 0x6c, 0xc2, 0xe1, 0x5c, 0x33, 0x5e, 0xcc, 0x19, 0xee, 0x9f, 0x76, 0x46,
4018 0x31, 0x38, 0x6a, 0xe2, 0x15, 0xcd, 0x18, 0xae, 0x25, 0x3b, 0x4f, 0x50,
4019 0xad, 0x14, 0x5e, 0xae, 0xf8, 0x2f, 0x0b, 0x44, 0x24, 0x44, 0x86, 0x08,
4020 0x2c, 0xde, 0x4d, 0xa1, 0x2b, 0x55, 0xaf, 0x47, 0xb4, 0xd7, 0x85, 0x59,
4021 0x73, 0x6f, 0xa7, 0x93, 0x68, 0x00, 0xd6, 0x51, 0x4c, 0x9e, 0x4b, 0x47,
4022 0x71, 0x6b, 0x44, 0xc6, 0xfa, 0xa2, 0x86, 0x17, 0xd3, 0x5e, 0xdc, 0x55,
4023 0x8c, 0x13, 0x86, 0xf6, 0x13, 0xed, 0x09, 0x94, 0xd3, 0x01, 0x7c, 0xbd,
4024 0xd8, 0x42, 0xf2, 0x0e, 0x62, 0x6d, 0x91, 0x31, 0x16, 0xe7, 0x67, 0xdd,
4025 0xbd, 0x31, 0xde, 0x82, 0x1e, 0x8a, 0xdf, 0xb3, 0x69, 0xb8, 0xb7, 0xc7,
4026 0x43, 0xe8, 0x2e, 0x46, 0x51, 0x24, 0x2c, 0x76, 0x3b, 0xcd, 0x79, 0x17,
4027 0xe9, 0xa4, 0x9d, 0xea, 0xfb, 0x25, 0x11, 0x42, 0xa8, 0x45, 0xaf, 0x18,
4028 0x26, 0xcc, 0x94, 0x28, 0x36, 0xe1, 0xfc, 0x18, 0xdb, 0xf9, 0x5b, 0x5d,
4029 0xbb, 0x72, 0x7e, 0x84, 0x8a, 0xb8, 0x49, 0x06, 0xb6, 0x51, 0x95, 0x97,
4030 0x2a, 0x12, 0xbd, 0xfb, 0x3a, 0xed, 0x7e, 0xec, 0x0d, 0xc5, 0xcf, 0xf9,
4031 0x6d, 0x20, 0x3d, 0x7d, 0x72, 0x60, 0xd6, 0x73, 0x85, 0x64, 0xe0, 0xd3,
4032 0x7f, 0xd4, 0xf5, 0xc6, 0x01, 0x20, 0x3a, 0xc5, 0xbc, 0x71, 0x7c, 0x0d,
4033 0x27, 0x28, 0xbe, 0xb6, 0xcb, 0xf8, 0xb5, 0x49, 0xb5, 0x64, 0x68, 0x86,
4034 0x7b, 0xff, 0xaa, 0x97, 0xe8, 0xf0, 0x23, 0x49, 0x6b, 0xdf, 0x56, 0xfc,
4035 0xa1, 0xb9, 0x71, 0x61, 0x10, 0x5f, 0x8b, 0xd8, 0xb2, 0x7a, 0x9d, 0x74,
4036 0x38, 0x3d, 0xd6, 0x8c, 0xb9, 0x31, 0xee, 0xad, 0x9c, 0xea, 0x3a, 0x34,
4037 0x69, 0x62, 0x9d, 0x66, 0x78, 0x7e, 0xda, 0x79, 0x03, 0x1e, 0x38, 0x30,
4038 0x72, 0xba, 0x86, 0xf4, 0x7a, 0x59, 0xbb, 0x1b, 0x8f, 0x4e, 0xe1, 0xab,
4039 0xcd, 0xc0, 0x23, 0x41, 0x70, 0xff, 0x59, 0x09, 0x1d, 0x41, 0xa4, 0x67,
4040 0x3b, 0x22, 0x7e, 0x55, 0x28, 0xda, 0x2b, 0x14, 0xab, 0xea, 0x08, 0x3b,
4041 0xdc, 0x46, 0xb5, 0x7c, 0x0d, 0x79, 0xf0, 0x5d, 0x45, 0x27, 0xc9, 0x28,
4042 0x88, 0xf2, 0x58, 0x0d, 0x24, 0xf2, 0x93, 0x0b, 0x2a, 0xd6, 0x35, 0x90,
4043 0xac, 0x25, 0x21, 0x93, 0x9e, 0xdb, 0x71, 0x68, 0x74, 0x5e, 0x56, 0x5e,
4044 0xdc, 0x42, 0x32, 0x7c, 0x76, 0xd4, 0xdc, 0xa1, 0xc6, 0x02, 0x24, 0x6b,
4045 0x3f, 0xd1, 0x37, 0x2f, 0x27, 0x96, 0xdf, 0xbc, 0x9c, 0xee, 0xc6, 0xae,
4046 0x39, 0x96, 0xdb, 0xbf, 0x47, 0x5e, 0xb3, 0x96, 0xdd, 0xad, 0x9b, 0x8c,
4047 0xa2, 0xf9, 0xc0, 0x55, 0xd9, 0x31, 0x7d, 0x8f, 0x10, 0x1f, 0xdf, 0xf3,
4048 0xad, 0x8c, 0x0c, 0x5e, 0x14, 0x5e, 0xa2, 0xc7, 0x4f, 0xba, 0x39, 0xeb,
4049 0x62, 0x0c, 0x4e, 0x32, 0xb9, 0x2a, 0xe3, 0x20, 0xc9, 0x38, 0x38, 0xc5,
4050 0xb2, 0xfe, 0x11, 0xc9, 0x1a, 0x78, 0x83, 0x70, 0xd7, 0xcd, 0xb1, 0x28,
4051 0xea, 0x0f, 0x28, 0xc9, 0x66, 0x29, 0x9c, 0x68, 0x10, 0xa0, 0xea, 0x02,
4052 0xed, 0xf5, 0xf8, 0x98, 0xe5, 0xac, 0x91, 0x9c, 0xbf, 0x37, 0x42, 0xfc,
4053 0xac, 0xa1, 0xf9, 0xd6, 0x91, 0x9c, 0x93, 0xc4, 0xff, 0x6d, 0xd6, 0xbc,
4054 0x2d, 0x34, 0xef, 0x06, 0xaa, 0x21, 0x66, 0x3d, 0x17, 0x88, 0x9e, 0xe8,
4055 0xe7, 0xb4, 0x10, 0xca, 0x8e, 0x04, 0x2f, 0x52, 0xad, 0xbc, 0xd6, 0x1a,
4056 0xe7, 0xa7, 0x71, 0x4c, 0xfb, 0x5b, 0xb5, 0x0e, 0xf5, 0xcb, 0x7a, 0xc7,
4057 0x77, 0x83, 0x7b, 0x07, 0x06, 0xfa, 0xb1, 0x37, 0xbb, 0x81, 0x6a, 0x1e,
4058 0x99, 0x30, 0xa4, 0x81, 0xef, 0xc7, 0x95, 0x68, 0xa3, 0xe0, 0xf8, 0x67,
4059 0x90, 0x1f, 0x56, 0xa8, 0xde, 0x09, 0x87, 0xe6, 0x10, 0x94, 0x1d, 0x25,
4060 0x99, 0xf0, 0x5e, 0x8b, 0x2c, 0x95, 0xc8, 0x5f, 0x83, 0xfd, 0x84, 0x93,
4061 0x9d, 0x78, 0xb9, 0xe0, 0xc4, 0xab, 0xe9, 0x0d, 0x94, 0xe7, 0xdc, 0x84,
4062 0x87, 0x0d, 0xb7, 0x73, 0xc5, 0x81, 0x1a, 0x3b, 0x26, 0x2f, 0x45, 0xef,
4063 0xf8, 0xc3, 0xa8, 0xcb, 0x38, 0xfb, 0x28, 0x47, 0x6b, 0xb7, 0x91, 0x5c,
4064 0xd6, 0x95, 0xf8, 0x7e, 0x0b, 0x32, 0xe9, 0x14, 0xb2, 0xd9, 0x30, 0xd5,
4065 0x32, 0x4e, 0xe4, 0x9b, 0x5b, 0xac, 0xfe, 0x6c, 0x8e, 0xae, 0xe5, 0xca,
4066 0x5f, 0xec, 0x1b, 0x7f, 0xab, 0xda, 0x2f, 0x1e, 0xa4, 0x9c, 0xd2, 0x4f,
4067 0xd8, 0x73, 0x03, 0xc5, 0x77, 0x9b, 0xc6, 0xd9, 0x78, 0x1f, 0xf6, 0x14,
4068 0xf4, 0xab, 0xf1, 0x63, 0xba, 0x60, 0xf7, 0x05, 0xb7, 0x90, 0x3c, 0xce,
4069 0xa5, 0x4d, 0x3c, 0xaa, 0xb1, 0x3e, 0x29, 0x2e, 0xa5, 0xb9, 0x37, 0x68,
4070 0xe2, 0x19, 0x4d, 0x70, 0xbc, 0xa1, 0x3c, 0xba, 0x01, 0x4b, 0x0a, 0x26,
4071 0x4e, 0x6b, 0x2a, 0xc5, 0x2e, 0x18, 0x6e, 0xc2, 0x7e, 0x91, 0xd1, 0x7f,
4072 0x31, 0xf3, 0xce, 0x21, 0xb4, 0x75, 0x02, 0x9b, 0x47, 0x25, 0xcc, 0xcd,
4073 0x5c, 0xcd, 0xd1, 0x78, 0xf1, 0xf3, 0x3c, 0x9d, 0x98, 0x81, 0xb9, 0xc3,
4074 0xa9, 0x2b, 0xc3, 0xbc, 0xd7, 0x32, 0x12, 0x57, 0x12, 0xb5, 0x56, 0xce,
4075 0x56, 0xfb, 0x97, 0x48, 0x8a, 0x56, 0x12, 0x6d, 0xa9, 0x4f, 0x50, 0x59,
4076 0x2f, 0x43, 0x09, 0xfe, 0x0c, 0x91, 0xe8, 0x20, 0xef, 0x29, 0x94, 0xed,
4077 0xfc, 0xbd, 0xb4, 0x9a, 0xbf, 0xc3, 0x05, 0x8f, 0x50, 0xc7, 0x1c, 0xc8,
4078 0xcf, 0x98, 0x94, 0x67, 0x05, 0x66, 0x49, 0xc1, 0x2f, 0x64, 0x77, 0xe0,
4079 0xeb, 0x31, 0xd3, 0xbc, 0x2b, 0xae, 0x0e, 0x36, 0x4b, 0xf8, 0xd3, 0x06,
4080 0xc2, 0x14, 0x64, 0xf7, 0x84, 0x01, 0x10, 0xda, 0xda, 0x69, 0x98, 0x32,
4081 0xd5, 0x0c, 0x35, 0x3a, 0xf7, 0x1a, 0x7b, 0x45, 0x7b, 0x71, 0x83, 0xb8,
4082 0xa1, 0xd8, 0x2f, 0x42, 0x87, 0xee, 0x14, 0xd1, 0xa7, 0x6c, 0xdc, 0xd6,
4083 0x5a, 0xfc, 0xbc, 0x1f, 0xda, 0x43, 0x7c, 0xef, 0xd3, 0x4c, 0x3c, 0x4d,
4084 0xbc, 0xed, 0x2d, 0xdb, 0xb5, 0xc8, 0xee, 0xb4, 0xcd, 0xdb, 0xa3, 0x74,
4085 0xff, 0x62, 0x9a, 0xfd, 0xf1, 0x61, 0xab, 0xd7, 0xd9, 0x4c, 0xcf, 0xdc,
4086 0x9c, 0x0d, 0x87, 0x06, 0x85, 0x32, 0x34, 0x0b, 0xee, 0x77, 0xb6, 0x55,
4087 0x4e, 0x0a, 0xca, 0x3d, 0x12, 0xc7, 0x57, 0xf6, 0x79, 0x9b, 0xf6, 0x65,
4088 0x05, 0x58, 0x71, 0x91, 0xe9, 0xbf, 0x91, 0xea, 0xbe, 0x9f, 0xa5, 0xdb,
4089 0xfa, 0xdd, 0x24, 0xb6, 0xf3, 0xf1, 0x6e, 0x71, 0x89, 0xea, 0xbe, 0x57,
4090 0xd3, 0xc9, 0x85, 0x75, 0xe8, 0x11, 0x17, 0x0a, 0x7d, 0xe2, 0xc3, 0x7c,
4091 0x2f, 0x9c, 0x63, 0xf7, 0x8b, 0x77, 0xf3, 0x4c, 0x5b, 0xbf, 0x38, 0x33,
4092 0x7b, 0xde, 0x92, 0xfd, 0x2e, 0x8d, 0xfb, 0x9a, 0xf5, 0xb5, 0xf0, 0x99,
4093 0x04, 0x4f, 0x59, 0x8f, 0xdc, 0xe7, 0xb3, 0xfb, 0x43, 0xeb, 0xe2, 0x39,
4094 0xd3, 0xa9, 0x72, 0xaf, 0x37, 0x68, 0xf1, 0x38, 0x43, 0x78, 0x79, 0x36,
4095 0xbf, 0x41, 0x1c, 0x2e, 0xd8, 0xfc, 0x4d, 0x17, 0xd8, 0x6e, 0x65, 0xca,
4096 0x0d, 0x5f, 0xcc, 0xcf, 0x06, 0xfc, 0x9d, 0x41, 0xd4, 0x58, 0xfd, 0x24,
4097 0x13, 0xe3, 0x5a, 0x24, 0xf4, 0x0a, 0x82, 0x70, 0x96, 0xd8, 0xa6, 0x4d,
4098 0x3c, 0xa7, 0xb9, 0x20, 0x8d, 0xcb, 0x24, 0x17, 0xb2, 0x21, 0x9f, 0x0b,
4099 0x8e, 0x69, 0xae, 0x01, 0xe2, 0xb5, 0xdc, 0x67, 0x08, 0x39, 0xf8, 0xfb,
4100 0x17, 0x6d, 0xcd, 0x45, 0x79, 0x80, 0xfb, 0xe3, 0x6f, 0xd6, 0xd8, 0x36,
4101 0xc7, 0xf9, 0x68, 0xbe, 0xa7, 0x4d, 0x39, 0xb6, 0x93, 0x7b, 0xd9, 0x6e,
4102 0xcc, 0xe5, 0x6a, 0xb8, 0xc5, 0xe0, 0xae, 0xe9, 0x34, 0x71, 0x4e, 0x73,
4103 0x52, 0x5d, 0xf2, 0x10, 0xe5, 0x26, 0x07, 0x64, 0xf5, 0x6e, 0x94, 0x26,
4104 0x9d, 0x0e, 0xde, 0x73, 0xfa, 0x59, 0x8c, 0x7b, 0x00, 0xc0, 0x7e, 0xe2,
4105 0xe1, 0x99, 0x5c, 0x88, 0xea, 0x7f, 0xb9, 0x5a, 0x43, 0xfc, 0x01, 0x8e,
4106 0xe7, 0x24, 0xd1, 0xac, 0x43, 0x4a, 0xac, 0x34, 0xf1, 0xc9, 0xf2, 0x48,
4107 0xf4, 0x32, 0xc5, 0x2f, 0x3f, 0xe5, 0xaa, 0xdd, 0x85, 0x46, 0xfc, 0x2c,
4108 0xd7, 0x88, 0x57, 0x73, 0xa4, 0xc3, 0xd8, 0x48, 0xbf, 0x87, 0x62, 0xe4,
4109 0xd2, 0x98, 0x0b, 0x5b, 0x23, 0x86, 0xdf, 0x83, 0x28, 0xce, 0x25, 0xae,
4110 0x47, 0x2a, 0x10, 0xee, 0x19, 0x41, 0x13, 0xde, 0xcc, 0x81, 0x30, 0x04,
4111 0xdc, 0x4b, 0x68, 0x8e, 0xf7, 0x62, 0xc6, 0x90, 0x0b, 0x0a, 0xd5, 0x1f,
4112 0x88, 0xd7, 0xc3, 0xac, 0x39, 0x19, 0xa7, 0x1c, 0x5d, 0x6c, 0x44, 0x6f,
4113 0xae, 0x09, 0xfd, 0x94, 0xab, 0x56, 0xaf, 0x8c, 0xe3, 0xdd, 0xac, 0x57,
4114 0xdc, 0x94, 0x1d, 0xe9, 0xf7, 0xd3, 0x9c, 0xae, 0xe5, 0xca, 0xd0, 0xb3,
4115 0x04, 0xd8, 0x64, 0x84, 0xd9, 0xbc, 0xb7, 0xfb, 0x28, 0xde, 0x1e, 0x16,
4116 0x9f, 0xe1, 0x49, 0xb2, 0xc1, 0x2d, 0x9a, 0x52, 0xb9, 0x20, 0x45, 0x4e,
4117 0xaf, 0x87, 0x32, 0x7c, 0x9b, 0x30, 0xa2, 0x0d, 0x14, 0x47, 0x9a, 0xed,
4118 0x18, 0x61, 0x44, 0x84, 0x4c, 0x98, 0xdc, 0x09, 0xb7, 0x6a, 0xa0, 0xa7,
4119 0x93, 0x65, 0xea, 0x86, 0xfb, 0x29, 0xb2, 0x1b, 0xc7, 0x17, 0xfb, 0xf3,
4120 0x8d, 0x78, 0x83, 0xf2, 0xe4, 0xeb, 0x39, 0xc8, 0xb5, 0x14, 0xfb, 0x3f,
4121 0xa0, 0xd8, 0x7f, 0x2a, 0x36, 0x12, 0xe2, 0x98, 0x5f, 0x88, 0xe1, 0x5b,
4122 0x04, 0x83, 0x5b, 0xbc, 0xb4, 0xe6, 0x26, 0xc1, 0xeb, 0x20, 0xb9, 0x58,
4123 0xe7, 0xbe, 0x9a, 0xc5, 0x0f, 0xc5, 0x61, 0xe6, 0xe9, 0xff, 0x27, 0xed,
4124 0xdb, 0x6b, 0xe1, 0x69, 0x22, 0x5d, 0xce, 0xf7, 0x24, 0xaf, 0xed, 0x47,
4125 0x72, 0x1d, 0x63, 0xe3, 0xc2, 0x1a, 0xbd, 0x4e, 0xbc, 0x94, 0x63, 0x9b,
4126 0x33, 0xf1, 0xbc, 0xa6, 0x51, 0xcd, 0xc2, 0xb5, 0xf6, 0x10, 0xd5, 0x2d,
4127 0xdc, 0x27, 0x32, 0xdc, 0x27, 0x89, 0xc2, 0xbd, 0x39, 0xfc, 0x9e, 0x0c,
4128 0x69, 0x59, 0x2d, 0xa6, 0x90, 0x77, 0x3a, 0x09, 0x6b, 0x70, 0x8c, 0x65,
4129 0x3f, 0x7a, 0xab, 0x4b, 0xcd, 0xc3, 0xf0, 0xea, 0x3d, 0x30, 0x2c, 0xdf,
4130 0xad, 0x13, 0x0f, 0x90, 0x8d, 0xbc, 0x1c, 0xab, 0x45, 0x9e, 0xea, 0x1e,
4131 0xc2, 0xdf, 0xee, 0x3f, 0xa3, 0xe7, 0x13, 0x13, 0xd8, 0x13, 0x84, 0xf4,
4132 0x5d, 0x3f, 0xfe, 0x02, 0x67, 0x5d, 0x8c, 0xcb, 0xe1, 0xee, 0x8b, 0x1b,
4133 0x9e, 0xf5, 0xf1, 0x3a, 0x71, 0x7b, 0xae, 0x1d, 0x17, 0x27, 0x1b, 0xc9,
4134 0xbe, 0x9b, 0xb0, 0x78, 0x3c, 0x88, 0xf7, 0x88, 0x96, 0x61, 0x8d, 0xb1,
4135 0xba, 0x31, 0xdc, 0x0c, 0x65, 0x88, 0xea, 0xa1, 0xbe, 0x9f, 0x0b, 0xf6,
4136 0x01, 0xa5, 0xe7, 0x0e, 0xe1, 0x81, 0x1a, 0x49, 0x92, 0xec, 0x4d, 0x73,
4137 0x4c, 0x6b, 0xd3, 0xbc, 0xe0, 0xfe, 0xcf, 0xdd, 0xd8, 0x3f, 0xc7, 0xb4,
4138 0x9c, 0xea, 0xba, 0x61, 0x96, 0x3f, 0x4f, 0x77, 0x5d, 0x6f, 0x7d, 0xbe,
4139 0x56, 0xfd, 0xac, 0x74, 0x85, 0xac, 0xcf, 0x1f, 0xd1, 0x27, 0xf7, 0x99,
4140 0xc3, 0x46, 0x8d, 0xf8, 0xbe, 0x8b, 0xfb, 0xcd, 0x49, 0xf0, 0xff, 0x71,
4141 0x97, 0xdd, 0xaf, 0xbb, 0x1b, 0x86, 0xd5, 0x13, 0xf9, 0xb5, 0xd5, 0x8b,
4142 0x0e, 0x91, 0x1b, 0xc8, 0xc4, 0x9f, 0x4c, 0x58, 0x2b, 0x10, 0xa3, 0xc2,
4143 0xbc, 0x49, 0x36, 0x16, 0xeb, 0xfd, 0x54, 0x1b, 0xc8, 0xc4, 0xaf, 0x81,
4144 0x3d, 0x9d, 0x02, 0xfb, 0x55, 0x1d, 0x3f, 0x2d, 0x70, 0x0c, 0x77, 0xe2,
4145 0x99, 0xb4, 0x12, 0x4a, 0x89, 0x30, 0xd5, 0xf9, 0x0e, 0x84, 0x9a, 0xfb,
4146 0xb1, 0x9f, 0xf2, 0xc9, 0x6c, 0x9a, 0xf3, 0x07, 0x7d, 0x52, 0x3c, 0x6f,
4147 0xa0, 0xf8, 0xf3, 0xf1, 0xa8, 0x1d, 0xef, 0x8b, 0x71, 0x65, 0xef, 0x1f,
4148 0x90, 0x4e, 0x9f, 0x2b, 0xf2, 0x9c, 0x06, 0xae, 0xac, 0x64, 0x1f, 0x56,
4149 0xa2, 0x29, 0xc7, 0x7d, 0x08, 0xcd, 0x70, 0x6c, 0xa1, 0xe5, 0x68, 0xad,
4150 0x83, 0xd9, 0x1a, 0xf4, 0xc5, 0x7b, 0x45, 0x7f, 0xa9, 0x8f, 0xf7, 0x14,
4151 0xfc, 0x0b, 0xf4, 0x3b, 0xc5, 0x9a, 0x69, 0xee, 0x09, 0x6e, 0x10, 0x7d,
4152 0x25, 0xee, 0x0b, 0x0e, 0x8b, 0x6f, 0x94, 0xd8, 0xe7, 0xe7, 0xfb, 0x83,
4153 0xf3, 0xfa, 0xe7, 0xbe, 0xa0, 0xe1, 0x7e, 0x89, 0x64, 0xbf, 0x3d, 0xc7,
4154 0x71, 0x58, 0x7a, 0xc0, 0x87, 0xe5, 0xc8, 0xbb, 0xe0, 0x3e, 0x11, 0xff,
4155 0x1d, 0xdc, 0x45, 0xb8, 0x60, 0xb1, 0x6a, 0xeb, 0x6f, 0x75, 0xde, 0x81,
4156 0xc4, 0x72, 0x12, 0xfa, 0x02, 0xd6, 0xe9, 0x00, 0xc5, 0xb3, 0x8c, 0x39,
4157 0x18, 0x60, 0x5d, 0xb2, 0xbd, 0x59, 0x7d, 0x27, 0xca, 0x2b, 0x06, 0x22,
4158 0x9d, 0x6e, 0xcc, 0xe6, 0x16, 0x51, 0x4d, 0x60, 0x62, 0xaf, 0x56, 0x8f,
4159 0x5a, 0x2b, 0x06, 0xb8, 0x09, 0x47, 0x42, 0xf6, 0xd2, 0x3c, 0xe9, 0x31,
4160 0x19, 0x1e, 0xba, 0x77, 0x92, 0x72, 0xd3, 0xfe, 0x4e, 0x7b, 0xee, 0xb6,
4161 0xfc, 0x4d, 0xd8, 0x47, 0x1e, 0x5f, 0xaf, 0x46, 0x31, 0xea, 0xf7, 0x52,
4162 0xac, 0xf9, 0x56, 0x75, 0xce, 0xcf, 0xc8, 0x36, 0x79, 0xbd, 0x4d, 0xb5,
4163 0xb6, 0x1e, 0x96, 0xc9, 0x76, 0xed, 0x25, 0x1b, 0x75, 0xb4, 0xd6, 0xd6,
4164 0xce, 0x0d, 0xe8, 0x19, 0xf5, 0x8a, 0x57, 0xd3, 0xf7, 0x98, 0xa1, 0x46,
4165 0x1a, 0x47, 0x36, 0x5b, 0x53, 0xa5, 0xb7, 0x35, 0xff, 0xcf, 0xb5, 0x5c,
4166 0xa7, 0x7b, 0x29, 0x8f, 0x3c, 0x98, 0x73, 0x20, 0x50, 0xbd, 0x1e, 0xcf,
4167 0x87, 0xa0, 0x75, 0xd4, 0x01, 0x4d, 0x82, 0xae, 0xf1, 0xdc, 0xbc, 0x86,
4168 0x8c, 0x46, 0xf2, 0x93, 0x6f, 0xc7, 0x13, 0xf8, 0x20, 0xeb, 0xc4, 0x7a,
4169 0xca, 0xef, 0x6b, 0xd3, 0x3a, 0xce, 0x95, 0x6b, 0x79, 0x3d, 0xb2, 0xc3,
4170 0xf9, 0x71, 0x4e, 0x1a, 0xe7, 0xc6, 0x74, 0xfe, 0x8b, 0xf4, 0x05, 0x88,
4171 0xe6, 0x22, 0x8d, 0xe5, 0x7b, 0xe7, 0xad, 0xbe, 0xc0, 0xf1, 0x6b, 0xea,
4172 0x29, 0xc7, 0x38, 0xf7, 0x8a, 0xec, 0x5c, 0xd0, 0xad, 0xb1, 0x2e, 0x7d,
4173 0xb8, 0x3c, 0x61, 0xe0, 0xdc, 0xca, 0x06, 0x5c, 0x99, 0x68, 0xc5, 0x03,
4174 0x39, 0x0f, 0x2e, 0x4c, 0x98, 0xb8, 0x69, 0x39, 0xee, 0x09, 0x12, 0x06,
4175 0x6b, 0x20, 0xbf, 0xff, 0x29, 0xd5, 0x3c, 0x14, 0x4f, 0x89, 0xd2, 0x48,
4176 0x62, 0x1d, 0xd9, 0x75, 0x34, 0x86, 0xd4, 0x2d, 0xf1, 0x48, 0xe8, 0x3c,
4177 0xbe, 0x67, 0x52, 0x2c, 0xf6, 0x4b, 0x7a, 0xaf, 0x70, 0x5a, 0xfb, 0x84,
4178 0x1b, 0xac, 0x7d, 0x45, 0xc7, 0xf4, 0xb0, 0x90, 0x4a, 0xd7, 0xfa, 0xf5,
4179 0x97, 0xe5, 0x21, 0xce, 0x3d, 0x9c, 0x23, 0xc7, 0x4d, 0x97, 0xba, 0xc1,
4180 0xea, 0xd3, 0xec, 0xce, 0x5f, 0xcd, 0x4d, 0x57, 0xf3, 0xd1, 0xce, 0x6a,
4181 0x1e, 0x1a, 0x29, 0xbc, 0xf3, 0x05, 0xfc, 0x14, 0xaa, 0xee, 0x57, 0x70,
4182 0xfe, 0x71, 0x8b, 0xb3, 0x64, 0x0e, 0x7b, 0xc8, 0x07, 0x8f, 0x6a, 0x27,
4183 0x82, 0x94, 0x21, 0xe0, 0xec, 0x10, 0x78, 0x90, 0xcf, 0x8b, 0x04, 0x4c,
4184 0xdc, 0xa9, 0xd9, 0xf6, 0xb0, 0xbc, 0xd3, 0x85, 0x41, 0xca, 0x49, 0xae,
4185 0x98, 0x97, 0x7c, 0xdd, 0x8f, 0xd7, 0x34, 0xb6, 0xe1, 0x5b, 0xaa, 0x39,
4186 0x89, 0xf7, 0xbf, 0xed, 0xbd, 0xea, 0xdf, 0xee, 0x5b, 0xcf, 0xdb, 0xa6,
4187 0x86, 0xe4, 0x42, 0x78, 0xde, 0x8b, 0xab, 0x54, 0x37, 0xc8, 0x54, 0x33,
4188 0xac, 0x47, 0x62, 0x81, 0x92, 0x64, 0xfd, 0xfb, 0x68, 0xee, 0x5f, 0x76,
4189 0x0e, 0xe2, 0xfe, 0x71, 0x07, 0xea, 0x54, 0x8e, 0xb3, 0x06, 0xf6, 0x37,
4190 0x72, 0x9c, 0xea, 0xc5, 0x8e, 0x71, 0xb7, 0x38, 0x99, 0x73, 0xe2, 0xc9,
4191 0xbe, 0x47, 0xb0, 0xa0, 0x63, 0x4b, 0xb5, 0xd7, 0xc9, 0xdf, 0xbf, 0x89,
4192 0xd4, 0x22, 0x5e, 0x9f, 0x7b, 0x68, 0x02, 0xde, 0x0e, 0xe6, 0x03, 0x9e,
4193 0x8b, 0x34, 0xff, 0xe6, 0x51, 0xa7, 0x38, 0x9f, 0xfe, 0x1b, 0xf3, 0x48,
4194 0x80, 0x71, 0x01, 0xdf, 0xab, 0x87, 0xd1, 0xc8, 0x63, 0x59, 0x87, 0x5e,
4195 0xaa, 0x49, 0x07, 0x31, 0x4a, 0x74, 0xbd, 0x6e, 0xcd, 0x75, 0xb6, 0x4a,
4196 0xbf, 0x57, 0x34, 0x64, 0x64, 0x23, 0x48, 0xb4, 0xf8, 0x57, 0xf6, 0xa1,
4197 0xa1, 0x74, 0x6d, 0xbe, 0x25, 0xa3, 0xf7, 0x30, 0x7f, 0x9c, 0x13, 0x06,
4198 0xf0, 0x41, 0x5a, 0xe0, 0x7d, 0xcb, 0x06, 0x07, 0xd0, 0x5a, 0xa0, 0xfa,
4199 0xdf, 0x8a, 0x21, 0x3c, 0x2e, 0x6e, 0xdb, 0xb6, 0x63, 0x10, 0xdb, 0x89,
4200 0x97, 0x7a, 0xe2, 0xe5, 0xe3, 0xd8, 0x12, 0x5a, 0x87, 0xaf, 0x1d, 0x93,
4201 0xab, 0xfd, 0x87, 0xea, 0x5c, 0xab, 0xc0, 0xbd, 0x29, 0xa7, 0x1a, 0xc1,
4202 0xb6, 0xf1, 0x48, 0xbf, 0xd7, 0xc1, 0x76, 0x18, 0xc1, 0x7d, 0xd3, 0x49,
4203 0xba, 0xcf, 0x73, 0x05, 0xb1, 0x29, 0xe3, 0x14, 0xef, 0x52, 0x9d, 0x74,
4204 0x3c, 0xed, 0x58, 0x24, 0xe1, 0x07, 0xe6, 0x93, 0x81, 0x1d, 0xb8, 0x45,
4205 0xeb, 0xc5, 0xbd, 0x64, 0x83, 0xdd, 0xad, 0x3b, 0x30, 0x41, 0x36, 0xb0,
4206 0xb9, 0x89, 0x6a, 0xb7, 0x58, 0xd9, 0x1c, 0x08, 0xb0, 0x1c, 0x05, 0x7a,
4207 0xe8, 0x7a, 0x23, 0xd5, 0x73, 0x8e, 0x18, 0x59, 0x1b, 0xf9, 0x85, 0xac,
4208 0x2a, 0xb9, 0x24, 0xea, 0xad, 0x35, 0x1b, 0x29, 0x4f, 0xbb, 0x18, 0x1f,
4209 0xf8, 0x18, 0x27, 0x7c, 0x91, 0x1e, 0xc3, 0xac, 0x55, 0xd5, 0xe8, 0x7a,
4210 0x47, 0x6b, 0x6e, 0x8e, 0x6c, 0x76, 0x4d, 0xc7, 0xb5, 0xcf, 0xcd, 0xcb,
4211 0x48, 0x43, 0x4d, 0xc7, 0x8c, 0x59, 0xf1, 0x8f, 0xc0, 0xdf, 0x71, 0xad,
4212 0xee, 0xe7, 0xe7, 0x60, 0x9a, 0xed, 0xb8, 0x16, 0x72, 0x44, 0xfc, 0xf7,
4213 0xe0, 0xaf, 0x68, 0x8d, 0x20, 0x36, 0x96, 0x7a, 0x31, 0x30, 0x2e, 0x7d,
4214 0x8e, 0x4f, 0x7c, 0x6c, 0xcb, 0x9f, 0xf3, 0xbf, 0x75, 0x3c, 0xd2, 0xe3,
4215 0xa9, 0xf2, 0x7f, 0xef, 0xf4, 0xe7, 0x73, 0x0d, 0x67, 0x38, 0xaf, 0xf2,
4216 0x7c, 0xbc, 0xef, 0x37, 0x2f, 0xdf, 0x20, 0xb6, 0x5b, 0xf3, 0xed, 0x75,
4217 0xb3, 0x0f, 0xbb, 0xc8, 0xd7, 0xd7, 0x75, 0x18, 0x78, 0x2d, 0xf1, 0x80,
4218 0xb9, 0xd5, 0x92, 0xc1, 0x9f, 0x58, 0xcf, 0xf7, 0xb4, 0x56, 0x2c, 0x7b,
4219 0xb7, 0xfd, 0x96, 0xf7, 0x04, 0x78, 0x8f, 0x60, 0x7e, 0x5f, 0x20, 0x6a,
4220 0xed, 0xd7, 0xd9, 0x7b, 0x03, 0xdf, 0xa2, 0x38, 0xcb, 0xfb, 0x06, 0xb2,
4221 0x70, 0x8e, 0xd7, 0x09, 0xd7, 0x38, 0xd3, 0xf6, 0x81, 0x6c, 0xfb, 0xd8,
4222 0x5f, 0x21, 0x19, 0xe0, 0xfe, 0xa4, 0x6d, 0xff, 0xd1, 0xce, 0xfb, 0x80,
4223 0xa7, 0x0c, 0x77, 0xed, 0x0a, 0x50, 0x8d, 0xdf, 0x67, 0xd9, 0xc3, 0x75,
4224 0xfa, 0xdb, 0xab, 0xfe, 0xb1, 0x95, 0xeb, 0x7c, 0xee, 0x09, 0xbe, 0xbb,
4225 0x6a, 0xb2, 0x55, 0x22, 0x3c, 0xc5, 0x6b, 0xf2, 0xde, 0x02, 0xe7, 0x55,
4226 0x2b, 0xee, 0x7a, 0x1a, 0x57, 0x18, 0xee, 0x05, 0x2b, 0x9c, 0x62, 0x51,
4227 0xa6, 0x9f, 0x6c, 0x4f, 0x45, 0x22, 0x63, 0x78, 0x9a, 0x57, 0x84, 0xf0,
4228 0x50, 0x66, 0x3e, 0x26, 0xb7, 0xa3, 0x7d, 0x0a, 0xf8, 0xdf, 0x99, 0x20,
4229 0xda, 0x26, 0xc2, 0x43, 0xb7, 0x3b, 0xc2, 0xc3, 0xef, 0x38, 0xf8, 0x5e,
4230 0xa1, 0xeb, 0x26, 0x0b, 0x7f, 0x1f, 0xed, 0x5a, 0x66, 0x7d, 0xbe, 0xdd,
4231 0x75, 0x63, 0xe1, 0x6e, 0xa4, 0xe7, 0xdc, 0x97, 0xf3, 0x0e, 0x13, 0x0f,
4232 0xc5, 0x1c, 0xf8, 0x9a, 0xf6, 0xd7, 0xe4, 0x5b, 0x82, 0x6c, 0xe3, 0x18,
4233 0xe7, 0x60, 0x4b, 0xa7, 0xae, 0x15, 0x2a, 0xda, 0x32, 0x8d, 0x84, 0xd7,
4234 0x9a, 0xa8, 0xe6, 0x6f, 0xc4, 0x0f, 0x73, 0x8c, 0xd7, 0x4c, 0x8a, 0xfb,
4235 0x26, 0x5e, 0xef, 0x30, 0x86, 0x82, 0x50, 0x8c, 0x37, 0x85, 0x92, 0xba,
4236 0xdd, 0xa1, 0x1c, 0x69, 0x72, 0xf8, 0xb1, 0x2f, 0x62, 0xe7, 0xd1, 0x4e,
4237 0x2b, 0x6f, 0xbe, 0xd3, 0x65, 0xf7, 0xec, 0x4e, 0x56, 0xf3, 0xeb, 0xa9,
4238 0x2e, 0x6d, 0x56, 0x39, 0x9a, 0x22, 0xff, 0x59, 0x48, 0xf1, 0x73, 0x3c,
4239 0x9b, 0xb2, 0xce, 0x82, 0xfc, 0x32, 0x53, 0x43, 0xb6, 0x11, 0xd6, 0xc6,
4240 0x11, 0x8e, 0x3e, 0x64, 0xd1, 0xfa, 0xb3, 0xae, 0x58, 0xa1, 0x8c, 0x8a,
4241 0x53, 0x39, 0x08, 0x14, 0x09, 0x37, 0xb4, 0xf9, 0x5f, 0x46, 0x99, 0xfb,
4242 0xa1, 0x56, 0xa0, 0x67, 0x1e, 0x5a, 0x0b, 0x40, 0x2e, 0xe3, 0xbe, 0x0c,
4243 0xab, 0x17, 0xeb, 0xc0, 0x5a, 0x6d, 0x3b, 0xe1, 0x42, 0xde, 0xff, 0x15,
4244 0x54, 0x63, 0x37, 0xa2, 0xb2, 0xc1, 0x89, 0xf1, 0x0c, 0xe7, 0xe1, 0x63,
4245 0x5d, 0xf2, 0x28, 0x2a, 0x6e, 0x7b, 0x4f, 0x33, 0xe1, 0xa6, 0x0c, 0x3d,
4246 0x57, 0x22, 0x4c, 0x4a, 0xb1, 0x63, 0x6b, 0xec, 0x37, 0x66, 0xb2, 0xd1,
4247 0xde, 0x53, 0x19, 0x9d, 0x14, 0x58, 0xa0, 0x26, 0x31, 0x3a, 0xe7, 0xf4,
4248 0xa5, 0xd3, 0x51, 0xa4, 0xcb, 0xfc, 0xbc, 0xfb, 0x72, 0xd2, 0x9a, 0x3f,
4249 0xb2, 0x77, 0x89, 0xc3, 0x81, 0x65, 0x1d, 0x87, 0x50, 0x59, 0x68, 0xd3,
4250 0x10, 0x24, 0x4c, 0xc0, 0x35, 0x6c, 0x13, 0xf1, 0x7a, 0xe7, 0xe3, 0x5c,
4251 0x47, 0xfc, 0xa4, 0xeb, 0xe6, 0x29, 0xf6, 0xeb, 0x63, 0x5d, 0x1f, 0xa4,
4252 0x95, 0x64, 0x93, 0x04, 0xb9, 0x8e, 0xf8, 0xbf, 0x6f, 0x94, 0xfb, 0x08,
4253 0xbf, 0xe0, 0x3e, 0x02, 0xe5, 0x65, 0x65, 0xb8, 0x59, 0x78, 0xc5, 0xba,
4254 0x0c, 0xd5, 0x15, 0x44, 0xf3, 0xa5, 0x88, 0xd2, 0x53, 0x22, 0x8c, 0xb2,
4255 0x45, 0x50, 0x5d, 0x57, 0xb6, 0xe5, 0x65, 0x9f, 0xcd, 0xab, 0x5c, 0xc5,
4256 0x21, 0x51, 0x0b, 0x77, 0xf0, 0x3e, 0x34, 0xe7, 0x71, 0x6b, 0x4f, 0x9f,
4257 0xae, 0xff, 0xbc, 0x6b, 0x09, 0xd5, 0x16, 0x23, 0x4c, 0x1f, 0x78, 0xaf,
4258 0x8f, 0x6a, 0xd0, 0xec, 0xf1, 0x2a, 0x2e, 0xf1, 0x56, 0xe5, 0xc2, 0xdf,
4259 0xf9, 0x4c, 0xe2, 0x6b, 0x5d, 0x9b, 0x26, 0xf9, 0x8c, 0xe2, 0x4f, 0xba,
4260 0xd6, 0x4c, 0x2a, 0xa1, 0x8d, 0xb4, 0xee, 0x6e, 0xde, 0x5f, 0xa7, 0x39,
4261 0x67, 0x35, 0xa6, 0xbb, 0xd0, 0x75, 0x73, 0x96, 0x7b, 0xcb, 0xc7, 0xba,
4262 0xcc, 0x6c, 0x98, 0x31, 0xa8, 0x65, 0x2b, 0x89, 0x02, 0x55, 0xf3, 0xd7,
4263 0xd9, 0xbc, 0xba, 0x48, 0x1f, 0x87, 0xd2, 0x84, 0x76, 0xe2, 0xb6, 0x6e,
4264 0x56, 0x17, 0xd6, 0x20, 0xd5, 0xd4, 0x4d, 0x35, 0xa8, 0xdf, 0xb7, 0x36,
4265 0xd3, 0x8d, 0x09, 0xd2, 0xe1, 0xa6, 0x52, 0xd0, 0xd7, 0x9d, 0x51, 0x31,
4266 0x50, 0xe2, 0x7a, 0xb3, 0xd2, 0xb5, 0x6b, 0x72, 0xaa, 0x5a, 0xff, 0xf6,
4267 0x53, 0xcd, 0x4a, 0x76, 0x91, 0xb1, 0x6d, 0xae, 0xb5, 0x40, 0x34, 0x0b,
4268 0x7b, 0x5e, 0x37, 0xad, 0x73, 0xfd, 0xe8, 0x77, 0xcd, 0xd0, 0x42, 0xb6,
4269 0x85, 0xbb, 0xf1, 0xf8, 0x94, 0xcf, 0x08, 0xe8, 0x7e, 0x74, 0x76, 0x9c,
4270 0xa2, 0x67, 0xdb, 0xf1, 0xf8, 0xe1, 0x5b, 0x90, 0xff, 0x23, 0x27, 0x2e,
4271 0x66, 0x92, 0x58, 0xda, 0xf1, 0x55, 0x9c, 0xd9, 0x20, 0xe3, 0xef, 0x32,
4272 0x5e, 0x5c, 0x22, 0xfe, 0x0c, 0x6b, 0x8e, 0x7f, 0xcf, 0xfe, 0x90, 0x5b,
4273 0xb8, 0xc7, 0x35, 0xc6, 0x9e, 0xbf, 0xe7, 0x06, 0xf7, 0xde, 0x0c, 0xd4,
4274 0x10, 0x0e, 0x0a, 0x13, 0xcd, 0x6a, 0x86, 0xcf, 0x38, 0x05, 0x7c, 0x9c,
4275 0x2b, 0xa7, 0x89, 0x27, 0x47, 0xa9, 0xc5, 0xe7, 0x24, 0x7e, 0x9c, 0xa5,
4276 0x73, 0x14, 0x03, 0xd8, 0x07, 0xdc, 0x97, 0x43, 0x96, 0x1d, 0x5c, 0xbb,
4277 0xf6, 0x7e, 0x0f, 0xef, 0xf1, 0x1f, 0xcf, 0x72, 0x6c, 0x14, 0x54, 0xbb,
4278 0x84, 0x90, 0x9c, 0x5d, 0x82, 0x9e, 0xd9, 0xed, 0x74, 0x5d, 0x45, 0x5f,
4279 0xd5, 0xd7, 0x42, 0x05, 0x8f, 0x87, 0xf1, 0x49, 0x2e, 0x63, 0xff, 0x8e,
4280 0x5c, 0xfd, 0xed, 0x16, 0x8d, 0xe3, 0x84, 0x1d, 0x11, 0xb7, 0xf2, 0xb0,
4281 0xda, 0xf1, 0xef, 0xe2, 0xe5, 0x72, 0xca, 0xa2, 0x61, 0x37, 0xcd, 0xc5,
4282 0xb2, 0x79, 0xce, 0x4c, 0xdd, 0xc9, 0xf2, 0x0b, 0xf8, 0x7e, 0x48, 0xfa,
4283 0x98, 0xa4, 0x67, 0x1e, 0x27, 0x1e, 0xca, 0xc4, 0x5b, 0xb6, 0xf4, 0x5d,
4284 0x1a, 0xc3, 0xf7, 0x40, 0xfa, 0x32, 0x14, 0x67, 0xf5, 0x6c, 0xe6, 0x08,
4285 0xe5, 0xcb, 0x5a, 0x8a, 0x45, 0x67, 0xe3, 0xf7, 0x62, 0x6d, 0x4e, 0x49,
4286 0x1a, 0x14, 0x2e, 0x53, 0x7e, 0x08, 0xa7, 0xce, 0x36, 0xfc, 0x36, 0xd9,
4287 0x70, 0x0b, 0x61, 0x80, 0x70, 0xe8, 0x1c, 0x8d, 0x37, 0x9c, 0x32, 0x1e,
4288 0x9b, 0x90, 0x70, 0x8e, 0xf7, 0x80, 0x85, 0xfd, 0xbc, 0x01, 0x1e, 0x3b,
4289 0xff, 0xbd, 0x8e, 0xea, 0xba, 0x70, 0x82, 0xb2, 0xaa, 0x51, 0x4f, 0xb8,
4290 0xbd, 0xd0, 0xf9, 0x08, 0xf6, 0x53, 0x7d, 0xbf, 0x35, 0x46, 0x32, 0x69,
4291 0x8c, 0x53, 0xbd, 0xd1, 0x36, 0x74, 0x01, 0x7f, 0x67, 0x56, 0x78, 0x1f,
4292 0x5d, 0x84, 0x13, 0x17, 0xf0, 0x99, 0x29, 0xa9, 0xea, 0xe9, 0x19, 0xa8,
4293 0x95, 0x73, 0x68, 0x1b, 0xbe, 0x82, 0x0f, 0x4d, 0xde, 0x63, 0x97, 0x25,
4294 0x89, 0x30, 0x60, 0xd8, 0xef, 0x44, 0x00, 0x95, 0x80, 0x84, 0x5b, 0x35,
4295 0xee, 0x49, 0x2b, 0xc3, 0x4f, 0x13, 0x96, 0x7f, 0x5f, 0xb4, 0x0d, 0x7e,
4296 0x8c, 0x33, 0x66, 0xbe, 0x91, 0xd7, 0x15, 0x48, 0xdc, 0xd8, 0x76, 0xba,
4297 0x06, 0x4a, 0x8f, 0x4b, 0xa8, 0x89, 0x66, 0xe9, 0xaf, 0xcd, 0x33, 0x81,
4298 0xcf, 0x4c, 0x35, 0xf2, 0x19, 0xe1, 0x20, 0x35, 0x38, 0x4d, 0x3e, 0x31,
4299 0x88, 0x79, 0xda, 0xfe, 0x81, 0xf8, 0xd7, 0x88, 0x06, 0xc6, 0x7d, 0x86,
4300 0x7b, 0x0f, 0xd1, 0xf6, 0x53, 0xc2, 0x01, 0x5b, 0x63, 0x17, 0xcc, 0xe4,
4301 0x42, 0xeb, 0xfc, 0x5e, 0x9d, 0xdd, 0xfb, 0x66, 0x5f, 0xb9, 0x1b, 0x9b,
4302 0xd2, 0x4e, 0x92, 0xd3, 0x3c, 0x5e, 0x73, 0x51, 0x0c, 0x66, 0x8c, 0x53,
4303 0xb9, 0x9e, 0x4a, 0x33, 0xc7, 0xac, 0x0a, 0xec, 0xa2, 0xb8, 0xb0, 0xd3,
4304 0xca, 0x05, 0xf0, 0x2c, 0x5e, 0xd1, 0x81, 0x2b, 0x53, 0xff, 0xc3, 0x43,
4305 0xfa, 0x5b, 0xad, 0x2e, 0x87, 0x08, 0x66, 0x0c, 0xd1, 0xa0, 0x4b, 0xf8,
4306 0xb8, 0x53, 0xe9, 0x71, 0x48, 0xc3, 0xb8, 0x31, 0x66, 0x98, 0x5e, 0x55,
4307 0xed, 0x6f, 0x17, 0x91, 0xbe, 0x92, 0x88, 0xa2, 0xae, 0xe4, 0x95, 0xeb,
4308 0x4a, 0xed, 0xb2, 0xa7, 0x64, 0xb8, 0xfd, 0x2b, 0xee, 0xa5, 0xba, 0x65,
4309 0x07, 0xd5, 0xb6, 0x5e, 0xaa, 0xaf, 0x15, 0xb2, 0xc7, 0x1a, 0x92, 0x7f,
4310 0x88, 0xe2, 0x80, 0x0e, 0x67, 0x66, 0x1b, 0x5c, 0x99, 0xb0, 0x7f, 0x37,
4311 0x76, 0x20, 0x19, 0xb4, 0xb1, 0xad, 0x4c, 0xba, 0xaa, 0xed, 0x64, 0x2c,
4312 0x73, 0x2f, 0xce, 0xe4, 0x19, 0x9f, 0x27, 0xb0, 0x31, 0xcd, 0xbf, 0xe1,
4313 0x79, 0x39, 0xae, 0xe3, 0x28, 0xd5, 0x4e, 0xee, 0x8e, 0x66, 0xd2, 0x43,
4314 0x0b, 0x46, 0xca, 0x82, 0x4d, 0x90, 0x74, 0x01, 0xcf, 0xd1, 0x4e, 0x19,
4315 0xfb, 0x66, 0x28, 0x91, 0x50, 0x9e, 0x72, 0x92, 0x9d, 0xef, 0x26, 0x1b,
4316 0xf2, 0xaa, 0x5e, 0xfa, 0x1d, 0xe0, 0x73, 0x47, 0x64, 0x93, 0x3f, 0xe9,
4317 0x6a, 0xb7, 0x62, 0xcd, 0x2f, 0xa8, 0xc6, 0xf9, 0x15, 0xf1, 0xc2, 0xb2,
4318 0xd0, 0x51, 0x37, 0x3e, 0x5f, 0x13, 0xae, 0xb9, 0xa3, 0x0e, 0x41, 0x9a,
4319 0x33, 0x58, 0xdd, 0x23, 0x13, 0x58, 0x13, 0xeb, 0x40, 0x31, 0x27, 0xaa,
4320 0x18, 0x6b, 0x44, 0xf1, 0x62, 0x35, 0xf6, 0x53, 0xed, 0xef, 0x53, 0x37,
4321 0x22, 0xe3, 0xaf, 0x78, 0xde, 0x89, 0x73, 0x0d, 0x00, 0xcf, 0x00, 0x61,
4322 0xa8, 0xd1, 0xf4, 0x57, 0x90, 0x5f, 0x08, 0xf7, 0x3d, 0x71, 0x3e, 0x9f,
4323 0x49, 0x21, 0x4a, 0x5d, 0x8d, 0x86, 0xe5, 0xbd, 0xf8, 0xb8, 0x91, 0xf1,
4324 0xaf, 0x97, 0x62, 0x83, 0x8c, 0xdd, 0x33, 0x01, 0xeb, 0x5c, 0x04, 0xc5,
4325 0xc0, 0x2a, 0xcd, 0xd7, 0xd2, 0xfa, 0x65, 0x34, 0xb2, 0x4c, 0xfe, 0x6f,
4326 0x34, 0x92, 0xcd, 0x12, 0xe6, 0xc9, 0xa5, 0x07, 0xf0, 0x4a, 0x9a, 0xe7,
4327 0x0d, 0x27, 0x35, 0xe1, 0xe7, 0x9e, 0xbc, 0x25, 0x13, 0x63, 0x86, 0xd7,
4328 0xf0, 0x5a, 0xb1, 0xc9, 0x5e, 0x27, 0xc0, 0xbd, 0xa2, 0xff, 0xe0, 0x5a,
4329 0x1a, 0xe5, 0xc7, 0xd5, 0x54, 0x77, 0x46, 0xa1, 0x7e, 0xa3, 0x42, 0xfa,
4330 0xe0, 0x1e, 0xf5, 0x12, 0xc2, 0xbc, 0x70, 0xbf, 0x1a, 0xe7, 0x73, 0xc8,
4331 0xe6, 0x0e, 0x59, 0x37, 0x4d, 0x57, 0xa7, 0xea, 0x7f, 0x0f, 0x6c, 0x87,
4332 0x5e, 0xde, 0xeb, 0x70, 0xef, 0xee, 0xf4, 0x62, 0x1f, 0xe5, 0xc0, 0x67,
4333 0xd3, 0x6d, 0x06, 0xd7, 0x7e, 0x60, 0x1c, 0x2a, 0x52, 0xf4, 0xec, 0x50,
4334 0x1d, 0x9f, 0x09, 0xda, 0x55, 0xde, 0x06, 0x47, 0xe6, 0xb6, 0x3a, 0xae,
4335 0x37, 0x6a, 0xa8, 0x4e, 0x1e, 0x49, 0x33, 0xbd, 0xdc, 0x7b, 0x33, 0xcd,
4336 0x9d, 0x71, 0xf5, 0xf2, 0x5a, 0xb2, 0x8b, 0x66, 0x9d, 0xe5, 0x18, 0xc0,
4337 0x93, 0x34, 0x36, 0x54, 0x66, 0x59, 0x7e, 0xb7, 0x8e, 0xfb, 0x9d, 0x7b,
4338 0x48, 0xbf, 0x0d, 0x59, 0x7b, 0x9e, 0x6c, 0x79, 0x10, 0x4b, 0x46, 0x5f,
4339 0xa8, 0xb3, 0x6b, 0x1f, 0xae, 0xcb, 0x87, 0xb0, 0x27, 0x1d, 0xc0, 0x4c,
4340 0xba, 0xcd, 0xff, 0x12, 0x9c, 0xd5, 0xbc, 0xca, 0xe7, 0x88, 0xe7, 0xc7,
4341 0x04, 0x30, 0x7d, 0xf5, 0x3b, 0xcb, 0xc7, 0xee, 0x99, 0x1e, 0xb7, 0x30,
4342 0xbf, 0x8c, 0x7c, 0xc0, 0xae, 0x63, 0x28, 0x56, 0x78, 0x1e, 0x25, 0xbd,
4343 0xbe, 0x4f, 0x7a, 0x75, 0x90, 0x5e, 0x5f, 0xd2, 0xfe, 0x92, 0x31, 0x8b,
4344 0x7b, 0x57, 0xdc, 0xcb, 0xfb, 0x43, 0x06, 0x81, 0x16, 0x6b, 0x4c, 0x26,
4345 0xee, 0xc4, 0xeb, 0x94, 0x07, 0x6b, 0x28, 0xfe, 0x9d, 0x4a, 0x9b, 0xab,
4346 0xe7, 0x62, 0x6d, 0xa9, 0xf7, 0x29, 0x4f, 0x1b, 0x7f, 0xa8, 0x68, 0x67,
4347 0xc8, 0x4f, 0xb3, 0x13, 0x7f, 0x8a, 0x33, 0x8d, 0x6d, 0xfe, 0xb7, 0x60,
4348 0xb8, 0x9f, 0x88, 0x3f, 0x42, 0x35, 0x3f, 0xd5, 0x0d, 0xcb, 0xff, 0x0b,
4349 0x39, 0x59, 0x1c, 0x92, 0xda, 0x76, 0xf9, 0x25, 0xfc, 0x15, 0xce, 0x5c,
4350 0x17, 0xd6, 0x5e, 0x02, 0x8f, 0xb1, 0xeb, 0xf1, 0xf0, 0xec, 0xfd, 0x7c,
4351 0x1e, 0x2a, 0x48, 0xe9, 0xcc, 0xde, 0xc7, 0x4a, 0xf3, 0xbe, 0x9b, 0x40,
4352 0x7e, 0x03, 0xd5, 0xd2, 0xd6, 0x39, 0x54, 0x78, 0x9e, 0x26, 0xbf, 0x88,
4353 0x8e, 0xf1, 0xf8, 0x63, 0x5d, 0x6a, 0x21, 0x04, 0x89, 0x30, 0x0e, 0x61,
4354 0x84, 0x1e, 0x3e, 0x9f, 0xf1, 0x74, 0x3a, 0x48, 0xb9, 0xa0, 0xad, 0x2f,
4355 0x2a, 0xbe, 0x0d, 0x1b, 0x03, 0x70, 0x9e, 0x3b, 0x46, 0x79, 0x4e, 0x49,
4356 0x3d, 0x8d, 0xb6, 0x7e, 0xaf, 0xb8, 0x1b, 0xa9, 0xc6, 0xb6, 0xc1, 0xa3,
4357 0x08, 0x13, 0x66, 0x50, 0xa2, 0x67, 0x60, 0xcf, 0xb3, 0xb4, 0x20, 0x51,
4358 0x9d, 0xc8, 0x71, 0x26, 0x8d, 0xa3, 0x7e, 0x09, 0x37, 0x74, 0xa8, 0x97,
4359 0xa7, 0x31, 0x6f, 0x2f, 0xf6, 0x98, 0xd5, 0x05, 0x1a, 0x2f, 0xf9, 0x09,
4360 0xdb, 0xd4, 0xc0, 0x49, 0xb5, 0xbf, 0xa4, 0x6f, 0xc3, 0xd6, 0x34, 0xe7,
4361 0x69, 0x92, 0x0b, 0xf9, 0x66, 0x5f, 0x64, 0x1b, 0x86, 0x0a, 0x01, 0xec,
4362 0xcf, 0x86, 0xf7, 0xee, 0x26, 0x5c, 0x37, 0x56, 0x0e, 0x87, 0x36, 0x8b,
4363 0x00, 0xe9, 0x9b, 0xea, 0xff, 0xa6, 0x20, 0xd5, 0xc9, 0x7e, 0xfa, 0xb7,
4364 0xeb, 0x99, 0x53, 0x54, 0xcf, 0xbc, 0x4e, 0xbe, 0xe6, 0xad, 0xd6, 0xaa,
4365 0x4b, 0xf3, 0x26, 0xe6, 0x62, 0xeb, 0x71, 0xc9, 0xd2, 0x59, 0x90, 0x6c,
4366 0x8c, 0x73, 0x08, 0x9f, 0x8d, 0x71, 0x8b, 0xcd, 0x63, 0x86, 0xfb, 0xc1,
4367 0xce, 0x20, 0xe5, 0x34, 0xc6, 0x9c, 0x8e, 0x3f, 0x92, 0x48, 0x1e, 0x33,
4368 0xea, 0x0e, 0xac, 0x8b, 0xed, 0xc0, 0x90, 0xf6, 0x5d, 0xd4, 0x34, 0x71,
4369 0x3c, 0x92, 0x8d, 0x06, 0x9a, 0xf7, 0x42, 0x67, 0x2f, 0xc2, 0x4f, 0x31,
4370 0x3e, 0xfa, 0x19, 0xe1, 0x23, 0xf6, 0x5d, 0x9e, 0xbf, 0x51, 0x5f, 0x46,
4371 0xb8, 0xa2, 0xbe, 0xd3, 0xce, 0xf3, 0x37, 0x16, 0xf8, 0x4c, 0x26, 0xa8,
4372 0x36, 0x85, 0xe7, 0xdd, 0x95, 0x3a, 0x9e, 0xa0, 0x18, 0x93, 0x58, 0xee,
4373 0x02, 0x16, 0xf0, 0xd9, 0x63, 0xbb, 0x8e, 0x61, 0x7e, 0x97, 0x14, 0x04,
4374 0x66, 0xe3, 0x64, 0x1f, 0xff, 0xea, 0x8c, 0x51, 0xa8, 0x7a, 0x36, 0x94,
4375 0xfb, 0x27, 0x07, 0xcc, 0x24, 0xbf, 0x33, 0xe0, 0xa8, 0xf3, 0x52, 0xbc,
4376 0x0d, 0x56, 0x20, 0x79, 0x39, 0x2e, 0x4b, 0xea, 0xbc, 0xdc, 0x59, 0xd6,
4377 0x47, 0x38, 0xbe, 0x5b, 0xba, 0x70, 0xd2, 0x33, 0xbb, 0x26, 0x95, 0xe1,
4378 0xdd, 0x68, 0x1b, 0xfa, 0x40, 0xd4, 0x5a, 0x3b, 0x97, 0xd3, 0xed, 0x48,
4379 0x2d, 0xd6, 0x9d, 0x1b, 0xae, 0x64, 0x57, 0x13, 0x1d, 0xe7, 0x4c, 0x5c,
4380 0xb7, 0xc6, 0xda, 0xdf, 0x9a, 0x6e, 0xff, 0x73, 0x9a, 0x9b, 0xbf, 0x3f,
4381 0xe0, 0xe5, 0x33, 0x93, 0xc7, 0xb3, 0x2f, 0x9a, 0xd1, 0x85, 0xb6, 0x7c,
4382 0x4e, 0x90, 0xef, 0x07, 0x75, 0x07, 0x9a, 0xd5, 0xc8, 0xe5, 0x7e, 0xfa,
4383 0xfd, 0xb7, 0x05, 0x42, 0xfb, 0x2b, 0x07, 0xf1, 0xab, 0xbc, 0x8e, 0xc7,
4384 0x28, 0x0f, 0x34, 0xa8, 0x8a, 0x3f, 0xcf, 0xfb, 0xd7, 0x31, 0x9b, 0xff,
4385 0x9b, 0xf2, 0xe4, 0x87, 0x8d, 0x7e, 0xab, 0xc6, 0xb0, 0xf9, 0x2b, 0x10,
4386 0x7f, 0x03, 0x5e, 0xf6, 0x85, 0xc5, 0xe4, 0x17, 0x7b, 0xc9, 0x5f, 0x1f,
4387 0x23, 0x5b, 0xa3, 0x0a, 0x9e, 0xfc, 0x40, 0xd9, 0x0b, 0xf2, 0xd7, 0xb1,
4388 0x34, 0xcb, 0x3f, 0xe8, 0x1b, 0x18, 0xe5, 0xb8, 0x6b, 0xf5, 0x55, 0xb5,
4389 0x90, 0x83, 0xe3, 0xae, 0x15, 0x4f, 0x8d, 0x90, 0xe3, 0xd7, 0x75, 0x4c,
4390 0xd7, 0x48, 0x39, 0x1c, 0xf4, 0xf0, 0x79, 0x7e, 0x02, 0x87, 0x03, 0x9a,
4391 0x9d, 0x2b, 0xe7, 0x28, 0x1f, 0x5d, 0x22, 0x3a, 0xf6, 0xc7, 0x9a, 0x91,
4392 0xa2, 0x7c, 0x94, 0x51, 0x6d, 0x5b, 0x52, 0x67, 0x19, 0x63, 0xfe, 0x82,
4393 0x30, 0xa6, 0x12, 0x72, 0x49, 0x6d, 0xc3, 0x27, 0xb1, 0xcd, 0x3c, 0xd3,
4394 0xc8, 0x36, 0xe5, 0xc2, 0xe1, 0xf6, 0x59, 0xb3, 0x12, 0x60, 0x7e, 0x25,
4395 0xbc, 0xa8, 0x91, 0xcd, 0x5c, 0x17, 0x0e, 0xbe, 0x48, 0x39, 0x75, 0xa6,
4396 0xaa, 0x8f, 0x70, 0x61, 0xde, 0x1e, 0x63, 0x2c, 0xeb, 0x68, 0x0a, 0x6a,
4397 0xa2, 0x80, 0x3f, 0xa6, 0xef, 0xad, 0xc1, 0x4b, 0x55, 0x5b, 0x5d, 0x36,
4398 0xfb, 0xdf, 0xbd, 0xd5, 0x77, 0x6c, 0xac, 0x67, 0x42, 0x85, 0xfb, 0xe9,
4399 0x37, 0xcf, 0x19, 0xe0, 0xb3, 0x2d, 0x7c, 0xd6, 0xca, 0xb3, 0xb5, 0xb3,
4400 0x86, 0xfd, 0xc5, 0xcf, 0xef, 0x15, 0xac, 0x1b, 0xe3, 0xbe, 0x30, 0xf7,
4401 0x68, 0x24, 0xec, 0xbe, 0xfa, 0xde, 0x03, 0x7f, 0xf6, 0xe0, 0xd6, 0x31,
4402 0xee, 0x45, 0x9c, 0xb8, 0x59, 0xc6, 0x3f, 0x51, 0x1e, 0x96, 0xd9, 0xe7,
4403 0xc9, 0xd7, 0x7f, 0xd4, 0x75, 0x6a, 0x92, 0x73, 0xea, 0xdb, 0x5d, 0x9b,
4404 0xd2, 0xf3, 0x3a, 0xbe, 0xca, 0xd3, 0xe9, 0x7b, 0x28, 0xee, 0x64, 0xd2,
4405 0xca, 0x70, 0x44, 0xb2, 0xf6, 0xd5, 0x52, 0x25, 0xf1, 0x15, 0x2a, 0xd2,
4406 0x78, 0xbe, 0x5e, 0xf4, 0x8f, 0x85, 0xa8, 0xb6, 0xf1, 0xfb, 0x1e, 0x38,
4407 0x60, 0x52, 0xae, 0x70, 0xe2, 0xe9, 0xd1, 0xb0, 0xf6, 0x26, 0xe1, 0x9d,
4408 0x67, 0x46, 0x4d, 0xf3, 0x4d, 0x0d, 0x7f, 0xd2, 0x40, 0x35, 0x72, 0xbb,
4409 0x50, 0x12, 0x84, 0x0d, 0x42, 0xeb, 0x45, 0x5b, 0xb0, 0x00, 0xe5, 0xf4,
4410 0x4e, 0x9a, 0xef, 0x50, 0x11, 0x78, 0xb1, 0xe8, 0xc1, 0x0b, 0x63, 0xdc,
4411 0xfb, 0xf3, 0xa0, 0xf4, 0x54, 0x93, 0x6f, 0xdb, 0x81, 0x10, 0xc5, 0x58,
4412 0x19, 0xbd, 0x87, 0x12, 0xb8, 0xf5, 0x80, 0x40, 0x34, 0x92, 0x40, 0xcf,
4413 0xa1, 0x7a, 0xac, 0x1f, 0x93, 0x71, 0x31, 0x5e, 0x8f, 0xdb, 0x9e, 0x9a,
4414 0xe7, 0xe3, 0x9d, 0x6a, 0x9d, 0x27, 0x5b, 0xe7, 0xd8, 0x8e, 0x66, 0x39,
4415 0x66, 0x53, 0xbe, 0xc8, 0x72, 0x0c, 0x34, 0xcd, 0x60, 0xa7, 0xdd, 0xe7,
4416 0x78, 0x8e, 0xf2, 0xc7, 0x13, 0x9d, 0x6a, 0x30, 0xe8, 0xd0, 0x71, 0xc3,
4417 0x44, 0xe5, 0xdb, 0x0d, 0x30, 0x8f, 0xf3, 0x1e, 0xc6, 0xa7, 0xed, 0xa6,
4418 0x79, 0x6b, 0x3c, 0x72, 0x99, 0x2a, 0x3b, 0xf2, 0xa9, 0xb7, 0xc9, 0xa7,
4419 0x5a, 0xf0, 0x44, 0x76, 0x7e, 0xaf, 0x4b, 0xed, 0xbf, 0x20, 0x19, 0x3b,
4420 0xfc, 0x30, 0x3f, 0xa9, 0xd5, 0xcd, 0x4f, 0x5d, 0x7a, 0x24, 0xb8, 0x5d,
4421 0xf0, 0x19, 0x11, 0xee, 0x89, 0x9b, 0xe6, 0xd9, 0xb8, 0x69, 0x16, 0xe3,
4422 0x86, 0x7b, 0xd9, 0x0a, 0x3f, 0x0e, 0x2d, 0xe5, 0x77, 0x0d, 0xc2, 0xc9,
4423 0x66, 0xb2, 0x2f, 0xcf, 0x52, 0x35, 0xb8, 0x91, 0xea, 0x2b, 0x83, 0x82,
4424 0x5c, 0x68, 0xa1, 0xd2, 0x0f, 0xb4, 0xf8, 0xf6, 0x8f, 0x36, 0xe1, 0x99,
4425 0xb9, 0xdf, 0xe5, 0xe3, 0x39, 0x56, 0x3f, 0xed, 0x13, 0x0d, 0xab, 0x1b,
4426 0x10, 0x49, 0x6e, 0x01, 0xf7, 0x46, 0xf9, 0x4c, 0xaa, 0x81, 0xdb, 0xe2,
4427 0x83, 0xd8, 0x3a, 0xc6, 0xfb, 0x6b, 0x3f, 0xef, 0xfa, 0x64, 0xcc, 0xfc,
4428 0x5b, 0x37, 0xd1, 0xbf, 0xba, 0xb3, 0x2d, 0xe5, 0xb1, 0xde, 0x55, 0x3a,
4429 0x49, 0x75, 0x40, 0x23, 0xca, 0x33, 0x6a, 0x65, 0xb1, 0x48, 0xbe, 0xe9,
4430 0x45, 0x24, 0xd8, 0x4c, 0xb1, 0x6a, 0x8e, 0x7c, 0x77, 0xa6, 0xcc, 0x75,
4431 0xc0, 0x2f, 0xbb, 0xcc, 0x89, 0x45, 0x98, 0x9e, 0xa3, 0xb9, 0xb2, 0x6a,
4432 0xcf, 0x47, 0x84, 0xf3, 0xea, 0x74, 0xb3, 0xc1, 0xa3, 0x47, 0x4e, 0xb7,
4433 0x09, 0x09, 0x97, 0x97, 0x9b, 0x66, 0x6f, 0xa7, 0x3a, 0x5c, 0x2f, 0x30,
4434 0xe4, 0xd0, 0xd5, 0x44, 0xbb, 0x84, 0xaf, 0x06, 0x11, 0xe9, 0x39, 0x8b,
4435 0x48, 0xff, 0x39, 0x8a, 0x61, 0xcf, 0x96, 0xf9, 0x9c, 0xef, 0x23, 0xf8,
4436 0xdb, 0xb1, 0x85, 0x38, 0x3e, 0xf3, 0x50, 0xb5, 0x27, 0x06, 0xcf, 0x8d,
4437 0x2b, 0x74, 0x1c, 0x26, 0xbd, 0x9e, 0xd4, 0x6a, 0x28, 0xae, 0xcb, 0x70,
4438 0xb4, 0x42, 0x6e, 0xa4, 0x3a, 0x21, 0xf6, 0xb8, 0x69, 0x2e, 0x6b, 0xb5,
4439 0x6b, 0x9e, 0x65, 0xb3, 0xd7, 0xbe, 0xa3, 0x30, 0xdf, 0xef, 0x09, 0x92,
4440 0xfe, 0xda, 0x52, 0x5b, 0xc5, 0x49, 0xd3, 0xf8, 0x43, 0x41, 0x3c, 0xdf,
4441 0x56, 0x0f, 0x0f, 0xf3, 0x2d, 0x63, 0xe7, 0x04, 0xf7, 0xe1, 0x58, 0x6f,
4442 0xf0, 0xf4, 0xc4, 0x79, 0x9f, 0x9c, 0x75, 0x54, 0xf1, 0xac, 0x8b, 0x53,
4443 0x4c, 0x14, 0x3e, 0xc2, 0x53, 0x86, 0xbb, 0x9b, 0xf2, 0x53, 0xed, 0x18,
4444 0xbf, 0x2f, 0xe1, 0xc5, 0x63, 0x14, 0x37, 0x2e, 0x69, 0x75, 0xd8, 0xdf,
4445 0xc8, 0xb6, 0xc3, 0x74, 0x72, 0xcf, 0x70, 0x1b, 0xee, 0xe5, 0x77, 0x4e,
4446 0xca, 0xbf, 0x6b, 0x9d, 0x0d, 0xa4, 0x6b, 0x84, 0x0d, 0x98, 0x8e, 0xf9,
4447 0xf5, 0x7b, 0xb0, 0x78, 0x94, 0xf5, 0x78, 0xac, 0x2b, 0x48, 0x32, 0x7a,
4448 0x82, 0xec, 0xc2, 0xa1, 0x77, 0x43, 0x26, 0x5b, 0x5c, 0x1b, 0xbf, 0x76,
4449 0x0e, 0x75, 0xe8, 0x9c, 0x44, 0xf5, 0x9d, 0xc4, 0xfb, 0x79, 0x4a, 0xe2,
4450 0x88, 0xb8, 0x76, 0xce, 0x7c, 0x3d, 0xf7, 0x13, 0x8d, 0x19, 0x3b, 0x2f,
4451 0x1d, 0xa6, 0xbc, 0xf4, 0x4a, 0x8e, 0x7d, 0xe4, 0x17, 0x96, 0x8f, 0x38,
4452 0x28, 0xd6, 0xae, 0x49, 0x87, 0x70, 0x4e, 0x83, 0x5a, 0x83, 0x18, 0xd1,
4453 0x1d, 0xe9, 0xe9, 0xae, 0x62, 0x3e, 0x17, 0xc5, 0xff, 0x99, 0x9c, 0x32,
4454 0x68, 0xf5, 0x9f, 0x54, 0xa5, 0x8f, 0x3f, 0x79, 0xef, 0x3f, 0xa8, 0x0f,
4455 0xa1, 0x61, 0x25, 0x70, 0x7e, 0x94, 0xfb, 0x55, 0xbc, 0xcf, 0x35, 0x2c,
4456 0xae, 0xf0, 0x7b, 0x61, 0xb5, 0x43, 0x78, 0x2f, 0xce, 0xef, 0x5b, 0xb1,
4457 0xef, 0x3d, 0x0c, 0xf6, 0xbd, 0x06, 0x1a, 0xfb, 0xc9, 0x68, 0x38, 0xd4,
4458 0x43, 0x7e, 0x33, 0x00, 0xeb, 0xbc, 0x90, 0x36, 0x6b, 0xf7, 0xc7, 0x93,
4459 0xa7, 0xaa, 0xfb, 0x5b, 0x91, 0xea, 0xde, 0x5c, 0xb4, 0xd0, 0x23, 0x2e,
4460 0x15, 0x98, 0xa6, 0xb7, 0x89, 0xa6, 0x6e, 0xf1, 0xe1, 0xec, 0x3a, 0x71,
4461 0x71, 0xb6, 0x57, 0x9c, 0x2d, 0x70, 0x4c, 0xfe, 0x79, 0xd7, 0xae, 0x1c,
4462 0xe7, 0xb3, 0x3b, 0xc5, 0xbb, 0xf9, 0x0d, 0xe2, 0x42, 0xa1, 0x5f, 0x7c,
4463 0x34, 0x6b, 0xe0, 0xfe, 0x78, 0x2f, 0x0a, 0x63, 0xf0, 0xbb, 0xf5, 0xfb,
4464 0xc5, 0xa5, 0xbc, 0xdd, 0x27, 0xbc, 0x50, 0x68, 0xf1, 0x15, 0xd2, 0x5c,
4465 0x03, 0x1f, 0xa3, 0x1a, 0x78, 0x91, 0xef, 0x99, 0xc9, 0x80, 0xaf, 0x34,
4466 0xa9, 0x0c, 0xde, 0x23, 0x4c, 0xf3, 0xb6, 0xd8, 0x69, 0xd6, 0xa1, 0xf9,
4467 0x5a, 0xcc, 0xc6, 0x07, 0x3b, 0x49, 0x1e, 0x9b, 0x29, 0xb7, 0x4c, 0x6b,
4468 0x6d, 0x55, 0x2c, 0xc2, 0xb6, 0xce, 0xbc, 0x72, 0xae, 0xe6, 0xfd, 0xa7,
4469 0x21, 0x38, 0x3b, 0x81, 0xbd, 0xe9, 0xcf, 0x79, 0xbd, 0x44, 0xbc, 0x1a,
4470 0xae, 0x21, 0x7c, 0x4c, 0xbc, 0xbe, 0x3e, 0xfa, 0xf9, 0x7e, 0x9e, 0x93,
4471 0xc6, 0xee, 0x4a, 0x87, 0x53, 0x47, 0x84, 0x52, 0x29, 0xd8, 0xfb, 0x79,
4472 0x9a, 0x57, 0x52, 0x4e, 0x8f, 0x50, 0x1d, 0xd1, 0x2a, 0xd9, 0xbc, 0x26,
4473 0xaa, 0xbc, 0xde, 0x44, 0xbc, 0x5e, 0x2c, 0x70, 0x7d, 0xfe, 0x76, 0xd7,
4474 0x1b, 0xa3, 0x63, 0x66, 0x3d, 0xd5, 0xff, 0x75, 0x6a, 0xb7, 0xb8, 0x40,
4475 0x3c, 0x7f, 0x48, 0x3c, 0x7f, 0x5c, 0xb8, 0x53, 0x7c, 0x44, 0x7c, 0x5e,
4476 0x2c, 0xf0, 0x1e, 0x9e, 0x5b, 0x7c, 0x98, 0xb3, 0x79, 0xfc, 0xf0, 0x2a,
4477 0x8f, 0x41, 0xdf, 0xfe, 0x74, 0x93, 0xef, 0xd1, 0x49, 0xbf, 0x6f, 0xcf,
4478 0xa4, 0x69, 0x7e, 0xa8, 0x49, 0x3e, 0xe6, 0xeb, 0x55, 0xed, 0x8b, 0x7c,
4479 0xdd, 0x4c, 0x7c, 0xf1, 0xfe, 0xeb, 0x6f, 0xeb, 0x70, 0x9e, 0xaf, 0xc7,
4480 0xac, 0x73, 0x6c, 0xf6, 0x19, 0xa9, 0x7a, 0xde, 0x83, 0x25, 0xbe, 0x7c,
4481 0x74, 0xfd, 0x95, 0x7f, 0xcd, 0xd7, 0xe0, 0x05, 0xd2, 0x5f, 0xb1, 0xca,
4482 0x57, 0xfd, 0xbf, 0xc9, 0x17, 0xd5, 0xba, 0x63, 0xcc, 0x57, 0xa3, 0xfe,
4483 0xc6, 0x98, 0x49, 0xfa, 0x92, 0xac, 0x77, 0xc1, 0x8a, 0xd9, 0x1d, 0x78,
4484 0x25, 0xc6, 0xef, 0xc7, 0x45, 0x42, 0x47, 0x28, 0x9e, 0xce, 0x96, 0x3d,
4485 0xa2, 0xc6, 0xda, 0x87, 0xc5, 0x1b, 0xb5, 0x44, 0xd3, 0xe1, 0x19, 0x7e,
4486 0xff, 0x0b, 0x1a, 0x61, 0x01, 0x3f, 0xbf, 0x37, 0x37, 0x0d, 0xee, 0x97,
4487 0xf5, 0x8a, 0x86, 0x22, 0xef, 0xbb, 0x6e, 0x10, 0xbe, 0x22, 0x9f, 0xa3,
4488 0xeb, 0x11, 0xde, 0x62, 0xb7, 0xf0, 0x1c, 0x32, 0x4c, 0x8f, 0xba, 0x4e,
4489 0xd4, 0x1d, 0xba, 0x53, 0x78, 0xaa, 0x7b, 0xb0, 0xee, 0x62, 0xd0, 0x97,
4490 0xbe, 0x46, 0x1e, 0x17, 0xb5, 0x9b, 0x2d, 0x79, 0xbc, 0xa6, 0xcd, 0xef,
4491 0x1f, 0x5a, 0xe7, 0x10, 0xf9, 0x1c, 0x9c, 0x27, 0x48, 0xb5, 0x53, 0x43,
4492 0xb5, 0x76, 0x7a, 0x37, 0xc6, 0xe7, 0x7b, 0x0c, 0x92, 0x3f, 0x42, 0x4e,
4493 0x5d, 0xe9, 0x3f, 0x21, 0xd4, 0xd4, 0xfd, 0x22, 0x79, 0xab, 0x97, 0xea,
4494 0x9f, 0xad, 0xb1, 0x48, 0xf2, 0x06, 0x11, 0x49, 0x38, 0x05, 0xe7, 0x15,
4495 0x4d, 0xae, 0x2d, 0x19, 0xd8, 0x43, 0xf1, 0xed, 0xe5, 0x9c, 0x83, 0xb0,
4496 0x03, 0xbf, 0x43, 0xe6, 0xc4, 0x5a, 0xbf, 0x17, 0x4f, 0x12, 0xee, 0x78,
4497 0x22, 0x3b, 0x88, 0x27, 0x0b, 0x03, 0x78, 0xa2, 0xf0, 0xaf, 0xde, 0x95,
4498 0x91, 0x3d, 0xfa, 0xf9, 0x95, 0xd5, 0x33, 0x08, 0x89, 0xeb, 0x23, 0x1c,
4499 0xa3, 0x1f, 0x6e, 0x97, 0x23, 0x5c, 0xeb, 0xbe, 0x75, 0xf3, 0x07, 0x2a,
4500 0xfb, 0xa2, 0xba, 0xe2, 0x94, 0x85, 0x45, 0x1e, 0x59, 0x7e, 0xc8, 0x3a,
4501 0x1b, 0x95, 0xbe, 0x69, 0x97, 0xf5, 0x4e, 0xe7, 0x3b, 0x2b, 0x36, 0xa9,
4502 0xec, 0x0f, 0x0f, 0xc7, 0xd7, 0x58, 0xf9, 0xf5, 0x6f, 0x56, 0xd9, 0x3d,
4503 0x9a, 0x77, 0x56, 0x5d, 0x6f, 0xf7, 0xd1, 0x56, 0x45, 0xad, 0xcf, 0x33,
4504 0xab, 0xec, 0xfd, 0xed, 0x4f, 0x57, 0xb5, 0x5a, 0x9f, 0xe7, 0x57, 0xd9,
4505 0x3e, 0xf5, 0xee, 0x2a, 0xd5, 0xfa, 0xfc, 0x87, 0x55, 0x76, 0x5e, 0xbe,
4506 0xb4, 0x6a, 0xc9, 0xd5, 0xf7, 0x63, 0xf8, 0xef, 0xff, 0x00, 0x88, 0xf4,
4507 0x23, 0x6f, 0xec, 0x3a, 0x00, 0x00, 0x00 };
4508
4509static const u32 bnx2_TXP_b09FwData[(0x0/4) + 1] = { 0x0 };
4510static const u32 bnx2_TXP_b09FwRodata[(0x30/4) + 1] = {
4511 0x80000940, 0x80000900, 0x80080100, 0x80080080, 0x80080000, 0x800e0000,
4512 0x80080080, 0x80080000, 0x80000a80, 0x80000a00, 0x80000980, 0x80000900,
4513 0x00000000 };
4514
4515static struct fw_info bnx2_txp_fw_09 = {
4516 /* Firmware version: 4.6.15 */
4517 .ver_major = 0x4,
4518 .ver_minor = 0x6,
4519 .ver_fix = 0xf,
4520
4521 .start_addr = 0x08000098,
4522
4523 .text_addr = 0x08000000,
4524 .text_len = 0x3ae8,
4525 .text_index = 0x0,
4526 .gz_text = bnx2_TXP_b09FwText,
4527 .gz_text_len = sizeof(bnx2_TXP_b09FwText),
4528
4529 .data_addr = 0x00000000,
4530 .data_len = 0x0,
4531 .data_index = 0x0,
4532 .data = bnx2_TXP_b09FwData,
4533
4534 .sbss_addr = 0x08003b40,
4535 .sbss_len = 0x6c,
4536 .sbss_index = 0x0,
4537
4538 .bss_addr = 0x08003bac,
4539 .bss_len = 0x24c,
4540 .bss_index = 0x0,
4541
4542 .rodata_addr = 0x08003ae8,
4543 .rodata_len = 0x30,
4544 .rodata_index = 0x0,
4545 .rodata = bnx2_TXP_b09FwRodata,
4546};
4547
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c
index 00a78e8677b0..ad5ef25add3e 100644
--- a/drivers/net/bnx2x_main.c
+++ b/drivers/net/bnx2x_main.c
@@ -10979,16 +10979,16 @@ static int __devinit bnx2x_init_dev(struct pci_dev *pdev,
10979 goto err_out_release; 10979 goto err_out_release;
10980 } 10980 }
10981 10981
10982 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) { 10982 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
10983 bp->flags |= USING_DAC_FLAG; 10983 bp->flags |= USING_DAC_FLAG;
10984 if (pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK) != 0) { 10984 if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
10985 printk(KERN_ERR PFX "pci_set_consistent_dma_mask" 10985 printk(KERN_ERR PFX "pci_set_consistent_dma_mask"
10986 " failed, aborting\n"); 10986 " failed, aborting\n");
10987 rc = -EIO; 10987 rc = -EIO;
10988 goto err_out_release; 10988 goto err_out_release;
10989 } 10989 }
10990 10990
10991 } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) { 10991 } else if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
10992 printk(KERN_ERR PFX "System does not support DMA," 10992 printk(KERN_ERR PFX "System does not support DMA,"
10993 " aborting\n"); 10993 " aborting\n");
10994 rc = -EIO; 10994 rc = -EIO;
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c
index 0effefa1b882..f5222764061c 100644
--- a/drivers/net/cassini.c
+++ b/drivers/net/cassini.c
@@ -5074,10 +5074,10 @@ static int __devinit cas_init_one(struct pci_dev *pdev,
5074 5074
5075 5075
5076 /* Configure DMA attributes. */ 5076 /* Configure DMA attributes. */
5077 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 5077 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
5078 pci_using_dac = 1; 5078 pci_using_dac = 1;
5079 err = pci_set_consistent_dma_mask(pdev, 5079 err = pci_set_consistent_dma_mask(pdev,
5080 DMA_64BIT_MASK); 5080 DMA_BIT_MASK(64));
5081 if (err < 0) { 5081 if (err < 0) {
5082 dev_err(&pdev->dev, "Unable to obtain 64-bit DMA " 5082 dev_err(&pdev->dev, "Unable to obtain 64-bit DMA "
5083 "for consistent allocations\n"); 5083 "for consistent allocations\n");
@@ -5085,7 +5085,7 @@ static int __devinit cas_init_one(struct pci_dev *pdev,
5085 } 5085 }
5086 5086
5087 } else { 5087 } else {
5088 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 5088 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
5089 if (err) { 5089 if (err) {
5090 dev_err(&pdev->dev, "No usable DMA configuration, " 5090 dev_err(&pdev->dev, "No usable DMA configuration, "
5091 "aborting.\n"); 5091 "aborting.\n");
diff --git a/drivers/net/chelsio/cxgb2.c b/drivers/net/chelsio/cxgb2.c
index 9b6011e7678e..fa06994f9737 100644
--- a/drivers/net/chelsio/cxgb2.c
+++ b/drivers/net/chelsio/cxgb2.c
@@ -1056,17 +1056,17 @@ static int __devinit init_one(struct pci_dev *pdev,
1056 goto out_disable_pdev; 1056 goto out_disable_pdev;
1057 } 1057 }
1058 1058
1059 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 1059 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
1060 pci_using_dac = 1; 1060 pci_using_dac = 1;
1061 1061
1062 if (pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) { 1062 if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
1063 CH_ERR("%s: unable to obtain 64-bit DMA for " 1063 CH_ERR("%s: unable to obtain 64-bit DMA for "
1064 "consistent allocations\n", pci_name(pdev)); 1064 "consistent allocations\n", pci_name(pdev));
1065 err = -ENODEV; 1065 err = -ENODEV;
1066 goto out_disable_pdev; 1066 goto out_disable_pdev;
1067 } 1067 }
1068 1068
1069 } else if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) != 0) { 1069 } else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
1070 CH_ERR("%s: no usable DMA configuration\n", pci_name(pdev)); 1070 CH_ERR("%s: no usable DMA configuration\n", pci_name(pdev));
1071 goto out_disable_pdev; 1071 goto out_disable_pdev;
1072 } 1072 }
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 2c2aaa741450..ab0e5febef83 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -3038,15 +3038,15 @@ static int __devinit init_one(struct pci_dev *pdev,
3038 goto out_release_regions; 3038 goto out_release_regions;
3039 } 3039 }
3040 3040
3041 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 3041 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3042 pci_using_dac = 1; 3042 pci_using_dac = 1;
3043 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 3043 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3044 if (err) { 3044 if (err) {
3045 dev_err(&pdev->dev, "unable to obtain 64-bit DMA for " 3045 dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
3046 "coherent allocations\n"); 3046 "coherent allocations\n");
3047 goto out_disable_device; 3047 goto out_disable_device;
3048 } 3048 }
3049 } else if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) != 0) { 3049 } else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
3050 dev_err(&pdev->dev, "no usable DMA configuration\n"); 3050 dev_err(&pdev->dev, "no usable DMA configuration\n");
3051 goto out_disable_device; 3051 goto out_disable_device;
3052 } 3052 }
diff --git a/drivers/net/dl2k.c b/drivers/net/dl2k.c
index c749e9fb47ef..4a1b554654eb 100644
--- a/drivers/net/dl2k.c
+++ b/drivers/net/dl2k.c
@@ -714,7 +714,7 @@ rio_interrupt (int irq, void *dev_instance)
714 714
715static inline dma_addr_t desc_to_dma(struct netdev_desc *desc) 715static inline dma_addr_t desc_to_dma(struct netdev_desc *desc)
716{ 716{
717 return le64_to_cpu(desc->fraginfo) & DMA_48BIT_MASK; 717 return le64_to_cpu(desc->fraginfo) & DMA_BIT_MASK(48);
718} 718}
719 719
720static void 720static void
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index 0504db9ad643..5c0b457c7868 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -2604,7 +2604,7 @@ static int __devinit e100_probe(struct pci_dev *pdev,
2604 goto err_out_disable_pdev; 2604 goto err_out_disable_pdev;
2605 } 2605 }
2606 2606
2607 if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) { 2607 if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
2608 DPRINTK(PROBE, ERR, "No usable DMA configuration, aborting.\n"); 2608 DPRINTK(PROBE, ERR, "No usable DMA configuration, aborting.\n");
2609 goto err_out_free_res; 2609 goto err_out_free_res;
2610 } 2610 }
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 93b861d032b5..ddc5c533e89c 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -962,13 +962,13 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
962 if (err) 962 if (err)
963 return err; 963 return err;
964 964
965 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK) && 965 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
966 !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) { 966 !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
967 pci_using_dac = 1; 967 pci_using_dac = 1;
968 } else { 968 } else {
969 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 969 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
970 if (err) { 970 if (err) {
971 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 971 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
972 if (err) { 972 if (err) {
973 E1000_ERR("No usable DMA configuration, " 973 E1000_ERR("No usable DMA configuration, "
974 "aborting\n"); 974 "aborting\n");
@@ -2335,6 +2335,12 @@ static void e1000_set_rx_mode(struct net_device *netdev)
2335 int mta_reg_count = (hw->mac_type == e1000_ich8lan) ? 2335 int mta_reg_count = (hw->mac_type == e1000_ich8lan) ?
2336 E1000_NUM_MTA_REGISTERS_ICH8LAN : 2336 E1000_NUM_MTA_REGISTERS_ICH8LAN :
2337 E1000_NUM_MTA_REGISTERS; 2337 E1000_NUM_MTA_REGISTERS;
2338 u32 *mcarray = kcalloc(mta_reg_count, sizeof(u32), GFP_ATOMIC);
2339
2340 if (!mcarray) {
2341 DPRINTK(PROBE, ERR, "memory allocation failed\n");
2342 return;
2343 }
2338 2344
2339 if (hw->mac_type == e1000_ich8lan) 2345 if (hw->mac_type == e1000_ich8lan)
2340 rar_entries = E1000_RAR_ENTRIES_ICH8LAN; 2346 rar_entries = E1000_RAR_ENTRIES_ICH8LAN;
@@ -2401,22 +2407,34 @@ static void e1000_set_rx_mode(struct net_device *netdev)
2401 } 2407 }
2402 WARN_ON(uc_ptr != NULL); 2408 WARN_ON(uc_ptr != NULL);
2403 2409
2404 /* clear the old settings from the multicast hash table */
2405
2406 for (i = 0; i < mta_reg_count; i++) {
2407 E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
2408 E1000_WRITE_FLUSH();
2409 }
2410
2411 /* load any remaining addresses into the hash table */ 2410 /* load any remaining addresses into the hash table */
2412 2411
2413 for (; mc_ptr; mc_ptr = mc_ptr->next) { 2412 for (; mc_ptr; mc_ptr = mc_ptr->next) {
2413 u32 hash_reg, hash_bit, mta;
2414 hash_value = e1000_hash_mc_addr(hw, mc_ptr->da_addr); 2414 hash_value = e1000_hash_mc_addr(hw, mc_ptr->da_addr);
2415 e1000_mta_set(hw, hash_value); 2415 hash_reg = (hash_value >> 5) & 0x7F;
2416 hash_bit = hash_value & 0x1F;
2417 mta = (1 << hash_bit);
2418 mcarray[hash_reg] |= mta;
2416 } 2419 }
2417 2420
2421 /* write the hash table completely, write from bottom to avoid
2422 * both stupid write combining chipsets, and flushing each write */
2423 for (i = mta_reg_count - 1; i >= 0 ; i--) {
2424 /*
2425 * If we are on an 82544 has an errata where writing odd
2426 * offsets overwrites the previous even offset, but writing
2427 * backwards over the range solves the issue by always
2428 * writing the odd offset first
2429 */
2430 E1000_WRITE_REG_ARRAY(hw, MTA, i, mcarray[i]);
2431 }
2432 E1000_WRITE_FLUSH();
2433
2418 if (hw->mac_type == e1000_82542_rev2_0) 2434 if (hw->mac_type == e1000_82542_rev2_0)
2419 e1000_leave_82542_rst(adapter); 2435 e1000_leave_82542_rst(adapter);
2436
2437 kfree(mcarray);
2420} 2438}
2421 2439
2422/* Need to wait a few seconds after link up to get diagnostic information from 2440/* Need to wait a few seconds after link up to get diagnostic information from
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index bfb2d6c85c54..409b58cad0e5 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -2203,7 +2203,7 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)
2203 /* Setup the HW Tx Head and Tail descriptor pointers */ 2203 /* Setup the HW Tx Head and Tail descriptor pointers */
2204 tdba = tx_ring->dma; 2204 tdba = tx_ring->dma;
2205 tdlen = tx_ring->count * sizeof(struct e1000_tx_desc); 2205 tdlen = tx_ring->count * sizeof(struct e1000_tx_desc);
2206 ew32(TDBAL, (tdba & DMA_32BIT_MASK)); 2206 ew32(TDBAL, (tdba & DMA_BIT_MASK(32)));
2207 ew32(TDBAH, (tdba >> 32)); 2207 ew32(TDBAH, (tdba >> 32));
2208 ew32(TDLEN, tdlen); 2208 ew32(TDLEN, tdlen);
2209 ew32(TDH, 0); 2209 ew32(TDH, 0);
@@ -2459,7 +2459,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
2459 * the Base and Length of the Rx Descriptor Ring 2459 * the Base and Length of the Rx Descriptor Ring
2460 */ 2460 */
2461 rdba = rx_ring->dma; 2461 rdba = rx_ring->dma;
2462 ew32(RDBAL, (rdba & DMA_32BIT_MASK)); 2462 ew32(RDBAL, (rdba & DMA_BIT_MASK(32)));
2463 ew32(RDBAH, (rdba >> 32)); 2463 ew32(RDBAH, (rdba >> 32));
2464 ew32(RDLEN, rdlen); 2464 ew32(RDLEN, rdlen);
2465 ew32(RDH, 0); 2465 ew32(RDH, 0);
@@ -4763,16 +4763,16 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4763 return err; 4763 return err;
4764 4764
4765 pci_using_dac = 0; 4765 pci_using_dac = 0;
4766 err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 4766 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
4767 if (!err) { 4767 if (!err) {
4768 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 4768 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
4769 if (!err) 4769 if (!err)
4770 pci_using_dac = 1; 4770 pci_using_dac = 1;
4771 } else { 4771 } else {
4772 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 4772 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4773 if (err) { 4773 if (err) {
4774 err = pci_set_consistent_dma_mask(pdev, 4774 err = pci_set_consistent_dma_mask(pdev,
4775 DMA_32BIT_MASK); 4775 DMA_BIT_MASK(32));
4776 if (err) { 4776 if (err) {
4777 dev_err(&pdev->dev, "No usable DMA " 4777 dev_err(&pdev->dev, "No usable DMA "
4778 "configuration, aborting\n"); 4778 "configuration, aborting\n");
diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index 03403a51f7ea..9080f07da8fe 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c
@@ -1685,15 +1685,15 @@ static int __devinit enic_probe(struct pci_dev *pdev,
1685 * fail to 32-bit. 1685 * fail to 32-bit.
1686 */ 1686 */
1687 1687
1688 err = pci_set_dma_mask(pdev, DMA_40BIT_MASK); 1688 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(40));
1689 if (err) { 1689 if (err) {
1690 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1690 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1691 if (err) { 1691 if (err) {
1692 printk(KERN_ERR PFX 1692 printk(KERN_ERR PFX
1693 "No usable DMA configuration, aborting.\n"); 1693 "No usable DMA configuration, aborting.\n");
1694 goto err_out_release_regions; 1694 goto err_out_release_regions;
1695 } 1695 }
1696 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1696 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1697 if (err) { 1697 if (err) {
1698 printk(KERN_ERR PFX 1698 printk(KERN_ERR PFX
1699 "Unable to obtain 32-bit DMA " 1699 "Unable to obtain 32-bit DMA "
@@ -1701,7 +1701,7 @@ static int __devinit enic_probe(struct pci_dev *pdev,
1701 goto err_out_release_regions; 1701 goto err_out_release_regions;
1702 } 1702 }
1703 } else { 1703 } else {
1704 err = pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK); 1704 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40));
1705 if (err) { 1705 if (err) {
1706 printk(KERN_ERR PFX 1706 printk(KERN_ERR PFX
1707 "Unable to obtain 40-bit DMA " 1707 "Unable to obtain 40-bit DMA "
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index a858c6ff80dd..d37465020bcc 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -5632,12 +5632,12 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
5632 np->desc_ver = DESC_VER_3; 5632 np->desc_ver = DESC_VER_3;
5633 np->txrxctl_bits = NVREG_TXRXCTL_DESC_3; 5633 np->txrxctl_bits = NVREG_TXRXCTL_DESC_3;
5634 if (dma_64bit) { 5634 if (dma_64bit) {
5635 if (pci_set_dma_mask(pci_dev, DMA_39BIT_MASK)) 5635 if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(39)))
5636 dev_printk(KERN_INFO, &pci_dev->dev, 5636 dev_printk(KERN_INFO, &pci_dev->dev,
5637 "64-bit DMA failed, using 32-bit addressing\n"); 5637 "64-bit DMA failed, using 32-bit addressing\n");
5638 else 5638 else
5639 dev->features |= NETIF_F_HIGHDMA; 5639 dev->features |= NETIF_F_HIGHDMA;
5640 if (pci_set_consistent_dma_mask(pci_dev, DMA_39BIT_MASK)) { 5640 if (pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(39))) {
5641 dev_printk(KERN_INFO, &pci_dev->dev, 5641 dev_printk(KERN_INFO, &pci_dev->dev,
5642 "64-bit DMA (consistent) failed, using 32-bit ring buffers\n"); 5642 "64-bit DMA (consistent) failed, using 32-bit ring buffers\n");
5643 } 5643 }
@@ -6117,6 +6117,9 @@ static int nv_resume(struct pci_dev *pdev)
6117 6117
6118 pci_write_config_dword(pdev, NV_MSI_PRIV_OFFSET, NV_MSI_PRIV_VALUE); 6118 pci_write_config_dword(pdev, NV_MSI_PRIV_OFFSET, NV_MSI_PRIV_VALUE);
6119 6119
6120 /* restore phy state, including autoneg */
6121 phy_init(dev);
6122
6120 netif_device_attach(dev); 6123 netif_device_attach(dev);
6121 if (netif_running(dev)) { 6124 if (netif_running(dev)) {
6122 rc = nv_open(dev); 6125 rc = nv_open(dev);
diff --git a/drivers/net/hp100.c b/drivers/net/hp100.c
index ad8be7e78290..de3f49f991a3 100644
--- a/drivers/net/hp100.c
+++ b/drivers/net/hp100.c
@@ -580,7 +580,7 @@ static int __devinit hp100_probe1(struct net_device *dev, int ioaddr,
580 * Also, we can have EISA Busmaster cards (not tested), 580 * Also, we can have EISA Busmaster cards (not tested),
581 * so beware !!! - Jean II */ 581 * so beware !!! - Jean II */
582 if((bus == HP100_BUS_PCI) && 582 if((bus == HP100_BUS_PCI) &&
583 (pci_set_dma_mask(pci_dev, DMA_32BIT_MASK))) { 583 (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32)))) {
584 /* Gracefully fallback to shared memory */ 584 /* Gracefully fallback to shared memory */
585 goto busmasterfail; 585 goto busmasterfail;
586 } 586 }
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c
index a815e17a0ab4..77e4b5b52fc8 100644
--- a/drivers/net/ibm_newemac/core.c
+++ b/drivers/net/ibm_newemac/core.c
@@ -1229,7 +1229,7 @@ static int emac_link_differs(struct emac_instance *dev)
1229static void emac_link_timer(struct work_struct *work) 1229static void emac_link_timer(struct work_struct *work)
1230{ 1230{
1231 struct emac_instance *dev = 1231 struct emac_instance *dev =
1232 container_of((struct delayed_work *)work, 1232 container_of(to_delayed_work(work),
1233 struct emac_instance, link_work); 1233 struct emac_instance, link_work);
1234 int link_poll_interval; 1234 int link_poll_interval;
1235 1235
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 03aa9593dd9e..6b0697c565b9 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -1154,15 +1154,15 @@ static int __devinit igb_probe(struct pci_dev *pdev,
1154 return err; 1154 return err;
1155 1155
1156 pci_using_dac = 0; 1156 pci_using_dac = 0;
1157 err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1157 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1158 if (!err) { 1158 if (!err) {
1159 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 1159 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1160 if (!err) 1160 if (!err)
1161 pci_using_dac = 1; 1161 pci_using_dac = 1;
1162 } else { 1162 } else {
1163 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1163 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1164 if (err) { 1164 if (err) {
1165 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1165 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1166 if (err) { 1166 if (err) {
1167 dev_err(&pdev->dev, "No usable DMA " 1167 dev_err(&pdev->dev, "No usable DMA "
1168 "configuration, aborting\n"); 1168 "configuration, aborting\n");
diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c
index 170b12d1d70e..cbc63ff13add 100644
--- a/drivers/net/ioc3-eth.c
+++ b/drivers/net/ioc3-eth.c
@@ -1226,17 +1226,17 @@ static int __devinit ioc3_probe(struct pci_dev *pdev,
1226 int err, pci_using_dac; 1226 int err, pci_using_dac;
1227 1227
1228 /* Configure DMA attributes. */ 1228 /* Configure DMA attributes. */
1229 err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1229 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1230 if (!err) { 1230 if (!err) {
1231 pci_using_dac = 1; 1231 pci_using_dac = 1;
1232 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 1232 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1233 if (err < 0) { 1233 if (err < 0) {
1234 printk(KERN_ERR "%s: Unable to obtain 64 bit DMA " 1234 printk(KERN_ERR "%s: Unable to obtain 64 bit DMA "
1235 "for consistent allocations\n", pci_name(pdev)); 1235 "for consistent allocations\n", pci_name(pdev));
1236 goto out; 1236 goto out;
1237 } 1237 }
1238 } else { 1238 } else {
1239 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1239 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1240 if (err) { 1240 if (err) {
1241 printk(KERN_ERR "%s: No usable DMA configuration, " 1241 printk(KERN_ERR "%s: No usable DMA configuration, "
1242 "aborting.\n", pci_name(pdev)); 1242 "aborting.\n", pci_name(pdev));
diff --git a/drivers/net/ipg.c b/drivers/net/ipg.c
index 360aa5e35fda..43019461b776 100644
--- a/drivers/net/ipg.c
+++ b/drivers/net/ipg.c
@@ -2240,9 +2240,9 @@ static int __devinit ipg_probe(struct pci_dev *pdev,
2240 2240
2241 pci_set_master(pdev); 2241 pci_set_master(pdev);
2242 2242
2243 rc = pci_set_dma_mask(pdev, DMA_40BIT_MASK); 2243 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(40));
2244 if (rc < 0) { 2244 if (rc < 0) {
2245 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2245 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2246 if (rc < 0) { 2246 if (rc < 0) {
2247 printk(KERN_ERR "%s: DMA config failed.\n", 2247 printk(KERN_ERR "%s: DMA config failed.\n",
2248 pci_name(pdev)); 2248 pci_name(pdev));
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
index 4b0ea66d7a44..4a0826b8f6f2 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -365,12 +365,12 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
365 if (err) 365 if (err)
366 return err; 366 return err;
367 367
368 if (!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK)) && 368 if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) &&
369 !(err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK))) { 369 !(err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))) {
370 pci_using_dac = 1; 370 pci_using_dac = 1;
371 } else { 371 } else {
372 if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) || 372 if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) ||
373 (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) { 373 (err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)))) {
374 printk(KERN_ERR 374 printk(KERN_ERR
375 "ixgb: No usable DMA configuration, aborting\n"); 375 "ixgb: No usable DMA configuration, aborting\n");
376 goto err_dma_mask; 376 goto err_dma_mask;
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 286ecc0e6ab7..9ef128ae6458 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1643,7 +1643,7 @@ static void ixgbe_configure_tx(struct ixgbe_adapter *adapter)
1643 tdba = ring->dma; 1643 tdba = ring->dma;
1644 tdlen = ring->count * sizeof(union ixgbe_adv_tx_desc); 1644 tdlen = ring->count * sizeof(union ixgbe_adv_tx_desc);
1645 IXGBE_WRITE_REG(hw, IXGBE_TDBAL(j), 1645 IXGBE_WRITE_REG(hw, IXGBE_TDBAL(j),
1646 (tdba & DMA_32BIT_MASK)); 1646 (tdba & DMA_BIT_MASK(32)));
1647 IXGBE_WRITE_REG(hw, IXGBE_TDBAH(j), (tdba >> 32)); 1647 IXGBE_WRITE_REG(hw, IXGBE_TDBAH(j), (tdba >> 32));
1648 IXGBE_WRITE_REG(hw, IXGBE_TDLEN(j), tdlen); 1648 IXGBE_WRITE_REG(hw, IXGBE_TDLEN(j), tdlen);
1649 IXGBE_WRITE_REG(hw, IXGBE_TDH(j), 0); 1649 IXGBE_WRITE_REG(hw, IXGBE_TDH(j), 0);
@@ -1782,7 +1782,7 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
1782 for (i = 0; i < adapter->num_rx_queues; i++) { 1782 for (i = 0; i < adapter->num_rx_queues; i++) {
1783 rdba = adapter->rx_ring[i].dma; 1783 rdba = adapter->rx_ring[i].dma;
1784 j = adapter->rx_ring[i].reg_idx; 1784 j = adapter->rx_ring[i].reg_idx;
1785 IXGBE_WRITE_REG(hw, IXGBE_RDBAL(j), (rdba & DMA_32BIT_MASK)); 1785 IXGBE_WRITE_REG(hw, IXGBE_RDBAL(j), (rdba & DMA_BIT_MASK(32)));
1786 IXGBE_WRITE_REG(hw, IXGBE_RDBAH(j), (rdba >> 32)); 1786 IXGBE_WRITE_REG(hw, IXGBE_RDBAH(j), (rdba >> 32));
1787 IXGBE_WRITE_REG(hw, IXGBE_RDLEN(j), rdlen); 1787 IXGBE_WRITE_REG(hw, IXGBE_RDLEN(j), rdlen);
1788 IXGBE_WRITE_REG(hw, IXGBE_RDH(j), 0); 1788 IXGBE_WRITE_REG(hw, IXGBE_RDH(j), 0);
@@ -4509,13 +4509,13 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
4509 if (err) 4509 if (err)
4510 return err; 4510 return err;
4511 4511
4512 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK) && 4512 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
4513 !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) { 4513 !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
4514 pci_using_dac = 1; 4514 pci_using_dac = 1;
4515 } else { 4515 } else {
4516 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 4516 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4517 if (err) { 4517 if (err) {
4518 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 4518 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
4519 if (err) { 4519 if (err) {
4520 dev_err(&pdev->dev, "No usable DMA " 4520 dev_err(&pdev->dev, "No usable DMA "
4521 "configuration, aborting\n"); 4521 "configuration, aborting\n");
diff --git a/drivers/net/jme.c b/drivers/net/jme.c
index 860dcd98a07c..ece35040288c 100644
--- a/drivers/net/jme.c
+++ b/drivers/net/jme.c
@@ -2600,8 +2600,8 @@ jme_pci_dma64(struct pci_dev *pdev)
2600 if (!pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK)) 2600 if (!pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK))
2601 return 1; 2601 return 1;
2602 2602
2603 if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) 2603 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
2604 if (!pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) 2604 if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)))
2605 return 0; 2605 return 0;
2606 2606
2607 return -1; 2607 return -1;
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index a66f5b2fd288..102bac90a302 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -1076,20 +1076,20 @@ static int __mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
1076 1076
1077 pci_set_master(pdev); 1077 pci_set_master(pdev);
1078 1078
1079 err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1079 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1080 if (err) { 1080 if (err) {
1081 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit PCI DMA mask.\n"); 1081 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit PCI DMA mask.\n");
1082 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1082 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1083 if (err) { 1083 if (err) {
1084 dev_err(&pdev->dev, "Can't set PCI DMA mask, aborting.\n"); 1084 dev_err(&pdev->dev, "Can't set PCI DMA mask, aborting.\n");
1085 goto err_release_bar2; 1085 goto err_release_bar2;
1086 } 1086 }
1087 } 1087 }
1088 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 1088 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1089 if (err) { 1089 if (err) {
1090 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit " 1090 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit "
1091 "consistent PCI DMA mask.\n"); 1091 "consistent PCI DMA mask.\n");
1092 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1092 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1093 if (err) { 1093 if (err) {
1094 dev_err(&pdev->dev, "Can't set consistent PCI DMA mask, " 1094 dev_err(&pdev->dev, "Can't set consistent PCI DMA mask, "
1095 "aborting.\n"); 1095 "aborting.\n");
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index aea9fdaa3cd5..9eed126a82f0 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -1130,7 +1130,7 @@ myri10ge_submit_8rx(struct mcp_kreq_ether_recv __iomem * dst,
1130 __be32 low; 1130 __be32 low;
1131 1131
1132 low = src->addr_low; 1132 low = src->addr_low;
1133 src->addr_low = htonl(DMA_32BIT_MASK); 1133 src->addr_low = htonl(DMA_BIT_MASK(32));
1134 myri10ge_pio_copy(dst, src, 4 * sizeof(*src)); 1134 myri10ge_pio_copy(dst, src, 4 * sizeof(*src));
1135 mb(); 1135 mb();
1136 myri10ge_pio_copy(dst + 4, src + 4, 4 * sizeof(*src)); 1136 myri10ge_pio_copy(dst + 4, src + 4, 4 * sizeof(*src));
@@ -3792,19 +3792,19 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3792 3792
3793 pci_set_master(pdev); 3793 pci_set_master(pdev);
3794 dac_enabled = 1; 3794 dac_enabled = 1;
3795 status = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 3795 status = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
3796 if (status != 0) { 3796 if (status != 0) {
3797 dac_enabled = 0; 3797 dac_enabled = 0;
3798 dev_err(&pdev->dev, 3798 dev_err(&pdev->dev,
3799 "64-bit pci address mask was refused, " 3799 "64-bit pci address mask was refused, "
3800 "trying 32-bit\n"); 3800 "trying 32-bit\n");
3801 status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 3801 status = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
3802 } 3802 }
3803 if (status != 0) { 3803 if (status != 0) {
3804 dev_err(&pdev->dev, "Error %d setting DMA mask\n", status); 3804 dev_err(&pdev->dev, "Error %d setting DMA mask\n", status);
3805 goto abort_with_enabled; 3805 goto abort_with_enabled;
3806 } 3806 }
3807 (void)pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 3807 (void)pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3808 mgp->cmd = dma_alloc_coherent(&pdev->dev, sizeof(*mgp->cmd), 3808 mgp->cmd = dma_alloc_coherent(&pdev->dev, sizeof(*mgp->cmd),
3809 &mgp->cmd_bus, GFP_KERNEL); 3809 &mgp->cmd_bus, GFP_KERNEL);
3810 if (mgp->cmd == NULL) 3810 if (mgp->cmd == NULL)
diff --git a/drivers/net/myri_code.h b/drivers/net/myri_code.h
deleted file mode 100644
index ba7b8652c501..000000000000
--- a/drivers/net/myri_code.h
+++ /dev/null
@@ -1,5006 +0,0 @@
1/* This is the Myrinet MCP code for LANai4.x */
2/* Generated by cat $MYRI_HOME/lib/lanai/mcp4.dat > myri_code4.h */
3
4static unsigned int __devinitdata lanai4_code_off = 0x0000; /* half-word offset */
5static unsigned char __devinitdata lanai4_code[76256] = {
60xF2,0x0E,
70xFE,0x00, 0xC2,0x90, 0x00,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x01,0x4C, 0x97,0x93,
80xFF,0xFC, 0xE0,0x00, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93,
90xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x2A,0x6C, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
100x2C,0x10, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
110xFF,0xFC, 0xF7,0x02, 0x05,0x3C, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x03, 0x97,0x13,
120xFF,0xFC, 0xF7,0x06, 0x29,0xE0, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
130x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x2B,0x84, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
140x2C,0x1C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
150xFF,0xFC, 0xF7,0x02, 0x0A,0xBC, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x02, 0x97,0x13,
160xFF,0xFC, 0xF7,0x06, 0x2A,0xF8, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
170x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
180x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
190x00,0x08, 0xF7,0x04, 0x4A,0x9C, 0x85,0x16, 0x00,0x00, 0x20,0x3A, 0x00,0x01, 0xEE,0x00,
200x01,0x01, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
210x00,0x00, 0xE6,0x00, 0x01,0x00, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
220x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x01,0x2D, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
230x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
240x00,0x02, 0xF4,0x82, 0x00,0x12, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x01,0xE0, 0xB4,0xBA,
250x68,0x02, 0xE0,0x00, 0x01,0xE0, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x3B,0x64, 0xF5,0x84,
260x4F,0x54, 0xF7,0x05, 0x7A,0x10, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x01,0x99, 0x97,0x2A,
270x00,0x20, 0x95,0xAA, 0x00,0x1C, 0xF6,0x06, 0x4A,0x98, 0x26,0xAC, 0x00,0x01, 0x77,0x35,
280x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0x07,0x38, 0x00,0x0C, 0xA4,0xBA,
290x60,0x02, 0x00,0x00, 0x00,0x01, 0x94,0xAA, 0x00,0x10, 0xC7,0x38, 0x60,0x00, 0x87,0x3A,
300x00,0x04, 0x00,0x00, 0x00,0x01, 0x97,0x2A, 0x00,0x14, 0xF7,0x04, 0x4A,0x9C, 0x00,0x00,
310x00,0x01, 0x27,0x38, 0x00,0x01, 0xC0,0x2E, 0x72,0x00, 0xD7,0x00, 0x0A,0x01, 0xE0,0x00,
320x01,0xD0, 0xF7,0x05, 0x7A,0x18, 0x95,0xAA, 0x00,0x1C, 0xF6,0x06, 0x4A,0x98, 0x06,0xAC,
330x00,0x01, 0x77,0x35, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0x07,0x38,
340x00,0x0C, 0xA4,0xBA, 0x60,0x02, 0x00,0x00, 0x00,0x01, 0x94,0xAA, 0x00,0x10, 0xC7,0x38,
350x60,0x00, 0x87,0x3A, 0x00,0x04, 0xF0,0x05, 0x7A,0x18, 0x97,0x2A, 0x00,0x14, 0xF5,0x05,
360x79,0xD8, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x01,0xF4, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
370xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
380x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x38, 0xF7,0x04,
390x7A,0x10, 0xF6,0x84, 0x3B,0x64, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C,
400x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x02,0x4C, 0x00,0x00,
410x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
420x02,0x4C, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
430x00,0x00, 0xE6,0x00, 0x02,0x85, 0xF4,0x82, 0x00,0x00, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86,
440x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02,
450x00,0x12, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x02,0x74, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05,
460x2D,0x38, 0xF3,0x06, 0x2A,0x6C, 0xF3,0x05, 0x2C,0x10, 0xE0,0x00, 0x05,0x28, 0xF0,0x05,
470x7A,0x18, 0xF3,0x84, 0x79,0xD8, 0xF6,0x84, 0x4A,0xA0, 0x23,0x14, 0x00,0x20, 0x93,0x16,
480xFF,0xC4, 0x84,0x1E, 0x00,0x10, 0x96,0x96, 0xFF,0xD4, 0xF7,0x04, 0x4A,0x9C, 0x94,0x16,
490xFF,0xE0, 0x85,0x1E, 0x00,0x14, 0xC0,0x36, 0x72,0x00, 0xEC,0x00, 0x03,0x6C, 0x95,0x16,
500xFF,0xE4, 0x77,0x35, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF3,0x06,
510x4A,0x98, 0xC6,0xB8, 0x30,0x00, 0x06,0xB4, 0x00,0x0C, 0xC5,0x84, 0x00,0x00, 0x87,0x36,
520x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x42,0x00, 0xE6,0x00, 0x02,0xFC, 0xC6,0x24,
530x00,0x00, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x52,0x00, 0xE6,0x00,
540x03,0x00, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
550x03,0x0D, 0x00,0x00, 0x00,0x01, 0xF5,0x82, 0x00,0x00, 0x86,0x36, 0x00,0x00, 0x87,0x16,
560xFF,0xE0, 0x00,0x00, 0x00,0x01, 0xC0,0x32, 0x72,0x00, 0xE2,0x00, 0x03,0x48, 0xF5,0x02,
570x00,0x00, 0xC0,0x32, 0x72,0x00, 0xE6,0x00, 0x03,0x50, 0x20,0x2A, 0x00,0x00, 0x86,0xB6,
580x00,0x04, 0x87,0x16, 0xFF,0xE4, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
590x03,0x51, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00,
600x03,0x61, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00,
610x03,0x70, 0x20,0x26, 0x00,0x00, 0xF4,0x82, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00,
620x03,0xA5, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9,
630x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4,
640x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xD8, 0xE0,0x00, 0x04,0x18, 0x96,0x96,
650xFF,0xDC, 0x27,0x14, 0x00,0x2C, 0x97,0x13, 0xFF,0xFC, 0x83,0x16, 0xFF,0xC4, 0x00,0x00,
660x00,0x01, 0x93,0x13, 0xFF,0xFC, 0xF3,0x06, 0x4A,0x98, 0x93,0x13, 0xFF,0xFC, 0x93,0x96,
670xFF,0xCC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
680xFF,0xCC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x04,0x15, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
690xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
700x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
710xFF,0xD8, 0x96,0x96, 0xFF,0xDC, 0xF7,0x05, 0x4A,0xA0, 0xE0,0x00, 0x04,0x1C, 0x20,0x32,
720x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x04,0x2C, 0xF4,0x82,
730x00,0x01, 0xE0,0x00, 0x04,0x84, 0xF4,0x82, 0x00,0x00, 0x86,0x96, 0xFF,0xD8, 0x00,0x00,
740x00,0x01, 0x77,0x35, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF6,0x86,
750x42,0xC8, 0xA6,0x3A, 0x68,0x02, 0xC7,0x38, 0x68,0x00, 0x75,0x39, 0x00,0x1E, 0x75,0x28,
760xFF,0xE5, 0x05,0xB8, 0x00,0x02, 0x86,0xAE, 0x00,0x00, 0x07,0x38, 0x00,0x04, 0x97,0x16,
770xFF,0xEC, 0xC6,0x30, 0x57,0xC0, 0x76,0x30, 0xFF,0xF0, 0x96,0x16, 0xFF,0xF4, 0x75,0xAD,
780x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC6,0xB4, 0x5F,0xC0, 0x76,0xB4, 0xFF,0xF0, 0x96,0x96,
790xFF,0xF0, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0x05,0x25, 0xF3,0x06, 0x29,0xE0, 0x86,0x96,
800xFF,0xF0, 0xF5,0x82, 0x00,0x00, 0xC7,0x34, 0x68,0x00, 0xC4,0x9C, 0x72,0x00, 0xC0,0x2E,
810x6A,0x00, 0xEC,0x00, 0x04,0xF0, 0xC5,0x24, 0x00,0x00, 0xC6,0x2C, 0x00,0x00, 0x87,0x16,
820xFF,0xEC, 0x00,0x00, 0x00,0x01, 0xA6,0xB2, 0x70,0x02, 0x05,0xAC, 0x00,0x01, 0xC7,0x30,
830x70,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB4,
840xFF,0xF0, 0xF6,0xAB, 0x28,0x00, 0x05,0x28, 0x00,0x02, 0x87,0x16, 0xFF,0xF0, 0x00,0x00,
850x00,0x01, 0xC0,0x2E, 0x72,0x00, 0xEC,0x00, 0x04,0xB1, 0x06,0x30, 0x00,0x02, 0xF3,0x02,
860x00,0x03, 0xF3,0x05, 0x76,0xF4, 0x87,0x16, 0xFF,0xF0, 0x86,0x9E, 0x00,0x04, 0xC7,0x38,
870x70,0x00, 0xC7,0x38, 0x48,0x00, 0xC6,0xB4, 0x70,0x00, 0x87,0x16, 0xFF,0xF4, 0x06,0xB4,
880x00,0x20, 0x97,0x02, 0xFF,0x6C, 0x94,0x82, 0xFF,0x50, 0x96,0x82, 0xFF,0x58, 0xF3,0x06,
890x29,0xE0, 0xF3,0x05, 0x2C,0x10, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
900x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
910x00,0x08, 0xF7,0x04, 0x7A,0x18, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
920x05,0xCD, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x7A,0x10, 0xF6,0x84, 0x3B,0x64, 0x00,0x00,
930x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
940x05,0xCD, 0xF5,0x86, 0x4A,0x98, 0xF6,0x04, 0x79,0xD8, 0xF6,0x84, 0x4F,0x54, 0x00,0x00,
950x00,0x01, 0x96,0xB2, 0x00,0x1C, 0x06,0xB4, 0x00,0x01, 0x77,0x35, 0x00,0x01, 0xC7,0x38,
960x68,0x00, 0x77,0x39, 0x00,0x02, 0x07,0x38, 0x00,0x0C, 0xA5,0x3A, 0x58,0x02, 0x00,0x00,
970x00,0x01, 0x95,0x32, 0x00,0x10, 0xC7,0x38, 0x58,0x00, 0x87,0x3A, 0x00,0x04, 0xF0,0x05,
980x7A,0x18, 0x97,0x32, 0x00,0x14, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x01,0xF4, 0x97,0x93,
990xFF,0xFC, 0xE0,0x00, 0x05,0xFC, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86,
1000x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02,
1010x00,0x12, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x05,0xF4, 0xB5,0x3A, 0x68,0x02, 0xF0,0x05,
1020x2D,0x38, 0xF5,0x06, 0x2A,0x6C, 0xF5,0x05, 0x2C,0x10, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
1030xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
1040xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96, 0x00,0x00, 0xF7,0x04, 0x75,0xEC, 0x85,0x2E,
1050x00,0x20, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x06,0xCC, 0xF5,0x05, 0x7A,0x08, 0xF7,0x04,
1060x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x06,0xCC, 0x00,0x00,
1070x00,0x01, 0xF7,0x04, 0x7A,0x08, 0xF6,0x84, 0x3B,0x64, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
1080x6A,0x00, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
1090x06,0xCC, 0x00,0x00, 0x00,0x01, 0x87,0x2E, 0x00,0x1C, 0xF6,0x84, 0x4F,0x54, 0xF7,0x05,
1100x7A,0x00, 0xC7,0x34, 0x72,0x00, 0x20,0x3A, 0x00,0x00, 0xEE,0x00, 0x06,0x8D, 0xF5,0x02,
1110x00,0x01, 0xE0,0x00, 0x06,0x90, 0xF5,0x05, 0x79,0xF8, 0xF0,0x85, 0x79,0xF8, 0xF6,0x84,
1120x7A,0x00, 0xC7,0x38, 0x70,0x00, 0xC6,0xB4, 0x70,0x00, 0xF7,0x04, 0x79,0xF8, 0xF6,0x85,
1130x79,0xE8, 0xC7,0x38, 0x70,0x00, 0xC6,0x34, 0x70,0x00, 0xF7,0x04, 0x4A,0x9C, 0x00,0x00,
1140x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x00, 0x06,0xCC, 0xF6,0x05, 0x79,0xF0, 0x20,0x36,
1150x00,0x00, 0xEC,0x00, 0x06,0xF8, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86,
1160x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02,
1170x00,0x13, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x07,0x38, 0xB5,0x3A, 0x68,0x02, 0xE0,0x00,
1180x07,0x38, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x4A,0x9C, 0x00,0x00, 0x00,0x01, 0xC0,0x32,
1190x72,0x00, 0xEE,0x00, 0x07,0x19, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x4A,0x9C, 0xE0,0x00,
1200x07,0x28, 0xF7,0x05, 0x79,0xF0, 0x20,0x32, 0x00,0x00, 0xEC,0x00, 0x07,0x28, 0x00,0x00,
1210x00,0x01, 0xF0,0x85, 0x79,0xF0, 0xF5,0x85, 0x79,0xE0, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
1220x07,0x4C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
1230x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
1240x00,0x08, 0x22,0x10, 0x00,0x38, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
1250x00,0x00, 0xE6,0x00, 0x07,0xA4, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
1260x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x07,0xA4, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
1270x7A,0x08, 0xF6,0x84, 0x3B,0x64, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C,
1280x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x07,0xD5, 0xF4,0x02,
1290x00,0x00, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
1300x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x13, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
1310x07,0xCC, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xE0,0x00, 0x0A,0xA4, 0xF3,0x06,
1320x2B,0x84, 0xF6,0x84, 0x79,0xE8, 0xF6,0x06, 0x4A,0x98, 0x77,0x35, 0x00,0x01, 0xC7,0x38,
1330x68,0x00, 0x77,0x39, 0x00,0x02, 0xF6,0x84, 0x79,0xE0, 0x07,0x38, 0x00,0x0C, 0xA3,0x3A,
1340x60,0x02, 0xC3,0xB4, 0x00,0x00, 0x93,0x36, 0x00,0x10, 0xC7,0x38, 0x60,0x00, 0x87,0x3A,
1350x00,0x04, 0x23,0x14, 0x00,0x20, 0x93,0x16, 0xFF,0xC4, 0x97,0x36, 0x00,0x14, 0x84,0x9E,
1360x00,0x10, 0xF6,0x84, 0x4A,0xA0, 0x94,0x96, 0xFF,0xE0, 0x96,0x96, 0xFF,0xD4, 0x85,0x1E,
1370x00,0x14, 0xF7,0x04, 0x4A,0x9C, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x00,
1380x08,0xEC, 0x95,0x16, 0xFF,0xE4, 0x77,0x35, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39,
1390x00,0x02, 0xC6,0xB8, 0x60,0x00, 0x06,0xB4, 0x00,0x0C, 0xC5,0x84, 0x00,0x00, 0x87,0x36,
1400x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00, 0x08,0x7C, 0xC6,0x20,
1410x00,0x00, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x52,0x00, 0xE6,0x00,
1420x08,0x80, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
1430x08,0x8D, 0x00,0x00, 0x00,0x01, 0xF5,0x82, 0x00,0x00, 0x86,0x36, 0x00,0x00, 0x87,0x16,
1440xFF,0xE0, 0x00,0x00, 0x00,0x01, 0xC0,0x32, 0x72,0x00, 0xE2,0x00, 0x08,0xC8, 0xF5,0x02,
1450x00,0x00, 0xC0,0x32, 0x72,0x00, 0xE6,0x00, 0x08,0xD0, 0x20,0x2A, 0x00,0x00, 0x86,0xB6,
1460x00,0x04, 0x87,0x16, 0xFF,0xE4, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
1470x08,0xD1, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00,
1480x08,0xE1, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00,
1490x08,0xF0, 0x20,0x22, 0x00,0x00, 0xF4,0x02, 0x00,0x01, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
1500x09,0x25, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9,
1510x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4,
1520x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xD8, 0xE0,0x00, 0x09,0x98, 0x96,0x96,
1530xFF,0xDC, 0x27,0x14, 0x00,0x2C, 0x97,0x13, 0xFF,0xFC, 0x83,0x16, 0xFF,0xC4, 0x00,0x00,
1540x00,0x01, 0x93,0x13, 0xFF,0xFC, 0xF3,0x06, 0x4A,0x98, 0x93,0x13, 0xFF,0xFC, 0x93,0x96,
1550xFF,0xCC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
1560xFF,0xCC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x09,0x95, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
1570xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
1580x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
1590xFF,0xD8, 0x96,0x96, 0xFF,0xDC, 0xF7,0x05, 0x4A,0xA0, 0xE0,0x00, 0x09,0x9C, 0x20,0x32,
1600x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x09,0xAC, 0xF4,0x82,
1610x00,0x01, 0xE0,0x00, 0x0A,0x04, 0xF4,0x82, 0x00,0x00, 0x86,0x96, 0xFF,0xD8, 0x00,0x00,
1620x00,0x01, 0x77,0x35, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF6,0x86,
1630x42,0xC8, 0xA6,0x3A, 0x68,0x02, 0xC7,0x38, 0x68,0x00, 0x75,0x39, 0x00,0x1E, 0x75,0x28,
1640xFF,0xE5, 0x05,0xB8, 0x00,0x02, 0x86,0xAE, 0x00,0x00, 0x07,0x38, 0x00,0x04, 0x97,0x16,
1650xFF,0xEC, 0xC6,0x30, 0x57,0xC0, 0x76,0x30, 0xFF,0xF0, 0x96,0x16, 0xFF,0xF4, 0x75,0xAD,
1660x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC6,0xB4, 0x5F,0xC0, 0x76,0xB4, 0xFF,0xF0, 0x96,0x96,
1670xFF,0xF0, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0x0A,0xA5, 0xF3,0x06, 0x2A,0xF8, 0x86,0x96,
1680xFF,0xF0, 0xF5,0x82, 0x00,0x00, 0xC7,0x34, 0x68,0x00, 0xC4,0x9C, 0x72,0x00, 0xC0,0x2E,
1690x6A,0x00, 0xEC,0x00, 0x0A,0x70, 0xC5,0x24, 0x00,0x00, 0xC6,0x2C, 0x00,0x00, 0x87,0x16,
1700xFF,0xEC, 0x00,0x00, 0x00,0x01, 0xA6,0xB2, 0x70,0x02, 0x05,0xAC, 0x00,0x01, 0xC7,0x30,
1710x70,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB4,
1720xFF,0xF0, 0xF6,0xAB, 0x28,0x00, 0x05,0x28, 0x00,0x02, 0x87,0x16, 0xFF,0xF0, 0x00,0x00,
1730x00,0x01, 0xC0,0x2E, 0x72,0x00, 0xEC,0x00, 0x0A,0x31, 0x06,0x30, 0x00,0x02, 0xF3,0x02,
1740x00,0x02, 0xF3,0x05, 0x76,0xF4, 0x87,0x16, 0xFF,0xF0, 0x86,0x9E, 0x00,0x04, 0xC7,0x38,
1750x70,0x00, 0xC7,0x38, 0x48,0x00, 0xC6,0xB4, 0x70,0x00, 0x87,0x16, 0xFF,0xF4, 0x06,0xB4,
1760x00,0x20, 0x97,0x02, 0xFF,0x6C, 0x94,0x82, 0xFF,0x50, 0x96,0x82, 0xFF,0x58, 0xF3,0x06,
1770x2A,0xF8, 0xF3,0x05, 0x2C,0x1C, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
1780x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
1790x00,0x08, 0xF6,0x84, 0x79,0xE8, 0xF7,0x04, 0x79,0xF8, 0x00,0x00, 0x00,0x01, 0xC6,0xB4,
1800x70,0x00, 0xF7,0x04, 0x7A,0x20, 0xF6,0x85, 0x79,0xE8, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
1810x7A,0x20, 0xF7,0x04, 0x79,0xF0, 0xF6,0x04, 0x7A,0x20, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
1820x0B,0x2C, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
1830x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x82, 0x00,0x13, 0x20,0x32,
1840x00,0x44, 0xE6,0x00, 0x0B,0x20, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x86,
1850x2B,0x84, 0xE0,0x00, 0x0B,0x38, 0xF5,0x85, 0x2C,0x1C, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
1860x07,0x4C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
1870x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
1880x00,0x08, 0xF7,0x06, 0x2C,0x10, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x29,0xE0, 0x97,0x13,
1890xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
1900x2C,0x10, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x2A,0x6C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
1910x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x2C,0x1C, 0x97,0x13,
1920xFF,0xFC, 0xF7,0x06, 0x2A,0xF8, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
1930x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x2C,0x1C, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
1940x2B,0x84, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
1950xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
1960x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF0,0x05,
1970x2D,0x38, 0xF0,0x05, 0x2D,0x3C, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
1980x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
1990x00,0x08, 0x22,0x10, 0x00,0x18, 0xFF,0x85, 0x2E,0xDC, 0xF7,0x06, 0x0C,0x3E, 0xC7,0x7C,
2000x74,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x14,0x29, 0x97,0x16, 0xFF,0xF4, 0x47,0x38,
2010xFF,0xFB, 0xF6,0x84, 0x6F,0x50, 0xCF,0xB8, 0x00,0x00, 0x83,0x96, 0xFF,0xF4, 0xF7,0x02,
2020x00,0x3F, 0xC3,0x9C, 0x6D,0x80, 0xC7,0x1C, 0x74,0x00, 0x20,0x3A, 0x00,0x3F, 0xE2,0x00,
2030x12,0x60, 0x93,0x96, 0xFF,0xF4, 0x77,0x39, 0x00,0x02, 0xF6,0x82, 0x0C,0x5C, 0xA6,0xB6,
2040x70,0x02, 0x00,0x00, 0x00,0x01, 0xC1,0x34, 0x00,0x00, 0x00,0x00, 0x12,0x60, 0x00,0x00,
2050x12,0x60, 0x00,0x00, 0x0D,0x68, 0x00,0x00, 0x0D,0x68, 0x00,0x00, 0x0D,0x5C, 0x00,0x00,
2060x0D,0x5C, 0x00,0x00, 0x0D,0x68, 0x00,0x00, 0x0D,0x68, 0x00,0x00, 0x12,0x50, 0x00,0x00,
2070x12,0x50, 0x00,0x00, 0x12,0x3C, 0x00,0x00, 0x12,0x3C, 0x00,0x00, 0x0D,0xE0, 0x00,0x00,
2080x0D,0xE0, 0x00,0x00, 0x12,0x3C, 0x00,0x00, 0x12,0x3C, 0x00,0x00, 0x0D,0xE8, 0x00,0x00,
2090x0D,0xF4, 0x00,0x00, 0x0E,0x00, 0x00,0x00, 0x0E,0x20, 0x00,0x00, 0x0E,0x40, 0x00,0x00,
2100x0E,0x60, 0x00,0x00, 0x0E,0x80, 0x00,0x00, 0x0E,0xA0, 0x00,0x00, 0x0E,0xC0, 0x00,0x00,
2110x0E,0xC8, 0x00,0x00, 0x0E,0xD0, 0x00,0x00, 0x12,0x28, 0x00,0x00, 0x0E,0xD8, 0x00,0x00,
2120x0E,0xF4, 0x00,0x00, 0x0F,0x10, 0x00,0x00, 0x12,0x28, 0x00,0x00, 0x0F,0x18, 0x00,0x00,
2130x0F,0x18, 0x00,0x00, 0x0F,0x24, 0x00,0x00, 0x0F,0x24, 0x00,0x00, 0x0F,0x44, 0x00,0x00,
2140x0F,0x44, 0x00,0x00, 0x0F,0x64, 0x00,0x00, 0x0F,0x64, 0x00,0x00, 0x0F,0x84, 0x00,0x00,
2150x0F,0x84, 0x00,0x00, 0x0F,0x8C, 0x00,0x00, 0x0F,0x8C, 0x00,0x00, 0x0F,0x94, 0x00,0x00,
2160x0F,0x94, 0x00,0x00, 0x0F,0xB0, 0x00,0x00, 0x0F,0xB0, 0x00,0x00, 0x0F,0xB8, 0x00,0x00,
2170x0F,0xD8, 0x00,0x00, 0x0F,0xF8, 0x00,0x00, 0x10,0x2C, 0x00,0x00, 0x10,0x60, 0x00,0x00,
2180x10,0x94, 0x00,0x00, 0x10,0xC8, 0x00,0x00, 0x10,0xFC, 0x00,0x00, 0x11,0x30, 0x00,0x00,
2190x11,0x4C, 0x00,0x00, 0x11,0x68, 0x00,0x00, 0x12,0x14, 0x00,0x00, 0x11,0x84, 0x00,0x00,
2200x11,0xB4, 0x00,0x00, 0x11,0xE4, 0x00,0x00, 0x12,0x14, 0xF3,0x82, 0x00,0x06, 0xE0,0x00,
2210x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF6,0x02, 0x00,0x05, 0x20,0x32, 0x00,0x14, 0xE6,0x00,
2220x0D,0xB5, 0x27,0x00, 0x00,0x10, 0x20,0x3A, 0x00,0x01, 0xE2,0x00, 0x0D,0xB5, 0xF7,0x06,
2230x2D,0xCC, 0xF6,0x84, 0x2E,0xCC, 0x00,0x00, 0x00,0x01, 0x75,0xB5, 0x00,0x02, 0xB6,0x2E,
2240x70,0x02, 0x06,0xB4, 0x00,0x01, 0xF6,0x85, 0x2E,0xCC, 0x86,0x02, 0xFF,0x34, 0xF7,0x06,
2250x2E,0x4C, 0x20,0x36, 0x00,0x1F, 0xE2,0x00, 0x0D,0xB5, 0xB6,0x2E, 0x70,0x02, 0xF0,0x05,
2260x2E,0xCC, 0xF7,0x04, 0x2D,0x58, 0x00,0x00, 0x00,0x01, 0x87,0x3A, 0x00,0x00, 0x00,0x00,
2270x00,0x01, 0x87,0x3A, 0x00,0x18, 0x00,0x00, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xC1,0x38,
2280x00,0x00, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x60, 0x00,0x00, 0x00,0x01, 0xE0,0x00,
2290x12,0x40, 0xF3,0x82, 0x00,0x06, 0xF3,0x82, 0x00,0x0B, 0xE0,0x00, 0x12,0x54, 0x93,0x93,
2300xFF,0xFC, 0xF3,0x82, 0x00,0x07, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2310x00,0x0B, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2320xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2330x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2340xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2350x00,0x0B, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2360xFF,0xFC, 0xF3,0x82, 0x00,0x06, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2370x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2380xFF,0xFC, 0xF3,0x82, 0x00,0x06, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2390x00,0x0B, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2400xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2410x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2420xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xE0,0x00,
2430x12,0x40, 0xF3,0x82, 0x00,0x0B, 0xE0,0x00, 0x12,0x40, 0xF3,0x82, 0x00,0x07, 0xE0,0x00,
2440x12,0x2C, 0xF3,0x82, 0x00,0x0B, 0xF3,0x82, 0x00,0x0B, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2450x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82,
2460x00,0x06, 0xF3,0x82, 0x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2470x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82, 0x00,0x06, 0xE0,0x00,
2480x12,0x2C, 0xF3,0x82, 0x00,0x0B, 0xF3,0x82, 0x00,0x14, 0xE0,0x00, 0x12,0x54, 0x93,0x93,
2490xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2500x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93,
2510xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2520x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x06, 0xE0,0x00, 0x12,0x54, 0x93,0x93,
2530xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2540x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93,
2550xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82, 0x00,0x14, 0xE0,0x00, 0x12,0x2C, 0xF3,0x82,
2560x00,0x14, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2570x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82, 0x00,0x06, 0xE0,0x00,
2580x12,0x2C, 0xF3,0x82, 0x00,0x14, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2590x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x0B, 0xE0,0x00,
2600x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2610x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x07, 0xE0,0x00,
2620x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2630x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x0B, 0x93,0x93,
2640xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82,
2650x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93,
2660xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82,
2670x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2680xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2690x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2700xFF,0xFC, 0xF3,0x82, 0x00,0x0B, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2710x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x06, 0xE0,0x00, 0x12,0x54, 0x93,0x93,
2720xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2730x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2740x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x06, 0xE0,0x00,
2750x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2760x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x0B, 0x93,0x93,
2770xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82,
2780x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x14, 0x93,0x93,
2790xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82,
2800x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2810xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0xE0,0x00, 0x12,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
2820x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
2830xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82, 0x00,0x0B, 0xF3,0x82, 0x00,0x14, 0x93,0x93,
2840xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
2850x12,0x40, 0xF3,0x82, 0x00,0x07, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2860x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x2C, 0xF3,0x82,
2870x00,0x0B, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2880x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x0B, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2890x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82,
2900x00,0x06, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2910x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2920x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x40, 0xF3,0x82,
2930x00,0x06, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2940x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x12,0x2C, 0xF3,0x82, 0x00,0x0B, 0xF7,0x04,
2950x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38, 0x00,0x08, 0xE0,0x00, 0x13,0xCC, 0xF7,0x05,
2960x35,0x44, 0xF3,0x82, 0x00,0x14, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
2970x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x07, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
2980x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x05, 0x93,0x93,
2990xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0x90,0x13,
3000xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
3010xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x77,0x9C, 0x00,0x14, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
3020x12,0x9D, 0xF7,0x06, 0x04,0x00, 0xF7,0x04, 0x6F,0x5C, 0x00,0x00, 0x00,0x01, 0x07,0x38,
3030x00,0x01, 0xF7,0x05, 0x6F,0x5C, 0xF7,0x04, 0x6F,0x5C, 0xE0,0x00, 0x00,0x00, 0x00,0x00,
3040x00,0x01, 0x83,0x96, 0xFF,0xF4, 0xF7,0x06, 0x04,0x00, 0xC0,0x1E, 0x74,0x00, 0xE6,0x00,
3050x14,0x29, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x2E,0xD0, 0xF6,0x84, 0x35,0x24, 0x07,0x38,
3060x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x14,0x05, 0xF7,0x05, 0x2E,0xD0, 0xF7,0x04,
3070xE0,0x14, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x14,0x05, 0xF6,0x82,
3080x00,0x00, 0xF6,0x85, 0xE0,0x14, 0xF7,0x04, 0x2E,0xD8, 0xC5,0x34, 0x00,0x00, 0x07,0x38,
3090x00,0x01, 0xF7,0x05, 0x2E,0xD8, 0x20,0x2A, 0x00,0x02, 0xEE,0x00, 0x13,0xCC, 0xF6,0x82,
3100x00,0x00, 0xF6,0x84, 0x35,0x28, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00,
3110x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00, 0x13,0xA0, 0x05,0xB4, 0x00,0x08, 0x95,0x93,
3120xFF,0xFC, 0x95,0x16, 0xFF,0xE8, 0x95,0x96, 0xFF,0xE4, 0x96,0x96, 0xFF,0xE0, 0x07,0x88,
3130x00,0x08, 0xE0,0x00, 0x16,0x64, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xE8, 0x85,0x96,
3140xFF,0xE4, 0x86,0x96, 0xFF,0xE0, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x13,0x90, 0xF7,0x02,
3150x00,0x00, 0x86,0x36, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x0F, 0xE2,0x00,
3160x13,0x75, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x07,0x38,
3170x00,0x01, 0x97,0x36, 0x00,0x14, 0x87,0x36, 0x00,0x14, 0xE0,0x00, 0x13,0x90, 0xF7,0x02,
3180x00,0x00, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x05, 0xC7,0x38,
3190x6A,0x00, 0xC7,0x38, 0x60,0x00, 0x07,0x38, 0x00,0x10, 0xC7,0x2C, 0x70,0x00, 0x20,0x3A,
3200x00,0x00, 0xE6,0x00, 0x12,0x00, 0xF7,0x05, 0x35,0x2C, 0xF6,0x84, 0x35,0x28, 0xF7,0x04,
3210x6F,0x4C, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x13,0xC0, 0x07,0x34,
3220x14,0x94, 0xF3,0x84, 0x6F,0x44, 0xE0,0x00, 0x13,0xC4, 0xF3,0x85, 0x35,0x28, 0xF7,0x05,
3230x35,0x28, 0xE0,0x00, 0x12,0xE8, 0x05,0x28, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00,
3240x14,0x29, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0xF0,0x05, 0x35,0x24, 0x06,0x38,
3250x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x82, 0x00,0x0D, 0x20,0x32,
3260x00,0x44, 0xE6,0x00, 0x14,0x28, 0xB3,0xBA, 0x68,0x02, 0xE0,0x00, 0x14,0x28, 0xF0,0x05,
3270x2D,0x38, 0xF7,0x04, 0xE0,0x10, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
3280x14,0x29, 0xF7,0x02, 0x00,0x00, 0xF7,0x05, 0xE0,0x10, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
3290x02,0x98, 0x97,0x93, 0xFF,0xFC, 0xF4,0x84, 0x2D,0x38, 0xF7,0x04, 0x2D,0x3C, 0x00,0x00,
3300x00,0x01, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00, 0x0C,0x09, 0xF6,0x86, 0x2C,0x28, 0x77,0x39,
3310x00,0x02, 0xA5,0x3A, 0x68,0x02, 0x00,0x00, 0x00,0x01, 0x20,0x2A, 0x00,0x14, 0xE6,0x00,
3320x14,0x91, 0x27,0x28, 0x00,0x15, 0x20,0x3A, 0x00,0x01, 0xE2,0x00, 0x14,0x91, 0xF7,0x06,
3330x2D,0xCC, 0xF6,0x84, 0x2E,0xCC, 0x86,0x02, 0xFF,0x34, 0x75,0xB5, 0x00,0x02, 0xB5,0x2E,
3340x70,0x02, 0x06,0xB4, 0x00,0x01, 0xF6,0x85, 0x2E,0xCC, 0xF7,0x06, 0x2E,0x4C, 0x20,0x36,
3350x00,0x1F, 0xE2,0x00, 0x14,0x91, 0xB6,0x2E, 0x70,0x02, 0xF0,0x05, 0x2E,0xCC, 0xF7,0x06,
3360x2D,0x44, 0x76,0xA9, 0x00,0x02, 0xA7,0x36, 0x70,0x02, 0x00,0x00, 0x00,0x01, 0x87,0x3A,
3370x00,0x00, 0x00,0x00, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x87,0x36, 0x00,0x04, 0x94,0x96,
3380xFF,0xEC, 0x07,0x88, 0x00,0x08, 0xC1,0x38, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04,
3390x2D,0x3C, 0x84,0x96, 0xFF,0xEC, 0x07,0x38, 0x00,0x01, 0x20,0x3A, 0x00,0x44, 0xE6,0x00,
3400x14,0x2C, 0xF7,0x05, 0x2D,0x3C, 0xE0,0x00, 0x14,0x2C, 0xF0,0x05, 0x2D,0x3C, 0x87,0x96,
3410xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
3420x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x84,0x16, 0x00,0x00, 0xF7,0x02,
3430x00,0x00, 0x85,0x96, 0x00,0x04, 0x20,0x3A, 0x00,0x21, 0xEE,0x00, 0x15,0x34, 0x95,0xA2,
3440x00,0x00, 0xF6,0x06, 0x23,0x38, 0x07,0x20, 0x00,0x84, 0xC6,0xA0, 0x00,0x00, 0x96,0x3A,
3450x00,0x04, 0x27,0x38, 0x00,0x04, 0xC0,0x3A, 0x6A,0x00, 0xEC,0x00, 0x15,0x20, 0x00,0x00,
3460x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C,
3470x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x96,
3480x00,0x00, 0x87,0x16, 0x00,0x04, 0xF6,0x04, 0x2D,0x40, 0x97,0x36, 0x00,0x00, 0x97,0x36,
3490x00,0x04, 0x07,0x30, 0x00,0x01, 0xF7,0x05, 0x2D,0x40, 0x96,0x36, 0x00,0x08, 0x87,0x96,
3500xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
3510x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x16, 0x00,0x00, 0x00,0x00,
3520x00,0x01, 0x20,0x2A, 0x00,0x14, 0xE6,0x00, 0x15,0xD9, 0x27,0x28, 0x00,0x15, 0x20,0x3A,
3530x00,0x01, 0xE2,0x00, 0x15,0xD9, 0xF7,0x06, 0x2D,0xCC, 0xF6,0x84, 0x2E,0xCC, 0x86,0x02,
3540xFF,0x34, 0x75,0xB5, 0x00,0x02, 0xB5,0x2E, 0x70,0x02, 0x06,0xB4, 0x00,0x01, 0xF6,0x85,
3550x2E,0xCC, 0xF7,0x06, 0x2E,0x4C, 0x20,0x36, 0x00,0x1F, 0xE2,0x00, 0x15,0xD9, 0xB6,0x2E,
3560x70,0x02, 0xF0,0x05, 0x2E,0xCC, 0xF6,0x86, 0x2D,0x44, 0x77,0x29, 0x00,0x02, 0xA6,0xBA,
3570x68,0x02, 0x00,0x00, 0x00,0x01, 0x86,0xB6, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
3580x68,0x00, 0x87,0x3A, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xC1,0x38,
3590x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
3600x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
3610x00,0x08, 0x87,0x16, 0x00,0x00, 0x86,0x96, 0x00,0x04, 0xF6,0x06, 0x2D,0x44, 0x76,0xB5,
3620x00,0x02, 0x85,0xBA, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xB5,0xB6, 0x60,0x02, 0xC6,0xB4,
3630x70,0x00, 0x85,0x96, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0x95,0xB6, 0x00,0x04, 0x87,0x96,
3640xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
3650x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x16, 0x00,0x00, 0x00,0x00,
3660x00,0x01, 0x87,0x32, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x0F, 0x86,0xB2,
3670x00,0x00, 0xC5,0x38, 0x00,0x00, 0xEE,0x00, 0x16,0xB4, 0xC5,0xB4, 0x00,0x00, 0x20,0x36,
3680x00,0x0F, 0xEE,0x00, 0x16,0xB4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEC,0x00,
3690x16,0xB5, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xEC,0x00, 0x16,0xD0, 0x00,0x00,
3700x00,0x01, 0x87,0x32, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x32,
3710x00,0x0C, 0x87,0x32, 0x00,0x0C, 0xE0,0x00, 0x16,0xD8, 0xF4,0x02, 0x00,0x00, 0xC0,0x2A,
3720x5A,0x00, 0x44,0x0C, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
3730x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93,
3740xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x2E,0xE0, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
3750x32,0xD4, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
3760xFF,0xFC, 0xF7,0x02, 0x18,0x2C, 0x97,0x13, 0xFF,0xFC, 0xF7,0x82, 0x00,0x09, 0x97,0x93,
3770xFF,0xFC, 0xF7,0x06, 0x2E,0xE0, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
3780x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x34,0x58, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02,
3790x00,0x0C, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x2F,0x6C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
3800x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x3F,0x94, 0x97,0x13,
3810xFF,0xFC, 0xF7,0x82, 0x00,0x0B, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x2F,0xF8, 0x97,0x13,
3820xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02,
3830x3B,0x84, 0x97,0x13, 0xFF,0xFC, 0xF7,0x82, 0x00,0x0B, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
3840x32,0x28, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
3850xFF,0xFC, 0xF7,0x02, 0x26,0xE4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x13, 0x97,0x13,
3860xFF,0xFC, 0xF7,0x06, 0x30,0x84, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
3870x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x26,0xA0, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02,
3880x00,0x11, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x31,0x10, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
3890x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x18,0x2C, 0x97,0x13,
3900xFF,0xFC, 0xF7,0x82, 0x00,0x09, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x31,0x9C, 0x97,0x13,
3910xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF0,0x05,
3920x7A,0x78, 0xF0,0x05, 0x32,0xE8, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
3930x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
3940x00,0x08, 0x22,0x10, 0x00,0x50, 0xF7,0x04, 0x71,0xC8, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
3950x00,0x00, 0xE6,0x00, 0x18,0x55, 0xF6,0x86, 0x71,0xC4, 0xE0,0x00, 0x18,0x6C, 0xF6,0x02,
3960x00,0x00, 0xF7,0x04, 0x71,0xD4, 0x00,0x00, 0x00,0x01, 0x77,0x39, 0x00,0x02, 0xC7,0x38,
3970x68,0x00, 0x86,0x3A, 0x00,0x18, 0x00,0x00, 0x00,0x01, 0xF6,0x05, 0x32,0xC4, 0x86,0xB2,
3980x00,0x08, 0x07,0x01, 0x80,0x00, 0xC5,0xB4, 0x74,0x00, 0xF5,0x85, 0x32,0xD0, 0x87,0x32,
3990x00,0x18, 0xF6,0x86, 0x6F,0x44, 0x77,0x39, 0x00,0x02, 0xA7,0x3A, 0x68,0x02, 0x20,0x2E,
4000x00,0x00, 0xF7,0x05, 0x32,0xC0, 0x07,0x38, 0x09,0xD8, 0x86,0xB2, 0x00,0x04, 0xF7,0x05,
4010x32,0xCC, 0xE6,0x00, 0x19,0x41, 0xF6,0x85, 0x32,0xC8, 0xF7,0x04, 0x71,0x98, 0xF6,0x84,
4020x7A,0x78, 0x27,0x38, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x19,0x10, 0xF7,0x05,
4030x71,0x98, 0xF7,0x04, 0x76,0xFC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
4040x18,0xE8, 0xF3,0x02, 0x00,0x11, 0xF3,0x06, 0x32,0xD4, 0xF3,0x05, 0x76,0xFC, 0xE0,0x00,
4050x18,0xF8, 0xF7,0x02, 0x00,0x01, 0xF3,0x05, 0x76,0xF8, 0xF3,0x06, 0x32,0xD4, 0xF3,0x05,
4060x77,0x00, 0xF7,0x02, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x19,0x14, 0xF3,0x02,
4070x00,0x01, 0xF3,0x06, 0x31,0x10, 0xE0,0x00, 0x26,0x8C, 0xF3,0x05, 0x32,0xD4, 0xF3,0x02,
4080x00,0x01, 0xF3,0x05, 0x7A,0x78, 0xF3,0x06, 0x30,0x84, 0xF3,0x05, 0x32,0xD4, 0xF3,0x04,
4090x32,0xC4, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
4100x06,0x10, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x26,0x8C, 0x00,0x00, 0x00,0x01, 0xF3,0x02,
4110x00,0x00, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x1C,0xB9, 0x93,0x16, 0xFF,0xE4, 0x87,0x32,
4120x00,0x08, 0x86,0x96, 0xFF,0xE4, 0xC3,0x04, 0x00,0x00, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00,
4130x19,0x84, 0x20,0x36, 0x00,0x00, 0x87,0x32, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
4140x32,0x00, 0xE6,0x00, 0x19,0x84, 0x20,0x36, 0x00,0x00, 0xF6,0x82, 0x00,0x01, 0x20,0x36,
4150x00,0x00, 0xE6,0x00, 0x1C,0xB8, 0xF3,0x02, 0x00,0x00, 0xF7,0x04, 0x32,0xC0, 0x93,0x16,
4160xFF,0xAC, 0xF5,0x84, 0x32,0xC4, 0x86,0x3A, 0x14,0x28, 0x03,0xB8, 0x14,0x20, 0x04,0x2C,
4170x00,0x08, 0x86,0xBA, 0x14,0x24, 0x00,0x00, 0x00,0x01, 0xC0,0x32, 0x6A,0x00, 0xEC,0x00,
4180x1A,0x70, 0x96,0x16, 0xFF,0xEC, 0x77,0x31, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0x77,0x39,
4190x00,0x02, 0xC6,0x38, 0x38,0x00, 0x06,0x30, 0x00,0x0C, 0x86,0xB2, 0x00,0x00, 0x87,0x2E,
4200x00,0x08, 0x85,0x16, 0xFF,0xAC, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x1A,0x00, 0xC4,0x84,
4210x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x2E, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
4220x72,0x00, 0xE6,0x00, 0x1A,0x04, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A,
4230x00,0x00, 0xE6,0x00, 0x1A,0x11, 0x00,0x00, 0x00,0x01, 0xF4,0x82, 0x00,0x00, 0x86,0xB2,
4240x00,0x00, 0x87,0x22, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
4250x1A,0x4C, 0xF5,0x82, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x1A,0x54, 0x20,0x2E,
4260x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x22, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
4270x72,0x00, 0xE2,0x00, 0x1A,0x55, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
4280x00,0x00, 0xE6,0x00, 0x1A,0x65, 0x20,0x26, 0x00,0x00, 0xF4,0x82, 0x00,0x01, 0x20,0x26,
4290x00,0x00, 0xE6,0x00, 0x1A,0x70, 0xF3,0x02, 0x00,0x01, 0x93,0x16, 0xFF,0xAC, 0x83,0x16,
4300xFF,0xAC, 0x00,0x00, 0x00,0x01, 0x20,0x1A, 0x00,0x00, 0xE6,0x00, 0x1A,0xB1, 0xF6,0x02,
4310x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4,
4320x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x38,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6,
4330x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xE0,0x00, 0x1B,0x18, 0x96,0x96, 0xFF,0xF4, 0x27,0x14,
4340x00,0x14, 0x97,0x13, 0xFF,0xFC, 0x94,0x13, 0xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0x93,0x96,
4350xFF,0xBC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
4360xFF,0xBC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x1B,0x15, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
4370xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
4380x00,0x02, 0xC6,0xB4, 0x38,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
4390xFF,0xF0, 0x96,0x96, 0xFF,0xF4, 0x97,0x1E, 0x00,0x08, 0xE0,0x00, 0x1B,0x1C, 0x20,0x32,
4400x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x1C,0xB8, 0xF3,0x02,
4410x00,0x00, 0xF6,0x04, 0x32,0xC0, 0x93,0x16, 0xFF,0xAC, 0x86,0xB2, 0x14,0x28, 0x03,0xB0,
4420x14,0x20, 0x04,0x30, 0x14,0x8C, 0x87,0x32, 0x14,0x24, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
4430x72,0x00, 0xEC,0x00, 0x1C,0x04, 0x96,0x96, 0xFF,0xEC, 0x77,0x35, 0x00,0x01, 0xC7,0x38,
4440x68,0x00, 0x77,0x39, 0x00,0x02, 0xC5,0xB8, 0x38,0x00, 0x05,0xAC, 0x00,0x0C, 0x86,0xAE,
4450x00,0x00, 0x87,0x32, 0x14,0x8C, 0x85,0x16, 0xFF,0xAC, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
4460x1B,0x94, 0xC4,0x84, 0x00,0x00, 0x86,0xAE, 0x00,0x04, 0x87,0x32, 0x14,0x90, 0x00,0x00,
4470x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x1B,0x98, 0x20,0x2A, 0x00,0x00, 0xF5,0x02,
4480x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0x1B,0xA5, 0x00,0x00, 0x00,0x01, 0xF4,0x82,
4490x00,0x00, 0x86,0xAE, 0x00,0x00, 0x87,0x22, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
4500x72,0x00, 0xE2,0x00, 0x1B,0xE0, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
4510x1B,0xE8, 0x20,0x32, 0x00,0x00, 0x86,0xAE, 0x00,0x04, 0x87,0x22, 0x00,0x04, 0x00,0x00,
4520x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x1B,0xE9, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
4530x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x1B,0xF9, 0x20,0x26, 0x00,0x00, 0xF4,0x82,
4540x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0x1C,0x04, 0xF3,0x02, 0x00,0x01, 0x93,0x16,
4550xFF,0xAC, 0x83,0x16, 0xFF,0xAC, 0x00,0x00, 0x00,0x01, 0x20,0x1A, 0x00,0x00, 0xE6,0x00,
4560x1C,0x45, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9,
4570x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x38,0x00, 0x06,0xB4,
4580x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xE0,0x00, 0x1C,0xAC, 0x96,0x96,
4590xFF,0xF4, 0x27,0x14, 0x00,0x14, 0x97,0x13, 0xFF,0xFC, 0x94,0x13, 0xFF,0xFC, 0x93,0x93,
4600xFF,0xFC, 0x93,0x96, 0xFF,0xBC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93,
4610xFF,0xFC, 0x83,0x96, 0xFF,0xBC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x1C,0xA9, 0xF6,0x02,
4620x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4,
4630x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x38,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6,
4640x00,0x00, 0x97,0x16, 0xFF,0xF0, 0x96,0x96, 0xFF,0xF4, 0x97,0x1E, 0x00,0x08, 0xE0,0x00,
4650x1C,0xB0, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
4660x1E,0x15, 0xF3,0x02, 0x00,0x01, 0xF6,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x85,0xB6,
4670x0E,0xF4, 0x86,0x36, 0x0E,0xF8, 0x20,0x2E, 0x00,0x10, 0xE2,0x00, 0x1C,0xDC, 0x20,0x32,
4680x00,0x10, 0xE2,0x00, 0x1C,0xF9, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x0F,0x00, 0x00,0x00,
4690x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x0F,0x00, 0x87,0x36, 0x0F,0x00, 0xE0,0x00,
4700x1D,0x24, 0xF7,0x02, 0x00,0x00, 0x07,0x30, 0x00,0x01, 0xC0,0x3A, 0x5A,0x00, 0xE6,0x00,
4710x1D,0x1D, 0xF6,0x82, 0x00,0x00, 0x20,0x32, 0x00,0x10, 0xE6,0x00, 0x1D,0x20, 0x20,0x2E,
4720x00,0x00, 0xE6,0x00, 0x1D,0x24, 0xC7,0x34, 0x00,0x00, 0xF6,0x82, 0x00,0x01, 0xC7,0x34,
4730x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x1E,0x14, 0xF3,0x02, 0x00,0x01, 0xF3,0x04,
4740x32,0xCC, 0x00,0x00, 0x00,0x01, 0x93,0x16, 0xFF,0xDC, 0x93,0x13, 0xFF,0xFC, 0x07,0x88,
4750x00,0x08, 0xE0,0x00, 0x43,0x68, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
4760x1D,0xFC, 0xF3,0x02, 0x00,0x00, 0x83,0x16, 0xFF,0xDC, 0x00,0x00, 0x00,0x01, 0x86,0x1A,
4770x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x1D,0x91, 0x76,0xB1,
4780x00,0x02, 0x87,0x1A, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x1A,
4790x00,0x0C, 0x87,0x1A, 0x00,0x0C, 0xE0,0x00, 0x1D,0xFC, 0xF3,0x02, 0x00,0x00, 0xF3,0x02,
4800x00,0x4C, 0x93,0x13, 0xFF,0xFC, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x04, 0xC7,0x38,
4810x6A,0x00, 0x83,0x16, 0xFF,0xDC, 0xC7,0x38, 0x60,0x00, 0xC7,0x38, 0x30,0x00, 0x07,0x38,
4820x00,0x10, 0x97,0x13, 0xFF,0xFC, 0xF3,0x06, 0x7A,0x28, 0x93,0x13, 0xFF,0xFC, 0x96,0x16,
4830xFF,0xB4, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16,
4840xFF,0xB4, 0x00,0x00, 0x00,0x01, 0x06,0x30, 0x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00,
4850x1D,0xEC, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x83,0x16, 0xFF,0xDC, 0x00,0x00,
4860x00,0x01, 0x96,0x1A, 0x00,0x00, 0xF3,0x02, 0x00,0x01, 0x93,0x16, 0xFF,0xD4, 0x83,0x16,
4870xFF,0xD4, 0x00,0x00, 0x00,0x01, 0x20,0x1A, 0x00,0x00, 0xE6,0x00, 0x1E,0x18, 0xF3,0x02,
4880x00,0x01, 0x93,0x16, 0xFF,0xE4, 0x83,0x16, 0xFF,0xE4, 0x00,0x00, 0x00,0x01, 0x20,0x1A,
4890x00,0x00, 0xE6,0x00, 0x1F,0x35, 0xF6,0x82, 0x0C,0xAB, 0xF7,0x04, 0x32,0xB4, 0x83,0x16,
4900xFF,0xD4, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x32,0xB4, 0xF7,0x04, 0x32,0xB4, 0x20,0x1A,
4910x00,0x00, 0xE6,0x00, 0x1E,0x70, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x32,0xC0, 0xF3,0x06,
4920xE0,0x30, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00, 0x1E,0x70, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
4930x32,0xE8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x32,0xE8, 0xF7,0x04,
4940x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x1E,0xAD, 0xF6,0x86,
4950x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
4960x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0A, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
4970x1E,0xAC, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x71,0xD4, 0xF6,0x84,
4980x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00, 0x1E,0xC8, 0xF7,0x05,
4990x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05,
5000x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84, 0x32,0xD0, 0x00,0x00,
5010x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x25,0xD9, 0xF7,0x05, 0x71,0xC8, 0xF7,0x04,
5020x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x25,0x79, 0x00,0x00,
5030x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
5040x25,0x78, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
5050x00,0x00, 0xE6,0x00, 0x25,0x78, 0x00,0x00, 0x00,0x01, 0xE0,0x00, 0x25,0xDC, 0xF3,0x06,
5060x31,0x9C, 0xF0,0x05, 0x32,0xE8, 0xF7,0x04, 0x32,0xC0, 0xF6,0x04, 0x6F,0x54, 0x96,0xBA,
5070x00,0x04, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x1F,0x60, 0xF3,0x02, 0x00,0x0C, 0xF3,0x02,
5080x00,0x01, 0xF3,0x05, 0x6F,0x54, 0xE0,0x00, 0x1F,0x68, 0xF7,0x02, 0x00,0x01, 0xF3,0x05,
5090x6F,0x58, 0xF7,0x02, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x1F,0x7C, 0xF3,0x06,
5100x2F,0x6C, 0xE0,0x00, 0x26,0x8C, 0xF3,0x05, 0x32,0xD4, 0xF5,0x84, 0x7A,0x70, 0x24,0x94,
5110x00,0x10, 0x20,0x2E, 0x00,0x01, 0xE6,0x00, 0x22,0x84, 0xF5,0x85, 0x7A,0xA0, 0xF7,0x02,
5120x00,0x01, 0xF6,0x04, 0x32,0xC8, 0xF7,0x05, 0x7A,0x70, 0xF7,0x04, 0x32,0xC4, 0xF6,0x84,
5130x32,0xC0, 0xF6,0x05, 0x7A,0x2C, 0x90,0x02, 0xFF,0x80, 0x90,0x02, 0xFF,0x38, 0xF5,0x84,
5140x7A,0x28, 0x07,0x38, 0x00,0x24, 0x95,0x82, 0xFF,0x3C, 0x97,0x02, 0xFF,0x40, 0x96,0x02,
5150xFF,0x44, 0x87,0x36, 0x14,0x10, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36,
5160x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
5170x14,0x18, 0x87,0x36, 0x14,0x18, 0xF0,0x05, 0x6F,0x50, 0xF7,0x04, 0x32,0xB8, 0x95,0x96,
5180xFF,0xEC, 0xC7,0x38, 0x60,0x00, 0xF7,0x05, 0x32,0xB8, 0xF7,0x04, 0x32,0xBC, 0xF3,0x06,
5190x2F,0xF8, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x32,0xBC, 0xF7,0x04, 0x32,0xBC, 0xF3,0x05,
5200x32,0xD4, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x20,0x34, 0x00,0x00,
5210x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x20,0x25, 0x00,0x00, 0x00,0x01, 0xF7,0x06,
5220x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x26,0x8C, 0x00,0x00,
5230x00,0x01, 0xF7,0x04, 0x32,0xE4, 0xFF,0x82, 0x00,0x10, 0xF5,0x84, 0x6F,0x58, 0x07,0x38,
5240x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x20,0x90, 0xF7,0x05, 0x32,0xE4, 0xF7,0x04,
5250x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
5260x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x20,0x84, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05,
5270x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xE0,0x00, 0x20,0x94, 0xF3,0x05, 0x6F,0x58, 0xF0,0x05,
5280x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x90,0x2E, 0x00,0x04, 0x87,0x2E,
5290x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00, 0x21,0xC0, 0x00,0x00,
5300x00,0x01, 0x87,0x02, 0xFF,0x38, 0x03,0x2C, 0x0E,0xF4, 0x93,0x16, 0xFF,0xCC, 0xF7,0x05,
5310x7A,0x68, 0x93,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xB8, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
5320x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xB8, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
5330x21,0x7C, 0x00,0x00, 0x00,0x01, 0x86,0x2E, 0x0E,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x32,
5340x00,0x10, 0xE2,0x00, 0x21,0x19, 0xF3,0x02, 0x00,0x4C, 0x87,0x2E, 0x0F,0x00, 0x00,0x00,
5350x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x0F,0x00, 0x87,0x2E, 0x0F,0x00, 0xE0,0x00,
5360x21,0x7C, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0xF3,0x06, 0x7A,0x28, 0x93,0x13,
5370xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x04, 0xC7,0x38,
5380x6A,0x00, 0x83,0x16, 0xFF,0xCC, 0xC7,0x38, 0x60,0x00, 0xC7,0x38, 0x30,0x00, 0x07,0x38,
5390x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xB8, 0x96,0x16, 0xFF,0xB4, 0x07,0x88,
5400x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16, 0xFF,0xB4, 0x85,0x96,
5410xFF,0xB8, 0x06,0x30, 0x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00, 0x21,0x78, 0x00,0x00,
5420x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E, 0x0E,0xF8, 0xF7,0x04, 0x32,0xC0, 0xF3,0x06,
5430xE0,0x30, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00, 0x21,0xC0, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
5440xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1E, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
5450x21,0xC1, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00,
5460x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0xF7,0x04,
5470x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x21,0xFD, 0xF6,0x86,
5480x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
5490x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0A, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
5500x21,0xFC, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x71,0xD4, 0xF6,0x84,
5510x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00, 0x22,0x18, 0xF7,0x05,
5520x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05,
5530x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84, 0x32,0xD0, 0x00,0x00,
5540x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x25,0xD9, 0xF7,0x05, 0x71,0xC8, 0xF7,0x04,
5550x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x25,0x79, 0x00,0x00,
5560x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
5570x25,0x78, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
5580x00,0x00, 0xE6,0x00, 0x25,0x78, 0x00,0x00, 0x00,0x01, 0xE0,0x00, 0x25,0xDC, 0xF3,0x06,
5590x31,0x9C, 0xF0,0x05, 0x7A,0x88, 0x90,0x02, 0xFF,0x38, 0xF0,0x05, 0x6F,0x50, 0x90,0x02,
5600xFF,0x80, 0xF7,0x04, 0x32,0xC4, 0xF3,0x06, 0x32,0x28, 0xF3,0x05, 0x32,0xD4, 0xF6,0x04,
5610x32,0xC8, 0xF6,0x84, 0x7A,0x2C, 0xF5,0x02, 0x00,0x00, 0x07,0x38, 0x00,0x24, 0xF7,0x05,
5620x7A,0x98, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x22,0xD5, 0xF6,0x05, 0x7A,0x90, 0xC0,0x2A,
5630x5A,0x00, 0xE6,0x00, 0x26,0x20, 0xC0,0x32, 0x6A,0x00, 0xEE,0x00, 0x26,0x21, 0x00,0x00,
5640x00,0x01, 0xF6,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x14,0x10, 0x00,0x00,
5650x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36, 0x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00,
5660x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x14,0x18, 0x87,0x36, 0x14,0x18, 0xF7,0x04,
5670x32,0xB8, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0xF7,0x05, 0x32,0xB8, 0xF7,0x04,
5680x32,0xBC, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x32,0xBC, 0xF7,0x04,
5690x32,0xBC, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x23,0x45, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
5700x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0x07,0x38, 0x00,0x01, 0xE0,0x00, 0x23,0x48, 0xF7,0x05,
5710x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0xF5,0x84, 0x6F,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x2E,
5720x00,0x21, 0xE2,0x00, 0x23,0x8C, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
5730x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32,
5740x00,0x44, 0xE6,0x00, 0x23,0x80, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02,
5750x00,0x22, 0xE0,0x00, 0x23,0x90, 0xF3,0x05, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84,
5760x32,0xC0, 0x00,0x00, 0x00,0x01, 0x90,0x2E, 0x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00,
5770x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00, 0x24,0xBC, 0x00,0x00, 0x00,0x01, 0x87,0x02,
5780xFF,0x38, 0x03,0x2C, 0x0E,0xF4, 0x93,0x16, 0xFF,0xC4, 0xF7,0x05, 0x7A,0x68, 0x93,0x13,
5790xFF,0xFC, 0x95,0x96, 0xFF,0xB8, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93,
5800xFF,0xFC, 0x85,0x96, 0xFF,0xB8, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x24,0x78, 0x00,0x00,
5810x00,0x01, 0x86,0x2E, 0x0E,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00,
5820x24,0x15, 0xF3,0x02, 0x00,0x4C, 0x87,0x2E, 0x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38,
5830x00,0x01, 0x97,0x2E, 0x0F,0x00, 0x87,0x2E, 0x0F,0x00, 0xE0,0x00, 0x24,0x78, 0x00,0x00,
5840x00,0x01, 0x93,0x13, 0xFF,0xFC, 0xF3,0x06, 0x7A,0x28, 0x93,0x13, 0xFF,0xFC, 0x76,0xB1,
5850x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x83,0x16,
5860xFF,0xC4, 0xC7,0x38, 0x60,0x00, 0xC7,0x38, 0x30,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13,
5870xFF,0xFC, 0x95,0x96, 0xFF,0xB8, 0x96,0x16, 0xFF,0xB4, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
5880x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16, 0xFF,0xB4, 0x85,0x96, 0xFF,0xB8, 0x06,0x30,
5890x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00, 0x24,0x74, 0x00,0x00, 0x00,0x01, 0xF6,0x02,
5900x00,0x00, 0x96,0x2E, 0x0E,0xF8, 0xF7,0x04, 0x32,0xC0, 0xF3,0x06, 0xE0,0x30, 0xC0,0x3A,
5910x32,0x00, 0xE6,0x00, 0x24,0xBC, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00,
5920x00,0x01, 0x77,0xB8, 0x00,0x1E, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00, 0x24,0xBD, 0x00,0x00,
5930x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38,
5940x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00,
5950x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x24,0xF9, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04,
5960x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
5970x00,0x02, 0xF3,0x02, 0x00,0x0A, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x24,0xF8, 0xB3,0x3A,
5980x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38,
5990x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00, 0x25,0x14, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05,
6000x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36,
6010x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84, 0x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36,
6020x00,0x00, 0xE6,0x00, 0x25,0xD9, 0xF7,0x05, 0x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00,
6030x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x25,0x79, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
6040x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x25,0x78, 0x00,0x00,
6050x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
6060x25,0xD1, 0x00,0x00, 0x00,0x01, 0xF5,0x84, 0x76,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x2E,
6070x00,0x21, 0xE2,0x00, 0x25,0xC4, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
6080x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32,
6090x00,0x44, 0xE6,0x00, 0x25,0xB0, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02,
6100x00,0x22, 0xF3,0x05, 0x76,0xF8, 0xF3,0x04, 0x77,0x00, 0xE0,0x00, 0x25,0xC8, 0xF3,0x05,
6110x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xE0,0x00, 0x25,0xD8, 0xF0,0x05, 0x7A,0x78, 0xE0,0x00,
6120x25,0xDC, 0xF3,0x06, 0x31,0x9C, 0xF3,0x06, 0x2E,0xE0, 0xF3,0x05, 0x32,0xD4, 0xF7,0x04,
6130x71,0xC8, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x26,0x8C, 0xF6,0x86,
6140x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
6150x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x09, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
6160x26,0x8C, 0xB3,0x3A, 0x68,0x02, 0xE0,0x00, 0x26,0x8C, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04,
6170x7A,0x90, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xEE,0x00, 0x26,0x41, 0xC5,0xB4,
6180x00,0x00, 0xC7,0x38, 0x5A,0x00, 0xE0,0x00, 0x26,0x48, 0xF7,0x05, 0x7A,0x90, 0xC5,0xB8,
6190x00,0x00, 0xF0,0x05, 0x7A,0x90, 0xF6,0x84, 0x7A,0x88, 0xF7,0x06, 0x7A,0x28, 0x76,0x35,
6200x00,0x03, 0xA7,0x32, 0x70,0x02, 0x06,0xB4, 0x00,0x01, 0x97,0x16, 0xFF,0xEC, 0x84,0xA6,
6210xFF,0xFC, 0xF7,0x06, 0x7A,0x2C, 0xF3,0x04, 0x7A,0x98, 0x94,0x82, 0xFF,0x3C, 0x93,0x02,
6220xFF,0x40, 0x95,0x82, 0xFF,0x44, 0xB5,0xB2, 0x70,0x02, 0xF7,0x04, 0x7A,0x98, 0xF6,0x85,
6230x7A,0x88, 0xC7,0x38, 0x58,0x00, 0xF7,0x05, 0x7A,0x98, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
6240xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
6250xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x02, 0x00,0x01, 0xF7,0x05, 0x7A,0x78, 0xF7,0x06,
6260x30,0x84, 0xF7,0x05, 0x32,0xD4, 0xF7,0x04, 0x32,0xC4, 0x00,0x00, 0x00,0x01, 0x97,0x13,
6270xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x06,0x10, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
6280xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
6290x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x50, 0xF7,0x04,
6300x32,0xD0, 0xF3,0x02, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x2A,0x71, 0x93,0x16,
6310xFF,0xE4, 0xF6,0x84, 0x32,0xC4, 0x86,0x16, 0xFF,0xE4, 0x87,0x36, 0x00,0x08, 0xC3,0x04,
6320x00,0x00, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00, 0x27,0x3C, 0x20,0x32, 0x00,0x00, 0x87,0x36,
6330x00,0x0C, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00, 0x27,0x3C, 0x20,0x32,
6340x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x2A,0x70, 0xF3,0x02,
6350x00,0x00, 0xF7,0x04, 0x32,0xC0, 0x93,0x16, 0xFF,0xAC, 0xF5,0x84, 0x32,0xC4, 0x86,0x3A,
6360x14,0x28, 0x03,0xB8, 0x14,0x20, 0x04,0x2C, 0x00,0x08, 0x86,0xBA, 0x14,0x24, 0x00,0x00,
6370x00,0x01, 0xC0,0x32, 0x6A,0x00, 0xEC,0x00, 0x28,0x28, 0x96,0x16, 0xFF,0xEC, 0x77,0x31,
6380x00,0x01, 0xC7,0x38, 0x60,0x00, 0x77,0x39, 0x00,0x02, 0xC6,0x38, 0x38,0x00, 0x06,0x30,
6390x00,0x0C, 0x86,0xB2, 0x00,0x00, 0x87,0x2E, 0x00,0x08, 0x85,0x16, 0xFF,0xAC, 0xC0,0x36,
6400x72,0x00, 0xE6,0x00, 0x27,0xB8, 0xC4,0x84, 0x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x2E,
6410x00,0x0C, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x27,0xBC, 0x20,0x2A,
6420x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0x27,0xC9, 0x00,0x00,
6430x00,0x01, 0xF4,0x82, 0x00,0x00, 0x86,0xB2, 0x00,0x00, 0x87,0x22, 0x00,0x00, 0x00,0x00,
6440x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x28,0x04, 0xF5,0x82, 0x00,0x00, 0xC0,0x36,
6450x72,0x00, 0xE6,0x00, 0x28,0x0C, 0x20,0x2E, 0x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x22,
6460x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x28,0x0D, 0x20,0x2E,
6470x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x28,0x1D, 0x20,0x26,
6480x00,0x00, 0xF4,0x82, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0x28,0x28, 0xF3,0x02,
6490x00,0x01, 0x93,0x16, 0xFF,0xAC, 0x83,0x16, 0xFF,0xAC, 0x00,0x00, 0x00,0x01, 0x20,0x1A,
6500x00,0x00, 0xE6,0x00, 0x28,0x69, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00,
6510x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4,
6520x38,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xE0,0x00,
6530x28,0xD0, 0x96,0x96, 0xFF,0xF4, 0x27,0x14, 0x00,0x14, 0x97,0x13, 0xFF,0xFC, 0x94,0x13,
6540xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0x93,0x96, 0xFF,0xBC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
6550x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0xBC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
6560x28,0xCD, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9,
6570x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x38,0x00, 0x06,0xB4,
6580x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xF0, 0x96,0x96, 0xFF,0xF4, 0x97,0x1E,
6590x00,0x08, 0xE0,0x00, 0x28,0xD4, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32,
6600x00,0x00, 0xE6,0x00, 0x2A,0x70, 0xF3,0x02, 0x00,0x00, 0xF6,0x04, 0x32,0xC0, 0x93,0x16,
6610xFF,0xAC, 0x86,0xB2, 0x14,0x28, 0x03,0xB0, 0x14,0x20, 0x04,0x30, 0x14,0x8C, 0x87,0x32,
6620x14,0x24, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x00, 0x29,0xBC, 0x96,0x96,
6630xFF,0xEC, 0x77,0x35, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xC5,0xB8,
6640x38,0x00, 0x05,0xAC, 0x00,0x0C, 0x86,0xAE, 0x00,0x00, 0x87,0x32, 0x14,0x8C, 0x85,0x16,
6650xFF,0xAC, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x29,0x4C, 0xC4,0x84, 0x00,0x00, 0x86,0xAE,
6660x00,0x04, 0x87,0x32, 0x14,0x90, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
6670x29,0x50, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00,
6680x29,0x5D, 0x00,0x00, 0x00,0x01, 0xF4,0x82, 0x00,0x00, 0x86,0xAE, 0x00,0x00, 0x87,0x22,
6690x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x29,0x98, 0xF6,0x02,
6700x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x29,0xA0, 0x20,0x32, 0x00,0x00, 0x86,0xAE,
6710x00,0x04, 0x87,0x22, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
6720x29,0xA1, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
6730x29,0xB1, 0x20,0x26, 0x00,0x00, 0xF4,0x82, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00,
6740x29,0xBC, 0xF3,0x02, 0x00,0x01, 0x93,0x16, 0xFF,0xAC, 0x83,0x16, 0xFF,0xAC, 0x00,0x00,
6750x00,0x01, 0x20,0x1A, 0x00,0x00, 0xE6,0x00, 0x29,0xFD, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
6760xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
6770x00,0x02, 0xC6,0xB4, 0x38,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
6780xFF,0xF0, 0xE0,0x00, 0x2A,0x64, 0x96,0x96, 0xFF,0xF4, 0x27,0x14, 0x00,0x14, 0x97,0x13,
6790xFF,0xFC, 0x94,0x13, 0xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0x93,0x96, 0xFF,0xBC, 0x07,0x88,
6800x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0xBC, 0x20,0x22,
6810x00,0x00, 0xE6,0x00, 0x2A,0x61, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00,
6820x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4,
6830x38,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xF0, 0x96,0x96,
6840xFF,0xF4, 0x97,0x1E, 0x00,0x08, 0xE0,0x00, 0x2A,0x68, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
6850x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x2B,0xCD, 0xF3,0x02, 0x00,0x01, 0xF6,0x84,
6860x32,0xC0, 0x00,0x00, 0x00,0x01, 0x85,0xB6, 0x0E,0xF4, 0x86,0x36, 0x0E,0xF8, 0x20,0x2E,
6870x00,0x10, 0xE2,0x00, 0x2A,0x94, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x2A,0xB1, 0x00,0x00,
6880x00,0x01, 0x87,0x36, 0x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
6890x0F,0x00, 0x87,0x36, 0x0F,0x00, 0xE0,0x00, 0x2A,0xDC, 0xF7,0x02, 0x00,0x00, 0x07,0x30,
6900x00,0x01, 0xC0,0x3A, 0x5A,0x00, 0xE6,0x00, 0x2A,0xD5, 0xF6,0x82, 0x00,0x00, 0x20,0x32,
6910x00,0x10, 0xE6,0x00, 0x2A,0xD8, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x2A,0xDC, 0xC7,0x34,
6920x00,0x00, 0xF6,0x82, 0x00,0x01, 0xC7,0x34, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
6930x2B,0xCC, 0xF3,0x02, 0x00,0x01, 0xF3,0x04, 0x32,0xCC, 0x00,0x00, 0x00,0x01, 0x93,0x16,
6940xFF,0xDC, 0x93,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x43,0x68, 0x97,0x93,
6950xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x2B,0xB4, 0xF3,0x02, 0x00,0x00, 0x83,0x16,
6960xFF,0xDC, 0x00,0x00, 0x00,0x01, 0x86,0x1A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x32,
6970x00,0x10, 0xE2,0x00, 0x2B,0x49, 0x76,0xB1, 0x00,0x02, 0x87,0x1A, 0x00,0x0C, 0x00,0x00,
6980x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x1A, 0x00,0x0C, 0x87,0x1A, 0x00,0x0C, 0xE0,0x00,
6990x2B,0xB4, 0xF3,0x02, 0x00,0x00, 0xF3,0x02, 0x00,0x4C, 0x93,0x13, 0xFF,0xFC, 0xC6,0xB4,
7000x60,0x00, 0x77,0x35, 0x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x83,0x16, 0xFF,0xDC, 0xC7,0x38,
7010x60,0x00, 0xC7,0x38, 0x30,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0xF3,0x06,
7020x7A,0x28, 0x93,0x13, 0xFF,0xFC, 0x96,0x16, 0xFF,0xB4, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
7030x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16, 0xFF,0xB4, 0x00,0x00, 0x00,0x01, 0x06,0x30,
7040x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00, 0x2B,0xA4, 0x00,0x00, 0x00,0x01, 0xF6,0x02,
7050x00,0x00, 0x83,0x16, 0xFF,0xDC, 0x00,0x00, 0x00,0x01, 0x96,0x1A, 0x00,0x00, 0xF3,0x02,
7060x00,0x01, 0x93,0x16, 0xFF,0xD4, 0x83,0x16, 0xFF,0xD4, 0x00,0x00, 0x00,0x01, 0x20,0x1A,
7070x00,0x00, 0xE6,0x00, 0x2B,0xD0, 0xF3,0x02, 0x00,0x01, 0x93,0x16, 0xFF,0xE4, 0x83,0x16,
7080xFF,0xE4, 0x00,0x00, 0x00,0x01, 0x20,0x1A, 0x00,0x00, 0xE6,0x00, 0x2C,0xED, 0xF6,0x82,
7090x0C,0xAB, 0xF7,0x04, 0x32,0xB4, 0x83,0x16, 0xFF,0xD4, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
7100x32,0xB4, 0xF7,0x04, 0x32,0xB4, 0x20,0x1A, 0x00,0x00, 0xE6,0x00, 0x2C,0x28, 0x00,0x00,
7110x00,0x01, 0xF7,0x04, 0x32,0xC0, 0xF3,0x06, 0xE0,0x30, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00,
7120x2C,0x28, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x32,0xE8, 0x00,0x00, 0x00,0x01, 0x07,0x38,
7130x00,0x01, 0xF7,0x05, 0x32,0xE8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
7140x00,0x00, 0xE6,0x00, 0x2C,0x65, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
7150x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02,
7160x00,0x0A, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x2C,0x64, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05,
7170x2D,0x38, 0xF7,0x04, 0x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A,
7180x6A,0x00, 0xE6,0x00, 0x2C,0x80, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84,
7190x71,0xD4, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C,
7200x00,0x01, 0xF6,0x84, 0x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00,
7210x33,0x91, 0xF7,0x05, 0x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
7220x00,0x00, 0xE6,0x00, 0x33,0x31, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00,
7230x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x33,0x30, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
7240x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x33,0x30, 0x00,0x00,
7250x00,0x01, 0xE0,0x00, 0x33,0x94, 0xF3,0x06, 0x31,0x9C, 0xF0,0x05, 0x32,0xE8, 0xF7,0x04,
7260x32,0xC0, 0xF6,0x04, 0x6F,0x54, 0x96,0xBA, 0x00,0x04, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
7270x2D,0x18, 0xF3,0x02, 0x00,0x0C, 0xF3,0x02, 0x00,0x01, 0xF3,0x05, 0x6F,0x54, 0xE0,0x00,
7280x2D,0x20, 0xF7,0x02, 0x00,0x01, 0xF3,0x05, 0x6F,0x58, 0xF7,0x02, 0x00,0x00, 0x20,0x3A,
7290x00,0x00, 0xE6,0x00, 0x2D,0x34, 0xF3,0x06, 0x2F,0x6C, 0xE0,0x00, 0x34,0x44, 0xF3,0x05,
7300x32,0xD4, 0xF5,0x84, 0x7A,0x70, 0x24,0x94, 0x00,0x10, 0x20,0x2E, 0x00,0x01, 0xE6,0x00,
7310x30,0x3C, 0xF5,0x85, 0x7A,0xA0, 0xF7,0x02, 0x00,0x01, 0xF6,0x04, 0x32,0xC8, 0xF7,0x05,
7320x7A,0x70, 0xF7,0x04, 0x32,0xC4, 0xF6,0x84, 0x32,0xC0, 0xF6,0x05, 0x7A,0x2C, 0x90,0x02,
7330xFF,0x80, 0x90,0x02, 0xFF,0x38, 0xF5,0x84, 0x7A,0x28, 0x07,0x38, 0x00,0x24, 0x95,0x82,
7340xFF,0x3C, 0x97,0x02, 0xFF,0x40, 0x96,0x02, 0xFF,0x44, 0x87,0x36, 0x14,0x10, 0x00,0x00,
7350x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36, 0x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00,
7360x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x14,0x18, 0x87,0x36, 0x14,0x18, 0xF0,0x05,
7370x6F,0x50, 0xF7,0x04, 0x32,0xB8, 0x95,0x96, 0xFF,0xEC, 0xC7,0x38, 0x60,0x00, 0xF7,0x05,
7380x32,0xB8, 0xF7,0x04, 0x32,0xBC, 0xF3,0x06, 0x2F,0xF8, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
7390x32,0xBC, 0xF7,0x04, 0x32,0xBC, 0xF3,0x05, 0x32,0xD4, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E,
7400x74,0x00, 0xE6,0x00, 0x2D,0xEC, 0x00,0x00, 0x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00,
7410x2D,0xDD, 0x00,0x00, 0x00,0x01, 0xF7,0x06, 0x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A,
7420x00,0x10, 0xE6,0x00, 0x34,0x44, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x32,0xE4, 0xFF,0x82,
7430x00,0x10, 0xF5,0x84, 0x6F,0x58, 0x07,0x38, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00,
7440x2E,0x48, 0xF7,0x05, 0x32,0xE4, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
7450x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
7460x2E,0x3C, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xE0,0x00,
7470x2E,0x4C, 0xF3,0x05, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00,
7480x00,0x01, 0x90,0x2E, 0x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
7490x00,0x02, 0xE6,0x00, 0x2F,0x78, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x38, 0x03,0x2C,
7500x0E,0xF4, 0x93,0x16, 0xFF,0xCC, 0xF7,0x05, 0x7A,0x68, 0x93,0x13, 0xFF,0xFC, 0x95,0x96,
7510xFF,0xB8, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96,
7520xFF,0xB8, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x2F,0x34, 0x00,0x00, 0x00,0x01, 0x86,0x2E,
7530x0E,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x2E,0xD1, 0xF3,0x02,
7540x00,0x4C, 0x87,0x2E, 0x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E,
7550x0F,0x00, 0x87,0x2E, 0x0F,0x00, 0xE0,0x00, 0x2F,0x34, 0x00,0x00, 0x00,0x01, 0x93,0x13,
7560xFF,0xFC, 0xF3,0x06, 0x7A,0x28, 0x93,0x13, 0xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4,
7570x60,0x00, 0x77,0x35, 0x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x83,0x16, 0xFF,0xCC, 0xC7,0x38,
7580x60,0x00, 0xC7,0x38, 0x30,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96,
7590xFF,0xB8, 0x96,0x16, 0xFF,0xB4, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93,
7600xFF,0xFC, 0x86,0x16, 0xFF,0xB4, 0x85,0x96, 0xFF,0xB8, 0x06,0x30, 0x00,0x01, 0x20,0x32,
7610x00,0x11, 0xE6,0x00, 0x2F,0x30, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E,
7620x0E,0xF8, 0xF7,0x04, 0x32,0xC0, 0xF3,0x06, 0xE0,0x30, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00,
7630x2F,0x78, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8,
7640x00,0x1E, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00, 0x2F,0x79, 0x00,0x00, 0x00,0x01, 0x0F,0x81,
7650x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
7660x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
7670x00,0x00, 0xE6,0x00, 0x2F,0xB5, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
7680x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02,
7690x00,0x0A, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x2F,0xB4, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05,
7700x2D,0x38, 0xF7,0x04, 0x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A,
7710x6A,0x00, 0xE6,0x00, 0x2F,0xD0, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84,
7720x71,0xD4, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C,
7730x00,0x01, 0xF6,0x84, 0x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00,
7740x33,0x91, 0xF7,0x05, 0x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
7750x00,0x00, 0xE6,0x00, 0x33,0x31, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00,
7760x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x33,0x30, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
7770x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x33,0x30, 0x00,0x00,
7780x00,0x01, 0xE0,0x00, 0x33,0x94, 0xF3,0x06, 0x31,0x9C, 0xF0,0x05, 0x7A,0x88, 0x90,0x02,
7790xFF,0x38, 0xF0,0x05, 0x6F,0x50, 0x90,0x02, 0xFF,0x80, 0xF7,0x04, 0x32,0xC4, 0xF3,0x06,
7800x32,0x28, 0xF3,0x05, 0x32,0xD4, 0xF6,0x04, 0x32,0xC8, 0xF6,0x84, 0x7A,0x2C, 0xF5,0x02,
7810x00,0x00, 0x07,0x38, 0x00,0x24, 0xF7,0x05, 0x7A,0x98, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
7820x30,0x8D, 0xF6,0x05, 0x7A,0x90, 0xC0,0x2A, 0x5A,0x00, 0xE6,0x00, 0x33,0xD8, 0xC0,0x32,
7830x6A,0x00, 0xEE,0x00, 0x33,0xD9, 0x00,0x00, 0x00,0x01, 0xF6,0x84, 0x32,0xC0, 0x00,0x00,
7840x00,0x01, 0x87,0x36, 0x14,0x10, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36,
7850x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
7860x14,0x18, 0x87,0x36, 0x14,0x18, 0xF7,0x04, 0x32,0xB8, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
7870x60,0x00, 0xF7,0x05, 0x32,0xB8, 0xF7,0x04, 0x32,0xBC, 0x00,0x00, 0x00,0x01, 0x07,0x38,
7880x00,0x01, 0xF7,0x05, 0x32,0xBC, 0xF7,0x04, 0x32,0xBC, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
7890x30,0xFD, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0x07,0x38,
7900x00,0x01, 0xE0,0x00, 0x31,0x00, 0xF7,0x05, 0x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0xF5,0x84,
7910x6F,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x31,0x44, 0xF6,0x86,
7920x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
7930x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x31,0x38, 0xB5,0xBA,
7940x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xE0,0x00, 0x31,0x48, 0xF3,0x05,
7950x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x90,0x2E,
7960x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00,
7970x32,0x74, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x38, 0x03,0x2C, 0x0E,0xF4, 0x93,0x16,
7980xFF,0xC4, 0xF7,0x05, 0x7A,0x68, 0x93,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xB8, 0x07,0x88,
7990x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xB8, 0x20,0x22,
8000x00,0x00, 0xE6,0x00, 0x32,0x30, 0x00,0x00, 0x00,0x01, 0x86,0x2E, 0x0E,0xF8, 0x00,0x00,
8010x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x31,0xCD, 0xF3,0x02, 0x00,0x4C, 0x87,0x2E,
8020x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x0F,0x00, 0x87,0x2E,
8030x0F,0x00, 0xE0,0x00, 0x32,0x30, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0xF3,0x06,
8040x7A,0x28, 0x93,0x13, 0xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35,
8050x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x83,0x16, 0xFF,0xC4, 0xC7,0x38, 0x60,0x00, 0xC7,0x38,
8060x30,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xB8, 0x96,0x16,
8070xFF,0xB4, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16,
8080xFF,0xB4, 0x85,0x96, 0xFF,0xB8, 0x06,0x30, 0x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00,
8090x32,0x2C, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E, 0x0E,0xF8, 0xF7,0x04,
8100x32,0xC0, 0xF3,0x06, 0xE0,0x30, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00, 0x32,0x74, 0x00,0x00,
8110x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1E, 0x70,0x3E,
8120xFF,0xE1, 0xE6,0x00, 0x32,0x75, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04,
8130x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04,
8140x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
8150x32,0xB1, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
8160x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0A, 0x20,0x32,
8170x00,0x44, 0xE6,0x00, 0x32,0xB0, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04,
8180x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
8190x32,0xCC, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04,
8200x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84,
8210x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x33,0x91, 0xF7,0x05,
8220x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
8230x33,0x31, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
8240x00,0x00, 0xE6,0x00, 0x33,0x30, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
8250x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x33,0x89, 0x00,0x00, 0x00,0x01, 0xF5,0x84,
8260x76,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x33,0x7C, 0xF6,0x86,
8270x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
8280x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x33,0x68, 0xB5,0xBA,
8290x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xF3,0x05, 0x76,0xF8, 0xF3,0x04,
8300x77,0x00, 0xE0,0x00, 0x33,0x80, 0xF3,0x05, 0x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xE0,0x00,
8310x33,0x90, 0xF0,0x05, 0x7A,0x78, 0xE0,0x00, 0x33,0x94, 0xF3,0x06, 0x31,0x9C, 0xF3,0x06,
8320x2E,0xE0, 0xF3,0x05, 0x32,0xD4, 0xF7,0x04, 0x71,0xC8, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
8330x00,0x00, 0xE6,0x00, 0x34,0x44, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
8340x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02,
8350x00,0x09, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x34,0x44, 0xB3,0x3A, 0x68,0x02, 0xE0,0x00,
8360x34,0x44, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x7A,0x90, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
8370x6A,0x00, 0xEE,0x00, 0x33,0xF9, 0xC5,0xB4, 0x00,0x00, 0xC7,0x38, 0x5A,0x00, 0xE0,0x00,
8380x34,0x00, 0xF7,0x05, 0x7A,0x90, 0xC5,0xB8, 0x00,0x00, 0xF0,0x05, 0x7A,0x90, 0xF6,0x84,
8390x7A,0x88, 0xF7,0x06, 0x7A,0x28, 0x76,0x35, 0x00,0x03, 0xA7,0x32, 0x70,0x02, 0x06,0xB4,
8400x00,0x01, 0x97,0x16, 0xFF,0xEC, 0x84,0xA6, 0xFF,0xFC, 0xF7,0x06, 0x7A,0x2C, 0xF3,0x04,
8410x7A,0x98, 0x94,0x82, 0xFF,0x3C, 0x93,0x02, 0xFF,0x40, 0x95,0x82, 0xFF,0x44, 0xB5,0xB2,
8420x70,0x02, 0xF7,0x04, 0x7A,0x98, 0xF6,0x85, 0x7A,0x88, 0xC7,0x38, 0x58,0x00, 0xF7,0x05,
8430x7A,0x98, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
8440x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
8450x00,0x20, 0xF5,0x84, 0x7A,0x70, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x01, 0xE6,0x00,
8460x37,0x6C, 0xF5,0x85, 0x7A,0xA0, 0xF7,0x02, 0x00,0x01, 0xF6,0x04, 0x32,0xC8, 0xF7,0x05,
8470x7A,0x70, 0xF7,0x04, 0x32,0xC4, 0xF6,0x84, 0x32,0xC0, 0xF6,0x05, 0x7A,0x2C, 0x90,0x02,
8480xFF,0x80, 0x90,0x02, 0xFF,0x38, 0xF5,0x84, 0x7A,0x28, 0x07,0x38, 0x00,0x24, 0x95,0x82,
8490xFF,0x3C, 0x97,0x02, 0xFF,0x40, 0x96,0x02, 0xFF,0x44, 0x87,0x36, 0x14,0x10, 0x00,0x00,
8500x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36, 0x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00,
8510x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x14,0x18, 0x87,0x36, 0x14,0x18, 0xF0,0x05,
8520x6F,0x50, 0xF7,0x04, 0x32,0xB8, 0x95,0x96, 0xFF,0xF4, 0xC7,0x38, 0x60,0x00, 0xF7,0x05,
8530x32,0xB8, 0xF7,0x04, 0x32,0xBC, 0xF4,0x86, 0x2F,0xF8, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
8540x32,0xBC, 0xF7,0x04, 0x32,0xBC, 0xF4,0x85, 0x32,0xD4, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E,
8550x74,0x00, 0xE6,0x00, 0x35,0x1C, 0x00,0x00, 0x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00,
8560x35,0x0D, 0x00,0x00, 0x00,0x01, 0xF7,0x06, 0x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A,
8570x00,0x10, 0xE6,0x00, 0x3B,0x70, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x32,0xE4, 0xFF,0x82,
8580x00,0x10, 0xF5,0x84, 0x6F,0x58, 0x07,0x38, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00,
8590x35,0x78, 0xF7,0x05, 0x32,0xE4, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
8600x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
8610x35,0x6C, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xE0,0x00,
8620x35,0x7C, 0xF4,0x85, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00,
8630x00,0x01, 0x90,0x2E, 0x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
8640x00,0x02, 0xE6,0x00, 0x36,0xA8, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x38, 0x04,0xAC,
8650x0E,0xF4, 0x94,0x96, 0xFF,0xEC, 0xF7,0x05, 0x7A,0x68, 0x94,0x93, 0xFF,0xFC, 0x95,0x96,
8660xFF,0xDC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96,
8670xFF,0xDC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x36,0x64, 0x00,0x00, 0x00,0x01, 0x86,0x2E,
8680x0E,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x36,0x01, 0xF4,0x82,
8690x00,0x4C, 0x87,0x2E, 0x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E,
8700x0F,0x00, 0x87,0x2E, 0x0F,0x00, 0xE0,0x00, 0x36,0x64, 0x00,0x00, 0x00,0x01, 0x94,0x93,
8710xFF,0xFC, 0xF4,0x86, 0x7A,0x28, 0x94,0x93, 0xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4,
8720x60,0x00, 0x77,0x35, 0x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x84,0x96, 0xFF,0xEC, 0xC7,0x38,
8730x60,0x00, 0xC7,0x38, 0x48,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96,
8740xFF,0xDC, 0x96,0x16, 0xFF,0xD8, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93,
8750xFF,0xFC, 0x86,0x16, 0xFF,0xD8, 0x85,0x96, 0xFF,0xDC, 0x06,0x30, 0x00,0x01, 0x20,0x32,
8760x00,0x11, 0xE6,0x00, 0x36,0x60, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E,
8770x0E,0xF8, 0xF7,0x04, 0x32,0xC0, 0xF4,0x86, 0xE0,0x30, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00,
8780x36,0xA8, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8,
8790x00,0x1E, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00, 0x36,0xA9, 0x00,0x00, 0x00,0x01, 0x0F,0x81,
8800x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
8810x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
8820x00,0x00, 0xE6,0x00, 0x36,0xE5, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
8830x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82,
8840x00,0x0A, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x36,0xE4, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05,
8850x2D,0x38, 0xF7,0x04, 0x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A,
8860x6A,0x00, 0xE6,0x00, 0x37,0x00, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84,
8870x71,0xD4, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C,
8880x00,0x01, 0xF6,0x84, 0x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00,
8890x3A,0xC1, 0xF7,0x05, 0x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
8900x00,0x00, 0xE6,0x00, 0x3A,0x61, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00,
8910x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x3A,0x60, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
8920x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x3A,0x60, 0x00,0x00,
8930x00,0x01, 0xE0,0x00, 0x3A,0xC4, 0xF4,0x86, 0x31,0x9C, 0xF0,0x05, 0x7A,0x88, 0x90,0x02,
8940xFF,0x38, 0xF0,0x05, 0x6F,0x50, 0x90,0x02, 0xFF,0x80, 0xF7,0x04, 0x32,0xC4, 0xF4,0x86,
8950x32,0x28, 0xF4,0x85, 0x32,0xD4, 0xF6,0x04, 0x32,0xC8, 0xF6,0x84, 0x7A,0x2C, 0xF5,0x02,
8960x00,0x00, 0x07,0x38, 0x00,0x24, 0xF7,0x05, 0x7A,0x98, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
8970x37,0xBD, 0xF6,0x05, 0x7A,0x90, 0xC0,0x2A, 0x5A,0x00, 0xE6,0x00, 0x3B,0x08, 0xC0,0x32,
8980x6A,0x00, 0xEE,0x00, 0x3B,0x09, 0x00,0x00, 0x00,0x01, 0xF6,0x84, 0x32,0xC0, 0x00,0x00,
8990x00,0x01, 0x87,0x36, 0x14,0x10, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36,
9000x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
9010x14,0x18, 0x87,0x36, 0x14,0x18, 0xF7,0x04, 0x32,0xB8, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
9020x60,0x00, 0xF7,0x05, 0x32,0xB8, 0xF7,0x04, 0x32,0xBC, 0x00,0x00, 0x00,0x01, 0x07,0x38,
9030x00,0x01, 0xF7,0x05, 0x32,0xBC, 0xF7,0x04, 0x32,0xBC, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
9040x38,0x2D, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0x07,0x38,
9050x00,0x01, 0xE0,0x00, 0x38,0x30, 0xF7,0x05, 0x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0xF5,0x84,
9060x6F,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x38,0x74, 0xF6,0x86,
9070x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
9080x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x38,0x68, 0xB5,0xBA,
9090x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xE0,0x00, 0x38,0x78, 0xF4,0x85,
9100x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x90,0x2E,
9110x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00,
9120x39,0xA4, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x38, 0x04,0xAC, 0x0E,0xF4, 0x94,0x96,
9130xFF,0xE4, 0xF7,0x05, 0x7A,0x68, 0x94,0x93, 0xFF,0xFC, 0x95,0x96, 0xFF,0xDC, 0x07,0x88,
9140x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xDC, 0x20,0x22,
9150x00,0x00, 0xE6,0x00, 0x39,0x60, 0x00,0x00, 0x00,0x01, 0x86,0x2E, 0x0E,0xF8, 0x00,0x00,
9160x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x38,0xFD, 0xF4,0x82, 0x00,0x4C, 0x87,0x2E,
9170x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x0F,0x00, 0x87,0x2E,
9180x0F,0x00, 0xE0,0x00, 0x39,0x60, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0xF4,0x86,
9190x7A,0x28, 0x94,0x93, 0xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35,
9200x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x84,0x96, 0xFF,0xE4, 0xC7,0x38, 0x60,0x00, 0xC7,0x38,
9210x48,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xDC, 0x96,0x16,
9220xFF,0xD8, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16,
9230xFF,0xD8, 0x85,0x96, 0xFF,0xDC, 0x06,0x30, 0x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00,
9240x39,0x5C, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E, 0x0E,0xF8, 0xF7,0x04,
9250x32,0xC0, 0xF4,0x86, 0xE0,0x30, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00, 0x39,0xA4, 0x00,0x00,
9260x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1E, 0x70,0x3E,
9270xFF,0xE1, 0xE6,0x00, 0x39,0xA5, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04,
9280x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04,
9290x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
9300x39,0xE1, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
9310x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82, 0x00,0x0A, 0x20,0x32,
9320x00,0x44, 0xE6,0x00, 0x39,0xE0, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04,
9330x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
9340x39,0xFC, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04,
9350x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84,
9360x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x3A,0xC1, 0xF7,0x05,
9370x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
9380x3A,0x61, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
9390x00,0x00, 0xE6,0x00, 0x3A,0x60, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
9400x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x3A,0xB9, 0x00,0x00, 0x00,0x01, 0xF5,0x84,
9410x76,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x3A,0xAC, 0xF6,0x86,
9420x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
9430x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x3A,0x98, 0xB5,0xBA,
9440x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xF4,0x85, 0x76,0xF8, 0xF4,0x84,
9450x77,0x00, 0xE0,0x00, 0x3A,0xB0, 0xF4,0x85, 0x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xE0,0x00,
9460x3A,0xC0, 0xF0,0x05, 0x7A,0x78, 0xE0,0x00, 0x3A,0xC4, 0xF4,0x86, 0x31,0x9C, 0xF4,0x86,
9470x2E,0xE0, 0xF4,0x85, 0x32,0xD4, 0xF7,0x04, 0x71,0xC8, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
9480x00,0x00, 0xE6,0x00, 0x3B,0x70, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
9490x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82,
9500x00,0x09, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x3B,0x70, 0xB4,0xBA, 0x68,0x02, 0xE0,0x00,
9510x3B,0x70, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x7A,0x90, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
9520x6A,0x00, 0xEE,0x00, 0x3B,0x29, 0xC5,0xB4, 0x00,0x00, 0xC7,0x38, 0x5A,0x00, 0xE0,0x00,
9530x3B,0x30, 0xF7,0x05, 0x7A,0x90, 0xC5,0xB8, 0x00,0x00, 0xF0,0x05, 0x7A,0x90, 0xF7,0x04,
9540x7A,0x88, 0xF6,0x86, 0x7A,0x28, 0x76,0x39, 0x00,0x03, 0xA6,0xB2, 0x68,0x02, 0x07,0x38,
9550x00,0x01, 0xF7,0x05, 0x7A,0x88, 0xF7,0x04, 0x7A,0x98, 0x96,0x96, 0xFF,0xF4, 0x96,0x82,
9560xFF,0x3C, 0xF4,0x84, 0x7A,0x98, 0xF6,0x86, 0x7A,0x2C, 0xC7,0x38, 0x58,0x00, 0x94,0x82,
9570xFF,0x40, 0x95,0x82, 0xFF,0x44, 0xB5,0xB2, 0x68,0x02, 0xF7,0x05, 0x7A,0x98, 0x87,0x96,
9580xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
9590x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x18, 0xF5,0x04,
9600x7A,0x88, 0xF7,0x06, 0x7A,0x2C, 0xF5,0x84, 0x7A,0x90, 0x76,0xA9, 0x00,0x03, 0xA6,0xB6,
9610x70,0x02, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x3B,0xCD, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
9620x7A,0xA0, 0x00,0x00, 0x00,0x01, 0xC0,0x2A, 0x72,0x00, 0xE6,0x00, 0x3F,0x18, 0xC0,0x2E,
9630x6A,0x00, 0xEE,0x00, 0x3F,0x19, 0x00,0x00, 0x00,0x01, 0xF6,0x84, 0x32,0xC0, 0xF6,0x04,
9640x32,0xC8, 0x87,0x36, 0x14,0x10, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0x97,0x36,
9650x14,0x10, 0x87,0x36, 0x14,0x18, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
9660x14,0x18, 0x87,0x36, 0x14,0x18, 0xF7,0x04, 0x32,0xB8, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
9670x60,0x00, 0xF7,0x05, 0x32,0xB8, 0xF7,0x04, 0x32,0xBC, 0x00,0x00, 0x00,0x01, 0x07,0x38,
9680x00,0x01, 0xF7,0x05, 0x32,0xBC, 0xF7,0x04, 0x32,0xBC, 0x20,0x2E, 0x00,0x00, 0xE6,0x00,
9690x3C,0x3D, 0xF6,0x82, 0x00,0x00, 0xF7,0x04, 0x32,0xE0, 0xF6,0x85, 0x7A,0x70, 0x07,0x38,
9700x00,0x01, 0xE0,0x00, 0x3C,0x40, 0xF7,0x05, 0x32,0xE0, 0xF5,0x05, 0x7A,0x70, 0xF5,0x84,
9710x6F,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x3C,0x84, 0xF6,0x86,
9720x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
9730x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x3C,0x78, 0xB5,0xBA,
9740x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xE0,0x00, 0x3C,0x88, 0xF4,0x85,
9750x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x90,0x2E,
9760x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00,
9770x3D,0xB4, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x38, 0x04,0xAC, 0x0E,0xF4, 0x94,0x96,
9780xFF,0xEC, 0xF7,0x05, 0x7A,0x68, 0x94,0x93, 0xFF,0xFC, 0x95,0x96, 0xFF,0xE4, 0x07,0x88,
9790x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xE4, 0x20,0x22,
9800x00,0x00, 0xE6,0x00, 0x3D,0x70, 0x00,0x00, 0x00,0x01, 0x86,0x2E, 0x0E,0xF8, 0x00,0x00,
9810x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x3D,0x0D, 0xF4,0x82, 0x00,0x4C, 0x87,0x2E,
9820x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x0F,0x00, 0x87,0x2E,
9830x0F,0x00, 0xE0,0x00, 0x3D,0x70, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0xF4,0x86,
9840x7A,0x28, 0x94,0x93, 0xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35,
9850x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x84,0x96, 0xFF,0xEC, 0xC7,0x38, 0x60,0x00, 0xC7,0x38,
9860x48,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xE4, 0x96,0x16,
9870xFF,0xE0, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16,
9880xFF,0xE0, 0x85,0x96, 0xFF,0xE4, 0x06,0x30, 0x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00,
9890x3D,0x6C, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E, 0x0E,0xF8, 0xF7,0x04,
9900x32,0xC0, 0xF4,0x86, 0xE0,0x30, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00, 0x3D,0xB4, 0x00,0x00,
9910x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1E, 0x70,0x3E,
9920xFF,0xE1, 0xE6,0x00, 0x3D,0xB5, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04,
9930x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04,
9940x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
9950x3D,0xF1, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
9960x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82, 0x00,0x0A, 0x20,0x32,
9970x00,0x44, 0xE6,0x00, 0x3D,0xF0, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04,
9980x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
9990x3E,0x0C, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04,
10000x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84,
10010x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x3E,0xD1, 0xF7,0x05,
10020x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
10030x3E,0x71, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
10040x00,0x00, 0xE6,0x00, 0x3E,0x70, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
10050x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x3E,0xC9, 0x00,0x00, 0x00,0x01, 0xF5,0x84,
10060x76,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x3E,0xBC, 0xF6,0x86,
10070x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
10080x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x3E,0xA8, 0xB5,0xBA,
10090x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xF4,0x85, 0x76,0xF8, 0xF4,0x84,
10100x77,0x00, 0xE0,0x00, 0x3E,0xC0, 0xF4,0x85, 0x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xE0,0x00,
10110x3E,0xD0, 0xF0,0x05, 0x7A,0x78, 0xE0,0x00, 0x3E,0xD4, 0xF4,0x86, 0x31,0x9C, 0xF4,0x86,
10120x2E,0xE0, 0xF4,0x85, 0x32,0xD4, 0xF7,0x04, 0x71,0xC8, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
10130x00,0x00, 0xE6,0x00, 0x3F,0x80, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
10140x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82,
10150x00,0x09, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x3F,0x80, 0xB4,0xBA, 0x68,0x02, 0xE0,0x00,
10160x3F,0x80, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x7A,0x90, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
10170x6A,0x00, 0xEE,0x00, 0x3F,0x39, 0xC5,0xB4, 0x00,0x00, 0xC7,0x38, 0x5A,0x00, 0xE0,0x00,
10180x3F,0x40, 0xF7,0x05, 0x7A,0x90, 0xC5,0xB8, 0x00,0x00, 0xF0,0x05, 0x7A,0x90, 0xF7,0x04,
10190x7A,0x88, 0xF6,0x86, 0x7A,0x28, 0x76,0x39, 0x00,0x03, 0xA6,0xB2, 0x68,0x02, 0x07,0x38,
10200x00,0x01, 0xF7,0x05, 0x7A,0x88, 0xF7,0x04, 0x7A,0x98, 0x96,0x96, 0xFF,0xF4, 0x96,0x82,
10210xFF,0x3C, 0xF4,0x84, 0x7A,0x98, 0xF6,0x86, 0x7A,0x2C, 0xC7,0x38, 0x58,0x00, 0x94,0x82,
10220xFF,0x40, 0x95,0x82, 0xFF,0x44, 0xB5,0xB2, 0x68,0x02, 0xF7,0x05, 0x7A,0x98, 0x87,0x96,
10230xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
10240x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x10, 0xF5,0x84,
10250x6F,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x3F,0xE4, 0xF6,0x86,
10260x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
10270x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x3F,0xD8, 0xB5,0xBA,
10280x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02, 0x00,0x22, 0xE0,0x00, 0x3F,0xE8, 0xF5,0x05,
10290x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF5,0x84, 0x32,0xC0, 0x00,0x00, 0x00,0x01, 0x90,0x2E,
10300x00,0x04, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00,
10310x41,0x14, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x38, 0x05,0x2C, 0x0E,0xF4, 0x95,0x16,
10320xFF,0xF4, 0xF7,0x05, 0x7A,0x68, 0x95,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xEC, 0x07,0x88,
10330x00,0x08, 0xE0,0x00, 0x43,0xA0, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xEC, 0x20,0x22,
10340x00,0x00, 0xE6,0x00, 0x40,0xD0, 0x00,0x00, 0x00,0x01, 0x86,0x2E, 0x0E,0xF8, 0x00,0x00,
10350x00,0x01, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x40,0x6D, 0xF5,0x02, 0x00,0x4C, 0x87,0x2E,
10360x0F,0x00, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x0F,0x00, 0x87,0x2E,
10370x0F,0x00, 0xE0,0x00, 0x40,0xD0, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0xF5,0x06,
10380x7A,0x28, 0x95,0x13, 0xFF,0xFC, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35,
10390x00,0x04, 0xC7,0x38, 0x6A,0x00, 0x85,0x16, 0xFF,0xF4, 0xC7,0x38, 0x60,0x00, 0xC7,0x38,
10400x50,0x00, 0x07,0x38, 0x00,0x10, 0x97,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xEC, 0x96,0x16,
10410xFF,0xE8, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0x86,0x16,
10420xFF,0xE8, 0x85,0x96, 0xFF,0xEC, 0x06,0x30, 0x00,0x01, 0x20,0x32, 0x00,0x11, 0xE6,0x00,
10430x40,0xCC, 0x00,0x00, 0x00,0x01, 0xF6,0x02, 0x00,0x00, 0x96,0x2E, 0x0E,0xF8, 0xF7,0x04,
10440x32,0xC0, 0xF5,0x06, 0xE0,0x30, 0xC0,0x3A, 0x52,0x00, 0xE6,0x00, 0x41,0x14, 0x00,0x00,
10450x00,0x01, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1E, 0x70,0x3E,
10460xFF,0xE1, 0xE6,0x00, 0x41,0x15, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04,
10470x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04,
10480x79,0xC8, 0xF7,0x04, 0x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
10490x41,0x51, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
10500x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02, 0x00,0x0A, 0x20,0x32,
10510x00,0x44, 0xE6,0x00, 0x41,0x50, 0xB5,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04,
10520x71,0xD4, 0xF6,0x84, 0x71,0xCC, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
10530x41,0x6C, 0xF7,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD4, 0xF6,0x84, 0x71,0xD4, 0xF7,0x04,
10540x71,0xD0, 0xF0,0x05, 0x71,0xC4, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xF6,0x84,
10550x32,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x42,0x31, 0xF7,0x05,
10560x71,0xC8, 0xF7,0x04, 0x71,0x98, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
10570x41,0xD1, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
10580x00,0x00, 0xE6,0x00, 0x41,0xD0, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
10590x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x42,0x29, 0x00,0x00, 0x00,0x01, 0xF5,0x84,
10600x76,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x42,0x1C, 0xF6,0x86,
10610x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
10620x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x42,0x08, 0xB5,0xBA,
10630x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02, 0x00,0x22, 0xF5,0x05, 0x76,0xF8, 0xF5,0x04,
10640x77,0x00, 0xE0,0x00, 0x42,0x20, 0xF5,0x05, 0x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xE0,0x00,
10650x42,0x30, 0xF0,0x05, 0x7A,0x78, 0xE0,0x00, 0x42,0x34, 0xF5,0x06, 0x31,0x9C, 0xF5,0x06,
10660x2E,0xE0, 0xF5,0x05, 0x32,0xD4, 0xF7,0x04, 0x71,0xC8, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
10670x00,0x00, 0xE6,0x00, 0x42,0x74, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
10680x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02,
10690x00,0x09, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x42,0x74, 0xB5,0x3A, 0x68,0x02, 0xF0,0x05,
10700x2D,0x38, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
10710x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06,
10720x32,0xD4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x2E,0xE0, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
10730x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x32,0xD4, 0x97,0x13,
10740xFF,0xFC, 0xF7,0x06, 0x2F,0x6C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
10750x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x32,0xD4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
10760x2F,0xF8, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
10770xFF,0xFC, 0xF7,0x06, 0x32,0xD4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x30,0x84, 0x97,0x13,
10780xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
10790x32,0xD4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x31,0x10, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
10800x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x32,0xD4, 0x97,0x13,
10810xFF,0xFC, 0xF7,0x06, 0x31,0x9C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
10820x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x32,0xD4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
10830x32,0x28, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
10840xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
10850x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x87,0x16,
10860x00,0x00, 0x00,0x00, 0x00,0x01, 0x86,0xBA, 0x00,0x00, 0x87,0x3A, 0x00,0x04, 0x00,0x00,
10870x00,0x01, 0xC0,0x36, 0x72,0x00, 0x44,0x0C, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
10880xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
10890xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x86,0x2E,
10900x00,0x00, 0x86,0xAE, 0x00,0x04, 0x20,0x32, 0x00,0x10, 0xE2,0x00, 0x43,0xD0, 0x00,0x00,
10910x00,0x01, 0x20,0x36, 0x00,0x10, 0xE2,0x00, 0x43,0xED, 0x07,0x34, 0x00,0x01, 0x87,0x2E,
10920x00,0x0C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x00,0x0C, 0x87,0x2E,
10930x00,0x0C, 0xE0,0x00, 0x44,0x14, 0xF4,0x02, 0x00,0x00, 0xC0,0x3A, 0x62,0x00, 0xE6,0x00,
10940x44,0x11, 0xF4,0x02, 0x00,0x00, 0x20,0x36, 0x00,0x10, 0xE6,0x00, 0x44,0x14, 0x00,0x00,
10950x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x44,0x14, 0x00,0x00, 0x00,0x01, 0xF4,0x02,
10960x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C,
10970x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x02,
10980x00,0x01, 0xF7,0x05, 0x35,0x24, 0xF7,0x04, 0x6F,0x44, 0x00,0x00, 0x00,0x01, 0xF7,0x05,
10990x35,0x28, 0xF7,0x06, 0x32,0xF4, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x35,0x30, 0x97,0x13,
11000xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02,
11010x45,0x04, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x0D, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
11020x32,0xF4, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
11030xFF,0xFC, 0xF7,0x02, 0x4A,0x04, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x0F, 0x97,0x13,
11040xFF,0xFC, 0xF7,0x06, 0x33,0x80, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
11050x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x4E,0xEC, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02,
11060x00,0x08, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x34,0x0C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
11070x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x57,0x64, 0x97,0x13,
11080xFF,0xFC, 0xF7,0x02, 0x00,0x07, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x34,0x98, 0x97,0x13,
11090xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
11100xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
11110x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x14, 0xF7,0x04,
11120x75,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x45,0x2D, 0xF6,0x86,
11130x75,0xF8, 0xE0,0x00, 0x45,0x44, 0xF7,0x02, 0x00,0x00, 0xF7,0x04, 0x76,0x04, 0x00,0x00,
11140x00,0x01, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x87,0x3A, 0x00,0x18, 0x00,0x00,
11150x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x45,0x5C, 0xF7,0x05, 0x35,0x48, 0xF4,0x86,
11160x33,0x80, 0xE0,0x00, 0x49,0xF0, 0xF4,0x85, 0x35,0x30, 0xF7,0x04, 0x6F,0x54, 0x00,0x00,
11170x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x45,0x80, 0xF4,0x82, 0x00,0x08, 0xF4,0x82,
11180x00,0x01, 0xF4,0x85, 0x6F,0x54, 0xE0,0x00, 0x45,0x88, 0xF7,0x02, 0x00,0x01, 0xF4,0x85,
11190x6F,0x58, 0xF7,0x02, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x45,0xA0, 0xF4,0x82,
11200x00,0x04, 0xF4,0x86, 0x34,0x0C, 0xE0,0x00, 0x49,0xF0, 0xF4,0x85, 0x35,0x30, 0xF6,0x84,
11210x35,0x48, 0xF6,0x04, 0x35,0x2C, 0xF4,0xB7, 0x28,0x00, 0x07,0x34, 0x00,0x02, 0xF4,0x82,
11220x00,0x01, 0xF4,0xBB, 0x28,0x00, 0x87,0x32, 0x00,0x8C, 0xF4,0x82, 0x00,0x01, 0x97,0x36,
11230x00,0x18, 0x87,0x32, 0x00,0x90, 0xF4,0x85, 0x6F,0x50, 0x97,0x36, 0x00,0x04, 0x84,0xB2,
11240x00,0x84, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x00,0x10, 0x84,0xB2, 0x00,0x88, 0x00,0x00,
11250x00,0x01, 0x94,0xB6, 0x00,0x14, 0x84,0xB6, 0x00,0x10, 0x00,0x00, 0x00,0x01, 0x94,0xB6,
11260x00,0x08, 0x84,0xB6, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x00,0x0C, 0x84,0xB2,
11270x00,0x98, 0x00,0x00, 0x00,0x01, 0xF4,0x85, 0x35,0x54, 0xF4,0x82, 0x00,0x01, 0x94,0x82,
11280xFF,0x80, 0xF5,0x04, 0x35,0x54, 0xF4,0x86, 0x34,0x98, 0xF4,0x85, 0x35,0x30, 0x95,0x02,
11290xFF,0x38, 0x85,0xB2, 0x00,0x00, 0x06,0xB4, 0x00,0x24, 0x95,0x82, 0xFF,0x3C, 0x96,0x82,
11300xFF,0x40, 0x87,0x32, 0x00,0x04, 0xF6,0x85, 0x35,0x50, 0x97,0x02, 0xFF,0x44, 0x86,0xB2,
11310x00,0x04, 0xF0,0x05, 0x35,0x4C, 0xF7,0x04, 0x35,0x40, 0x95,0x16, 0xFF,0xF4, 0x95,0x96,
11320xFF,0xF4, 0xC7,0x38, 0x68,0x00, 0xF7,0x05, 0x35,0x40, 0xF5,0x84, 0x35,0x28, 0x86,0xB2,
11330x00,0x04, 0x87,0x2E, 0x14,0x14, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x97,0x2E,
11340x14,0x14, 0x87,0x32, 0x00,0x80, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x01, 0xEE,0x00,
11350x49,0xF0, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x46,0xA4, 0x00,0x00,
11360x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x46,0x95, 0x00,0x00, 0x00,0x01, 0xF7,0x06,
11370x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x49,0xF0, 0x00,0x00,
11380x00,0x01, 0xFF,0x82, 0x00,0x10, 0x86,0x82, 0xFF,0x38, 0xF7,0x04, 0x35,0x58, 0xF5,0x84,
11390x6F,0x58, 0xF6,0x85, 0x35,0x54, 0x07,0x38, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00,
11400x47,0x08, 0xF7,0x05, 0x35,0x58, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
11410x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
11420x46,0xFC, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xE0,0x00,
11430x47,0x0C, 0xF4,0x85, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF6,0x84, 0x35,0x2C, 0x00,0x00,
11440x00,0x01, 0x87,0x36, 0x00,0x94, 0xC4,0x84, 0x00,0x00, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00,
11450x47,0x71, 0x00,0x00, 0x00,0x01, 0x86,0x36, 0x00,0x94, 0xF6,0x84, 0x35,0x54, 0x00,0x00,
11460x00,0x01, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04, 0x35,0x54, 0x96,0x96, 0xFF,0xF4, 0x47,0x39,
11470x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xC6,0xB4, 0x70,0x00, 0xF7,0x04, 0x35,0x48, 0x77,0xB4,
11480x00,0x0F, 0x70,0x3E, 0xFF,0xE1, 0x07,0x38, 0x00,0x24, 0xE6,0x00, 0x47,0x69, 0xC6,0x38,
11490x60,0x00, 0x06,0xB4, 0x00,0x01, 0xC7,0x04, 0x6E,0x00, 0xF7,0x33, 0x28,0x00, 0xF6,0x84,
11500x35,0x44, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
11510x00,0x0F, 0xE2,0x00, 0x47,0xBD, 0x07,0x38, 0x00,0x01, 0x87,0x36, 0x00,0x0C, 0x00,0x00,
11520x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x00,0x0C, 0x87,0x36, 0x00,0x0C, 0xE0,0x00,
11530x47,0xD0, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38,
11540x00,0x08, 0xE0,0x00, 0x49,0x68, 0xF7,0x05, 0x35,0x44, 0x20,0x3A, 0x00,0x10, 0xE6,0x00,
11550x47,0xCC, 0x00,0x00, 0x00,0x01, 0xF7,0x02, 0x00,0x00, 0x97,0x36, 0x00,0x04, 0xF7,0x04,
11560x35,0x3C, 0xF6,0x84, 0x35,0x28, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x35,0x3C, 0xF7,0x04,
11570x35,0x3C, 0x87,0x36, 0x14,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
11580x14,0x1C, 0xF7,0x04, 0x76,0x04, 0x86,0xB6, 0x14,0x1C, 0xF6,0x04, 0x75,0xFC, 0x07,0x38,
11590x00,0x01, 0xF6,0x84, 0x76,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
11600x48,0x1C, 0xF7,0x05, 0x76,0x04, 0xF0,0x05, 0x76,0x04, 0xF6,0x84, 0x76,0x04, 0xF7,0x04,
11610x76,0x08, 0xF0,0x05, 0x75,0xFC, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x32,
11620x00,0x00, 0xE6,0x00, 0x48,0x81, 0xF7,0x05, 0x75,0xF8, 0xF7,0x04, 0x76,0x48, 0xF4,0x86,
11630x72,0x18, 0xC0,0x3A, 0x4A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
11640x48,0x81, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
11650x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82, 0x00,0x0E, 0x20,0x32,
11660x00,0x44, 0xE6,0x00, 0x48,0x80, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02,
11670x00,0x00, 0x20,0x2A, 0x00,0x02, 0xEE,0x00, 0x49,0x68, 0xF6,0x82, 0x00,0x00, 0xF6,0x84,
11680x35,0x28, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
11690x00,0x02, 0xE6,0x00, 0x49,0x3C, 0x05,0xB4, 0x00,0x08, 0x95,0x93, 0xFF,0xFC, 0x95,0x16,
11700xFF,0xEC, 0x95,0x96, 0xFF,0xE8, 0x96,0x96, 0xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
11710x5E,0xDC, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xEC, 0x85,0x96, 0xFF,0xE8, 0x86,0x96,
11720xFF,0xE4, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x49,0x2C, 0xF7,0x02, 0x00,0x00, 0x86,0x36,
11730x00,0x0C, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x0F, 0xE2,0x00, 0x49,0x11, 0x00,0x00,
11740x00,0x01, 0x87,0x36, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
11750x00,0x14, 0x87,0x36, 0x00,0x14, 0xE0,0x00, 0x49,0x2C, 0xF7,0x02, 0x00,0x00, 0x76,0xB1,
11760x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x05, 0xC7,0x38, 0x6A,0x00, 0xC7,0x38,
11770x60,0x00, 0x07,0x38, 0x00,0x10, 0xC7,0x2C, 0x70,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
11780x47,0xA8, 0xF7,0x05, 0x35,0x2C, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x4C, 0x00,0x00,
11790x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x49,0x5C, 0x07,0x34, 0x14,0x94, 0xF4,0x84,
11800x6F,0x44, 0xE0,0x00, 0x49,0x60, 0xF4,0x85, 0x35,0x28, 0xF7,0x05, 0x35,0x28, 0xE0,0x00,
11810x48,0x84, 0x05,0x28, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x49,0xA1, 0xF6,0x86,
11820x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
11830x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82, 0x00,0x0D, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
11840x49,0xA8, 0xB4,0xBA, 0x68,0x02, 0xE0,0x00, 0x49,0xA8, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82,
11850x00,0x01, 0xF4,0x85, 0x35,0x24, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x44, 0xF4,0x86,
11860x32,0xF4, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x49,0xF0, 0xF4,0x85, 0x35,0x30, 0xF7,0x04,
11870xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1F, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
11880x49,0xF1, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00,
11890x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0x87,0x96,
11900xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
11910x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x14, 0xF7,0x04,
11920x75,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x4A,0x2D, 0xF6,0x86,
11930x75,0xF8, 0xE0,0x00, 0x4A,0x40, 0xF6,0x82, 0x00,0x00, 0xF7,0x04, 0x76,0x04, 0x00,0x00,
11940x00,0x01, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x86,0xBA, 0x00,0x18, 0xF7,0x04,
11950x6F,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x4A,0x64, 0xF6,0x85,
11960x35,0x48, 0xF4,0x82, 0x00,0x01, 0xF4,0x85, 0x6F,0x54, 0xE0,0x00, 0x4A,0x70, 0xF7,0x02,
11970x00,0x01, 0xF4,0x82, 0x00,0x08, 0xF4,0x85, 0x6F,0x58, 0xF7,0x02, 0x00,0x00, 0x20,0x3A,
11980x00,0x00, 0xE6,0x00, 0x4A,0x88, 0xF4,0x82, 0x00,0x04, 0xF4,0x86, 0x34,0x0C, 0xE0,0x00,
11990x4E,0xD8, 0xF4,0x85, 0x35,0x30, 0xF6,0x84, 0x35,0x48, 0xF6,0x04, 0x35,0x2C, 0xF4,0xB7,
12000x28,0x00, 0x07,0x34, 0x00,0x02, 0xF4,0x82, 0x00,0x01, 0xF4,0xBB, 0x28,0x00, 0x87,0x32,
12010x00,0x8C, 0xF4,0x82, 0x00,0x01, 0x97,0x36, 0x00,0x18, 0x87,0x32, 0x00,0x90, 0xF4,0x85,
12020x6F,0x50, 0x97,0x36, 0x00,0x04, 0x84,0xB2, 0x00,0x84, 0x00,0x00, 0x00,0x01, 0x94,0xB6,
12030x00,0x10, 0x84,0xB2, 0x00,0x88, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x00,0x14, 0x84,0xB6,
12040x00,0x10, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x00,0x08, 0x84,0xB6, 0x00,0x14, 0x00,0x00,
12050x00,0x01, 0x94,0xB6, 0x00,0x0C, 0x84,0xB2, 0x00,0x98, 0x00,0x00, 0x00,0x01, 0xF4,0x85,
12060x35,0x54, 0xF4,0x82, 0x00,0x01, 0x94,0x82, 0xFF,0x80, 0xF5,0x04, 0x35,0x54, 0xF4,0x86,
12070x34,0x98, 0xF4,0x85, 0x35,0x30, 0x95,0x02, 0xFF,0x38, 0x85,0xB2, 0x00,0x00, 0x06,0xB4,
12080x00,0x24, 0x95,0x82, 0xFF,0x3C, 0x96,0x82, 0xFF,0x40, 0x87,0x32, 0x00,0x04, 0xF6,0x85,
12090x35,0x50, 0x97,0x02, 0xFF,0x44, 0x86,0xB2, 0x00,0x04, 0xF0,0x05, 0x35,0x4C, 0xF7,0x04,
12100x35,0x40, 0x95,0x16, 0xFF,0xF4, 0x95,0x96, 0xFF,0xF4, 0xC7,0x38, 0x68,0x00, 0xF7,0x05,
12110x35,0x40, 0xF5,0x84, 0x35,0x28, 0x86,0xB2, 0x00,0x04, 0x87,0x2E, 0x14,0x14, 0x00,0x00,
12120x00,0x01, 0xC7,0x38, 0x68,0x00, 0x97,0x2E, 0x14,0x14, 0x87,0x32, 0x00,0x80, 0x00,0x00,
12130x00,0x01, 0x20,0x3A, 0x00,0x01, 0xEE,0x00, 0x4E,0xD8, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E,
12140x74,0x00, 0xE6,0x00, 0x4B,0x8C, 0x00,0x00, 0x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00,
12150x4B,0x7D, 0x00,0x00, 0x00,0x01, 0xF7,0x06, 0x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A,
12160x00,0x10, 0xE6,0x00, 0x4E,0xD8, 0x00,0x00, 0x00,0x01, 0xFF,0x82, 0x00,0x10, 0x86,0x82,
12170xFF,0x38, 0xF7,0x04, 0x35,0x58, 0xF5,0x84, 0x6F,0x58, 0xF6,0x85, 0x35,0x54, 0x07,0x38,
12180x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x4B,0xF0, 0xF7,0x05, 0x35,0x58, 0xF7,0x04,
12190x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
12200x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x4B,0xE4, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05,
12210x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xE0,0x00, 0x4B,0xF4, 0xF4,0x85, 0x6F,0x58, 0xF0,0x05,
12220x6F,0x54, 0xF6,0x84, 0x35,0x2C, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x94, 0xC4,0x84,
12230x00,0x00, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00, 0x4C,0x59, 0x00,0x00, 0x00,0x01, 0x86,0x36,
12240x00,0x94, 0xF6,0x84, 0x35,0x54, 0x00,0x00, 0x00,0x01, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04,
12250x35,0x54, 0x96,0x96, 0xFF,0xF4, 0x47,0x39, 0x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xC6,0xB4,
12260x70,0x00, 0xF7,0x04, 0x35,0x48, 0x77,0xB4, 0x00,0x0F, 0x70,0x3E, 0xFF,0xE1, 0x07,0x38,
12270x00,0x24, 0xE6,0x00, 0x4C,0x51, 0xC6,0x38, 0x60,0x00, 0x06,0xB4, 0x00,0x01, 0xC7,0x04,
12280x6E,0x00, 0xF7,0x33, 0x28,0x00, 0xF6,0x84, 0x35,0x44, 0x00,0x00, 0x00,0x01, 0x87,0x36,
12290x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x0F, 0xE2,0x00, 0x4C,0xA5, 0x07,0x38,
12300x00,0x01, 0x87,0x36, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
12310x00,0x0C, 0x87,0x36, 0x00,0x0C, 0xE0,0x00, 0x4C,0xB8, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
12320x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38, 0x00,0x08, 0xE0,0x00, 0x4E,0x50, 0xF7,0x05,
12330x35,0x44, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x4C,0xB4, 0x00,0x00, 0x00,0x01, 0xF7,0x02,
12340x00,0x00, 0x97,0x36, 0x00,0x04, 0xF7,0x04, 0x35,0x3C, 0xF6,0x84, 0x35,0x28, 0x07,0x38,
12350x00,0x01, 0xF7,0x05, 0x35,0x3C, 0xF7,0x04, 0x35,0x3C, 0x87,0x36, 0x14,0x1C, 0x00,0x00,
12360x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x14,0x1C, 0xF7,0x04, 0x76,0x04, 0x86,0xB6,
12370x14,0x1C, 0xF6,0x04, 0x75,0xFC, 0x07,0x38, 0x00,0x01, 0xF6,0x84, 0x76,0x00, 0x00,0x00,
12380x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00, 0x4D,0x04, 0xF7,0x05, 0x76,0x04, 0xF0,0x05,
12390x76,0x04, 0xF6,0x84, 0x76,0x04, 0xF7,0x04, 0x76,0x08, 0xF0,0x05, 0x75,0xFC, 0xC0,0x36,
12400x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x4D,0x69, 0xF7,0x05,
12410x75,0xF8, 0xF7,0x04, 0x76,0x48, 0xF4,0x86, 0x72,0x18, 0xC0,0x3A, 0x4A,0x00, 0x47,0x0C,
12420x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x4D,0x69, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04,
12430x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
12440x00,0x02, 0xF4,0x82, 0x00,0x0E, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x4D,0x68, 0xB4,0xBA,
12450x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02, 0x00,0x00, 0x20,0x2A, 0x00,0x02, 0xEE,0x00,
12460x4E,0x50, 0xF6,0x82, 0x00,0x00, 0xF6,0x84, 0x35,0x28, 0x00,0x00, 0x00,0x01, 0x87,0x36,
12470x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00, 0x4E,0x24, 0x05,0xB4,
12480x00,0x08, 0x95,0x93, 0xFF,0xFC, 0x95,0x16, 0xFF,0xEC, 0x95,0x96, 0xFF,0xE8, 0x96,0x96,
12490xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x5E,0xDC, 0x97,0x93, 0xFF,0xFC, 0x85,0x16,
12500xFF,0xEC, 0x85,0x96, 0xFF,0xE8, 0x86,0x96, 0xFF,0xE4, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
12510x4E,0x14, 0xF7,0x02, 0x00,0x00, 0x86,0x36, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x20,0x32,
12520x00,0x0F, 0xE2,0x00, 0x4D,0xF9, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x14, 0x00,0x00,
12530x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x00,0x14, 0x87,0x36, 0x00,0x14, 0xE0,0x00,
12540x4E,0x14, 0xF7,0x02, 0x00,0x00, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35,
12550x00,0x05, 0xC7,0x38, 0x6A,0x00, 0xC7,0x38, 0x60,0x00, 0x07,0x38, 0x00,0x10, 0xC7,0x2C,
12560x70,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x4C,0x90, 0xF7,0x05, 0x35,0x2C, 0xF6,0x84,
12570x35,0x28, 0xF7,0x04, 0x6F,0x4C, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
12580x4E,0x44, 0x07,0x34, 0x14,0x94, 0xF4,0x84, 0x6F,0x44, 0xE0,0x00, 0x4E,0x48, 0xF4,0x85,
12590x35,0x28, 0xF7,0x05, 0x35,0x28, 0xE0,0x00, 0x4D,0x6C, 0x05,0x28, 0x00,0x01, 0x20,0x36,
12600x00,0x00, 0xE6,0x00, 0x4E,0x89, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00,
12610x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82,
12620x00,0x0D, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x4E,0x90, 0xB4,0xBA, 0x68,0x02, 0xE0,0x00,
12630x4E,0x90, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x01, 0xF4,0x85, 0x35,0x24, 0xF6,0x84,
12640x35,0x28, 0xF7,0x04, 0x6F,0x44, 0xF4,0x86, 0x32,0xF4, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
12650x4E,0xD8, 0xF4,0x85, 0x35,0x30, 0xF7,0x04, 0xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8,
12660x00,0x1F, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00, 0x4E,0xD9, 0x00,0x00, 0x00,0x01, 0x0F,0x81,
12670x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
12680x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
12690x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
12700x00,0x08, 0x22,0x10, 0x00,0x14, 0xF6,0x84, 0x35,0x48, 0xF6,0x04, 0x35,0x2C, 0xF4,0x82,
12710x00,0x04, 0xF4,0xB7, 0x28,0x00, 0x07,0x34, 0x00,0x02, 0xF4,0x82, 0x00,0x01, 0xF4,0xBB,
12720x28,0x00, 0x87,0x32, 0x00,0x8C, 0xF4,0x82, 0x00,0x01, 0x97,0x36, 0x00,0x18, 0x87,0x32,
12730x00,0x90, 0xF4,0x85, 0x6F,0x50, 0x97,0x36, 0x00,0x04, 0x84,0xB2, 0x00,0x84, 0x00,0x00,
12740x00,0x01, 0x94,0xB6, 0x00,0x10, 0x84,0xB2, 0x00,0x88, 0x00,0x00, 0x00,0x01, 0x94,0xB6,
12750x00,0x14, 0x84,0xB6, 0x00,0x10, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x00,0x08, 0x84,0xB6,
12760x00,0x14, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x00,0x0C, 0x84,0xB2, 0x00,0x98, 0x00,0x00,
12770x00,0x01, 0xF4,0x85, 0x35,0x54, 0xF4,0x82, 0x00,0x01, 0x94,0x82, 0xFF,0x80, 0xF5,0x04,
12780x35,0x54, 0xF4,0x86, 0x34,0x98, 0xF4,0x85, 0x35,0x30, 0x95,0x02, 0xFF,0x38, 0x85,0xB2,
12790x00,0x00, 0x06,0xB4, 0x00,0x24, 0x95,0x82, 0xFF,0x3C, 0x96,0x82, 0xFF,0x40, 0x87,0x32,
12800x00,0x04, 0xF6,0x85, 0x35,0x50, 0x97,0x02, 0xFF,0x44, 0x86,0xB2, 0x00,0x04, 0xF0,0x05,
12810x35,0x4C, 0xF7,0x04, 0x35,0x40, 0x95,0x16, 0xFF,0xF4, 0x95,0x96, 0xFF,0xF4, 0xC7,0x38,
12820x68,0x00, 0xF7,0x05, 0x35,0x40, 0xF5,0x84, 0x35,0x28, 0x86,0xB2, 0x00,0x04, 0x87,0x2E,
12830x14,0x14, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x97,0x2E, 0x14,0x14, 0x87,0x32,
12840x00,0x80, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x01, 0xEE,0x00, 0x53,0x4C, 0xF7,0x06,
12850x0C,0x3E, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x50,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x7E,
12860x74,0x00, 0xE6,0x00, 0x4F,0xF1, 0x00,0x00, 0x00,0x01, 0xF7,0x06, 0x0C,0x3E, 0xC7,0x7C,
12870x74,0x00, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x53,0x4C, 0x00,0x00, 0x00,0x01, 0xFF,0x82,
12880x00,0x10, 0x86,0x82, 0xFF,0x38, 0xF7,0x04, 0x35,0x58, 0xF5,0x84, 0x6F,0x58, 0xF6,0x85,
12890x35,0x54, 0x07,0x38, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00, 0x50,0x64, 0xF7,0x05,
12900x35,0x58, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
12910x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x50,0x58, 0xB5,0xBA,
12920x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x22, 0xE0,0x00, 0x50,0x68, 0xF4,0x85,
12930x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF6,0x84, 0x35,0x2C, 0x00,0x00, 0x00,0x01, 0x87,0x36,
12940x00,0x94, 0xC4,0x84, 0x00,0x00, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x00, 0x50,0xCD, 0x00,0x00,
12950x00,0x01, 0x86,0x36, 0x00,0x94, 0xF6,0x84, 0x35,0x54, 0x00,0x00, 0x00,0x01, 0x76,0xB4,
12960xFF,0xF0, 0xF7,0x04, 0x35,0x54, 0x96,0x96, 0xFF,0xF4, 0x47,0x39, 0x00,0x00, 0x97,0x16,
12970xFF,0xF0, 0xC6,0xB4, 0x70,0x00, 0xF7,0x04, 0x35,0x48, 0x77,0xB4, 0x00,0x0F, 0x70,0x3E,
12980xFF,0xE1, 0x07,0x38, 0x00,0x24, 0xE6,0x00, 0x50,0xC5, 0xC6,0x38, 0x60,0x00, 0x06,0xB4,
12990x00,0x01, 0xC7,0x04, 0x6E,0x00, 0xF7,0x33, 0x28,0x00, 0xF6,0x84, 0x35,0x44, 0x00,0x00,
13000x00,0x01, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x0F, 0xE2,0x00,
13010x51,0x19, 0x07,0x38, 0x00,0x01, 0x87,0x36, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x07,0x38,
13020x00,0x01, 0x97,0x36, 0x00,0x0C, 0x87,0x36, 0x00,0x0C, 0xE0,0x00, 0x51,0x2C, 0x00,0x00,
13030x00,0x01, 0xF7,0x04, 0x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38, 0x00,0x08, 0xE0,0x00,
13040x52,0xC4, 0xF7,0x05, 0x35,0x44, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x51,0x28, 0x00,0x00,
13050x00,0x01, 0xF7,0x02, 0x00,0x00, 0x97,0x36, 0x00,0x04, 0xF7,0x04, 0x35,0x3C, 0xF6,0x84,
13060x35,0x28, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x35,0x3C, 0xF7,0x04, 0x35,0x3C, 0x87,0x36,
13070x14,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x14,0x1C, 0xF7,0x04,
13080x76,0x04, 0x86,0xB6, 0x14,0x1C, 0xF6,0x04, 0x75,0xFC, 0x07,0x38, 0x00,0x01, 0xF6,0x84,
13090x76,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00, 0x51,0x78, 0xF7,0x05,
13100x76,0x04, 0xF0,0x05, 0x76,0x04, 0xF6,0x84, 0x76,0x04, 0xF7,0x04, 0x76,0x08, 0xF0,0x05,
13110x75,0xFC, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
13120x51,0xDD, 0xF7,0x05, 0x75,0xF8, 0xF7,0x04, 0x76,0x48, 0xF4,0x86, 0x72,0x18, 0xC0,0x3A,
13130x4A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x51,0xDD, 0xF6,0x86,
13140x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
13150x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82, 0x00,0x0E, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
13160x51,0xDC, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02, 0x00,0x00, 0x20,0x2A,
13170x00,0x02, 0xEE,0x00, 0x52,0xC4, 0xF6,0x82, 0x00,0x00, 0xF6,0x84, 0x35,0x28, 0x00,0x00,
13180x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x00,
13190x52,0x98, 0x05,0xB4, 0x00,0x08, 0x95,0x93, 0xFF,0xFC, 0x95,0x16, 0xFF,0xEC, 0x95,0x96,
13200xFF,0xE8, 0x96,0x96, 0xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x5E,0xDC, 0x97,0x93,
13210xFF,0xFC, 0x85,0x16, 0xFF,0xEC, 0x85,0x96, 0xFF,0xE8, 0x86,0x96, 0xFF,0xE4, 0x20,0x22,
13220x00,0x00, 0xE6,0x00, 0x52,0x88, 0xF7,0x02, 0x00,0x00, 0x86,0x36, 0x00,0x0C, 0x00,0x00,
13230x00,0x01, 0x20,0x32, 0x00,0x0F, 0xE2,0x00, 0x52,0x6D, 0x00,0x00, 0x00,0x01, 0x87,0x36,
13240x00,0x14, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x00,0x14, 0x87,0x36,
13250x00,0x14, 0xE0,0x00, 0x52,0x88, 0xF7,0x02, 0x00,0x00, 0x76,0xB1, 0x00,0x02, 0xC6,0xB4,
13260x60,0x00, 0x77,0x35, 0x00,0x05, 0xC7,0x38, 0x6A,0x00, 0xC7,0x38, 0x60,0x00, 0x07,0x38,
13270x00,0x10, 0xC7,0x2C, 0x70,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x51,0x04, 0xF7,0x05,
13280x35,0x2C, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x4C, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
13290x72,0x00, 0xE6,0x00, 0x52,0xB8, 0x07,0x34, 0x14,0x94, 0xF4,0x84, 0x6F,0x44, 0xE0,0x00,
13300x52,0xBC, 0xF4,0x85, 0x35,0x28, 0xF7,0x05, 0x35,0x28, 0xE0,0x00, 0x51,0xE0, 0x05,0x28,
13310x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x52,0xFD, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04,
13320x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
13330x00,0x02, 0xF4,0x82, 0x00,0x0D, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x53,0x04, 0xB4,0xBA,
13340x68,0x02, 0xE0,0x00, 0x53,0x04, 0xF0,0x05, 0x2D,0x38, 0xF4,0x82, 0x00,0x01, 0xF4,0x85,
13350x35,0x24, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x44, 0xF4,0x86, 0x32,0xF4, 0xC0,0x36,
13360x72,0x00, 0xE6,0x00, 0x53,0x4C, 0xF4,0x85, 0x35,0x30, 0xF7,0x04, 0xE0,0x18, 0x00,0x00,
13370x00,0x01, 0x77,0xB8, 0x00,0x1F, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00, 0x53,0x4D, 0x00,0x00,
13380x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38,
13390x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
13400xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
13410xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x14, 0xF4,0x84, 0x35,0x54, 0xF6,0x84,
13420x35,0x4C, 0xF5,0x84, 0x35,0x2C, 0x94,0x82, 0xFF,0x38, 0x76,0xB5, 0x00,0x03, 0xA5,0x2E,
13430x68,0x02, 0x00,0x00, 0x00,0x01, 0x95,0x02, 0xFF,0x3C, 0xF3,0x84, 0x35,0x50, 0xC6,0xAC,
13440x68,0x00, 0x93,0x82, 0xFF,0x40, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x97,0x02,
13450xFF,0x44, 0x86,0x36, 0x00,0x04, 0xF7,0x04, 0x35,0x40, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
13460x60,0x00, 0xF7,0x05, 0x35,0x40, 0xF6,0x04, 0x35,0x28, 0x86,0xB6, 0x00,0x04, 0x87,0x32,
13470x14,0x14, 0x94,0x96, 0xFF,0xF4, 0xC7,0x38, 0x68,0x00, 0x97,0x32, 0x14,0x14, 0x87,0x2E,
13480x00,0x80, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x01, 0xEE,0x00, 0x57,0x50, 0x95,0x16,
13490xFF,0xF4, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x54,0x04, 0x00,0x00,
13500x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x53,0xF5, 0x00,0x00, 0x00,0x01, 0xF7,0x06,
13510x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x57,0x50, 0x00,0x00,
13520x00,0x01, 0xFF,0x82, 0x00,0x10, 0x86,0x82, 0xFF,0x38, 0xF7,0x04, 0x35,0x58, 0xF5,0x84,
13530x6F,0x58, 0xF6,0x85, 0x35,0x54, 0x07,0x38, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00,
13540x54,0x68, 0xF7,0x05, 0x35,0x58, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
13550x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
13560x54,0x5C, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x82, 0x00,0x22, 0xE0,0x00,
13570x54,0x6C, 0xF3,0x85, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF6,0x84, 0x35,0x2C, 0x00,0x00,
13580x00,0x01, 0x87,0x36, 0x00,0x94, 0xC3,0x84, 0x00,0x00, 0xC0,0x3A, 0x3A,0x00, 0xE6,0x00,
13590x54,0xD1, 0x00,0x00, 0x00,0x01, 0x86,0x36, 0x00,0x94, 0xF6,0x84, 0x35,0x54, 0x00,0x00,
13600x00,0x01, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04, 0x35,0x54, 0x96,0x96, 0xFF,0xF4, 0x47,0x39,
13610x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xC6,0xB4, 0x70,0x00, 0xF7,0x04, 0x35,0x48, 0x77,0xB4,
13620x00,0x0F, 0x70,0x3E, 0xFF,0xE1, 0x07,0x38, 0x00,0x24, 0xE6,0x00, 0x54,0xC9, 0xC6,0x38,
13630x60,0x00, 0x06,0xB4, 0x00,0x01, 0xC7,0x04, 0x6E,0x00, 0xF7,0x33, 0x28,0x00, 0xF6,0x84,
13640x35,0x44, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
13650x00,0x0F, 0xE2,0x00, 0x55,0x1D, 0x07,0x38, 0x00,0x01, 0x87,0x36, 0x00,0x0C, 0x00,0x00,
13660x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x00,0x0C, 0x87,0x36, 0x00,0x0C, 0xE0,0x00,
13670x55,0x30, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38,
13680x00,0x08, 0xE0,0x00, 0x56,0xC8, 0xF7,0x05, 0x35,0x44, 0x20,0x3A, 0x00,0x10, 0xE6,0x00,
13690x55,0x2C, 0x00,0x00, 0x00,0x01, 0xF7,0x02, 0x00,0x00, 0x97,0x36, 0x00,0x04, 0xF7,0x04,
13700x35,0x3C, 0xF6,0x84, 0x35,0x28, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x35,0x3C, 0xF7,0x04,
13710x35,0x3C, 0x87,0x36, 0x14,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
13720x14,0x1C, 0xF7,0x04, 0x76,0x04, 0x86,0xB6, 0x14,0x1C, 0xF6,0x04, 0x75,0xFC, 0x07,0x38,
13730x00,0x01, 0xF6,0x84, 0x76,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
13740x55,0x7C, 0xF7,0x05, 0x76,0x04, 0xF0,0x05, 0x76,0x04, 0xF6,0x84, 0x76,0x04, 0xF7,0x04,
13750x76,0x08, 0xF0,0x05, 0x75,0xFC, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x32,
13760x00,0x00, 0xE6,0x00, 0x55,0xE1, 0xF7,0x05, 0x75,0xF8, 0xF7,0x04, 0x76,0x48, 0xF3,0x86,
13770x72,0x18, 0xC0,0x3A, 0x3A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
13780x55,0xE1, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
13790x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x82, 0x00,0x0E, 0x20,0x32,
13800x00,0x44, 0xE6,0x00, 0x55,0xE0, 0xB3,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02,
13810x00,0x00, 0x20,0x2A, 0x00,0x02, 0xEE,0x00, 0x56,0xC8, 0xF6,0x82, 0x00,0x00, 0xF6,0x84,
13820x35,0x28, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
13830x00,0x02, 0xE6,0x00, 0x56,0x9C, 0x05,0xB4, 0x00,0x08, 0x95,0x93, 0xFF,0xFC, 0x95,0x16,
13840xFF,0xEC, 0x95,0x96, 0xFF,0xE8, 0x96,0x96, 0xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
13850x5E,0xDC, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xEC, 0x85,0x96, 0xFF,0xE8, 0x86,0x96,
13860xFF,0xE4, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x56,0x8C, 0xF7,0x02, 0x00,0x00, 0x86,0x36,
13870x00,0x0C, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x0F, 0xE2,0x00, 0x56,0x71, 0x00,0x00,
13880x00,0x01, 0x87,0x36, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
13890x00,0x14, 0x87,0x36, 0x00,0x14, 0xE0,0x00, 0x56,0x8C, 0xF7,0x02, 0x00,0x00, 0x76,0xB1,
13900x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x05, 0xC7,0x38, 0x6A,0x00, 0xC7,0x38,
13910x60,0x00, 0x07,0x38, 0x00,0x10, 0xC7,0x2C, 0x70,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
13920x55,0x08, 0xF7,0x05, 0x35,0x2C, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x4C, 0x00,0x00,
13930x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x56,0xBC, 0x07,0x34, 0x14,0x94, 0xF3,0x84,
13940x6F,0x44, 0xE0,0x00, 0x56,0xC0, 0xF3,0x85, 0x35,0x28, 0xF7,0x05, 0x35,0x28, 0xE0,0x00,
13950x55,0xE4, 0x05,0x28, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x57,0x01, 0xF6,0x86,
13960x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
13970x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x82, 0x00,0x0D, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
13980x57,0x08, 0xB3,0xBA, 0x68,0x02, 0xE0,0x00, 0x57,0x08, 0xF0,0x05, 0x2D,0x38, 0xF3,0x82,
13990x00,0x01, 0xF3,0x85, 0x35,0x24, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x44, 0xF3,0x86,
14000x32,0xF4, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x57,0x50, 0xF3,0x85, 0x35,0x30, 0xF7,0x04,
14010xE0,0x18, 0x00,0x00, 0x00,0x01, 0x77,0xB8, 0x00,0x1F, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
14020x57,0x51, 0x00,0x00, 0x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00,
14030x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0x87,0x96,
14040xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
14050x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x14, 0x87,0x02,
14060xFF,0x38, 0xF3,0x84, 0x35,0x2C, 0xF7,0x05, 0x35,0x54, 0x87,0x1E, 0x00,0x80, 0xF5,0x04,
14070x35,0x4C, 0x27,0x38, 0x00,0x01, 0xC0,0x2A, 0x72,0x00, 0xE6,0x00, 0x5A,0x4C, 0x00,0x00,
14080x00,0x01, 0xF5,0x84, 0x6F,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00,
14090x57,0xD8, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
14100x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
14110x57,0xCC, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xE0,0x00,
14120x57,0xDC, 0xF3,0x05, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF6,0x84, 0x35,0x2C, 0x00,0x00,
14130x00,0x01, 0x87,0x36, 0x00,0x94, 0xC3,0x04, 0x00,0x00, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00,
14140x58,0x41, 0x00,0x00, 0x00,0x01, 0x86,0x36, 0x00,0x94, 0xF6,0x84, 0x35,0x54, 0x00,0x00,
14150x00,0x01, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04, 0x35,0x54, 0x96,0x96, 0xFF,0xF4, 0x47,0x39,
14160x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xC6,0xB4, 0x70,0x00, 0xF7,0x04, 0x35,0x48, 0x77,0xB4,
14170x00,0x0F, 0x70,0x3E, 0xFF,0xE1, 0x07,0x38, 0x00,0x24, 0xE6,0x00, 0x58,0x39, 0xC6,0x38,
14180x60,0x00, 0x06,0xB4, 0x00,0x01, 0xC7,0x04, 0x6E,0x00, 0xF7,0x33, 0x28,0x00, 0xF6,0x84,
14190x35,0x44, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
14200x00,0x0F, 0xE2,0x00, 0x58,0x8D, 0x07,0x38, 0x00,0x01, 0x87,0x36, 0x00,0x0C, 0x00,0x00,
14210x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x00,0x0C, 0x87,0x36, 0x00,0x0C, 0xE0,0x00,
14220x58,0xA0, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38,
14230x00,0x08, 0xE0,0x00, 0x5A,0x38, 0xF7,0x05, 0x35,0x44, 0x20,0x3A, 0x00,0x10, 0xE6,0x00,
14240x58,0x9C, 0x00,0x00, 0x00,0x01, 0xF7,0x02, 0x00,0x00, 0x97,0x36, 0x00,0x04, 0xF7,0x04,
14250x35,0x3C, 0xF6,0x84, 0x35,0x28, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x35,0x3C, 0xF7,0x04,
14260x35,0x3C, 0x87,0x36, 0x14,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
14270x14,0x1C, 0xF7,0x04, 0x76,0x04, 0x86,0xB6, 0x14,0x1C, 0xF6,0x04, 0x75,0xFC, 0x07,0x38,
14280x00,0x01, 0xF6,0x84, 0x76,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
14290x58,0xEC, 0xF7,0x05, 0x76,0x04, 0xF0,0x05, 0x76,0x04, 0xF6,0x84, 0x76,0x04, 0xF7,0x04,
14300x76,0x08, 0xF0,0x05, 0x75,0xFC, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x32,
14310x00,0x00, 0xE6,0x00, 0x59,0x51, 0xF7,0x05, 0x75,0xF8, 0xF7,0x04, 0x76,0x48, 0xF3,0x06,
14320x72,0x18, 0xC0,0x3A, 0x32,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
14330x59,0x51, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
14340x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0E, 0x20,0x32,
14350x00,0x44, 0xE6,0x00, 0x59,0x50, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02,
14360x00,0x00, 0x20,0x2A, 0x00,0x02, 0xEE,0x00, 0x5A,0x38, 0xF6,0x82, 0x00,0x00, 0xF6,0x84,
14370x35,0x28, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
14380x00,0x02, 0xE6,0x00, 0x5A,0x0C, 0x05,0xB4, 0x00,0x08, 0x95,0x93, 0xFF,0xFC, 0x95,0x16,
14390xFF,0xEC, 0x95,0x96, 0xFF,0xE8, 0x96,0x96, 0xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
14400x5E,0xDC, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xEC, 0x85,0x96, 0xFF,0xE8, 0x86,0x96,
14410xFF,0xE4, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x59,0xFC, 0xF7,0x02, 0x00,0x00, 0x86,0x36,
14420x00,0x0C, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x0F, 0xE2,0x00, 0x59,0xE1, 0x00,0x00,
14430x00,0x01, 0x87,0x36, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
14440x00,0x14, 0x87,0x36, 0x00,0x14, 0xE0,0x00, 0x59,0xFC, 0xF7,0x02, 0x00,0x00, 0x76,0xB1,
14450x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x05, 0xC7,0x38, 0x6A,0x00, 0xC7,0x38,
14460x60,0x00, 0x07,0x38, 0x00,0x10, 0xC7,0x2C, 0x70,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
14470x58,0x78, 0xF7,0x05, 0x35,0x2C, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x4C, 0x00,0x00,
14480x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x5A,0x2C, 0x07,0x34, 0x14,0x94, 0xF3,0x04,
14490x6F,0x44, 0xE0,0x00, 0x5A,0x30, 0xF3,0x05, 0x35,0x28, 0xF7,0x05, 0x35,0x28, 0xE0,0x00,
14500x59,0x54, 0x05,0x28, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x5D,0xC4, 0xF3,0x02,
14510x00,0x01, 0xE0,0x00, 0x5D,0xF0, 0x00,0x00, 0x00,0x01, 0x77,0x29, 0x00,0x03, 0xC7,0x1C,
14520x70,0x00, 0x87,0x3A, 0x00,0x04, 0x05,0x28, 0x00,0x01, 0x76,0xA9, 0x00,0x03, 0xF4,0x84,
14530x35,0x54, 0xF6,0x04, 0x35,0x50, 0x94,0x82, 0xFF,0x38, 0xA4,0x1E, 0x68,0x02, 0xC6,0x30,
14540x70,0x00, 0x94,0x02, 0xFF,0x3C, 0x96,0x02, 0xFF,0x40, 0xC6,0x9C, 0x68,0x00, 0x87,0x36,
14550x00,0x04, 0x00,0x00, 0x00,0x01, 0x97,0x02, 0xFF,0x44, 0x85,0xB6, 0x00,0x04, 0xF7,0x04,
14560x35,0x40, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x58,0x00, 0xF7,0x05, 0x35,0x40, 0x85,0xB6,
14570x00,0x04, 0xF5,0x05, 0x35,0x4C, 0xF6,0x84, 0x35,0x28, 0xF6,0x05, 0x35,0x50, 0x87,0x36,
14580x14,0x14, 0x94,0x96, 0xFF,0xF4, 0xC7,0x38, 0x58,0x00, 0x97,0x36, 0x14,0x14, 0x87,0x1E,
14590x00,0x80, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x01, 0xEE,0x00, 0x5E,0x3C, 0x94,0x16,
14600xFF,0xF4, 0xF7,0x06, 0x0C,0x3E, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x5A,0xF4, 0x00,0x00,
14610x00,0x01, 0xC0,0x7E, 0x74,0x00, 0xE6,0x00, 0x5A,0xE5, 0x00,0x00, 0x00,0x01, 0xF7,0x06,
14620x0C,0x3E, 0xC7,0x7C, 0x74,0x00, 0x20,0x3A, 0x00,0x10, 0xE6,0x00, 0x5E,0x3C, 0x00,0x00,
14630x00,0x01, 0xFF,0x82, 0x00,0x10, 0x86,0x82, 0xFF,0x38, 0xF7,0x04, 0x35,0x58, 0xF5,0x84,
14640x6F,0x58, 0xF6,0x85, 0x35,0x54, 0x07,0x38, 0x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x00,
14650x5B,0x58, 0xF7,0x05, 0x35,0x58, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
14660x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
14670x5B,0x4C, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xE0,0x00,
14680x5B,0x5C, 0xF3,0x05, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF6,0x84, 0x35,0x2C, 0x00,0x00,
14690x00,0x01, 0x87,0x36, 0x00,0x94, 0xC3,0x04, 0x00,0x00, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00,
14700x5B,0xC1, 0x00,0x00, 0x00,0x01, 0x86,0x36, 0x00,0x94, 0xF6,0x84, 0x35,0x54, 0x00,0x00,
14710x00,0x01, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04, 0x35,0x54, 0x96,0x96, 0xFF,0xF4, 0x47,0x39,
14720x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xC6,0xB4, 0x70,0x00, 0xF7,0x04, 0x35,0x48, 0x77,0xB4,
14730x00,0x0F, 0x70,0x3E, 0xFF,0xE1, 0x07,0x38, 0x00,0x24, 0xE6,0x00, 0x5B,0xB9, 0xC6,0x38,
14740x60,0x00, 0x06,0xB4, 0x00,0x01, 0xC7,0x04, 0x6E,0x00, 0xF7,0x33, 0x28,0x00, 0xF6,0x84,
14750x35,0x44, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
14760x00,0x0F, 0xE2,0x00, 0x5C,0x0D, 0x07,0x38, 0x00,0x01, 0x87,0x36, 0x00,0x0C, 0x00,0x00,
14770x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x00,0x0C, 0x87,0x36, 0x00,0x0C, 0xE0,0x00,
14780x5C,0x20, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x35,0x28, 0xF6,0x82, 0x00,0x01, 0x07,0x38,
14790x00,0x08, 0xE0,0x00, 0x5D,0xB8, 0xF7,0x05, 0x35,0x44, 0x20,0x3A, 0x00,0x10, 0xE6,0x00,
14800x5C,0x1C, 0x00,0x00, 0x00,0x01, 0xF7,0x02, 0x00,0x00, 0x97,0x36, 0x00,0x04, 0xF7,0x04,
14810x35,0x3C, 0xF6,0x84, 0x35,0x28, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x35,0x3C, 0xF7,0x04,
14820x35,0x3C, 0x87,0x36, 0x14,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
14830x14,0x1C, 0xF7,0x04, 0x76,0x04, 0x86,0xB6, 0x14,0x1C, 0xF6,0x04, 0x75,0xFC, 0x07,0x38,
14840x00,0x01, 0xF6,0x84, 0x76,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00,
14850x5C,0x6C, 0xF7,0x05, 0x76,0x04, 0xF0,0x05, 0x76,0x04, 0xF6,0x84, 0x76,0x04, 0xF7,0x04,
14860x76,0x08, 0xF0,0x05, 0x75,0xFC, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x32,
14870x00,0x00, 0xE6,0x00, 0x5C,0xD1, 0xF7,0x05, 0x75,0xF8, 0xF7,0x04, 0x76,0x48, 0xF3,0x06,
14880x72,0x18, 0xC0,0x3A, 0x32,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
14890x5C,0xD1, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
14900x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0E, 0x20,0x32,
14910x00,0x44, 0xE6,0x00, 0x5C,0xD0, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02,
14920x00,0x00, 0x20,0x2A, 0x00,0x02, 0xEE,0x00, 0x5D,0xB8, 0xF6,0x82, 0x00,0x00, 0xF6,0x84,
14930x35,0x28, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
14940x00,0x02, 0xE6,0x00, 0x5D,0x8C, 0x05,0xB4, 0x00,0x08, 0x95,0x93, 0xFF,0xFC, 0x95,0x16,
14950xFF,0xEC, 0x95,0x96, 0xFF,0xE8, 0x96,0x96, 0xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
14960x5E,0xDC, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xEC, 0x85,0x96, 0xFF,0xE8, 0x86,0x96,
14970xFF,0xE4, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x5D,0x7C, 0xF7,0x02, 0x00,0x00, 0x86,0x36,
14980x00,0x0C, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x0F, 0xE2,0x00, 0x5D,0x61, 0x00,0x00,
14990x00,0x01, 0x87,0x36, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36,
15000x00,0x14, 0x87,0x36, 0x00,0x14, 0xE0,0x00, 0x5D,0x7C, 0xF7,0x02, 0x00,0x00, 0x76,0xB1,
15010x00,0x02, 0xC6,0xB4, 0x60,0x00, 0x77,0x35, 0x00,0x05, 0xC7,0x38, 0x6A,0x00, 0xC7,0x38,
15020x60,0x00, 0x07,0x38, 0x00,0x10, 0xC7,0x2C, 0x70,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
15030x5B,0xF8, 0xF7,0x05, 0x35,0x2C, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x4C, 0x00,0x00,
15040x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x5D,0xAC, 0x07,0x34, 0x14,0x94, 0xF3,0x04,
15050x6F,0x44, 0xE0,0x00, 0x5D,0xB0, 0xF3,0x05, 0x35,0x28, 0xF7,0x05, 0x35,0x28, 0xE0,0x00,
15060x5C,0xD4, 0x05,0x28, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x5D,0xF1, 0xF3,0x02,
15070x00,0x01, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
15080x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0D, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
15090x5D,0xF4, 0xB3,0x3A, 0x68,0x02, 0xE0,0x00, 0x5D,0xF4, 0xF0,0x05, 0x2D,0x38, 0xF3,0x05,
15100x35,0x24, 0xF6,0x84, 0x35,0x28, 0xF7,0x04, 0x6F,0x44, 0xF3,0x06, 0x32,0xF4, 0xC0,0x36,
15110x72,0x00, 0xE6,0x00, 0x5E,0x3C, 0xF3,0x05, 0x35,0x30, 0xF7,0x04, 0xE0,0x18, 0x00,0x00,
15120x00,0x01, 0x77,0xB8, 0x00,0x1F, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00, 0x5E,0x3D, 0x00,0x00,
15130x00,0x01, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38,
15140x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
15150xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
15160xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x35,0x30, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
15170x32,0xF4, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
15180xFF,0xFC, 0xF7,0x06, 0x35,0x30, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x33,0x80, 0x97,0x13,
15190xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
15200x35,0x30, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x34,0x0C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
15210x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x35,0x30, 0x97,0x13,
15220xFF,0xFC, 0xF7,0x06, 0x34,0x98, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
15230x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
15240x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
15250x00,0x08, 0x86,0x16, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x32, 0x00,0x04, 0x00,0x00,
15260x00,0x01, 0x20,0x3A, 0x00,0x0F, 0x86,0xB2, 0x00,0x00, 0xC5,0x38, 0x00,0x00, 0xEE,0x00,
15270x5F,0x2C, 0xC5,0xB4, 0x00,0x00, 0x20,0x36, 0x00,0x0F, 0xEE,0x00, 0x5F,0x2C, 0x00,0x00,
15280x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEC,0x00, 0x5F,0x2D, 0x00,0x00, 0x00,0x01, 0x20,0x36,
15290x00,0x00, 0xEC,0x00, 0x5F,0x48, 0x00,0x00, 0x00,0x01, 0x87,0x32, 0x00,0x0C, 0x00,0x00,
15300x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x32, 0x00,0x0C, 0x87,0x32, 0x00,0x0C, 0xE0,0x00,
15310x5F,0x50, 0xF4,0x02, 0x00,0x00, 0xC0,0x2A, 0x5A,0x00, 0x44,0x0C, 0x00,0x01, 0x87,0x96,
15320xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
15330x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF6,0x86,
15340x35,0x60, 0x96,0x93, 0xFF,0xFC, 0xF6,0x86, 0x42,0x30, 0x96,0x93, 0xFF,0xFC, 0x07,0x88,
15350x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82, 0x66,0xF8, 0x96,0x93,
15360xFF,0xFC, 0xF7,0x82, 0x00,0x17, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86, 0x35,0x60, 0x96,0x93,
15370xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82,
15380x69,0x80, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x18, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86,
15390x35,0x60, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
15400xFF,0xFC, 0xF6,0x82, 0x6B,0x50, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x16, 0x97,0x93,
15410xFF,0xFC, 0xF6,0x86, 0x35,0x60, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
15420x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82, 0x61,0x78, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82,
15430x00,0x1F, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86, 0x35,0x60, 0x96,0x93, 0xFF,0xFC, 0x07,0x88,
15440x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82, 0x62,0x7C, 0x96,0x93,
15450xFF,0xFC, 0xF7,0x82, 0x00,0x20, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86, 0x35,0x60, 0x96,0x93,
15460xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82,
15470x66,0xF8, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x17, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86,
15480x35,0xEC, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
15490xFF,0xFC, 0xF6,0x82, 0x69,0x80, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x18, 0x97,0x93,
15500xFF,0xFC, 0xF6,0x86, 0x35,0xEC, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
15510x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82, 0x6B,0x50, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82,
15520x00,0x16, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86, 0x35,0xEC, 0x96,0x93, 0xFF,0xFC, 0x07,0x88,
15530x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82, 0x61,0x78, 0x96,0x93,
15540xFF,0xFC, 0xF7,0x82, 0x00,0x1F, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86, 0x35,0xEC, 0x96,0x93,
15550xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF6,0x82,
15560x62,0x7C, 0x96,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x20, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86,
15570x35,0xEC, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
15580xFF,0xFC, 0xF7,0x04, 0xE0,0x28, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
15590x61,0x15, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0xE0,0x28, 0xE0,0x00, 0x61,0x18, 0x77,0x39,
15600x00,0x02, 0xF7,0x02, 0x00,0xF0, 0xF7,0x05, 0x42,0x28, 0xF7,0x06, 0x40,0x8A, 0xF0,0x3B,
15610x28,0x00, 0xF7,0x06, 0x40,0x8C, 0xF0,0x3B, 0x28,0x00, 0xF7,0x02, 0x00,0x00, 0xF7,0x05,
15620x7A,0xC0, 0xF7,0x05, 0x7A,0xB8, 0xF7,0x05, 0x7A,0xB0, 0xF7,0x05, 0x7A,0xC8, 0xF6,0x82,
15630xC3,0x50, 0x96,0x93, 0xFF,0xFC, 0xF6,0x82, 0x00,0x16, 0x96,0x93, 0xFF,0xFC, 0xF6,0x86,
15640x42,0x30, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93,
15650xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
15660x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF6,0x04,
15670x6F,0x34, 0x00,0x00, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x61,0xED, 0x76,0xB1,
15680x00,0x1E, 0x87,0x32, 0x00,0x00, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
15690xFF,0xF0, 0x20,0x3A, 0x00,0x07, 0xE6,0x00, 0x61,0xEC, 0x06,0xB0, 0x00,0x02, 0x87,0x36,
15700x00,0x00, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
15710xFF,0xF0, 0x20,0x3A, 0x00,0x01, 0xE6,0x00, 0x61,0xEC, 0xF5,0x06, 0x35,0xEC, 0xF7,0x04,
15720x42,0x30, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x52,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
15730x00,0x00, 0xE6,0x00, 0x62,0x11, 0xF5,0x82, 0x00,0x00, 0xF7,0x04, 0x42,0xA0, 0xF6,0x06,
15740x42,0xA2, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
15750xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xE0,0x00, 0x62,0x68, 0xF7,0x33, 0x28,0x00, 0x87,0x32,
15760x00,0x04, 0x00,0x00, 0x00,0x01, 0xF7,0x05, 0xE0,0x00, 0x86,0xB2, 0x00,0x08, 0x20,0x3A,
15770x00,0x00, 0xE6,0x00, 0x62,0x3C, 0xF6,0x85, 0xE0,0x04, 0x20,0x36, 0x00,0x00, 0xE6,0x00,
15780x62,0x40, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00,
15790x62,0x65, 0xF6,0x06, 0x42,0xA2, 0xF7,0x04, 0x42,0xA0, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
15800xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
15810x28,0x00, 0xF0,0x05, 0x42,0x28, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
15820x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
15830x00,0x08, 0xF7,0x04, 0x42,0x3C, 0xF6,0x84, 0x6F,0x34, 0x07,0x38, 0x00,0x01, 0x20,0x36,
15840x00,0x00, 0xE6,0x00, 0x62,0xB1, 0xF7,0x05, 0x42,0x3C, 0x87,0x36, 0x00,0x00, 0xF5,0x9E,
15850x00,0x02, 0xC0,0x3A, 0x5A,0x00, 0xE6,0x00, 0x62,0xBD, 0xF5,0x86, 0x35,0xEC, 0xF7,0x04,
15860x42,0xA0, 0xE0,0x00, 0x62,0xDC, 0xF6,0x06, 0x42,0xA2, 0xF7,0x04, 0x42,0x30, 0x00,0x00,
15870x00,0x01, 0xC0,0x3A, 0x5A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
15880x62,0xF9, 0xF6,0x06, 0x42,0xA4, 0xF7,0x04, 0x42,0xA4, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
15890xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xE0,0x00,
15900x63,0x0C, 0xF7,0x33, 0x28,0x00, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
15910x63,0x20, 0x97,0x93, 0xFF,0xFC, 0xF0,0x05, 0x42,0x28, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
15920xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
15930xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x20, 0x83,0x16, 0x00,0x00, 0x00,0x00,
15940x00,0x01, 0x87,0x1A, 0x00,0x18, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
15950x63,0x6C, 0xF7,0x02, 0x00,0x00, 0x83,0x9A, 0x00,0x1C, 0x00,0x00, 0x00,0x01, 0xF3,0x85,
15960x7A,0xC0, 0x84,0x9A, 0x00,0x14, 0xF7,0x05, 0x7A,0xC8, 0xF4,0x85, 0x7A,0xB0, 0xF7,0x05,
15970x7A,0xB8, 0x83,0x16, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x86,0x9A, 0x00,0x14, 0xF7,0x04,
15980x7A,0xB0, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x63,0xD0, 0xF6,0x02,
15990x00,0x00, 0x86,0x9A, 0x00,0x1C, 0xF7,0x04, 0x7A,0xC0, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
16000x72,0x00, 0xE6,0x00, 0x63,0xD0, 0x00,0x00, 0x00,0x01, 0x86,0x9A, 0x00,0x18, 0xF7,0x04,
16010x7A,0xB8, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x63,0xD0, 0x00,0x00,
16020x00,0x01, 0x86,0x9A, 0x00,0x20, 0xF7,0x04, 0x7A,0xC8, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
16030x68,0x00, 0x20,0x3A, 0x00,0x64, 0xEE,0x00, 0x63,0xD9, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
16040x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x64,0x58, 0x00,0x00, 0x00,0x01, 0x83,0x96,
16050x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x1E, 0x00,0x18, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
16060x00,0x00, 0xE6,0x00, 0x64,0x3C, 0xF7,0x02, 0x00,0x00, 0xF7,0x05, 0x40,0x80, 0xF7,0x05,
16070x40,0x84, 0xF6,0x84, 0x6E,0x50, 0xF4,0x82, 0xFF,0xFF, 0x83,0x1E, 0x00,0x0C, 0xF4,0x85,
16080x4F,0x54, 0x93,0x36, 0x00,0x10, 0x83,0x9E, 0x00,0x10, 0x84,0x96, 0x00,0x00, 0x93,0xB6,
16090x00,0x14, 0x84,0xA6, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0x94,0xB6, 0x1D,0xDC, 0xF6,0x82,
16100x00,0x64, 0xF6,0x85, 0x4A,0x98, 0xF7,0x05, 0x4A,0x9C, 0x83,0x16, 0x00,0x00, 0x00,0x00,
16110x00,0x01, 0x87,0x1A, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEE,0x00,
16120x64,0x7C, 0xF3,0x82, 0x00,0x00, 0xF7,0x04, 0x42,0xA4, 0xF6,0x06, 0x42,0xA6, 0x76,0xB1,
16130x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
16140x00,0x01, 0xE0,0x00, 0x66,0xE4, 0xF7,0x33, 0x28,0x00, 0x93,0x96, 0xFF,0xF4, 0x84,0x16,
16150x00,0x00, 0xF4,0x86, 0x42,0xC8, 0x94,0x96, 0xFF,0xEC, 0xF3,0x02, 0x00,0x0C, 0x93,0x16,
16160xFF,0xE4, 0x83,0x96, 0x00,0x00, 0x84,0x96, 0xFF,0xF4, 0x87,0x1E, 0x00,0x20, 0x00,0x00,
16170x00,0x01, 0xC0,0x26, 0x72,0x00, 0xEC,0x00, 0x66,0x48, 0xF3,0x86, 0x4A,0x98, 0x84,0xA2,
16180x00,0x24, 0x83,0x16, 0xFF,0xE4, 0xC5,0x04, 0x00,0x00, 0xB4,0x9A, 0x38,0x02, 0xC7,0x18,
16190x38,0x00, 0x83,0x22, 0x00,0x28, 0x83,0x96, 0xFF,0xF4, 0x84,0x96, 0xFF,0xE4, 0x93,0x3A,
16200x00,0x04, 0x93,0xBA, 0x00,0x08, 0xF6,0x04, 0xE0,0x00, 0xF3,0x06, 0x4A,0x98, 0xA6,0xA6,
16210x30,0x02, 0xF5,0x82, 0x00,0x00, 0xC0,0x32, 0x6A,0x00, 0xE6,0x00, 0x65,0x10, 0xC6,0x38,
16220x00,0x00, 0xF6,0x84, 0xE0,0x04, 0x87,0x32, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
16230x72,0x00, 0xE6,0x00, 0x65,0x14, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
16240x00,0x00, 0xE6,0x00, 0x65,0x21, 0x00,0x00, 0x00,0x01, 0xF5,0x02, 0x00,0x00, 0xF6,0x84,
16250xE0,0x00, 0x87,0x32, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
16260x65,0x5C, 0xF5,0x82, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x65,0x64, 0x20,0x2E,
16270x00,0x00, 0xF6,0x84, 0xE0,0x04, 0x87,0x32, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
16280x72,0x00, 0xE2,0x00, 0x65,0x65, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
16290x00,0x00, 0xE6,0x00, 0x65,0x75, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A,
16300x00,0x00, 0xE6,0x00, 0x65,0x88, 0x00,0x00, 0x00,0x01, 0x83,0x96, 0xFF,0xF4, 0x00,0x00,
16310x00,0x01, 0xF3,0x85, 0x4F,0x54, 0x87,0x22, 0x00,0x2C, 0x76,0xA1, 0x00,0x1E, 0x76,0xB4,
16320xFF,0xE5, 0x05,0xA0, 0x00,0x2E, 0x76,0x2D, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xF4,0x82,
16330x00,0x00, 0x94,0x96, 0xFF,0xDC, 0x83,0x16, 0xFF,0xEC, 0x20,0x26, 0x00,0x07, 0xC7,0x38,
16340x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x87,0x2E, 0x00,0x00, 0x06,0x98,
16350x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xE2,0x00, 0x66,0x1C, 0xF7,0x37,
16360x28,0x00, 0x85,0x16, 0xFF,0xEC, 0x85,0x96, 0xFF,0xDC, 0x00,0x00, 0x00,0x01, 0xC7,0x2C,
16370x40,0x00, 0x86,0xBA, 0x00,0x30, 0x06,0x28, 0x00,0x04, 0x05,0x28, 0x00,0x02, 0x05,0xAC,
16380x00,0x02, 0x83,0x96, 0xFF,0xDC, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x03,0x9C,
16390x00,0x01, 0x93,0x96, 0xFF,0xDC, 0x20,0x1E, 0x00,0x07, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB4,
16400xFF,0xF0, 0xE2,0x00, 0x65,0xE1, 0xF6,0xB3, 0x28,0x00, 0x04,0x20, 0x00,0x1C, 0x84,0x96,
16410xFF,0xEC, 0x83,0x16, 0xFF,0xE4, 0x83,0x96, 0xFF,0xF4, 0x04,0xA4, 0x00,0x14, 0x94,0x96,
16420xFF,0xEC, 0x03,0x18, 0x00,0x0C, 0x93,0x16, 0xFF,0xE4, 0x03,0x9C, 0x00,0x01, 0xE0,0x00,
16430x64,0x94, 0x93,0x96, 0xFF,0xF4, 0x84,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x26,
16440x00,0x20, 0x00,0x00, 0x00,0x01, 0xF7,0x05, 0x4A,0x9C, 0x85,0xA6, 0x00,0x20, 0xF7,0x04,
16450x7A,0xB8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x7A,0xB8, 0xF7,0x04,
16460x7A,0xB8, 0xF6,0x84, 0x7A,0xC8, 0x86,0x26, 0x00,0x18, 0xC6,0xB4, 0x58,0x00, 0x87,0x26,
16470x00,0x1C, 0x00,0x00, 0x00,0x01, 0x27,0x38, 0x00,0x01, 0xC0,0x32, 0x72,0x00, 0x47,0x0C,
16480x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x66,0xE5, 0xF6,0x85, 0x7A,0xC8, 0x83,0x26,
16490x00,0x08, 0xF7,0x04, 0x6E,0x50, 0xF3,0x05, 0x3B,0x64, 0x83,0xA6, 0x00,0x08, 0xF6,0x82,
16500x00,0x00, 0x93,0xBA, 0x1D,0xDC, 0x84,0xA6, 0x00,0x0C, 0x83,0x16, 0x00,0x00, 0x94,0xBA,
16510x00,0x10, 0x83,0x1A, 0x00,0x10, 0xF6,0x85, 0x7A,0xC8, 0x93,0x3A, 0x00,0x14, 0xF7,0x02,
16520x00,0x01, 0xF7,0x05, 0x40,0x84, 0xF6,0x85, 0x7A,0xC0, 0xF6,0x85, 0x7A,0xB8, 0xF6,0x85,
16530x7A,0xB0, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C,
16540x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
16550x00,0x08, 0xF3,0x84, 0x6F,0x34, 0x00,0x00, 0x00,0x01, 0x87,0x1E, 0x00,0x18, 0xF6,0x84,
16560xE0,0x1C, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x00, 0x67,0x29, 0xF7,0x02,
16570x00,0x01, 0xF7,0x02, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x67,0xE8, 0xF5,0x82,
16580x00,0x01, 0xF7,0x04, 0xE0,0x1C, 0x86,0x9E, 0x00,0x18, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
16590x6A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x67,0xE9, 0xC5,0x84,
16600x00,0x00, 0x86,0x9E, 0x00,0x10, 0xF7,0x04, 0xE0,0x00, 0xF6,0x02, 0x00,0x00, 0xC0,0x36,
16610x72,0x00, 0xE6,0x00, 0x67,0x88, 0x05,0x1C, 0x00,0x10, 0x86,0x9E, 0x00,0x14, 0xF7,0x04,
16620xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x67,0x8C, 0x20,0x32,
16630x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x67,0x99, 0x00,0x00,
16640x00,0x01, 0xF5,0x82, 0x00,0x00, 0x86,0xAA, 0x00,0x00, 0xF7,0x04, 0xE0,0x00, 0x00,0x00,
16650x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x67,0xD4, 0xF6,0x02, 0x00,0x00, 0xC0,0x36,
16660x72,0x00, 0xE6,0x00, 0x67,0xDC, 0x20,0x32, 0x00,0x00, 0x86,0xAA, 0x00,0x04, 0xF7,0x04,
16670xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x67,0xDD, 0x20,0x32,
16680x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x67,0xED, 0x20,0x2E,
16690x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x68,0x10, 0xF6,0x06,
16700x42,0x9C, 0xF7,0x04, 0x42,0x9C, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
16710x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0xF7,0x04,
16720x75,0xF4, 0x75,0xAC, 0xFF,0xE1, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x68,0x45, 0x95,0x96,
16730xFF,0xF4, 0xF7,0x04, 0x42,0x98, 0xF6,0x06, 0x42,0x98, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
16740xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
16750x28,0x00, 0x87,0x1E, 0x00,0x20, 0x04,0x1C, 0x00,0x20, 0x76,0xA1, 0x00,0x1E, 0x76,0xB4,
16760xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x20,0x3A, 0x00,0x08, 0xEE,0x00,
16770x68,0xC4, 0xF3,0x06, 0x15,0x54, 0xF5,0x02, 0x00,0x00, 0x05,0x9C, 0x00,0x22, 0xC4,0xAC,
16780x00,0x00, 0xF6,0x02, 0x00,0x01, 0x87,0x22, 0x00,0x00, 0x76,0xA1, 0x00,0x1E, 0x76,0xB4,
16790xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC0,0x2A, 0x72,0x00, 0xEC,0x00,
16800x68,0xC0, 0xC6,0xA4, 0x60,0x00, 0xA7,0x26, 0x60,0x02, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
16810xFF,0xE5, 0x05,0x28, 0x00,0x01, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xE8, 0xF7,0x2F,
16820x68,0x00, 0x05,0xAC, 0x00,0x01, 0xE0,0x00, 0x68,0x78, 0x06,0x30, 0x00,0x02, 0xF3,0x06,
16830x15,0x54, 0x93,0x13, 0xFF,0xFC, 0xF7,0x04, 0xE0,0x24, 0x00,0x00, 0x00,0x01, 0x97,0x13,
16840xFF,0xFC, 0xF7,0x04, 0xE0,0x1C, 0x00,0x00, 0x00,0x01, 0x97,0x13, 0xFF,0xFC, 0xF3,0x06,
16850xE0,0x00, 0x93,0x13, 0xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0xF3,0x02, 0x00,0x01, 0x93,0x13,
16860xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xEE,0x64, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
16870x00,0x00, 0xE6,0x00, 0x69,0x28, 0xF6,0x06, 0x42,0x9E, 0xF7,0x04, 0x42,0x9C, 0x76,0xB1,
16880x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
16890x00,0x01, 0xF7,0x33, 0x28,0x00, 0x83,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x20,0x1A,
16900x00,0x00, 0xE6,0x00, 0x69,0x6C, 0xF3,0x06, 0x35,0xEC, 0xF7,0x04, 0x42,0x30, 0x00,0x00,
16910x00,0x01, 0xC0,0x3A, 0x32,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
16920x69,0x6D, 0xF0,0x05, 0x42,0x28, 0xF3,0x06, 0x35,0x60, 0xF3,0x05, 0x42,0x30, 0x07,0x88,
16930x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
16940xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
16950xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x04, 0xF5,0x04, 0x6F,0x34, 0xF7,0x04,
16960x42,0x40, 0x86,0x2A, 0x00,0x18, 0x07,0x38, 0x00,0x01, 0xF6,0x84, 0xE0,0x1C, 0xF7,0x05,
16970x42,0x40, 0xC0,0x36, 0x62,0x00, 0xEC,0x00, 0x69,0xB5, 0xF7,0x02, 0x00,0x01, 0xF7,0x02,
16980x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x6A,0x80, 0xF7,0x02, 0x00,0x01, 0xF7,0x04,
16990xE0,0x1C, 0x86,0xAA, 0x00,0x18, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C,
17000x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x6A,0x7D, 0xC5,0x84, 0x00,0x00, 0x86,0xAA,
17010x00,0x10, 0xF7,0x04, 0xE0,0x00, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
17020x6A,0x14, 0x04,0xA8, 0x00,0x10, 0x86,0xAA, 0x00,0x14, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
17030x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x6A,0x18, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
17040x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x6A,0x25, 0x00,0x00, 0x00,0x01, 0xF5,0x82,
17050x00,0x00, 0x86,0xA6, 0x00,0x00, 0xF7,0x04, 0xE0,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
17060x72,0x00, 0xE2,0x00, 0x6A,0x60, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
17070x6A,0x68, 0x20,0x32, 0x00,0x00, 0x86,0xA6, 0x00,0x04, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
17080x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x6A,0x69, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
17090x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x6A,0x81, 0xC7,0x2C, 0x00,0x00, 0xF5,0x82,
17100x00,0x01, 0xE0,0x00, 0x6A,0x80, 0xC7,0x2C, 0x00,0x00, 0xC7,0x04, 0x00,0x00, 0x20,0x3A,
17110x00,0x00, 0xEE,0x00, 0x6B,0x3D, 0xF6,0x86, 0x40,0x8A, 0xF7,0x04, 0x40,0x88, 0x76,0xB5,
17120x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A,
17130x00,0x00, 0xE6,0x00, 0x6B,0x3C, 0xF6,0x82, 0x00,0x00, 0xF6,0x85, 0x40,0x80, 0xF6,0x85,
17140x40,0x84, 0x96,0x93, 0xFF,0xFC, 0x96,0x93, 0xFF,0xFC, 0xF7,0x04, 0xE0,0x1C, 0x00,0x00,
17150x00,0x01, 0x97,0x13, 0xFF,0xFC, 0xF3,0x86, 0xE0,0x00, 0x93,0x93, 0xFF,0xFC, 0x95,0x13,
17160xFF,0xFC, 0xF3,0x82, 0x00,0x02, 0x93,0x93, 0xFF,0xFC, 0x96,0x96, 0xFF,0xF4, 0x07,0x88,
17170x00,0x08, 0xE0,0x00, 0xEE,0x64, 0x97,0x93, 0xFF,0xFC, 0xF4,0x05, 0x40,0x84, 0x86,0x96,
17180xFF,0xF4, 0xF7,0x04, 0x6E,0x50, 0xF3,0x86, 0x35,0xEC, 0xF6,0x85, 0x40,0x90, 0xF6,0x85,
17190x40,0x94, 0x87,0x3A, 0x1D,0xDC, 0xF6,0x85, 0x42,0x28, 0xF7,0x05, 0x3B,0x64, 0xF7,0x04,
17200x42,0x30, 0xF4,0x05, 0x40,0x80, 0xC0,0x3A, 0x3A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
17210x00,0x00, 0xE6,0x00, 0x6B,0x3D, 0xF3,0x86, 0x35,0x60, 0xF3,0x85, 0x42,0x30, 0x07,0x88,
17220x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
17230xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
17240xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF4,0x86, 0x42,0x30, 0x94,0x93, 0xFF,0xFC, 0x07,0x88,
17250x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
17260x6D,0xD9, 0xF5,0x82, 0x00,0x00, 0xF7,0x04, 0x40,0x8C, 0xF6,0x06, 0x40,0x8C, 0x76,0x31,
17270x00,0x1E, 0xF6,0x84, 0x42,0x28, 0x76,0x30, 0xFF,0xE5, 0x06,0xB4, 0x00,0x01, 0xC7,0x38,
17280x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x6B,0xC8, 0xF6,0x85,
17290x42,0x28, 0xF7,0x04, 0x40,0x88, 0xF6,0x86, 0x40,0x8A, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
17300xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
17310x6D,0x0D, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x40,0x8C, 0xF6,0x86, 0x40,0x8C, 0x76,0xB5,
17320x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A,
17330x00,0x00, 0xE6,0x00, 0x6C,0x35, 0xF6,0x06, 0x40,0x8A, 0xF7,0x04, 0x40,0x88, 0x76,0xB1,
17340x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A,
17350x00,0x00, 0xE6,0x00, 0x6C,0x34, 0xF4,0x86, 0x36,0x78, 0xF7,0x04, 0x42,0x44, 0x00,0x00,
17360x00,0x01, 0xC0,0x3A, 0x4A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
17370x6C,0x35, 0xF4,0x82, 0x00,0x01, 0xF4,0xB3, 0x28,0x00, 0xE0,0x00, 0x6D,0x10, 0xF0,0x05,
17380x42,0x2C, 0xF7,0x04, 0x40,0x8C, 0xF5,0x06, 0x40,0x8C, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4,
17390xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
17400x6C,0xC1, 0xF6,0x06, 0x40,0x8A, 0xF7,0x04, 0x40,0x88, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
17410xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
17420x6C,0xC1, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x2C, 0x00,0x00, 0x00,0x01, 0x07,0x38,
17430x00,0x01, 0x20,0x3A, 0x00,0x09, 0xEE,0x00, 0x6D,0x11, 0xF7,0x05, 0x42,0x2C, 0xF0,0x2B,
17440x28,0x00, 0xF0,0x33, 0x28,0x00, 0xF5,0x82, 0x00,0x01, 0xF7,0x04, 0x42,0x94, 0xF6,0x06,
17450x42,0x94, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
17460xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xE0,0x00, 0x6D,0x10, 0xF7,0x33, 0x28,0x00, 0xF7,0x04,
17470x40,0x8C, 0xF6,0x86, 0x40,0x8C, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
17480x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x6D,0x14, 0x20,0x2E,
17490x00,0x00, 0xF7,0x04, 0x40,0x88, 0xF6,0x06, 0x40,0x8A, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
17500xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
17510x6D,0x15, 0x20,0x2E, 0x00,0x00, 0xF0,0x33, 0x28,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
17520x00,0x00, 0xE6,0x00, 0x6D,0xB5, 0xF4,0x86, 0x35,0xEC, 0xF7,0x04, 0x42,0x30, 0x00,0x00,
17530x00,0x01, 0xC0,0x3A, 0x4A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
17540x6D,0x59, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0xE0,0x28, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
17550x00,0x00, 0xE6,0x00, 0x6D,0x79, 0xF6,0x82, 0x00,0x3C, 0xF6,0x84, 0xE0,0x28, 0xE0,0x00,
17560x6D,0x78, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0xE0,0x28, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
17570x00,0x00, 0xE6,0x00, 0x6D,0x79, 0xF6,0x82, 0x00,0xF0, 0xF7,0x04, 0xE0,0x28, 0x00,0x00,
17580x00,0x01, 0x76,0xB9, 0x00,0x02, 0xF7,0x04, 0x42,0x28, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
17590x6A,0x00, 0xEC,0x00, 0x6D,0xB5, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0xF0,0x05,
17600x42,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82,
17610x00,0x19, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x6D,0xB4, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05,
17620x2D,0x38, 0xF4,0x82, 0xC3,0x50, 0x94,0x93, 0xFF,0xFC, 0xF4,0x82, 0x00,0x16, 0x94,0x93,
17630xFF,0xFC, 0xF4,0x86, 0x42,0x30, 0x94,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
17640x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
17650x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
17660x00,0x08, 0x22,0x10, 0x00,0x04, 0xF5,0x86, 0x36,0x78, 0x95,0x93, 0xFF,0xFC, 0xF5,0x86,
17670x42,0x44, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
17680xFF,0xFC, 0xF5,0x82, 0x74,0x18, 0x95,0x93, 0xFF,0xFC, 0xF5,0x82, 0x00,0x19, 0x95,0x93,
17690xFF,0xFC, 0xF5,0x86, 0x36,0x78, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
17700x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x74,0xAC, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82,
17710x00,0x1D, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x37,0x04, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
17720x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x78,0x00, 0x95,0x93,
17730xFF,0xFC, 0xF7,0x82, 0x00,0x1B, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x37,0x04, 0x95,0x93,
17740xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82,
17750x78,0xFC, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1A, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86,
17760x37,0x90, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
17770xFF,0xFC, 0xF5,0x82, 0x80,0xD8, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1B, 0x97,0x93,
17780xFF,0xFC, 0xF5,0x86, 0x37,0x90, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
17790x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x81,0x74, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82,
17800x00,0x1D, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x38,0x1C, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
17810x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x87,0x74, 0x95,0x93,
17820xFF,0xFC, 0xF7,0x82, 0x00,0x1B, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x38,0x1C, 0x95,0x93,
17830xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82,
17840x94,0xF8, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1B, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86,
17850x39,0x34, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
17860xFF,0xFC, 0xF5,0x82, 0x8A,0x00, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1C, 0x97,0x93,
17870xFF,0xFC, 0xF5,0x86, 0x39,0x34, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
17880x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x8E,0x08, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82,
17890x00,0x1A, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x39,0x34, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
17900x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x96,0x9C, 0x95,0x93,
17910xFF,0xFC, 0xF7,0x82, 0x00,0x1E, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x38,0xA8, 0x95,0x93,
17920xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82,
17930x9B,0x2C, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1B, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86,
17940x38,0xA8, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
17950xFF,0xFC, 0xF5,0x82, 0xA2,0xDC, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1E, 0x97,0x93,
17960xFF,0xFC, 0xF5,0x86, 0x3A,0xD8, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
17970x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0x9E,0x54, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82,
17980x00,0x1B, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x3A,0xD8, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
17990x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0xA3,0xC0, 0x95,0x93,
18000xFF,0xFC, 0xF7,0x82, 0x00,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x39,0xC0, 0x95,0x93,
18010xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82,
18020xA7,0x64, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1E, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86,
18030x39,0xC0, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
18040xFF,0xFC, 0xF5,0x82, 0xAA,0x04, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82, 0x00,0x1B, 0x97,0x93,
18050xFF,0xFC, 0xF5,0x86, 0x39,0xC0, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
18060x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x82, 0xAE,0xF8, 0x95,0x93, 0xFF,0xFC, 0xF7,0x82,
18070x00,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x3A,0x4C, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
18080x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x50, 0xF0,0x3B,
18090x28,0x00, 0xF7,0x06, 0x40,0x88, 0xF0,0x3B, 0x28,0x00, 0xF6,0x02, 0x00,0x00, 0xF6,0x05,
18100x40,0x80, 0xF6,0x05, 0x40,0x84, 0xF7,0x06, 0x3B,0x70, 0xF6,0x3B, 0x28,0x00, 0xF7,0x06,
18110x3B,0x72, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82, 0xCA,0x20, 0xF5,0x85, 0x3B,0x74, 0xF7,0x06,
18120x3B,0x78, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06, 0x3B,0x7A, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82,
18130xB1,0x94, 0xF5,0x85, 0x3B,0x7C, 0xF7,0x06, 0x3B,0x80, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06,
18140x3B,0x82, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82, 0xC7,0x54, 0xF5,0x85, 0x3B,0x84, 0xF7,0x06,
18150x3B,0x88, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06, 0x3B,0x8A, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82,
18160xBE,0xF8, 0xF5,0x85, 0x3B,0x8C, 0xF7,0x06, 0x3B,0x90, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06,
18170x3B,0x92, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82, 0xC8,0xF8, 0xF5,0x85, 0x3B,0x94, 0xF7,0x06,
18180x3B,0x98, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06, 0x3B,0x9A, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82,
18190xC5,0xD8, 0xF5,0x85, 0x3B,0x9C, 0xF7,0x06, 0x3B,0xA0, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06,
18200x3B,0xA2, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82, 0xC7,0x70, 0xF5,0x85, 0x3B,0xA4, 0xF7,0x06,
18210x3B,0xA8, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06, 0x3B,0xAA, 0xF0,0xBB, 0x28,0x00, 0xF5,0x82,
18220xC1,0xB4, 0xF5,0x85, 0x3B,0xAC, 0x96,0x16, 0xFF,0xF4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
18230xD5,0x40, 0x97,0x93, 0xFF,0xFC, 0xF6,0x84, 0x6E,0x50, 0x86,0x16, 0xFF,0xF4, 0x00,0x00,
18240x00,0x01, 0x96,0x36, 0x1D,0xDC, 0xF6,0x05, 0x3B,0x64, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
18250xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
18260xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x30, 0x25,0x94, 0x00,0x20, 0xF0,0x2F,
18270x28,0x00, 0x26,0x14, 0x00,0x38, 0xF0,0x33, 0x28,0x00, 0x90,0x13, 0xFF,0xFC, 0xF7,0x04,
18280x42,0x50, 0xF6,0x86, 0x42,0x50, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
18290x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x96,0x13, 0xFF,0xFC, 0x95,0x93,
18300xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xF5,0xF4, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
18310x00,0x00, 0xE6,0x00, 0x72,0x1D, 0xF5,0x02, 0x17,0x70, 0xF7,0x04, 0x42,0x54, 0x00,0x00,
18320x00,0x01, 0x27,0x38, 0x00,0x01, 0xF7,0x05, 0x42,0x54, 0x95,0x13, 0xFF,0xFC, 0xF5,0x02,
18330x00,0x1B, 0x95,0x13, 0xFF,0xFC, 0xF5,0x06, 0x42,0x44, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
18340x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
18350xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
18360xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04, 0xE0,0x04, 0x86,0x16, 0x00,0x00, 0xF6,0x82,
18370x00,0xFF, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38, 0x6C,0x00, 0xF7,0x33, 0x28,0x00, 0xF7,0x06,
18380xE0,0x06, 0x87,0x3A, 0x00,0x00, 0x06,0xB0, 0x00,0x02, 0xF7,0x37, 0x28,0x00, 0xF6,0x84,
18390x3B,0x64, 0x07,0x30, 0x00,0x04, 0xF6,0xBB, 0x28,0x00, 0x87,0x02, 0xFF,0x34, 0x06,0x30,
18400x00,0x06, 0xF7,0x33, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
18410x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
18420x00,0x08, 0x22,0x10, 0x00,0x30, 0x26,0x14, 0x00,0x20, 0xF0,0x33, 0x28,0x00, 0x27,0x14,
18430x00,0x38, 0xF0,0x3B, 0x28,0x00, 0x97,0x13, 0xFF,0xFC, 0x90,0x93, 0xFF,0xFC, 0xF7,0x04,
18440x42,0x50, 0xF6,0x86, 0x42,0x50, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
18450x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x96,0x13, 0xFF,0xFC, 0x07,0x88,
18460x00,0x08, 0xE0,0x00, 0xF3,0x38, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
18470x73,0x19, 0xF5,0x82, 0x17,0x70, 0xF7,0x04, 0x42,0x54, 0x00,0x00, 0x00,0x01, 0x27,0x38,
18480x00,0x01, 0xF7,0x05, 0x42,0x54, 0x95,0x93, 0xFF,0xFC, 0xF5,0x82, 0x00,0x1B, 0x95,0x93,
18490xFF,0xFC, 0xF5,0x86, 0x42,0x44, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
18500x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
18510x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
18520x00,0x08, 0x22,0x10, 0x00,0x40, 0x26,0x14, 0x00,0x20, 0x96,0x16, 0xFF,0xC4, 0xF0,0x33,
18530x28,0x00, 0x90,0x13, 0xFF,0xFC, 0x96,0x13, 0xFF,0xFC, 0x26,0x14, 0x00,0x38, 0x96,0x16,
18540xFF,0xBC, 0x96,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93,
18550xFF,0xFC, 0x90,0x13, 0xFF,0xFC, 0xF7,0x04, 0x42,0x50, 0xF6,0x86, 0x42,0x50, 0x76,0xB5,
18560x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x97,0x13,
18570xFF,0xFC, 0x86,0x16, 0xFF,0xBC, 0x00,0x00, 0x00,0x01, 0x96,0x13, 0xFF,0xFC, 0x86,0x16,
18580xFF,0xC4, 0x00,0x00, 0x00,0x01, 0x96,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
18590xF5,0xF4, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x73,0xE5, 0xF6,0x02,
18600x17,0x70, 0xF7,0x04, 0x42,0x54, 0x00,0x00, 0x00,0x01, 0x27,0x38, 0x00,0x01, 0xF7,0x05,
18610x42,0x54, 0x96,0x13, 0xFF,0xFC, 0xF6,0x02, 0x00,0x1B, 0x96,0x13, 0xFF,0xFC, 0xF6,0x06,
18620x42,0x44, 0x96,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93,
18630xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
18640x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
18650x00,0x04, 0xF5,0x82, 0x00,0x00, 0xF5,0x85, 0x40,0x80, 0x95,0x96, 0xFF,0xF4, 0x07,0x88,
18660x00,0x08, 0xE0,0x00, 0xCB,0x50, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xF4, 0xF5,0x02,
18670x00,0x64, 0xF5,0x05, 0x3B,0xB4, 0xF7,0x04, 0x42,0x50, 0xF4,0x86, 0x42,0x50, 0x76,0xA5,
18680x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF6,0x04, 0x4F,0x5C, 0xF4,0x02, 0x00,0x06, 0xF4,0x05,
18690x42,0x54, 0xF5,0x85, 0x3B,0x6C, 0xF5,0x85, 0x3B,0xB8, 0x95,0x32, 0x00,0x00, 0x95,0xB2,
18700x00,0x04, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x27,
18710x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x71,0xB0, 0x97,0x93, 0xFF,0xFC, 0xF4,0x06,
18720x37,0x04, 0xF4,0x05, 0x42,0x44, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
18730x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
18740x00,0x08, 0x22,0x10, 0x00,0x50, 0xF7,0x04, 0x42,0x50, 0xF6,0x86, 0x42,0x50, 0x76,0xB5,
18750x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF6,0x04, 0x6F,0x34, 0xC7,0x38, 0x6F,0xC0, 0x86,0xB2,
18760x00,0x0C, 0x77,0x39, 0xFF,0xF0, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x77,0xEC, 0xC5,0x04,
18770x00,0x00, 0x86,0xB2, 0x00,0x10, 0xF7,0x04, 0xE0,0x00, 0xF3,0x02, 0x00,0x00, 0xC0,0x36,
18780x72,0x00, 0xE6,0x00, 0x75,0x18, 0x04,0xB0, 0x00,0x10, 0x86,0xB2, 0x00,0x14, 0xF7,0x04,
18790xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x75,0x1C, 0x20,0x1A,
18800x00,0x00, 0xF3,0x02, 0x00,0x01, 0x20,0x1A, 0x00,0x00, 0xE6,0x00, 0x75,0x29, 0x00,0x00,
18810x00,0x01, 0xF5,0x02, 0x00,0x00, 0x86,0xA6, 0x00,0x00, 0xF7,0x04, 0xE0,0x00, 0x00,0x00,
18820x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x75,0x64, 0xF6,0x02, 0x00,0x00, 0xC0,0x36,
18830x72,0x00, 0xE6,0x00, 0x75,0x6C, 0x20,0x32, 0x00,0x00, 0x86,0xA6, 0x00,0x04, 0xF7,0x04,
18840xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x75,0x6D, 0x20,0x32,
18850x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x75,0x7D, 0x20,0x2A,
18860x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0x77,0xEC, 0x00,0x00,
18870x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x26,0x14,
18880x00,0x20, 0xF0,0x33, 0x28,0x00, 0x04,0xA0, 0x00,0x02, 0xF0,0x27, 0x28,0x00, 0xF5,0x82,
18890x00,0x00, 0x23,0x94, 0x00,0x22, 0xF5,0x9F, 0x28,0x00, 0x03,0xA0, 0x00,0x1A, 0x93,0x96,
18900xFF,0xD4, 0x25,0x94, 0x00,0x22, 0x85,0xAE, 0x00,0x00, 0x77,0xAD, 0x00,0x1E, 0x77,0xBC,
18910xFF,0xE5, 0xC5,0xAC, 0x7F,0xC0, 0x75,0xAD, 0xFF,0xF0, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
18920xFF,0xE5, 0x06,0xA4, 0x00,0x02, 0x23,0x14, 0x00,0x1E, 0x75,0x15, 0x00,0x1E, 0xF5,0x9F,
18930x28,0x00, 0xF3,0x84, 0xE0,0x00, 0x75,0x28, 0xFF,0xE5, 0x93,0xA2, 0x00,0x1C, 0xF5,0x84,
18940xE0,0x04, 0x73,0x99, 0x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96, 0xFF,0xAC, 0x73,0x95,
18950x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96, 0xFF,0xCC, 0x23,0x94, 0x00,0x42, 0x95,0xA2,
18960x00,0x20, 0x87,0x16, 0xFF,0xE0, 0x75,0x95, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x95,0x96,
18970xFF,0xB4, 0x75,0x95, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x95,0x96, 0xFF,0xC4, 0xC7,0x38,
18980x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0xF4,0x84, 0x4F,0x58, 0x87,0x1A,
18990x00,0x00, 0xC4,0xA0, 0x4A,0x00, 0x74,0xA4, 0xFF,0xFA, 0xC5,0xA4, 0x00,0x00, 0xF5,0x9F,
19000x28,0x00, 0x83,0x96, 0xFF,0xAC, 0x23,0x14, 0x00,0x1A, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
19010xFF,0xE5, 0x85,0x96, 0xFF,0xB4, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
19020x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x83,0x96, 0xFF,0xCC, 0xC7,0x38,
19030x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4,
19040x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
19050x00,0x02, 0x87,0x16, 0xFF,0xE8, 0x23,0x14, 0x00,0x16, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
19060xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A,
19070x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
19080x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xEC, 0x23,0x14, 0x00,0x12, 0x76,0x19,
19090x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
19100x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x85,0x96, 0xFF,0xC4, 0xC7,0x38,
19110x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0xF0, 0x06,0xB4,
19120x00,0x02, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF3,0x82,
19130x00,0x02, 0xF3,0xA3, 0x28,0x00, 0x04,0x20, 0x00,0x18, 0x25,0x94, 0x00,0x22, 0x85,0xAE,
19140x00,0x00, 0x77,0xAD, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC5,0xAC, 0x7F,0xC0, 0x75,0xAD,
19150xFF,0xF0, 0x83,0x96, 0xFF,0xD4, 0xF5,0xA3, 0x28,0x00, 0xF4,0x9F, 0x28,0x00, 0x25,0x94,
19160x00,0x42, 0x85,0xAE, 0x00,0x00, 0x77,0xAD, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC5,0xAC,
19170x7F,0xC0, 0x75,0xAD, 0xFF,0xF0, 0x44,0xAD, 0x00,0x00, 0x94,0x93, 0xFF,0xFC, 0xF7,0x86,
19180xE0,0x00, 0x97,0x93, 0xFF,0xFC, 0xF3,0x84, 0x4F,0x5C, 0x00,0x00, 0x00,0x01, 0x93,0x93,
19190xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x23,0x40, 0x97,0x93, 0xFF,0xFC, 0x07,0x88,
19200x00,0x08, 0xE0,0x00, 0x78,0xD8, 0x97,0x93, 0xFF,0xFC, 0xF0,0x05, 0x40,0x84, 0xF7,0x86,
19210xE0,0x00, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD5,0xA0, 0x97,0x93,
19220xFF,0xFC, 0xF7,0x04, 0x6E,0x50, 0xF4,0x05, 0x40,0x84, 0x87,0x3A, 0x1D,0xDC, 0x00,0x00,
19230x00,0x01, 0xF7,0x05, 0x3B,0x64, 0xF5,0x86, 0x36,0x78, 0xF5,0x85, 0x42,0x44, 0xF3,0x86,
19240x35,0x60, 0xF3,0x85, 0x42,0x30, 0xF5,0x86, 0x42,0x44, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
19250x00,0x08, 0xE0,0x01, 0x1F,0x48, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
19260xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
19270xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF5,0x86, 0x42,0x44, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
19280x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
19290x78,0x89, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
19300x00,0x00, 0xEE,0x00, 0x78,0x51, 0xF6,0x06, 0x42,0x50, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
19310x71,0xB0, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x78,0x88, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
19320x42,0x50, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF5,0x82, 0x00,0x06, 0xF5,0x85,
19330x42,0x54, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
19340x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x72,0xAC, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86,
19350x37,0x90, 0xF5,0x85, 0x42,0x44, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
19360x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
19370x00,0x08, 0xF6,0x06, 0x36,0x78, 0xF6,0x05, 0x42,0x44, 0xF7,0x02, 0x00,0x00, 0xF7,0x05,
19380x40,0x80, 0xF7,0x05, 0x40,0x94, 0xF6,0x84, 0x6E,0x50, 0xF7,0x05, 0x40,0x90, 0x97,0x36,
19390x1D,0xDC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
19400x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x02,
19410x00,0x01, 0xF7,0x05, 0x40,0x80, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
19420x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
19430x00,0x08, 0x22,0x10, 0x00,0xA8, 0xF7,0x04, 0x42,0x50, 0xF5,0x86, 0x42,0x50, 0x76,0xAD,
19440x00,0x1E, 0xF4,0x84, 0x6F,0x34, 0x76,0xB4, 0xFF,0xE5, 0x94,0x96, 0xFF,0xC4, 0xC7,0x38,
19450x6F,0xC0, 0x86,0xA6, 0x00,0x0C, 0x77,0x39, 0xFF,0xF0, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
19460x79,0x55, 0xF6,0x06, 0x42,0x9A, 0xF7,0x04, 0x42,0x98, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
19470xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
19480x28,0x00, 0xF7,0x04, 0x42,0x50, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x85,0x16,
19490xFF,0xC4, 0xC7,0x38, 0x6F,0xC0, 0x86,0xAA, 0x00,0x0C, 0x77,0x39, 0xFF,0xF0, 0xC0,0x36,
19500x72,0x00, 0xE6,0x00, 0x80,0xA8, 0xF6,0x06, 0x42,0x9A, 0x87,0x2A, 0x00,0x10, 0x86,0x2A,
19510x00,0x1C, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x79,0xA8, 0xF6,0x82, 0x00,0x00, 0x87,0x2A,
19520x00,0x14, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x79,0xAC, 0x20,0x36,
19530x00,0x00, 0xF6,0x82, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0x7A,0x05, 0x24,0x94,
19540x00,0x20, 0x94,0x96, 0xFF,0xBC, 0x85,0x16, 0xFF,0xC4, 0xF0,0x27, 0x28,0x00, 0x05,0x28,
19550x00,0x10, 0x95,0x16, 0xFF,0xB4, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
19560x72,0x50, 0x97,0x93, 0xFF,0xFC, 0x84,0x96, 0xFF,0xB4, 0x00,0x00, 0x00,0x01, 0x94,0x93,
19570xFF,0xFC, 0x85,0x16, 0xFF,0xBC, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
19580x00,0x08, 0xE0,0x00, 0xF9,0x34, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x80,0xC4, 0x00,0x00,
19590x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x80,0x6C, 0x00,0x00, 0x00,0x01, 0x07,0x88,
19600x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x25,0x94, 0x00,0x20, 0xF0,0x2F,
19610x28,0x00, 0x04,0xA0, 0x00,0x02, 0x94,0x96, 0xFF,0x5C, 0xF0,0x27, 0x28,0x00, 0xF4,0x82,
19620x00,0x00, 0x25,0x14, 0x00,0x5A, 0xF4,0xAB, 0x28,0x00, 0x07,0x20, 0x00,0x1A, 0x25,0x14,
19630x00,0x5A, 0x85,0x2A, 0x00,0x00, 0x77,0xA9, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC5,0x28,
19640x7F,0xC0, 0x75,0x29, 0xFF,0xF0, 0x75,0xAD, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x23,0x14,
19650x00,0x1E, 0x76,0x19, 0x00,0x1E, 0xF5,0x3B, 0x28,0x00, 0xF4,0x84, 0xE0,0x00, 0x76,0x30,
19660xFF,0xE5, 0x94,0xA2, 0x00,0x1C, 0xF5,0x04, 0xE0,0x04, 0x84,0x96, 0xFF,0x5C, 0x95,0x22,
19670x00,0x20, 0x87,0x16, 0xFF,0xE0, 0x06,0xA4, 0x00,0x02, 0x75,0x15, 0x00,0x1E, 0x75,0x28,
19680xFF,0xE5, 0x95,0x16, 0xFF,0x54, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96,
19690xFF,0x9C, 0x75,0x15, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x95,0x16, 0xFF,0x94, 0x74,0x95,
19700x00,0x1E, 0x85,0x16, 0xFF,0x5C, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0x8C, 0x84,0x96,
19710xFF,0x54, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x1A,
19720x00,0x00, 0x85,0x16, 0xFF,0x9C, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
19730x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x23,0x14, 0x00,0x1A, 0x76,0x19,
19740x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
19750x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x84,0x96, 0xFF,0x94, 0xC7,0x38,
19760x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
19770xFF,0xE8, 0x23,0x14, 0x00,0x16, 0x76,0x19, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
19780x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4,
19790x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
19800x00,0x02, 0x87,0x16, 0xFF,0xEC, 0x23,0x14, 0x00,0x12, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
19810xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A,
19820x00,0x00, 0x06,0xB4, 0x00,0x02, 0x85,0x16, 0xFF,0x8C, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
19830xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0xF0, 0x06,0xB4, 0x00,0x02, 0xC7,0x38,
19840x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF4,0x82, 0x00,0x02, 0xF4,0xA3,
19850x28,0x00, 0x25,0x14, 0x00,0x5A, 0x85,0x2A, 0x00,0x00, 0x77,0xA9, 0x00,0x1E, 0x77,0xBC,
19860xFF,0xE5, 0xC5,0x28, 0x7F,0xC0, 0x75,0x29, 0xFF,0xF0, 0x07,0x20, 0x00,0x18, 0xF5,0x3B,
19870x28,0x00, 0x94,0x16, 0xFF,0xAC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93,
19880xFF,0xFC, 0x26,0x14, 0x00,0x38, 0x24,0x94, 0x00,0x5A, 0x84,0xA6, 0x00,0x00, 0x77,0xA5,
19890x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC4,0xA4, 0x7F,0xC0, 0x74,0xA5, 0xFF,0xF0, 0x05,0xA0,
19900x00,0x02, 0x06,0xAC, 0x00,0x02, 0x23,0x94, 0x00,0x36, 0x75,0x1D, 0x00,0x1E, 0x75,0x28,
19910xFF,0xE5, 0x07,0x20, 0x00,0x1A, 0xF4,0xB3, 0x28,0x00, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
19920xFF,0xE5, 0x95,0x16, 0xFF,0x54, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96,
19930xFF,0x5C, 0x75,0x15, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x95,0x16, 0xFF,0x7C, 0x74,0x95,
19940x00,0x1E, 0x85,0x16, 0xFF,0xC4, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0x74, 0x85,0x2A,
19950x00,0x34, 0x24,0x94, 0x00,0x5A, 0x95,0x16, 0xFF,0x84, 0x84,0xA6, 0x00,0x00, 0x77,0xA5,
19960x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC4,0xA4, 0x7F,0xC0, 0x74,0xA5, 0xFF,0xF0, 0x25,0x14,
19970x00,0x5A, 0xF4,0xAF, 0x28,0x00, 0x85,0x2A, 0x00,0x00, 0x77,0xA9, 0x00,0x1E, 0x77,0xBC,
19980xFF,0xE5, 0xC5,0x28, 0x7F,0xC0, 0x75,0x29, 0xFF,0xF0, 0x84,0x96, 0xFF,0xC4, 0xF5,0x3B,
19990x28,0x00, 0x84,0xA6, 0x00,0x10, 0x85,0x16, 0xFF,0xC4, 0x94,0xA2, 0x00,0x1C, 0x85,0x2A,
20000x00,0x14, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0x6C, 0x95,0x22,
20010x00,0x20, 0x87,0x16, 0xFF,0xC8, 0x85,0x16, 0xFF,0x54, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
20020xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x87,0x1E, 0x00,0x00, 0x84,0x96, 0xFF,0x5C, 0xC7,0x38,
20030x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
20040xFF,0xCC, 0x23,0x94, 0x00,0x32, 0x76,0x1D, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x85,0x16,
20050xFF,0x7C, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1E,
20060x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
20070x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xD0, 0x23,0x94, 0x00,0x2E, 0x76,0x1D,
20080x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
20090x28,0x00, 0x87,0x1E, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x84,0x96, 0xFF,0x74, 0x85,0x16,
20100xFF,0x6C, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
20110x00,0x02, 0x87,0x16, 0xFF,0xD4, 0x23,0x94, 0x00,0x2A, 0x76,0x1D, 0x00,0x1E, 0x76,0x30,
20120xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1E,
20130x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
20140x28,0x00, 0x87,0x16, 0xFF,0xD8, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x57,0xC0, 0x77,0x38,
20150xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF4,0x82, 0x00,0x02, 0xF4,0xA3, 0x28,0x00, 0x07,0x20,
20160x00,0x18, 0x25,0x14, 0x00,0x7A, 0x85,0x2A, 0x00,0x00, 0x77,0xA9, 0x00,0x1E, 0x77,0xBC,
20170xFF,0xE5, 0xC5,0x28, 0x7F,0xC0, 0x75,0x29, 0xFF,0xF0, 0x84,0x96, 0xFF,0xC4, 0xF5,0x3B,
20180x28,0x00, 0x87,0x26, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x24, 0xF7,0x04,
20190x4F,0x58, 0xE6,0x00, 0x7E,0xF9, 0x94,0x16, 0xFF,0x54, 0xC7,0x20, 0x72,0x00, 0xF6,0x84,
20200x6E,0x50, 0x86,0x26, 0x00,0x2C, 0x77,0x38, 0xFF,0xFA, 0x25,0x14, 0x00,0x5A, 0x84,0x2A,
20210x00,0x00, 0x77,0xA9, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC4,0x20, 0x7F,0xC0, 0x74,0x21,
20220xFF,0xF0, 0x47,0x39, 0x00,0x00, 0x86,0xB6, 0x1D,0xDC, 0x77,0x39, 0x00,0x02, 0xC0,0x32,
20230x6A,0x00, 0x46,0x8C, 0x00,0x01, 0xD6,0x80, 0x0A,0x68, 0x20,0x36, 0x00,0x00, 0xF6,0x86,
20240x40,0x98, 0xE6,0x00, 0x7E,0xC0, 0xC3,0xB8, 0x68,0x00, 0xC5,0x84, 0x00,0x00, 0x86,0xA6,
20250x00,0x24, 0xF7,0x04, 0xE0,0x00, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
20260x7E,0x54, 0x03,0x24, 0x00,0x24, 0x86,0xA6, 0x00,0x28, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
20270x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x7E,0x58, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
20280x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x7E,0x65, 0x00,0x00, 0x00,0x01, 0xF5,0x82,
20290x00,0x00, 0x86,0x9A, 0x00,0x00, 0xF7,0x04, 0xE0,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
20300x72,0x00, 0xE2,0x00, 0x7E,0xA0, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
20310x7E,0xA8, 0x20,0x32, 0x00,0x00, 0x86,0x9A, 0x00,0x04, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
20320x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x7E,0xA9, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
20330x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x7E,0xB9, 0x20,0x2E, 0x00,0x00, 0xF5,0x82,
20340x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x7E,0xC5, 0x00,0x00, 0x00,0x01, 0xF4,0x02,
20350x00,0x01, 0xF7,0x04, 0x4F,0x58, 0xF4,0x1F, 0x28,0x00, 0x84,0x96, 0xFF,0x54, 0x85,0x16,
20360xFF,0xC4, 0xF6,0x86, 0x40,0x9A, 0xC7,0x24, 0x72,0x00, 0x77,0x38, 0xFF,0xFA, 0x86,0x2A,
20370x00,0x30, 0x47,0x39, 0x00,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0xE0,0x00,
20380x7F,0x4C, 0xF6,0x3B, 0x28,0x00, 0x84,0x96, 0xFF,0x54, 0xF6,0x06, 0x40,0x98, 0xC7,0x24,
20390x72,0x00, 0x77,0x38, 0xFF,0xFA, 0xC6,0xB8, 0x00,0x00, 0x46,0xB5, 0x00,0x00, 0x76,0xB5,
20400x00,0x02, 0xC6,0xB4, 0x60,0x00, 0xF5,0x02, 0x00,0x01, 0xF5,0x37, 0x28,0x00, 0x47,0x39,
20410x00,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x60,0x00, 0x24,0x94, 0x00,0x5A, 0x84,0xA6,
20420x00,0x00, 0x77,0xA5, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC4,0xA4, 0x7F,0xC0, 0x74,0xA5,
20430xFF,0xF0, 0x07,0x38, 0x00,0x02, 0xF4,0xBB, 0x28,0x00, 0xF7,0x04, 0x4F,0x58, 0x85,0x16,
20440xFF,0x54, 0x84,0x96, 0xFF,0xAC, 0xC6,0xA8, 0x72,0x00, 0x76,0xB4, 0xFF,0xFA, 0x06,0x24,
20450x00,0x1A, 0xF6,0xB3, 0x28,0x00, 0xC7,0x24, 0x72,0x00, 0x77,0x38, 0xFF,0xFA, 0x06,0xA8,
20460x00,0x1A, 0xF7,0x37, 0x28,0x00, 0x47,0x39, 0x00,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x24,
20470x00,0x1C, 0x97,0x13, 0xFF,0xFC, 0xF5,0x04, 0x4F,0x5C, 0x00,0x00, 0x00,0x01, 0x95,0x13,
20480xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x23,0x40, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04,
20490x4F,0x58, 0x84,0x96, 0xFF,0x54, 0x00,0x00, 0x00,0x01, 0xC7,0x24, 0x72,0x00, 0x77,0x38,
20500xFF,0xFA, 0x47,0x39, 0x00,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x24, 0x00,0x1C, 0x97,0x13,
20510xFF,0xFC, 0xF5,0x04, 0x4F,0x5C, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
20520x00,0x08, 0xE0,0x01, 0x23,0x40, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
20530x78,0xD8, 0x97,0x93, 0xFF,0xFC, 0xF6,0x84, 0x6E,0x50, 0x00,0x00, 0x00,0x01, 0x87,0x36,
20540x1D,0xDC, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x36, 0x1D,0xDC, 0x87,0x36,
20550x1D,0xDC, 0xF0,0x05, 0x40,0x84, 0xF4,0x86, 0xE0,0x00, 0x94,0x93, 0xFF,0xFC, 0x07,0x88,
20560x00,0x08, 0xE0,0x00, 0xD5,0xA0, 0x97,0x93, 0xFF,0xFC, 0xF4,0x05, 0x40,0x84, 0xF7,0x04,
20570x6E,0x50, 0xF0,0x05, 0x42,0x5C, 0x87,0x3A, 0x1D,0xDC, 0xF6,0x86, 0x2C,0x28, 0xF7,0x05,
20580x3B,0x64, 0xF7,0x04, 0x2D,0x38, 0xF5,0x06, 0x3A,0x4C, 0xF5,0x05, 0x42,0x44, 0x06,0x38,
20590x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82, 0x00,0x1C, 0x20,0x32,
20600x00,0x44, 0xE6,0x00, 0x80,0x60, 0xB4,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x06,
20610x35,0xEC, 0xE0,0x00, 0x80,0x8C, 0xF5,0x05, 0x42,0x30, 0x20,0x32, 0x00,0x01, 0xE6,0x00,
20620x80,0xC4, 0x00,0x00, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93,
20630xFF,0xFC, 0xF4,0x86, 0x35,0x60, 0xF4,0x85, 0x42,0x30, 0xF5,0x06, 0x42,0x44, 0x95,0x13,
20640xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1F,0x48, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
20650x80,0xC4, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x98, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
20660xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
20670x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
20680x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF5,0x86,
20690x42,0x44, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93,
20700xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x81,0x61, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
20710x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEE,0x00, 0x81,0x29, 0xF6,0x06,
20720x42,0x50, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x72,0xAC, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
20730x81,0x60, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x50, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
20740xFF,0xE5, 0xF5,0x82, 0x00,0x06, 0xF5,0x85, 0x42,0x54, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
20750xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
20760x73,0x4C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x86, 0x38,0x1C, 0xF5,0x85, 0x42,0x44, 0x87,0x96,
20770xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
20780x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x58, 0xF7,0x04,
20790x42,0x50, 0xF6,0x86, 0x42,0x50, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF6,0x04,
20800x6F,0x34, 0xC7,0x38, 0x6F,0xC0, 0x86,0xB2, 0x00,0x0C, 0x77,0x39, 0xFF,0xF0, 0xC0,0x36,
20810x72,0x00, 0xE6,0x00, 0x82,0x50, 0xF4,0x82, 0x00,0x00, 0xC5,0x04, 0x00,0x00, 0x86,0xB2,
20820x00,0x10, 0xF7,0x04, 0xE0,0x00, 0xC5,0xA4, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
20830x81,0xE4, 0x04,0x30, 0x00,0x10, 0x86,0xB2, 0x00,0x14, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
20840x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x81,0xE8, 0x20,0x2E, 0x00,0x00, 0xF5,0x82,
20850x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x81,0xF5, 0x00,0x00, 0x00,0x01, 0xF5,0x02,
20860x00,0x00, 0x86,0xA2, 0x00,0x00, 0xF7,0x04, 0xE0,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
20870x72,0x00, 0xE2,0x00, 0x82,0x30, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
20880x82,0x38, 0x20,0x32, 0x00,0x00, 0x86,0xA2, 0x00,0x04, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
20890x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x82,0x39, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
20900x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x82,0x49, 0x20,0x2A, 0x00,0x00, 0xF5,0x02,
20910x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0x82,0x59, 0x20,0x26, 0x00,0x00, 0xF4,0x82,
20920x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0x87,0x60, 0x00,0x00, 0x00,0x01, 0x07,0x88,
20930x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x07,0x20, 0x00,0x02, 0xF0,0x3B,
20940x28,0x00, 0xF7,0x04, 0x4F,0x58, 0xF4,0x05, 0x3B,0xB0, 0x06,0xA0, 0x00,0x14, 0xC7,0x20,
20950x72,0x00, 0x77,0x38, 0xFF,0xFA, 0xF7,0x37, 0x28,0x00, 0x06,0xA0, 0x00,0x16, 0xF7,0x37,
20960x28,0x00, 0xF3,0x02, 0x00,0x01, 0xF3,0x23, 0x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
20970xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x26,0x14, 0x00,0x20, 0xF0,0x33, 0x28,0x00, 0x04,0xA0,
20980x00,0x02, 0xF0,0x27, 0x28,0x00, 0xF3,0x02, 0x00,0x00, 0x23,0x94, 0x00,0x2A, 0xF3,0x1F,
20990x28,0x00, 0x07,0x20, 0x00,0x1A, 0x23,0x94, 0x00,0x2A, 0x83,0x9E, 0x00,0x00, 0x77,0x9D,
21000x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x9C, 0x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x76,0x31,
21010x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x06,0xA4, 0x00,0x02, 0x75,0x15, 0x00,0x1E, 0xF3,0xBB,
21020x28,0x00, 0xF3,0x04, 0xE0,0x00, 0x75,0x28, 0xFF,0xE5, 0x93,0x22, 0x00,0x1C, 0xF3,0x84,
21030xE0,0x04, 0x23,0x14, 0x00,0x1E, 0x93,0x16, 0xFF,0xA4, 0x75,0x99, 0x00,0x1E, 0x75,0xAC,
21040xFF,0xE5, 0x73,0x15, 0x00,0x1E, 0x73,0x18, 0xFF,0xE5, 0x93,0x16, 0xFF,0xCC, 0x83,0x16,
21050xFF,0xA4, 0x93,0xA2, 0x00,0x20, 0x87,0x16, 0xFF,0xE0, 0x73,0x95, 0x00,0x1E, 0x73,0x9C,
21060xFF,0xE5, 0x93,0x96, 0xFF,0xAC, 0x73,0x95, 0x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0xC7,0x38,
21070x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x93,0x96,
21080xFF,0xC4, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
21090x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x23,0x94, 0x00,0x1A, 0x93,0x96, 0xFF,0xA4, 0x76,0x1D,
21100x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
21110x28,0x00, 0x87,0x1E, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
21120xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xE8, 0x23,0x14,
21130x00,0x16, 0x93,0x16, 0xFF,0xA4, 0x76,0x19, 0x00,0x1E, 0x83,0x96, 0xFF,0xAC, 0x76,0x30,
21140xFF,0xE5, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A,
21150x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
21160x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xEC, 0x23,0x14, 0x00,0x12, 0x93,0x16,
21170xFF,0xA4, 0x76,0x19, 0x00,0x1E, 0x83,0x96, 0xFF,0xCC, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
21180x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4,
21190x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16,
21200xFF,0xF0, 0x83,0x16, 0xFF,0xC4, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x37,0xC0, 0x77,0x38,
21210xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF3,0x82, 0x00,0x02, 0xF3,0xA3, 0x28,0x00, 0x23,0x14,
21220x00,0x2A, 0x83,0x1A, 0x00,0x00, 0x77,0x99, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x18,
21230x7F,0xC0, 0x73,0x19, 0xFF,0xF0, 0x07,0x20, 0x00,0x18, 0xF3,0x3B, 0x28,0x00, 0x94,0x16,
21240xFF,0xDC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x07,0x20,
21250x00,0x02, 0x23,0x94, 0x00,0x2A, 0x83,0x9E, 0x00,0x00, 0x77,0x9D, 0x00,0x1E, 0x77,0xBC,
21260xFF,0xE5, 0xC3,0x9C, 0x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x24,0x80, 0x00,0x07, 0x05,0x20,
21270x00,0x0A, 0xF3,0xBB, 0x28,0x00, 0x20,0x26, 0x00,0x07, 0xEE,0x00, 0x84,0xE0, 0x06,0x28,
21280x00,0x0E, 0x86,0xB2, 0x00,0x00, 0x77,0x31, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x75,0xB1,
21290x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x05,0x28, 0x00,0x02, 0x04,0xA4, 0x00,0x01, 0xC6,0xB4,
21300x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0xFF,0x00, 0xC6,0xB4, 0x74,0x00, 0xF6,0xB3,
21310x28,0x00, 0x87,0x32, 0x00,0x00, 0xF3,0x02, 0x00,0xFF, 0xC7,0x38, 0x5F,0xC0, 0x77,0x39,
21320xFF,0xF0, 0xC7,0x38, 0x34,0x00, 0xE0,0x00, 0x84,0x88, 0xF7,0x33, 0x28,0x00, 0x05,0x20,
21330x00,0x26, 0x86,0x2A, 0x00,0x00, 0x76,0xA9, 0x00,0x1E, 0xF5,0x84, 0x4F,0x58, 0x76,0xB4,
21340xFF,0xE5, 0x83,0x96, 0xFF,0xDC, 0xF3,0x02, 0x00,0xFF, 0x94,0x16, 0xFF,0xBC, 0xC7,0x1C,
21350x5A,0x00, 0x77,0x38, 0xFF,0xFA, 0xC6,0x30, 0x6F,0xC0, 0x76,0x31, 0xFF,0xF0, 0x47,0x39,
21360x00,0x00, 0xC7,0x38, 0x34,0x00, 0xF6,0x82, 0xFF,0x00, 0xC6,0x30, 0x6C,0x00, 0xC7,0x38,
21370x60,0x00, 0xF6,0x84, 0x3B,0x6C, 0xF7,0x2B, 0x28,0x00, 0xC5,0xA0, 0x5A,0x00, 0x75,0xAC,
21380xFF,0xFA, 0x83,0x16, 0xFF,0xDC, 0x07,0x34, 0x00,0x01, 0xF7,0x05, 0x3B,0x6C, 0x07,0x20,
21390x00,0x3A, 0xF6,0xBB, 0x28,0x00, 0x07,0x20, 0x00,0x36, 0xF0,0x3B, 0x28,0x00, 0xF3,0x82,
21400x00,0x03, 0xF3,0xA3, 0x28,0x00, 0x07,0x18, 0x00,0x1A, 0xF5,0xBB, 0x28,0x00, 0x07,0x88,
21410x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x07,0x20, 0x00,0x02, 0xF0,0x3B,
21420x28,0x00, 0x24,0x80, 0x00,0x07, 0x05,0x20, 0x00,0x0A, 0x20,0x26, 0x00,0x07, 0xEE,0x00,
21430x85,0xD4, 0x06,0x28, 0x00,0x0E, 0x86,0xB2, 0x00,0x00, 0x77,0x31, 0x00,0x1E, 0x77,0x38,
21440xFF,0xE5, 0x75,0xB1, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x05,0x28, 0x00,0x02, 0x04,0xA4,
21450x00,0x01, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0xFF,0x00, 0xC6,0xB4,
21460x74,0x00, 0xF6,0xB3, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0xF3,0x82, 0x00,0xFF, 0xC7,0x38,
21470x5F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38, 0x3C,0x00, 0xE0,0x00, 0x85,0x7C, 0xF7,0x33,
21480x28,0x00, 0x05,0xA0, 0x00,0x26, 0x86,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
21490xFF,0xE5, 0xC5,0x20, 0x00,0x00, 0x24,0x00, 0x00,0x07, 0xF3,0x02, 0x00,0x01, 0x93,0x16,
21500xFF,0xA4, 0xF7,0x04, 0x4F,0x58, 0x83,0x96, 0xFF,0xBC, 0x24,0x80, 0x00,0x0E, 0xC7,0x1C,
21510x72,0x00, 0x77,0x38, 0xFF,0xFA, 0xC6,0x30, 0x6F,0xC0, 0x76,0x31, 0xFF,0xF0, 0x47,0x39,
21520x00,0x00, 0xF6,0x82, 0x00,0xFF, 0xC7,0x38, 0x6C,0x00, 0xF6,0x82, 0xFF,0x00, 0xC6,0x30,
21530x6C,0x00, 0xC7,0x38, 0x60,0x00, 0xF6,0x84, 0x3B,0x6C, 0xF7,0x2F, 0x28,0x00, 0x07,0x34,
21540x00,0x01, 0xF7,0x05, 0x3B,0x6C, 0x07,0x28, 0x00,0x3A, 0xF6,0xBB, 0x28,0x00, 0x07,0x28,
21550x00,0x36, 0xF0,0x3B, 0x28,0x00, 0xF3,0x02, 0x00,0x03, 0xF3,0x2B, 0x28,0x00, 0x20,0x22,
21560x00,0x07, 0xEE,0x00, 0x86,0x94, 0xC6,0x28, 0x48,0x00, 0x06,0x30, 0x00,0x26, 0x87,0x32,
21570x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x04,0xA4, 0x00,0x02, 0x04,0x20,
21580x00,0x01, 0x83,0x96, 0xFF,0xA4, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xF6,0x82,
21590xFF,0x00, 0xC7,0x38, 0x6C,0x00, 0xC7,0x1C, 0x70,0x00, 0xE0,0x00, 0x86,0x50, 0xF7,0x33,
21600x28,0x00, 0x06,0x28, 0x00,0x26, 0x86,0xB2, 0x00,0x00, 0x77,0x31, 0x00,0x1E, 0x77,0x38,
21610xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0xFF,0x00, 0xC6,0xB4,
21620x74,0x00, 0xF6,0xB3, 0x28,0x00, 0x95,0x13, 0xFF,0xFC, 0xF3,0x04, 0x3B,0xB0, 0x00,0x00,
21630x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x95,0x16, 0xFF,0xB4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
21640xD4,0x2C, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xB4, 0xF0,0x05, 0x40,0x7C, 0x83,0x96,
21650xFF,0xBC, 0x23,0x00, 0x00,0x07, 0xF3,0x05, 0x42,0x58, 0xF7,0x04, 0x42,0x50, 0xF6,0x06,
21660x42,0x50, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF3,0x06, 0x39,0x34, 0xF3,0x05,
21670x42,0x44, 0xF5,0x05, 0x40,0x74, 0xF3,0x85, 0x42,0x60, 0xF3,0x82, 0x00,0x06, 0xF3,0x85,
21680x42,0x54, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xF6,0x84, 0x2D,0x38, 0x07,0x38,
21690x00,0x01, 0xF7,0x33, 0x28,0x00, 0x06,0x34, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0xF7,0x06,
21700x2C,0x28, 0x76,0xB5, 0x00,0x02, 0xF3,0x82, 0x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
21710x87,0x4C, 0xB3,0xB6, 0x70,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x06, 0x42,0x44, 0x93,0x13,
21720xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1F,0x48, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
21730xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
21740x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x48, 0xF3,0x86,
21750x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93,
21760xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x89,0xED, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
21770x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEE,0x00, 0x87,0xC9, 0x00,0x00,
21780x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x73,0x4C, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
21790x89,0xEC, 0x00,0x00, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93,
21800xFF,0xFC, 0x26,0x14, 0x00,0x20, 0xF0,0x33, 0x28,0x00, 0x05,0xA0, 0x00,0x02, 0xF0,0x2F,
21810x28,0x00, 0xF3,0x82, 0x00,0x00, 0x24,0x94, 0x00,0x22, 0xF3,0xA7, 0x28,0x00, 0x04,0xA0,
21820x00,0x1A, 0x94,0x96, 0xFF,0xD4, 0x23,0x94, 0x00,0x22, 0x83,0x9E, 0x00,0x00, 0x77,0x9D,
21830x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x9C, 0x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x76,0x31,
21840x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x06,0xAC, 0x00,0x02, 0x23,0x14, 0x00,0x1E, 0x75,0x19,
21850x00,0x1E, 0xF3,0xA7, 0x28,0x00, 0xF4,0x84, 0xE0,0x00, 0x75,0x28, 0xFF,0xE5, 0x94,0xA2,
21860x00,0x1C, 0xF3,0x84, 0xE0,0x04, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96,
21870xFF,0xB4, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0xCC, 0x84,0x96,
21880xFF,0xB4, 0x93,0xA2, 0x00,0x20, 0x87,0x16, 0xFF,0xE0, 0x73,0x95, 0x00,0x1E, 0x73,0x9C,
21890xFF,0xE5, 0x93,0x96, 0xFF,0xBC, 0x73,0x95, 0x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96,
21900xFF,0xC4, 0x83,0x96, 0xFF,0xBC, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F,
21910x28,0x00, 0xF5,0x84, 0x4F,0x58, 0x87,0x1A, 0x00,0x00, 0xC5,0xA0, 0x5A,0x00, 0x75,0xAC,
21920xFF,0xFA, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
21930x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x23,0x14, 0x00,0x1A, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
21940xFF,0xE5, 0x45,0xAD, 0x00,0x00, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
21950x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x84,0x96, 0xFF,0xCC, 0xC7,0x38,
21960x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
21970xFF,0xE8, 0x23,0x14, 0x00,0x16, 0x76,0x19, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
21980x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4,
21990x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
22000x00,0x02, 0x87,0x16, 0xFF,0xEC, 0x23,0x14, 0x00,0x12, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
22010xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A,
22020x00,0x00, 0x06,0xB4, 0x00,0x02, 0x83,0x96, 0xFF,0xC4, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
22030xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0xF0, 0x06,0xB4, 0x00,0x02, 0xC7,0x38,
22040x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF4,0x82, 0x00,0x02, 0xF4,0xA3,
22050x28,0x00, 0x04,0x20, 0x00,0x18, 0x23,0x94, 0x00,0x22, 0x83,0x9E, 0x00,0x00, 0x77,0x9D,
22060x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x9C, 0x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x84,0x96,
22070xFF,0xD4, 0xF3,0xA3, 0x28,0x00, 0xF3,0x82, 0x00,0x01, 0xF3,0xA7, 0x28,0x00, 0x95,0x93,
22080xFF,0xFC, 0xF4,0x86, 0xE0,0x00, 0x94,0x93, 0xFF,0xFC, 0xF3,0x84, 0x4F,0x5C, 0x00,0x00,
22090x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x23,0x40, 0x97,0x93,
22100xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x78,0xD8, 0x97,0x93, 0xFF,0xFC, 0xF4,0x86,
22110x36,0x78, 0xF4,0x85, 0x42,0x44, 0xF0,0x05, 0x40,0x84, 0xF6,0x84, 0x4F,0x5C, 0xF7,0x02,
22120x00,0x64, 0x97,0x36, 0x00,0x00, 0x90,0x36, 0x00,0x04, 0xF7,0x02, 0x00,0x01, 0xF7,0x05,
22130x40,0x84, 0xF3,0x86, 0x35,0xEC, 0xF3,0x85, 0x42,0x30, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
22140xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
22150xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x90, 0xF7,0x04, 0x42,0x60, 0xF5,0x02,
22160x00,0x00, 0x05,0xB8, 0x00,0x18, 0xF6,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x32,
22170x00,0x07, 0xEE,0x00, 0x8A,0x70, 0xC7,0x30, 0x60,0x00, 0xC7,0x38, 0x58,0x00, 0x07,0x38,
22180x00,0x0E, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
22190x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB4, 0x74,0x00, 0xC0,0x36,
22200x52,0x00, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
22210x8A,0x71, 0x07,0x30, 0x00,0x01, 0xE0,0x00, 0x8A,0x18, 0xF7,0x05, 0x42,0x58, 0xF4,0x04,
22220x42,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x22, 0x00,0x07, 0xEE,0x00, 0x8D,0x94, 0x24,0x94,
22230x00,0x36, 0xF6,0x04, 0x42,0x60, 0x25,0x14, 0x00,0x38, 0x23,0x94, 0x00,0x20, 0x06,0x30,
22240x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x06,0x30,
22250x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B,
22260x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
22270xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x34, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22280x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22290xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x32, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22300x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22310xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x30, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22320x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22330xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2E, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22340x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22350xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2C, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22360x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22370xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2A, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22380x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22390xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x94,
22400x00,0x28, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
22410xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x94,0x13, 0xFF,0xFC, 0x95,0x13, 0xFF,0xFC, 0x93,0x96,
22420xFF,0x7C, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93,
22430xFF,0xFC, 0xF6,0x04, 0x42,0x60, 0x24,0x94, 0x00,0x7E, 0x25,0x14, 0x00,0x80, 0x23,0x94,
22440x00,0x68, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
22450xFF,0xE5, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22460xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38,
22470x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x7C, 0x06,0x30,
22480x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22490x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x7A, 0x06,0x30,
22500x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22510x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x78, 0x06,0x30,
22520x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22530x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x76, 0x06,0x30,
22540x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22550x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x74, 0x06,0x30,
22560x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22570x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x72, 0x06,0x30,
22580x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22590x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22600x00,0x00, 0x24,0x94, 0x00,0x70, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
22610x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x95,0x13, 0xFF,0xFC, 0x93,0x96,
22620xFF,0x74, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD2,0x58, 0x97,0x93,
22630xFF,0xFC, 0x83,0x96, 0xFF,0x74, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0xF7,0x04,
22640x42,0x58, 0x23,0x94, 0x00,0x50, 0xC7,0x00, 0x72,0x00, 0x97,0x13, 0xFF,0xFC, 0x93,0x96,
22650xFF,0x6C, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCF,0x24, 0x97,0x93,
22660xFF,0xFC, 0x83,0x96, 0xFF,0x6C, 0xF6,0x86, 0x42,0x50, 0x93,0x93, 0xFF,0xFC, 0xF3,0x84,
22670x42,0x58, 0x76,0xB5, 0x00,0x1E, 0x93,0x93, 0xFF,0xFC, 0xF7,0x04, 0x42,0x50, 0x76,0xB4,
22680xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x83,0x96,
22690xFF,0x7C, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
22700xF3,0x38, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x8D,0x95, 0x00,0x00,
22710x00,0x01, 0xF7,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
22720x42,0x58, 0xF7,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x07, 0xEE,0x00,
22730x8D,0xD4, 0xF3,0x82, 0x17,0x70, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
22740x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x82, 0x00,0x1C, 0x20,0x32,
22750x00,0x44, 0xE6,0x00, 0x8D,0xF4, 0xB3,0xBA, 0x68,0x02, 0xE0,0x00, 0x8D,0xF4, 0xF0,0x05,
22760x2D,0x38, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x1B, 0x93,0x93, 0xFF,0xFC, 0xF3,0x86,
22770x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93,
22780xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
22790x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
22800x00,0x88, 0xF7,0x04, 0x42,0x50, 0xF6,0x86, 0x42,0x50, 0x76,0xB5, 0x00,0x1E, 0xF3,0x84,
22810x6F,0x34, 0x76,0xB4, 0xFF,0xE5, 0x93,0x96, 0xFF,0xC4, 0xC7,0x38, 0x6F,0xC0, 0x86,0x9E,
22820x00,0x0C, 0x77,0x39, 0xFF,0xF0, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x8E,0x65, 0xF6,0x06,
22830x42,0xA0, 0xF7,0x04, 0x42,0xA0, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
22840x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xE0,0x00, 0x94,0xE4, 0xF7,0x33,
22850x28,0x00, 0xF6,0x04, 0x42,0x60, 0x24,0x94, 0x00,0x36, 0x85,0x16, 0xFF,0xC4, 0x23,0x94,
22860x00,0x38, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
22870xFF,0xE5, 0x85,0x2A, 0x00,0x1C, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38,
22880x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x95,0x16, 0xFF,0xBC, 0xF7,0x1F, 0x28,0x00, 0x87,0x32,
22890x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0x85,0x16, 0xFF,0xC4, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
22900xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x34, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22910x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22920xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x32, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22930x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22940xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x30, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22950x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22960xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2E, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22970x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
22980xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2C, 0x06,0x30, 0x00,0x02, 0x87,0x32,
22990x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
23000xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2A, 0x06,0x30, 0x00,0x02, 0x87,0x32,
23010x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
23020xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x94,
23030x00,0x28, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
23040xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x2A, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0x97,0x13,
23050xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0x27,0x14, 0x00,0x20, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
23060x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0xC4, 0x00,0x00,
23070x00,0x01, 0x87,0x1E, 0x00,0x10, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
23080x8F,0xF0, 0xF6,0x82, 0x00,0x00, 0x87,0x1E, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
23090x00,0x00, 0xE6,0x00, 0x8F,0xF4, 0x20,0x36, 0x00,0x00, 0xF6,0x82, 0x00,0x01, 0x20,0x36,
23100x00,0x00, 0xE6,0x00, 0x90,0x41, 0x00,0x00, 0x00,0x01, 0x85,0x16, 0xFF,0xC4, 0x00,0x00,
23110x00,0x01, 0x05,0x28, 0x00,0x10, 0x95,0x16, 0xFF,0xB4, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
23120x00,0x08, 0xE0,0x00, 0x72,0x50, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0xB4, 0x27,0x14,
23130x00,0x20, 0x93,0x93, 0xFF,0xFC, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
23140xF9,0x34, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x94,0xE4, 0x00,0x00, 0x00,0x01, 0x85,0x16,
23150xFF,0xBC, 0x00,0x00, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0x94,0xBC, 0x00,0x00,
23160x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0xF5,0x02,
23170x00,0x00, 0x23,0x94, 0x00,0x62, 0xF5,0x1F, 0x28,0x00, 0x75,0x95, 0x00,0x1E, 0x75,0xAC,
23180xFF,0xE5, 0x06,0x20, 0x00,0x02, 0x06,0xB0, 0x00,0x02, 0x23,0x14, 0x00,0x1E, 0x73,0x99,
23190x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96, 0xFF,0x74, 0x75,0x15, 0x00,0x1E, 0x75,0x28,
23200xFF,0xE5, 0x95,0x16, 0xFF,0x7C, 0x73,0x95, 0x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96,
23210xFF,0x8C, 0x85,0x16, 0xFF,0xC4, 0x73,0x95, 0x00,0x1E, 0x93,0x96, 0xFF,0x84, 0x85,0x2A,
23220x00,0x34, 0x23,0x94, 0x00,0x62, 0x95,0x16, 0xFF,0xAC, 0xF0,0x33, 0x28,0x00, 0x05,0x20,
23230x00,0x1A, 0x95,0x16, 0xFF,0x94, 0x83,0x9E, 0x00,0x00, 0x77,0x9D, 0x00,0x1E, 0x77,0xBC,
23240xFF,0xE5, 0xC3,0x9C, 0x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x74,0x95, 0x00,0x1E, 0xF3,0xAB,
23250x28,0x00, 0x85,0x16, 0xFF,0xC4, 0x74,0xA4, 0xFF,0xE5, 0x85,0x2A, 0x00,0x10, 0x83,0x96,
23260xFF,0xC4, 0x95,0x22, 0x00,0x1C, 0x83,0x9E, 0x00,0x14, 0x85,0x16, 0xFF,0x84, 0x93,0xA2,
23270x00,0x20, 0x87,0x16, 0xFF,0xE0, 0x75,0x28, 0xFF,0xE5, 0x95,0x16, 0xFF,0x84, 0xF3,0x84,
23280x4F,0x58, 0x85,0x16, 0xFF,0x74, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33,
23290x28,0x00, 0x87,0x1A, 0x00,0x00, 0x93,0x96, 0xFF,0xA4, 0xC0,0x22, 0x3A,0x00, 0x83,0x96,
23300xFF,0x7C, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
23310x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x23,0x14, 0x00,0x1A, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
23320xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A,
23330x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
23340x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xE8, 0x23,0x14, 0x00,0x16, 0x76,0x19,
23350x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
23360x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x85,0x16, 0xFF,0x8C, 0x83,0x96,
23370xFF,0x84, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
23380x00,0x02, 0x87,0x16, 0xFF,0xEC, 0x23,0x14, 0x00,0x12, 0x76,0x19, 0x00,0x1E, 0x76,0x30,
23390xFF,0xE5, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A,
23400x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
23410x28,0x00, 0x87,0x16, 0xFF,0xF0, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38,
23420xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF5,0x02, 0x00,0x02, 0xF5,0x23, 0x28,0x00, 0x23,0x94,
23430x00,0x52, 0x83,0x9E, 0x00,0x00, 0x77,0x9D, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x9C,
23440x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x03,0x20, 0x00,0x18, 0xE6,0x00, 0x92,0x30, 0xF3,0x9B,
23450x28,0x00, 0xF7,0x04, 0x42,0x70, 0xE0,0x00, 0x92,0x9C, 0xF6,0x06, 0x42,0x72, 0x85,0x16,
23460xFF,0xC4, 0x00,0x00, 0x00,0x01, 0x86,0xAA, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0x07,0x34,
23470x00,0x07, 0x20,0x3A, 0x00,0x0E, 0xE2,0x00, 0x92,0x94, 0xC7,0x34, 0x68,0x00, 0xF5,0x84,
23480x42,0x60, 0xF3,0x82, 0x00,0xFF, 0xC7,0x2C, 0x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA,
23490x00,0x00, 0x97,0x16, 0xFF,0x74, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
23500x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xC6,0xB4, 0x3C,0x00, 0x20,0x36, 0x00,0x00, 0x47,0x0C,
23510x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0x92,0xC9, 0x00,0x00,
23520x00,0x01, 0xF7,0x04, 0x42,0x74, 0xF6,0x06, 0x42,0x74, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
23530xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
23540x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
23550x94,0xE4, 0x00,0x00, 0x00,0x01, 0x85,0x16, 0xFF,0xA4, 0x83,0x96, 0xFF,0x74, 0xC7,0x20,
23560x52,0x00, 0x74,0xB8, 0xFF,0xFA, 0xC6,0x24, 0x00,0x00, 0x87,0x1E, 0x00,0x00, 0x76,0x9D,
23570x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC5,0xAC, 0x52,0x00, 0x75,0xAC, 0xFF,0xFA, 0x46,0x31,
23580x00,0x00, 0xF5,0x02, 0x00,0xFF, 0xC6,0x30, 0x54,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
23590xFF,0xF0, 0xF6,0x82, 0xFF,0x00, 0xC7,0x38, 0x6C,0x00, 0xC6,0x30, 0x70,0x00, 0xF6,0x1F,
23600x28,0x00, 0x83,0x96, 0xFF,0x94, 0x85,0x16, 0xFF,0xC4, 0xF5,0x9F, 0x28,0x00, 0x87,0x2A,
23610x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x24, 0xE6,0x00, 0x94,0x69, 0xF6,0x86,
23620x40,0x98, 0xF7,0x04, 0x6E,0x50, 0x86,0x2A, 0x00,0x2C, 0xC6,0xA4, 0x00,0x00, 0x23,0x94,
23630x00,0x62, 0x84,0x9E, 0x00,0x00, 0x77,0x9D, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC4,0xA4,
23640x7F,0xC0, 0x74,0xA5, 0xFF,0xF0, 0x46,0xB5, 0x00,0x00, 0x87,0x3A, 0x1D,0xDC, 0x76,0xB5,
23650x00,0x02, 0xC0,0x32, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A,
23660x00,0x00, 0xF7,0x06, 0x40,0x98, 0xE6,0x00, 0x94,0x34, 0xC3,0x34, 0x70,0x00, 0xC5,0x84,
23670x00,0x00, 0x86,0xAA, 0x00,0x24, 0xF7,0x04, 0xE0,0x00, 0xF6,0x02, 0x00,0x00, 0xC0,0x36,
23680x72,0x00, 0x05,0x28, 0x00,0x24, 0xE6,0x00, 0x93,0xC4, 0x95,0x16, 0xFF,0x74, 0x83,0x96,
23690xFF,0xC4, 0x00,0x00, 0x00,0x01, 0x86,0x9E, 0x00,0x28, 0xF7,0x04, 0xE0,0x04, 0x00,0x00,
23700x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x93,0xC8, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
23710x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x93,0xD5, 0x00,0x00, 0x00,0x01, 0xF5,0x82,
23720x00,0x00, 0x85,0x16, 0xFF,0x74, 0xF7,0x04, 0xE0,0x00, 0x86,0xAA, 0x00,0x00, 0x00,0x00,
23730x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x94,0x14, 0xF6,0x02, 0x00,0x00, 0xC0,0x36,
23740x72,0x00, 0xE6,0x00, 0x94,0x1C, 0x20,0x32, 0x00,0x00, 0x86,0xAA, 0x00,0x04, 0xF7,0x04,
23750xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0x94,0x1D, 0x20,0x32,
23760x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0x94,0x2D, 0x20,0x2E,
23770x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0x94,0x39, 0x00,0x00,
23780x00,0x01, 0xF4,0x82, 0x00,0x01, 0xF7,0x04, 0x4F,0x58, 0xF4,0x9B, 0x28,0x00, 0x83,0x96,
23790xFF,0xC4, 0xF6,0x86, 0x40,0x9A, 0xC7,0x20, 0x72,0x00, 0x77,0x38, 0xFF,0xFA, 0x86,0x1E,
23800x00,0x30, 0x47,0x39, 0x00,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0xE0,0x00,
23810x94,0xE4, 0xF6,0x3B, 0x28,0x00, 0x47,0x25, 0x00,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x38,
23820x68,0x00, 0xF5,0x02, 0x00,0x01, 0xF5,0x3B, 0x28,0x00, 0x07,0x38, 0x00,0x02, 0x23,0x94,
23830x00,0x62, 0x83,0x9E, 0x00,0x00, 0x77,0x9D, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x9C,
23840x7F,0xC0, 0x73,0x9D, 0xFF,0xF0, 0x25,0x14, 0x00,0x62, 0xF3,0xBB, 0x28,0x00, 0x85,0x2A,
23850x00,0x00, 0x77,0xA9, 0x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC5,0x28, 0x7F,0xC0, 0x75,0x29,
23860xFF,0xF0, 0xE0,0x00, 0x94,0xE4, 0xF5,0x1B, 0x28,0x00, 0x83,0x96, 0xFF,0xBC, 0x00,0x00,
23870x00,0x01, 0x20,0x1E, 0x00,0x01, 0xE6,0x00, 0x94,0xE4, 0x00,0x00, 0x00,0x01, 0x07,0x88,
23880x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x35,0x60, 0xF5,0x05,
23890x42,0x30, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
23900x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF5,0x06,
23910x42,0x44, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93,
23920xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0x96,0x89, 0x00,0x00, 0x00,0x01, 0xF6,0x84,
23930x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xEE,0x00, 0x95,0x8D, 0xF5,0x86,
23940x42,0x50, 0xF7,0x04, 0x42,0x50, 0x76,0x2D, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x26,0xB4,
23950x00,0x01, 0xF6,0x85, 0x42,0x54, 0x25,0x00, 0x00,0x07, 0xF5,0x05, 0x42,0x58, 0xF6,0x84,
23960x2D,0x38, 0xC7,0x38, 0x67,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x2F,
23970x28,0x00, 0x06,0x34, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0xF7,0x06, 0x2C,0x28, 0x76,0xB5,
23980x00,0x02, 0xF5,0x02, 0x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x96,0x88, 0xB5,0x36,
23990x70,0x02, 0xE0,0x00, 0x96,0x88, 0xF0,0x05, 0x2D,0x38, 0xF5,0x04, 0x42,0x60, 0x00,0x00,
24000x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xB2,0x84, 0x97,0x93,
24010xFF,0xFC, 0xF6,0x84, 0x4F,0x58, 0x00,0x00, 0x00,0x01, 0x07,0x34, 0x00,0x40, 0xC0,0x22,
24020x72,0x00, 0xE6,0x00, 0x95,0xEC, 0xF6,0x06, 0x42,0x76, 0xF7,0x04, 0x42,0x74, 0x76,0xB1,
24030x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
24040x00,0x01, 0xF7,0x33, 0x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93,
24050xFF,0xFC, 0xE0,0x00, 0x96,0x88, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x60, 0x00,0x00,
24060x00,0x01, 0xC0,0x22, 0x72,0x00, 0xE6,0x00, 0x96,0x24, 0x00,0x00, 0x00,0x01, 0x97,0x13,
24070xFF,0xFC, 0xF5,0x04, 0x3B,0xB0, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
24080x00,0x08, 0xE0,0x00, 0xD4,0x2C, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x96,0x40, 0x00,0x00,
24090x00,0x01, 0xC0,0x22, 0x6A,0x00, 0xE6,0x00, 0x96,0x71, 0x00,0x00, 0x00,0x01, 0x97,0x13,
24100xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCC,0x60, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04,
24110x40,0x7C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x13, 0xFF,0xFC, 0xF5,0x04,
24120x40,0x74, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
24130xBE,0xF8, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x96,0x88, 0x00,0x00, 0x00,0x01, 0xF5,0x04,
24140x40,0x74, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
24150xC1,0xB4, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
24160x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
24170x00,0x08, 0x22,0x10, 0x00,0x70, 0xF6,0x04, 0x6F,0x34, 0xF7,0x04, 0x42,0x64, 0x86,0xB2,
24180x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0x9B,0x18, 0x06,0xB0,
24190x00,0x02, 0x87,0x36, 0x00,0x00, 0xF4,0x04, 0x40,0x7C, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
24200xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC0,0x3A, 0x42,0x00, 0xE6,0x00,
24210x9B,0x18, 0x24,0x94, 0x00,0x36, 0xF6,0x04, 0x40,0x74, 0x23,0x94, 0x00,0x38, 0x06,0x30,
24220x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x06,0x30,
24230x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
24240x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
24250xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x34, 0x06,0x30, 0x00,0x02, 0x87,0x32,
24260x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24270xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x32, 0x06,0x30, 0x00,0x02, 0x87,0x32,
24280x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24290xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x30, 0x06,0x30, 0x00,0x02, 0x87,0x32,
24300x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24310xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2E, 0x06,0x30, 0x00,0x02, 0x87,0x32,
24320x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24330xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2C, 0x06,0x30, 0x00,0x02, 0x87,0x32,
24340x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24350xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2A, 0x06,0x30, 0x00,0x02, 0x87,0x32,
24360x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24370xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x94,
24380x00,0x28, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
24390xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x94,0x13, 0xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0x27,0x14,
24400x00,0x20, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93,
24410xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0xF5,0x04,
24420x40,0x74, 0x94,0x16, 0xFF,0xC4, 0x07,0x20, 0x00,0x02, 0xF0,0x3B, 0x28,0x00, 0x24,0x80,
24430x00,0x07, 0xF4,0x02, 0x00,0xFF, 0x83,0x96, 0xFF,0xC4, 0x95,0x16, 0xFF,0xBC, 0x03,0x1C,
24440x00,0x0A, 0x20,0x26, 0x00,0x07, 0xEE,0x00, 0x98,0xA8, 0x06,0x18, 0x00,0x0E, 0x86,0xB2,
24450x00,0x00, 0x77,0x31, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x75,0xB1, 0x00,0x1E, 0x75,0xAC,
24460xFF,0xE5, 0x03,0x18, 0x00,0x02, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02,
24470xFF,0x00, 0xC6,0xB4, 0x74,0x00, 0xF6,0xB3, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x04,0xA4,
24480x00,0x01, 0xC7,0x38, 0x5F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38, 0x44,0x00, 0xE0,0x00,
24490x98,0x54, 0xF7,0x33, 0x28,0x00, 0x85,0x16, 0xFF,0xC4, 0x74,0x95, 0x00,0x1E, 0x74,0xA4,
24500xFF,0xE5, 0x83,0x96, 0xFF,0xC4, 0x23,0x14, 0x00,0x1E, 0x74,0x19, 0x00,0x1E, 0x74,0x20,
24510xFF,0xE5, 0x05,0x28, 0x00,0x26, 0x95,0x16, 0xFF,0x8C, 0x85,0xAA, 0x00,0x00, 0x76,0xA9,
24520x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x03,0x9C, 0x00,0x02, 0x93,0x96, 0xFF,0xB4, 0x06,0x1C,
24530x00,0x02, 0x73,0x95, 0x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96, 0xFF,0xAC, 0x73,0x95,
24540x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96, 0xFF,0x9C, 0x83,0x96, 0xFF,0xBC, 0x75,0x15,
24550x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x95,0x16, 0xFF,0x94, 0x75,0x15, 0x00,0x1E, 0x75,0x28,
24560xFF,0xE5, 0x95,0x16, 0xFF,0xA4, 0x85,0x16, 0xFF,0xC4, 0xC5,0xAC, 0x6F,0xC0, 0x75,0xAD,
24570xFF,0xF0, 0xF5,0x05, 0x42,0x60, 0xF5,0x04, 0x4F,0x58, 0xF6,0x82, 0x00,0xFF, 0xC7,0x1C,
24580x52,0x00, 0x77,0x38, 0xFF,0xFA, 0x47,0x39, 0x00,0x00, 0xC7,0x38, 0x6C,0x00, 0xF6,0x82,
24590xFF,0x00, 0xC5,0xAC, 0x6C,0x00, 0xC7,0x38, 0x58,0x00, 0x83,0x96, 0xFF,0x8C, 0xF5,0x84,
24600x3B,0x6C, 0x85,0x16, 0xFF,0xB4, 0xF7,0x1F, 0x28,0x00, 0x87,0x16, 0xFF,0xE0, 0x06,0xAC,
24610x00,0x01, 0xF6,0x85, 0x3B,0x6C, 0x83,0x96, 0xFF,0xC4, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38,
24620xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0xF5,0x04, 0x4F,0x58, 0x87,0x1A, 0x00,0x00, 0xC0,0x1E,
24630x52,0x00, 0xC7,0x38, 0x47,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30,
24640x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x23,0x14, 0x00,0x1A, 0x76,0x99, 0x00,0x1E, 0x83,0x96,
24650xFF,0x94, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33,
24660x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0x30, 0x00,0x02, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24670xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x16, 0xFF,0xE8, 0x23,0x14,
24680x00,0x16, 0x76,0x99, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x85,0x16, 0xFF,0xAC, 0x83,0x96,
24690xFF,0xA4, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x1A,
24700x00,0x00, 0x06,0x30, 0x00,0x02, 0x85,0x16, 0xFF,0x9C, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24710xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x16, 0xFF,0xEC, 0x23,0x14,
24720x00,0x12, 0x76,0x99, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38,
24730xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0x30, 0x00,0x02, 0x83,0x96,
24740xFF,0xC4, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x16,
24750xFF,0xF0, 0x06,0x30, 0x00,0x02, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33,
24760x28,0x00, 0x07,0x1C, 0x00,0x3A, 0xF5,0xBB, 0x28,0x00, 0x07,0x1C, 0x00,0x36, 0xF0,0x3B,
24770x28,0x00, 0xF5,0x02, 0x00,0x03, 0xE6,0x00, 0x9A,0xA4, 0xF5,0x1F, 0x28,0x00, 0xF7,0x04,
24780x42,0x78, 0xF6,0x06, 0x42,0x78, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
24790x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0x07,0x88,
24800x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x9B,0x18, 0x00,0x00,
24810x00,0x01, 0xF3,0x86, 0x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
24820x1F,0x48, 0x97,0x93, 0xFF,0xFC, 0x25,0x00, 0x00,0x07, 0xF5,0x05, 0x42,0x58, 0xF7,0x04,
24830x42,0x50, 0xF6,0x06, 0x42,0x50, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF3,0x82,
24840x00,0x06, 0xF3,0x85, 0x42,0x54, 0xF5,0x06, 0x39,0x34, 0xF5,0x05, 0x42,0x44, 0xC7,0x38,
24850x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xF6,0x84, 0x2D,0x38, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
24860x28,0x00, 0x06,0x34, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0xF7,0x06, 0x2C,0x28, 0x76,0xB5,
24870x00,0x02, 0xF3,0x82, 0x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0x9B,0x18, 0xB3,0xB6,
24880x70,0x02, 0xF0,0x05, 0x2D,0x38, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
24890x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
24900x00,0x08, 0x22,0x10, 0x00,0x78, 0xF3,0x86, 0x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
24910x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
24920x9E,0x41, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
24930x00,0x00, 0xEE,0x00, 0x9D,0x85, 0x24,0x94, 0x00,0x36, 0xF6,0x04, 0x40,0x74, 0x25,0x14,
24940x00,0x38, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
24950xFF,0xE5, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
24960xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38,
24970x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x34, 0x06,0x30,
24980x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
24990x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x32, 0x06,0x30,
25000x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
25010x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x30, 0x06,0x30,
25020x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
25030x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2E, 0x06,0x30,
25040x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
25050x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2C, 0x06,0x30,
25060x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
25070x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94, 0x00,0x2A, 0x06,0x30,
25080x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
25090x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32,
25100x00,0x00, 0x24,0x94, 0x00,0x28, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
25110x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0xF3,0x84, 0x40,0x7C, 0x00,0x00,
25120x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x95,0x13, 0xFF,0xFC, 0x23,0x94, 0x00,0x20, 0x93,0x96,
25130xFF,0x94, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93,
25140xFF,0xFC, 0x83,0x96, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x23,0x94,
25150x00,0x68, 0x93,0x96, 0xFF,0x8C, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
25160xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x8C, 0x00,0x00, 0x00,0x01, 0x93,0x93,
25170xFF,0xFC, 0x90,0x13, 0xFF,0xFC, 0x23,0x94, 0x00,0x50, 0x93,0x96, 0xFF,0x84, 0x93,0x93,
25180xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCF,0x24, 0x97,0x93, 0xFF,0xFC, 0x87,0x02,
25190xFF,0x34, 0x00,0x00, 0x00,0x01, 0xF7,0x05, 0x42,0x64, 0xF3,0x84, 0x40,0x7C, 0x00,0x00,
25200x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x97,0x13, 0xFF,0xFC, 0x83,0x96, 0xFF,0x84, 0x00,0x00,
25210x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0x93,0x93,
25220xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xF7,0xC8, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
25230x00,0x00, 0xE6,0x00, 0x9D,0x5D, 0xF3,0x82, 0x17,0x70, 0xF7,0x04, 0x42,0x54, 0x00,0x00,
25240x00,0x01, 0x27,0x38, 0x00,0x01, 0xF7,0x05, 0x42,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82,
25250x00,0x1B, 0x93,0x93, 0xFF,0xFC, 0xF3,0x86, 0x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
25260x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0x9E,0x40, 0x00,0x00,
25270x00,0x01, 0xF5,0x04, 0x40,0x7C, 0xF4,0x84, 0x40,0x74, 0xC7,0x28, 0x50,0x00, 0xC7,0x24,
25280x70,0x00, 0x05,0xB8, 0x00,0x26, 0x86,0xAE, 0x00,0x00, 0x77,0x2D, 0x00,0x1E, 0x77,0x38,
25290xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x77,0xB4, 0x00,0x08, 0x70,0x3E, 0xFF,0xE8, 0x47,0x0C,
25300x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xF7,0x04, 0x4F,0x58, 0xE6,0x00,
25310x9D,0xFD, 0xF6,0x02, 0x00,0xFF, 0xF7,0x04, 0x42,0x78, 0xF6,0x06, 0x42,0x7A, 0x76,0xB1,
25320x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
25330x00,0x01, 0xF7,0x33, 0x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93,
25340xFF,0xFC, 0xE0,0x00, 0x9E,0x40, 0x00,0x00, 0x00,0x01, 0x86,0xAE, 0x00,0x00, 0x77,0x2D,
25350x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02,
25360x00,0x01, 0xC7,0x38, 0x64,0x00, 0xF6,0x02, 0xFF,0x00, 0xC6,0xB4, 0x64,0x00, 0xC7,0x38,
25370x68,0x00, 0xF7,0x2F, 0x28,0x00, 0x07,0x28, 0x00,0x01, 0x97,0x13, 0xFF,0xFC, 0x94,0x93,
25380xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xBE,0xF8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
25390xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
25400x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0xD8, 0xF3,0x86,
25410x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93,
25420xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xA2,0xC9, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
25430x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEE,0x00, 0xA0,0x35, 0x24,0x94,
25440x00,0x36, 0xF6,0x04, 0x40,0x74, 0x25,0x14, 0x00,0x38, 0x06,0x30, 0x00,0x02, 0x87,0x32,
25450x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x06,0x30, 0x00,0x02, 0x75,0xB1,
25460x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x32,
25470x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25480x28,0x00, 0x24,0x94, 0x00,0x34, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
25490x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25500x28,0x00, 0x24,0x94, 0x00,0x32, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
25510x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25520x28,0x00, 0x24,0x94, 0x00,0x30, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
25530x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25540x28,0x00, 0x24,0x94, 0x00,0x2E, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
25550x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25560x28,0x00, 0x24,0x94, 0x00,0x2C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
25570x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25580x28,0x00, 0x24,0x94, 0x00,0x2A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
25590x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25600x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x94, 0x00,0x28, 0x76,0x31,
25610x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
25620x28,0x00, 0xF3,0x84, 0x40,0x7C, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x95,0x13,
25630xFF,0xFC, 0x23,0x94, 0x00,0x20, 0x93,0x96, 0xFF,0x4C, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
25640x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x4C, 0x00,0x00,
25650x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x23,0x94, 0x00,0x50, 0x93,0x96, 0xFF,0x44, 0x93,0x93,
25660xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x87,0x02,
25670xFF,0x34, 0x00,0x00, 0x00,0x01, 0xF7,0x05, 0x42,0x64, 0xF3,0x84, 0x40,0x7C, 0x00,0x00,
25680x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x97,0x13, 0xFF,0xFC, 0x83,0x96, 0xFF,0x44, 0x00,0x00,
25690x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x4C, 0xE0,0x00, 0xA2,0x80, 0x93,0x93,
25700xFF,0xFC, 0xF4,0x04, 0x40,0x7C, 0xF6,0x04, 0x40,0x74, 0xF3,0x82, 0x00,0x00, 0xC7,0x20,
25710x40,0x00, 0xC7,0x30, 0x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA, 0x00,0x00, 0x77,0x39,
25720x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x77,0xB4, 0x00,0x08, 0x70,0x3E,
25730xFF,0xE8, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
25740xA0,0xAD, 0x93,0x96, 0xFF,0x3C, 0xF7,0x04, 0x42,0xA0, 0xF6,0x06, 0x42,0xA0, 0x76,0xB1,
25750x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
25760x00,0x01, 0xF7,0x33, 0x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93,
25770xFF,0xFC, 0xE0,0x00, 0xA2,0xC8, 0x00,0x00, 0x00,0x01, 0x06,0x30, 0x00,0x02, 0x87,0x32,
25780x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x24,0x94, 0x00,0x7E, 0x25,0x14,
25790x00,0x80, 0x23,0x94, 0x00,0x68, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38,
25800x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC,
25810xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94,
25820x00,0x7C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
25830xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94,
25840x00,0x7A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
25850xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94,
25860x00,0x78, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
25870xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94,
25880x00,0x76, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
25890xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94,
25900x00,0x74, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
25910xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x24,0x94,
25920x00,0x72, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
25930xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x06,0x30,
25940x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x94, 0x00,0x70, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
25950xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x94,0x13,
25960xFF,0xFC, 0x95,0x13, 0xFF,0xFC, 0x93,0x96, 0xFF,0x34, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
25970x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x34, 0x00,0x00,
25980x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x23,0x94, 0x00,0xB0, 0x93,0x96, 0xFF,0x2C, 0x93,0x93,
25990xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
26000xFF,0x2C, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x3C, 0x00,0x00,
26010x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x23,0x94, 0x00,0x98, 0x93,0x96, 0xFF,0x24, 0x93,0x93,
26020xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCF,0x24, 0x97,0x93, 0xFF,0xFC, 0xF3,0x82,
26030x00,0x06, 0xF3,0x85, 0x42,0x54, 0x87,0x02, 0xFF,0x34, 0xF3,0x86, 0x38,0xA8, 0xF3,0x85,
26040x42,0x44, 0xF7,0x05, 0x42,0x64, 0xF3,0x84, 0x40,0x7C, 0x00,0x00, 0x00,0x01, 0x93,0x93,
26050xFF,0xFC, 0x97,0x13, 0xFF,0xFC, 0x83,0x96, 0xFF,0x24, 0x00,0x00, 0x00,0x01, 0x93,0x93,
26060xFF,0xFC, 0x83,0x96, 0xFF,0x34, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x07,0x88,
26070x00,0x08, 0xE0,0x00, 0xF7,0xC8, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
26080xA2,0xA9, 0xF3,0x82, 0x17,0x70, 0xF7,0x04, 0x42,0x54, 0x00,0x00, 0x00,0x01, 0x27,0x38,
26090x00,0x01, 0xF7,0x05, 0x42,0x54, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0x1B, 0x93,0x93,
26100xFF,0xFC, 0xF3,0x86, 0x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
26110x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
26120x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
26130x00,0x08, 0xF6,0x04, 0x6F,0x34, 0xF7,0x04, 0x42,0x64, 0x86,0xB2, 0x00,0x04, 0x00,0x00,
26140x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xA3,0xAC, 0x06,0xB0, 0x00,0x02, 0x87,0x36,
26150x00,0x00, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0xF6,0x84,
26160x40,0x7C, 0x77,0x39, 0xFF,0xF0, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x00, 0xA3,0xAC, 0xC7,0x34,
26170x68,0x00, 0xF5,0x84, 0x40,0x74, 0xF6,0x04, 0x4F,0x58, 0x00,0x00, 0x00,0x01, 0xC6,0x2C,
26180x62,0x00, 0x76,0x30, 0xFF,0xFA, 0xC5,0xAC, 0x70,0x00, 0x05,0xAC, 0x00,0x26, 0x86,0xAE,
26190x00,0x00, 0x77,0x2D, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x46,0x31, 0x00,0x00, 0xC6,0xB4,
26200x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0x30, 0x74,0x00, 0xF7,0x02,
26210xFF,0x00, 0xC6,0xB4, 0x74,0x00, 0xC6,0x30, 0x68,0x00, 0xF6,0x2F, 0x28,0x00, 0xF5,0x06,
26220x42,0x44, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1F,0x48, 0x97,0x93,
26230xFF,0xFC, 0xF7,0x04, 0x40,0x7C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x13,
26240xFF,0xFC, 0xF5,0x04, 0x40,0x74, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
26250x00,0x08, 0xE0,0x00, 0xBE,0xF8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
26260xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
26270xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x80, 0xF7,0x04, 0x42,0x58, 0x00,0x00,
26280x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xA3,0xF4, 0x20,0x3A, 0x00,0x07, 0xF5,0x02,
26290x00,0x01, 0xF5,0x05, 0x42,0x58, 0xF7,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
26300x00,0x07, 0xEE,0x00, 0xA6,0xF0, 0x23,0x94, 0x00,0x1E, 0xF6,0x04, 0x42,0x60, 0x23,0x14,
26310x00,0x66, 0xF4,0x84, 0x40,0x78, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
26320x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x04,0xA4, 0x00,0x02, 0x74,0x25, 0x00,0x1E, 0x74,0x20,
26330xFF,0xE5, 0x06,0x30, 0x00,0x02, 0x75,0x31, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x95,0x16,
26340xFF,0x7C, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x25,0x14, 0x00,0x20, 0x95,0x16,
26350xFF,0x94, 0xF7,0x2B, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x85,0x16, 0xFF,0x7C, 0x05,0xA4,
26360x00,0x02, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x23,0x94,
26370x00,0x1C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
26380xFF,0xE5, 0x25,0x14, 0x00,0x50, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
26390x28,0x00, 0x23,0x94, 0x00,0x1A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
26400x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
26410x28,0x00, 0x23,0x94, 0x00,0x18, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
26420x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
26430x28,0x00, 0x23,0x94, 0x00,0x16, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
26440x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
26450x28,0x00, 0x23,0x94, 0x00,0x14, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
26460x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
26470x28,0x00, 0x23,0x94, 0x00,0x12, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
26480x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
26490x28,0x00, 0x23,0x94, 0x00,0x10, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xAD,
26500x00,0x1E, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
26510xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x87,0x26, 0x00,0x00, 0x26,0x14, 0x00,0x68, 0xC7,0x38,
26520x47,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x2E, 0x00,0x00, 0x76,0xB4,
26530xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x23,0x14,
26540x00,0x64, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
26550xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x23,0x14,
26560x00,0x62, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
26570xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x23,0x14,
26580x00,0x60, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
26590xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x23,0x14,
26600x00,0x5E, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
26610xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x23,0x14,
26620x00,0x5C, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
26630xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x23,0x14,
26640x00,0x5A, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
26650xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x05,0xAC,
26660x00,0x02, 0x87,0x2E, 0x00,0x00, 0x23,0x14, 0x00,0x58, 0x75,0xAD, 0x00,0x1E, 0x75,0xAC,
26670xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x96,0x13,
26680xFF,0xFC, 0x95,0x16, 0xFF,0x8C, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
26690xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0x8C, 0x00,0x00, 0x00,0x01, 0x95,0x13,
26700xFF,0xFC, 0xF5,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x25,0x14,
26710x00,0x38, 0x95,0x16, 0xFF,0x84, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
26720xCF,0x24, 0x97,0x93, 0xFF,0xFC, 0xF5,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x95,0x13,
26730xFF,0xFC, 0xF5,0x04, 0x42,0x64, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x85,0x16,
26740xFF,0x84, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x85,0x16, 0xFF,0x94, 0x00,0x00,
26750x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xF7,0xC8, 0x97,0x93,
26760xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xA6,0xF1, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
26770x42,0x58, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x42,0x58, 0xF7,0x04,
26780x42,0x58, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x07, 0xEE,0x00, 0xA7,0x30, 0xF5,0x02,
26790x17,0x70, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
26800x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02, 0x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00,
26810xA7,0x50, 0xB5,0x3A, 0x68,0x02, 0xE0,0x00, 0xA7,0x50, 0xF0,0x05, 0x2D,0x38, 0x95,0x13,
26820xFF,0xFC, 0xF5,0x02, 0x00,0x1B, 0x95,0x13, 0xFF,0xFC, 0xF5,0x06, 0x42,0x44, 0x95,0x13,
26830xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
26840xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
26850x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x30, 0xF6,0x04,
26860x6F,0x34, 0xF7,0x04, 0x42,0x64, 0x86,0xB2, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
26870x72,0x00, 0xE6,0x00, 0xA9,0xF0, 0x07,0x30, 0x00,0x02, 0x86,0x3A, 0x00,0x00, 0xF5,0x82,
26880x00,0x00, 0xF6,0x84, 0x40,0x7C, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0x30,
26890x77,0xC0, 0xF7,0x04, 0x40,0x74, 0xC6,0xB4, 0x68,0x00, 0x76,0x31, 0xFF,0xF0, 0xC6,0x00,
26900x62,0x00, 0x96,0x16, 0xFF,0xF4, 0xC7,0x38, 0x68,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA,
26910x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x77,0xB4,
26920x00,0x08, 0x70,0x3E, 0xFF,0xE8, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A,
26930x00,0x00, 0xE6,0x00, 0xA8,0x34, 0xF6,0x02, 0x00,0xFF, 0x83,0x16, 0xFF,0xF4, 0x83,0x96,
26940xFF,0xF4, 0xF7,0x04, 0x40,0x78, 0xC6,0x98, 0x38,0x00, 0xC7,0x38, 0x68,0x00, 0x07,0x38,
26950x00,0x26, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
26960x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xC6,0xB4, 0x64,0x00, 0xC0,0x36, 0x5A,0x00, 0x47,0x0C,
26970x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xA8,0x3D, 0x20,0x2E,
26980x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xA8,0x75, 0xF6,0x06,
26990x42,0x7C, 0xF7,0x04, 0x42,0x7C, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
27000x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0x07,0x88,
27010x00,0x08, 0xE0,0x00, 0x78,0x9C, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0xA9,0xF0, 0x00,0x00,
27020x00,0x01, 0xF3,0x04, 0x42,0x60, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x07,0x88,
27030x00,0x08, 0xE0,0x00, 0xCC,0x60, 0x97,0x93, 0xFF,0xFC, 0xF4,0x04, 0x40,0x78, 0xF7,0x04,
27040x4F,0x58, 0xF5,0x04, 0x40,0x74, 0xF3,0x84, 0x40,0x7C, 0xF3,0x04, 0x40,0x7C, 0xC6,0x20,
27050x72,0x00, 0x76,0x30, 0xFF,0xFA, 0xC5,0x9C, 0x30,0x00, 0xC5,0xA8, 0x58,0x00, 0x05,0xAC,
27060x00,0x26, 0x86,0xAE, 0x00,0x00, 0x74,0xAD, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x73,0xAD,
27070x00,0x1E, 0x73,0x9C, 0xFF,0xE5, 0x93,0x96, 0xFF,0xD4, 0xC5,0x28, 0x72,0x00, 0x75,0x28,
27080xFF,0xFA, 0x83,0x16, 0xFF,0xF4, 0x83,0x96, 0xFF,0xF4, 0x46,0x31, 0x00,0x00, 0x45,0x29,
27090x00,0x00, 0xC7,0x18, 0x38,0x00, 0xC4,0x20, 0x70,0x00, 0x04,0x20, 0x00,0x26, 0x73,0x21,
27100x00,0x1E, 0xC6,0xB4, 0x4F,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF4,0x82, 0x00,0xFF, 0xC6,0x30,
27110x4C,0x00, 0xF3,0x82, 0xFF,0x00, 0xC6,0xB4, 0x3C,0x00, 0xC6,0x30, 0x68,0x00, 0xF6,0x2F,
27120x28,0x00, 0x87,0x2E, 0x00,0x00, 0x73,0x18, 0xFF,0xE5, 0x93,0x16, 0xFF,0xCC, 0x83,0x16,
27130xFF,0xD4, 0x83,0x96, 0xFF,0xF4, 0xC5,0x28, 0x4C,0x00, 0xC7,0x38, 0x37,0xC0, 0x77,0x39,
27140xFF,0xF0, 0x76,0x9D, 0x00,0x10, 0x76,0xB5, 0xFF,0xF8, 0xC7,0x38, 0x4C,0x00, 0xC6,0xB4,
27150x70,0x00, 0xF6,0xAF, 0x28,0x00, 0x87,0x22, 0x00,0x00, 0x76,0xA1, 0x00,0x1E, 0x83,0x16,
27160xFF,0xCC, 0xF3,0x82, 0xFF,0x00, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x37,0xC0, 0x77,0x39,
27170xFF,0xF0, 0xC7,0x38, 0x3C,0x00, 0xC5,0x28, 0x70,0x00, 0xF5,0x23, 0x28,0x00, 0x87,0x22,
27180x00,0x00, 0xF3,0x04, 0x40,0x7C, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x73,0x19,
27190x00,0x10, 0x93,0x16, 0xFF,0xEC, 0x73,0x99, 0xFF,0xF8, 0xC7,0x38, 0x4C,0x00, 0xC7,0x1C,
27200x70,0x00, 0x97,0x16, 0xFF,0xDC, 0x23,0x14, 0x00,0x22, 0x83,0x1A, 0x00,0x00, 0x77,0x99,
27210x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC3,0x18, 0x7F,0xC0, 0x73,0x19, 0xFF,0xF0, 0xF3,0x23,
27220x28,0x00, 0xF3,0x86, 0x42,0x44, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
27230x1F,0x48, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04, 0x40,0x7C, 0x00,0x00, 0x00,0x01, 0x07,0x38,
27240x00,0x01, 0x97,0x13, 0xFF,0xFC, 0xF3,0x04, 0x40,0x74, 0x00,0x00, 0x00,0x01, 0x93,0x13,
27250xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xBE,0xF8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
27260xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
27270x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x98, 0xF3,0x06,
27280x42,0x44, 0x93,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x20,0xE4, 0x97,0x93,
27290xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xAE,0xE5, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
27300x42,0x54, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEE,0x00, 0xAD,0x89, 0x27,0x38,
27310x00,0x01, 0xF7,0x05, 0x42,0x54, 0x23,0x94, 0x00,0x1E, 0xF6,0x04, 0x42,0x60, 0x24,0x94,
27320x00,0x66, 0x94,0x96, 0xFF,0x64, 0xF3,0x04, 0x40,0x78, 0x24,0x94, 0x00,0x20, 0x94,0x96,
27330xFF,0x94, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
27340xFF,0xE5, 0x03,0x18, 0x00,0x02, 0x93,0x16, 0xFF,0x74, 0x74,0x19, 0x00,0x1E, 0x74,0x20,
27350xFF,0xE5, 0x05,0x98, 0x00,0x02, 0x06,0x30, 0x00,0x02, 0x75,0x31, 0x00,0x1E, 0xC7,0x38,
27360x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0x28,
27370xFF,0xE5, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x23,0x94,
27380x00,0x1C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
27390xFF,0xE5, 0x85,0x16, 0xFF,0x64, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
27400x28,0x00, 0x23,0x94, 0x00,0x1A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
27410x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
27420x28,0x00, 0x23,0x94, 0x00,0x18, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
27430x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
27440x28,0x00, 0x23,0x94, 0x00,0x16, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
27450x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
27460x28,0x00, 0x23,0x94, 0x00,0x14, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
27470x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
27480x28,0x00, 0x23,0x94, 0x00,0x12, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
27490x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F,
27500x28,0x00, 0x23,0x94, 0x00,0x10, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xAD,
27510x00,0x1E, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
27520xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x26,0x14, 0x00,0x68, 0xC7,0x38,
27530x47,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x2E, 0x00,0x00, 0x76,0xB4,
27540xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x23,0x14,
27550x00,0x64, 0x93,0x16, 0xFF,0x64, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
27560x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
27570x28,0x00, 0x24,0x94, 0x00,0x62, 0x94,0x96, 0xFF,0x64, 0x05,0xAC, 0x00,0x02, 0x87,0x2E,
27580x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
27590xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x25,0x14, 0x00,0x60, 0x95,0x16, 0xFF,0x64, 0x05,0xAC,
27600x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
27610x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x23,0x14, 0x00,0x5E, 0x93,0x16,
27620xFF,0x64, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
27630xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x24,0x94,
27640x00,0x5C, 0x94,0x96, 0xFF,0x64, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
27650x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
27660x28,0x00, 0x25,0x14, 0x00,0x5A, 0x95,0x16, 0xFF,0x64, 0x05,0xAC, 0x00,0x02, 0x87,0x2E,
27670x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x24,0x94, 0x00,0x50, 0xC7,0x38,
27680x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x23,0x14, 0x00,0x58, 0x05,0xAC,
27690x00,0x02, 0x87,0x2E, 0x00,0x00, 0x93,0x16, 0xFF,0x64, 0x75,0xAD, 0x00,0x1E, 0x75,0xAC,
27700xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x96,0x13,
27710xFF,0xFC, 0x94,0x96, 0xFF,0x8C, 0x94,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
27720xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0x8C, 0x23,0x14, 0x00,0x38, 0x95,0x13,
27730xFF,0xFC, 0x27,0x80, 0x00,0x07, 0x97,0x93, 0xFF,0xFC, 0x93,0x16, 0xFF,0x84, 0x93,0x13,
27740xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCF,0x24, 0x97,0x93, 0xFF,0xFC, 0x27,0x80,
27750x00,0x07, 0xF7,0x85, 0x42,0x58, 0x27,0x80, 0x00,0x07, 0x97,0x93, 0xFF,0xFC, 0xF4,0x84,
27760x42,0x64, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0x84, 0x00,0x00,
27770x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x83,0x16, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0x93,0x13,
27780xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xF7,0xC8, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
27790x00,0x00, 0xE6,0x00, 0xAD,0x5D, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x58, 0x00,0x00,
27800x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x42,0x58, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86,
27810x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF4,0x82,
27820x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0xAE,0xE4, 0xB4,0xBA, 0x68,0x02, 0xE0,0x00,
27830xAE,0xE4, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x40,0x78, 0xF5,0x84, 0x4F,0x58, 0x07,0x38,
27840x00,0x16, 0x86,0xBA, 0x00,0x00, 0xF4,0x06, 0x3B,0x90, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
27850xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB4, 0xFF,0xF0, 0x76,0x35, 0x00,0x06, 0xA7,0x2E,
27860x60,0x02, 0xC5,0x2C, 0x60,0x00, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
27870x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x40,0x00, 0x07,0x38,
27880x00,0x02, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
27890x77,0xC0, 0x73,0xB7, 0xFF,0xF0, 0xEE,0x00, 0xAE,0x55, 0x95,0x16, 0xFF,0x64, 0xA7,0x2E,
27900x60,0x02, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
27910xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x40,0x00, 0x86,0xBA, 0x00,0x04, 0x23,0x14,
27920x00,0x88, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
27930xFF,0xF0, 0xA6,0xAA, 0x68,0x02, 0x77,0x1D, 0x00,0x03, 0xC7,0x38, 0x68,0x00, 0x27,0x38,
27940x00,0x08, 0x85,0x3A, 0x00,0x04, 0x84,0xBA, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x95,0x1A,
27950x00,0x04, 0x94,0x9A, 0x00,0x00, 0x85,0x96, 0xFF,0x7C, 0xE0,0x00, 0xAE,0x78, 0x00,0x00,
27960x00,0x01, 0x84,0x96, 0xFF,0x64, 0xA7,0x2E, 0x60,0x02, 0x76,0xA5, 0x00,0x1E, 0x76,0xB4,
27970xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38,
27980x40,0x00, 0x85,0xBA, 0x00,0x04, 0x85,0x16, 0xFF,0x64, 0xF6,0x06, 0x3B,0x90, 0x87,0x2A,
27990x00,0x00, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
28000xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xA6,0xBA, 0x60,0x02, 0x20,0x1E, 0x00,0x00, 0xC7,0x38,
28010x60,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0xEE,0x00,
28020xAE,0xC9, 0x76,0xB5, 0xFF,0xF0, 0x83,0x16, 0xFF,0x78, 0x00,0x00, 0x00,0x01, 0x77,0x19,
28030xFF,0xF0, 0xC6,0xB8, 0x68,0x00, 0x84,0x96, 0xFF,0x64, 0x00,0x00, 0x00,0x01, 0xC7,0x24,
28040x68,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xC1,0x2C, 0x00,0x00, 0x97,0x93,
28050xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
28060x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
28070x00,0x10, 0xF7,0x04, 0x40,0x84, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
28080xAF,0x3C, 0xF6,0x06, 0x42,0xB8, 0xF7,0x04, 0x42,0xB8, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
28090xFF,0xE5, 0xF3,0x06, 0x36,0x78, 0xF3,0x05, 0x42,0x44, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
28100xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0xF7,0x04, 0x4F,0x5C, 0xF3,0x84,
28110x42,0x5C, 0x83,0x3A, 0x00,0x04, 0xC4,0x38, 0x00,0x00, 0x93,0x16, 0xFF,0xEC, 0x77,0x1D,
28120x00,0x01, 0xC7,0x38, 0x38,0x00, 0x77,0x39, 0x00,0x02, 0x04,0xB8, 0x00,0x0C, 0x83,0x16,
28130xFF,0xEC, 0x00,0x00, 0x00,0x01, 0xC0,0x1E, 0x32,0x00, 0xEC,0x00, 0xB0,0x70, 0xC5,0x04,
28140x00,0x00, 0xA6,0xA2, 0x48,0x02, 0xF7,0x04, 0xE0,0x00, 0xF5,0x82, 0x00,0x00, 0xC0,0x36,
28150x72,0x00, 0xE6,0x00, 0xAF,0xA8, 0xC6,0x20, 0x48,0x00, 0x86,0xB2, 0x00,0x04, 0xF7,0x04,
28160xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xAF,0xAC, 0x20,0x2E,
28170x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xAF,0xB9, 0x00,0x00,
28180x00,0x01, 0xF5,0x02, 0x00,0x00, 0x86,0xB2, 0x00,0x00, 0xF7,0x04, 0xE0,0x00, 0x00,0x00,
28190x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xAF,0xF4, 0xF5,0x82, 0x00,0x00, 0xC0,0x36,
28200x72,0x00, 0xE6,0x00, 0xAF,0xFC, 0x20,0x2E, 0x00,0x00, 0x86,0xB2, 0x00,0x04, 0xF7,0x04,
28210xE0,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xAF,0xFD, 0x20,0x2E,
28220x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xB0,0x0D, 0x20,0x2A,
28230x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0xB0,0x59, 0x00,0x00,
28240x00,0x01, 0xF7,0x04, 0x7A,0xD0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
28250xB0,0x64, 0xC7,0x20, 0x48,0x00, 0x87,0x3A, 0x00,0x08, 0xF6,0x06, 0x40,0x98, 0x77,0x39,
28260x00,0x02, 0xA6,0xBA, 0x60,0x02, 0xC7,0x38, 0x60,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
28270xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x20,0x36, 0x00,0x00, 0xE6,0x00,
28280xB0,0x64, 0x00,0x00, 0x00,0x01, 0x04,0xA4, 0x00,0x0C, 0xE0,0x00, 0xAF,0x60, 0x03,0x9C,
28290x00,0x01, 0x83,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0xC0,0x1E, 0x32,0x00, 0xEC,0x00,
28300xB1,0x04, 0xF3,0x06, 0x36,0x78, 0xF6,0x84, 0x4F,0x5C, 0x77,0x1D, 0x00,0x01, 0xC7,0x38,
28310x38,0x00, 0x77,0x39, 0x00,0x02, 0x07,0x38, 0x00,0x0C, 0xC6,0xB4, 0x70,0x00, 0x87,0x36,
28320x00,0x08, 0xF6,0x84, 0x4F,0x58, 0x77,0x39, 0x00,0x06, 0xC6,0xB4, 0x70,0x00, 0x96,0x93,
28330xFF,0xFC, 0x93,0x96, 0xFF,0xF4, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xFA,0x98, 0x97,0x93,
28340xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xF6,0x84, 0x42,0x6C, 0x83,0x96, 0xFF,0xF4, 0x47,0x0C,
28350x00,0x01, 0xD7,0x00, 0x0A,0x70, 0xC7,0x1C, 0x70,0x00, 0xF7,0x05, 0x42,0x5C, 0x06,0xB4,
28360x00,0x01, 0xF7,0x04, 0x2D,0x38, 0xF6,0x85, 0x42,0x6C, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
28370x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x1C, 0x20,0x32,
28380x00,0x44, 0xE6,0x00, 0xB1,0x08, 0xB3,0x3A, 0x68,0x02, 0xE0,0x00, 0xB1,0x08, 0xF0,0x05,
28390x2D,0x38, 0xF3,0x05, 0x42,0x44, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
28400x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
28410x00,0x08, 0xF4,0x02, 0x00,0x00, 0xC5,0xA0, 0x00,0x00, 0xF6,0x82, 0x07,0x70, 0xF7,0x04,
28420x6E,0x50, 0x20,0x36, 0x00,0x00, 0xE6,0x00, 0xB1,0x6D, 0x06,0x38, 0x00,0x1C, 0x87,0x32,
28430x00,0x00, 0x00,0x00, 0x00,0x01, 0xC4,0x20, 0x70,0x00, 0xC0,0x22, 0x72,0x00, 0xE4,0x00,
28440xB1,0x5D, 0x00,0x00, 0x00,0x01, 0x05,0xAC, 0x00,0x01, 0x26,0xB4, 0x00,0x01, 0x20,0x36,
28450x00,0x00, 0xE6,0x00, 0xB1,0x40, 0x06,0x30, 0x00,0x04, 0xC4,0x20, 0x58,0x00, 0xC0,0x22,
28460x5A,0x00, 0xE4,0x00, 0xB1,0x81, 0x00,0x00, 0x00,0x01, 0x04,0x20, 0x00,0x01, 0x87,0x96,
28470xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
28480x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
28490x78,0xD8, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xB1,0x1C, 0x97,0x93,
28500xFF,0xFC, 0xF7,0x04, 0x40,0x94, 0x00,0x00, 0x00,0x01, 0xC0,0x22, 0x72,0x00, 0xE6,0x00,
28510xB1,0xED, 0xF4,0x05, 0x40,0x90, 0xF7,0x04, 0x6E,0x50, 0x00,0x00, 0x00,0x01, 0x86,0xBA,
28520x1D,0xDC, 0xF5,0x82, 0x00,0x01, 0x06,0xB4, 0x00,0x01, 0x96,0xBA, 0x1D,0xDC, 0x87,0x3A,
28530x1D,0xDC, 0xE0,0x00, 0xB1,0xF0, 0xF5,0x85, 0x7A,0xD0, 0xF0,0x05, 0x7A,0xD0, 0xF5,0x84,
28540x40,0x90, 0xF0,0x05, 0x40,0x84, 0xF5,0x85, 0x40,0x94, 0xF5,0x86, 0xE0,0x00, 0x95,0x93,
28550xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD5,0xA0, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04,
28560x6E,0x50, 0xF4,0x05, 0x40,0x84, 0x85,0xBA, 0x1D,0xDC, 0x00,0x00, 0x00,0x01, 0xF5,0x85,
28570x3B,0x64, 0xF5,0x84, 0xE0,0x00, 0xF0,0x05, 0x42,0x5C, 0x95,0xBA, 0x00,0x10, 0xF5,0x84,
28580xE0,0x04, 0xF6,0x86, 0x2C,0x28, 0x95,0xBA, 0x00,0x14, 0xF7,0x04, 0x2D,0x38, 0xF5,0x86,
28590x3A,0x4C, 0xF5,0x85, 0x42,0x44, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
28600x00,0x02, 0xF5,0x82, 0x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0xB2,0x68, 0xB5,0xBA,
28610x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x86, 0x35,0xEC, 0xF5,0x85, 0x42,0x30, 0x87,0x96,
28620xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
28630x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0xC8, 0xF3,0x02,
28640x00,0x00, 0x93,0x16, 0xFF,0x94, 0x24,0x80, 0x00,0x08, 0x94,0x96, 0xFF,0x84, 0x23,0x80,
28650x00,0x07, 0x83,0x16, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0x93,0x16, 0xFF,0x54, 0x20,0x1E,
28660x00,0x07, 0xEE,0x00, 0xB5,0x64, 0xC7,0x1C, 0x38,0x00, 0x84,0x96, 0x00,0x00, 0x00,0x00,
28670x00,0x01, 0xC7,0x24, 0x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA, 0x00,0x00, 0xF5,0x84,
28680x4F,0x58, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
28690xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB6, 0x74,0x00, 0xE6,0x00, 0xB3,0x2D, 0x20,0x36,
28700x00,0x01, 0xE6,0x00, 0xB3,0x2D, 0x77,0x35, 0x00,0x06, 0xA6,0xBA, 0x58,0x02, 0xC7,0x38,
28710x58,0x00, 0x76,0x39, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC6,0xB4, 0x67,0xC0, 0x76,0xB5,
28720xFF,0xF0, 0x20,0x36, 0x00,0x02, 0xE6,0x00, 0xB3,0x31, 0xC6,0xB8, 0x00,0x00, 0xC7,0x2C,
28730x00,0x00, 0xE0,0x00, 0xB3,0x30, 0xC6,0xB8, 0x00,0x00, 0xF6,0x84, 0x4F,0x58, 0xF7,0x04,
28740x4F,0x58, 0xC5,0x34, 0x00,0x00, 0xC0,0x2A, 0x72,0x00, 0xE6,0x00, 0xB5,0x5D, 0x00,0x00,
28750x00,0x01, 0xF6,0x84, 0x3B,0xBC, 0xF3,0x02, 0x00,0x00, 0x93,0x16, 0xFF,0x3C, 0x04,0x28,
28760x00,0x1C, 0xF7,0x04, 0x3B,0xB8, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x00,
28770xB4,0x40, 0x96,0x96, 0xFF,0xAC, 0x77,0x35, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39,
28780x00,0x02, 0xF4,0x86, 0x3B,0xB4, 0xC6,0x38, 0x48,0x00, 0x06,0x30, 0x00,0x0C, 0xC3,0x04,
28790x00,0x00, 0x93,0x16, 0xFF,0x34, 0x86,0xB2, 0x00,0x00, 0x87,0x2A, 0x00,0x1C, 0x85,0x96,
28800xFF,0x3C, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xB3,0xC0, 0x20,0x2E, 0x00,0x00, 0x86,0xB2,
28810x00,0x04, 0x87,0x2A, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
28820xB3,0xC0, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00,
28830xB3,0xD1, 0x00,0x00, 0x00,0x01, 0xF4,0x82, 0x00,0x00, 0x94,0x96, 0xFF,0x34, 0x86,0xB2,
28840x00,0x00, 0x87,0x22, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
28850xB4,0x0C, 0xF5,0x82, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xB4,0x14, 0x20,0x2E,
28860x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x22, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
28870x72,0x00, 0xE2,0x00, 0xB4,0x15, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
28880x00,0x00, 0xE6,0x00, 0xB4,0x25, 0x00,0x00, 0x00,0x01, 0xF3,0x02, 0x00,0x01, 0x93,0x16,
28890xFF,0x34, 0x84,0x96, 0xFF,0x34, 0x00,0x00, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00,
28900xB4,0x40, 0x00,0x00, 0x00,0x01, 0xF3,0x02, 0x00,0x01, 0x93,0x16, 0xFF,0x3C, 0x84,0x96,
28910xFF,0x3C, 0x00,0x00, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0xB4,0x81, 0xF6,0x02,
28920x00,0x01, 0x87,0x16, 0xFF,0xAC, 0xF3,0x06, 0x3B,0xB4, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4,
28930x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6,
28940x00,0x00, 0x97,0x16, 0xFF,0xB0, 0xE0,0x00, 0xB4,0xF4, 0x96,0x96, 0xFF,0xB4, 0x27,0x14,
28950x00,0x54, 0x97,0x13, 0xFF,0xFC, 0x94,0x13, 0xFF,0xFC, 0xF4,0x86, 0x3B,0xB4, 0x94,0x93,
28960xFF,0xFC, 0x93,0x96, 0xFF,0x4C, 0x95,0x16, 0xFF,0x44, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
28970x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x4C, 0x85,0x16, 0xFF,0x44, 0x20,0x22,
28980x00,0x00, 0xE6,0x00, 0xB4,0xF1, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xAC, 0xF3,0x06,
28990x3B,0xB4, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4,
29000x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xB0, 0x96,0x96,
29010xFF,0xB4, 0xF7,0x05, 0x3B,0xBC, 0xE0,0x00, 0xB4,0xF8, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
29020x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0xB5,0x2D, 0x27,0x14, 0x00,0x08, 0x84,0x96,
29030xFF,0x54, 0x00,0x00, 0x00,0x01, 0xC7,0x24, 0x70,0x00, 0x83,0x16, 0xFF,0xB4, 0x04,0xA4,
29040x00,0x04, 0x94,0x96, 0xFF,0x54, 0x84,0x96, 0xFF,0x94, 0x93,0x3A, 0xFF,0xC0, 0x04,0xA4,
29050x00,0x01, 0xE0,0x00, 0xB5,0x54, 0x94,0x96, 0xFF,0x94, 0x83,0x16, 0xFF,0x54, 0x00,0x00,
29060x00,0x01, 0xC7,0x18, 0x70,0x00, 0xF4,0x84, 0x4F,0x58, 0x03,0x18, 0x00,0x04, 0x93,0x16,
29070xFF,0x54, 0x83,0x16, 0xFF,0x94, 0x94,0xBA, 0xFF,0xC0, 0x03,0x18, 0x00,0x01, 0x93,0x16,
29080xFF,0x94, 0x95,0x16, 0xFF,0x3C, 0x93,0x96, 0xFF,0x8C, 0xE0,0x00, 0xB2,0xB0, 0x03,0x9C,
29090x00,0x01, 0x84,0x96, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00,
29100xB5,0x84, 0xF3,0x82, 0x00,0x01, 0xF4,0x04, 0x4F,0x58, 0xE0,0x00, 0xBE,0xE4, 0x00,0x00,
29110x00,0x01, 0x83,0x16, 0xFF,0xB8, 0x84,0x96, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0xC0,0x1E,
29120x4A,0x00, 0xEC,0x00, 0xB5,0xCC, 0x93,0x16, 0xFF,0x7C, 0x26,0x94, 0x00,0x04, 0x87,0x36,
29130xFF,0xC0, 0x83,0x16, 0xFF,0x7C, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00,
29140xBB,0x98, 0x03,0x9C, 0x00,0x01, 0x84,0x96, 0xFF,0x94, 0x00,0x00, 0x00,0x01, 0xC0,0x1E,
29150x4A,0x00, 0xEC,0x00, 0xB5,0xA1, 0x06,0xB4, 0x00,0x04, 0xF4,0x04, 0x4F,0x58, 0x83,0x16,
29160xFF,0x7C, 0x00,0x00, 0x00,0x01, 0xC0,0x1A, 0x42,0x00, 0xE6,0x00, 0xBA,0x2D, 0xF4,0x82,
29170x00,0x00, 0x94,0x96, 0xFF,0x74, 0x23,0x80, 0x00,0x07, 0x20,0x1E, 0x00,0x07, 0xEE,0x00,
29180xB7,0x48, 0xC7,0x1C, 0x38,0x00, 0x83,0x16, 0xFF,0x7C, 0x00,0x00, 0x00,0x01, 0xC7,0x18,
29190x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA, 0x00,0x00, 0xF5,0x84, 0x4F,0x58, 0x77,0x39,
29200x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02,
29210x00,0xFF, 0xC6,0xB6, 0x74,0x00, 0xE6,0x00, 0xB6,0x69, 0x20,0x36, 0x00,0x01, 0xE6,0x00,
29220xB6,0x69, 0x77,0x35, 0x00,0x06, 0xA6,0xBA, 0x58,0x02, 0xC7,0x38, 0x58,0x00, 0x76,0x39,
29230x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC6,0xB4, 0x67,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x20,0x36,
29240x00,0x02, 0xE6,0x00, 0xB6,0x6D, 0xC6,0xB8, 0x00,0x00, 0xC7,0x2C, 0x00,0x00, 0xE0,0x00,
29250xB6,0x6C, 0xC6,0xB8, 0x00,0x00, 0xF6,0x84, 0x4F,0x58, 0xF7,0x04, 0x4F,0x58, 0xC5,0x34,
29260x00,0x00, 0xC0,0x2A, 0x72,0x00, 0xE6,0x00, 0xB7,0x41, 0xC5,0x84, 0x00,0x00, 0x84,0x96,
29270xFF,0x74, 0x86,0xAA, 0x00,0x1C, 0x83,0x16, 0xFF,0x3C, 0xF6,0x02, 0x00,0x00, 0x04,0xA4,
29280x00,0x01, 0x94,0x96, 0xFF,0x74, 0x87,0x1A, 0x00,0x1C, 0x04,0xA8, 0x00,0x1C, 0x94,0x96,
29290xFF,0x34, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xB6,0xCC, 0x04,0x18, 0x00,0x1C, 0x86,0xAA,
29300x00,0x20, 0x87,0x1A, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
29310xB6,0xD0, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
29320xB6,0xDD, 0x00,0x00, 0x00,0x01, 0xF5,0x82, 0x00,0x00, 0x83,0x16, 0xFF,0x34, 0x87,0x22,
29330x00,0x00, 0x86,0x9A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
29340xB7,0x1C, 0xF6,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xB7,0x24, 0x20,0x32,
29350x00,0x00, 0x86,0x9A, 0x00,0x04, 0x87,0x22, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
29360x72,0x00, 0xE2,0x00, 0xB7,0x25, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32,
29370x00,0x00, 0xE6,0x00, 0xB7,0x35, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
29380x00,0x00, 0xE6,0x00, 0xB7,0x40, 0x00,0x00, 0x00,0x01, 0x93,0x96, 0xFF,0x84, 0xE0,0x00,
29390xB5,0xEC, 0x03,0x9C, 0x00,0x01, 0x84,0x96, 0xFF,0x74, 0x83,0x16, 0xFF,0x94, 0x00,0x00,
29400x00,0x01, 0xC0,0x26, 0x32,0x00, 0xE6,0x00, 0xBB,0x98, 0x23,0x00, 0x00,0x08, 0x84,0x96,
29410xFF,0x84, 0x00,0x00, 0x00,0x01, 0xC0,0x26, 0x32,0x00, 0xE6,0x00, 0xBB,0x99, 0xF6,0x02,
29420x00,0x00, 0xF6,0x84, 0x40,0x7C, 0xF7,0x04, 0x40,0x74, 0xC6,0xB4, 0x68,0x00, 0xC7,0x38,
29430x68,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
29440xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x77,0xB4, 0x00,0x08, 0x70,0x3E, 0xFF,0xE8, 0x47,0x0C,
29450x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xB8,0x04, 0xF5,0x82,
29460x00,0xFF, 0x84,0x96, 0xFF,0x84, 0x83,0x16, 0xFF,0x8C, 0x00,0x00, 0x00,0x01, 0xC7,0x24,
29470x32,0x00, 0x84,0x96, 0xFF,0x7C, 0xC7,0x38, 0x70,0x00, 0xC7,0x24, 0x70,0x00, 0x07,0x38,
29480x00,0x26, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
29490x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xC6,0xB4, 0x5C,0x00, 0xC0,0x36, 0x62,0x00, 0x47,0x0C,
29500x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xB8,0x0D, 0x20,0x32,
29510x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0xBB,0x98, 0x23,0x80,
29520x00,0x07, 0x20,0x1E, 0x00,0x07, 0xEE,0x00, 0xB8,0xC8, 0xC7,0x1C, 0x38,0x00, 0x83,0x16,
29530x00,0x00, 0x00,0x00, 0x00,0x01, 0xC7,0x18, 0x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA,
29540x00,0x00, 0xF5,0x84, 0x4F,0x58, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
29550x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB6, 0x74,0x00, 0xE6,0x00,
29560xB8,0x91, 0x20,0x36, 0x00,0x01, 0xE6,0x00, 0xB8,0x91, 0x77,0x35, 0x00,0x06, 0xA6,0xBA,
29570x58,0x02, 0xC7,0x38, 0x58,0x00, 0x76,0x39, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC6,0xB4,
29580x67,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x20,0x36, 0x00,0x02, 0xE6,0x00, 0xB8,0x95, 0xC6,0xB8,
29590x00,0x00, 0xC7,0x2C, 0x00,0x00, 0xE0,0x00, 0xB8,0x94, 0xC6,0xB8, 0x00,0x00, 0xF6,0x84,
29600x4F,0x58, 0xF7,0x04, 0x4F,0x58, 0xC5,0x34, 0x00,0x00, 0xC0,0x2A, 0x72,0x00, 0xE6,0x00,
29610xB8,0xC1, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x93,0x96, 0xFF,0x4C, 0x07,0x88,
29620x00,0x08, 0xE0,0x00, 0xCC,0x60, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x4C, 0xE0,0x00,
29630xB8,0x14, 0x03,0x9C, 0x00,0x01, 0x84,0x96, 0xFF,0x84, 0x83,0x16, 0xFF,0x8C, 0xF3,0x84,
29640x40,0x7C, 0xF5,0x04, 0x40,0x74, 0xC4,0xA4, 0x32,0x00, 0x94,0x96, 0xFF,0x34, 0x83,0x16,
29650xFF,0x34, 0xC5,0x9C, 0x38,0x00, 0xC5,0xA8, 0x58,0x00, 0x05,0xAC, 0x00,0x26, 0x86,0xAE,
29660x00,0x00, 0x77,0x2D, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x74,0x2D, 0x00,0x1E, 0x74,0x20,
29670xFF,0xE5, 0x73,0x9D, 0x00,0x10, 0x73,0x9D, 0xFF,0xF8, 0xC4,0xA4, 0x30,0x00, 0x94,0x96,
29680xFF,0x3C, 0x83,0x16, 0xFF,0x7C, 0xC6,0xB4, 0x77,0xC0, 0xC4,0x98, 0x48,0x00, 0x94,0x96,
29690xFF,0x3C, 0x04,0xA4, 0x00,0x26, 0x94,0x96, 0xFF,0x3C, 0x73,0x25, 0x00,0x1E, 0x73,0x18,
29700xFF,0xE5, 0x93,0x16, 0xFF,0x6C, 0x74,0xA5, 0x00,0x1E, 0x94,0x96, 0xFF,0x64, 0x74,0xA4,
29710xFF,0xE5, 0x94,0x96, 0xFF,0x64, 0x83,0x16, 0xFF,0x7C, 0xF4,0x84, 0x4F,0x58, 0x76,0xB5,
29720xFF,0xF0, 0xC6,0x18, 0x4A,0x00, 0x76,0x30, 0xFF,0xFA, 0x46,0x31, 0x00,0x00, 0xF3,0x02,
29730x00,0xFF, 0xC6,0x30, 0x34,0x00, 0xF4,0x82, 0xFF,0x00, 0xC6,0xB4, 0x4C,0x00, 0xC6,0x30,
29740x68,0x00, 0xF6,0x2F, 0x28,0x00, 0x87,0x2E, 0x00,0x00, 0x83,0x16, 0xFF,0x34, 0xC7,0x38,
29750x47,0xC0, 0x77,0x39, 0xFF,0xF0, 0x73,0x19, 0x00,0x10, 0x93,0x16, 0xFF,0x34, 0x74,0x99,
29760xFF,0xF8, 0xF3,0x02, 0x00,0xFF, 0xC7,0x38, 0x34,0x00, 0xC7,0x24, 0x70,0x00, 0x97,0x16,
29770xFF,0x34, 0x24,0x94, 0x00,0xCA, 0x84,0xA6, 0x00,0x00, 0x77,0xA5, 0x00,0x1E, 0x77,0xBC,
29780xFF,0xE5, 0xC4,0xA4, 0x7F,0xC0, 0x74,0xA5, 0xFF,0xF0, 0x83,0x16, 0xFF,0x3C, 0xF4,0xAF,
29790x28,0x00, 0xF4,0x84, 0x4F,0x58, 0x87,0x1A, 0x00,0x00, 0xC5,0x28, 0x4A,0x00, 0x75,0x28,
29800xFF,0xFA, 0x83,0x16, 0xFF,0x6C, 0x45,0x29, 0x00,0x00, 0xF4,0x82, 0x00,0xFF, 0xC5,0x28,
29810x4C,0x00, 0x84,0x96, 0xFF,0x3C, 0xC7,0x38, 0x37,0xC0, 0x77,0x39, 0xFF,0xF0, 0xF3,0x02,
29820xFF,0x00, 0xC7,0x38, 0x34,0x00, 0xC5,0x28, 0x70,0x00, 0xF5,0x27, 0x28,0x00, 0x87,0x26,
29830x00,0x00, 0x83,0x16, 0xFF,0x64, 0x84,0x16, 0xFF,0x7C, 0xC7,0x38, 0x37,0xC0, 0x77,0x39,
29840xFF,0xF0, 0xF4,0x82, 0x00,0xFF, 0xC7,0x38, 0x4C,0x00, 0x83,0x16, 0xFF,0x3C, 0xC3,0x9C,
29850x70,0x00, 0xE0,0x00, 0xBE,0xE4, 0xF3,0x9B, 0x28,0x00, 0xF7,0x04, 0x40,0x7C, 0xF6,0x04,
29860x40,0x74, 0xC7,0x38, 0x70,0x00, 0xC7,0x30, 0x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA,
29870x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x77,0xB4,
29880x00,0x08, 0x70,0x3E, 0xFF,0xE8, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A,
29890x00,0x00, 0xE6,0x00, 0xBA,0x7D, 0x25,0x80, 0x00,0x07, 0xE0,0x00, 0xBE,0xE4, 0x04,0x20,
29900x00,0x40, 0xE0,0x00, 0xBA,0xD8, 0xC4,0x2C, 0x00,0x00, 0xC7,0x30, 0x42,0x00, 0x84,0x96,
29910x00,0x00, 0x75,0x38, 0xFF,0xFA, 0x06,0x24, 0x00,0x0A, 0x20,0x2E, 0x00,0x07, 0xEE,0x00,
29920xBA,0xD4, 0x07,0x30, 0x00,0x0E, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
29930xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB4,
29940x74,0x00, 0x47,0x29, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
29950x00,0x00, 0xE6,0x00, 0xBA,0x74, 0x06,0x30, 0x00,0x02, 0xE0,0x00, 0xBA,0x8C, 0x05,0xAC,
29960x00,0x01, 0xF4,0x02, 0x00,0x08, 0x07,0x20, 0x00,0x07, 0x20,0x3A, 0x00,0x0E, 0xE2,0x00,
29970xBB,0xA4, 0xC5,0xA0, 0x40,0x00, 0x83,0x16, 0x00,0x00, 0xF5,0x04, 0x40,0x7C, 0xF4,0x82,
29980x00,0xFF, 0xF6,0x04, 0x4F,0x58, 0xC5,0x98, 0x58,0x00, 0x05,0xAC, 0x00,0x26, 0x86,0xAE,
29990x00,0x00, 0x77,0x2D, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0x18, 0x62,0x00, 0x76,0x30,
30000xFF,0xFA, 0x46,0x31, 0x00,0x00, 0xC6,0x30, 0x4C,0x00, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
30010xFF,0xF0, 0x77,0x29, 0x00,0x10, 0x77,0x39, 0xFF,0xF8, 0xC6,0xB4, 0x4C,0x00, 0xC7,0x38,
30020x68,0x00, 0xF7,0x2F, 0x28,0x00, 0xF5,0x84, 0x40,0x74, 0xC5,0x28, 0x50,0x00, 0xC5,0xAC,
30030x50,0x00, 0x05,0xAC, 0x00,0x26, 0x86,0xAE, 0x00,0x00, 0x77,0x2D, 0x00,0x1E, 0x77,0x38,
30040xFF,0xE5, 0x75,0x2D, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
30050xFF,0xF0, 0xF7,0x02, 0xFF,0x00, 0xC6,0xB4, 0x74,0x00, 0xC6,0x30, 0x68,0x00, 0xF6,0x2F,
30060x28,0x00, 0x87,0x2E, 0x00,0x00, 0x76,0xA1, 0x00,0x10, 0x76,0xB5, 0xFF,0xF8, 0xC7,0x38,
30070x57,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38, 0x4C,0x00, 0xC6,0xB4, 0x70,0x00, 0xE0,0x00,
30080xBB,0xF8, 0xF6,0xAF, 0x28,0x00, 0xF4,0x04, 0x4F,0x58, 0xE0,0x00, 0xBE,0xE4, 0x04,0x20,
30090x00,0x40, 0xF6,0x04, 0x4F,0x58, 0x83,0x16, 0x00,0x00, 0xF7,0x04, 0x40,0x7C, 0xF5,0x84,
30100x40,0x74, 0xC6,0x18, 0x62,0x00, 0x76,0x30, 0xFF,0xFA, 0xC7,0x38, 0x70,0x00, 0xC5,0xAC,
30110x70,0x00, 0x05,0xAC, 0x00,0x26, 0x86,0xAE, 0x00,0x00, 0x77,0x2D, 0x00,0x1E, 0x77,0x38,
30120xFF,0xE5, 0x46,0x31, 0x00,0x00, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02,
30130x00,0xFF, 0xC6,0x30, 0x74,0x00, 0xF7,0x02, 0xFF,0x00, 0xC6,0xB4, 0x74,0x00, 0xC6,0x30,
30140x68,0x00, 0xF6,0x2F, 0x28,0x00, 0x23,0x80, 0x00,0x07, 0x20,0x1E, 0x00,0x07, 0xEE,0x00,
30150xBE,0xE0, 0xC7,0x1C, 0x38,0x00, 0x84,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC7,0x24,
30160x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA, 0x00,0x00, 0xF5,0x84, 0x4F,0x58, 0x77,0x39,
30170x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02,
30180x00,0xFF, 0xC6,0xB6, 0x74,0x00, 0xE6,0x00, 0xBC,0x79, 0x20,0x36, 0x00,0x01, 0xE6,0x00,
30190xBC,0x79, 0x77,0x35, 0x00,0x06, 0xA6,0xBA, 0x58,0x02, 0xC7,0x38, 0x58,0x00, 0x76,0x39,
30200x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC6,0xB4, 0x67,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x20,0x36,
30210x00,0x02, 0xE6,0x00, 0xBC,0x7D, 0xC6,0xB8, 0x00,0x00, 0xC7,0x2C, 0x00,0x00, 0xE0,0x00,
30220xBC,0x7C, 0xC6,0xB8, 0x00,0x00, 0xF6,0x84, 0x4F,0x58, 0xF7,0x04, 0x4F,0x58, 0xC5,0x34,
30230x00,0x00, 0xC0,0x2A, 0x72,0x00, 0xE6,0x00, 0xBE,0xD9, 0x06,0xA8, 0x00,0x1C, 0x83,0x16,
30240x00,0x00, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x96,0x93, 0xFF,0xFC, 0xF4,0x86,
30250x3B,0xB4, 0x94,0x93, 0xFF,0xFC, 0x93,0x96, 0xFF,0x4C, 0x95,0x16, 0xFF,0x44, 0x96,0x96,
30260xFF,0x40, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x23,0x40, 0x97,0x93, 0xFF,0xFC, 0xF3,0x04,
30270x4F,0x5C, 0xF4,0x82, 0x00,0x00, 0x94,0x96, 0xFF,0x5C, 0x86,0x96, 0xFF,0x40, 0x83,0x96,
30280xFF,0x4C, 0x85,0x16, 0xFF,0x44, 0x93,0x16, 0xFF,0x34, 0x86,0x1A, 0x00,0x08, 0x96,0x96,
30290xFF,0x3C, 0x87,0x1A, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x32, 0x72,0x00, 0xEC,0x00,
30300xBD,0xB8, 0x96,0x16, 0xFF,0x9C, 0x77,0x31, 0x00,0x01, 0xC7,0x38, 0x60,0x00, 0x77,0x39,
30310x00,0x02, 0xC6,0x38, 0x30,0x00, 0x06,0x30, 0x00,0x0C, 0x86,0xB2, 0x00,0x00, 0x87,0x2A,
30320x00,0x1C, 0x85,0x96, 0xFF,0x5C, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xBD,0x40, 0xC4,0x04,
30330x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x2A, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
30340x72,0x00, 0xE6,0x00, 0xBD,0x44, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E,
30350x00,0x00, 0xE6,0x00, 0xBD,0x51, 0x00,0x00, 0x00,0x01, 0xF4,0x02, 0x00,0x00, 0x83,0x16,
30360xFF,0x3C, 0x86,0xB2, 0x00,0x00, 0x87,0x1A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
30370x72,0x00, 0xE2,0x00, 0xBD,0x90, 0xF5,0x82, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
30380xBD,0x98, 0x20,0x2E, 0x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x1A, 0x00,0x04, 0x00,0x00,
30390x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xBD,0x99, 0x20,0x2E, 0x00,0x00, 0xF5,0x82,
30400x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xBD,0xA9, 0x20,0x22, 0x00,0x00, 0xF4,0x02,
30410x00,0x01, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xBD,0xB8, 0x00,0x00, 0x00,0x01, 0xF4,0x82,
30420x00,0x01, 0x94,0x96, 0xFF,0x5C, 0x83,0x16, 0xFF,0x5C, 0x00,0x00, 0x00,0x01, 0x20,0x1A,
30430x00,0x00, 0xE6,0x00, 0xBD,0xF9, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0x9C, 0x84,0x96,
30440xFF,0x34, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4,
30450x48,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xA0, 0xE0,0x00,
30460xBE,0x70, 0x96,0x96, 0xFF,0xA4, 0x27,0x14, 0x00,0x64, 0x97,0x13, 0xFF,0xFC, 0x83,0x16,
30470xFF,0x3C, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x84,0x96, 0xFF,0x34, 0x00,0x00,
30480x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x93,0x96, 0xFF,0x4C, 0x95,0x16, 0xFF,0x44, 0x07,0x88,
30490x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0x4C, 0x85,0x16,
30500xFF,0x44, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xBE,0x71, 0xF6,0x02, 0x00,0x00, 0x87,0x16,
30510xFF,0x9C, 0x83,0x16, 0xFF,0x34, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
30520x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
30530xFF,0xA0, 0x96,0x96, 0xFF,0xA4, 0x97,0x1A, 0x00,0x08, 0xF6,0x02, 0x00,0x01, 0x20,0x32,
30540x00,0x00, 0xE6,0x00, 0xBE,0x99, 0xF6,0x06, 0x42,0x9C, 0xF7,0x04, 0x42,0x9C, 0x76,0xB1,
30550x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
30560x00,0x01, 0xF7,0x33, 0x28,0x00, 0xF7,0x04, 0x4F,0x58, 0x00,0x00, 0x00,0x01, 0xC7,0x28,
30570x72,0x00, 0x77,0x38, 0xFF,0xFA, 0x47,0x39, 0x00,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x28,
30580x00,0x1C, 0x97,0x13, 0xFF,0xFC, 0xF4,0x84, 0x4F,0x5C, 0x00,0x00, 0x00,0x01, 0x94,0x93,
30590xFF,0xFC, 0x93,0x96, 0xFF,0x4C, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x23,0x40, 0x97,0x93,
30600xFF,0xFC, 0x83,0x96, 0xFF,0x4C, 0xE0,0x00, 0xBB,0xFC, 0x03,0x9C, 0x00,0x01, 0x84,0x16,
30610x00,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C,
30620x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
30630x00,0x60, 0x85,0x16, 0x00,0x00, 0x86,0x16, 0x00,0x04, 0x06,0xA8, 0x00,0x18, 0xC7,0x30,
30640x60,0x00, 0xC5,0xB8, 0x68,0x00, 0x20,0x32, 0x00,0x07, 0xEE,0x00, 0xBF,0x64, 0x07,0x2C,
30650x00,0x0E, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
30660x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB4, 0x74,0x00, 0x20,0x36,
30670x00,0x00, 0x47,0x0C, 0x00,0x01, 0xD7,0x00, 0x0A,0x70, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
30680xBF,0x61, 0x05,0xAC, 0x00,0x02, 0xE0,0x00, 0xBF,0x18, 0x06,0x30, 0x00,0x01, 0x20,0x32,
30690x00,0x07, 0xEE,0x00, 0xC0,0x4C, 0x06,0xA8, 0x00,0x16, 0xF5,0x05, 0x40,0x74, 0xF6,0x05,
30700x40,0x7C, 0xF3,0x02, 0x00,0x06, 0xF3,0x05, 0x42,0x54, 0x96,0x13, 0xFF,0xFC, 0x05,0x28,
30710x00,0x02, 0x95,0x16, 0xFF,0xC4, 0x95,0x13, 0xFF,0xFC, 0x23,0x94, 0x00,0x20, 0x93,0x96,
30720xFF,0xBC, 0x93,0x93, 0xFF,0xFC, 0x96,0x16, 0xFF,0xAC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
30730xD0,0xDC, 0x97,0x93, 0xFF,0xFC, 0x84,0x96, 0xFF,0xC4, 0x23,0x14, 0x00,0x38, 0x94,0x93,
30740xFF,0xFC, 0x93,0x16, 0xFF,0xB4, 0x93,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
30750xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x87,0x02, 0xFF,0x34, 0x86,0x16, 0xFF,0xAC, 0xF7,0x05,
30760x42,0x64, 0x96,0x13, 0xFF,0xFC, 0x97,0x13, 0xFF,0xFC, 0x83,0x96, 0xFF,0xB4, 0x00,0x00,
30770x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x84,0x96, 0xFF,0xBC, 0x00,0x00, 0x00,0x01, 0x94,0x93,
30780xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xF7,0xC8, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
30790x00,0x00, 0xE6,0x00, 0xC0,0x1D, 0xF3,0x06, 0x3A,0xD8, 0xF7,0x04, 0x42,0x54, 0x00,0x00,
30800x00,0x01, 0x27,0x38, 0x00,0x01, 0xF7,0x05, 0x42,0x54, 0xF3,0x05, 0x42,0x44, 0xF3,0x82,
30810x17,0x70, 0x93,0x93, 0xFF,0xFC, 0xF4,0x82, 0x00,0x1B, 0x94,0x93, 0xFF,0xFC, 0xF3,0x06,
30820x42,0x44, 0x93,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93,
30830xFF,0xFC, 0xE0,0x00, 0xC1,0xA0, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0xF5,0x84,
30840x4F,0x58, 0xF4,0x06, 0x3B,0x70, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
30850x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x76,0x39, 0x00,0x06, 0xA7,0x2E, 0x60,0x02, 0xC5,0x2C,
30860x60,0x00, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
30870xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x40,0x00, 0x07,0x38, 0x00,0x02, 0x86,0xBA,
30880x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB7,
30890xFF,0xF0, 0xEE,0x00, 0xC1,0x15, 0x96,0x96, 0xFF,0x9C, 0xA7,0x2E, 0x60,0x02, 0x76,0xA9,
30900x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x83,0x96, 0xFF,0x9C, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
30910xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x40,0x00, 0x86,0xBA, 0x00,0x04, 0x24,0x94,
30920x00,0x60, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
30930xFF,0xF0, 0xA6,0xAA, 0x68,0x02, 0x77,0x1D, 0x00,0x03, 0xC7,0x38, 0x68,0x00, 0x27,0x38,
30940x00,0x08, 0x83,0xBA, 0x00,0x04, 0x83,0x3A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x93,0xA6,
30950x00,0x04, 0x93,0x26, 0x00,0x00, 0x85,0x96, 0xFF,0xA4, 0xE0,0x00, 0xC1,0x38, 0x23,0x00,
30960x00,0x07, 0xA7,0x2E, 0x60,0x02, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
30970x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x40,0x00, 0x85,0xBA,
30980x00,0x04, 0x23,0x00, 0x00,0x07, 0x93,0x13, 0xFF,0xFC, 0x87,0x2A, 0x00,0x00, 0x76,0xA9,
30990x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x83,0x96, 0xFF,0x9C, 0xF6,0x06, 0x3B,0x70, 0xC7,0x38,
31000x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xA6,0xBA, 0x60,0x02, 0x20,0x1E,
31010x00,0x00, 0xC7,0x38, 0x60,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
31020x77,0xC0, 0xEE,0x00, 0xC1,0x8D, 0x76,0xB5, 0xFF,0xF0, 0x84,0x96, 0xFF,0xA0, 0x00,0x00,
31030x00,0x01, 0x77,0x25, 0xFF,0xF0, 0xC6,0xB8, 0x68,0x00, 0xC7,0x28, 0x68,0x00, 0x97,0x13,
31040xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xC1,0x2C, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
31050xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
31060x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x70, 0x25,0x00,
31070x00,0x07, 0x20,0x2A, 0x00,0x07, 0xEE,0x00, 0xC3,0xB8, 0xC7,0x28, 0x50,0x00, 0x83,0x16,
31080x00,0x00, 0x00,0x00, 0x00,0x01, 0xC7,0x18, 0x70,0x00, 0x07,0x38, 0x00,0x26, 0x86,0xBA,
31090x00,0x00, 0xF5,0x84, 0x4F,0x58, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
31100x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB6, 0x74,0x00, 0xE6,0x00,
31110xC2,0x3D, 0x20,0x36, 0x00,0x01, 0xE6,0x00, 0xC2,0x3D, 0x77,0x35, 0x00,0x06, 0xA6,0xBA,
31120x58,0x02, 0xC7,0x38, 0x58,0x00, 0x76,0x39, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC6,0xB4,
31130x67,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x20,0x36, 0x00,0x02, 0xE6,0x00, 0xC2,0x4D, 0xC0,0x3A,
31140x5A,0x00, 0xE0,0x00, 0xC2,0x48, 0xC7,0x2C, 0x00,0x00, 0xF7,0x04, 0x4F,0x58, 0xF5,0x84,
31150x4F,0x58, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x5A,0x00, 0xE6,0x00, 0xC3,0xB1, 0xF4,0x86,
31160x3B,0x90, 0x83,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x06,0x9C, 0x00,0x16, 0x87,0x36,
31170x00,0x00, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
31180xFF,0xF0, 0x76,0x39, 0x00,0x06, 0xA7,0x2E, 0x60,0x02, 0xC5,0x2C, 0x60,0x00, 0x76,0xA9,
31190x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
31200x00,0x03, 0xC7,0x38, 0x48,0x00, 0x07,0x38, 0x00,0x02, 0x86,0xBA, 0x00,0x00, 0x77,0x39,
31210x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB7, 0xFF,0xF0, 0xEE,0x00,
31220xC3,0x21, 0x96,0x96, 0xFF,0x8C, 0xA7,0x2E, 0x60,0x02, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4,
31230xFF,0xE5, 0x83,0x16, 0xFF,0x8C, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
31240x00,0x03, 0xC7,0x38, 0x48,0x00, 0x86,0xBA, 0x00,0x04, 0x24,0x94, 0x00,0x70, 0x77,0x39,
31250x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xA6,0xAA,
31260x68,0x02, 0x77,0x19, 0x00,0x03, 0xC7,0x38, 0x68,0x00, 0x27,0x38, 0x00,0x08, 0x83,0xBA,
31270x00,0x04, 0x83,0x3A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x93,0xA6, 0x00,0x04, 0x93,0x26,
31280x00,0x00, 0x86,0x16, 0xFF,0x94, 0xE0,0x00, 0xC3,0x44, 0x00,0x00, 0x00,0x01, 0xA7,0x2E,
31290x60,0x02, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF3,0x06, 0x3B,0x90, 0xC7,0x38,
31300x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x30,0x00, 0x86,0x3A,
31310x00,0x04, 0x87,0x2A, 0x00,0x00, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x83,0x96,
31320xFF,0x8C, 0xF4,0x86, 0x3B,0x90, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
31330x00,0x03, 0xA6,0xBA, 0x48,0x02, 0x20,0x1E, 0x00,0x00, 0xC7,0x38, 0x48,0x00, 0x77,0x39,
31340x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0xEE,0x00, 0xC3,0x95, 0x76,0xB5,
31350xFF,0xF0, 0x83,0x16, 0xFF,0x90, 0x00,0x00, 0x00,0x01, 0x77,0x19, 0xFF,0xF0, 0xC6,0xB8,
31360x68,0x00, 0xC7,0x28, 0x68,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xC1,0x30,
31370x00,0x00, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0xC5,0xC4, 0x00,0x00, 0x00,0x01, 0xE0,0x00,
31380xC1,0xC4, 0x05,0x28, 0x00,0x01, 0x83,0x96, 0x00,0x00, 0xF4,0x82, 0x00,0x06, 0xF4,0x85,
31390x42,0x54, 0xF6,0x04, 0x42,0x60, 0x25,0x14, 0x00,0x1E, 0x23,0x14, 0x00,0x20, 0x93,0x16,
31400xFF,0xAC, 0xF3,0x85, 0x40,0x78, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
31410x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38,
31420x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC,
31430xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14,
31440x00,0x1C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
31450xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14,
31460x00,0x1A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
31470xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14,
31480x00,0x18, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
31490xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14,
31500x00,0x16, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
31510xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14,
31520x00,0x14, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
31530xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14,
31540x00,0x12, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
31550xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x06,0x30,
31560x00,0x02, 0x87,0x32, 0x00,0x00, 0x25,0x14, 0x00,0x10, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
31570xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x07,0x1C,
31580x00,0x02, 0x97,0x13, 0xFF,0xFC, 0x23,0x94, 0x00,0x50, 0x93,0x96, 0xFF,0xA4, 0x93,0x93,
31590xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD2,0x58, 0x97,0x93, 0xFF,0xFC, 0x84,0x96,
31600xFF,0xA4, 0x23,0x14, 0x00,0x38, 0x94,0x93, 0xFF,0xFC, 0x27,0x80, 0x00,0x07, 0x97,0x93,
31610xFF,0xFC, 0x93,0x16, 0xFF,0x9C, 0x93,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
31620xCF,0x24, 0x97,0x93, 0xFF,0xFC, 0x87,0x02, 0xFF,0x34, 0x27,0x80, 0x00,0x07, 0xF7,0x85,
31630x42,0x58, 0xF7,0x05, 0x42,0x64, 0x27,0x80, 0x00,0x07, 0x97,0x93, 0xFF,0xFC, 0x97,0x13,
31640xFF,0xFC, 0x83,0x96, 0xFF,0x9C, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x84,0x96,
31650xFF,0xAC, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
31660xF5,0xF4, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xC5,0x95, 0x00,0x00,
31670x00,0x01, 0xF7,0x04, 0x42,0x58, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
31680x42,0x58, 0xF7,0x04, 0x2D,0x38, 0xF3,0x06, 0x39,0xC0, 0xF3,0x05, 0x42,0x44, 0xF6,0x86,
31690x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x82,
31700x00,0x1C, 0x20,0x32, 0x00,0x44, 0xE6,0x00, 0xC5,0xC4, 0xB3,0xBA, 0x68,0x02, 0xF0,0x05,
31710x2D,0x38, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C,
31720x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x25,0x00,
31730x00,0x07, 0xF7,0x04, 0x40,0x74, 0xF6,0x84, 0x4F,0x58, 0xF6,0x04, 0x42,0x60, 0xC7,0x38,
31740x6A,0x00, 0x75,0xB8, 0xFF,0xFA, 0x06,0x30, 0x00,0x0A, 0x20,0x2A, 0x00,0x07, 0xEE,0x00,
31750xC6,0x48, 0x07,0x30, 0x00,0x0E, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
31760xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB4,
31770x74,0x00, 0x47,0x2D, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
31780x00,0x00, 0xE6,0x00, 0xC6,0x4C, 0xC3,0x28, 0x00,0x00, 0x06,0x30, 0x00,0x02, 0xE0,0x00,
31790xC5,0xFC, 0x05,0x28, 0x00,0x01, 0xF3,0x02, 0x00,0x08, 0xC5,0x18, 0x30,0x00, 0xF3,0x84,
31800x42,0x60, 0xF6,0x04, 0x4F,0x58, 0xF7,0x04, 0x40,0x7C, 0xF4,0x84, 0x40,0x74, 0xC5,0x1C,
31810x50,0x00, 0x05,0x28, 0x00,0x26, 0x85,0xAA, 0x00,0x00, 0x74,0x29, 0x00,0x1E, 0x74,0x20,
31820xFF,0xE5, 0xC6,0x1C, 0x62,0x00, 0x76,0x30, 0xFF,0xFA, 0xC6,0xB8, 0x70,0x00, 0xC4,0xA4,
31830x68,0x00, 0x04,0xA4, 0x00,0x26, 0x76,0xA5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x77,0x39,
31840x00,0x10, 0x77,0x39, 0xFF,0xF8, 0x46,0x31, 0x00,0x00, 0xC5,0xAC, 0x47,0xC0, 0x75,0xAD,
31850xFF,0xF0, 0xF4,0x02, 0x00,0xFF, 0xC5,0xAC, 0x44,0x00, 0xC7,0x38, 0x58,0x00, 0xF7,0x2B,
31860x28,0x00, 0x87,0x26, 0x00,0x00, 0x75,0xA5, 0x00,0x1E, 0xC6,0x30, 0x44,0x00, 0x75,0xAC,
31870xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xF6,0x82, 0xFF,0x00, 0xC7,0x38,
31880x6C,0x00, 0xC6,0x30, 0x70,0x00, 0xF6,0x27, 0x28,0x00, 0x87,0x26, 0x00,0x00, 0x76,0x99,
31890x00,0x10, 0x76,0xB5, 0xFF,0xF8, 0xC7,0x38, 0x5F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38,
31900x44,0x00, 0xC6,0xB4, 0x70,0x00, 0xF6,0xA7, 0x28,0x00, 0x93,0x93, 0xFF,0xFC, 0xF3,0x84,
31910x3B,0xB0, 0x00,0x00, 0x00,0x01, 0x93,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
31920xD4,0x2C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04, 0x40,0x7C, 0x00,0x00, 0x00,0x01, 0x07,0x38,
31930x00,0x01, 0x97,0x13, 0xFF,0xFC, 0xF3,0x84, 0x40,0x74, 0x00,0x00, 0x00,0x01, 0x93,0x93,
31940xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xBE,0xF8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
31950xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
31960x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
31970xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
31980xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
31990x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
32000x00,0x08, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
32010x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06,
32020x42,0x30, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x35,0x60, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
32030x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x30, 0x97,0x13,
32040xFF,0xFC, 0xF7,0x06, 0x35,0xEC, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
32050x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
32060x36,0x78, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
32070xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x37,0x04, 0x97,0x13,
32080xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
32090x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x37,0x90, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
32100x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13,
32110xFF,0xFC, 0xF7,0x06, 0x38,0x1C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
32120x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
32130x38,0xA8, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
32140xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x39,0x34, 0x97,0x13,
32150xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
32160x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x39,0xC0, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
32170x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13,
32180xFF,0xFC, 0xF7,0x06, 0x3A,0x4C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
32190x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x42,0x44, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
32200x3A,0xD8, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
32210xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
32220x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96,
32230x00,0x00, 0xF5,0x06, 0x3B,0x90, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4,
32240xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38,
32250x50,0x00, 0x07,0x38, 0x00,0x02, 0x86,0xBA, 0x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
32260xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0x37, 0xFF,0xF0, 0xEE,0x00, 0xC9,0x95, 0x00,0x00,
32270x00,0x01, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
32280x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x50,0x00, 0x86,0xBA,
32290x00,0x04, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
32300xFF,0xF0, 0xA6,0xAE, 0x68,0x02, 0x77,0x31, 0x00,0x03, 0xC7,0x38, 0x68,0x00, 0x27,0x38,
32310x00,0x08, 0x84,0xBA, 0x00,0x04, 0x84,0x3A, 0x00,0x00, 0xE0,0x00, 0xC9,0xB4, 0xC5,0x24,
32320x00,0x00, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
32330x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x50,0x00, 0x85,0x3A,
32340x00,0x04, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x20,0x32,
32350x00,0x00, 0xF6,0x06, 0x3B,0x90, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
32360x00,0x03, 0xA6,0xBA, 0x60,0x02, 0xC7,0x38, 0x60,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
32370xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0xEE,0x00, 0xC9,0xF9, 0x76,0xB5, 0xFF,0xF0, 0x77,0x21,
32380xFF,0xF0, 0xC6,0xB8, 0x68,0x00, 0xC7,0x2C, 0x68,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
32390x00,0x08, 0xC1,0x28, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
32400xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
32410xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96, 0x00,0x00, 0xF5,0x06, 0x3B,0x70, 0x87,0x2E,
32420x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
32430xFF,0xF0, 0x77,0x39, 0x00,0x03, 0xC7,0x38, 0x50,0x00, 0x07,0x38, 0x00,0x02, 0x86,0xBA,
32440x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0x37,
32450xFF,0xF0, 0xEE,0x00, 0xCA,0xBD, 0x00,0x00, 0x00,0x01, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
32460x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
32470x00,0x03, 0xC7,0x38, 0x50,0x00, 0x86,0xBA, 0x00,0x04, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
32480xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xA6,0xAE, 0x68,0x02, 0x77,0x31,
32490x00,0x03, 0xC7,0x38, 0x68,0x00, 0x27,0x38, 0x00,0x08, 0x84,0xBA, 0x00,0x04, 0x84,0x3A,
32500x00,0x00, 0xE0,0x00, 0xCA,0xDC, 0xC5,0x24, 0x00,0x00, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
32510x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
32520x00,0x03, 0xC7,0x38, 0x50,0x00, 0x85,0x3A, 0x00,0x04, 0x83,0x96, 0x00,0x04, 0x76,0xAD,
32530x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x20,0x32, 0x00,0x00, 0x93,0x93, 0xFF,0xFC, 0x87,0x2E,
32540x00,0x00, 0xF6,0x06, 0x3B,0x70, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0x39,
32550x00,0x03, 0xA6,0xBA, 0x60,0x02, 0xC7,0x38, 0x60,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
32560xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0xEE,0x00, 0xCB,0x29, 0x76,0xB5, 0xFF,0xF0, 0x77,0x21,
32570xFF,0xF0, 0xC6,0xB8, 0x68,0x00, 0xC7,0x2C, 0x68,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
32580x00,0x08, 0xC1,0x28, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
32590xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
32600xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF5,0x04, 0x4F,0x58, 0xF5,0x82, 0x00,0x02, 0x06,0x28,
32610x00,0x80, 0x20,0x2E, 0x00,0x62, 0xEE,0x00, 0xCB,0x90, 0x07,0x30, 0x00,0x40, 0xF0,0x33,
32620x28,0x00, 0xC6,0xB8, 0x52,0x00, 0x76,0xB4, 0xFF,0xFA, 0x06,0x30, 0x00,0x14, 0xF6,0xB3,
32630x28,0x00, 0xC6,0x38, 0x00,0x00, 0xE0,0x00, 0xCB,0x64, 0x05,0xAC, 0x00,0x01, 0xF7,0x04,
32640x4F,0x58, 0x00,0x00, 0x00,0x01, 0x06,0xB8, 0x18,0xD4, 0xF4,0x82, 0x00,0x01, 0xF4,0xB7,
32650x28,0x00, 0x07,0x38, 0x18,0xC0, 0xF0,0x3B, 0x28,0x00, 0xF7,0x06, 0x42,0xC0, 0xF4,0x82,
32660x00,0x02, 0xF4,0xBB, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
32670x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
32680x00,0x08, 0xF6,0x84, 0x42,0xC0, 0xF6,0x06, 0x42,0xC0, 0x77,0x31, 0x00,0x1E, 0x77,0x38,
32690xFF,0xE5, 0x75,0xB1, 0x00,0x1E, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04,
32700x4F,0x58, 0x76,0xB5, 0x00,0x06, 0xC4,0x38, 0x68,0x00, 0x87,0x22, 0x00,0x14, 0x76,0xA1,
32710x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33,
32720x28,0x00, 0xF7,0x04, 0x42,0xC0, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
32730xFF,0xF0, 0x20,0x3A, 0x00,0x01, 0xE6,0x00, 0xCC,0x4C, 0xF6,0x06, 0x42,0x90, 0xF7,0x04,
32740x42,0x90, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
32750xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
32760xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
32770xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x04, 0x85,0x16, 0x00,0x00, 0x00,0x00,
32780x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x95,0x16, 0xFF,0xF4, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
32790xCD,0x00, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xF4, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
32800xCC,0xBC, 0xF5,0x86, 0x42,0xC0, 0xF7,0x04, 0x42,0x90, 0xF6,0x06, 0x42,0x92, 0x76,0xB1,
32810x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
32820x00,0x01, 0xE0,0x00, 0xCC,0xEC, 0xF7,0x33, 0x28,0x00, 0xF0,0x2B, 0x28,0x00, 0xF6,0x84,
32830x42,0xC0, 0x77,0x2D, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x06,0x28, 0x00,0x14, 0xC6,0xB4,
32840x77,0xC0, 0x76,0xB4, 0xFF,0xF0, 0xF7,0x04, 0x4F,0x58, 0xF6,0xB3, 0x28,0x00, 0xC7,0x28,
32850x72,0x00, 0x77,0x38, 0xFF,0xFA, 0xF7,0x2F, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
32860xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
32870xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x96, 0x00,0x00, 0xF7,0x04, 0x4F,0x58, 0xF4,0x02,
32880x00,0x00, 0xC6,0xB4, 0x72,0x00, 0x77,0x34, 0xFF,0xFA, 0x27,0x38, 0x00,0x02, 0x20,0x3A,
32890x00,0x61, 0xF7,0x02, 0x00,0x3F, 0xE2,0x00, 0xCD,0x40, 0xC6,0xB4, 0x74,0x00, 0x20,0x36,
32900x00,0x00, 0xE6,0x00, 0xCD,0x40, 0x00,0x00, 0x00,0x01, 0xF4,0x02, 0x00,0x01, 0x87,0x96,
32910xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
32920x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x16, 0x00,0x00, 0x87,0x16,
32930x00,0x08, 0x85,0x96, 0x00,0x04, 0xC5,0x30, 0x70,0x00, 0xC0,0x32, 0x52,0x00, 0xE6,0x00,
32940xCD,0xA1, 0x00,0x00, 0x00,0x01, 0x86,0xB2, 0x00,0x00, 0x77,0x31, 0x00,0x1E, 0x77,0x38,
32950xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xE8, 0xF6,0xAF, 0x68,0x00, 0x06,0x30,
32960x00,0x01, 0xC0,0x32, 0x52,0x00, 0xE6,0x00, 0xCD,0x78, 0x05,0xAC, 0x00,0x01, 0x87,0x96,
32970xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
32980x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x84,0x96,
32990x00,0x00, 0x84,0x16, 0x00,0x04, 0x85,0x96, 0x00,0x08, 0x86,0xA6, 0x00,0x00, 0x77,0x25,
33000x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x75,0x35, 0xFF,0xF0, 0x20,0x2A,
33010x00,0x10, 0xE2,0x00, 0xCE,0x0D, 0xF6,0x06, 0x42,0x8E, 0xF5,0x02, 0x00,0x10, 0xF7,0x04,
33020x42,0x8C, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
33030xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33, 0x28,0x00, 0x20,0x2E, 0x00,0x01, 0xE6,0x00,
33040xCE,0x70, 0x20,0x2A, 0x00,0x00, 0xEE,0x00, 0xCE,0x71, 0x07,0x24, 0x00,0x02, 0x25,0x28,
33050x00,0x01, 0xA5,0xBA, 0x50,0x02, 0x86,0x22, 0x00,0x00, 0x76,0xA1, 0x00,0x1E, 0x76,0xB4,
33060xFF,0xE5, 0xC7,0x38, 0x50,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC5,0xAC,
33070x77,0xC0, 0xC6,0x30, 0x6F,0xC0, 0x76,0x31, 0xFF,0xF0, 0x75,0xAD, 0xFF,0xE8, 0xF6,0x82,
33080x00,0xFF, 0xF7,0x02, 0xF1,0x54, 0x75,0xAD, 0x00,0x02, 0xA7,0x2E, 0x70,0x02, 0xC6,0x30,
33090x6C,0x00, 0xC6,0x30, 0x75,0x80, 0xF6,0x23, 0x28,0x00, 0x24,0x20, 0x00,0x02, 0x25,0xA8,
33100x00,0x01, 0xF3,0x02, 0xF2,0x46, 0x03,0xA4, 0x00,0x02, 0xC4,0xAC, 0x38,0x00, 0x25,0x2C,
33110x00,0x01, 0x20,0x2E, 0x00,0x00, 0xEC,0x00, 0xCF,0x11, 0x00,0x00, 0x00,0x01, 0xE6,0x00,
33120xCE,0xA0, 0xC7,0x1C, 0x50,0x00, 0xE0,0x00, 0xCE,0xB4, 0xF6,0x02, 0x00,0x00, 0xA6,0x9E,
33130x50,0x02, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0x35,
33140xFF,0xE8, 0x86,0xA6, 0x00,0x00, 0x77,0x25, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0x25,0x28,
33150x00,0x02, 0x25,0xAC, 0x00,0x02, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xE8, 0x77,0x31,
33160x00,0x04, 0xC7,0x38, 0x62,0x00, 0x77,0x39, 0x00,0x01, 0xC7,0x38, 0x30,0x00, 0xC6,0xB4,
33170x68,0x00, 0xC6,0xB4, 0x70,0x00, 0x06,0xB4, 0x00,0x0E, 0x87,0x36, 0x00,0x00, 0x24,0xA4,
33180x00,0x02, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
33190xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0xE0,0x00, 0xCE,0x84, 0x24,0x20, 0x00,0x02, 0x87,0x96,
33200xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
33210x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x16, 0x00,0x08, 0x83,0x16,
33220x00,0x04, 0x83,0x96, 0x00,0x00, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
33230xFF,0xE5, 0x05,0x9C, 0x00,0x02, 0x74,0x9D, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x74,0x1D,
33240x00,0x1E, 0x06,0x30, 0x00,0x02, 0x75,0x31, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
33250xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0x28, 0xFF,0xE5, 0xC7,0x38,
33260x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33270x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33280x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33290x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33300x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33310x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33320x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33330x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33340x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33350x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33360x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33370x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33380x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32,
33390x00,0x00, 0x05,0xAC, 0x00,0x02, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
33400x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x87,0x1E, 0x00,0x00, 0x74,0x20,
33410xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x1F,
33420x28,0x00, 0x87,0x1E, 0x00,0x00, 0x04,0x9C, 0x00,0x02, 0xC7,0x38, 0x47,0xC0, 0x77,0x39,
33430xFF,0xF0, 0x25,0x38, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xEE,0x00, 0xD0,0xBD, 0x26,0x28,
33440x00,0x01, 0xA7,0x26, 0x60,0x02, 0xC6,0xA4, 0x60,0x00, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
33450xFF,0xE5, 0xC5,0xA4, 0x50,0x00, 0xC5,0x30, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
33460xFF,0xE8, 0xE0,0x00, 0xD0,0x88, 0xF7,0x2F, 0x68,0x00, 0x07,0x1C, 0x00,0x02, 0xF3,0x3B,
33470x68,0x00, 0xC4,0x1C, 0x00,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
33480x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
33490x00,0x08, 0x86,0x16, 0x00,0x04, 0x84,0x16, 0x00,0x00, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
33500x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x05,0xA0, 0x00,0x02, 0x74,0xA1, 0x00,0x1E, 0x74,0xA4,
33510xFF,0xE5, 0x06,0x30, 0x00,0x02, 0x75,0x31, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
33520xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0x28, 0xFF,0xE5, 0xC7,0x38,
33530x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33540x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33550x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33560x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33570x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33580x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33590x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33600x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33610x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33620x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33630x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33640x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
33650x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x05,0xAC, 0x00,0x02, 0x06,0x30,
33660x00,0x02, 0x87,0x32, 0x00,0x00, 0x06,0xA0, 0x00,0x02, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
33670xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2F, 0x28,0x00, 0x87,0x22,
33680x00,0x00, 0x76,0x21, 0x00,0x1E, 0x85,0x96, 0x00,0x08, 0xC7,0x38, 0x4F,0xC0, 0x77,0x39,
33690xFF,0xF0, 0xC6,0xB4, 0x70,0x00, 0xF5,0xB7, 0x68,0x00, 0x87,0x22, 0x00,0x00, 0x76,0x30,
33700xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x23,
33710x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C,
33720x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
33730x00,0x20, 0x27,0x14, 0x00,0x20, 0xF0,0x3B, 0x28,0x00, 0x84,0x96, 0x00,0x04, 0xF5,0x02,
33740x00,0x00, 0x86,0xA6, 0x00,0x00, 0x76,0x25, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x04,0x24,
33750x00,0x02, 0xC6,0xB4, 0x67,0xC0, 0x76,0xB4, 0xFF,0xF0, 0xF6,0xBB, 0x28,0x00, 0x87,0x26,
33760x00,0x00, 0x76,0xA5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
33770xFF,0xF0, 0xC0,0x2A, 0x72,0x00, 0xEC,0x00, 0xD2,0xF8, 0x76,0xA5, 0x00,0x1E, 0x87,0x26,
33780x00,0x00, 0x76,0xB4, 0xFF,0xE5, 0x06,0x28, 0x00,0x01, 0x25,0x94, 0x00,0x1E, 0xC5,0xAC,
33790x50,0x00, 0xC5,0x30, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38,
33800x52,0x00, 0xA6,0xA2, 0x70,0x02, 0xC7,0x20, 0x70,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
33810xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xE8, 0xC6,0x80, 0x6A,0x00, 0xE0,0x00,
33820xD2,0x90, 0xF6,0xAF, 0x68,0x00, 0x87,0x16, 0xFF,0xE0, 0x76,0x15, 0x00,0x1E, 0x76,0x30,
33830xFF,0xE5, 0x83,0x96, 0x00,0x00, 0x23,0x14, 0x00,0x1E, 0x75,0x99, 0x00,0x1E, 0x75,0xAC,
33840xFF,0xE5, 0x75,0x15, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x74,0x95, 0x00,0x1E, 0x74,0xA4,
33850xFF,0xE5, 0x74,0x15, 0x00,0x1E, 0x74,0x20, 0xFF,0xE5, 0x06,0x9C, 0x00,0x02, 0x73,0x95,
33860x00,0x1E, 0x93,0x96, 0xFF,0xDC, 0xC7,0x38, 0x67,0xC0, 0x83,0x96, 0x00,0x00, 0x77,0x38,
33870xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x83,0x96, 0xFF,0xDC, 0x87,0x1A, 0x00,0x00, 0x73,0x9C,
33880xFF,0xE5, 0x93,0x96, 0xFF,0xDC, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
33890x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xE4, 0x23,0x14, 0x00,0x1A, 0x76,0x19,
33900x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
33910x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
33920xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xE8, 0x23,0x14,
33930x00,0x16, 0x76,0x19, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38,
33940xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38,
33950x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
33960xFF,0xEC, 0x23,0x14, 0x00,0x12, 0x76,0x19, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
33970x47,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4,
33980x00,0x02, 0x84,0x16, 0x00,0x00, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
33990x28,0x00, 0x87,0x16, 0xFF,0xF0, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x3F,0xC0, 0x77,0x38,
34000xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
34010x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
34020x00,0x08, 0x86,0x16, 0x00,0x00, 0x84,0x16, 0x00,0x04, 0xF6,0x84, 0x4F,0x58, 0x87,0x32,
34030x00,0x14, 0x03,0x30, 0x00,0x14, 0x75,0x19, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0xC3,0xA0,
34040x6A,0x00, 0x73,0x9C, 0xFF,0xFA, 0x04,0xA0, 0x00,0x14, 0x75,0xA5, 0x00,0x1E, 0xC6,0x30,
34050x6A,0x00, 0x76,0x30, 0xFF,0xFA, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34060x28,0x00, 0xF3,0x9B, 0x28,0x00, 0x07,0x20, 0x00,0x16, 0xF6,0x3B, 0x28,0x00, 0x87,0x22,
34070x00,0x14, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x77,0x39,
34080x00,0x06, 0xC6,0xB4, 0x70,0x00, 0x06,0xB4, 0x00,0x16, 0xF3,0xB7, 0x28,0x00, 0x87,0x96,
34090xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
34100x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x16, 0x00,0x00, 0xF5,0x84,
34110x4F,0x58, 0x05,0x30, 0x00,0x16, 0x87,0x2A, 0x00,0x00, 0x76,0xA9, 0x00,0x1E, 0x76,0xB4,
34120xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x77,0x39, 0x00,0x06, 0xC4,0x2C,
34130x70,0x00, 0xC0,0x22, 0x62,0x00, 0xE6,0x00, 0xD5,0x29, 0x06,0xA0, 0x00,0x16, 0x87,0x36,
34140x00,0x00, 0xC6,0x30, 0x5A,0x00, 0x76,0x30, 0xFF,0xFA, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
34150xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x77,0x39, 0x00,0x06, 0x76,0xB8,
34160xFF,0xFA, 0xF6,0xAB, 0x28,0x00, 0xC7,0x2C, 0x70,0x00, 0x07,0x38, 0x00,0x14, 0xE0,0x00,
34170xD5,0x2C, 0xF6,0x3B, 0x28,0x00, 0xC4,0x2C, 0x00,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
34180xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
34190xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x4F,0x84, 0x47,0x38, 0xFF,0xFC, 0xF7,0x05,
34200x6F,0x30, 0xF6,0x86, 0x50,0x5C, 0x46,0xB4, 0xFF,0xFC, 0xF6,0x85, 0x6E,0x50, 0xF7,0x06,
34210x6E,0x7C, 0x47,0x38, 0xFF,0xFC, 0xF7,0x05, 0x6E,0x54, 0x07,0x34, 0x19,0x1C, 0xF7,0x05,
34220x4F,0x5C, 0xF7,0x02, 0x00,0x64, 0x97,0x36, 0x19,0x1C, 0xF7,0x02, 0x00,0x00, 0x97,0x36,
34230x19,0x20, 0x06,0xB4, 0x00,0x1C, 0xF6,0x85, 0x4F,0x58, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
34240xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
34250xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x90, 0xF3,0x02, 0xFF,0xFF, 0xF3,0x05,
34260x4F,0x54, 0xF3,0x82, 0x00,0x00, 0x93,0x96, 0xFF,0xAC, 0x23,0x14, 0x00,0x20, 0x93,0x16,
34270xFF,0x9C, 0x23,0x94, 0x00,0x38, 0x93,0x96, 0xFF,0x94, 0x83,0x16, 0xFF,0xAC, 0xF7,0x04,
34280x4F,0x5C, 0xF3,0x82, 0x00,0x0C, 0x93,0x96, 0xFF,0x74, 0x93,0x16, 0xFF,0x8C, 0x87,0x3A,
34290x00,0x04, 0x00,0x00, 0x00,0x01, 0x97,0x16, 0xFF,0xA4, 0x83,0x16, 0xFF,0xAC, 0x83,0x96,
34300xFF,0xA4, 0x00,0x00, 0x00,0x01, 0xC0,0x1A, 0x3A,0x00, 0xEC,0x00, 0xDB,0x78, 0xF3,0x02,
34310x04,0xBC, 0xF7,0x04, 0x4F,0x5C, 0x83,0x16, 0xFF,0x74, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
34320x30,0x00, 0x87,0x3A, 0x00,0x08, 0xF6,0x84, 0x4F,0x58, 0x77,0x39, 0x00,0x06, 0xC4,0xB4,
34330x70,0x00, 0x94,0x93, 0xFF,0xFC, 0x94,0x96, 0xFF,0x7C, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
34340xCD,0x00, 0x97,0x93, 0xFF,0xFC, 0x84,0x96, 0xFF,0x7C, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
34350xD6,0x54, 0xC5,0x04, 0x00,0x00, 0xF7,0x04, 0x42,0x88, 0xE0,0x00, 0xD8,0x7C, 0xF6,0x06,
34360x42,0x88, 0xF6,0x04, 0x4F,0x5C, 0x83,0x96, 0x00,0x00, 0x83,0x16, 0xFF,0x74, 0x86,0x9E,
34370x00,0x00, 0xA7,0x32, 0x30,0x02, 0xF5,0x82, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
34380xD6,0x94, 0xC6,0x30, 0x30,0x00, 0x86,0x9E, 0x00,0x04, 0x87,0x32, 0x00,0x04, 0x00,0x00,
34390x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xD6,0x98, 0x20,0x2E, 0x00,0x00, 0xF5,0x82,
34400x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xD6,0xA5, 0x00,0x00, 0x00,0x01, 0xF5,0x02,
34410x00,0x00, 0x83,0x96, 0x00,0x00, 0x87,0x32, 0x00,0x00, 0x86,0x9E, 0x00,0x00, 0x00,0x00,
34420x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xD6,0xE4, 0xF5,0x82, 0x00,0x00, 0xC0,0x36,
34430x72,0x00, 0xE6,0x00, 0xD6,0xEC, 0x20,0x2E, 0x00,0x00, 0x86,0x9E, 0x00,0x04, 0x87,0x32,
34440x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xD6,0xED, 0x20,0x2E,
34450x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xD6,0xFD, 0x20,0x2A,
34460x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0xD7,0x28, 0x04,0xA4,
34470x00,0x02, 0x83,0x16, 0xFF,0xAC, 0xF7,0x06, 0x42,0xC8, 0x83,0x96, 0xFF,0x8C, 0xF3,0x05,
34480x4F,0x54, 0xC7,0x1C, 0x70,0x00, 0xF0,0x3B, 0x28,0x00, 0x07,0x38, 0x00,0x02, 0xE0,0x00,
34490xDB,0x50, 0xF0,0x3B, 0x28,0x00, 0x94,0x96, 0xFF,0x6C, 0x87,0x26, 0x00,0x00, 0x76,0xA5,
34500x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x83,0x16, 0xFF,0x6C, 0x83,0x96, 0xFF,0x9C, 0x24,0x94,
34510x00,0x1E, 0x06,0x18, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38,
34520x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0x1D,
34530x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34540x28,0x00, 0x24,0x94, 0x00,0x1C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
34550x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34560x28,0x00, 0x24,0x94, 0x00,0x1A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
34570x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34580x28,0x00, 0x24,0x94, 0x00,0x18, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
34590x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34600x28,0x00, 0x24,0x94, 0x00,0x16, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
34610x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34620x28,0x00, 0x24,0x94, 0x00,0x14, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
34630x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34640x28,0x00, 0x24,0x94, 0x00,0x12, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
34650x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34660x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x94, 0x00,0x10, 0x76,0x31,
34670x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
34680x28,0x00, 0x87,0x16, 0xFF,0xE0, 0xF6,0x82, 0xFF,0xFC, 0xC7,0x38, 0x57,0xC0, 0x77,0x39,
34690xFF,0xF0, 0x07,0x38, 0x00,0x03, 0xC4,0xB8, 0x6C,0x00, 0x20,0x26, 0x00,0x10, 0xE2,0x00,
34700xD8,0x9D, 0xF6,0x06, 0x42,0x8A, 0xF7,0x04, 0x42,0x88, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
34710xFF,0xE5, 0xF4,0x02, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
34720x00,0x01, 0xE0,0x00, 0xDB,0xA0, 0xF7,0x33, 0x28,0x00, 0x83,0x16, 0xFF,0x6C, 0x25,0x14,
34730x00,0x36, 0x83,0x96, 0xFF,0x94, 0x87,0x1A, 0x00,0x00, 0x76,0x99, 0x00,0x1E, 0x76,0xB4,
34740xFF,0xE5, 0x06,0x18, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
34750xFF,0xF0, 0xF7,0x1F, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38,
34760x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x34, 0x06,0x30,
34770x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
34780x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x32, 0x06,0x30,
34790x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
34800x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x30, 0x06,0x30,
34810x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
34820x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x2E, 0x06,0x30,
34830x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
34840x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x2C, 0x06,0x30,
34850x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
34860x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x2A, 0x06,0x30,
34870x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
34880x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x28, 0x06,0x30,
34890x00,0x02, 0x87,0x32, 0x00,0x00, 0x26,0xA4, 0x00,0x02, 0x74,0xA4, 0xFF,0xFF, 0x76,0x31,
34900x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B,
34910x28,0x00, 0x90,0x13, 0xFF,0xFC, 0x83,0x16, 0xFF,0x8C, 0xF7,0x06, 0x42,0xCC, 0xC7,0x18,
34920x70,0x00, 0xC7,0x38, 0x68,0x00, 0x97,0x13, 0xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0x94,0x96,
34930xFF,0x7C, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
34940xFF,0x6C, 0x24,0x14, 0x00,0x4E, 0x25,0x14, 0x00,0x50, 0x83,0x16, 0xFF,0x8C, 0x84,0x96,
34950xFF,0x7C, 0x87,0x1E, 0x00,0x00, 0x76,0x9D, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x06,0x1C,
34960x00,0x02, 0x75,0xB1, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
34970xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0x29, 0x00,0x1E, 0x75,0x28,
34980xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
34990x00,0x4C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
35000xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
35010x00,0x4A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
35020xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
35030x00,0x48, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
35040xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
35050x00,0x46, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
35060xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
35070x00,0x44, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
35080xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
35090x00,0x42, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
35100xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x06,0x30,
35110x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x14, 0x00,0x40, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
35120xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x86,0x96,
35130xFF,0xB0, 0xF6,0x06, 0x42,0xC8, 0xC6,0x18, 0x60,0x00, 0xF7,0x02, 0x00,0x03, 0xC6,0xB4,
35140x57,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xC6,0xB4, 0x74,0x00, 0xF7,0x02, 0x00,0x04, 0xC7,0x38,
35150x6A,0x00, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0xF4,0xB3, 0x28,0x00, 0x83,0x96,
35160xFF,0x8C, 0x83,0x16, 0xFF,0x74, 0x03,0x9C, 0x00,0x14, 0x93,0x96, 0xFF,0x8C, 0x03,0x18,
35170x00,0x0C, 0x83,0x96, 0xFF,0xAC, 0x93,0x16, 0xFF,0x74, 0x03,0x9C, 0x00,0x01, 0xE0,0x00,
35180xD5,0xEC, 0x93,0x96, 0xFF,0xAC, 0x93,0x13, 0xFF,0xFC, 0xF3,0x84, 0x4F,0x5C, 0x00,0x00,
35190x00,0x01, 0x93,0x93, 0xFF,0xFC, 0xF3,0x06, 0x4A,0x98, 0x93,0x13, 0xFF,0xFC, 0x07,0x88,
35200x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93, 0xFF,0xFC, 0xF4,0x02, 0x00,0x01, 0x87,0x96,
35210xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
35220x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x01,0xA0, 0xF5,0x02,
35230x00,0x00, 0xF3,0x84, 0x6E,0x50, 0xF6,0x02, 0x00,0x1C, 0x20,0x2A, 0x00,0x63, 0xEE,0x00,
35240xDC,0x08, 0xC5,0x9C, 0x60,0x00, 0xA6,0x9E, 0x60,0x02, 0x77,0x2D, 0x00,0x1E, 0x77,0x38,
35250xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x20,0x36, 0x00,0x03, 0xE6,0x00,
35260xDB,0xFC, 0x07,0x2C, 0x00,0x36, 0xF0,0x3B, 0x28,0x00, 0x06,0x30, 0x00,0x40, 0xE0,0x00,
35270xDB,0xCC, 0x05,0x28, 0x00,0x01, 0xF5,0x84, 0x4F,0x5C, 0x00,0x00, 0x00,0x01, 0x86,0xAE,
35280x00,0x08, 0xF4,0x02, 0x00,0x00, 0x87,0x2E, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
35290x72,0x00, 0xEC,0x00, 0xDC,0xF0, 0x96,0x96, 0xFF,0xEC, 0x77,0x35, 0x00,0x01, 0xC7,0x38,
35300x68,0x00, 0x77,0x39, 0x00,0x02, 0xC6,0x38, 0x58,0x00, 0x06,0x30, 0x00,0x0C, 0xC3,0x84,
35310x00,0x00, 0x83,0x16, 0x00,0x00, 0x86,0xB2, 0x00,0x00, 0x87,0x1A, 0x00,0x00, 0x00,0x00,
35320x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xDC,0x7C, 0xC5,0x20, 0x00,0x00, 0x86,0xB2,
35330x00,0x04, 0x87,0x1A, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
35340xDC,0x80, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00,
35350xDC,0x8D, 0x00,0x00, 0x00,0x01, 0xF3,0x82, 0x00,0x00, 0x84,0x96, 0x00,0x00, 0x86,0xB2,
35360x00,0x00, 0x87,0x26, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
35370xDC,0xCC, 0xF5,0x02, 0x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xDC,0xD4, 0x20,0x2A,
35380x00,0x00, 0x86,0xB2, 0x00,0x04, 0x87,0x26, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
35390x72,0x00, 0xE2,0x00, 0xDC,0xD5, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A,
35400x00,0x00, 0xE6,0x00, 0xDC,0xE5, 0x20,0x1E, 0x00,0x00, 0xF3,0x82, 0x00,0x01, 0x20,0x1E,
35410x00,0x00, 0xE6,0x00, 0xDC,0xF4, 0x20,0x22, 0x00,0x00, 0xF4,0x02, 0x00,0x01, 0x20,0x22,
35420x00,0x00, 0xE6,0x00, 0xDD,0x29, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xEC, 0x00,0x00,
35430x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4,
35440x58,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xF0, 0xE0,0x00,
35450xDD,0x98, 0x96,0x96, 0xFF,0xF4, 0x27,0x14, 0x00,0x14, 0x97,0x13, 0xFF,0xFC, 0x83,0x16,
35460x00,0x00, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x95,0x93, 0xFF,0xFC, 0x95,0x96,
35470xFE,0x70, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x85,0x96,
35480xFE,0x70, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xDD,0x95, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
35490xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
35500x00,0x02, 0xC6,0xB4, 0x58,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
35510xFF,0xF0, 0x96,0x96, 0xFF,0xF4, 0x97,0x2E, 0x00,0x08, 0xE0,0x00, 0xDD,0x9C, 0x20,0x32,
35520x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0xDD,0xB0, 0xF4,0x82,
35530x00,0x00, 0xF7,0x04, 0x42,0x7C, 0xE0,0x00, 0xE0,0x9C, 0xF6,0x06, 0x42,0x7E, 0x94,0x96,
35540xFF,0x44, 0x87,0x16, 0xFF,0xF4, 0xF6,0x04, 0x4F,0x58, 0x77,0x39, 0x00,0x06, 0xC7,0x30,
35550x70,0x00, 0x97,0x16, 0xFF,0x54, 0x06,0xB8, 0x00,0x1A, 0x87,0x36, 0x00,0x00, 0x83,0x16,
35560xFF,0x54, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x93,0x13,
35570xFF,0xFC, 0x77,0x38, 0xFF,0xF0, 0x77,0x39, 0x00,0x06, 0xC6,0x30, 0x70,0x00, 0x96,0x16,
35580xFF,0x4C, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0x00, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
35590x00,0x00, 0xE6,0x00, 0xDE,0x35, 0xF3,0x02, 0x00,0x01, 0x84,0x96, 0xFF,0x4C, 0x00,0x00,
35600x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0x00, 0x97,0x93,
35610xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xDE,0x38, 0x00,0x00, 0x00,0x01, 0xF3,0x02,
35620x00,0x01, 0x93,0x16, 0xFF,0x44, 0x84,0x96, 0xFF,0x44, 0x00,0x00, 0x00,0x01, 0x20,0x26,
35630x00,0x00, 0xE6,0x00, 0xDE,0x59, 0xF6,0x06, 0x42,0xA4, 0xF7,0x04, 0x42,0xA4, 0xE0,0x00,
35640xE0,0xA0, 0x76,0xB1, 0x00,0x1E, 0x83,0x16, 0xFF,0x4C, 0x86,0x16, 0xFF,0x4C, 0x87,0x1A,
35650x00,0x00, 0x76,0x99, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
35660xFF,0xF0, 0x20,0x3A, 0x00,0x02, 0xE6,0x00, 0xDE,0x85, 0x00,0x00, 0x00,0x01, 0xF6,0x04,
35670x4F,0x58, 0xF5,0x84, 0x4F,0x58, 0x00,0x00, 0x00,0x01, 0xC0,0x32, 0x5A,0x00, 0xE6,0x00,
35680xE0,0x25, 0x00,0x00, 0x00,0x01, 0x84,0x96, 0xFF,0x4C, 0x00,0x00, 0x00,0x01, 0x06,0xA4,
35690x00,0x1A, 0x87,0x36, 0x00,0x00, 0x83,0x16, 0xFF,0x54, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
35700xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x77,0x39, 0x00,0x06, 0xC7,0x2C,
35710x70,0x00, 0xC0,0x3A, 0x32,0x00, 0xE6,0x00, 0xDE,0xDD, 0xF6,0x06, 0x42,0x80, 0xF7,0x04,
35720x42,0x80, 0xE0,0x00, 0xE0,0xA0, 0x76,0xB1, 0x00,0x1E, 0x26,0x14, 0x00,0x30, 0xF0,0x33,
35730x28,0x00, 0x87,0x16, 0xFF,0xD0, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x84,0x96,
35740xFF,0x4C, 0x23,0x14, 0x00,0x2E, 0x93,0x16, 0xFE,0x64, 0x75,0x99, 0x00,0x1E, 0x75,0xAC,
35750xFF,0xE5, 0x75,0x15, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x73,0x15, 0x00,0x1E, 0x73,0x18,
35760xFF,0xE5, 0x93,0x16, 0xFF,0x34, 0x83,0x16, 0xFE,0x64, 0x04,0x24, 0x00,0x02, 0x06,0xA0,
35770x00,0x02, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0x3C, 0x74,0x95,
35780x00,0x1E, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x87,0x1A,
35790x00,0x00, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0x2C, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
35800xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xD4, 0x24,0x94,
35810x00,0x2A, 0x94,0x96, 0xFE,0x64, 0x76,0x25, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
35820x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x26, 0x00,0x00, 0x06,0xB4,
35830x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
35840x00,0x02, 0x87,0x16, 0xFF,0xD8, 0x23,0x14, 0x00,0x26, 0x93,0x16, 0xFE,0x64, 0x76,0x19,
35850x00,0x1E, 0x84,0x96, 0xFF,0x3C, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38,
35860xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x84,0x96,
35870xFF,0x34, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
35880x00,0x02, 0x87,0x16, 0xFF,0xDC, 0x23,0x14, 0x00,0x22, 0x93,0x16, 0xFE,0x64, 0x76,0x19,
35890x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
35900x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
35910xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0xE0, 0x83,0x16, 0xFF,0x2C, 0x06,0xB4,
35920x00,0x02, 0xC7,0x38, 0x37,0xC0, 0x77,0x38, 0xFF,0xF0, 0xE0,0x00, 0xEA,0xA0, 0xF7,0x37,
35930x28,0x00, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCB,0xCC, 0x97,0x93, 0xFF,0xFC, 0x06,0xA0,
35940x00,0x02, 0xF7,0x04, 0x4F,0x58, 0xF0,0x37, 0x28,0x00, 0x06,0xA0, 0x00,0x14, 0x94,0x16,
35950xFF,0x24, 0xC7,0x20, 0x72,0x00, 0x77,0x38, 0xFF,0xFA, 0xF7,0x37, 0x28,0x00, 0x06,0xA0,
35960x00,0x16, 0xF7,0x37, 0x28,0x00, 0xF4,0x82, 0x00,0x01, 0xF4,0xA3, 0x28,0x00, 0x94,0x13,
35970xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0x00, 0x97,0x93, 0xFF,0xFC, 0x20,0x22,
35980x00,0x00, 0xE6,0x00, 0xE0,0xBC, 0x26,0x94, 0x00,0x48, 0xF7,0x04, 0x42,0x80, 0xE0,0x00,
35990xE0,0x9C, 0xF6,0x06, 0x42,0x82, 0x86,0x96, 0xFE,0xF4, 0xE0,0x00, 0xE2,0x94, 0x00,0x00,
36000x00,0x01, 0xF7,0x04, 0x42,0x84, 0xF6,0x06, 0x42,0x84, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
36010xFF,0xE5, 0xF4,0x02, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
36020x00,0x01, 0xE0,0x00, 0xEA,0xA4, 0xF7,0x33, 0x28,0x00, 0x83,0x16, 0xFF,0x4C, 0x75,0x15,
36030x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x93,0x16, 0xFF,0x1C, 0x07,0x18, 0x00,0x36, 0xF4,0x82,
36040x00,0x01, 0xF4,0xBB, 0x28,0x00, 0xF0,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0xB8, 0x76,0xB5,
36050x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x04,0x18, 0x00,0x02, 0x06,0x20, 0x00,0x02, 0x23,0x14,
36060x00,0x46, 0x93,0x16, 0xFF,0x14, 0x75,0x99, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x74,0x95,
36070x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFF,0x0C, 0x73,0x15, 0x00,0x1E, 0x73,0x18,
36080xFF,0xE5, 0x93,0x16, 0xFF,0x04, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96,
36090xFE,0xFC, 0x23,0x00, 0x00,0x07, 0x93,0x16, 0xFE,0xF4, 0x84,0x96, 0xFF,0x1C, 0x83,0x16,
36100xFF,0x14, 0x04,0xA4, 0x00,0x0A, 0x94,0x96, 0xFE,0x7C, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
36110xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0xF6,0x84, 0x4F,0x58, 0x84,0x96, 0xFF,0x54, 0x87,0x1A,
36120x00,0x00, 0xC6,0xA4, 0x6A,0x00, 0x74,0x34, 0xFF,0xFA, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
36130xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x16, 0xFF,0xBC, 0x23,0x14,
36140x00,0x42, 0x93,0x16, 0xFF,0x14, 0x76,0x99, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36150x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0x30,
36160x00,0x02, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30,
36170x00,0x02, 0x87,0x16, 0xFF,0xC0, 0x24,0x94, 0x00,0x3E, 0x94,0x96, 0xFF,0x14, 0x76,0xA5,
36180x00,0x1E, 0x83,0x16, 0xFF,0x0C, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x37,0xC0, 0x77,0x38,
36190xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x26, 0x00,0x00, 0x06,0x30, 0x00,0x02, 0xC7,0x38,
36200x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x16,
36210xFF,0xC4, 0x24,0x94, 0x00,0x3A, 0x94,0x96, 0xFF,0x14, 0x76,0xA5, 0x00,0x1E, 0x83,0x16,
36220xFF,0x04, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x37,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33,
36230x28,0x00, 0x87,0x26, 0x00,0x00, 0x06,0x30, 0x00,0x02, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
36240xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x87,0x16, 0xFF,0xC8, 0x84,0x96, 0xFE,0xFC, 0x06,0x30,
36250x00,0x02, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x83,0x16,
36260xFE,0xF4, 0x00,0x00, 0x00,0x01, 0x20,0x1A, 0x00,0x07, 0xEE,0x00, 0xE2,0x94, 0xF6,0x82,
36270x00,0x08, 0x84,0x96, 0xFE,0x7C, 0x00,0x00, 0x00,0x01, 0x07,0x24, 0x00,0x0E, 0x86,0xBA,
36280x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
36290xFF,0xF0, 0xF7,0x02, 0x00,0xFF, 0xC6,0xB4, 0x74,0x00, 0x47,0x21, 0x00,0x00, 0xC0,0x36,
36300x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xE0,0x88, 0x04,0xA4,
36310x00,0x02, 0x94,0x96, 0xFE,0x7C, 0x03,0x18, 0x00,0x01, 0xE0,0x00, 0xE2,0x30, 0x93,0x16,
36320xFE,0xF4, 0x83,0x16, 0xFF,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x18, 0x00,0x38, 0xF6,0xBB,
36330x28,0x00, 0x93,0x13, 0xFF,0xFC, 0x84,0x96, 0xFF,0x24, 0x00,0x00, 0x00,0x01, 0x94,0x93,
36340xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD4,0x2C, 0x97,0x93, 0xFF,0xFC, 0x23,0x14,
36350x00,0x78, 0x93,0x16, 0xFE,0xBC, 0x84,0x96, 0x00,0x00, 0x23,0x14, 0x00,0xA8, 0x86,0xA6,
36360x00,0x04, 0x87,0x26, 0x00,0x00, 0x93,0x16, 0xFE,0x9C, 0xC6,0xB4, 0x70,0x00, 0x96,0x96,
36370xFE,0xEC, 0xF7,0x02, 0x00,0x01, 0xC7,0x34, 0x74,0x00, 0x97,0x16, 0xFE,0xE4, 0x84,0x96,
36380xFF,0x24, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
36390xD4,0xB4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04, 0x4F,0x58, 0x00,0x00, 0x00,0x01, 0xC0,0x22,
36400x72,0x00, 0xE6,0x00, 0xEA,0xA1, 0x94,0x16, 0xFF,0x1C, 0x86,0xA2, 0x00,0x38, 0x77,0x21,
36410x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xF3,0x02, 0x00,0x00, 0x93,0x16, 0xFE,0xD4, 0xC6,0xB4,
36420x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0x96,0x96, 0xFE,0xDC, 0x84,0x96, 0xFE,0xD4, 0x00,0x00,
36430x00,0x01, 0x20,0x26, 0x00,0x0E, 0xEE,0x00, 0xE2,0xF0, 0xF3,0x02, 0x00,0x0F, 0x93,0x13,
36440xFF,0xFC, 0x83,0x16, 0xFE,0xEC, 0x00,0x00, 0x00,0x01, 0xC7,0x18, 0x48,0x00, 0x97,0x13,
36450xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x27,0xE8, 0x97,0x93, 0xFF,0xFC, 0xC3,0xA0,
36460x00,0x00, 0x84,0x96, 0xFE,0xE4, 0x00,0x00, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00,
36470xE3,0x8D, 0x23,0x9C, 0x00,0x07, 0xC3,0x80, 0x3A,0x00, 0xC7,0x1C, 0x38,0x00, 0x83,0x16,
36480xFF,0x1C, 0xF4,0x82, 0x00,0xFF, 0xF6,0x04, 0x4F,0x58, 0xC7,0x18, 0x70,0x00, 0x07,0x38,
36490x00,0x26, 0x86,0xBA, 0x00,0x00, 0x97,0x16, 0xFE,0xC4, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
36500xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xC6,0xB4, 0x4C,0x00, 0x76,0xB5,
36510x00,0x06, 0xC3,0x30, 0x68,0x00, 0x07,0x30, 0x00,0x40, 0xC0,0x1A, 0x72,0x00, 0xE6,0x00,
36520xE4,0x0D, 0x93,0x16, 0xFE,0xCC, 0x93,0x13, 0xFF,0xFC, 0x93,0x96, 0xFE,0x74, 0x96,0x16,
36530xFE,0x6C, 0x96,0x96, 0xFE,0x68, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0x00, 0x97,0x93,
36540xFF,0xFC, 0x83,0x96, 0xFE,0x74, 0x86,0x16, 0xFE,0x6C, 0x86,0x96, 0xFE,0x68, 0x20,0x22,
36550x00,0x00, 0xE6,0x00, 0xE0,0x95, 0x00,0x00, 0x00,0x01, 0xF5,0x84, 0x4F,0x58, 0x84,0x96,
36560xFE,0xCC, 0x07,0x2C, 0x00,0x40, 0xC0,0x26, 0x72,0x00, 0xE6,0x00, 0xEA,0x8D, 0x00,0x00,
36570x00,0x01, 0xA7,0x32, 0x68,0x02, 0x76,0xA5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x86,0x16,
36580xFE,0xCC, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x20,0x3A, 0x00,0x02, 0xE6,0x00,
36590xE4,0x51, 0xC0,0x32, 0x5A,0x00, 0xC6,0x2C, 0x00,0x00, 0xC0,0x32, 0x5A,0x00, 0xE6,0x00,
36600xE6,0xE5, 0x25,0x14, 0x00,0x76, 0x83,0x16, 0xFF,0x1C, 0x84,0x96, 0xFE,0xBC, 0x06,0x18,
36610x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x83,0x16,
36620xFE,0xDC, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
36630xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38,
36640x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x74, 0x06,0x30,
36650x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36660x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x72, 0x06,0x30,
36670x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36680x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x70, 0x06,0x30,
36690x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36700x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x6E, 0x06,0x30,
36710x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36720x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x6C, 0x06,0x30,
36730x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36740x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x6A, 0x06,0x30,
36750x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
36760x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32,
36770x00,0x00, 0x25,0x14, 0x00,0x68, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
36780x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0xC7,0x1C, 0x32,0x00, 0x97,0x13,
36790xFF,0xFC, 0x94,0x93, 0xFF,0xFC, 0x26,0x14, 0x00,0x60, 0x96,0x13, 0xFF,0xFC, 0x96,0x16,
36800xFE,0x6C, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93, 0xFF,0xFC, 0x87,0x16,
36810xFF,0xA0, 0x86,0x16, 0xFE,0x6C, 0x84,0x96, 0xFE,0xCC, 0x23,0x14, 0x00,0x5E, 0x93,0x16,
36820xFE,0x5C, 0x75,0x99, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x74,0x15, 0x00,0x1E, 0x74,0x20,
36830xFF,0xE5, 0x73,0x15, 0x00,0x1E, 0x73,0x18, 0xFF,0xE5, 0x93,0x16, 0xFE,0xAC, 0x83,0x16,
36840xFE,0x5C, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x05,0x24, 0x00,0x02, 0x06,0xA8,
36850x00,0x02, 0x74,0x95, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFE,0xB4, 0x74,0x95,
36860x00,0x1E, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x87,0x1A,
36870x00,0x00, 0x74,0xA4, 0xFF,0xE5, 0x94,0x96, 0xFE,0xA4, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38,
36880xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xA4, 0x24,0x94,
36890x00,0x5A, 0x94,0x96, 0xFE,0x5C, 0x76,0x25, 0x00,0x1E, 0x83,0x16, 0xFE,0xB4, 0x76,0x30,
36900xFF,0xE5, 0xC7,0x38, 0x37,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x26,
36910x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
36920x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16, 0xFF,0xA8, 0x24,0x94, 0x00,0x56, 0x94,0x96,
36930xFE,0x5C, 0x76,0x25, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x47,0xC0, 0x77,0x38,
36940xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x26, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38,
36950x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
36960xFF,0xAC, 0x23,0x14, 0x00,0x52, 0x93,0x16, 0xFE,0x5C, 0x76,0x19, 0x00,0x1E, 0x84,0x96,
36970xFE,0xAC, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
36980x28,0x00, 0x87,0x1A, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
36990xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0xB0, 0x83,0x16, 0xFE,0xA4, 0x06,0xB4,
37000x00,0x02, 0xC7,0x38, 0x37,0xC0, 0x77,0x38, 0xFF,0xF0, 0xE0,0x00, 0xEA,0x8C, 0xF7,0x37,
37010x28,0x00, 0x84,0x96, 0xFE,0xCC, 0x00,0x00, 0x00,0x01, 0x04,0xA4, 0x00,0x36, 0x94,0x96,
37020xFE,0x5C, 0x87,0x26, 0x00,0x00, 0x76,0xA5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37030x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x20,0x3A, 0x00,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
37040x00,0x00, 0xE6,0x00, 0xEA,0x8D, 0x00,0x00, 0x00,0x01, 0x83,0x16, 0xFE,0xCC, 0x84,0x96,
37050xFF,0x1C, 0x06,0x18, 0x00,0x3A, 0x85,0xB2, 0x00,0x00, 0x07,0x24, 0x00,0x3A, 0x86,0xBA,
37060x00,0x00, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
37070xFF,0xE5, 0xC5,0xAC, 0x67,0xC0, 0xC6,0xB4, 0x77,0xC0, 0x75,0xAD, 0xFF,0xF0, 0x76,0xB5,
37080xFF,0xF0, 0xC0,0x2E, 0x6A,0x00, 0xEC,0x00, 0xE7,0x64, 0xF5,0x02, 0x00,0x02, 0xF5,0x02,
37090x00,0x01, 0x83,0x16, 0xFF,0x1C, 0x00,0x00, 0x00,0x01, 0x07,0x18, 0x00,0x36, 0x86,0xBA,
37100x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
37110xFF,0xF0, 0x20,0x36, 0x00,0x02, 0xE6,0x00, 0xE7,0x9C, 0x00,0x00, 0x00,0x01, 0x20,0x2A,
37120x00,0x01, 0xE6,0x00, 0xEA,0x8D, 0x00,0x00, 0x00,0x01, 0x84,0x96, 0xFE,0x5C, 0x83,0x16,
37130xFF,0x1C, 0xF5,0x27, 0x28,0x00, 0x06,0x18, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
37140x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x25,0x14, 0x00,0xA6, 0x84,0x96, 0xFE,0x9C, 0x83,0x16,
37150xFE,0xDC, 0x06,0x30, 0x00,0x02, 0x75,0xB1, 0x00,0x1E, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
37160xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38,
37170x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0xA4, 0x06,0x30,
37180x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37190x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0xA2, 0x06,0x30,
37200x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37210x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0xA0, 0x06,0x30,
37220x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37230x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x9E, 0x06,0x30,
37240x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37250x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x9C, 0x06,0x30,
37260x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37270x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x25,0x14, 0x00,0x9A, 0x06,0x30,
37280x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
37290x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32,
37300x00,0x00, 0x25,0x14, 0x00,0x98, 0x76,0x31, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
37310x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B, 0x28,0x00, 0xC7,0x1C, 0x32,0x00, 0x97,0x13,
37320xFF,0xFC, 0x94,0x93, 0xFF,0xFC, 0x26,0x14, 0x00,0x90, 0x96,0x13, 0xFF,0xFC, 0x96,0x16,
37330xFE,0x6C, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xD0,0xDC, 0x97,0x93, 0xFF,0xFC, 0x87,0x16,
37340xFF,0x70, 0x86,0x16, 0xFE,0x6C, 0x84,0x96, 0xFE,0xCC, 0x23,0x94, 0x00,0x8E, 0x75,0x9D,
37350x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0x73,0x15, 0x00,0x1E, 0x73,0x18, 0xFF,0xE5, 0x93,0x16,
37360xFE,0x94, 0x74,0x15, 0x00,0x1E, 0x74,0x20, 0xFF,0xE5, 0x73,0x15, 0x00,0x1E, 0x73,0x18,
37370xFF,0xE5, 0x93,0x16, 0xFE,0x84, 0x83,0x16, 0xFE,0x94, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
37380xFF,0xE5, 0x05,0x24, 0x00,0x02, 0x06,0xA8, 0x00,0x02, 0x74,0x95, 0x00,0x1E, 0x74,0xA4,
37390xFF,0xE5, 0x94,0x96, 0xFE,0x8C, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x2B,
37400x28,0x00, 0x84,0x96, 0xFE,0xC4, 0x87,0x1E, 0x00,0x00, 0x75,0x25, 0x00,0x1E, 0xC7,0x38,
37410x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
37420xFF,0x74, 0x23,0x94, 0x00,0x8A, 0x76,0x1D, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x84,0x96,
37430xFE,0x8C, 0x75,0x28, 0xFF,0xE5, 0xC7,0x38, 0x37,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37,
37440x28,0x00, 0x87,0x1E, 0x00,0x00, 0x06,0xB4, 0x00,0x02, 0x83,0x16, 0xFE,0x84, 0xC7,0x38,
37450x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4, 0x00,0x02, 0x87,0x16,
37460xFF,0x78, 0x23,0x94, 0x00,0x86, 0x76,0x1D, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
37470x47,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1E, 0x00,0x00, 0x06,0xB4,
37480x00,0x02, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x06,0xB4,
37490x00,0x02, 0x87,0x16, 0xFF,0x7C, 0x23,0x94, 0x00,0x82, 0x76,0x1D, 0x00,0x1E, 0x76,0x30,
37500xFF,0xE5, 0xC7,0x38, 0x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1E,
37510x00,0x00, 0x06,0xB4, 0x00,0x02, 0x84,0x96, 0xFE,0xC4, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
37520xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x16, 0xFF,0x80, 0x06,0xB4, 0x00,0x02, 0xC7,0x38,
37530x37,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x26, 0x00,0x00, 0xF3,0x02,
37540x00,0xFF, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xE8, 0xC6,0xB8, 0x34,0x00, 0xF7,0x02,
37550x00,0x80, 0xC7,0x34, 0x74,0x00, 0x77,0x39, 0x00,0x10, 0x77,0x39, 0xFF,0xF0, 0x20,0x3A,
37560x00,0x00, 0xE6,0x00, 0xEA,0x61, 0x27,0x00, 0x01,0x00, 0xC6,0xB4, 0x75,0x80, 0x84,0x96,
37570xFE,0xCC, 0x00,0x00, 0x00,0x01, 0x07,0x24, 0x00,0x38, 0xF6,0xBB, 0x28,0x00, 0x94,0x93,
37580xFF,0xFC, 0x83,0x16, 0xFF,0x24, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x07,0x88,
37590x00,0x08, 0xE0,0x00, 0xD4,0x2C, 0x97,0x93, 0xFF,0xFC, 0x84,0x96, 0xFE,0xD4, 0x00,0x00,
37600x00,0x01, 0x04,0xA4, 0x00,0x01, 0xE0,0x00, 0xE3,0x3C, 0x94,0x96, 0xFE,0xD4, 0xF4,0x02,
37610x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C,
37620x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x16,
37630x00,0x08, 0x86,0x96, 0x00,0x0C, 0xF5,0x02, 0xFF,0xFC, 0x85,0x96, 0x00,0x04, 0x84,0x16,
37640x00,0x10, 0xF4,0x84, 0xE0,0x00, 0x07,0x30, 0x00,0x02, 0x94,0xB2, 0x00,0x10, 0xF4,0x84,
37650xE0,0x04, 0x06,0xB4, 0x00,0x03, 0x94,0xB2, 0x00,0x14, 0xF4,0x84, 0xE0,0x1C, 0xC6,0xB4,
37660x54,0x00, 0x94,0xB2, 0x00,0x18, 0xF4,0x82, 0x00,0x05, 0xF4,0xB3, 0x28,0x00, 0xF4,0x82,
37670x00,0x01, 0xF4,0xBB, 0x28,0x00, 0x27,0x34, 0x00,0x08, 0x97,0x32, 0x00,0x04, 0x86,0x16,
37680x00,0x00, 0x07,0x2C, 0x00,0x03, 0xC7,0x38, 0x54,0x00, 0xC6,0xB8, 0x68,0x00, 0x96,0x93,
37690xFF,0xFC, 0xC6,0x30, 0x72,0x00, 0x96,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x03, 0xC5,0xAC,
37700x74,0x00, 0xF7,0x02, 0x00,0x04, 0xC7,0x38, 0x5A,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
37710x00,0x08, 0xC1,0x20, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
37720xFF,0xF8, 0x02,0x14, 0x00,0x14, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
37730xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x18, 0x87,0x16, 0x00,0x04, 0x00,0x00,
37740x00,0x01, 0x83,0xBA, 0x00,0x00, 0x84,0x96, 0x00,0x00, 0x93,0x96, 0xFF,0xF0, 0xF3,0x84,
37750x6E,0x54, 0x87,0x3A, 0x00,0x04, 0x93,0x96, 0xFF,0xEC, 0x97,0x16, 0xFF,0xF4, 0x90,0x13,
37760xFF,0xFC, 0x27,0x1C, 0x00,0x02, 0x97,0x13, 0xFF,0xFC, 0x07,0x24, 0x00,0x20, 0x97,0x13,
37770xFF,0xFC, 0x94,0x96, 0xFF,0xE4, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93,
37780xFF,0xFC, 0x84,0x96, 0xFF,0xE4, 0x83,0x96, 0x00,0x08, 0x87,0x26, 0x00,0x18, 0x85,0x16,
37790xFF,0xEC, 0xC0,0x3A, 0x3A,0x00, 0xEE,0x00, 0xEC,0x7C, 0xF5,0x82, 0x00,0x01, 0x87,0x26,
37800x00,0x18, 0x83,0x96, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0xC0,0x1E, 0x72,0x00, 0xE6,0x00,
37810xEC,0x7C, 0xC5,0x84, 0x00,0x00, 0x86,0xA6, 0x00,0x10, 0x87,0x16, 0xFF,0xF0, 0xF6,0x02,
37820x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xEC,0x1C, 0x04,0x24, 0x00,0x10, 0x86,0xA6,
37830x00,0x14, 0x87,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x00,
37840xEC,0x20, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
37850xEC,0x2D, 0x00,0x00, 0x00,0x01, 0xF5,0x82, 0x00,0x00, 0x86,0xA2, 0x00,0x00, 0x87,0x16,
37860xFF,0xF0, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xEC,0x68, 0xF6,0x02,
37870x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x00, 0xEC,0x70, 0x20,0x32, 0x00,0x00, 0x86,0xA2,
37880x00,0x04, 0x87,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00,
37890xEC,0x71, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
37900xEC,0x81, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00,
37910xEC,0xAC, 0xF7,0x02, 0x00,0x01, 0xF7,0x04, 0x42,0x9C, 0xF6,0x06, 0x42,0x9C, 0x76,0xB1,
37920x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
37930x00,0x01, 0xF7,0x33, 0x28,0x00, 0xF7,0x02, 0x00,0x01, 0x97,0x2A, 0x00,0x08, 0x83,0xA6,
37940x00,0x0C, 0x77,0x2C, 0xFF,0xE1, 0x93,0xAA, 0x00,0x0C, 0x97,0x2A, 0x00,0x1C, 0x83,0xA6,
37950x00,0x1C, 0xF7,0x04, 0x6E,0x50, 0x93,0xAA, 0x00,0x20, 0x83,0xBA, 0x1D,0xDC, 0xF6,0x82,
37960x00,0x00, 0x93,0xAA, 0x00,0x2C, 0x83,0x96, 0x00,0x0C, 0xC5,0xB4, 0x00,0x00, 0x93,0xAA,
37970x00,0x30, 0x83,0xBA, 0x00,0x10, 0xC6,0x34, 0x00,0x00, 0x93,0xAA, 0x00,0x24, 0x87,0x3A,
37980x00,0x14, 0x00,0x00, 0x00,0x01, 0x97,0x2A, 0x00,0x28, 0x20,0x36, 0x00,0x1F, 0xEE,0x00,
37990xED,0x1C, 0xC7,0x30, 0x50,0x00, 0x07,0x38, 0x00,0x34, 0x95,0xBA, 0x00,0x00, 0x06,0x30,
38000x00,0x04, 0xE0,0x00, 0xEC,0xFC, 0x06,0xB4, 0x00,0x01, 0x83,0x96, 0x00,0x10, 0x76,0xA5,
38010x00,0x1E, 0x93,0x93, 0xFF,0xFC, 0xF3,0x82, 0x00,0xB4, 0x93,0x93, 0xFF,0xFC, 0x95,0x13,
38020xFF,0xFC, 0x87,0x26, 0x00,0x20, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
38030xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x83,0x96, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x93,0x93,
38040xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xEA,0xB8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
38050xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x14, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
38060x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x18, 0x87,0x16,
38070x00,0x04, 0x00,0x00, 0x00,0x01, 0x86,0x3A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x96,0x16,
38080xFF,0xF0, 0x87,0x3A, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x97,0x16, 0xFF,0xF4, 0xF6,0x02,
38090x1D,0xE0, 0x96,0x13, 0xFF,0xFC, 0x86,0x16, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x96,0x13,
38100xFF,0xFC, 0xF6,0x04, 0x6E,0x50, 0x00,0x00, 0x00,0x01, 0x96,0x13, 0xFF,0xFC, 0x26,0x14,
38110x00,0x10, 0x96,0x16, 0xFF,0xEC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x26,0xF8, 0x97,0x93,
38120xFF,0xFC, 0xF6,0x84, 0x6E,0x50, 0xF6,0x02, 0x00,0x00, 0x87,0x36, 0x1D,0xD8, 0x96,0x16,
38130xFF,0xE4, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
38140xFF,0xF0, 0xF6,0x86, 0x42,0xC0, 0xF7,0x37, 0x28,0x00, 0x86,0x16, 0xFF,0xEC, 0x00,0x00,
38150x00,0x01, 0x96,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xDB,0xB4, 0x97,0x93,
38160xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xEE,0x4D, 0x00,0x00, 0x00,0x01, 0x86,0x16,
38170xFF,0xEC, 0x00,0x00, 0x00,0x01, 0x96,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
38180xD5,0xA0, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00, 0xEE,0x4D, 0x00,0x00,
38190x00,0x01, 0xF6,0x02, 0x00,0x01, 0x96,0x16, 0xFF,0xE4, 0x84,0x16, 0xFF,0xE4, 0x87,0x96,
38200xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
38210x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x96, 0x00,0x04, 0x86,0x16,
38220x00,0x00, 0x87,0x36, 0x00,0x08, 0x85,0x96, 0x00,0x08, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
38230xEE,0x99, 0x20,0x3A, 0x00,0x03, 0xE6,0x00, 0xEE,0xE9, 0xF4,0x02, 0x00,0x00, 0xE0,0x00,
38240xEF,0x0C, 0x00,0x00, 0x00,0x01, 0x77,0xB0, 0x00,0x1F, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
38250xEF,0x0D, 0xF4,0x02, 0x00,0x00, 0x85,0x16, 0x00,0x14, 0x00,0x00, 0x00,0x01, 0x95,0x13,
38260xFF,0xFC, 0x85,0x16, 0x00,0x10, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x85,0x16,
38270x00,0x0C, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x95,0x93, 0xFF,0xFC, 0x96,0x93,
38280xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xEB,0x60, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
38290xEF,0x0C, 0x00,0x00, 0x00,0x01, 0x77,0xB0, 0x00,0x1E, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
38300xEF,0x0D, 0x00,0x00, 0x00,0x01, 0x95,0x93, 0xFF,0xFC, 0x96,0x93, 0xFF,0xFC, 0x07,0x88,
38310x00,0x08, 0xE0,0x00, 0xED,0x74, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
38320xFF,0xF8, 0x02,0x14, 0x00,0x18, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
38330xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x18, 0xF4,0x82, 0x00,0x00, 0x86,0x96,
38340x00,0x00, 0xF6,0x04, 0x4A,0xA0, 0x23,0x94, 0x00,0x10, 0x84,0x36, 0x00,0x00, 0x96,0x16,
38350xFF,0xE4, 0xF7,0x04, 0x4A,0x9C, 0x94,0x16, 0xFF,0xF0, 0x85,0x36, 0x00,0x04, 0xC0,0x32,
38360x72,0x00, 0xEC,0x00, 0xF0,0x14, 0x95,0x16, 0xFF,0xF4, 0x77,0x31, 0x00,0x01, 0xC7,0x38,
38370x60,0x00, 0x77,0x39, 0x00,0x02, 0xF3,0x06, 0x4A,0x98, 0xC6,0xB8, 0x30,0x00, 0x06,0xB4,
38380x00,0x0C, 0xC5,0x84, 0x00,0x00, 0x87,0x36, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
38390x42,0x00, 0xE6,0x00, 0xEF,0xA4, 0xC6,0x24, 0x00,0x00, 0x87,0x36, 0x00,0x04, 0x00,0x00,
38400x00,0x01, 0xC0,0x3A, 0x52,0x00, 0xE6,0x00, 0xEF,0xA8, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
38410x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00, 0xEF,0xB5, 0x00,0x00, 0x00,0x01, 0xF5,0x82,
38420x00,0x00, 0x86,0x36, 0x00,0x00, 0x87,0x16, 0xFF,0xF0, 0x00,0x00, 0x00,0x01, 0xC0,0x32,
38430x72,0x00, 0xE2,0x00, 0xEF,0xF0, 0xF5,0x02, 0x00,0x00, 0xC0,0x32, 0x72,0x00, 0xE6,0x00,
38440xEF,0xF8, 0x20,0x2A, 0x00,0x00, 0x86,0xB6, 0x00,0x04, 0x87,0x16, 0xFF,0xF4, 0x00,0x00,
38450x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x00, 0xEF,0xF9, 0x20,0x2A, 0x00,0x00, 0xF5,0x02,
38460x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x00, 0xF0,0x09, 0x20,0x2E, 0x00,0x00, 0xF5,0x82,
38470x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x00, 0xF0,0x18, 0x20,0x26, 0x00,0x00, 0xF4,0x82,
38480x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x00, 0xF0,0x4D, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
38490xFF,0xE4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
38500x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
38510xFF,0xE8, 0xE0,0x00, 0xF0,0xB0, 0x96,0x96, 0xFF,0xEC, 0x27,0x14, 0x00,0x1C, 0x97,0x13,
38520xFF,0xFC, 0x93,0x93, 0xFF,0xFC, 0xF3,0x06, 0x4A,0x98, 0x93,0x13, 0xFF,0xFC, 0x07,0x88,
38530x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x20,0x22, 0x00,0x00, 0xE6,0x00,
38540xF0,0xAD, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xE4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9,
38550x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4,
38560x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xE8, 0x96,0x96, 0xFF,0xEC, 0xF7,0x05,
38570x4A,0xA0, 0xE0,0x00, 0xF0,0xB4, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32,
38580x00,0x00, 0xE6,0x00, 0xF1,0x21, 0xF4,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xE8, 0xF6,0x06,
38590x42,0xC8, 0x76,0xB9, 0x00,0x02, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xA7,0x36,
38600x60,0x02, 0x83,0x16, 0x00,0x04, 0xC6,0xB4, 0x60,0x00, 0x76,0x35, 0x00,0x1E, 0x76,0x30,
38610xFF,0xE5, 0x05,0x34, 0x00,0x02, 0x75,0xA9, 0x00,0x1E, 0xC7,0x38, 0x67,0xC0, 0x77,0x38,
38620xFF,0xF0, 0x97,0x1A, 0x00,0x00, 0x87,0x2A, 0x00,0x00, 0x75,0xAC, 0xFF,0xE5, 0x83,0x16,
38630x00,0x08, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x97,0x1A, 0x00,0x00, 0x83,0x16,
38640x00,0x0C, 0x06,0xB4, 0x00,0x04, 0xE0,0x00, 0xF1,0x24, 0x96,0x9A, 0x00,0x00, 0xF4,0x02,
38650x00,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x10, 0x01,0x3C,
38660x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0xB9,0x00, 0x00,0x00, 0xBA,0x00, 0x00,0x00,
38670xBB,0x00, 0x00,0x00, 0xBC,0x00, 0x00,0x00, 0xBD,0x00, 0x00,0x00, 0xBE,0x00, 0x00,0x00,
38680xBF,0x00, 0x00,0x00, 0x80,0x00, 0x00,0x00, 0x81,0x00, 0x00,0x00, 0x82,0x00, 0x00,0x00,
38690x83,0x00, 0x00,0x00, 0x84,0x00, 0x00,0x00, 0x85,0x00, 0x00,0x00, 0x86,0x00, 0x00,0x00,
38700x87,0x00, 0xB9,0xB9, 0xB9,0xBA, 0xB9,0xBB, 0xB9,0xBC, 0xB9,0xBD, 0xB9,0xBE, 0xB9,0xBF,
38710xB9,0x80, 0xB9,0x81, 0xB9,0x82, 0xB9,0x83, 0xB9,0x84, 0xB9,0x85, 0xB9,0x86, 0xB9,0x87,
38720xBA,0xB9, 0xBA,0xBA, 0xBA,0xBB, 0xBA,0xBC, 0xBA,0xBD, 0xBA,0xBE, 0xBA,0xBF, 0xBA,0x80,
38730xBA,0x81, 0xBA,0x82, 0xBA,0x83, 0xBA,0x84, 0xBA,0x85, 0xBA,0x86, 0xBA,0x87, 0xBB,0xB9,
38740xBB,0xBA, 0xBB,0xBB, 0xBB,0xBC, 0xBB,0xBD, 0xBB,0xBE, 0xBB,0xBF, 0xBB,0x80, 0xBB,0x81,
38750xBB,0x82, 0xBB,0x83, 0xBB,0x84, 0xBB,0x85, 0xBB,0x86, 0xBB,0x87, 0xBC,0xB9, 0xBC,0xBA,
38760xBC,0xBB, 0xBC,0xBC, 0xBC,0xBD, 0xBC,0xBE, 0xBC,0xBF, 0xBC,0x80, 0xBC,0x81, 0xBC,0x82,
38770xBC,0x83, 0xBC,0x84, 0xBC,0x85, 0xBC,0x86, 0xBC,0x87, 0xBD,0xB9, 0xBD,0xBA, 0xBD,0xBB,
38780xBD,0xBC, 0xBD,0xBD, 0xBD,0xBE, 0xBD,0xBF, 0xBD,0x80, 0xBD,0x81, 0xBD,0x82, 0xBD,0x83,
38790xBD,0x84, 0xBD,0x85, 0xBD,0x86, 0xBD,0x87, 0xBE,0xB9, 0xBE,0xBA, 0xBE,0xBB, 0xBE,0xBC,
38800xBE,0xBD, 0xBE,0xBE, 0xBE,0xBF, 0xBE,0x80, 0xBE,0x81, 0xBE,0x82, 0xBE,0x83, 0xBE,0x84,
38810xBE,0x85, 0xBE,0x86, 0xBE,0x87, 0xBF,0xB9, 0xBF,0xBA, 0xBF,0xBB, 0xBF,0xBC, 0xBF,0xBD,
38820xBF,0xBE, 0xBF,0xBF, 0xBF,0x80, 0xBF,0x81, 0xBF,0x82, 0xBF,0x83, 0xBF,0x84, 0xBF,0x85,
38830xBF,0x86, 0xBF,0x87, 0x80,0xB9, 0x80,0xBA, 0x80,0xBB, 0x80,0xBC, 0x80,0xBD, 0x80,0xBE,
38840x80,0xBF, 0x80,0x80, 0x80,0x81, 0x80,0x82, 0x80,0x83, 0x80,0x84, 0x80,0x85, 0x80,0x86,
38850x80,0x87, 0x81,0xB9, 0x81,0xBA, 0x81,0xBB, 0x81,0xBC, 0x81,0xBD, 0x81,0xBE, 0x81,0xBF,
38860x81,0x80, 0x81,0x81, 0x81,0x82, 0x81,0x83, 0x81,0x84, 0x81,0x85, 0x81,0x86, 0x81,0x87,
38870x82,0xB9, 0x82,0xBA, 0x82,0xBB, 0x82,0xBC, 0x82,0xBD, 0x82,0xBE, 0x82,0xBF, 0x82,0x80,
38880x82,0x81, 0x82,0x82, 0x82,0x83, 0x82,0x84, 0x82,0x85, 0x82,0x86, 0x82,0x87, 0x83,0xB9,
38890x83,0xBA, 0x83,0xBB, 0x83,0xBC, 0x83,0xBD, 0x83,0xBE, 0x83,0xBF, 0x83,0x80, 0x83,0x81,
38900x83,0x82, 0x83,0x83, 0x83,0x84, 0x83,0x85, 0x83,0x86, 0x83,0x87, 0x84,0xB9, 0x84,0xBA,
38910x84,0xBB, 0x84,0xBC, 0x84,0xBD, 0x84,0xBE, 0x84,0xBF, 0x84,0x80, 0x84,0x81, 0x84,0x82,
38920x84,0x83, 0x84,0x84, 0x84,0x85, 0x84,0x86, 0x84,0x87, 0x85,0xB9, 0x85,0xBA, 0x85,0xBB,
38930x85,0xBC, 0x85,0xBD, 0x85,0xBE, 0x85,0xBF, 0x85,0x80, 0x85,0x81, 0x85,0x82, 0x85,0x83,
38940x85,0x84, 0x85,0x85, 0x85,0x86, 0x85,0x87, 0x86,0xB9, 0x86,0xBA, 0x86,0xBB, 0x86,0xBC,
38950x86,0xBD, 0x86,0xBE, 0x86,0xBF, 0x86,0x80, 0x86,0x81, 0x86,0x82, 0x86,0x83, 0x86,0x84,
38960x86,0x85, 0x86,0x86, 0x86,0x87, 0x87,0xB9, 0x87,0xBA, 0x87,0xBB, 0x87,0xBC, 0x87,0xBD,
38970x87,0xBE, 0x87,0xBF, 0x87,0x80, 0x87,0x81, 0x87,0x82, 0x87,0x83, 0x87,0x84, 0x87,0x85,
38980x87,0x86, 0x87,0x87, 0x00,0x00, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
38990x00,0x18, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
39000xF3,0x7D, 0xF6,0x06, 0x42,0x96, 0xF7,0x04, 0x42,0x94, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
39010xFF,0xE5, 0xF4,0x02, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
39020x00,0x01, 0xE0,0x00, 0xF5,0xE0, 0xF7,0x33, 0x28,0x00, 0xF3,0x84, 0x6F,0x30, 0x90,0x13,
39030xFF,0xFC, 0x27,0x1C, 0x00,0x02, 0x97,0x13, 0xFF,0xFC, 0x83,0x16, 0x00,0x00, 0x00,0x00,
39040x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x93,0x96, 0xFF,0xEC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
39050xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0xEC, 0xF7,0x02, 0x00,0x00, 0x97,0x1E,
39060x00,0x08, 0x83,0x16, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x93,0x1E, 0x00,0x0C, 0x83,0x16,
39070x00,0x08, 0x04,0x9C, 0x00,0x22, 0x93,0x1E, 0x00,0x1C, 0x83,0x16, 0x00,0x0C, 0x93,0x96,
39080xFF,0xF4, 0x87,0x1A, 0x00,0x00, 0x76,0x99, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x06,0x18,
39090x00,0x02, 0x75,0xB1, 0x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
39100xFF,0xF0, 0x06,0x9C, 0x00,0x20, 0xF7,0x37, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x96,0x96,
39110xFF,0xE4, 0x75,0x35, 0x00,0x1E, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39120x28,0x00, 0x04,0x9C, 0x00,0x24, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
39130x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39140x28,0x00, 0x04,0x9C, 0x00,0x26, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
39150x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39160x28,0x00, 0x04,0x9C, 0x00,0x28, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
39170x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39180x28,0x00, 0x04,0x9C, 0x00,0x2A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
39190x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39200x28,0x00, 0x04,0x9C, 0x00,0x2C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
39210x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39220x28,0x00, 0x04,0x9C, 0x00,0x2E, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
39230x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39240x28,0x00, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x04,0x9C, 0x00,0x30, 0x76,0x31,
39250x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27,
39260x28,0x00, 0x87,0x1E, 0x00,0x20, 0x75,0x28, 0xFF,0xE5, 0xC7,0x38, 0x57,0xC0, 0x77,0x39,
39270xFF,0xF0, 0x20,0x3A, 0x00,0x08, 0xEE,0x00, 0xF5,0x98, 0xF3,0x06, 0x14,0xD8, 0x83,0x16,
39280xFF,0xE4, 0x87,0x1E, 0x00,0x20, 0x76,0x99, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
39290x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x25,0xB8, 0x00,0x01, 0xC4,0xAC, 0x58,0x00, 0x04,0x24,
39300x00,0x01, 0x20,0x2E, 0x00,0x00, 0xEC,0x00, 0xF5,0x95, 0xF5,0x02, 0x00,0x00, 0x83,0x16,
39310xFF,0xE4, 0x00,0x00, 0x00,0x01, 0x06,0x18, 0x00,0x02, 0xA7,0x32, 0x58,0x02, 0xC6,0xB0,
39320x58,0x00, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
39330xFF,0xE8, 0xC6,0xB0, 0x40,0x00, 0x77,0xB8, 0x00,0x18, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x00,
39340xF5,0x7D, 0xF7,0x37, 0x68,0x00, 0xF5,0x02, 0xFF,0xFF, 0xC7,0x30, 0x48,0x00, 0xF5,0x3B,
39350x68,0x00, 0x24,0xA4, 0x00,0x02, 0x24,0x20, 0x00,0x02, 0xE0,0x00, 0xF5,0x34, 0x25,0xAC,
39360x00,0x01, 0xF3,0x06, 0x14,0xD8, 0x93,0x13, 0xFF,0xFC, 0xF3,0x02, 0x00,0x34, 0x93,0x13,
39370xFF,0xFC, 0x83,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x83,0x16,
39380x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x1A, 0x00,0x00, 0x76,0x99, 0x00,0x1E, 0x76,0xB4,
39390xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x93,0x93,
39400xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xEA,0xB8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
39410xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x10, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
39420x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x10, 0xF7,0x04,
39430x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xF6,0x39, 0xF6,0x06,
39440x42,0x96, 0xF7,0x04, 0x42,0x94, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF4,0x02,
39450x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xE0,0x00,
39460xF7,0x48, 0xF7,0x33, 0x28,0x00, 0xF5,0x04, 0x6F,0x30, 0x00,0x00, 0x00,0x01, 0x95,0x16,
39470xFF,0xF4, 0x90,0x13, 0xFF,0xFC, 0x27,0x28, 0x00,0x02, 0x97,0x13, 0xFF,0xFC, 0x85,0x96,
39480x00,0x04, 0x00,0x00, 0x00,0x01, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
39490xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0x00,0x04, 0xF6,0x02, 0x00,0x00, 0x86,0xAA,
39500x00,0x00, 0x77,0x29, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
39510xFF,0xF0, 0xF7,0x02, 0x00,0x01, 0xC0,0x36, 0x74,0x00, 0xE6,0x00, 0xF6,0x99, 0x96,0x96,
39520xFF,0xEC, 0xC6,0x38, 0x00,0x00, 0x96,0x13, 0xFF,0xFC, 0x85,0x96, 0xFF,0xEC, 0x85,0x16,
39530xFF,0xF4, 0x47,0x2C, 0xFF,0xFE, 0x07,0x38, 0x00,0x02, 0xC7,0x28, 0x72,0x00, 0x97,0x13,
39540xFF,0xFC, 0x85,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
39550x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0xFF,0xF4, 0xF7,0x02,
39560x00,0x02, 0x97,0x2A, 0x00,0x08, 0x85,0x96, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0x95,0xAA,
39570x00,0x0C, 0x85,0x96, 0x00,0x0C, 0x00,0x00, 0x00,0x01, 0x95,0xAA, 0x00,0x1C, 0xF5,0x06,
39580x14,0xD8, 0x95,0x13, 0xFF,0xFC, 0xF5,0x82, 0x00,0x20, 0x95,0x93, 0xFF,0xFC, 0x85,0x16,
39590xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x85,0x96, 0x00,0x00, 0x85,0x16,
39600xFF,0xEC, 0x87,0x2E, 0x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38,
39610x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38, 0x50,0x00, 0x97,0x13, 0xFF,0xFC, 0x85,0x96,
39620xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
39630xEA,0xB8, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
39640x00,0x10, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
39650x00,0x08, 0x85,0x96, 0x00,0x00, 0x85,0x16, 0x00,0x04, 0x87,0x16, 0x00,0x08, 0xF6,0x02,
39660xFF,0xFC, 0x06,0xA8, 0x00,0x03, 0xC6,0xB4, 0x64,0x00, 0x07,0x38, 0x00,0x03, 0xC7,0x38,
39670x64,0x00, 0xC7,0x34, 0x70,0x00, 0x97,0x13, 0xFF,0xFC, 0xC5,0xAC, 0x6A,0x00, 0x95,0x93,
39680xFF,0xFC, 0xF7,0x02, 0x00,0x03, 0xC5,0x28, 0x74,0x00, 0xF7,0x02, 0x00,0x04, 0xC7,0x38,
39690x52,0x00, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x14,0xD8, 0x97,0x93,
39700xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x10, 0x01,0x3C,
39710x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
39720x00,0x10, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
39730xF8,0x0D, 0xF6,0x06, 0x42,0x96, 0xF7,0x04, 0x42,0x94, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
39740xFF,0xE5, 0xF4,0x02, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
39750x00,0x01, 0xE0,0x00, 0xF9,0x20, 0xF7,0x33, 0x28,0x00, 0xF5,0x04, 0x6F,0x30, 0x00,0x00,
39760x00,0x01, 0x95,0x16, 0xFF,0xF4, 0x90,0x13, 0xFF,0xFC, 0x27,0x28, 0x00,0x02, 0x97,0x13,
39770xFF,0xFC, 0x85,0x96, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x95,0x93, 0xFF,0xFC, 0x07,0x88,
39780x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x85,0x16, 0x00,0x04, 0xF6,0x02,
39790x00,0x00, 0x86,0xAA, 0x00,0x00, 0x77,0x29, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
39800x77,0xC0, 0x76,0xB5, 0xFF,0xF0, 0xF7,0x02, 0x00,0x01, 0xC0,0x36, 0x74,0x00, 0xE6,0x00,
39810xF8,0x6D, 0x96,0x96, 0xFF,0xEC, 0xC6,0x38, 0x00,0x00, 0x96,0x13, 0xFF,0xFC, 0x85,0x96,
39820xFF,0xEC, 0x85,0x16, 0xFF,0xF4, 0x47,0x2C, 0xFF,0xFE, 0x07,0x38, 0x00,0x02, 0xC7,0x28,
39830x72,0x00, 0x97,0x13, 0xFF,0xFC, 0x85,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x95,0x93,
39840xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x85,0x16,
39850xFF,0xF4, 0xF5,0x82, 0x00,0x06, 0xF5,0xAB, 0x28,0x00, 0x85,0x96, 0x00,0x08, 0x07,0x28,
39860x00,0x02, 0x95,0xAA, 0x00,0x04, 0x05,0x14, 0x00,0x0E, 0x85,0x2A, 0x00,0x00, 0x77,0xA9,
39870x00,0x1E, 0x77,0xBC, 0xFF,0xE5, 0xC5,0x28, 0x7F,0xC0, 0x75,0x29, 0xFF,0xF0, 0xF5,0x3B,
39880x28,0x00, 0xF5,0x86, 0x14,0xD8, 0x95,0x93, 0xFF,0xFC, 0xF5,0x02, 0x00,0x08, 0x95,0x13,
39890xFF,0xFC, 0x85,0x96, 0x00,0x00, 0x85,0x16, 0xFF,0xEC, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
39900x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0xC7,0x38,
39910x50,0x00, 0x97,0x13, 0xFF,0xFC, 0x85,0x96, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x95,0x93,
39920xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xF7,0x5C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
39930xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x10, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
39940x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x08, 0xF7,0x04,
39950x75,0xEC, 0x83,0x96, 0x00,0x04, 0x20,0x3A, 0x00,0x00, 0xE6,0x00, 0xFA,0x64, 0xF6,0x06,
39960x42,0x96, 0xF5,0x04, 0x6F,0x30, 0x90,0x13, 0xFF,0xFC, 0x27,0x28, 0x00,0x02, 0x97,0x13,
39970xFF,0xFC, 0x83,0x16, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x93,0x13, 0xFF,0xFC, 0x93,0x96,
39980xFF,0xF4, 0x95,0x16, 0xFF,0xF0, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93,
39990xFF,0xFC, 0x85,0x16, 0xFF,0xF0, 0xF3,0x02, 0x00,0x07, 0x83,0x96, 0xFF,0xF4, 0xF3,0x2B,
40000x28,0x00, 0x07,0x28, 0x00,0x02, 0xF3,0x02, 0x00,0x01, 0xF3,0x3B, 0x28,0x00, 0x87,0x1E,
40010x00,0x00, 0x76,0x9D, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x05,0x9C, 0x00,0x02, 0x76,0x2D,
40020x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0x74,0x9D, 0x00,0x1E, 0x74,0xA4, 0xFF,0xE5, 0x04,0x1C,
40030x00,0x06, 0x83,0x16, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0x06,0xA8,
40040x00,0x04, 0xF7,0x37, 0x28,0x00, 0x87,0x2E, 0x00,0x00, 0x06,0xA8, 0x00,0x06, 0x75,0xA1,
40050x00,0x1E, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x1E,
40060x00,0x04, 0x75,0xAC, 0xFF,0xE5, 0x06,0xA8, 0x00,0x08, 0x76,0x19, 0x00,0x1E, 0xC7,0x38,
40070x4F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0x87,0x22, 0x00,0x00, 0x06,0xA8,
40080x00,0x0A, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x37, 0x28,0x00, 0xF3,0x06,
40090x14,0xD8, 0x93,0x13, 0xFF,0xFC, 0xF3,0x02, 0x00,0x0C, 0x93,0x13, 0xFF,0xFC, 0x83,0x16,
40100x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x1A, 0x00,0x00, 0x76,0x30, 0xFF,0xE5, 0xC7,0x38,
40110x67,0xC0, 0x77,0x39, 0xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
40120x00,0x08, 0xE0,0x00, 0xF7,0x5C, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00, 0xFA,0x84, 0x00,0x00,
40130x00,0x01, 0xF7,0x04, 0x42,0x94, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xF4,0x02,
40140x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xF7,0x33,
40150x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C,
40160x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
40170x00,0x48, 0xF7,0x04, 0x75,0xEC, 0x85,0x96, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x00,
40180xFD,0x98, 0xF6,0x06, 0x42,0x96, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40190x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0x24,0x14, 0x00,0x1E, 0x06,0x2C, 0x00,0x02, 0x75,0x31,
40200x00,0x1E, 0x24,0x94, 0x00,0x20, 0x75,0x28, 0xFF,0xE5, 0xF3,0x84, 0x6E,0x50, 0xC7,0x38,
40210x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x32, 0x00,0x00, 0x93,0x96,
40220xFF,0xC4, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
40230x00,0x1C, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40240xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
40250x00,0x1A, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40260xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
40270x00,0x18, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40280xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
40290x00,0x16, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40300xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
40310x00,0x14, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40320xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x24,0x14,
40330x00,0x12, 0x06,0x30, 0x00,0x02, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40340xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x06,0x30,
40350x00,0x02, 0x87,0x32, 0x00,0x00, 0x24,0x14, 0x00,0x10, 0x76,0x31, 0x00,0x1E, 0x76,0x30,
40360xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x23, 0x28,0x00, 0x90,0x13,
40370xFF,0xFC, 0x27,0x1C, 0x00,0x02, 0x97,0x13, 0xFF,0xFC, 0x94,0x93, 0xFF,0xFC, 0x95,0x96,
40380xFF,0xBC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xCD,0xB8, 0x97,0x93, 0xFF,0xFC, 0x85,0x96,
40390xFF,0xBC, 0x23,0x14, 0x00,0x36, 0x24,0x94, 0x00,0x38, 0x73,0xA5, 0x00,0x1E, 0x73,0x9C,
40400xFF,0xE5, 0xF4,0x04, 0x42,0xC0, 0xF6,0x86, 0x42,0xC0, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
40410xFF,0xE5, 0x87,0x2E, 0x00,0x00, 0x76,0x2D, 0x00,0x1E, 0x76,0x30, 0xFF,0xE5, 0xC4,0x20,
40420x6F,0xC0, 0x74,0x20, 0xFF,0xF0, 0x05,0xAC, 0x00,0x02, 0x75,0x2D, 0x00,0x1E, 0x75,0x28,
40430xFF,0xE5, 0xC7,0x38, 0x67,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x27, 0x28,0x00, 0x87,0x2E,
40440x00,0x00, 0xF6,0x04, 0x6E,0x50, 0xC7,0x38, 0x57,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40450x28,0x00, 0x23,0x14, 0x00,0x34, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40460x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40470x28,0x00, 0x23,0x14, 0x00,0x32, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40480x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40490x28,0x00, 0x23,0x14, 0x00,0x30, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40500x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40510x28,0x00, 0x23,0x14, 0x00,0x2E, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40520x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40530x28,0x00, 0x23,0x14, 0x00,0x2C, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40540x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40550x28,0x00, 0x23,0x14, 0x00,0x2A, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x76,0xAD,
40560x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40570x28,0x00, 0x05,0xAC, 0x00,0x02, 0x87,0x2E, 0x00,0x00, 0x23,0x14, 0x00,0x28, 0x75,0xAD,
40580x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC7,0x38, 0x5F,0xC0, 0x77,0x38, 0xFF,0xF0, 0xF7,0x1B,
40590x28,0x00, 0x87,0x16, 0xFF,0xC8, 0xF6,0x82, 0x00,0x03, 0xC7,0x38, 0x3F,0xC0, 0x96,0xB2,
40600x00,0x08, 0x06,0xB0, 0x1D,0xD8, 0xF4,0x37, 0x28,0x00, 0xF3,0x86, 0x14,0xD8, 0x93,0x93,
40610xFF,0xFC, 0xF3,0x82, 0x1D,0xE0, 0x93,0x93, 0xFF,0xFC, 0x96,0x13, 0xFF,0xFC, 0x77,0x39,
40620xFF,0xF0, 0x97,0x13, 0xFF,0xFC, 0x83,0x96, 0xFF,0xC4, 0x00,0x00, 0x00,0x01, 0x93,0x93,
40630xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xEA,0xB8, 0x97,0x93, 0xFF,0xFC, 0xE0,0x00,
40640xFD,0xB8, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0x94, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40650xFF,0xE5, 0xF4,0x02, 0x00,0x00, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
40660x00,0x01, 0xF7,0x33, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
40670x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
40680x00,0x08, 0x86,0x16, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x32, 0x00,0x00, 0x76,0xB1,
40690x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x20,0x3A,
40700x00,0x06, 0xE6,0x00, 0xFE,0x21, 0xF5,0x82, 0x00,0x1E, 0xF7,0x04, 0x42,0xA8, 0xF6,0x06,
40710x42,0xA8, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39,
40720xFF,0xF0, 0x07,0x38, 0x00,0x01, 0xE0,0x00, 0xFE,0x34, 0xF7,0x33, 0x28,0x00, 0xF6,0x05,
40730x6F,0x34, 0x95,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
40740xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x04, 0x01,0x3C,
40750x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x16,
40760x00,0x00, 0x85,0x96, 0x00,0x04, 0x87,0x32, 0x00,0x00, 0x76,0xB1, 0x00,0x1E, 0x76,0xB4,
40770xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x20,0x3A, 0x00,0x07, 0xE6,0x00,
40780xFE,0x9D, 0xF4,0x02, 0x00,0x00, 0xF7,0x04, 0x42,0xA8, 0xF6,0x06, 0x42,0xAA, 0x76,0xB1,
40790x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
40800x00,0x01, 0xE0,0x00, 0xFF,0x1C, 0xF7,0x33, 0x28,0x00, 0x07,0x30, 0x00,0x02, 0x86,0xBA,
40810x00,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5,
40820xFF,0xF0, 0x20,0x36, 0x00,0x01, 0xE6,0x00, 0xFE,0xD5, 0xF6,0x05, 0x6F,0x34, 0x20,0x36,
40830x00,0x02, 0xE6,0x00, 0xFE,0xE5, 0xF5,0x02, 0x00,0x20, 0xE0,0x00, 0xFE,0xFC, 0xF6,0x06,
40840x42,0xAC, 0x20,0x2E, 0x00,0x0C, 0xE6,0x00, 0xFF,0x1C, 0xF4,0x02, 0x00,0x00, 0xF5,0x02,
40850x00,0x1F, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
40860xFF,0xFC, 0xE0,0x00, 0xFF,0x1C, 0xF4,0x02, 0x00,0x01, 0xF7,0x04, 0x42,0xAC, 0x76,0xB1,
40870x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
40880x00,0x01, 0xF7,0x33, 0x28,0x00, 0xF4,0x02, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
40890xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
40900xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x86,0x96, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x36,
40910x00,0x04, 0xF6,0x02, 0x00,0x00, 0x07,0x38, 0x00,0x08, 0x97,0x36, 0x00,0x04, 0x87,0x36,
40920x00,0x08, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xEC,0x00, 0xFF,0x7D, 0xF6,0x85,
40930x6F,0x34, 0x87,0x36, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x03, 0xEE,0x00,
40940xFF,0x80, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x00,
40950xFF,0xBD, 0xF6,0x06, 0x42,0xAE, 0xF7,0x04, 0x6F,0x34, 0x00,0x00, 0x00,0x01, 0x87,0x3A,
40960x00,0x08, 0xF6,0x82, 0xFF,0xEC, 0x77,0x39, 0x00,0x02, 0xA7,0x3A, 0x68,0x02, 0x00,0x00,
40970x00,0x01, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93,
40980xFF,0xFC, 0xE0,0x00, 0xFF,0xD8, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x42,0xAC, 0x76,0xB1,
40990x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x07,0x38,
41000x00,0x01, 0xF7,0x33, 0x28,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
41010x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x00,0x17, 0x00,0x00,
41020x00,0x1A, 0x00,0x00, 0x00,0x1D, 0x00,0x00, 0x00,0x18, 0x00,0x00, 0x00,0x00, 0x56,0x65,
41030x72,0x73, 0x69,0x6F, 0x6E,0x53, 0x74,0x72, 0x69,0x6E, 0x67,0x3A, 0x20,0x6D, 0x63,0x70,
41040x2D,0x6C, 0x34,0x76, 0x33,0x20, 0x33,0x2E, 0x30,0x38, 0x63,0x20, 0x44,0x65, 0x63,0x20,
41050x31,0x31, 0x20,0x31, 0x39,0x39, 0x36,0x20, 0x31,0x33, 0x3A,0x30, 0x36,0x3A, 0x31,0x36,
41060x00,0x00, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04, 0xE0,0x0C, 0xFF,0x02,
41070x00,0x00, 0x97,0x02, 0xFF,0x84, 0xF7,0x06, 0x0C,0x3E, 0xCF,0xFC, 0x75,0x80, 0xF6,0x02,
41080x00,0x02, 0x96,0x02, 0xFF,0x8C, 0x90,0x02, 0xFF,0x88, 0xF7,0x04, 0xE0,0x20, 0x00,0x00,
41090x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x00,0x74, 0xF6,0x82, 0x00,0x00, 0xF6,0x82,
41100x00,0x03, 0x96,0x82, 0xFF,0x98, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
41110x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
41120x00,0x08, 0x22,0x10, 0x00,0x0C, 0xF5,0x02, 0x14,0x94, 0xF5,0x05, 0x7B,0x00, 0xF5,0x0E,
41130xF0,0x14, 0xF5,0x05, 0x7B,0x08, 0xF7,0x06, 0xE0,0x00, 0xF6,0x86, 0x7B,0x68, 0xC7,0x38,
41140x6A,0x00, 0xF7,0x05, 0x7A,0xF0, 0xF5,0x02, 0x00,0x4C, 0xF6,0x82, 0x00,0x00, 0x20,0x36,
41150x00,0x02, 0xEE,0x01, 0x01,0x24, 0xF5,0x05, 0x7A,0xF8, 0xC5,0xB4, 0x00,0x00, 0xC6,0x34,
41160x00,0x00, 0xF7,0x06, 0xE0,0x30, 0xC7,0x2C, 0x70,0x00, 0xF5,0x06, 0x6F,0x44, 0xB7,0x32,
41170x50,0x02, 0x90,0x13, 0xFF,0xFC, 0x97,0x13, 0xFF,0xFC, 0x95,0x96, 0xFF,0xF4, 0x96,0x16,
41180xFF,0xF0, 0x96,0x96, 0xFF,0xEC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x03,0x1C, 0x97,0x93,
41190xFF,0xFC, 0x85,0x96, 0xFF,0xF4, 0x86,0x16, 0xFF,0xF0, 0x86,0x96, 0xFF,0xEC, 0x05,0xAC,
41200x14,0x94, 0x06,0xB4, 0x00,0x01, 0x20,0x36, 0x00,0x02, 0xEE,0x01, 0x00,0xD5, 0x06,0x30,
41210x00,0x04, 0xF5,0x02, 0x00,0x22, 0xF5,0x05, 0x6F,0x58, 0xF0,0x05, 0x6F,0x54, 0xF0,0x05,
41220x6F,0x50, 0xF0,0x05, 0x2D,0x40, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
41230x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
41240x00,0x08, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x29,0x58, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02,
41250x00,0x03, 0xF7,0x05, 0xE0,0x08, 0xF7,0x04, 0x7A,0xD8, 0xF6,0x02, 0x00,0x01, 0x96,0x02,
41260xFF,0x94, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x01,0x91, 0xF7,0x06, 0x7A,0xE8, 0x07,0x88,
41270x00,0x08, 0xE0,0x01, 0x03,0xDC, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x7A,0xE8, 0xF6,0x02,
41280x00,0x05, 0xF6,0x3B, 0x28,0x00, 0xF7,0x06, 0x7A,0xE0, 0x86,0x82, 0xFF,0x44, 0xF6,0x02,
41290x00,0x03, 0x20,0x36, 0x00,0x00, 0xE6,0x01, 0x01,0xC9, 0xF6,0x3B, 0x28,0x00, 0xF7,0x04,
41300x6F,0x64, 0x86,0x82, 0xFF,0x44, 0x07,0x38, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x01,
41310x01,0xB0, 0xF7,0x05, 0x6F,0x64, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x00,0x34, 0x97,0x93,
41320xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x00,0x8C, 0x97,0x93, 0xFF,0xFC, 0x07,0x88,
41330x00,0x08, 0xE0,0x00, 0x44,0x28, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
41340x16,0xF0, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x0C,0x60, 0x97,0x93,
41350xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x04,0x08, 0x97,0x93, 0xFF,0xFC, 0x07,0x88,
41360x00,0x08, 0xE0,0x00, 0x00,0x20, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
41370x0B,0xD8, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1D,0x68, 0x97,0x93,
41380xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0x50, 0x97,0x93, 0xFF,0xFC, 0x07,0x88,
41390x00,0x08, 0xE0,0x00, 0x5F,0x68, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
41400x6D,0xEC, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x21,0xD0, 0x97,0x93,
41410xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x22,0x2C, 0x97,0x93, 0xFF,0xFC, 0x90,0x02,
41420xFF,0x94, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x0B,0xFC, 0x97,0x93, 0xFF,0xFC, 0xF4,0x02,
41430x00,0x00, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
41440x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
41450x00,0x08, 0xF6,0x02, 0x00,0x00, 0xC5,0xB0, 0x00,0x00, 0x20,0x32, 0x00,0x02, 0xEE,0x01,
41460x03,0x08, 0xF5,0x06, 0x6F,0x44, 0xA6,0xAE, 0x50,0x02, 0x00,0x00, 0x00,0x01, 0x87,0x36,
41470x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x01, 0xE6,0x01, 0x02,0xFC, 0xF5,0x02,
41480x00,0x02, 0x95,0x13, 0xFF,0xFC, 0x96,0x93, 0xFF,0xFC, 0x95,0x96, 0xFF,0xF4, 0x96,0x16,
41490xFF,0xF0, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x03,0x1C, 0x97,0x93, 0xFF,0xFC, 0x86,0x16,
41500xFF,0xF0, 0x85,0x96, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x05,0xAC, 0x00,0x04, 0xE0,0x01,
41510x02,0xAC, 0x06,0x30, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
41520x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
41530x00,0x08, 0x87,0x16, 0x00,0x00, 0xF6,0x02, 0x00,0x00, 0xF6,0x82, 0x00,0x08, 0x96,0x3A,
41540x00,0x08, 0x96,0x3A, 0x00,0x0C, 0x96,0x3A, 0x09,0xD8, 0x96,0x3A, 0x09,0xDC, 0x96,0x3A,
41550x0E,0xF4, 0x96,0x3A, 0x0E,0xF8, 0x96,0xBA, 0x14,0x20, 0x96,0x3A, 0x14,0x24, 0x90,0xBA,
41560x14,0x8C, 0x86,0x96, 0x00,0x04, 0x90,0xBA, 0x14,0x90, 0x96,0xBA, 0x00,0x00, 0x96,0x3A,
41570x00,0x04, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C,
41580x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96,
41590x00,0x00, 0x87,0x16, 0x00,0x08, 0x86,0x16, 0x00,0x04, 0x77,0x38, 0xFF,0xFF, 0xC5,0x30,
41600x70,0x00, 0xC0,0x32, 0x52,0x00, 0xE4,0x01, 0x03,0xC9, 0x00,0x00, 0x00,0x01, 0x87,0x2E,
41610x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
41620xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0xC0,0x32, 0x52,0x00, 0xE4,0x01,
41630x03,0xA0, 0x05,0xAC, 0x00,0x02, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
41640x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
41650x00,0x08, 0xF7,0x02, 0x00,0x01, 0xE0,0x01, 0x03,0xE8, 0xF7,0x05, 0x7A,0xD8, 0x87,0x96,
41660xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
41670x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF5,0x02,
41680x00,0x0A, 0xF5,0x05, 0x71,0xCC, 0xF0,0x05, 0x71,0xD4, 0xF0,0x05, 0x71,0xD0, 0xF0,0x05,
41690x71,0xC4, 0xF5,0x02, 0x00,0x01, 0xF6,0x82, 0x00,0x00, 0x20,0x36, 0x00,0x0A, 0xEC,0x01,
41700x04,0x64, 0xF5,0x05, 0x71,0xC8, 0xF5,0x8A, 0x1E,0x00, 0xF6,0x06, 0x71,0xC4, 0x47,0x2C,
41710xFF,0xFC, 0x97,0x32, 0x00,0x18, 0x06,0x30, 0x00,0x04, 0x06,0xB4, 0x00,0x01, 0xF7,0x04,
41720x71,0xCC, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x01, 0x04,0x41, 0x05,0xAC,
41730x21,0x4C, 0xF0,0x05, 0x71,0x98, 0xF5,0x06, 0x6F,0x68, 0x95,0x13, 0xFF,0xFC, 0xF5,0x06,
41740x7B,0x18, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
41750xFF,0xFC, 0xF5,0x06, 0x05,0xD4, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82, 0x00,0x05, 0x97,0x93,
41760xFF,0xFC, 0xF5,0x06, 0x6F,0x68, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
41770x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x0B,0x70, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82,
41780x00,0x06, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x6F,0x68, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
41790x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x0B,0xA0, 0x95,0x13,
41800xFF,0xFC, 0xF7,0x82, 0x00,0x05, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x70,0x80, 0x95,0x13,
41810xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06,
41820x0B,0x70, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82, 0x00,0x06, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06,
41830x70,0x80, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
41840xFF,0xFC, 0xF5,0x06, 0x05,0x58, 0x95,0x13, 0xFF,0xFC, 0xF5,0x02, 0x00,0x0A, 0x95,0x13,
41850xFF,0xFC, 0xF5,0x06, 0x71,0x0C, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
41860x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x05,0x58, 0x97,0x93,
41870xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
41880x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04,
41890x71,0xC4, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x05,0x7D, 0xF6,0x86,
41900x71,0xC4, 0xE0,0x01, 0x05,0x94, 0xF7,0x02, 0x00,0x00, 0xF7,0x04, 0x71,0xD0, 0x00,0x00,
41910x00,0x01, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x87,0x3A, 0x00,0x18, 0x00,0x00,
41920x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x05,0xAC, 0xF7,0x05, 0x7B,0x10, 0xF6,0x06,
41930x71,0x0C, 0xE0,0x01, 0x05,0xC0, 0xF6,0x05, 0x7B,0x18, 0xF6,0x06, 0x6F,0x68, 0xF6,0x05,
41940x7B,0x18, 0x97,0x02, 0xFF,0x48, 0x07,0x38, 0x21,0x28, 0x97,0x02, 0xFF,0x4C, 0x87,0x96,
41950xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
41960x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x10, 0x86,0x82,
41970xFF,0x48, 0xF4,0x86, 0x6F,0x68, 0xF4,0x85, 0x7B,0x18, 0xF5,0x04, 0x7B,0x10, 0x26,0xB4,
41980x00,0x02, 0x85,0xB6, 0x00,0x00, 0x87,0x2A, 0x00,0x00, 0x76,0x29, 0x00,0x1E, 0x76,0x30,
41990xFF,0xE5, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC5,0xAC, 0x6F,0xC0, 0xC7,0x38,
42000x67,0xC0, 0x77,0x39, 0xFF,0xF0, 0x77,0xB8, 0x00,0x10, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42010x06,0x45, 0x75,0xAC, 0xFF,0xF0, 0xF7,0x04, 0x71,0xAC, 0x00,0x00, 0x00,0x01, 0x07,0x38,
42020x00,0x01, 0xF7,0x05, 0x71,0xAC, 0xF7,0x04, 0x71,0xAC, 0xE0,0x01, 0x08,0xC4, 0xF7,0x02,
42030x00,0x01, 0x77,0x2C, 0xFF,0xF8, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x06,0x71, 0x76,0xA9,
42040x00,0x1E, 0xF7,0x04, 0x71,0xA8, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
42050x71,0xA8, 0xF7,0x04, 0x71,0xA8, 0xE0,0x01, 0x08,0xC4, 0xF7,0x02, 0x00,0x01, 0x87,0x2A,
42060x00,0x00, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x27,0x38,
42070x00,0x04, 0x20,0x3A, 0x00,0x03, 0xE2,0x01, 0x08,0xA4, 0x00,0x00, 0x00,0x01, 0x77,0x39,
42080x00,0x02, 0xF6,0x86, 0x06,0xA4, 0xA6,0xB6, 0x70,0x02, 0x00,0x00, 0x00,0x01, 0xC1,0x34,
42090x00,0x00, 0x00,0x01, 0x06,0xB4, 0x00,0x01, 0x07,0x7C, 0x00,0x01, 0x07,0xEC, 0x00,0x01,
42100x08,0x44, 0x87,0x2A, 0x00,0x04, 0xC4,0x84, 0x00,0x00, 0xC0,0x3A, 0x4A,0x00, 0xE6,0x01,
42110x06,0xD8, 0x00,0x00, 0x00,0x01, 0x87,0x02, 0xFF,0x48, 0x00,0x00, 0x00,0x01, 0xC7,0x38,
42120x52,0x00, 0x97,0x2A, 0x00,0x04, 0x87,0x2A, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
42130x21,0x00, 0xEE,0x01, 0x07,0x3C, 0xF6,0x02, 0x00,0x00, 0x86,0xAA, 0x00,0x04, 0x87,0x02,
42140xFF,0x48, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x52,0x00, 0x27,0x38, 0x00,0x28, 0xC0,0x36,
42150x72,0x00, 0xE6,0x01, 0x07,0x3C, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x1D, 0x70,0x3E,
42160xFF,0xE1, 0xE6,0x01, 0x07,0x3C, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x17, 0x70,0x3E,
42170xFF,0xE1, 0xE6,0x01, 0x07,0x3D, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x16, 0x70,0x3E,
42180xFF,0xE1, 0xE6,0x01, 0x07,0x44, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32,
42190x00,0x00, 0xE6,0x01, 0x08,0x88, 0x00,0x00, 0x00,0x01, 0x87,0x2A, 0x00,0x18, 0x00,0x00,
42200x00,0x01, 0x20,0x3A, 0x00,0x02, 0xEE,0x01, 0x08,0xC1, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
42210x71,0xA4, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x71,0xA4, 0xF7,0x04,
42220x71,0xA4, 0xE0,0x01, 0x08,0xC4, 0xF7,0x02, 0x00,0x01, 0x87,0x2A, 0x00,0x04, 0x00,0x00,
42230x00,0x01, 0x20,0x3A, 0x21,0x00, 0xEE,0x01, 0x07,0xE0, 0xF6,0x02, 0x00,0x00, 0x86,0xAA,
42240x00,0x04, 0x87,0x02, 0xFF,0x48, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x52,0x00, 0x27,0x38,
42250x00,0x0C, 0xC0,0x36, 0x72,0x00, 0xE6,0x01, 0x07,0xE0, 0x00,0x00, 0x00,0x01, 0x77,0xFC,
42260x00,0x1D, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01, 0x07,0xE0, 0x00,0x00, 0x00,0x01, 0x77,0xFC,
42270x00,0x17, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01, 0x07,0xE1, 0x00,0x00, 0x00,0x01, 0x77,0xFC,
42280x00,0x16, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01, 0x08,0x80, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
42290x00,0x01, 0xE0,0x01, 0x08,0x80, 0x20,0x32, 0x00,0x00, 0x87,0x02, 0xFF,0x48, 0x00,0x00,
42300x00,0x01, 0xC7,0x38, 0x52,0x00, 0x27,0x38, 0x00,0x04, 0x20,0x3A, 0x00,0x08, 0xE6,0x01,
42310x08,0x38, 0xF6,0x82, 0x00,0x00, 0x77,0xFC, 0x00,0x1D, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42320x08,0x38, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x17, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42330x08,0x39, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x16, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42340x08,0x80, 0x20,0x36, 0x00,0x00, 0xF6,0x82, 0x00,0x01, 0xE0,0x01, 0x08,0x80, 0x20,0x36,
42350x00,0x00, 0xF7,0x02, 0x00,0x00, 0x77,0xFC, 0x00,0x1D, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42360x08,0x78, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x17, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42370x08,0x79, 0x00,0x00, 0x00,0x01, 0x77,0xFC, 0x00,0x16, 0x70,0x3E, 0xFF,0xE1, 0xE6,0x01,
42380x08,0x80, 0x20,0x3A, 0x00,0x00, 0xF7,0x02, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
42390x08,0xC1, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x71,0xA0, 0x00,0x00, 0x00,0x01, 0x07,0x38,
42400x00,0x01, 0xF7,0x05, 0x71,0xA0, 0xF7,0x04, 0x71,0xA0, 0xE0,0x01, 0x08,0xC4, 0xF7,0x02,
42410x00,0x01, 0xF7,0x04, 0x71,0x9C, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
42420x71,0x9C, 0xF7,0x04, 0x71,0x9C, 0xE0,0x01, 0x08,0xC4, 0xF7,0x02, 0x00,0x01, 0xF7,0x02,
42430x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x09,0x68, 0x00,0x00, 0x00,0x01, 0xF6,0x84,
42440x7B,0x10, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x76,0xB5, 0x00,0x1E, 0x76,0xB4,
42450xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x39, 0xFF,0xF0, 0x27,0x38, 0x00,0x04, 0x20,0x3A,
42460x00,0x03, 0xE2,0x01, 0x0B,0x50, 0x77,0x39, 0x00,0x02, 0xF6,0x86, 0x09,0x0C, 0xA6,0xB6,
42470x70,0x02, 0x00,0x00, 0x00,0x01, 0xC1,0x34, 0x00,0x00, 0x00,0x01, 0x09,0x1C, 0x00,0x01,
42480x0A,0xE0, 0x00,0x01, 0x0A,0xAC, 0x00,0x01, 0x0B,0x14, 0xF7,0x04, 0x71,0xD0, 0xF6,0x04,
42490x71,0xCC, 0x06,0xB8, 0x00,0x01, 0xC0,0x36, 0x62,0x00, 0xE6,0x01, 0x09,0x38, 0xC7,0x34,
42500x00,0x00, 0xF7,0x02, 0x00,0x00, 0xF5,0x84, 0x71,0xD4, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
42510x5A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x09,0x85, 0x00,0x00,
42520x00,0x01, 0xF7,0x04, 0x71,0xB0, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
42530x71,0xB0, 0xF7,0x04, 0x71,0xB0, 0xF7,0x04, 0x71,0xB4, 0x00,0x00, 0x00,0x01, 0x07,0x38,
42540x00,0x01, 0xF7,0x05, 0x71,0xB4, 0xF7,0x04, 0x71,0xB4, 0xE0,0x01, 0x0B,0x50, 0x00,0x00,
42550x00,0x01, 0xF4,0x84, 0x71,0xC8, 0xF6,0x85, 0x71,0xD0, 0x94,0x96, 0xFF,0xF4, 0xF4,0x84,
42560x7B,0x10, 0xC0,0x36, 0x62,0x00, 0xE6,0x01, 0x09,0xA4, 0x94,0x96, 0xFF,0xEC, 0xF0,0x05,
42570x71,0xD0, 0xF7,0x04, 0x71,0xD0, 0xF0,0x05, 0x71,0xC8, 0x84,0x96, 0xFF,0xEC, 0xC0,0x3A,
42580x5A,0x00, 0x47,0x0C, 0x00,0x01, 0xF7,0x05, 0x71,0xC4, 0x87,0x26, 0x00,0x08, 0x00,0x00,
42590x00,0x01, 0x70,0x3A, 0xFF,0xE1, 0xE6,0x01, 0x09,0xE1, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
42600x71,0x98, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x71,0x98, 0x84,0x96,
42610xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x01, 0x0A,0x71, 0x00,0x00,
42620x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x05,0x58, 0x97,0x93, 0xFF,0xFC, 0xF6,0x02,
42630x00,0x09, 0x20,0x32, 0x00,0x14, 0xE6,0x01, 0x0A,0x4D, 0x27,0x00, 0x00,0x0C, 0x20,0x3A,
42640x00,0x01, 0xE2,0x01, 0x0A,0x4D, 0xF7,0x06, 0x2D,0xCC, 0xF6,0x84, 0x2E,0xCC, 0x00,0x00,
42650x00,0x01, 0x75,0xB5, 0x00,0x02, 0xB6,0x2E, 0x70,0x02, 0x06,0xB4, 0x00,0x01, 0xF6,0x85,
42660x2E,0xCC, 0x86,0x02, 0xFF,0x34, 0xF7,0x06, 0x2E,0x4C, 0x20,0x36, 0x00,0x1F, 0xE2,0x01,
42670x0A,0x4D, 0xB6,0x2E, 0x70,0x02, 0xF0,0x05, 0x2E,0xCC, 0xF7,0x04, 0x2D,0x68, 0x00,0x00,
42680x00,0x01, 0x87,0x3A, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x3A, 0x00,0x28, 0x00,0x00,
42690x00,0x01, 0x07,0x88, 0x00,0x08, 0xC1,0x38, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0xF7,0x04,
42700x71,0xBC, 0x84,0x96, 0xFF,0xEC, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x71,0xBC, 0xF7,0x04,
42710x71,0xBC, 0x86,0xA6, 0x00,0x04, 0x84,0x96, 0xFF,0xF4, 0xF7,0x04, 0x71,0xB8, 0x20,0x26,
42720x00,0x00, 0xC7,0x38, 0x68,0x00, 0xF7,0x05, 0x71,0xB8, 0xE6,0x01, 0x0B,0x51, 0x00,0x00,
42730x00,0x01, 0xE0,0x01, 0x0B,0x5C, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x71,0xC0, 0x00,0x00,
42740x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x71,0xC0, 0xF7,0x04, 0x71,0xC0, 0xF4,0x84,
42750x7B,0x10, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
42760xFD,0xCC, 0x97,0x93, 0xFF,0xFC, 0xE0,0x01, 0x0B,0x50, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
42770x71,0xC0, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x71,0xC0, 0xF7,0x04,
42780x71,0xC0, 0xF4,0x84, 0x7B,0x10, 0x00,0x00, 0x00,0x01, 0x94,0x93, 0xFF,0xFC, 0x07,0x88,
42790x00,0x08, 0xE0,0x00, 0xFF,0x30, 0x97,0x93, 0xFF,0xFC, 0xE0,0x01, 0x0B,0x50, 0x00,0x00,
42800x00,0x01, 0xF7,0x04, 0x71,0xC0, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
42810x71,0xC0, 0xF7,0x04, 0x71,0xC0, 0xF6,0x84, 0x7B,0x10, 0x87,0x02, 0xFF,0x48, 0x00,0x00,
42820x00,0x01, 0xC7,0x38, 0x6A,0x00, 0x27,0x38, 0x00,0x04, 0x97,0x13, 0xFF,0xFC, 0x96,0x93,
42830xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0xFE,0x48, 0x97,0x93, 0xFF,0xFC, 0x07,0x88,
42840x00,0x08, 0xE0,0x01, 0x05,0x58, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
42850xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
42860xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x70,0x80, 0xF7,0x05, 0x7B,0x18, 0x07,0x88,
42870x00,0x08, 0xE0,0x01, 0x05,0x58, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
42880xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
42890xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x6F,0x68, 0xF7,0x05, 0x7B,0x18, 0x07,0x88,
42900x00,0x08, 0xE0,0x01, 0x05,0x58, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
42910xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
42920xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x7B,0x18, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
42930x6F,0x68, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
42940xFF,0xFC, 0xF7,0x06, 0x7B,0x18, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x6F,0xF4, 0x97,0x13,
42950xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
42960x7B,0x18, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x70,0x80, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
42970x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x7B,0x18, 0x97,0x13,
42980xFF,0xFC, 0xF7,0x06, 0x71,0x0C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
42990x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
43000x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93,
43010xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF5,0x02, 0x00,0x04, 0xF5,0x05, 0x76,0x00, 0xF0,0x05,
43020x76,0x08, 0xF0,0x05, 0x76,0x04, 0xF0,0x05, 0x75,0xF8, 0xF5,0x02, 0x00,0x01, 0xF6,0x82,
43030x00,0x00, 0x20,0x36, 0x00,0x04, 0xEC,0x01, 0x0C,0xBC, 0xF5,0x05, 0x75,0xFC, 0xF5,0x8E,
43040x6A,0xF8, 0xF6,0x06, 0x75,0xF8, 0x47,0x2C, 0xFF,0xFC, 0x97,0x32, 0x00,0x18, 0x06,0x30,
43050x00,0x04, 0x06,0xB4, 0x00,0x01, 0xF7,0x04, 0x76,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
43060x72,0x00, 0xEC,0x01, 0x0C,0x99, 0x05,0xAC, 0x21,0x4C, 0xF5,0x06, 0x72,0x18, 0x95,0x13,
43070xFF,0xFC, 0xF5,0x06, 0x76,0x48, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
43080x15,0x48, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x0D,0xF4, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82,
43090x00,0x0E, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x72,0x18, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
43100x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x0D,0xF4, 0x95,0x13,
43110xFF,0xFC, 0xF7,0x82, 0x00,0x0E, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x72,0xA4, 0x95,0x13,
43120xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06,
43130x13,0x2C, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82, 0x00,0x01, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06,
43140x73,0x30, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
43150xFF,0xFC, 0xF5,0x06, 0x16,0xC8, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82, 0x00,0x01, 0x97,0x93,
43160xFF,0xFC, 0xF5,0x06, 0x73,0xBC, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
43170x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x18,0x00, 0x95,0x13, 0xFF,0xFC, 0xF7,0x82,
43180x00,0x10, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x74,0x48, 0x95,0x13, 0xFF,0xFC, 0x07,0x88,
43190x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x16,0x40, 0x95,0x13,
43200xFF,0xFC, 0xF7,0x82, 0x00,0x10, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06, 0x74,0xD4, 0x95,0x13,
43210xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF5,0x06,
43220x13,0x2C, 0x95,0x13, 0xFF,0xFC, 0xF5,0x02, 0x00,0x12, 0x95,0x13, 0xFF,0xFC, 0xF5,0x06,
43230x75,0x60, 0x95,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93,
43240xFF,0xFC, 0xF0,0x05, 0x75,0xF0, 0xF0,0x05, 0x75,0xEC, 0xF0,0x05, 0x75,0xF4, 0x87,0x96,
43250xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
43260x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x38, 0xF7,0x04,
43270x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x0E,0x28, 0x00,0x00,
43280x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
43290x0E,0x3D, 0x00,0x00, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x15,0xD0, 0x97,0x93,
43300xFF,0xFC, 0xE0,0x01, 0x13,0x18, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x75,0xFC, 0x00,0x00,
43310x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x0E,0x59, 0xF6,0x86, 0x75,0xF8, 0xE0,0x01,
43320x0E,0x6C, 0xF6,0x82, 0x00,0x00, 0xF7,0x04, 0x76,0x08, 0x00,0x00, 0x00,0x01, 0x77,0x39,
43330x00,0x02, 0xC7,0x38, 0x68,0x00, 0x86,0xBA, 0x00,0x18, 0xF7,0x04, 0x76,0xFC, 0x00,0x00,
43340x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x0E,0x90, 0xF6,0x85, 0x76,0x60, 0xF3,0x06,
43350x76,0x48, 0xF3,0x05, 0x76,0xFC, 0xE0,0x01, 0x0E,0xA4, 0xF7,0x02, 0x00,0x01, 0xF3,0x02,
43360x00,0x10, 0xF3,0x05, 0x76,0xF8, 0xF3,0x06, 0x76,0x48, 0xF3,0x05, 0x77,0x00, 0xF7,0x02,
43370x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x13,0x15, 0xF3,0x06, 0x74,0x48, 0xF7,0x04,
43380x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x0E,0xD8, 0x00,0x00,
43390x00,0x01, 0xF7,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
43400x0E,0xED, 0x00,0x00, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x16,0x40, 0x97,0x93,
43410xFF,0xFC, 0xE0,0x01, 0x13,0x18, 0x00,0x00, 0x00,0x01, 0xF6,0x84, 0x76,0x60, 0x00,0x00,
43420x00,0x01, 0x87,0x36, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0x70,0x3A, 0xFF,0xE1, 0xE6,0x01,
43430x0F,0x21, 0xF4,0x82, 0x00,0x00, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
43440x00,0xBC, 0x97,0x93, 0xFF,0xFC, 0xE0,0x01, 0x13,0x14, 0xF3,0x06, 0x75,0x60, 0xC3,0xB4,
43450x00,0x00, 0x84,0x1E, 0x00,0x10, 0xF6,0x84, 0x4A,0xA0, 0x23,0x14, 0x00,0x20, 0x93,0x16,
43460xFF,0xC4, 0x94,0x16, 0xFF,0xE0, 0x96,0x96, 0xFF,0xD4, 0x85,0x1E, 0x00,0x14, 0xF7,0x04,
43470x4A,0x9C, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x01, 0x10,0x0C, 0x95,0x16,
43480xFF,0xE4, 0x77,0x35, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF3,0x06,
43490x4A,0x98, 0xC6,0xB8, 0x30,0x00, 0x06,0xB4, 0x00,0x0C, 0xC5,0x84, 0x00,0x00, 0x87,0x36,
43500x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x42,0x00, 0xE6,0x01, 0x0F,0x9C, 0xC6,0x24,
43510x00,0x00, 0x87,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x52,0x00, 0xE6,0x01,
43520x0F,0xA0, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x01,
43530x0F,0xAD, 0x00,0x00, 0x00,0x01, 0xF5,0x82, 0x00,0x00, 0x86,0x36, 0x00,0x00, 0x87,0x16,
43540xFF,0xE0, 0x00,0x00, 0x00,0x01, 0xC0,0x32, 0x72,0x00, 0xE2,0x01, 0x0F,0xE8, 0xF5,0x02,
43550x00,0x00, 0xC0,0x32, 0x72,0x00, 0xE6,0x01, 0x0F,0xF0, 0x20,0x2A, 0x00,0x00, 0x86,0xB6,
43560x00,0x04, 0x87,0x16, 0xFF,0xE4, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x01,
43570x0F,0xF1, 0x20,0x2A, 0x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x01,
43580x10,0x01, 0x20,0x2E, 0x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x01,
43590x10,0x10, 0x20,0x26, 0x00,0x00, 0xF4,0x82, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x01,
43600x10,0x45, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9,
43610x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4,
43620x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xD8, 0xE0,0x01, 0x10,0xB8, 0x96,0x96,
43630xFF,0xDC, 0x27,0x14, 0x00,0x2C, 0x97,0x13, 0xFF,0xFC, 0x83,0x16, 0xFF,0xC4, 0x00,0x00,
43640x00,0x01, 0x93,0x13, 0xFF,0xFC, 0xF3,0x06, 0x4A,0x98, 0x93,0x13, 0xFF,0xFC, 0x93,0x96,
43650xFF,0xCC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96,
43660xFF,0xCC, 0x20,0x22, 0x00,0x00, 0xE6,0x01, 0x10,0xB5, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
43670xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5,
43680x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16,
43690xFF,0xD8, 0x96,0x96, 0xFF,0xDC, 0xF7,0x05, 0x4A,0xA0, 0xE0,0x01, 0x10,0xBC, 0x20,0x32,
43700x00,0x00, 0xF6,0x02, 0x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x01, 0x10,0xCC, 0xF4,0x82,
43710x00,0x01, 0xE0,0x01, 0x11,0x24, 0xF4,0x82, 0x00,0x00, 0x86,0x96, 0xFF,0xD8, 0x00,0x00,
43720x00,0x01, 0x77,0x35, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF6,0x86,
43730x42,0xC8, 0xA6,0x3A, 0x68,0x02, 0xC7,0x38, 0x68,0x00, 0x75,0x39, 0x00,0x1E, 0x75,0x28,
43740xFF,0xE5, 0x05,0xB8, 0x00,0x02, 0x86,0xAE, 0x00,0x00, 0x07,0x38, 0x00,0x04, 0x97,0x16,
43750xFF,0xEC, 0xC6,0x30, 0x57,0xC0, 0x76,0x30, 0xFF,0xF0, 0x96,0x16, 0xFF,0xF4, 0x75,0xAD,
43760x00,0x1E, 0x75,0xAC, 0xFF,0xE5, 0xC6,0xB4, 0x5F,0xC0, 0x76,0xB4, 0xFF,0xF0, 0x96,0x96,
43770xFF,0xF0, 0x20,0x26, 0x00,0x00, 0xE6,0x01, 0x11,0x38, 0xF5,0x82, 0x00,0x00, 0xE0,0x01,
43780x11,0xCC, 0xF6,0x02, 0x00,0x00, 0x86,0x96, 0xFF,0xF0, 0x00,0x00, 0x00,0x01, 0xC7,0x34,
43790x68,0x00, 0xC4,0x9C, 0x72,0x00, 0xC0,0x2E, 0x6A,0x00, 0xEC,0x01, 0x11,0x98, 0xC5,0x24,
43800x00,0x00, 0xC6,0x2C, 0x00,0x00, 0x87,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0xA6,0xB2,
43810x70,0x02, 0x05,0xAC, 0x00,0x01, 0xC7,0x30, 0x70,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38,
43820xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB4, 0xFF,0xF0, 0xF6,0xAB, 0x28,0x00, 0x05,0x28,
43830x00,0x02, 0x87,0x16, 0xFF,0xF0, 0x00,0x00, 0x00,0x01, 0xC0,0x2E, 0x72,0x00, 0xEC,0x01,
43840x11,0x59, 0x06,0x30, 0x00,0x02, 0xF3,0x02, 0x00,0x01, 0xF3,0x05, 0x76,0xF4, 0xF6,0x02,
43850x00,0x01, 0x87,0x16, 0xFF,0xF0, 0x86,0x9E, 0x00,0x04, 0xC7,0x38, 0x70,0x00, 0xC7,0x38,
43860x48,0x00, 0xC6,0xB4, 0x70,0x00, 0x87,0x16, 0xFF,0xF4, 0x06,0xB4, 0x00,0x20, 0x97,0x02,
43870xFF,0x6C, 0x94,0x82, 0xFF,0x50, 0x96,0x82, 0xFF,0x58, 0x20,0x32, 0x00,0x00, 0xE6,0x01,
43880x13,0x10, 0x00,0x00, 0x00,0x01, 0xF7,0x04, 0x76,0x5C, 0xF5,0x84, 0x76,0xF8, 0x07,0x38,
43890x00,0x01, 0xF7,0x05, 0x76,0x5C, 0xF7,0x04, 0x76,0x5C, 0x20,0x2E, 0x00,0x21, 0xE2,0x01,
43900x12,0x30, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
43910x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x01,
43920x12,0x1C, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xF3,0x05,
43930x76,0xF8, 0xF3,0x04, 0x77,0x00, 0xE0,0x01, 0x12,0x34, 0xF3,0x05, 0x76,0xFC, 0xF0,0x05,
43940x76,0xFC, 0xF7,0x04, 0x75,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
43950x12,0x71, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38,
43960x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0F, 0x20,0x32,
43970x00,0x44, 0xE6,0x01, 0x12,0x70, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04,
43980x76,0x08, 0xF6,0x84, 0x76,0x00, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x01,
43990x12,0x8C, 0xF7,0x05, 0x76,0x08, 0xF0,0x05, 0x76,0x08, 0xF6,0x84, 0x76,0x08, 0xF7,0x04,
44000x76,0x04, 0xF0,0x05, 0x75,0xF8, 0xF6,0x06, 0x75,0xF8, 0xC0,0x36, 0x72,0x00, 0x47,0x0C,
44010x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x12,0xB9, 0xF7,0x05, 0x75,0xFC, 0xE0,0x01,
44020x12,0xC8, 0xF7,0x02, 0x00,0x00, 0x77,0x35, 0x00,0x02, 0xC7,0x38, 0x60,0x00, 0x87,0x3A,
44030x00,0x18, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x13,0x09, 0xF7,0x05,
44040x76,0x60, 0xF7,0x04, 0x2D,0x38, 0xF3,0x06, 0x72,0xA4, 0xF3,0x05, 0x76,0x48, 0xF6,0x86,
44050x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02,
44060x00,0x0E, 0x20,0x32, 0x00,0x44, 0xE6,0x01, 0x13,0x18, 0xB3,0x3A, 0x68,0x02, 0xE0,0x01,
44070x13,0x18, 0xF0,0x05, 0x2D,0x38, 0xE0,0x01, 0x13,0x14, 0xF3,0x06, 0x72,0x18, 0xF3,0x06,
44080x73,0x30, 0xF3,0x05, 0x76,0x48, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
44090x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
44100x00,0x08, 0xF7,0x04, 0x76,0x60, 0x00,0x00, 0x00,0x01, 0x86,0xBA, 0x00,0x04, 0xF7,0x04,
44110x76,0x54, 0x00,0x00, 0x00,0x01, 0xC7,0x38, 0x68,0x00, 0xF7,0x05, 0x76,0x54, 0xF7,0x04,
44120x76,0x58, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x76,0x58, 0xF7,0x04,
44130x75,0xF8, 0xF6,0x84, 0x76,0x58, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x13,0x9D, 0xF6,0x86,
44140x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
44150x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02, 0x00,0x0F, 0x20,0x32, 0x00,0x44, 0xE6,0x01,
44160x13,0x9C, 0xB5,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x76,0x08, 0xF6,0x84,
44170x76,0x00, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x01, 0x13,0xB8, 0xF7,0x05,
44180x76,0x08, 0xF0,0x05, 0x76,0x08, 0xF7,0x04, 0x76,0x08, 0xF6,0x84, 0x76,0x04, 0xF0,0x05,
44190x75,0xF8, 0xF5,0x84, 0x76,0xF8, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x2E,
44200x00,0x21, 0xE2,0x01, 0x14,0x14, 0xF7,0x05, 0x75,0xFC, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86,
44210x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32,
44220x00,0x44, 0xE6,0x01, 0x14,0x00, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x02,
44230x00,0x22, 0xF5,0x05, 0x76,0xF8, 0xF5,0x04, 0x77,0x00, 0xE0,0x01, 0x14,0x18, 0xF5,0x05,
44240x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xF7,0x04, 0x75,0xEC, 0xF5,0x06, 0x72,0x18, 0x20,0x3A,
44250x00,0x00, 0xE6,0x01, 0x14,0x40, 0xF5,0x05, 0x76,0x48, 0xF7,0x04, 0x75,0xF0, 0x00,0x00,
44260x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x14,0x55, 0x00,0x00, 0x00,0x01, 0x07,0x88,
44270x00,0x08, 0xE0,0x01, 0x15,0xD0, 0x97,0x93, 0xFF,0xFC, 0xE0,0x01, 0x14,0xC4, 0x00,0x00,
44280x00,0x01, 0xF7,0x04, 0x75,0xFC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
44290x14,0x71, 0xF6,0x86, 0x75,0xF8, 0xE0,0x01, 0x14,0x88, 0xF7,0x02, 0x00,0x00, 0xF7,0x04,
44300x76,0x08, 0x00,0x00, 0x00,0x01, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x87,0x3A,
44310x00,0x18, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x14,0xC5, 0xF7,0x05,
44320x76,0x60, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
44330x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02, 0x00,0x0E, 0x20,0x32, 0x00,0x44, 0xE6,0x01,
44340x14,0xBC, 0xB5,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF5,0x06, 0x72,0xA4, 0xF5,0x05,
44350x76,0x48, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
44360x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04,
44370x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x15,0x40, 0xF4,0x02,
44380x00,0x00, 0x86,0x96, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xF6,0x85, 0x75,0xEC, 0x86,0x96,
44390x00,0x08, 0x00,0x00, 0x00,0x01, 0xF6,0x85, 0x7B,0x38, 0x86,0x96, 0x00,0x00, 0xF7,0x04,
44400x76,0x48, 0xF6,0x85, 0x7B,0x30, 0xF6,0x86, 0x72,0x18, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C,
44410x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x15,0x41, 0xF4,0x02, 0x00,0x01, 0x07,0x88,
44420x00,0x08, 0xE0,0x01, 0x15,0xD0, 0x97,0x93, 0xFF,0xFC, 0xF4,0x02, 0x00,0x01, 0x87,0x96,
44430xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
44440x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04, 0x75,0xF4, 0x00,0x00,
44450x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x15,0xBC, 0xF4,0x02, 0x00,0x00, 0x86,0x96,
44460x00,0x04, 0x00,0x00, 0x00,0x01, 0xF6,0x85, 0x75,0xF0, 0x86,0x96, 0x00,0x08, 0x00,0x00,
44470x00,0x01, 0xF6,0x85, 0x7B,0x48, 0x86,0x96, 0x00,0x00, 0xF7,0x04, 0x76,0x48, 0xF6,0x85,
44480x7B,0x40, 0xF6,0x86, 0x72,0x18, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
44490x00,0x00, 0xE6,0x01, 0x15,0xBD, 0xF4,0x02, 0x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
44500x15,0xD0, 0x97,0x93, 0xFF,0xFC, 0xF4,0x02, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
44510xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
44520xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04, 0x76,0xFC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
44530x00,0x00, 0xE6,0x01, 0x15,0xFC, 0xF6,0x82, 0x00,0x10, 0xF6,0x86, 0x76,0x48, 0xF6,0x85,
44540x76,0xFC, 0xE0,0x01, 0x16,0x0C, 0xF7,0x02, 0x00,0x01, 0xF6,0x85, 0x76,0xF8, 0xF6,0x86,
44550x76,0x48, 0xF6,0x85, 0x77,0x00, 0xF7,0x02, 0x00,0x00, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
44560x16,0x20, 0xF6,0x86, 0x74,0xD4, 0xE0,0x01, 0x16,0x2C, 0xF6,0x85, 0x76,0x48, 0x07,0x88,
44570x00,0x08, 0xE0,0x01, 0x16,0x40, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
44580xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
44590xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF6,0x04, 0x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x32,
44600x00,0x00, 0xE6,0x01, 0x16,0x85, 0xF7,0x02, 0x00,0x01, 0xF7,0x05, 0x75,0xF4, 0xF6,0x84,
44610x7B,0x48, 0xF7,0x05, 0x76,0xF4, 0xF7,0x04, 0x7B,0x40, 0xC6,0xB0, 0x68,0x00, 0x26,0xB4,
44620x00,0x04, 0x97,0x02, 0xFF,0x6C, 0x96,0x02, 0xFF,0x50, 0xE0,0x01, 0x16,0xA8, 0x00,0x00,
44630x00,0x01, 0xF7,0x04, 0x75,0xEC, 0xF6,0x84, 0x7B,0x38, 0xF5,0x82, 0x00,0x01, 0xF5,0x85,
44640x76,0xF4, 0xF6,0x04, 0x7B,0x30, 0xC6,0xB8, 0x68,0x00, 0x26,0xB4, 0x00,0x04, 0x96,0x02,
44650xFF,0x6C, 0x97,0x02, 0xFF,0x50, 0x96,0x82, 0xFF,0x58, 0xF5,0x86, 0x73,0xBC, 0xF5,0x85,
44660x76,0x48, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
44670x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04,
44680x7B,0x28, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0xF7,0x05, 0x7B,0x28, 0xF7,0x04,
44690x75,0xF4, 0xF6,0x84, 0x7B,0x28, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x17,0x21, 0x00,0x00,
44700x00,0x01, 0xF0,0x05, 0x75,0xF4, 0xF7,0x04, 0x75,0xEC, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
44710x00,0x00, 0xE6,0x01, 0x17,0x25, 0xF0,0x05, 0x75,0xF0, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
44720x16,0x40, 0x97,0x93, 0xFF,0xFC, 0xE0,0x01, 0x17,0xEC, 0x00,0x00, 0x00,0x01, 0xF0,0x05,
44730x75,0xEC, 0xF7,0x04, 0x75,0xFC, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01,
44740x17,0x41, 0xF6,0x86, 0x75,0xF8, 0xE0,0x01, 0x17,0x58, 0xF7,0x02, 0x00,0x00, 0xF7,0x04,
44750x76,0x08, 0x00,0x00, 0x00,0x01, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x68,0x00, 0x87,0x3A,
44760x00,0x18, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x17,0x95, 0xF7,0x05,
44770x76,0x60, 0xF7,0x04, 0x2D,0x38, 0xF6,0x86, 0x2C,0x28, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
44780x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF5,0x02, 0x00,0x0E, 0x20,0x32, 0x00,0x44, 0xE6,0x01,
44790x17,0x8C, 0xB5,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xE0,0x01, 0x17,0x98, 0xF5,0x06,
44800x72,0xA4, 0xF5,0x06, 0x72,0x18, 0xF5,0x05, 0x76,0x48, 0xF5,0x84, 0x76,0xF8, 0x00,0x00,
44810x00,0x01, 0x20,0x2E, 0x00,0x21, 0xE2,0x01, 0x17,0xE8, 0xF6,0x86, 0x2C,0x28, 0xF7,0x04,
44820x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39,
44830x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x01, 0x17,0xD4, 0xB5,0xBA, 0x68,0x02, 0xF0,0x05,
44840x2D,0x38, 0xF5,0x02, 0x00,0x22, 0xF5,0x05, 0x76,0xF8, 0xF5,0x04, 0x77,0x00, 0xE0,0x01,
44850x17,0xEC, 0xF5,0x05, 0x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
44860xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
44870xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x38, 0xF7,0x04, 0x75,0xEC, 0x00,0x00,
44880x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x18,0x34, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
44890x75,0xF0, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x18,0x49, 0x00,0x00,
44900x00,0x01, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x16,0x40, 0x97,0x93, 0xFF,0xFC, 0xE0,0x01,
44910x1C,0x74, 0x00,0x00, 0x00,0x01, 0xF6,0x84, 0x76,0x60, 0x00,0x00, 0x00,0x01, 0x87,0x36,
44920x00,0x08, 0x00,0x00, 0x00,0x01, 0x70,0x3A, 0xFF,0xE1, 0xE6,0x01, 0x18,0x7D, 0xF4,0x82,
44930x00,0x00, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x00,0xBC, 0x97,0x93,
44940xFF,0xFC, 0xE0,0x01, 0x1C,0x70, 0xF3,0x06, 0x75,0x60, 0xC3,0xB4, 0x00,0x00, 0x84,0x1E,
44950x00,0x10, 0xF6,0x84, 0x4A,0xA0, 0x23,0x14, 0x00,0x20, 0x93,0x16, 0xFF,0xC4, 0x94,0x16,
44960xFF,0xE0, 0x96,0x96, 0xFF,0xD4, 0x85,0x1E, 0x00,0x14, 0xF7,0x04, 0x4A,0x9C, 0x00,0x00,
44970x00,0x01, 0xC0,0x36, 0x72,0x00, 0xEC,0x01, 0x19,0x68, 0x95,0x16, 0xFF,0xE4, 0x77,0x35,
44980x00,0x01, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF3,0x06, 0x4A,0x98, 0xC6,0xB8,
44990x30,0x00, 0x06,0xB4, 0x00,0x0C, 0xC5,0x84, 0x00,0x00, 0x87,0x36, 0x00,0x00, 0x00,0x00,
45000x00,0x01, 0xC0,0x3A, 0x42,0x00, 0xE6,0x01, 0x18,0xF8, 0xC6,0x24, 0x00,0x00, 0x87,0x36,
45010x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x52,0x00, 0xE6,0x01, 0x18,0xFC, 0x20,0x32,
45020x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x01, 0x19,0x09, 0x00,0x00,
45030x00,0x01, 0xF5,0x82, 0x00,0x00, 0x86,0x36, 0x00,0x00, 0x87,0x16, 0xFF,0xE0, 0x00,0x00,
45040x00,0x01, 0xC0,0x32, 0x72,0x00, 0xE2,0x01, 0x19,0x44, 0xF5,0x02, 0x00,0x00, 0xC0,0x32,
45050x72,0x00, 0xE6,0x01, 0x19,0x4C, 0x20,0x2A, 0x00,0x00, 0x86,0xB6, 0x00,0x04, 0x87,0x16,
45060xFF,0xE4, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE2,0x01, 0x19,0x4D, 0x20,0x2A,
45070x00,0x00, 0xF5,0x02, 0x00,0x01, 0x20,0x2A, 0x00,0x00, 0xE6,0x01, 0x19,0x5D, 0x20,0x2E,
45080x00,0x00, 0xF5,0x82, 0x00,0x01, 0x20,0x2E, 0x00,0x00, 0xE6,0x01, 0x19,0x6C, 0x20,0x26,
45090x00,0x00, 0xF4,0x82, 0x00,0x01, 0x20,0x26, 0x00,0x00, 0xE6,0x01, 0x19,0xA1, 0xF6,0x02,
45100x00,0x01, 0x87,0x16, 0xFF,0xD4, 0xF3,0x06, 0x4A,0x98, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4,
45110x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4, 0x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6,
45120x00,0x00, 0x97,0x16, 0xFF,0xD8, 0xE0,0x01, 0x1A,0x14, 0x96,0x96, 0xFF,0xDC, 0x27,0x14,
45130x00,0x2C, 0x97,0x13, 0xFF,0xFC, 0x83,0x16, 0xFF,0xC4, 0x00,0x00, 0x00,0x01, 0x93,0x13,
45140xFF,0xFC, 0xF3,0x06, 0x4A,0x98, 0x93,0x13, 0xFF,0xFC, 0x93,0x96, 0xFF,0xCC, 0x07,0x88,
45150x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x83,0x96, 0xFF,0xCC, 0x20,0x22,
45160x00,0x00, 0xE6,0x01, 0x1A,0x11, 0xF6,0x02, 0x00,0x01, 0x87,0x16, 0xFF,0xD4, 0xF3,0x06,
45170x4A,0x98, 0x76,0xB9, 0x00,0x01, 0xC6,0xB4, 0x70,0x00, 0x76,0xB5, 0x00,0x02, 0xC6,0xB4,
45180x30,0x00, 0x06,0xB4, 0x00,0x14, 0x86,0xB6, 0x00,0x00, 0x97,0x16, 0xFF,0xD8, 0x96,0x96,
45190xFF,0xDC, 0xF7,0x05, 0x4A,0xA0, 0xE0,0x01, 0x1A,0x18, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
45200x00,0x00, 0x20,0x32, 0x00,0x00, 0xE6,0x01, 0x1A,0x28, 0xF4,0x82, 0x00,0x01, 0xE0,0x01,
45210x1A,0x80, 0xF4,0x82, 0x00,0x00, 0x86,0x96, 0xFF,0xD8, 0x00,0x00, 0x00,0x01, 0x77,0x35,
45220x00,0x02, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0x00,0x02, 0xF6,0x86, 0x42,0xC8, 0xA6,0x3A,
45230x68,0x02, 0xC7,0x38, 0x68,0x00, 0x75,0x39, 0x00,0x1E, 0x75,0x28, 0xFF,0xE5, 0x05,0xB8,
45240x00,0x02, 0x86,0xAE, 0x00,0x00, 0x07,0x38, 0x00,0x04, 0x97,0x16, 0xFF,0xEC, 0xC6,0x30,
45250x57,0xC0, 0x76,0x30, 0xFF,0xF0, 0x96,0x16, 0xFF,0xF4, 0x75,0xAD, 0x00,0x1E, 0x75,0xAC,
45260xFF,0xE5, 0xC6,0xB4, 0x5F,0xC0, 0x76,0xB4, 0xFF,0xF0, 0x96,0x96, 0xFF,0xF0, 0x20,0x26,
45270x00,0x00, 0xE6,0x01, 0x1A,0x94, 0xF5,0x82, 0x00,0x00, 0xE0,0x01, 0x1B,0x28, 0xF6,0x02,
45280x00,0x00, 0x86,0x96, 0xFF,0xF0, 0x00,0x00, 0x00,0x01, 0xC7,0x34, 0x68,0x00, 0xC4,0x9C,
45290x72,0x00, 0xC0,0x2E, 0x6A,0x00, 0xEC,0x01, 0x1A,0xF4, 0xC5,0x24, 0x00,0x00, 0xC6,0x2C,
45300x00,0x00, 0x87,0x16, 0xFF,0xEC, 0x00,0x00, 0x00,0x01, 0xA6,0xB2, 0x70,0x02, 0x05,0xAC,
45310x00,0x01, 0xC7,0x30, 0x70,0x00, 0x77,0x39, 0x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4,
45320x77,0xC0, 0x76,0xB4, 0xFF,0xF0, 0xF6,0xAB, 0x28,0x00, 0x05,0x28, 0x00,0x02, 0x87,0x16,
45330xFF,0xF0, 0x00,0x00, 0x00,0x01, 0xC0,0x2E, 0x72,0x00, 0xEC,0x01, 0x1A,0xB5, 0x06,0x30,
45340x00,0x02, 0xF3,0x02, 0x00,0x01, 0xF3,0x05, 0x76,0xF4, 0xF6,0x02, 0x00,0x01, 0x87,0x16,
45350xFF,0xF0, 0x86,0x9E, 0x00,0x04, 0xC7,0x38, 0x70,0x00, 0xC7,0x38, 0x48,0x00, 0xC6,0xB4,
45360x70,0x00, 0x87,0x16, 0xFF,0xF4, 0x06,0xB4, 0x00,0x20, 0x97,0x02, 0xFF,0x6C, 0x94,0x82,
45370xFF,0x50, 0x96,0x82, 0xFF,0x58, 0x20,0x32, 0x00,0x00, 0xE6,0x01, 0x1C,0x6C, 0x00,0x00,
45380x00,0x01, 0xF7,0x04, 0x76,0x5C, 0xF5,0x84, 0x76,0xF8, 0x07,0x38, 0x00,0x01, 0xF7,0x05,
45390x76,0x5C, 0xF7,0x04, 0x76,0x5C, 0x20,0x2E, 0x00,0x21, 0xE2,0x01, 0x1B,0x8C, 0xF6,0x86,
45400x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
45410x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x32, 0x00,0x44, 0xE6,0x01, 0x1B,0x78, 0xB5,0xBA,
45420x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF3,0x02, 0x00,0x22, 0xF3,0x05, 0x76,0xF8, 0xF3,0x04,
45430x77,0x00, 0xE0,0x01, 0x1B,0x90, 0xF3,0x05, 0x76,0xFC, 0xF0,0x05, 0x76,0xFC, 0xF7,0x04,
45440x75,0xF8, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x1B,0xCD, 0xF6,0x86,
45450x2C,0x28, 0xF7,0x04, 0x2D,0x38, 0x00,0x00, 0x00,0x01, 0x06,0x38, 0x00,0x01, 0xF6,0x05,
45460x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0F, 0x20,0x32, 0x00,0x44, 0xE6,0x01,
45470x1B,0xCC, 0xB3,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0xF7,0x04, 0x76,0x08, 0xF6,0x84,
45480x76,0x00, 0x07,0x38, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0xE6,0x01, 0x1B,0xE8, 0xF7,0x05,
45490x76,0x08, 0xF0,0x05, 0x76,0x08, 0xF6,0x84, 0x76,0x08, 0xF7,0x04, 0x76,0x04, 0xF0,0x05,
45500x75,0xF8, 0xF6,0x06, 0x75,0xF8, 0xC0,0x36, 0x72,0x00, 0x47,0x0C, 0x00,0x01, 0x20,0x3A,
45510x00,0x00, 0xE6,0x01, 0x1C,0x15, 0xF7,0x05, 0x75,0xFC, 0xE0,0x01, 0x1C,0x24, 0xF7,0x02,
45520x00,0x00, 0x77,0x35, 0x00,0x02, 0xC7,0x38, 0x60,0x00, 0x87,0x3A, 0x00,0x18, 0x00,0x00,
45530x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x1C,0x65, 0xF7,0x05, 0x76,0x60, 0xF7,0x04,
45540x2D,0x38, 0xF3,0x06, 0x72,0xA4, 0xF3,0x05, 0x76,0x48, 0xF6,0x86, 0x2C,0x28, 0x06,0x38,
45550x00,0x01, 0xF6,0x05, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0xF3,0x02, 0x00,0x0E, 0x20,0x32,
45560x00,0x44, 0xE6,0x01, 0x1C,0x74, 0xB3,0x3A, 0x68,0x02, 0xE0,0x01, 0x1C,0x74, 0xF0,0x05,
45570x2D,0x38, 0xE0,0x01, 0x1C,0x70, 0xF3,0x06, 0x72,0x18, 0xF3,0x06, 0x73,0x30, 0xF3,0x05,
45580x76,0x48, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
45590x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06,
45600x76,0x48, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x72,0x18, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
45610x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x76,0x48, 0x97,0x13,
45620xFF,0xFC, 0xF7,0x06, 0x72,0xA4, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
45630x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x76,0x48, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
45640x73,0x30, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
45650xFF,0xFC, 0xF7,0x06, 0x76,0x48, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x73,0xBC, 0x97,0x13,
45660xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06,
45670x76,0x48, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06, 0x74,0x48, 0x97,0x13, 0xFF,0xFC, 0x07,0x88,
45680x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x76,0x48, 0x97,0x13,
45690xFF,0xFC, 0xF7,0x06, 0x74,0xD4, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
45700x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x76,0x48, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
45710x75,0x60, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
45720xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
45730x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF6,0x86,
45740x76,0x68, 0x96,0x93, 0xFF,0xFC, 0xF6,0x86, 0x77,0x04, 0x96,0x93, 0xFF,0xFC, 0x07,0x88,
45750x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93, 0xFF,0xFC, 0xF6,0x86, 0x1D,0xD4, 0x96,0x93,
45760xFF,0xFC, 0x90,0x13, 0xFF,0xFC, 0xF6,0x86, 0x76,0x68, 0x96,0x93, 0xFF,0xFC, 0x07,0x88,
45770x00,0x08, 0xE0,0x00, 0x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF7,0x02, 0x00,0x22, 0xF7,0x05,
45780x76,0xF4, 0xF7,0x05, 0x76,0xF8, 0xF0,0x05, 0x76,0xFC, 0xF0,0x05, 0x77,0x00, 0x87,0x96,
45790xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
45800x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04, 0x76,0xF4, 0x00,0x00,
45810x00,0x01, 0x20,0x3A, 0x00,0x22, 0xE6,0x01, 0x1E,0x01, 0x00,0x00, 0x00,0x01, 0x97,0x13,
45820xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x84, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
45830xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
45840x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x77,0x04, 0x97,0x13,
45850xFF,0xFC, 0xF7,0x06, 0x76,0x68, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
45860x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
45870x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93,
45880xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF6,0x86, 0x78,0x10, 0x96,0x93, 0xFF,0xFC, 0xF6,0x86,
45890x78,0xA4, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
45900xFF,0xFC, 0xF6,0x86, 0x1F,0xBC, 0x96,0x93, 0xFF,0xFC, 0xF6,0x82, 0x00,0x14, 0x96,0x93,
45910xFF,0xFC, 0xF6,0x86, 0x78,0x10, 0x96,0x93, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
45920x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0xF0,0x05, 0x78,0x9C, 0x90,0x02, 0xFF,0x34, 0xF7,0x02,
45930x7F,0xFF, 0xF7,0x05, 0x78,0xA0, 0x97,0x02, 0xFF,0x30, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
45940xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
45950xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF6,0x04, 0x78,0x9C, 0x87,0x16, 0x00,0x00, 0x84,0x96,
45960x00,0x08, 0xF5,0x86, 0x77,0x10, 0x87,0x3A, 0x00,0x08, 0xF6,0x86, 0x21,0x8C, 0x75,0x39,
45970x00,0x04, 0x77,0x39, 0x00,0x02, 0xA7,0x3A, 0x68,0x02, 0x20,0x32, 0x00,0x00, 0xC6,0xA8,
45980x58,0x00, 0x84,0x16, 0x00,0x04, 0xC6,0x30, 0x75,0x80, 0x94,0x36, 0x00,0x04, 0xB4,0xAA,
45990x58,0x02, 0x87,0x36, 0x00,0x08, 0xF6,0x05, 0x78,0x9C, 0x07,0x38, 0x00,0x01, 0xE6,0x01,
46000x1F,0x2D, 0x97,0x36, 0x00,0x08, 0x87,0x02, 0xFF,0x30, 0x00,0x00, 0x00,0x01, 0xC0,0x3A,
46010x4A,0x00, 0xEE,0x01, 0x1F,0x35, 0x00,0x00, 0x00,0x01, 0xF4,0x85, 0x78,0xA0, 0x94,0x82,
46020xFF,0x30, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C,
46030x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96,
46040x00,0x00, 0x00,0x00, 0x00,0x01, 0x87,0x2E, 0x00,0x08, 0xF6,0x86, 0x21,0x8C, 0x77,0x39,
46050x00,0x02, 0xA7,0x3A, 0x68,0x02, 0xF6,0x04, 0x78,0x9C, 0xC7,0x04, 0x76,0x00, 0x86,0xAE,
46060x00,0x08, 0xC6,0x30, 0x74,0x00, 0xF7,0x06, 0x77,0x10, 0xF6,0x05, 0x78,0x9C, 0x76,0xB5,
46070x00,0x04, 0xC6,0xB4, 0x70,0x00, 0x87,0x36, 0x00,0x08, 0x20,0x32, 0x00,0x00, 0x07,0x38,
46080x00,0x01, 0xE6,0x01, 0x1F,0xA8, 0x97,0x36, 0x00,0x08, 0xF7,0x02, 0x7F,0xFF, 0xF7,0x05,
46090x78,0xA0, 0x97,0x02, 0xFF,0x30, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
46100x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
46110x00,0x08, 0x22,0x10, 0x00,0x08, 0xF7,0x04, 0x78,0x9C, 0x00,0x00, 0x00,0x01, 0x20,0x3A,
46120x00,0x00, 0xE6,0x01, 0x20,0xD1, 0xF6,0x02, 0x7F,0xFF, 0x96,0x16, 0xFF,0xF4, 0xF6,0x84,
46130x2D,0x40, 0xF6,0x06, 0x77,0x10, 0x26,0xB4, 0x00,0x01, 0x77,0x35, 0x00,0x04, 0xC4,0xB8,
46140x60,0x00, 0xC3,0x38, 0x00,0x00, 0x74,0x35, 0x00,0x02, 0xF6,0x06, 0x77,0x10, 0xC0,0x26,
46150x62,0x00, 0xEC,0x01, 0x20,0xC1, 0xF6,0x06, 0x21,0x8C, 0xF3,0x84, 0x78,0x9C, 0xA7,0x22,
46160x60,0x02, 0x00,0x00, 0x00,0x01, 0xC0,0x1E, 0x74,0x00, 0xE6,0x01, 0x20,0xB1, 0x00,0x00,
46170x00,0x01, 0x86,0xA6, 0x00,0x00, 0xF7,0x04, 0x78,0xA0, 0x00,0x00, 0x00,0x01, 0xC6,0xB4,
46180x72,0x00, 0x20,0x36, 0x00,0x00, 0xEE,0x01, 0x20,0x98, 0x96,0xA6, 0x00,0x00, 0xF7,0x04,
46190x2D,0x38, 0xF6,0x06, 0x77,0x10, 0xC5,0x18, 0x60,0x00, 0xF6,0x86, 0x2C,0x28, 0x86,0x2A,
46200x00,0x04, 0x05,0xB8, 0x00,0x01, 0xF5,0x85, 0x2D,0x38, 0x77,0x39, 0x00,0x02, 0x20,0x2E,
46210x00,0x44, 0xE6,0x01, 0x20,0x70, 0xB6,0x3A, 0x68,0x02, 0xF0,0x05, 0x2D,0x38, 0x86,0x2A,
46220x00,0x08, 0x00,0x00, 0x00,0x01, 0x96,0x2A, 0x00,0x0C, 0xF6,0x06, 0x21,0x8C, 0xA7,0x22,
46230x60,0x02, 0x00,0x00, 0x00,0x01, 0xC7,0x04, 0x76,0x00, 0xC7,0x1C, 0x74,0x00, 0xE0,0x01,
46240x20,0xB0, 0xF7,0x05, 0x78,0x9C, 0x86,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
46250x62,0x00, 0xEC,0x01, 0x20,0xB0, 0x00,0x00, 0x00,0x01, 0x96,0x96, 0xFF,0xF4, 0x24,0xA4,
46260x00,0x10, 0x23,0x18, 0x00,0x10, 0xE0,0x01, 0x1F,0xFC, 0x24,0x20, 0x00,0x04, 0x86,0x16,
46270xFF,0xF4, 0x00,0x00, 0x00,0x01, 0xF6,0x05, 0x78,0xA0, 0x96,0x02, 0xFF,0x30, 0x87,0x96,
46280xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
46290x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x87,0x16, 0x00,0x00, 0x00,0x00,
46300x00,0x01, 0x87,0x3A, 0x00,0x08, 0xF6,0x86, 0x77,0x10, 0x77,0x39, 0x00,0x04, 0xC7,0x38,
46310x68,0x00, 0x86,0xBA, 0x00,0x0C, 0x87,0x3A, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
46320x72,0x00, 0x44,0x0C, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
46330x00,0x04, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
46340x00,0x08, 0xF7,0x02, 0x00,0x0F, 0x20,0x3A, 0x00,0x00, 0xEC,0x01, 0x21,0x5D, 0xF6,0x86,
46350x77,0x18, 0x90,0x36, 0x00,0x00, 0x27,0x38, 0x00,0x01, 0xC6,0x04, 0x00,0x00, 0xC0,0x3A,
46360x62,0x00, 0xE6,0x01, 0x21,0x44, 0x06,0xB4, 0x00,0x10, 0xF6,0x06, 0x78,0xA4, 0x96,0x13,
46370xFF,0xFC, 0xF6,0x06, 0x78,0x10, 0x96,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
46380x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
46390x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x00,0x01, 0x00,0x00,
46400x00,0x02, 0x00,0x00, 0x00,0x04, 0x00,0x00, 0x00,0x08, 0x00,0x00, 0x00,0x10, 0x00,0x00,
46410x00,0x20, 0x00,0x00, 0x00,0x40, 0x00,0x00, 0x00,0x80, 0x00,0x00, 0x01,0x00, 0x00,0x00,
46420x02,0x00, 0x00,0x00, 0x04,0x00, 0x00,0x00, 0x08,0x00, 0x00,0x00, 0x10,0x00, 0x00,0x00,
46430x20,0x00, 0x00,0x00, 0x40,0x00, 0x00,0x00, 0x80,0x00, 0x00,0x00, 0x00,0x00, 0x92,0x93,
46440xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x78,0xB0, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
46450x79,0xCC, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x15,0x48, 0x97,0x93,
46460xFF,0xFC, 0xF7,0x06, 0x22,0x2C, 0x97,0x13, 0xFF,0xFC, 0xF7,0x02, 0x00,0x15, 0x97,0x13,
46470xFF,0xFC, 0xF7,0x06, 0x78,0xB0, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
46480x16,0x1C, 0x97,0x93, 0xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14,
46490x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90,
46500x00,0x08, 0xF6,0x84, 0x6F,0x44, 0x00,0x00, 0x00,0x01, 0x87,0x36, 0x00,0x00, 0x00,0x00,
46510x00,0x01, 0x20,0x3A, 0x00,0x02, 0xE6,0x01, 0x22,0x70, 0xF6,0x02, 0x00,0x00, 0x87,0x36,
46520x0E,0xF4, 0x86,0xB6, 0x0E,0xF8, 0x00,0x00, 0x00,0x01, 0xC0,0x3A, 0x6A,0x00, 0x47,0x0C,
46530x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x22,0x78, 0x20,0x32, 0x00,0x00, 0xF6,0x02,
46540x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x01, 0x22,0x94, 0x00,0x00, 0x00,0x01, 0xF7,0x04,
46550x32,0xE8, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x22,0xB1, 0xF5,0x82,
46560x03,0xE8, 0x0F,0x81, 0x40,0x00, 0xF7,0x04, 0x79,0xC8, 0x00,0x00, 0x00,0x01, 0x07,0x38,
46570x00,0x01, 0xF7,0x05, 0x79,0xC8, 0xF7,0x04, 0x79,0xC8, 0xF5,0x82, 0x03,0xE8, 0x95,0x93,
46580xFF,0xFC, 0xF5,0x82, 0x00,0x15, 0x95,0x93, 0xFF,0xFC, 0xF5,0x86, 0x79,0xCC, 0x95,0x93,
46590xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x1E,0xC0, 0x97,0x93, 0xFF,0xFC, 0x87,0x96,
46600xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
46610x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x06, 0x79,0xCC, 0x97,0x13,
46620xFF,0xFC, 0xF7,0x06, 0x78,0xB0, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00,
46630x14,0xF4, 0x97,0x93, 0xFF,0xFC, 0xF7,0x06, 0x79,0xCC, 0x97,0x13, 0xFF,0xFC, 0xF7,0x06,
46640x79,0x3C, 0x97,0x13, 0xFF,0xFC, 0x07,0x88, 0x00,0x08, 0xE0,0x00, 0x14,0xF4, 0x97,0x93,
46650xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
46660x00,0x00, 0x00,0x00, 0x00,0x01, 0xC1,0x3C, 0x00,0x00, 0x02,0x10, 0x00,0x04, 0x92,0x93,
46670xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x0C, 0x85,0x96, 0x00,0x00, 0x00,0x00,
46680x00,0x01, 0x86,0xAE, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x01,
46690x23,0x84, 0x27,0x14, 0x00,0x0C, 0x87,0x2E, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x07,0x38,
46700x00,0x01, 0x97,0x2E, 0x00,0x04, 0x87,0x2E, 0x00,0x04, 0xE0,0x01, 0x24,0x34, 0x96,0x96,
46710xFF,0xF4, 0x97,0x13, 0xFF,0xFC, 0x85,0x16, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x95,0x13,
46720xFF,0xFC, 0x95,0x93, 0xFF,0xFC, 0x95,0x96, 0xFF,0xEC, 0x07,0x88, 0x00,0x08, 0xE0,0x01,
46730x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xEC, 0x20,0x22, 0x00,0x00, 0xE6,0x01,
46740x24,0x34, 0x00,0x00, 0x00,0x01, 0x86,0xAE, 0x00,0x04, 0x86,0x16, 0xFF,0xF4, 0x00,0x00,
46750x00,0x01, 0xC0,0x36, 0x62,0x00, 0xEE,0x01, 0x24,0x21, 0x77,0x35, 0x00,0x01, 0xC7,0x38,
46760x68,0x00, 0x77,0x39, 0x00,0x02, 0xC6,0xB8, 0x58,0x00, 0x77,0x31, 0x00,0x01, 0xC7,0x38,
46770x60,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x58,0x00, 0x85,0x36, 0x00,0x00, 0x00,0x00,
46780x00,0x01, 0x95,0x36, 0x00,0x0C, 0x85,0x36, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x95,0x36,
46790x00,0x10, 0x85,0x36, 0x00,0x08, 0x00,0x00, 0x00,0x01, 0x95,0x36, 0x00,0x14, 0x26,0xB4,
46800x00,0x0C, 0xC0,0x36, 0x72,0x00, 0xEE,0x01, 0x23,0xEC, 0x00,0x00, 0x00,0x01, 0x87,0x2E,
46810x00,0x04, 0x00,0x00, 0x00,0x01, 0x07,0x38, 0x00,0x01, 0x97,0x2E, 0x00,0x04, 0x87,0x2E,
46820x00,0x04, 0x86,0x96, 0xFF,0xF4, 0x85,0x16, 0x00,0x04, 0x77,0x35, 0x00,0x01, 0xC7,0x38,
46830x68,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x2C, 0x70,0x00, 0x85,0x2A, 0x00,0x00, 0x00,0x00,
46840x00,0x01, 0x95,0x3A, 0x00,0x0C, 0x85,0x16, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x85,0x2A,
46850x00,0x04, 0x00,0x00, 0x00,0x01, 0x95,0x3A, 0x00,0x10, 0x85,0x16, 0x00,0x08, 0xF4,0x02,
46860x00,0x01, 0x95,0x3A, 0x00,0x14, 0x96,0xAE, 0x00,0x08, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
46870xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
46880xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x0C, 0x85,0x96, 0x00,0x00, 0x00,0x00,
46890x00,0x01, 0x84,0x2E, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x20,0x22, 0x00,0x00, 0xE6,0x01,
46900x25,0x55, 0x27,0x14, 0x00,0x0C, 0x97,0x13, 0xFF,0xFC, 0x85,0x16, 0x00,0x04, 0x00,0x00,
46910x00,0x01, 0x95,0x13, 0xFF,0xFC, 0x95,0x93, 0xFF,0xFC, 0x95,0x96, 0xFF,0xEC, 0x07,0x88,
46920x00,0x08, 0xE0,0x01, 0x25,0x68, 0x97,0x93, 0xFF,0xFC, 0x85,0x96, 0xFF,0xEC, 0x20,0x22,
46930x00,0x00, 0xE6,0x01, 0x25,0x55, 0x00,0x00, 0x00,0x01, 0x86,0x16, 0xFF,0xF4, 0x00,0x00,
46940x00,0x01, 0x20,0x32, 0x00,0x00, 0xEE,0x01, 0x25,0x45, 0x77,0x31, 0x00,0x01, 0xC6,0xAC,
46950x00,0x00, 0xC7,0x38, 0x60,0x00, 0x77,0x39, 0x00,0x02, 0xC7,0x38, 0x58,0x00, 0x85,0x36,
46960x00,0x18, 0x00,0x00, 0x00,0x01, 0x95,0x36, 0x00,0x0C, 0x85,0x36, 0x00,0x1C, 0x00,0x00,
46970x00,0x01, 0x95,0x36, 0x00,0x10, 0x85,0x36, 0x00,0x20, 0x00,0x00, 0x00,0x01, 0x95,0x36,
46980x00,0x14, 0x06,0xB4, 0x00,0x0C, 0xC0,0x36, 0x72,0x00, 0xEC,0x01, 0x25,0x11, 0x00,0x00,
46990x00,0x01, 0x87,0x2E, 0x00,0x04, 0xF4,0x02, 0x00,0x01, 0x27,0x38, 0x00,0x01, 0x97,0x2E,
47000x00,0x04, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C,
47010x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
47020x00,0x08, 0x83,0x96, 0x00,0x04, 0x83,0x16, 0x00,0x00, 0xC5,0x00, 0x00,0x00, 0x84,0x1A,
47030x00,0x04, 0xC4,0xA8, 0x00,0x00, 0x94,0x16, 0xFF,0xF4, 0xC0,0x26, 0x42,0x00, 0xE6,0x01,
47040x26,0xD1, 0x00,0x00, 0x00,0x01, 0x83,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0xC0,0x2A,
47050x32,0x00, 0xE6,0x01, 0x26,0xD1, 0xC7,0x20, 0x4A,0x00, 0x95,0x16, 0xFF,0xF4, 0x76,0xB8,
47060xFF,0xE1, 0xC7,0x38, 0x68,0x00, 0x77,0x39, 0xFF,0xFF, 0xC5,0x24, 0x70,0x00, 0x77,0x29,
47070x00,0x01, 0xC7,0x38, 0x50,0x00, 0x77,0x39, 0x00,0x02, 0x83,0x16, 0x00,0x00, 0x86,0x9E,
47080x00,0x00, 0xC5,0xB8, 0x30,0x00, 0x05,0xAC, 0x00,0x0C, 0x87,0x2E, 0x00,0x00, 0xC6,0x00,
47090x00,0x00, 0xC0,0x36, 0x72,0x00, 0xE6,0x01, 0x26,0x10, 0x20,0x32, 0x00,0x00, 0x86,0x9E,
47100x00,0x04, 0x87,0x2E, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36, 0x72,0x00, 0xE6,0x01,
47110x26,0x10, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32, 0x00,0x00, 0xE6,0x01,
47120x26,0x25, 0x00,0x00, 0x00,0x01, 0xC7,0x00, 0x00,0x00, 0xE0,0x01, 0x26,0x78, 0x20,0x3A,
47130x00,0x00, 0x86,0x9E, 0x00,0x00, 0x87,0x2E, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
47140x72,0x00, 0xE2,0x01, 0x26,0x5C, 0x00,0x00, 0x00,0x01, 0xE6,0x01, 0x26,0x64, 0x20,0x32,
47150x00,0x00, 0x86,0x9E, 0x00,0x04, 0x87,0x2E, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC0,0x36,
47160x72,0x00, 0xE2,0x01, 0x26,0x65, 0x20,0x32, 0x00,0x00, 0xF6,0x02, 0x00,0x01, 0x20,0x32,
47170x00,0x00, 0x47,0x04, 0xFF,0xFF, 0xE6,0x01, 0x26,0x79, 0x20,0x3A, 0x00,0x00, 0xF7,0x02,
47180x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x26,0xB1, 0x20,0x3A, 0x00,0x00, 0xEE,0x01,
47190x26,0xA0, 0x20,0x3A, 0x00,0x01, 0x43,0x04, 0xFF,0xFF, 0xC0,0x3A, 0x32,0x00, 0xE6,0x01,
47200x26,0xC9, 0xC0,0x26, 0x42,0x00, 0xE0,0x01, 0x25,0x90, 0x00,0x00, 0x00,0x01, 0xE6,0x01,
47210x26,0xC1, 0xC0,0x26, 0x42,0x00, 0xE0,0x01, 0x25,0x90, 0x00,0x00, 0x00,0x01, 0x83,0x16,
47220x00,0x08, 0xF4,0x02, 0x00,0x01, 0xE0,0x01, 0x26,0xE0, 0x95,0x1A, 0x00,0x00, 0xE0,0x01,
47230x25,0x8C, 0xC4,0xA8, 0x00,0x00, 0xE0,0x01, 0x25,0x8C, 0xC4,0x28, 0x00,0x00, 0x83,0x16,
47240x00,0x08, 0x00,0x00, 0x00,0x01, 0x94,0x1A, 0x00,0x00, 0xC4,0x00, 0x00,0x00, 0x87,0x96,
47250xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C, 0x00,0x00, 0x00,0x00,
47260x00,0x01, 0x00,0x00, 0x00,0x00, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x85,0x96,
47270x00,0x04, 0x84,0x16, 0x00,0x00, 0x84,0x96, 0x00,0x08, 0xF7,0x02, 0x00,0x03, 0xC6,0xA0,
47280x4D,0x80, 0xC6,0xB6, 0x74,0x00, 0xE6,0x01, 0x27,0x71, 0xC6,0x20, 0x00,0x00, 0x20,0x36,
47290x00,0x02, 0xE6,0x01, 0x27,0xA0, 0xC5,0x20, 0x48,0x00, 0xC7,0x20, 0x48,0x00, 0x27,0x38,
47300x00,0x02, 0xC0,0x22, 0x72,0x00, 0xE2,0x01, 0x27,0x9C, 0xC5,0x38, 0x00,0x00, 0x87,0x2E,
47310x00,0x00, 0x76,0xAD, 0x00,0x1E, 0x76,0xB4, 0xFF,0xE5, 0xC7,0x38, 0x6F,0xC0, 0x77,0x38,
47320xFF,0xF0, 0xF7,0x33, 0x28,0x00, 0x06,0x30, 0x00,0x02, 0xC0,0x32, 0x52,0x00, 0xE2,0x01,
47330x27,0x41, 0x05,0xAC, 0x00,0x02, 0xE0,0x01, 0x27,0xA0, 0xC5,0x20, 0x48,0x00, 0xC7,0x20,
47340x48,0x00, 0x27,0x38, 0x00,0x04, 0xC0,0x22, 0x72,0x00, 0xE2,0x01, 0x27,0xA0, 0xC5,0x20,
47350x48,0x00, 0x83,0xAD, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0x93,0xB1, 0x00,0x04, 0xC0,0x32,
47360x72,0x00, 0xE2,0x01, 0x27,0x85, 0x00,0x00, 0x00,0x01, 0xC5,0x20, 0x48,0x00, 0xC0,0x32,
47370x52,0x00, 0xE4,0x01, 0x27,0xD5, 0x00,0x00, 0x00,0x01, 0x86,0xAE, 0x00,0x00, 0x77,0x2D,
47380x00,0x1E, 0x77,0x38, 0xFF,0xE5, 0xC6,0xB4, 0x77,0xC0, 0x76,0xB5, 0xFF,0xE8, 0xF6,0xB3,
47390x68,0x00, 0x06,0x30, 0x00,0x01, 0xC0,0x32, 0x52,0x00, 0xE4,0x01, 0x27,0xAC, 0x05,0xAC,
47400x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x0C, 0x01,0x3C,
47410x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x84,0x16,
47420x00,0x00, 0x86,0x96, 0x00,0x04, 0x00,0x00, 0x00,0x01, 0xC7,0x22, 0x6D,0x80, 0xE6,0x01,
47430x28,0x10, 0x20,0x36, 0x00,0x00, 0xE0,0x01, 0x28,0x74, 0xC4,0x38, 0x00,0x00, 0xF7,0x02,
47440x00,0x01, 0xEE,0x01, 0x28,0x41, 0xF6,0x02, 0x00,0x00, 0x76,0xB5, 0x00,0x01, 0x20,0x36,
47450x00,0x00, 0xEE,0x01, 0x28,0x1C, 0x77,0x39, 0x00,0x01, 0xE0,0x01, 0x28,0x44, 0x20,0x22,
47460x00,0x00, 0x74,0x21, 0x00,0x01, 0x77,0x38, 0xFF,0xFF, 0x06,0x30, 0x00,0x01, 0x20,0x22,
47470x00,0x00, 0xEE,0x01, 0x28,0x34, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x28,0x71, 0x00,0x00,
47480x00,0x01, 0xC0,0x22, 0x6A,0x00, 0xE4,0x01, 0x28,0x64, 0x00,0x00, 0x00,0x01, 0xC4,0x20,
47490x6A,0x00, 0x77,0x3A, 0xFF,0xFF, 0xE6,0x01, 0x28,0x54, 0x76,0xB4, 0xFF,0xFF, 0xD4,0x20,
47500x07,0x62, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x08, 0x01,0x3C,
47510x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10,
47520x00,0x04, 0xE0,0x01, 0x28,0xCC, 0xF7,0x06, 0x29,0xDC, 0x86,0xBA, 0x00,0x00, 0x00,0x00,
47530x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x01, 0x28,0xC9, 0x00,0x00, 0x00,0x01, 0x97,0x16,
47540xFF,0xF4, 0x07,0x88, 0x00,0x08, 0xC1,0x34, 0x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x16,
47550xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x27,0x38, 0x00,0x04, 0xF6,0x06, 0x29,0xE0, 0xC0,0x3A,
47560x62,0x00, 0xE4,0x01, 0x28,0x9D, 0x00,0x00, 0x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96,
47570xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93,
47580xFF,0xFC, 0x02,0x90, 0x00,0x08, 0x22,0x10, 0x00,0x04, 0xE0,0x01, 0x29,0x34, 0xF7,0x06,
47590x29,0x98, 0x86,0xBA, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x20,0x36, 0x00,0x00, 0xE6,0x01,
47600x29,0x31, 0x00,0x00, 0x00,0x01, 0x97,0x16, 0xFF,0xF4, 0x07,0x88, 0x00,0x08, 0xC1,0x34,
47610x00,0x00, 0x97,0x93, 0xFF,0xFC, 0x87,0x16, 0xFF,0xF4, 0x00,0x00, 0x00,0x01, 0x07,0x38,
47620x00,0x04, 0xF6,0x06, 0x29,0xE0, 0xC0,0x3A, 0x62,0x00, 0xE4,0x01, 0x29,0x04, 0x00,0x00,
47630x00,0x01, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
47640x00,0x00, 0x00,0x00, 0x00,0x01, 0x92,0x93, 0xFF,0xFC, 0x02,0x90, 0x00,0x08, 0xF7,0x04,
47650x7B,0x50, 0x00,0x00, 0x00,0x01, 0x20,0x3A, 0x00,0x00, 0xE6,0x01, 0x29,0x84, 0xF6,0x82,
47660x00,0x01, 0xF6,0x85, 0x7B,0x50, 0x07,0x88, 0x00,0x08, 0xE0,0x01, 0x28,0xF0, 0x97,0x93,
47670xFF,0xFC, 0x87,0x96, 0xFF,0xFC, 0x82,0x96, 0xFF,0xF8, 0x02,0x14, 0x00,0x00, 0x01,0x3C,
47680x00,0x00, 0x00,0x00, 0x00,0x01, 0x00,0x00, 0x0B,0x4C, 0x00,0x00, 0x00,0x00, 0x00,0x00,
47690x42,0x88, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x5E,0x50, 0x00,0x00, 0x00,0x00, 0x00,0x00,
47700xC7,0xA8, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x0B,0xD0, 0x00,0x00, 0x00,0x00, 0x00,0x01,
47710x1C,0x88, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x1E,0x14, 0x00,0x00, 0x00,0x00, 0x00,0x01,
47720x21,0x2C, 0x00,0x00, 0x00,0x00, 0x00,0x01, 0x22,0xE4, 0x00,0x00, 0x00,0x00, } ;
4773
4774
4775/* This is the LANai data */
4776
4777static unsigned int __devinitdata lanai4_data_off = 0x94F0; /* half-word offset */
4778static unsigned char __devinitdata lanai4_data[20472];
4779
4780
4781#ifdef SYMBOL_DEFINES_COMPILED
4782/* These are half-word addresses - NOT byte offsets */
4783#define MYRI_GenerateMapVersion 0xBD08
4784#define MYRI_MoreToGenerate 0xBD0C
4785#define MYRI_GenerateMessage 0xBCEC
4786#define MYRI_RelayMapVersion 0xBD04
4787#define MYRI_RelayStart 0xBD00
4788#define MYRI_RelayDirection 0xBCFC
4789#define MYRI_RelayIndex 0xBCF4
4790#define MYRI_RelayStop 0xBCF8
4791#define MYRI_RelayMessage 0xBCF0
4792#define MYRI_BroadcastRelayMessagesSent 0xBD10
4793#define MYRI_SendMultiplexGrabbed 0xBD3C
4794#define MYRI_HostReceiveItem 0xBD14
4795#define MYRI_HostReceiveNumScatters 0xBD50
4796#define MYRI_HostReceiveScatterIndex 0xBD44
4797#define MYRI_HostReceiveScatterPointer 0xBD4C
4798#define MYRI_HostReceiveScatterLength 0xBD48
4799#define MYRI_HostReceiveChecksum 0xBD40
4800#define MYRI_RouteNumFragments 0xBD60
4801#define MYRI_RouteFragment 0xBD5C
4802#define MYRI_RouteStamp 0xBD58
4803#define MYRI_RoutesSoFar 0xBD64
4804#define MYRI_MapVersionChanged 0xBD68
4805#define MYRI_map_c 0xBD54
4806#define MYRI_pack_list 0x789C
4807#define MYRI_pack_table 0x78BA
4808#define MYRI_msg2event 0x7FF6
4809#define MYRI_VersionString 0xB7A0
4810#define MYRI_SizeofChannel 0xBD80
4811#define MYRI_EndOfQueueSpace 0xBD84
4812#define MYRI_FreeCode 0xBD78
4813#define MYRI_FreeData 0xBD7C
4814#define MYRI_Asserting 0xBD6C
4815#define MYRI_Version 0xBD74
4816#define MYRI_Processor 0xBD70
4817#define MYRI_NetReceive 0xBD8C
4818#define MYRI_NetReceiveBuffer 0xBD88
4819#define MYRI_MapLength 0xBD9C
4820#define MYRI_MapSendAlignment 0xBD98
4821#define MYRI_HostReplyLength 0xBDA4
4822#define MYRI_HostReplySendAlignment 0xBDA0
4823#define MYRI_MapSendMessages 0xBD94
4824#define MYRI_bitmask 0x90C6
4825#define MYRI_HostSendFull 0x99C0
4826#define MYRI_HostReplies 0xA04C
4827#define MYRI_Interrupts 0xBCE4
4828#define MYRI_NetReceiveDrops 0xB8DA
4829#define MYRI_SendMultiplexDoneEvent 0xBB7A
4830#define MYRI_bEvents 0x96E6
4831#define MYRI_bHostReceiveShortcuts 0x9972
4832#define MYRI_the_map 0xB728
4833#define MYRI_Channels 0xB7A2
4834#define MYRI_bEventIndex 0x9766
4835#define MYRI_NoBuffersChannel0 0x9974
4836#define MYRI_bShakes 0x976A
4837#define MYRI_MAPPER 0xA122
4838#define MYRI_CORE_timeout_counter 0xA114
4839#define MYRI_the_map_is_valid 0xA040
4840#define MYRI_bBadScatters 0x9970
4841#define MYRI_HostReceiveChannel 0x9960
4842#define MYRI_send_space 0xA7B0
4843#define MYRI_MapReceiveMessages 0xB8E0
4844#define MYRI_wakeup_mask 0xBC4E
4845#define MYRI_NetSendBuffer 0xBB30
4846#define MYRI_HostReceiveMulticast 0x9968
4847#define MYRI_HostSendChannel 0x9A94
4848#define MYRI_NetReceiveDmaDone 0xB7FA
4849#define MYRI_HostSendChecksum 0x9AAA
4850#define MYRI_HostReceiveScatter 0x9914
4851#define MYRI_compares 0x9DC8
4852#define MYRI_NetSendQueue 0xBAFC
4853#define MYRI_HostTable 0xA54C
4854#define MYRI_map_h 0x9DB4
4855#define MYRI_HostSendBytes 0x9AA0
4856#define MYRI_L3_end_loaded_memory 0xBDB4
4857#define MYRI_NetSendBytes 0xBB2A
4858#define MYRI_map_space 0xA81C
4859#define MYRI_MAP_ACK 0xA045
4860#define MYRI_NetReceiveMisroutes 0xB8D6
4861#define MYRI_HostReceiveBytes 0x995C
4862#define MYRI_BroadcastRelayIdle 0x95C2
4863#define MYRI_HostReceiveIdle 0x9770
4864#define MYRI_timing 0xBC08
4865#define MYRI_HostReceive 0x996A
4866#define MYRI_routeHandleMessage 0x7732
4867#define MYRI_Freses 0xB7AE
4868#define MYRI_NextToPut 0x969C
4869#define MYRI_HostSendIdle 0x997A
4870#define MYRIedata 0xBCEC
4871#define MYRI_SendingHostReply 0xBAFA
4872#define MYRI_timing_period 0xBC50
4873#define MYRI_debug 0xA138
4874#define MYRI_NetSendBusy 0xB998
4875#define MYRI_routeInitialize 0x6AA0
4876#define MYRI_HostReceiveQueue 0x9966
4877#define MYRI_bWakes 0x9768
4878#define MYRI_NetReceiveBadLengths 0xB8D0
4879#define MYRI_NetReceiveQueue 0xB8E2
4880#define MYRI_MapBuffer 0xBAF6
4881#define MYRI_MapChecksum 0xA048
4882#define MYRI_the_routes_are_valid 0xA042
4883#define MYRI_MAPPER_probe_stamp 0xA132
4884#define MYRI_memory 0xA7AC
4885#define MYRI_Events 0x9614
4886#define MYRI_switches 0x9DB6
4887#define MYRI_Hosts 0xA7AE
4888#define MYRI_HostReceiveGoingToBroadcast 0x98CE
4889#define MYRI_NetSendIdle 0xB90C
4890#define MYRI_host_reply_space 0xB72C
4891#define MYRI_HostReceiveWaitingToBroadcast 0x9888
4892#define MYRI_bSetRoutes 0xA11E
4893#define MYRI_bSends 0x976C
4894#define MYRI_BroadcastGenerateIdle 0x9536
4895#define MYRI_WatchdogOff 0xBC9E
4896#define MYRI_TIMER 0xBC52
4897#define MYRI_SendMultiplex 0xBB82
4898#define MYRI_HostReplyBuffer 0xBAF8
4899#define MYRI_the_new_switch 0xA130
4900#define MYRI_current_switch 0xA03A
4901#define MYRI_memcpy 0x937C
4902#define MYRI_server 0x9AF6
4903#define MYRI_WatchdogOn 0xBC58
4904#define MYRI_NetSendContinuing 0xB952
4905#define MYRI_NetReceiveBadChannels 0xB8D2
4906#define MYRI_SendMultiplexFreeMachine 0xBB80
4907#define MYRI_NetReceiveFlush 0xB840
4908#define MYRI_NetSendBroadcasting 0xBAB0
4909#define MYRI_looking_for_a_loopback 0x9D6C
4910#define MYRI_HostSendGatherPointer 0x9AA8
4911#define MYRI_HostSendItem 0x9A96
4912#define MYRI_MAP_REQ 0xA046
4913#define MYRI_memory_free_list 0xA160
4914#define MYRIend 0xBDB4
4915#define MYRI_MapVersion 0x9DB2
4916#define MYRI_client 0x9AB0
4917#define MYRI_HostReceiveBroadcasting 0x9842
4918#define MYRIetext 0x94F0
4919#define MYRI_NetSendMapBusy 0xB9DE
4920#define MYRI_bRouteMessages 0xA134
4921#define MYRI_DmaDirection 0xB7A8
4922#define MYRI_SendMultiplexFreeEvent 0xBB7C
4923#define MYRI_idle_mapper 0x9B3C
4924#define MYRI_NetSend 0xBB24
4925#define MYRI_current_port 0xA03E
4926#define MYRI_HostConnectedSwitches 0x9DDA
4927#define MYRI_try_loopback 0x9B82
4928#define MYRI_the_host_reply_message 0xB72A
4929#define MYRI_MAPPER_queue 0x9DD8
4930#define MYRI_bHostSendShortcuts 0x9AAC
4931#define MYRI_BroadcastGenerate 0x9608
4932#define MYRI_DmaFreeEvent 0xB7AC
4933#define MYRI_host_timeout_counter 0xA116
4934#define MYRI_NetReceiveDma 0xB7B4
4935#define MYRI_MAPPER_try_port 0xA12C
4936#define MYRI_bcopy 0x66AA
4937#define MYRI_queue_h 0xBB32
4938#define MYRI_bUpdates 0xA120
4939#define MYRI_SendMultiplexMachine 0xBB7E
4940#define MYRI_MAPPER_repeat 0xA12A
4941#define MYRI_the_return_port 0xA038
4942#define MYRI_NetReceiveFull 0xB886
4943#define MYRI_MyHostTableIndex 0xA7AA
4944#define MYRI_CORE 0xA118
4945#define MYRI_I_have_a_map 0xA044
4946#define MYRI_bWaiting 0xB7B0
4947#define MYRI_NetReceiveOverflows 0xB8D8
4948#define MYRI_NumMachines 0x96A0
4949#define MYRI_MapMessagesSentCounter 0xB79C
4950#define MYRI_HostReceiveBuffer 0x9962
4951#define MYRI_HostSendDma 0x9A4C
4952#define MYRI_NextToGet 0x969E
4953#define MYRI_HostReceiveDmaBusy 0x97B6
4954#define MYRI_bUpdateMessages 0xA136
4955#define MYRI_try_the_switch 0x9C0E
4956#define MYRI_BroadcastRelay 0x960E
4957#define MYRI_the_msg 0xB798
4958#define MYRI_bEventsRTC 0x9726
4959#define MYRI_HostReceiveMessages 0x995E
4960#define MYRI_CURRENT_MSG 0xB79A
4961#define MYRI_MAPPER_phase 0xA128
4962#define MYRI_HostReceiveDma 0x97FC
4963#define MYRI_Watchdog 0xBCE6
4964#define MYRI_HostSendEmpty 0x9A92
4965#define MYRI_abort 0x63C6
4966#define MYRI_SendMultiplexIdle 0xBB34
4967#define MYRI_looking_for_a_switch 0x9C54
4968#define MYRI_NetSendMessages 0xBB2C
4969#define MYRI_updating 0x9D26
4970#define MYRI_BroadcastGenerateSending 0x94F0
4971#define MYRI_HostSendBuffer 0x9AA4
4972#define MYRI_HostSendMessages 0x9A9E
4973#define MYRI_BroadcastRelaySending 0x957C
4974#define MYRI_HostSendDmaBusy 0x9A06
4975#define MYRI_BroadcastsPending 0xB8CC
4976#define MYRI_NetSendMapWaiting 0xBA6A
4977#define MYRI_NetReceiveBadTypes 0xB8CE
4978#define MYRI_looking_for_hosts 0x9C9A
4979#define MYRI_bBadHeader 0x9978
4980#define MYRI_HostSendGatherIndex 0x9AA6
4981#define MYRI_routeLookup 0x7790
4982#define MYRI_NetReceiveMessages 0xB8DE
4983#define MYRI_DmaInUse 0xB7AA
4984#define MYRI_explores 0x9DB8
4985#define MYRI_HostSend 0x9A98
4986#define MYRI_DmaResetSpin 0xB7B2
4987#define MYRIstart 0x0000
4988#define MYRI_RouteTable 0xA164
4989#define MYRI_Machines 0x96A2
4990#define MYRI_try_the_host 0x9BC8
4991#define MYRI_isr_record 0x976E
4992#define MYRI_HostReceiveDrops 0x995A
4993#define MYRI_HostReceiveLength 0x9964
4994#define MYRI_timers 0xBB88
4995#define MYRI_NetSendWaiting 0xBA24
4996#define MYRI_NetSendDrops 0xBB2E
4997#define MYRI_comparing_a_switch 0x9CE0
4998#define MYRI_OldMapChecksum 0xA04A
4999#define MYRI_HostSendQueue 0x9AA2
5000#define MYRI_MAPPER_host 0xA12E
5001#define MYRI_compare_switch 0xA03C
5002#define MYRI_main 0x80A6
5003#define MYRI_NetReceiveBadCrcs 0xB8D4
5004#define MYRI_NetReceiveBytes 0xB8DC
5005
5006#endif /* SYMBOL_DEFINES_COMPILED */
diff --git a/drivers/net/myri_sbus.c b/drivers/net/myri_sbus.c
index 08534c08d30d..9a802adba9a3 100644
--- a/drivers/net/myri_sbus.c
+++ b/drivers/net/myri_sbus.c
@@ -25,6 +25,7 @@ static char version[] =
25#include <linux/dma-mapping.h> 25#include <linux/dma-mapping.h>
26#include <linux/of.h> 26#include <linux/of.h>
27#include <linux/of_device.h> 27#include <linux/of_device.h>
28#include <linux/firmware.h>
28 29
29#include <net/dst.h> 30#include <net/dst.h>
30#include <net/arp.h> 31#include <net/arp.h>
@@ -43,7 +44,6 @@ static char version[] =
43#include <asm/irq.h> 44#include <asm/irq.h>
44 45
45#include "myri_sbus.h" 46#include "myri_sbus.h"
46#include "myri_code.h"
47 47
48/* #define DEBUG_DETECT */ 48/* #define DEBUG_DETECT */
49/* #define DEBUG_IRQ */ 49/* #define DEBUG_IRQ */
@@ -81,6 +81,9 @@ static char version[] =
81#define DHDR(x) 81#define DHDR(x)
82#endif 82#endif
83 83
84/* Firmware name */
85#define FWNAME "myricom/lanai.bin"
86
84static void myri_reset_off(void __iomem *lp, void __iomem *cregs) 87static void myri_reset_off(void __iomem *lp, void __iomem *cregs)
85{ 88{
86 /* Clear IRQ mask. */ 89 /* Clear IRQ mask. */
@@ -171,10 +174,11 @@ static int myri_do_handshake(struct myri_eth *mp)
171 174
172static int __devinit myri_load_lanai(struct myri_eth *mp) 175static int __devinit myri_load_lanai(struct myri_eth *mp)
173{ 176{
177 const struct firmware *fw;
174 struct net_device *dev = mp->dev; 178 struct net_device *dev = mp->dev;
175 struct myri_shmem __iomem *shmem = mp->shmem; 179 struct myri_shmem __iomem *shmem = mp->shmem;
176 void __iomem *rptr; 180 void __iomem *rptr;
177 int i; 181 int i, lanai4_data_size;
178 182
179 myri_disable_irq(mp->lregs, mp->cregs); 183 myri_disable_irq(mp->lregs, mp->cregs);
180 myri_reset_on(mp->cregs); 184 myri_reset_on(mp->cregs);
@@ -186,13 +190,27 @@ static int __devinit myri_load_lanai(struct myri_eth *mp)
186 if (mp->eeprom.cpuvers >= CPUVERS_3_0) 190 if (mp->eeprom.cpuvers >= CPUVERS_3_0)
187 sbus_writel(mp->eeprom.cval, mp->lregs + LANAI_CVAL); 191 sbus_writel(mp->eeprom.cval, mp->lregs + LANAI_CVAL);
188 192
193 i = request_firmware(&fw, FWNAME, &mp->myri_op->dev);
194 if (i) {
195 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
196 FWNAME, i);
197 return i;
198 }
199 if (fw->size < 2) {
200 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
201 fw->size, FWNAME);
202 release_firmware(fw);
203 return -EINVAL;
204 }
205 lanai4_data_size = fw->data[0] << 8 | fw->data[1];
206
189 /* Load executable code. */ 207 /* Load executable code. */
190 for (i = 0; i < sizeof(lanai4_code); i++) 208 for (i = 2; i < fw->size; i++)
191 sbus_writeb(lanai4_code[i], rptr + (lanai4_code_off * 2) + i); 209 sbus_writeb(fw->data[i], rptr++);
192 210
193 /* Load data segment. */ 211 /* Load data segment. */
194 for (i = 0; i < sizeof(lanai4_data); i++) 212 for (i = 0; i < lanai4_data_size; i++)
195 sbus_writeb(lanai4_data[i], rptr + (lanai4_data_off * 2) + i); 213 sbus_writeb(0, rptr++);
196 214
197 /* Set device address. */ 215 /* Set device address. */
198 sbus_writeb(0, &shmem->addr[0]); 216 sbus_writeb(0, &shmem->addr[0]);
@@ -228,6 +246,7 @@ static int __devinit myri_load_lanai(struct myri_eth *mp)
228 if (mp->eeprom.cpuvers == CPUVERS_4_0) 246 if (mp->eeprom.cpuvers == CPUVERS_4_0)
229 sbus_writel(0, mp->lregs + LANAI_VERS); 247 sbus_writel(0, mp->lregs + LANAI_VERS);
230 248
249 release_firmware(fw);
231 return i; 250 return i;
232} 251}
233 252
@@ -1078,7 +1097,10 @@ static int __devinit myri_sbus_probe(struct of_device *op, const struct of_devic
1078 1097
1079 /* Load code onto the LANai. */ 1098 /* Load code onto the LANai. */
1080 DET(("Loading LANAI firmware\n")); 1099 DET(("Loading LANAI firmware\n"));
1081 myri_load_lanai(mp); 1100 if (myri_load_lanai(mp)) {
1101 printk(KERN_ERR "MyriCOM: Cannot Load LANAI firmware.\n");
1102 goto err_free_irq;
1103 }
1082 1104
1083 if (register_netdev(dev)) { 1105 if (register_netdev(dev)) {
1084 printk("MyriCOM: Cannot register device.\n"); 1106 printk("MyriCOM: Cannot register device.\n");
@@ -1159,3 +1181,4 @@ module_init(myri_sbus_init);
1159module_exit(myri_sbus_exit); 1181module_exit(myri_sbus_exit);
1160 1182
1161MODULE_LICENSE("GPL"); 1183MODULE_LICENSE("GPL");
1184MODULE_FIRMWARE(FWNAME);
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 1af47257ba82..aef77289bd34 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -207,19 +207,19 @@ static int nx_set_dma_mask(struct netxen_adapter *adapter, uint8_t revision_id)
207 207
208 adapter->pci_using_dac = 0; 208 adapter->pci_using_dac = 0;
209 209
210 mask = DMA_32BIT_MASK; 210 mask = DMA_BIT_MASK(32);
211 /* 211 /*
212 * Consistent DMA mask is set to 32 bit because it cannot be set to 212 * Consistent DMA mask is set to 32 bit because it cannot be set to
213 * 35 bits. For P3 also leave it at 32 bits for now. Only the rings 213 * 35 bits. For P3 also leave it at 32 bits for now. Only the rings
214 * come off this pool. 214 * come off this pool.
215 */ 215 */
216 cmask = DMA_32BIT_MASK; 216 cmask = DMA_BIT_MASK(32);
217 217
218#ifndef CONFIG_IA64 218#ifndef CONFIG_IA64
219 if (revision_id >= NX_P3_B0) 219 if (revision_id >= NX_P3_B0)
220 mask = DMA_39BIT_MASK; 220 mask = DMA_BIT_MASK(39);
221 else if (revision_id == NX_P2_C1) 221 else if (revision_id == NX_P2_C1)
222 mask = DMA_35BIT_MASK; 222 mask = DMA_BIT_MASK(35);
223#endif 223#endif
224 if (pci_set_dma_mask(pdev, mask) == 0 && 224 if (pci_set_dma_mask(pdev, mask) == 0 &&
225 pci_set_consistent_dma_mask(pdev, cmask) == 0) { 225 pci_set_consistent_dma_mask(pdev, cmask) == 0) {
diff --git a/drivers/net/niu.c b/drivers/net/niu.c
index 02c37e2f08a9..73cac6c78cb6 100644
--- a/drivers/net/niu.c
+++ b/drivers/net/niu.c
@@ -9889,8 +9889,8 @@ static int __devinit niu_pci_init_one(struct pci_dev *pdev,
9889 goto err_out_release_parent; 9889 goto err_out_release_parent;
9890 } 9890 }
9891 } 9891 }
9892 if (err || dma_mask == DMA_32BIT_MASK) { 9892 if (err || dma_mask == DMA_BIT_MASK(32)) {
9893 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 9893 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
9894 if (err) { 9894 if (err) {
9895 dev_err(&pdev->dev, PFX "No usable DMA configuration, " 9895 dev_err(&pdev->dev, PFX "No usable DMA configuration, "
9896 "aborting.\n"); 9896 "aborting.\n");
diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c
index 221b0c4c824a..d531614a90b5 100644
--- a/drivers/net/ns83820.c
+++ b/drivers/net/ns83820.c
@@ -1973,9 +1973,9 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev,
1973 1973
1974 /* See if we can set the dma mask early on; failure is fatal. */ 1974 /* See if we can set the dma mask early on; failure is fatal. */
1975 if (sizeof(dma_addr_t) == 8 && 1975 if (sizeof(dma_addr_t) == 8 &&
1976 !pci_set_dma_mask(pci_dev, DMA_64BIT_MASK)) { 1976 !pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64))) {
1977 using_dac = 1; 1977 using_dac = 1;
1978 } else if (!pci_set_dma_mask(pci_dev, DMA_32BIT_MASK)) { 1978 } else if (!pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32))) {
1979 using_dac = 0; 1979 using_dac = 0;
1980 } else { 1980 } else {
1981 dev_warn(&pci_dev->dev, "pci_set_dma_mask failed!\n"); 1981 dev_warn(&pci_dev->dev, "pci_set_dma_mask failed!\n");
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c
index 501a8d7ac2be..15b8fe61695b 100644
--- a/drivers/net/pcmcia/axnet_cs.c
+++ b/drivers/net/pcmcia/axnet_cs.c
@@ -339,7 +339,7 @@ static int axnet_config(struct pcmcia_device *link)
339{ 339{
340 struct net_device *dev = link->priv; 340 struct net_device *dev = link->priv;
341 axnet_dev_t *info = PRIV(dev); 341 axnet_dev_t *info = PRIV(dev);
342 int i, j, last_ret, last_fn; 342 int i, j, j2, last_ret, last_fn;
343 343
344 DEBUG(0, "axnet_config(0x%p)\n", link); 344 DEBUG(0, "axnet_config(0x%p)\n", link);
345 345
@@ -388,6 +388,8 @@ static int axnet_config(struct pcmcia_device *link)
388 388
389 for (i = 0; i < 32; i++) { 389 for (i = 0; i < 32; i++) {
390 j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1); 390 j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
391 j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
392 if (j == j2) continue;
391 if ((j != 0) && (j != 0xffff)) break; 393 if ((j != 0) && (j != 0xffff)) break;
392 } 394 }
393 395
@@ -398,6 +400,8 @@ static int axnet_config(struct pcmcia_device *link)
398 pcmcia_access_configuration_register(link, &reg); 400 pcmcia_access_configuration_register(link, &reg);
399 for (i = 0; i < 32; i++) { 401 for (i = 0; i < 32; i++) {
400 j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1); 402 j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
403 j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
404 if (j == j2) continue;
401 if ((j != 0) && (j != 0xffff)) break; 405 if ((j != 0) && (j != 0xffff)) break;
402 } 406 }
403 } 407 }
@@ -1767,6 +1771,9 @@ static void AX88190_init(struct net_device *dev, int startp)
1767 ei_local->tx1 = ei_local->tx2 = 0; 1771 ei_local->tx1 = ei_local->tx2 = 0;
1768 ei_local->txing = 0; 1772 ei_local->txing = 0;
1769 1773
1774 if (info->flags & IS_AX88790) /* select Internal PHY */
1775 outb(0x10, e8390_base + AXNET_GPIO);
1776
1770 if (startp) 1777 if (startp)
1771 { 1778 {
1772 outb_p(0xff, e8390_base + EN0_ISR); 1779 outb_p(0xff, e8390_base + EN0_ISR);
diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
index 8b2823c8dccf..cadc32c94c1e 100644
--- a/drivers/net/qla3xxx.c
+++ b/drivers/net/qla3xxx.c
@@ -3934,12 +3934,12 @@ static int __devinit ql3xxx_probe(struct pci_dev *pdev,
3934 3934
3935 pci_set_master(pdev); 3935 pci_set_master(pdev);
3936 3936
3937 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 3937 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3938 pci_using_dac = 1; 3938 pci_using_dac = 1;
3939 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 3939 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3940 } else if (!(err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) { 3940 } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
3941 pci_using_dac = 0; 3941 pci_using_dac = 0;
3942 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 3942 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3943 } 3943 }
3944 3944
3945 if (err) { 3945 if (err) {
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 170d3540f9c9..c92ced247947 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -3726,13 +3726,13 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
3726 } 3726 }
3727 3727
3728 pci_set_master(pdev); 3728 pci_set_master(pdev);
3729 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 3729 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3730 set_bit(QL_DMA64, &qdev->flags); 3730 set_bit(QL_DMA64, &qdev->flags);
3731 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 3731 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3732 } else { 3732 } else {
3733 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 3733 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
3734 if (!err) 3734 if (!err)
3735 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 3735 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3736 } 3736 }
3737 3737
3738 if (err) { 3738 if (err) {
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c
index 0a37f9902a07..5e8540b6ffa1 100644
--- a/drivers/net/r6040.c
+++ b/drivers/net/r6040.c
@@ -1085,13 +1085,13 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,
1085 goto err_out; 1085 goto err_out;
1086 1086
1087 /* this should always be supported */ 1087 /* this should always be supported */
1088 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1088 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1089 if (err) { 1089 if (err) {
1090 printk(KERN_ERR DRV_NAME ": 32-bit PCI DMA addresses" 1090 printk(KERN_ERR DRV_NAME ": 32-bit PCI DMA addresses"
1091 "not supported by the card\n"); 1091 "not supported by the card\n");
1092 goto err_out; 1092 goto err_out;
1093 } 1093 }
1094 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1094 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1095 if (err) { 1095 if (err) {
1096 printk(KERN_ERR DRV_NAME ": 32-bit PCI DMA addresses" 1096 printk(KERN_ERR DRV_NAME ": 32-bit PCI DMA addresses"
1097 "not supported by the card\n"); 1097 "not supported by the card\n");
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index e1a638a05f86..0b6e8c896835 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1148,7 +1148,7 @@ static void rtl8169_update_counters(struct net_device *dev)
1148 return; 1148 return;
1149 1149
1150 RTL_W32(CounterAddrHigh, (u64)paddr >> 32); 1150 RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
1151 cmd = (u64)paddr & DMA_32BIT_MASK; 1151 cmd = (u64)paddr & DMA_BIT_MASK(32);
1152 RTL_W32(CounterAddrLow, cmd); 1152 RTL_W32(CounterAddrLow, cmd);
1153 RTL_W32(CounterAddrLow, cmd | CounterDump); 1153 RTL_W32(CounterAddrLow, cmd | CounterDump);
1154 1154
@@ -2046,11 +2046,11 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2046 tp->cp_cmd = PCIMulRW | RxChkSum; 2046 tp->cp_cmd = PCIMulRW | RxChkSum;
2047 2047
2048 if ((sizeof(dma_addr_t) > 4) && 2048 if ((sizeof(dma_addr_t) > 4) &&
2049 !pci_set_dma_mask(pdev, DMA_64BIT_MASK) && use_dac) { 2049 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
2050 tp->cp_cmd |= PCIDAC; 2050 tp->cp_cmd |= PCIDAC;
2051 dev->features |= NETIF_F_HIGHDMA; 2051 dev->features |= NETIF_F_HIGHDMA;
2052 } else { 2052 } else {
2053 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2053 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2054 if (rc < 0) { 2054 if (rc < 0) {
2055 if (netif_msg_probe(tp)) { 2055 if (netif_msg_probe(tp)) {
2056 dev_err(&pdev->dev, 2056 dev_err(&pdev->dev,
@@ -2343,9 +2343,9 @@ static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
2343 * Switching from MMIO to I/O access fixes the issue as well. 2343 * Switching from MMIO to I/O access fixes the issue as well.
2344 */ 2344 */
2345 RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32); 2345 RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
2346 RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_32BIT_MASK); 2346 RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
2347 RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32); 2347 RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
2348 RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_32BIT_MASK); 2348 RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
2349} 2349}
2350 2350
2351static u16 rtl_rw_cpluscmd(void __iomem *ioaddr) 2351static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index 16868b7a5d0a..1a4979f27fb5 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -7775,18 +7775,18 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
7775 return ret; 7775 return ret;
7776 } 7776 }
7777 7777
7778 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 7778 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
7779 DBG_PRINT(INIT_DBG, "s2io_init_nic: Using 64bit DMA\n"); 7779 DBG_PRINT(INIT_DBG, "s2io_init_nic: Using 64bit DMA\n");
7780 dma_flag = TRUE; 7780 dma_flag = TRUE;
7781 if (pci_set_consistent_dma_mask 7781 if (pci_set_consistent_dma_mask
7782 (pdev, DMA_64BIT_MASK)) { 7782 (pdev, DMA_BIT_MASK(64))) {
7783 DBG_PRINT(ERR_DBG, 7783 DBG_PRINT(ERR_DBG,
7784 "Unable to obtain 64bit DMA for \ 7784 "Unable to obtain 64bit DMA for \
7785 consistent allocations\n"); 7785 consistent allocations\n");
7786 pci_disable_device(pdev); 7786 pci_disable_device(pdev);
7787 return -ENOMEM; 7787 return -ENOMEM;
7788 } 7788 }
7789 } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 7789 } else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
7790 DBG_PRINT(INIT_DBG, "s2io_init_nic: Using 32bit DMA\n"); 7790 DBG_PRINT(INIT_DBG, "s2io_init_nic: Using 32bit DMA\n");
7791 } else { 7791 } else {
7792 pci_disable_device(pdev); 7792 pci_disable_device(pdev);
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c
index c13cbf099b88..18821f217e19 100644
--- a/drivers/net/sc92031.c
+++ b/drivers/net/sc92031.c
@@ -1427,11 +1427,11 @@ static int __devinit sc92031_probe(struct pci_dev *pdev,
1427 1427
1428 pci_set_master(pdev); 1428 pci_set_master(pdev);
1429 1429
1430 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1430 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1431 if (unlikely(err < 0)) 1431 if (unlikely(err < 0))
1432 goto out_set_dma_mask; 1432 goto out_set_dma_mask;
1433 1433
1434 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1434 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1435 if (unlikely(err < 0)) 1435 if (unlikely(err < 0))
1436 goto out_set_dma_mask; 1436 goto out_set_dma_mask;
1437 1437
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index a9732686134b..55ccd51d247e 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -1467,7 +1467,7 @@ static struct net_device * __devinit sis190_init_board(struct pci_dev *pdev)
1467 goto err_pci_disable_2; 1467 goto err_pci_disable_2;
1468 } 1468 }
1469 1469
1470 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1470 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1471 if (rc < 0) { 1471 if (rc < 0) {
1472 net_probe(tp, KERN_ERR "%s: DMA configuration failed.\n", 1472 net_probe(tp, KERN_ERR "%s: DMA configuration failed.\n",
1473 pci_name(pdev)); 1473 pci_name(pdev));
diff --git a/drivers/net/sis900.c b/drivers/net/sis900.c
index 8a70de72ea2c..2d4617b3e208 100644
--- a/drivers/net/sis900.c
+++ b/drivers/net/sis900.c
@@ -432,7 +432,7 @@ static int __devinit sis900_probe(struct pci_dev *pci_dev,
432 ret = pci_enable_device(pci_dev); 432 ret = pci_enable_device(pci_dev);
433 if(ret) return ret; 433 if(ret) return ret;
434 434
435 i = pci_set_dma_mask(pci_dev, DMA_32BIT_MASK); 435 i = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32));
436 if(i){ 436 if(i){
437 printk(KERN_ERR "sis900.c: architecture does not support " 437 printk(KERN_ERR "sis900.c: architecture does not support "
438 "32bit PCI busmaster DMA\n"); 438 "32bit PCI busmaster DMA\n");
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index 952d37ffee51..b8978d4af1b7 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -3912,12 +3912,12 @@ static int __devinit skge_probe(struct pci_dev *pdev,
3912 3912
3913 pci_set_master(pdev); 3913 pci_set_master(pdev);
3914 3914
3915 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 3915 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3916 using_dac = 1; 3916 using_dac = 1;
3917 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 3917 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3918 } else if (!(err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) { 3918 } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
3919 using_dac = 0; 3919 using_dac = 0;
3920 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 3920 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3921 } 3921 }
3922 3922
3923 if (err) { 3923 if (err) {
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index d01c56eb9627..a2ff9cb1e7ac 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -4374,16 +4374,16 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
4374 pci_set_master(pdev); 4374 pci_set_master(pdev);
4375 4375
4376 if (sizeof(dma_addr_t) > sizeof(u32) && 4376 if (sizeof(dma_addr_t) > sizeof(u32) &&
4377 !(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) { 4377 !(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))) {
4378 using_dac = 1; 4378 using_dac = 1;
4379 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 4379 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
4380 if (err < 0) { 4380 if (err < 0) {
4381 dev_err(&pdev->dev, "unable to obtain 64 bit DMA " 4381 dev_err(&pdev->dev, "unable to obtain 64 bit DMA "
4382 "for consistent allocations\n"); 4382 "for consistent allocations\n");
4383 goto err_out_free_regions; 4383 goto err_out_free_regions;
4384 } 4384 }
4385 } else { 4385 } else {
4386 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 4386 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4387 if (err) { 4387 if (err) {
4388 dev_err(&pdev->dev, "no usable DMA configuration\n"); 4388 dev_err(&pdev->dev, "no usable DMA configuration\n");
4389 goto err_out_free_regions; 4389 goto err_out_free_regions;
diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c
index af8f60ca0f57..6da678129828 100644
--- a/drivers/net/smsc911x.c
+++ b/drivers/net/smsc911x.c
@@ -43,7 +43,6 @@
43#include <linux/sched.h> 43#include <linux/sched.h>
44#include <linux/slab.h> 44#include <linux/slab.h>
45#include <linux/timer.h> 45#include <linux/timer.h>
46#include <linux/version.h>
47#include <linux/bug.h> 46#include <linux/bug.h>
48#include <linux/bitops.h> 47#include <linux/bitops.h>
49#include <linux/irq.h> 48#include <linux/irq.h>
diff --git a/drivers/net/smsc9420.c b/drivers/net/smsc9420.c
index 5959ae86e57d..60abdb1081ad 100644
--- a/drivers/net/smsc9420.c
+++ b/drivers/net/smsc9420.c
@@ -1598,7 +1598,7 @@ smsc9420_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1598 goto out_free_netdev_2; 1598 goto out_free_netdev_2;
1599 } 1599 }
1600 1600
1601 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 1601 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
1602 printk(KERN_ERR "No usable DMA configuration, aborting.\n"); 1602 printk(KERN_ERR "No usable DMA configuration, aborting.\n");
1603 goto out_free_regions_3; 1603 goto out_free_regions_3;
1604 } 1604 }
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c
index c024352c92fd..d2dfe0ab5106 100644
--- a/drivers/net/sungem.c
+++ b/drivers/net/sungem.c
@@ -3042,10 +3042,10 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
3042 */ 3042 */
3043 if (pdev->vendor == PCI_VENDOR_ID_SUN && 3043 if (pdev->vendor == PCI_VENDOR_ID_SUN &&
3044 pdev->device == PCI_DEVICE_ID_SUN_GEM && 3044 pdev->device == PCI_DEVICE_ID_SUN_GEM &&
3045 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 3045 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3046 pci_using_dac = 1; 3046 pci_using_dac = 1;
3047 } else { 3047 } else {
3048 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 3048 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
3049 if (err) { 3049 if (err) {
3050 printk(KERN_ERR PFX "No usable DMA configuration, " 3050 printk(KERN_ERR PFX "No usable DMA configuration, "
3051 "aborting.\n"); 3051 "aborting.\n");
diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c
index 7debd1e4e1f7..7f4a9683ba1e 100644
--- a/drivers/net/tehuti.c
+++ b/drivers/net/tehuti.c
@@ -1941,12 +1941,12 @@ bdx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1941 if ((err = pci_enable_device(pdev))) /* it trigers interrupt, dunno why. */ 1941 if ((err = pci_enable_device(pdev))) /* it trigers interrupt, dunno why. */
1942 goto err_pci; /* it's not a problem though */ 1942 goto err_pci; /* it's not a problem though */
1943 1943
1944 if (!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK)) && 1944 if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) &&
1945 !(err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK))) { 1945 !(err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))) {
1946 pci_using_dac = 1; 1946 pci_using_dac = 1;
1947 } else { 1947 } else {
1948 if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) || 1948 if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) ||
1949 (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) { 1949 (err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)))) {
1950 printk(KERN_ERR "tehuti: No usable DMA configuration" 1950 printk(KERN_ERR "tehuti: No usable DMA configuration"
1951 ", aborting\n"); 1951 ", aborting\n");
1952 goto err_dma; 1952 goto err_dma;
diff --git a/drivers/net/tehuti.h b/drivers/net/tehuti.h
index dec67e0a9ca2..4fc875e5dcdd 100644
--- a/drivers/net/tehuti.h
+++ b/drivers/net/tehuti.h
@@ -31,6 +31,7 @@
31#include <linux/vmalloc.h> 31#include <linux/vmalloc.h>
32#include <linux/firmware.h> 32#include <linux/firmware.h>
33#include <asm/byteorder.h> 33#include <asm/byteorder.h>
34#include <linux/dma-mapping.h>
34 35
35/* Compile Time Switches */ 36/* Compile Time Switches */
36/* start */ 37/* start */
@@ -98,14 +99,6 @@
98#define READ_REG(pp, reg) readl(pp->pBdxRegs + reg) 99#define READ_REG(pp, reg) readl(pp->pBdxRegs + reg)
99#define WRITE_REG(pp, reg, val) writel(val, pp->pBdxRegs + reg) 100#define WRITE_REG(pp, reg, val) writel(val, pp->pBdxRegs + reg)
100 101
101#ifndef DMA_64BIT_MASK
102# define DMA_64BIT_MASK 0xffffffffffffffffULL
103#endif
104
105#ifndef DMA_32BIT_MASK
106# define DMA_32BIT_MASK 0x00000000ffffffffULL
107#endif
108
109#ifndef NET_IP_ALIGN 102#ifndef NET_IP_ALIGN
110# define NET_IP_ALIGN 2 103# define NET_IP_ALIGN 2
111#endif 104#endif
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 437683aab32c..6a736dda3ee2 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -4975,7 +4975,7 @@ static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
4975{ 4975{
4976#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 4976#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
4977 if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) 4977 if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG)
4978 return (((u64) mapping + len) > DMA_40BIT_MASK); 4978 return (((u64) mapping + len) > DMA_BIT_MASK(40));
4979 return 0; 4979 return 0;
4980#else 4980#else
4981 return 0; 4981 return 0;
@@ -13228,17 +13228,17 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
13228 * do DMA address check in tg3_start_xmit(). 13228 * do DMA address check in tg3_start_xmit().
13229 */ 13229 */
13230 if (tp->tg3_flags2 & TG3_FLG2_IS_5788) 13230 if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
13231 persist_dma_mask = dma_mask = DMA_32BIT_MASK; 13231 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
13232 else if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) { 13232 else if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) {
13233 persist_dma_mask = dma_mask = DMA_40BIT_MASK; 13233 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
13234#ifdef CONFIG_HIGHMEM 13234#ifdef CONFIG_HIGHMEM
13235 dma_mask = DMA_64BIT_MASK; 13235 dma_mask = DMA_BIT_MASK(64);
13236#endif 13236#endif
13237 } else 13237 } else
13238 persist_dma_mask = dma_mask = DMA_64BIT_MASK; 13238 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
13239 13239
13240 /* Configure DMA attributes. */ 13240 /* Configure DMA attributes. */
13241 if (dma_mask > DMA_32BIT_MASK) { 13241 if (dma_mask > DMA_BIT_MASK(32)) {
13242 err = pci_set_dma_mask(pdev, dma_mask); 13242 err = pci_set_dma_mask(pdev, dma_mask);
13243 if (!err) { 13243 if (!err) {
13244 dev->features |= NETIF_F_HIGHDMA; 13244 dev->features |= NETIF_F_HIGHDMA;
@@ -13251,8 +13251,8 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
13251 } 13251 }
13252 } 13252 }
13253 } 13253 }
13254 if (err || dma_mask == DMA_32BIT_MASK) { 13254 if (err || dma_mask == DMA_BIT_MASK(32)) {
13255 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 13255 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
13256 if (err) { 13256 if (err) {
13257 printk(KERN_ERR PFX "No usable DMA configuration, " 13257 printk(KERN_ERR PFX "No usable DMA configuration, "
13258 "aborting.\n"); 13258 "aborting.\n");
@@ -13393,8 +13393,8 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
13393 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) != 0); 13393 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) != 0);
13394 printk(KERN_INFO "%s: dma_rwctrl[%08x] dma_mask[%d-bit]\n", 13394 printk(KERN_INFO "%s: dma_rwctrl[%08x] dma_mask[%d-bit]\n",
13395 dev->name, tp->dma_rwctrl, 13395 dev->name, tp->dma_rwctrl,
13396 (pdev->dma_mask == DMA_32BIT_MASK) ? 32 : 13396 (pdev->dma_mask == DMA_BIT_MASK(32)) ? 32 :
13397 (((u64) pdev->dma_mask == DMA_40BIT_MASK) ? 40 : 64)); 13397 (((u64) pdev->dma_mask == DMA_BIT_MASK(40)) ? 40 : 64));
13398 13398
13399 return 0; 13399 return 0;
13400 13400
diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c
index 68b967b585aa..aa6964922d5e 100644
--- a/drivers/net/tlan.c
+++ b/drivers/net/tlan.c
@@ -570,7 +570,7 @@ static int __devinit TLan_probe1(struct pci_dev *pdev,
570 570
571 priv->adapter = &board_info[ent->driver_data]; 571 priv->adapter = &board_info[ent->driver_data];
572 572
573 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 573 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
574 if (rc) { 574 if (rc) {
575 printk(KERN_ERR "TLAN: No suitable PCI mapping available.\n"); 575 printk(KERN_ERR "TLAN: No suitable PCI mapping available.\n");
576 goto err_out_free_dev; 576 goto err_out_free_dev;
diff --git a/drivers/net/tokenring/lanstreamer.c b/drivers/net/tokenring/lanstreamer.c
index f309b8f703bd..2e70ee8f1459 100644
--- a/drivers/net/tokenring/lanstreamer.c
+++ b/drivers/net/tokenring/lanstreamer.c
@@ -267,7 +267,7 @@ static int __devinit streamer_init_one(struct pci_dev *pdev,
267#endif 267#endif
268#endif 268#endif
269 269
270 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 270 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
271 if (rc) { 271 if (rc) {
272 printk(KERN_ERR "%s: No suitable PCI mapping available.\n", 272 printk(KERN_ERR "%s: No suitable PCI mapping available.\n",
273 dev->name); 273 dev->name);
diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
index e2c9d0f5a755..f2e669974c78 100644
--- a/drivers/net/tulip/dmfe.c
+++ b/drivers/net/tulip/dmfe.c
@@ -383,7 +383,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
383 return -ENOMEM; 383 return -ENOMEM;
384 SET_NETDEV_DEV(dev, &pdev->dev); 384 SET_NETDEV_DEV(dev, &pdev->dev);
385 385
386 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 386 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
387 printk(KERN_WARNING DRV_NAME 387 printk(KERN_WARNING DRV_NAME
388 ": 32-bit PCI DMA not available.\n"); 388 ": 32-bit PCI DMA not available.\n");
389 err = -ENODEV; 389 err = -ENODEV;
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c
index c227db079621..8761a5a5bd79 100644
--- a/drivers/net/tulip/uli526x.c
+++ b/drivers/net/tulip/uli526x.c
@@ -282,7 +282,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
282 return -ENOMEM; 282 return -ENOMEM;
283 SET_NETDEV_DEV(dev, &pdev->dev); 283 SET_NETDEV_DEV(dev, &pdev->dev);
284 284
285 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 285 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
286 printk(KERN_WARNING DRV_NAME ": 32-bit PCI DMA not available.\n"); 286 printk(KERN_WARNING DRV_NAME ": 32-bit PCI DMA not available.\n");
287 err = -ENODEV; 287 err = -ENODEV;
288 goto err_out_free; 288 goto err_out_free;
diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c
index c61a01b029af..264e61404f34 100644
--- a/drivers/net/tulip/winbond-840.c
+++ b/drivers/net/tulip/winbond-840.c
@@ -375,7 +375,7 @@ static int __devinit w840_probe1 (struct pci_dev *pdev,
375 375
376 irq = pdev->irq; 376 irq = pdev->irq;
377 377
378 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 378 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
379 printk(KERN_WARNING "Winbond-840: Device %s disabled due to DMA limitations.\n", 379 printk(KERN_WARNING "Winbond-840: Device %s disabled due to DMA limitations.\n",
380 pci_name(pdev)); 380 pci_name(pdev));
381 return -EIO; 381 return -EIO;
diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c
index 9dd4f76a2ff5..cf25eb41b1ce 100644
--- a/drivers/net/typhoon.c
+++ b/drivers/net/typhoon.c
@@ -2406,7 +2406,7 @@ typhoon_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2406 goto error_out_disable; 2406 goto error_out_disable;
2407 } 2407 }
2408 2408
2409 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 2409 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2410 if(err < 0) { 2410 if(err < 0) {
2411 printk(ERR_PFX "%s: No usable DMA configuration\n", 2411 printk(ERR_PFX "%s: No usable DMA configuration\n",
2412 pci_name(pdev)); 2412 pci_name(pdev));
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 659654f45880..f3a2fce6166c 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1180,7 +1180,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
1180#if 0 1180#if 0
1181// dma_supported() is deeply broken on almost all architectures 1181// dma_supported() is deeply broken on almost all architectures
1182 // possible with some EHCI controllers 1182 // possible with some EHCI controllers
1183 if (dma_supported (&udev->dev, DMA_64BIT_MASK)) 1183 if (dma_supported (&udev->dev, DMA_BIT_MASK(64)))
1184 net->features |= NETIF_F_HIGHDMA; 1184 net->features |= NETIF_F_HIGHDMA;
1185#endif 1185#endif
1186 1186
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
index 880eaf07413b..45daba726b66 100644
--- a/drivers/net/via-rhine.c
+++ b/drivers/net/via-rhine.c
@@ -686,7 +686,7 @@ static int __devinit rhine_init_one(struct pci_dev *pdev,
686 goto err_out; 686 goto err_out;
687 687
688 /* this should always be supported */ 688 /* this should always be supported */
689 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 689 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
690 if (rc) { 690 if (rc) {
691 printk(KERN_ERR "32-bit PCI DMA addresses not supported by " 691 printk(KERN_ERR "32-bit PCI DMA addresses not supported by "
692 "the card!?\n"); 692 "the card!?\n");
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index a6f1e19159d8..9c82a39497e5 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -575,8 +575,9 @@ static int virtnet_set_mac_address(struct net_device *dev, void *p)
575 if (ret) 575 if (ret)
576 return ret; 576 return ret;
577 577
578 vdev->config->set(vdev, offsetof(struct virtio_net_config, mac), 578 if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
579 dev->dev_addr, dev->addr_len); 579 vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
580 dev->dev_addr, dev->addr_len);
580 581
581 return 0; 582 return 0;
582} 583}
@@ -876,11 +877,8 @@ static int virtnet_probe(struct virtio_device *vdev)
876 vdev->config->get(vdev, 877 vdev->config->get(vdev,
877 offsetof(struct virtio_net_config, mac), 878 offsetof(struct virtio_net_config, mac),
878 dev->dev_addr, dev->addr_len); 879 dev->dev_addr, dev->addr_len);
879 } else { 880 } else
880 random_ether_addr(dev->dev_addr); 881 random_ether_addr(dev->dev_addr);
881 vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
882 dev->dev_addr, dev->addr_len);
883 }
884 882
885 /* Set up our device-specific information */ 883 /* Set up our device-specific information */
886 vi = netdev_priv(dev); 884 vi = netdev_priv(dev);
diff --git a/drivers/net/vxge/vxge-main.c b/drivers/net/vxge/vxge-main.c
index 61ef16118157..b7f08f3e524b 100644
--- a/drivers/net/vxge/vxge-main.c
+++ b/drivers/net/vxge/vxge-main.c
@@ -43,6 +43,7 @@
43 43
44#include <linux/if_vlan.h> 44#include <linux/if_vlan.h>
45#include <linux/pci.h> 45#include <linux/pci.h>
46#include <linux/tcp.h>
46#include <net/ip.h> 47#include <net/ip.h>
47#include <linux/netdevice.h> 48#include <linux/netdevice.h>
48#include <linux/etherdevice.h> 49#include <linux/etherdevice.h>
diff --git a/drivers/net/wan/wanxl.c b/drivers/net/wan/wanxl.c
index 887acb0dc807..8130b79a8a99 100644
--- a/drivers/net/wan/wanxl.c
+++ b/drivers/net/wan/wanxl.c
@@ -586,8 +586,8 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
586 We set both dma_mask and consistent_dma_mask to 28 bits 586 We set both dma_mask and consistent_dma_mask to 28 bits
587 and pray pci_alloc_consistent() will use this info. It should 587 and pray pci_alloc_consistent() will use this info. It should
588 work on most platforms */ 588 work on most platforms */
589 if (pci_set_consistent_dma_mask(pdev, DMA_28BIT_MASK) || 589 if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(28)) ||
590 pci_set_dma_mask(pdev, DMA_28BIT_MASK)) { 590 pci_set_dma_mask(pdev, DMA_BIT_MASK(28))) {
591 printk(KERN_ERR "wanXL: No usable DMA configuration\n"); 591 printk(KERN_ERR "wanXL: No usable DMA configuration\n");
592 return -EIO; 592 return -EIO;
593 } 593 }
@@ -633,8 +633,8 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
633 /* FIXME when PCI/DMA subsystems are fixed. 633 /* FIXME when PCI/DMA subsystems are fixed.
634 We set both dma_mask and consistent_dma_mask back to 32 bits 634 We set both dma_mask and consistent_dma_mask back to 32 bits
635 to indicate the card can do 32-bit DMA addressing */ 635 to indicate the card can do 32-bit DMA addressing */
636 if (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) || 636 if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) ||
637 pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 637 pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
638 printk(KERN_ERR "wanXL: No usable DMA configuration\n"); 638 printk(KERN_ERR "wanXL: No usable DMA configuration\n");
639 wanxl_pci_remove_one(pdev); 639 wanxl_pci_remove_one(pdev);
640 return -EIO; 640 return -EIO;
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index fc0897fb2239..f71821795018 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -1804,8 +1804,8 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
1804 return err; /* someone else grabbed it? don't disable it */ 1804 return err; /* someone else grabbed it? don't disable it */
1805 } 1805 }
1806 1806
1807 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || 1807 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||
1808 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 1808 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
1809 printk(KERN_ERR "%s (adm8211): No suitable DMA available\n", 1809 printk(KERN_ERR "%s (adm8211): No suitable DMA available\n",
1810 pci_name(pdev)); 1810 pci_name(pdev));
1811 goto err_free_reg; 1811 goto err_free_reg;
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
index 5d57d774e466..a08bc8a4fb69 100644
--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -445,7 +445,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
445 } 445 }
446 446
447 /* XXX 32-bit addressing only */ 447 /* XXX 32-bit addressing only */
448 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 448 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
449 if (ret) { 449 if (ret) {
450 dev_err(&pdev->dev, "32-bit DMA not available\n"); 450 dev_err(&pdev->dev, "32-bit DMA not available\n");
451 goto err_dis; 451 goto err_dis;
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
index 0cc804d0a214..e228c1de6e11 100644
--- a/drivers/net/wireless/b43/dma.c
+++ b/drivers/net/wireless/b43/dma.c
@@ -772,23 +772,23 @@ static u64 supported_dma_mask(struct b43_wldev *dev)
772 772
773 tmp = b43_read32(dev, SSB_TMSHIGH); 773 tmp = b43_read32(dev, SSB_TMSHIGH);
774 if (tmp & SSB_TMSHIGH_DMA64) 774 if (tmp & SSB_TMSHIGH_DMA64)
775 return DMA_64BIT_MASK; 775 return DMA_BIT_MASK(64);
776 mmio_base = b43_dmacontroller_base(0, 0); 776 mmio_base = b43_dmacontroller_base(0, 0);
777 b43_write32(dev, mmio_base + B43_DMA32_TXCTL, B43_DMA32_TXADDREXT_MASK); 777 b43_write32(dev, mmio_base + B43_DMA32_TXCTL, B43_DMA32_TXADDREXT_MASK);
778 tmp = b43_read32(dev, mmio_base + B43_DMA32_TXCTL); 778 tmp = b43_read32(dev, mmio_base + B43_DMA32_TXCTL);
779 if (tmp & B43_DMA32_TXADDREXT_MASK) 779 if (tmp & B43_DMA32_TXADDREXT_MASK)
780 return DMA_32BIT_MASK; 780 return DMA_BIT_MASK(32);
781 781
782 return DMA_30BIT_MASK; 782 return DMA_BIT_MASK(30);
783} 783}
784 784
785static enum b43_dmatype dma_mask_to_engine_type(u64 dmamask) 785static enum b43_dmatype dma_mask_to_engine_type(u64 dmamask)
786{ 786{
787 if (dmamask == DMA_30BIT_MASK) 787 if (dmamask == DMA_BIT_MASK(30))
788 return B43_DMA_30BIT; 788 return B43_DMA_30BIT;
789 if (dmamask == DMA_32BIT_MASK) 789 if (dmamask == DMA_BIT_MASK(32))
790 return B43_DMA_32BIT; 790 return B43_DMA_32BIT;
791 if (dmamask == DMA_64BIT_MASK) 791 if (dmamask == DMA_BIT_MASK(64))
792 return B43_DMA_64BIT; 792 return B43_DMA_64BIT;
793 B43_WARN_ON(1); 793 B43_WARN_ON(1);
794 return B43_DMA_30BIT; 794 return B43_DMA_30BIT;
@@ -999,13 +999,13 @@ static int b43_dma_set_mask(struct b43_wldev *dev, u64 mask)
999 err = ssb_dma_set_mask(dev->dev, mask); 999 err = ssb_dma_set_mask(dev->dev, mask);
1000 if (!err) 1000 if (!err)
1001 break; 1001 break;
1002 if (mask == DMA_64BIT_MASK) { 1002 if (mask == DMA_BIT_MASK(64)) {
1003 mask = DMA_32BIT_MASK; 1003 mask = DMA_BIT_MASK(32);
1004 fallback = 1; 1004 fallback = 1;
1005 continue; 1005 continue;
1006 } 1006 }
1007 if (mask == DMA_32BIT_MASK) { 1007 if (mask == DMA_BIT_MASK(32)) {
1008 mask = DMA_30BIT_MASK; 1008 mask = DMA_BIT_MASK(30);
1009 fallback = 1; 1009 fallback = 1;
1010 continue; 1010 continue;
1011 } 1011 }
diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c
index 3649fc367098..2f90fb9f5367 100644
--- a/drivers/net/wireless/b43legacy/dma.c
+++ b/drivers/net/wireless/b43legacy/dma.c
@@ -846,7 +846,7 @@ static u64 supported_dma_mask(struct b43legacy_wldev *dev)
846 846
847 tmp = b43legacy_read32(dev, SSB_TMSHIGH); 847 tmp = b43legacy_read32(dev, SSB_TMSHIGH);
848 if (tmp & SSB_TMSHIGH_DMA64) 848 if (tmp & SSB_TMSHIGH_DMA64)
849 return DMA_64BIT_MASK; 849 return DMA_BIT_MASK(64);
850 mmio_base = b43legacy_dmacontroller_base(0, 0); 850 mmio_base = b43legacy_dmacontroller_base(0, 0);
851 b43legacy_write32(dev, 851 b43legacy_write32(dev,
852 mmio_base + B43legacy_DMA32_TXCTL, 852 mmio_base + B43legacy_DMA32_TXCTL,
@@ -854,18 +854,18 @@ static u64 supported_dma_mask(struct b43legacy_wldev *dev)
854 tmp = b43legacy_read32(dev, mmio_base + 854 tmp = b43legacy_read32(dev, mmio_base +
855 B43legacy_DMA32_TXCTL); 855 B43legacy_DMA32_TXCTL);
856 if (tmp & B43legacy_DMA32_TXADDREXT_MASK) 856 if (tmp & B43legacy_DMA32_TXADDREXT_MASK)
857 return DMA_32BIT_MASK; 857 return DMA_BIT_MASK(32);
858 858
859 return DMA_30BIT_MASK; 859 return DMA_BIT_MASK(30);
860} 860}
861 861
862static enum b43legacy_dmatype dma_mask_to_engine_type(u64 dmamask) 862static enum b43legacy_dmatype dma_mask_to_engine_type(u64 dmamask)
863{ 863{
864 if (dmamask == DMA_30BIT_MASK) 864 if (dmamask == DMA_BIT_MASK(30))
865 return B43legacy_DMA_30BIT; 865 return B43legacy_DMA_30BIT;
866 if (dmamask == DMA_32BIT_MASK) 866 if (dmamask == DMA_BIT_MASK(32))
867 return B43legacy_DMA_32BIT; 867 return B43legacy_DMA_32BIT;
868 if (dmamask == DMA_64BIT_MASK) 868 if (dmamask == DMA_BIT_MASK(64))
869 return B43legacy_DMA_64BIT; 869 return B43legacy_DMA_64BIT;
870 B43legacy_WARN_ON(1); 870 B43legacy_WARN_ON(1);
871 return B43legacy_DMA_30BIT; 871 return B43legacy_DMA_30BIT;
@@ -1042,13 +1042,13 @@ static int b43legacy_dma_set_mask(struct b43legacy_wldev *dev, u64 mask)
1042 err = ssb_dma_set_mask(dev->dev, mask); 1042 err = ssb_dma_set_mask(dev->dev, mask);
1043 if (!err) 1043 if (!err)
1044 break; 1044 break;
1045 if (mask == DMA_64BIT_MASK) { 1045 if (mask == DMA_BIT_MASK(64)) {
1046 mask = DMA_32BIT_MASK; 1046 mask = DMA_BIT_MASK(32);
1047 fallback = 1; 1047 fallback = 1;
1048 continue; 1048 continue;
1049 } 1049 }
1050 if (mask == DMA_32BIT_MASK) { 1050 if (mask == DMA_BIT_MASK(32)) {
1051 mask = DMA_30BIT_MASK; 1051 mask = DMA_BIT_MASK(30);
1052 fallback = 1; 1052 fallback = 1;
1053 continue; 1053 continue;
1054 } 1054 }
diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c
index f4e963ba768b..97e5647ff050 100644
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
@@ -6207,7 +6207,7 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev,
6207 pci_set_master(pci_dev); 6207 pci_set_master(pci_dev);
6208 pci_set_drvdata(pci_dev, priv); 6208 pci_set_drvdata(pci_dev, priv);
6209 6209
6210 err = pci_set_dma_mask(pci_dev, DMA_32BIT_MASK); 6210 err = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32));
6211 if (err) { 6211 if (err) {
6212 printk(KERN_WARNING DRV_NAME 6212 printk(KERN_WARNING DRV_NAME
6213 "Error calling pci_set_dma_mask.\n"); 6213 "Error calling pci_set_dma_mask.\n");
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c
index e17a4593e1f5..bd4dbcfe1bbe 100644
--- a/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c
@@ -11631,9 +11631,9 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev,
11631 11631
11632 pci_set_master(pdev); 11632 pci_set_master(pdev);
11633 11633
11634 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 11634 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
11635 if (!err) 11635 if (!err)
11636 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 11636 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
11637 if (err) { 11637 if (err) {
11638 printk(KERN_WARNING DRV_NAME ": No suitable DMA available.\n"); 11638 printk(KERN_WARNING DRV_NAME ": No suitable DMA available.\n");
11639 goto out_pci_disable_device; 11639 goto out_pci_disable_device;
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 9d5f97dd7c73..ce729281ff62 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -4998,9 +4998,9 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
4998 4998
4999 pci_set_master(pdev); 4999 pci_set_master(pdev);
5000 5000
5001 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 5001 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
5002 if (!err) 5002 if (!err)
5003 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 5003 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
5004 if (err) { 5004 if (err) {
5005 IWL_WARN(priv, "No suitable DMA available.\n"); 5005 IWL_WARN(priv, "No suitable DMA available.\n");
5006 goto out_pci_disable_device; 5006 goto out_pci_disable_device;
diff --git a/drivers/net/wireless/prism54/islpci_hotplug.c b/drivers/net/wireless/prism54/islpci_hotplug.c
index 9a72b1e3e163..30876728d7e6 100644
--- a/drivers/net/wireless/prism54/islpci_hotplug.c
+++ b/drivers/net/wireless/prism54/islpci_hotplug.c
@@ -120,7 +120,7 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id)
120 } 120 }
121 121
122 /* enable PCI DMA */ 122 /* enable PCI DMA */
123 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 123 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
124 printk(KERN_ERR "%s: 32-bit PCI DMA not supported", DRV_NAME); 124 printk(KERN_ERR "%s: 32-bit PCI DMA not supported", DRV_NAME);
125 goto do_pci_disable_device; 125 goto do_pci_disable_device;
126 } 126 }
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
index e616c20d4a78..43fa0f849003 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
@@ -288,7 +288,7 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
288 if (pci_set_mwi(pci_dev)) 288 if (pci_set_mwi(pci_dev))
289 ERROR_PROBE("MWI not available.\n"); 289 ERROR_PROBE("MWI not available.\n");
290 290
291 if (dma_set_mask(&pci_dev->dev, DMA_32BIT_MASK)) { 291 if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) {
292 ERROR_PROBE("PCI DMA not supported.\n"); 292 ERROR_PROBE("PCI DMA not supported.\n");
293 retval = -EIO; 293 retval = -EIO;
294 goto exit_disable_device; 294 goto exit_disable_device;
diff --git a/drivers/parport/parport_cs.c b/drivers/parport/parport_cs.c
index 0cd5fbc7f2c2..8fdfa4f537a6 100644
--- a/drivers/parport/parport_cs.c
+++ b/drivers/parport/parport_cs.c
@@ -43,6 +43,7 @@
43#include <linux/timer.h> 43#include <linux/timer.h>
44#include <linux/ioport.h> 44#include <linux/ioport.h>
45#include <linux/major.h> 45#include <linux/major.h>
46#include <linux/interrupt.h>
46 47
47#include <linux/parport.h> 48#include <linux/parport.h>
48#include <linux/parport_pc.h> 49#include <linux/parport_pc.h>
@@ -192,7 +193,7 @@ static int parport_config(struct pcmcia_device *link)
192 193
193 p = parport_pc_probe_port(link->io.BasePort1, link->io.BasePort2, 194 p = parport_pc_probe_port(link->io.BasePort1, link->io.BasePort2,
194 link->irq.AssignedIRQ, PARPORT_DMA_NONE, 195 link->irq.AssignedIRQ, PARPORT_DMA_NONE,
195 &link->dev); 196 &link->dev, IRQF_SHARED);
196 if (p == NULL) { 197 if (p == NULL) {
197 printk(KERN_NOTICE "parport_cs: parport_pc_probe_port() at " 198 printk(KERN_NOTICE "parport_cs: parport_pc_probe_port() at "
198 "0x%3x, irq %u failed\n", link->io.BasePort1, 199 "0x%3x, irq %u failed\n", link->io.BasePort1,
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index 96f3bdf0ec4b..4e63cc9e2778 100644
--- a/drivers/parport/parport_pc.c
+++ b/drivers/parport/parport_pc.c
@@ -2170,10 +2170,11 @@ static int parport_dma_probe (struct parport *p)
2170static LIST_HEAD(ports_list); 2170static LIST_HEAD(ports_list);
2171static DEFINE_SPINLOCK(ports_lock); 2171static DEFINE_SPINLOCK(ports_lock);
2172 2172
2173struct parport *parport_pc_probe_port (unsigned long int base, 2173struct parport *parport_pc_probe_port(unsigned long int base,
2174 unsigned long int base_hi, 2174 unsigned long int base_hi,
2175 int irq, int dma, 2175 int irq, int dma,
2176 struct device *dev) 2176 struct device *dev,
2177 int irqflags)
2177{ 2178{
2178 struct parport_pc_private *priv; 2179 struct parport_pc_private *priv;
2179 struct parport_operations *ops; 2180 struct parport_operations *ops;
@@ -2194,11 +2195,11 @@ struct parport *parport_pc_probe_port (unsigned long int base,
2194 dev = &pdev->dev; 2195 dev = &pdev->dev;
2195 } 2196 }
2196 2197
2197 ops = kmalloc(sizeof (struct parport_operations), GFP_KERNEL); 2198 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL);
2198 if (!ops) 2199 if (!ops)
2199 goto out1; 2200 goto out1;
2200 2201
2201 priv = kmalloc (sizeof (struct parport_pc_private), GFP_KERNEL); 2202 priv = kmalloc(sizeof(struct parport_pc_private), GFP_KERNEL);
2202 if (!priv) 2203 if (!priv)
2203 goto out2; 2204 goto out2;
2204 2205
@@ -2325,8 +2326,8 @@ struct parport *parport_pc_probe_port (unsigned long int base,
2325 EPP_res = NULL; 2326 EPP_res = NULL;
2326 } 2327 }
2327 if (p->irq != PARPORT_IRQ_NONE) { 2328 if (p->irq != PARPORT_IRQ_NONE) {
2328 if (request_irq (p->irq, parport_irq_handler, 2329 if (request_irq(p->irq, parport_irq_handler,
2329 0, p->name, p)) { 2330 irqflags, p->name, p)) {
2330 printk (KERN_WARNING "%s: irq %d in use, " 2331 printk (KERN_WARNING "%s: irq %d in use, "
2331 "resorting to polled operation\n", 2332 "resorting to polled operation\n",
2332 p->name, p->irq); 2333 p->name, p->irq);
@@ -2530,7 +2531,7 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
2530 */ 2531 */
2531 release_resource(base_res); 2532 release_resource(base_res);
2532 if (parport_pc_probe_port (ite8872_lpt, ite8872_lpthi, 2533 if (parport_pc_probe_port (ite8872_lpt, ite8872_lpthi,
2533 irq, PARPORT_DMA_NONE, &pdev->dev)) { 2534 irq, PARPORT_DMA_NONE, &pdev->dev, 0)) {
2534 printk (KERN_INFO 2535 printk (KERN_INFO
2535 "parport_pc: ITE 8872 parallel port: io=0x%X", 2536 "parport_pc: ITE 8872 parallel port: io=0x%X",
2536 ite8872_lpt); 2537 ite8872_lpt);
@@ -2713,7 +2714,7 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
2713 } 2714 }
2714 2715
2715 /* finally, do the probe with values obtained */ 2716 /* finally, do the probe with values obtained */
2716 if (parport_pc_probe_port (port1, port2, irq, dma, &pdev->dev)) { 2717 if (parport_pc_probe_port (port1, port2, irq, dma, &pdev->dev, 0)) {
2717 printk (KERN_INFO 2718 printk (KERN_INFO
2718 "parport_pc: VIA parallel port: io=0x%X", port1); 2719 "parport_pc: VIA parallel port: io=0x%X", port1);
2719 if (irq != PARPORT_IRQ_NONE) 2720 if (irq != PARPORT_IRQ_NONE)
@@ -3018,6 +3019,7 @@ static int parport_pc_pci_probe (struct pci_dev *dev,
3018 for (n = 0; n < cards[i].numports; n++) { 3019 for (n = 0; n < cards[i].numports; n++) {
3019 int lo = cards[i].addr[n].lo; 3020 int lo = cards[i].addr[n].lo;
3020 int hi = cards[i].addr[n].hi; 3021 int hi = cards[i].addr[n].hi;
3022 int irq;
3021 unsigned long io_lo, io_hi; 3023 unsigned long io_lo, io_hi;
3022 io_lo = pci_resource_start (dev, lo); 3024 io_lo = pci_resource_start (dev, lo);
3023 io_hi = 0; 3025 io_hi = 0;
@@ -3028,13 +3030,25 @@ static int parport_pc_pci_probe (struct pci_dev *dev,
3028 "hi" as an offset (see SYBA 3030 "hi" as an offset (see SYBA
3029 def.) */ 3031 def.) */
3030 /* TODO: test if sharing interrupts works */ 3032 /* TODO: test if sharing interrupts works */
3031 printk (KERN_DEBUG "PCI parallel port detected: %04x:%04x, " 3033 irq = dev->irq;
3032 "I/O at %#lx(%#lx)\n", 3034 if (irq == IRQ_NONE) {
3033 parport_pc_pci_tbl[i + last_sio].vendor, 3035 printk (KERN_DEBUG
3034 parport_pc_pci_tbl[i + last_sio].device, io_lo, io_hi); 3036 "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx)\n",
3037 parport_pc_pci_tbl[i + last_sio].vendor,
3038 parport_pc_pci_tbl[i + last_sio].device,
3039 io_lo, io_hi);
3040 irq = PARPORT_IRQ_NONE;
3041 } else {
3042 printk (KERN_DEBUG
3043 "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx), IRQ %d\n",
3044 parport_pc_pci_tbl[i + last_sio].vendor,
3045 parport_pc_pci_tbl[i + last_sio].device,
3046 io_lo, io_hi, irq);
3047 }
3035 data->ports[count] = 3048 data->ports[count] =
3036 parport_pc_probe_port (io_lo, io_hi, PARPORT_IRQ_NONE, 3049 parport_pc_probe_port(io_lo, io_hi, irq,
3037 PARPORT_DMA_NONE, &dev->dev); 3050 PARPORT_DMA_NONE, &dev->dev,
3051 IRQF_SHARED);
3038 if (data->ports[count]) 3052 if (data->ports[count])
3039 count++; 3053 count++;
3040 } 3054 }
@@ -3143,7 +3157,8 @@ static int parport_pc_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id
3143 dma = PARPORT_DMA_NONE; 3157 dma = PARPORT_DMA_NONE;
3144 3158
3145 dev_info(&dev->dev, "reported by %s\n", dev->protocol->name); 3159 dev_info(&dev->dev, "reported by %s\n", dev->protocol->name);
3146 if (!(pdata = parport_pc_probe_port (io_lo, io_hi, irq, dma, &dev->dev))) 3160 if (!(pdata = parport_pc_probe_port(io_lo, io_hi,
3161 irq, dma, &dev->dev, 0)))
3147 return -ENODEV; 3162 return -ENODEV;
3148 3163
3149 pnp_set_drvdata(dev,pdata); 3164 pnp_set_drvdata(dev,pdata);
@@ -3192,11 +3207,11 @@ parport_pc_find_isa_ports (int autoirq, int autodma)
3192{ 3207{
3193 int count = 0; 3208 int count = 0;
3194 3209
3195 if (parport_pc_probe_port(0x3bc, 0x7bc, autoirq, autodma, NULL)) 3210 if (parport_pc_probe_port(0x3bc, 0x7bc, autoirq, autodma, NULL, 0))
3196 count++; 3211 count++;
3197 if (parport_pc_probe_port(0x378, 0x778, autoirq, autodma, NULL)) 3212 if (parport_pc_probe_port(0x378, 0x778, autoirq, autodma, NULL, 0))
3198 count++; 3213 count++;
3199 if (parport_pc_probe_port(0x278, 0x678, autoirq, autodma, NULL)) 3214 if (parport_pc_probe_port(0x278, 0x678, autoirq, autodma, NULL, 0))
3200 count++; 3215 count++;
3201 3216
3202 return count; 3217 return count;
@@ -3481,7 +3496,7 @@ static int __init parport_pc_init(void)
3481 if ((io_hi[i]) == PARPORT_IOHI_AUTO) 3496 if ((io_hi[i]) == PARPORT_IOHI_AUTO)
3482 io_hi[i] = 0x400 + io[i]; 3497 io_hi[i] = 0x400 + io[i];
3483 parport_pc_probe_port(io[i], io_hi[i], 3498 parport_pc_probe_port(io[i], io_hi[i],
3484 irqval[i], dmaval[i], NULL); 3499 irqval[i], dmaval[i], NULL, 0);
3485 } 3500 }
3486 } else 3501 } else
3487 parport_pc_find_ports (irqval[0], dmaval[0]); 3502 parport_pc_find_ports (irqval[0], dmaval[0]);
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c
index f3492110b1ad..c3bb84ac931e 100644
--- a/drivers/parport/parport_serial.c
+++ b/drivers/parport/parport_serial.c
@@ -21,6 +21,7 @@
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/init.h> 22#include <linux/init.h>
23#include <linux/pci.h> 23#include <linux/pci.h>
24#include <linux/interrupt.h>
24#include <linux/parport.h> 25#include <linux/parport.h>
25#include <linux/parport_pc.h> 26#include <linux/parport_pc.h>
26#include <linux/8250_pci.h> 27#include <linux/8250_pci.h>
@@ -311,6 +312,7 @@ static int __devinit parport_register (struct pci_dev *dev,
311 int lo = card->addr[n].lo; 312 int lo = card->addr[n].lo;
312 int hi = card->addr[n].hi; 313 int hi = card->addr[n].hi;
313 unsigned long io_lo, io_hi; 314 unsigned long io_lo, io_hi;
315 int irq;
314 316
315 if (priv->num_par == ARRAY_SIZE (priv->port)) { 317 if (priv->num_par == ARRAY_SIZE (priv->port)) {
316 printk (KERN_WARNING 318 printk (KERN_WARNING
@@ -329,10 +331,20 @@ static int __devinit parport_register (struct pci_dev *dev,
329 "hi" as an offset (see SYBA 331 "hi" as an offset (see SYBA
330 def.) */ 332 def.) */
331 /* TODO: test if sharing interrupts works */ 333 /* TODO: test if sharing interrupts works */
332 dev_dbg(&dev->dev, "PCI parallel port detected: I/O at " 334 irq = dev->irq;
333 "%#lx(%#lx)\n", io_lo, io_hi); 335 if (irq == IRQ_NONE) {
334 port = parport_pc_probe_port (io_lo, io_hi, PARPORT_IRQ_NONE, 336 dev_dbg(&dev->dev,
335 PARPORT_DMA_NONE, &dev->dev); 337 "PCI parallel port detected: I/O at %#lx(%#lx)\n",
338 io_lo, io_hi);
339 irq = PARPORT_IRQ_NONE;
340 } else {
341 dev_dbg(&dev->dev,
342 "PCI parallel port detected: I/O at %#lx(%#lx), IRQ %d\n",
343 io_lo, io_hi, irq);
344 irq = PARPORT_IRQ_NONE;
345 }
346 port = parport_pc_probe_port (io_lo, io_hi, irq,
347 PARPORT_DMA_NONE, &dev->dev, IRQF_SHARED);
336 if (port) { 348 if (port) {
337 priv->port[priv->num_par++] = port; 349 priv->port[priv->num_par++] = port;
338 success = 1; 350 success = 1;
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
index d313039e2fdf..25a00ce4f24d 100644
--- a/drivers/pci/dmar.c
+++ b/drivers/pci/dmar.c
@@ -180,6 +180,7 @@ dmar_parse_one_drhd(struct acpi_dmar_header *header)
180 dmaru->hdr = header; 180 dmaru->hdr = header;
181 drhd = (struct acpi_dmar_hardware_unit *)header; 181 drhd = (struct acpi_dmar_hardware_unit *)header;
182 dmaru->reg_base_addr = drhd->address; 182 dmaru->reg_base_addr = drhd->address;
183 dmaru->segment = drhd->segment;
183 dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */ 184 dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */
184 185
185 ret = alloc_iommu(dmaru); 186 ret = alloc_iommu(dmaru);
@@ -790,14 +791,41 @@ end:
790} 791}
791 792
792/* 793/*
794 * Enable queued invalidation.
795 */
796static void __dmar_enable_qi(struct intel_iommu *iommu)
797{
798 u32 cmd, sts;
799 unsigned long flags;
800 struct q_inval *qi = iommu->qi;
801
802 qi->free_head = qi->free_tail = 0;
803 qi->free_cnt = QI_LENGTH;
804
805 spin_lock_irqsave(&iommu->register_lock, flags);
806
807 /* write zero to the tail reg */
808 writel(0, iommu->reg + DMAR_IQT_REG);
809
810 dmar_writeq(iommu->reg + DMAR_IQA_REG, virt_to_phys(qi->desc));
811
812 cmd = iommu->gcmd | DMA_GCMD_QIE;
813 iommu->gcmd |= DMA_GCMD_QIE;
814 writel(cmd, iommu->reg + DMAR_GCMD_REG);
815
816 /* Make sure hardware complete it */
817 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts);
818
819 spin_unlock_irqrestore(&iommu->register_lock, flags);
820}
821
822/*
793 * Enable Queued Invalidation interface. This is a must to support 823 * Enable Queued Invalidation interface. This is a must to support
794 * interrupt-remapping. Also used by DMA-remapping, which replaces 824 * interrupt-remapping. Also used by DMA-remapping, which replaces
795 * register based IOTLB invalidation. 825 * register based IOTLB invalidation.
796 */ 826 */
797int dmar_enable_qi(struct intel_iommu *iommu) 827int dmar_enable_qi(struct intel_iommu *iommu)
798{ 828{
799 u32 cmd, sts;
800 unsigned long flags;
801 struct q_inval *qi; 829 struct q_inval *qi;
802 830
803 if (!ecap_qis(iommu->ecap)) 831 if (!ecap_qis(iommu->ecap))
@@ -835,19 +863,7 @@ int dmar_enable_qi(struct intel_iommu *iommu)
835 863
836 spin_lock_init(&qi->q_lock); 864 spin_lock_init(&qi->q_lock);
837 865
838 spin_lock_irqsave(&iommu->register_lock, flags); 866 __dmar_enable_qi(iommu);
839 /* write zero to the tail reg */
840 writel(0, iommu->reg + DMAR_IQT_REG);
841
842 dmar_writeq(iommu->reg + DMAR_IQA_REG, virt_to_phys(qi->desc));
843
844 cmd = iommu->gcmd | DMA_GCMD_QIE;
845 iommu->gcmd |= DMA_GCMD_QIE;
846 writel(cmd, iommu->reg + DMAR_GCMD_REG);
847
848 /* Make sure hardware complete it */
849 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts);
850 spin_unlock_irqrestore(&iommu->register_lock, flags);
851 867
852 return 0; 868 return 0;
853} 869}
@@ -1102,3 +1118,28 @@ int __init enable_drhd_fault_handling(void)
1102 1118
1103 return 0; 1119 return 0;
1104} 1120}
1121
1122/*
1123 * Re-enable Queued Invalidation interface.
1124 */
1125int dmar_reenable_qi(struct intel_iommu *iommu)
1126{
1127 if (!ecap_qis(iommu->ecap))
1128 return -ENOENT;
1129
1130 if (!iommu->qi)
1131 return -ENOENT;
1132
1133 /*
1134 * First disable queued invalidation.
1135 */
1136 dmar_disable_qi(iommu);
1137 /*
1138 * Then enable queued invalidation again. Since there is no pending
1139 * invalidation requests now, it's safe to re-enable queued
1140 * invalidation.
1141 */
1142 __dmar_enable_qi(iommu);
1143
1144 return 0;
1145}
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index 23e56a564e05..fb3a3f3fca7a 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -36,6 +36,7 @@
36#include <linux/iova.h> 36#include <linux/iova.h>
37#include <linux/iommu.h> 37#include <linux/iommu.h>
38#include <linux/intel-iommu.h> 38#include <linux/intel-iommu.h>
39#include <linux/sysdev.h>
39#include <asm/cacheflush.h> 40#include <asm/cacheflush.h>
40#include <asm/iommu.h> 41#include <asm/iommu.h>
41#include "pci.h" 42#include "pci.h"
@@ -55,8 +56,8 @@
55#define DOMAIN_MAX_ADDR(gaw) ((((u64)1) << gaw) - 1) 56#define DOMAIN_MAX_ADDR(gaw) ((((u64)1) << gaw) - 1)
56 57
57#define IOVA_PFN(addr) ((addr) >> PAGE_SHIFT) 58#define IOVA_PFN(addr) ((addr) >> PAGE_SHIFT)
58#define DMA_32BIT_PFN IOVA_PFN(DMA_32BIT_MASK) 59#define DMA_32BIT_PFN IOVA_PFN(DMA_BIT_MASK(32))
59#define DMA_64BIT_PFN IOVA_PFN(DMA_64BIT_MASK) 60#define DMA_64BIT_PFN IOVA_PFN(DMA_BIT_MASK(64))
60 61
61/* global iommu list, set NULL for ignored DMAR units */ 62/* global iommu list, set NULL for ignored DMAR units */
62static struct intel_iommu **g_iommus; 63static struct intel_iommu **g_iommus;
@@ -247,7 +248,8 @@ struct dmar_domain {
247struct device_domain_info { 248struct device_domain_info {
248 struct list_head link; /* link to domain siblings */ 249 struct list_head link; /* link to domain siblings */
249 struct list_head global; /* link to global list */ 250 struct list_head global; /* link to global list */
250 u8 bus; /* PCI bus numer */ 251 int segment; /* PCI domain */
252 u8 bus; /* PCI bus number */
251 u8 devfn; /* PCI devfn number */ 253 u8 devfn; /* PCI devfn number */
252 struct pci_dev *dev; /* it's NULL for PCIE-to-PCI bridge */ 254 struct pci_dev *dev; /* it's NULL for PCIE-to-PCI bridge */
253 struct dmar_domain *domain; /* pointer to domain */ 255 struct dmar_domain *domain; /* pointer to domain */
@@ -467,7 +469,7 @@ static void domain_update_iommu_cap(struct dmar_domain *domain)
467 domain_update_iommu_snooping(domain); 469 domain_update_iommu_snooping(domain);
468} 470}
469 471
470static struct intel_iommu *device_to_iommu(u8 bus, u8 devfn) 472static struct intel_iommu *device_to_iommu(int segment, u8 bus, u8 devfn)
471{ 473{
472 struct dmar_drhd_unit *drhd = NULL; 474 struct dmar_drhd_unit *drhd = NULL;
473 int i; 475 int i;
@@ -475,12 +477,20 @@ static struct intel_iommu *device_to_iommu(u8 bus, u8 devfn)
475 for_each_drhd_unit(drhd) { 477 for_each_drhd_unit(drhd) {
476 if (drhd->ignored) 478 if (drhd->ignored)
477 continue; 479 continue;
480 if (segment != drhd->segment)
481 continue;
478 482
479 for (i = 0; i < drhd->devices_cnt; i++) 483 for (i = 0; i < drhd->devices_cnt; i++) {
480 if (drhd->devices[i] && 484 if (drhd->devices[i] &&
481 drhd->devices[i]->bus->number == bus && 485 drhd->devices[i]->bus->number == bus &&
482 drhd->devices[i]->devfn == devfn) 486 drhd->devices[i]->devfn == devfn)
483 return drhd->iommu; 487 return drhd->iommu;
488 if (drhd->devices[i] &&
489 drhd->devices[i]->subordinate &&
490 drhd->devices[i]->subordinate->number <= bus &&
491 drhd->devices[i]->subordinate->subordinate >= bus)
492 return drhd->iommu;
493 }
484 494
485 if (drhd->include_all) 495 if (drhd->include_all)
486 return drhd->iommu; 496 return drhd->iommu;
@@ -1312,7 +1322,7 @@ static void domain_exit(struct dmar_domain *domain)
1312} 1322}
1313 1323
1314static int domain_context_mapping_one(struct dmar_domain *domain, 1324static int domain_context_mapping_one(struct dmar_domain *domain,
1315 u8 bus, u8 devfn) 1325 int segment, u8 bus, u8 devfn)
1316{ 1326{
1317 struct context_entry *context; 1327 struct context_entry *context;
1318 unsigned long flags; 1328 unsigned long flags;
@@ -1327,7 +1337,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
1327 bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); 1337 bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
1328 BUG_ON(!domain->pgd); 1338 BUG_ON(!domain->pgd);
1329 1339
1330 iommu = device_to_iommu(bus, devfn); 1340 iommu = device_to_iommu(segment, bus, devfn);
1331 if (!iommu) 1341 if (!iommu)
1332 return -ENODEV; 1342 return -ENODEV;
1333 1343
@@ -1417,8 +1427,8 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev)
1417 int ret; 1427 int ret;
1418 struct pci_dev *tmp, *parent; 1428 struct pci_dev *tmp, *parent;
1419 1429
1420 ret = domain_context_mapping_one(domain, pdev->bus->number, 1430 ret = domain_context_mapping_one(domain, pci_domain_nr(pdev->bus),
1421 pdev->devfn); 1431 pdev->bus->number, pdev->devfn);
1422 if (ret) 1432 if (ret)
1423 return ret; 1433 return ret;
1424 1434
@@ -1429,18 +1439,23 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev)
1429 /* Secondary interface's bus number and devfn 0 */ 1439 /* Secondary interface's bus number and devfn 0 */
1430 parent = pdev->bus->self; 1440 parent = pdev->bus->self;
1431 while (parent != tmp) { 1441 while (parent != tmp) {
1432 ret = domain_context_mapping_one(domain, parent->bus->number, 1442 ret = domain_context_mapping_one(domain,
1433 parent->devfn); 1443 pci_domain_nr(parent->bus),
1444 parent->bus->number,
1445 parent->devfn);
1434 if (ret) 1446 if (ret)
1435 return ret; 1447 return ret;
1436 parent = parent->bus->self; 1448 parent = parent->bus->self;
1437 } 1449 }
1438 if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ 1450 if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */
1439 return domain_context_mapping_one(domain, 1451 return domain_context_mapping_one(domain,
1440 tmp->subordinate->number, 0); 1452 pci_domain_nr(tmp->subordinate),
1453 tmp->subordinate->number, 0);
1441 else /* this is a legacy PCI bridge */ 1454 else /* this is a legacy PCI bridge */
1442 return domain_context_mapping_one(domain, 1455 return domain_context_mapping_one(domain,
1443 tmp->bus->number, tmp->devfn); 1456 pci_domain_nr(tmp->bus),
1457 tmp->bus->number,
1458 tmp->devfn);
1444} 1459}
1445 1460
1446static int domain_context_mapped(struct pci_dev *pdev) 1461static int domain_context_mapped(struct pci_dev *pdev)
@@ -1449,12 +1464,12 @@ static int domain_context_mapped(struct pci_dev *pdev)
1449 struct pci_dev *tmp, *parent; 1464 struct pci_dev *tmp, *parent;
1450 struct intel_iommu *iommu; 1465 struct intel_iommu *iommu;
1451 1466
1452 iommu = device_to_iommu(pdev->bus->number, pdev->devfn); 1467 iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number,
1468 pdev->devfn);
1453 if (!iommu) 1469 if (!iommu)
1454 return -ENODEV; 1470 return -ENODEV;
1455 1471
1456 ret = device_context_mapped(iommu, 1472 ret = device_context_mapped(iommu, pdev->bus->number, pdev->devfn);
1457 pdev->bus->number, pdev->devfn);
1458 if (!ret) 1473 if (!ret)
1459 return ret; 1474 return ret;
1460 /* dependent device mapping */ 1475 /* dependent device mapping */
@@ -1465,17 +1480,17 @@ static int domain_context_mapped(struct pci_dev *pdev)
1465 parent = pdev->bus->self; 1480 parent = pdev->bus->self;
1466 while (parent != tmp) { 1481 while (parent != tmp) {
1467 ret = device_context_mapped(iommu, parent->bus->number, 1482 ret = device_context_mapped(iommu, parent->bus->number,
1468 parent->devfn); 1483 parent->devfn);
1469 if (!ret) 1484 if (!ret)
1470 return ret; 1485 return ret;
1471 parent = parent->bus->self; 1486 parent = parent->bus->self;
1472 } 1487 }
1473 if (tmp->is_pcie) 1488 if (tmp->is_pcie)
1474 return device_context_mapped(iommu, 1489 return device_context_mapped(iommu, tmp->subordinate->number,
1475 tmp->subordinate->number, 0); 1490 0);
1476 else 1491 else
1477 return device_context_mapped(iommu, 1492 return device_context_mapped(iommu, tmp->bus->number,
1478 tmp->bus->number, tmp->devfn); 1493 tmp->devfn);
1479} 1494}
1480 1495
1481static int 1496static int
@@ -1542,7 +1557,7 @@ static void domain_remove_dev_info(struct dmar_domain *domain)
1542 info->dev->dev.archdata.iommu = NULL; 1557 info->dev->dev.archdata.iommu = NULL;
1543 spin_unlock_irqrestore(&device_domain_lock, flags); 1558 spin_unlock_irqrestore(&device_domain_lock, flags);
1544 1559
1545 iommu = device_to_iommu(info->bus, info->devfn); 1560 iommu = device_to_iommu(info->segment, info->bus, info->devfn);
1546 iommu_detach_dev(iommu, info->bus, info->devfn); 1561 iommu_detach_dev(iommu, info->bus, info->devfn);
1547 free_devinfo_mem(info); 1562 free_devinfo_mem(info);
1548 1563
@@ -1577,11 +1592,14 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
1577 struct pci_dev *dev_tmp; 1592 struct pci_dev *dev_tmp;
1578 unsigned long flags; 1593 unsigned long flags;
1579 int bus = 0, devfn = 0; 1594 int bus = 0, devfn = 0;
1595 int segment;
1580 1596
1581 domain = find_domain(pdev); 1597 domain = find_domain(pdev);
1582 if (domain) 1598 if (domain)
1583 return domain; 1599 return domain;
1584 1600
1601 segment = pci_domain_nr(pdev->bus);
1602
1585 dev_tmp = pci_find_upstream_pcie_bridge(pdev); 1603 dev_tmp = pci_find_upstream_pcie_bridge(pdev);
1586 if (dev_tmp) { 1604 if (dev_tmp) {
1587 if (dev_tmp->is_pcie) { 1605 if (dev_tmp->is_pcie) {
@@ -1593,7 +1611,8 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
1593 } 1611 }
1594 spin_lock_irqsave(&device_domain_lock, flags); 1612 spin_lock_irqsave(&device_domain_lock, flags);
1595 list_for_each_entry(info, &device_domain_list, global) { 1613 list_for_each_entry(info, &device_domain_list, global) {
1596 if (info->bus == bus && info->devfn == devfn) { 1614 if (info->segment == segment &&
1615 info->bus == bus && info->devfn == devfn) {
1597 found = info->domain; 1616 found = info->domain;
1598 break; 1617 break;
1599 } 1618 }
@@ -1631,6 +1650,7 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
1631 domain_exit(domain); 1650 domain_exit(domain);
1632 goto error; 1651 goto error;
1633 } 1652 }
1653 info->segment = segment;
1634 info->bus = bus; 1654 info->bus = bus;
1635 info->devfn = devfn; 1655 info->devfn = devfn;
1636 info->dev = NULL; 1656 info->dev = NULL;
@@ -1642,7 +1662,8 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
1642 found = NULL; 1662 found = NULL;
1643 spin_lock_irqsave(&device_domain_lock, flags); 1663 spin_lock_irqsave(&device_domain_lock, flags);
1644 list_for_each_entry(tmp, &device_domain_list, global) { 1664 list_for_each_entry(tmp, &device_domain_list, global) {
1645 if (tmp->bus == bus && tmp->devfn == devfn) { 1665 if (tmp->segment == segment &&
1666 tmp->bus == bus && tmp->devfn == devfn) {
1646 found = tmp->domain; 1667 found = tmp->domain;
1647 break; 1668 break;
1648 } 1669 }
@@ -1662,6 +1683,7 @@ found_domain:
1662 info = alloc_devinfo_mem(); 1683 info = alloc_devinfo_mem();
1663 if (!info) 1684 if (!info)
1664 goto error; 1685 goto error;
1686 info->segment = segment;
1665 info->bus = pdev->bus->number; 1687 info->bus = pdev->bus->number;
1666 info->devfn = pdev->devfn; 1688 info->devfn = pdev->devfn;
1667 info->dev = pdev; 1689 info->dev = pdev;
@@ -1946,6 +1968,15 @@ static int __init init_dmars(void)
1946 } 1968 }
1947 } 1969 }
1948 1970
1971#ifdef CONFIG_INTR_REMAP
1972 if (!intr_remapping_enabled) {
1973 ret = enable_intr_remapping(0);
1974 if (ret)
1975 printk(KERN_ERR
1976 "IOMMU: enable interrupt remapping failed\n");
1977 }
1978#endif
1979
1949 /* 1980 /*
1950 * For each rmrr 1981 * For each rmrr
1951 * for each dev attached to rmrr 1982 * for each dev attached to rmrr
@@ -2049,15 +2080,15 @@ __intel_alloc_iova(struct device *dev, struct dmar_domain *domain,
2049 struct pci_dev *pdev = to_pci_dev(dev); 2080 struct pci_dev *pdev = to_pci_dev(dev);
2050 struct iova *iova = NULL; 2081 struct iova *iova = NULL;
2051 2082
2052 if (dma_mask <= DMA_32BIT_MASK || dmar_forcedac) 2083 if (dma_mask <= DMA_BIT_MASK(32) || dmar_forcedac)
2053 iova = iommu_alloc_iova(domain, size, dma_mask); 2084 iova = iommu_alloc_iova(domain, size, dma_mask);
2054 else { 2085 else {
2055 /* 2086 /*
2056 * First try to allocate an io virtual address in 2087 * First try to allocate an io virtual address in
2057 * DMA_32BIT_MASK and if that fails then try allocating 2088 * DMA_BIT_MASK(32) and if that fails then try allocating
2058 * from higher range 2089 * from higher range
2059 */ 2090 */
2060 iova = iommu_alloc_iova(domain, size, DMA_32BIT_MASK); 2091 iova = iommu_alloc_iova(domain, size, DMA_BIT_MASK(32));
2061 if (!iova) 2092 if (!iova)
2062 iova = iommu_alloc_iova(domain, size, dma_mask); 2093 iova = iommu_alloc_iova(domain, size, dma_mask);
2063 } 2094 }
@@ -2597,6 +2628,150 @@ static void __init init_no_remapping_devices(void)
2597 } 2628 }
2598} 2629}
2599 2630
2631#ifdef CONFIG_SUSPEND
2632static int init_iommu_hw(void)
2633{
2634 struct dmar_drhd_unit *drhd;
2635 struct intel_iommu *iommu = NULL;
2636
2637 for_each_active_iommu(iommu, drhd)
2638 if (iommu->qi)
2639 dmar_reenable_qi(iommu);
2640
2641 for_each_active_iommu(iommu, drhd) {
2642 iommu_flush_write_buffer(iommu);
2643
2644 iommu_set_root_entry(iommu);
2645
2646 iommu->flush.flush_context(iommu, 0, 0, 0,
2647 DMA_CCMD_GLOBAL_INVL, 0);
2648 iommu->flush.flush_iotlb(iommu, 0, 0, 0,
2649 DMA_TLB_GLOBAL_FLUSH, 0);
2650 iommu_disable_protect_mem_regions(iommu);
2651 iommu_enable_translation(iommu);
2652 }
2653
2654 return 0;
2655}
2656
2657static void iommu_flush_all(void)
2658{
2659 struct dmar_drhd_unit *drhd;
2660 struct intel_iommu *iommu;
2661
2662 for_each_active_iommu(iommu, drhd) {
2663 iommu->flush.flush_context(iommu, 0, 0, 0,
2664 DMA_CCMD_GLOBAL_INVL, 0);
2665 iommu->flush.flush_iotlb(iommu, 0, 0, 0,
2666 DMA_TLB_GLOBAL_FLUSH, 0);
2667 }
2668}
2669
2670static int iommu_suspend(struct sys_device *dev, pm_message_t state)
2671{
2672 struct dmar_drhd_unit *drhd;
2673 struct intel_iommu *iommu = NULL;
2674 unsigned long flag;
2675
2676 for_each_active_iommu(iommu, drhd) {
2677 iommu->iommu_state = kzalloc(sizeof(u32) * MAX_SR_DMAR_REGS,
2678 GFP_ATOMIC);
2679 if (!iommu->iommu_state)
2680 goto nomem;
2681 }
2682
2683 iommu_flush_all();
2684
2685 for_each_active_iommu(iommu, drhd) {
2686 iommu_disable_translation(iommu);
2687
2688 spin_lock_irqsave(&iommu->register_lock, flag);
2689
2690 iommu->iommu_state[SR_DMAR_FECTL_REG] =
2691 readl(iommu->reg + DMAR_FECTL_REG);
2692 iommu->iommu_state[SR_DMAR_FEDATA_REG] =
2693 readl(iommu->reg + DMAR_FEDATA_REG);
2694 iommu->iommu_state[SR_DMAR_FEADDR_REG] =
2695 readl(iommu->reg + DMAR_FEADDR_REG);
2696 iommu->iommu_state[SR_DMAR_FEUADDR_REG] =
2697 readl(iommu->reg + DMAR_FEUADDR_REG);
2698
2699 spin_unlock_irqrestore(&iommu->register_lock, flag);
2700 }
2701 return 0;
2702
2703nomem:
2704 for_each_active_iommu(iommu, drhd)
2705 kfree(iommu->iommu_state);
2706
2707 return -ENOMEM;
2708}
2709
2710static int iommu_resume(struct sys_device *dev)
2711{
2712 struct dmar_drhd_unit *drhd;
2713 struct intel_iommu *iommu = NULL;
2714 unsigned long flag;
2715
2716 if (init_iommu_hw()) {
2717 WARN(1, "IOMMU setup failed, DMAR can not resume!\n");
2718 return -EIO;
2719 }
2720
2721 for_each_active_iommu(iommu, drhd) {
2722
2723 spin_lock_irqsave(&iommu->register_lock, flag);
2724
2725 writel(iommu->iommu_state[SR_DMAR_FECTL_REG],
2726 iommu->reg + DMAR_FECTL_REG);
2727 writel(iommu->iommu_state[SR_DMAR_FEDATA_REG],
2728 iommu->reg + DMAR_FEDATA_REG);
2729 writel(iommu->iommu_state[SR_DMAR_FEADDR_REG],
2730 iommu->reg + DMAR_FEADDR_REG);
2731 writel(iommu->iommu_state[SR_DMAR_FEUADDR_REG],
2732 iommu->reg + DMAR_FEUADDR_REG);
2733
2734 spin_unlock_irqrestore(&iommu->register_lock, flag);
2735 }
2736
2737 for_each_active_iommu(iommu, drhd)
2738 kfree(iommu->iommu_state);
2739
2740 return 0;
2741}
2742
2743static struct sysdev_class iommu_sysclass = {
2744 .name = "iommu",
2745 .resume = iommu_resume,
2746 .suspend = iommu_suspend,
2747};
2748
2749static struct sys_device device_iommu = {
2750 .cls = &iommu_sysclass,
2751};
2752
2753static int __init init_iommu_sysfs(void)
2754{
2755 int error;
2756
2757 error = sysdev_class_register(&iommu_sysclass);
2758 if (error)
2759 return error;
2760
2761 error = sysdev_register(&device_iommu);
2762 if (error)
2763 sysdev_class_unregister(&iommu_sysclass);
2764
2765 return error;
2766}
2767
2768#else
2769static int __init init_iommu_sysfs(void)
2770{
2771 return 0;
2772}
2773#endif /* CONFIG_PM */
2774
2600int __init intel_iommu_init(void) 2775int __init intel_iommu_init(void)
2601{ 2776{
2602 int ret = 0; 2777 int ret = 0;
@@ -2632,6 +2807,7 @@ int __init intel_iommu_init(void)
2632 init_timer(&unmap_timer); 2807 init_timer(&unmap_timer);
2633 force_iommu = 1; 2808 force_iommu = 1;
2634 dma_ops = &intel_dma_ops; 2809 dma_ops = &intel_dma_ops;
2810 init_iommu_sysfs();
2635 2811
2636 register_iommu(&intel_iommu_ops); 2812 register_iommu(&intel_iommu_ops);
2637 2813
@@ -2648,6 +2824,7 @@ static int vm_domain_add_dev_info(struct dmar_domain *domain,
2648 if (!info) 2824 if (!info)
2649 return -ENOMEM; 2825 return -ENOMEM;
2650 2826
2827 info->segment = pci_domain_nr(pdev->bus);
2651 info->bus = pdev->bus->number; 2828 info->bus = pdev->bus->number;
2652 info->devfn = pdev->devfn; 2829 info->devfn = pdev->devfn;
2653 info->dev = pdev; 2830 info->dev = pdev;
@@ -2677,15 +2854,15 @@ static void iommu_detach_dependent_devices(struct intel_iommu *iommu,
2677 parent = pdev->bus->self; 2854 parent = pdev->bus->self;
2678 while (parent != tmp) { 2855 while (parent != tmp) {
2679 iommu_detach_dev(iommu, parent->bus->number, 2856 iommu_detach_dev(iommu, parent->bus->number,
2680 parent->devfn); 2857 parent->devfn);
2681 parent = parent->bus->self; 2858 parent = parent->bus->self;
2682 } 2859 }
2683 if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */ 2860 if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */
2684 iommu_detach_dev(iommu, 2861 iommu_detach_dev(iommu,
2685 tmp->subordinate->number, 0); 2862 tmp->subordinate->number, 0);
2686 else /* this is a legacy PCI bridge */ 2863 else /* this is a legacy PCI bridge */
2687 iommu_detach_dev(iommu, 2864 iommu_detach_dev(iommu, tmp->bus->number,
2688 tmp->bus->number, tmp->devfn); 2865 tmp->devfn);
2689 } 2866 }
2690} 2867}
2691 2868
@@ -2698,13 +2875,15 @@ static void vm_domain_remove_one_dev_info(struct dmar_domain *domain,
2698 int found = 0; 2875 int found = 0;
2699 struct list_head *entry, *tmp; 2876 struct list_head *entry, *tmp;
2700 2877
2701 iommu = device_to_iommu(pdev->bus->number, pdev->devfn); 2878 iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number,
2879 pdev->devfn);
2702 if (!iommu) 2880 if (!iommu)
2703 return; 2881 return;
2704 2882
2705 spin_lock_irqsave(&device_domain_lock, flags); 2883 spin_lock_irqsave(&device_domain_lock, flags);
2706 list_for_each_safe(entry, tmp, &domain->devices) { 2884 list_for_each_safe(entry, tmp, &domain->devices) {
2707 info = list_entry(entry, struct device_domain_info, link); 2885 info = list_entry(entry, struct device_domain_info, link);
2886 /* No need to compare PCI domain; it has to be the same */
2708 if (info->bus == pdev->bus->number && 2887 if (info->bus == pdev->bus->number &&
2709 info->devfn == pdev->devfn) { 2888 info->devfn == pdev->devfn) {
2710 list_del(&info->link); 2889 list_del(&info->link);
@@ -2729,7 +2908,8 @@ static void vm_domain_remove_one_dev_info(struct dmar_domain *domain,
2729 * owned by this domain, clear this iommu in iommu_bmp 2908 * owned by this domain, clear this iommu in iommu_bmp
2730 * update iommu count and coherency 2909 * update iommu count and coherency
2731 */ 2910 */
2732 if (device_to_iommu(info->bus, info->devfn) == iommu) 2911 if (iommu == device_to_iommu(info->segment, info->bus,
2912 info->devfn))
2733 found = 1; 2913 found = 1;
2734 } 2914 }
2735 2915
@@ -2762,7 +2942,7 @@ static void vm_domain_remove_all_dev_info(struct dmar_domain *domain)
2762 2942
2763 spin_unlock_irqrestore(&device_domain_lock, flags1); 2943 spin_unlock_irqrestore(&device_domain_lock, flags1);
2764 2944
2765 iommu = device_to_iommu(info->bus, info->devfn); 2945 iommu = device_to_iommu(info->segment, info->bus, info->devfn);
2766 iommu_detach_dev(iommu, info->bus, info->devfn); 2946 iommu_detach_dev(iommu, info->bus, info->devfn);
2767 iommu_detach_dependent_devices(iommu, info->dev); 2947 iommu_detach_dependent_devices(iommu, info->dev);
2768 2948
@@ -2950,7 +3130,8 @@ static int intel_iommu_attach_device(struct iommu_domain *domain,
2950 } 3130 }
2951 } 3131 }
2952 3132
2953 iommu = device_to_iommu(pdev->bus->number, pdev->devfn); 3133 iommu = device_to_iommu(pci_domain_nr(pdev->bus), pdev->bus->number,
3134 pdev->devfn);
2954 if (!iommu) 3135 if (!iommu)
2955 return -ENODEV; 3136 return -ENODEV;
2956 3137
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c
index b041a409f4a7..f5e0ea724a6f 100644
--- a/drivers/pci/intr_remapping.c
+++ b/drivers/pci/intr_remapping.c
@@ -9,6 +9,7 @@
9#include <asm/cpu.h> 9#include <asm/cpu.h>
10#include <linux/intel-iommu.h> 10#include <linux/intel-iommu.h>
11#include "intr_remapping.h" 11#include "intr_remapping.h"
12#include <acpi/acpi.h>
12 13
13static struct ioapic_scope ir_ioapic[MAX_IO_APICS]; 14static struct ioapic_scope ir_ioapic[MAX_IO_APICS];
14static int ir_ioapic_num; 15static int ir_ioapic_num;
@@ -415,12 +416,27 @@ static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode)
415 416
416 /* Set interrupt-remapping table pointer */ 417 /* Set interrupt-remapping table pointer */
417 cmd = iommu->gcmd | DMA_GCMD_SIRTP; 418 cmd = iommu->gcmd | DMA_GCMD_SIRTP;
419 iommu->gcmd |= DMA_GCMD_SIRTP;
418 writel(cmd, iommu->reg + DMAR_GCMD_REG); 420 writel(cmd, iommu->reg + DMAR_GCMD_REG);
419 421
420 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, 422 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
421 readl, (sts & DMA_GSTS_IRTPS), sts); 423 readl, (sts & DMA_GSTS_IRTPS), sts);
422 spin_unlock_irqrestore(&iommu->register_lock, flags); 424 spin_unlock_irqrestore(&iommu->register_lock, flags);
423 425
426 if (mode == 0) {
427 spin_lock_irqsave(&iommu->register_lock, flags);
428
429 /* enable comaptiblity format interrupt pass through */
430 cmd = iommu->gcmd | DMA_GCMD_CFI;
431 iommu->gcmd |= DMA_GCMD_CFI;
432 writel(cmd, iommu->reg + DMAR_GCMD_REG);
433
434 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
435 readl, (sts & DMA_GSTS_CFIS), sts);
436
437 spin_unlock_irqrestore(&iommu->register_lock, flags);
438 }
439
424 /* 440 /*
425 * global invalidation of interrupt entry cache before enabling 441 * global invalidation of interrupt entry cache before enabling
426 * interrupt-remapping. 442 * interrupt-remapping.
@@ -470,7 +486,7 @@ static int setup_intr_remapping(struct intel_iommu *iommu, int mode)
470/* 486/*
471 * Disable Interrupt Remapping. 487 * Disable Interrupt Remapping.
472 */ 488 */
473static void disable_intr_remapping(struct intel_iommu *iommu) 489static void iommu_disable_intr_remapping(struct intel_iommu *iommu)
474{ 490{
475 unsigned long flags; 491 unsigned long flags;
476 u32 sts; 492 u32 sts;
@@ -478,6 +494,12 @@ static void disable_intr_remapping(struct intel_iommu *iommu)
478 if (!ecap_ir_support(iommu->ecap)) 494 if (!ecap_ir_support(iommu->ecap))
479 return; 495 return;
480 496
497 /*
498 * global invalidation of interrupt entry cache before disabling
499 * interrupt-remapping.
500 */
501 qi_global_iec(iommu);
502
481 spin_lock_irqsave(&iommu->register_lock, flags); 503 spin_lock_irqsave(&iommu->register_lock, flags);
482 504
483 sts = dmar_readq(iommu->reg + DMAR_GSTS_REG); 505 sts = dmar_readq(iommu->reg + DMAR_GSTS_REG);
@@ -503,6 +525,13 @@ int __init enable_intr_remapping(int eim)
503 struct intel_iommu *iommu = drhd->iommu; 525 struct intel_iommu *iommu = drhd->iommu;
504 526
505 /* 527 /*
528 * If the queued invalidation is already initialized,
529 * shouldn't disable it.
530 */
531 if (iommu->qi)
532 continue;
533
534 /*
506 * Clear previous faults. 535 * Clear previous faults.
507 */ 536 */
508 dmar_fault(-1, iommu); 537 dmar_fault(-1, iommu);
@@ -511,7 +540,7 @@ int __init enable_intr_remapping(int eim)
511 * Disable intr remapping and queued invalidation, if already 540 * Disable intr remapping and queued invalidation, if already
512 * enabled prior to OS handover. 541 * enabled prior to OS handover.
513 */ 542 */
514 disable_intr_remapping(iommu); 543 iommu_disable_intr_remapping(iommu);
515 544
516 dmar_disable_qi(iommu); 545 dmar_disable_qi(iommu);
517 } 546 }
@@ -639,3 +668,54 @@ int __init parse_ioapics_under_ir(void)
639 668
640 return ir_supported; 669 return ir_supported;
641} 670}
671
672void disable_intr_remapping(void)
673{
674 struct dmar_drhd_unit *drhd;
675 struct intel_iommu *iommu = NULL;
676
677 /*
678 * Disable Interrupt-remapping for all the DRHD's now.
679 */
680 for_each_iommu(iommu, drhd) {
681 if (!ecap_ir_support(iommu->ecap))
682 continue;
683
684 iommu_disable_intr_remapping(iommu);
685 }
686}
687
688int reenable_intr_remapping(int eim)
689{
690 struct dmar_drhd_unit *drhd;
691 int setup = 0;
692 struct intel_iommu *iommu = NULL;
693
694 for_each_iommu(iommu, drhd)
695 if (iommu->qi)
696 dmar_reenable_qi(iommu);
697
698 /*
699 * Setup Interrupt-remapping for all the DRHD's now.
700 */
701 for_each_iommu(iommu, drhd) {
702 if (!ecap_ir_support(iommu->ecap))
703 continue;
704
705 /* Set up interrupt remapping for iommu.*/
706 iommu_set_intr_remapping(iommu, eim);
707 setup = 1;
708 }
709
710 if (!setup)
711 goto error;
712
713 return 0;
714
715error:
716 /*
717 * handle error condition gracefully here!
718 */
719 return -1;
720}
721
diff --git a/drivers/pnp/card.c b/drivers/pnp/card.c
index efea128f02da..4a651f69e17c 100644
--- a/drivers/pnp/card.c
+++ b/drivers/pnp/card.c
@@ -167,7 +167,7 @@ struct pnp_card *pnp_alloc_card(struct pnp_protocol *protocol, int id, char *pnp
167 card->dev.parent = &card->protocol->dev; 167 card->dev.parent = &card->protocol->dev;
168 dev_set_name(&card->dev, "%02x:%02x", card->protocol->number, card->number); 168 dev_set_name(&card->dev, "%02x:%02x", card->protocol->number, card->number);
169 169
170 card->dev.coherent_dma_mask = DMA_24BIT_MASK; 170 card->dev.coherent_dma_mask = DMA_BIT_MASK(24);
171 card->dev.dma_mask = &card->dev.coherent_dma_mask; 171 card->dev.dma_mask = &card->dev.coherent_dma_mask;
172 172
173 dev_id = pnp_add_card_id(card, pnpid); 173 dev_id = pnp_add_card_id(card, pnpid);
diff --git a/drivers/pnp/core.c b/drivers/pnp/core.c
index 14814f231739..5dba90995d9e 100644
--- a/drivers/pnp/core.c
+++ b/drivers/pnp/core.c
@@ -137,7 +137,7 @@ struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *protocol, int id, char *pnpid
137 INIT_LIST_HEAD(&dev->options); 137 INIT_LIST_HEAD(&dev->options);
138 dev->protocol = protocol; 138 dev->protocol = protocol;
139 dev->number = id; 139 dev->number = id;
140 dev->dma_mask = DMA_24BIT_MASK; 140 dev->dma_mask = DMA_BIT_MASK(24);
141 141
142 dev->dev.parent = &dev->protocol->dev; 142 dev->dev.parent = &dev->protocol->dev;
143 dev->dev.bus = &pnp_bus_type; 143 dev->dev.bus = &pnp_bus_type;
diff --git a/drivers/rapidio/rio-scan.c b/drivers/rapidio/rio-scan.c
index 5c13f61bfb1b..74d0bfa3f310 100644
--- a/drivers/rapidio/rio-scan.c
+++ b/drivers/rapidio/rio-scan.c
@@ -381,9 +381,9 @@ static struct rio_dev *rio_setup_device(struct rio_net *net,
381 rdev->dev.release = rio_release_dev; 381 rdev->dev.release = rio_release_dev;
382 rio_dev_get(rdev); 382 rio_dev_get(rdev);
383 383
384 rdev->dma_mask = DMA_32BIT_MASK; 384 rdev->dma_mask = DMA_BIT_MASK(32);
385 rdev->dev.dma_mask = &rdev->dma_mask; 385 rdev->dev.dma_mask = &rdev->dma_mask;
386 rdev->dev.coherent_dma_mask = DMA_32BIT_MASK; 386 rdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
387 387
388 if ((rdev->pef & RIO_PEF_INB_DOORBELL) && 388 if ((rdev->pef & RIO_PEF_INB_DOORBELL) &&
389 (rdev->dst_ops & RIO_DST_OPS_DOORBELL)) 389 (rdev->dst_ops & RIO_DST_OPS_DOORBELL))
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index a12783ebb42d..fdb14ec4fd47 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -2016,10 +2016,10 @@ static int __devinit twa_probe(struct pci_dev *pdev, const struct pci_device_id
2016 pci_set_master(pdev); 2016 pci_set_master(pdev);
2017 pci_try_set_mwi(pdev); 2017 pci_try_set_mwi(pdev);
2018 2018
2019 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) 2019 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64))
2020 || pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) 2020 || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
2021 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) 2021 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
2022 || pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 2022 || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
2023 TW_PRINTK(host, TW_DRIVER, 0x23, "Failed to set dma mask"); 2023 TW_PRINTK(host, TW_DRIVER, 0x23, "Failed to set dma mask");
2024 retval = -ENODEV; 2024 retval = -ENODEV;
2025 goto out_disable_device; 2025 goto out_disable_device;
diff --git a/drivers/scsi/3w-xxxx.h b/drivers/scsi/3w-xxxx.h
index 0742e6846656..8e71e5e122b3 100644
--- a/drivers/scsi/3w-xxxx.h
+++ b/drivers/scsi/3w-xxxx.h
@@ -234,7 +234,7 @@ static unsigned char tw_sense_table[][4] =
234#define TW_IOCTL_TIMEOUT 25 /* 25 seconds */ 234#define TW_IOCTL_TIMEOUT 25 /* 25 seconds */
235#define TW_IOCTL_CHRDEV_TIMEOUT 60 /* 60 seconds */ 235#define TW_IOCTL_CHRDEV_TIMEOUT 60 /* 60 seconds */
236#define TW_IOCTL_CHRDEV_FREE -1 236#define TW_IOCTL_CHRDEV_FREE -1
237#define TW_DMA_MASK DMA_32BIT_MASK 237#define TW_DMA_MASK DMA_BIT_MASK(32)
238#define TW_MAX_CDB_LEN 16 238#define TW_MAX_CDB_LEN 16
239 239
240/* Bitmask macros to eliminate bitfields */ 240/* Bitmask macros to eliminate bitfields */
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c
index 2d689af24664..1ddcf4031d4c 100644
--- a/drivers/scsi/BusLogic.c
+++ b/drivers/scsi/BusLogic.c
@@ -667,7 +667,7 @@ static int __init BusLogic_InitializeMultiMasterProbeInfo(struct BusLogic_HostAd
667 if (pci_enable_device(PCI_Device)) 667 if (pci_enable_device(PCI_Device))
668 continue; 668 continue;
669 669
670 if (pci_set_dma_mask(PCI_Device, DMA_32BIT_MASK )) 670 if (pci_set_dma_mask(PCI_Device, DMA_BIT_MASK(32) ))
671 continue; 671 continue;
672 672
673 Bus = PCI_Device->bus->number; 673 Bus = PCI_Device->bus->number;
@@ -834,7 +834,7 @@ static int __init BusLogic_InitializeMultiMasterProbeInfo(struct BusLogic_HostAd
834 if (pci_enable_device(PCI_Device)) 834 if (pci_enable_device(PCI_Device))
835 continue; 835 continue;
836 836
837 if (pci_set_dma_mask(PCI_Device, DMA_32BIT_MASK)) 837 if (pci_set_dma_mask(PCI_Device, DMA_BIT_MASK(32)))
838 continue; 838 continue;
839 839
840 Bus = PCI_Device->bus->number; 840 Bus = PCI_Device->bus->number;
@@ -888,7 +888,7 @@ static int __init BusLogic_InitializeFlashPointProbeInfo(struct BusLogic_HostAda
888 if (pci_enable_device(PCI_Device)) 888 if (pci_enable_device(PCI_Device))
889 continue; 889 continue;
890 890
891 if (pci_set_dma_mask(PCI_Device, DMA_32BIT_MASK)) 891 if (pci_set_dma_mask(PCI_Device, DMA_BIT_MASK(32)))
892 continue; 892 continue;
893 893
894 Bus = PCI_Device->bus->number; 894 Bus = PCI_Device->bus->number;
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 20297c521e50..8ed2990c826e 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -121,10 +121,11 @@ config BLK_DEV_SR
121 tristate "SCSI CDROM support" 121 tristate "SCSI CDROM support"
122 depends on SCSI 122 depends on SCSI
123 ---help--- 123 ---help---
124 If you want to use a SCSI or FireWire CD-ROM under Linux, 124 If you want to use a CD or DVD drive attached to your computer
125 say Y and read the SCSI-HOWTO and the CDROM-HOWTO at 125 by SCSI, FireWire, USB or ATAPI, say Y and read the SCSI-HOWTO
126 <http://www.tldp.org/docs.html#howto>. Also make sure to say 126 and the CDROM-HOWTO at <http://www.tldp.org/docs.html#howto>.
127 Y or M to "ISO 9660 CD-ROM file system support" later. 127
128 Make sure to say Y or M to "ISO 9660 CD-ROM file system support".
128 129
129 To compile this driver as a module, choose M here and read 130 To compile this driver as a module, choose M here and read
130 <file:Documentation/scsi/scsi.txt>. 131 <file:Documentation/scsi/scsi.txt>.
@@ -614,10 +615,16 @@ config LIBFC
614 ---help--- 615 ---help---
615 Fibre Channel library module 616 Fibre Channel library module
616 617
618config LIBFCOE
619 tristate "LibFCoE module"
620 select LIBFC
621 ---help---
622 Library for Fibre Channel over Ethernet module
623
617config FCOE 624config FCOE
618 tristate "FCoE module" 625 tristate "FCoE module"
619 depends on PCI 626 depends on PCI
620 select LIBFC 627 select LIBFCOE
621 ---help--- 628 ---help---
622 Fibre Channel over Ethernet module 629 Fibre Channel over Ethernet module
623 630
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index cf7929634668..e7c861ac417d 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -37,6 +37,7 @@ obj-$(CONFIG_SCSI_SRP_ATTRS) += scsi_transport_srp.o
37obj-$(CONFIG_SCSI_DH) += device_handler/ 37obj-$(CONFIG_SCSI_DH) += device_handler/
38 38
39obj-$(CONFIG_LIBFC) += libfc/ 39obj-$(CONFIG_LIBFC) += libfc/
40obj-$(CONFIG_LIBFCOE) += fcoe/
40obj-$(CONFIG_FCOE) += fcoe/ 41obj-$(CONFIG_FCOE) += fcoe/
41obj-$(CONFIG_ISCSI_TCP) += libiscsi.o libiscsi_tcp.o iscsi_tcp.o 42obj-$(CONFIG_ISCSI_TCP) += libiscsi.o libiscsi_tcp.o iscsi_tcp.o
42obj-$(CONFIG_INFINIBAND_ISER) += libiscsi.o 43obj-$(CONFIG_INFINIBAND_ISER) += libiscsi.o
diff --git a/drivers/scsi/a100u2w.c b/drivers/scsi/a100u2w.c
index 964769f66eac..208d6df9ed59 100644
--- a/drivers/scsi/a100u2w.c
+++ b/drivers/scsi/a100u2w.c
@@ -1094,7 +1094,7 @@ static int __devinit inia100_probe_one(struct pci_dev *pdev,
1094 1094
1095 if (pci_enable_device(pdev)) 1095 if (pci_enable_device(pdev))
1096 goto out; 1096 goto out;
1097 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 1097 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
1098 printk(KERN_WARNING "Unable to set 32bit DMA " 1098 printk(KERN_WARNING "Unable to set 32bit DMA "
1099 "on inia100 adapter, ignoring.\n"); 1099 "on inia100 adapter, ignoring.\n");
1100 goto out_disable_device; 1100 goto out_disable_device;
diff --git a/drivers/scsi/a2091.c b/drivers/scsi/a2091.c
index 37dd47136fb1..4b38c4750f77 100644
--- a/drivers/scsi/a2091.c
+++ b/drivers/scsi/a2091.c
@@ -23,6 +23,8 @@
23#define DMA(ptr) ((a2091_scsiregs *)((ptr)->base)) 23#define DMA(ptr) ((a2091_scsiregs *)((ptr)->base))
24#define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) 24#define HDATA(ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))
25 25
26static int a2091_release(struct Scsi_Host *instance);
27
26static irqreturn_t a2091_intr (int irq, void *_instance) 28static irqreturn_t a2091_intr (int irq, void *_instance)
27{ 29{
28 unsigned long flags; 30 unsigned long flags;
@@ -144,7 +146,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,
144 } 146 }
145} 147}
146 148
147int __init a2091_detect(struct scsi_host_template *tpnt) 149static int __init a2091_detect(struct scsi_host_template *tpnt)
148{ 150{
149 static unsigned char called = 0; 151 static unsigned char called = 0;
150 struct Scsi_Host *instance; 152 struct Scsi_Host *instance;
@@ -233,7 +235,7 @@ static struct scsi_host_template driver_template = {
233 235
234#include "scsi_module.c" 236#include "scsi_module.c"
235 237
236int a2091_release(struct Scsi_Host *instance) 238static int a2091_release(struct Scsi_Host *instance)
237{ 239{
238#ifdef MODULE 240#ifdef MODULE
239 DMA(instance)->CNTR = 0; 241 DMA(instance)->CNTR = 0;
diff --git a/drivers/scsi/a2091.h b/drivers/scsi/a2091.h
index fe809bc88d73..252528f2672e 100644
--- a/drivers/scsi/a2091.h
+++ b/drivers/scsi/a2091.h
@@ -11,9 +11,6 @@
11 11
12#include <linux/types.h> 12#include <linux/types.h>
13 13
14int a2091_detect(struct scsi_host_template *);
15int a2091_release(struct Scsi_Host *);
16
17#ifndef CMD_PER_LUN 14#ifndef CMD_PER_LUN
18#define CMD_PER_LUN 2 15#define CMD_PER_LUN 2
19#endif 16#endif
diff --git a/drivers/scsi/a3000.c b/drivers/scsi/a3000.c
index 8b449d8acacd..6970ce82c4ac 100644
--- a/drivers/scsi/a3000.c
+++ b/drivers/scsi/a3000.c
@@ -25,6 +25,8 @@
25 25
26static struct Scsi_Host *a3000_host = NULL; 26static struct Scsi_Host *a3000_host = NULL;
27 27
28static int a3000_release(struct Scsi_Host *instance);
29
28static irqreturn_t a3000_intr (int irq, void *dummy) 30static irqreturn_t a3000_intr (int irq, void *dummy)
29{ 31{
30 unsigned long flags; 32 unsigned long flags;
@@ -157,7 +159,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,
157 } 159 }
158} 160}
159 161
160int __init a3000_detect(struct scsi_host_template *tpnt) 162static int __init a3000_detect(struct scsi_host_template *tpnt)
161{ 163{
162 wd33c93_regs regs; 164 wd33c93_regs regs;
163 165
@@ -232,7 +234,7 @@ static struct scsi_host_template driver_template = {
232 234
233#include "scsi_module.c" 235#include "scsi_module.c"
234 236
235int a3000_release(struct Scsi_Host *instance) 237static int a3000_release(struct Scsi_Host *instance)
236{ 238{
237 wd33c93_release(); 239 wd33c93_release();
238 DMA(instance)->CNTR = 0; 240 DMA(instance)->CNTR = 0;
diff --git a/drivers/scsi/a3000.h b/drivers/scsi/a3000.h
index 44a4ec7b4650..c7afe16fd6e4 100644
--- a/drivers/scsi/a3000.h
+++ b/drivers/scsi/a3000.h
@@ -11,9 +11,6 @@
11 11
12#include <linux/types.h> 12#include <linux/types.h>
13 13
14int a3000_detect(struct scsi_host_template *);
15int a3000_release(struct Scsi_Host *);
16
17#ifndef CMD_PER_LUN 14#ifndef CMD_PER_LUN
18#define CMD_PER_LUN 2 15#define CMD_PER_LUN 2
19#endif 16#endif
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 90d1d0878cb8..280261c451d6 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -143,7 +143,7 @@ static char *aac_get_status_string(u32 status);
143 */ 143 */
144 144
145static int nondasd = -1; 145static int nondasd = -1;
146static int aac_cache; 146static int aac_cache = 2; /* WCE=0 to avoid performance problems */
147static int dacmode = -1; 147static int dacmode = -1;
148int aac_msi; 148int aac_msi;
149int aac_commit = -1; 149int aac_commit = -1;
@@ -157,7 +157,7 @@ module_param_named(cache, aac_cache, int, S_IRUGO|S_IWUSR);
157MODULE_PARM_DESC(cache, "Disable Queue Flush commands:\n" 157MODULE_PARM_DESC(cache, "Disable Queue Flush commands:\n"
158 "\tbit 0 - Disable FUA in WRITE SCSI commands\n" 158 "\tbit 0 - Disable FUA in WRITE SCSI commands\n"
159 "\tbit 1 - Disable SYNCHRONIZE_CACHE SCSI command\n" 159 "\tbit 1 - Disable SYNCHRONIZE_CACHE SCSI command\n"
160 "\tbit 2 - Disable only if Battery not protecting Cache"); 160 "\tbit 2 - Disable only if Battery is protecting Cache");
161module_param(dacmode, int, S_IRUGO|S_IWUSR); 161module_param(dacmode, int, S_IRUGO|S_IWUSR);
162MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC." 162MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC."
163 " 0=off, 1=on"); 163 " 0=off, 1=on");
@@ -217,6 +217,14 @@ int aac_reset_devices;
217module_param_named(reset_devices, aac_reset_devices, int, S_IRUGO|S_IWUSR); 217module_param_named(reset_devices, aac_reset_devices, int, S_IRUGO|S_IWUSR);
218MODULE_PARM_DESC(reset_devices, "Force an adapter reset at initialization."); 218MODULE_PARM_DESC(reset_devices, "Force an adapter reset at initialization.");
219 219
220int aac_wwn = 1;
221module_param_named(wwn, aac_wwn, int, S_IRUGO|S_IWUSR);
222MODULE_PARM_DESC(wwn, "Select a WWN type for the arrays:\n"
223 "\t0 - Disable\n"
224 "\t1 - Array Meta Data Signature (default)\n"
225 "\t2 - Adapter Serial Number");
226
227
220static inline int aac_valid_context(struct scsi_cmnd *scsicmd, 228static inline int aac_valid_context(struct scsi_cmnd *scsicmd,
221 struct fib *fibptr) { 229 struct fib *fibptr) {
222 struct scsi_device *device; 230 struct scsi_device *device;
@@ -1206,9 +1214,8 @@ static int aac_scsi_32(struct fib * fib, struct scsi_cmnd * cmd)
1206 1214
1207static int aac_scsi_32_64(struct fib * fib, struct scsi_cmnd * cmd) 1215static int aac_scsi_32_64(struct fib * fib, struct scsi_cmnd * cmd)
1208{ 1216{
1209 if ((sizeof(dma_addr_t) > 4) && 1217 if ((sizeof(dma_addr_t) > 4) && fib->dev->needs_dac &&
1210 (num_physpages > (0xFFFFFFFFULL >> PAGE_SHIFT)) && 1218 (fib->dev->adapter_info.options & AAC_OPT_SGMAP_HOST64))
1211 (fib->dev->adapter_info.options & AAC_OPT_SGMAP_HOST64))
1212 return FAILED; 1219 return FAILED;
1213 return aac_scsi_32(fib, cmd); 1220 return aac_scsi_32(fib, cmd);
1214} 1221}
@@ -1371,8 +1378,11 @@ int aac_get_adapter_info(struct aac_dev* dev)
1371 if (dev->nondasd_support && !dev->in_reset) 1378 if (dev->nondasd_support && !dev->in_reset)
1372 printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); 1379 printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id);
1373 1380
1381 if (dma_get_required_mask(&dev->pdev->dev) > DMA_32BIT_MASK)
1382 dev->needs_dac = 1;
1374 dev->dac_support = 0; 1383 dev->dac_support = 0;
1375 if( (sizeof(dma_addr_t) > 4) && (dev->adapter_info.options & AAC_OPT_SGMAP_HOST64)){ 1384 if ((sizeof(dma_addr_t) > 4) && dev->needs_dac &&
1385 (dev->adapter_info.options & AAC_OPT_SGMAP_HOST64)) {
1376 if (!dev->in_reset) 1386 if (!dev->in_reset)
1377 printk(KERN_INFO "%s%d: 64bit support enabled.\n", 1387 printk(KERN_INFO "%s%d: 64bit support enabled.\n",
1378 dev->name, dev->id); 1388 dev->name, dev->id);
@@ -1382,14 +1392,23 @@ int aac_get_adapter_info(struct aac_dev* dev)
1382 if(dacmode != -1) { 1392 if(dacmode != -1) {
1383 dev->dac_support = (dacmode!=0); 1393 dev->dac_support = (dacmode!=0);
1384 } 1394 }
1395
1396 /* avoid problems with AAC_QUIRK_SCSI_32 controllers */
1397 if (dev->dac_support && (aac_get_driver_ident(dev->cardtype)->quirks
1398 & AAC_QUIRK_SCSI_32)) {
1399 dev->nondasd_support = 0;
1400 dev->jbod = 0;
1401 expose_physicals = 0;
1402 }
1403
1385 if(dev->dac_support != 0) { 1404 if(dev->dac_support != 0) {
1386 if (!pci_set_dma_mask(dev->pdev, DMA_64BIT_MASK) && 1405 if (!pci_set_dma_mask(dev->pdev, DMA_BIT_MASK(64)) &&
1387 !pci_set_consistent_dma_mask(dev->pdev, DMA_64BIT_MASK)) { 1406 !pci_set_consistent_dma_mask(dev->pdev, DMA_BIT_MASK(64))) {
1388 if (!dev->in_reset) 1407 if (!dev->in_reset)
1389 printk(KERN_INFO"%s%d: 64 Bit DAC enabled\n", 1408 printk(KERN_INFO"%s%d: 64 Bit DAC enabled\n",
1390 dev->name, dev->id); 1409 dev->name, dev->id);
1391 } else if (!pci_set_dma_mask(dev->pdev, DMA_32BIT_MASK) && 1410 } else if (!pci_set_dma_mask(dev->pdev, DMA_BIT_MASK(32)) &&
1392 !pci_set_consistent_dma_mask(dev->pdev, DMA_32BIT_MASK)) { 1411 !pci_set_consistent_dma_mask(dev->pdev, DMA_BIT_MASK(32))) {
1393 printk(KERN_INFO"%s%d: DMA mask set failed, 64 Bit DAC disabled\n", 1412 printk(KERN_INFO"%s%d: DMA mask set failed, 64 Bit DAC disabled\n",
1394 dev->name, dev->id); 1413 dev->name, dev->id);
1395 dev->dac_support = 0; 1414 dev->dac_support = 0;
@@ -2058,7 +2077,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
2058 dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", cid)); 2077 dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", cid));
2059 memset(&inq_data, 0, sizeof (struct inquiry_data)); 2078 memset(&inq_data, 0, sizeof (struct inquiry_data));
2060 2079
2061 if (scsicmd->cmnd[1] & 0x1) { 2080 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) {
2062 char *arr = (char *)&inq_data; 2081 char *arr = (char *)&inq_data;
2063 2082
2064 /* EVPD bit set */ 2083 /* EVPD bit set */
@@ -2081,7 +2100,12 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
2081 arr[1] = scsicmd->cmnd[2]; 2100 arr[1] = scsicmd->cmnd[2];
2082 scsi_sg_copy_from_buffer(scsicmd, &inq_data, 2101 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2083 sizeof(inq_data)); 2102 sizeof(inq_data));
2084 return aac_get_container_serial(scsicmd); 2103 if (aac_wwn != 2)
2104 return aac_get_container_serial(
2105 scsicmd);
2106 /* SLES 10 SP1 special */
2107 scsicmd->result = DID_OK << 16 |
2108 COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2085 } else { 2109 } else {
2086 /* vpd page not implemented */ 2110 /* vpd page not implemented */
2087 scsicmd->result = DID_OK << 16 | 2111 scsicmd->result = DID_OK << 16 |
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 73916adb8f80..cdbdec9f4fb2 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -12,7 +12,7 @@
12 *----------------------------------------------------------------------------*/ 12 *----------------------------------------------------------------------------*/
13 13
14#ifndef AAC_DRIVER_BUILD 14#ifndef AAC_DRIVER_BUILD
15# define AAC_DRIVER_BUILD 2456 15# define AAC_DRIVER_BUILD 2461
16# define AAC_DRIVER_BRANCH "-ms" 16# define AAC_DRIVER_BRANCH "-ms"
17#endif 17#endif
18#define MAXIMUM_NUM_CONTAINERS 32 18#define MAXIMUM_NUM_CONTAINERS 32
@@ -865,7 +865,11 @@ struct aac_supplement_adapter_info
865 u8 MfgPcbaSerialNo[12]; 865 u8 MfgPcbaSerialNo[12];
866 u8 MfgWWNName[8]; 866 u8 MfgWWNName[8];
867 __le32 SupportedOptions2; 867 __le32 SupportedOptions2;
868 __le32 ReservedGrowth[1]; 868 __le32 StructExpansion;
869 /* StructExpansion == 1 */
870 __le32 FeatureBits3;
871 __le32 SupportedPerformanceModes;
872 __le32 ReservedForFutureGrowth[80];
869}; 873};
870#define AAC_FEATURE_FALCON cpu_to_le32(0x00000010) 874#define AAC_FEATURE_FALCON cpu_to_le32(0x00000010)
871#define AAC_FEATURE_JBOD cpu_to_le32(0x08000000) 875#define AAC_FEATURE_JBOD cpu_to_le32(0x08000000)
@@ -1020,6 +1024,7 @@ struct aac_dev
1020 u8 jbod; 1024 u8 jbod;
1021 u8 cache_protected; 1025 u8 cache_protected;
1022 u8 dac_support; 1026 u8 dac_support;
1027 u8 needs_dac;
1023 u8 raid_scsi_mode; 1028 u8 raid_scsi_mode;
1024 u8 comm_interface; 1029 u8 comm_interface;
1025# define AAC_COMM_PRODUCER 0 1030# define AAC_COMM_PRODUCER 0
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
index 16310443b55a..d598eba630d0 100644
--- a/drivers/scsi/aacraid/comminit.c
+++ b/drivers/scsi/aacraid/comminit.c
@@ -54,6 +54,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
54 const unsigned long printfbufsiz = 256; 54 const unsigned long printfbufsiz = 256;
55 struct aac_init *init; 55 struct aac_init *init;
56 dma_addr_t phys; 56 dma_addr_t phys;
57 unsigned long aac_max_hostphysmempages;
57 58
58 size = fibsize + sizeof(struct aac_init) + commsize + commalign + printfbufsiz; 59 size = fibsize + sizeof(struct aac_init) + commsize + commalign + printfbufsiz;
59 60
@@ -90,7 +91,18 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
90 init->AdapterFibsPhysicalAddress = cpu_to_le32((u32)phys); 91 init->AdapterFibsPhysicalAddress = cpu_to_le32((u32)phys);
91 init->AdapterFibsSize = cpu_to_le32(fibsize); 92 init->AdapterFibsSize = cpu_to_le32(fibsize);
92 init->AdapterFibAlign = cpu_to_le32(sizeof(struct hw_fib)); 93 init->AdapterFibAlign = cpu_to_le32(sizeof(struct hw_fib));
93 init->HostPhysMemPages = cpu_to_le32(AAC_MAX_HOSTPHYSMEMPAGES); 94 /*
95 * number of 4k pages of host physical memory. The aacraid fw needs
96 * this number to be less than 4gb worth of pages. New firmware doesn't
97 * have any issues with the mapping system, but older Firmware did, and
98 * had *troubles* dealing with the math overloading past 32 bits, thus
99 * we must limit this field.
100 */
101 aac_max_hostphysmempages = dma_get_required_mask(&dev->pdev->dev) >> 12;
102 if (aac_max_hostphysmempages < AAC_MAX_HOSTPHYSMEMPAGES)
103 init->HostPhysMemPages = cpu_to_le32(aac_max_hostphysmempages);
104 else
105 init->HostPhysMemPages = cpu_to_le32(AAC_MAX_HOSTPHYSMEMPAGES);
94 106
95 init->InitFlags = 0; 107 init->InitFlags = 0;
96 if (dev->comm_interface == AAC_COMM_MESSAGE) { 108 if (dev->comm_interface == AAC_COMM_MESSAGE) {
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index d24c2670040b..956261f25181 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1206,18 +1206,18 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced)
1206 aac->fsa_dev = NULL; 1206 aac->fsa_dev = NULL;
1207 quirks = aac_get_driver_ident(index)->quirks; 1207 quirks = aac_get_driver_ident(index)->quirks;
1208 if (quirks & AAC_QUIRK_31BIT) { 1208 if (quirks & AAC_QUIRK_31BIT) {
1209 if (((retval = pci_set_dma_mask(aac->pdev, DMA_31BIT_MASK))) || 1209 if (((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(31)))) ||
1210 ((retval = pci_set_consistent_dma_mask(aac->pdev, DMA_31BIT_MASK)))) 1210 ((retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(31)))))
1211 goto out; 1211 goto out;
1212 } else { 1212 } else {
1213 if (((retval = pci_set_dma_mask(aac->pdev, DMA_32BIT_MASK))) || 1213 if (((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32)))) ||
1214 ((retval = pci_set_consistent_dma_mask(aac->pdev, DMA_32BIT_MASK)))) 1214 ((retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(32)))))
1215 goto out; 1215 goto out;
1216 } 1216 }
1217 if ((retval = (*(aac_get_driver_ident(index)->init))(aac))) 1217 if ((retval = (*(aac_get_driver_ident(index)->init))(aac)))
1218 goto out; 1218 goto out;
1219 if (quirks & AAC_QUIRK_31BIT) 1219 if (quirks & AAC_QUIRK_31BIT)
1220 if ((retval = pci_set_dma_mask(aac->pdev, DMA_32BIT_MASK))) 1220 if ((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32))))
1221 goto out; 1221 goto out;
1222 if (jafo) { 1222 if (jafo) {
1223 aac->thread = kthread_run(aac_command_thread, aac, aac->name); 1223 aac->thread = kthread_run(aac_command_thread, aac, aac->name);
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 36d8aab97efe..9b97c3e016fe 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -86,7 +86,13 @@ char aac_driver_version[] = AAC_DRIVER_FULL_VERSION;
86 * 86 *
87 * Note: The last field is used to index into aac_drivers below. 87 * Note: The last field is used to index into aac_drivers below.
88 */ 88 */
89static struct pci_device_id aac_pci_tbl[] = { 89#ifdef DECLARE_PCI_DEVICE_TABLE
90static DECLARE_PCI_DEVICE_TABLE(aac_pci_tbl) = {
91#elif defined(__devinitconst)
92static const struct pci_device_id aac_pci_tbl[] __devinitconst = {
93#else
94static const struct pci_device_id aac_pci_tbl[] __devinitdata = {
95#endif
90 { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */ 96 { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */
91 { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */ 97 { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */
92 { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */ 98 { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */
@@ -1089,16 +1095,16 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
1089 goto out; 1095 goto out;
1090 error = -ENODEV; 1096 error = -ENODEV;
1091 1097
1092 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || 1098 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||
1093 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) 1099 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)))
1094 goto out_disable_pdev; 1100 goto out_disable_pdev;
1095 /* 1101 /*
1096 * If the quirk31 bit is set, the adapter needs adapter 1102 * If the quirk31 bit is set, the adapter needs adapter
1097 * to driver communication memory to be allocated below 2gig 1103 * to driver communication memory to be allocated below 2gig
1098 */ 1104 */
1099 if (aac_drivers[index].quirks & AAC_QUIRK_31BIT) 1105 if (aac_drivers[index].quirks & AAC_QUIRK_31BIT)
1100 if (pci_set_dma_mask(pdev, DMA_31BIT_MASK) || 1106 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(31)) ||
1101 pci_set_consistent_dma_mask(pdev, DMA_31BIT_MASK)) 1107 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(31)))
1102 goto out_disable_pdev; 1108 goto out_disable_pdev;
1103 1109
1104 pci_set_master(pdev); 1110 pci_set_master(pdev);
@@ -1148,7 +1154,7 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
1148 * address space. 1154 * address space.
1149 */ 1155 */
1150 if (aac_drivers[index].quirks & AAC_QUIRK_31BIT) 1156 if (aac_drivers[index].quirks & AAC_QUIRK_31BIT)
1151 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) 1157 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
1152 goto out_deinit; 1158 goto out_deinit;
1153 1159
1154 aac->maximum_num_channels = aac_drivers[index].channels; 1160 aac->maximum_num_channels = aac_drivers[index].channels;
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 7507d8bc57a1..b756041f0b26 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -38,6 +38,7 @@
38#include <linux/pci.h> 38#include <linux/pci.h>
39#include <linux/spinlock.h> 39#include <linux/spinlock.h>
40#include <linux/dma-mapping.h> 40#include <linux/dma-mapping.h>
41#include <linux/firmware.h>
41 42
42#include <asm/io.h> 43#include <asm/io.h>
43#include <asm/system.h> 44#include <asm/system.h>
@@ -4519,8 +4520,8 @@ static void AscWriteLramByte(PortAddr iop_base, ushort addr, uchar byte_val)
4519 * and is maintained in little-endian order when written to LRAM. 4520 * and is maintained in little-endian order when written to LRAM.
4520 */ 4521 */
4521static void 4522static void
4522AscMemWordCopyPtrToLram(PortAddr iop_base, 4523AscMemWordCopyPtrToLram(PortAddr iop_base, ushort s_addr,
4523 ushort s_addr, uchar *s_buffer, int words) 4524 const uchar *s_buffer, int words)
4524{ 4525{
4525 int i; 4526 int i;
4526 4527
@@ -4642,8 +4643,8 @@ static ushort AscInitLram(ASC_DVC_VAR *asc_dvc)
4642} 4643}
4643 4644
4644static ASC_DCNT 4645static ASC_DCNT
4645AscLoadMicroCode(PortAddr iop_base, 4646AscLoadMicroCode(PortAddr iop_base, ushort s_addr,
4646 ushort s_addr, uchar *mcode_buf, ushort mcode_size) 4647 const uchar *mcode_buf, ushort mcode_size)
4647{ 4648{
4648 ASC_DCNT chksum; 4649 ASC_DCNT chksum;
4649 ushort mcode_word_size; 4650 ushort mcode_word_size;
@@ -4668,1618 +4669,6 @@ AscLoadMicroCode(PortAddr iop_base,
4668 return chksum; 4669 return chksum;
4669} 4670}
4670 4671
4671/* Microcode buffer is kept after initialization for error recovery. */
4672static uchar _asc_mcode_buf[] = {
4673 0x01, 0x03, 0x01, 0x19, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4674 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
4675 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4677 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x12, 0x0D, 0x05,
4679 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4680 0xFF, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4681 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xFF,
4682 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
4683 0x00, 0x00, 0xE4, 0x88, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73, 0x48, 0x04,
4684 0x36, 0x00, 0x00, 0xA2, 0xC2, 0x00, 0x80, 0x73, 0x03, 0x23, 0x36, 0x40,
4685 0xB6, 0x00, 0x36, 0x00, 0x05, 0xD6, 0x0C, 0xD2, 0x12, 0xDA, 0x00, 0xA2,
4686 0xC2, 0x00, 0x92, 0x80, 0x1E, 0x98, 0x50, 0x00, 0xF5, 0x00, 0x48, 0x98,
4687 0xDF, 0x23, 0x36, 0x60, 0xB6, 0x00, 0x92, 0x80, 0x4F, 0x00, 0xF5, 0x00,
4688 0x48, 0x98, 0xEF, 0x23, 0x36, 0x60, 0xB6, 0x00, 0x92, 0x80, 0x80, 0x62,
4689 0x92, 0x80, 0x00, 0x46, 0x15, 0xEE, 0x13, 0xEA, 0x02, 0x01, 0x09, 0xD8,
4690 0xCD, 0x04, 0x4D, 0x00, 0x00, 0xA3, 0xD6, 0x00, 0xA6, 0x97, 0x7F, 0x23,
4691 0x04, 0x61, 0x84, 0x01, 0xE6, 0x84, 0xD2, 0xC1, 0x80, 0x73, 0xCD, 0x04,
4692 0x4D, 0x00, 0x00, 0xA3, 0xDA, 0x01, 0xA6, 0x97, 0xC6, 0x81, 0xC2, 0x88,
4693 0x80, 0x73, 0x80, 0x77, 0x00, 0x01, 0x01, 0xA1, 0xFE, 0x00, 0x4F, 0x00,
4694 0x84, 0x97, 0x07, 0xA6, 0x08, 0x01, 0x00, 0x33, 0x03, 0x00, 0xC2, 0x88,
4695 0x03, 0x03, 0x01, 0xDE, 0xC2, 0x88, 0xCE, 0x00, 0x69, 0x60, 0xCE, 0x00,
4696 0x02, 0x03, 0x4A, 0x60, 0x00, 0xA2, 0x78, 0x01, 0x80, 0x63, 0x07, 0xA6,
4697 0x24, 0x01, 0x78, 0x81, 0x03, 0x03, 0x80, 0x63, 0xE2, 0x00, 0x07, 0xA6,
4698 0x34, 0x01, 0x00, 0x33, 0x04, 0x00, 0xC2, 0x88, 0x03, 0x07, 0x02, 0x01,
4699 0x04, 0xCA, 0x0D, 0x23, 0x68, 0x98, 0x4D, 0x04, 0x04, 0x85, 0x05, 0xD8,
4700 0x0D, 0x23, 0x68, 0x98, 0xCD, 0x04, 0x15, 0x23, 0xF8, 0x88, 0xFB, 0x23,
4701 0x02, 0x61, 0x82, 0x01, 0x80, 0x63, 0x02, 0x03, 0x06, 0xA3, 0x62, 0x01,
4702 0x00, 0x33, 0x0A, 0x00, 0xC2, 0x88, 0x4E, 0x00, 0x07, 0xA3, 0x6E, 0x01,
4703 0x00, 0x33, 0x0B, 0x00, 0xC2, 0x88, 0xCD, 0x04, 0x36, 0x2D, 0x00, 0x33,
4704 0x1A, 0x00, 0xC2, 0x88, 0x50, 0x04, 0x88, 0x81, 0x06, 0xAB, 0x82, 0x01,
4705 0x88, 0x81, 0x4E, 0x00, 0x07, 0xA3, 0x92, 0x01, 0x50, 0x00, 0x00, 0xA3,
4706 0x3C, 0x01, 0x00, 0x05, 0x7C, 0x81, 0x46, 0x97, 0x02, 0x01, 0x05, 0xC6,
4707 0x04, 0x23, 0xA0, 0x01, 0x15, 0x23, 0xA1, 0x01, 0xBE, 0x81, 0xFD, 0x23,
4708 0x02, 0x61, 0x82, 0x01, 0x0A, 0xDA, 0x4A, 0x00, 0x06, 0x61, 0x00, 0xA0,
4709 0xB4, 0x01, 0x80, 0x63, 0xCD, 0x04, 0x36, 0x2D, 0x00, 0x33, 0x1B, 0x00,
4710 0xC2, 0x88, 0x06, 0x23, 0x68, 0x98, 0xCD, 0x04, 0xE6, 0x84, 0x06, 0x01,
4711 0x00, 0xA2, 0xD4, 0x01, 0x57, 0x60, 0x00, 0xA0, 0xDA, 0x01, 0xE6, 0x84,
4712 0x80, 0x23, 0xA0, 0x01, 0xE6, 0x84, 0x80, 0x73, 0x4B, 0x00, 0x06, 0x61,
4713 0x00, 0xA2, 0x00, 0x02, 0x04, 0x01, 0x0C, 0xDE, 0x02, 0x01, 0x03, 0xCC,
4714 0x4F, 0x00, 0x84, 0x97, 0xFC, 0x81, 0x08, 0x23, 0x02, 0x41, 0x82, 0x01,
4715 0x4F, 0x00, 0x62, 0x97, 0x48, 0x04, 0x84, 0x80, 0xF0, 0x97, 0x00, 0x46,
4716 0x56, 0x00, 0x03, 0xC0, 0x01, 0x23, 0xE8, 0x00, 0x81, 0x73, 0x06, 0x29,
4717 0x03, 0x42, 0x06, 0xE2, 0x03, 0xEE, 0x6B, 0xEB, 0x11, 0x23, 0xF8, 0x88,
4718 0x04, 0x98, 0xF0, 0x80, 0x80, 0x73, 0x80, 0x77, 0x07, 0xA4, 0x2A, 0x02,
4719 0x7C, 0x95, 0x06, 0xA6, 0x34, 0x02, 0x03, 0xA6, 0x4C, 0x04, 0x46, 0x82,
4720 0x04, 0x01, 0x03, 0xD8, 0xB4, 0x98, 0x6A, 0x96, 0x46, 0x82, 0xFE, 0x95,
4721 0x80, 0x67, 0x83, 0x03, 0x80, 0x63, 0xB6, 0x2D, 0x02, 0xA6, 0x6C, 0x02,
4722 0x07, 0xA6, 0x5A, 0x02, 0x06, 0xA6, 0x5E, 0x02, 0x03, 0xA6, 0x62, 0x02,
4723 0xC2, 0x88, 0x7C, 0x95, 0x48, 0x82, 0x60, 0x96, 0x48, 0x82, 0x04, 0x23,
4724 0xA0, 0x01, 0x14, 0x23, 0xA1, 0x01, 0x3C, 0x84, 0x04, 0x01, 0x0C, 0xDC,
4725 0xE0, 0x23, 0x25, 0x61, 0xEF, 0x00, 0x14, 0x01, 0x4F, 0x04, 0xA8, 0x01,
4726 0x6F, 0x00, 0xA5, 0x01, 0x03, 0x23, 0xA4, 0x01, 0x06, 0x23, 0x9C, 0x01,
4727 0x24, 0x2B, 0x1C, 0x01, 0x02, 0xA6, 0xAA, 0x02, 0x07, 0xA6, 0x5A, 0x02,
4728 0x06, 0xA6, 0x5E, 0x02, 0x03, 0xA6, 0x20, 0x04, 0x01, 0xA6, 0xB4, 0x02,
4729 0x00, 0xA6, 0xB4, 0x02, 0x00, 0x33, 0x12, 0x00, 0xC2, 0x88, 0x00, 0x0E,
4730 0x80, 0x63, 0x00, 0x43, 0x00, 0xA0, 0x8C, 0x02, 0x4D, 0x04, 0x04, 0x01,
4731 0x0B, 0xDC, 0xE7, 0x23, 0x04, 0x61, 0x84, 0x01, 0x10, 0x31, 0x12, 0x35,
4732 0x14, 0x01, 0xEC, 0x00, 0x6C, 0x38, 0x00, 0x3F, 0x00, 0x00, 0xEA, 0x82,
4733 0x18, 0x23, 0x04, 0x61, 0x18, 0xA0, 0xE2, 0x02, 0x04, 0x01, 0xA2, 0xC8,
4734 0x00, 0x33, 0x1F, 0x00, 0xC2, 0x88, 0x08, 0x31, 0x0A, 0x35, 0x0C, 0x39,
4735 0x0E, 0x3D, 0x7E, 0x98, 0xB6, 0x2D, 0x01, 0xA6, 0x14, 0x03, 0x00, 0xA6,
4736 0x14, 0x03, 0x07, 0xA6, 0x0C, 0x03, 0x06, 0xA6, 0x10, 0x03, 0x03, 0xA6,
4737 0x20, 0x04, 0x02, 0xA6, 0x6C, 0x02, 0x00, 0x33, 0x33, 0x00, 0xC2, 0x88,
4738 0x7C, 0x95, 0xEE, 0x82, 0x60, 0x96, 0xEE, 0x82, 0x82, 0x98, 0x80, 0x42,
4739 0x7E, 0x98, 0x64, 0xE4, 0x04, 0x01, 0x2D, 0xC8, 0x31, 0x05, 0x07, 0x01,
4740 0x00, 0xA2, 0x54, 0x03, 0x00, 0x43, 0x87, 0x01, 0x05, 0x05, 0x86, 0x98,
4741 0x7E, 0x98, 0x00, 0xA6, 0x16, 0x03, 0x07, 0xA6, 0x4C, 0x03, 0x03, 0xA6,
4742 0x3C, 0x04, 0x06, 0xA6, 0x50, 0x03, 0x01, 0xA6, 0x16, 0x03, 0x00, 0x33,
4743 0x25, 0x00, 0xC2, 0x88, 0x7C, 0x95, 0x32, 0x83, 0x60, 0x96, 0x32, 0x83,
4744 0x04, 0x01, 0x10, 0xCE, 0x07, 0xC8, 0x05, 0x05, 0xEB, 0x04, 0x00, 0x33,
4745 0x00, 0x20, 0xC0, 0x20, 0x81, 0x62, 0x72, 0x83, 0x00, 0x01, 0x05, 0x05,
4746 0xFF, 0xA2, 0x7A, 0x03, 0xB1, 0x01, 0x08, 0x23, 0xB2, 0x01, 0x2E, 0x83,
4747 0x05, 0x05, 0x15, 0x01, 0x00, 0xA2, 0x9A, 0x03, 0xEC, 0x00, 0x6E, 0x00,
4748 0x95, 0x01, 0x6C, 0x38, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xA6, 0x96, 0x03,
4749 0x00, 0xA6, 0x96, 0x03, 0x10, 0x84, 0x80, 0x42, 0x7E, 0x98, 0x01, 0xA6,
4750 0xA4, 0x03, 0x00, 0xA6, 0xBC, 0x03, 0x10, 0x84, 0xA8, 0x98, 0x80, 0x42,
4751 0x01, 0xA6, 0xA4, 0x03, 0x07, 0xA6, 0xB2, 0x03, 0xD4, 0x83, 0x7C, 0x95,
4752 0xA8, 0x83, 0x00, 0x33, 0x2F, 0x00, 0xC2, 0x88, 0xA8, 0x98, 0x80, 0x42,
4753 0x00, 0xA6, 0xBC, 0x03, 0x07, 0xA6, 0xCA, 0x03, 0xD4, 0x83, 0x7C, 0x95,
4754 0xC0, 0x83, 0x00, 0x33, 0x26, 0x00, 0xC2, 0x88, 0x38, 0x2B, 0x80, 0x32,
4755 0x80, 0x36, 0x04, 0x23, 0xA0, 0x01, 0x12, 0x23, 0xA1, 0x01, 0x10, 0x84,
4756 0x07, 0xF0, 0x06, 0xA4, 0xF4, 0x03, 0x80, 0x6B, 0x80, 0x67, 0x05, 0x23,
4757 0x83, 0x03, 0x80, 0x63, 0x03, 0xA6, 0x0E, 0x04, 0x07, 0xA6, 0x06, 0x04,
4758 0x06, 0xA6, 0x0A, 0x04, 0x00, 0x33, 0x17, 0x00, 0xC2, 0x88, 0x7C, 0x95,
4759 0xF4, 0x83, 0x60, 0x96, 0xF4, 0x83, 0x20, 0x84, 0x07, 0xF0, 0x06, 0xA4,
4760 0x20, 0x04, 0x80, 0x6B, 0x80, 0x67, 0x05, 0x23, 0x83, 0x03, 0x80, 0x63,
4761 0xB6, 0x2D, 0x03, 0xA6, 0x3C, 0x04, 0x07, 0xA6, 0x34, 0x04, 0x06, 0xA6,
4762 0x38, 0x04, 0x00, 0x33, 0x30, 0x00, 0xC2, 0x88, 0x7C, 0x95, 0x20, 0x84,
4763 0x60, 0x96, 0x20, 0x84, 0x1D, 0x01, 0x06, 0xCC, 0x00, 0x33, 0x00, 0x84,
4764 0xC0, 0x20, 0x00, 0x23, 0xEA, 0x00, 0x81, 0x62, 0xA2, 0x0D, 0x80, 0x63,
4765 0x07, 0xA6, 0x5A, 0x04, 0x00, 0x33, 0x18, 0x00, 0xC2, 0x88, 0x03, 0x03,
4766 0x80, 0x63, 0xA3, 0x01, 0x07, 0xA4, 0x64, 0x04, 0x23, 0x01, 0x00, 0xA2,
4767 0x86, 0x04, 0x0A, 0xA0, 0x76, 0x04, 0xE0, 0x00, 0x00, 0x33, 0x1D, 0x00,
4768 0xC2, 0x88, 0x0B, 0xA0, 0x82, 0x04, 0xE0, 0x00, 0x00, 0x33, 0x1E, 0x00,
4769 0xC2, 0x88, 0x42, 0x23, 0xF8, 0x88, 0x00, 0x23, 0x22, 0xA3, 0xE6, 0x04,
4770 0x08, 0x23, 0x22, 0xA3, 0xA2, 0x04, 0x28, 0x23, 0x22, 0xA3, 0xAE, 0x04,
4771 0x02, 0x23, 0x22, 0xA3, 0xC4, 0x04, 0x42, 0x23, 0xF8, 0x88, 0x4A, 0x00,
4772 0x06, 0x61, 0x00, 0xA0, 0xAE, 0x04, 0x45, 0x23, 0xF8, 0x88, 0x04, 0x98,
4773 0x00, 0xA2, 0xC0, 0x04, 0xB4, 0x98, 0x00, 0x33, 0x00, 0x82, 0xC0, 0x20,
4774 0x81, 0x62, 0xE8, 0x81, 0x47, 0x23, 0xF8, 0x88, 0x04, 0x01, 0x0B, 0xDE,
4775 0x04, 0x98, 0xB4, 0x98, 0x00, 0x33, 0x00, 0x81, 0xC0, 0x20, 0x81, 0x62,
4776 0x14, 0x01, 0x00, 0xA0, 0x00, 0x02, 0x43, 0x23, 0xF8, 0x88, 0x04, 0x23,
4777 0xA0, 0x01, 0x44, 0x23, 0xA1, 0x01, 0x80, 0x73, 0x4D, 0x00, 0x03, 0xA3,
4778 0xF4, 0x04, 0x00, 0x33, 0x27, 0x00, 0xC2, 0x88, 0x04, 0x01, 0x04, 0xDC,
4779 0x02, 0x23, 0xA2, 0x01, 0x04, 0x23, 0xA0, 0x01, 0x04, 0x98, 0x26, 0x95,
4780 0x4B, 0x00, 0xF6, 0x00, 0x4F, 0x04, 0x4F, 0x00, 0x00, 0xA3, 0x22, 0x05,
4781 0x00, 0x05, 0x76, 0x00, 0x06, 0x61, 0x00, 0xA2, 0x1C, 0x05, 0x0A, 0x85,
4782 0x46, 0x97, 0xCD, 0x04, 0x24, 0x85, 0x48, 0x04, 0x84, 0x80, 0x02, 0x01,
4783 0x03, 0xDA, 0x80, 0x23, 0x82, 0x01, 0x34, 0x85, 0x02, 0x23, 0xA0, 0x01,
4784 0x4A, 0x00, 0x06, 0x61, 0x00, 0xA2, 0x40, 0x05, 0x1D, 0x01, 0x04, 0xD6,
4785 0xFF, 0x23, 0x86, 0x41, 0x4B, 0x60, 0xCB, 0x00, 0xFF, 0x23, 0x80, 0x01,
4786 0x49, 0x00, 0x81, 0x01, 0x04, 0x01, 0x02, 0xC8, 0x30, 0x01, 0x80, 0x01,
4787 0xF7, 0x04, 0x03, 0x01, 0x49, 0x04, 0x80, 0x01, 0xC9, 0x00, 0x00, 0x05,
4788 0x00, 0x01, 0xFF, 0xA0, 0x60, 0x05, 0x77, 0x04, 0x01, 0x23, 0xEA, 0x00,
4789 0x5D, 0x00, 0xFE, 0xC7, 0x00, 0x62, 0x00, 0x23, 0xEA, 0x00, 0x00, 0x63,
4790 0x07, 0xA4, 0xF8, 0x05, 0x03, 0x03, 0x02, 0xA0, 0x8E, 0x05, 0xF4, 0x85,
4791 0x00, 0x33, 0x2D, 0x00, 0xC2, 0x88, 0x04, 0xA0, 0xB8, 0x05, 0x80, 0x63,
4792 0x00, 0x23, 0xDF, 0x00, 0x4A, 0x00, 0x06, 0x61, 0x00, 0xA2, 0xA4, 0x05,
4793 0x1D, 0x01, 0x06, 0xD6, 0x02, 0x23, 0x02, 0x41, 0x82, 0x01, 0x50, 0x00,
4794 0x62, 0x97, 0x04, 0x85, 0x04, 0x23, 0x02, 0x41, 0x82, 0x01, 0x04, 0x85,
4795 0x08, 0xA0, 0xBE, 0x05, 0xF4, 0x85, 0x03, 0xA0, 0xC4, 0x05, 0xF4, 0x85,
4796 0x01, 0xA0, 0xCE, 0x05, 0x88, 0x00, 0x80, 0x63, 0xCC, 0x86, 0x07, 0xA0,
4797 0xEE, 0x05, 0x5F, 0x00, 0x00, 0x2B, 0xDF, 0x08, 0x00, 0xA2, 0xE6, 0x05,
4798 0x80, 0x67, 0x80, 0x63, 0x01, 0xA2, 0x7A, 0x06, 0x7C, 0x85, 0x06, 0x23,
4799 0x68, 0x98, 0x48, 0x23, 0xF8, 0x88, 0x07, 0x23, 0x80, 0x00, 0x06, 0x87,
4800 0x80, 0x63, 0x7C, 0x85, 0x00, 0x23, 0xDF, 0x00, 0x00, 0x63, 0x4A, 0x00,
4801 0x06, 0x61, 0x00, 0xA2, 0x36, 0x06, 0x1D, 0x01, 0x16, 0xD4, 0xC0, 0x23,
4802 0x07, 0x41, 0x83, 0x03, 0x80, 0x63, 0x06, 0xA6, 0x1C, 0x06, 0x00, 0x33,
4803 0x37, 0x00, 0xC2, 0x88, 0x1D, 0x01, 0x01, 0xD6, 0x20, 0x23, 0x63, 0x60,
4804 0x83, 0x03, 0x80, 0x63, 0x02, 0x23, 0xDF, 0x00, 0x07, 0xA6, 0x7C, 0x05,
4805 0xEF, 0x04, 0x6F, 0x00, 0x00, 0x63, 0x4B, 0x00, 0x06, 0x41, 0xCB, 0x00,
4806 0x52, 0x00, 0x06, 0x61, 0x00, 0xA2, 0x4E, 0x06, 0x1D, 0x01, 0x03, 0xCA,
4807 0xC0, 0x23, 0x07, 0x41, 0x00, 0x63, 0x1D, 0x01, 0x04, 0xCC, 0x00, 0x33,
4808 0x00, 0x83, 0xC0, 0x20, 0x81, 0x62, 0x80, 0x23, 0x07, 0x41, 0x00, 0x63,
4809 0x80, 0x67, 0x08, 0x23, 0x83, 0x03, 0x80, 0x63, 0x00, 0x63, 0x01, 0x23,
4810 0xDF, 0x00, 0x06, 0xA6, 0x84, 0x06, 0x07, 0xA6, 0x7C, 0x05, 0x80, 0x67,
4811 0x80, 0x63, 0x00, 0x33, 0x00, 0x40, 0xC0, 0x20, 0x81, 0x62, 0x00, 0x63,
4812 0x00, 0x00, 0xFE, 0x95, 0x83, 0x03, 0x80, 0x63, 0x06, 0xA6, 0x94, 0x06,
4813 0x07, 0xA6, 0x7C, 0x05, 0x00, 0x00, 0x01, 0xA0, 0x14, 0x07, 0x00, 0x2B,
4814 0x40, 0x0E, 0x80, 0x63, 0x01, 0x00, 0x06, 0xA6, 0xAA, 0x06, 0x07, 0xA6,
4815 0x7C, 0x05, 0x40, 0x0E, 0x80, 0x63, 0x00, 0x43, 0x00, 0xA0, 0xA2, 0x06,
4816 0x06, 0xA6, 0xBC, 0x06, 0x07, 0xA6, 0x7C, 0x05, 0x80, 0x67, 0x40, 0x0E,
4817 0x80, 0x63, 0x07, 0xA6, 0x7C, 0x05, 0x00, 0x23, 0xDF, 0x00, 0x00, 0x63,
4818 0x07, 0xA6, 0xD6, 0x06, 0x00, 0x33, 0x2A, 0x00, 0xC2, 0x88, 0x03, 0x03,
4819 0x80, 0x63, 0x89, 0x00, 0x0A, 0x2B, 0x07, 0xA6, 0xE8, 0x06, 0x00, 0x33,
4820 0x29, 0x00, 0xC2, 0x88, 0x00, 0x43, 0x00, 0xA2, 0xF4, 0x06, 0xC0, 0x0E,
4821 0x80, 0x63, 0xDE, 0x86, 0xC0, 0x0E, 0x00, 0x33, 0x00, 0x80, 0xC0, 0x20,
4822 0x81, 0x62, 0x04, 0x01, 0x02, 0xDA, 0x80, 0x63, 0x7C, 0x85, 0x80, 0x7B,
4823 0x80, 0x63, 0x06, 0xA6, 0x8C, 0x06, 0x00, 0x33, 0x2C, 0x00, 0xC2, 0x88,
4824 0x0C, 0xA2, 0x2E, 0x07, 0xFE, 0x95, 0x83, 0x03, 0x80, 0x63, 0x06, 0xA6,
4825 0x2C, 0x07, 0x07, 0xA6, 0x7C, 0x05, 0x00, 0x33, 0x3D, 0x00, 0xC2, 0x88,
4826 0x00, 0x00, 0x80, 0x67, 0x83, 0x03, 0x80, 0x63, 0x0C, 0xA0, 0x44, 0x07,
4827 0x07, 0xA6, 0x7C, 0x05, 0xBF, 0x23, 0x04, 0x61, 0x84, 0x01, 0xE6, 0x84,
4828 0x00, 0x63, 0xF0, 0x04, 0x01, 0x01, 0xF1, 0x00, 0x00, 0x01, 0xF2, 0x00,
4829 0x01, 0x05, 0x80, 0x01, 0x72, 0x04, 0x71, 0x00, 0x81, 0x01, 0x70, 0x04,
4830 0x80, 0x05, 0x81, 0x05, 0x00, 0x63, 0xF0, 0x04, 0xF2, 0x00, 0x72, 0x04,
4831 0x01, 0x01, 0xF1, 0x00, 0x70, 0x00, 0x81, 0x01, 0x70, 0x04, 0x71, 0x00,
4832 0x81, 0x01, 0x72, 0x00, 0x80, 0x01, 0x71, 0x04, 0x70, 0x00, 0x80, 0x01,
4833 0x70, 0x04, 0x00, 0x63, 0xF0, 0x04, 0xF2, 0x00, 0x72, 0x04, 0x00, 0x01,
4834 0xF1, 0x00, 0x70, 0x00, 0x80, 0x01, 0x70, 0x04, 0x71, 0x00, 0x80, 0x01,
4835 0x72, 0x00, 0x81, 0x01, 0x71, 0x04, 0x70, 0x00, 0x81, 0x01, 0x70, 0x04,
4836 0x00, 0x63, 0x00, 0x23, 0xB3, 0x01, 0x83, 0x05, 0xA3, 0x01, 0xA2, 0x01,
4837 0xA1, 0x01, 0x01, 0x23, 0xA0, 0x01, 0x00, 0x01, 0xC8, 0x00, 0x03, 0xA1,
4838 0xC4, 0x07, 0x00, 0x33, 0x07, 0x00, 0xC2, 0x88, 0x80, 0x05, 0x81, 0x05,
4839 0x04, 0x01, 0x11, 0xC8, 0x48, 0x00, 0xB0, 0x01, 0xB1, 0x01, 0x08, 0x23,
4840 0xB2, 0x01, 0x05, 0x01, 0x48, 0x04, 0x00, 0x43, 0x00, 0xA2, 0xE4, 0x07,
4841 0x00, 0x05, 0xDA, 0x87, 0x00, 0x01, 0xC8, 0x00, 0xFF, 0x23, 0x80, 0x01,
4842 0x05, 0x05, 0x00, 0x63, 0xF7, 0x04, 0x1A, 0x09, 0xF6, 0x08, 0x6E, 0x04,
4843 0x00, 0x02, 0x80, 0x43, 0x76, 0x08, 0x80, 0x02, 0x77, 0x04, 0x00, 0x63,
4844 0xF7, 0x04, 0x1A, 0x09, 0xF6, 0x08, 0x6E, 0x04, 0x00, 0x02, 0x00, 0xA0,
4845 0x14, 0x08, 0x16, 0x88, 0x00, 0x43, 0x76, 0x08, 0x80, 0x02, 0x77, 0x04,
4846 0x00, 0x63, 0xF3, 0x04, 0x00, 0x23, 0xF4, 0x00, 0x74, 0x00, 0x80, 0x43,
4847 0xF4, 0x00, 0xCF, 0x40, 0x00, 0xA2, 0x44, 0x08, 0x74, 0x04, 0x02, 0x01,
4848 0xF7, 0xC9, 0xF6, 0xD9, 0x00, 0x01, 0x01, 0xA1, 0x24, 0x08, 0x04, 0x98,
4849 0x26, 0x95, 0x24, 0x88, 0x73, 0x04, 0x00, 0x63, 0xF3, 0x04, 0x75, 0x04,
4850 0x5A, 0x88, 0x02, 0x01, 0x04, 0xD8, 0x46, 0x97, 0x04, 0x98, 0x26, 0x95,
4851 0x4A, 0x88, 0x75, 0x00, 0x00, 0xA3, 0x64, 0x08, 0x00, 0x05, 0x4E, 0x88,
4852 0x73, 0x04, 0x00, 0x63, 0x80, 0x7B, 0x80, 0x63, 0x06, 0xA6, 0x76, 0x08,
4853 0x00, 0x33, 0x3E, 0x00, 0xC2, 0x88, 0x80, 0x67, 0x83, 0x03, 0x80, 0x63,
4854 0x00, 0x63, 0x38, 0x2B, 0x9C, 0x88, 0x38, 0x2B, 0x92, 0x88, 0x32, 0x09,
4855 0x31, 0x05, 0x92, 0x98, 0x05, 0x05, 0xB2, 0x09, 0x00, 0x63, 0x00, 0x32,
4856 0x00, 0x36, 0x00, 0x3A, 0x00, 0x3E, 0x00, 0x63, 0x80, 0x32, 0x80, 0x36,
4857 0x80, 0x3A, 0x80, 0x3E, 0xB4, 0x3D, 0x00, 0x63, 0x38, 0x2B, 0x40, 0x32,
4858 0x40, 0x36, 0x40, 0x3A, 0x40, 0x3E, 0x00, 0x63, 0x5A, 0x20, 0xC9, 0x40,
4859 0x00, 0xA0, 0xB4, 0x08, 0x5D, 0x00, 0xFE, 0xC3, 0x00, 0x63, 0x80, 0x73,
4860 0xE6, 0x20, 0x02, 0x23, 0xE8, 0x00, 0x82, 0x73, 0xFF, 0xFD, 0x80, 0x73,
4861 0x13, 0x23, 0xF8, 0x88, 0x66, 0x20, 0xC0, 0x20, 0x04, 0x23, 0xA0, 0x01,
4862 0xA1, 0x23, 0xA1, 0x01, 0x81, 0x62, 0xE2, 0x88, 0x80, 0x73, 0x80, 0x77,
4863 0x68, 0x00, 0x00, 0xA2, 0x80, 0x00, 0x03, 0xC2, 0xF1, 0xC7, 0x41, 0x23,
4864 0xF8, 0x88, 0x11, 0x23, 0xA1, 0x01, 0x04, 0x23, 0xA0, 0x01, 0xE6, 0x84,
4865};
4866
4867static unsigned short _asc_mcode_size = sizeof(_asc_mcode_buf);
4868static ADV_DCNT _asc_mcode_chksum = 0x012C453FUL;
4869
4870/* Microcode buffer is kept after initialization for error recovery. */
4871static unsigned char _adv_asc3550_buf[] = {
4872 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0x16, 0x18, 0xe4, 0x00, 0xfc,
4873 0x01, 0x00, 0x48, 0xe4, 0xbe, 0x18, 0x18, 0x80, 0x03, 0xf6, 0x02, 0x00,
4874 0x00, 0xfa, 0xff, 0xff, 0x28, 0x0e, 0x9e, 0xe7, 0xff, 0x00, 0x82, 0xe7,
4875 0x00, 0xea, 0x00, 0xf6, 0x01, 0xe6, 0x09, 0xe7, 0x55, 0xf0, 0x01, 0xf6,
4876 0x01, 0xfa, 0x08, 0x00, 0x03, 0x00, 0x04, 0x00, 0x18, 0xf4, 0x10, 0x00,
4877 0x00, 0xec, 0x85, 0xf0, 0xbc, 0x00, 0xd5, 0xf0, 0x8e, 0x0c, 0x38, 0x54,
4878 0x00, 0xe6, 0x1e, 0xf0, 0x86, 0xf0, 0xb4, 0x00, 0x98, 0x57, 0xd0, 0x01,
4879 0x0c, 0x1c, 0x3e, 0x1c, 0x0c, 0x00, 0xbb, 0x00, 0xaa, 0x18, 0x02, 0x80,
4880 0x32, 0xf0, 0x01, 0xfc, 0x88, 0x0c, 0xc6, 0x12, 0x02, 0x13, 0x18, 0x40,
4881 0x00, 0x57, 0x01, 0xea, 0x3c, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x04, 0x12,
4882 0x3e, 0x57, 0x00, 0x80, 0x03, 0xe6, 0xb6, 0x00, 0xc0, 0x00, 0x01, 0x01,
4883 0x3e, 0x01, 0xda, 0x0f, 0x22, 0x10, 0x08, 0x12, 0x02, 0x4a, 0xb9, 0x54,
4884 0x03, 0x58, 0x1b, 0x80, 0x30, 0xe4, 0x4b, 0xe4, 0x20, 0x00, 0x32, 0x00,
4885 0x3e, 0x00, 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01,
4886 0x70, 0x01, 0x72, 0x01, 0x74, 0x01, 0x76, 0x01, 0x78, 0x01, 0x62, 0x0a,
4887 0x92, 0x0c, 0x2c, 0x10, 0x2e, 0x10, 0x06, 0x13, 0x4c, 0x1c, 0xbb, 0x55,
4888 0x3c, 0x56, 0x04, 0x80, 0x4a, 0xe4, 0x02, 0xee, 0x5b, 0xf0, 0xb1, 0xf0,
4889 0x03, 0xf7, 0x06, 0xf7, 0x03, 0xfc, 0x0f, 0x00, 0x40, 0x00, 0xbe, 0x00,
4890 0x00, 0x01, 0xb0, 0x08, 0x30, 0x13, 0x64, 0x15, 0x32, 0x1c, 0x38, 0x1c,
4891 0x4e, 0x1c, 0x10, 0x44, 0x02, 0x48, 0x00, 0x4c, 0x04, 0xea, 0x5d, 0xf0,
4892 0x04, 0xf6, 0x02, 0xfc, 0x05, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00,
4893 0xcc, 0x00, 0x20, 0x01, 0x4e, 0x01, 0x4e, 0x0b, 0x1e, 0x0e, 0x0c, 0x10,
4894 0x0a, 0x12, 0x04, 0x13, 0x40, 0x13, 0x30, 0x1c, 0x00, 0x4e, 0xbd, 0x56,
4895 0x06, 0x83, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0, 0xa7, 0xf0,
4896 0xb8, 0xf0, 0x0e, 0xf7, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x9b, 0x00,
4897 0xa4, 0x00, 0xb5, 0x00, 0xba, 0x00, 0xd0, 0x00, 0xe1, 0x00, 0xe7, 0x00,
4898 0xde, 0x03, 0x56, 0x0a, 0x14, 0x0e, 0x02, 0x10, 0x04, 0x10, 0x0a, 0x10,
4899 0x36, 0x10, 0x0a, 0x13, 0x12, 0x13, 0x52, 0x13, 0x10, 0x15, 0x14, 0x15,
4900 0xac, 0x16, 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44,
4901 0x91, 0x44, 0x0a, 0x45, 0x48, 0x46, 0x01, 0x48, 0x68, 0x54, 0x83, 0x55,
4902 0xb0, 0x57, 0x01, 0x58, 0x83, 0x59, 0x05, 0xe6, 0x0b, 0xf0, 0x0c, 0xf0,
4903 0x5c, 0xf0, 0x4b, 0xf4, 0x04, 0xf8, 0x05, 0xf8, 0x02, 0xfa, 0x03, 0xfa,
4904 0x04, 0xfc, 0x05, 0xfc, 0x07, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x1c, 0x00,
4905 0x9e, 0x00, 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00, 0x22, 0x01,
4906 0x26, 0x01, 0x79, 0x01, 0x7a, 0x01, 0xc0, 0x01, 0xc2, 0x01, 0x7c, 0x02,
4907 0x5a, 0x03, 0xea, 0x04, 0xe8, 0x07, 0x68, 0x08, 0x69, 0x08, 0xba, 0x08,
4908 0xe9, 0x09, 0x06, 0x0b, 0x3a, 0x0e, 0x00, 0x10, 0x1a, 0x10, 0xed, 0x10,
4909 0xf1, 0x10, 0x06, 0x12, 0x0c, 0x13, 0x16, 0x13, 0x1e, 0x13, 0x82, 0x13,
4910 0x42, 0x14, 0xd6, 0x14, 0x8a, 0x15, 0xc6, 0x17, 0xd2, 0x17, 0x6b, 0x18,
4911 0x12, 0x1c, 0x46, 0x1c, 0x9c, 0x32, 0x00, 0x40, 0x0e, 0x47, 0x48, 0x47,
4912 0x41, 0x48, 0x89, 0x48, 0x80, 0x4c, 0x00, 0x54, 0x44, 0x55, 0xe5, 0x55,
4913 0x14, 0x56, 0x77, 0x57, 0xbf, 0x57, 0x40, 0x5c, 0x06, 0x80, 0x08, 0x90,
4914 0x03, 0xa1, 0xfe, 0x9c, 0xf0, 0x29, 0x02, 0xfe, 0xb8, 0x0c, 0xff, 0x10,
4915 0x00, 0x00, 0xd0, 0xfe, 0xcc, 0x18, 0x00, 0xcf, 0xfe, 0x80, 0x01, 0xff,
4916 0x03, 0x00, 0x00, 0xfe, 0x93, 0x15, 0xfe, 0x0f, 0x05, 0xff, 0x38, 0x00,
4917 0x00, 0xfe, 0x57, 0x24, 0x00, 0xfe, 0x48, 0x00, 0x4f, 0xff, 0x04, 0x00,
4918 0x00, 0x10, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x08,
4919 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x0f,
4920 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00,
4921 0xfe, 0x04, 0xf7, 0xcf, 0x2a, 0x67, 0x0b, 0x01, 0xfe, 0xce, 0x0e, 0xfe,
4922 0x04, 0xf7, 0xcf, 0x67, 0x0b, 0x3c, 0x2a, 0xfe, 0x3d, 0xf0, 0xfe, 0x02,
4923 0x02, 0xfe, 0x20, 0xf0, 0x9c, 0xfe, 0x91, 0xf0, 0xfe, 0xf0, 0x01, 0xfe,
4924 0x90, 0xf0, 0xfe, 0xf0, 0x01, 0xfe, 0x8f, 0xf0, 0x9c, 0x05, 0x51, 0x3b,
4925 0x02, 0xfe, 0xd4, 0x0c, 0x01, 0xfe, 0x44, 0x0d, 0xfe, 0xdd, 0x12, 0xfe,
4926 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x05, 0xfe, 0xa6, 0x00, 0xfe, 0xd3, 0x12,
4927 0x47, 0x18, 0xfe, 0xa6, 0x00, 0xb5, 0xfe, 0x48, 0xf0, 0xfe, 0x86, 0x02,
4928 0xfe, 0x49, 0xf0, 0xfe, 0xa0, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xbe, 0x02,
4929 0xfe, 0x46, 0xf0, 0xfe, 0x50, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x56, 0x02,
4930 0xfe, 0x43, 0xf0, 0xfe, 0x44, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x48, 0x02,
4931 0xfe, 0x45, 0xf0, 0xfe, 0x4c, 0x02, 0x17, 0x0b, 0xa0, 0x17, 0x06, 0x18,
4932 0x96, 0x02, 0x29, 0xfe, 0x00, 0x1c, 0xde, 0xfe, 0x02, 0x1c, 0xdd, 0xfe,
4933 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0xfe, 0x20, 0x17, 0xfe, 0xe7, 0x10,
4934 0xfe, 0x06, 0xfc, 0xc7, 0x0a, 0x6b, 0x01, 0x9e, 0x02, 0x29, 0x14, 0x4d,
4935 0x37, 0x97, 0x01, 0xfe, 0x64, 0x0f, 0x0a, 0x6b, 0x01, 0x82, 0xfe, 0xbd,
4936 0x10, 0x0a, 0x6b, 0x01, 0x82, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe,
4937 0x58, 0x1c, 0x17, 0x06, 0x18, 0x96, 0x2a, 0x25, 0x29, 0xfe, 0x3d, 0xf0,
4938 0xfe, 0x02, 0x02, 0x21, 0xfe, 0x94, 0x02, 0xfe, 0x5a, 0x1c, 0xea, 0xfe,
4939 0x14, 0x1c, 0x14, 0xfe, 0x30, 0x00, 0x37, 0x97, 0x01, 0xfe, 0x54, 0x0f,
4940 0x17, 0x06, 0x18, 0x96, 0x02, 0xd0, 0x1e, 0x20, 0x07, 0x10, 0x34, 0xfe,
4941 0x69, 0x10, 0x17, 0x06, 0x18, 0x96, 0xfe, 0x04, 0xec, 0x20, 0x46, 0x3d,
4942 0x12, 0x20, 0xfe, 0x05, 0xf6, 0xc7, 0x01, 0xfe, 0x52, 0x16, 0x09, 0x4a,
4943 0x4c, 0x35, 0x11, 0x2d, 0x3c, 0x8a, 0x01, 0xe6, 0x02, 0x29, 0x0a, 0x40,
4944 0x01, 0x0e, 0x07, 0x00, 0x5d, 0x01, 0x6f, 0xfe, 0x18, 0x10, 0xfe, 0x41,
4945 0x58, 0x0a, 0x99, 0x01, 0x0e, 0xfe, 0xc8, 0x54, 0x64, 0xfe, 0x0c, 0x03,
4946 0x01, 0xe6, 0x02, 0x29, 0x2a, 0x46, 0xfe, 0x02, 0xe8, 0x27, 0xf8, 0xfe,
4947 0x9e, 0x43, 0xf7, 0xfe, 0x27, 0xf0, 0xfe, 0xdc, 0x01, 0xfe, 0x07, 0x4b,
4948 0xfe, 0x20, 0xf0, 0x9c, 0xfe, 0x40, 0x1c, 0x25, 0xd2, 0xfe, 0x26, 0xf0,
4949 0xfe, 0x56, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x44, 0x03, 0xfe, 0x11, 0xf0,
4950 0x9c, 0xfe, 0xef, 0x10, 0xfe, 0x9f, 0xf0, 0xfe, 0x64, 0x03, 0xeb, 0x0f,
4951 0xfe, 0x11, 0x00, 0x02, 0x5a, 0x2a, 0xfe, 0x48, 0x1c, 0xeb, 0x09, 0x04,
4952 0x1d, 0xfe, 0x18, 0x13, 0x23, 0x1e, 0x98, 0xac, 0x12, 0x98, 0x0a, 0x40,
4953 0x01, 0x0e, 0xac, 0x75, 0x01, 0xfe, 0xbc, 0x15, 0x11, 0xca, 0x25, 0xd2,
4954 0xfe, 0x01, 0xf0, 0xd2, 0xfe, 0x82, 0xf0, 0xfe, 0x92, 0x03, 0xec, 0x11,
4955 0xfe, 0xe4, 0x00, 0x65, 0xfe, 0xa4, 0x03, 0x25, 0x32, 0x1f, 0xfe, 0xb4,
4956 0x03, 0x01, 0x43, 0xfe, 0x06, 0xf0, 0xfe, 0xc4, 0x03, 0x8d, 0x81, 0xfe,
4957 0x0a, 0xf0, 0xfe, 0x7a, 0x06, 0x02, 0x22, 0x05, 0x6b, 0x28, 0x16, 0xfe,
4958 0xf6, 0x04, 0x14, 0x2c, 0x01, 0x33, 0x8f, 0xfe, 0x66, 0x02, 0x02, 0xd1,
4959 0xeb, 0x2a, 0x67, 0x1a, 0xfe, 0x67, 0x1b, 0xf8, 0xf7, 0xfe, 0x48, 0x1c,
4960 0x70, 0x01, 0x6e, 0x87, 0x0a, 0x40, 0x01, 0x0e, 0x07, 0x00, 0x16, 0xd3,
4961 0x0a, 0xca, 0x01, 0x0e, 0x74, 0x60, 0x59, 0x76, 0x27, 0x05, 0x6b, 0x28,
4962 0xfe, 0x10, 0x12, 0x14, 0x2c, 0x01, 0x33, 0x8f, 0xfe, 0x66, 0x02, 0x02,
4963 0xd1, 0xbc, 0x7d, 0xbd, 0x7f, 0x25, 0x22, 0x65, 0xfe, 0x3c, 0x04, 0x1f,
4964 0xfe, 0x38, 0x04, 0x68, 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x4e,
4965 0x12, 0x2b, 0xff, 0x02, 0x00, 0x10, 0x01, 0x08, 0x1f, 0xfe, 0xe0, 0x04,
4966 0x2b, 0x01, 0x08, 0x1f, 0x22, 0x30, 0x2e, 0xd5, 0xfe, 0x4c, 0x44, 0xfe,
4967 0x4c, 0x12, 0x60, 0xfe, 0x44, 0x48, 0x13, 0x2c, 0xfe, 0x4c, 0x54, 0x64,
4968 0xd3, 0x46, 0x76, 0x27, 0xfa, 0xef, 0xfe, 0x62, 0x13, 0x09, 0x04, 0x1d,
4969 0xfe, 0x2a, 0x13, 0x2f, 0x07, 0x7e, 0xa5, 0xfe, 0x20, 0x10, 0x13, 0x2c,
4970 0xfe, 0x4c, 0x54, 0x64, 0xd3, 0xfa, 0xef, 0x86, 0x09, 0x04, 0x1d, 0xfe,
4971 0x08, 0x13, 0x2f, 0x07, 0x7e, 0x6e, 0x09, 0x04, 0x1d, 0xfe, 0x1c, 0x12,
4972 0x14, 0x92, 0x09, 0x04, 0x06, 0x3b, 0x14, 0xc4, 0x01, 0x33, 0x8f, 0xfe,
4973 0x70, 0x0c, 0x02, 0x22, 0x2b, 0x11, 0xfe, 0xe6, 0x00, 0xfe, 0x1c, 0x90,
4974 0xf9, 0x03, 0x14, 0x92, 0x01, 0x33, 0x02, 0x29, 0xfe, 0x42, 0x5b, 0x67,
4975 0x1a, 0xfe, 0x46, 0x59, 0xf8, 0xf7, 0xfe, 0x87, 0x80, 0xfe, 0x31, 0xe4,
4976 0x4f, 0x09, 0x04, 0x0b, 0xfe, 0x78, 0x13, 0xfe, 0x20, 0x80, 0x07, 0x1a,
4977 0xfe, 0x70, 0x12, 0x49, 0x04, 0x06, 0xfe, 0x60, 0x13, 0x05, 0xfe, 0xa2,
4978 0x00, 0x28, 0x16, 0xfe, 0x80, 0x05, 0xfe, 0x31, 0xe4, 0x6a, 0x49, 0x04,
4979 0x0b, 0xfe, 0x4a, 0x13, 0x05, 0xfe, 0xa0, 0x00, 0x28, 0xfe, 0x42, 0x12,
4980 0x5e, 0x01, 0x08, 0x25, 0x32, 0xf1, 0x01, 0x08, 0x26, 0xfe, 0x98, 0x05,
4981 0x11, 0xfe, 0xe3, 0x00, 0x23, 0x49, 0xfe, 0x4a, 0xf0, 0xfe, 0x6a, 0x05,
4982 0xfe, 0x49, 0xf0, 0xfe, 0x64, 0x05, 0x83, 0x24, 0xfe, 0x21, 0x00, 0xa1,
4983 0x24, 0xfe, 0x22, 0x00, 0xa0, 0x24, 0x4c, 0xfe, 0x09, 0x48, 0x01, 0x08,
4984 0x26, 0xfe, 0x98, 0x05, 0xfe, 0xe2, 0x08, 0x49, 0x04, 0xc5, 0x3b, 0x01,
4985 0x86, 0x24, 0x06, 0x12, 0xcc, 0x37, 0xfe, 0x27, 0x01, 0x09, 0x04, 0x1d,
4986 0xfe, 0x22, 0x12, 0x47, 0x01, 0xa7, 0x14, 0x92, 0x09, 0x04, 0x06, 0x3b,
4987 0x14, 0xc4, 0x01, 0x33, 0x8f, 0xfe, 0x70, 0x0c, 0x02, 0x22, 0x05, 0xfe,
4988 0x9c, 0x00, 0x28, 0xfe, 0x3e, 0x12, 0x05, 0x50, 0x28, 0xfe, 0x36, 0x13,
4989 0x47, 0x01, 0xa7, 0x26, 0xfe, 0x08, 0x06, 0x0a, 0x06, 0x49, 0x04, 0x19,
4990 0xfe, 0x02, 0x12, 0x5f, 0x01, 0xfe, 0xaa, 0x14, 0x1f, 0xfe, 0xfe, 0x05,
4991 0x11, 0x9a, 0x01, 0x43, 0x11, 0xfe, 0xe5, 0x00, 0x05, 0x50, 0xb4, 0x0c,
4992 0x50, 0x05, 0xc6, 0x28, 0xfe, 0x62, 0x12, 0x05, 0x3f, 0x28, 0xfe, 0x5a,
4993 0x13, 0x01, 0xfe, 0x14, 0x18, 0x01, 0xfe, 0x66, 0x18, 0xfe, 0x43, 0x48,
4994 0xb7, 0x19, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, 0x1c, 0x3d,
4995 0x85, 0xb7, 0x69, 0x47, 0x01, 0xa7, 0x26, 0xfe, 0x72, 0x06, 0x49, 0x04,
4996 0x1b, 0xdf, 0x89, 0x0a, 0x4d, 0x01, 0xfe, 0xd8, 0x14, 0x1f, 0xfe, 0x68,
4997 0x06, 0x11, 0x9a, 0x01, 0x43, 0x11, 0xfe, 0xe5, 0x00, 0x05, 0x3f, 0xb4,
4998 0x0c, 0x3f, 0x17, 0x06, 0x01, 0xa7, 0xec, 0x72, 0x70, 0x01, 0x6e, 0x87,
4999 0x11, 0xfe, 0xe2, 0x00, 0x01, 0x08, 0x25, 0x32, 0xfe, 0x0a, 0xf0, 0xfe,
5000 0xa6, 0x06, 0x8c, 0xfe, 0x5c, 0x07, 0xfe, 0x06, 0xf0, 0xfe, 0x64, 0x07,
5001 0x8d, 0x81, 0x02, 0x22, 0x09, 0x04, 0x0b, 0xfe, 0x2e, 0x12, 0x15, 0x1a,
5002 0x01, 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x00,
5003 0x01, 0x08, 0xfe, 0x99, 0xa4, 0x01, 0x08, 0x15, 0x00, 0x02, 0xfe, 0x32,
5004 0x08, 0x61, 0x04, 0x1b, 0xfe, 0x38, 0x12, 0x09, 0x04, 0x1b, 0x6e, 0x15,
5005 0xfe, 0x1b, 0x00, 0x01, 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x00, 0x01,
5006 0x08, 0x15, 0x00, 0x01, 0x08, 0x15, 0x06, 0x01, 0x08, 0x15, 0x00, 0x02,
5007 0xd9, 0x66, 0x4c, 0xfe, 0x3a, 0x55, 0x5f, 0xfe, 0x9a, 0x81, 0x4b, 0x1d,
5008 0xba, 0xfe, 0x32, 0x07, 0x0a, 0x1d, 0xfe, 0x09, 0x6f, 0xaf, 0xfe, 0xca,
5009 0x45, 0xfe, 0x32, 0x12, 0x62, 0x2c, 0x85, 0x66, 0x7b, 0x01, 0x08, 0x25,
5010 0x32, 0xfe, 0x0a, 0xf0, 0xfe, 0x32, 0x07, 0x8d, 0x81, 0x8c, 0xfe, 0x5c,
5011 0x07, 0x02, 0x22, 0x01, 0x43, 0x02, 0xfe, 0x8a, 0x06, 0x15, 0x19, 0x02,
5012 0xfe, 0x8a, 0x06, 0xfe, 0x9c, 0xf7, 0xd4, 0xfe, 0x2c, 0x90, 0xfe, 0xae,
5013 0x90, 0x77, 0xfe, 0xca, 0x07, 0x0c, 0x54, 0x18, 0x55, 0x09, 0x4a, 0x6a,
5014 0x35, 0x1e, 0x20, 0x07, 0x10, 0xfe, 0x0e, 0x12, 0x74, 0xfe, 0x80, 0x80,
5015 0x37, 0x20, 0x63, 0x27, 0xfe, 0x06, 0x10, 0xfe, 0x83, 0xe7, 0xc4, 0xa1,
5016 0xfe, 0x03, 0x40, 0x09, 0x4a, 0x4f, 0x35, 0x01, 0xa8, 0xad, 0xfe, 0x1f,
5017 0x40, 0x12, 0x58, 0x01, 0xa5, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe,
5018 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x83, 0xfb, 0xfe, 0x8a, 0x90, 0x0c, 0x52,
5019 0x18, 0x53, 0xfe, 0x0c, 0x90, 0xfe, 0x8e, 0x90, 0xfe, 0x40, 0x50, 0xfe,
5020 0xc2, 0x50, 0x0c, 0x39, 0x18, 0x3a, 0xfe, 0x4a, 0x10, 0x09, 0x04, 0x6a,
5021 0xfe, 0x2a, 0x12, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x54, 0x18,
5022 0x55, 0x09, 0x04, 0x4f, 0x85, 0x01, 0xa8, 0xfe, 0x1f, 0x80, 0x12, 0x58,
5023 0xfe, 0x44, 0x90, 0xfe, 0xc6, 0x90, 0x0c, 0x56, 0x18, 0x57, 0xfb, 0xfe,
5024 0x8a, 0x90, 0x0c, 0x52, 0x18, 0x53, 0xfe, 0x40, 0x90, 0xfe, 0xc2, 0x90,
5025 0x0c, 0x39, 0x18, 0x3a, 0x0c, 0x38, 0x18, 0x4e, 0x09, 0x4a, 0x19, 0x35,
5026 0x2a, 0x13, 0xfe, 0x4e, 0x11, 0x65, 0xfe, 0x48, 0x08, 0xfe, 0x9e, 0xf0,
5027 0xfe, 0x5c, 0x08, 0xb1, 0x16, 0x32, 0x2a, 0x73, 0xdd, 0xb8, 0xfe, 0x80,
5028 0x08, 0xb9, 0xfe, 0x9e, 0x08, 0x8c, 0xfe, 0x74, 0x08, 0xfe, 0x06, 0xf0,
5029 0xfe, 0x7a, 0x08, 0x8d, 0x81, 0x02, 0x22, 0x01, 0x43, 0xfe, 0xc9, 0x10,
5030 0x15, 0x19, 0xfe, 0xc9, 0x10, 0x61, 0x04, 0x06, 0xfe, 0x10, 0x12, 0x61,
5031 0x04, 0x0b, 0x45, 0x09, 0x04, 0x0b, 0xfe, 0x68, 0x12, 0xfe, 0x2e, 0x1c,
5032 0x02, 0xfe, 0x24, 0x0a, 0x61, 0x04, 0x06, 0x45, 0x61, 0x04, 0x0b, 0xfe,
5033 0x52, 0x12, 0xfe, 0x2c, 0x1c, 0xfe, 0xaa, 0xf0, 0xfe, 0x1e, 0x09, 0xfe,
5034 0xac, 0xf0, 0xfe, 0xbe, 0x08, 0xfe, 0x8a, 0x10, 0xaa, 0xfe, 0xf3, 0x10,
5035 0xfe, 0xad, 0xf0, 0xfe, 0xca, 0x08, 0x02, 0xfe, 0x24, 0x0a, 0xab, 0xfe,
5036 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0x9d, 0xe9, 0x1c, 0xfe, 0x00, 0xfe, 0xfe,
5037 0x1c, 0x12, 0xb5, 0xfe, 0xd2, 0xf0, 0x9d, 0xfe, 0x76, 0x18, 0x1c, 0x1a,
5038 0x16, 0x9d, 0x05, 0xcb, 0x1c, 0x06, 0x16, 0x9d, 0xb8, 0x6d, 0xb9, 0x6d,
5039 0xaa, 0xab, 0xfe, 0xb1, 0x10, 0x70, 0x5e, 0x2b, 0x14, 0x92, 0x01, 0x33,
5040 0x0f, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x5a, 0x0f, 0x7c, 0x02, 0x5a,
5041 0xfe, 0x74, 0x18, 0x1c, 0xfe, 0x00, 0xf8, 0x16, 0x6d, 0x67, 0x1b, 0x01,
5042 0xfe, 0x44, 0x0d, 0x3b, 0x01, 0xe6, 0x1e, 0x27, 0x74, 0x67, 0x1a, 0x02,
5043 0x6d, 0x09, 0x04, 0x0b, 0x21, 0xfe, 0x06, 0x0a, 0x09, 0x04, 0x6a, 0xfe,
5044 0x82, 0x12, 0x09, 0x04, 0x19, 0xfe, 0x66, 0x13, 0x1e, 0x58, 0xac, 0xfc,
5045 0xfe, 0x83, 0x80, 0xfe, 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91,
5046 0xfe, 0x86, 0x91, 0x63, 0x27, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x77,
5047 0xd7, 0x05, 0x54, 0x31, 0x55, 0x0c, 0x7b, 0x18, 0x7c, 0xbe, 0x54, 0xbf,
5048 0x55, 0x01, 0xa8, 0xad, 0x63, 0x27, 0x12, 0x58, 0xc0, 0x38, 0xc1, 0x4e,
5049 0x79, 0x56, 0x68, 0x57, 0xf4, 0xf5, 0xfe, 0x04, 0xfa, 0x38, 0xfe, 0x05,
5050 0xfa, 0x4e, 0x01, 0xa5, 0xa2, 0x23, 0x0c, 0x7b, 0x0c, 0x7c, 0x79, 0x56,
5051 0x68, 0x57, 0xfe, 0x12, 0x10, 0x09, 0x04, 0x19, 0x16, 0xd7, 0x79, 0x39,
5052 0x68, 0x3a, 0x09, 0x04, 0xfe, 0xf7, 0x00, 0x35, 0x05, 0x52, 0x31, 0x53,
5053 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59,
5054 0x02, 0x6d, 0x09, 0x04, 0x19, 0x16, 0xd7, 0x09, 0x04, 0xfe, 0xf7, 0x00,
5055 0x35, 0xfe, 0x3a, 0x55, 0xfe, 0x19, 0x81, 0x5f, 0xfe, 0x10, 0x90, 0xfe,
5056 0x92, 0x90, 0xfe, 0xd7, 0x10, 0x2f, 0x07, 0x9b, 0x16, 0xfe, 0xc6, 0x08,
5057 0x11, 0x9b, 0x09, 0x04, 0x0b, 0xfe, 0x14, 0x13, 0x05, 0x39, 0x31, 0x3a,
5058 0x77, 0xfe, 0xc6, 0x08, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58, 0x02, 0x6d,
5059 0x23, 0x47, 0xfe, 0x19, 0x80, 0xde, 0x09, 0x04, 0x0b, 0xfe, 0x1a, 0x12,
5060 0xfe, 0x6c, 0x19, 0xfe, 0x19, 0x41, 0xe9, 0xb5, 0xfe, 0xd1, 0xf0, 0xd9,
5061 0x14, 0x7a, 0x01, 0x33, 0x0f, 0xfe, 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xfe,
5062 0x6c, 0x19, 0xbe, 0x39, 0xfe, 0xed, 0x19, 0xbf, 0x3a, 0xfe, 0x0c, 0x51,
5063 0xfe, 0x8e, 0x51, 0xe9, 0x1c, 0xfe, 0x00, 0xff, 0x34, 0xfe, 0x74, 0x10,
5064 0xb5, 0xfe, 0xd2, 0xf0, 0xfe, 0xb2, 0x0a, 0xfe, 0x76, 0x18, 0x1c, 0x1a,
5065 0x84, 0x05, 0xcb, 0x1c, 0x06, 0xfe, 0x08, 0x13, 0x0f, 0xfe, 0x16, 0x00,
5066 0x02, 0x5a, 0xfe, 0xd1, 0xf0, 0xfe, 0xc4, 0x0a, 0x14, 0x7a, 0x01, 0x33,
5067 0x0f, 0xfe, 0x17, 0x00, 0xfe, 0x42, 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xca,
5068 0x0a, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xd6, 0x0a, 0x0f, 0xfe,
5069 0x22, 0x00, 0x02, 0x5a, 0xfe, 0xcb, 0xf0, 0xfe, 0xe2, 0x0a, 0x0f, 0xfe,
5070 0x24, 0x00, 0x02, 0x5a, 0xfe, 0xd0, 0xf0, 0xfe, 0xec, 0x0a, 0x0f, 0x93,
5071 0xdc, 0xfe, 0xcf, 0xf0, 0xfe, 0xf6, 0x0a, 0x0f, 0x4c, 0xfe, 0x10, 0x10,
5072 0xfe, 0xcc, 0xf0, 0xd9, 0x61, 0x04, 0x19, 0x3b, 0x0f, 0xfe, 0x12, 0x00,
5073 0x2a, 0x13, 0xfe, 0x4e, 0x11, 0x65, 0xfe, 0x0c, 0x0b, 0xfe, 0x9e, 0xf0,
5074 0xfe, 0x20, 0x0b, 0xb1, 0x16, 0x32, 0x2a, 0x73, 0xdd, 0xb8, 0x22, 0xb9,
5075 0x22, 0x2a, 0xec, 0x65, 0xfe, 0x2c, 0x0b, 0x25, 0x32, 0x8c, 0xfe, 0x48,
5076 0x0b, 0x8d, 0x81, 0xb8, 0xd4, 0xb9, 0xd4, 0x02, 0x22, 0x01, 0x43, 0xfe,
5077 0xdb, 0x10, 0x11, 0xfe, 0xe8, 0x00, 0xaa, 0xab, 0x70, 0xbc, 0x7d, 0xbd,
5078 0x7f, 0xfe, 0x89, 0xf0, 0x22, 0x30, 0x2e, 0xd8, 0xbc, 0x7d, 0xbd, 0x7f,
5079 0x01, 0x08, 0x1f, 0x22, 0x30, 0x2e, 0xd6, 0xb1, 0x45, 0x0f, 0xfe, 0x42,
5080 0x00, 0x02, 0x5a, 0x78, 0x06, 0xfe, 0x81, 0x49, 0x16, 0xfe, 0x38, 0x0c,
5081 0x09, 0x04, 0x0b, 0xfe, 0x44, 0x13, 0x0f, 0x00, 0x4b, 0x0b, 0xfe, 0x54,
5082 0x12, 0x4b, 0xfe, 0x28, 0x00, 0x21, 0xfe, 0xa6, 0x0c, 0x0a, 0x40, 0x01,
5083 0x0e, 0x07, 0x00, 0x5d, 0x3e, 0xfe, 0x28, 0x00, 0xfe, 0xe2, 0x10, 0x01,
5084 0xe7, 0x01, 0xe8, 0x0a, 0x99, 0x01, 0xfe, 0x32, 0x0e, 0x59, 0x11, 0x2d,
5085 0x01, 0x6f, 0x02, 0x29, 0x0f, 0xfe, 0x44, 0x00, 0x4b, 0x0b, 0xdf, 0x3e,
5086 0x0b, 0xfe, 0xb4, 0x10, 0x01, 0x86, 0x3e, 0x0b, 0xfe, 0xaa, 0x10, 0x01,
5087 0x86, 0xfe, 0x19, 0x82, 0xfe, 0x34, 0x46, 0xa3, 0x3e, 0x0b, 0x0f, 0xfe,
5088 0x43, 0x00, 0xfe, 0x96, 0x10, 0x09, 0x4a, 0x0b, 0x35, 0x01, 0xe7, 0x01,
5089 0xe8, 0x59, 0x11, 0x2d, 0x01, 0x6f, 0x67, 0x0b, 0x59, 0x3c, 0x8a, 0x02,
5090 0xfe, 0x2a, 0x03, 0x09, 0x04, 0x0b, 0x84, 0x3e, 0x0b, 0x0f, 0x00, 0xfe,
5091 0x5c, 0x10, 0x61, 0x04, 0x1b, 0xfe, 0x58, 0x12, 0x09, 0x04, 0x1b, 0xfe,
5092 0x50, 0x13, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x5c, 0x0c, 0xfe,
5093 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x62, 0x0c, 0x09, 0x4a, 0x1b, 0x35,
5094 0xfe, 0xa9, 0x10, 0x0f, 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0b, 0x5f,
5095 0x5c, 0x0f, 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x0f, 0xfe, 0x47, 0x00,
5096 0xa1, 0x0f, 0xfe, 0x41, 0x00, 0xa0, 0x0f, 0xfe, 0x24, 0x00, 0x87, 0xaa,
5097 0xab, 0x70, 0x05, 0x6b, 0x28, 0x21, 0xd1, 0x5f, 0xfe, 0x04, 0xe6, 0x1b,
5098 0xfe, 0x9d, 0x41, 0xfe, 0x1c, 0x42, 0x59, 0x01, 0xda, 0x02, 0x29, 0xea,
5099 0x14, 0x0b, 0x37, 0x95, 0xa9, 0x14, 0xfe, 0x31, 0x00, 0x37, 0x97, 0x01,
5100 0xfe, 0x54, 0x0f, 0x02, 0xd0, 0x3c, 0xfe, 0x06, 0xec, 0xc9, 0xee, 0x3e,
5101 0x1d, 0xfe, 0xce, 0x45, 0x34, 0x3c, 0xfe, 0x06, 0xea, 0xc9, 0xfe, 0x47,
5102 0x4b, 0x89, 0xfe, 0x75, 0x57, 0x05, 0x51, 0xfe, 0x98, 0x56, 0xfe, 0x38,
5103 0x12, 0x0a, 0x42, 0x01, 0x0e, 0xfe, 0x44, 0x48, 0x46, 0x09, 0x04, 0x1d,
5104 0xfe, 0x1a, 0x13, 0x0a, 0x40, 0x01, 0x0e, 0x47, 0xfe, 0x41, 0x58, 0x0a,
5105 0x99, 0x01, 0x0e, 0xfe, 0x49, 0x54, 0x8e, 0xfe, 0x2a, 0x0d, 0x02, 0xfe,
5106 0x2a, 0x03, 0x0a, 0x51, 0xfe, 0xee, 0x14, 0xee, 0x3e, 0x1d, 0xfe, 0xce,
5107 0x45, 0x34, 0x3c, 0xfe, 0xce, 0x47, 0xfe, 0xad, 0x13, 0x02, 0x29, 0x1e,
5108 0x20, 0x07, 0x10, 0xfe, 0x9e, 0x12, 0x23, 0x12, 0x4d, 0x12, 0x94, 0x12,
5109 0xce, 0x1e, 0x2d, 0x47, 0x37, 0x2d, 0xb1, 0xe0, 0xfe, 0xbc, 0xf0, 0xfe,
5110 0xec, 0x0d, 0x13, 0x06, 0x12, 0x4d, 0x01, 0xfe, 0xe2, 0x15, 0x05, 0xfe,
5111 0x38, 0x01, 0x31, 0xfe, 0x3a, 0x01, 0x77, 0xfe, 0xf0, 0x0d, 0xfe, 0x02,
5112 0xec, 0xce, 0x62, 0x00, 0x5d, 0xfe, 0x04, 0xec, 0x20, 0x46, 0xfe, 0x05,
5113 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x52, 0x16, 0xfb, 0xfe, 0x48, 0xf4,
5114 0x0d, 0xfe, 0x18, 0x13, 0xaf, 0xfe, 0x02, 0xea, 0xce, 0x62, 0x7a, 0xfe,
5115 0xc5, 0x13, 0x14, 0x1b, 0x37, 0x95, 0xa9, 0x5c, 0x05, 0xfe, 0x38, 0x01,
5116 0x1c, 0xfe, 0xf0, 0xff, 0x0c, 0xfe, 0x60, 0x01, 0x05, 0xfe, 0x3a, 0x01,
5117 0x0c, 0xfe, 0x62, 0x01, 0x3d, 0x12, 0x20, 0x24, 0x06, 0x12, 0x2d, 0x11,
5118 0x2d, 0x8a, 0x13, 0x06, 0x03, 0x23, 0x03, 0x1e, 0x4d, 0xfe, 0xf7, 0x12,
5119 0x1e, 0x94, 0xac, 0x12, 0x94, 0x07, 0x7a, 0xfe, 0x71, 0x13, 0xfe, 0x24,
5120 0x1c, 0x14, 0x1a, 0x37, 0x95, 0xa9, 0xfe, 0xd9, 0x10, 0xb6, 0xfe, 0x03,
5121 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0xb6, 0xfe, 0x03, 0xdc,
5122 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0xfe, 0x03, 0x57, 0xb6, 0x23,
5123 0xfe, 0x00, 0xcc, 0x03, 0xfe, 0x03, 0x57, 0xb6, 0x75, 0x03, 0x09, 0x04,
5124 0x4c, 0xfe, 0x22, 0x13, 0xfe, 0x1c, 0x80, 0x07, 0x06, 0xfe, 0x1a, 0x13,
5125 0xfe, 0x1e, 0x80, 0xe1, 0xfe, 0x1d, 0x80, 0xa4, 0xfe, 0x0c, 0x90, 0xfe,
5126 0x0e, 0x13, 0xfe, 0x0e, 0x90, 0xa3, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4,
5127 0x0b, 0xfe, 0x3c, 0x50, 0xa0, 0x01, 0xfe, 0x82, 0x16, 0x2f, 0x07, 0x2d,
5128 0xe0, 0x01, 0xfe, 0xbc, 0x15, 0x09, 0x04, 0x1d, 0x45, 0x01, 0xe7, 0x01,
5129 0xe8, 0x11, 0xfe, 0xe9, 0x00, 0x09, 0x04, 0x4c, 0xfe, 0x2c, 0x13, 0x01,
5130 0xfe, 0x14, 0x16, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0xfe, 0x96, 0x90,
5131 0x0c, 0xfe, 0x64, 0x01, 0x18, 0xfe, 0x66, 0x01, 0x09, 0x04, 0x4f, 0xfe,
5132 0x12, 0x12, 0xfe, 0x03, 0x80, 0x74, 0xfe, 0x01, 0xec, 0x20, 0xfe, 0x80,
5133 0x40, 0x12, 0x20, 0x63, 0x27, 0x11, 0xc8, 0x59, 0x1e, 0x20, 0xed, 0x76,
5134 0x20, 0x03, 0xfe, 0x08, 0x1c, 0x05, 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58,
5135 0x05, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x05, 0xfe, 0xb0, 0x00, 0xfe,
5136 0x08, 0x58, 0x05, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c,
5137 0x24, 0x69, 0x12, 0xc9, 0x23, 0x0c, 0x50, 0x0c, 0x3f, 0x13, 0x40, 0x48,
5138 0x5f, 0x17, 0x1d, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x21, 0xfe, 0x08,
5139 0x0f, 0x3e, 0x10, 0x13, 0x42, 0x48, 0x17, 0x4c, 0xfe, 0x90, 0x4d, 0xfe,
5140 0x91, 0x54, 0x21, 0xfe, 0x1e, 0x0f, 0x24, 0x10, 0x12, 0x20, 0x78, 0x2c,
5141 0x46, 0x1e, 0x20, 0xed, 0x76, 0x20, 0x11, 0xc8, 0xf6, 0xfe, 0xd6, 0xf0,
5142 0xfe, 0x32, 0x0f, 0xea, 0x70, 0xfe, 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe,
5143 0x18, 0x1c, 0x03, 0x3c, 0xfe, 0x0c, 0x14, 0xee, 0xfe, 0x07, 0xe6, 0x1d,
5144 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x03, 0x01, 0x86, 0x78, 0x2c, 0x46,
5145 0xfa, 0xef, 0xfe, 0x42, 0x13, 0x2f, 0x07, 0x2d, 0xfe, 0x34, 0x13, 0x0a,
5146 0x42, 0x01, 0x0e, 0xb0, 0xfe, 0x36, 0x12, 0xf0, 0xfe, 0x45, 0x48, 0x01,
5147 0xe3, 0xfe, 0x00, 0xcc, 0xb0, 0xfe, 0xf3, 0x13, 0x3d, 0x75, 0x07, 0x10,
5148 0xa3, 0x0a, 0x80, 0x01, 0x0e, 0xfe, 0x80, 0x5c, 0x01, 0x6f, 0xfe, 0x0e,
5149 0x10, 0x07, 0x7e, 0x45, 0xf6, 0xfe, 0xd6, 0xf0, 0xfe, 0x6c, 0x0f, 0x03,
5150 0xfe, 0x44, 0x58, 0x74, 0xfe, 0x01, 0xec, 0x97, 0xfe, 0x9e, 0x40, 0xfe,
5151 0x9d, 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x1b, 0x76, 0x27, 0x01, 0xda, 0xfe,
5152 0xdd, 0x10, 0x2a, 0xbc, 0x7d, 0xbd, 0x7f, 0x30, 0x2e, 0xd5, 0x07, 0x1b,
5153 0xfe, 0x48, 0x12, 0x07, 0x0b, 0xfe, 0x56, 0x12, 0x07, 0x1a, 0xfe, 0x30,
5154 0x12, 0x07, 0xc2, 0x16, 0xfe, 0x3e, 0x11, 0x07, 0xfe, 0x23, 0x00, 0x16,
5155 0xfe, 0x4a, 0x11, 0x07, 0x06, 0x16, 0xfe, 0xa8, 0x11, 0x07, 0x19, 0xfe,
5156 0x12, 0x12, 0x07, 0x00, 0x16, 0x22, 0x14, 0xc2, 0x01, 0x33, 0x9f, 0x2b,
5157 0x01, 0x08, 0x8c, 0x43, 0x03, 0x2b, 0xfe, 0x62, 0x08, 0x0a, 0xca, 0x01,
5158 0xfe, 0x32, 0x0e, 0x11, 0x7e, 0x02, 0x29, 0x2b, 0x2f, 0x07, 0x9b, 0xfe,
5159 0xd9, 0x13, 0x79, 0x39, 0x68, 0x3a, 0x77, 0xfe, 0xfc, 0x10, 0x09, 0x04,
5160 0x6a, 0xfe, 0x72, 0x12, 0xc0, 0x38, 0xc1, 0x4e, 0xf4, 0xf5, 0x8e, 0xfe,
5161 0xc6, 0x10, 0x1e, 0x58, 0xfe, 0x26, 0x13, 0x05, 0x7b, 0x31, 0x7c, 0x77,
5162 0xfe, 0x82, 0x0c, 0x0c, 0x54, 0x18, 0x55, 0x23, 0x0c, 0x7b, 0x0c, 0x7c,
5163 0x01, 0xa8, 0x24, 0x69, 0x73, 0x12, 0x58, 0x01, 0xa5, 0xc0, 0x38, 0xc1,
5164 0x4e, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x38, 0xfe,
5165 0x05, 0xfa, 0x4e, 0xfe, 0x91, 0x10, 0x05, 0x56, 0x31, 0x57, 0xfe, 0x40,
5166 0x56, 0xfe, 0xe1, 0x56, 0x0c, 0x56, 0x18, 0x57, 0x83, 0xc0, 0x38, 0xc1,
5167 0x4e, 0xf4, 0xf5, 0x05, 0x52, 0x31, 0x53, 0xfe, 0x00, 0x56, 0xfe, 0xa1,
5168 0x56, 0x0c, 0x52, 0x18, 0x53, 0x09, 0x04, 0x6a, 0xfe, 0x1e, 0x12, 0x1e,
5169 0x58, 0xfe, 0x1f, 0x40, 0x05, 0x54, 0x31, 0x55, 0xfe, 0x2c, 0x50, 0xfe,
5170 0xae, 0x50, 0x05, 0x56, 0x31, 0x57, 0xfe, 0x44, 0x50, 0xfe, 0xc6, 0x50,
5171 0x05, 0x52, 0x31, 0x53, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x05, 0x39,
5172 0x31, 0x3a, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x02, 0x5c, 0x24, 0x06,
5173 0x12, 0xcd, 0x02, 0x5b, 0x2b, 0x01, 0x08, 0x1f, 0x44, 0x30, 0x2e, 0xd5,
5174 0x07, 0x06, 0x21, 0x44, 0x2f, 0x07, 0x9b, 0x21, 0x5b, 0x01, 0x6e, 0x1c,
5175 0x3d, 0x16, 0x44, 0x09, 0x04, 0x0b, 0xe2, 0x79, 0x39, 0x68, 0x3a, 0xfe,
5176 0x0a, 0x55, 0x34, 0xfe, 0x8b, 0x55, 0xbe, 0x39, 0xbf, 0x3a, 0xfe, 0x0c,
5177 0x51, 0xfe, 0x8e, 0x51, 0x02, 0x5b, 0xfe, 0x19, 0x81, 0xaf, 0xfe, 0x19,
5178 0x41, 0x02, 0x5b, 0x2b, 0x01, 0x08, 0x25, 0x32, 0x1f, 0xa2, 0x30, 0x2e,
5179 0xd8, 0x4b, 0x1a, 0xfe, 0xa6, 0x12, 0x4b, 0x0b, 0x3b, 0x02, 0x44, 0x01,
5180 0x08, 0x25, 0x32, 0x1f, 0xa2, 0x30, 0x2e, 0xd6, 0x07, 0x1a, 0x21, 0x44,
5181 0x01, 0x08, 0x1f, 0xa2, 0x30, 0x2e, 0xfe, 0xe8, 0x09, 0xfe, 0xc2, 0x49,
5182 0x60, 0x05, 0xfe, 0x9c, 0x00, 0x28, 0x84, 0x49, 0x04, 0x19, 0x34, 0x9f,
5183 0xfe, 0xbb, 0x45, 0x4b, 0x00, 0x45, 0x3e, 0x06, 0x78, 0x3d, 0xfe, 0xda,
5184 0x14, 0x01, 0x6e, 0x87, 0xfe, 0x4b, 0x45, 0xe2, 0x2f, 0x07, 0x9a, 0xe1,
5185 0x05, 0xc6, 0x28, 0x84, 0x05, 0x3f, 0x28, 0x34, 0x5e, 0x02, 0x5b, 0xfe,
5186 0xc0, 0x5d, 0xfe, 0xf8, 0x14, 0xfe, 0x03, 0x17, 0x05, 0x50, 0xb4, 0x0c,
5187 0x50, 0x5e, 0x2b, 0x01, 0x08, 0x26, 0x5c, 0x01, 0xfe, 0xaa, 0x14, 0x02,
5188 0x5c, 0x01, 0x08, 0x25, 0x32, 0x1f, 0x44, 0x30, 0x2e, 0xd6, 0x07, 0x06,
5189 0x21, 0x44, 0x01, 0xfe, 0x8e, 0x13, 0xfe, 0x42, 0x58, 0xfe, 0x82, 0x14,
5190 0xfe, 0xa4, 0x14, 0x87, 0xfe, 0x4a, 0xf4, 0x0b, 0x16, 0x44, 0xfe, 0x4a,
5191 0xf4, 0x06, 0xfe, 0x0c, 0x12, 0x2f, 0x07, 0x9a, 0x85, 0x02, 0x5b, 0x05,
5192 0x3f, 0xb4, 0x0c, 0x3f, 0x5e, 0x2b, 0x01, 0x08, 0x26, 0x5c, 0x01, 0xfe,
5193 0xd8, 0x14, 0x02, 0x5c, 0x13, 0x06, 0x65, 0xfe, 0xca, 0x12, 0x26, 0xfe,
5194 0xe0, 0x12, 0x72, 0xf1, 0x01, 0x08, 0x23, 0x72, 0x03, 0x8f, 0xfe, 0xdc,
5195 0x12, 0x25, 0xfe, 0xdc, 0x12, 0x1f, 0xfe, 0xca, 0x12, 0x5e, 0x2b, 0x01,
5196 0x08, 0xfe, 0xd5, 0x10, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b,
5197 0x1c, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x13,
5198 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, 0x1c, 0x3d, 0xfe, 0x30, 0x56,
5199 0xfe, 0x00, 0x5c, 0x03, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b,
5200 0x03, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x48, 0x8b, 0xfe, 0x0b, 0x58,
5201 0x03, 0x0a, 0x50, 0x01, 0x82, 0x0a, 0x3f, 0x01, 0x82, 0x03, 0xfc, 0x1c,
5202 0x10, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x19, 0x48, 0xfe, 0x00,
5203 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c, 0x63, 0x27,
5204 0x0c, 0x52, 0x18, 0x53, 0xbe, 0x56, 0xbf, 0x57, 0x03, 0xfe, 0x62, 0x08,
5205 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x74, 0x03, 0x01,
5206 0xfe, 0x14, 0x18, 0xfe, 0x42, 0x48, 0x5f, 0x60, 0x89, 0x01, 0x08, 0x1f,
5207 0xfe, 0xa2, 0x14, 0x30, 0x2e, 0xd8, 0x01, 0x08, 0x1f, 0xfe, 0xa2, 0x14,
5208 0x30, 0x2e, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x05, 0xc6, 0x28, 0xfe,
5209 0xcc, 0x12, 0x49, 0x04, 0x1b, 0xfe, 0xc4, 0x13, 0x23, 0x62, 0x1b, 0xe2,
5210 0x4b, 0xc3, 0x64, 0xfe, 0xe8, 0x13, 0x3b, 0x13, 0x06, 0x17, 0xc3, 0x78,
5211 0xdb, 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xa1, 0xff, 0x02, 0x83,
5212 0x55, 0x62, 0x1a, 0xa4, 0xbb, 0xfe, 0x30, 0x00, 0x8e, 0xe4, 0x17, 0x2c,
5213 0x13, 0x06, 0xfe, 0x56, 0x10, 0x62, 0x0b, 0xe1, 0xbb, 0xfe, 0x64, 0x00,
5214 0x8e, 0xe4, 0x0a, 0xfe, 0x64, 0x00, 0x17, 0x93, 0x13, 0x06, 0xfe, 0x28,
5215 0x10, 0x62, 0x06, 0xfe, 0x60, 0x13, 0xbb, 0xfe, 0xc8, 0x00, 0x8e, 0xe4,
5216 0x0a, 0xfe, 0xc8, 0x00, 0x17, 0x4d, 0x13, 0x06, 0x83, 0xbb, 0xfe, 0x90,
5217 0x01, 0xba, 0xfe, 0x4e, 0x14, 0x89, 0xfe, 0x12, 0x10, 0xfe, 0x43, 0xf4,
5218 0x94, 0xfe, 0x56, 0xf0, 0xfe, 0x60, 0x14, 0xfe, 0x04, 0xf4, 0x6c, 0xfe,
5219 0x43, 0xf4, 0x93, 0xfe, 0xf3, 0x10, 0xf9, 0x01, 0xfe, 0x22, 0x13, 0x1c,
5220 0x3d, 0xfe, 0x10, 0x13, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x69, 0xba,
5221 0xfe, 0x9c, 0x14, 0xb7, 0x69, 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0xfe,
5222 0x4d, 0xe4, 0x19, 0xba, 0xfe, 0x9c, 0x14, 0xb7, 0x19, 0x83, 0x60, 0x23,
5223 0xfe, 0x4d, 0xf4, 0x00, 0xdf, 0x89, 0x13, 0x06, 0xfe, 0xb4, 0x56, 0xfe,
5224 0xc3, 0x58, 0x03, 0x60, 0x13, 0x0b, 0x03, 0x15, 0x06, 0x01, 0x08, 0x26,
5225 0xe5, 0x15, 0x0b, 0x01, 0x08, 0x26, 0xe5, 0x15, 0x1a, 0x01, 0x08, 0x26,
5226 0xe5, 0x72, 0xfe, 0x89, 0x49, 0x01, 0x08, 0x03, 0x15, 0x06, 0x01, 0x08,
5227 0x26, 0xa6, 0x15, 0x1a, 0x01, 0x08, 0x26, 0xa6, 0x15, 0x06, 0x01, 0x08,
5228 0x26, 0xa6, 0xfe, 0x89, 0x49, 0x01, 0x08, 0x26, 0xa6, 0x72, 0xfe, 0x89,
5229 0x4a, 0x01, 0x08, 0x03, 0x60, 0x03, 0x1e, 0xcc, 0x07, 0x06, 0xfe, 0x44,
5230 0x13, 0xad, 0x12, 0xcc, 0xfe, 0x49, 0xf4, 0x00, 0x3b, 0x72, 0x9f, 0x5e,
5231 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xf1, 0x01, 0x08, 0x2f, 0x07, 0xfe,
5232 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x1f, 0xfe, 0x5a, 0x15, 0x23, 0x12, 0xcd,
5233 0x01, 0x43, 0x1e, 0xcd, 0x07, 0x06, 0x45, 0x09, 0x4a, 0x06, 0x35, 0x03,
5234 0x0a, 0x42, 0x01, 0x0e, 0xed, 0x88, 0x07, 0x10, 0xa4, 0x0a, 0x80, 0x01,
5235 0x0e, 0x88, 0x0a, 0x51, 0x01, 0x9e, 0x03, 0x0a, 0x80, 0x01, 0x0e, 0x88,
5236 0xfe, 0x80, 0xe7, 0x10, 0x07, 0x10, 0x84, 0xfe, 0x45, 0x58, 0x01, 0xe3,
5237 0x88, 0x03, 0x0a, 0x42, 0x01, 0x0e, 0x88, 0x0a, 0x51, 0x01, 0x9e, 0x03,
5238 0x0a, 0x42, 0x01, 0x0e, 0xfe, 0x80, 0x80, 0xf2, 0xfe, 0x49, 0xe4, 0x10,
5239 0xa4, 0x0a, 0x80, 0x01, 0x0e, 0xf2, 0x0a, 0x51, 0x01, 0x82, 0x03, 0x17,
5240 0x10, 0x71, 0x66, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde,
5241 0xfe, 0x24, 0x1c, 0xfe, 0x1d, 0xf7, 0x1d, 0x90, 0xfe, 0xf6, 0x15, 0x01,
5242 0xfe, 0xfc, 0x16, 0xe0, 0x91, 0x1d, 0x66, 0xfe, 0x2c, 0x01, 0xfe, 0x2f,
5243 0x19, 0x03, 0xae, 0x21, 0xfe, 0xe6, 0x15, 0xfe, 0xda, 0x10, 0x17, 0x10,
5244 0x71, 0x05, 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x19, 0xfe, 0x18, 0x58,
5245 0x05, 0xfe, 0x66, 0x01, 0xfe, 0x19, 0x58, 0x91, 0x19, 0xfe, 0x3c, 0x90,
5246 0xfe, 0x30, 0xf4, 0x06, 0xfe, 0x3c, 0x50, 0x66, 0xfe, 0x38, 0x00, 0xfe,
5247 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x19, 0x90, 0xfe, 0x40, 0x16, 0xfe, 0xb6,
5248 0x14, 0x34, 0x03, 0xae, 0x21, 0xfe, 0x18, 0x16, 0xfe, 0x9c, 0x10, 0x17,
5249 0x10, 0x71, 0xfe, 0x83, 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe,
5250 0x1d, 0xf7, 0x38, 0x90, 0xfe, 0x62, 0x16, 0xfe, 0x94, 0x14, 0xfe, 0x10,
5251 0x13, 0x91, 0x38, 0x66, 0x1b, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00,
5252 0x03, 0xae, 0x21, 0xfe, 0x56, 0x16, 0xfe, 0x6c, 0x10, 0x17, 0x10, 0x71,
5253 0xfe, 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0x91, 0xc5, 0x66, 0x1b, 0xfe, 0x0f,
5254 0x79, 0xfe, 0x1c, 0xf7, 0xc5, 0x90, 0xfe, 0x9a, 0x16, 0xfe, 0x5c, 0x14,
5255 0x34, 0x03, 0xae, 0x21, 0xfe, 0x86, 0x16, 0xfe, 0x42, 0x10, 0xfe, 0x02,
5256 0xf6, 0x10, 0x71, 0xfe, 0x18, 0xfe, 0x54, 0xfe, 0x19, 0xfe, 0x55, 0xfc,
5257 0xfe, 0x1d, 0xf7, 0x4f, 0x90, 0xfe, 0xc0, 0x16, 0xfe, 0x36, 0x14, 0xfe,
5258 0x1c, 0x13, 0x91, 0x4f, 0x47, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe,
5259 0x80, 0xe7, 0x10, 0xfe, 0x81, 0xe7, 0x10, 0x11, 0xfe, 0xdd, 0x00, 0x63,
5260 0x27, 0x03, 0x63, 0x27, 0xfe, 0x12, 0x45, 0x21, 0xfe, 0xb0, 0x16, 0x14,
5261 0x06, 0x37, 0x95, 0xa9, 0x02, 0x29, 0xfe, 0x39, 0xf0, 0xfe, 0x04, 0x17,
5262 0x23, 0x03, 0xfe, 0x7e, 0x18, 0x1c, 0x1a, 0x5d, 0x13, 0x0d, 0x03, 0x71,
5263 0x05, 0xcb, 0x1c, 0x06, 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x78, 0x2c,
5264 0x46, 0x2f, 0x07, 0x2d, 0xfe, 0x3c, 0x13, 0xfe, 0x82, 0x14, 0xfe, 0x42,
5265 0x13, 0x3c, 0x8a, 0x0a, 0x42, 0x01, 0x0e, 0xb0, 0xfe, 0x3e, 0x12, 0xf0,
5266 0xfe, 0x45, 0x48, 0x01, 0xe3, 0xfe, 0x00, 0xcc, 0xb0, 0xfe, 0xf3, 0x13,
5267 0x3d, 0x75, 0x07, 0x10, 0xa3, 0x0a, 0x80, 0x01, 0x0e, 0xf2, 0x01, 0x6f,
5268 0xfe, 0x16, 0x10, 0x07, 0x7e, 0x85, 0xfe, 0x40, 0x14, 0xfe, 0x24, 0x12,
5269 0xf6, 0xfe, 0xd6, 0xf0, 0xfe, 0x24, 0x17, 0x17, 0x0b, 0x03, 0xfe, 0x9c,
5270 0xe7, 0x0b, 0x0f, 0xfe, 0x15, 0x00, 0x59, 0x76, 0x27, 0x01, 0xda, 0x17,
5271 0x06, 0x03, 0x3c, 0x8a, 0x09, 0x4a, 0x1d, 0x35, 0x11, 0x2d, 0x01, 0x6f,
5272 0x17, 0x06, 0x03, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x79, 0xc7, 0x68,
5273 0xc8, 0xfe, 0x48, 0x55, 0x34, 0xfe, 0xc9, 0x55, 0x03, 0x1e, 0x98, 0x73,
5274 0x12, 0x98, 0x03, 0x0a, 0x99, 0x01, 0x0e, 0xf0, 0x0a, 0x40, 0x01, 0x0e,
5275 0xfe, 0x49, 0x44, 0x16, 0xfe, 0xf0, 0x17, 0x73, 0x75, 0x03, 0x0a, 0x42,
5276 0x01, 0x0e, 0x07, 0x10, 0x45, 0x0a, 0x51, 0x01, 0x9e, 0x0a, 0x40, 0x01,
5277 0x0e, 0x73, 0x75, 0x03, 0xfe, 0x4e, 0xe4, 0x1a, 0x64, 0xfe, 0x24, 0x18,
5278 0x05, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45, 0x5b, 0xfe, 0x4e, 0xe4, 0xc2,
5279 0x64, 0xfe, 0x36, 0x18, 0x05, 0xfe, 0x92, 0x00, 0xfe, 0x02, 0xe6, 0x1b,
5280 0xdc, 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x64, 0xfe, 0x48, 0x18, 0x05,
5281 0xfe, 0x94, 0x00, 0xfe, 0x02, 0xe6, 0x19, 0xfe, 0x08, 0x10, 0x05, 0xfe,
5282 0x96, 0x00, 0xfe, 0x02, 0xe6, 0x2c, 0xfe, 0x4e, 0x45, 0xfe, 0x0c, 0x12,
5283 0xaf, 0xff, 0x04, 0x68, 0x54, 0xde, 0x1c, 0x69, 0x03, 0x07, 0x7a, 0xfe,
5284 0x5a, 0xf0, 0xfe, 0x74, 0x18, 0x24, 0xfe, 0x09, 0x00, 0xfe, 0x34, 0x10,
5285 0x07, 0x1b, 0xfe, 0x5a, 0xf0, 0xfe, 0x82, 0x18, 0x24, 0xc3, 0xfe, 0x26,
5286 0x10, 0x07, 0x1a, 0x5d, 0x24, 0x2c, 0xdc, 0x07, 0x0b, 0x5d, 0x24, 0x93,
5287 0xfe, 0x0e, 0x10, 0x07, 0x06, 0x5d, 0x24, 0x4d, 0x9f, 0xad, 0x03, 0x14,
5288 0xfe, 0x09, 0x00, 0x01, 0x33, 0xfe, 0x04, 0xfe, 0x7d, 0x05, 0x7f, 0xf9,
5289 0x03, 0x25, 0xfe, 0xca, 0x18, 0xfe, 0x14, 0xf0, 0x08, 0x65, 0xfe, 0xc6,
5290 0x18, 0x03, 0xff, 0x1a, 0x00, 0x00,
5291};
5292
5293static unsigned short _adv_asc3550_size = sizeof(_adv_asc3550_buf); /* 0x13AD */
5294static ADV_DCNT _adv_asc3550_chksum = 0x04D52DDDUL; /* Expanded little-endian checksum. */
5295
5296/* Microcode buffer is kept after initialization for error recovery. */
5297static unsigned char _adv_asc38C0800_buf[] = {
5298 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x16, 0x18, 0xe4,
5299 0x01, 0x00, 0x48, 0xe4, 0x18, 0x80, 0x03, 0xf6, 0x02, 0x00, 0xce, 0x19,
5300 0x00, 0xfa, 0xff, 0xff, 0x1c, 0x0f, 0x00, 0xf6, 0x9e, 0xe7, 0xff, 0x00,
5301 0x82, 0xe7, 0x00, 0xea, 0x01, 0xfa, 0x01, 0xe6, 0x09, 0xe7, 0x55, 0xf0,
5302 0x01, 0xf6, 0x03, 0x00, 0x04, 0x00, 0x10, 0x00, 0x1e, 0xf0, 0x85, 0xf0,
5303 0x18, 0xf4, 0x08, 0x00, 0xbc, 0x00, 0x38, 0x54, 0x00, 0xec, 0xd5, 0xf0,
5304 0x82, 0x0d, 0x00, 0xe6, 0x86, 0xf0, 0xb1, 0xf0, 0x98, 0x57, 0x01, 0xfc,
5305 0xb4, 0x00, 0xd4, 0x01, 0x0c, 0x1c, 0x3e, 0x1c, 0x3c, 0x00, 0xbb, 0x00,
5306 0x00, 0x10, 0xba, 0x19, 0x02, 0x80, 0x32, 0xf0, 0x7c, 0x0d, 0x02, 0x13,
5307 0xba, 0x13, 0x18, 0x40, 0x00, 0x57, 0x01, 0xea, 0x02, 0xfc, 0x03, 0xfc,
5308 0x3e, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x74, 0x01, 0x76, 0x01, 0xb9, 0x54,
5309 0x3e, 0x57, 0x00, 0x80, 0x03, 0xe6, 0xb6, 0x00, 0xc0, 0x00, 0x01, 0x01,
5310 0x3e, 0x01, 0x7a, 0x01, 0xca, 0x08, 0xce, 0x10, 0x16, 0x11, 0x04, 0x12,
5311 0x08, 0x12, 0x02, 0x4a, 0xbb, 0x55, 0x3c, 0x56, 0x03, 0x58, 0x1b, 0x80,
5312 0x30, 0xe4, 0x4b, 0xe4, 0x5d, 0xf0, 0x02, 0xfa, 0x20, 0x00, 0x32, 0x00,
5313 0x40, 0x00, 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01,
5314 0x70, 0x01, 0x72, 0x01, 0x78, 0x01, 0x7c, 0x01, 0x62, 0x0a, 0x86, 0x0d,
5315 0x06, 0x13, 0x4c, 0x1c, 0x04, 0x80, 0x4a, 0xe4, 0x02, 0xee, 0x5b, 0xf0,
5316 0x03, 0xf7, 0x0c, 0x00, 0x0f, 0x00, 0x47, 0x00, 0xbe, 0x00, 0x00, 0x01,
5317 0x20, 0x11, 0x5c, 0x16, 0x32, 0x1c, 0x38, 0x1c, 0x4e, 0x1c, 0x10, 0x44,
5318 0x00, 0x4c, 0x04, 0xea, 0x5c, 0xf0, 0xa7, 0xf0, 0x04, 0xf6, 0x03, 0xfa,
5319 0x05, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, 0xcc, 0x00, 0x20, 0x01,
5320 0x4e, 0x01, 0x4a, 0x0b, 0x42, 0x0c, 0x12, 0x0f, 0x0c, 0x10, 0x22, 0x11,
5321 0x0a, 0x12, 0x04, 0x13, 0x30, 0x1c, 0x02, 0x48, 0x00, 0x4e, 0x42, 0x54,
5322 0x44, 0x55, 0xbd, 0x56, 0x06, 0x83, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0,
5323 0x59, 0xf0, 0xb8, 0xf0, 0x4b, 0xf4, 0x06, 0xf7, 0x0e, 0xf7, 0x04, 0xfc,
5324 0x05, 0xfc, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x9b, 0x00, 0xa4, 0x00,
5325 0xb5, 0x00, 0xba, 0x00, 0xd0, 0x00, 0xe1, 0x00, 0xe7, 0x00, 0xe2, 0x03,
5326 0x08, 0x0f, 0x02, 0x10, 0x04, 0x10, 0x0a, 0x10, 0x0a, 0x13, 0x0c, 0x13,
5327 0x12, 0x13, 0x24, 0x14, 0x34, 0x14, 0x04, 0x16, 0x08, 0x16, 0xa4, 0x17,
5328 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44,
5329 0x0a, 0x45, 0x48, 0x46, 0x01, 0x48, 0x68, 0x54, 0x3a, 0x55, 0x83, 0x55,
5330 0xe5, 0x55, 0xb0, 0x57, 0x01, 0x58, 0x83, 0x59, 0x05, 0xe6, 0x0b, 0xf0,
5331 0x0c, 0xf0, 0x04, 0xf8, 0x05, 0xf8, 0x07, 0x00, 0x0a, 0x00, 0x1c, 0x00,
5332 0x1e, 0x00, 0x9e, 0x00, 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00,
5333 0x22, 0x01, 0x26, 0x01, 0x79, 0x01, 0x7e, 0x01, 0xc4, 0x01, 0xc6, 0x01,
5334 0x80, 0x02, 0x5e, 0x03, 0xee, 0x04, 0x9a, 0x06, 0xf8, 0x07, 0x62, 0x08,
5335 0x68, 0x08, 0x69, 0x08, 0xd6, 0x08, 0xe9, 0x09, 0xfa, 0x0b, 0x2e, 0x0f,
5336 0x12, 0x10, 0x1a, 0x10, 0xed, 0x10, 0xf1, 0x10, 0x2a, 0x11, 0x06, 0x12,
5337 0x0c, 0x12, 0x3e, 0x12, 0x10, 0x13, 0x16, 0x13, 0x1e, 0x13, 0x46, 0x14,
5338 0x76, 0x14, 0x82, 0x14, 0x36, 0x15, 0xca, 0x15, 0x6b, 0x18, 0xbe, 0x18,
5339 0xca, 0x18, 0xe6, 0x19, 0x12, 0x1c, 0x46, 0x1c, 0x9c, 0x32, 0x00, 0x40,
5340 0x0e, 0x47, 0xfe, 0x9c, 0xf0, 0x2b, 0x02, 0xfe, 0xac, 0x0d, 0xff, 0x10,
5341 0x00, 0x00, 0xd7, 0xfe, 0xe8, 0x19, 0x00, 0xd6, 0xfe, 0x84, 0x01, 0xff,
5342 0x03, 0x00, 0x00, 0xfe, 0x93, 0x15, 0xfe, 0x0f, 0x05, 0xff, 0x38, 0x00,
5343 0x00, 0xfe, 0x57, 0x24, 0x00, 0xfe, 0x4c, 0x00, 0x5b, 0xff, 0x04, 0x00,
5344 0x00, 0x11, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x08,
5345 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x11,
5346 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00,
5347 0xfe, 0x04, 0xf7, 0xd6, 0x2c, 0x99, 0x0a, 0x01, 0xfe, 0xc2, 0x0f, 0xfe,
5348 0x04, 0xf7, 0xd6, 0x99, 0x0a, 0x42, 0x2c, 0xfe, 0x3d, 0xf0, 0xfe, 0x06,
5349 0x02, 0xfe, 0x20, 0xf0, 0xa7, 0xfe, 0x91, 0xf0, 0xfe, 0xf4, 0x01, 0xfe,
5350 0x90, 0xf0, 0xfe, 0xf4, 0x01, 0xfe, 0x8f, 0xf0, 0xa7, 0x03, 0x5d, 0x4d,
5351 0x02, 0xfe, 0xc8, 0x0d, 0x01, 0xfe, 0x38, 0x0e, 0xfe, 0xdd, 0x12, 0xfe,
5352 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x03, 0xfe, 0xa6, 0x00, 0xfe, 0xd3, 0x12,
5353 0x41, 0x14, 0xfe, 0xa6, 0x00, 0xc2, 0xfe, 0x48, 0xf0, 0xfe, 0x8a, 0x02,
5354 0xfe, 0x49, 0xf0, 0xfe, 0xa4, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xc2, 0x02,
5355 0xfe, 0x46, 0xf0, 0xfe, 0x54, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x5a, 0x02,
5356 0xfe, 0x43, 0xf0, 0xfe, 0x48, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x4c, 0x02,
5357 0xfe, 0x45, 0xf0, 0xfe, 0x50, 0x02, 0x18, 0x0a, 0xaa, 0x18, 0x06, 0x14,
5358 0xa1, 0x02, 0x2b, 0xfe, 0x00, 0x1c, 0xe7, 0xfe, 0x02, 0x1c, 0xe6, 0xfe,
5359 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0xfe, 0x18, 0x18, 0xfe, 0xe7, 0x10,
5360 0xfe, 0x06, 0xfc, 0xce, 0x09, 0x70, 0x01, 0xa8, 0x02, 0x2b, 0x15, 0x59,
5361 0x39, 0xa2, 0x01, 0xfe, 0x58, 0x10, 0x09, 0x70, 0x01, 0x87, 0xfe, 0xbd,
5362 0x10, 0x09, 0x70, 0x01, 0x87, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe,
5363 0x58, 0x1c, 0x18, 0x06, 0x14, 0xa1, 0x2c, 0x1c, 0x2b, 0xfe, 0x3d, 0xf0,
5364 0xfe, 0x06, 0x02, 0x23, 0xfe, 0x98, 0x02, 0xfe, 0x5a, 0x1c, 0xf8, 0xfe,
5365 0x14, 0x1c, 0x15, 0xfe, 0x30, 0x00, 0x39, 0xa2, 0x01, 0xfe, 0x48, 0x10,
5366 0x18, 0x06, 0x14, 0xa1, 0x02, 0xd7, 0x22, 0x20, 0x07, 0x11, 0x35, 0xfe,
5367 0x69, 0x10, 0x18, 0x06, 0x14, 0xa1, 0xfe, 0x04, 0xec, 0x20, 0x4f, 0x43,
5368 0x13, 0x20, 0xfe, 0x05, 0xf6, 0xce, 0x01, 0xfe, 0x4a, 0x17, 0x08, 0x54,
5369 0x58, 0x37, 0x12, 0x2f, 0x42, 0x92, 0x01, 0xfe, 0x82, 0x16, 0x02, 0x2b,
5370 0x09, 0x46, 0x01, 0x0e, 0x07, 0x00, 0x66, 0x01, 0x73, 0xfe, 0x18, 0x10,
5371 0xfe, 0x41, 0x58, 0x09, 0xa4, 0x01, 0x0e, 0xfe, 0xc8, 0x54, 0x6b, 0xfe,
5372 0x10, 0x03, 0x01, 0xfe, 0x82, 0x16, 0x02, 0x2b, 0x2c, 0x4f, 0xfe, 0x02,
5373 0xe8, 0x2a, 0xfe, 0xbf, 0x57, 0xfe, 0x9e, 0x43, 0xfe, 0x77, 0x57, 0xfe,
5374 0x27, 0xf0, 0xfe, 0xe0, 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xa7,
5375 0xfe, 0x40, 0x1c, 0x1c, 0xd9, 0xfe, 0x26, 0xf0, 0xfe, 0x5a, 0x03, 0xfe,
5376 0xa0, 0xf0, 0xfe, 0x48, 0x03, 0xfe, 0x11, 0xf0, 0xa7, 0xfe, 0xef, 0x10,
5377 0xfe, 0x9f, 0xf0, 0xfe, 0x68, 0x03, 0xf9, 0x10, 0xfe, 0x11, 0x00, 0x02,
5378 0x65, 0x2c, 0xfe, 0x48, 0x1c, 0xf9, 0x08, 0x05, 0x1b, 0xfe, 0x18, 0x13,
5379 0x21, 0x22, 0xa3, 0xb7, 0x13, 0xa3, 0x09, 0x46, 0x01, 0x0e, 0xb7, 0x78,
5380 0x01, 0xfe, 0xb4, 0x16, 0x12, 0xd1, 0x1c, 0xd9, 0xfe, 0x01, 0xf0, 0xd9,
5381 0xfe, 0x82, 0xf0, 0xfe, 0x96, 0x03, 0xfa, 0x12, 0xfe, 0xe4, 0x00, 0x27,
5382 0xfe, 0xa8, 0x03, 0x1c, 0x34, 0x1d, 0xfe, 0xb8, 0x03, 0x01, 0x4b, 0xfe,
5383 0x06, 0xf0, 0xfe, 0xc8, 0x03, 0x95, 0x86, 0xfe, 0x0a, 0xf0, 0xfe, 0x8a,
5384 0x06, 0x02, 0x24, 0x03, 0x70, 0x28, 0x17, 0xfe, 0xfa, 0x04, 0x15, 0x6d,
5385 0x01, 0x36, 0x7b, 0xfe, 0x6a, 0x02, 0x02, 0xd8, 0xf9, 0x2c, 0x99, 0x19,
5386 0xfe, 0x67, 0x1b, 0xfe, 0xbf, 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x48, 0x1c,
5387 0x74, 0x01, 0xaf, 0x8c, 0x09, 0x46, 0x01, 0x0e, 0x07, 0x00, 0x17, 0xda,
5388 0x09, 0xd1, 0x01, 0x0e, 0x8d, 0x51, 0x64, 0x79, 0x2a, 0x03, 0x70, 0x28,
5389 0xfe, 0x10, 0x12, 0x15, 0x6d, 0x01, 0x36, 0x7b, 0xfe, 0x6a, 0x02, 0x02,
5390 0xd8, 0xc7, 0x81, 0xc8, 0x83, 0x1c, 0x24, 0x27, 0xfe, 0x40, 0x04, 0x1d,
5391 0xfe, 0x3c, 0x04, 0x3b, 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x4e,
5392 0x12, 0x2d, 0xff, 0x02, 0x00, 0x10, 0x01, 0x0b, 0x1d, 0xfe, 0xe4, 0x04,
5393 0x2d, 0x01, 0x0b, 0x1d, 0x24, 0x33, 0x31, 0xde, 0xfe, 0x4c, 0x44, 0xfe,
5394 0x4c, 0x12, 0x51, 0xfe, 0x44, 0x48, 0x0f, 0x6f, 0xfe, 0x4c, 0x54, 0x6b,
5395 0xda, 0x4f, 0x79, 0x2a, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x62,
5396 0x13, 0x08, 0x05, 0x1b, 0xfe, 0x2a, 0x13, 0x32, 0x07, 0x82, 0xfe, 0x52,
5397 0x13, 0xfe, 0x20, 0x10, 0x0f, 0x6f, 0xfe, 0x4c, 0x54, 0x6b, 0xda, 0xfe,
5398 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x40, 0x13, 0x08, 0x05, 0x1b, 0xfe,
5399 0x08, 0x13, 0x32, 0x07, 0x82, 0xfe, 0x30, 0x13, 0x08, 0x05, 0x1b, 0xfe,
5400 0x1c, 0x12, 0x15, 0x9d, 0x08, 0x05, 0x06, 0x4d, 0x15, 0xfe, 0x0d, 0x00,
5401 0x01, 0x36, 0x7b, 0xfe, 0x64, 0x0d, 0x02, 0x24, 0x2d, 0x12, 0xfe, 0xe6,
5402 0x00, 0xfe, 0x1c, 0x90, 0xfe, 0x40, 0x5c, 0x04, 0x15, 0x9d, 0x01, 0x36,
5403 0x02, 0x2b, 0xfe, 0x42, 0x5b, 0x99, 0x19, 0xfe, 0x46, 0x59, 0xfe, 0xbf,
5404 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x87, 0x80, 0xfe, 0x31, 0xe4, 0x5b, 0x08,
5405 0x05, 0x0a, 0xfe, 0x84, 0x13, 0xfe, 0x20, 0x80, 0x07, 0x19, 0xfe, 0x7c,
5406 0x12, 0x53, 0x05, 0x06, 0xfe, 0x6c, 0x13, 0x03, 0xfe, 0xa2, 0x00, 0x28,
5407 0x17, 0xfe, 0x90, 0x05, 0xfe, 0x31, 0xe4, 0x5a, 0x53, 0x05, 0x0a, 0xfe,
5408 0x56, 0x13, 0x03, 0xfe, 0xa0, 0x00, 0x28, 0xfe, 0x4e, 0x12, 0x67, 0xff,
5409 0x02, 0x00, 0x10, 0x27, 0xfe, 0x48, 0x05, 0x1c, 0x34, 0xfe, 0x89, 0x48,
5410 0xff, 0x02, 0x00, 0x10, 0x27, 0xfe, 0x56, 0x05, 0x26, 0xfe, 0xa8, 0x05,
5411 0x12, 0xfe, 0xe3, 0x00, 0x21, 0x53, 0xfe, 0x4a, 0xf0, 0xfe, 0x76, 0x05,
5412 0xfe, 0x49, 0xf0, 0xfe, 0x70, 0x05, 0x88, 0x25, 0xfe, 0x21, 0x00, 0xab,
5413 0x25, 0xfe, 0x22, 0x00, 0xaa, 0x25, 0x58, 0xfe, 0x09, 0x48, 0xff, 0x02,
5414 0x00, 0x10, 0x27, 0xfe, 0x86, 0x05, 0x26, 0xfe, 0xa8, 0x05, 0xfe, 0xe2,
5415 0x08, 0x53, 0x05, 0xcb, 0x4d, 0x01, 0xb0, 0x25, 0x06, 0x13, 0xd3, 0x39,
5416 0xfe, 0x27, 0x01, 0x08, 0x05, 0x1b, 0xfe, 0x22, 0x12, 0x41, 0x01, 0xb2,
5417 0x15, 0x9d, 0x08, 0x05, 0x06, 0x4d, 0x15, 0xfe, 0x0d, 0x00, 0x01, 0x36,
5418 0x7b, 0xfe, 0x64, 0x0d, 0x02, 0x24, 0x03, 0xfe, 0x9c, 0x00, 0x28, 0xeb,
5419 0x03, 0x5c, 0x28, 0xfe, 0x36, 0x13, 0x41, 0x01, 0xb2, 0x26, 0xfe, 0x18,
5420 0x06, 0x09, 0x06, 0x53, 0x05, 0x1f, 0xfe, 0x02, 0x12, 0x50, 0x01, 0xfe,
5421 0x9e, 0x15, 0x1d, 0xfe, 0x0e, 0x06, 0x12, 0xa5, 0x01, 0x4b, 0x12, 0xfe,
5422 0xe5, 0x00, 0x03, 0x5c, 0xc1, 0x0c, 0x5c, 0x03, 0xcd, 0x28, 0xfe, 0x62,
5423 0x12, 0x03, 0x45, 0x28, 0xfe, 0x5a, 0x13, 0x01, 0xfe, 0x0c, 0x19, 0x01,
5424 0xfe, 0x76, 0x19, 0xfe, 0x43, 0x48, 0xc4, 0xcc, 0x0f, 0x71, 0xff, 0x02,
5425 0x00, 0x57, 0x52, 0x93, 0x1e, 0x43, 0x8b, 0xc4, 0x6e, 0x41, 0x01, 0xb2,
5426 0x26, 0xfe, 0x82, 0x06, 0x53, 0x05, 0x1a, 0xe9, 0x91, 0x09, 0x59, 0x01,
5427 0xfe, 0xcc, 0x15, 0x1d, 0xfe, 0x78, 0x06, 0x12, 0xa5, 0x01, 0x4b, 0x12,
5428 0xfe, 0xe5, 0x00, 0x03, 0x45, 0xc1, 0x0c, 0x45, 0x18, 0x06, 0x01, 0xb2,
5429 0xfa, 0x76, 0x74, 0x01, 0xaf, 0x8c, 0x12, 0xfe, 0xe2, 0x00, 0x27, 0xdb,
5430 0x1c, 0x34, 0xfe, 0x0a, 0xf0, 0xfe, 0xb6, 0x06, 0x94, 0xfe, 0x6c, 0x07,
5431 0xfe, 0x06, 0xf0, 0xfe, 0x74, 0x07, 0x95, 0x86, 0x02, 0x24, 0x08, 0x05,
5432 0x0a, 0xfe, 0x2e, 0x12, 0x16, 0x19, 0x01, 0x0b, 0x16, 0x00, 0x01, 0x0b,
5433 0x16, 0x00, 0x01, 0x0b, 0x16, 0x00, 0x01, 0x0b, 0xfe, 0x99, 0xa4, 0x01,
5434 0x0b, 0x16, 0x00, 0x02, 0xfe, 0x42, 0x08, 0x68, 0x05, 0x1a, 0xfe, 0x38,
5435 0x12, 0x08, 0x05, 0x1a, 0xfe, 0x30, 0x13, 0x16, 0xfe, 0x1b, 0x00, 0x01,
5436 0x0b, 0x16, 0x00, 0x01, 0x0b, 0x16, 0x00, 0x01, 0x0b, 0x16, 0x00, 0x01,
5437 0x0b, 0x16, 0x06, 0x01, 0x0b, 0x16, 0x00, 0x02, 0xe2, 0x6c, 0x58, 0xbe,
5438 0x50, 0xfe, 0x9a, 0x81, 0x55, 0x1b, 0x7a, 0xfe, 0x42, 0x07, 0x09, 0x1b,
5439 0xfe, 0x09, 0x6f, 0xba, 0xfe, 0xca, 0x45, 0xfe, 0x32, 0x12, 0x69, 0x6d,
5440 0x8b, 0x6c, 0x7f, 0x27, 0xfe, 0x54, 0x07, 0x1c, 0x34, 0xfe, 0x0a, 0xf0,
5441 0xfe, 0x42, 0x07, 0x95, 0x86, 0x94, 0xfe, 0x6c, 0x07, 0x02, 0x24, 0x01,
5442 0x4b, 0x02, 0xdb, 0x16, 0x1f, 0x02, 0xdb, 0xfe, 0x9c, 0xf7, 0xdc, 0xfe,
5443 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x56, 0xfe, 0xda, 0x07, 0x0c, 0x60, 0x14,
5444 0x61, 0x08, 0x54, 0x5a, 0x37, 0x22, 0x20, 0x07, 0x11, 0xfe, 0x0e, 0x12,
5445 0x8d, 0xfe, 0x80, 0x80, 0x39, 0x20, 0x6a, 0x2a, 0xfe, 0x06, 0x10, 0xfe,
5446 0x83, 0xe7, 0xfe, 0x48, 0x00, 0xab, 0xfe, 0x03, 0x40, 0x08, 0x54, 0x5b,
5447 0x37, 0x01, 0xb3, 0xb8, 0xfe, 0x1f, 0x40, 0x13, 0x62, 0x01, 0xef, 0xfe,
5448 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x88,
5449 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, 0x0c, 0x5e, 0x14, 0x5f, 0xfe, 0x0c,
5450 0x90, 0xfe, 0x8e, 0x90, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x0c, 0x3d,
5451 0x14, 0x3e, 0xfe, 0x4a, 0x10, 0x08, 0x05, 0x5a, 0xfe, 0x2a, 0x12, 0xfe,
5452 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x60, 0x14, 0x61, 0x08, 0x05, 0x5b,
5453 0x8b, 0x01, 0xb3, 0xfe, 0x1f, 0x80, 0x13, 0x62, 0xfe, 0x44, 0x90, 0xfe,
5454 0xc6, 0x90, 0x0c, 0x3f, 0x14, 0x40, 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90,
5455 0x0c, 0x5e, 0x14, 0x5f, 0xfe, 0x40, 0x90, 0xfe, 0xc2, 0x90, 0x0c, 0x3d,
5456 0x14, 0x3e, 0x0c, 0x2e, 0x14, 0x3c, 0x21, 0x0c, 0x49, 0x0c, 0x63, 0x08,
5457 0x54, 0x1f, 0x37, 0x2c, 0x0f, 0xfe, 0x4e, 0x11, 0x27, 0xdd, 0xfe, 0x9e,
5458 0xf0, 0xfe, 0x76, 0x08, 0xbc, 0x17, 0x34, 0x2c, 0x77, 0xe6, 0xc5, 0xfe,
5459 0x9a, 0x08, 0xc6, 0xfe, 0xb8, 0x08, 0x94, 0xfe, 0x8e, 0x08, 0xfe, 0x06,
5460 0xf0, 0xfe, 0x94, 0x08, 0x95, 0x86, 0x02, 0x24, 0x01, 0x4b, 0xfe, 0xc9,
5461 0x10, 0x16, 0x1f, 0xfe, 0xc9, 0x10, 0x68, 0x05, 0x06, 0xfe, 0x10, 0x12,
5462 0x68, 0x05, 0x0a, 0x4e, 0x08, 0x05, 0x0a, 0xfe, 0x90, 0x12, 0xfe, 0x2e,
5463 0x1c, 0x02, 0xfe, 0x18, 0x0b, 0x68, 0x05, 0x06, 0x4e, 0x68, 0x05, 0x0a,
5464 0xfe, 0x7a, 0x12, 0xfe, 0x2c, 0x1c, 0xfe, 0xaa, 0xf0, 0xfe, 0xd2, 0x09,
5465 0xfe, 0xac, 0xf0, 0xfe, 0x00, 0x09, 0x02, 0xfe, 0xde, 0x09, 0xfe, 0xb7,
5466 0xf0, 0xfe, 0xfc, 0x08, 0xfe, 0x02, 0xf6, 0x1a, 0x50, 0xfe, 0x70, 0x18,
5467 0xfe, 0xf1, 0x18, 0xfe, 0x40, 0x55, 0xfe, 0xe1, 0x55, 0xfe, 0x10, 0x58,
5468 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x1c, 0x85, 0xfe,
5469 0x8c, 0xf0, 0xfe, 0xfc, 0x08, 0xfe, 0xac, 0xf0, 0xfe, 0xf0, 0x08, 0xb5,
5470 0xfe, 0xcb, 0x10, 0xfe, 0xad, 0xf0, 0xfe, 0x0c, 0x09, 0x02, 0xfe, 0x18,
5471 0x0b, 0xb6, 0xfe, 0xbf, 0x10, 0xfe, 0x2b, 0xf0, 0x85, 0xf4, 0x1e, 0xfe,
5472 0x00, 0xfe, 0xfe, 0x1c, 0x12, 0xc2, 0xfe, 0xd2, 0xf0, 0x85, 0xfe, 0x76,
5473 0x18, 0x1e, 0x19, 0x17, 0x85, 0x03, 0xd2, 0x1e, 0x06, 0x17, 0x85, 0xc5,
5474 0x4a, 0xc6, 0x4a, 0xb5, 0xb6, 0xfe, 0x89, 0x10, 0x74, 0x67, 0x2d, 0x15,
5475 0x9d, 0x01, 0x36, 0x10, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x65, 0x10,
5476 0x80, 0x02, 0x65, 0xfe, 0x98, 0x80, 0xfe, 0x19, 0xe4, 0x0a, 0xfe, 0x1a,
5477 0x12, 0x51, 0xfe, 0x19, 0x82, 0xfe, 0x6c, 0x18, 0xfe, 0x44, 0x54, 0xbe,
5478 0xfe, 0x19, 0x81, 0xfe, 0x74, 0x18, 0x8f, 0x90, 0x17, 0xfe, 0xce, 0x08,
5479 0x02, 0x4a, 0x08, 0x05, 0x5a, 0xec, 0x03, 0x2e, 0x29, 0x3c, 0x0c, 0x3f,
5480 0x14, 0x40, 0x9b, 0x2e, 0x9c, 0x3c, 0xfe, 0x6c, 0x18, 0xfe, 0xed, 0x18,
5481 0xfe, 0x44, 0x54, 0xfe, 0xe5, 0x54, 0x3a, 0x3f, 0x3b, 0x40, 0x03, 0x49,
5482 0x29, 0x63, 0x8f, 0xfe, 0xe3, 0x54, 0xfe, 0x74, 0x18, 0xfe, 0xf5, 0x18,
5483 0x8f, 0xfe, 0xe3, 0x54, 0x90, 0xc0, 0x56, 0xfe, 0xce, 0x08, 0x02, 0x4a,
5484 0xfe, 0x37, 0xf0, 0xfe, 0xda, 0x09, 0xfe, 0x8b, 0xf0, 0xfe, 0x60, 0x09,
5485 0x02, 0x4a, 0x08, 0x05, 0x0a, 0x23, 0xfe, 0xfa, 0x0a, 0x3a, 0x49, 0x3b,
5486 0x63, 0x56, 0xfe, 0x3e, 0x0a, 0x0f, 0xfe, 0xc0, 0x07, 0x41, 0x98, 0x00,
5487 0xad, 0xfe, 0x01, 0x59, 0xfe, 0x52, 0xf0, 0xfe, 0x0c, 0x0a, 0x8f, 0x7a,
5488 0xfe, 0x24, 0x0a, 0x3a, 0x49, 0x8f, 0xfe, 0xe3, 0x54, 0x57, 0x49, 0x7d,
5489 0x63, 0xfe, 0x14, 0x58, 0xfe, 0x95, 0x58, 0x02, 0x4a, 0x3a, 0x49, 0x3b,
5490 0x63, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0xbe, 0x57, 0x49, 0x57, 0x63,
5491 0x02, 0x4a, 0x08, 0x05, 0x5a, 0xfe, 0x82, 0x12, 0x08, 0x05, 0x1f, 0xfe,
5492 0x66, 0x13, 0x22, 0x62, 0xb7, 0xfe, 0x03, 0xa1, 0xfe, 0x83, 0x80, 0xfe,
5493 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91, 0xfe, 0x86, 0x91, 0x6a,
5494 0x2a, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x56, 0xe0, 0x03, 0x60, 0x29,
5495 0x61, 0x0c, 0x7f, 0x14, 0x80, 0x57, 0x60, 0x7d, 0x61, 0x01, 0xb3, 0xb8,
5496 0x6a, 0x2a, 0x13, 0x62, 0x9b, 0x2e, 0x9c, 0x3c, 0x3a, 0x3f, 0x3b, 0x40,
5497 0x90, 0xc0, 0xfe, 0x04, 0xfa, 0x2e, 0xfe, 0x05, 0xfa, 0x3c, 0x01, 0xef,
5498 0xfe, 0x36, 0x10, 0x21, 0x0c, 0x7f, 0x0c, 0x80, 0x3a, 0x3f, 0x3b, 0x40,
5499 0xe4, 0x08, 0x05, 0x1f, 0x17, 0xe0, 0x3a, 0x3d, 0x3b, 0x3e, 0x08, 0x05,
5500 0xfe, 0xf7, 0x00, 0x37, 0x03, 0x5e, 0x29, 0x5f, 0xfe, 0x10, 0x58, 0xfe,
5501 0x91, 0x58, 0x57, 0x49, 0x7d, 0x63, 0x02, 0xfe, 0xf4, 0x09, 0x08, 0x05,
5502 0x1f, 0x17, 0xe0, 0x08, 0x05, 0xfe, 0xf7, 0x00, 0x37, 0xbe, 0xfe, 0x19,
5503 0x81, 0x50, 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90, 0xfe, 0xd3, 0x10, 0x32,
5504 0x07, 0xa6, 0x17, 0xfe, 0x08, 0x09, 0x12, 0xa6, 0x08, 0x05, 0x0a, 0xfe,
5505 0x14, 0x13, 0x03, 0x3d, 0x29, 0x3e, 0x56, 0xfe, 0x08, 0x09, 0xfe, 0x0c,
5506 0x58, 0xfe, 0x8d, 0x58, 0x02, 0x4a, 0x21, 0x41, 0xfe, 0x19, 0x80, 0xe7,
5507 0x08, 0x05, 0x0a, 0xfe, 0x1a, 0x12, 0xfe, 0x6c, 0x19, 0xfe, 0x19, 0x41,
5508 0xf4, 0xc2, 0xfe, 0xd1, 0xf0, 0xe2, 0x15, 0x7e, 0x01, 0x36, 0x10, 0xfe,
5509 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xfe, 0x6c, 0x19, 0x57, 0x3d, 0xfe, 0xed,
5510 0x19, 0x7d, 0x3e, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0xf4, 0x1e, 0xfe,
5511 0x00, 0xff, 0x35, 0xfe, 0x74, 0x10, 0xc2, 0xfe, 0xd2, 0xf0, 0xfe, 0xa6,
5512 0x0b, 0xfe, 0x76, 0x18, 0x1e, 0x19, 0x8a, 0x03, 0xd2, 0x1e, 0x06, 0xfe,
5513 0x08, 0x13, 0x10, 0xfe, 0x16, 0x00, 0x02, 0x65, 0xfe, 0xd1, 0xf0, 0xfe,
5514 0xb8, 0x0b, 0x15, 0x7e, 0x01, 0x36, 0x10, 0xfe, 0x17, 0x00, 0xfe, 0x42,
5515 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xbe, 0x0b, 0xfe, 0x3c, 0x10, 0xfe, 0xcd,
5516 0xf0, 0xfe, 0xca, 0x0b, 0x10, 0xfe, 0x22, 0x00, 0x02, 0x65, 0xfe, 0xcb,
5517 0xf0, 0xfe, 0xd6, 0x0b, 0x10, 0xfe, 0x24, 0x00, 0x02, 0x65, 0xfe, 0xd0,
5518 0xf0, 0xfe, 0xe0, 0x0b, 0x10, 0x9e, 0xe5, 0xfe, 0xcf, 0xf0, 0xfe, 0xea,
5519 0x0b, 0x10, 0x58, 0xfe, 0x10, 0x10, 0xfe, 0xcc, 0xf0, 0xe2, 0x68, 0x05,
5520 0x1f, 0x4d, 0x10, 0xfe, 0x12, 0x00, 0x2c, 0x0f, 0xfe, 0x4e, 0x11, 0x27,
5521 0xfe, 0x00, 0x0c, 0xfe, 0x9e, 0xf0, 0xfe, 0x14, 0x0c, 0xbc, 0x17, 0x34,
5522 0x2c, 0x77, 0xe6, 0xc5, 0x24, 0xc6, 0x24, 0x2c, 0xfa, 0x27, 0xfe, 0x20,
5523 0x0c, 0x1c, 0x34, 0x94, 0xfe, 0x3c, 0x0c, 0x95, 0x86, 0xc5, 0xdc, 0xc6,
5524 0xdc, 0x02, 0x24, 0x01, 0x4b, 0xfe, 0xdb, 0x10, 0x12, 0xfe, 0xe8, 0x00,
5525 0xb5, 0xb6, 0x74, 0xc7, 0x81, 0xc8, 0x83, 0xfe, 0x89, 0xf0, 0x24, 0x33,
5526 0x31, 0xe1, 0xc7, 0x81, 0xc8, 0x83, 0x27, 0xfe, 0x66, 0x0c, 0x1d, 0x24,
5527 0x33, 0x31, 0xdf, 0xbc, 0x4e, 0x10, 0xfe, 0x42, 0x00, 0x02, 0x65, 0x7c,
5528 0x06, 0xfe, 0x81, 0x49, 0x17, 0xfe, 0x2c, 0x0d, 0x08, 0x05, 0x0a, 0xfe,
5529 0x44, 0x13, 0x10, 0x00, 0x55, 0x0a, 0xfe, 0x54, 0x12, 0x55, 0xfe, 0x28,
5530 0x00, 0x23, 0xfe, 0x9a, 0x0d, 0x09, 0x46, 0x01, 0x0e, 0x07, 0x00, 0x66,
5531 0x44, 0xfe, 0x28, 0x00, 0xfe, 0xe2, 0x10, 0x01, 0xf5, 0x01, 0xf6, 0x09,
5532 0xa4, 0x01, 0xfe, 0x26, 0x0f, 0x64, 0x12, 0x2f, 0x01, 0x73, 0x02, 0x2b,
5533 0x10, 0xfe, 0x44, 0x00, 0x55, 0x0a, 0xe9, 0x44, 0x0a, 0xfe, 0xb4, 0x10,
5534 0x01, 0xb0, 0x44, 0x0a, 0xfe, 0xaa, 0x10, 0x01, 0xb0, 0xfe, 0x19, 0x82,
5535 0xfe, 0x34, 0x46, 0xac, 0x44, 0x0a, 0x10, 0xfe, 0x43, 0x00, 0xfe, 0x96,
5536 0x10, 0x08, 0x54, 0x0a, 0x37, 0x01, 0xf5, 0x01, 0xf6, 0x64, 0x12, 0x2f,
5537 0x01, 0x73, 0x99, 0x0a, 0x64, 0x42, 0x92, 0x02, 0xfe, 0x2e, 0x03, 0x08,
5538 0x05, 0x0a, 0x8a, 0x44, 0x0a, 0x10, 0x00, 0xfe, 0x5c, 0x10, 0x68, 0x05,
5539 0x1a, 0xfe, 0x58, 0x12, 0x08, 0x05, 0x1a, 0xfe, 0x50, 0x13, 0xfe, 0x1c,
5540 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x50, 0x0d, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d,
5541 0xf0, 0xfe, 0x56, 0x0d, 0x08, 0x54, 0x1a, 0x37, 0xfe, 0xa9, 0x10, 0x10,
5542 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0a, 0x50, 0xfe, 0x2e, 0x10, 0x10,
5543 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x6f, 0xab, 0x10, 0xfe, 0x41,
5544 0x00, 0xaa, 0x10, 0xfe, 0x24, 0x00, 0x8c, 0xb5, 0xb6, 0x74, 0x03, 0x70,
5545 0x28, 0x23, 0xd8, 0x50, 0xfe, 0x04, 0xe6, 0x1a, 0xfe, 0x9d, 0x41, 0xfe,
5546 0x1c, 0x42, 0x64, 0x01, 0xe3, 0x02, 0x2b, 0xf8, 0x15, 0x0a, 0x39, 0xa0,
5547 0xb4, 0x15, 0xfe, 0x31, 0x00, 0x39, 0xa2, 0x01, 0xfe, 0x48, 0x10, 0x02,
5548 0xd7, 0x42, 0xfe, 0x06, 0xec, 0xd0, 0xfc, 0x44, 0x1b, 0xfe, 0xce, 0x45,
5549 0x35, 0x42, 0xfe, 0x06, 0xea, 0xd0, 0xfe, 0x47, 0x4b, 0x91, 0xfe, 0x75,
5550 0x57, 0x03, 0x5d, 0xfe, 0x98, 0x56, 0xfe, 0x38, 0x12, 0x09, 0x48, 0x01,
5551 0x0e, 0xfe, 0x44, 0x48, 0x4f, 0x08, 0x05, 0x1b, 0xfe, 0x1a, 0x13, 0x09,
5552 0x46, 0x01, 0x0e, 0x41, 0xfe, 0x41, 0x58, 0x09, 0xa4, 0x01, 0x0e, 0xfe,
5553 0x49, 0x54, 0x96, 0xfe, 0x1e, 0x0e, 0x02, 0xfe, 0x2e, 0x03, 0x09, 0x5d,
5554 0xfe, 0xee, 0x14, 0xfc, 0x44, 0x1b, 0xfe, 0xce, 0x45, 0x35, 0x42, 0xfe,
5555 0xce, 0x47, 0xfe, 0xad, 0x13, 0x02, 0x2b, 0x22, 0x20, 0x07, 0x11, 0xfe,
5556 0x9e, 0x12, 0x21, 0x13, 0x59, 0x13, 0x9f, 0x13, 0xd5, 0x22, 0x2f, 0x41,
5557 0x39, 0x2f, 0xbc, 0xad, 0xfe, 0xbc, 0xf0, 0xfe, 0xe0, 0x0e, 0x0f, 0x06,
5558 0x13, 0x59, 0x01, 0xfe, 0xda, 0x16, 0x03, 0xfe, 0x38, 0x01, 0x29, 0xfe,
5559 0x3a, 0x01, 0x56, 0xfe, 0xe4, 0x0e, 0xfe, 0x02, 0xec, 0xd5, 0x69, 0x00,
5560 0x66, 0xfe, 0x04, 0xec, 0x20, 0x4f, 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01,
5561 0x01, 0xfe, 0x4a, 0x17, 0xfe, 0x08, 0x90, 0xfe, 0x48, 0xf4, 0x0d, 0xfe,
5562 0x18, 0x13, 0xba, 0xfe, 0x02, 0xea, 0xd5, 0x69, 0x7e, 0xfe, 0xc5, 0x13,
5563 0x15, 0x1a, 0x39, 0xa0, 0xb4, 0xfe, 0x2e, 0x10, 0x03, 0xfe, 0x38, 0x01,
5564 0x1e, 0xfe, 0xf0, 0xff, 0x0c, 0xfe, 0x60, 0x01, 0x03, 0xfe, 0x3a, 0x01,
5565 0x0c, 0xfe, 0x62, 0x01, 0x43, 0x13, 0x20, 0x25, 0x06, 0x13, 0x2f, 0x12,
5566 0x2f, 0x92, 0x0f, 0x06, 0x04, 0x21, 0x04, 0x22, 0x59, 0xfe, 0xf7, 0x12,
5567 0x22, 0x9f, 0xb7, 0x13, 0x9f, 0x07, 0x7e, 0xfe, 0x71, 0x13, 0xfe, 0x24,
5568 0x1c, 0x15, 0x19, 0x39, 0xa0, 0xb4, 0xfe, 0xd9, 0x10, 0xc3, 0xfe, 0x03,
5569 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x04, 0xc3, 0xfe, 0x03, 0xdc,
5570 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x04, 0xfe, 0x03, 0x57, 0xc3, 0x21,
5571 0xfe, 0x00, 0xcc, 0x04, 0xfe, 0x03, 0x57, 0xc3, 0x78, 0x04, 0x08, 0x05,
5572 0x58, 0xfe, 0x22, 0x13, 0xfe, 0x1c, 0x80, 0x07, 0x06, 0xfe, 0x1a, 0x13,
5573 0xfe, 0x1e, 0x80, 0xed, 0xfe, 0x1d, 0x80, 0xae, 0xfe, 0x0c, 0x90, 0xfe,
5574 0x0e, 0x13, 0xfe, 0x0e, 0x90, 0xac, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4,
5575 0x0a, 0xfe, 0x3c, 0x50, 0xaa, 0x01, 0xfe, 0x7a, 0x17, 0x32, 0x07, 0x2f,
5576 0xad, 0x01, 0xfe, 0xb4, 0x16, 0x08, 0x05, 0x1b, 0x4e, 0x01, 0xf5, 0x01,
5577 0xf6, 0x12, 0xfe, 0xe9, 0x00, 0x08, 0x05, 0x58, 0xfe, 0x2c, 0x13, 0x01,
5578 0xfe, 0x0c, 0x17, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0xfe, 0x96, 0x90,
5579 0x0c, 0xfe, 0x64, 0x01, 0x14, 0xfe, 0x66, 0x01, 0x08, 0x05, 0x5b, 0xfe,
5580 0x12, 0x12, 0xfe, 0x03, 0x80, 0x8d, 0xfe, 0x01, 0xec, 0x20, 0xfe, 0x80,
5581 0x40, 0x13, 0x20, 0x6a, 0x2a, 0x12, 0xcf, 0x64, 0x22, 0x20, 0xfb, 0x79,
5582 0x20, 0x04, 0xfe, 0x08, 0x1c, 0x03, 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58,
5583 0x03, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x03, 0xfe, 0xb0, 0x00, 0xfe,
5584 0x08, 0x58, 0x03, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c,
5585 0x25, 0x6e, 0x13, 0xd0, 0x21, 0x0c, 0x5c, 0x0c, 0x45, 0x0f, 0x46, 0x52,
5586 0x50, 0x18, 0x1b, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x23, 0xfe, 0xfc,
5587 0x0f, 0x44, 0x11, 0x0f, 0x48, 0x52, 0x18, 0x58, 0xfe, 0x90, 0x4d, 0xfe,
5588 0x91, 0x54, 0x23, 0xe4, 0x25, 0x11, 0x13, 0x20, 0x7c, 0x6f, 0x4f, 0x22,
5589 0x20, 0xfb, 0x79, 0x20, 0x12, 0xcf, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0,
5590 0xfe, 0x26, 0x10, 0xf8, 0x74, 0xfe, 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe,
5591 0x18, 0x1c, 0x04, 0x42, 0xfe, 0x0c, 0x14, 0xfc, 0xfe, 0x07, 0xe6, 0x1b,
5592 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x04, 0x01, 0xb0, 0x7c, 0x6f, 0x4f,
5593 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x42, 0x13, 0x32, 0x07, 0x2f,
5594 0xfe, 0x34, 0x13, 0x09, 0x48, 0x01, 0x0e, 0xbb, 0xfe, 0x36, 0x12, 0xfe,
5595 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01, 0xf0, 0xfe, 0x00, 0xcc, 0xbb, 0xfe,
5596 0xf3, 0x13, 0x43, 0x78, 0x07, 0x11, 0xac, 0x09, 0x84, 0x01, 0x0e, 0xfe,
5597 0x80, 0x5c, 0x01, 0x73, 0xfe, 0x0e, 0x10, 0x07, 0x82, 0x4e, 0xfe, 0x14,
5598 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x60, 0x10, 0x04, 0xfe, 0x44, 0x58, 0x8d,
5599 0xfe, 0x01, 0xec, 0xa2, 0xfe, 0x9e, 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe,
5600 0x9c, 0xe7, 0x1a, 0x79, 0x2a, 0x01, 0xe3, 0xfe, 0xdd, 0x10, 0x2c, 0xc7,
5601 0x81, 0xc8, 0x83, 0x33, 0x31, 0xde, 0x07, 0x1a, 0xfe, 0x48, 0x12, 0x07,
5602 0x0a, 0xfe, 0x56, 0x12, 0x07, 0x19, 0xfe, 0x30, 0x12, 0x07, 0xc9, 0x17,
5603 0xfe, 0x32, 0x12, 0x07, 0xfe, 0x23, 0x00, 0x17, 0xeb, 0x07, 0x06, 0x17,
5604 0xfe, 0x9c, 0x12, 0x07, 0x1f, 0xfe, 0x12, 0x12, 0x07, 0x00, 0x17, 0x24,
5605 0x15, 0xc9, 0x01, 0x36, 0xa9, 0x2d, 0x01, 0x0b, 0x94, 0x4b, 0x04, 0x2d,
5606 0xdd, 0x09, 0xd1, 0x01, 0xfe, 0x26, 0x0f, 0x12, 0x82, 0x02, 0x2b, 0x2d,
5607 0x32, 0x07, 0xa6, 0xfe, 0xd9, 0x13, 0x3a, 0x3d, 0x3b, 0x3e, 0x56, 0xfe,
5608 0xf0, 0x11, 0x08, 0x05, 0x5a, 0xfe, 0x72, 0x12, 0x9b, 0x2e, 0x9c, 0x3c,
5609 0x90, 0xc0, 0x96, 0xfe, 0xba, 0x11, 0x22, 0x62, 0xfe, 0x26, 0x13, 0x03,
5610 0x7f, 0x29, 0x80, 0x56, 0xfe, 0x76, 0x0d, 0x0c, 0x60, 0x14, 0x61, 0x21,
5611 0x0c, 0x7f, 0x0c, 0x80, 0x01, 0xb3, 0x25, 0x6e, 0x77, 0x13, 0x62, 0x01,
5612 0xef, 0x9b, 0x2e, 0x9c, 0x3c, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe,
5613 0x04, 0xfa, 0x2e, 0xfe, 0x05, 0xfa, 0x3c, 0xfe, 0x91, 0x10, 0x03, 0x3f,
5614 0x29, 0x40, 0xfe, 0x40, 0x56, 0xfe, 0xe1, 0x56, 0x0c, 0x3f, 0x14, 0x40,
5615 0x88, 0x9b, 0x2e, 0x9c, 0x3c, 0x90, 0xc0, 0x03, 0x5e, 0x29, 0x5f, 0xfe,
5616 0x00, 0x56, 0xfe, 0xa1, 0x56, 0x0c, 0x5e, 0x14, 0x5f, 0x08, 0x05, 0x5a,
5617 0xfe, 0x1e, 0x12, 0x22, 0x62, 0xfe, 0x1f, 0x40, 0x03, 0x60, 0x29, 0x61,
5618 0xfe, 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x03, 0x3f, 0x29, 0x40, 0xfe, 0x44,
5619 0x50, 0xfe, 0xc6, 0x50, 0x03, 0x5e, 0x29, 0x5f, 0xfe, 0x08, 0x50, 0xfe,
5620 0x8a, 0x50, 0x03, 0x3d, 0x29, 0x3e, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50,
5621 0x02, 0x89, 0x25, 0x06, 0x13, 0xd4, 0x02, 0x72, 0x2d, 0x01, 0x0b, 0x1d,
5622 0x4c, 0x33, 0x31, 0xde, 0x07, 0x06, 0x23, 0x4c, 0x32, 0x07, 0xa6, 0x23,
5623 0x72, 0x01, 0xaf, 0x1e, 0x43, 0x17, 0x4c, 0x08, 0x05, 0x0a, 0xee, 0x3a,
5624 0x3d, 0x3b, 0x3e, 0xfe, 0x0a, 0x55, 0x35, 0xfe, 0x8b, 0x55, 0x57, 0x3d,
5625 0x7d, 0x3e, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x02, 0x72, 0xfe, 0x19,
5626 0x81, 0xba, 0xfe, 0x19, 0x41, 0x02, 0x72, 0x2d, 0x01, 0x0b, 0x1c, 0x34,
5627 0x1d, 0xe8, 0x33, 0x31, 0xe1, 0x55, 0x19, 0xfe, 0xa6, 0x12, 0x55, 0x0a,
5628 0x4d, 0x02, 0x4c, 0x01, 0x0b, 0x1c, 0x34, 0x1d, 0xe8, 0x33, 0x31, 0xdf,
5629 0x07, 0x19, 0x23, 0x4c, 0x01, 0x0b, 0x1d, 0xe8, 0x33, 0x31, 0xfe, 0xe8,
5630 0x09, 0xfe, 0xc2, 0x49, 0x51, 0x03, 0xfe, 0x9c, 0x00, 0x28, 0x8a, 0x53,
5631 0x05, 0x1f, 0x35, 0xa9, 0xfe, 0xbb, 0x45, 0x55, 0x00, 0x4e, 0x44, 0x06,
5632 0x7c, 0x43, 0xfe, 0xda, 0x14, 0x01, 0xaf, 0x8c, 0xfe, 0x4b, 0x45, 0xee,
5633 0x32, 0x07, 0xa5, 0xed, 0x03, 0xcd, 0x28, 0x8a, 0x03, 0x45, 0x28, 0x35,
5634 0x67, 0x02, 0x72, 0xfe, 0xc0, 0x5d, 0xfe, 0xf8, 0x14, 0xfe, 0x03, 0x17,
5635 0x03, 0x5c, 0xc1, 0x0c, 0x5c, 0x67, 0x2d, 0x01, 0x0b, 0x26, 0x89, 0x01,
5636 0xfe, 0x9e, 0x15, 0x02, 0x89, 0x01, 0x0b, 0x1c, 0x34, 0x1d, 0x4c, 0x33,
5637 0x31, 0xdf, 0x07, 0x06, 0x23, 0x4c, 0x01, 0xf1, 0xfe, 0x42, 0x58, 0xf1,
5638 0xfe, 0xa4, 0x14, 0x8c, 0xfe, 0x4a, 0xf4, 0x0a, 0x17, 0x4c, 0xfe, 0x4a,
5639 0xf4, 0x06, 0xea, 0x32, 0x07, 0xa5, 0x8b, 0x02, 0x72, 0x03, 0x45, 0xc1,
5640 0x0c, 0x45, 0x67, 0x2d, 0x01, 0x0b, 0x26, 0x89, 0x01, 0xfe, 0xcc, 0x15,
5641 0x02, 0x89, 0x0f, 0x06, 0x27, 0xfe, 0xbe, 0x13, 0x26, 0xfe, 0xd4, 0x13,
5642 0x76, 0xfe, 0x89, 0x48, 0x01, 0x0b, 0x21, 0x76, 0x04, 0x7b, 0xfe, 0xd0,
5643 0x13, 0x1c, 0xfe, 0xd0, 0x13, 0x1d, 0xfe, 0xbe, 0x13, 0x67, 0x2d, 0x01,
5644 0x0b, 0xfe, 0xd5, 0x10, 0x0f, 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93,
5645 0x1e, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x04, 0x0f,
5646 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93, 0x1e, 0x43, 0xfe, 0x30, 0x56,
5647 0xfe, 0x00, 0x5c, 0x04, 0x0f, 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93,
5648 0x04, 0x0f, 0x71, 0xff, 0x02, 0x00, 0x57, 0x52, 0x93, 0xfe, 0x0b, 0x58,
5649 0x04, 0x09, 0x5c, 0x01, 0x87, 0x09, 0x45, 0x01, 0x87, 0x04, 0xfe, 0x03,
5650 0xa1, 0x1e, 0x11, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x1f, 0x52,
5651 0xfe, 0x00, 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c,
5652 0x6a, 0x2a, 0x0c, 0x5e, 0x14, 0x5f, 0x57, 0x3f, 0x7d, 0x40, 0x04, 0xdd,
5653 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x8d, 0x04, 0x01,
5654 0xfe, 0x0c, 0x19, 0xfe, 0x42, 0x48, 0x50, 0x51, 0x91, 0x01, 0x0b, 0x1d,
5655 0xfe, 0x96, 0x15, 0x33, 0x31, 0xe1, 0x01, 0x0b, 0x1d, 0xfe, 0x96, 0x15,
5656 0x33, 0x31, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x03, 0xcd, 0x28, 0xfe,
5657 0xcc, 0x12, 0x53, 0x05, 0x1a, 0xfe, 0xc4, 0x13, 0x21, 0x69, 0x1a, 0xee,
5658 0x55, 0xca, 0x6b, 0xfe, 0xdc, 0x14, 0x4d, 0x0f, 0x06, 0x18, 0xca, 0x7c,
5659 0x30, 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xab, 0xff, 0x02, 0x83,
5660 0x55, 0x69, 0x19, 0xae, 0x98, 0xfe, 0x30, 0x00, 0x96, 0xf2, 0x18, 0x6d,
5661 0x0f, 0x06, 0xfe, 0x56, 0x10, 0x69, 0x0a, 0xed, 0x98, 0xfe, 0x64, 0x00,
5662 0x96, 0xf2, 0x09, 0xfe, 0x64, 0x00, 0x18, 0x9e, 0x0f, 0x06, 0xfe, 0x28,
5663 0x10, 0x69, 0x06, 0xfe, 0x60, 0x13, 0x98, 0xfe, 0xc8, 0x00, 0x96, 0xf2,
5664 0x09, 0xfe, 0xc8, 0x00, 0x18, 0x59, 0x0f, 0x06, 0x88, 0x98, 0xfe, 0x90,
5665 0x01, 0x7a, 0xfe, 0x42, 0x15, 0x91, 0xe4, 0xfe, 0x43, 0xf4, 0x9f, 0xfe,
5666 0x56, 0xf0, 0xfe, 0x54, 0x15, 0xfe, 0x04, 0xf4, 0x71, 0xfe, 0x43, 0xf4,
5667 0x9e, 0xfe, 0xf3, 0x10, 0xfe, 0x40, 0x5c, 0x01, 0xfe, 0x16, 0x14, 0x1e,
5668 0x43, 0xec, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x6e, 0x7a, 0xfe, 0x90,
5669 0x15, 0xc4, 0x6e, 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4,
5670 0xcc, 0x7a, 0xfe, 0x90, 0x15, 0xc4, 0xcc, 0x88, 0x51, 0x21, 0xfe, 0x4d,
5671 0xf4, 0x00, 0xe9, 0x91, 0x0f, 0x06, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58,
5672 0x04, 0x51, 0x0f, 0x0a, 0x04, 0x16, 0x06, 0x01, 0x0b, 0x26, 0xf3, 0x16,
5673 0x0a, 0x01, 0x0b, 0x26, 0xf3, 0x16, 0x19, 0x01, 0x0b, 0x26, 0xf3, 0x76,
5674 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x04, 0x16, 0x06, 0x01, 0x0b, 0x26, 0xb1,
5675 0x16, 0x19, 0x01, 0x0b, 0x26, 0xb1, 0x16, 0x06, 0x01, 0x0b, 0x26, 0xb1,
5676 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x26, 0xb1, 0x76, 0xfe, 0x89, 0x4a, 0x01,
5677 0x0b, 0x04, 0x51, 0x04, 0x22, 0xd3, 0x07, 0x06, 0xfe, 0x48, 0x13, 0xb8,
5678 0x13, 0xd3, 0xfe, 0x49, 0xf4, 0x00, 0x4d, 0x76, 0xa9, 0x67, 0xfe, 0x01,
5679 0xec, 0xfe, 0x27, 0x01, 0xfe, 0x89, 0x48, 0xff, 0x02, 0x00, 0x10, 0x27,
5680 0xfe, 0x2e, 0x16, 0x32, 0x07, 0xfe, 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x1d,
5681 0xfe, 0x52, 0x16, 0x21, 0x13, 0xd4, 0x01, 0x4b, 0x22, 0xd4, 0x07, 0x06,
5682 0x4e, 0x08, 0x54, 0x06, 0x37, 0x04, 0x09, 0x48, 0x01, 0x0e, 0xfb, 0x8e,
5683 0x07, 0x11, 0xae, 0x09, 0x84, 0x01, 0x0e, 0x8e, 0x09, 0x5d, 0x01, 0xa8,
5684 0x04, 0x09, 0x84, 0x01, 0x0e, 0x8e, 0xfe, 0x80, 0xe7, 0x11, 0x07, 0x11,
5685 0x8a, 0xfe, 0x45, 0x58, 0x01, 0xf0, 0x8e, 0x04, 0x09, 0x48, 0x01, 0x0e,
5686 0x8e, 0x09, 0x5d, 0x01, 0xa8, 0x04, 0x09, 0x48, 0x01, 0x0e, 0xfe, 0x80,
5687 0x80, 0xfe, 0x80, 0x4c, 0xfe, 0x49, 0xe4, 0x11, 0xae, 0x09, 0x84, 0x01,
5688 0x0e, 0xfe, 0x80, 0x4c, 0x09, 0x5d, 0x01, 0x87, 0x04, 0x18, 0x11, 0x75,
5689 0x6c, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x24,
5690 0x1c, 0xfe, 0x1d, 0xf7, 0x1b, 0x97, 0xfe, 0xee, 0x16, 0x01, 0xfe, 0xf4,
5691 0x17, 0xad, 0x9a, 0x1b, 0x6c, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x04,
5692 0xb9, 0x23, 0xfe, 0xde, 0x16, 0xfe, 0xda, 0x10, 0x18, 0x11, 0x75, 0x03,
5693 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x1f, 0xfe, 0x18, 0x58, 0x03, 0xfe,
5694 0x66, 0x01, 0xfe, 0x19, 0x58, 0x9a, 0x1f, 0xfe, 0x3c, 0x90, 0xfe, 0x30,
5695 0xf4, 0x06, 0xfe, 0x3c, 0x50, 0x6c, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79,
5696 0xfe, 0x1c, 0xf7, 0x1f, 0x97, 0xfe, 0x38, 0x17, 0xfe, 0xb6, 0x14, 0x35,
5697 0x04, 0xb9, 0x23, 0xfe, 0x10, 0x17, 0xfe, 0x9c, 0x10, 0x18, 0x11, 0x75,
5698 0xfe, 0x83, 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d, 0xf7,
5699 0x2e, 0x97, 0xfe, 0x5a, 0x17, 0xfe, 0x94, 0x14, 0xec, 0x9a, 0x2e, 0x6c,
5700 0x1a, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0x04, 0xb9, 0x23, 0xfe,
5701 0x4e, 0x17, 0xfe, 0x6c, 0x10, 0x18, 0x11, 0x75, 0xfe, 0x30, 0xbc, 0xfe,
5702 0xb2, 0xbc, 0x9a, 0xcb, 0x6c, 0x1a, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7,
5703 0xcb, 0x97, 0xfe, 0x92, 0x17, 0xfe, 0x5c, 0x14, 0x35, 0x04, 0xb9, 0x23,
5704 0xfe, 0x7e, 0x17, 0xfe, 0x42, 0x10, 0xfe, 0x02, 0xf6, 0x11, 0x75, 0xfe,
5705 0x18, 0xfe, 0x60, 0xfe, 0x19, 0xfe, 0x61, 0xfe, 0x03, 0xa1, 0xfe, 0x1d,
5706 0xf7, 0x5b, 0x97, 0xfe, 0xb8, 0x17, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13,
5707 0x9a, 0x5b, 0x41, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7,
5708 0x11, 0xfe, 0x81, 0xe7, 0x11, 0x12, 0xfe, 0xdd, 0x00, 0x6a, 0x2a, 0x04,
5709 0x6a, 0x2a, 0xfe, 0x12, 0x45, 0x23, 0xfe, 0xa8, 0x17, 0x15, 0x06, 0x39,
5710 0xa0, 0xb4, 0x02, 0x2b, 0xfe, 0x39, 0xf0, 0xfe, 0xfc, 0x17, 0x21, 0x04,
5711 0xfe, 0x7e, 0x18, 0x1e, 0x19, 0x66, 0x0f, 0x0d, 0x04, 0x75, 0x03, 0xd2,
5712 0x1e, 0x06, 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x7c, 0x6f, 0x4f, 0x32,
5713 0x07, 0x2f, 0xfe, 0x3c, 0x13, 0xf1, 0xfe, 0x42, 0x13, 0x42, 0x92, 0x09,
5714 0x48, 0x01, 0x0e, 0xbb, 0xeb, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01,
5715 0xf0, 0xfe, 0x00, 0xcc, 0xbb, 0xfe, 0xf3, 0x13, 0x43, 0x78, 0x07, 0x11,
5716 0xac, 0x09, 0x84, 0x01, 0x0e, 0xfe, 0x80, 0x4c, 0x01, 0x73, 0xfe, 0x16,
5717 0x10, 0x07, 0x82, 0x8b, 0xfe, 0x40, 0x14, 0xfe, 0x24, 0x12, 0xfe, 0x14,
5718 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x1c, 0x18, 0x18, 0x0a, 0x04, 0xfe, 0x9c,
5719 0xe7, 0x0a, 0x10, 0xfe, 0x15, 0x00, 0x64, 0x79, 0x2a, 0x01, 0xe3, 0x18,
5720 0x06, 0x04, 0x42, 0x92, 0x08, 0x54, 0x1b, 0x37, 0x12, 0x2f, 0x01, 0x73,
5721 0x18, 0x06, 0x04, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x3a, 0xce, 0x3b,
5722 0xcf, 0xfe, 0x48, 0x55, 0x35, 0xfe, 0xc9, 0x55, 0x04, 0x22, 0xa3, 0x77,
5723 0x13, 0xa3, 0x04, 0x09, 0xa4, 0x01, 0x0e, 0xfe, 0x41, 0x48, 0x09, 0x46,
5724 0x01, 0x0e, 0xfe, 0x49, 0x44, 0x17, 0xfe, 0xe8, 0x18, 0x77, 0x78, 0x04,
5725 0x09, 0x48, 0x01, 0x0e, 0x07, 0x11, 0x4e, 0x09, 0x5d, 0x01, 0xa8, 0x09,
5726 0x46, 0x01, 0x0e, 0x77, 0x78, 0x04, 0xfe, 0x4e, 0xe4, 0x19, 0x6b, 0xfe,
5727 0x1c, 0x19, 0x03, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10,
5728 0xfe, 0x4e, 0xe4, 0xc9, 0x6b, 0xfe, 0x2e, 0x19, 0x03, 0xfe, 0x92, 0x00,
5729 0xfe, 0x02, 0xe6, 0x1a, 0xe5, 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x6b,
5730 0xfe, 0x40, 0x19, 0x03, 0xfe, 0x94, 0x00, 0xfe, 0x02, 0xe6, 0x1f, 0xfe,
5731 0x08, 0x10, 0x03, 0xfe, 0x96, 0x00, 0xfe, 0x02, 0xe6, 0x6d, 0xfe, 0x4e,
5732 0x45, 0xea, 0xba, 0xff, 0x04, 0x68, 0x54, 0xe7, 0x1e, 0x6e, 0xfe, 0x08,
5733 0x1c, 0xfe, 0x67, 0x19, 0xfe, 0x0a, 0x1c, 0xfe, 0x1a, 0xf4, 0xfe, 0x00,
5734 0x04, 0xea, 0xfe, 0x48, 0xf4, 0x19, 0x7a, 0xfe, 0x74, 0x19, 0x0f, 0x19,
5735 0x04, 0x07, 0x7e, 0xfe, 0x5a, 0xf0, 0xfe, 0x84, 0x19, 0x25, 0xfe, 0x09,
5736 0x00, 0xfe, 0x34, 0x10, 0x07, 0x1a, 0xfe, 0x5a, 0xf0, 0xfe, 0x92, 0x19,
5737 0x25, 0xca, 0xfe, 0x26, 0x10, 0x07, 0x19, 0x66, 0x25, 0x6d, 0xe5, 0x07,
5738 0x0a, 0x66, 0x25, 0x9e, 0xfe, 0x0e, 0x10, 0x07, 0x06, 0x66, 0x25, 0x59,
5739 0xa9, 0xb8, 0x04, 0x15, 0xfe, 0x09, 0x00, 0x01, 0x36, 0xfe, 0x04, 0xfe,
5740 0x81, 0x03, 0x83, 0xfe, 0x40, 0x5c, 0x04, 0x1c, 0xf7, 0xfe, 0x14, 0xf0,
5741 0x0b, 0x27, 0xfe, 0xd6, 0x19, 0x1c, 0xf7, 0x7b, 0xf7, 0xfe, 0x82, 0xf0,
5742 0xfe, 0xda, 0x19, 0x04, 0xff, 0xcc, 0x00, 0x00,
5743};
5744
5745static unsigned short _adv_asc38C0800_size = sizeof(_adv_asc38C0800_buf); /* 0x14E1 */
5746static ADV_DCNT _adv_asc38C0800_chksum = 0x050D3FD8UL; /* Expanded little-endian checksum. */
5747
5748/* Microcode buffer is kept after initialization for error recovery. */
5749static unsigned char _adv_asc38C1600_buf[] = {
5750 0x00, 0x00, 0x00, 0xf2, 0x00, 0x16, 0x00, 0xfc, 0x00, 0x10, 0x00, 0xf0,
5751 0x18, 0xe4, 0x01, 0x00, 0x04, 0x1e, 0x48, 0xe4, 0x03, 0xf6, 0xf7, 0x13,
5752 0x2e, 0x1e, 0x02, 0x00, 0x07, 0x17, 0xc0, 0x5f, 0x00, 0xfa, 0xff, 0xff,
5753 0x04, 0x00, 0x00, 0xf6, 0x09, 0xe7, 0x82, 0xe7, 0x85, 0xf0, 0x86, 0xf0,
5754 0x4e, 0x10, 0x9e, 0xe7, 0xff, 0x00, 0x55, 0xf0, 0x01, 0xf6, 0x03, 0x00,
5755 0x98, 0x57, 0x01, 0xe6, 0x00, 0xea, 0x00, 0xec, 0x01, 0xfa, 0x18, 0xf4,
5756 0x08, 0x00, 0xf0, 0x1d, 0x38, 0x54, 0x32, 0xf0, 0x10, 0x00, 0xc2, 0x0e,
5757 0x1e, 0xf0, 0xd5, 0xf0, 0xbc, 0x00, 0x4b, 0xe4, 0x00, 0xe6, 0xb1, 0xf0,
5758 0xb4, 0x00, 0x02, 0x13, 0x3e, 0x1c, 0xc8, 0x47, 0x3e, 0x00, 0xd8, 0x01,
5759 0x06, 0x13, 0x0c, 0x1c, 0x5e, 0x1e, 0x00, 0x57, 0xc8, 0x57, 0x01, 0xfc,
5760 0xbc, 0x0e, 0xa2, 0x12, 0xb9, 0x54, 0x00, 0x80, 0x62, 0x0a, 0x5a, 0x12,
5761 0xc8, 0x15, 0x3e, 0x1e, 0x18, 0x40, 0xbd, 0x56, 0x03, 0xe6, 0x01, 0xea,
5762 0x5c, 0xf0, 0x0f, 0x00, 0x20, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x04, 0x12,
5763 0x04, 0x13, 0xbb, 0x55, 0x3c, 0x56, 0x3e, 0x57, 0x03, 0x58, 0x4a, 0xe4,
5764 0x40, 0x00, 0xb6, 0x00, 0xbb, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x01, 0x01,
5765 0x3e, 0x01, 0x58, 0x0a, 0x44, 0x10, 0x0a, 0x12, 0x4c, 0x1c, 0x4e, 0x1c,
5766 0x02, 0x4a, 0x30, 0xe4, 0x05, 0xe6, 0x0c, 0x00, 0x3c, 0x00, 0x80, 0x00,
5767 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01, 0x72, 0x01,
5768 0x74, 0x01, 0x76, 0x01, 0x78, 0x01, 0x7c, 0x01, 0xc6, 0x0e, 0x0c, 0x10,
5769 0xac, 0x12, 0xae, 0x12, 0x16, 0x1a, 0x32, 0x1c, 0x6e, 0x1e, 0x02, 0x48,
5770 0x3a, 0x55, 0xc9, 0x57, 0x02, 0xee, 0x5b, 0xf0, 0x03, 0xf7, 0x06, 0xf7,
5771 0x03, 0xfc, 0x06, 0x00, 0x1e, 0x00, 0xbe, 0x00, 0xe1, 0x00, 0x0c, 0x12,
5772 0x18, 0x1a, 0x70, 0x1a, 0x30, 0x1c, 0x38, 0x1c, 0x10, 0x44, 0x00, 0x4c,
5773 0xb0, 0x57, 0x40, 0x5c, 0x4d, 0xe4, 0x04, 0xea, 0x5d, 0xf0, 0xa7, 0xf0,
5774 0x04, 0xf6, 0x02, 0xfc, 0x05, 0x00, 0x09, 0x00, 0x19, 0x00, 0x32, 0x00,
5775 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, 0x9e, 0x00, 0xcc, 0x00,
5776 0x20, 0x01, 0x4e, 0x01, 0x79, 0x01, 0x3c, 0x09, 0x68, 0x0d, 0x02, 0x10,
5777 0x04, 0x10, 0x3a, 0x10, 0x08, 0x12, 0x0a, 0x13, 0x40, 0x16, 0x50, 0x16,
5778 0x00, 0x17, 0x4a, 0x19, 0x00, 0x4e, 0x00, 0x54, 0x01, 0x58, 0x00, 0xdc,
5779 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0, 0xb8, 0xf0, 0x48, 0xf4, 0x0e, 0xf7,
5780 0x0a, 0x00, 0x9b, 0x00, 0x9c, 0x00, 0xa4, 0x00, 0xb5, 0x00, 0xba, 0x00,
5781 0xd0, 0x00, 0xe7, 0x00, 0xf0, 0x03, 0x69, 0x08, 0xe9, 0x09, 0x5c, 0x0c,
5782 0xb6, 0x12, 0xbc, 0x19, 0xd8, 0x1b, 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c,
5783 0x42, 0x1d, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44, 0x0a, 0x45, 0x48, 0x46,
5784 0x89, 0x48, 0x68, 0x54, 0x83, 0x55, 0x83, 0x59, 0x31, 0xe4, 0x02, 0xe6,
5785 0x07, 0xf0, 0x08, 0xf0, 0x0b, 0xf0, 0x0c, 0xf0, 0x4b, 0xf4, 0x04, 0xf8,
5786 0x05, 0xf8, 0x02, 0xfa, 0x03, 0xfa, 0x04, 0xfc, 0x05, 0xfc, 0x07, 0x00,
5787 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00, 0xe5, 0x00, 0x22, 0x01,
5788 0x26, 0x01, 0x60, 0x01, 0x7a, 0x01, 0x82, 0x01, 0xc8, 0x01, 0xca, 0x01,
5789 0x86, 0x02, 0x6a, 0x03, 0x18, 0x05, 0xb2, 0x07, 0x68, 0x08, 0x10, 0x0d,
5790 0x06, 0x10, 0x0a, 0x10, 0x0e, 0x10, 0x12, 0x10, 0x60, 0x10, 0xed, 0x10,
5791 0xf3, 0x10, 0x06, 0x12, 0x10, 0x12, 0x1e, 0x12, 0x0c, 0x13, 0x0e, 0x13,
5792 0x10, 0x13, 0xfe, 0x9c, 0xf0, 0x35, 0x05, 0xfe, 0xec, 0x0e, 0xff, 0x10,
5793 0x00, 0x00, 0xe9, 0xfe, 0x34, 0x1f, 0x00, 0xe8, 0xfe, 0x88, 0x01, 0xff,
5794 0x03, 0x00, 0x00, 0xfe, 0x93, 0x15, 0xfe, 0x0f, 0x05, 0xff, 0x38, 0x00,
5795 0x00, 0xfe, 0x57, 0x24, 0x00, 0xfe, 0x4c, 0x00, 0x65, 0xff, 0x04, 0x00,
5796 0x00, 0x1a, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x08,
5797 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x13,
5798 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00,
5799 0xfe, 0x04, 0xf7, 0xe8, 0x37, 0x7d, 0x0d, 0x01, 0xfe, 0x4a, 0x11, 0xfe,
5800 0x04, 0xf7, 0xe8, 0x7d, 0x0d, 0x51, 0x37, 0xfe, 0x3d, 0xf0, 0xfe, 0x0c,
5801 0x02, 0xfe, 0x20, 0xf0, 0xbc, 0xfe, 0x91, 0xf0, 0xfe, 0xf8, 0x01, 0xfe,
5802 0x90, 0xf0, 0xfe, 0xf8, 0x01, 0xfe, 0x8f, 0xf0, 0xbc, 0x03, 0x67, 0x4d,
5803 0x05, 0xfe, 0x08, 0x0f, 0x01, 0xfe, 0x78, 0x0f, 0xfe, 0xdd, 0x12, 0x05,
5804 0xfe, 0x0e, 0x03, 0xfe, 0x28, 0x1c, 0x03, 0xfe, 0xa6, 0x00, 0xfe, 0xd1,
5805 0x12, 0x3e, 0x22, 0xfe, 0xa6, 0x00, 0xac, 0xfe, 0x48, 0xf0, 0xfe, 0x90,
5806 0x02, 0xfe, 0x49, 0xf0, 0xfe, 0xaa, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xc8,
5807 0x02, 0xfe, 0x46, 0xf0, 0xfe, 0x5a, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x60,
5808 0x02, 0xfe, 0x43, 0xf0, 0xfe, 0x4e, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x52,
5809 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x56, 0x02, 0x1c, 0x0d, 0xa2, 0x1c, 0x07,
5810 0x22, 0xb7, 0x05, 0x35, 0xfe, 0x00, 0x1c, 0xfe, 0xf1, 0x10, 0xfe, 0x02,
5811 0x1c, 0xf5, 0xfe, 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0x5f, 0xfe, 0xe7,
5812 0x10, 0xfe, 0x06, 0xfc, 0xde, 0x0a, 0x81, 0x01, 0xa3, 0x05, 0x35, 0x1f,
5813 0x95, 0x47, 0xb8, 0x01, 0xfe, 0xe4, 0x11, 0x0a, 0x81, 0x01, 0x5c, 0xfe,
5814 0xbd, 0x10, 0x0a, 0x81, 0x01, 0x5c, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c,
5815 0xfe, 0x58, 0x1c, 0x1c, 0x07, 0x22, 0xb7, 0x37, 0x2a, 0x35, 0xfe, 0x3d,
5816 0xf0, 0xfe, 0x0c, 0x02, 0x2b, 0xfe, 0x9e, 0x02, 0xfe, 0x5a, 0x1c, 0xfe,
5817 0x12, 0x1c, 0xfe, 0x14, 0x1c, 0x1f, 0xfe, 0x30, 0x00, 0x47, 0xb8, 0x01,
5818 0xfe, 0xd4, 0x11, 0x1c, 0x07, 0x22, 0xb7, 0x05, 0xe9, 0x21, 0x2c, 0x09,
5819 0x1a, 0x31, 0xfe, 0x69, 0x10, 0x1c, 0x07, 0x22, 0xb7, 0xfe, 0x04, 0xec,
5820 0x2c, 0x60, 0x01, 0xfe, 0x1e, 0x1e, 0x20, 0x2c, 0xfe, 0x05, 0xf6, 0xde,
5821 0x01, 0xfe, 0x62, 0x1b, 0x01, 0x0c, 0x61, 0x4a, 0x44, 0x15, 0x56, 0x51,
5822 0x01, 0xfe, 0x9e, 0x1e, 0x01, 0xfe, 0x96, 0x1a, 0x05, 0x35, 0x0a, 0x57,
5823 0x01, 0x18, 0x09, 0x00, 0x36, 0x01, 0x85, 0xfe, 0x18, 0x10, 0xfe, 0x41,
5824 0x58, 0x0a, 0xba, 0x01, 0x18, 0xfe, 0xc8, 0x54, 0x7b, 0xfe, 0x1c, 0x03,
5825 0x01, 0xfe, 0x96, 0x1a, 0x05, 0x35, 0x37, 0x60, 0xfe, 0x02, 0xe8, 0x30,
5826 0xfe, 0xbf, 0x57, 0xfe, 0x9e, 0x43, 0xfe, 0x77, 0x57, 0xfe, 0x27, 0xf0,
5827 0xfe, 0xe4, 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xbc, 0xfe, 0x40,
5828 0x1c, 0x2a, 0xeb, 0xfe, 0x26, 0xf0, 0xfe, 0x66, 0x03, 0xfe, 0xa0, 0xf0,
5829 0xfe, 0x54, 0x03, 0xfe, 0x11, 0xf0, 0xbc, 0xfe, 0xef, 0x10, 0xfe, 0x9f,
5830 0xf0, 0xfe, 0x74, 0x03, 0xfe, 0x46, 0x1c, 0x19, 0xfe, 0x11, 0x00, 0x05,
5831 0x70, 0x37, 0xfe, 0x48, 0x1c, 0xfe, 0x46, 0x1c, 0x01, 0x0c, 0x06, 0x28,
5832 0xfe, 0x18, 0x13, 0x26, 0x21, 0xb9, 0xc7, 0x20, 0xb9, 0x0a, 0x57, 0x01,
5833 0x18, 0xc7, 0x89, 0x01, 0xfe, 0xc8, 0x1a, 0x15, 0xe1, 0x2a, 0xeb, 0xfe,
5834 0x01, 0xf0, 0xeb, 0xfe, 0x82, 0xf0, 0xfe, 0xa4, 0x03, 0xfe, 0x9c, 0x32,
5835 0x15, 0xfe, 0xe4, 0x00, 0x2f, 0xfe, 0xb6, 0x03, 0x2a, 0x3c, 0x16, 0xfe,
5836 0xc6, 0x03, 0x01, 0x41, 0xfe, 0x06, 0xf0, 0xfe, 0xd6, 0x03, 0xaf, 0xa0,
5837 0xfe, 0x0a, 0xf0, 0xfe, 0xa2, 0x07, 0x05, 0x29, 0x03, 0x81, 0x1e, 0x1b,
5838 0xfe, 0x24, 0x05, 0x1f, 0x63, 0x01, 0x42, 0x8f, 0xfe, 0x70, 0x02, 0x05,
5839 0xea, 0xfe, 0x46, 0x1c, 0x37, 0x7d, 0x1d, 0xfe, 0x67, 0x1b, 0xfe, 0xbf,
5840 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x48, 0x1c, 0x75, 0x01, 0xa6, 0x86, 0x0a,
5841 0x57, 0x01, 0x18, 0x09, 0x00, 0x1b, 0xec, 0x0a, 0xe1, 0x01, 0x18, 0x77,
5842 0x50, 0x40, 0x8d, 0x30, 0x03, 0x81, 0x1e, 0xf8, 0x1f, 0x63, 0x01, 0x42,
5843 0x8f, 0xfe, 0x70, 0x02, 0x05, 0xea, 0xd7, 0x99, 0xd8, 0x9c, 0x2a, 0x29,
5844 0x2f, 0xfe, 0x4e, 0x04, 0x16, 0xfe, 0x4a, 0x04, 0x7e, 0xfe, 0xa0, 0x00,
5845 0xfe, 0x9b, 0x57, 0xfe, 0x54, 0x12, 0x32, 0xff, 0x02, 0x00, 0x10, 0x01,
5846 0x08, 0x16, 0xfe, 0x02, 0x05, 0x32, 0x01, 0x08, 0x16, 0x29, 0x27, 0x25,
5847 0xee, 0xfe, 0x4c, 0x44, 0xfe, 0x58, 0x12, 0x50, 0xfe, 0x44, 0x48, 0x13,
5848 0x34, 0xfe, 0x4c, 0x54, 0x7b, 0xec, 0x60, 0x8d, 0x30, 0x01, 0xfe, 0x4e,
5849 0x1e, 0xfe, 0x48, 0x47, 0xfe, 0x7c, 0x13, 0x01, 0x0c, 0x06, 0x28, 0xfe,
5850 0x32, 0x13, 0x01, 0x43, 0x09, 0x9b, 0xfe, 0x68, 0x13, 0xfe, 0x26, 0x10,
5851 0x13, 0x34, 0xfe, 0x4c, 0x54, 0x7b, 0xec, 0x01, 0xfe, 0x4e, 0x1e, 0xfe,
5852 0x48, 0x47, 0xfe, 0x54, 0x13, 0x01, 0x0c, 0x06, 0x28, 0xa5, 0x01, 0x43,
5853 0x09, 0x9b, 0xfe, 0x40, 0x13, 0x01, 0x0c, 0x06, 0x28, 0xf9, 0x1f, 0x7f,
5854 0x01, 0x0c, 0x06, 0x07, 0x4d, 0x1f, 0xfe, 0x0d, 0x00, 0x01, 0x42, 0x8f,
5855 0xfe, 0xa4, 0x0e, 0x05, 0x29, 0x32, 0x15, 0xfe, 0xe6, 0x00, 0x0f, 0xfe,
5856 0x1c, 0x90, 0x04, 0xfe, 0x9c, 0x93, 0x3a, 0x0b, 0x0e, 0x8b, 0x02, 0x1f,
5857 0x7f, 0x01, 0x42, 0x05, 0x35, 0xfe, 0x42, 0x5b, 0x7d, 0x1d, 0xfe, 0x46,
5858 0x59, 0xfe, 0xbf, 0x57, 0xfe, 0x77, 0x57, 0x0f, 0xfe, 0x87, 0x80, 0x04,
5859 0xfe, 0x87, 0x83, 0xfe, 0xc9, 0x47, 0x0b, 0x0e, 0xd0, 0x65, 0x01, 0x0c,
5860 0x06, 0x0d, 0xfe, 0x98, 0x13, 0x0f, 0xfe, 0x20, 0x80, 0x04, 0xfe, 0xa0,
5861 0x83, 0x33, 0x0b, 0x0e, 0x09, 0x1d, 0xfe, 0x84, 0x12, 0x01, 0x38, 0x06,
5862 0x07, 0xfe, 0x70, 0x13, 0x03, 0xfe, 0xa2, 0x00, 0x1e, 0x1b, 0xfe, 0xda,
5863 0x05, 0xd0, 0x54, 0x01, 0x38, 0x06, 0x0d, 0xfe, 0x58, 0x13, 0x03, 0xfe,
5864 0xa0, 0x00, 0x1e, 0xfe, 0x50, 0x12, 0x5e, 0xff, 0x02, 0x00, 0x10, 0x2f,
5865 0xfe, 0x90, 0x05, 0x2a, 0x3c, 0xcc, 0xff, 0x02, 0x00, 0x10, 0x2f, 0xfe,
5866 0x9e, 0x05, 0x17, 0xfe, 0xf4, 0x05, 0x15, 0xfe, 0xe3, 0x00, 0x26, 0x01,
5867 0x38, 0xfe, 0x4a, 0xf0, 0xfe, 0xc0, 0x05, 0xfe, 0x49, 0xf0, 0xfe, 0xba,
5868 0x05, 0x71, 0x2e, 0xfe, 0x21, 0x00, 0xf1, 0x2e, 0xfe, 0x22, 0x00, 0xa2,
5869 0x2e, 0x4a, 0xfe, 0x09, 0x48, 0xff, 0x02, 0x00, 0x10, 0x2f, 0xfe, 0xd0,
5870 0x05, 0x17, 0xfe, 0xf4, 0x05, 0xfe, 0xe2, 0x08, 0x01, 0x38, 0x06, 0xfe,
5871 0x1c, 0x00, 0x4d, 0x01, 0xa7, 0x2e, 0x07, 0x20, 0xe4, 0x47, 0xfe, 0x27,
5872 0x01, 0x01, 0x0c, 0x06, 0x28, 0xfe, 0x24, 0x12, 0x3e, 0x01, 0x84, 0x1f,
5873 0x7f, 0x01, 0x0c, 0x06, 0x07, 0x4d, 0x1f, 0xfe, 0x0d, 0x00, 0x01, 0x42,
5874 0x8f, 0xfe, 0xa4, 0x0e, 0x05, 0x29, 0x03, 0xe6, 0x1e, 0xfe, 0xca, 0x13,
5875 0x03, 0xb6, 0x1e, 0xfe, 0x40, 0x12, 0x03, 0x66, 0x1e, 0xfe, 0x38, 0x13,
5876 0x3e, 0x01, 0x84, 0x17, 0xfe, 0x72, 0x06, 0x0a, 0x07, 0x01, 0x38, 0x06,
5877 0x24, 0xfe, 0x02, 0x12, 0x4f, 0x01, 0xfe, 0x56, 0x19, 0x16, 0xfe, 0x68,
5878 0x06, 0x15, 0x82, 0x01, 0x41, 0x15, 0xe2, 0x03, 0x66, 0x8a, 0x10, 0x66,
5879 0x03, 0x9a, 0x1e, 0xfe, 0x70, 0x12, 0x03, 0x55, 0x1e, 0xfe, 0x68, 0x13,
5880 0x01, 0xc6, 0x09, 0x12, 0x48, 0xfe, 0x92, 0x06, 0x2e, 0x12, 0x01, 0xfe,
5881 0xac, 0x1d, 0xfe, 0x43, 0x48, 0x62, 0x80, 0x13, 0x58, 0xff, 0x02, 0x00,
5882 0x57, 0x52, 0xad, 0x23, 0x3f, 0x4e, 0x62, 0x49, 0x3e, 0x01, 0x84, 0x17,
5883 0xfe, 0xea, 0x06, 0x01, 0x38, 0x06, 0x12, 0xf7, 0x45, 0x0a, 0x95, 0x01,
5884 0xfe, 0x84, 0x19, 0x16, 0xfe, 0xe0, 0x06, 0x15, 0x82, 0x01, 0x41, 0x15,
5885 0xe2, 0x03, 0x55, 0x8a, 0x10, 0x55, 0x1c, 0x07, 0x01, 0x84, 0xfe, 0xae,
5886 0x10, 0x03, 0x6f, 0x1e, 0xfe, 0x9e, 0x13, 0x3e, 0x01, 0x84, 0x03, 0x9a,
5887 0x1e, 0xfe, 0x1a, 0x12, 0x01, 0x38, 0x06, 0x12, 0xfc, 0x01, 0xc6, 0x01,
5888 0xfe, 0xac, 0x1d, 0xfe, 0x43, 0x48, 0x62, 0x80, 0xf0, 0x45, 0x0a, 0x95,
5889 0x03, 0xb6, 0x1e, 0xf8, 0x01, 0x38, 0x06, 0x24, 0x36, 0xfe, 0x02, 0xf6,
5890 0x07, 0x71, 0x78, 0x8c, 0x00, 0x4d, 0x62, 0x49, 0x3e, 0x2d, 0x93, 0x4e,
5891 0xd0, 0x0d, 0x17, 0xfe, 0x9a, 0x07, 0x01, 0xfe, 0xc0, 0x19, 0x16, 0xfe,
5892 0x90, 0x07, 0x26, 0x20, 0x9e, 0x15, 0x82, 0x01, 0x41, 0x15, 0xe2, 0x21,
5893 0x9e, 0x09, 0x07, 0xfb, 0x03, 0xe6, 0xfe, 0x58, 0x57, 0x10, 0xe6, 0x05,
5894 0xfe, 0x2a, 0x06, 0x03, 0x6f, 0x8a, 0x10, 0x6f, 0x1c, 0x07, 0x01, 0x84,
5895 0xfe, 0x9c, 0x32, 0x5f, 0x75, 0x01, 0xa6, 0x86, 0x15, 0xfe, 0xe2, 0x00,
5896 0x2f, 0xed, 0x2a, 0x3c, 0xfe, 0x0a, 0xf0, 0xfe, 0xce, 0x07, 0xae, 0xfe,
5897 0x96, 0x08, 0xfe, 0x06, 0xf0, 0xfe, 0x9e, 0x08, 0xaf, 0xa0, 0x05, 0x29,
5898 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x2e, 0x12, 0x14, 0x1d, 0x01, 0x08, 0x14,
5899 0x00, 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0xfe,
5900 0x99, 0xa4, 0x01, 0x08, 0x14, 0x00, 0x05, 0xfe, 0xc6, 0x09, 0x01, 0x76,
5901 0x06, 0x12, 0xfe, 0x3a, 0x12, 0x01, 0x0c, 0x06, 0x12, 0xfe, 0x30, 0x13,
5902 0x14, 0xfe, 0x1b, 0x00, 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0x14, 0x00,
5903 0x01, 0x08, 0x14, 0x00, 0x01, 0x08, 0x14, 0x07, 0x01, 0x08, 0x14, 0x00,
5904 0x05, 0xef, 0x7c, 0x4a, 0x78, 0x4f, 0x0f, 0xfe, 0x9a, 0x81, 0x04, 0xfe,
5905 0x9a, 0x83, 0xfe, 0xcb, 0x47, 0x0b, 0x0e, 0x2d, 0x28, 0x48, 0xfe, 0x6c,
5906 0x08, 0x0a, 0x28, 0xfe, 0x09, 0x6f, 0xca, 0xfe, 0xca, 0x45, 0xfe, 0x32,
5907 0x12, 0x53, 0x63, 0x4e, 0x7c, 0x97, 0x2f, 0xfe, 0x7e, 0x08, 0x2a, 0x3c,
5908 0xfe, 0x0a, 0xf0, 0xfe, 0x6c, 0x08, 0xaf, 0xa0, 0xae, 0xfe, 0x96, 0x08,
5909 0x05, 0x29, 0x01, 0x41, 0x05, 0xed, 0x14, 0x24, 0x05, 0xed, 0xfe, 0x9c,
5910 0xf7, 0x9f, 0x01, 0xfe, 0xae, 0x1e, 0xfe, 0x18, 0x58, 0x01, 0xfe, 0xbe,
5911 0x1e, 0xfe, 0x99, 0x58, 0xfe, 0x78, 0x18, 0xfe, 0xf9, 0x18, 0x8e, 0xfe,
5912 0x16, 0x09, 0x10, 0x6a, 0x22, 0x6b, 0x01, 0x0c, 0x61, 0x54, 0x44, 0x21,
5913 0x2c, 0x09, 0x1a, 0xf8, 0x77, 0x01, 0xfe, 0x7e, 0x1e, 0x47, 0x2c, 0x7a,
5914 0x30, 0xf0, 0xfe, 0x83, 0xe7, 0xfe, 0x3f, 0x00, 0x71, 0xfe, 0x03, 0x40,
5915 0x01, 0x0c, 0x61, 0x65, 0x44, 0x01, 0xc2, 0xc8, 0xfe, 0x1f, 0x40, 0x20,
5916 0x6e, 0x01, 0xfe, 0x6a, 0x16, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe,
5917 0x44, 0x51, 0xfe, 0xc6, 0x51, 0xfe, 0x10, 0x10, 0x01, 0xfe, 0xce, 0x1e,
5918 0x01, 0xfe, 0xde, 0x1e, 0x10, 0x68, 0x22, 0x69, 0x01, 0xfe, 0xee, 0x1e,
5919 0x01, 0xfe, 0xfe, 0x1e, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x10, 0x4b,
5920 0x22, 0x4c, 0xfe, 0x8a, 0x10, 0x01, 0x0c, 0x06, 0x54, 0xfe, 0x50, 0x12,
5921 0x01, 0xfe, 0xae, 0x1e, 0x01, 0xfe, 0xbe, 0x1e, 0x10, 0x6a, 0x22, 0x6b,
5922 0x01, 0x0c, 0x06, 0x65, 0x4e, 0x01, 0xc2, 0x0f, 0xfe, 0x1f, 0x80, 0x04,
5923 0xfe, 0x9f, 0x83, 0x33, 0x0b, 0x0e, 0x20, 0x6e, 0x0f, 0xfe, 0x44, 0x90,
5924 0x04, 0xfe, 0xc4, 0x93, 0x3a, 0x0b, 0xfe, 0xc6, 0x90, 0x04, 0xfe, 0xc6,
5925 0x93, 0x79, 0x0b, 0x0e, 0x10, 0x6c, 0x22, 0x6d, 0x01, 0xfe, 0xce, 0x1e,
5926 0x01, 0xfe, 0xde, 0x1e, 0x10, 0x68, 0x22, 0x69, 0x0f, 0xfe, 0x40, 0x90,
5927 0x04, 0xfe, 0xc0, 0x93, 0x3a, 0x0b, 0xfe, 0xc2, 0x90, 0x04, 0xfe, 0xc2,
5928 0x93, 0x79, 0x0b, 0x0e, 0x10, 0x4b, 0x22, 0x4c, 0x10, 0x64, 0x22, 0x34,
5929 0x01, 0x0c, 0x61, 0x24, 0x44, 0x37, 0x13, 0xfe, 0x4e, 0x11, 0x2f, 0xfe,
5930 0xde, 0x09, 0xfe, 0x9e, 0xf0, 0xfe, 0xf2, 0x09, 0xfe, 0x01, 0x48, 0x1b,
5931 0x3c, 0x37, 0x88, 0xf5, 0xd4, 0xfe, 0x1e, 0x0a, 0xd5, 0xfe, 0x42, 0x0a,
5932 0xd2, 0xfe, 0x1e, 0x0a, 0xd3, 0xfe, 0x42, 0x0a, 0xae, 0xfe, 0x12, 0x0a,
5933 0xfe, 0x06, 0xf0, 0xfe, 0x18, 0x0a, 0xaf, 0xa0, 0x05, 0x29, 0x01, 0x41,
5934 0xfe, 0xc1, 0x10, 0x14, 0x24, 0xfe, 0xc1, 0x10, 0x01, 0x76, 0x06, 0x07,
5935 0xfe, 0x14, 0x12, 0x01, 0x76, 0x06, 0x0d, 0x5d, 0x01, 0x0c, 0x06, 0x0d,
5936 0xfe, 0x74, 0x12, 0xfe, 0x2e, 0x1c, 0x05, 0xfe, 0x1a, 0x0c, 0x01, 0x76,
5937 0x06, 0x07, 0x5d, 0x01, 0x76, 0x06, 0x0d, 0x41, 0xfe, 0x2c, 0x1c, 0xfe,
5938 0xaa, 0xf0, 0xfe, 0xce, 0x0a, 0xfe, 0xac, 0xf0, 0xfe, 0x66, 0x0a, 0xfe,
5939 0x92, 0x10, 0xc4, 0xf6, 0xfe, 0xad, 0xf0, 0xfe, 0x72, 0x0a, 0x05, 0xfe,
5940 0x1a, 0x0c, 0xc5, 0xfe, 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0xbf, 0xfe, 0x6b,
5941 0x18, 0x23, 0xfe, 0x00, 0xfe, 0xfe, 0x1c, 0x12, 0xac, 0xfe, 0xd2, 0xf0,
5942 0xbf, 0xfe, 0x76, 0x18, 0x23, 0x1d, 0x1b, 0xbf, 0x03, 0xe3, 0x23, 0x07,
5943 0x1b, 0xbf, 0xd4, 0x5b, 0xd5, 0x5b, 0xd2, 0x5b, 0xd3, 0x5b, 0xc4, 0xc5,
5944 0xfe, 0xa9, 0x10, 0x75, 0x5e, 0x32, 0x1f, 0x7f, 0x01, 0x42, 0x19, 0xfe,
5945 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x70, 0x19, 0x98, 0x05, 0x70, 0xfe, 0x74,
5946 0x18, 0x23, 0xfe, 0x00, 0xf8, 0x1b, 0x5b, 0x7d, 0x12, 0x01, 0xfe, 0x78,
5947 0x0f, 0x4d, 0x01, 0xfe, 0x96, 0x1a, 0x21, 0x30, 0x77, 0x7d, 0x1d, 0x05,
5948 0x5b, 0x01, 0x0c, 0x06, 0x0d, 0x2b, 0xfe, 0xe2, 0x0b, 0x01, 0x0c, 0x06,
5949 0x54, 0xfe, 0xa6, 0x12, 0x01, 0x0c, 0x06, 0x24, 0xfe, 0x88, 0x13, 0x21,
5950 0x6e, 0xc7, 0x01, 0xfe, 0x1e, 0x1f, 0x0f, 0xfe, 0x83, 0x80, 0x04, 0xfe,
5951 0x83, 0x83, 0xfe, 0xc9, 0x47, 0x0b, 0x0e, 0xfe, 0xc8, 0x44, 0xfe, 0x42,
5952 0x13, 0x0f, 0xfe, 0x04, 0x91, 0x04, 0xfe, 0x84, 0x93, 0xfe, 0xca, 0x57,
5953 0x0b, 0xfe, 0x86, 0x91, 0x04, 0xfe, 0x86, 0x93, 0xfe, 0xcb, 0x57, 0x0b,
5954 0x0e, 0x7a, 0x30, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x8e, 0x40, 0x03,
5955 0x6a, 0x3b, 0x6b, 0x10, 0x97, 0x22, 0x98, 0xd9, 0x6a, 0xda, 0x6b, 0x01,
5956 0xc2, 0xc8, 0x7a, 0x30, 0x20, 0x6e, 0xdb, 0x64, 0xdc, 0x34, 0x91, 0x6c,
5957 0x7e, 0x6d, 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0xfe, 0x04, 0xfa, 0x64,
5958 0xfe, 0x05, 0xfa, 0x34, 0x01, 0xfe, 0x6a, 0x16, 0xa3, 0x26, 0x10, 0x97,
5959 0x10, 0x98, 0x91, 0x6c, 0x7e, 0x6d, 0xfe, 0x14, 0x10, 0x01, 0x0c, 0x06,
5960 0x24, 0x1b, 0x40, 0x91, 0x4b, 0x7e, 0x4c, 0x01, 0x0c, 0x06, 0xfe, 0xf7,
5961 0x00, 0x44, 0x03, 0x68, 0x3b, 0x69, 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58,
5962 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x05, 0x5b, 0x01, 0x0c, 0x06, 0x24,
5963 0x1b, 0x40, 0x01, 0x0c, 0x06, 0xfe, 0xf7, 0x00, 0x44, 0x78, 0x01, 0xfe,
5964 0x8e, 0x1e, 0x4f, 0x0f, 0xfe, 0x10, 0x90, 0x04, 0xfe, 0x90, 0x93, 0x3a,
5965 0x0b, 0xfe, 0x92, 0x90, 0x04, 0xfe, 0x92, 0x93, 0x79, 0x0b, 0x0e, 0xfe,
5966 0xbd, 0x10, 0x01, 0x43, 0x09, 0xbb, 0x1b, 0xfe, 0x6e, 0x0a, 0x15, 0xbb,
5967 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x14, 0x13, 0x03, 0x4b, 0x3b, 0x4c, 0x8e,
5968 0xfe, 0x6e, 0x0a, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58, 0x05, 0x5b, 0x26,
5969 0x3e, 0x0f, 0xfe, 0x19, 0x80, 0x04, 0xfe, 0x99, 0x83, 0x33, 0x0b, 0x0e,
5970 0xfe, 0xe5, 0x10, 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x1a, 0x12, 0xfe, 0x6c,
5971 0x19, 0xfe, 0x19, 0x41, 0xfe, 0x6b, 0x18, 0xac, 0xfe, 0xd1, 0xf0, 0xef,
5972 0x1f, 0x92, 0x01, 0x42, 0x19, 0xfe, 0x44, 0x00, 0xfe, 0x90, 0x10, 0xfe,
5973 0x6c, 0x19, 0xd9, 0x4b, 0xfe, 0xed, 0x19, 0xda, 0x4c, 0xfe, 0x0c, 0x51,
5974 0xfe, 0x8e, 0x51, 0xfe, 0x6b, 0x18, 0x23, 0xfe, 0x00, 0xff, 0x31, 0xfe,
5975 0x76, 0x10, 0xac, 0xfe, 0xd2, 0xf0, 0xfe, 0xba, 0x0c, 0xfe, 0x76, 0x18,
5976 0x23, 0x1d, 0x5d, 0x03, 0xe3, 0x23, 0x07, 0xfe, 0x08, 0x13, 0x19, 0xfe,
5977 0x16, 0x00, 0x05, 0x70, 0xfe, 0xd1, 0xf0, 0xfe, 0xcc, 0x0c, 0x1f, 0x92,
5978 0x01, 0x42, 0x19, 0xfe, 0x17, 0x00, 0x5c, 0xfe, 0xce, 0xf0, 0xfe, 0xd2,
5979 0x0c, 0xfe, 0x3e, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xde, 0x0c, 0x19, 0xfe,
5980 0x22, 0x00, 0x05, 0x70, 0xfe, 0xcb, 0xf0, 0xfe, 0xea, 0x0c, 0x19, 0xfe,
5981 0x24, 0x00, 0x05, 0x70, 0xfe, 0xd0, 0xf0, 0xfe, 0xf4, 0x0c, 0x19, 0x94,
5982 0xfe, 0x1c, 0x10, 0xfe, 0xcf, 0xf0, 0xfe, 0xfe, 0x0c, 0x19, 0x4a, 0xf3,
5983 0xfe, 0xcc, 0xf0, 0xef, 0x01, 0x76, 0x06, 0x24, 0x4d, 0x19, 0xfe, 0x12,
5984 0x00, 0x37, 0x13, 0xfe, 0x4e, 0x11, 0x2f, 0xfe, 0x16, 0x0d, 0xfe, 0x9e,
5985 0xf0, 0xfe, 0x2a, 0x0d, 0xfe, 0x01, 0x48, 0x1b, 0x3c, 0x37, 0x88, 0xf5,
5986 0xd4, 0x29, 0xd5, 0x29, 0xd2, 0x29, 0xd3, 0x29, 0x37, 0xfe, 0x9c, 0x32,
5987 0x2f, 0xfe, 0x3e, 0x0d, 0x2a, 0x3c, 0xae, 0xfe, 0x62, 0x0d, 0xaf, 0xa0,
5988 0xd4, 0x9f, 0xd5, 0x9f, 0xd2, 0x9f, 0xd3, 0x9f, 0x05, 0x29, 0x01, 0x41,
5989 0xfe, 0xd3, 0x10, 0x15, 0xfe, 0xe8, 0x00, 0xc4, 0xc5, 0x75, 0xd7, 0x99,
5990 0xd8, 0x9c, 0xfe, 0x89, 0xf0, 0x29, 0x27, 0x25, 0xbe, 0xd7, 0x99, 0xd8,
5991 0x9c, 0x2f, 0xfe, 0x8c, 0x0d, 0x16, 0x29, 0x27, 0x25, 0xbd, 0xfe, 0x01,
5992 0x48, 0xa4, 0x19, 0xfe, 0x42, 0x00, 0x05, 0x70, 0x90, 0x07, 0xfe, 0x81,
5993 0x49, 0x1b, 0xfe, 0x64, 0x0e, 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x44, 0x13,
5994 0x19, 0x00, 0x2d, 0x0d, 0xfe, 0x54, 0x12, 0x2d, 0xfe, 0x28, 0x00, 0x2b,
5995 0xfe, 0xda, 0x0e, 0x0a, 0x57, 0x01, 0x18, 0x09, 0x00, 0x36, 0x46, 0xfe,
5996 0x28, 0x00, 0xfe, 0xfa, 0x10, 0x01, 0xfe, 0xf4, 0x1c, 0x01, 0xfe, 0x00,
5997 0x1d, 0x0a, 0xba, 0x01, 0xfe, 0x58, 0x10, 0x40, 0x15, 0x56, 0x01, 0x85,
5998 0x05, 0x35, 0x19, 0xfe, 0x44, 0x00, 0x2d, 0x0d, 0xf7, 0x46, 0x0d, 0xfe,
5999 0xcc, 0x10, 0x01, 0xa7, 0x46, 0x0d, 0xfe, 0xc2, 0x10, 0x01, 0xa7, 0x0f,
6000 0xfe, 0x19, 0x82, 0x04, 0xfe, 0x99, 0x83, 0xfe, 0xcc, 0x47, 0x0b, 0x0e,
6001 0xfe, 0x34, 0x46, 0xa5, 0x46, 0x0d, 0x19, 0xfe, 0x43, 0x00, 0xfe, 0xa2,
6002 0x10, 0x01, 0x0c, 0x61, 0x0d, 0x44, 0x01, 0xfe, 0xf4, 0x1c, 0x01, 0xfe,
6003 0x00, 0x1d, 0x40, 0x15, 0x56, 0x01, 0x85, 0x7d, 0x0d, 0x40, 0x51, 0x01,
6004 0xfe, 0x9e, 0x1e, 0x05, 0xfe, 0x3a, 0x03, 0x01, 0x0c, 0x06, 0x0d, 0x5d,
6005 0x46, 0x0d, 0x19, 0x00, 0xfe, 0x62, 0x10, 0x01, 0x76, 0x06, 0x12, 0xfe,
6006 0x5c, 0x12, 0x01, 0x0c, 0x06, 0x12, 0xfe, 0x52, 0x13, 0xfe, 0x1c, 0x1c,
6007 0xfe, 0x9d, 0xf0, 0xfe, 0x8e, 0x0e, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0,
6008 0xfe, 0x94, 0x0e, 0x01, 0x0c, 0x61, 0x12, 0x44, 0xfe, 0x9f, 0x10, 0x19,
6009 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0d, 0x4f, 0xfe, 0x2e, 0x10, 0x19,
6010 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x19, 0xfe, 0x47, 0x00, 0xf1, 0x19,
6011 0xfe, 0x41, 0x00, 0xa2, 0x19, 0xfe, 0x24, 0x00, 0x86, 0xc4, 0xc5, 0x75,
6012 0x03, 0x81, 0x1e, 0x2b, 0xea, 0x4f, 0xfe, 0x04, 0xe6, 0x12, 0xfe, 0x9d,
6013 0x41, 0xfe, 0x1c, 0x42, 0x40, 0x01, 0xf4, 0x05, 0x35, 0xfe, 0x12, 0x1c,
6014 0x1f, 0x0d, 0x47, 0xb5, 0xc3, 0x1f, 0xfe, 0x31, 0x00, 0x47, 0xb8, 0x01,
6015 0xfe, 0xd4, 0x11, 0x05, 0xe9, 0x51, 0xfe, 0x06, 0xec, 0xe0, 0xfe, 0x0e,
6016 0x47, 0x46, 0x28, 0xfe, 0xce, 0x45, 0x31, 0x51, 0xfe, 0x06, 0xea, 0xe0,
6017 0xfe, 0x47, 0x4b, 0x45, 0xfe, 0x75, 0x57, 0x03, 0x67, 0xfe, 0x98, 0x56,
6018 0xfe, 0x38, 0x12, 0x0a, 0x5a, 0x01, 0x18, 0xfe, 0x44, 0x48, 0x60, 0x01,
6019 0x0c, 0x06, 0x28, 0xfe, 0x18, 0x13, 0x0a, 0x57, 0x01, 0x18, 0x3e, 0xfe,
6020 0x41, 0x58, 0x0a, 0xba, 0xfe, 0xfa, 0x14, 0xfe, 0x49, 0x54, 0xb0, 0xfe,
6021 0x5e, 0x0f, 0x05, 0xfe, 0x3a, 0x03, 0x0a, 0x67, 0xfe, 0xe0, 0x14, 0xfe,
6022 0x0e, 0x47, 0x46, 0x28, 0xfe, 0xce, 0x45, 0x31, 0x51, 0xfe, 0xce, 0x47,
6023 0xfe, 0xad, 0x13, 0x05, 0x35, 0x21, 0x2c, 0x09, 0x1a, 0xfe, 0x98, 0x12,
6024 0x26, 0x20, 0x96, 0x20, 0xe7, 0xfe, 0x08, 0x1c, 0xfe, 0x7c, 0x19, 0xfe,
6025 0xfd, 0x19, 0xfe, 0x0a, 0x1c, 0x03, 0xe5, 0xfe, 0x48, 0x55, 0xa5, 0x3b,
6026 0xfe, 0x62, 0x01, 0xfe, 0xc9, 0x55, 0x31, 0xfe, 0x74, 0x10, 0x01, 0xfe,
6027 0xf0, 0x1a, 0x03, 0xfe, 0x38, 0x01, 0x3b, 0xfe, 0x3a, 0x01, 0x8e, 0xfe,
6028 0x1e, 0x10, 0xfe, 0x02, 0xec, 0xe7, 0x53, 0x00, 0x36, 0xfe, 0x04, 0xec,
6029 0x2c, 0x60, 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x62, 0x1b,
6030 0x01, 0xfe, 0xce, 0x1e, 0xb2, 0x11, 0xfe, 0x18, 0x13, 0xca, 0xfe, 0x02,
6031 0xea, 0xe7, 0x53, 0x92, 0xfe, 0xc3, 0x13, 0x1f, 0x12, 0x47, 0xb5, 0xc3,
6032 0xfe, 0x2a, 0x10, 0x03, 0xfe, 0x38, 0x01, 0x23, 0xfe, 0xf0, 0xff, 0x10,
6033 0xe5, 0x03, 0xfe, 0x3a, 0x01, 0x10, 0xfe, 0x62, 0x01, 0x01, 0xfe, 0x1e,
6034 0x1e, 0x20, 0x2c, 0x15, 0x56, 0x01, 0xfe, 0x9e, 0x1e, 0x13, 0x07, 0x02,
6035 0x26, 0x02, 0x21, 0x96, 0xc7, 0x20, 0x96, 0x09, 0x92, 0xfe, 0x79, 0x13,
6036 0x1f, 0x1d, 0x47, 0xb5, 0xc3, 0xfe, 0xe1, 0x10, 0xcf, 0xfe, 0x03, 0xdc,
6037 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x02, 0xcf, 0xfe, 0x03, 0xdc, 0xfe,
6038 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x02, 0xfe, 0x03, 0x57, 0xcf, 0x26, 0xfe,
6039 0x00, 0xcc, 0x02, 0xfe, 0x03, 0x57, 0xcf, 0x89, 0x02, 0x01, 0x0c, 0x06,
6040 0x4a, 0xfe, 0x4e, 0x13, 0x0f, 0xfe, 0x1c, 0x80, 0x04, 0xfe, 0x9c, 0x83,
6041 0x33, 0x0b, 0x0e, 0x09, 0x07, 0xfe, 0x3a, 0x13, 0x0f, 0xfe, 0x1e, 0x80,
6042 0x04, 0xfe, 0x9e, 0x83, 0x33, 0x0b, 0x0e, 0xfe, 0x2a, 0x13, 0x0f, 0xfe,
6043 0x1d, 0x80, 0x04, 0xfe, 0x9d, 0x83, 0xfe, 0xf9, 0x13, 0x0e, 0xfe, 0x1c,
6044 0x13, 0x01, 0xfe, 0xee, 0x1e, 0xac, 0xfe, 0x14, 0x13, 0x01, 0xfe, 0xfe,
6045 0x1e, 0xfe, 0x81, 0x58, 0xfa, 0x01, 0xfe, 0x0e, 0x1f, 0xfe, 0x30, 0xf4,
6046 0x0d, 0xfe, 0x3c, 0x50, 0xa2, 0x01, 0xfe, 0x92, 0x1b, 0x01, 0x43, 0x09,
6047 0x56, 0xfb, 0x01, 0xfe, 0xc8, 0x1a, 0x01, 0x0c, 0x06, 0x28, 0xa4, 0x01,
6048 0xfe, 0xf4, 0x1c, 0x01, 0xfe, 0x00, 0x1d, 0x15, 0xfe, 0xe9, 0x00, 0x01,
6049 0x0c, 0x06, 0x4a, 0xfe, 0x4e, 0x13, 0x01, 0xfe, 0x22, 0x1b, 0xfe, 0x1e,
6050 0x1c, 0x0f, 0xfe, 0x14, 0x90, 0x04, 0xfe, 0x94, 0x93, 0x3a, 0x0b, 0xfe,
6051 0x96, 0x90, 0x04, 0xfe, 0x96, 0x93, 0x79, 0x0b, 0x0e, 0x10, 0xfe, 0x64,
6052 0x01, 0x22, 0xfe, 0x66, 0x01, 0x01, 0x0c, 0x06, 0x65, 0xf9, 0x0f, 0xfe,
6053 0x03, 0x80, 0x04, 0xfe, 0x83, 0x83, 0x33, 0x0b, 0x0e, 0x77, 0xfe, 0x01,
6054 0xec, 0x2c, 0xfe, 0x80, 0x40, 0x20, 0x2c, 0x7a, 0x30, 0x15, 0xdf, 0x40,
6055 0x21, 0x2c, 0xfe, 0x00, 0x40, 0x8d, 0x2c, 0x02, 0xfe, 0x08, 0x1c, 0x03,
6056 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58, 0x03, 0xfe, 0xae, 0x00, 0xfe, 0x07,
6057 0x58, 0x03, 0xfe, 0xb0, 0x00, 0xfe, 0x08, 0x58, 0x03, 0xfe, 0xb2, 0x00,
6058 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x2e, 0x49, 0x20, 0xe0, 0x26, 0x10,
6059 0x66, 0x10, 0x55, 0x10, 0x6f, 0x13, 0x57, 0x52, 0x4f, 0x1c, 0x28, 0xfe,
6060 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x2b, 0xfe, 0x88, 0x11, 0x46, 0x1a, 0x13,
6061 0x5a, 0x52, 0x1c, 0x4a, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54, 0x2b, 0xfe,
6062 0x9e, 0x11, 0x2e, 0x1a, 0x20, 0x2c, 0x90, 0x34, 0x60, 0x21, 0x2c, 0xfe,
6063 0x00, 0x40, 0x8d, 0x2c, 0x15, 0xdf, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0,
6064 0xfe, 0xb2, 0x11, 0xfe, 0x12, 0x1c, 0x75, 0xfe, 0x14, 0x1c, 0xfe, 0x10,
6065 0x1c, 0xfe, 0x18, 0x1c, 0x02, 0x51, 0xfe, 0x0c, 0x14, 0xfe, 0x0e, 0x47,
6066 0xfe, 0x07, 0xe6, 0x28, 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x02, 0x01,
6067 0xa7, 0x90, 0x34, 0x60, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x42,
6068 0x13, 0xfe, 0x02, 0x80, 0x09, 0x56, 0xfe, 0x34, 0x13, 0x0a, 0x5a, 0x01,
6069 0x18, 0xcb, 0xfe, 0x36, 0x12, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01,
6070 0xfe, 0xb2, 0x16, 0xfe, 0x00, 0xcc, 0xcb, 0xfe, 0xf3, 0x13, 0x3f, 0x89,
6071 0x09, 0x1a, 0xa5, 0x0a, 0x9d, 0x01, 0x18, 0xfe, 0x80, 0x5c, 0x01, 0x85,
6072 0xf2, 0x09, 0x9b, 0xa4, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0xec,
6073 0x11, 0x02, 0xfe, 0x44, 0x58, 0x77, 0xfe, 0x01, 0xec, 0xb8, 0xfe, 0x9e,
6074 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x12, 0x8d, 0x30, 0x01,
6075 0xf4, 0xfe, 0xdd, 0x10, 0x37, 0xd7, 0x99, 0xd8, 0x9c, 0x27, 0x25, 0xee,
6076 0x09, 0x12, 0xfe, 0x48, 0x12, 0x09, 0x0d, 0xfe, 0x56, 0x12, 0x09, 0x1d,
6077 0xfe, 0x30, 0x12, 0x09, 0xdd, 0x1b, 0xfe, 0xc4, 0x13, 0x09, 0xfe, 0x23,
6078 0x00, 0x1b, 0xfe, 0xd0, 0x13, 0x09, 0x07, 0x1b, 0xfe, 0x34, 0x14, 0x09,
6079 0x24, 0xfe, 0x12, 0x12, 0x09, 0x00, 0x1b, 0x29, 0x1f, 0xdd, 0x01, 0x42,
6080 0xa1, 0x32, 0x01, 0x08, 0xae, 0x41, 0x02, 0x32, 0xfe, 0x62, 0x08, 0x0a,
6081 0xe1, 0x01, 0xfe, 0x58, 0x10, 0x15, 0x9b, 0x05, 0x35, 0x32, 0x01, 0x43,
6082 0x09, 0xbb, 0xfe, 0xd7, 0x13, 0x91, 0x4b, 0x7e, 0x4c, 0x8e, 0xfe, 0x80,
6083 0x13, 0x01, 0x0c, 0x06, 0x54, 0xfe, 0x72, 0x12, 0xdb, 0x64, 0xdc, 0x34,
6084 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0xb0, 0xfe, 0x4a, 0x13, 0x21, 0x6e,
6085 0xfe, 0x26, 0x13, 0x03, 0x97, 0x3b, 0x98, 0x8e, 0xfe, 0xb6, 0x0e, 0x10,
6086 0x6a, 0x22, 0x6b, 0x26, 0x10, 0x97, 0x10, 0x98, 0x01, 0xc2, 0x2e, 0x49,
6087 0x88, 0x20, 0x6e, 0x01, 0xfe, 0x6a, 0x16, 0xdb, 0x64, 0xdc, 0x34, 0xfe,
6088 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x64, 0xfe, 0x05, 0xfa,
6089 0x34, 0xfe, 0x8f, 0x10, 0x03, 0x6c, 0x3b, 0x6d, 0xfe, 0x40, 0x56, 0xfe,
6090 0xe1, 0x56, 0x10, 0x6c, 0x22, 0x6d, 0x71, 0xdb, 0x64, 0xdc, 0x34, 0xfe,
6091 0x44, 0x55, 0xfe, 0xe5, 0x55, 0x03, 0x68, 0x3b, 0x69, 0xfe, 0x00, 0x56,
6092 0xfe, 0xa1, 0x56, 0x10, 0x68, 0x22, 0x69, 0x01, 0x0c, 0x06, 0x54, 0xf9,
6093 0x21, 0x6e, 0xfe, 0x1f, 0x40, 0x03, 0x6a, 0x3b, 0x6b, 0xfe, 0x2c, 0x50,
6094 0xfe, 0xae, 0x50, 0x03, 0x6c, 0x3b, 0x6d, 0xfe, 0x44, 0x50, 0xfe, 0xc6,
6095 0x50, 0x03, 0x68, 0x3b, 0x69, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x03,
6096 0x4b, 0x3b, 0x4c, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x05, 0x73, 0x2e,
6097 0x07, 0x20, 0x9e, 0x05, 0x72, 0x32, 0x01, 0x08, 0x16, 0x3d, 0x27, 0x25,
6098 0xee, 0x09, 0x07, 0x2b, 0x3d, 0x01, 0x43, 0x09, 0xbb, 0x2b, 0x72, 0x01,
6099 0xa6, 0x23, 0x3f, 0x1b, 0x3d, 0x01, 0x0c, 0x06, 0x0d, 0xfe, 0x1e, 0x13,
6100 0x91, 0x4b, 0x7e, 0x4c, 0xfe, 0x0a, 0x55, 0x31, 0xfe, 0x8b, 0x55, 0xd9,
6101 0x4b, 0xda, 0x4c, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x05, 0x72, 0x01,
6102 0xfe, 0x8e, 0x1e, 0xca, 0xfe, 0x19, 0x41, 0x05, 0x72, 0x32, 0x01, 0x08,
6103 0x2a, 0x3c, 0x16, 0xc0, 0x27, 0x25, 0xbe, 0x2d, 0x1d, 0xc0, 0x2d, 0x0d,
6104 0x83, 0x2d, 0x7f, 0x1b, 0xfe, 0x66, 0x15, 0x05, 0x3d, 0x01, 0x08, 0x2a,
6105 0x3c, 0x16, 0xc0, 0x27, 0x25, 0xbd, 0x09, 0x1d, 0x2b, 0x3d, 0x01, 0x08,
6106 0x16, 0xc0, 0x27, 0x25, 0xfe, 0xe8, 0x09, 0xfe, 0xc2, 0x49, 0x50, 0x03,
6107 0xb6, 0x1e, 0x83, 0x01, 0x38, 0x06, 0x24, 0x31, 0xa1, 0xfe, 0xbb, 0x45,
6108 0x2d, 0x00, 0xa4, 0x46, 0x07, 0x90, 0x3f, 0x01, 0xfe, 0xf8, 0x15, 0x01,
6109 0xa6, 0x86, 0xfe, 0x4b, 0x45, 0xfe, 0x20, 0x13, 0x01, 0x43, 0x09, 0x82,
6110 0xfe, 0x16, 0x13, 0x03, 0x9a, 0x1e, 0x5d, 0x03, 0x55, 0x1e, 0x31, 0x5e,
6111 0x05, 0x72, 0xfe, 0xc0, 0x5d, 0x01, 0xa7, 0xfe, 0x03, 0x17, 0x03, 0x66,
6112 0x8a, 0x10, 0x66, 0x5e, 0x32, 0x01, 0x08, 0x17, 0x73, 0x01, 0xfe, 0x56,
6113 0x19, 0x05, 0x73, 0x01, 0x08, 0x2a, 0x3c, 0x16, 0x3d, 0x27, 0x25, 0xbd,
6114 0x09, 0x07, 0x2b, 0x3d, 0x01, 0xfe, 0xbe, 0x16, 0xfe, 0x42, 0x58, 0xfe,
6115 0xe8, 0x14, 0x01, 0xa6, 0x86, 0xfe, 0x4a, 0xf4, 0x0d, 0x1b, 0x3d, 0xfe,
6116 0x4a, 0xf4, 0x07, 0xfe, 0x0e, 0x12, 0x01, 0x43, 0x09, 0x82, 0x4e, 0x05,
6117 0x72, 0x03, 0x55, 0x8a, 0x10, 0x55, 0x5e, 0x32, 0x01, 0x08, 0x17, 0x73,
6118 0x01, 0xfe, 0x84, 0x19, 0x05, 0x73, 0x01, 0x08, 0x2a, 0x3c, 0x16, 0x3d,
6119 0x27, 0x25, 0xbd, 0x09, 0x12, 0x2b, 0x3d, 0x01, 0xfe, 0xe8, 0x17, 0x8b,
6120 0xfe, 0xaa, 0x14, 0xfe, 0xb6, 0x14, 0x86, 0xa8, 0xb2, 0x0d, 0x1b, 0x3d,
6121 0xb2, 0x07, 0xfe, 0x0e, 0x12, 0x01, 0x43, 0x09, 0x82, 0x4e, 0x05, 0x72,
6122 0x03, 0x6f, 0x8a, 0x10, 0x6f, 0x5e, 0x32, 0x01, 0x08, 0x17, 0x73, 0x01,
6123 0xfe, 0xc0, 0x19, 0x05, 0x73, 0x13, 0x07, 0x2f, 0xfe, 0xcc, 0x15, 0x17,
6124 0xfe, 0xe2, 0x15, 0x5f, 0xcc, 0x01, 0x08, 0x26, 0x5f, 0x02, 0x8f, 0xfe,
6125 0xde, 0x15, 0x2a, 0xfe, 0xde, 0x15, 0x16, 0xfe, 0xcc, 0x15, 0x5e, 0x32,
6126 0x01, 0x08, 0xfe, 0xd5, 0x10, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52,
6127 0xad, 0x23, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x02,
6128 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, 0xad, 0x23, 0x3f, 0xfe, 0x30,
6129 0x56, 0xfe, 0x00, 0x5c, 0x02, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52,
6130 0xad, 0x02, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, 0xfe, 0x00, 0x5e,
6131 0x02, 0x13, 0x58, 0xff, 0x02, 0x00, 0x57, 0x52, 0xad, 0xfe, 0x0b, 0x58,
6132 0x02, 0x0a, 0x66, 0x01, 0x5c, 0x0a, 0x55, 0x01, 0x5c, 0x0a, 0x6f, 0x01,
6133 0x5c, 0x02, 0x01, 0xfe, 0x1e, 0x1f, 0x23, 0x1a, 0xff, 0x03, 0x00, 0x54,
6134 0xfe, 0x00, 0xf4, 0x24, 0x52, 0x0f, 0xfe, 0x00, 0x7c, 0x04, 0xfe, 0x07,
6135 0x7c, 0x3a, 0x0b, 0x0e, 0xfe, 0x00, 0x71, 0xfe, 0xf9, 0x18, 0xfe, 0x7a,
6136 0x19, 0xfe, 0xfb, 0x19, 0xfe, 0x1a, 0xf7, 0x00, 0xfe, 0x1b, 0xf7, 0x00,
6137 0x7a, 0x30, 0x10, 0x68, 0x22, 0x69, 0xd9, 0x6c, 0xda, 0x6d, 0x02, 0xfe,
6138 0x62, 0x08, 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x77,
6139 0x02, 0x01, 0xc6, 0xfe, 0x42, 0x48, 0x4f, 0x50, 0x45, 0x01, 0x08, 0x16,
6140 0xfe, 0xe0, 0x17, 0x27, 0x25, 0xbe, 0x01, 0x08, 0x16, 0xfe, 0xe0, 0x17,
6141 0x27, 0x25, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x03, 0x9a, 0x1e, 0xfe,
6142 0xda, 0x12, 0x01, 0x38, 0x06, 0x12, 0xfe, 0xd0, 0x13, 0x26, 0x53, 0x12,
6143 0x48, 0xfe, 0x08, 0x17, 0xd1, 0x12, 0x53, 0x12, 0xfe, 0x1e, 0x13, 0x2d,
6144 0xb4, 0x7b, 0xfe, 0x26, 0x17, 0x4d, 0x13, 0x07, 0x1c, 0xb4, 0x90, 0x04,
6145 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xf1, 0xff, 0x02, 0x83, 0x55,
6146 0x53, 0x1d, 0xfe, 0x12, 0x13, 0xd6, 0xfe, 0x30, 0x00, 0xb0, 0xfe, 0x80,
6147 0x17, 0x1c, 0x63, 0x13, 0x07, 0xfe, 0x56, 0x10, 0x53, 0x0d, 0xfe, 0x16,
6148 0x13, 0xd6, 0xfe, 0x64, 0x00, 0xb0, 0xfe, 0x80, 0x17, 0x0a, 0xfe, 0x64,
6149 0x00, 0x1c, 0x94, 0x13, 0x07, 0xfe, 0x28, 0x10, 0x53, 0x07, 0xfe, 0x60,
6150 0x13, 0xd6, 0xfe, 0xc8, 0x00, 0xb0, 0xfe, 0x80, 0x17, 0x0a, 0xfe, 0xc8,
6151 0x00, 0x1c, 0x95, 0x13, 0x07, 0x71, 0xd6, 0xfe, 0x90, 0x01, 0x48, 0xfe,
6152 0x8c, 0x17, 0x45, 0xf3, 0xfe, 0x43, 0xf4, 0x96, 0xfe, 0x56, 0xf0, 0xfe,
6153 0x9e, 0x17, 0xfe, 0x04, 0xf4, 0x58, 0xfe, 0x43, 0xf4, 0x94, 0xf6, 0x8b,
6154 0x01, 0xfe, 0x24, 0x16, 0x23, 0x3f, 0xfc, 0xa8, 0x8c, 0x49, 0x48, 0xfe,
6155 0xda, 0x17, 0x62, 0x49, 0xfe, 0x1c, 0x10, 0xa8, 0x8c, 0x80, 0x48, 0xfe,
6156 0xda, 0x17, 0x62, 0x80, 0x71, 0x50, 0x26, 0xfe, 0x4d, 0xf4, 0x00, 0xf7,
6157 0x45, 0x13, 0x07, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, 0x02, 0x50, 0x13,
6158 0x0d, 0x02, 0x50, 0x3e, 0x78, 0x4f, 0x45, 0x01, 0x08, 0x16, 0xa9, 0x27,
6159 0x25, 0xbe, 0xfe, 0x03, 0xea, 0xfe, 0x7e, 0x01, 0x01, 0x08, 0x16, 0xa9,
6160 0x27, 0x25, 0xfe, 0xe9, 0x0a, 0x01, 0x08, 0x16, 0xa9, 0x27, 0x25, 0xfe,
6161 0xe9, 0x0a, 0xfe, 0x05, 0xea, 0xfe, 0x7f, 0x01, 0x01, 0x08, 0x16, 0xa9,
6162 0x27, 0x25, 0xfe, 0x69, 0x09, 0xfe, 0x02, 0xea, 0xfe, 0x80, 0x01, 0x01,
6163 0x08, 0x16, 0xa9, 0x27, 0x25, 0xfe, 0xe8, 0x08, 0x47, 0xfe, 0x81, 0x01,
6164 0x03, 0xb6, 0x1e, 0x83, 0x01, 0x38, 0x06, 0x24, 0x31, 0xa2, 0x78, 0xf2,
6165 0x53, 0x07, 0x36, 0xfe, 0x34, 0xf4, 0x3f, 0xa1, 0x78, 0x03, 0x9a, 0x1e,
6166 0x83, 0x01, 0x38, 0x06, 0x12, 0x31, 0xf0, 0x4f, 0x45, 0xfe, 0x90, 0x10,
6167 0xfe, 0x40, 0x5a, 0x23, 0x3f, 0xfb, 0x8c, 0x49, 0x48, 0xfe, 0xaa, 0x18,
6168 0x62, 0x49, 0x71, 0x8c, 0x80, 0x48, 0xfe, 0xaa, 0x18, 0x62, 0x80, 0xfe,
6169 0xb4, 0x56, 0xfe, 0x40, 0x5d, 0x01, 0xc6, 0x01, 0xfe, 0xac, 0x1d, 0xfe,
6170 0x02, 0x17, 0xfe, 0xc8, 0x45, 0xfe, 0x5a, 0xf0, 0xfe, 0xc0, 0x18, 0xfe,
6171 0x43, 0x48, 0x2d, 0x93, 0x36, 0xfe, 0x34, 0xf4, 0xfe, 0x00, 0x11, 0xfe,
6172 0x40, 0x10, 0x2d, 0xb4, 0x36, 0xfe, 0x34, 0xf4, 0x04, 0xfe, 0x34, 0x10,
6173 0x2d, 0xfe, 0x0b, 0x00, 0x36, 0x46, 0x63, 0xfe, 0x28, 0x10, 0xfe, 0xc0,
6174 0x49, 0xff, 0x02, 0x00, 0x54, 0xb2, 0xfe, 0x90, 0x01, 0x48, 0xfe, 0xfa,
6175 0x18, 0x45, 0xfe, 0x1c, 0xf4, 0x3f, 0xf3, 0xfe, 0x40, 0xf4, 0x96, 0xfe,
6176 0x56, 0xf0, 0xfe, 0x0c, 0x19, 0xfe, 0x04, 0xf4, 0x58, 0xfe, 0x40, 0xf4,
6177 0x94, 0xf6, 0x3e, 0x2d, 0x93, 0x4e, 0xd0, 0x0d, 0x21, 0xfe, 0x7f, 0x01,
6178 0xfe, 0xc8, 0x46, 0xfe, 0x24, 0x13, 0x8c, 0x00, 0x5d, 0x26, 0x21, 0xfe,
6179 0x7e, 0x01, 0xfe, 0xc8, 0x45, 0xfe, 0x14, 0x13, 0x21, 0xfe, 0x80, 0x01,
6180 0xfe, 0x48, 0x45, 0xfa, 0x21, 0xfe, 0x81, 0x01, 0xfe, 0xc8, 0x44, 0x4e,
6181 0x26, 0x02, 0x13, 0x07, 0x02, 0x78, 0x45, 0x50, 0x13, 0x0d, 0x02, 0x14,
6182 0x07, 0x01, 0x08, 0x17, 0xfe, 0x82, 0x19, 0x14, 0x0d, 0x01, 0x08, 0x17,
6183 0xfe, 0x82, 0x19, 0x14, 0x1d, 0x01, 0x08, 0x17, 0xfe, 0x82, 0x19, 0x5f,
6184 0xfe, 0x89, 0x49, 0x01, 0x08, 0x02, 0x14, 0x07, 0x01, 0x08, 0x17, 0xc1,
6185 0x14, 0x1d, 0x01, 0x08, 0x17, 0xc1, 0x14, 0x07, 0x01, 0x08, 0x17, 0xc1,
6186 0xfe, 0x89, 0x49, 0x01, 0x08, 0x17, 0xc1, 0x5f, 0xfe, 0x89, 0x4a, 0x01,
6187 0x08, 0x02, 0x50, 0x02, 0x14, 0x07, 0x01, 0x08, 0x17, 0x74, 0x14, 0x7f,
6188 0x01, 0x08, 0x17, 0x74, 0x14, 0x12, 0x01, 0x08, 0x17, 0x74, 0xfe, 0x89,
6189 0x49, 0x01, 0x08, 0x17, 0x74, 0x14, 0x00, 0x01, 0x08, 0x17, 0x74, 0xfe,
6190 0x89, 0x4a, 0x01, 0x08, 0x17, 0x74, 0xfe, 0x09, 0x49, 0x01, 0x08, 0x17,
6191 0x74, 0x5f, 0xcc, 0x01, 0x08, 0x02, 0x21, 0xe4, 0x09, 0x07, 0xfe, 0x4c,
6192 0x13, 0xc8, 0x20, 0xe4, 0xfe, 0x49, 0xf4, 0x00, 0x4d, 0x5f, 0xa1, 0x5e,
6193 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xcc, 0xff, 0x02, 0x00, 0x10, 0x2f,
6194 0xfe, 0x3e, 0x1a, 0x01, 0x43, 0x09, 0xfe, 0xe3, 0x00, 0xfe, 0x22, 0x13,
6195 0x16, 0xfe, 0x64, 0x1a, 0x26, 0x20, 0x9e, 0x01, 0x41, 0x21, 0x9e, 0x09,
6196 0x07, 0x5d, 0x01, 0x0c, 0x61, 0x07, 0x44, 0x02, 0x0a, 0x5a, 0x01, 0x18,
6197 0xfe, 0x00, 0x40, 0xaa, 0x09, 0x1a, 0xfe, 0x12, 0x13, 0x0a, 0x9d, 0x01,
6198 0x18, 0xaa, 0x0a, 0x67, 0x01, 0xa3, 0x02, 0x0a, 0x9d, 0x01, 0x18, 0xaa,
6199 0xfe, 0x80, 0xe7, 0x1a, 0x09, 0x1a, 0x5d, 0xfe, 0x45, 0x58, 0x01, 0xfe,
6200 0xb2, 0x16, 0xaa, 0x02, 0x0a, 0x5a, 0x01, 0x18, 0xaa, 0x0a, 0x67, 0x01,
6201 0xa3, 0x02, 0x0a, 0x5a, 0x01, 0x18, 0x01, 0xfe, 0x7e, 0x1e, 0xfe, 0x80,
6202 0x4c, 0xfe, 0x49, 0xe4, 0x1a, 0xfe, 0x12, 0x13, 0x0a, 0x9d, 0x01, 0x18,
6203 0xfe, 0x80, 0x4c, 0x0a, 0x67, 0x01, 0x5c, 0x02, 0x1c, 0x1a, 0x87, 0x7c,
6204 0xe5, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x24, 0x1c, 0xfe, 0x1d,
6205 0xf7, 0x28, 0xb1, 0xfe, 0x04, 0x1b, 0x01, 0xfe, 0x2a, 0x1c, 0xfa, 0xb3,
6206 0x28, 0x7c, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x02, 0xc9, 0x2b, 0xfe,
6207 0xf4, 0x1a, 0xfe, 0xfa, 0x10, 0x1c, 0x1a, 0x87, 0x03, 0xfe, 0x64, 0x01,
6208 0xfe, 0x00, 0xf4, 0x24, 0xfe, 0x18, 0x58, 0x03, 0xfe, 0x66, 0x01, 0xfe,
6209 0x19, 0x58, 0xb3, 0x24, 0x01, 0xfe, 0x0e, 0x1f, 0xfe, 0x30, 0xf4, 0x07,
6210 0xfe, 0x3c, 0x50, 0x7c, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, 0xfe, 0x1c,
6211 0xf7, 0x24, 0xb1, 0xfe, 0x50, 0x1b, 0xfe, 0xd4, 0x14, 0x31, 0x02, 0xc9,
6212 0x2b, 0xfe, 0x26, 0x1b, 0xfe, 0xba, 0x10, 0x1c, 0x1a, 0x87, 0xfe, 0x83,
6213 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d, 0xf7, 0x54, 0xb1,
6214 0xfe, 0x72, 0x1b, 0xfe, 0xb2, 0x14, 0xfc, 0xb3, 0x54, 0x7c, 0x12, 0xfe,
6215 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0x02, 0xc9, 0x2b, 0xfe, 0x66, 0x1b,
6216 0xfe, 0x8a, 0x10, 0x1c, 0x1a, 0x87, 0x8b, 0x0f, 0xfe, 0x30, 0x90, 0x04,
6217 0xfe, 0xb0, 0x93, 0x3a, 0x0b, 0xfe, 0x18, 0x58, 0xfe, 0x32, 0x90, 0x04,
6218 0xfe, 0xb2, 0x93, 0x3a, 0x0b, 0xfe, 0x19, 0x58, 0x0e, 0xa8, 0xb3, 0x4a,
6219 0x7c, 0x12, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x4a, 0xb1, 0xfe, 0xc6,
6220 0x1b, 0xfe, 0x5e, 0x14, 0x31, 0x02, 0xc9, 0x2b, 0xfe, 0x96, 0x1b, 0x5c,
6221 0xfe, 0x02, 0xf6, 0x1a, 0x87, 0xfe, 0x18, 0xfe, 0x6a, 0xfe, 0x19, 0xfe,
6222 0x6b, 0x01, 0xfe, 0x1e, 0x1f, 0xfe, 0x1d, 0xf7, 0x65, 0xb1, 0xfe, 0xee,
6223 0x1b, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13, 0xb3, 0x65, 0x3e, 0xfe, 0x83,
6224 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, 0x1a, 0xfe, 0x81, 0xe7, 0x1a,
6225 0x15, 0xfe, 0xdd, 0x00, 0x7a, 0x30, 0x02, 0x7a, 0x30, 0xfe, 0x12, 0x45,
6226 0x2b, 0xfe, 0xdc, 0x1b, 0x1f, 0x07, 0x47, 0xb5, 0xc3, 0x05, 0x35, 0xfe,
6227 0x39, 0xf0, 0x75, 0x26, 0x02, 0xfe, 0x7e, 0x18, 0x23, 0x1d, 0x36, 0x13,
6228 0x11, 0x02, 0x87, 0x03, 0xe3, 0x23, 0x07, 0xfe, 0xef, 0x12, 0xfe, 0xe1,
6229 0x10, 0x90, 0x34, 0x60, 0xfe, 0x02, 0x80, 0x09, 0x56, 0xfe, 0x3c, 0x13,
6230 0xfe, 0x82, 0x14, 0xfe, 0x42, 0x13, 0x51, 0xfe, 0x06, 0x83, 0x0a, 0x5a,
6231 0x01, 0x18, 0xcb, 0xfe, 0x3e, 0x12, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48,
6232 0x01, 0xfe, 0xb2, 0x16, 0xfe, 0x00, 0xcc, 0xcb, 0xfe, 0xf3, 0x13, 0x3f,
6233 0x89, 0x09, 0x1a, 0xa5, 0x0a, 0x9d, 0x01, 0x18, 0xfe, 0x80, 0x4c, 0x01,
6234 0x85, 0xfe, 0x16, 0x10, 0x09, 0x9b, 0x4e, 0xfe, 0x40, 0x14, 0xfe, 0x24,
6235 0x12, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x52, 0x1c, 0x1c, 0x0d,
6236 0x02, 0xfe, 0x9c, 0xe7, 0x0d, 0x19, 0xfe, 0x15, 0x00, 0x40, 0x8d, 0x30,
6237 0x01, 0xf4, 0x1c, 0x07, 0x02, 0x51, 0xfe, 0x06, 0x83, 0xfe, 0x18, 0x80,
6238 0x61, 0x28, 0x44, 0x15, 0x56, 0x01, 0x85, 0x1c, 0x07, 0x02, 0xfe, 0x38,
6239 0x90, 0xfe, 0xba, 0x90, 0x91, 0xde, 0x7e, 0xdf, 0xfe, 0x48, 0x55, 0x31,
6240 0xfe, 0xc9, 0x55, 0x02, 0x21, 0xb9, 0x88, 0x20, 0xb9, 0x02, 0x0a, 0xba,
6241 0x01, 0x18, 0xfe, 0x41, 0x48, 0x0a, 0x57, 0x01, 0x18, 0xfe, 0x49, 0x44,
6242 0x1b, 0xfe, 0x1e, 0x1d, 0x88, 0x89, 0x02, 0x0a, 0x5a, 0x01, 0x18, 0x09,
6243 0x1a, 0xa4, 0x0a, 0x67, 0x01, 0xa3, 0x0a, 0x57, 0x01, 0x18, 0x88, 0x89,
6244 0x02, 0xfe, 0x4e, 0xe4, 0x1d, 0x7b, 0xfe, 0x52, 0x1d, 0x03, 0xfe, 0x90,
6245 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10, 0xfe, 0x4e, 0xe4, 0xdd, 0x7b,
6246 0xfe, 0x64, 0x1d, 0x03, 0xfe, 0x92, 0x00, 0xd1, 0x12, 0xfe, 0x1a, 0x10,
6247 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x7b, 0xfe, 0x76, 0x1d, 0x03, 0xfe,
6248 0x94, 0x00, 0xd1, 0x24, 0xfe, 0x08, 0x10, 0x03, 0xfe, 0x96, 0x00, 0xd1,
6249 0x63, 0xfe, 0x4e, 0x45, 0x83, 0xca, 0xff, 0x04, 0x68, 0x54, 0xfe, 0xf1,
6250 0x10, 0x23, 0x49, 0xfe, 0x08, 0x1c, 0xfe, 0x67, 0x19, 0xfe, 0x0a, 0x1c,
6251 0xfe, 0x1a, 0xf4, 0xfe, 0x00, 0x04, 0x83, 0xb2, 0x1d, 0x48, 0xfe, 0xaa,
6252 0x1d, 0x13, 0x1d, 0x02, 0x09, 0x92, 0xfe, 0x5a, 0xf0, 0xfe, 0xba, 0x1d,
6253 0x2e, 0x93, 0xfe, 0x34, 0x10, 0x09, 0x12, 0xfe, 0x5a, 0xf0, 0xfe, 0xc8,
6254 0x1d, 0x2e, 0xb4, 0xfe, 0x26, 0x10, 0x09, 0x1d, 0x36, 0x2e, 0x63, 0xfe,
6255 0x1a, 0x10, 0x09, 0x0d, 0x36, 0x2e, 0x94, 0xf2, 0x09, 0x07, 0x36, 0x2e,
6256 0x95, 0xa1, 0xc8, 0x02, 0x1f, 0x93, 0x01, 0x42, 0xfe, 0x04, 0xfe, 0x99,
6257 0x03, 0x9c, 0x8b, 0x02, 0x2a, 0xfe, 0x1c, 0x1e, 0xfe, 0x14, 0xf0, 0x08,
6258 0x2f, 0xfe, 0x0c, 0x1e, 0x2a, 0xfe, 0x1c, 0x1e, 0x8f, 0xfe, 0x1c, 0x1e,
6259 0xfe, 0x82, 0xf0, 0xfe, 0x10, 0x1e, 0x02, 0x0f, 0x3f, 0x04, 0xfe, 0x80,
6260 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x18, 0x80, 0x04, 0xfe, 0x98,
6261 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x02, 0x80, 0x04, 0xfe, 0x82,
6262 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x06, 0x80, 0x04, 0xfe, 0x86,
6263 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x1b, 0x80, 0x04, 0xfe, 0x9b,
6264 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x04, 0x80, 0x04, 0xfe, 0x84,
6265 0x83, 0x33, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x80, 0x80, 0x04, 0xfe, 0x80,
6266 0x83, 0xfe, 0xc9, 0x47, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x19, 0x81, 0x04,
6267 0xfe, 0x99, 0x83, 0xfe, 0xca, 0x47, 0x0b, 0x0e, 0x02, 0x0f, 0xfe, 0x06,
6268 0x83, 0x04, 0xfe, 0x86, 0x83, 0xfe, 0xce, 0x47, 0x0b, 0x0e, 0x02, 0x0f,
6269 0xfe, 0x2c, 0x90, 0x04, 0xfe, 0xac, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x0f,
6270 0xfe, 0xae, 0x90, 0x04, 0xfe, 0xae, 0x93, 0x79, 0x0b, 0x0e, 0x02, 0x0f,
6271 0xfe, 0x08, 0x90, 0x04, 0xfe, 0x88, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x0f,
6272 0xfe, 0x8a, 0x90, 0x04, 0xfe, 0x8a, 0x93, 0x79, 0x0b, 0x0e, 0x02, 0x0f,
6273 0xfe, 0x0c, 0x90, 0x04, 0xfe, 0x8c, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x0f,
6274 0xfe, 0x8e, 0x90, 0x04, 0xfe, 0x8e, 0x93, 0x79, 0x0b, 0x0e, 0x02, 0x0f,
6275 0xfe, 0x3c, 0x90, 0x04, 0xfe, 0xbc, 0x93, 0x3a, 0x0b, 0x0e, 0x02, 0x8b,
6276 0x0f, 0xfe, 0x03, 0x80, 0x04, 0xfe, 0x83, 0x83, 0x33, 0x0b, 0x77, 0x0e,
6277 0xa8, 0x02, 0xff, 0x66, 0x00, 0x00,
6278};
6279
6280static unsigned short _adv_asc38C1600_size = sizeof(_adv_asc38C1600_buf); /* 0x1673 */
6281static ADV_DCNT _adv_asc38C1600_chksum = 0x0604EF77UL; /* Expanded little-endian checksum. */
6282
6283static void AscInitQLinkVar(ASC_DVC_VAR *asc_dvc) 4672static void AscInitQLinkVar(ASC_DVC_VAR *asc_dvc)
6284{ 4673{
6285 PortAddr iop_base; 4674 PortAddr iop_base;
@@ -6362,6 +4751,10 @@ static ushort AscInitMicroCodeVar(ASC_DVC_VAR *asc_dvc)
6362 4751
6363static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc) 4752static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc)
6364{ 4753{
4754 const struct firmware *fw;
4755 const char fwname[] = "advansys/mcode.bin";
4756 int err;
4757 unsigned long chksum;
6365 ushort warn_code; 4758 ushort warn_code;
6366 PortAddr iop_base; 4759 PortAddr iop_base;
6367 4760
@@ -6383,12 +4776,29 @@ static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc)
6383 warn_code |= AscInitLram(asc_dvc); 4776 warn_code |= AscInitLram(asc_dvc);
6384 if (asc_dvc->err_code != 0) 4777 if (asc_dvc->err_code != 0)
6385 return UW_ERR; 4778 return UW_ERR;
6386 ASC_DBG(1, "_asc_mcode_chksum 0x%lx\n", (ulong)_asc_mcode_chksum); 4779
6387 if (AscLoadMicroCode(iop_base, 0, _asc_mcode_buf, 4780 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
6388 _asc_mcode_size) != _asc_mcode_chksum) { 4781 if (err) {
4782 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
4783 fwname, err);
4784 return err;
4785 }
4786 if (fw->size < 4) {
4787 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
4788 fw->size, fwname);
4789 release_firmware(fw);
4790 return -EINVAL;
4791 }
4792 chksum = (fw->data[3] << 24) | (fw->data[2] << 16) |
4793 (fw->data[1] << 8) | fw->data[0];
4794 ASC_DBG(1, "_asc_mcode_chksum 0x%lx\n", (ulong)chksum);
4795 if (AscLoadMicroCode(iop_base, 0, &fw->data[4],
4796 fw->size - 4) != chksum) {
6389 asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM; 4797 asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM;
4798 release_firmware(fw);
6390 return warn_code; 4799 return warn_code;
6391 } 4800 }
4801 release_firmware(fw);
6392 warn_code |= AscInitMicroCodeVar(asc_dvc); 4802 warn_code |= AscInitMicroCodeVar(asc_dvc);
6393 asc_dvc->init_state |= ASC_INIT_STATE_END_LOAD_MC; 4803 asc_dvc->init_state |= ASC_INIT_STATE_END_LOAD_MC;
6394 AscEnableInterrupt(iop_base); 4804 AscEnableInterrupt(iop_base);
@@ -6417,8 +4827,8 @@ static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc)
6417 * 4827 *
6418 * Returns 0 or an error if the checksum doesn't match 4828 * Returns 0 or an error if the checksum doesn't match
6419 */ 4829 */
6420static int AdvLoadMicrocode(AdvPortAddr iop_base, unsigned char *buf, int size, 4830static int AdvLoadMicrocode(AdvPortAddr iop_base, const unsigned char *buf,
6421 int memsize, int chksum) 4831 int size, int memsize, int chksum)
6422{ 4832{
6423 int i, j, end, len = 0; 4833 int i, j, end, len = 0;
6424 ADV_DCNT sum; 4834 ADV_DCNT sum;
@@ -6627,6 +5037,8 @@ static int AdvResetSB(ADV_DVC_VAR *asc_dvc)
6627 */ 5037 */
6628static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc) 5038static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc)
6629{ 5039{
5040 const struct firmware *fw;
5041 const char fwname[] = "advansys/3550.bin";
6630 AdvPortAddr iop_base; 5042 AdvPortAddr iop_base;
6631 ushort warn_code; 5043 ushort warn_code;
6632 int begin_addr; 5044 int begin_addr;
@@ -6634,6 +5046,8 @@ static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc)
6634 ushort code_sum; 5046 ushort code_sum;
6635 int word; 5047 int word;
6636 int i; 5048 int i;
5049 int err;
5050 unsigned long chksum;
6637 ushort scsi_cfg1; 5051 ushort scsi_cfg1;
6638 uchar tid; 5052 uchar tid;
6639 ushort bios_mem[ASC_MC_BIOSLEN / 2]; /* BIOS RISC Memory 0x40-0x8F. */ 5053 ushort bios_mem[ASC_MC_BIOSLEN / 2]; /* BIOS RISC Memory 0x40-0x8F. */
@@ -6692,9 +5106,24 @@ static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc)
6692 max_cmd[tid]); 5106 max_cmd[tid]);
6693 } 5107 }
6694 5108
6695 asc_dvc->err_code = AdvLoadMicrocode(iop_base, _adv_asc3550_buf, 5109 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
6696 _adv_asc3550_size, ADV_3550_MEMSIZE, 5110 if (err) {
6697 _adv_asc3550_chksum); 5111 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
5112 fwname, err);
5113 return err;
5114 }
5115 if (fw->size < 4) {
5116 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
5117 fw->size, fwname);
5118 release_firmware(fw);
5119 return -EINVAL;
5120 }
5121 chksum = (fw->data[3] << 24) | (fw->data[2] << 16) |
5122 (fw->data[1] << 8) | fw->data[0];
5123 asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4],
5124 fw->size - 4, ADV_3550_MEMSIZE,
5125 chksum);
5126 release_firmware(fw);
6698 if (asc_dvc->err_code) 5127 if (asc_dvc->err_code)
6699 return ADV_ERROR; 5128 return ADV_ERROR;
6700 5129
@@ -7065,6 +5494,8 @@ static int AdvInitAsc3550Driver(ADV_DVC_VAR *asc_dvc)
7065 */ 5494 */
7066static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc) 5495static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc)
7067{ 5496{
5497 const struct firmware *fw;
5498 const char fwname[] = "advansys/38C0800.bin";
7068 AdvPortAddr iop_base; 5499 AdvPortAddr iop_base;
7069 ushort warn_code; 5500 ushort warn_code;
7070 int begin_addr; 5501 int begin_addr;
@@ -7072,6 +5503,8 @@ static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc)
7072 ushort code_sum; 5503 ushort code_sum;
7073 int word; 5504 int word;
7074 int i; 5505 int i;
5506 int err;
5507 unsigned long chksum;
7075 ushort scsi_cfg1; 5508 ushort scsi_cfg1;
7076 uchar byte; 5509 uchar byte;
7077 uchar tid; 5510 uchar tid;
@@ -7187,9 +5620,24 @@ static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc)
7187 /* We need to reset back to normal mode after LRAM test passes. */ 5620 /* We need to reset back to normal mode after LRAM test passes. */
7188 AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE); 5621 AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE);
7189 5622
7190 asc_dvc->err_code = AdvLoadMicrocode(iop_base, _adv_asc38C0800_buf, 5623 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
7191 _adv_asc38C0800_size, ADV_38C0800_MEMSIZE, 5624 if (err) {
7192 _adv_asc38C0800_chksum); 5625 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
5626 fwname, err);
5627 return err;
5628 }
5629 if (fw->size < 4) {
5630 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
5631 fw->size, fwname);
5632 release_firmware(fw);
5633 return -EINVAL;
5634 }
5635 chksum = (fw->data[3] << 24) | (fw->data[2] << 16) |
5636 (fw->data[1] << 8) | fw->data[0];
5637 asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4],
5638 fw->size - 4, ADV_38C0800_MEMSIZE,
5639 chksum);
5640 release_firmware(fw);
7193 if (asc_dvc->err_code) 5641 if (asc_dvc->err_code)
7194 return ADV_ERROR; 5642 return ADV_ERROR;
7195 5643
@@ -7544,6 +5992,8 @@ static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *asc_dvc)
7544 */ 5992 */
7545static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc) 5993static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc)
7546{ 5994{
5995 const struct firmware *fw;
5996 const char fwname[] = "advansys/38C1600.bin";
7547 AdvPortAddr iop_base; 5997 AdvPortAddr iop_base;
7548 ushort warn_code; 5998 ushort warn_code;
7549 int begin_addr; 5999 int begin_addr;
@@ -7551,6 +6001,8 @@ static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc)
7551 ushort code_sum; 6001 ushort code_sum;
7552 long word; 6002 long word;
7553 int i; 6003 int i;
6004 int err;
6005 unsigned long chksum;
7554 ushort scsi_cfg1; 6006 ushort scsi_cfg1;
7555 uchar byte; 6007 uchar byte;
7556 uchar tid; 6008 uchar tid;
@@ -7668,9 +6120,24 @@ static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc)
7668 /* We need to reset back to normal mode after LRAM test passes. */ 6120 /* We need to reset back to normal mode after LRAM test passes. */
7669 AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE); 6121 AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE);
7670 6122
7671 asc_dvc->err_code = AdvLoadMicrocode(iop_base, _adv_asc38C1600_buf, 6123 err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
7672 _adv_asc38C1600_size, ADV_38C1600_MEMSIZE, 6124 if (err) {
7673 _adv_asc38C1600_chksum); 6125 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
6126 fwname, err);
6127 return err;
6128 }
6129 if (fw->size < 4) {
6130 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
6131 fw->size, fwname);
6132 release_firmware(fw);
6133 return -EINVAL;
6134 }
6135 chksum = (fw->data[3] << 24) | (fw->data[2] << 16) |
6136 (fw->data[1] << 8) | fw->data[0];
6137 asc_dvc->err_code = AdvLoadMicrocode(iop_base, &fw->data[4],
6138 fw->size - 4, ADV_38C1600_MEMSIZE,
6139 chksum);
6140 release_firmware(fw);
7674 if (asc_dvc->err_code) 6141 if (asc_dvc->err_code)
7675 return ADV_ERROR; 6142 return ADV_ERROR;
7676 6143
@@ -14353,3 +12820,7 @@ module_init(advansys_init);
14353module_exit(advansys_exit); 12820module_exit(advansys_exit);
14354 12821
14355MODULE_LICENSE("GPL"); 12822MODULE_LICENSE("GPL");
12823MODULE_FIRMWARE("advansys/mcode.bin");
12824MODULE_FIRMWARE("advansys/3550.bin");
12825MODULE_FIRMWARE("advansys/38C0800.bin");
12826MODULE_FIRMWARE("advansys/38C1600.bin");
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
index bdad54ec088c..63b521d615f2 100644
--- a/drivers/scsi/aic7xxx/aic79xx_core.c
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c
@@ -1034,7 +1034,7 @@ ahd_intr(struct ahd_softc *ahd)
1034} 1034}
1035 1035
1036/******************************** Private Inlines *****************************/ 1036/******************************** Private Inlines *****************************/
1037static __inline void 1037static inline void
1038ahd_assert_atn(struct ahd_softc *ahd) 1038ahd_assert_atn(struct ahd_softc *ahd)
1039{ 1039{
1040 ahd_outb(ahd, SCSISIGO, ATNO); 1040 ahd_outb(ahd, SCSISIGO, ATNO);
@@ -1069,7 +1069,7 @@ ahd_currently_packetized(struct ahd_softc *ahd)
1069 return (packetized); 1069 return (packetized);
1070} 1070}
1071 1071
1072static __inline int 1072static inline int
1073ahd_set_active_fifo(struct ahd_softc *ahd) 1073ahd_set_active_fifo(struct ahd_softc *ahd)
1074{ 1074{
1075 u_int active_fifo; 1075 u_int active_fifo;
@@ -1086,7 +1086,7 @@ ahd_set_active_fifo(struct ahd_softc *ahd)
1086 } 1086 }
1087} 1087}
1088 1088
1089static __inline void 1089static inline void
1090ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl) 1090ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl)
1091{ 1091{
1092 ahd_busy_tcl(ahd, tcl, SCB_LIST_NULL); 1092 ahd_busy_tcl(ahd, tcl, SCB_LIST_NULL);
@@ -1096,7 +1096,7 @@ ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl)
1096 * Determine whether the sequencer reported a residual 1096 * Determine whether the sequencer reported a residual
1097 * for this SCB/transaction. 1097 * for this SCB/transaction.
1098 */ 1098 */
1099static __inline void 1099static inline void
1100ahd_update_residual(struct ahd_softc *ahd, struct scb *scb) 1100ahd_update_residual(struct ahd_softc *ahd, struct scb *scb)
1101{ 1101{
1102 uint32_t sgptr; 1102 uint32_t sgptr;
@@ -1106,7 +1106,7 @@ ahd_update_residual(struct ahd_softc *ahd, struct scb *scb)
1106 ahd_calc_residual(ahd, scb); 1106 ahd_calc_residual(ahd, scb);
1107} 1107}
1108 1108
1109static __inline void 1109static inline void
1110ahd_complete_scb(struct ahd_softc *ahd, struct scb *scb) 1110ahd_complete_scb(struct ahd_softc *ahd, struct scb *scb)
1111{ 1111{
1112 uint32_t sgptr; 1112 uint32_t sgptr;
@@ -7987,7 +7987,7 @@ ahd_resume(struct ahd_softc *ahd)
7987 * scbid that should be restored once manipualtion 7987 * scbid that should be restored once manipualtion
7988 * of the TCL entry is complete. 7988 * of the TCL entry is complete.
7989 */ 7989 */
7990static __inline u_int 7990static inline u_int
7991ahd_index_busy_tcl(struct ahd_softc *ahd, u_int *saved_scbid, u_int tcl) 7991ahd_index_busy_tcl(struct ahd_softc *ahd, u_int *saved_scbid, u_int tcl)
7992{ 7992{
7993 /* 7993 /*
diff --git a/drivers/scsi/aic7xxx/aic79xx_inline.h b/drivers/scsi/aic7xxx/aic79xx_inline.h
index 5f12cf9d99d0..09335a3c8691 100644
--- a/drivers/scsi/aic7xxx/aic79xx_inline.h
+++ b/drivers/scsi/aic7xxx/aic79xx_inline.h
@@ -46,21 +46,20 @@
46#define _AIC79XX_INLINE_H_ 46#define _AIC79XX_INLINE_H_
47 47
48/******************************** Debugging ***********************************/ 48/******************************** Debugging ***********************************/
49static __inline char *ahd_name(struct ahd_softc *ahd); 49static inline char *ahd_name(struct ahd_softc *ahd);
50 50
51static __inline char * 51static inline char *ahd_name(struct ahd_softc *ahd)
52ahd_name(struct ahd_softc *ahd)
53{ 52{
54 return (ahd->name); 53 return (ahd->name);
55} 54}
56 55
57/************************ Sequencer Execution Control *************************/ 56/************************ Sequencer Execution Control *************************/
58static __inline void ahd_known_modes(struct ahd_softc *ahd, 57static inline void ahd_known_modes(struct ahd_softc *ahd,
59 ahd_mode src, ahd_mode dst); 58 ahd_mode src, ahd_mode dst);
60static __inline ahd_mode_state ahd_build_mode_state(struct ahd_softc *ahd, 59static inline ahd_mode_state ahd_build_mode_state(struct ahd_softc *ahd,
61 ahd_mode src, 60 ahd_mode src,
62 ahd_mode dst); 61 ahd_mode dst);
63static __inline void ahd_extract_mode_state(struct ahd_softc *ahd, 62static inline void ahd_extract_mode_state(struct ahd_softc *ahd,
64 ahd_mode_state state, 63 ahd_mode_state state,
65 ahd_mode *src, ahd_mode *dst); 64 ahd_mode *src, ahd_mode *dst);
66 65
@@ -73,7 +72,7 @@ int ahd_is_paused(struct ahd_softc *ahd);
73void ahd_pause(struct ahd_softc *ahd); 72void ahd_pause(struct ahd_softc *ahd);
74void ahd_unpause(struct ahd_softc *ahd); 73void ahd_unpause(struct ahd_softc *ahd);
75 74
76static __inline void 75static inline void
77ahd_known_modes(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) 76ahd_known_modes(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst)
78{ 77{
79 ahd->src_mode = src; 78 ahd->src_mode = src;
@@ -82,13 +81,13 @@ ahd_known_modes(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst)
82 ahd->saved_dst_mode = dst; 81 ahd->saved_dst_mode = dst;
83} 82}
84 83
85static __inline ahd_mode_state 84static inline ahd_mode_state
86ahd_build_mode_state(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst) 85ahd_build_mode_state(struct ahd_softc *ahd, ahd_mode src, ahd_mode dst)
87{ 86{
88 return ((src << SRC_MODE_SHIFT) | (dst << DST_MODE_SHIFT)); 87 return ((src << SRC_MODE_SHIFT) | (dst << DST_MODE_SHIFT));
89} 88}
90 89
91static __inline void 90static inline void
92ahd_extract_mode_state(struct ahd_softc *ahd, ahd_mode_state state, 91ahd_extract_mode_state(struct ahd_softc *ahd, ahd_mode_state state,
93 ahd_mode *src, ahd_mode *dst) 92 ahd_mode *src, ahd_mode *dst)
94{ 93{
@@ -102,13 +101,12 @@ void *ahd_sg_setup(struct ahd_softc *ahd, struct scb *scb,
102 bus_size_t len, int last); 101 bus_size_t len, int last);
103 102
104/************************** Memory mapping routines ***************************/ 103/************************** Memory mapping routines ***************************/
105static __inline size_t ahd_sg_size(struct ahd_softc *ahd); 104static inline size_t ahd_sg_size(struct ahd_softc *ahd);
106 105
107void ahd_sync_sglist(struct ahd_softc *ahd, 106void ahd_sync_sglist(struct ahd_softc *ahd,
108 struct scb *scb, int op); 107 struct scb *scb, int op);
109 108
110static __inline size_t 109static inline size_t ahd_sg_size(struct ahd_softc *ahd)
111ahd_sg_size(struct ahd_softc *ahd)
112{ 110{
113 if ((ahd->flags & AHD_64BIT_ADDRESSING) != 0) 111 if ((ahd->flags & AHD_64BIT_ADDRESSING) != 0)
114 return (sizeof(struct ahd_dma64_seg)); 112 return (sizeof(struct ahd_dma64_seg));
@@ -141,11 +139,9 @@ struct scb *
141 ahd_lookup_scb(struct ahd_softc *ahd, u_int tag); 139 ahd_lookup_scb(struct ahd_softc *ahd, u_int tag);
142void ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb); 140void ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb);
143 141
144static __inline uint8_t * 142static inline uint8_t *ahd_get_sense_buf(struct ahd_softc *ahd,
145 ahd_get_sense_buf(struct ahd_softc *ahd,
146 struct scb *scb); 143 struct scb *scb);
147static __inline uint32_t 144static inline uint32_t ahd_get_sense_bufaddr(struct ahd_softc *ahd,
148 ahd_get_sense_bufaddr(struct ahd_softc *ahd,
149 struct scb *scb); 145 struct scb *scb);
150 146
151#if 0 /* unused */ 147#if 0 /* unused */
@@ -158,13 +154,13 @@ do { \
158 154
159#endif 155#endif
160 156
161static __inline uint8_t * 157static inline uint8_t *
162ahd_get_sense_buf(struct ahd_softc *ahd, struct scb *scb) 158ahd_get_sense_buf(struct ahd_softc *ahd, struct scb *scb)
163{ 159{
164 return (scb->sense_data); 160 return (scb->sense_data);
165} 161}
166 162
167static __inline uint32_t 163static inline uint32_t
168ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb) 164ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb)
169{ 165{
170 return (scb->sense_busaddr); 166 return (scb->sense_busaddr);
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h
index 8d6612c19922..55c1fe07969f 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.h
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.h
@@ -395,19 +395,19 @@ struct info_str {
395}; 395};
396 396
397/******************************** Locking *************************************/ 397/******************************** Locking *************************************/
398static __inline void 398static inline void
399ahd_lockinit(struct ahd_softc *ahd) 399ahd_lockinit(struct ahd_softc *ahd)
400{ 400{
401 spin_lock_init(&ahd->platform_data->spin_lock); 401 spin_lock_init(&ahd->platform_data->spin_lock);
402} 402}
403 403
404static __inline void 404static inline void
405ahd_lock(struct ahd_softc *ahd, unsigned long *flags) 405ahd_lock(struct ahd_softc *ahd, unsigned long *flags)
406{ 406{
407 spin_lock_irqsave(&ahd->platform_data->spin_lock, *flags); 407 spin_lock_irqsave(&ahd->platform_data->spin_lock, *flags);
408} 408}
409 409
410static __inline void 410static inline void
411ahd_unlock(struct ahd_softc *ahd, unsigned long *flags) 411ahd_unlock(struct ahd_softc *ahd, unsigned long *flags)
412{ 412{
413 spin_unlock_irqrestore(&ahd->platform_data->spin_lock, *flags); 413 spin_unlock_irqrestore(&ahd->platform_data->spin_lock, *flags);
@@ -490,29 +490,29 @@ void ahd_pci_write_config(ahd_dev_softc_t pci,
490 int reg, uint32_t value, 490 int reg, uint32_t value,
491 int width); 491 int width);
492 492
493static __inline int ahd_get_pci_function(ahd_dev_softc_t); 493static inline int ahd_get_pci_function(ahd_dev_softc_t);
494static __inline int 494static inline int
495ahd_get_pci_function(ahd_dev_softc_t pci) 495ahd_get_pci_function(ahd_dev_softc_t pci)
496{ 496{
497 return (PCI_FUNC(pci->devfn)); 497 return (PCI_FUNC(pci->devfn));
498} 498}
499 499
500static __inline int ahd_get_pci_slot(ahd_dev_softc_t); 500static inline int ahd_get_pci_slot(ahd_dev_softc_t);
501static __inline int 501static inline int
502ahd_get_pci_slot(ahd_dev_softc_t pci) 502ahd_get_pci_slot(ahd_dev_softc_t pci)
503{ 503{
504 return (PCI_SLOT(pci->devfn)); 504 return (PCI_SLOT(pci->devfn));
505} 505}
506 506
507static __inline int ahd_get_pci_bus(ahd_dev_softc_t); 507static inline int ahd_get_pci_bus(ahd_dev_softc_t);
508static __inline int 508static inline int
509ahd_get_pci_bus(ahd_dev_softc_t pci) 509ahd_get_pci_bus(ahd_dev_softc_t pci)
510{ 510{
511 return (pci->bus->number); 511 return (pci->bus->number);
512} 512}
513 513
514static __inline void ahd_flush_device_writes(struct ahd_softc *); 514static inline void ahd_flush_device_writes(struct ahd_softc *);
515static __inline void 515static inline void
516ahd_flush_device_writes(struct ahd_softc *ahd) 516ahd_flush_device_writes(struct ahd_softc *ahd)
517{ 517{
518 /* XXX Is this sufficient for all architectures??? */ 518 /* XXX Is this sufficient for all architectures??? */
@@ -524,81 +524,81 @@ int ahd_linux_proc_info(struct Scsi_Host *, char *, char **,
524 off_t, int, int); 524 off_t, int, int);
525 525
526/*********************** Transaction Access Wrappers **************************/ 526/*********************** Transaction Access Wrappers **************************/
527static __inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); 527static inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t);
528static __inline void ahd_set_transaction_status(struct scb *, uint32_t); 528static inline void ahd_set_transaction_status(struct scb *, uint32_t);
529static __inline void ahd_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t); 529static inline void ahd_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t);
530static __inline void ahd_set_scsi_status(struct scb *, uint32_t); 530static inline void ahd_set_scsi_status(struct scb *, uint32_t);
531static __inline uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd); 531static inline uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd);
532static __inline uint32_t ahd_get_transaction_status(struct scb *); 532static inline uint32_t ahd_get_transaction_status(struct scb *);
533static __inline uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd); 533static inline uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd);
534static __inline uint32_t ahd_get_scsi_status(struct scb *); 534static inline uint32_t ahd_get_scsi_status(struct scb *);
535static __inline void ahd_set_transaction_tag(struct scb *, int, u_int); 535static inline void ahd_set_transaction_tag(struct scb *, int, u_int);
536static __inline u_long ahd_get_transfer_length(struct scb *); 536static inline u_long ahd_get_transfer_length(struct scb *);
537static __inline int ahd_get_transfer_dir(struct scb *); 537static inline int ahd_get_transfer_dir(struct scb *);
538static __inline void ahd_set_residual(struct scb *, u_long); 538static inline void ahd_set_residual(struct scb *, u_long);
539static __inline void ahd_set_sense_residual(struct scb *scb, u_long resid); 539static inline void ahd_set_sense_residual(struct scb *scb, u_long resid);
540static __inline u_long ahd_get_residual(struct scb *); 540static inline u_long ahd_get_residual(struct scb *);
541static __inline u_long ahd_get_sense_residual(struct scb *); 541static inline u_long ahd_get_sense_residual(struct scb *);
542static __inline int ahd_perform_autosense(struct scb *); 542static inline int ahd_perform_autosense(struct scb *);
543static __inline uint32_t ahd_get_sense_bufsize(struct ahd_softc *, 543static inline uint32_t ahd_get_sense_bufsize(struct ahd_softc *,
544 struct scb *); 544 struct scb *);
545static __inline void ahd_notify_xfer_settings_change(struct ahd_softc *, 545static inline void ahd_notify_xfer_settings_change(struct ahd_softc *,
546 struct ahd_devinfo *); 546 struct ahd_devinfo *);
547static __inline void ahd_platform_scb_free(struct ahd_softc *ahd, 547static inline void ahd_platform_scb_free(struct ahd_softc *ahd,
548 struct scb *scb); 548 struct scb *scb);
549static __inline void ahd_freeze_scb(struct scb *scb); 549static inline void ahd_freeze_scb(struct scb *scb);
550 550
551static __inline 551static inline
552void ahd_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status) 552void ahd_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status)
553{ 553{
554 cmd->result &= ~(CAM_STATUS_MASK << 16); 554 cmd->result &= ~(CAM_STATUS_MASK << 16);
555 cmd->result |= status << 16; 555 cmd->result |= status << 16;
556} 556}
557 557
558static __inline 558static inline
559void ahd_set_transaction_status(struct scb *scb, uint32_t status) 559void ahd_set_transaction_status(struct scb *scb, uint32_t status)
560{ 560{
561 ahd_cmd_set_transaction_status(scb->io_ctx,status); 561 ahd_cmd_set_transaction_status(scb->io_ctx,status);
562} 562}
563 563
564static __inline 564static inline
565void ahd_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status) 565void ahd_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status)
566{ 566{
567 cmd->result &= ~0xFFFF; 567 cmd->result &= ~0xFFFF;
568 cmd->result |= status; 568 cmd->result |= status;
569} 569}
570 570
571static __inline 571static inline
572void ahd_set_scsi_status(struct scb *scb, uint32_t status) 572void ahd_set_scsi_status(struct scb *scb, uint32_t status)
573{ 573{
574 ahd_cmd_set_scsi_status(scb->io_ctx, status); 574 ahd_cmd_set_scsi_status(scb->io_ctx, status);
575} 575}
576 576
577static __inline 577static inline
578uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd) 578uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd)
579{ 579{
580 return ((cmd->result >> 16) & CAM_STATUS_MASK); 580 return ((cmd->result >> 16) & CAM_STATUS_MASK);
581} 581}
582 582
583static __inline 583static inline
584uint32_t ahd_get_transaction_status(struct scb *scb) 584uint32_t ahd_get_transaction_status(struct scb *scb)
585{ 585{
586 return (ahd_cmd_get_transaction_status(scb->io_ctx)); 586 return (ahd_cmd_get_transaction_status(scb->io_ctx));
587} 587}
588 588
589static __inline 589static inline
590uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd) 590uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd)
591{ 591{
592 return (cmd->result & 0xFFFF); 592 return (cmd->result & 0xFFFF);
593} 593}
594 594
595static __inline 595static inline
596uint32_t ahd_get_scsi_status(struct scb *scb) 596uint32_t ahd_get_scsi_status(struct scb *scb)
597{ 597{
598 return (ahd_cmd_get_scsi_status(scb->io_ctx)); 598 return (ahd_cmd_get_scsi_status(scb->io_ctx));
599} 599}
600 600
601static __inline 601static inline
602void ahd_set_transaction_tag(struct scb *scb, int enabled, u_int type) 602void ahd_set_transaction_tag(struct scb *scb, int enabled, u_int type)
603{ 603{
604 /* 604 /*
@@ -607,43 +607,43 @@ void ahd_set_transaction_tag(struct scb *scb, int enabled, u_int type)
607 */ 607 */
608} 608}
609 609
610static __inline 610static inline
611u_long ahd_get_transfer_length(struct scb *scb) 611u_long ahd_get_transfer_length(struct scb *scb)
612{ 612{
613 return (scb->platform_data->xfer_len); 613 return (scb->platform_data->xfer_len);
614} 614}
615 615
616static __inline 616static inline
617int ahd_get_transfer_dir(struct scb *scb) 617int ahd_get_transfer_dir(struct scb *scb)
618{ 618{
619 return (scb->io_ctx->sc_data_direction); 619 return (scb->io_ctx->sc_data_direction);
620} 620}
621 621
622static __inline 622static inline
623void ahd_set_residual(struct scb *scb, u_long resid) 623void ahd_set_residual(struct scb *scb, u_long resid)
624{ 624{
625 scsi_set_resid(scb->io_ctx, resid); 625 scsi_set_resid(scb->io_ctx, resid);
626} 626}
627 627
628static __inline 628static inline
629void ahd_set_sense_residual(struct scb *scb, u_long resid) 629void ahd_set_sense_residual(struct scb *scb, u_long resid)
630{ 630{
631 scb->platform_data->sense_resid = resid; 631 scb->platform_data->sense_resid = resid;
632} 632}
633 633
634static __inline 634static inline
635u_long ahd_get_residual(struct scb *scb) 635u_long ahd_get_residual(struct scb *scb)
636{ 636{
637 return scsi_get_resid(scb->io_ctx); 637 return scsi_get_resid(scb->io_ctx);
638} 638}
639 639
640static __inline 640static inline
641u_long ahd_get_sense_residual(struct scb *scb) 641u_long ahd_get_sense_residual(struct scb *scb)
642{ 642{
643 return (scb->platform_data->sense_resid); 643 return (scb->platform_data->sense_resid);
644} 644}
645 645
646static __inline 646static inline
647int ahd_perform_autosense(struct scb *scb) 647int ahd_perform_autosense(struct scb *scb)
648{ 648{
649 /* 649 /*
@@ -654,20 +654,20 @@ int ahd_perform_autosense(struct scb *scb)
654 return (1); 654 return (1);
655} 655}
656 656
657static __inline uint32_t 657static inline uint32_t
658ahd_get_sense_bufsize(struct ahd_softc *ahd, struct scb *scb) 658ahd_get_sense_bufsize(struct ahd_softc *ahd, struct scb *scb)
659{ 659{
660 return (sizeof(struct scsi_sense_data)); 660 return (sizeof(struct scsi_sense_data));
661} 661}
662 662
663static __inline void 663static inline void
664ahd_notify_xfer_settings_change(struct ahd_softc *ahd, 664ahd_notify_xfer_settings_change(struct ahd_softc *ahd,
665 struct ahd_devinfo *devinfo) 665 struct ahd_devinfo *devinfo)
666{ 666{
667 /* Nothing to do here for linux */ 667 /* Nothing to do here for linux */
668} 668}
669 669
670static __inline void 670static inline void
671ahd_platform_scb_free(struct ahd_softc *ahd, struct scb *scb) 671ahd_platform_scb_free(struct ahd_softc *ahd, struct scb *scb)
672{ 672{
673 ahd->flags &= ~AHD_RESOURCE_SHORTAGE; 673 ahd->flags &= ~AHD_RESOURCE_SHORTAGE;
@@ -678,7 +678,7 @@ void ahd_platform_free(struct ahd_softc *ahd);
678void ahd_platform_init(struct ahd_softc *ahd); 678void ahd_platform_init(struct ahd_softc *ahd);
679void ahd_platform_freeze_devq(struct ahd_softc *ahd, struct scb *scb); 679void ahd_platform_freeze_devq(struct ahd_softc *ahd, struct scb *scb);
680 680
681static __inline void 681static inline void
682ahd_freeze_scb(struct scb *scb) 682ahd_freeze_scb(struct scb *scb)
683{ 683{
684 if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) { 684 if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) {
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
index 6593056867f6..8f686122d54e 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
@@ -194,16 +194,16 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
194 if (sizeof(dma_addr_t) > 4) { 194 if (sizeof(dma_addr_t) > 4) {
195 const u64 required_mask = dma_get_required_mask(dev); 195 const u64 required_mask = dma_get_required_mask(dev);
196 196
197 if (required_mask > DMA_39BIT_MASK && 197 if (required_mask > DMA_BIT_MASK(39) &&
198 dma_set_mask(dev, DMA_64BIT_MASK) == 0) 198 dma_set_mask(dev, DMA_BIT_MASK(64)) == 0)
199 ahd->flags |= AHD_64BIT_ADDRESSING; 199 ahd->flags |= AHD_64BIT_ADDRESSING;
200 else if (required_mask > DMA_32BIT_MASK && 200 else if (required_mask > DMA_BIT_MASK(32) &&
201 dma_set_mask(dev, DMA_39BIT_MASK) == 0) 201 dma_set_mask(dev, DMA_BIT_MASK(39)) == 0)
202 ahd->flags |= AHD_39BIT_ADDRESSING; 202 ahd->flags |= AHD_39BIT_ADDRESSING;
203 else 203 else
204 dma_set_mask(dev, DMA_32BIT_MASK); 204 dma_set_mask(dev, DMA_BIT_MASK(32));
205 } else { 205 } else {
206 dma_set_mask(dev, DMA_32BIT_MASK); 206 dma_set_mask(dev, DMA_BIT_MASK(32));
207 } 207 }
208 ahd->dev_softc = pci; 208 ahd->dev_softc = pci;
209 error = ahd_pci_config(ahd, entry); 209 error = ahd_pci_config(ahd, entry);
diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c
index a734d77e880e..90a04a37b4f7 100644
--- a/drivers/scsi/aic7xxx/aic79xx_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_pci.c
@@ -51,7 +51,7 @@
51 51
52#include "aic79xx_pci.h" 52#include "aic79xx_pci.h"
53 53
54static __inline uint64_t 54static inline uint64_t
55ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) 55ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor)
56{ 56{
57 uint64_t id; 57 uint64_t id;
@@ -377,14 +377,12 @@ ahd_pci_config(struct ahd_softc *ahd, const struct ahd_pci_identity *entry)
377 error = ahd_init(ahd); 377 error = ahd_init(ahd);
378 if (error != 0) 378 if (error != 0)
379 return (error); 379 return (error);
380 ahd->init_level++;
380 381
381 /* 382 /*
382 * Allow interrupts now that we are completely setup. 383 * Allow interrupts now that we are completely setup.
383 */ 384 */
384 error = ahd_pci_map_int(ahd); 385 return ahd_pci_map_int(ahd);
385 if (!error)
386 ahd->init_level++;
387 return error;
388} 386}
389 387
390#ifdef CONFIG_PM 388#ifdef CONFIG_PM
diff --git a/drivers/scsi/aic7xxx/aic7xxx_inline.h b/drivers/scsi/aic7xxx/aic7xxx_inline.h
index 09bf2f4d78d5..0b57b783ef41 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_inline.h
+++ b/drivers/scsi/aic7xxx/aic7xxx_inline.h
@@ -55,10 +55,9 @@ void ahc_sync_sglist(struct ahc_softc *ahc,
55 struct scb *scb, int op); 55 struct scb *scb, int op);
56 56
57/******************************** Debugging ***********************************/ 57/******************************** Debugging ***********************************/
58static __inline char *ahc_name(struct ahc_softc *ahc); 58static inline char *ahc_name(struct ahc_softc *ahc);
59 59
60static __inline char * 60static inline char *ahc_name(struct ahc_softc *ahc)
61ahc_name(struct ahc_softc *ahc)
62{ 61{
63 return (ahc->name); 62 return (ahc->name);
64} 63}
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h
index 3f7238db35e5..56f07e527b48 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.h
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h
@@ -230,7 +230,7 @@ int ahc_dmamap_unload(struct ahc_softc *, bus_dma_tag_t, bus_dmamap_t);
230#include "aic7xxx.h" 230#include "aic7xxx.h"
231 231
232/***************************** Timer Facilities *******************************/ 232/***************************** Timer Facilities *******************************/
233static __inline void 233static inline void
234ahc_scb_timer_reset(struct scb *scb, u_int usec) 234ahc_scb_timer_reset(struct scb *scb, u_int usec)
235{ 235{
236} 236}
@@ -401,19 +401,19 @@ struct info_str {
401/******************************** Locking *************************************/ 401/******************************** Locking *************************************/
402/* Lock protecting internal data structures */ 402/* Lock protecting internal data structures */
403 403
404static __inline void 404static inline void
405ahc_lockinit(struct ahc_softc *ahc) 405ahc_lockinit(struct ahc_softc *ahc)
406{ 406{
407 spin_lock_init(&ahc->platform_data->spin_lock); 407 spin_lock_init(&ahc->platform_data->spin_lock);
408} 408}
409 409
410static __inline void 410static inline void
411ahc_lock(struct ahc_softc *ahc, unsigned long *flags) 411ahc_lock(struct ahc_softc *ahc, unsigned long *flags)
412{ 412{
413 spin_lock_irqsave(&ahc->platform_data->spin_lock, *flags); 413 spin_lock_irqsave(&ahc->platform_data->spin_lock, *flags);
414} 414}
415 415
416static __inline void 416static inline void
417ahc_unlock(struct ahc_softc *ahc, unsigned long *flags) 417ahc_unlock(struct ahc_softc *ahc, unsigned long *flags)
418{ 418{
419 spin_unlock_irqrestore(&ahc->platform_data->spin_lock, *flags); 419 spin_unlock_irqrestore(&ahc->platform_data->spin_lock, *flags);
@@ -493,22 +493,22 @@ void ahc_pci_write_config(ahc_dev_softc_t pci,
493 int reg, uint32_t value, 493 int reg, uint32_t value,
494 int width); 494 int width);
495 495
496static __inline int ahc_get_pci_function(ahc_dev_softc_t); 496static inline int ahc_get_pci_function(ahc_dev_softc_t);
497static __inline int 497static inline int
498ahc_get_pci_function(ahc_dev_softc_t pci) 498ahc_get_pci_function(ahc_dev_softc_t pci)
499{ 499{
500 return (PCI_FUNC(pci->devfn)); 500 return (PCI_FUNC(pci->devfn));
501} 501}
502 502
503static __inline int ahc_get_pci_slot(ahc_dev_softc_t); 503static inline int ahc_get_pci_slot(ahc_dev_softc_t);
504static __inline int 504static inline int
505ahc_get_pci_slot(ahc_dev_softc_t pci) 505ahc_get_pci_slot(ahc_dev_softc_t pci)
506{ 506{
507 return (PCI_SLOT(pci->devfn)); 507 return (PCI_SLOT(pci->devfn));
508} 508}
509 509
510static __inline int ahc_get_pci_bus(ahc_dev_softc_t); 510static inline int ahc_get_pci_bus(ahc_dev_softc_t);
511static __inline int 511static inline int
512ahc_get_pci_bus(ahc_dev_softc_t pci) 512ahc_get_pci_bus(ahc_dev_softc_t pci)
513{ 513{
514 return (pci->bus->number); 514 return (pci->bus->number);
@@ -521,8 +521,8 @@ static inline void ahc_linux_pci_exit(void) {
521} 521}
522#endif 522#endif
523 523
524static __inline void ahc_flush_device_writes(struct ahc_softc *); 524static inline void ahc_flush_device_writes(struct ahc_softc *);
525static __inline void 525static inline void
526ahc_flush_device_writes(struct ahc_softc *ahc) 526ahc_flush_device_writes(struct ahc_softc *ahc)
527{ 527{
528 /* XXX Is this sufficient for all architectures??? */ 528 /* XXX Is this sufficient for all architectures??? */
@@ -535,81 +535,81 @@ int ahc_linux_proc_info(struct Scsi_Host *, char *, char **,
535 535
536/*************************** Domain Validation ********************************/ 536/*************************** Domain Validation ********************************/
537/*********************** Transaction Access Wrappers *************************/ 537/*********************** Transaction Access Wrappers *************************/
538static __inline void ahc_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); 538static inline void ahc_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t);
539static __inline void ahc_set_transaction_status(struct scb *, uint32_t); 539static inline void ahc_set_transaction_status(struct scb *, uint32_t);
540static __inline void ahc_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t); 540static inline void ahc_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t);
541static __inline void ahc_set_scsi_status(struct scb *, uint32_t); 541static inline void ahc_set_scsi_status(struct scb *, uint32_t);
542static __inline uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd); 542static inline uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd);
543static __inline uint32_t ahc_get_transaction_status(struct scb *); 543static inline uint32_t ahc_get_transaction_status(struct scb *);
544static __inline uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd); 544static inline uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd);
545static __inline uint32_t ahc_get_scsi_status(struct scb *); 545static inline uint32_t ahc_get_scsi_status(struct scb *);
546static __inline void ahc_set_transaction_tag(struct scb *, int, u_int); 546static inline void ahc_set_transaction_tag(struct scb *, int, u_int);
547static __inline u_long ahc_get_transfer_length(struct scb *); 547static inline u_long ahc_get_transfer_length(struct scb *);
548static __inline int ahc_get_transfer_dir(struct scb *); 548static inline int ahc_get_transfer_dir(struct scb *);
549static __inline void ahc_set_residual(struct scb *, u_long); 549static inline void ahc_set_residual(struct scb *, u_long);
550static __inline void ahc_set_sense_residual(struct scb *scb, u_long resid); 550static inline void ahc_set_sense_residual(struct scb *scb, u_long resid);
551static __inline u_long ahc_get_residual(struct scb *); 551static inline u_long ahc_get_residual(struct scb *);
552static __inline u_long ahc_get_sense_residual(struct scb *); 552static inline u_long ahc_get_sense_residual(struct scb *);
553static __inline int ahc_perform_autosense(struct scb *); 553static inline int ahc_perform_autosense(struct scb *);
554static __inline uint32_t ahc_get_sense_bufsize(struct ahc_softc *, 554static inline uint32_t ahc_get_sense_bufsize(struct ahc_softc *,
555 struct scb *); 555 struct scb *);
556static __inline void ahc_notify_xfer_settings_change(struct ahc_softc *, 556static inline void ahc_notify_xfer_settings_change(struct ahc_softc *,
557 struct ahc_devinfo *); 557 struct ahc_devinfo *);
558static __inline void ahc_platform_scb_free(struct ahc_softc *ahc, 558static inline void ahc_platform_scb_free(struct ahc_softc *ahc,
559 struct scb *scb); 559 struct scb *scb);
560static __inline void ahc_freeze_scb(struct scb *scb); 560static inline void ahc_freeze_scb(struct scb *scb);
561 561
562static __inline 562static inline
563void ahc_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status) 563void ahc_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status)
564{ 564{
565 cmd->result &= ~(CAM_STATUS_MASK << 16); 565 cmd->result &= ~(CAM_STATUS_MASK << 16);
566 cmd->result |= status << 16; 566 cmd->result |= status << 16;
567} 567}
568 568
569static __inline 569static inline
570void ahc_set_transaction_status(struct scb *scb, uint32_t status) 570void ahc_set_transaction_status(struct scb *scb, uint32_t status)
571{ 571{
572 ahc_cmd_set_transaction_status(scb->io_ctx,status); 572 ahc_cmd_set_transaction_status(scb->io_ctx,status);
573} 573}
574 574
575static __inline 575static inline
576void ahc_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status) 576void ahc_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status)
577{ 577{
578 cmd->result &= ~0xFFFF; 578 cmd->result &= ~0xFFFF;
579 cmd->result |= status; 579 cmd->result |= status;
580} 580}
581 581
582static __inline 582static inline
583void ahc_set_scsi_status(struct scb *scb, uint32_t status) 583void ahc_set_scsi_status(struct scb *scb, uint32_t status)
584{ 584{
585 ahc_cmd_set_scsi_status(scb->io_ctx, status); 585 ahc_cmd_set_scsi_status(scb->io_ctx, status);
586} 586}
587 587
588static __inline 588static inline
589uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd) 589uint32_t ahc_cmd_get_transaction_status(struct scsi_cmnd *cmd)
590{ 590{
591 return ((cmd->result >> 16) & CAM_STATUS_MASK); 591 return ((cmd->result >> 16) & CAM_STATUS_MASK);
592} 592}
593 593
594static __inline 594static inline
595uint32_t ahc_get_transaction_status(struct scb *scb) 595uint32_t ahc_get_transaction_status(struct scb *scb)
596{ 596{
597 return (ahc_cmd_get_transaction_status(scb->io_ctx)); 597 return (ahc_cmd_get_transaction_status(scb->io_ctx));
598} 598}
599 599
600static __inline 600static inline
601uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd) 601uint32_t ahc_cmd_get_scsi_status(struct scsi_cmnd *cmd)
602{ 602{
603 return (cmd->result & 0xFFFF); 603 return (cmd->result & 0xFFFF);
604} 604}
605 605
606static __inline 606static inline
607uint32_t ahc_get_scsi_status(struct scb *scb) 607uint32_t ahc_get_scsi_status(struct scb *scb)
608{ 608{
609 return (ahc_cmd_get_scsi_status(scb->io_ctx)); 609 return (ahc_cmd_get_scsi_status(scb->io_ctx));
610} 610}
611 611
612static __inline 612static inline
613void ahc_set_transaction_tag(struct scb *scb, int enabled, u_int type) 613void ahc_set_transaction_tag(struct scb *scb, int enabled, u_int type)
614{ 614{
615 /* 615 /*
@@ -618,43 +618,43 @@ void ahc_set_transaction_tag(struct scb *scb, int enabled, u_int type)
618 */ 618 */
619} 619}
620 620
621static __inline 621static inline
622u_long ahc_get_transfer_length(struct scb *scb) 622u_long ahc_get_transfer_length(struct scb *scb)
623{ 623{
624 return (scb->platform_data->xfer_len); 624 return (scb->platform_data->xfer_len);
625} 625}
626 626
627static __inline 627static inline
628int ahc_get_transfer_dir(struct scb *scb) 628int ahc_get_transfer_dir(struct scb *scb)
629{ 629{
630 return (scb->io_ctx->sc_data_direction); 630 return (scb->io_ctx->sc_data_direction);
631} 631}
632 632
633static __inline 633static inline
634void ahc_set_residual(struct scb *scb, u_long resid) 634void ahc_set_residual(struct scb *scb, u_long resid)
635{ 635{
636 scsi_set_resid(scb->io_ctx, resid); 636 scsi_set_resid(scb->io_ctx, resid);
637} 637}
638 638
639static __inline 639static inline
640void ahc_set_sense_residual(struct scb *scb, u_long resid) 640void ahc_set_sense_residual(struct scb *scb, u_long resid)
641{ 641{
642 scb->platform_data->sense_resid = resid; 642 scb->platform_data->sense_resid = resid;
643} 643}
644 644
645static __inline 645static inline
646u_long ahc_get_residual(struct scb *scb) 646u_long ahc_get_residual(struct scb *scb)
647{ 647{
648 return scsi_get_resid(scb->io_ctx); 648 return scsi_get_resid(scb->io_ctx);
649} 649}
650 650
651static __inline 651static inline
652u_long ahc_get_sense_residual(struct scb *scb) 652u_long ahc_get_sense_residual(struct scb *scb)
653{ 653{
654 return (scb->platform_data->sense_resid); 654 return (scb->platform_data->sense_resid);
655} 655}
656 656
657static __inline 657static inline
658int ahc_perform_autosense(struct scb *scb) 658int ahc_perform_autosense(struct scb *scb)
659{ 659{
660 /* 660 /*
@@ -665,20 +665,20 @@ int ahc_perform_autosense(struct scb *scb)
665 return (1); 665 return (1);
666} 666}
667 667
668static __inline uint32_t 668static inline uint32_t
669ahc_get_sense_bufsize(struct ahc_softc *ahc, struct scb *scb) 669ahc_get_sense_bufsize(struct ahc_softc *ahc, struct scb *scb)
670{ 670{
671 return (sizeof(struct scsi_sense_data)); 671 return (sizeof(struct scsi_sense_data));
672} 672}
673 673
674static __inline void 674static inline void
675ahc_notify_xfer_settings_change(struct ahc_softc *ahc, 675ahc_notify_xfer_settings_change(struct ahc_softc *ahc,
676 struct ahc_devinfo *devinfo) 676 struct ahc_devinfo *devinfo)
677{ 677{
678 /* Nothing to do here for linux */ 678 /* Nothing to do here for linux */
679} 679}
680 680
681static __inline void 681static inline void
682ahc_platform_scb_free(struct ahc_softc *ahc, struct scb *scb) 682ahc_platform_scb_free(struct ahc_softc *ahc, struct scb *scb)
683{ 683{
684} 684}
@@ -687,7 +687,7 @@ int ahc_platform_alloc(struct ahc_softc *ahc, void *platform_arg);
687void ahc_platform_free(struct ahc_softc *ahc); 687void ahc_platform_free(struct ahc_softc *ahc);
688void ahc_platform_freeze_devq(struct ahc_softc *ahc, struct scb *scb); 688void ahc_platform_freeze_devq(struct ahc_softc *ahc, struct scb *scb);
689 689
690static __inline void 690static inline void
691ahc_freeze_scb(struct scb *scb) 691ahc_freeze_scb(struct scb *scb)
692{ 692{
693 if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) { 693 if ((scb->io_ctx->result & (CAM_DEV_QFRZN << 16)) == 0) {
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
index 00f5b9868574..78fc70c24e07 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
@@ -241,10 +241,10 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
241 if (sizeof(dma_addr_t) > 4 241 if (sizeof(dma_addr_t) > 4
242 && ahc->features & AHC_LARGE_SCBS 242 && ahc->features & AHC_LARGE_SCBS
243 && dma_set_mask(dev, mask_39bit) == 0 243 && dma_set_mask(dev, mask_39bit) == 0
244 && dma_get_required_mask(dev) > DMA_32BIT_MASK) { 244 && dma_get_required_mask(dev) > DMA_BIT_MASK(32)) {
245 ahc->flags |= AHC_39BIT_ADDRESSING; 245 ahc->flags |= AHC_39BIT_ADDRESSING;
246 } else { 246 } else {
247 if (dma_set_mask(dev, DMA_32BIT_MASK)) { 247 if (dma_set_mask(dev, DMA_BIT_MASK(32))) {
248 ahc_free(ahc); 248 ahc_free(ahc);
249 printk(KERN_WARNING "aic7xxx: No suitable DMA available.\n"); 249 printk(KERN_WARNING "aic7xxx: No suitable DMA available.\n");
250 return (-ENODEV); 250 return (-ENODEV);
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c
index c07cb6eebb02..27014b9de126 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_pci.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c
@@ -54,7 +54,7 @@
54 54
55#include "aic7xxx_pci.h" 55#include "aic7xxx_pci.h"
56 56
57static __inline uint64_t 57static inline uint64_t
58ahc_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) 58ahc_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor)
59{ 59{
60 uint64_t id; 60 uint64_t id;
@@ -960,16 +960,12 @@ ahc_pci_config(struct ahc_softc *ahc, const struct ahc_pci_identity *entry)
960 error = ahc_init(ahc); 960 error = ahc_init(ahc);
961 if (error != 0) 961 if (error != 0)
962 return (error); 962 return (error);
963 ahc->init_level++;
963 964
964 /* 965 /*
965 * Allow interrupts now that we are completely setup. 966 * Allow interrupts now that we are completely setup.
966 */ 967 */
967 error = ahc_pci_map_int(ahc); 968 return ahc_pci_map_int(ahc);
968 if (error != 0)
969 return (error);
970
971 ahc->init_level++;
972 return (0);
973} 969}
974 970
975/* 971/*
diff --git a/drivers/scsi/aic7xxx/aiclib.h b/drivers/scsi/aic7xxx/aiclib.h
index 3bfbf0fe1ec2..f8fd198aafbc 100644
--- a/drivers/scsi/aic7xxx/aiclib.h
+++ b/drivers/scsi/aic7xxx/aiclib.h
@@ -133,7 +133,7 @@ struct scsi_sense_data
133#define SCSI_STATUS_TASK_ABORTED 0x40 133#define SCSI_STATUS_TASK_ABORTED 0x40
134 134
135/************************* Large Disk Handling ********************************/ 135/************************* Large Disk Handling ********************************/
136static __inline int 136static inline int
137aic_sector_div(sector_t capacity, int heads, int sectors) 137aic_sector_div(sector_t capacity, int heads, int sectors)
138{ 138{
139 /* ugly, ugly sector_div calling convention.. */ 139 /* ugly, ugly sector_div calling convention.. */
@@ -141,7 +141,7 @@ aic_sector_div(sector_t capacity, int heads, int sectors)
141 return (int)capacity; 141 return (int)capacity;
142} 142}
143 143
144static __inline uint32_t 144static inline uint32_t
145scsi_4btoul(uint8_t *bytes) 145scsi_4btoul(uint8_t *bytes)
146{ 146{
147 uint32_t rv; 147 uint32_t rv;
diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
index 2a730c470f62..996f7224f90e 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -790,11 +790,11 @@ static int __devinit asd_pci_probe(struct pci_dev *dev,
790 goto Err_remove; 790 goto Err_remove;
791 791
792 err = -ENODEV; 792 err = -ENODEV;
793 if (!pci_set_dma_mask(dev, DMA_64BIT_MASK) 793 if (!pci_set_dma_mask(dev, DMA_BIT_MASK(64))
794 && !pci_set_consistent_dma_mask(dev, DMA_64BIT_MASK)) 794 && !pci_set_consistent_dma_mask(dev, DMA_BIT_MASK(64)))
795 ; 795 ;
796 else if (!pci_set_dma_mask(dev, DMA_32BIT_MASK) 796 else if (!pci_set_dma_mask(dev, DMA_BIT_MASK(32))
797 && !pci_set_consistent_dma_mask(dev, DMA_32BIT_MASK)) 797 && !pci_set_consistent_dma_mask(dev, DMA_BIT_MASK(32)))
798 ; 798 ;
799 else { 799 else {
800 asd_printk("no suitable DMA mask for %s\n", pci_name(dev)); 800 asd_printk("no suitable DMA mask for %s\n", pci_name(dev));
diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
index 106c04d2d793..80aac01b5a6f 100644
--- a/drivers/scsi/arcmsr/arcmsr_hba.c
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c
@@ -393,9 +393,9 @@ static int arcmsr_probe(struct pci_dev *pdev,
393 acb = (struct AdapterControlBlock *)host->hostdata; 393 acb = (struct AdapterControlBlock *)host->hostdata;
394 memset(acb, 0, sizeof (struct AdapterControlBlock)); 394 memset(acb, 0, sizeof (struct AdapterControlBlock));
395 395
396 error = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 396 error = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
397 if (error) { 397 if (error) {
398 error = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 398 error = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
399 if (error) { 399 if (error) {
400 printk(KERN_WARNING 400 printk(KERN_WARNING
401 "scsi%d: No suitable DMA mask available\n", 401 "scsi%d: No suitable DMA mask available\n",
diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 20ca0a6374b5..b137e561f5bc 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -2568,7 +2568,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2568 if (pci_enable_device(pdev)) 2568 if (pci_enable_device(pdev))
2569 goto err_eio; 2569 goto err_eio;
2570 2570
2571 if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 2571 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
2572 printk(KERN_INFO "atp870u: use 32bit DMA mask.\n"); 2572 printk(KERN_INFO "atp870u: use 32bit DMA mask.\n");
2573 } else { 2573 } else {
2574 printk(KERN_ERR "atp870u: DMA mask required but not available.\n"); 2574 printk(KERN_ERR "atp870u: DMA mask required but not available.\n");
diff --git a/drivers/scsi/cxgb3i/Kbuild b/drivers/scsi/cxgb3i/Kbuild
index ee7d6d2f9c3b..25a2032bfa26 100644
--- a/drivers/scsi/cxgb3i/Kbuild
+++ b/drivers/scsi/cxgb3i/Kbuild
@@ -1,4 +1,4 @@
1EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/cxgb3 1EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/cxgb3
2 2
3cxgb3i-y := cxgb3i_init.o cxgb3i_iscsi.o cxgb3i_pdu.o cxgb3i_offload.o 3cxgb3i-y := cxgb3i_init.o cxgb3i_iscsi.o cxgb3i_pdu.o cxgb3i_offload.o cxgb3i_ddp.o
4obj-$(CONFIG_SCSI_CXGB3_ISCSI) += cxgb3i_ddp.o cxgb3i.o 4obj-$(CONFIG_SCSI_CXGB3_ISCSI) += cxgb3i.o
diff --git a/drivers/scsi/cxgb3i/cxgb3i.h b/drivers/scsi/cxgb3i/cxgb3i.h
index a7cf550b9cca..d362860e7504 100644
--- a/drivers/scsi/cxgb3i/cxgb3i.h
+++ b/drivers/scsi/cxgb3i/cxgb3i.h
@@ -66,10 +66,12 @@ struct cxgb3i_hba {
66 * @pdev: pointer to pci dev 66 * @pdev: pointer to pci dev
67 * @hba_cnt: # of hbas (the same as # of ports) 67 * @hba_cnt: # of hbas (the same as # of ports)
68 * @hba: all the hbas on this adapter 68 * @hba: all the hbas on this adapter
69 * @flags: bit flag for adapter event/status
69 * @tx_max_size: max. tx packet size supported 70 * @tx_max_size: max. tx packet size supported
70 * @rx_max_size: max. rx packet size supported 71 * @rx_max_size: max. rx packet size supported
71 * @tag_format: ddp tag format settings 72 * @tag_format: ddp tag format settings
72 */ 73 */
74#define CXGB3I_ADAPTER_FLAG_RESET 0x1
73struct cxgb3i_adapter { 75struct cxgb3i_adapter {
74 struct list_head list_head; 76 struct list_head list_head;
75 spinlock_t lock; 77 spinlock_t lock;
@@ -78,6 +80,7 @@ struct cxgb3i_adapter {
78 unsigned char hba_cnt; 80 unsigned char hba_cnt;
79 struct cxgb3i_hba *hba[MAX_NPORTS]; 81 struct cxgb3i_hba *hba[MAX_NPORTS];
80 82
83 unsigned int flags;
81 unsigned int tx_max_size; 84 unsigned int tx_max_size;
82 unsigned int rx_max_size; 85 unsigned int rx_max_size;
83 86
@@ -137,10 +140,9 @@ struct cxgb3i_task_data {
137int cxgb3i_iscsi_init(void); 140int cxgb3i_iscsi_init(void);
138void cxgb3i_iscsi_cleanup(void); 141void cxgb3i_iscsi_cleanup(void);
139 142
140struct cxgb3i_adapter *cxgb3i_adapter_add(struct t3cdev *); 143struct cxgb3i_adapter *cxgb3i_adapter_find_by_tdev(struct t3cdev *);
141void cxgb3i_adapter_remove(struct t3cdev *); 144void cxgb3i_adapter_open(struct t3cdev *);
142int cxgb3i_adapter_ulp_init(struct cxgb3i_adapter *); 145void cxgb3i_adapter_close(struct t3cdev *);
143void cxgb3i_adapter_ulp_cleanup(struct cxgb3i_adapter *);
144 146
145struct cxgb3i_hba *cxgb3i_hba_find_by_netdev(struct net_device *); 147struct cxgb3i_hba *cxgb3i_hba_find_by_netdev(struct net_device *);
146struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *, 148struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *,
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.c b/drivers/scsi/cxgb3i/cxgb3i_ddp.c
index 4eb6f5593b3e..d06a661c209f 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_ddp.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.c
@@ -23,19 +23,6 @@
23 23
24#include "cxgb3i_ddp.h" 24#include "cxgb3i_ddp.h"
25 25
26#define DRV_MODULE_NAME "cxgb3i_ddp"
27#define DRV_MODULE_VERSION "1.0.0"
28#define DRV_MODULE_RELDATE "Dec. 1, 2008"
29
30static char version[] =
31 "Chelsio S3xx iSCSI DDP " DRV_MODULE_NAME
32 " v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
33
34MODULE_AUTHOR("Karen Xie <kxie@chelsio.com>");
35MODULE_DESCRIPTION("cxgb3i ddp pagepod manager");
36MODULE_LICENSE("GPL");
37MODULE_VERSION(DRV_MODULE_VERSION);
38
39#define ddp_log_error(fmt...) printk(KERN_ERR "cxgb3i_ddp: ERR! " fmt) 26#define ddp_log_error(fmt...) printk(KERN_ERR "cxgb3i_ddp: ERR! " fmt)
40#define ddp_log_warn(fmt...) printk(KERN_WARNING "cxgb3i_ddp: WARN! " fmt) 27#define ddp_log_warn(fmt...) printk(KERN_WARNING "cxgb3i_ddp: WARN! " fmt)
41#define ddp_log_info(fmt...) printk(KERN_INFO "cxgb3i_ddp: " fmt) 28#define ddp_log_info(fmt...) printk(KERN_INFO "cxgb3i_ddp: " fmt)
@@ -66,9 +53,6 @@ static unsigned char ddp_page_order[DDP_PGIDX_MAX] = {0, 1, 2, 4};
66static unsigned char ddp_page_shift[DDP_PGIDX_MAX] = {12, 13, 14, 16}; 53static unsigned char ddp_page_shift[DDP_PGIDX_MAX] = {12, 13, 14, 16};
67static unsigned char page_idx = DDP_PGIDX_MAX; 54static unsigned char page_idx = DDP_PGIDX_MAX;
68 55
69static LIST_HEAD(cxgb3i_ddp_list);
70static DEFINE_RWLOCK(cxgb3i_ddp_rwlock);
71
72/* 56/*
73 * functions to program the pagepod in h/w 57 * functions to program the pagepod in h/w
74 */ 58 */
@@ -113,8 +97,8 @@ static int set_ddp_map(struct cxgb3i_ddp_info *ddp, struct pagepod_hdr *hdr,
113 return 0; 97 return 0;
114} 98}
115 99
116static int clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int idx, 100static void clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int tag,
117 unsigned int npods) 101 unsigned int idx, unsigned int npods)
118{ 102{
119 unsigned int pm_addr = (idx << PPOD_SIZE_SHIFT) + ddp->llimit; 103 unsigned int pm_addr = (idx << PPOD_SIZE_SHIFT) + ddp->llimit;
120 int i; 104 int i;
@@ -122,13 +106,17 @@ static int clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int idx,
122 for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) { 106 for (i = 0; i < npods; i++, idx++, pm_addr += PPOD_SIZE) {
123 struct sk_buff *skb = ddp->gl_skb[idx]; 107 struct sk_buff *skb = ddp->gl_skb[idx];
124 108
109 if (!skb) {
110 ddp_log_error("ddp tag 0x%x, 0x%x, %d/%u, skb NULL.\n",
111 tag, idx, i, npods);
112 continue;
113 }
125 ddp->gl_skb[idx] = NULL; 114 ddp->gl_skb[idx] = NULL;
126 memset((skb->head + sizeof(struct ulp_mem_io)), 0, PPOD_SIZE); 115 memset((skb->head + sizeof(struct ulp_mem_io)), 0, PPOD_SIZE);
127 ulp_mem_io_set_hdr(skb, pm_addr); 116 ulp_mem_io_set_hdr(skb, pm_addr);
128 skb->priority = CPL_PRIORITY_CONTROL; 117 skb->priority = CPL_PRIORITY_CONTROL;
129 cxgb3_ofld_send(ddp->tdev, skb); 118 cxgb3_ofld_send(ddp->tdev, skb);
130 } 119 }
131 return 0;
132} 120}
133 121
134static inline int ddp_find_unused_entries(struct cxgb3i_ddp_info *ddp, 122static inline int ddp_find_unused_entries(struct cxgb3i_ddp_info *ddp,
@@ -211,7 +199,6 @@ int cxgb3i_ddp_find_page_index(unsigned long pgsz)
211 ddp_log_debug("ddp page size 0x%lx not supported.\n", pgsz); 199 ddp_log_debug("ddp page size 0x%lx not supported.\n", pgsz);
212 return DDP_PGIDX_MAX; 200 return DDP_PGIDX_MAX;
213} 201}
214EXPORT_SYMBOL_GPL(cxgb3i_ddp_find_page_index);
215 202
216static inline void ddp_gl_unmap(struct pci_dev *pdev, 203static inline void ddp_gl_unmap(struct pci_dev *pdev,
217 struct cxgb3i_gather_list *gl) 204 struct cxgb3i_gather_list *gl)
@@ -334,7 +321,6 @@ error_out:
334 kfree(gl); 321 kfree(gl);
335 return NULL; 322 return NULL;
336} 323}
337EXPORT_SYMBOL_GPL(cxgb3i_ddp_make_gl);
338 324
339/** 325/**
340 * cxgb3i_ddp_release_gl - release a page buffer list 326 * cxgb3i_ddp_release_gl - release a page buffer list
@@ -348,7 +334,6 @@ void cxgb3i_ddp_release_gl(struct cxgb3i_gather_list *gl,
348 ddp_gl_unmap(pdev, gl); 334 ddp_gl_unmap(pdev, gl);
349 kfree(gl); 335 kfree(gl);
350} 336}
351EXPORT_SYMBOL_GPL(cxgb3i_ddp_release_gl);
352 337
353/** 338/**
354 * cxgb3i_ddp_tag_reserve - set up ddp for a data transfer 339 * cxgb3i_ddp_tag_reserve - set up ddp for a data transfer
@@ -430,7 +415,6 @@ unmark_entries:
430 ddp_unmark_entries(ddp, idx, npods); 415 ddp_unmark_entries(ddp, idx, npods);
431 return err; 416 return err;
432} 417}
433EXPORT_SYMBOL_GPL(cxgb3i_ddp_tag_reserve);
434 418
435/** 419/**
436 * cxgb3i_ddp_tag_release - release a ddp tag 420 * cxgb3i_ddp_tag_release - release a ddp tag
@@ -453,22 +437,21 @@ void cxgb3i_ddp_tag_release(struct t3cdev *tdev, u32 tag)
453 struct cxgb3i_gather_list *gl = ddp->gl_map[idx]; 437 struct cxgb3i_gather_list *gl = ddp->gl_map[idx];
454 unsigned int npods; 438 unsigned int npods;
455 439
456 if (!gl) { 440 if (!gl || !gl->nelem) {
457 ddp_log_error("release ddp 0x%x, idx 0x%x, gl NULL.\n", 441 ddp_log_error("release 0x%x, idx 0x%x, gl 0x%p, %u.\n",
458 tag, idx); 442 tag, idx, gl, gl ? gl->nelem : 0);
459 return; 443 return;
460 } 444 }
461 npods = (gl->nelem + PPOD_PAGES_MAX - 1) >> PPOD_PAGES_SHIFT; 445 npods = (gl->nelem + PPOD_PAGES_MAX - 1) >> PPOD_PAGES_SHIFT;
462 ddp_log_debug("ddp tag 0x%x, release idx 0x%x, npods %u.\n", 446 ddp_log_debug("ddp tag 0x%x, release idx 0x%x, npods %u.\n",
463 tag, idx, npods); 447 tag, idx, npods);
464 clear_ddp_map(ddp, idx, npods); 448 clear_ddp_map(ddp, tag, idx, npods);
465 ddp_unmark_entries(ddp, idx, npods); 449 ddp_unmark_entries(ddp, idx, npods);
466 cxgb3i_ddp_release_gl(gl, ddp->pdev); 450 cxgb3i_ddp_release_gl(gl, ddp->pdev);
467 } else 451 } else
468 ddp_log_error("ddp tag 0x%x, idx 0x%x > max 0x%x.\n", 452 ddp_log_error("ddp tag 0x%x, idx 0x%x > max 0x%x.\n",
469 tag, idx, ddp->nppods); 453 tag, idx, ddp->nppods);
470} 454}
471EXPORT_SYMBOL_GPL(cxgb3i_ddp_tag_release);
472 455
473static int setup_conn_pgidx(struct t3cdev *tdev, unsigned int tid, int pg_idx, 456static int setup_conn_pgidx(struct t3cdev *tdev, unsigned int tid, int pg_idx,
474 int reply) 457 int reply)
@@ -509,7 +492,6 @@ int cxgb3i_setup_conn_host_pagesize(struct t3cdev *tdev, unsigned int tid,
509{ 492{
510 return setup_conn_pgidx(tdev, tid, page_idx, reply); 493 return setup_conn_pgidx(tdev, tid, page_idx, reply);
511} 494}
512EXPORT_SYMBOL_GPL(cxgb3i_setup_conn_host_pagesize);
513 495
514/** 496/**
515 * cxgb3i_setup_conn_pagesize - setup the conn.'s ddp page size 497 * cxgb3i_setup_conn_pagesize - setup the conn.'s ddp page size
@@ -526,7 +508,6 @@ int cxgb3i_setup_conn_pagesize(struct t3cdev *tdev, unsigned int tid,
526 508
527 return setup_conn_pgidx(tdev, tid, pgidx, reply); 509 return setup_conn_pgidx(tdev, tid, pgidx, reply);
528} 510}
529EXPORT_SYMBOL_GPL(cxgb3i_setup_conn_pagesize);
530 511
531/** 512/**
532 * cxgb3i_setup_conn_digest - setup conn. digest setting 513 * cxgb3i_setup_conn_digest - setup conn. digest setting
@@ -562,26 +543,104 @@ int cxgb3i_setup_conn_digest(struct t3cdev *tdev, unsigned int tid,
562 cxgb3_ofld_send(tdev, skb); 543 cxgb3_ofld_send(tdev, skb);
563 return 0; 544 return 0;
564} 545}
565EXPORT_SYMBOL_GPL(cxgb3i_setup_conn_digest);
566 546
567static int ddp_init(struct t3cdev *tdev) 547
548/**
549 * cxgb3i_adapter_ddp_info - read the adapter's ddp information
550 * @tdev: t3cdev adapter
551 * @tformat: tag format
552 * @txsz: max tx pdu payload size, filled in by this func.
553 * @rxsz: max rx pdu payload size, filled in by this func.
554 * setup the tag format for a given iscsi entity
555 */
556int cxgb3i_adapter_ddp_info(struct t3cdev *tdev,
557 struct cxgb3i_tag_format *tformat,
558 unsigned int *txsz, unsigned int *rxsz)
559{
560 struct cxgb3i_ddp_info *ddp;
561 unsigned char idx_bits;
562
563 if (!tformat)
564 return -EINVAL;
565
566 if (!tdev->ulp_iscsi)
567 return -EINVAL;
568
569 ddp = (struct cxgb3i_ddp_info *)tdev->ulp_iscsi;
570
571 idx_bits = 32 - tformat->sw_bits;
572 tformat->rsvd_bits = ddp->idx_bits;
573 tformat->rsvd_shift = PPOD_IDX_SHIFT;
574 tformat->rsvd_mask = (1 << tformat->rsvd_bits) - 1;
575
576 ddp_log_info("tag format: sw %u, rsvd %u,%u, mask 0x%x.\n",
577 tformat->sw_bits, tformat->rsvd_bits,
578 tformat->rsvd_shift, tformat->rsvd_mask);
579
580 *txsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD,
581 ddp->max_txsz - ISCSI_PDU_NONPAYLOAD_LEN);
582 *rxsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD,
583 ddp->max_rxsz - ISCSI_PDU_NONPAYLOAD_LEN);
584 ddp_log_info("max payload size: %u/%u, %u/%u.\n",
585 *txsz, ddp->max_txsz, *rxsz, ddp->max_rxsz);
586 return 0;
587}
588
589/**
590 * cxgb3i_ddp_cleanup - release the cxgb3 adapter's ddp resource
591 * @tdev: t3cdev adapter
592 * release all the resource held by the ddp pagepod manager for a given
593 * adapter if needed
594 */
595void cxgb3i_ddp_cleanup(struct t3cdev *tdev)
596{
597 int i = 0;
598 struct cxgb3i_ddp_info *ddp = (struct cxgb3i_ddp_info *)tdev->ulp_iscsi;
599
600 ddp_log_info("t3dev 0x%p, release ddp 0x%p.\n", tdev, ddp);
601
602 if (ddp) {
603 tdev->ulp_iscsi = NULL;
604 while (i < ddp->nppods) {
605 struct cxgb3i_gather_list *gl = ddp->gl_map[i];
606 if (gl) {
607 int npods = (gl->nelem + PPOD_PAGES_MAX - 1)
608 >> PPOD_PAGES_SHIFT;
609 ddp_log_info("t3dev 0x%p, ddp %d + %d.\n",
610 tdev, i, npods);
611 kfree(gl);
612 ddp_free_gl_skb(ddp, i, npods);
613 i += npods;
614 } else
615 i++;
616 }
617 cxgb3i_free_big_mem(ddp);
618 }
619}
620
621/**
622 * ddp_init - initialize the cxgb3 adapter's ddp resource
623 * @tdev: t3cdev adapter
624 * initialize the ddp pagepod manager for a given adapter
625 */
626static void ddp_init(struct t3cdev *tdev)
568{ 627{
569 struct cxgb3i_ddp_info *ddp; 628 struct cxgb3i_ddp_info *ddp;
570 struct ulp_iscsi_info uinfo; 629 struct ulp_iscsi_info uinfo;
571 unsigned int ppmax, bits; 630 unsigned int ppmax, bits;
572 int i, err; 631 int i, err;
573 static int vers_printed;
574 632
575 if (!vers_printed) { 633 if (tdev->ulp_iscsi) {
576 printk(KERN_INFO "%s", version); 634 ddp_log_warn("t3dev 0x%p, ddp 0x%p already set up.\n",
577 vers_printed = 1; 635 tdev, tdev->ulp_iscsi);
636 return;
578 } 637 }
579 638
580 err = tdev->ctl(tdev, ULP_ISCSI_GET_PARAMS, &uinfo); 639 err = tdev->ctl(tdev, ULP_ISCSI_GET_PARAMS, &uinfo);
581 if (err < 0) { 640 if (err < 0) {
582 ddp_log_error("%s, failed to get iscsi param err=%d.\n", 641 ddp_log_error("%s, failed to get iscsi param err=%d.\n",
583 tdev->name, err); 642 tdev->name, err);
584 return err; 643 return;
585 } 644 }
586 645
587 ppmax = (uinfo.ulimit - uinfo.llimit + 1) >> PPOD_SIZE_SHIFT; 646 ppmax = (uinfo.ulimit - uinfo.llimit + 1) >> PPOD_SIZE_SHIFT;
@@ -598,7 +657,7 @@ static int ddp_init(struct t3cdev *tdev)
598 if (!ddp) { 657 if (!ddp) {
599 ddp_log_warn("%s unable to alloc ddp 0x%d, ddp disabled.\n", 658 ddp_log_warn("%s unable to alloc ddp 0x%d, ddp disabled.\n",
600 tdev->name, ppmax); 659 tdev->name, ppmax);
601 return 0; 660 return;
602 } 661 }
603 ddp->gl_map = (struct cxgb3i_gather_list **)(ddp + 1); 662 ddp->gl_map = (struct cxgb3i_gather_list **)(ddp + 1);
604 ddp->gl_skb = (struct sk_buff **)(((char *)ddp->gl_map) + 663 ddp->gl_skb = (struct sk_buff **)(((char *)ddp->gl_map) +
@@ -632,142 +691,26 @@ static int ddp_init(struct t3cdev *tdev)
632 691
633 tdev->ulp_iscsi = ddp; 692 tdev->ulp_iscsi = ddp;
634 693
635 /* add to the list */ 694 ddp_log_info("tdev 0x%p, nppods %u, bits %u, mask 0x%x,0x%x pkt %u/%u,"
636 write_lock(&cxgb3i_ddp_rwlock); 695 " %u/%u.\n",
637 list_add_tail(&ddp->list, &cxgb3i_ddp_list); 696 tdev, ppmax, ddp->idx_bits, ddp->idx_mask,
638 write_unlock(&cxgb3i_ddp_rwlock); 697 ddp->rsvd_tag_mask, ddp->max_txsz, uinfo.max_txsz,
639
640 ddp_log_info("nppods %u (0x%x ~ 0x%x), bits %u, mask 0x%x,0x%x "
641 "pkt %u/%u, %u/%u.\n",
642 ppmax, ddp->llimit, ddp->ulimit, ddp->idx_bits,
643 ddp->idx_mask, ddp->rsvd_tag_mask,
644 ddp->max_txsz, uinfo.max_txsz,
645 ddp->max_rxsz, uinfo.max_rxsz); 698 ddp->max_rxsz, uinfo.max_rxsz);
646 return 0; 699 return;
647 700
648free_ddp_map: 701free_ddp_map:
649 cxgb3i_free_big_mem(ddp); 702 cxgb3i_free_big_mem(ddp);
650 return err;
651}
652
653/**
654 * cxgb3i_adapter_ddp_init - initialize the adapter's ddp resource
655 * @tdev: t3cdev adapter
656 * @tformat: tag format
657 * @txsz: max tx pdu payload size, filled in by this func.
658 * @rxsz: max rx pdu payload size, filled in by this func.
659 * initialize the ddp pagepod manager for a given adapter if needed and
660 * setup the tag format for a given iscsi entity
661 */
662int cxgb3i_adapter_ddp_init(struct t3cdev *tdev,
663 struct cxgb3i_tag_format *tformat,
664 unsigned int *txsz, unsigned int *rxsz)
665{
666 struct cxgb3i_ddp_info *ddp;
667 unsigned char idx_bits;
668
669 if (!tformat)
670 return -EINVAL;
671
672 if (!tdev->ulp_iscsi) {
673 int err = ddp_init(tdev);
674 if (err < 0)
675 return err;
676 }
677 ddp = (struct cxgb3i_ddp_info *)tdev->ulp_iscsi;
678
679 idx_bits = 32 - tformat->sw_bits;
680 tformat->rsvd_bits = ddp->idx_bits;
681 tformat->rsvd_shift = PPOD_IDX_SHIFT;
682 tformat->rsvd_mask = (1 << tformat->rsvd_bits) - 1;
683
684 ddp_log_info("tag format: sw %u, rsvd %u,%u, mask 0x%x.\n",
685 tformat->sw_bits, tformat->rsvd_bits,
686 tformat->rsvd_shift, tformat->rsvd_mask);
687
688 *txsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD,
689 ddp->max_txsz - ISCSI_PDU_NONPAYLOAD_LEN);
690 *rxsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD,
691 ddp->max_rxsz - ISCSI_PDU_NONPAYLOAD_LEN);
692 ddp_log_info("max payload size: %u/%u, %u/%u.\n",
693 *txsz, ddp->max_txsz, *rxsz, ddp->max_rxsz);
694 return 0;
695}
696EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_init);
697
698static void ddp_release(struct cxgb3i_ddp_info *ddp)
699{
700 int i = 0;
701 struct t3cdev *tdev = ddp->tdev;
702
703 tdev->ulp_iscsi = NULL;
704 while (i < ddp->nppods) {
705 struct cxgb3i_gather_list *gl = ddp->gl_map[i];
706 if (gl) {
707 int npods = (gl->nelem + PPOD_PAGES_MAX - 1)
708 >> PPOD_PAGES_SHIFT;
709
710 kfree(gl);
711 ddp_free_gl_skb(ddp, i, npods);
712 } else
713 i++;
714 }
715 cxgb3i_free_big_mem(ddp);
716}
717
718/**
719 * cxgb3i_adapter_ddp_cleanup - release the adapter's ddp resource
720 * @tdev: t3cdev adapter
721 * release all the resource held by the ddp pagepod manager for a given
722 * adapter if needed
723 */
724void cxgb3i_adapter_ddp_cleanup(struct t3cdev *tdev)
725{
726 struct cxgb3i_ddp_info *ddp;
727
728 /* remove from the list */
729 write_lock(&cxgb3i_ddp_rwlock);
730 list_for_each_entry(ddp, &cxgb3i_ddp_list, list) {
731 if (ddp->tdev == tdev) {
732 list_del(&ddp->list);
733 break;
734 }
735 }
736 write_unlock(&cxgb3i_ddp_rwlock);
737
738 if (ddp)
739 ddp_release(ddp);
740}
741EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_cleanup);
742
743/**
744 * cxgb3i_ddp_init_module - module init entry point
745 * initialize any driver wide global data structures
746 */
747static int __init cxgb3i_ddp_init_module(void)
748{
749 page_idx = cxgb3i_ddp_find_page_index(PAGE_SIZE);
750 ddp_log_info("system PAGE_SIZE %lu, ddp idx %u.\n",
751 PAGE_SIZE, page_idx);
752 return 0;
753} 703}
754 704
755/** 705/**
756 * cxgb3i_ddp_exit_module - module cleanup/exit entry point 706 * cxgb3i_ddp_init - initialize ddp functions
757 * go through the ddp list and release any resource held.
758 */ 707 */
759static void __exit cxgb3i_ddp_exit_module(void) 708void cxgb3i_ddp_init(struct t3cdev *tdev)
760{ 709{
761 struct cxgb3i_ddp_info *ddp; 710 if (page_idx == DDP_PGIDX_MAX) {
762 711 page_idx = cxgb3i_ddp_find_page_index(PAGE_SIZE);
763 /* release all ddp manager if there is any */ 712 ddp_log_info("system PAGE_SIZE %lu, ddp idx %u.\n",
764 write_lock(&cxgb3i_ddp_rwlock); 713 PAGE_SIZE, page_idx);
765 list_for_each_entry(ddp, &cxgb3i_ddp_list, list) {
766 list_del(&ddp->list);
767 ddp_release(ddp);
768 } 714 }
769 write_unlock(&cxgb3i_ddp_rwlock); 715 ddp_init(tdev);
770} 716}
771
772module_init(cxgb3i_ddp_init_module);
773module_exit(cxgb3i_ddp_exit_module);
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.h b/drivers/scsi/cxgb3i/cxgb3i_ddp.h
index 75a63a81e873..0d296de7cf32 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_ddp.h
+++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.h
@@ -301,7 +301,9 @@ int cxgb3i_setup_conn_pagesize(struct t3cdev *, unsigned int tid, int reply,
301int cxgb3i_setup_conn_digest(struct t3cdev *, unsigned int tid, 301int cxgb3i_setup_conn_digest(struct t3cdev *, unsigned int tid,
302 int hcrc, int dcrc, int reply); 302 int hcrc, int dcrc, int reply);
303int cxgb3i_ddp_find_page_index(unsigned long pgsz); 303int cxgb3i_ddp_find_page_index(unsigned long pgsz);
304int cxgb3i_adapter_ddp_init(struct t3cdev *, struct cxgb3i_tag_format *, 304int cxgb3i_adapter_ddp_info(struct t3cdev *, struct cxgb3i_tag_format *,
305 unsigned int *txsz, unsigned int *rxsz); 305 unsigned int *txsz, unsigned int *rxsz);
306void cxgb3i_adapter_ddp_cleanup(struct t3cdev *); 306
307void cxgb3i_ddp_init(struct t3cdev *);
308void cxgb3i_ddp_cleanup(struct t3cdev *);
307#endif 309#endif
diff --git a/drivers/scsi/cxgb3i/cxgb3i_init.c b/drivers/scsi/cxgb3i/cxgb3i_init.c
index 1ce9f244e46c..042d9bce9914 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_init.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_init.c
@@ -12,8 +12,8 @@
12#include "cxgb3i.h" 12#include "cxgb3i.h"
13 13
14#define DRV_MODULE_NAME "cxgb3i" 14#define DRV_MODULE_NAME "cxgb3i"
15#define DRV_MODULE_VERSION "1.0.1" 15#define DRV_MODULE_VERSION "1.0.2"
16#define DRV_MODULE_RELDATE "Jan. 2009" 16#define DRV_MODULE_RELDATE "Mar. 2009"
17 17
18static char version[] = 18static char version[] =
19 "Chelsio S3xx iSCSI Driver " DRV_MODULE_NAME 19 "Chelsio S3xx iSCSI Driver " DRV_MODULE_NAME
@@ -26,6 +26,7 @@ MODULE_VERSION(DRV_MODULE_VERSION);
26 26
27static void open_s3_dev(struct t3cdev *); 27static void open_s3_dev(struct t3cdev *);
28static void close_s3_dev(struct t3cdev *); 28static void close_s3_dev(struct t3cdev *);
29static void s3_err_handler(struct t3cdev *tdev, u32 status, u32 error);
29 30
30static cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS]; 31static cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS];
31static struct cxgb3_client t3c_client = { 32static struct cxgb3_client t3c_client = {
@@ -33,6 +34,7 @@ static struct cxgb3_client t3c_client = {
33 .handlers = cxgb3i_cpl_handlers, 34 .handlers = cxgb3i_cpl_handlers,
34 .add = open_s3_dev, 35 .add = open_s3_dev,
35 .remove = close_s3_dev, 36 .remove = close_s3_dev,
37 .err_handler = s3_err_handler,
36}; 38};
37 39
38/** 40/**
@@ -48,8 +50,9 @@ static void open_s3_dev(struct t3cdev *t3dev)
48 vers_printed = 1; 50 vers_printed = 1;
49 } 51 }
50 52
53 cxgb3i_ddp_init(t3dev);
51 cxgb3i_sdev_add(t3dev, &t3c_client); 54 cxgb3i_sdev_add(t3dev, &t3c_client);
52 cxgb3i_adapter_add(t3dev); 55 cxgb3i_adapter_open(t3dev);
53} 56}
54 57
55/** 58/**
@@ -58,8 +61,28 @@ static void open_s3_dev(struct t3cdev *t3dev)
58 */ 61 */
59static void close_s3_dev(struct t3cdev *t3dev) 62static void close_s3_dev(struct t3cdev *t3dev)
60{ 63{
61 cxgb3i_adapter_remove(t3dev); 64 cxgb3i_adapter_close(t3dev);
62 cxgb3i_sdev_remove(t3dev); 65 cxgb3i_sdev_remove(t3dev);
66 cxgb3i_ddp_cleanup(t3dev);
67}
68
69static void s3_err_handler(struct t3cdev *tdev, u32 status, u32 error)
70{
71 struct cxgb3i_adapter *snic = cxgb3i_adapter_find_by_tdev(tdev);
72
73 cxgb3i_log_info("snic 0x%p, tdev 0x%p, status 0x%x, err 0x%x.\n",
74 snic, tdev, status, error);
75 if (!snic)
76 return;
77
78 switch (status) {
79 case OFFLOAD_STATUS_DOWN:
80 snic->flags |= CXGB3I_ADAPTER_FLAG_RESET;
81 break;
82 case OFFLOAD_STATUS_UP:
83 snic->flags &= ~CXGB3I_ADAPTER_FLAG_RESET;
84 break;
85 }
63} 86}
64 87
65/** 88/**
diff --git a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c
index e185dedc4c1f..fff8e4327644 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c
@@ -53,36 +53,52 @@ static LIST_HEAD(cxgb3i_snic_list);
53static DEFINE_RWLOCK(cxgb3i_snic_rwlock); 53static DEFINE_RWLOCK(cxgb3i_snic_rwlock);
54 54
55/** 55/**
56 * cxgb3i_adapter_add - init a s3 adapter structure and any h/w settings 56 * cxgb3i_adpater_find_by_tdev - find the cxgb3i_adapter structure via t3cdev
57 * @t3dev: t3cdev adapter 57 * @tdev: t3cdev pointer
58 * return the resulting cxgb3i_adapter struct
59 */ 58 */
60struct cxgb3i_adapter *cxgb3i_adapter_add(struct t3cdev *t3dev) 59struct cxgb3i_adapter *cxgb3i_adapter_find_by_tdev(struct t3cdev *tdev)
61{ 60{
62 struct cxgb3i_adapter *snic; 61 struct cxgb3i_adapter *snic;
63 struct adapter *adapter = tdev2adap(t3dev);
64 int i;
65 62
66 snic = kzalloc(sizeof(*snic), GFP_KERNEL); 63 read_lock(&cxgb3i_snic_rwlock);
67 if (!snic) { 64 list_for_each_entry(snic, &cxgb3i_snic_list, list_head) {
68 cxgb3i_api_debug("cxgb3 %s, OOM.\n", t3dev->name); 65 if (snic->tdev == tdev) {
69 return NULL; 66 read_unlock(&cxgb3i_snic_rwlock);
67 return snic;
68 }
70 } 69 }
71 spin_lock_init(&snic->lock); 70 read_unlock(&cxgb3i_snic_rwlock);
71 return NULL;
72}
73
74static inline int adapter_update(struct cxgb3i_adapter *snic)
75{
76 cxgb3i_log_info("snic 0x%p, t3dev 0x%p, updating.\n",
77 snic, snic->tdev);
78 return cxgb3i_adapter_ddp_info(snic->tdev, &snic->tag_format,
79 &snic->tx_max_size,
80 &snic->rx_max_size);
81}
82
83static int adapter_add(struct cxgb3i_adapter *snic)
84{
85 struct t3cdev *t3dev = snic->tdev;
86 struct adapter *adapter = tdev2adap(t3dev);
87 int i, err;
72 88
73 snic->tdev = t3dev;
74 snic->pdev = adapter->pdev; 89 snic->pdev = adapter->pdev;
75 snic->tag_format.sw_bits = sw_tag_idx_bits + sw_tag_age_bits; 90 snic->tag_format.sw_bits = sw_tag_idx_bits + sw_tag_age_bits;
76 91
77 if (cxgb3i_adapter_ddp_init(t3dev, &snic->tag_format, 92 err = cxgb3i_adapter_ddp_info(t3dev, &snic->tag_format,
78 &snic->tx_max_size, 93 &snic->tx_max_size,
79 &snic->rx_max_size) < 0) 94 &snic->rx_max_size);
80 goto free_snic; 95 if (err < 0)
96 return err;
81 97
82 for_each_port(adapter, i) { 98 for_each_port(adapter, i) {
83 snic->hba[i] = cxgb3i_hba_host_add(snic, adapter->port[i]); 99 snic->hba[i] = cxgb3i_hba_host_add(snic, adapter->port[i]);
84 if (!snic->hba[i]) 100 if (!snic->hba[i])
85 goto ulp_cleanup; 101 return -EINVAL;
86 } 102 }
87 snic->hba_cnt = adapter->params.nports; 103 snic->hba_cnt = adapter->params.nports;
88 104
@@ -91,46 +107,71 @@ struct cxgb3i_adapter *cxgb3i_adapter_add(struct t3cdev *t3dev)
91 list_add_tail(&snic->list_head, &cxgb3i_snic_list); 107 list_add_tail(&snic->list_head, &cxgb3i_snic_list);
92 write_unlock(&cxgb3i_snic_rwlock); 108 write_unlock(&cxgb3i_snic_rwlock);
93 109
94 return snic; 110 cxgb3i_log_info("t3dev 0x%p open, snic 0x%p, %u scsi hosts added.\n",
111 t3dev, snic, snic->hba_cnt);
112 return 0;
113}
95 114
96ulp_cleanup: 115/**
97 cxgb3i_adapter_ddp_cleanup(t3dev); 116 * cxgb3i_adapter_open - init a s3 adapter structure and any h/w settings
98free_snic: 117 * @t3dev: t3cdev adapter
99 kfree(snic); 118 */
100 return NULL; 119void cxgb3i_adapter_open(struct t3cdev *t3dev)
120{
121 struct cxgb3i_adapter *snic = cxgb3i_adapter_find_by_tdev(t3dev);
122 int err;
123
124 if (snic)
125 err = adapter_update(snic);
126 else {
127 snic = kzalloc(sizeof(*snic), GFP_KERNEL);
128 if (snic) {
129 spin_lock_init(&snic->lock);
130 snic->tdev = t3dev;
131 err = adapter_add(snic);
132 } else
133 err = -ENOMEM;
134 }
135
136 if (err < 0) {
137 cxgb3i_log_info("snic 0x%p, f 0x%x, t3dev 0x%p open, err %d.\n",
138 snic, snic ? snic->flags : 0, t3dev, err);
139 if (snic) {
140 snic->flags &= ~CXGB3I_ADAPTER_FLAG_RESET;
141 cxgb3i_adapter_close(t3dev);
142 }
143 }
101} 144}
102 145
103/** 146/**
104 * cxgb3i_adapter_remove - release the resources held and cleanup h/w settings 147 * cxgb3i_adapter_close - release the resources held and cleanup h/w settings
105 * @t3dev: t3cdev adapter 148 * @t3dev: t3cdev adapter
106 */ 149 */
107void cxgb3i_adapter_remove(struct t3cdev *t3dev) 150void cxgb3i_adapter_close(struct t3cdev *t3dev)
108{ 151{
152 struct cxgb3i_adapter *snic = cxgb3i_adapter_find_by_tdev(t3dev);
109 int i; 153 int i;
110 struct cxgb3i_adapter *snic; 154
155 if (!snic || snic->flags & CXGB3I_ADAPTER_FLAG_RESET) {
156 cxgb3i_log_info("t3dev 0x%p close, snic 0x%p, f 0x%x.\n",
157 t3dev, snic, snic ? snic->flags : 0);
158 return;
159 }
111 160
112 /* remove from the list */ 161 /* remove from the list */
113 write_lock(&cxgb3i_snic_rwlock); 162 write_lock(&cxgb3i_snic_rwlock);
114 list_for_each_entry(snic, &cxgb3i_snic_list, list_head) { 163 list_del(&snic->list_head);
115 if (snic->tdev == t3dev) {
116 list_del(&snic->list_head);
117 break;
118 }
119 }
120 write_unlock(&cxgb3i_snic_rwlock); 164 write_unlock(&cxgb3i_snic_rwlock);
121 165
122 if (snic) { 166 for (i = 0; i < snic->hba_cnt; i++) {
123 for (i = 0; i < snic->hba_cnt; i++) { 167 if (snic->hba[i]) {
124 if (snic->hba[i]) { 168 cxgb3i_hba_host_remove(snic->hba[i]);
125 cxgb3i_hba_host_remove(snic->hba[i]); 169 snic->hba[i] = NULL;
126 snic->hba[i] = NULL;
127 }
128 } 170 }
129
130 /* release ddp resources */
131 cxgb3i_adapter_ddp_cleanup(snic->tdev);
132 kfree(snic);
133 } 171 }
172 cxgb3i_log_info("t3dev 0x%p close, snic 0x%p, %u scsi hosts removed.\n",
173 t3dev, snic, snic->hba_cnt);
174 kfree(snic);
134} 175}
135 176
136/** 177/**
@@ -170,7 +211,8 @@ struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *snic,
170 shost = iscsi_host_alloc(&cxgb3i_host_template, 211 shost = iscsi_host_alloc(&cxgb3i_host_template,
171 sizeof(struct cxgb3i_hba), 1); 212 sizeof(struct cxgb3i_hba), 1);
172 if (!shost) { 213 if (!shost) {
173 cxgb3i_log_info("iscsi_host_alloc failed.\n"); 214 cxgb3i_log_info("snic 0x%p, ndev 0x%p, host_alloc failed.\n",
215 snic, ndev);
174 return NULL; 216 return NULL;
175 } 217 }
176 218
@@ -188,7 +230,8 @@ struct cxgb3i_hba *cxgb3i_hba_host_add(struct cxgb3i_adapter *snic,
188 pci_dev_get(snic->pdev); 230 pci_dev_get(snic->pdev);
189 err = iscsi_host_add(shost, &snic->pdev->dev); 231 err = iscsi_host_add(shost, &snic->pdev->dev);
190 if (err) { 232 if (err) {
191 cxgb3i_log_info("iscsi_host_add failed.\n"); 233 cxgb3i_log_info("snic 0x%p, ndev 0x%p, host_add failed.\n",
234 snic, ndev);
192 goto pci_dev_put; 235 goto pci_dev_put;
193 } 236 }
194 237
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.c b/drivers/scsi/cxgb3i/cxgb3i_offload.c
index c2e434e54e28..4d8654cdbdae 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_offload.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_offload.c
@@ -94,29 +94,30 @@ static int c3cn_get_port(struct s3_conn *c3cn, struct cxgb3i_sdev_data *cdata)
94 if (!cdata) 94 if (!cdata)
95 goto error_out; 95 goto error_out;
96 96
97 if (c3cn->saddr.sin_port != 0) { 97 if (c3cn->saddr.sin_port) {
98 idx = ntohs(c3cn->saddr.sin_port) - cxgb3_sport_base; 98 cxgb3i_log_error("connect, sin_port NON-ZERO %u.\n",
99 if (idx < 0 || idx >= cxgb3_max_connect) 99 c3cn->saddr.sin_port);
100 return 0; 100 return -EADDRINUSE;
101 if (!test_and_set_bit(idx, cdata->sport_map))
102 return -EADDRINUSE;
103 } 101 }
104 102
105 /* the sport_map_next may not be accurate but that is okay, sport_map 103 spin_lock_bh(&cdata->lock);
106 should be */ 104 start = idx = cdata->sport_next;
107 start = idx = cdata->sport_map_next;
108 do { 105 do {
109 if (++idx >= cxgb3_max_connect) 106 if (++idx >= cxgb3_max_connect)
110 idx = 0; 107 idx = 0;
111 if (!(test_and_set_bit(idx, cdata->sport_map))) { 108 if (!cdata->sport_conn[idx]) {
112 c3cn->saddr.sin_port = htons(cxgb3_sport_base + idx); 109 c3cn->saddr.sin_port = htons(cxgb3_sport_base + idx);
113 cdata->sport_map_next = idx; 110 cdata->sport_next = idx;
111 cdata->sport_conn[idx] = c3cn;
112 spin_unlock_bh(&cdata->lock);
113
114 c3cn_conn_debug("%s reserve port %u.\n", 114 c3cn_conn_debug("%s reserve port %u.\n",
115 cdata->cdev->name, 115 cdata->cdev->name,
116 cxgb3_sport_base + idx); 116 cxgb3_sport_base + idx);
117 return 0; 117 return 0;
118 } 118 }
119 } while (idx != start); 119 } while (idx != start);
120 spin_unlock_bh(&cdata->lock);
120 121
121error_out: 122error_out:
122 return -EADDRNOTAVAIL; 123 return -EADDRNOTAVAIL;
@@ -124,15 +125,19 @@ error_out:
124 125
125static void c3cn_put_port(struct s3_conn *c3cn) 126static void c3cn_put_port(struct s3_conn *c3cn)
126{ 127{
127 struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(c3cn->cdev); 128 if (!c3cn->cdev)
129 return;
128 130
129 if (c3cn->saddr.sin_port) { 131 if (c3cn->saddr.sin_port) {
132 struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(c3cn->cdev);
130 int idx = ntohs(c3cn->saddr.sin_port) - cxgb3_sport_base; 133 int idx = ntohs(c3cn->saddr.sin_port) - cxgb3_sport_base;
131 134
132 c3cn->saddr.sin_port = 0; 135 c3cn->saddr.sin_port = 0;
133 if (idx < 0 || idx >= cxgb3_max_connect) 136 if (idx < 0 || idx >= cxgb3_max_connect)
134 return; 137 return;
135 clear_bit(idx, cdata->sport_map); 138 spin_lock_bh(&cdata->lock);
139 cdata->sport_conn[idx] = NULL;
140 spin_unlock_bh(&cdata->lock);
136 c3cn_conn_debug("%s, release port %u.\n", 141 c3cn_conn_debug("%s, release port %u.\n",
137 cdata->cdev->name, cxgb3_sport_base + idx); 142 cdata->cdev->name, cxgb3_sport_base + idx);
138 } 143 }
@@ -1305,11 +1310,7 @@ static void c3cn_release_offload_resources(struct s3_conn *c3cn)
1305 struct t3cdev *cdev = c3cn->cdev; 1310 struct t3cdev *cdev = c3cn->cdev;
1306 unsigned int tid = c3cn->tid; 1311 unsigned int tid = c3cn->tid;
1307 1312
1308 if (!cdev)
1309 return;
1310
1311 c3cn->qset = 0; 1313 c3cn->qset = 0;
1312
1313 c3cn_free_cpl_skbs(c3cn); 1314 c3cn_free_cpl_skbs(c3cn);
1314 1315
1315 if (c3cn->wr_avail != c3cn->wr_max) { 1316 if (c3cn->wr_avail != c3cn->wr_max) {
@@ -1317,18 +1318,22 @@ static void c3cn_release_offload_resources(struct s3_conn *c3cn)
1317 reset_wr_list(c3cn); 1318 reset_wr_list(c3cn);
1318 } 1319 }
1319 1320
1320 if (c3cn->l2t) { 1321 if (cdev) {
1321 l2t_release(L2DATA(cdev), c3cn->l2t); 1322 if (c3cn->l2t) {
1322 c3cn->l2t = NULL; 1323 l2t_release(L2DATA(cdev), c3cn->l2t);
1323 } 1324 c3cn->l2t = NULL;
1324 1325 }
1325 if (c3cn->state == C3CN_STATE_CONNECTING) /* we have ATID */ 1326 if (c3cn->state == C3CN_STATE_CONNECTING)
1326 s3_free_atid(cdev, tid); 1327 /* we have ATID */
1327 else { /* we have TID */ 1328 s3_free_atid(cdev, tid);
1328 cxgb3_remove_tid(cdev, (void *)c3cn, tid); 1329 else {
1329 c3cn_put(c3cn); 1330 /* we have TID */
1331 cxgb3_remove_tid(cdev, (void *)c3cn, tid);
1332 c3cn_put(c3cn);
1333 }
1330 } 1334 }
1331 1335
1336 c3cn->dst_cache = NULL;
1332 c3cn->cdev = NULL; 1337 c3cn->cdev = NULL;
1333} 1338}
1334 1339
@@ -1417,17 +1422,18 @@ static void c3cn_active_close(struct s3_conn *c3cn)
1417} 1422}
1418 1423
1419/** 1424/**
1420 * cxgb3i_c3cn_release - close and release an iscsi tcp connection 1425 * cxgb3i_c3cn_release - close and release an iscsi tcp connection and any
1426 * resource held
1421 * @c3cn: the iscsi tcp connection 1427 * @c3cn: the iscsi tcp connection
1422 */ 1428 */
1423void cxgb3i_c3cn_release(struct s3_conn *c3cn) 1429void cxgb3i_c3cn_release(struct s3_conn *c3cn)
1424{ 1430{
1425 c3cn_conn_debug("c3cn 0x%p, s %u, f 0x%lx.\n", 1431 c3cn_conn_debug("c3cn 0x%p, s %u, f 0x%lx.\n",
1426 c3cn, c3cn->state, c3cn->flags); 1432 c3cn, c3cn->state, c3cn->flags);
1427 if (likely(c3cn->state != C3CN_STATE_CONNECTING)) 1433 if (unlikely(c3cn->state == C3CN_STATE_CONNECTING))
1428 c3cn_active_close(c3cn);
1429 else
1430 c3cn_set_flag(c3cn, C3CN_ACTIVE_CLOSE_NEEDED); 1434 c3cn_set_flag(c3cn, C3CN_ACTIVE_CLOSE_NEEDED);
1435 else if (likely(c3cn->state != C3CN_STATE_CLOSED))
1436 c3cn_active_close(c3cn);
1431 c3cn_put(c3cn); 1437 c3cn_put(c3cn);
1432} 1438}
1433 1439
@@ -1656,7 +1662,6 @@ int cxgb3i_c3cn_connect(struct s3_conn *c3cn, struct sockaddr_in *usin)
1656 c3cn_set_state(c3cn, C3CN_STATE_CLOSED); 1662 c3cn_set_state(c3cn, C3CN_STATE_CLOSED);
1657 ip_rt_put(rt); 1663 ip_rt_put(rt);
1658 c3cn_put_port(c3cn); 1664 c3cn_put_port(c3cn);
1659 c3cn->daddr.sin_port = 0;
1660 return err; 1665 return err;
1661} 1666}
1662 1667
@@ -1776,10 +1781,25 @@ out_err:
1776static void sdev_data_cleanup(struct cxgb3i_sdev_data *cdata) 1781static void sdev_data_cleanup(struct cxgb3i_sdev_data *cdata)
1777{ 1782{
1778 struct adap_ports *ports = &cdata->ports; 1783 struct adap_ports *ports = &cdata->ports;
1784 struct s3_conn *c3cn;
1779 int i; 1785 int i;
1780 1786
1787 for (i = 0; i < cxgb3_max_connect; i++) {
1788 if (cdata->sport_conn[i]) {
1789 c3cn = cdata->sport_conn[i];
1790 cdata->sport_conn[i] = NULL;
1791
1792 spin_lock_bh(&c3cn->lock);
1793 c3cn->cdev = NULL;
1794 c3cn_set_flag(c3cn, C3CN_OFFLOAD_DOWN);
1795 c3cn_closed(c3cn);
1796 spin_unlock_bh(&c3cn->lock);
1797 }
1798 }
1799
1781 for (i = 0; i < ports->nports; i++) 1800 for (i = 0; i < ports->nports; i++)
1782 NDEV2CDATA(ports->lldevs[i]) = NULL; 1801 NDEV2CDATA(ports->lldevs[i]) = NULL;
1802
1783 cxgb3i_free_big_mem(cdata); 1803 cxgb3i_free_big_mem(cdata);
1784} 1804}
1785 1805
@@ -1821,21 +1841,27 @@ void cxgb3i_sdev_add(struct t3cdev *cdev, struct cxgb3_client *client)
1821 struct cxgb3i_sdev_data *cdata; 1841 struct cxgb3i_sdev_data *cdata;
1822 struct ofld_page_info rx_page_info; 1842 struct ofld_page_info rx_page_info;
1823 unsigned int wr_len; 1843 unsigned int wr_len;
1824 int mapsize = DIV_ROUND_UP(cxgb3_max_connect, 1844 int mapsize = cxgb3_max_connect * sizeof(struct s3_conn *);
1825 8 * sizeof(unsigned long));
1826 int i; 1845 int i;
1827 1846
1828 cdata = cxgb3i_alloc_big_mem(sizeof(*cdata) + mapsize, GFP_KERNEL); 1847 cdata = cxgb3i_alloc_big_mem(sizeof(*cdata) + mapsize, GFP_KERNEL);
1829 if (!cdata) 1848 if (!cdata) {
1849 cxgb3i_log_warn("t3dev 0x%p, offload up, OOM %d.\n",
1850 cdev, mapsize);
1830 return; 1851 return;
1852 }
1831 1853
1832 if (cdev->ctl(cdev, GET_WR_LEN, &wr_len) < 0 || 1854 if (cdev->ctl(cdev, GET_WR_LEN, &wr_len) < 0 ||
1833 cdev->ctl(cdev, GET_PORTS, &cdata->ports) < 0 || 1855 cdev->ctl(cdev, GET_PORTS, &cdata->ports) < 0 ||
1834 cdev->ctl(cdev, GET_RX_PAGE_INFO, &rx_page_info) < 0) 1856 cdev->ctl(cdev, GET_RX_PAGE_INFO, &rx_page_info) < 0) {
1857 cxgb3i_log_warn("t3dev 0x%p, offload up, ioctl failed.\n",
1858 cdev);
1835 goto free_cdata; 1859 goto free_cdata;
1860 }
1836 1861
1837 s3_init_wr_tab(wr_len); 1862 s3_init_wr_tab(wr_len);
1838 1863
1864 spin_lock_init(&cdata->lock);
1839 INIT_LIST_HEAD(&cdata->list); 1865 INIT_LIST_HEAD(&cdata->list);
1840 cdata->cdev = cdev; 1866 cdata->cdev = cdev;
1841 cdata->client = client; 1867 cdata->client = client;
@@ -1847,6 +1873,7 @@ void cxgb3i_sdev_add(struct t3cdev *cdev, struct cxgb3_client *client)
1847 list_add_tail(&cdata->list, &cdata_list); 1873 list_add_tail(&cdata->list, &cdata_list);
1848 write_unlock(&cdata_rwlock); 1874 write_unlock(&cdata_rwlock);
1849 1875
1876 cxgb3i_log_info("t3dev 0x%p, offload up, added.\n", cdev);
1850 return; 1877 return;
1851 1878
1852free_cdata: 1879free_cdata:
@@ -1861,6 +1888,8 @@ void cxgb3i_sdev_remove(struct t3cdev *cdev)
1861{ 1888{
1862 struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(cdev); 1889 struct cxgb3i_sdev_data *cdata = CXGB3_SDEV_DATA(cdev);
1863 1890
1891 cxgb3i_log_info("t3dev 0x%p, offload down, remove.\n", cdev);
1892
1864 write_lock(&cdata_rwlock); 1893 write_lock(&cdata_rwlock);
1865 list_del(&cdata->list); 1894 list_del(&cdata->list);
1866 write_unlock(&cdata_rwlock); 1895 write_unlock(&cdata_rwlock);
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.h b/drivers/scsi/cxgb3i/cxgb3i_offload.h
index 275f23f16eb7..ebfca960c0a9 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_offload.h
+++ b/drivers/scsi/cxgb3i/cxgb3i_offload.h
@@ -16,7 +16,7 @@
16#define _CXGB3I_OFFLOAD_H 16#define _CXGB3I_OFFLOAD_H
17 17
18#include <linux/skbuff.h> 18#include <linux/skbuff.h>
19#include <net/tcp.h> 19#include <linux/in.h>
20 20
21#include "common.h" 21#include "common.h"
22#include "adapter.h" 22#include "adapter.h"
@@ -135,11 +135,11 @@ enum c3cn_flags {
135 C3CN_ABORT_RPL_PENDING, /* expecting an abort reply */ 135 C3CN_ABORT_RPL_PENDING, /* expecting an abort reply */
136 C3CN_TX_DATA_SENT, /* already sent a TX_DATA WR */ 136 C3CN_TX_DATA_SENT, /* already sent a TX_DATA WR */
137 C3CN_ACTIVE_CLOSE_NEEDED, /* need to be closed */ 137 C3CN_ACTIVE_CLOSE_NEEDED, /* need to be closed */
138 C3CN_OFFLOAD_DOWN /* offload function off */
138}; 139};
139 140
140/** 141/**
141 * cxgb3i_sdev_data - Per adapter data. 142 * cxgb3i_sdev_data - Per adapter data.
142 *
143 * Linked off of each Ethernet device port on the adapter. 143 * Linked off of each Ethernet device port on the adapter.
144 * Also available via the t3cdev structure since we have pointers to our port 144 * Also available via the t3cdev structure since we have pointers to our port
145 * net_device's there ... 145 * net_device's there ...
@@ -148,16 +148,17 @@ enum c3cn_flags {
148 * @cdev: t3cdev adapter 148 * @cdev: t3cdev adapter
149 * @client: CPL client pointer 149 * @client: CPL client pointer
150 * @ports: array of adapter ports 150 * @ports: array of adapter ports
151 * @sport_map_next: next index into the port map 151 * @sport_next: next port
152 * @sport_map: source port map 152 * @sport_conn: source port connection
153 */ 153 */
154struct cxgb3i_sdev_data { 154struct cxgb3i_sdev_data {
155 struct list_head list; 155 struct list_head list;
156 struct t3cdev *cdev; 156 struct t3cdev *cdev;
157 struct cxgb3_client *client; 157 struct cxgb3_client *client;
158 struct adap_ports ports; 158 struct adap_ports ports;
159 unsigned int sport_map_next; 159 spinlock_t lock;
160 unsigned long sport_map[0]; 160 unsigned int sport_next;
161 struct s3_conn *sport_conn[0];
161}; 162};
162#define NDEV2CDATA(ndev) (*(struct cxgb3i_sdev_data **)&(ndev)->ec_ptr) 163#define NDEV2CDATA(ndev) (*(struct cxgb3i_sdev_data **)&(ndev)->ec_ptr)
163#define CXGB3_SDEV_DATA(cdev) NDEV2CDATA((cdev)->lldev) 164#define CXGB3_SDEV_DATA(cdev) NDEV2CDATA((cdev)->lldev)
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index 6194ed5d02c4..b6af63ca980b 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -1014,15 +1014,15 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
1014 * See if we should enable dma64 mode. 1014 * See if we should enable dma64 mode.
1015 */ 1015 */
1016 if (sizeof(dma_addr_t) > 4 && 1016 if (sizeof(dma_addr_t) > 4 &&
1017 pci_set_dma_mask(pDev, DMA_64BIT_MASK) == 0) { 1017 pci_set_dma_mask(pDev, DMA_BIT_MASK(64)) == 0) {
1018 if (dma_get_required_mask(&pDev->dev) > DMA_32BIT_MASK) 1018 if (dma_get_required_mask(&pDev->dev) > DMA_BIT_MASK(32))
1019 dma64 = 1; 1019 dma64 = 1;
1020 } 1020 }
1021 if (!dma64 && pci_set_dma_mask(pDev, DMA_32BIT_MASK) != 0) 1021 if (!dma64 && pci_set_dma_mask(pDev, DMA_BIT_MASK(32)) != 0)
1022 return -EINVAL; 1022 return -EINVAL;
1023 1023
1024 /* adapter only supports message blocks below 4GB */ 1024 /* adapter only supports message blocks below 4GB */
1025 pci_set_consistent_dma_mask(pDev, DMA_32BIT_MASK); 1025 pci_set_consistent_dma_mask(pDev, DMA_BIT_MASK(32));
1026 1026
1027 base_addr0_phys = pci_resource_start(pDev,0); 1027 base_addr0_phys = pci_resource_start(pDev,0);
1028 hba_map0_area_size = pci_resource_len(pDev,0); 1028 hba_map0_area_size = pci_resource_len(pDev,0);
diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
index 976cdd5c94ef..be5099dd94b5 100644
--- a/drivers/scsi/eata.c
+++ b/drivers/scsi/eata.c
@@ -1426,7 +1426,7 @@ static int port_detect(unsigned long port_base, unsigned int j,
1426 1426
1427 if (ha->pdev) { 1427 if (ha->pdev) {
1428 pci_set_master(ha->pdev); 1428 pci_set_master(ha->pdev);
1429 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) 1429 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(32)))
1430 printk("%s: warning, pci_set_dma_mask failed.\n", 1430 printk("%s: warning, pci_set_dma_mask failed.\n",
1431 ha->board_name); 1431 ha->board_name);
1432 } 1432 }
diff --git a/drivers/scsi/fcoe/Makefile b/drivers/scsi/fcoe/Makefile
index b78da06d7c0e..950f27615c76 100644
--- a/drivers/scsi/fcoe/Makefile
+++ b/drivers/scsi/fcoe/Makefile
@@ -1,8 +1,2 @@
1# $Id: Makefile
2
3obj-$(CONFIG_FCOE) += fcoe.o 1obj-$(CONFIG_FCOE) += fcoe.o
4 2obj-$(CONFIG_LIBFCOE) += libfcoe.o
5fcoe-y := \
6 libfcoe.o \
7 fcoe_sw.o \
8 fc_transport_fcoe.o
diff --git a/drivers/scsi/fcoe/fc_transport_fcoe.c b/drivers/scsi/fcoe/fc_transport_fcoe.c
deleted file mode 100644
index 8862758006c0..000000000000
--- a/drivers/scsi/fcoe/fc_transport_fcoe.c
+++ /dev/null
@@ -1,443 +0,0 @@
1/*
2 * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
16 *
17 * Maintained at www.Open-FCoE.org
18 */
19
20#include <linux/pci.h>
21#include <scsi/libfcoe.h>
22#include <scsi/fc_transport_fcoe.h>
23
24/* internal fcoe transport */
25struct fcoe_transport_internal {
26 struct fcoe_transport *t;
27 struct net_device *netdev;
28 struct list_head list;
29};
30
31/* fcoe transports list and its lock */
32static LIST_HEAD(fcoe_transports);
33static DEFINE_MUTEX(fcoe_transports_lock);
34
35/**
36 * fcoe_transport_default() - Returns ptr to the default transport fcoe_sw
37 */
38struct fcoe_transport *fcoe_transport_default(void)
39{
40 return &fcoe_sw_transport;
41}
42
43/**
44 * fcoe_transport_to_pcidev() - get the pci dev from a netdev
45 * @netdev: the netdev that pci dev will be retrived from
46 *
47 * Returns: NULL or the corrsponding pci_dev
48 */
49struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev)
50{
51 if (!netdev->dev.parent)
52 return NULL;
53 return to_pci_dev(netdev->dev.parent);
54}
55
56/**
57 * fcoe_transport_device_lookup() - Lookup a transport
58 * @netdev: the netdev the transport to be attached to
59 *
60 * This will look for existing offload driver, if not found, it falls back to
61 * the default sw hba (fcoe_sw) as its fcoe transport.
62 *
63 * Returns: 0 for success
64 */
65static struct fcoe_transport_internal *
66fcoe_transport_device_lookup(struct fcoe_transport *t,
67 struct net_device *netdev)
68{
69 struct fcoe_transport_internal *ti;
70
71 /* assign the transpor to this device */
72 mutex_lock(&t->devlock);
73 list_for_each_entry(ti, &t->devlist, list) {
74 if (ti->netdev == netdev) {
75 mutex_unlock(&t->devlock);
76 return ti;
77 }
78 }
79 mutex_unlock(&t->devlock);
80 return NULL;
81}
82/**
83 * fcoe_transport_device_add() - Assign a transport to a device
84 * @netdev: the netdev the transport to be attached to
85 *
86 * This will look for existing offload driver, if not found, it falls back to
87 * the default sw hba (fcoe_sw) as its fcoe transport.
88 *
89 * Returns: 0 for success
90 */
91static int fcoe_transport_device_add(struct fcoe_transport *t,
92 struct net_device *netdev)
93{
94 struct fcoe_transport_internal *ti;
95
96 ti = fcoe_transport_device_lookup(t, netdev);
97 if (ti) {
98 printk(KERN_DEBUG "fcoe_transport_device_add:"
99 "device %s is already added to transport %s\n",
100 netdev->name, t->name);
101 return -EEXIST;
102 }
103 /* allocate an internal struct to host the netdev and the list */
104 ti = kzalloc(sizeof(*ti), GFP_KERNEL);
105 if (!ti)
106 return -ENOMEM;
107
108 ti->t = t;
109 ti->netdev = netdev;
110 INIT_LIST_HEAD(&ti->list);
111 dev_hold(ti->netdev);
112
113 mutex_lock(&t->devlock);
114 list_add(&ti->list, &t->devlist);
115 mutex_unlock(&t->devlock);
116
117 printk(KERN_DEBUG "fcoe_transport_device_add:"
118 "device %s added to transport %s\n",
119 netdev->name, t->name);
120
121 return 0;
122}
123
124/**
125 * fcoe_transport_device_remove() - Remove a device from its transport
126 * @netdev: the netdev the transport to be attached to
127 *
128 * This removes the device from the transport so the given transport will
129 * not manage this device any more
130 *
131 * Returns: 0 for success
132 */
133static int fcoe_transport_device_remove(struct fcoe_transport *t,
134 struct net_device *netdev)
135{
136 struct fcoe_transport_internal *ti;
137
138 ti = fcoe_transport_device_lookup(t, netdev);
139 if (!ti) {
140 printk(KERN_DEBUG "fcoe_transport_device_remove:"
141 "device %s is not managed by transport %s\n",
142 netdev->name, t->name);
143 return -ENODEV;
144 }
145 mutex_lock(&t->devlock);
146 list_del(&ti->list);
147 mutex_unlock(&t->devlock);
148 printk(KERN_DEBUG "fcoe_transport_device_remove:"
149 "device %s removed from transport %s\n",
150 netdev->name, t->name);
151 dev_put(ti->netdev);
152 kfree(ti);
153 return 0;
154}
155
156/**
157 * fcoe_transport_device_remove_all() - Remove all from transport devlist
158 *
159 * This removes the device from the transport so the given transport will
160 * not manage this device any more
161 *
162 * Returns: 0 for success
163 */
164static void fcoe_transport_device_remove_all(struct fcoe_transport *t)
165{
166 struct fcoe_transport_internal *ti, *tmp;
167
168 mutex_lock(&t->devlock);
169 list_for_each_entry_safe(ti, tmp, &t->devlist, list) {
170 list_del(&ti->list);
171 kfree(ti);
172 }
173 mutex_unlock(&t->devlock);
174}
175
176/**
177 * fcoe_transport_match() - Use the bus device match function to match the hw
178 * @t: The fcoe transport to check
179 * @netdev: The netdev to match against
180 *
181 * This function is used to check if the given transport wants to manage the
182 * input netdev. if the transports implements the match function, it will be
183 * called, o.w. we just compare the pci vendor and device id.
184 *
185 * Returns: true for match up
186 */
187static bool fcoe_transport_match(struct fcoe_transport *t,
188 struct net_device *netdev)
189{
190 /* match transport by vendor and device id */
191 struct pci_dev *pci;
192
193 pci = fcoe_transport_pcidev(netdev);
194
195 if (pci) {
196 printk(KERN_DEBUG "fcoe_transport_match:"
197 "%s:%x:%x -- %s:%x:%x\n",
198 t->name, t->vendor, t->device,
199 netdev->name, pci->vendor, pci->device);
200
201 /* if transport supports match */
202 if (t->match)
203 return t->match(netdev);
204
205 /* else just compare the vendor and device id: pci only */
206 return (t->vendor == pci->vendor) && (t->device == pci->device);
207 }
208 return false;
209}
210
211/**
212 * fcoe_transport_lookup() - Check if the transport is already registered
213 * @t: the transport to be looked up
214 *
215 * This compares the parent device (pci) vendor and device id
216 *
217 * Returns: NULL if not found
218 *
219 * TODO: return default sw transport if no other transport is found
220 */
221static struct fcoe_transport *
222fcoe_transport_lookup(struct net_device *netdev)
223{
224 struct fcoe_transport *t;
225
226 mutex_lock(&fcoe_transports_lock);
227 list_for_each_entry(t, &fcoe_transports, list) {
228 if (fcoe_transport_match(t, netdev)) {
229 mutex_unlock(&fcoe_transports_lock);
230 return t;
231 }
232 }
233 mutex_unlock(&fcoe_transports_lock);
234
235 printk(KERN_DEBUG "fcoe_transport_lookup:"
236 "use default transport for %s\n", netdev->name);
237 return fcoe_transport_default();
238}
239
240/**
241 * fcoe_transport_register() - Adds a fcoe transport to the fcoe transports list
242 * @t: ptr to the fcoe transport to be added
243 *
244 * Returns: 0 for success
245 */
246int fcoe_transport_register(struct fcoe_transport *t)
247{
248 struct fcoe_transport *tt;
249
250 /* TODO - add fcoe_transport specific initialization here */
251 mutex_lock(&fcoe_transports_lock);
252 list_for_each_entry(tt, &fcoe_transports, list) {
253 if (tt == t) {
254 mutex_unlock(&fcoe_transports_lock);
255 return -EEXIST;
256 }
257 }
258 list_add_tail(&t->list, &fcoe_transports);
259 mutex_unlock(&fcoe_transports_lock);
260
261 printk(KERN_DEBUG "fcoe_transport_register:%s\n", t->name);
262
263 return 0;
264}
265EXPORT_SYMBOL_GPL(fcoe_transport_register);
266
267/**
268 * fcoe_transport_unregister() - Remove the tranport fro the fcoe transports list
269 * @t: ptr to the fcoe transport to be removed
270 *
271 * Returns: 0 for success
272 */
273int fcoe_transport_unregister(struct fcoe_transport *t)
274{
275 struct fcoe_transport *tt, *tmp;
276
277 mutex_lock(&fcoe_transports_lock);
278 list_for_each_entry_safe(tt, tmp, &fcoe_transports, list) {
279 if (tt == t) {
280 list_del(&t->list);
281 mutex_unlock(&fcoe_transports_lock);
282 fcoe_transport_device_remove_all(t);
283 printk(KERN_DEBUG "fcoe_transport_unregister:%s\n",
284 t->name);
285 return 0;
286 }
287 }
288 mutex_unlock(&fcoe_transports_lock);
289 return -ENODEV;
290}
291EXPORT_SYMBOL_GPL(fcoe_transport_unregister);
292
293/**
294 * fcoe_load_transport_driver() - Load an offload driver by alias name
295 * @netdev: the target net device
296 *
297 * Requests for an offload driver module as the fcoe transport, if fails, it
298 * falls back to use the SW HBA (fcoe_sw) as its transport
299 *
300 * TODO -
301 * 1. supports only PCI device
302 * 2. needs fix for VLAn and bonding
303 * 3. pure hw fcoe hba may not have netdev
304 *
305 * Returns: 0 for success
306 */
307int fcoe_load_transport_driver(struct net_device *netdev)
308{
309 struct pci_dev *pci;
310 struct device *dev = netdev->dev.parent;
311
312 if (fcoe_transport_lookup(netdev)) {
313 /* load default transport */
314 printk(KERN_DEBUG "fcoe: already loaded transport for %s\n",
315 netdev->name);
316 return -EEXIST;
317 }
318
319 pci = to_pci_dev(dev);
320 if (dev->bus != &pci_bus_type) {
321 printk(KERN_DEBUG "fcoe: support noly PCI device\n");
322 return -ENODEV;
323 }
324 printk(KERN_DEBUG "fcoe: loading driver fcoe-pci-0x%04x-0x%04x\n",
325 pci->vendor, pci->device);
326
327 return request_module("fcoe-pci-0x%04x-0x%04x",
328 pci->vendor, pci->device);
329
330}
331EXPORT_SYMBOL_GPL(fcoe_load_transport_driver);
332
333/**
334 * fcoe_transport_attach() - Load transport to fcoe
335 * @netdev: the netdev the transport to be attached to
336 *
337 * This will look for existing offload driver, if not found, it falls back to
338 * the default sw hba (fcoe_sw) as its fcoe transport.
339 *
340 * Returns: 0 for success
341 */
342int fcoe_transport_attach(struct net_device *netdev)
343{
344 struct fcoe_transport *t;
345
346 /* find the corresponding transport */
347 t = fcoe_transport_lookup(netdev);
348 if (!t) {
349 printk(KERN_DEBUG "fcoe_transport_attach"
350 ":no transport for %s:use %s\n",
351 netdev->name, t->name);
352 return -ENODEV;
353 }
354 /* add to the transport */
355 if (fcoe_transport_device_add(t, netdev)) {
356 printk(KERN_DEBUG "fcoe_transport_attach"
357 ":failed to add %s to tramsport %s\n",
358 netdev->name, t->name);
359 return -EIO;
360 }
361 /* transport create function */
362 if (t->create)
363 t->create(netdev);
364
365 printk(KERN_DEBUG "fcoe_transport_attach:transport %s for %s\n",
366 t->name, netdev->name);
367 return 0;
368}
369EXPORT_SYMBOL_GPL(fcoe_transport_attach);
370
371/**
372 * fcoe_transport_release() - Unload transport from fcoe
373 * @netdev: the net device on which fcoe is to be released
374 *
375 * Returns: 0 for success
376 */
377int fcoe_transport_release(struct net_device *netdev)
378{
379 struct fcoe_transport *t;
380
381 /* find the corresponding transport */
382 t = fcoe_transport_lookup(netdev);
383 if (!t) {
384 printk(KERN_DEBUG "fcoe_transport_release:"
385 "no transport for %s:use %s\n",
386 netdev->name, t->name);
387 return -ENODEV;
388 }
389 /* remove the device from the transport */
390 if (fcoe_transport_device_remove(t, netdev)) {
391 printk(KERN_DEBUG "fcoe_transport_release:"
392 "failed to add %s to tramsport %s\n",
393 netdev->name, t->name);
394 return -EIO;
395 }
396 /* transport destroy function */
397 if (t->destroy)
398 t->destroy(netdev);
399
400 printk(KERN_DEBUG "fcoe_transport_release:"
401 "device %s dettached from transport %s\n",
402 netdev->name, t->name);
403
404 return 0;
405}
406EXPORT_SYMBOL_GPL(fcoe_transport_release);
407
408/**
409 * fcoe_transport_init() - Initializes fcoe transport layer
410 *
411 * This prepares for the fcoe transport layer
412 *
413 * Returns: none
414 */
415int __init fcoe_transport_init(void)
416{
417 INIT_LIST_HEAD(&fcoe_transports);
418 mutex_init(&fcoe_transports_lock);
419 return 0;
420}
421
422/**
423 * fcoe_transport_exit() - Cleans up the fcoe transport layer
424 *
425 * This cleans up the fcoe transport layer. removing any transport on the list,
426 * note that the transport destroy func is not called here.
427 *
428 * Returns: none
429 */
430int __exit fcoe_transport_exit(void)
431{
432 struct fcoe_transport *t, *tmp;
433
434 mutex_lock(&fcoe_transports_lock);
435 list_for_each_entry_safe(t, tmp, &fcoe_transports, list) {
436 list_del(&t->list);
437 mutex_unlock(&fcoe_transports_lock);
438 fcoe_transport_device_remove_all(t);
439 mutex_lock(&fcoe_transports_lock);
440 }
441 mutex_unlock(&fcoe_transports_lock);
442 return 0;
443}
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
new file mode 100644
index 000000000000..94e1e3189773
--- /dev/null
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -0,0 +1,1878 @@
1/*
2 * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
16 *
17 * Maintained at www.Open-FCoE.org
18 */
19
20#include <linux/module.h>
21#include <linux/version.h>
22#include <linux/spinlock.h>
23#include <linux/netdevice.h>
24#include <linux/etherdevice.h>
25#include <linux/ethtool.h>
26#include <linux/if_ether.h>
27#include <linux/if_vlan.h>
28#include <linux/crc32.h>
29#include <linux/cpu.h>
30#include <linux/fs.h>
31#include <linux/sysfs.h>
32#include <linux/ctype.h>
33#include <scsi/scsi_tcq.h>
34#include <scsi/scsicam.h>
35#include <scsi/scsi_transport.h>
36#include <scsi/scsi_transport_fc.h>
37#include <net/rtnetlink.h>
38
39#include <scsi/fc/fc_encaps.h>
40#include <scsi/fc/fc_fip.h>
41
42#include <scsi/libfc.h>
43#include <scsi/fc_frame.h>
44#include <scsi/libfcoe.h>
45
46#include "fcoe.h"
47
48static int debug_fcoe;
49
50MODULE_AUTHOR("Open-FCoE.org");
51MODULE_DESCRIPTION("FCoE");
52MODULE_LICENSE("GPL v2");
53
54/* fcoe host list */
55LIST_HEAD(fcoe_hostlist);
56DEFINE_RWLOCK(fcoe_hostlist_lock);
57DEFINE_TIMER(fcoe_timer, NULL, 0, 0);
58DEFINE_PER_CPU(struct fcoe_percpu_s, fcoe_percpu);
59
60/* Function Prototyes */
61static int fcoe_reset(struct Scsi_Host *shost);
62static int fcoe_xmit(struct fc_lport *, struct fc_frame *);
63static int fcoe_rcv(struct sk_buff *, struct net_device *,
64 struct packet_type *, struct net_device *);
65static int fcoe_percpu_receive_thread(void *arg);
66static void fcoe_clean_pending_queue(struct fc_lport *lp);
67static void fcoe_percpu_clean(struct fc_lport *lp);
68static int fcoe_link_ok(struct fc_lport *lp);
69
70static struct fc_lport *fcoe_hostlist_lookup(const struct net_device *);
71static int fcoe_hostlist_add(const struct fc_lport *);
72static int fcoe_hostlist_remove(const struct fc_lport *);
73
74static int fcoe_check_wait_queue(struct fc_lport *);
75static int fcoe_device_notification(struct notifier_block *, ulong, void *);
76static void fcoe_dev_setup(void);
77static void fcoe_dev_cleanup(void);
78
79/* notification function from net device */
80static struct notifier_block fcoe_notifier = {
81 .notifier_call = fcoe_device_notification,
82};
83
84static struct scsi_transport_template *scsi_transport_fcoe_sw;
85
86struct fc_function_template fcoe_transport_function = {
87 .show_host_node_name = 1,
88 .show_host_port_name = 1,
89 .show_host_supported_classes = 1,
90 .show_host_supported_fc4s = 1,
91 .show_host_active_fc4s = 1,
92 .show_host_maxframe_size = 1,
93
94 .show_host_port_id = 1,
95 .show_host_supported_speeds = 1,
96 .get_host_speed = fc_get_host_speed,
97 .show_host_speed = 1,
98 .show_host_port_type = 1,
99 .get_host_port_state = fc_get_host_port_state,
100 .show_host_port_state = 1,
101 .show_host_symbolic_name = 1,
102
103 .dd_fcrport_size = sizeof(struct fc_rport_libfc_priv),
104 .show_rport_maxframe_size = 1,
105 .show_rport_supported_classes = 1,
106
107 .show_host_fabric_name = 1,
108 .show_starget_node_name = 1,
109 .show_starget_port_name = 1,
110 .show_starget_port_id = 1,
111 .set_rport_dev_loss_tmo = fc_set_rport_loss_tmo,
112 .show_rport_dev_loss_tmo = 1,
113 .get_fc_host_stats = fc_get_host_stats,
114 .issue_fc_host_lip = fcoe_reset,
115
116 .terminate_rport_io = fc_rport_terminate_io,
117};
118
119static struct scsi_host_template fcoe_shost_template = {
120 .module = THIS_MODULE,
121 .name = "FCoE Driver",
122 .proc_name = FCOE_NAME,
123 .queuecommand = fc_queuecommand,
124 .eh_abort_handler = fc_eh_abort,
125 .eh_device_reset_handler = fc_eh_device_reset,
126 .eh_host_reset_handler = fc_eh_host_reset,
127 .slave_alloc = fc_slave_alloc,
128 .change_queue_depth = fc_change_queue_depth,
129 .change_queue_type = fc_change_queue_type,
130 .this_id = -1,
131 .cmd_per_lun = 32,
132 .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS,
133 .use_clustering = ENABLE_CLUSTERING,
134 .sg_tablesize = SG_ALL,
135 .max_sectors = 0xffff,
136};
137
138/**
139 * fcoe_lport_config() - sets up the fc_lport
140 * @lp: ptr to the fc_lport
141 * @shost: ptr to the parent scsi host
142 *
143 * Returns: 0 for success
144 */
145static int fcoe_lport_config(struct fc_lport *lp)
146{
147 lp->link_up = 0;
148 lp->qfull = 0;
149 lp->max_retry_count = 3;
150 lp->e_d_tov = 2 * 1000; /* FC-FS default */
151 lp->r_a_tov = 2 * 2 * 1000;
152 lp->service_params = (FCP_SPPF_INIT_FCN | FCP_SPPF_RD_XRDY_DIS |
153 FCP_SPPF_RETRY | FCP_SPPF_CONF_COMPL);
154
155 fc_lport_init_stats(lp);
156
157 /* lport fc_lport related configuration */
158 fc_lport_config(lp);
159
160 /* offload related configuration */
161 lp->crc_offload = 0;
162 lp->seq_offload = 0;
163 lp->lro_enabled = 0;
164 lp->lro_xid = 0;
165 lp->lso_max = 0;
166
167 return 0;
168}
169
170/**
171 * fcoe_netdev_config() - Set up netdev for SW FCoE
172 * @lp : ptr to the fc_lport
173 * @netdev : ptr to the associated netdevice struct
174 *
175 * Must be called after fcoe_lport_config() as it will use lport mutex
176 *
177 * Returns : 0 for success
178 */
179static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev)
180{
181 u32 mfs;
182 u64 wwnn, wwpn;
183 struct fcoe_softc *fc;
184 u8 flogi_maddr[ETH_ALEN];
185
186 /* Setup lport private data to point to fcoe softc */
187 fc = lport_priv(lp);
188 fc->ctlr.lp = lp;
189 fc->real_dev = netdev;
190 fc->phys_dev = netdev;
191
192 /* Require support for get_pauseparam ethtool op. */
193 if (netdev->priv_flags & IFF_802_1Q_VLAN)
194 fc->phys_dev = vlan_dev_real_dev(netdev);
195
196 /* Do not support for bonding device */
197 if ((fc->real_dev->priv_flags & IFF_MASTER_ALB) ||
198 (fc->real_dev->priv_flags & IFF_SLAVE_INACTIVE) ||
199 (fc->real_dev->priv_flags & IFF_MASTER_8023AD)) {
200 return -EOPNOTSUPP;
201 }
202
203 /*
204 * Determine max frame size based on underlying device and optional
205 * user-configured limit. If the MFS is too low, fcoe_link_ok()
206 * will return 0, so do this first.
207 */
208 mfs = fc->real_dev->mtu - (sizeof(struct fcoe_hdr) +
209 sizeof(struct fcoe_crc_eof));
210 if (fc_set_mfs(lp, mfs))
211 return -EINVAL;
212
213 /* offload features support */
214 if (fc->real_dev->features & NETIF_F_SG)
215 lp->sg_supp = 1;
216
217#ifdef NETIF_F_FCOE_CRC
218 if (netdev->features & NETIF_F_FCOE_CRC) {
219 lp->crc_offload = 1;
220 printk(KERN_DEBUG "fcoe:%s supports FCCRC offload\n",
221 netdev->name);
222 }
223#endif
224#ifdef NETIF_F_FSO
225 if (netdev->features & NETIF_F_FSO) {
226 lp->seq_offload = 1;
227 lp->lso_max = netdev->gso_max_size;
228 printk(KERN_DEBUG "fcoe:%s supports LSO for max len 0x%x\n",
229 netdev->name, lp->lso_max);
230 }
231#endif
232 if (netdev->fcoe_ddp_xid) {
233 lp->lro_enabled = 1;
234 lp->lro_xid = netdev->fcoe_ddp_xid;
235 printk(KERN_DEBUG "fcoe:%s supports LRO for max xid 0x%x\n",
236 netdev->name, lp->lro_xid);
237 }
238 skb_queue_head_init(&fc->fcoe_pending_queue);
239 fc->fcoe_pending_queue_active = 0;
240
241 /* setup Source Mac Address */
242 memcpy(fc->ctlr.ctl_src_addr, fc->real_dev->dev_addr,
243 fc->real_dev->addr_len);
244
245 wwnn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 1, 0);
246 fc_set_wwnn(lp, wwnn);
247 /* XXX - 3rd arg needs to be vlan id */
248 wwpn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 2, 0);
249 fc_set_wwpn(lp, wwpn);
250
251 /*
252 * Add FCoE MAC address as second unicast MAC address
253 * or enter promiscuous mode if not capable of listening
254 * for multiple unicast MACs.
255 */
256 rtnl_lock();
257 memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN);
258 dev_unicast_add(fc->real_dev, flogi_maddr, ETH_ALEN);
259 rtnl_unlock();
260
261 /*
262 * setup the receive function from ethernet driver
263 * on the ethertype for the given device
264 */
265 fc->fcoe_packet_type.func = fcoe_rcv;
266 fc->fcoe_packet_type.type = __constant_htons(ETH_P_FCOE);
267 fc->fcoe_packet_type.dev = fc->real_dev;
268 dev_add_pack(&fc->fcoe_packet_type);
269
270 return 0;
271}
272
273/**
274 * fcoe_shost_config() - Sets up fc_lport->host
275 * @lp : ptr to the fc_lport
276 * @shost : ptr to the associated scsi host
277 * @dev : device associated to scsi host
278 *
279 * Must be called after fcoe_lport_config() and fcoe_netdev_config()
280 *
281 * Returns : 0 for success
282 */
283static int fcoe_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
284 struct device *dev)
285{
286 int rc = 0;
287
288 /* lport scsi host config */
289 lp->host = shost;
290
291 lp->host->max_lun = FCOE_MAX_LUN;
292 lp->host->max_id = FCOE_MAX_FCP_TARGET;
293 lp->host->max_channel = 0;
294 lp->host->transportt = scsi_transport_fcoe_sw;
295
296 /* add the new host to the SCSI-ml */
297 rc = scsi_add_host(lp->host, dev);
298 if (rc) {
299 FC_DBG("fcoe_shost_config:error on scsi_add_host\n");
300 return rc;
301 }
302 sprintf(fc_host_symbolic_name(lp->host), "%s v%s over %s",
303 FCOE_NAME, FCOE_VERSION,
304 fcoe_netdev(lp)->name);
305
306 return 0;
307}
308
309/**
310 * fcoe_em_config() - allocates em for this lport
311 * @lp: the port that em is to allocated for
312 *
313 * Returns : 0 on success
314 */
315static inline int fcoe_em_config(struct fc_lport *lp)
316{
317 BUG_ON(lp->emp);
318
319 lp->emp = fc_exch_mgr_alloc(lp, FC_CLASS_3,
320 FCOE_MIN_XID, FCOE_MAX_XID);
321 if (!lp->emp)
322 return -ENOMEM;
323
324 return 0;
325}
326
327/**
328 * fcoe_if_destroy() - FCoE software HBA tear-down function
329 * @netdev: ptr to the associated net_device
330 *
331 * Returns: 0 if link is OK for use by FCoE.
332 */
333static int fcoe_if_destroy(struct net_device *netdev)
334{
335 struct fc_lport *lp = NULL;
336 struct fcoe_softc *fc;
337 u8 flogi_maddr[ETH_ALEN];
338
339 BUG_ON(!netdev);
340
341 printk(KERN_DEBUG "fcoe_if_destroy:interface on %s\n",
342 netdev->name);
343
344 lp = fcoe_hostlist_lookup(netdev);
345 if (!lp)
346 return -ENODEV;
347
348 fc = lport_priv(lp);
349
350 /* Logout of the fabric */
351 fc_fabric_logoff(lp);
352
353 /* Remove the instance from fcoe's list */
354 fcoe_hostlist_remove(lp);
355
356 /* Don't listen for Ethernet packets anymore */
357 dev_remove_pack(&fc->fcoe_packet_type);
358 dev_remove_pack(&fc->fip_packet_type);
359 fcoe_ctlr_destroy(&fc->ctlr);
360
361 /* Cleanup the fc_lport */
362 fc_lport_destroy(lp);
363 fc_fcp_destroy(lp);
364
365 /* Detach from the scsi-ml */
366 fc_remove_host(lp->host);
367 scsi_remove_host(lp->host);
368
369 /* There are no more rports or I/O, free the EM */
370 if (lp->emp)
371 fc_exch_mgr_free(lp->emp);
372
373 /* Delete secondary MAC addresses */
374 rtnl_lock();
375 memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN);
376 dev_unicast_delete(fc->real_dev, flogi_maddr, ETH_ALEN);
377 if (!is_zero_ether_addr(fc->ctlr.data_src_addr))
378 dev_unicast_delete(fc->real_dev,
379 fc->ctlr.data_src_addr, ETH_ALEN);
380 dev_mc_delete(fc->real_dev, FIP_ALL_ENODE_MACS, ETH_ALEN, 0);
381 rtnl_unlock();
382
383 /* Free the per-CPU revieve threads */
384 fcoe_percpu_clean(lp);
385
386 /* Free existing skbs */
387 fcoe_clean_pending_queue(lp);
388
389 /* Free memory used by statistical counters */
390 fc_lport_free_stats(lp);
391
392 /* Release the net_device and Scsi_Host */
393 dev_put(fc->real_dev);
394 scsi_host_put(lp->host);
395
396 return 0;
397}
398
399/*
400 * fcoe_ddp_setup - calls LLD's ddp_setup through net_device
401 * @lp: the corresponding fc_lport
402 * @xid: the exchange id for this ddp transfer
403 * @sgl: the scatterlist describing this transfer
404 * @sgc: number of sg items
405 *
406 * Returns : 0 no ddp
407 */
408static int fcoe_ddp_setup(struct fc_lport *lp, u16 xid,
409 struct scatterlist *sgl, unsigned int sgc)
410{
411 struct net_device *n = fcoe_netdev(lp);
412
413 if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_setup)
414 return n->netdev_ops->ndo_fcoe_ddp_setup(n, xid, sgl, sgc);
415
416 return 0;
417}
418
419/*
420 * fcoe_ddp_done - calls LLD's ddp_done through net_device
421 * @lp: the corresponding fc_lport
422 * @xid: the exchange id for this ddp transfer
423 *
424 * Returns : the length of data that have been completed by ddp
425 */
426static int fcoe_ddp_done(struct fc_lport *lp, u16 xid)
427{
428 struct net_device *n = fcoe_netdev(lp);
429
430 if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_done)
431 return n->netdev_ops->ndo_fcoe_ddp_done(n, xid);
432 return 0;
433}
434
435static struct libfc_function_template fcoe_libfc_fcn_templ = {
436 .frame_send = fcoe_xmit,
437 .ddp_setup = fcoe_ddp_setup,
438 .ddp_done = fcoe_ddp_done,
439};
440
441/**
442 * fcoe_fip_recv - handle a received FIP frame.
443 * @skb: the receive skb
444 * @dev: associated &net_device
445 * @ptype: the &packet_type structure which was used to register this handler.
446 * @orig_dev: original receive &net_device, in case @dev is a bond.
447 *
448 * Returns: 0 for success
449 */
450static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *dev,
451 struct packet_type *ptype,
452 struct net_device *orig_dev)
453{
454 struct fcoe_softc *fc;
455
456 fc = container_of(ptype, struct fcoe_softc, fip_packet_type);
457 fcoe_ctlr_recv(&fc->ctlr, skb);
458 return 0;
459}
460
461/**
462 * fcoe_fip_send() - send an Ethernet-encapsulated FIP frame.
463 * @fip: FCoE controller.
464 * @skb: FIP Packet.
465 */
466static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
467{
468 skb->dev = fcoe_from_ctlr(fip)->real_dev;
469 dev_queue_xmit(skb);
470}
471
472/**
473 * fcoe_update_src_mac() - Update Ethernet MAC filters.
474 * @fip: FCoE controller.
475 * @old: Unicast MAC address to delete if the MAC is non-zero.
476 * @new: Unicast MAC address to add.
477 *
478 * Remove any previously-set unicast MAC filter.
479 * Add secondary FCoE MAC address filter for our OUI.
480 */
481static void fcoe_update_src_mac(struct fcoe_ctlr *fip, u8 *old, u8 *new)
482{
483 struct fcoe_softc *fc;
484
485 fc = fcoe_from_ctlr(fip);
486 rtnl_lock();
487 if (!is_zero_ether_addr(old))
488 dev_unicast_delete(fc->real_dev, old, ETH_ALEN);
489 dev_unicast_add(fc->real_dev, new, ETH_ALEN);
490 rtnl_unlock();
491}
492
493/**
494 * fcoe_if_create() - this function creates the fcoe interface
495 * @netdev: pointer the associated netdevice
496 *
497 * Creates fc_lport struct and scsi_host for lport, configures lport
498 * and starts fabric login.
499 *
500 * Returns : 0 on success
501 */
502static int fcoe_if_create(struct net_device *netdev)
503{
504 int rc;
505 struct fc_lport *lp = NULL;
506 struct fcoe_softc *fc;
507 struct Scsi_Host *shost;
508
509 BUG_ON(!netdev);
510
511 printk(KERN_DEBUG "fcoe_if_create:interface on %s\n",
512 netdev->name);
513
514 lp = fcoe_hostlist_lookup(netdev);
515 if (lp)
516 return -EEXIST;
517
518 shost = libfc_host_alloc(&fcoe_shost_template,
519 sizeof(struct fcoe_softc));
520 if (!shost) {
521 FC_DBG("Could not allocate host structure\n");
522 return -ENOMEM;
523 }
524 lp = shost_priv(shost);
525 fc = lport_priv(lp);
526
527 /* configure fc_lport, e.g., em */
528 rc = fcoe_lport_config(lp);
529 if (rc) {
530 FC_DBG("Could not configure lport\n");
531 goto out_host_put;
532 }
533
534 /* configure lport network properties */
535 rc = fcoe_netdev_config(lp, netdev);
536 if (rc) {
537 FC_DBG("Could not configure netdev for lport\n");
538 goto out_host_put;
539 }
540
541 /*
542 * Initialize FIP.
543 */
544 fcoe_ctlr_init(&fc->ctlr);
545 fc->ctlr.send = fcoe_fip_send;
546 fc->ctlr.update_mac = fcoe_update_src_mac;
547
548 fc->fip_packet_type.func = fcoe_fip_recv;
549 fc->fip_packet_type.type = htons(ETH_P_FIP);
550 fc->fip_packet_type.dev = fc->real_dev;
551 dev_add_pack(&fc->fip_packet_type);
552
553 /* configure lport scsi host properties */
554 rc = fcoe_shost_config(lp, shost, &netdev->dev);
555 if (rc) {
556 FC_DBG("Could not configure shost for lport\n");
557 goto out_host_put;
558 }
559
560 /* lport exch manager allocation */
561 rc = fcoe_em_config(lp);
562 if (rc) {
563 FC_DBG("Could not configure em for lport\n");
564 goto out_host_put;
565 }
566
567 /* Initialize the library */
568 rc = fcoe_libfc_config(lp, &fcoe_libfc_fcn_templ);
569 if (rc) {
570 FC_DBG("Could not configure libfc for lport!\n");
571 goto out_lp_destroy;
572 }
573
574 /* add to lports list */
575 fcoe_hostlist_add(lp);
576
577 lp->boot_time = jiffies;
578
579 fc_fabric_login(lp);
580
581 if (!fcoe_link_ok(lp))
582 fcoe_ctlr_link_up(&fc->ctlr);
583
584 dev_hold(netdev);
585
586 return rc;
587
588out_lp_destroy:
589 fc_exch_mgr_free(lp->emp); /* Free the EM */
590out_host_put:
591 scsi_host_put(lp->host);
592 return rc;
593}
594
595/**
596 * fcoe_if_init() - attach to scsi transport
597 *
598 * Returns : 0 on success
599 */
600static int __init fcoe_if_init(void)
601{
602 /* attach to scsi transport */
603 scsi_transport_fcoe_sw =
604 fc_attach_transport(&fcoe_transport_function);
605
606 if (!scsi_transport_fcoe_sw) {
607 printk(KERN_ERR "fcoe_init:fc_attach_transport() failed\n");
608 return -ENODEV;
609 }
610
611 return 0;
612}
613
614/**
615 * fcoe_if_exit() - detach from scsi transport
616 *
617 * Returns : 0 on success
618 */
619int __exit fcoe_if_exit(void)
620{
621 fc_release_transport(scsi_transport_fcoe_sw);
622 return 0;
623}
624
625/**
626 * fcoe_percpu_thread_create() - Create a receive thread for an online cpu
627 * @cpu: cpu index for the online cpu
628 */
629static void fcoe_percpu_thread_create(unsigned int cpu)
630{
631 struct fcoe_percpu_s *p;
632 struct task_struct *thread;
633
634 p = &per_cpu(fcoe_percpu, cpu);
635
636 thread = kthread_create(fcoe_percpu_receive_thread,
637 (void *)p, "fcoethread/%d", cpu);
638
639 if (likely(!IS_ERR(p->thread))) {
640 kthread_bind(thread, cpu);
641 wake_up_process(thread);
642
643 spin_lock_bh(&p->fcoe_rx_list.lock);
644 p->thread = thread;
645 spin_unlock_bh(&p->fcoe_rx_list.lock);
646 }
647}
648
649/**
650 * fcoe_percpu_thread_destroy() - removes the rx thread for the given cpu
651 * @cpu: cpu index the rx thread is to be removed
652 *
653 * Destroys a per-CPU Rx thread. Any pending skbs are moved to the
654 * current CPU's Rx thread. If the thread being destroyed is bound to
655 * the CPU processing this context the skbs will be freed.
656 */
657static void fcoe_percpu_thread_destroy(unsigned int cpu)
658{
659 struct fcoe_percpu_s *p;
660 struct task_struct *thread;
661 struct page *crc_eof;
662 struct sk_buff *skb;
663#ifdef CONFIG_SMP
664 struct fcoe_percpu_s *p0;
665 unsigned targ_cpu = smp_processor_id();
666#endif /* CONFIG_SMP */
667
668 printk(KERN_DEBUG "fcoe: Destroying receive thread for CPU %d\n", cpu);
669
670 /* Prevent any new skbs from being queued for this CPU. */
671 p = &per_cpu(fcoe_percpu, cpu);
672 spin_lock_bh(&p->fcoe_rx_list.lock);
673 thread = p->thread;
674 p->thread = NULL;
675 crc_eof = p->crc_eof_page;
676 p->crc_eof_page = NULL;
677 p->crc_eof_offset = 0;
678 spin_unlock_bh(&p->fcoe_rx_list.lock);
679
680#ifdef CONFIG_SMP
681 /*
682 * Don't bother moving the skb's if this context is running
683 * on the same CPU that is having its thread destroyed. This
684 * can easily happen when the module is removed.
685 */
686 if (cpu != targ_cpu) {
687 p0 = &per_cpu(fcoe_percpu, targ_cpu);
688 spin_lock_bh(&p0->fcoe_rx_list.lock);
689 if (p0->thread) {
690 FC_DBG("Moving frames from CPU %d to CPU %d\n",
691 cpu, targ_cpu);
692
693 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL)
694 __skb_queue_tail(&p0->fcoe_rx_list, skb);
695 spin_unlock_bh(&p0->fcoe_rx_list.lock);
696 } else {
697 /*
698 * The targeted CPU is not initialized and cannot accept
699 * new skbs. Unlock the targeted CPU and drop the skbs
700 * on the CPU that is going offline.
701 */
702 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL)
703 kfree_skb(skb);
704 spin_unlock_bh(&p0->fcoe_rx_list.lock);
705 }
706 } else {
707 /*
708 * This scenario occurs when the module is being removed
709 * and all threads are being destroyed. skbs will continue
710 * to be shifted from the CPU thread that is being removed
711 * to the CPU thread associated with the CPU that is processing
712 * the module removal. Once there is only one CPU Rx thread it
713 * will reach this case and we will drop all skbs and later
714 * stop the thread.
715 */
716 spin_lock_bh(&p->fcoe_rx_list.lock);
717 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL)
718 kfree_skb(skb);
719 spin_unlock_bh(&p->fcoe_rx_list.lock);
720 }
721#else
722 /*
723 * This a non-SMP scenario where the singluar Rx thread is
724 * being removed. Free all skbs and stop the thread.
725 */
726 spin_lock_bh(&p->fcoe_rx_list.lock);
727 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL)
728 kfree_skb(skb);
729 spin_unlock_bh(&p->fcoe_rx_list.lock);
730#endif
731
732 if (thread)
733 kthread_stop(thread);
734
735 if (crc_eof)
736 put_page(crc_eof);
737}
738
739/**
740 * fcoe_cpu_callback() - fcoe cpu hotplug event callback
741 * @nfb: callback data block
742 * @action: event triggering the callback
743 * @hcpu: index for the cpu of this event
744 *
745 * This creates or destroys per cpu data for fcoe
746 *
747 * Returns NOTIFY_OK always.
748 */
749static int fcoe_cpu_callback(struct notifier_block *nfb,
750 unsigned long action, void *hcpu)
751{
752 unsigned cpu = (unsigned long)hcpu;
753
754 switch (action) {
755 case CPU_ONLINE:
756 case CPU_ONLINE_FROZEN:
757 FC_DBG("CPU %x online: Create Rx thread\n", cpu);
758 fcoe_percpu_thread_create(cpu);
759 break;
760 case CPU_DEAD:
761 case CPU_DEAD_FROZEN:
762 FC_DBG("CPU %x offline: Remove Rx thread\n", cpu);
763 fcoe_percpu_thread_destroy(cpu);
764 break;
765 default:
766 break;
767 }
768 return NOTIFY_OK;
769}
770
771static struct notifier_block fcoe_cpu_notifier = {
772 .notifier_call = fcoe_cpu_callback,
773};
774
775/**
776 * fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ
777 * @skb: the receive skb
778 * @dev: associated net device
779 * @ptype: context
780 * @odldev: last device
781 *
782 * this function will receive the packet and build fc frame and pass it up
783 *
784 * Returns: 0 for success
785 */
786int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
787 struct packet_type *ptype, struct net_device *olddev)
788{
789 struct fc_lport *lp;
790 struct fcoe_rcv_info *fr;
791 struct fcoe_softc *fc;
792 struct fc_frame_header *fh;
793 struct fcoe_percpu_s *fps;
794 unsigned short oxid;
795 unsigned int cpu = 0;
796
797 fc = container_of(ptype, struct fcoe_softc, fcoe_packet_type);
798 lp = fc->ctlr.lp;
799 if (unlikely(lp == NULL)) {
800 FC_DBG("cannot find hba structure");
801 goto err2;
802 }
803 if (!lp->link_up)
804 goto err2;
805
806 if (unlikely(debug_fcoe)) {
807 FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p tail:%p "
808 "end:%p sum:%d dev:%s", skb->len, skb->data_len,
809 skb->head, skb->data, skb_tail_pointer(skb),
810 skb_end_pointer(skb), skb->csum,
811 skb->dev ? skb->dev->name : "<NULL>");
812
813 }
814
815 /* check for FCOE packet type */
816 if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) {
817 FC_DBG("wrong FC type frame");
818 goto err;
819 }
820
821 /*
822 * Check for minimum frame length, and make sure required FCoE
823 * and FC headers are pulled into the linear data area.
824 */
825 if (unlikely((skb->len < FCOE_MIN_FRAME) ||
826 !pskb_may_pull(skb, FCOE_HEADER_LEN)))
827 goto err;
828
829 skb_set_transport_header(skb, sizeof(struct fcoe_hdr));
830 fh = (struct fc_frame_header *) skb_transport_header(skb);
831
832 oxid = ntohs(fh->fh_ox_id);
833
834 fr = fcoe_dev_from_skb(skb);
835 fr->fr_dev = lp;
836 fr->ptype = ptype;
837
838#ifdef CONFIG_SMP
839 /*
840 * The incoming frame exchange id(oxid) is ANDed with num of online
841 * cpu bits to get cpu and then this cpu is used for selecting
842 * a per cpu kernel thread from fcoe_percpu.
843 */
844 cpu = oxid & (num_online_cpus() - 1);
845#endif
846
847 fps = &per_cpu(fcoe_percpu, cpu);
848 spin_lock_bh(&fps->fcoe_rx_list.lock);
849 if (unlikely(!fps->thread)) {
850 /*
851 * The targeted CPU is not ready, let's target
852 * the first CPU now. For non-SMP systems this
853 * will check the same CPU twice.
854 */
855 FC_DBG("CPU is online, but no receive thread ready "
856 "for incoming skb- using first online CPU.\n");
857
858 spin_unlock_bh(&fps->fcoe_rx_list.lock);
859 cpu = first_cpu(cpu_online_map);
860 fps = &per_cpu(fcoe_percpu, cpu);
861 spin_lock_bh(&fps->fcoe_rx_list.lock);
862 if (!fps->thread) {
863 spin_unlock_bh(&fps->fcoe_rx_list.lock);
864 goto err;
865 }
866 }
867
868 /*
869 * We now have a valid CPU that we're targeting for
870 * this skb. We also have this receive thread locked,
871 * so we're free to queue skbs into it's queue.
872 */
873 __skb_queue_tail(&fps->fcoe_rx_list, skb);
874 if (fps->fcoe_rx_list.qlen == 1)
875 wake_up_process(fps->thread);
876
877 spin_unlock_bh(&fps->fcoe_rx_list.lock);
878
879 return 0;
880err:
881 fc_lport_get_stats(lp)->ErrorFrames++;
882
883err2:
884 kfree_skb(skb);
885 return -1;
886}
887EXPORT_SYMBOL_GPL(fcoe_rcv);
888
889/**
890 * fcoe_start_io() - pass to netdev to start xmit for fcoe
891 * @skb: the skb to be xmitted
892 *
893 * Returns: 0 for success
894 */
895static inline int fcoe_start_io(struct sk_buff *skb)
896{
897 int rc;
898
899 skb_get(skb);
900 rc = dev_queue_xmit(skb);
901 if (rc != 0)
902 return rc;
903 kfree_skb(skb);
904 return 0;
905}
906
907/**
908 * fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof
909 * @skb: the skb to be xmitted
910 * @tlen: total len
911 *
912 * Returns: 0 for success
913 */
914static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
915{
916 struct fcoe_percpu_s *fps;
917 struct page *page;
918
919 fps = &get_cpu_var(fcoe_percpu);
920 page = fps->crc_eof_page;
921 if (!page) {
922 page = alloc_page(GFP_ATOMIC);
923 if (!page) {
924 put_cpu_var(fcoe_percpu);
925 return -ENOMEM;
926 }
927 fps->crc_eof_page = page;
928 fps->crc_eof_offset = 0;
929 }
930
931 get_page(page);
932 skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, page,
933 fps->crc_eof_offset, tlen);
934 skb->len += tlen;
935 skb->data_len += tlen;
936 skb->truesize += tlen;
937 fps->crc_eof_offset += sizeof(struct fcoe_crc_eof);
938
939 if (fps->crc_eof_offset >= PAGE_SIZE) {
940 fps->crc_eof_page = NULL;
941 fps->crc_eof_offset = 0;
942 put_page(page);
943 }
944 put_cpu_var(fcoe_percpu);
945 return 0;
946}
947
948/**
949 * fcoe_fc_crc() - calculates FC CRC in this fcoe skb
950 * @fp: the fc_frame containg data to be checksummed
951 *
952 * This uses crc32() to calculate the crc for fc frame
953 * Return : 32 bit crc
954 */
955u32 fcoe_fc_crc(struct fc_frame *fp)
956{
957 struct sk_buff *skb = fp_skb(fp);
958 struct skb_frag_struct *frag;
959 unsigned char *data;
960 unsigned long off, len, clen;
961 u32 crc;
962 unsigned i;
963
964 crc = crc32(~0, skb->data, skb_headlen(skb));
965
966 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
967 frag = &skb_shinfo(skb)->frags[i];
968 off = frag->page_offset;
969 len = frag->size;
970 while (len > 0) {
971 clen = min(len, PAGE_SIZE - (off & ~PAGE_MASK));
972 data = kmap_atomic(frag->page + (off >> PAGE_SHIFT),
973 KM_SKB_DATA_SOFTIRQ);
974 crc = crc32(crc, data + (off & ~PAGE_MASK), clen);
975 kunmap_atomic(data, KM_SKB_DATA_SOFTIRQ);
976 off += clen;
977 len -= clen;
978 }
979 }
980 return crc;
981}
982
983/**
984 * fcoe_xmit() - FCoE frame transmit function
985 * @lp: the associated local port
986 * @fp: the fc_frame to be transmitted
987 *
988 * Return : 0 for success
989 */
990int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
991{
992 int wlen, rc = 0;
993 u32 crc;
994 struct ethhdr *eh;
995 struct fcoe_crc_eof *cp;
996 struct sk_buff *skb;
997 struct fcoe_dev_stats *stats;
998 struct fc_frame_header *fh;
999 unsigned int hlen; /* header length implies the version */
1000 unsigned int tlen; /* trailer length */
1001 unsigned int elen; /* eth header, may include vlan */
1002 struct fcoe_softc *fc;
1003 u8 sof, eof;
1004 struct fcoe_hdr *hp;
1005
1006 WARN_ON((fr_len(fp) % sizeof(u32)) != 0);
1007
1008 fc = lport_priv(lp);
1009 fh = fc_frame_header_get(fp);
1010 skb = fp_skb(fp);
1011 wlen = skb->len / FCOE_WORD_TO_BYTE;
1012
1013 if (!lp->link_up) {
1014 kfree(skb);
1015 return 0;
1016 }
1017
1018 if (unlikely(fh->fh_r_ctl == FC_RCTL_ELS_REQ) &&
1019 fcoe_ctlr_els_send(&fc->ctlr, skb))
1020 return 0;
1021
1022 sof = fr_sof(fp);
1023 eof = fr_eof(fp);
1024
1025 elen = (fc->real_dev->priv_flags & IFF_802_1Q_VLAN) ?
1026 sizeof(struct vlan_ethhdr) : sizeof(struct ethhdr);
1027 hlen = sizeof(struct fcoe_hdr);
1028 tlen = sizeof(struct fcoe_crc_eof);
1029 wlen = (skb->len - tlen + sizeof(crc)) / FCOE_WORD_TO_BYTE;
1030
1031 /* crc offload */
1032 if (likely(lp->crc_offload)) {
1033 skb->ip_summed = CHECKSUM_PARTIAL;
1034 skb->csum_start = skb_headroom(skb);
1035 skb->csum_offset = skb->len;
1036 crc = 0;
1037 } else {
1038 skb->ip_summed = CHECKSUM_NONE;
1039 crc = fcoe_fc_crc(fp);
1040 }
1041
1042 /* copy fc crc and eof to the skb buff */
1043 if (skb_is_nonlinear(skb)) {
1044 skb_frag_t *frag;
1045 if (fcoe_get_paged_crc_eof(skb, tlen)) {
1046 kfree_skb(skb);
1047 return -ENOMEM;
1048 }
1049 frag = &skb_shinfo(skb)->frags[skb_shinfo(skb)->nr_frags - 1];
1050 cp = kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ)
1051 + frag->page_offset;
1052 } else {
1053 cp = (struct fcoe_crc_eof *)skb_put(skb, tlen);
1054 }
1055
1056 memset(cp, 0, sizeof(*cp));
1057 cp->fcoe_eof = eof;
1058 cp->fcoe_crc32 = cpu_to_le32(~crc);
1059
1060 if (skb_is_nonlinear(skb)) {
1061 kunmap_atomic(cp, KM_SKB_DATA_SOFTIRQ);
1062 cp = NULL;
1063 }
1064
1065 /* adjust skb netowrk/transport offsets to match mac/fcoe/fc */
1066 skb_push(skb, elen + hlen);
1067 skb_reset_mac_header(skb);
1068 skb_reset_network_header(skb);
1069 skb->mac_len = elen;
1070 skb->protocol = htons(ETH_P_FCOE);
1071 skb->dev = fc->real_dev;
1072
1073 /* fill up mac and fcoe headers */
1074 eh = eth_hdr(skb);
1075 eh->h_proto = htons(ETH_P_FCOE);
1076 if (fc->ctlr.map_dest)
1077 fc_fcoe_set_mac(eh->h_dest, fh->fh_d_id);
1078 else
1079 /* insert GW address */
1080 memcpy(eh->h_dest, fc->ctlr.dest_addr, ETH_ALEN);
1081
1082 if (unlikely(fc->ctlr.flogi_oxid != FC_XID_UNKNOWN))
1083 memcpy(eh->h_source, fc->ctlr.ctl_src_addr, ETH_ALEN);
1084 else
1085 memcpy(eh->h_source, fc->ctlr.data_src_addr, ETH_ALEN);
1086
1087 hp = (struct fcoe_hdr *)(eh + 1);
1088 memset(hp, 0, sizeof(*hp));
1089 if (FC_FCOE_VER)
1090 FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER);
1091 hp->fcoe_sof = sof;
1092
1093#ifdef NETIF_F_FSO
1094 /* fcoe lso, mss is in max_payload which is non-zero for FCP data */
1095 if (lp->seq_offload && fr_max_payload(fp)) {
1096 skb_shinfo(skb)->gso_type = SKB_GSO_FCOE;
1097 skb_shinfo(skb)->gso_size = fr_max_payload(fp);
1098 } else {
1099 skb_shinfo(skb)->gso_type = 0;
1100 skb_shinfo(skb)->gso_size = 0;
1101 }
1102#endif
1103 /* update tx stats: regardless if LLD fails */
1104 stats = fc_lport_get_stats(lp);
1105 stats->TxFrames++;
1106 stats->TxWords += wlen;
1107
1108 /* send down to lld */
1109 fr_dev(fp) = lp;
1110 if (fc->fcoe_pending_queue.qlen)
1111 rc = fcoe_check_wait_queue(lp);
1112
1113 if (rc == 0)
1114 rc = fcoe_start_io(skb);
1115
1116 if (rc) {
1117 spin_lock_bh(&fc->fcoe_pending_queue.lock);
1118 __skb_queue_tail(&fc->fcoe_pending_queue, skb);
1119 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
1120 if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
1121 lp->qfull = 1;
1122 }
1123
1124 return 0;
1125}
1126EXPORT_SYMBOL_GPL(fcoe_xmit);
1127
1128/**
1129 * fcoe_percpu_receive_thread() - recv thread per cpu
1130 * @arg: ptr to the fcoe per cpu struct
1131 *
1132 * Return: 0 for success
1133 */
1134int fcoe_percpu_receive_thread(void *arg)
1135{
1136 struct fcoe_percpu_s *p = arg;
1137 u32 fr_len;
1138 struct fc_lport *lp;
1139 struct fcoe_rcv_info *fr;
1140 struct fcoe_dev_stats *stats;
1141 struct fc_frame_header *fh;
1142 struct sk_buff *skb;
1143 struct fcoe_crc_eof crc_eof;
1144 struct fc_frame *fp;
1145 u8 *mac = NULL;
1146 struct fcoe_softc *fc;
1147 struct fcoe_hdr *hp;
1148
1149 set_user_nice(current, -20);
1150
1151 while (!kthread_should_stop()) {
1152
1153 spin_lock_bh(&p->fcoe_rx_list.lock);
1154 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) == NULL) {
1155 set_current_state(TASK_INTERRUPTIBLE);
1156 spin_unlock_bh(&p->fcoe_rx_list.lock);
1157 schedule();
1158 set_current_state(TASK_RUNNING);
1159 if (kthread_should_stop())
1160 return 0;
1161 spin_lock_bh(&p->fcoe_rx_list.lock);
1162 }
1163 spin_unlock_bh(&p->fcoe_rx_list.lock);
1164 fr = fcoe_dev_from_skb(skb);
1165 lp = fr->fr_dev;
1166 if (unlikely(lp == NULL)) {
1167 FC_DBG("invalid HBA Structure");
1168 kfree_skb(skb);
1169 continue;
1170 }
1171
1172 if (unlikely(debug_fcoe)) {
1173 FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p "
1174 "tail:%p end:%p sum:%d dev:%s",
1175 skb->len, skb->data_len,
1176 skb->head, skb->data, skb_tail_pointer(skb),
1177 skb_end_pointer(skb), skb->csum,
1178 skb->dev ? skb->dev->name : "<NULL>");
1179 }
1180
1181 /*
1182 * Save source MAC address before discarding header.
1183 */
1184 fc = lport_priv(lp);
1185 if (skb_is_nonlinear(skb))
1186 skb_linearize(skb); /* not ideal */
1187 mac = eth_hdr(skb)->h_source;
1188
1189 /*
1190 * Frame length checks and setting up the header pointers
1191 * was done in fcoe_rcv already.
1192 */
1193 hp = (struct fcoe_hdr *) skb_network_header(skb);
1194 fh = (struct fc_frame_header *) skb_transport_header(skb);
1195
1196 stats = fc_lport_get_stats(lp);
1197 if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) {
1198 if (stats->ErrorFrames < 5)
1199 printk(KERN_WARNING "FCoE version "
1200 "mismatch: The frame has "
1201 "version %x, but the "
1202 "initiator supports version "
1203 "%x\n", FC_FCOE_DECAPS_VER(hp),
1204 FC_FCOE_VER);
1205 stats->ErrorFrames++;
1206 kfree_skb(skb);
1207 continue;
1208 }
1209
1210 skb_pull(skb, sizeof(struct fcoe_hdr));
1211 fr_len = skb->len - sizeof(struct fcoe_crc_eof);
1212
1213 stats->RxFrames++;
1214 stats->RxWords += fr_len / FCOE_WORD_TO_BYTE;
1215
1216 fp = (struct fc_frame *)skb;
1217 fc_frame_init(fp);
1218 fr_dev(fp) = lp;
1219 fr_sof(fp) = hp->fcoe_sof;
1220
1221 /* Copy out the CRC and EOF trailer for access */
1222 if (skb_copy_bits(skb, fr_len, &crc_eof, sizeof(crc_eof))) {
1223 kfree_skb(skb);
1224 continue;
1225 }
1226 fr_eof(fp) = crc_eof.fcoe_eof;
1227 fr_crc(fp) = crc_eof.fcoe_crc32;
1228 if (pskb_trim(skb, fr_len)) {
1229 kfree_skb(skb);
1230 continue;
1231 }
1232
1233 /*
1234 * We only check CRC if no offload is available and if it is
1235 * it's solicited data, in which case, the FCP layer would
1236 * check it during the copy.
1237 */
1238 if (lp->crc_offload && skb->ip_summed == CHECKSUM_UNNECESSARY)
1239 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED;
1240 else
1241 fr_flags(fp) |= FCPHF_CRC_UNCHECKED;
1242
1243 fh = fc_frame_header_get(fp);
1244 if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA &&
1245 fh->fh_type == FC_TYPE_FCP) {
1246 fc_exch_recv(lp, lp->emp, fp);
1247 continue;
1248 }
1249 if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) {
1250 if (le32_to_cpu(fr_crc(fp)) !=
1251 ~crc32(~0, skb->data, fr_len)) {
1252 if (debug_fcoe || stats->InvalidCRCCount < 5)
1253 printk(KERN_WARNING "fcoe: dropping "
1254 "frame with CRC error\n");
1255 stats->InvalidCRCCount++;
1256 stats->ErrorFrames++;
1257 fc_frame_free(fp);
1258 continue;
1259 }
1260 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED;
1261 }
1262 if (unlikely(fc->ctlr.flogi_oxid != FC_XID_UNKNOWN) &&
1263 fcoe_ctlr_recv_flogi(&fc->ctlr, fp, mac)) {
1264 fc_frame_free(fp);
1265 continue;
1266 }
1267 fc_exch_recv(lp, lp->emp, fp);
1268 }
1269 return 0;
1270}
1271
1272/**
1273 * fcoe_watchdog() - fcoe timer callback
1274 * @vp:
1275 *
1276 * This checks the pending queue length for fcoe and set lport qfull
1277 * if the FCOE_MAX_QUEUE_DEPTH is reached. This is done for all fc_lport on the
1278 * fcoe_hostlist.
1279 *
1280 * Returns: 0 for success
1281 */
1282void fcoe_watchdog(ulong vp)
1283{
1284 struct fcoe_softc *fc;
1285
1286 read_lock(&fcoe_hostlist_lock);
1287 list_for_each_entry(fc, &fcoe_hostlist, list) {
1288 if (fc->ctlr.lp)
1289 fcoe_check_wait_queue(fc->ctlr.lp);
1290 }
1291 read_unlock(&fcoe_hostlist_lock);
1292
1293 fcoe_timer.expires = jiffies + (1 * HZ);
1294 add_timer(&fcoe_timer);
1295}
1296
1297
1298/**
1299 * fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue
1300 * @lp: the fc_port for this skb
1301 * @skb: the associated skb to be xmitted
1302 *
1303 * This empties the wait_queue, dequeue the head of the wait_queue queue
1304 * and calls fcoe_start_io() for each packet, if all skb have been
1305 * transmitted, return qlen or -1 if a error occurs, then restore
1306 * wait_queue and try again later.
1307 *
1308 * The wait_queue is used when the skb transmit fails. skb will go
1309 * in the wait_queue which will be emptied by the time function OR
1310 * by the next skb transmit.
1311 *
1312 * Returns: 0 for success
1313 */
1314static int fcoe_check_wait_queue(struct fc_lport *lp)
1315{
1316 struct fcoe_softc *fc = lport_priv(lp);
1317 struct sk_buff *skb;
1318 int rc = -1;
1319
1320 spin_lock_bh(&fc->fcoe_pending_queue.lock);
1321 if (fc->fcoe_pending_queue_active)
1322 goto out;
1323 fc->fcoe_pending_queue_active = 1;
1324
1325 while (fc->fcoe_pending_queue.qlen) {
1326 /* keep qlen > 0 until fcoe_start_io succeeds */
1327 fc->fcoe_pending_queue.qlen++;
1328 skb = __skb_dequeue(&fc->fcoe_pending_queue);
1329
1330 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
1331 rc = fcoe_start_io(skb);
1332 spin_lock_bh(&fc->fcoe_pending_queue.lock);
1333
1334 if (rc) {
1335 __skb_queue_head(&fc->fcoe_pending_queue, skb);
1336 /* undo temporary increment above */
1337 fc->fcoe_pending_queue.qlen--;
1338 break;
1339 }
1340 /* undo temporary increment above */
1341 fc->fcoe_pending_queue.qlen--;
1342 }
1343
1344 if (fc->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH)
1345 lp->qfull = 0;
1346 fc->fcoe_pending_queue_active = 0;
1347 rc = fc->fcoe_pending_queue.qlen;
1348out:
1349 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
1350 return rc;
1351}
1352
1353/**
1354 * fcoe_dev_setup() - setup link change notification interface
1355 */
1356static void fcoe_dev_setup()
1357{
1358 /*
1359 * here setup a interface specific wd time to
1360 * monitor the link state
1361 */
1362 register_netdevice_notifier(&fcoe_notifier);
1363}
1364
1365/**
1366 * fcoe_dev_setup() - cleanup link change notification interface
1367 */
1368static void fcoe_dev_cleanup(void)
1369{
1370 unregister_netdevice_notifier(&fcoe_notifier);
1371}
1372
1373/**
1374 * fcoe_device_notification() - netdev event notification callback
1375 * @notifier: context of the notification
1376 * @event: type of event
1377 * @ptr: fixed array for output parsed ifname
1378 *
1379 * This function is called by the ethernet driver in case of link change event
1380 *
1381 * Returns: 0 for success
1382 */
1383static int fcoe_device_notification(struct notifier_block *notifier,
1384 ulong event, void *ptr)
1385{
1386 struct fc_lport *lp = NULL;
1387 struct net_device *real_dev = ptr;
1388 struct fcoe_softc *fc;
1389 struct fcoe_dev_stats *stats;
1390 u32 link_possible = 1;
1391 u32 mfs;
1392 int rc = NOTIFY_OK;
1393
1394 read_lock(&fcoe_hostlist_lock);
1395 list_for_each_entry(fc, &fcoe_hostlist, list) {
1396 if (fc->real_dev == real_dev) {
1397 lp = fc->ctlr.lp;
1398 break;
1399 }
1400 }
1401 read_unlock(&fcoe_hostlist_lock);
1402 if (lp == NULL) {
1403 rc = NOTIFY_DONE;
1404 goto out;
1405 }
1406
1407 switch (event) {
1408 case NETDEV_DOWN:
1409 case NETDEV_GOING_DOWN:
1410 link_possible = 0;
1411 break;
1412 case NETDEV_UP:
1413 case NETDEV_CHANGE:
1414 break;
1415 case NETDEV_CHANGEMTU:
1416 mfs = fc->real_dev->mtu -
1417 (sizeof(struct fcoe_hdr) +
1418 sizeof(struct fcoe_crc_eof));
1419 if (mfs >= FC_MIN_MAX_FRAME)
1420 fc_set_mfs(lp, mfs);
1421 break;
1422 case NETDEV_REGISTER:
1423 break;
1424 default:
1425 FC_DBG("Unknown event %ld from netdev netlink\n", event);
1426 }
1427 if (link_possible && !fcoe_link_ok(lp))
1428 fcoe_ctlr_link_up(&fc->ctlr);
1429 else if (fcoe_ctlr_link_down(&fc->ctlr)) {
1430 stats = fc_lport_get_stats(lp);
1431 stats->LinkFailureCount++;
1432 fcoe_clean_pending_queue(lp);
1433 }
1434out:
1435 return rc;
1436}
1437
1438/**
1439 * fcoe_if_to_netdev() - parse a name buffer to get netdev
1440 * @ifname: fixed array for output parsed ifname
1441 * @buffer: incoming buffer to be copied
1442 *
1443 * Returns: NULL or ptr to netdeive
1444 */
1445static struct net_device *fcoe_if_to_netdev(const char *buffer)
1446{
1447 char *cp;
1448 char ifname[IFNAMSIZ + 2];
1449
1450 if (buffer) {
1451 strlcpy(ifname, buffer, IFNAMSIZ);
1452 cp = ifname + strlen(ifname);
1453 while (--cp >= ifname && *cp == '\n')
1454 *cp = '\0';
1455 return dev_get_by_name(&init_net, ifname);
1456 }
1457 return NULL;
1458}
1459
1460/**
1461 * fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev
1462 * @netdev: the target netdev
1463 *
1464 * Returns: ptr to the struct module, NULL for failure
1465 */
1466static struct module *
1467fcoe_netdev_to_module_owner(const struct net_device *netdev)
1468{
1469 struct device *dev;
1470
1471 if (!netdev)
1472 return NULL;
1473
1474 dev = netdev->dev.parent;
1475 if (!dev)
1476 return NULL;
1477
1478 if (!dev->driver)
1479 return NULL;
1480
1481 return dev->driver->owner;
1482}
1483
1484/**
1485 * fcoe_ethdrv_get() - Hold the Ethernet driver
1486 * @netdev: the target netdev
1487 *
1488 * Holds the Ethernet driver module by try_module_get() for
1489 * the corresponding netdev.
1490 *
1491 * Returns: 0 for succsss
1492 */
1493static int fcoe_ethdrv_get(const struct net_device *netdev)
1494{
1495 struct module *owner;
1496
1497 owner = fcoe_netdev_to_module_owner(netdev);
1498 if (owner) {
1499 printk(KERN_DEBUG "fcoe:hold driver module %s for %s\n",
1500 module_name(owner), netdev->name);
1501 return try_module_get(owner);
1502 }
1503 return -ENODEV;
1504}
1505
1506/**
1507 * fcoe_ethdrv_put() - Release the Ethernet driver
1508 * @netdev: the target netdev
1509 *
1510 * Releases the Ethernet driver module by module_put for
1511 * the corresponding netdev.
1512 *
1513 * Returns: 0 for succsss
1514 */
1515static int fcoe_ethdrv_put(const struct net_device *netdev)
1516{
1517 struct module *owner;
1518
1519 owner = fcoe_netdev_to_module_owner(netdev);
1520 if (owner) {
1521 printk(KERN_DEBUG "fcoe:release driver module %s for %s\n",
1522 module_name(owner), netdev->name);
1523 module_put(owner);
1524 return 0;
1525 }
1526 return -ENODEV;
1527}
1528
1529/**
1530 * fcoe_destroy() - handles the destroy from sysfs
1531 * @buffer: expcted to be a eth if name
1532 * @kp: associated kernel param
1533 *
1534 * Returns: 0 for success
1535 */
1536static int fcoe_destroy(const char *buffer, struct kernel_param *kp)
1537{
1538 int rc;
1539 struct net_device *netdev;
1540
1541 netdev = fcoe_if_to_netdev(buffer);
1542 if (!netdev) {
1543 rc = -ENODEV;
1544 goto out_nodev;
1545 }
1546 /* look for existing lport */
1547 if (!fcoe_hostlist_lookup(netdev)) {
1548 rc = -ENODEV;
1549 goto out_putdev;
1550 }
1551 rc = fcoe_if_destroy(netdev);
1552 if (rc) {
1553 printk(KERN_ERR "fcoe: fcoe_if_destroy(%s) failed\n",
1554 netdev->name);
1555 rc = -EIO;
1556 goto out_putdev;
1557 }
1558 fcoe_ethdrv_put(netdev);
1559 rc = 0;
1560out_putdev:
1561 dev_put(netdev);
1562out_nodev:
1563 return rc;
1564}
1565
1566/**
1567 * fcoe_create() - Handles the create call from sysfs
1568 * @buffer: expcted to be a eth if name
1569 * @kp: associated kernel param
1570 *
1571 * Returns: 0 for success
1572 */
1573static int fcoe_create(const char *buffer, struct kernel_param *kp)
1574{
1575 int rc;
1576 struct net_device *netdev;
1577
1578 netdev = fcoe_if_to_netdev(buffer);
1579 if (!netdev) {
1580 rc = -ENODEV;
1581 goto out_nodev;
1582 }
1583 /* look for existing lport */
1584 if (fcoe_hostlist_lookup(netdev)) {
1585 rc = -EEXIST;
1586 goto out_putdev;
1587 }
1588 fcoe_ethdrv_get(netdev);
1589
1590 rc = fcoe_if_create(netdev);
1591 if (rc) {
1592 printk(KERN_ERR "fcoe: fcoe_if_create(%s) failed\n",
1593 netdev->name);
1594 fcoe_ethdrv_put(netdev);
1595 rc = -EIO;
1596 goto out_putdev;
1597 }
1598 rc = 0;
1599out_putdev:
1600 dev_put(netdev);
1601out_nodev:
1602 return rc;
1603}
1604
1605module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR);
1606__MODULE_PARM_TYPE(create, "string");
1607MODULE_PARM_DESC(create, "Create fcoe port using net device passed in.");
1608module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR);
1609__MODULE_PARM_TYPE(destroy, "string");
1610MODULE_PARM_DESC(destroy, "Destroy fcoe port");
1611
1612/**
1613 * fcoe_link_ok() - Check if link is ok for the fc_lport
1614 * @lp: ptr to the fc_lport
1615 *
1616 * Any permanently-disqualifying conditions have been previously checked.
1617 * This also updates the speed setting, which may change with link for 100/1000.
1618 *
1619 * This function should probably be checking for PAUSE support at some point
1620 * in the future. Currently Per-priority-pause is not determinable using
1621 * ethtool, so we shouldn't be restrictive until that problem is resolved.
1622 *
1623 * Returns: 0 if link is OK for use by FCoE.
1624 *
1625 */
1626int fcoe_link_ok(struct fc_lport *lp)
1627{
1628 struct fcoe_softc *fc = lport_priv(lp);
1629 struct net_device *dev = fc->real_dev;
1630 struct ethtool_cmd ecmd = { ETHTOOL_GSET };
1631 int rc = 0;
1632
1633 if ((dev->flags & IFF_UP) && netif_carrier_ok(dev)) {
1634 dev = fc->phys_dev;
1635 if (dev->ethtool_ops->get_settings) {
1636 dev->ethtool_ops->get_settings(dev, &ecmd);
1637 lp->link_supported_speeds &=
1638 ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT);
1639 if (ecmd.supported & (SUPPORTED_1000baseT_Half |
1640 SUPPORTED_1000baseT_Full))
1641 lp->link_supported_speeds |= FC_PORTSPEED_1GBIT;
1642 if (ecmd.supported & SUPPORTED_10000baseT_Full)
1643 lp->link_supported_speeds |=
1644 FC_PORTSPEED_10GBIT;
1645 if (ecmd.speed == SPEED_1000)
1646 lp->link_speed = FC_PORTSPEED_1GBIT;
1647 if (ecmd.speed == SPEED_10000)
1648 lp->link_speed = FC_PORTSPEED_10GBIT;
1649 }
1650 } else
1651 rc = -1;
1652
1653 return rc;
1654}
1655EXPORT_SYMBOL_GPL(fcoe_link_ok);
1656
1657/**
1658 * fcoe_percpu_clean() - Clear the pending skbs for an lport
1659 * @lp: the fc_lport
1660 */
1661void fcoe_percpu_clean(struct fc_lport *lp)
1662{
1663 struct fcoe_percpu_s *pp;
1664 struct fcoe_rcv_info *fr;
1665 struct sk_buff_head *list;
1666 struct sk_buff *skb, *next;
1667 struct sk_buff *head;
1668 unsigned int cpu;
1669
1670 for_each_possible_cpu(cpu) {
1671 pp = &per_cpu(fcoe_percpu, cpu);
1672 spin_lock_bh(&pp->fcoe_rx_list.lock);
1673 list = &pp->fcoe_rx_list;
1674 head = list->next;
1675 for (skb = head; skb != (struct sk_buff *)list;
1676 skb = next) {
1677 next = skb->next;
1678 fr = fcoe_dev_from_skb(skb);
1679 if (fr->fr_dev == lp) {
1680 __skb_unlink(skb, list);
1681 kfree_skb(skb);
1682 }
1683 }
1684 spin_unlock_bh(&pp->fcoe_rx_list.lock);
1685 }
1686}
1687EXPORT_SYMBOL_GPL(fcoe_percpu_clean);
1688
1689/**
1690 * fcoe_clean_pending_queue() - Dequeue a skb and free it
1691 * @lp: the corresponding fc_lport
1692 *
1693 * Returns: none
1694 */
1695void fcoe_clean_pending_queue(struct fc_lport *lp)
1696{
1697 struct fcoe_softc *fc = lport_priv(lp);
1698 struct sk_buff *skb;
1699
1700 spin_lock_bh(&fc->fcoe_pending_queue.lock);
1701 while ((skb = __skb_dequeue(&fc->fcoe_pending_queue)) != NULL) {
1702 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
1703 kfree_skb(skb);
1704 spin_lock_bh(&fc->fcoe_pending_queue.lock);
1705 }
1706 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
1707}
1708EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue);
1709
1710/**
1711 * fcoe_reset() - Resets the fcoe
1712 * @shost: shost the reset is from
1713 *
1714 * Returns: always 0
1715 */
1716int fcoe_reset(struct Scsi_Host *shost)
1717{
1718 struct fc_lport *lport = shost_priv(shost);
1719 fc_lport_reset(lport);
1720 return 0;
1721}
1722EXPORT_SYMBOL_GPL(fcoe_reset);
1723
1724/**
1725 * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device
1726 * @device: this is currently ptr to net_device
1727 *
1728 * Returns: NULL or the located fcoe_softc
1729 */
1730static struct fcoe_softc *
1731fcoe_hostlist_lookup_softc(const struct net_device *dev)
1732{
1733 struct fcoe_softc *fc;
1734
1735 read_lock(&fcoe_hostlist_lock);
1736 list_for_each_entry(fc, &fcoe_hostlist, list) {
1737 if (fc->real_dev == dev) {
1738 read_unlock(&fcoe_hostlist_lock);
1739 return fc;
1740 }
1741 }
1742 read_unlock(&fcoe_hostlist_lock);
1743 return NULL;
1744}
1745
1746/**
1747 * fcoe_hostlist_lookup() - Find the corresponding lport by netdev
1748 * @netdev: ptr to net_device
1749 *
1750 * Returns: 0 for success
1751 */
1752struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
1753{
1754 struct fcoe_softc *fc;
1755
1756 fc = fcoe_hostlist_lookup_softc(netdev);
1757
1758 return (fc) ? fc->ctlr.lp : NULL;
1759}
1760EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup);
1761
1762/**
1763 * fcoe_hostlist_add() - Add a lport to lports list
1764 * @lp: ptr to the fc_lport to badded
1765 *
1766 * Returns: 0 for success
1767 */
1768int fcoe_hostlist_add(const struct fc_lport *lp)
1769{
1770 struct fcoe_softc *fc;
1771
1772 fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp));
1773 if (!fc) {
1774 fc = lport_priv(lp);
1775 write_lock_bh(&fcoe_hostlist_lock);
1776 list_add_tail(&fc->list, &fcoe_hostlist);
1777 write_unlock_bh(&fcoe_hostlist_lock);
1778 }
1779 return 0;
1780}
1781EXPORT_SYMBOL_GPL(fcoe_hostlist_add);
1782
1783/**
1784 * fcoe_hostlist_remove() - remove a lport from lports list
1785 * @lp: ptr to the fc_lport to badded
1786 *
1787 * Returns: 0 for success
1788 */
1789int fcoe_hostlist_remove(const struct fc_lport *lp)
1790{
1791 struct fcoe_softc *fc;
1792
1793 fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp));
1794 BUG_ON(!fc);
1795 write_lock_bh(&fcoe_hostlist_lock);
1796 list_del(&fc->list);
1797 write_unlock_bh(&fcoe_hostlist_lock);
1798
1799 return 0;
1800}
1801EXPORT_SYMBOL_GPL(fcoe_hostlist_remove);
1802
1803/**
1804 * fcoe_init() - fcoe module loading initialization
1805 *
1806 * Returns 0 on success, negative on failure
1807 */
1808static int __init fcoe_init(void)
1809{
1810 unsigned int cpu;
1811 int rc = 0;
1812 struct fcoe_percpu_s *p;
1813
1814 INIT_LIST_HEAD(&fcoe_hostlist);
1815 rwlock_init(&fcoe_hostlist_lock);
1816
1817 for_each_possible_cpu(cpu) {
1818 p = &per_cpu(fcoe_percpu, cpu);
1819 skb_queue_head_init(&p->fcoe_rx_list);
1820 }
1821
1822 for_each_online_cpu(cpu)
1823 fcoe_percpu_thread_create(cpu);
1824
1825 /* Initialize per CPU interrupt thread */
1826 rc = register_hotcpu_notifier(&fcoe_cpu_notifier);
1827 if (rc)
1828 goto out_free;
1829
1830 /* Setup link change notification */
1831 fcoe_dev_setup();
1832
1833 setup_timer(&fcoe_timer, fcoe_watchdog, 0);
1834
1835 mod_timer(&fcoe_timer, jiffies + (10 * HZ));
1836
1837 fcoe_if_init();
1838
1839 return 0;
1840
1841out_free:
1842 for_each_online_cpu(cpu) {
1843 fcoe_percpu_thread_destroy(cpu);
1844 }
1845
1846 return rc;
1847}
1848module_init(fcoe_init);
1849
1850/**
1851 * fcoe_exit() - fcoe module unloading cleanup
1852 *
1853 * Returns 0 on success, negative on failure
1854 */
1855static void __exit fcoe_exit(void)
1856{
1857 unsigned int cpu;
1858 struct fcoe_softc *fc, *tmp;
1859
1860 fcoe_dev_cleanup();
1861
1862 /* Stop the timer */
1863 del_timer_sync(&fcoe_timer);
1864
1865 /* releases the associated fcoe hosts */
1866 list_for_each_entry_safe(fc, tmp, &fcoe_hostlist, list)
1867 fcoe_if_destroy(fc->real_dev);
1868
1869 unregister_hotcpu_notifier(&fcoe_cpu_notifier);
1870
1871 for_each_online_cpu(cpu) {
1872 fcoe_percpu_thread_destroy(cpu);
1873 }
1874
1875 /* detach from scsi transport */
1876 fcoe_if_exit();
1877}
1878module_exit(fcoe_exit);
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h
new file mode 100644
index 000000000000..917aae886897
--- /dev/null
+++ b/drivers/scsi/fcoe/fcoe.h
@@ -0,0 +1,75 @@
1/*
2 * Copyright(c) 2009 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
16 *
17 * Maintained at www.Open-FCoE.org
18 */
19
20#ifndef _FCOE_H_
21#define _FCOE_H_
22
23#include <linux/skbuff.h>
24#include <linux/kthread.h>
25
26#define FCOE_MAX_QUEUE_DEPTH 256
27#define FCOE_LOW_QUEUE_DEPTH 32
28
29#define FCOE_WORD_TO_BYTE 4
30
31#define FCOE_VERSION "0.1"
32#define FCOE_NAME "fcoe"
33#define FCOE_VENDOR "Open-FCoE.org"
34
35#define FCOE_MAX_LUN 255
36#define FCOE_MAX_FCP_TARGET 256
37
38#define FCOE_MAX_OUTSTANDING_COMMANDS 1024
39
40#define FCOE_MIN_XID 0x0001 /* the min xid supported by fcoe_sw */
41#define FCOE_MAX_XID 0x07ef /* the max xid supported by fcoe_sw */
42
43/*
44 * this percpu struct for fcoe
45 */
46struct fcoe_percpu_s {
47 struct task_struct *thread;
48 struct sk_buff_head fcoe_rx_list;
49 struct page *crc_eof_page;
50 int crc_eof_offset;
51};
52
53/*
54 * the fcoe sw transport private data
55 */
56struct fcoe_softc {
57 struct list_head list;
58 struct net_device *real_dev;
59 struct net_device *phys_dev; /* device with ethtool_ops */
60 struct packet_type fcoe_packet_type;
61 struct packet_type fip_packet_type;
62 struct sk_buff_head fcoe_pending_queue;
63 u8 fcoe_pending_queue_active;
64 struct fcoe_ctlr ctlr;
65};
66
67#define fcoe_from_ctlr(fc) container_of(fc, struct fcoe_softc, ctlr)
68
69static inline struct net_device *fcoe_netdev(
70 const struct fc_lport *lp)
71{
72 return ((struct fcoe_softc *)lport_priv(lp))->real_dev;
73}
74
75#endif /* _FCOE_H_ */
diff --git a/drivers/scsi/fcoe/fcoe_sw.c b/drivers/scsi/fcoe/fcoe_sw.c
deleted file mode 100644
index 2bbbe3c0cc7b..000000000000
--- a/drivers/scsi/fcoe/fcoe_sw.c
+++ /dev/null
@@ -1,561 +0,0 @@
1/*
2 * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
16 *
17 * Maintained at www.Open-FCoE.org
18 */
19
20#include <linux/module.h>
21#include <linux/version.h>
22#include <linux/kernel.h>
23#include <linux/pci.h>
24#include <linux/init.h>
25#include <linux/spinlock.h>
26#include <linux/netdevice.h>
27#include <linux/etherdevice.h>
28#include <linux/if_vlan.h>
29#include <net/rtnetlink.h>
30
31#include <scsi/fc/fc_els.h>
32#include <scsi/fc/fc_encaps.h>
33#include <scsi/fc/fc_fs.h>
34#include <scsi/scsi_transport.h>
35#include <scsi/scsi_transport_fc.h>
36
37#include <scsi/libfc.h>
38#include <scsi/libfcoe.h>
39#include <scsi/fc_transport_fcoe.h>
40
41#define FCOE_SW_VERSION "0.1"
42#define FCOE_SW_NAME "fcoesw"
43#define FCOE_SW_VENDOR "Open-FCoE.org"
44
45#define FCOE_MAX_LUN 255
46#define FCOE_MAX_FCP_TARGET 256
47
48#define FCOE_MAX_OUTSTANDING_COMMANDS 1024
49
50#define FCOE_MIN_XID 0x0001 /* the min xid supported by fcoe_sw */
51#define FCOE_MAX_XID 0x07ef /* the max xid supported by fcoe_sw */
52
53static struct scsi_transport_template *scsi_transport_fcoe_sw;
54
55struct fc_function_template fcoe_sw_transport_function = {
56 .show_host_node_name = 1,
57 .show_host_port_name = 1,
58 .show_host_supported_classes = 1,
59 .show_host_supported_fc4s = 1,
60 .show_host_active_fc4s = 1,
61 .show_host_maxframe_size = 1,
62
63 .show_host_port_id = 1,
64 .show_host_supported_speeds = 1,
65 .get_host_speed = fc_get_host_speed,
66 .show_host_speed = 1,
67 .show_host_port_type = 1,
68 .get_host_port_state = fc_get_host_port_state,
69 .show_host_port_state = 1,
70 .show_host_symbolic_name = 1,
71
72 .dd_fcrport_size = sizeof(struct fc_rport_libfc_priv),
73 .show_rport_maxframe_size = 1,
74 .show_rport_supported_classes = 1,
75
76 .show_host_fabric_name = 1,
77 .show_starget_node_name = 1,
78 .show_starget_port_name = 1,
79 .show_starget_port_id = 1,
80 .set_rport_dev_loss_tmo = fc_set_rport_loss_tmo,
81 .show_rport_dev_loss_tmo = 1,
82 .get_fc_host_stats = fc_get_host_stats,
83 .issue_fc_host_lip = fcoe_reset,
84
85 .terminate_rport_io = fc_rport_terminate_io,
86};
87
88static struct scsi_host_template fcoe_sw_shost_template = {
89 .module = THIS_MODULE,
90 .name = "FCoE Driver",
91 .proc_name = FCOE_SW_NAME,
92 .queuecommand = fc_queuecommand,
93 .eh_abort_handler = fc_eh_abort,
94 .eh_device_reset_handler = fc_eh_device_reset,
95 .eh_host_reset_handler = fc_eh_host_reset,
96 .slave_alloc = fc_slave_alloc,
97 .change_queue_depth = fc_change_queue_depth,
98 .change_queue_type = fc_change_queue_type,
99 .this_id = -1,
100 .cmd_per_lun = 32,
101 .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS,
102 .use_clustering = ENABLE_CLUSTERING,
103 .sg_tablesize = SG_ALL,
104 .max_sectors = 0xffff,
105};
106
107/**
108 * fcoe_sw_lport_config() - sets up the fc_lport
109 * @lp: ptr to the fc_lport
110 * @shost: ptr to the parent scsi host
111 *
112 * Returns: 0 for success
113 */
114static int fcoe_sw_lport_config(struct fc_lport *lp)
115{
116 int i = 0;
117
118 lp->link_up = 0;
119 lp->qfull = 0;
120 lp->max_retry_count = 3;
121 lp->e_d_tov = 2 * 1000; /* FC-FS default */
122 lp->r_a_tov = 2 * 2 * 1000;
123 lp->service_params = (FCP_SPPF_INIT_FCN | FCP_SPPF_RD_XRDY_DIS |
124 FCP_SPPF_RETRY | FCP_SPPF_CONF_COMPL);
125
126 /*
127 * allocate per cpu stats block
128 */
129 for_each_online_cpu(i)
130 lp->dev_stats[i] = kzalloc(sizeof(struct fcoe_dev_stats),
131 GFP_KERNEL);
132
133 /* lport fc_lport related configuration */
134 fc_lport_config(lp);
135
136 /* offload related configuration */
137 lp->crc_offload = 0;
138 lp->seq_offload = 0;
139 lp->lro_enabled = 0;
140 lp->lro_xid = 0;
141 lp->lso_max = 0;
142
143 return 0;
144}
145
146/**
147 * fcoe_sw_netdev_config() - Set up netdev for SW FCoE
148 * @lp : ptr to the fc_lport
149 * @netdev : ptr to the associated netdevice struct
150 *
151 * Must be called after fcoe_sw_lport_config() as it will use lport mutex
152 *
153 * Returns : 0 for success
154 */
155static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
156{
157 u32 mfs;
158 u64 wwnn, wwpn;
159 struct fcoe_softc *fc;
160 u8 flogi_maddr[ETH_ALEN];
161
162 /* Setup lport private data to point to fcoe softc */
163 fc = lport_priv(lp);
164 fc->lp = lp;
165 fc->real_dev = netdev;
166 fc->phys_dev = netdev;
167
168 /* Require support for get_pauseparam ethtool op. */
169 if (netdev->priv_flags & IFF_802_1Q_VLAN)
170 fc->phys_dev = vlan_dev_real_dev(netdev);
171
172 /* Do not support for bonding device */
173 if ((fc->real_dev->priv_flags & IFF_MASTER_ALB) ||
174 (fc->real_dev->priv_flags & IFF_SLAVE_INACTIVE) ||
175 (fc->real_dev->priv_flags & IFF_MASTER_8023AD)) {
176 return -EOPNOTSUPP;
177 }
178
179 /*
180 * Determine max frame size based on underlying device and optional
181 * user-configured limit. If the MFS is too low, fcoe_link_ok()
182 * will return 0, so do this first.
183 */
184 mfs = fc->real_dev->mtu - (sizeof(struct fcoe_hdr) +
185 sizeof(struct fcoe_crc_eof));
186 if (fc_set_mfs(lp, mfs))
187 return -EINVAL;
188
189 if (!fcoe_link_ok(lp))
190 lp->link_up = 1;
191
192 /* offload features support */
193 if (fc->real_dev->features & NETIF_F_SG)
194 lp->sg_supp = 1;
195
196#ifdef NETIF_F_FCOE_CRC
197 if (netdev->features & NETIF_F_FCOE_CRC) {
198 lp->crc_offload = 1;
199 printk(KERN_DEBUG "fcoe:%s supports FCCRC offload\n",
200 netdev->name);
201 }
202#endif
203#ifdef NETIF_F_FSO
204 if (netdev->features & NETIF_F_FSO) {
205 lp->seq_offload = 1;
206 lp->lso_max = netdev->gso_max_size;
207 printk(KERN_DEBUG "fcoe:%s supports LSO for max len 0x%x\n",
208 netdev->name, lp->lso_max);
209 }
210#endif
211 if (netdev->fcoe_ddp_xid) {
212 lp->lro_enabled = 1;
213 lp->lro_xid = netdev->fcoe_ddp_xid;
214 printk(KERN_DEBUG "fcoe:%s supports LRO for max xid 0x%x\n",
215 netdev->name, lp->lro_xid);
216 }
217 skb_queue_head_init(&fc->fcoe_pending_queue);
218 fc->fcoe_pending_queue_active = 0;
219
220 /* setup Source Mac Address */
221 memcpy(fc->ctl_src_addr, fc->real_dev->dev_addr,
222 fc->real_dev->addr_len);
223
224 wwnn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 1, 0);
225 fc_set_wwnn(lp, wwnn);
226 /* XXX - 3rd arg needs to be vlan id */
227 wwpn = fcoe_wwn_from_mac(fc->real_dev->dev_addr, 2, 0);
228 fc_set_wwpn(lp, wwpn);
229
230 /*
231 * Add FCoE MAC address as second unicast MAC address
232 * or enter promiscuous mode if not capable of listening
233 * for multiple unicast MACs.
234 */
235 rtnl_lock();
236 memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN);
237 dev_unicast_add(fc->real_dev, flogi_maddr, ETH_ALEN);
238 rtnl_unlock();
239
240 /*
241 * setup the receive function from ethernet driver
242 * on the ethertype for the given device
243 */
244 fc->fcoe_packet_type.func = fcoe_rcv;
245 fc->fcoe_packet_type.type = __constant_htons(ETH_P_FCOE);
246 fc->fcoe_packet_type.dev = fc->real_dev;
247 dev_add_pack(&fc->fcoe_packet_type);
248
249 return 0;
250}
251
252/**
253 * fcoe_sw_shost_config() - Sets up fc_lport->host
254 * @lp : ptr to the fc_lport
255 * @shost : ptr to the associated scsi host
256 * @dev : device associated to scsi host
257 *
258 * Must be called after fcoe_sw_lport_config() and fcoe_sw_netdev_config()
259 *
260 * Returns : 0 for success
261 */
262static int fcoe_sw_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
263 struct device *dev)
264{
265 int rc = 0;
266
267 /* lport scsi host config */
268 lp->host = shost;
269
270 lp->host->max_lun = FCOE_MAX_LUN;
271 lp->host->max_id = FCOE_MAX_FCP_TARGET;
272 lp->host->max_channel = 0;
273 lp->host->transportt = scsi_transport_fcoe_sw;
274
275 /* add the new host to the SCSI-ml */
276 rc = scsi_add_host(lp->host, dev);
277 if (rc) {
278 FC_DBG("fcoe_sw_shost_config:error on scsi_add_host\n");
279 return rc;
280 }
281 sprintf(fc_host_symbolic_name(lp->host), "%s v%s over %s",
282 FCOE_SW_NAME, FCOE_SW_VERSION,
283 fcoe_netdev(lp)->name);
284
285 return 0;
286}
287
288/**
289 * fcoe_sw_em_config() - allocates em for this lport
290 * @lp: the port that em is to allocated for
291 *
292 * Returns : 0 on success
293 */
294static inline int fcoe_sw_em_config(struct fc_lport *lp)
295{
296 BUG_ON(lp->emp);
297
298 lp->emp = fc_exch_mgr_alloc(lp, FC_CLASS_3,
299 FCOE_MIN_XID, FCOE_MAX_XID);
300 if (!lp->emp)
301 return -ENOMEM;
302
303 return 0;
304}
305
306/**
307 * fcoe_sw_destroy() - FCoE software HBA tear-down function
308 * @netdev: ptr to the associated net_device
309 *
310 * Returns: 0 if link is OK for use by FCoE.
311 */
312static int fcoe_sw_destroy(struct net_device *netdev)
313{
314 int cpu;
315 struct fc_lport *lp = NULL;
316 struct fcoe_softc *fc;
317 u8 flogi_maddr[ETH_ALEN];
318
319 BUG_ON(!netdev);
320
321 printk(KERN_DEBUG "fcoe_sw_destroy:interface on %s\n",
322 netdev->name);
323
324 lp = fcoe_hostlist_lookup(netdev);
325 if (!lp)
326 return -ENODEV;
327
328 fc = lport_priv(lp);
329
330 /* Logout of the fabric */
331 fc_fabric_logoff(lp);
332
333 /* Remove the instance from fcoe's list */
334 fcoe_hostlist_remove(lp);
335
336 /* Don't listen for Ethernet packets anymore */
337 dev_remove_pack(&fc->fcoe_packet_type);
338
339 /* Cleanup the fc_lport */
340 fc_lport_destroy(lp);
341 fc_fcp_destroy(lp);
342
343 /* Detach from the scsi-ml */
344 fc_remove_host(lp->host);
345 scsi_remove_host(lp->host);
346
347 /* There are no more rports or I/O, free the EM */
348 if (lp->emp)
349 fc_exch_mgr_free(lp->emp);
350
351 /* Delete secondary MAC addresses */
352 rtnl_lock();
353 memcpy(flogi_maddr, (u8[6]) FC_FCOE_FLOGI_MAC, ETH_ALEN);
354 dev_unicast_delete(fc->real_dev, flogi_maddr, ETH_ALEN);
355 if (compare_ether_addr(fc->data_src_addr, (u8[6]) { 0 }))
356 dev_unicast_delete(fc->real_dev, fc->data_src_addr, ETH_ALEN);
357 rtnl_unlock();
358
359 /* Free the per-CPU revieve threads */
360 fcoe_percpu_clean(lp);
361
362 /* Free existing skbs */
363 fcoe_clean_pending_queue(lp);
364
365 /* Free memory used by statistical counters */
366 for_each_online_cpu(cpu)
367 kfree(lp->dev_stats[cpu]);
368
369 /* Release the net_device and Scsi_Host */
370 dev_put(fc->real_dev);
371 scsi_host_put(lp->host);
372
373 return 0;
374}
375
376/*
377 * fcoe_sw_ddp_setup - calls LLD's ddp_setup through net_device
378 * @lp: the corresponding fc_lport
379 * @xid: the exchange id for this ddp transfer
380 * @sgl: the scatterlist describing this transfer
381 * @sgc: number of sg items
382 *
383 * Returns : 0 no ddp
384 */
385static int fcoe_sw_ddp_setup(struct fc_lport *lp, u16 xid,
386 struct scatterlist *sgl, unsigned int sgc)
387{
388 struct net_device *n = fcoe_netdev(lp);
389
390 if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_setup)
391 return n->netdev_ops->ndo_fcoe_ddp_setup(n, xid, sgl, sgc);
392
393 return 0;
394}
395
396/*
397 * fcoe_sw_ddp_done - calls LLD's ddp_done through net_device
398 * @lp: the corresponding fc_lport
399 * @xid: the exchange id for this ddp transfer
400 *
401 * Returns : the length of data that have been completed by ddp
402 */
403static int fcoe_sw_ddp_done(struct fc_lport *lp, u16 xid)
404{
405 struct net_device *n = fcoe_netdev(lp);
406
407 if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_done)
408 return n->netdev_ops->ndo_fcoe_ddp_done(n, xid);
409 return 0;
410}
411
412static struct libfc_function_template fcoe_sw_libfc_fcn_templ = {
413 .frame_send = fcoe_xmit,
414 .ddp_setup = fcoe_sw_ddp_setup,
415 .ddp_done = fcoe_sw_ddp_done,
416};
417
418/**
419 * fcoe_sw_create() - this function creates the fcoe interface
420 * @netdev: pointer the associated netdevice
421 *
422 * Creates fc_lport struct and scsi_host for lport, configures lport
423 * and starts fabric login.
424 *
425 * Returns : 0 on success
426 */
427static int fcoe_sw_create(struct net_device *netdev)
428{
429 int rc;
430 struct fc_lport *lp = NULL;
431 struct fcoe_softc *fc;
432 struct Scsi_Host *shost;
433
434 BUG_ON(!netdev);
435
436 printk(KERN_DEBUG "fcoe_sw_create:interface on %s\n",
437 netdev->name);
438
439 lp = fcoe_hostlist_lookup(netdev);
440 if (lp)
441 return -EEXIST;
442
443 shost = fcoe_host_alloc(&fcoe_sw_shost_template,
444 sizeof(struct fcoe_softc));
445 if (!shost) {
446 FC_DBG("Could not allocate host structure\n");
447 return -ENOMEM;
448 }
449 lp = shost_priv(shost);
450 fc = lport_priv(lp);
451
452 /* configure fc_lport, e.g., em */
453 rc = fcoe_sw_lport_config(lp);
454 if (rc) {
455 FC_DBG("Could not configure lport\n");
456 goto out_host_put;
457 }
458
459 /* configure lport network properties */
460 rc = fcoe_sw_netdev_config(lp, netdev);
461 if (rc) {
462 FC_DBG("Could not configure netdev for lport\n");
463 goto out_host_put;
464 }
465
466 /* configure lport scsi host properties */
467 rc = fcoe_sw_shost_config(lp, shost, &netdev->dev);
468 if (rc) {
469 FC_DBG("Could not configure shost for lport\n");
470 goto out_host_put;
471 }
472
473 /* lport exch manager allocation */
474 rc = fcoe_sw_em_config(lp);
475 if (rc) {
476 FC_DBG("Could not configure em for lport\n");
477 goto out_host_put;
478 }
479
480 /* Initialize the library */
481 rc = fcoe_libfc_config(lp, &fcoe_sw_libfc_fcn_templ);
482 if (rc) {
483 FC_DBG("Could not configure libfc for lport!\n");
484 goto out_lp_destroy;
485 }
486
487 /* add to lports list */
488 fcoe_hostlist_add(lp);
489
490 lp->boot_time = jiffies;
491
492 fc_fabric_login(lp);
493
494 dev_hold(netdev);
495
496 return rc;
497
498out_lp_destroy:
499 fc_exch_mgr_free(lp->emp); /* Free the EM */
500out_host_put:
501 scsi_host_put(lp->host);
502 return rc;
503}
504
505/**
506 * fcoe_sw_match() - The FCoE SW transport match function
507 *
508 * Returns : false always
509 */
510static bool fcoe_sw_match(struct net_device *netdev)
511{
512 /* FIXME - for sw transport, always return false */
513 return false;
514}
515
516/* the sw hba fcoe transport */
517struct fcoe_transport fcoe_sw_transport = {
518 .name = "fcoesw",
519 .create = fcoe_sw_create,
520 .destroy = fcoe_sw_destroy,
521 .match = fcoe_sw_match,
522 .vendor = 0x0,
523 .device = 0xffff,
524};
525
526/**
527 * fcoe_sw_init() - Registers fcoe_sw_transport
528 *
529 * Returns : 0 on success
530 */
531int __init fcoe_sw_init(void)
532{
533 /* attach to scsi transport */
534 scsi_transport_fcoe_sw =
535 fc_attach_transport(&fcoe_sw_transport_function);
536
537 if (!scsi_transport_fcoe_sw) {
538 printk(KERN_ERR "fcoe_sw_init:fc_attach_transport() failed\n");
539 return -ENODEV;
540 }
541
542 mutex_init(&fcoe_sw_transport.devlock);
543 INIT_LIST_HEAD(&fcoe_sw_transport.devlist);
544
545 /* register sw transport */
546 fcoe_transport_register(&fcoe_sw_transport);
547 return 0;
548}
549
550/**
551 * fcoe_sw_exit() - Unregisters fcoe_sw_transport
552 *
553 * Returns : 0 on success
554 */
555int __exit fcoe_sw_exit(void)
556{
557 /* dettach the transport */
558 fc_release_transport(scsi_transport_fcoe_sw);
559 fcoe_transport_unregister(&fcoe_sw_transport);
560 return 0;
561}
diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c
index 0d6f5beb7f9e..f410f4abb548 100644
--- a/drivers/scsi/fcoe/libfcoe.c
+++ b/drivers/scsi/fcoe/libfcoe.c
@@ -1,5 +1,6 @@
1/* 1/*
2 * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved. 2 * Copyright (c) 2008-2009 Cisco Systems, Inc. All rights reserved.
3 * Copyright (c) 2009 Intel Corporation. All rights reserved.
3 * 4 *
4 * This program is free software; you can redistribute it and/or modify it 5 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License, 6 * under the terms and conditions of the GNU General Public License,
@@ -17,1200 +18,1260 @@
17 * Maintained at www.Open-FCoE.org 18 * Maintained at www.Open-FCoE.org
18 */ 19 */
19 20
21#include <linux/types.h>
20#include <linux/module.h> 22#include <linux/module.h>
21#include <linux/version.h>
22#include <linux/kernel.h> 23#include <linux/kernel.h>
24#include <linux/list.h>
23#include <linux/spinlock.h> 25#include <linux/spinlock.h>
24#include <linux/skbuff.h> 26#include <linux/timer.h>
25#include <linux/netdevice.h> 27#include <linux/netdevice.h>
26#include <linux/etherdevice.h> 28#include <linux/etherdevice.h>
27#include <linux/ethtool.h> 29#include <linux/ethtool.h>
28#include <linux/if_ether.h> 30#include <linux/if_ether.h>
29#include <linux/if_vlan.h> 31#include <linux/if_vlan.h>
30#include <linux/kthread.h> 32#include <linux/netdevice.h>
31#include <linux/crc32.h> 33#include <linux/errno.h>
32#include <linux/cpu.h> 34#include <linux/bitops.h>
33#include <linux/fs.h>
34#include <linux/sysfs.h>
35#include <linux/ctype.h>
36#include <scsi/scsi_tcq.h>
37#include <scsi/scsicam.h>
38#include <scsi/scsi_transport.h>
39#include <scsi/scsi_transport_fc.h>
40#include <net/rtnetlink.h> 35#include <net/rtnetlink.h>
41 36
37#include <scsi/fc/fc_els.h>
38#include <scsi/fc/fc_fs.h>
39#include <scsi/fc/fc_fip.h>
42#include <scsi/fc/fc_encaps.h> 40#include <scsi/fc/fc_encaps.h>
41#include <scsi/fc/fc_fcoe.h>
43 42
44#include <scsi/libfc.h> 43#include <scsi/libfc.h>
45#include <scsi/fc_frame.h>
46#include <scsi/libfcoe.h> 44#include <scsi/libfcoe.h>
47#include <scsi/fc_transport_fcoe.h>
48
49static int debug_fcoe;
50 45
51#define FCOE_MAX_QUEUE_DEPTH 256 46MODULE_AUTHOR("Open-FCoE.org");
52#define FCOE_LOW_QUEUE_DEPTH 32 47MODULE_DESCRIPTION("FIP discovery protocol support for FCoE HBAs");
48MODULE_LICENSE("GPL v2");
53 49
54/* destination address mode */ 50#define FCOE_CTLR_MIN_FKA 500 /* min keep alive (mS) */
55#define FCOE_GW_ADDR_MODE 0x00 51#define FCOE_CTLR_DEF_FKA FIP_DEF_FKA /* default keep alive (mS) */
56#define FCOE_FCOUI_ADDR_MODE 0x01
57 52
58#define FCOE_WORD_TO_BYTE 4 53static void fcoe_ctlr_timeout(unsigned long);
54static void fcoe_ctlr_link_work(struct work_struct *);
55static void fcoe_ctlr_recv_work(struct work_struct *);
59 56
60MODULE_AUTHOR("Open-FCoE.org"); 57static u8 fcoe_all_fcfs[ETH_ALEN] = FIP_ALL_FCF_MACS;
61MODULE_DESCRIPTION("FCoE");
62MODULE_LICENSE("GPL");
63 58
64/* fcoe host list */ 59static u32 fcoe_ctlr_debug; /* 1 for basic, 2 for noisy debug */
65LIST_HEAD(fcoe_hostlist);
66DEFINE_RWLOCK(fcoe_hostlist_lock);
67DEFINE_TIMER(fcoe_timer, NULL, 0, 0);
68struct fcoe_percpu_s *fcoe_percpu[NR_CPUS];
69 60
61#define FIP_DBG_LVL(level, fmt, args...) \
62 do { \
63 if (fcoe_ctlr_debug >= (level)) \
64 FC_DBG(fmt, ##args); \
65 } while (0)
70 66
71/* Function Prototyes */ 67#define FIP_DBG(fmt, args...) FIP_DBG_LVL(1, fmt, ##args)
72static int fcoe_check_wait_queue(struct fc_lport *);
73static void fcoe_recv_flogi(struct fcoe_softc *, struct fc_frame *, u8 *);
74#ifdef CONFIG_HOTPLUG_CPU
75static int fcoe_cpu_callback(struct notifier_block *, ulong, void *);
76#endif /* CONFIG_HOTPLUG_CPU */
77static int fcoe_device_notification(struct notifier_block *, ulong, void *);
78static void fcoe_dev_setup(void);
79static void fcoe_dev_cleanup(void);
80 68
81/* notification function from net device */ 69/*
82static struct notifier_block fcoe_notifier = { 70 * Return non-zero if FCF fcoe_size has been validated.
83 .notifier_call = fcoe_device_notification, 71 */
84}; 72static inline int fcoe_ctlr_mtu_valid(const struct fcoe_fcf *fcf)
73{
74 return (fcf->flags & FIP_FL_SOL) != 0;
75}
85 76
77/*
78 * Return non-zero if the FCF is usable.
79 */
80static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf)
81{
82 u16 flags = FIP_FL_SOL | FIP_FL_AVAIL;
86 83
87#ifdef CONFIG_HOTPLUG_CPU 84 return (fcf->flags & flags) == flags;
88static struct notifier_block fcoe_cpu_notifier = { 85}
89 .notifier_call = fcoe_cpu_callback,
90};
91 86
92/** 87/**
93 * fcoe_create_percpu_data() - creates the associated cpu data 88 * fcoe_ctlr_init() - Initialize the FCoE Controller instance.
94 * @cpu: index for the cpu where fcoe cpu data will be created 89 * @fip: FCoE controller.
95 *
96 * create percpu stats block, from cpu add notifier
97 *
98 * Returns: none
99 */ 90 */
100static void fcoe_create_percpu_data(int cpu) 91void fcoe_ctlr_init(struct fcoe_ctlr *fip)
101{ 92{
102 struct fc_lport *lp; 93 fip->state = FIP_ST_LINK_WAIT;
103 struct fcoe_softc *fc; 94 INIT_LIST_HEAD(&fip->fcfs);
104 95 spin_lock_init(&fip->lock);
105 write_lock_bh(&fcoe_hostlist_lock); 96 fip->flogi_oxid = FC_XID_UNKNOWN;
106 list_for_each_entry(fc, &fcoe_hostlist, list) { 97 setup_timer(&fip->timer, fcoe_ctlr_timeout, (unsigned long)fip);
107 lp = fc->lp; 98 INIT_WORK(&fip->link_work, fcoe_ctlr_link_work);
108 if (lp->dev_stats[cpu] == NULL) 99 INIT_WORK(&fip->recv_work, fcoe_ctlr_recv_work);
109 lp->dev_stats[cpu] = 100 skb_queue_head_init(&fip->fip_recv_list);
110 kzalloc(sizeof(struct fcoe_dev_stats),
111 GFP_KERNEL);
112 }
113 write_unlock_bh(&fcoe_hostlist_lock);
114} 101}
102EXPORT_SYMBOL(fcoe_ctlr_init);
115 103
116/** 104/**
117 * fcoe_destroy_percpu_data() - destroys the associated cpu data 105 * fcoe_ctlr_reset_fcfs() - Reset and free all FCFs for a controller.
118 * @cpu: index for the cpu where fcoe cpu data will destroyed 106 * @fip: FCoE controller.
119 *
120 * destroy percpu stats block called by cpu add/remove notifier
121 * 107 *
122 * Retuns: none 108 * Called with &fcoe_ctlr lock held.
123 */ 109 */
124static void fcoe_destroy_percpu_data(int cpu) 110static void fcoe_ctlr_reset_fcfs(struct fcoe_ctlr *fip)
125{ 111{
126 struct fc_lport *lp; 112 struct fcoe_fcf *fcf;
127 struct fcoe_softc *fc; 113 struct fcoe_fcf *next;
128 114
129 write_lock_bh(&fcoe_hostlist_lock); 115 fip->sel_fcf = NULL;
130 list_for_each_entry(fc, &fcoe_hostlist, list) { 116 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
131 lp = fc->lp; 117 list_del(&fcf->list);
132 kfree(lp->dev_stats[cpu]); 118 kfree(fcf);
133 lp->dev_stats[cpu] = NULL;
134 } 119 }
135 write_unlock_bh(&fcoe_hostlist_lock); 120 fip->fcf_count = 0;
121 fip->sel_time = 0;
136} 122}
137 123
138/** 124/**
139 * fcoe_cpu_callback() - fcoe cpu hotplug event callback 125 * fcoe_ctrl_destroy() - Disable and tear-down the FCoE controller.
140 * @nfb: callback data block 126 * @fip: FCoE controller.
141 * @action: event triggering the callback 127 *
142 * @hcpu: index for the cpu of this event 128 * This is called by FCoE drivers before freeing the &fcoe_ctlr.
143 * 129 *
144 * this creates or destroys per cpu data for fcoe 130 * The receive handler will have been deleted before this to guarantee
131 * that no more recv_work will be scheduled.
145 * 132 *
146 * Returns NOTIFY_OK always. 133 * The timer routine will simply return once we set FIP_ST_DISABLED.
134 * This guarantees that no further timeouts or work will be scheduled.
147 */ 135 */
148static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action, 136void fcoe_ctlr_destroy(struct fcoe_ctlr *fip)
149 void *hcpu)
150{ 137{
151 unsigned int cpu = (unsigned long)hcpu; 138 flush_work(&fip->recv_work);
152 139 spin_lock_bh(&fip->lock);
153 switch (action) { 140 fip->state = FIP_ST_DISABLED;
154 case CPU_ONLINE: 141 fcoe_ctlr_reset_fcfs(fip);
155 fcoe_create_percpu_data(cpu); 142 spin_unlock_bh(&fip->lock);
156 break; 143 del_timer_sync(&fip->timer);
157 case CPU_DEAD: 144 flush_work(&fip->link_work);
158 fcoe_destroy_percpu_data(cpu);
159 break;
160 default:
161 break;
162 }
163 return NOTIFY_OK;
164} 145}
165#endif /* CONFIG_HOTPLUG_CPU */ 146EXPORT_SYMBOL(fcoe_ctlr_destroy);
166 147
167/** 148/**
168 * fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ 149 * fcoe_ctlr_fcoe_size() - Return the maximum FCoE size required for VN_Port.
169 * @skb: the receive skb 150 * @fip: FCoE controller.
170 * @dev: associated net device
171 * @ptype: context
172 * @odldev: last device
173 *
174 * this function will receive the packet and build fc frame and pass it up
175 * 151 *
176 * Returns: 0 for success 152 * Returns the maximum packet size including the FCoE header and trailer,
153 * but not including any Ethernet or VLAN headers.
177 */ 154 */
178int fcoe_rcv(struct sk_buff *skb, struct net_device *dev, 155static inline u32 fcoe_ctlr_fcoe_size(struct fcoe_ctlr *fip)
179 struct packet_type *ptype, struct net_device *olddev)
180{ 156{
181 struct fc_lport *lp; 157 /*
182 struct fcoe_rcv_info *fr; 158 * Determine the max FCoE frame size allowed, including
183 struct fcoe_softc *fc; 159 * FCoE header and trailer.
184 struct fcoe_dev_stats *stats; 160 * Note: lp->mfs is currently the payload size, not the frame size.
185 struct fc_frame_header *fh; 161 */
186 unsigned short oxid; 162 return fip->lp->mfs + sizeof(struct fc_frame_header) +
187 int cpu_idx; 163 sizeof(struct fcoe_hdr) + sizeof(struct fcoe_crc_eof);
188 struct fcoe_percpu_s *fps; 164}
189
190 fc = container_of(ptype, struct fcoe_softc, fcoe_packet_type);
191 lp = fc->lp;
192 if (unlikely(lp == NULL)) {
193 FC_DBG("cannot find hba structure");
194 goto err2;
195 }
196
197 if (unlikely(debug_fcoe)) {
198 FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p tail:%p "
199 "end:%p sum:%d dev:%s", skb->len, skb->data_len,
200 skb->head, skb->data, skb_tail_pointer(skb),
201 skb_end_pointer(skb), skb->csum,
202 skb->dev ? skb->dev->name : "<NULL>");
203 165
204 } 166/**
167 * fcoe_ctlr_solicit() - Send a solicitation.
168 * @fip: FCoE controller.
169 * @fcf: Destination FCF. If NULL, a multicast solicitation is sent.
170 */
171static void fcoe_ctlr_solicit(struct fcoe_ctlr *fip, struct fcoe_fcf *fcf)
172{
173 struct sk_buff *skb;
174 struct fip_sol {
175 struct ethhdr eth;
176 struct fip_header fip;
177 struct {
178 struct fip_mac_desc mac;
179 struct fip_wwn_desc wwnn;
180 struct fip_size_desc size;
181 } __attribute__((packed)) desc;
182 } __attribute__((packed)) *sol;
183 u32 fcoe_size;
184
185 skb = dev_alloc_skb(sizeof(*sol));
186 if (!skb)
187 return;
205 188
206 /* check for FCOE packet type */ 189 sol = (struct fip_sol *)skb->data;
207 if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) {
208 FC_DBG("wrong FC type frame");
209 goto err;
210 }
211 190
212 /* 191 memset(sol, 0, sizeof(*sol));
213 * Check for minimum frame length, and make sure required FCoE 192 memcpy(sol->eth.h_dest, fcf ? fcf->fcf_mac : fcoe_all_fcfs, ETH_ALEN);
214 * and FC headers are pulled into the linear data area. 193 memcpy(sol->eth.h_source, fip->ctl_src_addr, ETH_ALEN);
215 */ 194 sol->eth.h_proto = htons(ETH_P_FIP);
216 if (unlikely((skb->len < FCOE_MIN_FRAME) ||
217 !pskb_may_pull(skb, FCOE_HEADER_LEN)))
218 goto err;
219 195
220 skb_set_transport_header(skb, sizeof(struct fcoe_hdr)); 196 sol->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
221 fh = (struct fc_frame_header *) skb_transport_header(skb); 197 sol->fip.fip_op = htons(FIP_OP_DISC);
198 sol->fip.fip_subcode = FIP_SC_SOL;
199 sol->fip.fip_dl_len = htons(sizeof(sol->desc) / FIP_BPW);
200 sol->fip.fip_flags = htons(FIP_FL_FPMA);
222 201
223 oxid = ntohs(fh->fh_ox_id); 202 sol->desc.mac.fd_desc.fip_dtype = FIP_DT_MAC;
203 sol->desc.mac.fd_desc.fip_dlen = sizeof(sol->desc.mac) / FIP_BPW;
204 memcpy(sol->desc.mac.fd_mac, fip->ctl_src_addr, ETH_ALEN);
224 205
225 fr = fcoe_dev_from_skb(skb); 206 sol->desc.wwnn.fd_desc.fip_dtype = FIP_DT_NAME;
226 fr->fr_dev = lp; 207 sol->desc.wwnn.fd_desc.fip_dlen = sizeof(sol->desc.wwnn) / FIP_BPW;
227 fr->ptype = ptype; 208 put_unaligned_be64(fip->lp->wwnn, &sol->desc.wwnn.fd_wwn);
228 cpu_idx = 0;
229#ifdef CONFIG_SMP
230 /*
231 * The incoming frame exchange id(oxid) is ANDed with num of online
232 * cpu bits to get cpu_idx and then this cpu_idx is used for selecting
233 * a per cpu kernel thread from fcoe_percpu. In case the cpu is
234 * offline or no kernel thread for derived cpu_idx then cpu_idx is
235 * initialize to first online cpu index.
236 */
237 cpu_idx = oxid & (num_online_cpus() - 1);
238 if (!fcoe_percpu[cpu_idx] || !cpu_online(cpu_idx))
239 cpu_idx = first_cpu(cpu_online_map);
240#endif
241 fps = fcoe_percpu[cpu_idx];
242 209
243 spin_lock_bh(&fps->fcoe_rx_list.lock); 210 fcoe_size = fcoe_ctlr_fcoe_size(fip);
244 __skb_queue_tail(&fps->fcoe_rx_list, skb); 211 sol->desc.size.fd_desc.fip_dtype = FIP_DT_FCOE_SIZE;
245 if (fps->fcoe_rx_list.qlen == 1) 212 sol->desc.size.fd_desc.fip_dlen = sizeof(sol->desc.size) / FIP_BPW;
246 wake_up_process(fps->thread); 213 sol->desc.size.fd_size = htons(fcoe_size);
247 214
248 spin_unlock_bh(&fps->fcoe_rx_list.lock); 215 skb_put(skb, sizeof(*sol));
216 skb->protocol = htons(ETH_P_802_3);
217 skb_reset_mac_header(skb);
218 skb_reset_network_header(skb);
219 fip->send(fip, skb);
249 220
250 return 0; 221 if (!fcf)
251err: 222 fip->sol_time = jiffies;
252#ifdef CONFIG_SMP
253 stats = lp->dev_stats[smp_processor_id()];
254#else
255 stats = lp->dev_stats[0];
256#endif
257 if (stats)
258 stats->ErrorFrames++;
259
260err2:
261 kfree_skb(skb);
262 return -1;
263} 223}
264EXPORT_SYMBOL_GPL(fcoe_rcv);
265 224
266/** 225/**
267 * fcoe_start_io() - pass to netdev to start xmit for fcoe 226 * fcoe_ctlr_link_up() - Start FCoE controller.
268 * @skb: the skb to be xmitted 227 * @fip: FCoE controller.
269 * 228 *
270 * Returns: 0 for success 229 * Called from the LLD when the network link is ready.
271 */ 230 */
272static inline int fcoe_start_io(struct sk_buff *skb) 231void fcoe_ctlr_link_up(struct fcoe_ctlr *fip)
273{ 232{
274 int rc; 233 spin_lock_bh(&fip->lock);
275 234 if (fip->state == FIP_ST_NON_FIP || fip->state == FIP_ST_AUTO) {
276 skb_get(skb); 235 fip->last_link = 1;
277 rc = dev_queue_xmit(skb); 236 fip->link = 1;
278 if (rc != 0) 237 spin_unlock_bh(&fip->lock);
279 return rc; 238 fc_linkup(fip->lp);
280 kfree_skb(skb); 239 } else if (fip->state == FIP_ST_LINK_WAIT) {
281 return 0; 240 fip->state = FIP_ST_AUTO;
241 fip->last_link = 1;
242 fip->link = 1;
243 spin_unlock_bh(&fip->lock);
244 FIP_DBG("%s", "setting AUTO mode.\n");
245 fc_linkup(fip->lp);
246 fcoe_ctlr_solicit(fip, NULL);
247 } else
248 spin_unlock_bh(&fip->lock);
282} 249}
250EXPORT_SYMBOL(fcoe_ctlr_link_up);
283 251
284/** 252/**
285 * fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof 253 * fcoe_ctlr_reset() - Reset FIP.
286 * @skb: the skb to be xmitted 254 * @fip: FCoE controller.
287 * @tlen: total len 255 * @new_state: FIP state to be entered.
288 * 256 *
289 * Returns: 0 for success 257 * Returns non-zero if the link was up and now isn't.
290 */ 258 */
291static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen) 259static int fcoe_ctlr_reset(struct fcoe_ctlr *fip, enum fip_state new_state)
292{ 260{
293 struct fcoe_percpu_s *fps; 261 struct fc_lport *lp = fip->lp;
294 struct page *page; 262 int link_dropped;
295 int cpu_idx; 263
296 264 spin_lock_bh(&fip->lock);
297 cpu_idx = get_cpu(); 265 fcoe_ctlr_reset_fcfs(fip);
298 fps = fcoe_percpu[cpu_idx]; 266 del_timer(&fip->timer);
299 page = fps->crc_eof_page; 267 fip->state = new_state;
300 if (!page) { 268 fip->ctlr_ka_time = 0;
301 page = alloc_page(GFP_ATOMIC); 269 fip->port_ka_time = 0;
302 if (!page) { 270 fip->sol_time = 0;
303 put_cpu(); 271 fip->flogi_oxid = FC_XID_UNKNOWN;
304 return -ENOMEM; 272 fip->map_dest = 0;
305 } 273 fip->last_link = 0;
306 fps->crc_eof_page = page; 274 link_dropped = fip->link;
307 WARN_ON(fps->crc_eof_offset != 0); 275 fip->link = 0;
276 spin_unlock_bh(&fip->lock);
277
278 if (link_dropped)
279 fc_linkdown(lp);
280
281 if (new_state == FIP_ST_ENABLED) {
282 fcoe_ctlr_solicit(fip, NULL);
283 fc_linkup(lp);
284 link_dropped = 0;
308 } 285 }
309 286 return link_dropped;
310 get_page(page);
311 skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, page,
312 fps->crc_eof_offset, tlen);
313 skb->len += tlen;
314 skb->data_len += tlen;
315 skb->truesize += tlen;
316 fps->crc_eof_offset += sizeof(struct fcoe_crc_eof);
317
318 if (fps->crc_eof_offset >= PAGE_SIZE) {
319 fps->crc_eof_page = NULL;
320 fps->crc_eof_offset = 0;
321 put_page(page);
322 }
323 put_cpu();
324 return 0;
325} 287}
326 288
327/** 289/**
328 * fcoe_fc_crc() - calculates FC CRC in this fcoe skb 290 * fcoe_ctlr_link_down() - Stop FCoE controller.
329 * @fp: the fc_frame containg data to be checksummed 291 * @fip: FCoE controller.
330 * 292 *
331 * This uses crc32() to calculate the crc for fc frame 293 * Returns non-zero if the link was up and now isn't.
332 * Return : 32 bit crc 294 *
295 * Called from the LLD when the network link is not ready.
296 * There may be multiple calls while the link is down.
333 */ 297 */
334u32 fcoe_fc_crc(struct fc_frame *fp) 298int fcoe_ctlr_link_down(struct fcoe_ctlr *fip)
335{ 299{
336 struct sk_buff *skb = fp_skb(fp); 300 return fcoe_ctlr_reset(fip, FIP_ST_LINK_WAIT);
337 struct skb_frag_struct *frag;
338 unsigned char *data;
339 unsigned long off, len, clen;
340 u32 crc;
341 unsigned i;
342
343 crc = crc32(~0, skb->data, skb_headlen(skb));
344
345 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
346 frag = &skb_shinfo(skb)->frags[i];
347 off = frag->page_offset;
348 len = frag->size;
349 while (len > 0) {
350 clen = min(len, PAGE_SIZE - (off & ~PAGE_MASK));
351 data = kmap_atomic(frag->page + (off >> PAGE_SHIFT),
352 KM_SKB_DATA_SOFTIRQ);
353 crc = crc32(crc, data + (off & ~PAGE_MASK), clen);
354 kunmap_atomic(data, KM_SKB_DATA_SOFTIRQ);
355 off += clen;
356 len -= clen;
357 }
358 }
359 return crc;
360} 301}
361EXPORT_SYMBOL_GPL(fcoe_fc_crc); 302EXPORT_SYMBOL(fcoe_ctlr_link_down);
362 303
363/** 304/**
364 * fcoe_xmit() - FCoE frame transmit function 305 * fcoe_ctlr_send_keep_alive() - Send a keep-alive to the selected FCF.
365 * @lp: the associated local port 306 * @fip: FCoE controller.
366 * @fp: the fc_frame to be transmitted 307 * @ports: 0 for controller keep-alive, 1 for port keep-alive.
308 * @sa: source MAC address.
367 * 309 *
368 * Return : 0 for success 310 * A controller keep-alive is sent every fka_period (typically 8 seconds).
311 * The source MAC is the native MAC address.
312 *
313 * A port keep-alive is sent every 90 seconds while logged in.
314 * The source MAC is the assigned mapped source address.
315 * The destination is the FCF's F-port.
369 */ 316 */
370int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp) 317static void fcoe_ctlr_send_keep_alive(struct fcoe_ctlr *fip, int ports, u8 *sa)
371{ 318{
372 int wlen, rc = 0;
373 u32 crc;
374 struct ethhdr *eh;
375 struct fcoe_crc_eof *cp;
376 struct sk_buff *skb; 319 struct sk_buff *skb;
377 struct fcoe_dev_stats *stats; 320 struct fip_kal {
378 struct fc_frame_header *fh; 321 struct ethhdr eth;
379 unsigned int hlen; /* header length implies the version */ 322 struct fip_header fip;
380 unsigned int tlen; /* trailer length */ 323 struct fip_mac_desc mac;
381 unsigned int elen; /* eth header, may include vlan */ 324 } __attribute__((packed)) *kal;
382 int flogi_in_progress = 0; 325 struct fip_vn_desc *vn;
383 struct fcoe_softc *fc; 326 u32 len;
384 u8 sof, eof; 327 struct fc_lport *lp;
385 struct fcoe_hdr *hp; 328 struct fcoe_fcf *fcf;
386
387 WARN_ON((fr_len(fp) % sizeof(u32)) != 0);
388
389 fc = lport_priv(lp);
390 /*
391 * if it is a flogi then we need to learn gw-addr
392 * and my own fcid
393 */
394 fh = fc_frame_header_get(fp);
395 if (unlikely(fh->fh_r_ctl == FC_RCTL_ELS_REQ)) {
396 if (fc_frame_payload_op(fp) == ELS_FLOGI) {
397 fc->flogi_oxid = ntohs(fh->fh_ox_id);
398 fc->address_mode = FCOE_FCOUI_ADDR_MODE;
399 fc->flogi_progress = 1;
400 flogi_in_progress = 1;
401 } else if (fc->flogi_progress && ntoh24(fh->fh_s_id) != 0) {
402 /*
403 * Here we must've gotten an SID by accepting an FLOGI
404 * from a point-to-point connection. Switch to using
405 * the source mac based on the SID. The destination
406 * MAC in this case would have been set by receving the
407 * FLOGI.
408 */
409 fc_fcoe_set_mac(fc->data_src_addr, fh->fh_s_id);
410 fc->flogi_progress = 0;
411 }
412 }
413
414 skb = fp_skb(fp);
415 sof = fr_sof(fp);
416 eof = fr_eof(fp);
417
418 elen = (fc->real_dev->priv_flags & IFF_802_1Q_VLAN) ?
419 sizeof(struct vlan_ethhdr) : sizeof(struct ethhdr);
420 hlen = sizeof(struct fcoe_hdr);
421 tlen = sizeof(struct fcoe_crc_eof);
422 wlen = (skb->len - tlen + sizeof(crc)) / FCOE_WORD_TO_BYTE;
423
424 /* crc offload */
425 if (likely(lp->crc_offload)) {
426 skb->ip_summed = CHECKSUM_PARTIAL;
427 skb->csum_start = skb_headroom(skb);
428 skb->csum_offset = skb->len;
429 crc = 0;
430 } else {
431 skb->ip_summed = CHECKSUM_NONE;
432 crc = fcoe_fc_crc(fp);
433 }
434 329
435 /* copy fc crc and eof to the skb buff */ 330 fcf = fip->sel_fcf;
436 if (skb_is_nonlinear(skb)) { 331 lp = fip->lp;
437 skb_frag_t *frag; 332 if (!fcf || !fc_host_port_id(lp->host))
438 if (fcoe_get_paged_crc_eof(skb, tlen)) { 333 return;
439 kfree_skb(skb);
440 return -ENOMEM;
441 }
442 frag = &skb_shinfo(skb)->frags[skb_shinfo(skb)->nr_frags - 1];
443 cp = kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ)
444 + frag->page_offset;
445 } else {
446 cp = (struct fcoe_crc_eof *)skb_put(skb, tlen);
447 }
448 334
449 memset(cp, 0, sizeof(*cp)); 335 len = fcoe_ctlr_fcoe_size(fip) + sizeof(struct ethhdr);
450 cp->fcoe_eof = eof; 336 BUG_ON(len < sizeof(*kal) + sizeof(*vn));
451 cp->fcoe_crc32 = cpu_to_le32(~crc); 337 skb = dev_alloc_skb(len);
338 if (!skb)
339 return;
452 340
453 if (skb_is_nonlinear(skb)) { 341 kal = (struct fip_kal *)skb->data;
454 kunmap_atomic(cp, KM_SKB_DATA_SOFTIRQ); 342 memset(kal, 0, len);
455 cp = NULL; 343 memcpy(kal->eth.h_dest, fcf->fcf_mac, ETH_ALEN);
344 memcpy(kal->eth.h_source, sa, ETH_ALEN);
345 kal->eth.h_proto = htons(ETH_P_FIP);
346
347 kal->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
348 kal->fip.fip_op = htons(FIP_OP_CTRL);
349 kal->fip.fip_subcode = FIP_SC_KEEP_ALIVE;
350 kal->fip.fip_dl_len = htons((sizeof(kal->mac) +
351 ports * sizeof(*vn)) / FIP_BPW);
352 kal->fip.fip_flags = htons(FIP_FL_FPMA);
353
354 kal->mac.fd_desc.fip_dtype = FIP_DT_MAC;
355 kal->mac.fd_desc.fip_dlen = sizeof(kal->mac) / FIP_BPW;
356 memcpy(kal->mac.fd_mac, fip->ctl_src_addr, ETH_ALEN);
357
358 if (ports) {
359 vn = (struct fip_vn_desc *)(kal + 1);
360 vn->fd_desc.fip_dtype = FIP_DT_VN_ID;
361 vn->fd_desc.fip_dlen = sizeof(*vn) / FIP_BPW;
362 memcpy(vn->fd_mac, fip->data_src_addr, ETH_ALEN);
363 hton24(vn->fd_fc_id, fc_host_port_id(lp->host));
364 put_unaligned_be64(lp->wwpn, &vn->fd_wwpn);
456 } 365 }
457 366
458 /* adjust skb netowrk/transport offsets to match mac/fcoe/fc */ 367 skb_put(skb, len);
459 skb_push(skb, elen + hlen); 368 skb->protocol = htons(ETH_P_802_3);
460 skb_reset_mac_header(skb); 369 skb_reset_mac_header(skb);
461 skb_reset_network_header(skb); 370 skb_reset_network_header(skb);
462 skb->mac_len = elen; 371 fip->send(fip, skb);
463 skb->protocol = htons(ETH_P_FCOE);
464 skb->dev = fc->real_dev;
465
466 /* fill up mac and fcoe headers */
467 eh = eth_hdr(skb);
468 eh->h_proto = htons(ETH_P_FCOE);
469 if (fc->address_mode == FCOE_FCOUI_ADDR_MODE)
470 fc_fcoe_set_mac(eh->h_dest, fh->fh_d_id);
471 else
472 /* insert GW address */
473 memcpy(eh->h_dest, fc->dest_addr, ETH_ALEN);
474
475 if (unlikely(flogi_in_progress))
476 memcpy(eh->h_source, fc->ctl_src_addr, ETH_ALEN);
477 else
478 memcpy(eh->h_source, fc->data_src_addr, ETH_ALEN);
479
480 hp = (struct fcoe_hdr *)(eh + 1);
481 memset(hp, 0, sizeof(*hp));
482 if (FC_FCOE_VER)
483 FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER);
484 hp->fcoe_sof = sof;
485
486#ifdef NETIF_F_FSO
487 /* fcoe lso, mss is in max_payload which is non-zero for FCP data */
488 if (lp->seq_offload && fr_max_payload(fp)) {
489 skb_shinfo(skb)->gso_type = SKB_GSO_FCOE;
490 skb_shinfo(skb)->gso_size = fr_max_payload(fp);
491 } else {
492 skb_shinfo(skb)->gso_type = 0;
493 skb_shinfo(skb)->gso_size = 0;
494 }
495#endif
496 /* update tx stats: regardless if LLD fails */
497 stats = lp->dev_stats[smp_processor_id()];
498 if (stats) {
499 stats->TxFrames++;
500 stats->TxWords += wlen;
501 }
502
503 /* send down to lld */
504 fr_dev(fp) = lp;
505 if (fc->fcoe_pending_queue.qlen)
506 rc = fcoe_check_wait_queue(lp);
507
508 if (rc == 0)
509 rc = fcoe_start_io(skb);
510
511 if (rc) {
512 spin_lock_bh(&fc->fcoe_pending_queue.lock);
513 __skb_queue_tail(&fc->fcoe_pending_queue, skb);
514 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
515 if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
516 lp->qfull = 1;
517 }
518
519 return 0;
520} 372}
521EXPORT_SYMBOL_GPL(fcoe_xmit);
522 373
523/** 374/**
524 * fcoe_percpu_receive_thread() - recv thread per cpu 375 * fcoe_ctlr_encaps() - Encapsulate an ELS frame for FIP, without sending it.
525 * @arg: ptr to the fcoe per cpu struct 376 * @fip: FCoE controller.
377 * @dtype: FIP descriptor type for the frame.
378 * @skb: FCoE ELS frame including FC header but no FCoE headers.
379 *
380 * Returns non-zero error code on failure.
381 *
382 * The caller must check that the length is a multiple of 4.
526 * 383 *
527 * Return: 0 for success 384 * The @skb must have enough headroom (28 bytes) and tailroom (8 bytes).
385 * Headroom includes the FIP encapsulation description, FIP header, and
386 * Ethernet header. The tailroom is for the FIP MAC descriptor.
528 */ 387 */
529int fcoe_percpu_receive_thread(void *arg) 388static int fcoe_ctlr_encaps(struct fcoe_ctlr *fip,
389 u8 dtype, struct sk_buff *skb)
530{ 390{
531 struct fcoe_percpu_s *p = arg; 391 struct fip_encaps_head {
532 u32 fr_len; 392 struct ethhdr eth;
533 struct fc_lport *lp; 393 struct fip_header fip;
534 struct fcoe_rcv_info *fr; 394 struct fip_encaps encaps;
535 struct fcoe_dev_stats *stats; 395 } __attribute__((packed)) *cap;
536 struct fc_frame_header *fh; 396 struct fip_mac_desc *mac;
537 struct sk_buff *skb; 397 struct fcoe_fcf *fcf;
538 struct fcoe_crc_eof crc_eof; 398 size_t dlen;
539 struct fc_frame *fp; 399
540 u8 *mac = NULL; 400 fcf = fip->sel_fcf;
541 struct fcoe_softc *fc; 401 if (!fcf)
542 struct fcoe_hdr *hp; 402 return -ENODEV;
543 403 dlen = sizeof(struct fip_encaps) + skb->len; /* len before push */
544 set_user_nice(current, -20); 404 cap = (struct fip_encaps_head *)skb_push(skb, sizeof(*cap));
545 405
546 while (!kthread_should_stop()) { 406 memset(cap, 0, sizeof(*cap));
547 407 memcpy(cap->eth.h_dest, fcf->fcf_mac, ETH_ALEN);
548 spin_lock_bh(&p->fcoe_rx_list.lock); 408 memcpy(cap->eth.h_source, fip->ctl_src_addr, ETH_ALEN);
549 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) == NULL) { 409 cap->eth.h_proto = htons(ETH_P_FIP);
550 set_current_state(TASK_INTERRUPTIBLE); 410
551 spin_unlock_bh(&p->fcoe_rx_list.lock); 411 cap->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
552 schedule(); 412 cap->fip.fip_op = htons(FIP_OP_LS);
553 set_current_state(TASK_RUNNING); 413 cap->fip.fip_subcode = FIP_SC_REQ;
554 if (kthread_should_stop()) 414 cap->fip.fip_dl_len = htons((dlen + sizeof(*mac)) / FIP_BPW);
555 return 0; 415 cap->fip.fip_flags = htons(FIP_FL_FPMA);
556 spin_lock_bh(&p->fcoe_rx_list.lock); 416
557 } 417 cap->encaps.fd_desc.fip_dtype = dtype;
558 spin_unlock_bh(&p->fcoe_rx_list.lock); 418 cap->encaps.fd_desc.fip_dlen = dlen / FIP_BPW;
559 fr = fcoe_dev_from_skb(skb); 419
560 lp = fr->fr_dev; 420 mac = (struct fip_mac_desc *)skb_put(skb, sizeof(*mac));
561 if (unlikely(lp == NULL)) { 421 memset(mac, 0, sizeof(mac));
562 FC_DBG("invalid HBA Structure"); 422 mac->fd_desc.fip_dtype = FIP_DT_MAC;
563 kfree_skb(skb); 423 mac->fd_desc.fip_dlen = sizeof(*mac) / FIP_BPW;
564 continue; 424 if (dtype != ELS_FLOGI)
565 } 425 memcpy(mac->fd_mac, fip->data_src_addr, ETH_ALEN);
566 426
567 stats = lp->dev_stats[smp_processor_id()]; 427 skb->protocol = htons(ETH_P_802_3);
568 428 skb_reset_mac_header(skb);
569 if (unlikely(debug_fcoe)) { 429 skb_reset_network_header(skb);
570 FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p "
571 "tail:%p end:%p sum:%d dev:%s",
572 skb->len, skb->data_len,
573 skb->head, skb->data, skb_tail_pointer(skb),
574 skb_end_pointer(skb), skb->csum,
575 skb->dev ? skb->dev->name : "<NULL>");
576 }
577
578 /*
579 * Save source MAC address before discarding header.
580 */
581 fc = lport_priv(lp);
582 if (unlikely(fc->flogi_progress))
583 mac = eth_hdr(skb)->h_source;
584
585 if (skb_is_nonlinear(skb))
586 skb_linearize(skb); /* not ideal */
587
588 /*
589 * Frame length checks and setting up the header pointers
590 * was done in fcoe_rcv already.
591 */
592 hp = (struct fcoe_hdr *) skb_network_header(skb);
593 fh = (struct fc_frame_header *) skb_transport_header(skb);
594
595 if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) {
596 if (stats) {
597 if (stats->ErrorFrames < 5)
598 FC_DBG("unknown FCoE version %x",
599 FC_FCOE_DECAPS_VER(hp));
600 stats->ErrorFrames++;
601 }
602 kfree_skb(skb);
603 continue;
604 }
605
606 skb_pull(skb, sizeof(struct fcoe_hdr));
607 fr_len = skb->len - sizeof(struct fcoe_crc_eof);
608
609 if (stats) {
610 stats->RxFrames++;
611 stats->RxWords += fr_len / FCOE_WORD_TO_BYTE;
612 }
613
614 fp = (struct fc_frame *)skb;
615 fc_frame_init(fp);
616 fr_dev(fp) = lp;
617 fr_sof(fp) = hp->fcoe_sof;
618
619 /* Copy out the CRC and EOF trailer for access */
620 if (skb_copy_bits(skb, fr_len, &crc_eof, sizeof(crc_eof))) {
621 kfree_skb(skb);
622 continue;
623 }
624 fr_eof(fp) = crc_eof.fcoe_eof;
625 fr_crc(fp) = crc_eof.fcoe_crc32;
626 if (pskb_trim(skb, fr_len)) {
627 kfree_skb(skb);
628 continue;
629 }
630
631 /*
632 * We only check CRC if no offload is available and if it is
633 * it's solicited data, in which case, the FCP layer would
634 * check it during the copy.
635 */
636 if (lp->crc_offload && skb->ip_summed == CHECKSUM_UNNECESSARY)
637 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED;
638 else
639 fr_flags(fp) |= FCPHF_CRC_UNCHECKED;
640
641 fh = fc_frame_header_get(fp);
642 if (fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA &&
643 fh->fh_type == FC_TYPE_FCP) {
644 fc_exch_recv(lp, lp->emp, fp);
645 continue;
646 }
647 if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) {
648 if (le32_to_cpu(fr_crc(fp)) !=
649 ~crc32(~0, skb->data, fr_len)) {
650 if (debug_fcoe || stats->InvalidCRCCount < 5)
651 printk(KERN_WARNING "fcoe: dropping "
652 "frame with CRC error\n");
653 stats->InvalidCRCCount++;
654 stats->ErrorFrames++;
655 fc_frame_free(fp);
656 continue;
657 }
658 fr_flags(fp) &= ~FCPHF_CRC_UNCHECKED;
659 }
660 /* non flogi and non data exchanges are handled here */
661 if (unlikely(fc->flogi_progress))
662 fcoe_recv_flogi(fc, fp, mac);
663 fc_exch_recv(lp, lp->emp, fp);
664 }
665 return 0; 430 return 0;
666} 431}
667 432
668/** 433/**
669 * fcoe_recv_flogi() - flogi receive function 434 * fcoe_ctlr_els_send() - Send an ELS frame encapsulated by FIP if appropriate.
670 * @fc: associated fcoe_softc 435 * @fip: FCoE controller.
671 * @fp: the recieved frame 436 * @skb: FCoE ELS frame including FC header but no FCoE headers.
672 * @sa: the source address of this flogi
673 * 437 *
674 * This is responsible to parse the flogi response and sets the corresponding 438 * Returns a non-zero error code if the frame should not be sent.
675 * mac address for the initiator, eitehr OUI based or GW based. 439 * Returns zero if the caller should send the frame with FCoE encapsulation.
676 * 440 *
677 * Returns: none 441 * The caller must check that the length is a multiple of 4.
442 * The SKB must have enough headroom (28 bytes) and tailroom (8 bytes).
678 */ 443 */
679static void fcoe_recv_flogi(struct fcoe_softc *fc, struct fc_frame *fp, u8 *sa) 444int fcoe_ctlr_els_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
680{ 445{
681 struct fc_frame_header *fh; 446 struct fc_frame_header *fh;
447 u16 old_xid;
682 u8 op; 448 u8 op;
683 449
684 fh = fc_frame_header_get(fp); 450 if (fip->state == FIP_ST_NON_FIP)
685 if (fh->fh_type != FC_TYPE_ELS) 451 return 0;
686 return;
687 op = fc_frame_payload_op(fp);
688 if (op == ELS_LS_ACC && fh->fh_r_ctl == FC_RCTL_ELS_REP &&
689 fc->flogi_oxid == ntohs(fh->fh_ox_id)) {
690 /*
691 * FLOGI accepted.
692 * If the src mac addr is FC_OUI-based, then we mark the
693 * address_mode flag to use FC_OUI-based Ethernet DA.
694 * Otherwise we use the FCoE gateway addr
695 */
696 if (!compare_ether_addr(sa, (u8[6]) FC_FCOE_FLOGI_MAC)) {
697 fc->address_mode = FCOE_FCOUI_ADDR_MODE;
698 } else {
699 memcpy(fc->dest_addr, sa, ETH_ALEN);
700 fc->address_mode = FCOE_GW_ADDR_MODE;
701 }
702 452
453 fh = (struct fc_frame_header *)skb->data;
454 op = *(u8 *)(fh + 1);
455
456 switch (op) {
457 case ELS_FLOGI:
458 old_xid = fip->flogi_oxid;
459 fip->flogi_oxid = ntohs(fh->fh_ox_id);
460 if (fip->state == FIP_ST_AUTO) {
461 if (old_xid == FC_XID_UNKNOWN)
462 fip->flogi_count = 0;
463 fip->flogi_count++;
464 if (fip->flogi_count < 3)
465 goto drop;
466 fip->map_dest = 1;
467 return 0;
468 }
469 op = FIP_DT_FLOGI;
470 break;
471 case ELS_FDISC:
472 if (ntoh24(fh->fh_s_id))
473 return 0;
474 op = FIP_DT_FDISC;
475 break;
476 case ELS_LOGO:
477 if (fip->state != FIP_ST_ENABLED)
478 return 0;
479 if (ntoh24(fh->fh_d_id) != FC_FID_FLOGI)
480 return 0;
481 op = FIP_DT_LOGO;
482 break;
483 case ELS_LS_ACC:
484 if (fip->flogi_oxid == FC_XID_UNKNOWN)
485 return 0;
486 if (!ntoh24(fh->fh_s_id))
487 return 0;
488 if (fip->state == FIP_ST_AUTO)
489 return 0;
703 /* 490 /*
704 * Remove any previously-set unicast MAC filter. 491 * Here we must've gotten an SID by accepting an FLOGI
705 * Add secondary FCoE MAC address filter for our OUI. 492 * from a point-to-point connection. Switch to using
706 */ 493 * the source mac based on the SID. The destination
707 rtnl_lock(); 494 * MAC in this case would have been set by receving the
708 if (compare_ether_addr(fc->data_src_addr, (u8[6]) { 0 })) 495 * FLOGI.
709 dev_unicast_delete(fc->real_dev, fc->data_src_addr,
710 ETH_ALEN);
711 fc_fcoe_set_mac(fc->data_src_addr, fh->fh_d_id);
712 dev_unicast_add(fc->real_dev, fc->data_src_addr, ETH_ALEN);
713 rtnl_unlock();
714
715 fc->flogi_progress = 0;
716 } else if (op == ELS_FLOGI && fh->fh_r_ctl == FC_RCTL_ELS_REQ && sa) {
717 /*
718 * Save source MAC for point-to-point responses.
719 */ 496 */
720 memcpy(fc->dest_addr, sa, ETH_ALEN); 497 fip->flogi_oxid = FC_XID_UNKNOWN;
721 fc->address_mode = FCOE_GW_ADDR_MODE; 498 fc_fcoe_set_mac(fip->data_src_addr, fh->fh_s_id);
499 return 0;
500 default:
501 if (fip->state != FIP_ST_ENABLED)
502 goto drop;
503 return 0;
722 } 504 }
505 if (fcoe_ctlr_encaps(fip, op, skb))
506 goto drop;
507 fip->send(fip, skb);
508 return -EINPROGRESS;
509drop:
510 kfree_skb(skb);
511 return -EINVAL;
723} 512}
513EXPORT_SYMBOL(fcoe_ctlr_els_send);
724 514
725/** 515/*
726 * fcoe_watchdog() - fcoe timer callback 516 * fcoe_ctlr_age_fcfs() - Reset and free all old FCFs for a controller.
727 * @vp: 517 * @fip: FCoE controller.
728 * 518 *
729 * This checks the pending queue length for fcoe and set lport qfull 519 * Called with lock held.
730 * if the FCOE_MAX_QUEUE_DEPTH is reached. This is done for all fc_lport on the
731 * fcoe_hostlist.
732 * 520 *
733 * Returns: 0 for success 521 * An FCF is considered old if we have missed three advertisements.
522 * That is, there have been no valid advertisement from it for three
523 * times its keep-alive period including fuzz.
524 *
525 * In addition, determine the time when an FCF selection can occur.
734 */ 526 */
735void fcoe_watchdog(ulong vp) 527static void fcoe_ctlr_age_fcfs(struct fcoe_ctlr *fip)
736{ 528{
737 struct fcoe_softc *fc; 529 struct fcoe_fcf *fcf;
738 530 struct fcoe_fcf *next;
739 read_lock(&fcoe_hostlist_lock); 531 unsigned long sel_time = 0;
740 list_for_each_entry(fc, &fcoe_hostlist, list) { 532
741 if (fc->lp) 533 list_for_each_entry_safe(fcf, next, &fip->fcfs, list) {
742 fcoe_check_wait_queue(fc->lp); 534 if (time_after(jiffies, fcf->time + fcf->fka_period * 3 +
535 msecs_to_jiffies(FIP_FCF_FUZZ * 3))) {
536 if (fip->sel_fcf == fcf)
537 fip->sel_fcf = NULL;
538 list_del(&fcf->list);
539 WARN_ON(!fip->fcf_count);
540 fip->fcf_count--;
541 kfree(fcf);
542 } else if (fcoe_ctlr_mtu_valid(fcf) &&
543 (!sel_time || time_before(sel_time, fcf->time))) {
544 sel_time = fcf->time;
545 }
546 }
547 if (sel_time) {
548 sel_time += msecs_to_jiffies(FCOE_CTLR_START_DELAY);
549 fip->sel_time = sel_time;
550 if (time_before(sel_time, fip->timer.expires))
551 mod_timer(&fip->timer, sel_time);
552 } else {
553 fip->sel_time = 0;
743 } 554 }
744 read_unlock(&fcoe_hostlist_lock);
745
746 fcoe_timer.expires = jiffies + (1 * HZ);
747 add_timer(&fcoe_timer);
748} 555}
749 556
750
751/** 557/**
752 * fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue 558 * fcoe_ctlr_parse_adv() - Decode a FIP advertisement into a new FCF entry.
753 * @lp: the fc_port for this skb 559 * @skb: received FIP advertisement frame
754 * @skb: the associated skb to be xmitted 560 * @fcf: resulting FCF entry.
755 * 561 *
756 * This empties the wait_queue, dequeue the head of the wait_queue queue 562 * Returns zero on a valid parsed advertisement,
757 * and calls fcoe_start_io() for each packet, if all skb have been 563 * otherwise returns non zero value.
758 * transmitted, return qlen or -1 if a error occurs, then restore
759 * wait_queue and try again later.
760 *
761 * The wait_queue is used when the skb transmit fails. skb will go
762 * in the wait_queue which will be emptied by the time function OR
763 * by the next skb transmit.
764 *
765 * Returns: 0 for success
766 */ 564 */
767static int fcoe_check_wait_queue(struct fc_lport *lp) 565static int fcoe_ctlr_parse_adv(struct sk_buff *skb, struct fcoe_fcf *fcf)
768{ 566{
769 struct fcoe_softc *fc = lport_priv(lp); 567 struct fip_header *fiph;
770 struct sk_buff *skb; 568 struct fip_desc *desc = NULL;
771 int rc = -1; 569 struct fip_wwn_desc *wwn;
772 570 struct fip_fab_desc *fab;
773 spin_lock_bh(&fc->fcoe_pending_queue.lock); 571 struct fip_fka_desc *fka;
774 if (fc->fcoe_pending_queue_active) 572 unsigned long t;
775 goto out; 573 size_t rlen;
776 fc->fcoe_pending_queue_active = 1; 574 size_t dlen;
777 575
778 while (fc->fcoe_pending_queue.qlen) { 576 memset(fcf, 0, sizeof(*fcf));
779 /* keep qlen > 0 until fcoe_start_io succeeds */ 577 fcf->fka_period = msecs_to_jiffies(FCOE_CTLR_DEF_FKA);
780 fc->fcoe_pending_queue.qlen++; 578
781 skb = __skb_dequeue(&fc->fcoe_pending_queue); 579 fiph = (struct fip_header *)skb->data;
782 580 fcf->flags = ntohs(fiph->fip_flags);
783 spin_unlock_bh(&fc->fcoe_pending_queue.lock); 581
784 rc = fcoe_start_io(skb); 582 rlen = ntohs(fiph->fip_dl_len) * 4;
785 spin_lock_bh(&fc->fcoe_pending_queue.lock); 583 if (rlen + sizeof(*fiph) > skb->len)
786 584 return -EINVAL;
787 if (rc) { 585
788 __skb_queue_head(&fc->fcoe_pending_queue, skb); 586 desc = (struct fip_desc *)(fiph + 1);
789 /* undo temporary increment above */ 587 while (rlen > 0) {
790 fc->fcoe_pending_queue.qlen--; 588 dlen = desc->fip_dlen * FIP_BPW;
589 if (dlen < sizeof(*desc) || dlen > rlen)
590 return -EINVAL;
591 switch (desc->fip_dtype) {
592 case FIP_DT_PRI:
593 if (dlen != sizeof(struct fip_pri_desc))
594 goto len_err;
595 fcf->pri = ((struct fip_pri_desc *)desc)->fd_pri;
791 break; 596 break;
597 case FIP_DT_MAC:
598 if (dlen != sizeof(struct fip_mac_desc))
599 goto len_err;
600 memcpy(fcf->fcf_mac,
601 ((struct fip_mac_desc *)desc)->fd_mac,
602 ETH_ALEN);
603 if (!is_valid_ether_addr(fcf->fcf_mac)) {
604 FIP_DBG("invalid MAC addr in FIP adv\n");
605 return -EINVAL;
606 }
607 break;
608 case FIP_DT_NAME:
609 if (dlen != sizeof(struct fip_wwn_desc))
610 goto len_err;
611 wwn = (struct fip_wwn_desc *)desc;
612 fcf->switch_name = get_unaligned_be64(&wwn->fd_wwn);
613 break;
614 case FIP_DT_FAB:
615 if (dlen != sizeof(struct fip_fab_desc))
616 goto len_err;
617 fab = (struct fip_fab_desc *)desc;
618 fcf->fabric_name = get_unaligned_be64(&fab->fd_wwn);
619 fcf->vfid = ntohs(fab->fd_vfid);
620 fcf->fc_map = ntoh24(fab->fd_map);
621 break;
622 case FIP_DT_FKA:
623 if (dlen != sizeof(struct fip_fka_desc))
624 goto len_err;
625 fka = (struct fip_fka_desc *)desc;
626 t = ntohl(fka->fd_fka_period);
627 if (t >= FCOE_CTLR_MIN_FKA)
628 fcf->fka_period = msecs_to_jiffies(t);
629 break;
630 case FIP_DT_MAP_OUI:
631 case FIP_DT_FCOE_SIZE:
632 case FIP_DT_FLOGI:
633 case FIP_DT_FDISC:
634 case FIP_DT_LOGO:
635 case FIP_DT_ELP:
636 default:
637 FIP_DBG("unexpected descriptor type %x in FIP adv\n",
638 desc->fip_dtype);
639 /* standard says ignore unknown descriptors >= 128 */
640 if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
641 return -EINVAL;
642 continue;
792 } 643 }
793 /* undo temporary increment above */ 644 desc = (struct fip_desc *)((char *)desc + dlen);
794 fc->fcoe_pending_queue.qlen--; 645 rlen -= dlen;
795 } 646 }
647 if (!fcf->fc_map || (fcf->fc_map & 0x10000))
648 return -EINVAL;
649 if (!fcf->switch_name || !fcf->fabric_name)
650 return -EINVAL;
651 return 0;
796 652
797 if (fc->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH) 653len_err:
798 lp->qfull = 0; 654 FIP_DBG("FIP length error in descriptor type %x len %zu\n",
799 fc->fcoe_pending_queue_active = 0; 655 desc->fip_dtype, dlen);
800 rc = fc->fcoe_pending_queue.qlen; 656 return -EINVAL;
801out:
802 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
803 return rc;
804} 657}
805 658
806/** 659/**
807 * fcoe_dev_setup() - setup link change notification interface 660 * fcoe_ctlr_recv_adv() - Handle an incoming advertisement.
661 * @fip: FCoE controller.
662 * @skb: Received FIP packet.
808 */ 663 */
809static void fcoe_dev_setup() 664static void fcoe_ctlr_recv_adv(struct fcoe_ctlr *fip, struct sk_buff *skb)
810{ 665{
666 struct fcoe_fcf *fcf;
667 struct fcoe_fcf new;
668 struct fcoe_fcf *found;
669 unsigned long sol_tov = msecs_to_jiffies(FCOE_CTRL_SOL_TOV);
670 int first = 0;
671 int mtu_valid;
672
673 if (fcoe_ctlr_parse_adv(skb, &new))
674 return;
675
676 spin_lock_bh(&fip->lock);
677 first = list_empty(&fip->fcfs);
678 found = NULL;
679 list_for_each_entry(fcf, &fip->fcfs, list) {
680 if (fcf->switch_name == new.switch_name &&
681 fcf->fabric_name == new.fabric_name &&
682 fcf->fc_map == new.fc_map &&
683 compare_ether_addr(fcf->fcf_mac, new.fcf_mac) == 0) {
684 found = fcf;
685 break;
686 }
687 }
688 if (!found) {
689 if (fip->fcf_count >= FCOE_CTLR_FCF_LIMIT)
690 goto out;
691
692 fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC);
693 if (!fcf)
694 goto out;
695
696 fip->fcf_count++;
697 memcpy(fcf, &new, sizeof(new));
698 list_add(&fcf->list, &fip->fcfs);
699 } else {
700 /*
701 * Flags in advertisements are ignored once the FCF is
702 * selected. Flags in unsolicited advertisements are
703 * ignored after a usable solicited advertisement
704 * has been received.
705 */
706 if (fcf == fip->sel_fcf) {
707 fip->ctlr_ka_time -= fcf->fka_period;
708 fip->ctlr_ka_time += new.fka_period;
709 if (time_before(fip->ctlr_ka_time, fip->timer.expires))
710 mod_timer(&fip->timer, fip->ctlr_ka_time);
711 } else if (!fcoe_ctlr_fcf_usable(fcf))
712 fcf->flags = new.flags;
713 fcf->fka_period = new.fka_period;
714 memcpy(fcf->fcf_mac, new.fcf_mac, ETH_ALEN);
715 }
716 mtu_valid = fcoe_ctlr_mtu_valid(fcf);
717 fcf->time = jiffies;
718 FIP_DBG_LVL(found ? 2 : 1, "%s FCF for fab %llx map %x val %d\n",
719 found ? "old" : "new",
720 fcf->fabric_name, fcf->fc_map, mtu_valid);
721
811 /* 722 /*
812 * here setup a interface specific wd time to 723 * If this advertisement is not solicited and our max receive size
813 * monitor the link state 724 * hasn't been verified, send a solicited advertisement.
814 */ 725 */
815 register_netdevice_notifier(&fcoe_notifier); 726 if (!mtu_valid)
816} 727 fcoe_ctlr_solicit(fip, fcf);
817 728
818/** 729 /*
819 * fcoe_dev_setup() - cleanup link change notification interface 730 * If its been a while since we did a solicit, and this is
820 */ 731 * the first advertisement we've received, do a multicast
821static void fcoe_dev_cleanup(void) 732 * solicitation to gather as many advertisements as we can
822{ 733 * before selection occurs.
823 unregister_netdevice_notifier(&fcoe_notifier); 734 */
735 if (first && time_after(jiffies, fip->sol_time + sol_tov))
736 fcoe_ctlr_solicit(fip, NULL);
737
738 /*
739 * If this is the first validated FCF, note the time and
740 * set a timer to trigger selection.
741 */
742 if (mtu_valid && !fip->sel_time && fcoe_ctlr_fcf_usable(fcf)) {
743 fip->sel_time = jiffies +
744 msecs_to_jiffies(FCOE_CTLR_START_DELAY);
745 if (!timer_pending(&fip->timer) ||
746 time_before(fip->sel_time, fip->timer.expires))
747 mod_timer(&fip->timer, fip->sel_time);
748 }
749out:
750 spin_unlock_bh(&fip->lock);
824} 751}
825 752
826/** 753/**
827 * fcoe_device_notification() - netdev event notification callback 754 * fcoe_ctlr_recv_els() - Handle an incoming FIP-encapsulated ELS frame.
828 * @notifier: context of the notification 755 * @fip: FCoE controller.
829 * @event: type of event 756 * @skb: Received FIP packet.
830 * @ptr: fixed array for output parsed ifname
831 *
832 * This function is called by the ethernet driver in case of link change event
833 *
834 * Returns: 0 for success
835 */ 757 */
836static int fcoe_device_notification(struct notifier_block *notifier, 758static void fcoe_ctlr_recv_els(struct fcoe_ctlr *fip, struct sk_buff *skb)
837 ulong event, void *ptr)
838{ 759{
839 struct fc_lport *lp = NULL; 760 struct fc_lport *lp = fip->lp;
840 struct net_device *real_dev = ptr; 761 struct fip_header *fiph;
841 struct fcoe_softc *fc; 762 struct fc_frame *fp;
763 struct fc_frame_header *fh = NULL;
764 struct fip_desc *desc;
765 struct fip_encaps *els;
842 struct fcoe_dev_stats *stats; 766 struct fcoe_dev_stats *stats;
843 u32 new_link_up; 767 enum fip_desc_type els_dtype = 0;
844 u32 mfs; 768 u8 els_op;
845 int rc = NOTIFY_OK; 769 u8 sub;
846 770 u8 granted_mac[ETH_ALEN] = { 0 };
847 read_lock(&fcoe_hostlist_lock); 771 size_t els_len = 0;
848 list_for_each_entry(fc, &fcoe_hostlist, list) { 772 size_t rlen;
849 if (fc->real_dev == real_dev) { 773 size_t dlen;
850 lp = fc->lp; 774
775 fiph = (struct fip_header *)skb->data;
776 sub = fiph->fip_subcode;
777 if (sub != FIP_SC_REQ && sub != FIP_SC_REP)
778 goto drop;
779
780 rlen = ntohs(fiph->fip_dl_len) * 4;
781 if (rlen + sizeof(*fiph) > skb->len)
782 goto drop;
783
784 desc = (struct fip_desc *)(fiph + 1);
785 while (rlen > 0) {
786 dlen = desc->fip_dlen * FIP_BPW;
787 if (dlen < sizeof(*desc) || dlen > rlen)
788 goto drop;
789 switch (desc->fip_dtype) {
790 case FIP_DT_MAC:
791 if (dlen != sizeof(struct fip_mac_desc))
792 goto len_err;
793 memcpy(granted_mac,
794 ((struct fip_mac_desc *)desc)->fd_mac,
795 ETH_ALEN);
796 if (!is_valid_ether_addr(granted_mac)) {
797 FIP_DBG("invalid MAC addrs in FIP ELS\n");
798 goto drop;
799 }
851 break; 800 break;
801 case FIP_DT_FLOGI:
802 case FIP_DT_FDISC:
803 case FIP_DT_LOGO:
804 case FIP_DT_ELP:
805 if (fh)
806 goto drop;
807 if (dlen < sizeof(*els) + sizeof(*fh) + 1)
808 goto len_err;
809 els_len = dlen - sizeof(*els);
810 els = (struct fip_encaps *)desc;
811 fh = (struct fc_frame_header *)(els + 1);
812 els_dtype = desc->fip_dtype;
813 break;
814 default:
815 FIP_DBG("unexpected descriptor type %x "
816 "in FIP adv\n", desc->fip_dtype);
817 /* standard says ignore unknown descriptors >= 128 */
818 if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
819 goto drop;
820 continue;
852 } 821 }
853 } 822 desc = (struct fip_desc *)((char *)desc + dlen);
854 read_unlock(&fcoe_hostlist_lock); 823 rlen -= dlen;
855 if (lp == NULL) {
856 rc = NOTIFY_DONE;
857 goto out;
858 } 824 }
859 825
860 new_link_up = lp->link_up; 826 if (!fh)
861 switch (event) { 827 goto drop;
862 case NETDEV_DOWN: 828 els_op = *(u8 *)(fh + 1);
863 case NETDEV_GOING_DOWN:
864 new_link_up = 0;
865 break;
866 case NETDEV_UP:
867 case NETDEV_CHANGE:
868 new_link_up = !fcoe_link_ok(lp);
869 break;
870 case NETDEV_CHANGEMTU:
871 mfs = fc->real_dev->mtu -
872 (sizeof(struct fcoe_hdr) +
873 sizeof(struct fcoe_crc_eof));
874 if (mfs >= FC_MIN_MAX_FRAME)
875 fc_set_mfs(lp, mfs);
876 new_link_up = !fcoe_link_ok(lp);
877 break;
878 case NETDEV_REGISTER:
879 break;
880 default:
881 FC_DBG("unknown event %ld call", event);
882 }
883 if (lp->link_up != new_link_up) {
884 if (new_link_up)
885 fc_linkup(lp);
886 else {
887 stats = lp->dev_stats[smp_processor_id()];
888 if (stats)
889 stats->LinkFailureCount++;
890 fc_linkdown(lp);
891 fcoe_clean_pending_queue(lp);
892 }
893 }
894out:
895 return rc;
896}
897 829
898/** 830 if (els_dtype == FIP_DT_FLOGI && sub == FIP_SC_REP &&
899 * fcoe_if_to_netdev() - parse a name buffer to get netdev 831 fip->flogi_oxid == ntohs(fh->fh_ox_id) &&
900 * @ifname: fixed array for output parsed ifname 832 els_op == ELS_LS_ACC && is_valid_ether_addr(granted_mac)) {
901 * @buffer: incoming buffer to be copied 833 fip->flogi_oxid = FC_XID_UNKNOWN;
902 * 834 fip->update_mac(fip, fip->data_src_addr, granted_mac);
903 * Returns: NULL or ptr to netdeive 835 memcpy(fip->data_src_addr, granted_mac, ETH_ALEN);
904 */
905static struct net_device *fcoe_if_to_netdev(const char *buffer)
906{
907 char *cp;
908 char ifname[IFNAMSIZ + 2];
909
910 if (buffer) {
911 strlcpy(ifname, buffer, IFNAMSIZ);
912 cp = ifname + strlen(ifname);
913 while (--cp >= ifname && *cp == '\n')
914 *cp = '\0';
915 return dev_get_by_name(&init_net, ifname);
916 } 836 }
917 return NULL; 837
838 /*
839 * Convert skb into an fc_frame containing only the ELS.
840 */
841 skb_pull(skb, (u8 *)fh - skb->data);
842 skb_trim(skb, els_len);
843 fp = (struct fc_frame *)skb;
844 fc_frame_init(fp);
845 fr_sof(fp) = FC_SOF_I3;
846 fr_eof(fp) = FC_EOF_T;
847 fr_dev(fp) = lp;
848
849 stats = fc_lport_get_stats(lp);
850 stats->RxFrames++;
851 stats->RxWords += skb->len / FIP_BPW;
852
853 fc_exch_recv(lp, lp->emp, fp);
854 return;
855
856len_err:
857 FIP_DBG("FIP length error in descriptor type %x len %zu\n",
858 desc->fip_dtype, dlen);
859drop:
860 kfree_skb(skb);
918} 861}
919 862
920/** 863/**
921 * fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev 864 * fcoe_ctlr_recv_els() - Handle an incoming link reset frame.
922 * @netdev: the target netdev 865 * @fip: FCoE controller.
866 * @fh: Received FIP header.
923 * 867 *
924 * Returns: ptr to the struct module, NULL for failure 868 * There may be multiple VN_Port descriptors.
869 * The overall length has already been checked.
925 */ 870 */
926static struct module * 871static void fcoe_ctlr_recv_clr_vlink(struct fcoe_ctlr *fip,
927fcoe_netdev_to_module_owner(const struct net_device *netdev) 872 struct fip_header *fh)
928{ 873{
929 struct device *dev; 874 struct fip_desc *desc;
930 875 struct fip_mac_desc *mp;
931 if (!netdev) 876 struct fip_wwn_desc *wp;
932 return NULL; 877 struct fip_vn_desc *vp;
933 878 size_t rlen;
934 dev = netdev->dev.parent; 879 size_t dlen;
935 if (!dev) 880 struct fcoe_fcf *fcf = fip->sel_fcf;
936 return NULL; 881 struct fc_lport *lp = fip->lp;
882 u32 desc_mask;
883
884 FIP_DBG("Clear Virtual Link received\n");
885 if (!fcf)
886 return;
887 if (!fcf || !fc_host_port_id(lp->host))
888 return;
937 889
938 if (!dev->driver) 890 /*
939 return NULL; 891 * mask of required descriptors. Validating each one clears its bit.
892 */
893 desc_mask = BIT(FIP_DT_MAC) | BIT(FIP_DT_NAME) | BIT(FIP_DT_VN_ID);
894
895 rlen = ntohs(fh->fip_dl_len) * FIP_BPW;
896 desc = (struct fip_desc *)(fh + 1);
897 while (rlen >= sizeof(*desc)) {
898 dlen = desc->fip_dlen * FIP_BPW;
899 if (dlen > rlen)
900 return;
901 switch (desc->fip_dtype) {
902 case FIP_DT_MAC:
903 mp = (struct fip_mac_desc *)desc;
904 if (dlen < sizeof(*mp))
905 return;
906 if (compare_ether_addr(mp->fd_mac, fcf->fcf_mac))
907 return;
908 desc_mask &= ~BIT(FIP_DT_MAC);
909 break;
910 case FIP_DT_NAME:
911 wp = (struct fip_wwn_desc *)desc;
912 if (dlen < sizeof(*wp))
913 return;
914 if (get_unaligned_be64(&wp->fd_wwn) != fcf->switch_name)
915 return;
916 desc_mask &= ~BIT(FIP_DT_NAME);
917 break;
918 case FIP_DT_VN_ID:
919 vp = (struct fip_vn_desc *)desc;
920 if (dlen < sizeof(*vp))
921 return;
922 if (compare_ether_addr(vp->fd_mac,
923 fip->data_src_addr) == 0 &&
924 get_unaligned_be64(&vp->fd_wwpn) == lp->wwpn &&
925 ntoh24(vp->fd_fc_id) == fc_host_port_id(lp->host))
926 desc_mask &= ~BIT(FIP_DT_VN_ID);
927 break;
928 default:
929 /* standard says ignore unknown descriptors >= 128 */
930 if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
931 return;
932 break;
933 }
934 desc = (struct fip_desc *)((char *)desc + dlen);
935 rlen -= dlen;
936 }
940 937
941 return dev->driver->owner; 938 /*
939 * reset only if all required descriptors were present and valid.
940 */
941 if (desc_mask) {
942 FIP_DBG("missing descriptors mask %x\n", desc_mask);
943 } else {
944 FIP_DBG("performing Clear Virtual Link\n");
945 fcoe_ctlr_reset(fip, FIP_ST_ENABLED);
946 }
942} 947}
943 948
944/** 949/**
945 * fcoe_ethdrv_get() - Hold the Ethernet driver 950 * fcoe_ctlr_recv() - Receive a FIP frame.
946 * @netdev: the target netdev 951 * @fip: FCoE controller.
952 * @skb: Received FIP packet.
947 * 953 *
948 * Holds the Ethernet driver module by try_module_get() for 954 * This is called from NET_RX_SOFTIRQ.
949 * the corresponding netdev.
950 *
951 * Returns: 0 for succsss
952 */ 955 */
953static int fcoe_ethdrv_get(const struct net_device *netdev) 956void fcoe_ctlr_recv(struct fcoe_ctlr *fip, struct sk_buff *skb)
954{ 957{
955 struct module *owner; 958 spin_lock_bh(&fip->fip_recv_list.lock);
956 959 __skb_queue_tail(&fip->fip_recv_list, skb);
957 owner = fcoe_netdev_to_module_owner(netdev); 960 spin_unlock_bh(&fip->fip_recv_list.lock);
958 if (owner) { 961 schedule_work(&fip->recv_work);
959 printk(KERN_DEBUG "fcoe:hold driver module %s for %s\n",
960 module_name(owner), netdev->name);
961 return try_module_get(owner);
962 }
963 return -ENODEV;
964} 962}
963EXPORT_SYMBOL(fcoe_ctlr_recv);
965 964
966/** 965/**
967 * fcoe_ethdrv_put() - Release the Ethernet driver 966 * fcoe_ctlr_recv_handler() - Receive a FIP frame.
968 * @netdev: the target netdev 967 * @fip: FCoE controller.
968 * @skb: Received FIP packet.
969 * 969 *
970 * Releases the Ethernet driver module by module_put for 970 * Returns non-zero if the frame is dropped.
971 * the corresponding netdev.
972 *
973 * Returns: 0 for succsss
974 */ 971 */
975static int fcoe_ethdrv_put(const struct net_device *netdev) 972static int fcoe_ctlr_recv_handler(struct fcoe_ctlr *fip, struct sk_buff *skb)
976{ 973{
977 struct module *owner; 974 struct fip_header *fiph;
975 struct ethhdr *eh;
976 enum fip_state state;
977 u16 op;
978 u8 sub;
979
980 if (skb_linearize(skb))
981 goto drop;
982 if (skb->len < sizeof(*fiph))
983 goto drop;
984 eh = eth_hdr(skb);
985 if (compare_ether_addr(eh->h_dest, fip->ctl_src_addr) &&
986 compare_ether_addr(eh->h_dest, FIP_ALL_ENODE_MACS))
987 goto drop;
988 fiph = (struct fip_header *)skb->data;
989 op = ntohs(fiph->fip_op);
990 sub = fiph->fip_subcode;
991
992 FIP_DBG_LVL(2, "ver %x op %x/%x dl %x fl %x\n",
993 FIP_VER_DECAPS(fiph->fip_ver), op, sub,
994 ntohs(fiph->fip_dl_len), ntohs(fiph->fip_flags));
995
996 if (FIP_VER_DECAPS(fiph->fip_ver) != FIP_VER)
997 goto drop;
998 if (ntohs(fiph->fip_dl_len) * FIP_BPW + sizeof(*fiph) > skb->len)
999 goto drop;
1000
1001 spin_lock_bh(&fip->lock);
1002 state = fip->state;
1003 if (state == FIP_ST_AUTO) {
1004 fip->map_dest = 0;
1005 fip->state = FIP_ST_ENABLED;
1006 state = FIP_ST_ENABLED;
1007 FIP_DBG("using FIP mode\n");
1008 }
1009 spin_unlock_bh(&fip->lock);
1010 if (state != FIP_ST_ENABLED)
1011 goto drop;
978 1012
979 owner = fcoe_netdev_to_module_owner(netdev); 1013 if (op == FIP_OP_LS) {
980 if (owner) { 1014 fcoe_ctlr_recv_els(fip, skb); /* consumes skb */
981 printk(KERN_DEBUG "fcoe:release driver module %s for %s\n",
982 module_name(owner), netdev->name);
983 module_put(owner);
984 return 0; 1015 return 0;
985 } 1016 }
986 return -ENODEV; 1017 if (op == FIP_OP_DISC && sub == FIP_SC_ADV)
1018 fcoe_ctlr_recv_adv(fip, skb);
1019 else if (op == FIP_OP_CTRL && sub == FIP_SC_CLR_VLINK)
1020 fcoe_ctlr_recv_clr_vlink(fip, fiph);
1021 kfree_skb(skb);
1022 return 0;
1023drop:
1024 kfree_skb(skb);
1025 return -1;
987} 1026}
988 1027
989/** 1028/**
990 * fcoe_destroy() - handles the destroy from sysfs 1029 * fcoe_ctlr_select() - Select the best FCF, if possible.
991 * @buffer: expcted to be a eth if name 1030 * @fip: FCoE controller.
992 * @kp: associated kernel param 1031 *
1032 * If there are conflicting advertisements, no FCF can be chosen.
993 * 1033 *
994 * Returns: 0 for success 1034 * Called with lock held.
995 */ 1035 */
996static int fcoe_destroy(const char *buffer, struct kernel_param *kp) 1036static void fcoe_ctlr_select(struct fcoe_ctlr *fip)
997{ 1037{
998 int rc; 1038 struct fcoe_fcf *fcf;
999 struct net_device *netdev; 1039 struct fcoe_fcf *best = NULL;
1000 1040
1001 netdev = fcoe_if_to_netdev(buffer); 1041 list_for_each_entry(fcf, &fip->fcfs, list) {
1002 if (!netdev) { 1042 FIP_DBG("consider FCF for fab %llx VFID %d map %x val %d\n",
1003 rc = -ENODEV; 1043 fcf->fabric_name, fcf->vfid,
1004 goto out_nodev; 1044 fcf->fc_map, fcoe_ctlr_mtu_valid(fcf));
1005 } 1045 if (!fcoe_ctlr_fcf_usable(fcf)) {
1006 /* look for existing lport */ 1046 FIP_DBG("FCF for fab %llx map %x %svalid %savailable\n",
1007 if (!fcoe_hostlist_lookup(netdev)) { 1047 fcf->fabric_name, fcf->fc_map,
1008 rc = -ENODEV; 1048 (fcf->flags & FIP_FL_SOL) ? "" : "in",
1009 goto out_putdev; 1049 (fcf->flags & FIP_FL_AVAIL) ? "" : "un");
1010 } 1050 continue;
1011 /* pass to transport */ 1051 }
1012 rc = fcoe_transport_release(netdev); 1052 if (!best) {
1013 if (rc) { 1053 best = fcf;
1014 printk(KERN_ERR "fcoe: fcoe_transport_release(%s) failed\n", 1054 continue;
1015 netdev->name); 1055 }
1016 rc = -EIO; 1056 if (fcf->fabric_name != best->fabric_name ||
1017 goto out_putdev; 1057 fcf->vfid != best->vfid ||
1058 fcf->fc_map != best->fc_map) {
1059 FIP_DBG("conflicting fabric, VFID, or FC-MAP\n");
1060 return;
1061 }
1062 if (fcf->pri < best->pri)
1063 best = fcf;
1018 } 1064 }
1019 fcoe_ethdrv_put(netdev); 1065 fip->sel_fcf = best;
1020 rc = 0;
1021out_putdev:
1022 dev_put(netdev);
1023out_nodev:
1024 return rc;
1025} 1066}
1026 1067
1027/** 1068/**
1028 * fcoe_create() - Handles the create call from sysfs 1069 * fcoe_ctlr_timeout() - FIP timer function.
1029 * @buffer: expcted to be a eth if name 1070 * @arg: &fcoe_ctlr pointer.
1030 * @kp: associated kernel param
1031 * 1071 *
1032 * Returns: 0 for success 1072 * Ages FCFs. Triggers FCF selection if possible. Sends keep-alives.
1033 */ 1073 */
1034static int fcoe_create(const char *buffer, struct kernel_param *kp) 1074static void fcoe_ctlr_timeout(unsigned long arg)
1035{ 1075{
1036 int rc; 1076 struct fcoe_ctlr *fip = (struct fcoe_ctlr *)arg;
1037 struct net_device *netdev; 1077 struct fcoe_fcf *sel;
1038 1078 struct fcoe_fcf *fcf;
1039 netdev = fcoe_if_to_netdev(buffer); 1079 unsigned long next_timer = jiffies + msecs_to_jiffies(FIP_VN_KA_PERIOD);
1040 if (!netdev) { 1080 DECLARE_MAC_BUF(buf);
1041 rc = -ENODEV; 1081 u8 send_ctlr_ka;
1042 goto out_nodev; 1082 u8 send_port_ka;
1083
1084 spin_lock_bh(&fip->lock);
1085 if (fip->state == FIP_ST_DISABLED) {
1086 spin_unlock_bh(&fip->lock);
1087 return;
1043 } 1088 }
1044 /* look for existing lport */ 1089
1045 if (fcoe_hostlist_lookup(netdev)) { 1090 fcf = fip->sel_fcf;
1046 rc = -EEXIST; 1091 fcoe_ctlr_age_fcfs(fip);
1047 goto out_putdev; 1092
1093 sel = fip->sel_fcf;
1094 if (!sel && fip->sel_time && time_after_eq(jiffies, fip->sel_time)) {
1095 fcoe_ctlr_select(fip);
1096 sel = fip->sel_fcf;
1097 fip->sel_time = 0;
1048 } 1098 }
1049 fcoe_ethdrv_get(netdev); 1099
1050 1100 if (sel != fcf) {
1051 /* pass to transport */ 1101 fcf = sel; /* the old FCF may have been freed */
1052 rc = fcoe_transport_attach(netdev); 1102 if (sel) {
1053 if (rc) { 1103 printk(KERN_INFO "host%d: FIP selected "
1054 printk(KERN_ERR "fcoe: fcoe_transport_attach(%s) failed\n", 1104 "Fibre-Channel Forwarder MAC %s\n",
1055 netdev->name); 1105 fip->lp->host->host_no,
1056 fcoe_ethdrv_put(netdev); 1106 print_mac(buf, sel->fcf_mac));
1057 rc = -EIO; 1107 memcpy(fip->dest_addr, sel->fcf_mac, ETH_ALEN);
1058 goto out_putdev; 1108 fip->port_ka_time = jiffies +
1109 msecs_to_jiffies(FIP_VN_KA_PERIOD);
1110 fip->ctlr_ka_time = jiffies + sel->fka_period;
1111 fip->link = 1;
1112 } else {
1113 printk(KERN_NOTICE "host%d: "
1114 "FIP Fibre-Channel Forwarder timed out. "
1115 "Starting FCF discovery.\n",
1116 fip->lp->host->host_no);
1117 fip->link = 0;
1118 }
1119 schedule_work(&fip->link_work);
1059 } 1120 }
1060 rc = 0;
1061out_putdev:
1062 dev_put(netdev);
1063out_nodev:
1064 return rc;
1065}
1066 1121
1067module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR); 1122 send_ctlr_ka = 0;
1068__MODULE_PARM_TYPE(create, "string"); 1123 send_port_ka = 0;
1069MODULE_PARM_DESC(create, "Create fcoe port using net device passed in."); 1124 if (sel) {
1070module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR); 1125 if (time_after_eq(jiffies, fip->ctlr_ka_time)) {
1071__MODULE_PARM_TYPE(destroy, "string"); 1126 fip->ctlr_ka_time = jiffies + sel->fka_period;
1072MODULE_PARM_DESC(destroy, "Destroy fcoe port"); 1127 send_ctlr_ka = 1;
1128 }
1129 if (time_after(next_timer, fip->ctlr_ka_time))
1130 next_timer = fip->ctlr_ka_time;
1073 1131
1074/** 1132 if (time_after_eq(jiffies, fip->port_ka_time)) {
1075 * fcoe_link_ok() - Check if link is ok for the fc_lport 1133 fip->port_ka_time += jiffies +
1076 * @lp: ptr to the fc_lport 1134 msecs_to_jiffies(FIP_VN_KA_PERIOD);
1077 * 1135 send_port_ka = 1;
1078 * Any permanently-disqualifying conditions have been previously checked.
1079 * This also updates the speed setting, which may change with link for 100/1000.
1080 *
1081 * This function should probably be checking for PAUSE support at some point
1082 * in the future. Currently Per-priority-pause is not determinable using
1083 * ethtool, so we shouldn't be restrictive until that problem is resolved.
1084 *
1085 * Returns: 0 if link is OK for use by FCoE.
1086 *
1087 */
1088int fcoe_link_ok(struct fc_lport *lp)
1089{
1090 struct fcoe_softc *fc = lport_priv(lp);
1091 struct net_device *dev = fc->real_dev;
1092 struct ethtool_cmd ecmd = { ETHTOOL_GSET };
1093 int rc = 0;
1094
1095 if ((dev->flags & IFF_UP) && netif_carrier_ok(dev)) {
1096 dev = fc->phys_dev;
1097 if (dev->ethtool_ops->get_settings) {
1098 dev->ethtool_ops->get_settings(dev, &ecmd);
1099 lp->link_supported_speeds &=
1100 ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT);
1101 if (ecmd.supported & (SUPPORTED_1000baseT_Half |
1102 SUPPORTED_1000baseT_Full))
1103 lp->link_supported_speeds |= FC_PORTSPEED_1GBIT;
1104 if (ecmd.supported & SUPPORTED_10000baseT_Full)
1105 lp->link_supported_speeds |=
1106 FC_PORTSPEED_10GBIT;
1107 if (ecmd.speed == SPEED_1000)
1108 lp->link_speed = FC_PORTSPEED_1GBIT;
1109 if (ecmd.speed == SPEED_10000)
1110 lp->link_speed = FC_PORTSPEED_10GBIT;
1111 } 1136 }
1112 } else 1137 if (time_after(next_timer, fip->port_ka_time))
1113 rc = -1; 1138 next_timer = fip->port_ka_time;
1139 mod_timer(&fip->timer, next_timer);
1140 } else if (fip->sel_time) {
1141 next_timer = fip->sel_time +
1142 msecs_to_jiffies(FCOE_CTLR_START_DELAY);
1143 mod_timer(&fip->timer, next_timer);
1144 }
1145 spin_unlock_bh(&fip->lock);
1114 1146
1115 return rc; 1147 if (send_ctlr_ka)
1148 fcoe_ctlr_send_keep_alive(fip, 0, fip->ctl_src_addr);
1149 if (send_port_ka)
1150 fcoe_ctlr_send_keep_alive(fip, 1, fip->data_src_addr);
1116} 1151}
1117EXPORT_SYMBOL_GPL(fcoe_link_ok);
1118 1152
1119/** 1153/**
1120 * fcoe_percpu_clean() - Clear the pending skbs for an lport 1154 * fcoe_ctlr_link_work() - worker thread function for link changes.
1121 * @lp: the fc_lport 1155 * @work: pointer to link_work member inside &fcoe_ctlr.
1156 *
1157 * See if the link status has changed and if so, report it.
1158 *
1159 * This is here because fc_linkup() and fc_linkdown() must not
1160 * be called from the timer directly, since they use a mutex.
1122 */ 1161 */
1123void fcoe_percpu_clean(struct fc_lport *lp) 1162static void fcoe_ctlr_link_work(struct work_struct *work)
1124{ 1163{
1125 int idx; 1164 struct fcoe_ctlr *fip;
1126 struct fcoe_percpu_s *pp; 1165 int link;
1127 struct fcoe_rcv_info *fr; 1166 int last_link;
1128 struct sk_buff_head *list; 1167
1129 struct sk_buff *skb, *next; 1168 fip = container_of(work, struct fcoe_ctlr, link_work);
1130 struct sk_buff *head; 1169 spin_lock_bh(&fip->lock);
1131 1170 last_link = fip->last_link;
1132 for (idx = 0; idx < NR_CPUS; idx++) { 1171 link = fip->link;
1133 if (fcoe_percpu[idx]) { 1172 fip->last_link = link;
1134 pp = fcoe_percpu[idx]; 1173 spin_unlock_bh(&fip->lock);
1135 spin_lock_bh(&pp->fcoe_rx_list.lock); 1174
1136 list = &pp->fcoe_rx_list; 1175 if (last_link != link) {
1137 head = list->next; 1176 if (link)
1138 for (skb = head; skb != (struct sk_buff *)list; 1177 fc_linkup(fip->lp);
1139 skb = next) { 1178 else
1140 next = skb->next; 1179 fcoe_ctlr_reset(fip, FIP_ST_LINK_WAIT);
1141 fr = fcoe_dev_from_skb(skb);
1142 if (fr->fr_dev == lp) {
1143 __skb_unlink(skb, list);
1144 kfree_skb(skb);
1145 }
1146 }
1147 spin_unlock_bh(&pp->fcoe_rx_list.lock);
1148 }
1149 } 1180 }
1150} 1181}
1151EXPORT_SYMBOL_GPL(fcoe_percpu_clean);
1152 1182
1153/** 1183/**
1154 * fcoe_clean_pending_queue() - Dequeue a skb and free it 1184 * fcoe_ctlr_recv_work() - Worker thread function for receiving FIP frames.
1155 * @lp: the corresponding fc_lport 1185 * @recv_work: pointer to recv_work member inside &fcoe_ctlr.
1156 *
1157 * Returns: none
1158 */ 1186 */
1159void fcoe_clean_pending_queue(struct fc_lport *lp) 1187static void fcoe_ctlr_recv_work(struct work_struct *recv_work)
1160{ 1188{
1161 struct fcoe_softc *fc = lport_priv(lp); 1189 struct fcoe_ctlr *fip;
1162 struct sk_buff *skb; 1190 struct sk_buff *skb;
1163 1191
1164 spin_lock_bh(&fc->fcoe_pending_queue.lock); 1192 fip = container_of(recv_work, struct fcoe_ctlr, recv_work);
1165 while ((skb = __skb_dequeue(&fc->fcoe_pending_queue)) != NULL) { 1193 spin_lock_bh(&fip->fip_recv_list.lock);
1166 spin_unlock_bh(&fc->fcoe_pending_queue.lock); 1194 while ((skb = __skb_dequeue(&fip->fip_recv_list))) {
1167 kfree_skb(skb); 1195 spin_unlock_bh(&fip->fip_recv_list.lock);
1168 spin_lock_bh(&fc->fcoe_pending_queue.lock); 1196 fcoe_ctlr_recv_handler(fip, skb);
1197 spin_lock_bh(&fip->fip_recv_list.lock);
1169 } 1198 }
1170 spin_unlock_bh(&fc->fcoe_pending_queue.lock); 1199 spin_unlock_bh(&fip->fip_recv_list.lock);
1171} 1200}
1172EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue);
1173 1201
1174/** 1202/**
1175 * libfc_host_alloc() - Allocate a Scsi_Host with room for the fc_lport 1203 * fcoe_ctlr_recv_flogi() - snoop Pre-FIP receipt of FLOGI response or request.
1176 * @sht: ptr to the scsi host templ 1204 * @fip: FCoE controller.
1177 * @priv_size: size of private data after fc_lport 1205 * @fp: FC frame.
1206 * @sa: Ethernet source MAC address from received FCoE frame.
1178 * 1207 *
1179 * Returns: ptr to Scsi_Host 1208 * Snoop potential response to FLOGI or even incoming FLOGI.
1180 * TODO: to libfc?
1181 */
1182static inline struct Scsi_Host *
1183libfc_host_alloc(struct scsi_host_template *sht, int priv_size)
1184{
1185 return scsi_host_alloc(sht, sizeof(struct fc_lport) + priv_size);
1186}
1187
1188/**
1189 * fcoe_host_alloc() - Allocate a Scsi_Host with room for the fcoe_softc
1190 * @sht: ptr to the scsi host templ
1191 * @priv_size: size of private data after fc_lport
1192 * 1209 *
1193 * Returns: ptr to Scsi_Host 1210 * The caller has checked that we are waiting for login as indicated
1194 */ 1211 * by fip->flogi_oxid != FC_XID_UNKNOWN.
1195struct Scsi_Host *fcoe_host_alloc(struct scsi_host_template *sht, int priv_size) 1212 *
1196{ 1213 * The caller is responsible for freeing the frame.
1197 return libfc_host_alloc(sht, sizeof(struct fcoe_softc) + priv_size);
1198}
1199EXPORT_SYMBOL_GPL(fcoe_host_alloc);
1200
1201/**
1202 * fcoe_reset() - Resets the fcoe
1203 * @shost: shost the reset is from
1204 * 1214 *
1205 * Returns: always 0 1215 * Return non-zero if the frame should not be delivered to libfc.
1206 */ 1216 */
1207int fcoe_reset(struct Scsi_Host *shost) 1217int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *fip, struct fc_frame *fp, u8 *sa)
1208{ 1218{
1209 struct fc_lport *lport = shost_priv(shost); 1219 struct fc_frame_header *fh;
1210 fc_lport_reset(lport); 1220 u8 op;
1221 u8 mac[ETH_ALEN];
1222
1223 fh = fc_frame_header_get(fp);
1224 if (fh->fh_type != FC_TYPE_ELS)
1225 return 0;
1226
1227 op = fc_frame_payload_op(fp);
1228 if (op == ELS_LS_ACC && fh->fh_r_ctl == FC_RCTL_ELS_REP &&
1229 fip->flogi_oxid == ntohs(fh->fh_ox_id)) {
1230
1231 spin_lock_bh(&fip->lock);
1232 if (fip->state != FIP_ST_AUTO && fip->state != FIP_ST_NON_FIP) {
1233 spin_unlock_bh(&fip->lock);
1234 return -EINVAL;
1235 }
1236 fip->state = FIP_ST_NON_FIP;
1237 FIP_DBG("received FLOGI LS_ACC using non-FIP mode\n");
1238
1239 /*
1240 * FLOGI accepted.
1241 * If the src mac addr is FC_OUI-based, then we mark the
1242 * address_mode flag to use FC_OUI-based Ethernet DA.
1243 * Otherwise we use the FCoE gateway addr
1244 */
1245 if (!compare_ether_addr(sa, (u8[6])FC_FCOE_FLOGI_MAC)) {
1246 fip->map_dest = 1;
1247 } else {
1248 memcpy(fip->dest_addr, sa, ETH_ALEN);
1249 fip->map_dest = 0;
1250 }
1251 fip->flogi_oxid = FC_XID_UNKNOWN;
1252 memcpy(mac, fip->data_src_addr, ETH_ALEN);
1253 fc_fcoe_set_mac(fip->data_src_addr, fh->fh_d_id);
1254 spin_unlock_bh(&fip->lock);
1255
1256 fip->update_mac(fip, mac, fip->data_src_addr);
1257 } else if (op == ELS_FLOGI && fh->fh_r_ctl == FC_RCTL_ELS_REQ && sa) {
1258 /*
1259 * Save source MAC for point-to-point responses.
1260 */
1261 spin_lock_bh(&fip->lock);
1262 if (fip->state == FIP_ST_AUTO || fip->state == FIP_ST_NON_FIP) {
1263 memcpy(fip->dest_addr, sa, ETH_ALEN);
1264 fip->map_dest = 0;
1265 if (fip->state == FIP_ST_NON_FIP)
1266 FIP_DBG("received FLOGI REQ, "
1267 "using non-FIP mode\n");
1268 fip->state = FIP_ST_NON_FIP;
1269 }
1270 spin_unlock_bh(&fip->lock);
1271 }
1211 return 0; 1272 return 0;
1212} 1273}
1213EXPORT_SYMBOL_GPL(fcoe_reset); 1274EXPORT_SYMBOL(fcoe_ctlr_recv_flogi);
1214 1275
1215/** 1276/**
1216 * fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN. 1277 * fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN.
@@ -1254,85 +1315,6 @@ u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN],
1254EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac); 1315EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac);
1255 1316
1256/** 1317/**
1257 * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device
1258 * @device: this is currently ptr to net_device
1259 *
1260 * Returns: NULL or the located fcoe_softc
1261 */
1262static struct fcoe_softc *
1263fcoe_hostlist_lookup_softc(const struct net_device *dev)
1264{
1265 struct fcoe_softc *fc;
1266
1267 read_lock(&fcoe_hostlist_lock);
1268 list_for_each_entry(fc, &fcoe_hostlist, list) {
1269 if (fc->real_dev == dev) {
1270 read_unlock(&fcoe_hostlist_lock);
1271 return fc;
1272 }
1273 }
1274 read_unlock(&fcoe_hostlist_lock);
1275 return NULL;
1276}
1277
1278/**
1279 * fcoe_hostlist_lookup() - Find the corresponding lport by netdev
1280 * @netdev: ptr to net_device
1281 *
1282 * Returns: 0 for success
1283 */
1284struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
1285{
1286 struct fcoe_softc *fc;
1287
1288 fc = fcoe_hostlist_lookup_softc(netdev);
1289
1290 return (fc) ? fc->lp : NULL;
1291}
1292EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup);
1293
1294/**
1295 * fcoe_hostlist_add() - Add a lport to lports list
1296 * @lp: ptr to the fc_lport to badded
1297 *
1298 * Returns: 0 for success
1299 */
1300int fcoe_hostlist_add(const struct fc_lport *lp)
1301{
1302 struct fcoe_softc *fc;
1303
1304 fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp));
1305 if (!fc) {
1306 fc = lport_priv(lp);
1307 write_lock_bh(&fcoe_hostlist_lock);
1308 list_add_tail(&fc->list, &fcoe_hostlist);
1309 write_unlock_bh(&fcoe_hostlist_lock);
1310 }
1311 return 0;
1312}
1313EXPORT_SYMBOL_GPL(fcoe_hostlist_add);
1314
1315/**
1316 * fcoe_hostlist_remove() - remove a lport from lports list
1317 * @lp: ptr to the fc_lport to badded
1318 *
1319 * Returns: 0 for success
1320 */
1321int fcoe_hostlist_remove(const struct fc_lport *lp)
1322{
1323 struct fcoe_softc *fc;
1324
1325 fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp));
1326 BUG_ON(!fc);
1327 write_lock_bh(&fcoe_hostlist_lock);
1328 list_del(&fc->list);
1329 write_unlock_bh(&fcoe_hostlist_lock);
1330
1331 return 0;
1332}
1333EXPORT_SYMBOL_GPL(fcoe_hostlist_remove);
1334
1335/**
1336 * fcoe_libfc_config() - sets up libfc related properties for lport 1318 * fcoe_libfc_config() - sets up libfc related properties for lport
1337 * @lp: ptr to the fc_lport 1319 * @lp: ptr to the fc_lport
1338 * @tt: libfc function template 1320 * @tt: libfc function template
@@ -1354,121 +1336,3 @@ int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt)
1354 return 0; 1336 return 0;
1355} 1337}
1356EXPORT_SYMBOL_GPL(fcoe_libfc_config); 1338EXPORT_SYMBOL_GPL(fcoe_libfc_config);
1357
1358/**
1359 * fcoe_init() - fcoe module loading initialization
1360 *
1361 * Initialization routine
1362 * 1. Will create fc transport software structure
1363 * 2. initialize the link list of port information structure
1364 *
1365 * Returns 0 on success, negative on failure
1366 */
1367static int __init fcoe_init(void)
1368{
1369 int cpu;
1370 struct fcoe_percpu_s *p;
1371
1372
1373 INIT_LIST_HEAD(&fcoe_hostlist);
1374 rwlock_init(&fcoe_hostlist_lock);
1375
1376#ifdef CONFIG_HOTPLUG_CPU
1377 register_cpu_notifier(&fcoe_cpu_notifier);
1378#endif /* CONFIG_HOTPLUG_CPU */
1379
1380 /*
1381 * initialize per CPU interrupt thread
1382 */
1383 for_each_online_cpu(cpu) {
1384 p = kzalloc(sizeof(struct fcoe_percpu_s), GFP_KERNEL);
1385 if (p) {
1386 p->thread = kthread_create(fcoe_percpu_receive_thread,
1387 (void *)p,
1388 "fcoethread/%d", cpu);
1389
1390 /*
1391 * if there is no error then bind the thread to the cpu
1392 * initialize the semaphore and skb queue head
1393 */
1394 if (likely(!IS_ERR(p->thread))) {
1395 p->cpu = cpu;
1396 fcoe_percpu[cpu] = p;
1397 skb_queue_head_init(&p->fcoe_rx_list);
1398 kthread_bind(p->thread, cpu);
1399 wake_up_process(p->thread);
1400 } else {
1401 fcoe_percpu[cpu] = NULL;
1402 kfree(p);
1403 }
1404 }
1405 }
1406
1407 /*
1408 * setup link change notification
1409 */
1410 fcoe_dev_setup();
1411
1412 setup_timer(&fcoe_timer, fcoe_watchdog, 0);
1413
1414 mod_timer(&fcoe_timer, jiffies + (10 * HZ));
1415
1416 /* initiatlize the fcoe transport */
1417 fcoe_transport_init();
1418
1419 fcoe_sw_init();
1420
1421 return 0;
1422}
1423module_init(fcoe_init);
1424
1425/**
1426 * fcoe_exit() - fcoe module unloading cleanup
1427 *
1428 * Returns 0 on success, negative on failure
1429 */
1430static void __exit fcoe_exit(void)
1431{
1432 u32 idx;
1433 struct fcoe_softc *fc, *tmp;
1434 struct fcoe_percpu_s *p;
1435 struct sk_buff *skb;
1436
1437 /*
1438 * Stop all call back interfaces
1439 */
1440#ifdef CONFIG_HOTPLUG_CPU
1441 unregister_cpu_notifier(&fcoe_cpu_notifier);
1442#endif /* CONFIG_HOTPLUG_CPU */
1443 fcoe_dev_cleanup();
1444
1445 /*
1446 * stop timer
1447 */
1448 del_timer_sync(&fcoe_timer);
1449
1450 /* releases the associated fcoe transport for each lport */
1451 list_for_each_entry_safe(fc, tmp, &fcoe_hostlist, list)
1452 fcoe_transport_release(fc->real_dev);
1453
1454 for (idx = 0; idx < NR_CPUS; idx++) {
1455 if (fcoe_percpu[idx]) {
1456 kthread_stop(fcoe_percpu[idx]->thread);
1457 p = fcoe_percpu[idx];
1458 spin_lock_bh(&p->fcoe_rx_list.lock);
1459 while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL)
1460 kfree_skb(skb);
1461 spin_unlock_bh(&p->fcoe_rx_list.lock);
1462 if (fcoe_percpu[idx]->crc_eof_page)
1463 put_page(fcoe_percpu[idx]->crc_eof_page);
1464 kfree(fcoe_percpu[idx]);
1465 }
1466 }
1467
1468 /* remove sw trasnport */
1469 fcoe_sw_exit();
1470
1471 /* detach the transport */
1472 fcoe_transport_exit();
1473}
1474module_exit(fcoe_exit);
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index fb247fdfa2bd..185e6bc4dd40 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -5023,16 +5023,16 @@ static int __devinit gdth_pci_probe_one(gdth_pci_str *pcistr,
5023 /* 64-bit DMA only supported from FW >= x.43 */ 5023 /* 64-bit DMA only supported from FW >= x.43 */
5024 if (!(ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT) || 5024 if (!(ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT) ||
5025 !ha->dma64_support) { 5025 !ha->dma64_support) {
5026 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 5026 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
5027 printk(KERN_WARNING "GDT-PCI %d: " 5027 printk(KERN_WARNING "GDT-PCI %d: "
5028 "Unable to set 32-bit DMA\n", ha->hanum); 5028 "Unable to set 32-bit DMA\n", ha->hanum);
5029 goto out_free_coal_stat; 5029 goto out_free_coal_stat;
5030 } 5030 }
5031 } else { 5031 } else {
5032 shp->max_cmd_len = 16; 5032 shp->max_cmd_len = 16;
5033 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 5033 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
5034 printk("GDT-PCI %d: 64-bit DMA enabled\n", ha->hanum); 5034 printk("GDT-PCI %d: 64-bit DMA enabled\n", ha->hanum);
5035 } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 5035 } else if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
5036 printk(KERN_WARNING "GDT-PCI %d: " 5036 printk(KERN_WARNING "GDT-PCI %d: "
5037 "Unable to set 64/32-bit DMA\n", ha->hanum); 5037 "Unable to set 64/32-bit DMA\n", ha->hanum);
5038 goto out_free_coal_stat; 5038 goto out_free_coal_stat;
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c
index af1f0af0c5ac..c596ab5f05c3 100644
--- a/drivers/scsi/hptiop.c
+++ b/drivers/scsi/hptiop.c
@@ -958,8 +958,8 @@ static int __devinit hptiop_probe(struct pci_dev *pcidev,
958 pci_set_master(pcidev); 958 pci_set_master(pcidev);
959 959
960 /* Enable 64bit DMA if possible */ 960 /* Enable 64bit DMA if possible */
961 if (pci_set_dma_mask(pcidev, DMA_64BIT_MASK)) { 961 if (pci_set_dma_mask(pcidev, DMA_BIT_MASK(64))) {
962 if (pci_set_dma_mask(pcidev, DMA_32BIT_MASK)) { 962 if (pci_set_dma_mask(pcidev, DMA_BIT_MASK(32))) {
963 printk(KERN_ERR "hptiop: fail to set dma_mask\n"); 963 printk(KERN_ERR "hptiop: fail to set dma_mask\n");
964 goto disable_pci_device; 964 goto disable_pci_device;
965 } 965 }
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 93d1fbe4ee5d..ea4abee7a2a9 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -75,7 +75,7 @@ MODULE_PARM_DESC(max_lun, "Maximum allowed LUN. "
75module_param_named(max_targets, max_targets, uint, S_IRUGO); 75module_param_named(max_targets, max_targets, uint, S_IRUGO);
76MODULE_PARM_DESC(max_targets, "Maximum allowed targets. " 76MODULE_PARM_DESC(max_targets, "Maximum allowed targets. "
77 "[Default=" __stringify(IBMVFC_MAX_TARGETS) "]"); 77 "[Default=" __stringify(IBMVFC_MAX_TARGETS) "]");
78module_param_named(disc_threads, disc_threads, uint, S_IRUGO | S_IWUSR); 78module_param_named(disc_threads, disc_threads, uint, S_IRUGO);
79MODULE_PARM_DESC(disc_threads, "Number of device discovery threads to use. " 79MODULE_PARM_DESC(disc_threads, "Number of device discovery threads to use. "
80 "[Default=" __stringify(IBMVFC_MAX_DISC_THREADS) "]"); 80 "[Default=" __stringify(IBMVFC_MAX_DISC_THREADS) "]");
81module_param_named(debug, ibmvfc_debug, uint, S_IRUGO | S_IWUSR); 81module_param_named(debug, ibmvfc_debug, uint, S_IRUGO | S_IWUSR);
@@ -640,6 +640,7 @@ static void ibmvfc_release_crq_queue(struct ibmvfc_host *vhost)
640 640
641 ibmvfc_dbg(vhost, "Releasing CRQ\n"); 641 ibmvfc_dbg(vhost, "Releasing CRQ\n");
642 free_irq(vdev->irq, vhost); 642 free_irq(vdev->irq, vhost);
643 tasklet_kill(&vhost->tasklet);
643 do { 644 do {
644 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); 645 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
645 } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); 646 } while (rc == H_BUSY || H_IS_LONG_BUSY(rc));
@@ -2699,6 +2700,25 @@ static struct ibmvfc_crq *ibmvfc_next_crq(struct ibmvfc_host *vhost)
2699static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance) 2700static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance)
2700{ 2701{
2701 struct ibmvfc_host *vhost = (struct ibmvfc_host *)dev_instance; 2702 struct ibmvfc_host *vhost = (struct ibmvfc_host *)dev_instance;
2703 unsigned long flags;
2704
2705 spin_lock_irqsave(vhost->host->host_lock, flags);
2706 vio_disable_interrupts(to_vio_dev(vhost->dev));
2707 tasklet_schedule(&vhost->tasklet);
2708 spin_unlock_irqrestore(vhost->host->host_lock, flags);
2709 return IRQ_HANDLED;
2710}
2711
2712/**
2713 * ibmvfc_tasklet - Interrupt handler tasklet
2714 * @data: ibmvfc host struct
2715 *
2716 * Returns:
2717 * Nothing
2718 **/
2719static void ibmvfc_tasklet(void *data)
2720{
2721 struct ibmvfc_host *vhost = data;
2702 struct vio_dev *vdev = to_vio_dev(vhost->dev); 2722 struct vio_dev *vdev = to_vio_dev(vhost->dev);
2703 struct ibmvfc_crq *crq; 2723 struct ibmvfc_crq *crq;
2704 struct ibmvfc_async_crq *async; 2724 struct ibmvfc_async_crq *async;
@@ -2706,7 +2726,6 @@ static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance)
2706 int done = 0; 2726 int done = 0;
2707 2727
2708 spin_lock_irqsave(vhost->host->host_lock, flags); 2728 spin_lock_irqsave(vhost->host->host_lock, flags);
2709 vio_disable_interrupts(to_vio_dev(vhost->dev));
2710 while (!done) { 2729 while (!done) {
2711 /* Pull all the valid messages off the CRQ */ 2730 /* Pull all the valid messages off the CRQ */
2712 while ((crq = ibmvfc_next_crq(vhost)) != NULL) { 2731 while ((crq = ibmvfc_next_crq(vhost)) != NULL) {
@@ -2734,7 +2753,6 @@ static irqreturn_t ibmvfc_interrupt(int irq, void *dev_instance)
2734 } 2753 }
2735 2754
2736 spin_unlock_irqrestore(vhost->host->host_lock, flags); 2755 spin_unlock_irqrestore(vhost->host->host_lock, flags);
2737 return IRQ_HANDLED;
2738} 2756}
2739 2757
2740/** 2758/**
@@ -3105,6 +3123,7 @@ static void ibmvfc_tgt_adisc_done(struct ibmvfc_event *evt)
3105 3123
3106 vhost->discovery_threads--; 3124 vhost->discovery_threads--;
3107 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); 3125 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE);
3126 del_timer(&tgt->timer);
3108 3127
3109 switch (status) { 3128 switch (status) {
3110 case IBMVFC_MAD_SUCCESS: 3129 case IBMVFC_MAD_SUCCESS:
@@ -3161,9 +3180,89 @@ static void ibmvfc_init_passthru(struct ibmvfc_event *evt)
3161} 3180}
3162 3181
3163/** 3182/**
3183 * ibmvfc_tgt_adisc_cancel_done - Completion handler when cancelling an ADISC
3184 * @evt: ibmvfc event struct
3185 *
3186 * Just cleanup this event struct. Everything else is handled by
3187 * the ADISC completion handler. If the ADISC never actually comes
3188 * back, we still have the timer running on the ADISC event struct
3189 * which will fire and cause the CRQ to get reset.
3190 *
3191 **/
3192static void ibmvfc_tgt_adisc_cancel_done(struct ibmvfc_event *evt)
3193{
3194 struct ibmvfc_host *vhost = evt->vhost;
3195 struct ibmvfc_target *tgt = evt->tgt;
3196
3197 tgt_dbg(tgt, "ADISC cancel complete\n");
3198 vhost->abort_threads--;
3199 ibmvfc_free_event(evt);
3200 kref_put(&tgt->kref, ibmvfc_release_tgt);
3201 wake_up(&vhost->work_wait_q);
3202}
3203
3204/**
3205 * ibmvfc_adisc_timeout - Handle an ADISC timeout
3206 * @tgt: ibmvfc target struct
3207 *
3208 * If an ADISC times out, send a cancel. If the cancel times
3209 * out, reset the CRQ. When the ADISC comes back as cancelled,
3210 * log back into the target.
3211 **/
3212static void ibmvfc_adisc_timeout(struct ibmvfc_target *tgt)
3213{
3214 struct ibmvfc_host *vhost = tgt->vhost;
3215 struct ibmvfc_event *evt;
3216 struct ibmvfc_tmf *tmf;
3217 unsigned long flags;
3218 int rc;
3219
3220 tgt_dbg(tgt, "ADISC timeout\n");
3221 spin_lock_irqsave(vhost->host->host_lock, flags);
3222 if (vhost->abort_threads >= disc_threads ||
3223 tgt->action != IBMVFC_TGT_ACTION_INIT_WAIT ||
3224 vhost->state != IBMVFC_INITIALIZING ||
3225 vhost->action != IBMVFC_HOST_ACTION_QUERY_TGTS) {
3226 spin_unlock_irqrestore(vhost->host->host_lock, flags);
3227 return;
3228 }
3229
3230 vhost->abort_threads++;
3231 kref_get(&tgt->kref);
3232 evt = ibmvfc_get_event(vhost);
3233 ibmvfc_init_event(evt, ibmvfc_tgt_adisc_cancel_done, IBMVFC_MAD_FORMAT);
3234
3235 evt->tgt = tgt;
3236 tmf = &evt->iu.tmf;
3237 memset(tmf, 0, sizeof(*tmf));
3238 tmf->common.version = 1;
3239 tmf->common.opcode = IBMVFC_TMF_MAD;
3240 tmf->common.length = sizeof(*tmf);
3241 tmf->scsi_id = tgt->scsi_id;
3242 tmf->cancel_key = tgt->cancel_key;
3243
3244 rc = ibmvfc_send_event(evt, vhost, default_timeout);
3245
3246 if (rc) {
3247 tgt_err(tgt, "Failed to send cancel event for ADISC. rc=%d\n", rc);
3248 vhost->abort_threads--;
3249 kref_put(&tgt->kref, ibmvfc_release_tgt);
3250 __ibmvfc_reset_host(vhost);
3251 } else
3252 tgt_dbg(tgt, "Attempting to cancel ADISC\n");
3253 spin_unlock_irqrestore(vhost->host->host_lock, flags);
3254}
3255
3256/**
3164 * ibmvfc_tgt_adisc - Initiate an ADISC for specified target 3257 * ibmvfc_tgt_adisc - Initiate an ADISC for specified target
3165 * @tgt: ibmvfc target struct 3258 * @tgt: ibmvfc target struct
3166 * 3259 *
3260 * When sending an ADISC we end up with two timers running. The
3261 * first timer is the timer in the ibmvfc target struct. If this
3262 * fires, we send a cancel to the target. The second timer is the
3263 * timer on the ibmvfc event for the ADISC, which is longer. If that
3264 * fires, it means the ADISC timed out and our attempt to cancel it
3265 * also failed, so we need to reset the CRQ.
3167 **/ 3266 **/
3168static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) 3267static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt)
3169{ 3268{
@@ -3184,6 +3283,7 @@ static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt)
3184 mad = &evt->iu.passthru; 3283 mad = &evt->iu.passthru;
3185 mad->iu.flags = IBMVFC_FC_ELS; 3284 mad->iu.flags = IBMVFC_FC_ELS;
3186 mad->iu.scsi_id = tgt->scsi_id; 3285 mad->iu.scsi_id = tgt->scsi_id;
3286 mad->iu.cancel_key = tgt->cancel_key;
3187 3287
3188 mad->fc_iu.payload[0] = IBMVFC_ADISC; 3288 mad->fc_iu.payload[0] = IBMVFC_ADISC;
3189 memcpy(&mad->fc_iu.payload[2], &vhost->login_buf->resp.port_name, 3289 memcpy(&mad->fc_iu.payload[2], &vhost->login_buf->resp.port_name,
@@ -3192,9 +3292,19 @@ static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt)
3192 sizeof(vhost->login_buf->resp.node_name)); 3292 sizeof(vhost->login_buf->resp.node_name));
3193 mad->fc_iu.payload[6] = vhost->login_buf->resp.scsi_id & 0x00ffffff; 3293 mad->fc_iu.payload[6] = vhost->login_buf->resp.scsi_id & 0x00ffffff;
3194 3294
3295 if (timer_pending(&tgt->timer))
3296 mod_timer(&tgt->timer, jiffies + (IBMVFC_ADISC_TIMEOUT * HZ));
3297 else {
3298 tgt->timer.data = (unsigned long) tgt;
3299 tgt->timer.expires = jiffies + (IBMVFC_ADISC_TIMEOUT * HZ);
3300 tgt->timer.function = (void (*)(unsigned long))ibmvfc_adisc_timeout;
3301 add_timer(&tgt->timer);
3302 }
3303
3195 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); 3304 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT);
3196 if (ibmvfc_send_event(evt, vhost, default_timeout)) { 3305 if (ibmvfc_send_event(evt, vhost, IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT)) {
3197 vhost->discovery_threads--; 3306 vhost->discovery_threads--;
3307 del_timer(&tgt->timer);
3198 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); 3308 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE);
3199 kref_put(&tgt->kref, ibmvfc_release_tgt); 3309 kref_put(&tgt->kref, ibmvfc_release_tgt);
3200 } else 3310 } else
@@ -3322,6 +3432,8 @@ static int ibmvfc_alloc_target(struct ibmvfc_host *vhost, u64 scsi_id)
3322 tgt->new_scsi_id = scsi_id; 3432 tgt->new_scsi_id = scsi_id;
3323 tgt->vhost = vhost; 3433 tgt->vhost = vhost;
3324 tgt->need_login = 1; 3434 tgt->need_login = 1;
3435 tgt->cancel_key = vhost->task_set++;
3436 init_timer(&tgt->timer);
3325 kref_init(&tgt->kref); 3437 kref_init(&tgt->kref);
3326 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); 3438 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout);
3327 spin_lock_irqsave(vhost->host->host_lock, flags); 3439 spin_lock_irqsave(vhost->host->host_lock, flags);
@@ -3716,6 +3828,7 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost)
3716 spin_unlock_irqrestore(vhost->host->host_lock, flags); 3828 spin_unlock_irqrestore(vhost->host->host_lock, flags);
3717 if (rport) 3829 if (rport)
3718 fc_remote_port_delete(rport); 3830 fc_remote_port_delete(rport);
3831 del_timer_sync(&tgt->timer);
3719 kref_put(&tgt->kref, ibmvfc_release_tgt); 3832 kref_put(&tgt->kref, ibmvfc_release_tgt);
3720 return; 3833 return;
3721 } 3834 }
@@ -3859,6 +3972,8 @@ static int ibmvfc_init_crq(struct ibmvfc_host *vhost)
3859 3972
3860 retrc = 0; 3973 retrc = 0;
3861 3974
3975 tasklet_init(&vhost->tasklet, (void *)ibmvfc_tasklet, (unsigned long)vhost);
3976
3862 if ((rc = request_irq(vdev->irq, ibmvfc_interrupt, 0, IBMVFC_NAME, vhost))) { 3977 if ((rc = request_irq(vdev->irq, ibmvfc_interrupt, 0, IBMVFC_NAME, vhost))) {
3863 dev_err(dev, "Couldn't register irq 0x%x. rc=%d\n", vdev->irq, rc); 3978 dev_err(dev, "Couldn't register irq 0x%x. rc=%d\n", vdev->irq, rc);
3864 goto req_irq_failed; 3979 goto req_irq_failed;
@@ -3874,6 +3989,7 @@ static int ibmvfc_init_crq(struct ibmvfc_host *vhost)
3874 return retrc; 3989 return retrc;
3875 3990
3876req_irq_failed: 3991req_irq_failed:
3992 tasklet_kill(&vhost->tasklet);
3877 do { 3993 do {
3878 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); 3994 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
3879 } while (rc == H_BUSY || H_IS_LONG_BUSY(rc)); 3995 } while (rc == H_BUSY || H_IS_LONG_BUSY(rc));
@@ -4040,6 +4156,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
4040 vhost->dev = dev; 4156 vhost->dev = dev;
4041 vhost->partition_number = -1; 4157 vhost->partition_number = -1;
4042 vhost->log_level = log_level; 4158 vhost->log_level = log_level;
4159 vhost->task_set = 1;
4043 strcpy(vhost->partition_name, "UNKNOWN"); 4160 strcpy(vhost->partition_name, "UNKNOWN");
4044 init_waitqueue_head(&vhost->work_wait_q); 4161 init_waitqueue_head(&vhost->work_wait_q);
4045 init_waitqueue_head(&vhost->init_wait_q); 4162 init_waitqueue_head(&vhost->init_wait_q);
@@ -4174,6 +4291,7 @@ static struct fc_function_template ibmvfc_transport_functions = {
4174 .show_host_supported_classes = 1, 4291 .show_host_supported_classes = 1,
4175 .show_host_port_type = 1, 4292 .show_host_port_type = 1,
4176 .show_host_port_id = 1, 4293 .show_host_port_id = 1,
4294 .show_host_maxframe_size = 1,
4177 4295
4178 .get_host_port_state = ibmvfc_get_host_port_state, 4296 .get_host_port_state = ibmvfc_get_host_port_state,
4179 .show_host_port_state = 1, 4297 .show_host_port_state = 1,
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
index b21e071b9862..ca1dcf7a7568 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
@@ -29,10 +29,14 @@
29#include "viosrp.h" 29#include "viosrp.h"
30 30
31#define IBMVFC_NAME "ibmvfc" 31#define IBMVFC_NAME "ibmvfc"
32#define IBMVFC_DRIVER_VERSION "1.0.4" 32#define IBMVFC_DRIVER_VERSION "1.0.5"
33#define IBMVFC_DRIVER_DATE "(November 14, 2008)" 33#define IBMVFC_DRIVER_DATE "(March 19, 2009)"
34 34
35#define IBMVFC_DEFAULT_TIMEOUT 60 35#define IBMVFC_DEFAULT_TIMEOUT 60
36#define IBMVFC_ADISC_CANCEL_TIMEOUT 45
37#define IBMVFC_ADISC_TIMEOUT 15
38#define IBMVFC_ADISC_PLUS_CANCEL_TIMEOUT \
39 (IBMVFC_ADISC_TIMEOUT + IBMVFC_ADISC_CANCEL_TIMEOUT)
36#define IBMVFC_INIT_TIMEOUT 120 40#define IBMVFC_INIT_TIMEOUT 120
37#define IBMVFC_MAX_REQUESTS_DEFAULT 100 41#define IBMVFC_MAX_REQUESTS_DEFAULT 100
38 42
@@ -53,9 +57,9 @@
53 * Ensure we have resources for ERP and initialization: 57 * Ensure we have resources for ERP and initialization:
54 * 1 for ERP 58 * 1 for ERP
55 * 1 for initialization 59 * 1 for initialization
56 * 1 for each discovery thread 60 * 2 for each discovery thread
57 */ 61 */
58#define IBMVFC_NUM_INTERNAL_REQ (1 + 1 + disc_threads) 62#define IBMVFC_NUM_INTERNAL_REQ (1 + 1 + (disc_threads * 2))
59 63
60#define IBMVFC_MAD_SUCCESS 0x00 64#define IBMVFC_MAD_SUCCESS 0x00
61#define IBMVFC_MAD_NOT_SUPPORTED 0xF1 65#define IBMVFC_MAD_NOT_SUPPORTED 0xF1
@@ -585,10 +589,12 @@ struct ibmvfc_target {
585 enum ibmvfc_target_action action; 589 enum ibmvfc_target_action action;
586 int need_login; 590 int need_login;
587 int init_retries; 591 int init_retries;
592 u32 cancel_key;
588 struct ibmvfc_service_parms service_parms; 593 struct ibmvfc_service_parms service_parms;
589 struct ibmvfc_service_parms service_parms_change; 594 struct ibmvfc_service_parms service_parms_change;
590 struct fc_rport_identifiers ids; 595 struct fc_rport_identifiers ids;
591 void (*job_step) (struct ibmvfc_target *); 596 void (*job_step) (struct ibmvfc_target *);
597 struct timer_list timer;
592 struct kref kref; 598 struct kref kref;
593}; 599};
594 600
@@ -672,6 +678,7 @@ struct ibmvfc_host {
672 int task_set; 678 int task_set;
673 int init_retries; 679 int init_retries;
674 int discovery_threads; 680 int discovery_threads;
681 int abort_threads;
675 int client_migrated; 682 int client_migrated;
676 int reinit; 683 int reinit;
677 int delay_init; 684 int delay_init;
@@ -684,6 +691,7 @@ struct ibmvfc_host {
684 char partition_name[97]; 691 char partition_name[97];
685 void (*job_step) (struct ibmvfc_host *); 692 void (*job_step) (struct ibmvfc_host *);
686 struct task_struct *work_thread; 693 struct task_struct *work_thread;
694 struct tasklet_struct tasklet;
687 wait_queue_head_t init_wait_q; 695 wait_queue_head_t init_wait_q;
688 wait_queue_head_t work_wait_q; 696 wait_queue_head_t work_wait_q;
689}; 697};
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 5529518ff2fa..89a59484be02 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -2856,7 +2856,7 @@ static int initio_probe_one(struct pci_dev *pdev,
2856 reg = 0; 2856 reg = 0;
2857 bios_seg = (bios_seg << 8) + ((u16) ((reg & 0xFF00) >> 8)); 2857 bios_seg = (bios_seg << 8) + ((u16) ((reg & 0xFF00) >> 8));
2858 2858
2859 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 2859 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
2860 printk(KERN_WARNING "i91u: Could not set 32 bit DMA mask\n"); 2860 printk(KERN_WARNING "i91u: Could not set 32 bit DMA mask\n");
2861 error = -ENODEV; 2861 error = -ENODEV;
2862 goto out_disable_device; 2862 goto out_disable_device;
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index def473f0a98f..c09d77591f92 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -7498,7 +7498,7 @@ static int __devinit ipr_probe_ioa(struct pci_dev *pdev,
7498 7498
7499 pci_set_master(pdev); 7499 pci_set_master(pdev);
7500 7500
7501 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 7501 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
7502 if (rc < 0) { 7502 if (rc < 0) {
7503 dev_err(&pdev->dev, "Failed to set PCI DMA mask\n"); 7503 dev_err(&pdev->dev, "Failed to set PCI DMA mask\n");
7504 goto cleanup_nomem; 7504 goto cleanup_nomem;
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 457d76a4cfe5..f83a116955f2 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -7048,10 +7048,10 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)
7048 * are guaranteed to be < 4G. 7048 * are guaranteed to be < 4G.
7049 */ 7049 */
7050 if (IPS_ENABLE_DMA64 && IPS_HAS_ENH_SGLIST(ha) && 7050 if (IPS_ENABLE_DMA64 && IPS_HAS_ENH_SGLIST(ha) &&
7051 !pci_set_dma_mask(ha->pcidev, DMA_64BIT_MASK)) { 7051 !pci_set_dma_mask(ha->pcidev, DMA_BIT_MASK(64))) {
7052 (ha)->flags |= IPS_HA_ENH_SG; 7052 (ha)->flags |= IPS_HA_ENH_SG;
7053 } else { 7053 } else {
7054 if (pci_set_dma_mask(ha->pcidev, DMA_32BIT_MASK) != 0) { 7054 if (pci_set_dma_mask(ha->pcidev, DMA_BIT_MASK(32)) != 0) {
7055 printk(KERN_WARNING "Unable to set DMA Mask\n"); 7055 printk(KERN_WARNING "Unable to set DMA Mask\n");
7056 return ips_abort_init(ha, index); 7056 return ips_abort_init(ha, index);
7057 } 7057 }
diff --git a/drivers/scsi/lasi700.c b/drivers/scsi/lasi700.c
index f23c4ca9a2ee..b3d31315ac32 100644
--- a/drivers/scsi/lasi700.c
+++ b/drivers/scsi/lasi700.c
@@ -108,7 +108,7 @@ lasi700_probe(struct parisc_device *dev)
108 } 108 }
109 109
110 hostdata->dev = &dev->dev; 110 hostdata->dev = &dev->dev;
111 dma_set_mask(&dev->dev, DMA_32BIT_MASK); 111 dma_set_mask(&dev->dev, DMA_BIT_MASK(32));
112 hostdata->base = ioremap_nocache(base, 0x100); 112 hostdata->base = ioremap_nocache(base, 0x100);
113 hostdata->differential = 0; 113 hostdata->differential = 0;
114 114
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index a5725f3b7ce1..f555ae99ad40 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -41,7 +41,7 @@
41 41
42MODULE_AUTHOR("Open-FCoE.org"); 42MODULE_AUTHOR("Open-FCoE.org");
43MODULE_DESCRIPTION("libfc"); 43MODULE_DESCRIPTION("libfc");
44MODULE_LICENSE("GPL"); 44MODULE_LICENSE("GPL v2");
45 45
46static int fc_fcp_debug; 46static int fc_fcp_debug;
47 47
@@ -407,10 +407,12 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
407 407
408 if (~crc != le32_to_cpu(fr_crc(fp))) { 408 if (~crc != le32_to_cpu(fr_crc(fp))) {
409crc_err: 409crc_err:
410 stats = lp->dev_stats[smp_processor_id()]; 410 stats = fc_lport_get_stats(lp);
411 stats->ErrorFrames++; 411 stats->ErrorFrames++;
412 /* FIXME - per cpu count, not total count! */
412 if (stats->InvalidCRCCount++ < 5) 413 if (stats->InvalidCRCCount++ < 5)
413 FC_DBG("CRC error on data frame\n"); 414 printk(KERN_WARNING "CRC error on data frame for port (%6x)\n",
415 fc_host_port_id(lp->host));
414 /* 416 /*
415 * Assume the frame is total garbage. 417 * Assume the frame is total garbage.
416 * We may have copied it over the good part 418 * We may have copied it over the good part
@@ -1752,7 +1754,7 @@ int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *))
1752 /* 1754 /*
1753 * setup the data direction 1755 * setup the data direction
1754 */ 1756 */
1755 stats = lp->dev_stats[smp_processor_id()]; 1757 stats = fc_lport_get_stats(lp);
1756 if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) { 1758 if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) {
1757 fsp->req_flags = FC_SRB_READ; 1759 fsp->req_flags = FC_SRB_READ;
1758 stats->InputRequests++; 1760 stats->InputRequests++;
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 7ef44501ecc6..b8178ef398d7 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -267,10 +267,10 @@ EXPORT_SYMBOL(fc_get_host_speed);
267 267
268struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) 268struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost)
269{ 269{
270 int i;
271 struct fc_host_statistics *fcoe_stats; 270 struct fc_host_statistics *fcoe_stats;
272 struct fc_lport *lp = shost_priv(shost); 271 struct fc_lport *lp = shost_priv(shost);
273 struct timespec v0, v1; 272 struct timespec v0, v1;
273 unsigned int cpu;
274 274
275 fcoe_stats = &lp->host_stats; 275 fcoe_stats = &lp->host_stats;
276 memset(fcoe_stats, 0, sizeof(struct fc_host_statistics)); 276 memset(fcoe_stats, 0, sizeof(struct fc_host_statistics));
@@ -279,10 +279,11 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost)
279 jiffies_to_timespec(lp->boot_time, &v1); 279 jiffies_to_timespec(lp->boot_time, &v1);
280 fcoe_stats->seconds_since_last_reset = (v0.tv_sec - v1.tv_sec); 280 fcoe_stats->seconds_since_last_reset = (v0.tv_sec - v1.tv_sec);
281 281
282 for_each_online_cpu(i) { 282 for_each_possible_cpu(cpu) {
283 struct fcoe_dev_stats *stats = lp->dev_stats[i]; 283 struct fcoe_dev_stats *stats;
284 if (stats == NULL) 284
285 continue; 285 stats = per_cpu_ptr(lp->dev_stats, cpu);
286
286 fcoe_stats->tx_frames += stats->TxFrames; 287 fcoe_stats->tx_frames += stats->TxFrames;
287 fcoe_stats->tx_words += stats->TxWords; 288 fcoe_stats->tx_words += stats->TxWords;
288 fcoe_stats->rx_frames += stats->RxFrames; 289 fcoe_stats->rx_frames += stats->RxFrames;
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index dfaa8adf099e..689628359169 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1999,8 +1999,10 @@ iscsi_pool_init(struct iscsi_pool *q, int max, void ***items, int item_size)
1999 1999
2000 q->queue = kfifo_init((void*)q->pool, max * sizeof(void*), 2000 q->queue = kfifo_init((void*)q->pool, max * sizeof(void*),
2001 GFP_KERNEL, NULL); 2001 GFP_KERNEL, NULL);
2002 if (q->queue == ERR_PTR(-ENOMEM)) 2002 if (IS_ERR(q->queue)) {
2003 q->queue = NULL;
2003 goto enomem; 2004 goto enomem;
2005 }
2004 2006
2005 for (i = 0; i < max; i++) { 2007 for (i = 0; i < max; i++) {
2006 q->pool[i] = kzalloc(item_size, GFP_KERNEL); 2008 q->pool[i] = kzalloc(item_size, GFP_KERNEL);
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 6c867311cef1..06874e6009ea 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -2660,8 +2660,8 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
2660 pci_save_state(pdev); 2660 pci_save_state(pdev);
2661 pci_try_set_mwi(pdev); 2661 pci_try_set_mwi(pdev);
2662 2662
2663 if (pci_set_dma_mask(phba->pcidev, DMA_64BIT_MASK) != 0) 2663 if (pci_set_dma_mask(phba->pcidev, DMA_BIT_MASK(64)) != 0)
2664 if (pci_set_dma_mask(phba->pcidev, DMA_32BIT_MASK) != 0) 2664 if (pci_set_dma_mask(phba->pcidev, DMA_BIT_MASK(32)) != 0)
2665 goto out_idr_remove; 2665 goto out_idr_remove;
2666 2666
2667 /* 2667 /*
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 9fdcd60c5493..49eb0612d5af 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -2021,7 +2021,7 @@ make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
2021 2021
2022 memcpy(*pdev, adapter->dev, sizeof(struct pci_dev)); 2022 memcpy(*pdev, adapter->dev, sizeof(struct pci_dev));
2023 2023
2024 if( pci_set_dma_mask(*pdev, DMA_32BIT_MASK) != 0 ) { 2024 if( pci_set_dma_mask(*pdev, DMA_BIT_MASK(32)) != 0 ) {
2025 kfree(*pdev); 2025 kfree(*pdev);
2026 return -1; 2026 return -1;
2027 } 2027 }
@@ -4793,10 +4793,10 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
4793 4793
4794 /* Set the Mode of addressing to 64 bit if we can */ 4794 /* Set the Mode of addressing to 64 bit if we can */
4795 if ((adapter->flag & BOARD_64BIT) && (sizeof(dma_addr_t) == 8)) { 4795 if ((adapter->flag & BOARD_64BIT) && (sizeof(dma_addr_t) == 8)) {
4796 pci_set_dma_mask(pdev, DMA_64BIT_MASK); 4796 pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
4797 adapter->has_64bit_addr = 1; 4797 adapter->has_64bit_addr = 1;
4798 } else { 4798 } else {
4799 pci_set_dma_mask(pdev, DMA_32BIT_MASK); 4799 pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4800 adapter->has_64bit_addr = 0; 4800 adapter->has_64bit_addr = 0;
4801 } 4801 }
4802 4802
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c
index 805bb61dde18..234f0b7eb21c 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.c
+++ b/drivers/scsi/megaraid/megaraid_mbox.c
@@ -473,7 +473,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
473 473
474 // Setup the default DMA mask. This would be changed later on 474 // Setup the default DMA mask. This would be changed later on
475 // depending on hardware capabilities 475 // depending on hardware capabilities
476 if (pci_set_dma_mask(adapter->pdev, DMA_32BIT_MASK) != 0) { 476 if (pci_set_dma_mask(adapter->pdev, DMA_BIT_MASK(32)) != 0) {
477 477
478 con_log(CL_ANN, (KERN_WARNING 478 con_log(CL_ANN, (KERN_WARNING
479 "megaraid: pci_set_dma_mask failed:%d\n", __LINE__)); 479 "megaraid: pci_set_dma_mask failed:%d\n", __LINE__));
@@ -900,11 +900,11 @@ megaraid_init_mbox(adapter_t *adapter)
900 adapter->pdev->device == PCI_DEVICE_ID_PERC4_DI_EVERGLADES) || 900 adapter->pdev->device == PCI_DEVICE_ID_PERC4_DI_EVERGLADES) ||
901 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL && 901 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL &&
902 adapter->pdev->device == PCI_DEVICE_ID_PERC4E_DI_KOBUK)) { 902 adapter->pdev->device == PCI_DEVICE_ID_PERC4E_DI_KOBUK)) {
903 if (pci_set_dma_mask(adapter->pdev, DMA_64BIT_MASK)) { 903 if (pci_set_dma_mask(adapter->pdev, DMA_BIT_MASK(64))) {
904 con_log(CL_ANN, (KERN_WARNING 904 con_log(CL_ANN, (KERN_WARNING
905 "megaraid: DMA mask for 64-bit failed\n")); 905 "megaraid: DMA mask for 64-bit failed\n"));
906 906
907 if (pci_set_dma_mask (adapter->pdev, DMA_32BIT_MASK)) { 907 if (pci_set_dma_mask (adapter->pdev, DMA_BIT_MASK(32))) {
908 con_log(CL_ANN, (KERN_WARNING 908 con_log(CL_ANN, (KERN_WARNING
909 "megaraid: 32-bit DMA mask failed\n")); 909 "megaraid: 32-bit DMA mask failed\n"));
910 goto out_free_sysfs_res; 910 goto out_free_sysfs_res;
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c
index 17ce7abe17ee..7dc3d1894b1a 100644
--- a/drivers/scsi/megaraid/megaraid_sas.c
+++ b/drivers/scsi/megaraid/megaraid_sas.c
@@ -2497,13 +2497,13 @@ megasas_set_dma_mask(struct pci_dev *pdev)
2497 * All our contollers are capable of performing 64-bit DMA 2497 * All our contollers are capable of performing 64-bit DMA
2498 */ 2498 */
2499 if (IS_DMA64) { 2499 if (IS_DMA64) {
2500 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) != 0) { 2500 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
2501 2501
2502 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) 2502 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)
2503 goto fail_set_dma_mask; 2503 goto fail_set_dma_mask;
2504 } 2504 }
2505 } else { 2505 } else {
2506 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) 2506 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)
2507 goto fail_set_dma_mask; 2507 goto fail_set_dma_mask;
2508 } 2508 }
2509 return 0; 2509 return 0;
diff --git a/drivers/scsi/mvsas.c b/drivers/scsi/mvsas.c
index 23e5a876bb10..e4acebd10d1b 100644
--- a/drivers/scsi/mvsas.c
+++ b/drivers/scsi/mvsas.c
@@ -875,10 +875,10 @@ static int pci_go_64(struct pci_dev *pdev)
875{ 875{
876 int rc; 876 int rc;
877 877
878 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { 878 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
879 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 879 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
880 if (rc) { 880 if (rc) {
881 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 881 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
882 if (rc) { 882 if (rc) {
883 dev_printk(KERN_ERR, &pdev->dev, 883 dev_printk(KERN_ERR, &pdev->dev,
884 "64-bit DMA enable failed\n"); 884 "64-bit DMA enable failed\n");
@@ -886,13 +886,13 @@ static int pci_go_64(struct pci_dev *pdev)
886 } 886 }
887 } 887 }
888 } else { 888 } else {
889 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 889 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
890 if (rc) { 890 if (rc) {
891 dev_printk(KERN_ERR, &pdev->dev, 891 dev_printk(KERN_ERR, &pdev->dev,
892 "32-bit DMA enable failed\n"); 892 "32-bit DMA enable failed\n");
893 return rc; 893 return rc;
894 } 894 }
895 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 895 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
896 if (rc) { 896 if (rc) {
897 dev_printk(KERN_ERR, &pdev->dev, 897 dev_printk(KERN_ERR, &pdev->dev,
898 "32-bit consistent DMA enable failed\n"); 898 "32-bit consistent DMA enable failed\n");
diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
index d06ec5aa6924..2be7d5b018d2 100644
--- a/drivers/scsi/nsp32.c
+++ b/drivers/scsi/nsp32.c
@@ -2672,7 +2672,7 @@ static int nsp32_detect(struct pci_dev *pdev)
2672 /* 2672 /*
2673 * setup DMA 2673 * setup DMA
2674 */ 2674 */
2675 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) { 2675 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
2676 nsp32_msg (KERN_ERR, "failed to set PCI DMA mask"); 2676 nsp32_msg (KERN_ERR, "failed to set PCI DMA mask");
2677 goto scsi_unregister; 2677 goto scsi_unregister;
2678 } 2678 }
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c
index 552f58b655d1..2a5f0777148d 100644
--- a/drivers/scsi/osd/osd_initiator.c
+++ b/drivers/scsi/osd/osd_initiator.c
@@ -338,20 +338,6 @@ struct osd_request *osd_start_request(struct osd_dev *dev, gfp_t gfp)
338} 338}
339EXPORT_SYMBOL(osd_start_request); 339EXPORT_SYMBOL(osd_start_request);
340 340
341/*
342 * If osd_finalize_request() was called but the request was not executed through
343 * the block layer, then we must release BIOs.
344 */
345static void _abort_unexecuted_bios(struct request *rq)
346{
347 struct bio *bio;
348
349 while ((bio = rq->bio) != NULL) {
350 rq->bio = bio->bi_next;
351 bio_endio(bio, 0);
352 }
353}
354
355static void _osd_free_seg(struct osd_request *or __unused, 341static void _osd_free_seg(struct osd_request *or __unused,
356 struct _osd_req_data_segment *seg) 342 struct _osd_req_data_segment *seg)
357{ 343{
@@ -363,9 +349,30 @@ static void _osd_free_seg(struct osd_request *or __unused,
363 seg->alloc_size = 0; 349 seg->alloc_size = 0;
364} 350}
365 351
352static void _put_request(struct request *rq , bool is_async)
353{
354 if (is_async) {
355 WARN_ON(rq->bio);
356 __blk_put_request(rq->q, rq);
357 } else {
358 /*
359 * If osd_finalize_request() was called but the request was not
360 * executed through the block layer, then we must release BIOs.
361 * TODO: Keep error code in or->async_error. Need to audit all
362 * code paths.
363 */
364 if (unlikely(rq->bio))
365 blk_end_request(rq, -ENOMEM, blk_rq_bytes(rq));
366 else
367 blk_put_request(rq);
368 }
369}
370
366void osd_end_request(struct osd_request *or) 371void osd_end_request(struct osd_request *or)
367{ 372{
368 struct request *rq = or->request; 373 struct request *rq = or->request;
374 /* IMPORTANT: make sure this agrees with osd_execute_request_async */
375 bool is_async = (or->request->end_io_data == or);
369 376
370 _osd_free_seg(or, &or->set_attr); 377 _osd_free_seg(or, &or->set_attr);
371 _osd_free_seg(or, &or->enc_get_attr); 378 _osd_free_seg(or, &or->enc_get_attr);
@@ -373,12 +380,11 @@ void osd_end_request(struct osd_request *or)
373 380
374 if (rq) { 381 if (rq) {
375 if (rq->next_rq) { 382 if (rq->next_rq) {
376 _abort_unexecuted_bios(rq->next_rq); 383 _put_request(rq->next_rq, is_async);
377 blk_put_request(rq->next_rq); 384 rq->next_rq = NULL;
378 } 385 }
379 386
380 _abort_unexecuted_bios(rq); 387 _put_request(rq, is_async);
381 blk_put_request(rq);
382 } 388 }
383 _osd_request_free(or); 389 _osd_request_free(or);
384} 390}
diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c
index f8b1a749958b..f644c9571eab 100644
--- a/drivers/scsi/osd/osd_uld.c
+++ b/drivers/scsi/osd/osd_uld.c
@@ -345,10 +345,6 @@ static int osd_probe(struct device *dev)
345 } 345 }
346 346
347 dev_set_drvdata(oud->class_member, oud); 347 dev_set_drvdata(oud->class_member, oud);
348 error = sysfs_create_link(&scsi_device->sdev_gendev.kobj,
349 &oud->class_member->kobj, osd_symlink);
350 if (error)
351 OSD_ERR("warning: unable to make symlink\n");
352 348
353 OSD_INFO("osd_probe %s\n", disk->disk_name); 349 OSD_INFO("osd_probe %s\n", disk->disk_name);
354 return 0; 350 return 0;
@@ -377,8 +373,6 @@ static int osd_remove(struct device *dev)
377 scsi_device); 373 scsi_device);
378 } 374 }
379 375
380 sysfs_remove_link(&oud->od.scsi_device->sdev_gendev.kobj, osd_symlink);
381
382 if (oud->class_member) 376 if (oud->class_member)
383 device_destroy(osd_sysfs_class, 377 device_destroy(osd_sysfs_class,
384 MKDEV(SCSI_OSD_MAJOR, oud->minor)); 378 MKDEV(SCSI_OSD_MAJOR, oud->minor));
diff --git a/drivers/scsi/ql1040_fw.h b/drivers/scsi/ql1040_fw.h
deleted file mode 100644
index aaf9284a8b7d..000000000000
--- a/drivers/scsi/ql1040_fw.h
+++ /dev/null
@@ -1,2130 +0,0 @@
1/**************************************************************************
2 * QLOGIC LINUX SOFTWARE
3 *
4 * Copyright (C) 2004 QLogic Corporation
5 * (www.qlogic.com)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
10 * later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 *************************************************************************/
18
19/************************************************************************
20 * *
21 * --- ISP1040 Initiator/Target Firmware --- *
22 * 32 LUN Support *
23 * *
24 ************************************************************************
25 */
26
27/*
28 * Firmware Version 7.65.06 (14:38 Jan 07, 2002)
29 */
30
31static unsigned char firmware_version[] = {7,65,6};
32
33#define FW_VERSION_STRING "7.65.06"
34
35static unsigned short risc_code_addr01 = 0x1000 ;
36
37static unsigned short risc_code01[] = {
38 0x0078, 0x103a, 0x0000, 0x4158, 0x0000, 0x2043, 0x4f50, 0x5952,
39 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
40 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
41 0x3130, 0x3230, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
42 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3635,
43 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
44 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
45 0x3031, 0x2024, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048,
46 0x1045, 0x0038, 0x104b, 0x0078, 0x1047, 0x0028, 0x104b, 0x20b9,
47 0x1212, 0x0078, 0x104d, 0x20b9, 0x2222, 0x20c1, 0x0008, 0x2071,
48 0x0010, 0x70c3, 0x0004, 0x20c9, 0x78ff, 0x2089, 0x1186, 0x70c7,
49 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00,
50 0x70d6, 0x20c1, 0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100,
51 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc,
52 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040,
53 0x10bf, 0xa386, 0x000f, 0x0040, 0x1085, 0x2c6a, 0x2a5a, 0x20c1,
54 0x0000, 0x2019, 0x000f, 0x0078, 0x1065, 0x2c6a, 0x2a5a, 0x20c1,
55 0x0008, 0x2009, 0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc,
56 0x3fff, 0x2734, 0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040,
57 0x10a9, 0x284a, 0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134,
58 0x200b, 0x5050, 0x2114, 0xa286, 0x5050, 0x0040, 0x10aa, 0x0078,
59 0x118e, 0x284a, 0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b,
60 0xa5a5, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10bc, 0x250a, 0xa18a,
61 0x1000, 0x98c1, 0x0078, 0x10c1, 0x250a, 0x0078, 0x10c1, 0x2c6a,
62 0x2a5a, 0x2130, 0xa18a, 0x0040, 0x2128, 0xa1a2, 0x5200, 0x8424,
63 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0xa192, 0x7900, 0x2009,
64 0x0000, 0x2001, 0x0031, 0x1078, 0x1d26, 0x2218, 0x2079, 0x5200,
65 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109,
66 0x00c0, 0x10dc, 0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883,
67 0x0000, 0x2031, 0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f,
68 0x0002, 0x784f, 0x0003, 0x2069, 0x5240, 0x2001, 0x04fd, 0x2004,
69 0xa082, 0x0005, 0x0048, 0x1104, 0x0038, 0x1100, 0x0078, 0x1108,
70 0x681b, 0x003c, 0x0078, 0x110a, 0x00a8, 0x1108, 0x681b, 0x003c,
71 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008,
72 0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817, 0x0008,
73 0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x5480, 0x2011, 0x0020,
74 0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803, 0xfd00,
75 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004,
76 0x8109, 0x00c0, 0x1122, 0x2069, 0x5500, 0x2009, 0x0002, 0x20a9,
77 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386, 0xfeff,
78 0x00c0, 0x1148, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078, 0x114c,
79 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070, 0x1152,
80 0x0078, 0x1139, 0x8109, 0x00c0, 0x1137, 0x1078, 0x22a7, 0x1078,
81 0x493d, 0x1078, 0x19b5, 0x1078, 0x4e33, 0x3200, 0xa085, 0x000d,
82 0x2090, 0x70c3, 0x0000, 0x0090, 0x116c, 0x70c0, 0xa086, 0x0002,
83 0x00c0, 0x116c, 0x1078, 0x1284, 0x1078, 0x1196, 0x78cc, 0xa005,
84 0x00c0, 0x117a, 0x1078, 0x1d4f, 0x0010, 0x1180, 0x0068, 0x1180,
85 0x1078, 0x2186, 0x0010, 0x1180, 0x0068, 0x1180, 0x1078, 0x1ab9,
86 0x00e0, 0x116c, 0x1078, 0x4cba, 0x0078, 0x116c, 0x118e, 0x1190,
87 0x24ac, 0x24ac, 0x49be, 0x49be, 0x24ac, 0x24ac, 0x0078, 0x118e,
88 0x0078, 0x1190, 0x0078, 0x1192, 0x0078, 0x1194, 0x0068, 0x1201,
89 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1201, 0x7814,
90 0xa005, 0x00c0, 0x11a7, 0x0010, 0x1202, 0x0078, 0x1201, 0x2009,
91 0x525b, 0x2104, 0xa005, 0x00c0, 0x1201, 0x2009, 0x5264, 0x200b,
92 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11cc, 0x7816, 0x2009,
93 0x5262, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca,
94 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce,
95 0x1078, 0x199a, 0x0078, 0x11ff, 0x7814, 0xa086, 0x0018, 0x00c0,
96 0x11d3, 0x1078, 0x1678, 0x7817, 0x0000, 0x2009, 0x5262, 0x2104,
97 0xa065, 0x0040, 0x11ef, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a17,
98 0x0c7f, 0x609f, 0x0000, 0x1078, 0x174e, 0x2009, 0x000c, 0x6007,
99 0x0103, 0x1078, 0x1976, 0x00c0, 0x11fb, 0x1078, 0x199a, 0x2009,
100 0x5262, 0x200b, 0x0000, 0x2009, 0x525c, 0x2104, 0x200b, 0x0000,
101 0xa005, 0x0040, 0x11ff, 0x2001, 0x4005, 0x0078, 0x1286, 0x0078,
102 0x1284, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000,
103 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1252, 0x2038,
104 0x0079, 0x1212, 0x1284, 0x12e5, 0x12a9, 0x12fe, 0x130d, 0x1313,
105 0x12a0, 0x1766, 0x1317, 0x1298, 0x12ad, 0x12af, 0x12b1, 0x12b3,
106 0x176b, 0x1298, 0x1329, 0x1365, 0x1690, 0x1760, 0x12b5, 0x15af,
107 0x15cb, 0x15e7, 0x1612, 0x1568, 0x1576, 0x158a, 0x159e, 0x13e9,
108 0x1298, 0x1397, 0x139d, 0x13a2, 0x13a7, 0x13ad, 0x13b2, 0x13b7,
109 0x13bc, 0x13c1, 0x13c5, 0x13da, 0x13e6, 0x1298, 0x1298, 0x1298,
110 0x1298, 0x13f5, 0x13fe, 0x140d, 0x1451, 0x145b, 0x1462, 0x14a8,
111 0x14b7, 0x14c6, 0x14d8, 0x1548, 0x1558, 0x1298, 0x1298, 0x1298,
112 0x1298, 0x155d, 0xa0bc, 0xffa0, 0x00c0, 0x1298, 0x2038, 0xa084,
113 0x001f, 0x0079, 0x125b, 0x17a4, 0x17a7, 0x17b7, 0x1298, 0x1298,
114 0x1931, 0x194e, 0x1298, 0x1298, 0x1298, 0x1952, 0x195a, 0x1298,
115 0x1298, 0x1298, 0x1298, 0x12db, 0x12f4, 0x131f, 0x135b, 0x1686,
116 0x1782, 0x1796, 0x1298, 0x1847, 0x1960, 0x190d, 0x1917, 0x191b,
117 0x1929, 0x1298, 0x1298, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078,
118 0x1286, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068,
119 0x1287, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x00e0,
120 0x128f, 0x00e0, 0x1291, 0x0068, 0x1291, 0x2091, 0x4080, 0x007c,
121 0x70c3, 0x4001, 0x0078, 0x1287, 0x70c3, 0x4006, 0x0078, 0x1287,
122 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078,
123 0x1284, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x1284, 0x0078,
124 0x1284, 0x0078, 0x1284, 0x0078, 0x1284, 0x2091, 0x8000, 0x70c3,
125 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
126 0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031,
127 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470, 0x2061,
128 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000, 0x2091,
129 0x4080, 0x0078, 0x0455, 0x1078, 0x1bc4, 0x00c0, 0x129c, 0x75d8,
130 0x74dc, 0x75da, 0x74de, 0x0078, 0x12e8, 0x2029, 0x0000, 0x2520,
131 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1afe, 0x0040, 0x1284,
132 0x70c3, 0x4002, 0x0078, 0x1284, 0x1078, 0x1bc4, 0x00c0, 0x129c,
133 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1301, 0x2029, 0x0000,
134 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1b5e, 0x0040,
135 0x1284, 0x70c3, 0x4002, 0x0078, 0x1284, 0x71c4, 0x70c8, 0x2114,
136 0x200a, 0x0078, 0x1282, 0x71c4, 0x2114, 0x0078, 0x1282, 0x70c7,
137 0x0007, 0x70cb, 0x0041, 0x70cf, 0x0006, 0x0078, 0x1284, 0x1078,
138 0x1bc4, 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
139 0x132c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
140 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1355, 0xa40a,
141 0x0040, 0x133c, 0x00c8, 0x1346, 0x8001, 0x7892, 0xa084, 0xfc00,
142 0x0040, 0x134a, 0x78cc, 0xa085, 0x0001, 0x78ce, 0x2001, 0x4005,
143 0x0078, 0x1286, 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x7c96, 0x78cc,
144 0xa084, 0xfffc, 0x78ce, 0x0078, 0x1359, 0x78cc, 0xa085, 0x0001,
145 0x78ce, 0x0078, 0x1284, 0x1078, 0x1bc4, 0x00c0, 0x129c, 0x75d8,
146 0x76dc, 0x75da, 0x76de, 0x0078, 0x1368, 0x2029, 0x0000, 0x2530,
147 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6,
148 0xa005, 0x0040, 0x1391, 0xa40a, 0x0040, 0x1378, 0x00c8, 0x1382,
149 0x8001, 0x78ae, 0xa084, 0xfc00, 0x0040, 0x1386, 0x78cc, 0xa085,
150 0x0100, 0x78ce, 0x2001, 0x4005, 0x0078, 0x1286, 0x7ab6, 0x7bba,
151 0x7dbe, 0x7ec2, 0x7cb2, 0x78cc, 0xa084, 0xfcff, 0x78ce, 0x0078,
152 0x1395, 0x78cc, 0xa085, 0x0100, 0x78ce, 0x0078, 0x1284, 0x2009,
153 0x5261, 0x210c, 0x7aec, 0x0078, 0x1282, 0x2009, 0x5241, 0x210c,
154 0x0078, 0x1283, 0x2009, 0x5242, 0x210c, 0x0078, 0x1283, 0x2061,
155 0x5240, 0x610c, 0x6210, 0x0078, 0x1282, 0x2009, 0x5245, 0x210c,
156 0x0078, 0x1283, 0x2009, 0x5246, 0x210c, 0x0078, 0x1283, 0x2009,
157 0x5248, 0x210c, 0x0078, 0x1283, 0x2009, 0x5249, 0x210c, 0x0078,
158 0x1283, 0x7908, 0x7a0c, 0x0078, 0x1282, 0x71c4, 0x8107, 0xa084,
159 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x5480, 0x6a00, 0x6804,
160 0xa084, 0x0008, 0x0040, 0x13d7, 0x6b08, 0x0078, 0x13d8, 0x6b0c,
161 0x0078, 0x1281, 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6b1c,
162 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x1281, 0x794c, 0x0078,
163 0x1283, 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6908, 0x6a18,
164 0x6b10, 0x2091, 0x8001, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010,
165 0x00c8, 0x127c, 0x1078, 0x237f, 0x0078, 0x1281, 0x71c4, 0xa182,
166 0x0010, 0x00c8, 0x127c, 0x2011, 0x5241, 0x2204, 0x007e, 0x2112,
167 0x1078, 0x2338, 0x017f, 0x0078, 0x1283, 0x71c4, 0x2019, 0x0100,
168 0x2304, 0xa082, 0x0006, 0x0048, 0x141b, 0x2011, 0x1449, 0x20a9,
169 0x0008, 0x0078, 0x141f, 0x2011, 0x1441, 0x20a9, 0x0008, 0x2204,
170 0xa106, 0x0040, 0x142a, 0x8210, 0x0070, 0x1428, 0x0078, 0x141f,
171 0x0078, 0x127c, 0x2304, 0xa082, 0x0006, 0x0048, 0x1433, 0xa292,
172 0x1449, 0x0078, 0x1435, 0xa292, 0x1441, 0x027e, 0x2011, 0x5242,
173 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x2344, 0x017f, 0x0078,
174 0x1283, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032,
175 0x004b, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0004, 0x0001, 0x0002,
176 0x0003, 0x2061, 0x5240, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8,
177 0x6012, 0x0078, 0x1282, 0x2061, 0x5240, 0x6114, 0x70c4, 0x6016,
178 0x0078, 0x1283, 0x2061, 0x5240, 0x71c4, 0x2011, 0x0004, 0x601f,
179 0x0019, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x1483, 0x2011,
180 0x0005, 0x601f, 0x0019, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040,
181 0x1483, 0x2011, 0x0006, 0x601f, 0x000c, 0x2019, 0x2222, 0xa186,
182 0x003c, 0x00c0, 0x127c, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084,
183 0x0001, 0x00c0, 0x149e, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
184 0x0048, 0x1496, 0x0038, 0x149a, 0x0078, 0x149e, 0x0028, 0x149a,
185 0x0078, 0x149e, 0x2019, 0x2222, 0x0078, 0x14a0, 0x2019, 0x1212,
186 0x23b8, 0x1078, 0x2355, 0x1078, 0x4e33, 0x017f, 0x0078, 0x1283,
187 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x127c, 0x2011, 0x5248, 0x2204,
188 0x2112, 0x007e, 0x1078, 0x2377, 0x017f, 0x0078, 0x1283, 0x71c4,
189 0xa182, 0x0010, 0x00c8, 0x127c, 0x2011, 0x5249, 0x2204, 0x007e,
190 0x2112, 0x1078, 0x2366, 0x017f, 0x0078, 0x1283, 0x71c4, 0x72c8,
191 0xa184, 0xfffd, 0x00c0, 0x127b, 0xa284, 0xfffd, 0x00c0, 0x127b,
192 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x1282,
193 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
194 0x5480, 0x2019, 0x0000, 0x72c8, 0xd2bc, 0x0040, 0x14e9, 0xa39d,
195 0x0010, 0xd2b4, 0x0040, 0x14ee, 0xa39d, 0x0008, 0x6800, 0x007e,
196 0xa226, 0x0040, 0x1511, 0x6a02, 0xa484, 0x2000, 0x0040, 0x14fa,
197 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1500, 0xa39d, 0x0008,
198 0xa484, 0x4000, 0x0040, 0x1511, 0x810f, 0xa284, 0x4000, 0x0040,
199 0x150d, 0x1078, 0x2399, 0x0078, 0x1511, 0x1078, 0x238b, 0x0078,
200 0x1511, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1540, 0xa2a4, 0x00ff,
201 0x2061, 0x5240, 0x6118, 0xa186, 0x0028, 0x0040, 0x1527, 0xa186,
202 0x0032, 0x0040, 0x152d, 0xa186, 0x003c, 0x0040, 0x1533, 0xa482,
203 0x0064, 0x0048, 0x153d, 0x0078, 0x1537, 0xa482, 0x0050, 0x0048,
204 0x153d, 0x0078, 0x1537, 0xa482, 0x0043, 0x0048, 0x153d, 0x71c4,
205 0x71c6, 0x027f, 0x72ca, 0x0078, 0x127d, 0x6a0a, 0xa39d, 0x000a,
206 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, 0x1281,
207 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091,
208 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x1281,
209 0x70c4, 0x794c, 0x784e, 0x0078, 0x1283, 0x71c4, 0x72c8, 0x73cc,
210 0xa182, 0x0010, 0x00c8, 0x127c, 0x1078, 0x23a7, 0x0078, 0x1281,
211 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002,
212 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x1078,
213 0x19c5, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804,
214 0xa005, 0x0040, 0x1585, 0x1078, 0x226f, 0x2091, 0x8001, 0x2708,
215 0x0078, 0x1282, 0x77c4, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6a08,
216 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1599, 0x1078,
217 0x226f, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x2041,
218 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
219 0x19d2, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x1282, 0x77c4,
220 0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078, 0x1a52, 0x00c0,
221 0x15c7, 0x6818, 0xa005, 0x0040, 0x15c7, 0x2708, 0x1078, 0x23b7,
222 0x00c0, 0x15c7, 0x7817, 0x0015, 0x2091, 0x8001, 0x007c, 0x2091,
223 0x8001, 0x0078, 0x1284, 0x77c4, 0x77c6, 0x2041, 0x0021, 0x2049,
224 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x19d2, 0x2061,
225 0x5240, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f, 0x6073, 0x0000,
226 0x7817, 0x0016, 0x1078, 0x226f, 0x2091, 0x8001, 0x007c, 0x77c8,
227 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061,
228 0x5240, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782, 0x6093, 0x000f,
229 0x7817, 0x0017, 0x1078, 0x226f, 0x2091, 0x8001, 0x2041, 0x0021,
230 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x19d2,
231 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1606, 0x2091,
232 0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0, 0x1636, 0x2039,
233 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078,
234 0x19c5, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001,
235 0x8738, 0xa784, 0x001f, 0x00c0, 0x161f, 0xa7bc, 0xff00, 0x873f,
236 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x161f, 0x2091, 0x8000,
237 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, 0x165f, 0x684b,
238 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x164c,
239 0x0070, 0x164c, 0x0078, 0x1643, 0x684b, 0x0009, 0x20a9, 0x0014,
240 0x6848, 0xa084, 0x0001, 0x0040, 0x1659, 0x0070, 0x1659, 0x0078,
241 0x1650, 0x20a9, 0x00fa, 0x0070, 0x165f, 0x0078, 0x165b, 0x2079,
242 0x5200, 0x7817, 0x0018, 0x2061, 0x5240, 0x606f, 0x0001, 0x6073,
243 0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002, 0x78ce, 0x6808,
244 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c,
245 0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001, 0x00c0, 0x1682,
246 0x1078, 0x1a9c, 0x71c4, 0x71c6, 0x794a, 0x007c, 0x1078, 0x1bc4,
247 0x00c0, 0x129c, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1693,
248 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca,
249 0x72ce, 0x2079, 0x5200, 0x2091, 0x8000, 0x1078, 0x1980, 0x2091,
250 0x8001, 0x0040, 0x174a, 0x20a9, 0x0005, 0x20a1, 0x5218, 0x2091,
251 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020, 0x1078, 0x197b,
252 0x0040, 0x16b6, 0x1078, 0x199a, 0x0078, 0x174a, 0x6004, 0xa084,
253 0xff00, 0x8007, 0x8009, 0x0040, 0x1719, 0x0c7e, 0x2c68, 0x2091,
254 0x8000, 0x1078, 0x1980, 0x2091, 0x8001, 0x0040, 0x16ea, 0x2c00,
255 0x689e, 0x8109, 0x00c0, 0x16be, 0x609f, 0x0000, 0x0c7f, 0x0c7e,
256 0x7218, 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c, 0xa065, 0x0040,
257 0x1718, 0x2009, 0x0020, 0x1078, 0x197b, 0x00c0, 0x1701, 0x6004,
258 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x16ea, 0x2d00, 0x6002,
259 0x0078, 0x16d0, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a17,
260 0x0c7f, 0x609f, 0x0000, 0x1078, 0x174e, 0x2009, 0x000c, 0x6008,
261 0xa085, 0x0200, 0x600a, 0x1078, 0x1976, 0x1078, 0x199a, 0x0078,
262 0x174a, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a17, 0x0c7f,
263 0x609f, 0x0000, 0x1078, 0x174e, 0x2009, 0x000c, 0x6007, 0x0103,
264 0x601b, 0x0003, 0x1078, 0x1976, 0x1078, 0x199a, 0x0078, 0x174a,
265 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x7817,
266 0x0012, 0x0e7e, 0x2071, 0x5240, 0x706f, 0x0005, 0x7073, 0x0000,
267 0x7376, 0x727a, 0x747e, 0x7082, 0x7087, 0x0000, 0x2c00, 0x708a,
268 0x708f, 0x0000, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0x0060,
269 0x0040, 0x173c, 0x1078, 0x48d3, 0x0e7f, 0x6596, 0x65a6, 0x669a,
270 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x1078, 0x226f, 0x2091,
271 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287, 0x20a9, 0x0005,
272 0x2099, 0x5218, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100,
273 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c,
274 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x1284, 0x71c4, 0x71c6,
275 0x2168, 0x0078, 0x176d, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04,
276 0xa210, 0x8d68, 0x8109, 0x00c0, 0x176f, 0xa285, 0x0000, 0x00c0,
277 0x177d, 0x70c3, 0x4000, 0x0078, 0x177f, 0x70c3, 0x4003, 0x70ca,
278 0x0078, 0x1287, 0x2011, 0x5267, 0x220c, 0x70c4, 0x8003, 0x0048,
279 0x178f, 0x1078, 0x3c51, 0xa184, 0x7fff, 0x0078, 0x1793, 0x1078,
280 0x3c44, 0xa185, 0x8000, 0x2012, 0x0078, 0x1283, 0x71c4, 0x1078,
281 0x3c3b, 0x6100, 0x2001, 0x5267, 0x2004, 0xa084, 0x8000, 0xa10d,
282 0x6204, 0x6308, 0x0078, 0x1281, 0x79e4, 0x0078, 0x1283, 0x71c4,
283 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x21a0,
284 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078, 0x1284, 0x70c4,
285 0x2068, 0x2079, 0x5200, 0x2091, 0x8000, 0x1078, 0x1980, 0x2091,
286 0x8001, 0x0040, 0x1843, 0x6007, 0x0001, 0x600b, 0x0000, 0x602b,
287 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f, 0xa284, 0x00f0,
288 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284, 0x0800,
289 0x0040, 0x17de, 0x601b, 0x000a, 0x0078, 0x17e4, 0xa284, 0x1000,
290 0x0040, 0x17e4, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040, 0x17ed,
291 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001, 0x601e,
292 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400, 0x0040, 0x17fa,
293 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0, 0xad80,
294 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x180f, 0x6046,
295 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078, 0x1819, 0x6800,
296 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c, 0x6552, 0x6596,
297 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042, 0x2c08, 0x2061,
298 0x5240, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077, 0x0000, 0x607b,
299 0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284, 0x0400, 0x608e,
300 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007,
301 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000, 0x1078, 0x226f,
302 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287, 0x0c7e,
303 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071, 0x5240, 0x2079,
304 0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040, 0x1903, 0x6a04,
305 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x1862, 0xa286, 0x000f,
306 0x00c0, 0x1903, 0x691c, 0xa184, 0x00c0, 0x0040, 0x1903, 0xa184,
307 0x0080, 0x00c0, 0x18d3, 0x6824, 0xa084, 0xff00, 0xa085, 0x0019,
308 0x6826, 0x71b0, 0x81ff, 0x0040, 0x1889, 0x0d7e, 0x2069, 0x0020,
309 0x6807, 0x0010, 0x6908, 0x6808, 0xa106, 0x00c0, 0x187a, 0x690c,
310 0x680c, 0xa106, 0x00c0, 0x187f, 0xa184, 0x00ff, 0x00c0, 0x187f,
311 0x0d7f, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x1889, 0x7848, 0xa085,
312 0x000c, 0x784a, 0x71b0, 0x81ff, 0x0040, 0x18ac, 0x70b3, 0x0000,
313 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008,
314 0x00c0, 0x189d, 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0,
315 0x18a4, 0x6807, 0x0002, 0x0d7f, 0x61c4, 0x62c8, 0x63cc, 0x61c6,
316 0x62ca, 0x63ce, 0x0e7e, 0x2071, 0x5200, 0x7266, 0x736a, 0xae80,
317 0x0019, 0x0e7f, 0x7848, 0xa084, 0x000c, 0x00c0, 0x18ba, 0x1078,
318 0x47e1, 0x78a3, 0x0000, 0x7858, 0xa084, 0xedff, 0x785a, 0x70b4,
319 0xa080, 0x00da, 0x781a, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091,
320 0x8001, 0x0078, 0x1284, 0x6824, 0xa084, 0xff00, 0xa085, 0x0019,
321 0x6826, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x18d9, 0x7848, 0xa085,
322 0x000c, 0x784a, 0x7848, 0xa084, 0x000c, 0x00c0, 0x18e2, 0x71b0,
323 0x81ff, 0x0040, 0x1901, 0x70b3, 0x0000, 0x0d7e, 0x2069, 0x0020,
324 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x18f2, 0x6807,
325 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x18f9, 0x6807, 0x0002,
326 0x0d7f, 0x0078, 0x18cb, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091,
327 0x8001, 0x2001, 0x4005, 0x0078, 0x1286, 0x7980, 0x71c6, 0x71c4,
328 0xa182, 0x0003, 0x00c8, 0x127c, 0x7982, 0x0078, 0x1284, 0x7980,
329 0x71c6, 0x0078, 0x1284, 0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978,
330 0x71ca, 0x71c8, 0x797a, 0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078,
331 0x1284, 0x7974, 0x71c6, 0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078,
332 0x1284, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x2001, 0x04fd, 0x2004,
333 0xa082, 0x0005, 0x0048, 0x1940, 0x0038, 0x1942, 0x0078, 0x194c,
334 0x00a8, 0x194c, 0xa18c, 0x0001, 0x00c0, 0x194a, 0x20b9, 0x2222,
335 0x0078, 0x194c, 0x20b9, 0x1212, 0x0078, 0x1284, 0x7900, 0x71c6,
336 0x0078, 0x1284, 0x2009, 0x5274, 0x2104, 0x70c6, 0x70c4, 0x200a,
337 0x0078, 0x1284, 0x2009, 0x5274, 0x2104, 0x70c6, 0x0078, 0x1284,
338 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
339 0x5480, 0x6a14, 0xd2b4, 0x0040, 0x1971, 0x2011, 0x0001, 0x0078,
340 0x1973, 0x2011, 0x0000, 0x6b0c, 0x0078, 0x1281, 0xac80, 0x0001,
341 0x1078, 0x1b80, 0x007c, 0xac80, 0x0001, 0x1078, 0x1b20, 0x007c,
342 0x7850, 0xa065, 0x0040, 0x1988, 0x2c04, 0x7852, 0x2063, 0x0000,
343 0x007c, 0x0f7e, 0x2079, 0x5200, 0x7850, 0xa06d, 0x0040, 0x1998,
344 0x2d04, 0x7852, 0x6803, 0x0000, 0x6807, 0x0000, 0x680b, 0x0000,
345 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e, 0x2079, 0x5200, 0x7850,
346 0x2062, 0x2c00, 0xa005, 0x00c0, 0x19a7, 0x1078, 0x248c, 0x7852,
347 0x0f7f, 0x2091, 0x8001, 0x007c, 0x0f7e, 0x2079, 0x5200, 0x7850,
348 0x206a, 0x2d00, 0x7852, 0x0f7f, 0x007c, 0x2011, 0x7900, 0x7a52,
349 0x7bec, 0x8319, 0x0040, 0x19c2, 0xa280, 0x0031, 0x2012, 0x2010,
350 0x0078, 0x19b9, 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800b,
351 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8,
352 0x5500, 0x007c, 0x1078, 0x19c5, 0x2900, 0x682a, 0x2a00, 0x682e,
353 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a, 0x2009, 0x5252, 0x210c,
354 0x6804, 0xa005, 0x0040, 0x1a04, 0xa116, 0x00c0, 0x19ef, 0x2060,
355 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x19f2, 0x2009,
356 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1a01, 0x6000, 0x6806,
357 0x1078, 0x1a31, 0x1078, 0x1ccb, 0x6810, 0x8001, 0x6812, 0x00c0,
358 0x19f2, 0x017f, 0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x1a16,
359 0x2008, 0x609c, 0xa005, 0x0040, 0x1a13, 0x2062, 0x609f, 0x0000,
360 0xa065, 0x0078, 0x1a09, 0x7850, 0x7952, 0x2062, 0x007c, 0xa065,
361 0x0040, 0x1a30, 0x2008, 0x609c, 0xa005, 0x0040, 0x1a25, 0x2062,
362 0x609f, 0x0000, 0xa065, 0x0078, 0x1a1b, 0x0f7e, 0x2079, 0x5200,
363 0x2091, 0x8000, 0x7850, 0x7952, 0x0f7f, 0x2062, 0x2091, 0x8001,
364 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80,
365 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c,
366 0x6022, 0x007c, 0x0e7e, 0x2071, 0x5240, 0x704c, 0xa08c, 0x0200,
367 0x00c0, 0x1a50, 0xa088, 0x5280, 0x2d0a, 0x8000, 0x704e, 0xa006,
368 0x0e7f, 0x007c, 0x1078, 0x19c5, 0x2091, 0x8000, 0x6804, 0x781e,
369 0xa065, 0x0040, 0x1a9b, 0x0078, 0x1a63, 0x2c00, 0x781e, 0x6000,
370 0xa065, 0x0040, 0x1a9b, 0x600c, 0xa306, 0x00c0, 0x1a5d, 0x6010,
371 0xa206, 0x00c0, 0x1a5d, 0x2c28, 0x2001, 0x5252, 0x2004, 0xac06,
372 0x00c0, 0x1a74, 0x0078, 0x1a99, 0x6804, 0xac06, 0x00c0, 0x1a81,
373 0x6000, 0xa065, 0x6806, 0x00c0, 0x1a8b, 0x6803, 0x0000, 0x0078,
374 0x1a8b, 0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0,
375 0x1a8b, 0x2c00, 0x6802, 0x2560, 0x1078, 0x1a31, 0x601b, 0x0005,
376 0x6023, 0x0020, 0x1078, 0x1ccb, 0x6810, 0x8001, 0x1050, 0x248c,
377 0x6812, 0xa085, 0xffff, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021,
378 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x19d2,
379 0x8738, 0xa784, 0x001f, 0x00c0, 0x1aa6, 0xa7bc, 0xff00, 0x873f,
380 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1aa6, 0x2091, 0x8001,
381 0x007c, 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1aca,
382 0x2091, 0x8000, 0x78e0, 0x78e3, 0x0000, 0x2091, 0x8001, 0xa005,
383 0x00c0, 0x1acb, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1ad1, 0x1078,
384 0x248c, 0x0079, 0x1ad3, 0x1ae3, 0x1ae6, 0x1aec, 0x1af0, 0x1ae4,
385 0x1af4, 0x1afa, 0x1ae4, 0x1ae4, 0x1c95, 0x1cb9, 0x1cbd, 0x1ae4,
386 0x1ae4, 0x1ae4, 0x1ae4, 0x007c, 0x1078, 0x248c, 0x1078, 0x1a9c,
387 0x2001, 0x8001, 0x0078, 0x1cc3, 0x2001, 0x8003, 0x0078, 0x1cc3,
388 0x2001, 0x8004, 0x0078, 0x1cc3, 0x1078, 0x1a9c, 0x2001, 0x8006,
389 0x0078, 0x1cc3, 0x2001, 0x8007, 0x0078, 0x1cc3, 0x2030, 0x2138,
390 0xa782, 0x0021, 0x0048, 0x1b06, 0x2009, 0x0020, 0x2600, 0x1078,
391 0x1b20, 0x00c0, 0x1b1f, 0xa7ba, 0x0020, 0x0048, 0x1b1e, 0x0040,
392 0x1b1e, 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000,
393 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1b00, 0xa006, 0x007c,
394 0x81ff, 0x0040, 0x1b5b, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084,
395 0x00ff, 0x0040, 0x1b32, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004,
396 0x00c0, 0x1b2d, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a,
397 0x731e, 0x7422, 0x7526, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007,
398 0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1b4f,
399 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1b41, 0x7008,
400 0x800b, 0x00c8, 0x1b41, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0,
401 0x1b5b, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138,
402 0xa782, 0x0021, 0x0048, 0x1b66, 0x2009, 0x0020, 0x2600, 0x1078,
403 0x1b80, 0x00c0, 0x1b7f, 0xa7ba, 0x0020, 0x0048, 0x1b7e, 0x0040,
404 0x1b7e, 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000,
405 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1b60, 0xa006, 0x007c,
406 0x81ff, 0x0040, 0x1bc1, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084,
407 0x00ff, 0x0040, 0x1b92, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004,
408 0x00c0, 0x1b8d, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a,
409 0x731e, 0x7422, 0x7526, 0x780c, 0xa085, 0x0000, 0x7002, 0x53a6,
410 0x7007, 0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8,
411 0x1bb0, 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1ba2,
412 0x7010, 0xa084, 0xf000, 0x0040, 0x1bb9, 0x7007, 0x0008, 0x0078,
413 0x1bbd, 0x7108, 0x8103, 0x00c8, 0x1ba2, 0x7007, 0x0002, 0xa184,
414 0x01e0, 0x7003, 0x0000, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082,
415 0x0004, 0x00c8, 0x1bcd, 0x0078, 0x1bd0, 0xa006, 0x0078, 0x1bd2,
416 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2071, 0x5200, 0x2d08, 0x7058,
417 0x6802, 0xa005, 0x00c0, 0x1bdd, 0x715e, 0x715a, 0x0e7f, 0x007c,
418 0x2c08, 0x7858, 0x6002, 0xa005, 0x00c0, 0x1be7, 0x795e, 0x795a,
419 0x007c, 0x2091, 0x8000, 0x6114, 0x1078, 0x2180, 0x6900, 0xa184,
420 0x0100, 0x00c0, 0x2035, 0xa184, 0x0200, 0x00c0, 0x2031, 0x681c,
421 0xa005, 0x00c0, 0x203d, 0x6003, 0x0000, 0x2c08, 0x785c, 0xa065,
422 0x00c0, 0x1c05, 0x795a, 0x0078, 0x1c06, 0x6102, 0x795e, 0x2091,
423 0x8001, 0x1078, 0x228c, 0x007c, 0x0e7e, 0x2071, 0x5200, 0x7058,
424 0xa06d, 0x0040, 0x1c1a, 0x6800, 0x705a, 0xa005, 0x00c0, 0x1c19,
425 0x705e, 0x8dff, 0x0e7f, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079,
426 0x5200, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1c43,
427 0x2068, 0x6814, 0xa306, 0x00c0, 0x1c33, 0x6828, 0xa084, 0x00ff,
428 0xa406, 0x0040, 0x1c36, 0x2d60, 0x0078, 0x1c24, 0x6800, 0xa005,
429 0x6002, 0x00c0, 0x1c42, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1c41,
430 0x2c00, 0x785e, 0x2d00, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c,
431 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5200, 0xaf80, 0x0016, 0x2060,
432 0x6000, 0xa005, 0x0040, 0x1c6b, 0x2068, 0x6814, 0xa084, 0x00ff,
433 0xa306, 0x0040, 0x1c5e, 0x2d60, 0x0078, 0x1c50, 0x6800, 0xa005,
434 0x6002, 0x00c0, 0x1c6a, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1c69,
435 0x2c00, 0x785e, 0x2d00, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c,
436 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5200, 0xaf80, 0x0016, 0x2060,
437 0x6000, 0xa06d, 0x0040, 0x1c90, 0x6814, 0xa306, 0x0040, 0x1c83,
438 0x2d60, 0x0078, 0x1c78, 0x6800, 0xa005, 0x6002, 0x00c0, 0x1c8f,
439 0xaf80, 0x0016, 0xac06, 0x0040, 0x1c8e, 0x2c00, 0x785e, 0x2d00,
440 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x2091, 0x8000, 0x2069,
441 0x5240, 0x6800, 0xa086, 0x0000, 0x0040, 0x1ca3, 0x2091, 0x8001,
442 0x78e3, 0x0009, 0x007c, 0x6880, 0xa0bc, 0xff00, 0x2041, 0x0021,
443 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x19d2, 0x8738, 0xa784,
444 0x001f, 0x00c0, 0x1cac, 0x2091, 0x8001, 0x2001, 0x800a, 0x0078,
445 0x1cc3, 0x2001, 0x800c, 0x0078, 0x1cc3, 0x1078, 0x1a9c, 0x2001,
446 0x800d, 0x0078, 0x1cc3, 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001,
447 0x2091, 0x4080, 0x007c, 0x6004, 0x2c08, 0x2063, 0x0000, 0x7884,
448 0x8000, 0x7886, 0x7888, 0xa005, 0x798a, 0x0040, 0x1cda, 0x2c02,
449 0x0078, 0x1cdb, 0x798e, 0x007c, 0x6807, 0x0103, 0x0c7e, 0x2061,
450 0x5200, 0x2d08, 0x206b, 0x0000, 0x6084, 0x8000, 0x6086, 0x6088,
451 0xa005, 0x618a, 0x0040, 0x1cef, 0x2d02, 0x0078, 0x1cf0, 0x618e,
452 0x0c7f, 0x007c, 0x1078, 0x1d03, 0x0040, 0x1d02, 0x0c7e, 0x609c,
453 0xa065, 0x0040, 0x1cfd, 0x1078, 0x1a17, 0x0c7f, 0x609f, 0x0000,
454 0x1078, 0x199a, 0x007c, 0x788c, 0xa065, 0x0040, 0x1d15, 0x2091,
455 0x8000, 0x7884, 0x8001, 0x7886, 0x2c04, 0x788e, 0xa005, 0x00c0,
456 0x1d13, 0x788a, 0x8000, 0x2091, 0x8001, 0x007c, 0x20a9, 0x0010,
457 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1d1f, 0xa200, 0x0070,
458 0x1d23, 0x0078, 0x1d1a, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9,
459 0x0010, 0xa005, 0x0040, 0x1d49, 0xa11a, 0x00c8, 0x1d49, 0x8213,
460 0x818d, 0x0048, 0x1d3a, 0xa11a, 0x00c8, 0x1d3b, 0x0070, 0x1d41,
461 0x0078, 0x1d2f, 0xa11a, 0x2308, 0x8210, 0x0070, 0x1d41, 0x0078,
462 0x1d2f, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f,
463 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x1d45, 0x7994,
464 0x70d0, 0xa106, 0x0040, 0x1dbd, 0x2091, 0x8000, 0x2071, 0x0020,
465 0x7004, 0xa005, 0x00c0, 0x1dbd, 0x7008, 0x7208, 0xa206, 0x00c0,
466 0x1dbd, 0xa286, 0x0008, 0x00c0, 0x1dbd, 0x2071, 0x0010, 0x1078,
467 0x1980, 0x0040, 0x1dbd, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa184,
468 0xff00, 0x0040, 0x1d8b, 0x2031, 0x0000, 0x810b, 0x86b5, 0x810b,
469 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b,
470 0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000, 0xa5a9,
471 0x0000, 0x0078, 0x1d95, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399,
472 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0020, 0x1078,
473 0x197b, 0x2091, 0x8001, 0x0040, 0x1db4, 0x1078, 0x199a, 0x78a8,
474 0x8000, 0x78aa, 0xa086, 0x0002, 0x00c0, 0x1dbd, 0x2091, 0x8000,
475 0x78e3, 0x0002, 0x78ab, 0x0000, 0x78cc, 0xa085, 0x0003, 0x78ce,
476 0x2091, 0x8001, 0x0078, 0x1dbd, 0x78ab, 0x0000, 0x1078, 0x2149,
477 0x6004, 0xa084, 0x000f, 0x0079, 0x1dc2, 0x2071, 0x0010, 0x2091,
478 0x8001, 0x007c, 0x1dd2, 0x1df4, 0x1e1a, 0x1dd2, 0x1e37, 0x1de1,
479 0x1fc9, 0x1fe4, 0x1dd2, 0x1dee, 0x1e14, 0x1e7f, 0x1eee, 0x1f57,
480 0x1f69, 0x1fe0, 0x2039, 0x0400, 0x78dc, 0xa705, 0x78de, 0x6008,
481 0xa705, 0x600a, 0x1078, 0x2064, 0x609c, 0x78da, 0x1078, 0x2131,
482 0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1de8, 0x0078, 0x1dd2,
483 0x601c, 0xa085, 0x0080, 0x601e, 0x0078, 0x1dfb, 0x1078, 0x1bc4,
484 0x00c0, 0x1dd2, 0x1078, 0x2163, 0x78dc, 0xa084, 0x0100, 0x0040,
485 0x1dfb, 0x0078, 0x1dd2, 0x78df, 0x0000, 0x6004, 0x8007, 0xa084,
486 0x00ff, 0x78d2, 0x8001, 0x609f, 0x0000, 0x0040, 0x1e11, 0x1078,
487 0x2064, 0x0040, 0x1e11, 0x78dc, 0xa085, 0x0100, 0x78de, 0x0078,
488 0x1e13, 0x1078, 0x2088, 0x007c, 0x1078, 0x1bc4, 0x00c0, 0x1dd2,
489 0x1078, 0x215f, 0x78dc, 0xa08c, 0x0e00, 0x00c0, 0x1e23, 0xa084,
490 0x0100, 0x00c0, 0x1e25, 0x0078, 0x1dd2, 0x1078, 0x2064, 0x00c0,
491 0x1e36, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x2021,
492 0xa186, 0x000f, 0x0040, 0x2021, 0x1078, 0x2088, 0x007c, 0x78dc,
493 0xa084, 0x0100, 0x0040, 0x1e3e, 0x0078, 0x1dd2, 0x78df, 0x0000,
494 0x6714, 0x2011, 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff,
495 0xa005, 0x0040, 0x1e61, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9,
496 0x0020, 0xa08e, 0x0001, 0x0040, 0x1e61, 0x2039, 0x0000, 0x2011,
497 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, 0x1e61, 0x0078,
498 0x1e7c, 0x1078, 0x19c5, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f,
499 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091,
500 0x8001, 0x0070, 0x1e75, 0x0078, 0x1e63, 0x8211, 0x0040, 0x1e7c,
501 0x20a9, 0x0100, 0x0078, 0x1e63, 0x1078, 0x199a, 0x007c, 0x2001,
502 0x5267, 0x2004, 0xa084, 0x8000, 0x0040, 0x2049, 0x6114, 0x1078,
503 0x2180, 0x6900, 0xa184, 0x0001, 0x0040, 0x1ea0, 0x6028, 0xa084,
504 0x00ff, 0x00c0, 0x2041, 0x6800, 0xa084, 0x0001, 0x0040, 0x2049,
505 0x6803, 0x0000, 0x680b, 0x0000, 0x6807, 0x0000, 0x0078, 0x2051,
506 0x2011, 0x0001, 0x6020, 0xd0f4, 0x0040, 0x1ea8, 0xa295, 0x0002,
507 0xd0c4, 0x0040, 0x1ead, 0xa295, 0x0008, 0xd0cc, 0x0040, 0x1eb2,
508 0xa295, 0x0400, 0x601c, 0xa084, 0x0002, 0x0040, 0x1eb9, 0xa295,
509 0x0004, 0x602c, 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0048, 0x204d,
510 0xa182, 0x001b, 0x00c8, 0x204d, 0x0040, 0x204d, 0x690e, 0x602c,
511 0x8007, 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0048, 0x204d, 0xa182,
512 0x001b, 0x00c8, 0x204d, 0x0040, 0x204d, 0x6912, 0x6030, 0xa005,
513 0x00c0, 0x1edc, 0x2001, 0x001e, 0x8000, 0x6816, 0x6028, 0xa084,
514 0x00ff, 0x0040, 0x2049, 0x6806, 0x6028, 0x8007, 0xa084, 0x00ff,
515 0x0040, 0x2049, 0x680a, 0x6a02, 0x0078, 0x2051, 0x2001, 0x5240,
516 0x2004, 0xa086, 0x0007, 0x00c0, 0x1f53, 0x2001, 0x5267, 0x2004,
517 0xa084, 0x8000, 0x0040, 0x2049, 0x6114, 0x1078, 0x2180, 0x2001,
518 0x5252, 0x2004, 0x2010, 0x82ff, 0x0040, 0x1f0e, 0xa080, 0x0005,
519 0x2004, 0xa084, 0x00ff, 0xa106, 0x00c0, 0x1f53, 0x2091, 0x8000,
520 0x6a04, 0x6b08, 0x6418, 0xa484, 0x0003, 0x0040, 0x1f2d, 0x6128,
521 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x1f23, 0x2100, 0xa210, 0x0048,
522 0x1f53, 0x0078, 0x1f2d, 0x8001, 0x00c0, 0x1f53, 0x2100, 0xa212,
523 0x0048, 0x1f53, 0x82ff, 0x0040, 0x1f53, 0xa484, 0x000c, 0x0040,
524 0x1f47, 0x6128, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0,
525 0x1f3f, 0x2100, 0xa318, 0x0048, 0x1f53, 0x0078, 0x1f47, 0xa082,
526 0x0004, 0x00c0, 0x1f53, 0x2100, 0xa31a, 0x0048, 0x1f53, 0x6030,
527 0xa005, 0x0040, 0x1f4d, 0x8000, 0x6816, 0x6a06, 0x6b0a, 0x2091,
528 0x8001, 0x0078, 0x2051, 0x2091, 0x8001, 0x0078, 0x204d, 0x6114,
529 0x1078, 0x2180, 0x2091, 0x8000, 0x6b08, 0x8318, 0x0048, 0x1f65,
530 0x6b0a, 0x2091, 0x8001, 0x0078, 0x2060, 0x2091, 0x8001, 0x0078,
531 0x204d, 0x6024, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1f87, 0xa086,
532 0x0080, 0x00c0, 0x1fc7, 0x20a9, 0x0008, 0x2069, 0x7610, 0x2091,
533 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802, 0xade8, 0x0008, 0x0070,
534 0x1f83, 0x0078, 0x1f79, 0x2091, 0x8001, 0x0078, 0x2051, 0x6028,
535 0xa015, 0x0040, 0x1fc7, 0x6114, 0x1078, 0x2180, 0x0c7e, 0x0d7e,
536 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d, 0x0040, 0x1fc3,
537 0xa206, 0x0040, 0x1f9e, 0x2168, 0x0078, 0x1f94, 0x2160, 0x6000,
538 0x6802, 0x2c68, 0x1078, 0x19ac, 0x0d7f, 0x6818, 0xa00d, 0x0040,
539 0x1fbb, 0x2060, 0x6200, 0x6a1a, 0x6a1c, 0x6202, 0x681e, 0x1078,
540 0x1989, 0x2da0, 0x2198, 0x20a9, 0x0031, 0x53a3, 0x2d60, 0x1078,
541 0x1ccb, 0x0078, 0x1fbe, 0x6808, 0x8000, 0x680a, 0x2091, 0x8001,
542 0x0c7f, 0x0078, 0x2060, 0x2091, 0x8001, 0x0d7f, 0x0c7f, 0x0078,
543 0x2049, 0x6114, 0x1078, 0x2180, 0x6800, 0xa084, 0x0001, 0x0040,
544 0x2039, 0x2091, 0x8000, 0x6a04, 0x8210, 0x0048, 0x1fdc, 0x6a06,
545 0x2091, 0x8001, 0x0078, 0x2060, 0x2091, 0x8001, 0x0078, 0x204d,
546 0x1078, 0x1bc4, 0x00c0, 0x1dd2, 0x6114, 0x1078, 0x2180, 0x60be,
547 0x60bb, 0x0000, 0x6900, 0xa184, 0x0008, 0x0040, 0x1ff3, 0x6020,
548 0xa085, 0x0100, 0x6022, 0xa184, 0x0001, 0x0040, 0x2049, 0xa184,
549 0x0100, 0x00c0, 0x2035, 0xa184, 0x0200, 0x00c0, 0x2031, 0x681c,
550 0xa005, 0x00c0, 0x203d, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f,
551 0x00c0, 0x200c, 0x1078, 0x2163, 0x78df, 0x0000, 0x6004, 0x8007,
552 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f, 0x0000, 0x0040, 0x2021,
553 0x1078, 0x2064, 0x0040, 0x2021, 0x78dc, 0xa085, 0x0100, 0x78de,
554 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000, 0x6024, 0xa084, 0xff00,
555 0x6026, 0x1078, 0x3aac, 0x0040, 0x1d4f, 0x1078, 0x1be9, 0x0078,
556 0x1d4f, 0x2009, 0x0017, 0x0078, 0x2053, 0x2009, 0x000e, 0x0078,
557 0x2053, 0x2009, 0x0007, 0x0078, 0x2053, 0x2009, 0x0035, 0x0078,
558 0x2053, 0x2009, 0x003e, 0x0078, 0x2053, 0x2009, 0x0004, 0x0078,
559 0x2053, 0x2009, 0x0006, 0x0078, 0x2053, 0x2009, 0x0016, 0x0078,
560 0x2053, 0x2009, 0x0001, 0x6024, 0xa084, 0xff00, 0xa105, 0x6026,
561 0x2091, 0x8000, 0x1078, 0x1ccb, 0x2091, 0x8001, 0x0078, 0x1d4f,
562 0x1078, 0x199a, 0x0078, 0x1d4f, 0x78d4, 0xa06d, 0x00c0, 0x206f,
563 0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000, 0x0078, 0x207b, 0x2c00,
564 0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00, 0x6002, 0x78d8, 0xad06,
565 0x00c0, 0x207b, 0x6002, 0x78d0, 0x8001, 0x78d2, 0x00c0, 0x2087,
566 0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8, 0x2060, 0xa006, 0x007c,
567 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xe1ff, 0x601e, 0xa184,
568 0x0060, 0x0040, 0x2097, 0x0e7e, 0x1078, 0x48d3, 0x0e7f, 0x6596,
569 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714,
570 0x1078, 0x19c5, 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x00c0,
571 0x20be, 0x6808, 0xa084, 0x0001, 0x0040, 0x20be, 0x2091, 0x8001,
572 0x1078, 0x1a31, 0x2091, 0x8000, 0x1078, 0x1ccb, 0x2091, 0x8001,
573 0x78d7, 0x0000, 0x78db, 0x0000, 0x0078, 0x2130, 0x6024, 0xa096,
574 0x0001, 0x00c0, 0x20c5, 0x8000, 0x6026, 0x6a10, 0x6814, 0x2091,
575 0x8001, 0xa202, 0x0048, 0x20d4, 0x0040, 0x20d4, 0x2039, 0x0200,
576 0x1078, 0x2131, 0x0078, 0x2130, 0x2c08, 0x2091, 0x8000, 0x60a0,
577 0xa084, 0x8000, 0x0040, 0x2101, 0x6800, 0xa065, 0x0040, 0x2106,
578 0x6a04, 0x0e7e, 0x2071, 0x5240, 0x7000, 0xa084, 0x0001, 0x0040,
579 0x20fb, 0x7048, 0xa206, 0x00c0, 0x20fb, 0x6b04, 0x231c, 0x2160,
580 0x6302, 0x2300, 0xa005, 0x00c0, 0x20f6, 0x6902, 0x2260, 0x6102,
581 0x0e7f, 0x0078, 0x210d, 0x2160, 0x6202, 0x6906, 0x0e7f, 0x0078,
582 0x210d, 0x6800, 0xa065, 0x0040, 0x2106, 0x6102, 0x6902, 0x00c0,
583 0x210a, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0x60a0, 0xa084,
584 0x8000, 0x0040, 0x2117, 0x6808, 0xa084, 0xfffc, 0x680a, 0x6810,
585 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040,
586 0x2126, 0xa086, 0x0040, 0x680a, 0x1078, 0x1a42, 0x2091, 0x8000,
587 0x1078, 0x226f, 0x2091, 0x8001, 0x78db, 0x0000, 0x78d7, 0x0000,
588 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x1ccb,
589 0x2091, 0x8001, 0x78d8, 0xa065, 0x0040, 0x2144, 0x609c, 0x78da,
590 0x609f, 0x0000, 0x0078, 0x2134, 0x78d7, 0x0000, 0x78db, 0x0000,
591 0x007c, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8, 0x2150, 0xa006,
592 0x7896, 0x70d2, 0x7804, 0xa005, 0x0040, 0x215e, 0x8001, 0x7806,
593 0x00c0, 0x215e, 0x0068, 0x215e, 0x2091, 0x4080, 0x007c, 0x2039,
594 0x2177, 0x0078, 0x2165, 0x2039, 0x217d, 0x2704, 0xa005, 0x0040,
595 0x2176, 0xac00, 0x2068, 0x6b08, 0x6c0c, 0x6910, 0x6a14, 0x690a,
596 0x6a0e, 0x6b12, 0x6c16, 0x8738, 0x0078, 0x2165, 0x007c, 0x0003,
597 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000,
598 0x0c7e, 0x1078, 0x3c3b, 0x2c68, 0x0c7f, 0x007c, 0x0010, 0x21f7,
599 0x0068, 0x21f7, 0x2029, 0x0000, 0x78cb, 0x0000, 0x788c, 0xa065,
600 0x0040, 0x21f0, 0x2009, 0x5274, 0x2104, 0xa084, 0x0001, 0x0040,
601 0x21be, 0x6004, 0xa086, 0x0103, 0x00c0, 0x21be, 0x6018, 0xa005,
602 0x00c0, 0x21be, 0x6014, 0xa005, 0x00c0, 0x21be, 0x0d7e, 0x2069,
603 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0, 0x21bd, 0x600c, 0x70c6,
604 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080,
605 0x0d7f, 0x1078, 0x1cf2, 0x0078, 0x21f5, 0x0d7f, 0x1078, 0x21f8,
606 0x0040, 0x21f0, 0x6204, 0xa294, 0x00ff, 0xa296, 0x0003, 0x0040,
607 0x21d0, 0x6204, 0xa296, 0x0110, 0x00c0, 0x21de, 0x78cb, 0x0001,
608 0x6204, 0xa294, 0xff00, 0x8217, 0x8211, 0x0040, 0x21de, 0x85ff,
609 0x00c0, 0x21f0, 0x8210, 0xa202, 0x00c8, 0x21f0, 0x057e, 0x1078,
610 0x2207, 0x057f, 0x0040, 0x21eb, 0x78e0, 0xa086, 0x0003, 0x0040,
611 0x21f0, 0x0078, 0x21de, 0x8528, 0x78c8, 0xa005, 0x0040, 0x218e,
612 0x85ff, 0x0040, 0x21f7, 0x2091, 0x4080, 0x78b0, 0x70d6, 0x007c,
613 0x7bac, 0x79b0, 0x70d4, 0xa102, 0x00c0, 0x2201, 0x2300, 0xa005,
614 0x007c, 0x0048, 0x2205, 0xa302, 0x007c, 0x8002, 0x007c, 0x2001,
615 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x2221, 0x2091, 0x8000,
616 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x2256, 0x7008, 0x7208,
617 0xa206, 0x00c0, 0x2256, 0xa286, 0x0008, 0x00c0, 0x2256, 0x2071,
618 0x0010, 0x1078, 0x225b, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103,
619 0x00c0, 0x2230, 0x6028, 0xa005, 0x00c0, 0x2230, 0x2009, 0x000c,
620 0x1078, 0x1976, 0x0040, 0x2249, 0x78c4, 0x8000, 0x78c6, 0xa086,
621 0x0002, 0x00c0, 0x2256, 0x2091, 0x8000, 0x78e3, 0x0003, 0x78c7,
622 0x0000, 0x78cc, 0xa085, 0x0300, 0x78ce, 0x2091, 0x8001, 0x0078,
623 0x2256, 0x78c7, 0x0000, 0x1078, 0x1cf2, 0x79ac, 0x78b0, 0x8000,
624 0xa10a, 0x00c8, 0x2254, 0xa006, 0x78b2, 0xa006, 0x2071, 0x0010,
625 0x2091, 0x8001, 0x007c, 0x8107, 0x8004, 0x8004, 0x7ab8, 0x7bb4,
626 0x7cc0, 0x7dbc, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
627 0x0000, 0x007c, 0x2009, 0x525b, 0x2091, 0x8000, 0x200a, 0x0f7e,
628 0x0e7e, 0x2071, 0x5240, 0x7000, 0xa086, 0x0000, 0x00c0, 0x2289,
629 0x2009, 0x5212, 0x2104, 0xa005, 0x00c0, 0x2289, 0x2079, 0x0100,
630 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2289, 0x0018, 0x2289, 0x781b,
631 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x5240,
632 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x22a2, 0x2079,
633 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x22a2, 0x0018, 0x22a2,
634 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c, 0x127e,
635 0x2091, 0x2300, 0x2071, 0x5240, 0x2079, 0x0100, 0x784b, 0x000f,
636 0x0098, 0x22b5, 0x7838, 0x0078, 0x22ae, 0x20a9, 0x0040, 0x7800,
637 0xa082, 0x0004, 0x0048, 0x22be, 0x20a9, 0x0060, 0x789b, 0x0000,
638 0x78af, 0x0000, 0x78af, 0x0000, 0x0070, 0x22c8, 0x0078, 0x22c0,
639 0x7800, 0xa082, 0x0004, 0x0048, 0x22d7, 0x70b7, 0x0093, 0x2019,
640 0x4ff0, 0x1078, 0x2313, 0x702f, 0x8001, 0x0078, 0x22e3, 0x70b7,
641 0x0000, 0x2019, 0x4e70, 0x1078, 0x2313, 0x2019, 0x4eaf, 0x1078,
642 0x2313, 0x702f, 0x8000, 0x7003, 0x0000, 0x1078, 0x2420, 0x7004,
643 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd, 0x210c, 0xa18a, 0x0005,
644 0x0048, 0x22f8, 0x0038, 0x22fe, 0xa085, 0x6280, 0x0078, 0x2300,
645 0x0028, 0x22fe, 0xa085, 0x6280, 0x0078, 0x2300, 0xa085, 0x62c0,
646 0x017f, 0x7806, 0x780f, 0xb204, 0x7843, 0x00d8, 0x7853, 0x0080,
647 0x780b, 0x0008, 0x7047, 0x0008, 0x7053, 0x527f, 0x704f, 0x0000,
648 0x127f, 0x2000, 0x007c, 0x137e, 0x147e, 0x157e, 0x047e, 0x20a1,
649 0x012b, 0x2304, 0xa005, 0x789a, 0x0040, 0x2333, 0x8318, 0x2324,
650 0x8318, 0x2398, 0x24a8, 0xa484, 0xff00, 0x0040, 0x232b, 0xa482,
651 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6, 0xa005, 0x00c0, 0x2322,
652 0x3318, 0x0078, 0x2319, 0x047f, 0x157f, 0x147f, 0x137f, 0x007c,
653 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105,
654 0x2012, 0x1078, 0x2420, 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009,
655 0x810b, 0x0070, 0x234d, 0x0078, 0x2348, 0xa18c, 0x0e00, 0x2204,
656 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9,
657 0x0005, 0x8213, 0x0070, 0x235e, 0x0078, 0x2359, 0xa294, 0x00e0,
658 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011, 0x0101,
659 0x20a9, 0x000c, 0x810b, 0x0070, 0x236f, 0x0078, 0x236a, 0xa18c,
660 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011,
661 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103,
662 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac,
663 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e,
664 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f,
665 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100,
666 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103,
667 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4,
668 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091,
669 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x23fe, 0x2061,
670 0x7600, 0x1078, 0x2406, 0x0040, 0x23e8, 0x20a9, 0x0000, 0x2061,
671 0x7500, 0x0c7e, 0x1078, 0x2406, 0x0040, 0x23d6, 0x0c7f, 0x8c60,
672 0x0070, 0x23d4, 0x0078, 0x23c9, 0x0078, 0x23fe, 0x007f, 0xa082,
673 0x7500, 0x2071, 0x5240, 0x7086, 0x7182, 0x2001, 0x0004, 0x706e,
674 0x7093, 0x000f, 0x7073, 0x0000, 0x1078, 0x226a, 0x0078, 0x23fa,
675 0x60c0, 0xa005, 0x00c0, 0x23fe, 0x2071, 0x5240, 0x7182, 0x2c00,
676 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f, 0x7073, 0x0000,
677 0x1078, 0x226a, 0x2001, 0x0000, 0x0078, 0x2400, 0x2001, 0x0001,
678 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005,
679 0x0040, 0x241d, 0x2060, 0x600c, 0xa306, 0x00c0, 0x241a, 0x6010,
680 0xa206, 0x00c0, 0x241a, 0x6014, 0xa106, 0x00c0, 0x241a, 0xa006,
681 0x0078, 0x241f, 0x6000, 0x0078, 0x2407, 0xa085, 0x0001, 0x007c,
682 0x2011, 0x5241, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204,
683 0xa084, 0x0100, 0x0040, 0x2436, 0x2021, 0xff04, 0x2122, 0x810b,
684 0x810b, 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e,
685 0x68e4, 0xa08c, 0x0020, 0x0040, 0x248a, 0xa084, 0x0006, 0x00c0,
686 0x248a, 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
687 0xa0f0, 0x5480, 0x7004, 0xa084, 0x000a, 0x00c0, 0x248a, 0x7108,
688 0xa194, 0xff00, 0x0040, 0x248a, 0xa18c, 0x00ff, 0x2001, 0x000c,
689 0xa106, 0x0040, 0x2471, 0x2001, 0x0012, 0xa106, 0x0040, 0x2475,
690 0x2001, 0x0014, 0xa106, 0x0040, 0x2479, 0x2001, 0x0019, 0xa106,
691 0x0040, 0x247d, 0x2001, 0x0032, 0xa106, 0x0040, 0x2481, 0x0078,
692 0x2485, 0x2009, 0x0012, 0x0078, 0x2487, 0x2009, 0x0014, 0x0078,
693 0x2487, 0x2009, 0x0019, 0x0078, 0x2487, 0x2009, 0x0020, 0x0078,
694 0x2487, 0x2009, 0x003f, 0x0078, 0x2487, 0x2011, 0x0000, 0x2100,
695 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x248c, 0x2091, 0x8000,
696 0x2071, 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x2493,
697 0x007f, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002,
698 0x70db, 0x0741, 0x70df, 0x0006, 0x2071, 0x0000, 0x701b, 0x0001,
699 0x2091, 0x4080, 0x0078, 0x24aa, 0x107e, 0x007e, 0x127e, 0x2091,
700 0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca,
701 0x75ce, 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079,
702 0x24c1, 0x24d3, 0x24d3, 0x24d3, 0x280d, 0x3a09, 0x24d1, 0x2502,
703 0x250c, 0x24d1, 0x24d1, 0x24d1, 0x24d1, 0x24d1, 0x24d1, 0x24d1,
704 0x24d1, 0x1078, 0x248c, 0x8507, 0xa084, 0x001f, 0x0079, 0x24d8,
705 0x2516, 0x280d, 0x29c7, 0x2ac4, 0x2aec, 0x2d8c, 0x3037, 0x309a,
706 0x30fb, 0x3180, 0x3238, 0x32d6, 0x2502, 0x28e9, 0x300c, 0x24f8,
707 0x3dac, 0x3dcc, 0x3f8f, 0x3f9b, 0x4074, 0x24f8, 0x24f8, 0x4149,
708 0x414d, 0x3daa, 0x24f8, 0x3efa, 0x24f8, 0x3c5e, 0x250c, 0x24f8,
709 0x1078, 0x248c, 0x0018, 0x24b1, 0x127f, 0x2091, 0x8001, 0x007f,
710 0x107f, 0x007c, 0x2019, 0x4f49, 0x1078, 0x2313, 0x702f, 0x0001,
711 0x781b, 0x004f, 0x0078, 0x24fa, 0x2019, 0x4eaf, 0x1078, 0x2313,
712 0x702f, 0x8000, 0x781b, 0x00cd, 0x0078, 0x24fa, 0x7242, 0x2009,
713 0x520f, 0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x3c72, 0x0040,
714 0x2533, 0x1078, 0x248c, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043,
715 0x0000, 0x7037, 0x0000, 0x1078, 0x39e0, 0x0018, 0x24b1, 0x2009,
716 0x520f, 0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x25fe, 0x706c,
717 0xa084, 0x0007, 0x0079, 0x253c, 0x2635, 0x2544, 0x2550, 0x256d,
718 0x258f, 0x25dc, 0x25b5, 0x2544, 0x1078, 0x39c8, 0x2009, 0x0048,
719 0x1078, 0x2ed8, 0x00c0, 0x254e, 0x7003, 0x0004, 0x0078, 0x24fa,
720 0x1078, 0x39c8, 0x00c0, 0x256b, 0x7080, 0x8007, 0x7882, 0x789b,
721 0x0010, 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b,
722 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0, 0x256b, 0x7003,
723 0x0004, 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, 0x39c8, 0x00c0,
724 0x258d, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f,
725 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab,
726 0x0002, 0x785b, 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0,
727 0x258d, 0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078,
728 0x39c8, 0x00c0, 0x25b3, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010,
729 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184,
730 0x79aa, 0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b,
731 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0, 0x25b3, 0x7003,
732 0x0004, 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, 0x39c8, 0x00c0,
733 0x25da, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f,
734 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab,
735 0x0002, 0x785b, 0x0004, 0x2009, 0x00dd, 0x1078, 0x2ecc, 0x00c0,
736 0x25da, 0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002,
737 0x7093, 0x000f, 0x0078, 0x24fa, 0x1078, 0x39c8, 0x00c0, 0x24fa,
738 0x7088, 0x2068, 0x6f14, 0x1078, 0x38bd, 0x2c50, 0x1078, 0x3a7a,
739 0x789b, 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa,
740 0x6e1c, 0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004,
741 0x0040, 0x25fc, 0x2001, 0x0006, 0x0078, 0x271d, 0x1078, 0x39c8,
742 0x00c0, 0x24fa, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078,
743 0x38bd, 0x2c50, 0x1078, 0x3a7a, 0x6008, 0xa085, 0x0010, 0x600a,
744 0x6824, 0xa005, 0x0040, 0x261c, 0xa082, 0x0006, 0x0048, 0x261a,
745 0x0078, 0x261c, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d,
746 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x262a, 0xa684, 0x0001,
747 0x0040, 0x262c, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041,
748 0x0001, 0x2001, 0x0003, 0x0078, 0x271d, 0x0018, 0x24b1, 0x744c,
749 0xa485, 0x0000, 0x0040, 0x264f, 0xa080, 0x5280, 0x2030, 0x7150,
750 0x8108, 0xa12a, 0x0048, 0x2646, 0x2009, 0x5280, 0x2164, 0x6504,
751 0x85ff, 0x00c0, 0x2660, 0x8421, 0x00c0, 0x2640, 0x7152, 0x7003,
752 0x0000, 0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x3c72, 0x0078,
753 0x24fa, 0x764c, 0xa6b0, 0x5280, 0x7150, 0x2600, 0x0078, 0x264b,
754 0x7152, 0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000,
755 0x00c0, 0x265d, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x2696,
756 0xa784, 0x0021, 0x00c0, 0x265d, 0xa784, 0x0002, 0x0040, 0x267f,
757 0xa784, 0x0004, 0x0040, 0x265d, 0xa7bc, 0xfffb, 0x670a, 0xa784,
758 0x0008, 0x00c0, 0x265d, 0xa784, 0x0010, 0x00c0, 0x265d, 0xa784,
759 0x0200, 0x00c0, 0x265d, 0xa784, 0x0100, 0x0040, 0x2696, 0x6018,
760 0xa005, 0x00c0, 0x265d, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000,
761 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x26a6, 0x601c, 0xa102,
762 0x0048, 0x26a9, 0x0040, 0x26a9, 0x0078, 0x2659, 0x81ff, 0x00c0,
763 0x2659, 0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x26b1, 0x700c,
764 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x3a7a, 0x0018, 0x24b1,
765 0x789b, 0x0010, 0xa046, 0x1078, 0x39c8, 0x00c0, 0x24fa, 0x6b14,
766 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040,
767 0x26cd, 0xa684, 0x0001, 0x0040, 0x26cf, 0xa39c, 0xffbf, 0xa684,
768 0x0010, 0x0040, 0x26d5, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684,
769 0x000e, 0x00c0, 0x26e0, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x271b,
770 0x7158, 0xa18c, 0x0800, 0x0040, 0x34cb, 0x2011, 0x0020, 0xa684,
771 0x0008, 0x00c0, 0x26f1, 0x8210, 0xa684, 0x0002, 0x00c0, 0x26f1,
772 0x8210, 0x7aaa, 0x8840, 0x1078, 0x39e0, 0x6a14, 0x610c, 0x8108,
773 0xa18c, 0x00ff, 0xa1e0, 0x7500, 0x2c64, 0x8cff, 0x0040, 0x2712,
774 0x6014, 0xa206, 0x00c0, 0x26fc, 0x60b8, 0x8001, 0x60ba, 0x00c0,
775 0x26f7, 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f,
776 0x0078, 0x2635, 0x1078, 0x39c8, 0x00c0, 0x24fa, 0x2a60, 0x610e,
777 0x79aa, 0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184,
778 0x0018, 0x0040, 0x2738, 0xa184, 0x0010, 0x0040, 0x272b, 0x1078,
779 0x36d0, 0x00c0, 0x275b, 0xa184, 0x0008, 0x0040, 0x2738, 0x69a0,
780 0xa184, 0x0600, 0x00c0, 0x2738, 0x1078, 0x35bb, 0x0078, 0x275b,
781 0x69a0, 0xa184, 0x0800, 0x0040, 0x274f, 0x0c7e, 0x027e, 0x2960,
782 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106,
783 0x027f, 0x0c7f, 0x1078, 0x36d0, 0x00c0, 0x275b, 0x69a0, 0xa184,
784 0x0200, 0x0040, 0x2757, 0x1078, 0x360c, 0x0078, 0x275b, 0xa184,
785 0x0400, 0x00c0, 0x2734, 0x69a0, 0xa184, 0x1000, 0x0040, 0x2766,
786 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x238b, 0x007f, 0x7002,
787 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2774, 0xa086, 0x0060,
788 0x00c0, 0x2774, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x2779, 0xa18d,
789 0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b,
790 0x0061, 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a, 0xa68c,
791 0x0080, 0x0040, 0x2798, 0x7097, 0x0000, 0xa08a, 0x000d, 0x0050,
792 0x2796, 0xa08a, 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a,
793 0x78aa, 0x8008, 0x810c, 0x0040, 0x34d1, 0xa18c, 0x00f8, 0x00c0,
794 0x34d1, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000,
795 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f,
796 0x157f, 0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde, 0x6e98,
797 0x7ed2, 0x7eda, 0x1078, 0x39c8, 0x00c0, 0x27cf, 0x702c, 0x8003,
798 0x0048, 0x27c8, 0x2019, 0x4eaf, 0x1078, 0x2313, 0x702f, 0x8000,
799 0x7830, 0xa084, 0x00c0, 0x00c0, 0x27cf, 0x0098, 0x27d7, 0x6008,
800 0xa084, 0xffef, 0x600a, 0x1078, 0x39e0, 0x0078, 0x2523, 0x7200,
801 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x27e4, 0x781b, 0x004f,
802 0x1078, 0x39e0, 0x0078, 0x27f5, 0x6ab4, 0xa295, 0x2000, 0x7a5a,
803 0x781b, 0x004f, 0x1078, 0x39e0, 0x7200, 0x2500, 0xa605, 0x0040,
804 0x27f5, 0xa284, 0x0007, 0x1079, 0x2803, 0xad80, 0x0009, 0x7036,
805 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x24fa, 0x6018, 0x8000,
806 0x601a, 0x0078, 0x24fa, 0x280b, 0x4b4b, 0x4b4b, 0x4b3a, 0x4b4b,
807 0x280b, 0x4b3a, 0x280b, 0x1078, 0x248c, 0x1078, 0x39c8, 0x0f7e,
808 0x2079, 0x5200, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2831,
809 0x706c, 0xa086, 0x0001, 0x00c0, 0x2820, 0x706e, 0x0078, 0x28c4,
810 0x706c, 0xa086, 0x0005, 0x00c0, 0x282f, 0x7088, 0x2068, 0x681b,
811 0x0004, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f,
812 0x0000, 0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x2852,
813 0xa186, 0x0007, 0x00c0, 0x2842, 0x2009, 0x5238, 0x200b, 0x0005,
814 0x0078, 0x2852, 0x2009, 0x5213, 0x2104, 0x2009, 0x5212, 0x200a,
815 0x2009, 0x5238, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001,
816 0x0078, 0x2854, 0x706f, 0x0000, 0x1078, 0x4887, 0x157e, 0x20a9,
817 0x0010, 0x2039, 0x0000, 0x1078, 0x37b0, 0xa7b8, 0x0100, 0x0070,
818 0x2863, 0x0078, 0x285b, 0x157f, 0x7000, 0x0079, 0x2867, 0x2895,
819 0x287c, 0x287c, 0x286f, 0x2895, 0x2895, 0x2895, 0x2895, 0x2021,
820 0x525a, 0x2404, 0xa005, 0x0040, 0x2895, 0xad06, 0x00c0, 0x287c,
821 0x6800, 0x2022, 0x0078, 0x288c, 0x6820, 0xa084, 0x0001, 0x00c0,
822 0x2888, 0x6f14, 0x1078, 0x38bd, 0x1078, 0x34a2, 0x0078, 0x288c,
823 0x7060, 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820,
824 0xa085, 0x0008, 0x6822, 0x1078, 0x1cdc, 0x2021, 0x7600, 0x1078,
825 0x28d1, 0x2021, 0x525a, 0x1078, 0x28d1, 0x157e, 0x20a9, 0x0000,
826 0x2021, 0x7500, 0x1078, 0x28d1, 0x8420, 0x0070, 0x28a9, 0x0078,
827 0x28a2, 0x2061, 0x5500, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018,
828 0x6110, 0x81ff, 0x0040, 0x28b8, 0xa102, 0x0050, 0x28b8, 0x6012,
829 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x28c0, 0x0078, 0x28af,
830 0x8421, 0x00c0, 0x28ad, 0x157f, 0x709c, 0xa084, 0x8000, 0x0040,
831 0x28cb, 0x1078, 0x3ace, 0x7003, 0x0000, 0x704b, 0x0000, 0x0078,
832 0x24fa, 0x047e, 0x2404, 0xa005, 0x0040, 0x28e5, 0x2068, 0x6800,
833 0x007e, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822,
834 0x1078, 0x1cdc, 0x007f, 0x0078, 0x28d3, 0x047f, 0x2023, 0x0000,
835 0x007c, 0xa282, 0x0003, 0x0050, 0x28ef, 0x1078, 0x248c, 0x2300,
836 0x0079, 0x28f2, 0x28f5, 0x2968, 0x2985, 0xa282, 0x0002, 0x0040,
837 0x28fb, 0x1078, 0x248c, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000,
838 0x0079, 0x2902, 0x290a, 0x290a, 0x290c, 0x2940, 0x34d7, 0x290a,
839 0x2940, 0x290a, 0x1078, 0x248c, 0x7780, 0x1078, 0x37b0, 0x7780,
840 0xa7bc, 0x0f00, 0x1078, 0x38bd, 0x6018, 0xa005, 0x0040, 0x2937,
841 0x2021, 0x7600, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x29a0,
842 0x0040, 0x2937, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7500, 0x047e,
843 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x29a0, 0x047f, 0x0040,
844 0x2936, 0x8420, 0x0070, 0x2936, 0x0078, 0x2927, 0x157f, 0x8738,
845 0xa784, 0x001f, 0x00c0, 0x2912, 0x0078, 0x2523, 0x0078, 0x2523,
846 0x7780, 0x1078, 0x38bd, 0x6018, 0xa005, 0x0040, 0x2966, 0x2021,
847 0x7600, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x29a0, 0x0040,
848 0x2966, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7500, 0x047e, 0x2009,
849 0x0005, 0x2011, 0x0020, 0x1078, 0x29a0, 0x047f, 0x0040, 0x2965,
850 0x8420, 0x0070, 0x2965, 0x0078, 0x2956, 0x157f, 0x0078, 0x2523,
851 0x2200, 0x0079, 0x296b, 0x296e, 0x2970, 0x2970, 0x1078, 0x248c,
852 0x2009, 0x0012, 0x706c, 0xa086, 0x0002, 0x0040, 0x2979, 0x2009,
853 0x000e, 0x6818, 0xa084, 0x8000, 0x0040, 0x297f, 0x691a, 0x706f,
854 0x0000, 0x7073, 0x0001, 0x0078, 0x3956, 0x2200, 0x0079, 0x2988,
855 0x298d, 0x2970, 0x298b, 0x1078, 0x248c, 0x1078, 0x4887, 0x7000,
856 0xa086, 0x0001, 0x00c0, 0x3467, 0x1078, 0x34b8, 0x6008, 0xa084,
857 0xffef, 0x600a, 0x1078, 0x345a, 0x0040, 0x3467, 0x0078, 0x2635,
858 0x2404, 0xa005, 0x0040, 0x29c3, 0x2068, 0x2d04, 0x007e, 0x6814,
859 0xa706, 0x0040, 0x29af, 0x2d20, 0x007f, 0x0078, 0x29a1, 0x007f,
860 0x2022, 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078,
861 0x1cdc, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a,
862 0x1078, 0x34b8, 0x007c, 0xa085, 0x0001, 0x0078, 0x29c2, 0x2300,
863 0x0079, 0x29ca, 0x29cf, 0x29cd, 0x2a68, 0x1078, 0x248c, 0x78ec,
864 0xa084, 0x0001, 0x00c0, 0x29e3, 0x7000, 0xa086, 0x0004, 0x00c0,
865 0x29db, 0x0078, 0x2a06, 0x1078, 0x34b8, 0x6008, 0xa084, 0xffef,
866 0x600a, 0x0078, 0x3467, 0x78e4, 0xa005, 0x00d0, 0x2a06, 0x0018,
867 0x24fa, 0x2008, 0xa084, 0x0030, 0x00c0, 0x29f2, 0x781b, 0x004f,
868 0x0078, 0x24fa, 0x78ec, 0xa084, 0x0003, 0x0040, 0x29ee, 0x2100,
869 0xa084, 0x0007, 0x0079, 0x29fc, 0x2a3f, 0x2a4a, 0x2a30, 0x2a04,
870 0x39bb, 0x39bb, 0x2a04, 0x2a59, 0x1078, 0x248c, 0x7000, 0xa086,
871 0x0004, 0x00c0, 0x2a20, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2a16,
872 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x28e9, 0x706c, 0xa086,
873 0x0006, 0x0040, 0x2a10, 0x706c, 0xa086, 0x0004, 0x0040, 0x2a10,
874 0x79e4, 0xa184, 0x0030, 0x0040, 0x2a2a, 0x78ec, 0xa084, 0x0003,
875 0x00c0, 0x2a2c, 0x0078, 0x300c, 0x2001, 0x0003, 0x0078, 0x2da0,
876 0x6818, 0xa084, 0x8000, 0x0040, 0x2a37, 0x681b, 0x001d, 0x1078,
877 0x378f, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa, 0x6818,
878 0xa084, 0x8000, 0x0040, 0x2a46, 0x681b, 0x001d, 0x1078, 0x378f,
879 0x0078, 0x3986, 0x6818, 0xa084, 0x8000, 0x0040, 0x2a51, 0x681b,
880 0x001d, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, 0x00ca, 0x0078,
881 0x24fa, 0x6818, 0xa084, 0x8000, 0x0040, 0x2a60, 0x681b, 0x001d,
882 0x1078, 0x378f, 0x782b, 0x3008, 0x781b, 0x008f, 0x0078, 0x24fa,
883 0xa584, 0x000f, 0x00c0, 0x2a85, 0x7000, 0x0079, 0x2a6f, 0x2523,
884 0x2a79, 0x2a77, 0x3467, 0x3467, 0x3467, 0x3467, 0x2a77, 0x1078,
885 0x248c, 0x1078, 0x34b8, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
886 0x345a, 0x0040, 0x3467, 0x0078, 0x2635, 0x78e4, 0xa005, 0x00d0,
887 0x2a06, 0x0018, 0x2a06, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2a94,
888 0x781b, 0x004f, 0x0078, 0x24fa, 0x78ec, 0xa084, 0x0003, 0x0040,
889 0x2a90, 0x2100, 0xa184, 0x0007, 0x0079, 0x2a9e, 0x2ab0, 0x2ab4,
890 0x2aa8, 0x2aa6, 0x39bb, 0x39bb, 0x2aa6, 0x39b1, 0x1078, 0x248c,
891 0x1078, 0x3797, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa,
892 0x1078, 0x3797, 0x0078, 0x3986, 0x1078, 0x3797, 0x782b, 0x3008,
893 0x781b, 0x00ca, 0x0078, 0x24fa, 0x1078, 0x3797, 0x782b, 0x3008,
894 0x781b, 0x008f, 0x0078, 0x24fa, 0x2300, 0x0079, 0x2ac7, 0x2acc,
895 0x2aca, 0x2ace, 0x1078, 0x248c, 0x0078, 0x3180, 0x681b, 0x0008,
896 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x3180, 0x78ec,
897 0xa084, 0x0003, 0x0040, 0x3180, 0xa184, 0x0007, 0x0079, 0x2ae0,
898 0x2ae8, 0x2ab4, 0x2a30, 0x3956, 0x39bb, 0x39bb, 0x2ae8, 0x39b1,
899 0x1078, 0x396a, 0x0078, 0x24fa, 0xa282, 0x0005, 0x0050, 0x2af2,
900 0x1078, 0x248c, 0x2300, 0x0079, 0x2af5, 0x2af8, 0x2d4d, 0x2d5b,
901 0x2200, 0x0079, 0x2afb, 0x2b15, 0x2b02, 0x2b15, 0x2b00, 0x2d32,
902 0x1078, 0x248c, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082,
903 0x0020, 0x0048, 0x376b, 0xa08a, 0x0004, 0x00c8, 0x376b, 0x0079,
904 0x2b11, 0x376b, 0x376b, 0x376b, 0x3719, 0x789b, 0x0018, 0x79a8,
905 0xa184, 0x0080, 0x0040, 0x2b26, 0x0078, 0x376b, 0x7000, 0xa005,
906 0x00c0, 0x2b1c, 0x2011, 0x0004, 0x0078, 0x32e9, 0xa184, 0x00ff,
907 0xa08a, 0x0010, 0x00c8, 0x376b, 0x0079, 0x2b2e, 0x2b40, 0x2b3e,
908 0x2b58, 0x2b5c, 0x2c17, 0x376b, 0x376b, 0x2c19, 0x376b, 0x376b,
909 0x2d2e, 0x2d2e, 0x376b, 0x376b, 0x376b, 0x2d30, 0x1078, 0x248c,
910 0xa684, 0x1000, 0x0040, 0x2b4d, 0x2001, 0x0500, 0x8000, 0x8000,
911 0x783a, 0x781b, 0x008d, 0x0078, 0x24fa, 0x6818, 0xa084, 0x8000,
912 0x0040, 0x2b56, 0x681b, 0x001d, 0x0078, 0x2b44, 0x0078, 0x3956,
913 0x681b, 0x001d, 0x0078, 0x377b, 0x6920, 0x6922, 0xa684, 0x1800,
914 0x00c0, 0x2b9d, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2ba5, 0x6818,
915 0xa086, 0x0008, 0x00c0, 0x2b6e, 0x681b, 0x0000, 0xa684, 0x0400,
916 0x0040, 0x2c13, 0xa684, 0x0080, 0x0040, 0x2b99, 0x7097, 0x0000,
917 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x2b99, 0xa08a,
918 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x789b, 0x0061,
919 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000,
920 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f,
921 0x157f, 0x781b, 0x0058, 0x0078, 0x24fa, 0xa684, 0x1000, 0x0040,
922 0x2ba5, 0x781b, 0x0065, 0x0078, 0x24fa, 0xa684, 0x0060, 0x0040,
923 0x2c0f, 0xa684, 0x0800, 0x0040, 0x2c0f, 0xa684, 0x8000, 0x00c0,
924 0x2bb3, 0x0078, 0x2bcb, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x7adc,
925 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x2bbe, 0x8000, 0xa084, 0x003f,
926 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94,
927 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x2bd3, 0xa6b4,
928 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0, 0x2be0,
929 0x1078, 0x493d, 0x1078, 0x4b3a, 0x781b, 0x0064, 0x0078, 0x24fa,
930 0xa006, 0x1078, 0x4c41, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200,
931 0xa105, 0x0040, 0x2bef, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa,
932 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0,
933 0x2c01, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0064, 0x0078,
934 0x24fa, 0x781b, 0x0064, 0x2200, 0xa115, 0x00c0, 0x2c0b, 0x1078,
935 0x4b4b, 0x0078, 0x24fa, 0x1078, 0x4b96, 0x0078, 0x24fa, 0x781b,
936 0x0065, 0x0078, 0x24fa, 0x781b, 0x0058, 0x0078, 0x24fa, 0x1078,
937 0x248c, 0x0078, 0x2c7a, 0x6920, 0xa184, 0x0100, 0x0040, 0x2c31,
938 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084,
939 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078,
940 0x2c69, 0xa184, 0x0200, 0x0040, 0x2c69, 0xa18c, 0xfdff, 0x6922,
941 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004,
942 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008,
943 0x0040, 0x2c69, 0x1078, 0x38b9, 0x1078, 0x35bb, 0x88ff, 0x0040,
944 0x2c69, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004,
945 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2c63, 0x782b, 0x3008, 0x781b,
946 0x0056, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078,
947 0x24fa, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2c72, 0x781b, 0x0058,
948 0x0078, 0x24fa, 0x781b, 0x0065, 0x0078, 0x24fa, 0x0078, 0x3773,
949 0x0078, 0x3773, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x00c0,
950 0x2c88, 0x6820, 0xa084, 0x0100, 0x0040, 0x2c78, 0x2009, 0x0008,
951 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0,
952 0x2cbf, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x2cb7,
953 0x0048, 0x2c9c, 0x0078, 0x2cb9, 0xa380, 0x0002, 0xa102, 0x00c8,
954 0x2cb7, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054, 0x2060,
955 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, 0x6006,
956 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2c6a, 0x0078,
957 0x2c1b, 0x24a8, 0x7aa8, 0x00f0, 0x2cb9, 0x0078, 0x2c8a, 0xa284,
958 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2d1f, 0x8318, 0x8318, 0x2300,
959 0xa102, 0x0040, 0x2ccf, 0x0048, 0x2ccf, 0x0078, 0x2d1c, 0xa286,
960 0x0023, 0x0040, 0x2c78, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58,
961 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085,
962 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008, 0x2c48,
963 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2cf3, 0x1078, 0x38b9, 0x1078,
964 0x36d0, 0x0078, 0x2d02, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008,
965 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2c69, 0x1078, 0x38b9,
966 0x1078, 0x35bb, 0x88ff, 0x0040, 0x2c69, 0x789b, 0x0060, 0x2800,
967 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2d16,
968 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa, 0x782b, 0x3008,
969 0x781b, 0x0065, 0x0078, 0x24fa, 0x7aa8, 0x0078, 0x2c8a, 0x8318,
970 0x2300, 0xa102, 0x0040, 0x2d28, 0x0048, 0x2d28, 0x0078, 0x2c8a,
971 0xa284, 0x0080, 0x00c0, 0x377b, 0x0078, 0x3773, 0x0078, 0x377b,
972 0x0078, 0x376b, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e,
973 0x0001, 0x0040, 0x2d3d, 0x1078, 0x248c, 0x7aa8, 0xa294, 0x00ff,
974 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x376b, 0x0079,
975 0x2d49, 0x376b, 0x3508, 0x376b, 0x3665, 0xa282, 0x0000, 0x00c0,
976 0x2d53, 0x1078, 0x248c, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b,
977 0x0065, 0x0078, 0x24fa, 0xa282, 0x0003, 0x00c0, 0x2d61, 0x1078,
978 0x248c, 0xa484, 0x8000, 0x00c0, 0x2d84, 0x706c, 0xa005, 0x0040,
979 0x2d6b, 0x1078, 0x248c, 0x6f14, 0x7782, 0xa7bc, 0x0f00, 0x1078,
980 0x38bd, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f,
981 0x00c0, 0x2d6f, 0x1078, 0x3793, 0x706f, 0x0002, 0x2009, 0x5238,
982 0x200b, 0x0009, 0x0078, 0x2d86, 0x1078, 0x379f, 0x782b, 0x3008,
983 0x781b, 0x0065, 0x0078, 0x24fa, 0xa282, 0x0004, 0x0050, 0x2d92,
984 0x1078, 0x248c, 0x2300, 0x0079, 0x2d95, 0x2d98, 0x2e81, 0x2eb4,
985 0xa286, 0x0003, 0x0040, 0x2d9e, 0x1078, 0x248c, 0x2001, 0x0000,
986 0x007e, 0x68c0, 0xa005, 0x0040, 0x2da7, 0x7003, 0x0003, 0x68a0,
987 0xa084, 0x2000, 0x0040, 0x2db0, 0x6008, 0xa085, 0x0002, 0x600a,
988 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2db7, 0x2523,
989 0x2dc1, 0x2dc1, 0x2fb6, 0x2ff2, 0x2523, 0x2ff2, 0x2dbf, 0x1078,
990 0x248c, 0xa684, 0x1000, 0x00c0, 0x2dc9, 0x1078, 0x4887, 0x0040,
991 0x2e5b, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2e11, 0xa186, 0x0008,
992 0x00c0, 0x2de0, 0x1078, 0x34b8, 0x6008, 0xa084, 0xffef, 0x600a,
993 0x1078, 0x345a, 0x0040, 0x2e11, 0x1078, 0x4887, 0x0078, 0x2df8,
994 0xa186, 0x0028, 0x00c0, 0x2e11, 0x1078, 0x4887, 0x6008, 0xa084,
995 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2df8, 0x8001, 0x601a,
996 0xa005, 0x0040, 0x2df8, 0x8001, 0xa005, 0x0040, 0x2df8, 0x601e,
997 0x6820, 0xa084, 0x0001, 0x0040, 0x2523, 0x6820, 0xa084, 0xfffe,
998 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004,
999 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2e0e, 0x6002, 0x6006, 0x0078,
1000 0x2523, 0x017e, 0x1078, 0x2ee5, 0x017f, 0xa684, 0xdf00, 0x681e,
1001 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2e5b, 0xa186, 0x0002,
1002 0x00c0, 0x2e5b, 0xa684, 0x0800, 0x00c0, 0x2e2e, 0xa684, 0x0060,
1003 0x0040, 0x2e2e, 0x78d8, 0x7adc, 0x682e, 0x6a32, 0x6820, 0xa084,
1004 0x0800, 0x00c0, 0x2e5b, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213,
1005 0x8213, 0xa290, 0x5480, 0xa290, 0x0000, 0x221c, 0xa384, 0x0100,
1006 0x00c0, 0x2e44, 0x0078, 0x2e4a, 0x8210, 0x2204, 0xa085, 0x0018,
1007 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2e57, 0x68a0, 0xa084,
1008 0x0100, 0x00c0, 0x2e57, 0x1078, 0x2f69, 0x0078, 0x2523, 0x6008,
1009 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040,
1010 0x2e63, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, 0x34a9,
1011 0x1078, 0x34b8, 0x00c0, 0x2e70, 0x6008, 0xa084, 0xffef, 0x600a,
1012 0x6820, 0xa084, 0x0001, 0x00c0, 0x2e79, 0x1078, 0x34a2, 0x0078,
1013 0x2e7d, 0x7060, 0x2060, 0x6800, 0x6002, 0x1078, 0x1cdc, 0x0078,
1014 0x2523, 0xa282, 0x0004, 0x0048, 0x2e87, 0x1078, 0x248c, 0x2200,
1015 0x0079, 0x2e8a, 0x2e85, 0x2e8e, 0x2e9b, 0x2e8e, 0x7000, 0xa086,
1016 0x0005, 0x0040, 0x2e97, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b,
1017 0x0065, 0x0078, 0x24fa, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007,
1018 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003,
1019 0x0040, 0x2eb0, 0xa186, 0x0000, 0x0040, 0x2eb0, 0x0078, 0x376b,
1020 0x781b, 0x0065, 0x0078, 0x24fa, 0x6820, 0xa085, 0x0004, 0x6822,
1021 0x82ff, 0x00c0, 0x2ebf, 0x1078, 0x378f, 0x0078, 0x2ec6, 0x8211,
1022 0x0040, 0x2ec4, 0x1078, 0x248c, 0x1078, 0x379f, 0x782b, 0x3008,
1023 0x781b, 0x0065, 0x0078, 0x24fa, 0x702c, 0x8003, 0x0048, 0x2ed6,
1024 0x2019, 0x4eaf, 0x1078, 0x2313, 0x702f, 0x8000, 0x1078, 0x39e0,
1025 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2ee2, 0x0018, 0x2ee2, 0x791a,
1026 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0,
1027 0x2eef, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2f68, 0xa684,
1028 0x0800, 0x00c0, 0x2f11, 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684,
1029 0x0800, 0x00c0, 0x2f11, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x703c,
1030 0xa005, 0x00c0, 0x2f09, 0x2200, 0xa105, 0x0040, 0x2f10, 0x703f,
1031 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2f10, 0x1078, 0x4887,
1032 0x007c, 0xa684, 0x0020, 0x0040, 0x2f33, 0xa684, 0x4000, 0x0040,
1033 0x2f1f, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2f09, 0x68b4,
1034 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2f19, 0x703c,
1035 0xa005, 0x00c0, 0x2f2d, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x692e,
1036 0x6a32, 0x0078, 0x2f09, 0xa684, 0x4000, 0x0040, 0x2f3d, 0x682f,
1037 0x0000, 0x6833, 0x0000, 0x0078, 0x2f09, 0x68b4, 0xa084, 0x4800,
1038 0xa635, 0xa684, 0x4000, 0x00c0, 0x2f37, 0x703c, 0xa005, 0x00c0,
1039 0x2f4b, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8,
1040 0x2f52, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e,
1041 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2f5f, 0x0078, 0x2f09, 0x7000,
1042 0xa086, 0x0006, 0x0040, 0x2f68, 0x1078, 0x4c41, 0x0078, 0x2f09,
1043 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200, 0x0040,
1044 0x2f75, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006, 0x688f,
1045 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f,
1046 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b,
1047 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079, 0x2f90,
1048 0x2523, 0x2f9a, 0x2fa3, 0x2f98, 0x2f98, 0x2f98, 0x2f98, 0x2f98,
1049 0x1078, 0x248c, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2fa3, 0x1078,
1050 0x34a2, 0x0078, 0x2fa9, 0x7060, 0x2c50, 0x2060, 0x6800, 0x6002,
1051 0x2a60, 0x2021, 0x525a, 0x2404, 0xa005, 0x0040, 0x2fb2, 0x2020,
1052 0x0078, 0x2fab, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, 0x34a9,
1053 0x1078, 0x34b8, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b, 0x0000,
1054 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x4c89, 0xa684,
1055 0x0800, 0x0040, 0x2fcf, 0x691c, 0xa18d, 0x2000, 0x691e, 0x6818,
1056 0xa084, 0x8000, 0x0040, 0x2fdf, 0x7868, 0xa08c, 0x00ff, 0x0040,
1057 0x2fdd, 0x681b, 0x001e, 0x0078, 0x2fdf, 0x681b, 0x0000, 0x2021,
1058 0x525a, 0x2404, 0xad06, 0x0040, 0x2fe6, 0x7460, 0x6800, 0x2022,
1059 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x1cdc,
1060 0x0078, 0x2523, 0x1078, 0x2ee5, 0x682b, 0x0000, 0x2001, 0x000e,
1061 0x6f14, 0x1078, 0x39e6, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084,
1062 0x8000, 0x0040, 0x3005, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e,
1063 0x706f, 0x0000, 0x0078, 0x2523, 0x7000, 0xa005, 0x00c0, 0x3012,
1064 0x0078, 0x2523, 0xa006, 0x1078, 0x4887, 0x6817, 0x0000, 0x681b,
1065 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa085,
1066 0x00ff, 0x6822, 0x7000, 0x0079, 0x3025, 0x2523, 0x302f, 0x302f,
1067 0x3031, 0x3031, 0x3031, 0x3031, 0x302d, 0x1078, 0x248c, 0x1078,
1068 0x34b8, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x3472, 0x2300,
1069 0x0079, 0x303a, 0x303d, 0x303f, 0x3098, 0x1078, 0x248c, 0xa684,
1070 0x8000, 0x00c0, 0x307d, 0x7000, 0x0079, 0x3046, 0x2523, 0x3050,
1071 0x3050, 0x306c, 0x3050, 0x3079, 0x306c, 0x304e, 0x1078, 0x248c,
1072 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x3068, 0xa6b4, 0xffdf,
1073 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x6eb6, 0x681c, 0xa084,
1074 0xffdf, 0x681e, 0x1078, 0x4887, 0x1078, 0x4b4b, 0x0078, 0x3956,
1075 0xa684, 0x2000, 0x0040, 0x305a, 0x6818, 0xa084, 0x8000, 0x0040,
1076 0x3079, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x3079, 0x681b,
1077 0x0007, 0x1078, 0x396a, 0x0078, 0x24fa, 0xa6b4, 0x7fff, 0x7e5a,
1078 0x7adc, 0x79d8, 0x78d0, 0x79d2, 0x801b, 0x00c8, 0x3088, 0x8000,
1079 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
1080 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0065, 0x007c,
1081 0x1078, 0x248c, 0x2300, 0x0079, 0x309d, 0x30a0, 0x30a2, 0x30eb,
1082 0x1078, 0x248c, 0xa684, 0x8000, 0x00c0, 0x30da, 0x7000, 0x0079,
1083 0x30a9, 0x2523, 0x30b3, 0x30b3, 0x30cf, 0x30b3, 0x30d6, 0x30cf,
1084 0x30b1, 0x1078, 0x248c, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0,
1085 0x30cb, 0xa6b4, 0xffbf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a,
1086 0x6eb6, 0x681c, 0xa084, 0xffbf, 0x681e, 0x1078, 0x4887, 0x1078,
1087 0x4b4b, 0x0078, 0x3956, 0xa684, 0x2000, 0x0040, 0x30bd, 0x6818,
1088 0xa084, 0x8000, 0x0040, 0x30d6, 0x681b, 0x0007, 0x781b, 0x00ca,
1089 0x0078, 0x24fa, 0xa6b4, 0x7fff, 0x7e5a, 0x7adc, 0x79d8, 0x6b98,
1090 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2,
1091 0x781b, 0x0065, 0x007c, 0x6820, 0xa085, 0x0004, 0x6822, 0x1078,
1092 0x3921, 0xa6b5, 0x0800, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b,
1093 0x0065, 0x0078, 0x24fa, 0x2300, 0x0079, 0x30fe, 0x3101, 0x3103,
1094 0x3105, 0x1078, 0x248c, 0x0078, 0x377b, 0xa684, 0x0400, 0x00c0,
1095 0x312e, 0x79e4, 0xa184, 0x0020, 0x0040, 0x3115, 0x78ec, 0xa084,
1096 0x0003, 0x0040, 0x3115, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab,
1097 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040,
1098 0x3126, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x312a, 0x2001, 0x0014,
1099 0x0078, 0x2da0, 0xa184, 0x0007, 0x0079, 0x3166, 0x7a90, 0xa294,
1100 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0040, 0x3164, 0x789b,
1101 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, 0x3155, 0x7ba8, 0x7ba8,
1102 0xa386, 0x0001, 0x00c0, 0x3148, 0x2009, 0xfff7, 0x0078, 0x314e,
1103 0xa386, 0x0003, 0x00c0, 0x3155, 0x2009, 0xffef, 0x0c7e, 0x7054,
1104 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab,
1105 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c,
1106 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x3956, 0x2a3f, 0x2a4a,
1107 0x3170, 0x3178, 0x316e, 0x316e, 0x3956, 0x3956, 0x1078, 0x248c,
1108 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x3960,
1109 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x3956,
1110 0x79e4, 0xa184, 0x0030, 0x0040, 0x318a, 0x78ec, 0xa084, 0x0003,
1111 0x00c0, 0x31b1, 0x7000, 0xa086, 0x0004, 0x00c0, 0x31a4, 0x706c,
1112 0xa086, 0x0002, 0x00c0, 0x319a, 0x2011, 0x0002, 0x2019, 0x0000,
1113 0x0078, 0x28e9, 0x706c, 0xa086, 0x0006, 0x0040, 0x3194, 0x706c,
1114 0xa086, 0x0004, 0x0040, 0x3194, 0x7000, 0xa086, 0x0000, 0x0040,
1115 0x24fa, 0x6818, 0xa085, 0x8000, 0x681a, 0x2001, 0x0014, 0x0078,
1116 0x2da0, 0xa184, 0x0007, 0x0079, 0x31b5, 0x3956, 0x3956, 0x31bd,
1117 0x3956, 0x39bb, 0x39bb, 0x3956, 0x3956, 0xa684, 0x0080, 0x0040,
1118 0x31ec, 0x7194, 0x81ff, 0x0040, 0x31ec, 0xa182, 0x000d, 0x00d0,
1119 0x31cd, 0x7097, 0x0000, 0x0078, 0x31d2, 0xa182, 0x000c, 0x7096,
1120 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e,
1121 0x7098, 0x8114, 0xa210, 0x729a, 0xa080, 0x000b, 0xad00, 0x2098,
1122 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f,
1123 0x137f, 0x157f, 0x0078, 0x3960, 0xa684, 0x0400, 0x00c0, 0x322d,
1124 0x6820, 0xa084, 0x0001, 0x0040, 0x3960, 0xa68c, 0x0060, 0xa684,
1125 0x0060, 0x0040, 0x3201, 0xa086, 0x0060, 0x00c0, 0x3201, 0xa18d,
1126 0x4000, 0xa18c, 0xfffb, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab,
1127 0x0000, 0x789b, 0x0061, 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa,
1128 0x8008, 0x810c, 0x0040, 0x34d1, 0xa18c, 0x00f8, 0x00c0, 0x34d1,
1129 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000,
1130 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f,
1131 0x6814, 0x8007, 0x7882, 0x0078, 0x3960, 0x6818, 0xa084, 0x8000,
1132 0x0040, 0x3234, 0x681b, 0x0008, 0x781b, 0x00c0, 0x0078, 0x24fa,
1133 0x2300, 0x0079, 0x323b, 0x3240, 0x32d4, 0x323e, 0x1078, 0x248c,
1134 0x7000, 0xa084, 0x0007, 0x0079, 0x3245, 0x2523, 0x324f, 0x3284,
1135 0x325a, 0x324d, 0x2523, 0x324d, 0x324d, 0x1078, 0x248c, 0x681c,
1136 0xa084, 0x2000, 0x0040, 0x3268, 0x6008, 0xa085, 0x0002, 0x600a,
1137 0x0078, 0x3268, 0x68c0, 0xa005, 0x00c0, 0x3284, 0x6920, 0xa18d,
1138 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800, 0x706a, 0x0078, 0x327e,
1139 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800, 0x6006, 0xa005, 0x00c0,
1140 0x3272, 0x6002, 0x681c, 0xa084, 0x000e, 0x0040, 0x327e, 0x7014,
1141 0x68ba, 0x7130, 0xa188, 0x7500, 0x0078, 0x3280, 0x2009, 0x7600,
1142 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6, 0xa684, 0x0060, 0x0040,
1143 0x32d2, 0xa684, 0x0800, 0x00c0, 0x3298, 0xa684, 0x7fff, 0x68b6,
1144 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x4887, 0x0078, 0x32d2,
1145 0xa684, 0x0020, 0x0040, 0x32ad, 0x68c0, 0xa005, 0x0040, 0x32a4,
1146 0x1078, 0x4c89, 0x0078, 0x32a7, 0xa006, 0x1078, 0x4c41, 0x79d8,
1147 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x32b3, 0x1078, 0x38ca, 0x69aa,
1148 0x6aa6, 0x1078, 0x4c41, 0xa684, 0x8000, 0x0040, 0x32d2, 0xa684,
1149 0x7fff, 0x68b6, 0x7adc, 0x79d8, 0xa684, 0x0020, 0x00c0, 0x32ca,
1150 0x78d0, 0x801b, 0x00c8, 0x32c5, 0x8000, 0xa084, 0x003f, 0xa108,
1151 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
1152 0xa303, 0x68ae, 0x0078, 0x2523, 0x0078, 0x377b, 0x7037, 0x0000,
1153 0xa282, 0x0006, 0x0050, 0x32de, 0x1078, 0x248c, 0x7000, 0xa084,
1154 0x0007, 0x10c0, 0x3a8c, 0x2300, 0x0079, 0x32e6, 0x32e9, 0x3312,
1155 0x3326, 0x2200, 0x0079, 0x32ec, 0x3310, 0x377b, 0x32f2, 0x3310,
1156 0x3342, 0x3384, 0x7003, 0x0005, 0x2001, 0x7710, 0x2068, 0x704a,
1157 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3302,
1158 0x0078, 0x32fb, 0x157f, 0xad80, 0x0009, 0x7036, 0x6817, 0x0000,
1159 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x376b,
1160 0x1078, 0x248c, 0x7003, 0x0005, 0x2001, 0x7710, 0x2068, 0x704a,
1161 0xad80, 0x0009, 0x7036, 0x2200, 0x0079, 0x331e, 0x377b, 0x3324,
1162 0x3324, 0x3342, 0x3324, 0x377b, 0x1078, 0x248c, 0x7003, 0x0005,
1163 0x2001, 0x7710, 0x2068, 0x704a, 0xad80, 0x0009, 0x7036, 0x2200,
1164 0x0079, 0x3332, 0x333a, 0x3338, 0x3338, 0x333a, 0x3338, 0x333a,
1165 0x1078, 0x248c, 0x1078, 0x379f, 0x782b, 0x3008, 0x781b, 0x0065,
1166 0x0078, 0x24fa, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b,
1167 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x7600, 0x2d04,
1168 0x2d08, 0x7162, 0x2068, 0xa005, 0x0040, 0x335d, 0x6814, 0xa206,
1169 0x0040, 0x3379, 0x6800, 0x0078, 0x3350, 0x7003, 0x0005, 0x2001,
1170 0x7710, 0x2068, 0x704a, 0x7036, 0x157e, 0x20a9, 0x0031, 0x2003,
1171 0x0000, 0x8000, 0x0070, 0x336e, 0x0078, 0x3367, 0x157f, 0xad80,
1172 0x0009, 0x7036, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
1173 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x33d3,
1174 0x1078, 0x3797, 0x0078, 0x33d3, 0x7003, 0x0002, 0x7a80, 0xa294,
1175 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8,
1176 0x79a8, 0xa18c, 0x00ff, 0xa1e8, 0x7500, 0x2d04, 0x2d08, 0x7162,
1177 0x2068, 0xa005, 0x0040, 0x33a3, 0x6814, 0xa206, 0x0040, 0x33be,
1178 0x6800, 0x0078, 0x3396, 0x7003, 0x0005, 0x2001, 0x7710, 0x2068,
1179 0x704a, 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070,
1180 0x33b3, 0x0078, 0x33ac, 0x157f, 0xad80, 0x0009, 0x7036, 0x6a16,
1181 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a,
1182 0x6820, 0xa084, 0x0c00, 0x0040, 0x33d3, 0xa084, 0x0800, 0x0040,
1183 0x33cd, 0x1078, 0x379b, 0x0078, 0x33d3, 0x1078, 0x3797, 0x708b,
1184 0x0000, 0x0078, 0x33d3, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003,
1185 0x8003, 0x8003, 0xa080, 0x5480, 0x2060, 0x7056, 0x6000, 0x705a,
1186 0x6004, 0x705e, 0xa684, 0x0060, 0x0040, 0x342b, 0x6b98, 0x6c94,
1187 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x340d, 0x7bd2, 0x7bda, 0x7cd6,
1188 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060,
1189 0x0040, 0x342b, 0x68c0, 0xa005, 0x0040, 0x3406, 0x7003, 0x0003,
1190 0x682b, 0x0000, 0x1078, 0x4b3a, 0x0078, 0x3408, 0x1078, 0x4b4b,
1191 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x342b, 0x68b0, 0xa31a, 0x2100,
1192 0xa423, 0x2400, 0xa305, 0x0040, 0x342b, 0x7bd2, 0x7bda, 0x7cd6,
1193 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a, 0x007e, 0x68c0, 0xa005,
1194 0x007f, 0x0040, 0x3429, 0x7003, 0x0003, 0x1078, 0x4b3a, 0x0078,
1195 0x342b, 0x1078, 0x4b96, 0x077f, 0x1078, 0x38bd, 0x2009, 0x0065,
1196 0xa684, 0x0004, 0x0040, 0x344c, 0x78e4, 0xa084, 0x0030, 0x0040,
1197 0x3444, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3444, 0x782b, 0x3008,
1198 0x2009, 0x0065, 0x0078, 0x344c, 0x0f7e, 0x2079, 0x5200, 0x1078,
1199 0x4887, 0x0f7f, 0x0040, 0x2523, 0x791a, 0x2d00, 0x704a, 0x8207,
1200 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x5480, 0x2048,
1201 0x0078, 0x24fa, 0x6020, 0xa005, 0x0040, 0x3466, 0x8001, 0x6022,
1202 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006,
1203 0x1078, 0x4887, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040,
1204 0x681f, 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x3477, 0x2523,
1205 0x3481, 0x3481, 0x349e, 0x3489, 0x3487, 0x3489, 0x347f, 0x1078,
1206 0x248c, 0x1078, 0x34a9, 0x1078, 0x34a2, 0x1078, 0x1cdc, 0x0078,
1207 0x2523, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x3490,
1208 0x349a, 0x349a, 0x3498, 0x3498, 0x3498, 0x349a, 0x3498, 0x349a,
1209 0x0079, 0x2902, 0x706f, 0x0000, 0x0078, 0x2523, 0x681b, 0x0000,
1210 0x0078, 0x2fb6, 0x6800, 0xa005, 0x00c0, 0x34a7, 0x6002, 0x6006,
1211 0x007c, 0x6010, 0xa005, 0x0040, 0x34b2, 0x8001, 0x00d0, 0x34b2,
1212 0x1078, 0x248c, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c,
1213 0x6018, 0xa005, 0x0040, 0x34be, 0x8001, 0x601a, 0x007c, 0x1078,
1214 0x39e0, 0x681b, 0x0018, 0x0078, 0x34f5, 0x1078, 0x39e0, 0x681b,
1215 0x0019, 0x0078, 0x34f5, 0x1078, 0x39e0, 0x681b, 0x001a, 0x0078,
1216 0x34f5, 0x1078, 0x39e0, 0x681b, 0x0003, 0x0078, 0x34f5, 0x7780,
1217 0x1078, 0x38bd, 0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7500, 0x2d04,
1218 0x2d08, 0x2068, 0xa005, 0x00c0, 0x34e7, 0x0078, 0x2523, 0x6814,
1219 0x7280, 0xa206, 0x0040, 0x34ef, 0x6800, 0x0078, 0x34e0, 0x6800,
1220 0x200a, 0x681b, 0x0005, 0x708b, 0x0000, 0x1078, 0x34a9, 0x6820,
1221 0xa084, 0x0001, 0x00c0, 0x34fe, 0x1078, 0x34a2, 0x1078, 0x34b8,
1222 0x681f, 0x0000, 0x6823, 0x0020, 0x1078, 0x1cdc, 0x0078, 0x2523,
1223 0xa282, 0x0003, 0x00c0, 0x376b, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8,
1224 0xa4a4, 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100,
1225 0x0040, 0x356c, 0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040,
1226 0x3556, 0xa482, 0x000c, 0x0048, 0x3529, 0x0040, 0x3529, 0x2021,
1227 0x000c, 0x852b, 0x852b, 0x1078, 0x382e, 0x0040, 0x3533, 0x1078,
1228 0x3627, 0x0078, 0x355f, 0x1078, 0x37e9, 0x0c7e, 0x2960, 0x6004,
1229 0xa084, 0xfff5, 0x6006, 0x1078, 0x3652, 0x0c7f, 0x6920, 0xa18d,
1230 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400,
1231 0x00c0, 0x3550, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x24fa,
1232 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa, 0x0c7e, 0x2960,
1233 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3652, 0x0c7f, 0x7e58,
1234 0xa684, 0x0400, 0x00c0, 0x3568, 0x781b, 0x0058, 0x0078, 0x24fa,
1235 0x781b, 0x0065, 0x0078, 0x24fa, 0x0c7e, 0x7054, 0x2060, 0x6100,
1236 0xa18c, 0x1000, 0x0040, 0x35ac, 0x6208, 0x8217, 0xa294, 0x00ff,
1237 0xa282, 0x000c, 0x0048, 0x3580, 0x0040, 0x3580, 0x2011, 0x000c,
1238 0x2400, 0xa202, 0x00c8, 0x3585, 0x2220, 0x6208, 0xa294, 0x00ff,
1239 0x7018, 0xa086, 0x0028, 0x00c0, 0x3595, 0xa282, 0x0019, 0x00c8,
1240 0x359b, 0x2011, 0x0019, 0x0078, 0x359b, 0xa282, 0x000c, 0x00c8,
1241 0x359b, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x35a0, 0x2228,
1242 0x1078, 0x37ed, 0x852b, 0x852b, 0x1078, 0x382e, 0x0040, 0x35ac,
1243 0x1078, 0x3627, 0x0078, 0x35b0, 0x1078, 0x37e9, 0x1078, 0x3652,
1244 0x7858, 0xa085, 0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b,
1245 0x0065, 0x0078, 0x24fa, 0x0c7e, 0x2960, 0x6000, 0xd0e4, 0x00c0,
1246 0x35d5, 0xd0b4, 0x00c0, 0x35cf, 0x6010, 0xa084, 0x000f, 0x00c0,
1247 0x35cf, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011,
1248 0x0032, 0x2019, 0x0000, 0x0078, 0x35fc, 0x68a0, 0xa084, 0x0200,
1249 0x00c0, 0x35cf, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028,
1250 0x00c0, 0x35ea, 0xa282, 0x0019, 0x00c8, 0x35f0, 0x2011, 0x0019,
1251 0x0078, 0x35f0, 0xa282, 0x000c, 0x00c8, 0x35f0, 0x2011, 0x000c,
1252 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, 0x0048, 0x35fc,
1253 0x0040, 0x35fc, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003,
1254 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085,
1255 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0xa18c, 0xfff5,
1256 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3617, 0x78ab,
1257 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0,
1258 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e,
1259 0x7154, 0x2160, 0x1078, 0x362e, 0x0c7f, 0x007c, 0x2008, 0xa084,
1260 0xfff0, 0xa425, 0x7c86, 0x6018, 0x789a, 0x7cae, 0x6412, 0x78a4,
1261 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a,
1262 0xa4a4, 0x000f, 0x8427, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa405,
1263 0x600e, 0x78ec, 0xd08c, 0x00c0, 0x3651, 0x6004, 0xa084, 0xfff5,
1264 0x6006, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3659, 0x0c7f,
1265 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012,
1266 0x7884, 0xa084, 0xfff0, 0x7886, 0x007c, 0xa282, 0x0002, 0x00c0,
1267 0x376b, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0200,
1268 0x0040, 0x36ae, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff, 0xa282,
1269 0x0002, 0x00c8, 0x376b, 0x1078, 0x36f9, 0x1078, 0x3652, 0xa980,
1270 0x0001, 0x200c, 0x1078, 0x38b9, 0x1078, 0x35bb, 0x88ff, 0x0040,
1271 0x36a1, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004,
1272 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x369b, 0x782b, 0x3008, 0x781b,
1273 0x0056, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078,
1274 0x24fa, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x36aa, 0x781b, 0x0058,
1275 0x0078, 0x24fa, 0x781b, 0x0065, 0x0078, 0x24fa, 0xa282, 0x0002,
1276 0x00c8, 0x36b6, 0xa284, 0x0001, 0x0040, 0x36c0, 0x7154, 0xa188,
1277 0x0000, 0x210c, 0xa18c, 0x2000, 0x00c0, 0x36c0, 0x2011, 0x0000,
1278 0x1078, 0x37db, 0x1078, 0x36f9, 0x1078, 0x3652, 0x7858, 0xa085,
1279 0x0004, 0x785a, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa,
1280 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x00c0,
1281 0x36e9, 0xd0bc, 0x00c0, 0x36e7, 0x6014, 0xa084, 0x0040, 0x00c0,
1282 0x36e7, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x36f6, 0x2011,
1283 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa,
1284 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f,
1285 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3700, 0x0c7f, 0x007c,
1286 0x82ff, 0x0040, 0x3705, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002,
1287 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016,
1288 0x78ec, 0xd08c, 0x00c0, 0x3718, 0x6004, 0xa084, 0xffef, 0x6006,
1289 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x3722, 0x007f,
1290 0x0078, 0x3725, 0x007f, 0x0078, 0x3767, 0xa684, 0x0020, 0x0040,
1291 0x3767, 0x7888, 0xa084, 0x0040, 0x0040, 0x3767, 0x7bb8, 0xa384,
1292 0x003f, 0x831b, 0x00c8, 0x3735, 0x8000, 0xa005, 0x0040, 0x374b,
1293 0x831b, 0x00c8, 0x373e, 0x8001, 0x0040, 0x3763, 0xa684, 0x4000,
1294 0x0040, 0x374b, 0x78b8, 0x801b, 0x00c8, 0x3747, 0x8000, 0xa084,
1295 0x003f, 0x00c0, 0x3763, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc,
1296 0x2001, 0x0001, 0xa108, 0x00c8, 0x3757, 0xa291, 0x0000, 0x79d2,
1297 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x4c41, 0x781b, 0x0064, 0x1078,
1298 0x4ac6, 0x0078, 0x24fa, 0x781b, 0x0064, 0x0078, 0x24fa, 0x781b,
1299 0x0065, 0x0078, 0x24fa, 0x1078, 0x37a3, 0x782b, 0x3008, 0x781b,
1300 0x0065, 0x0078, 0x24fa, 0x1078, 0x378f, 0x782b, 0x3008, 0x781b,
1301 0x0065, 0x0078, 0x24fa, 0x6827, 0x0002, 0x1078, 0x3797, 0x78e4,
1302 0xa084, 0x0030, 0x0040, 0x2523, 0x78ec, 0xa084, 0x0003, 0x0040,
1303 0x2523, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa, 0x2001,
1304 0x0005, 0x0078, 0x37a5, 0x2001, 0x000c, 0x0078, 0x37a5, 0x2001,
1305 0x0006, 0x0078, 0x37a5, 0x2001, 0x000d, 0x0078, 0x37a5, 0x2001,
1306 0x0009, 0x0078, 0x37a5, 0x2001, 0x0007, 0x789b, 0x0010, 0x78aa,
1307 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004, 0x7e5a, 0x007c,
1308 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0,
1309 0x5480, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040,
1310 0x37c9, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008,
1311 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040,
1312 0x37d9, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010,
1313 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab,
1314 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004,
1315 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab,
1316 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b,
1317 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff,
1318 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0,
1319 0x2001, 0x5246, 0x2004, 0xa082, 0x0028, 0x0040, 0x3817, 0x2021,
1320 0x38a0, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x381d, 0x2021,
1321 0x38ac, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404,
1322 0xa084, 0xfff0, 0xa106, 0x0040, 0x382c, 0x8420, 0x2300, 0xa210,
1323 0x0070, 0x382c, 0x0078, 0x381f, 0x157f, 0x007c, 0x157e, 0x2009,
1324 0x5246, 0x210c, 0xa182, 0x0032, 0x0048, 0x3842, 0x0040, 0x3846,
1325 0x2009, 0x3892, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032,
1326 0x0078, 0x3858, 0xa182, 0x0028, 0x0040, 0x3850, 0x2009, 0x38a0,
1327 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078, 0x3858,
1328 0x2009, 0x38ac, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064,
1329 0x2200, 0xa502, 0x0040, 0x3868, 0x0048, 0x3868, 0x8108, 0x2300,
1330 0xa210, 0x0070, 0x3865, 0x0078, 0x3858, 0x157f, 0xa006, 0x007c,
1331 0x157f, 0xa582, 0x0064, 0x00c8, 0x3877, 0x7808, 0xa085, 0x0070,
1332 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078, 0x3877, 0x78ec,
1333 0xa084, 0x0300, 0x0040, 0x387f, 0x2104, 0x0078, 0x3890, 0x2104,
1334 0xa09e, 0x1102, 0x00c0, 0x3890, 0x2001, 0x04fd, 0x2004, 0xa082,
1335 0x0005, 0x0048, 0x388f, 0x2001, 0x1201, 0x0078, 0x3890, 0x2104,
1336 0xa005, 0x007c, 0x1102, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404,
1337 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07,
1338 0x3202, 0x4202, 0x5202, 0x6202, 0x7202, 0x6605, 0x7605, 0x7805,
1339 0x7a05, 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202, 0x4202, 0x5202,
1340 0x5404, 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04, 0x7c04, 0x7e04,
1341 0x7f04, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, 0x800b,
1342 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e0,
1343 0x5500, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x38d1,
1344 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x007c, 0x0f7e,
1345 0x2079, 0x0100, 0x2009, 0x5240, 0x2091, 0x8000, 0x2104, 0x0079,
1346 0x38e1, 0x3917, 0x38eb, 0x38eb, 0x38eb, 0x38eb, 0x38eb, 0x38eb,
1347 0x391b, 0x1078, 0x248c, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004,
1348 0x00c0, 0x38ed, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0,
1349 0x38f4, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000,
1350 0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x3917, 0x0018, 0x3917,
1351 0x681c, 0xa084, 0x0020, 0x00c0, 0x3915, 0x0e7e, 0x2071, 0x5240,
1352 0x1078, 0x396a, 0x0e7f, 0x0078, 0x3917, 0x781b, 0x00ca, 0x2091,
1353 0x8001, 0x0f7f, 0x007c, 0x70b3, 0x0000, 0x1078, 0x3b44, 0x0078,
1354 0x3917, 0x0c7e, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003,
1355 0x8003, 0xa0e0, 0x5480, 0x6004, 0xa084, 0x000a, 0x00c0, 0x3954,
1356 0x6108, 0xa194, 0xff00, 0x0040, 0x3954, 0xa18c, 0x00ff, 0x2001,
1357 0x0019, 0xa106, 0x0040, 0x3943, 0x2001, 0x0032, 0xa106, 0x0040,
1358 0x3947, 0x0078, 0x394b, 0x2009, 0x0020, 0x0078, 0x394d, 0x2009,
1359 0x003f, 0x0078, 0x394d, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a,
1360 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0065,
1361 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x24fa,
1362 0x781b, 0x0058, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x0056,
1363 0x0078, 0x24fa, 0x2009, 0x5220, 0x210c, 0xa186, 0x0000, 0x0040,
1364 0x397e, 0xa186, 0x0001, 0x0040, 0x3981, 0x2009, 0x5238, 0x200b,
1365 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x007c, 0x781b, 0x00c4,
1366 0x007c, 0x2009, 0x5238, 0x200b, 0x000a, 0x007c, 0x2009, 0x5220,
1367 0x210c, 0xa186, 0x0000, 0x0040, 0x39a1, 0xa186, 0x0001, 0x0040,
1368 0x399b, 0x2009, 0x5238, 0x200b, 0x000b, 0x706f, 0x0001, 0x781b,
1369 0x0048, 0x0078, 0x24fa, 0x2009, 0x5238, 0x200b, 0x000a, 0x0078,
1370 0x24fa, 0x782b, 0x3008, 0x781b, 0x00c4, 0x0078, 0x24fa, 0x781b,
1371 0x00ca, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b, 0x00ca, 0x0078,
1372 0x24fa, 0x781b, 0x008f, 0x0078, 0x24fa, 0x782b, 0x3008, 0x781b,
1373 0x008f, 0x0078, 0x24fa, 0x6818, 0xa084, 0x8000, 0x0040, 0x39c2,
1374 0x681b, 0x001d, 0x706f, 0x0001, 0x781b, 0x0048, 0x0078, 0x24fa,
1375 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x39de, 0x7808, 0xa084,
1376 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084,
1377 0x0021, 0x0040, 0x39de, 0x7044, 0x780a, 0xa005, 0x007f, 0x007c,
1378 0x7044, 0xa085, 0x0002, 0x7046, 0x780a, 0x007c, 0x007e, 0x7830,
1379 0xa084, 0x0040, 0x00c0, 0x39e7, 0x0098, 0x39f2, 0x007f, 0x789a,
1380 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005,
1381 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x3a01, 0x0098,
1382 0x39ff, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7044, 0x780a, 0x007f,
1383 0x007c, 0x78ec, 0xa084, 0x0002, 0x00c0, 0x4871, 0xa784, 0x007d,
1384 0x00c0, 0x3a15, 0x2700, 0x1078, 0x248c, 0xa784, 0x0001, 0x00c0,
1385 0x300c, 0xa784, 0x0070, 0x0040, 0x3a25, 0x0c7e, 0x2d60, 0x2f68,
1386 0x1078, 0x2437, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040,
1387 0x3a32, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2523,
1388 0x0078, 0x3956, 0xa784, 0x0004, 0x0040, 0x3a65, 0x78b8, 0xa084,
1389 0x4001, 0x0040, 0x3a65, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
1390 0x0040, 0x2523, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0,
1391 0x3a65, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00ca,
1392 0x0078, 0x24fa, 0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040,
1393 0x3a61, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x3a61, 0x681b,
1394 0x0007, 0x1078, 0x396a, 0x0078, 0x24fa, 0x681b, 0x0003, 0x7858,
1395 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b,
1396 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2a06, 0x0018, 0x24fa,
1397 0x0078, 0x3773, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003,
1398 0x8003, 0xa080, 0x5480, 0x2060, 0x2048, 0x7056, 0x6000, 0x705a,
1399 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079, 0x3a8e, 0x3a96, 0x3a97,
1400 0x3a96, 0x3a99, 0x3a96, 0x3a96, 0x3a96, 0x3a9e, 0x007c, 0x1078,
1401 0x34b8, 0x1078, 0x4887, 0x7038, 0x600a, 0x007c, 0x70a0, 0xa005,
1402 0x0040, 0x3aab, 0x2068, 0x1078, 0x1bd3, 0x1078, 0x47fe, 0x1078,
1403 0x4805, 0x70a3, 0x0000, 0x007c, 0x0e7e, 0x2091, 0x8000, 0x2071,
1404 0x5240, 0x7000, 0xa086, 0x0007, 0x00c0, 0x3ac2, 0x6110, 0x70bc,
1405 0xa106, 0x00c0, 0x3ac2, 0x0e7f, 0x1078, 0x1be0, 0x1078, 0x3ac8,
1406 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085, 0x0001, 0x007c,
1407 0x0f7e, 0x0e7e, 0x2071, 0x5240, 0x0078, 0x2297, 0x785b, 0x0000,
1408 0x70af, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0, 0xa06d, 0x0040,
1409 0x3add, 0x70a3, 0x0000, 0x0078, 0x3ae3, 0x70b3, 0x0000, 0x1078,
1410 0x1c0c, 0x0040, 0x3ae9, 0x70ac, 0x6826, 0x1078, 0x3bc6, 0x0078,
1411 0x3add, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9, 0x0008, 0x2061,
1412 0x7610, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d, 0x0040, 0x3b01,
1413 0x6800, 0x601e, 0x1078, 0x19ac, 0x6008, 0x8000, 0x600a, 0x0078,
1414 0x3af4, 0x6018, 0xa06d, 0x0040, 0x3b0b, 0x6800, 0x601a, 0x1078,
1415 0x19ac, 0x0078, 0x3b01, 0xace0, 0x0008, 0x0070, 0x3b11, 0x0078,
1416 0x3af1, 0x709c, 0xa084, 0x8000, 0x0040, 0x3b18, 0x1078, 0x3c44,
1417 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091, 0x2300, 0x6804,
1418 0xa084, 0x000f, 0x0079, 0x3b24, 0x3b34, 0x3b34, 0x3b34, 0x3b34,
1419 0x3b34, 0x3b34, 0x3b36, 0x3b3c, 0x3b34, 0x3b34, 0x3b34, 0x3b34,
1420 0x3b34, 0x3b3e, 0x3b34, 0x3b36, 0x1078, 0x248c, 0x1078, 0x45d3,
1421 0x1078, 0x19ac, 0x0078, 0x3b42, 0x6827, 0x000b, 0x1078, 0x45d3,
1422 0x1078, 0x3bc6, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x0098,
1423 0x3b60, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3b60, 0x0d7e, 0x1078,
1424 0x4812, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001, 0x0000, 0x6827,
1425 0x0084, 0x1078, 0x47c7, 0x1078, 0x3bc6, 0x0d7f, 0x0078, 0x3b94,
1426 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x3b69, 0x794a, 0x0078,
1427 0x3b4e, 0x7828, 0xa086, 0x1834, 0x00c0, 0x3b72, 0xa185, 0x0004,
1428 0x0078, 0x3b79, 0x7828, 0xa086, 0x1814, 0x00c0, 0x3b66, 0xa185,
1429 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002, 0x7858, 0xa084,
1430 0x00ff, 0xa085, 0x0400, 0x785a, 0x70b4, 0xa080, 0x0091, 0x781a,
1431 0x6827, 0x0284, 0x682c, 0x6836, 0x6830, 0x683a, 0x2009, 0x0004,
1432 0x2001, 0x0000, 0x1078, 0x47c7, 0x127f, 0x007c, 0x0d7e, 0x6b14,
1433 0x1078, 0x1c70, 0x0040, 0x3ba3, 0x2068, 0x6827, 0x0002, 0x1078,
1434 0x3bc6, 0x0078, 0x3b98, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0x6c28,
1435 0xa4a4, 0x00ff, 0x1078, 0x1c1c, 0x0040, 0x3bb3, 0x2068, 0x6827,
1436 0x0002, 0x1078, 0x3bc6, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0xa39c,
1437 0x00ff, 0x1078, 0x1c48, 0x0040, 0x3bc4, 0x2068, 0x6827, 0x0002,
1438 0x1078, 0x3bc6, 0x0078, 0x3bb9, 0x0d7f, 0x007c, 0x0c7e, 0x6914,
1439 0x1078, 0x3c3b, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0006, 0x0040,
1440 0x3be1, 0xa186, 0x000d, 0x0040, 0x3c00, 0xa186, 0x0017, 0x00c0,
1441 0x3bdd, 0x1078, 0x19ac, 0x0078, 0x3bdf, 0x1078, 0x1cde, 0x0c7f,
1442 0x007c, 0x6004, 0x8001, 0x0048, 0x3bfe, 0x6006, 0x2009, 0x0000,
1443 0xa684, 0x0001, 0x00c0, 0x3bee, 0xa18d, 0x8000, 0xa684, 0x0004,
1444 0x0040, 0x3bf4, 0xa18d, 0x0002, 0x691e, 0x6823, 0x0000, 0x7104,
1445 0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x3bdd, 0x1078, 0x248c,
1446 0x6018, 0xa005, 0x00c0, 0x3c0f, 0x6008, 0x8001, 0x0048, 0x3c0f,
1447 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, 0x3c25, 0xac88,
1448 0x0006, 0x2104, 0xa005, 0x0040, 0x3c18, 0x2008, 0x0078, 0x3c11,
1449 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x3bdf, 0x600a, 0x6018,
1450 0x2068, 0x6800, 0x601a, 0x0078, 0x3c09, 0x157e, 0x137e, 0x147e,
1451 0x0c7e, 0x0d7e, 0x1078, 0x1989, 0x00c0, 0x3c30, 0x1078, 0x248c,
1452 0x2da0, 0x137f, 0x20a9, 0x0031, 0x53a3, 0x0c7f, 0x147f, 0x137f,
1453 0x157f, 0x0078, 0x3bdd, 0xa184, 0x001f, 0x8003, 0x8003, 0x8003,
1454 0xa080, 0x7610, 0x2060, 0x007c, 0x2019, 0x5251, 0x2304, 0xa085,
1455 0x0001, 0x201a, 0x2019, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a,
1456 0x007c, 0x2019, 0x5251, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2019,
1457 0x0102, 0x2304, 0xa084, 0xfffe, 0x201a, 0x007c, 0x7990, 0xa18c,
1458 0xfff8, 0x7992, 0x70b4, 0xa080, 0x00d8, 0x781a, 0x0078, 0x24fa,
1459 0x70a3, 0x0000, 0x7003, 0x0000, 0x7043, 0x0001, 0x7037, 0x0000,
1460 0x0018, 0x24b1, 0x1078, 0x1c0c, 0x0040, 0x3c99, 0x2009, 0x520f,
1461 0x200b, 0x0000, 0x68bc, 0x2060, 0x6100, 0xa184, 0x0300, 0x0040,
1462 0x3c8d, 0x6827, 0x000e, 0xa084, 0x0200, 0x0040, 0x3c89, 0x6827,
1463 0x0017, 0x1078, 0x3bc6, 0x0078, 0x3c68, 0x7000, 0xa086, 0x0007,
1464 0x00c0, 0x3d0d, 0x2d00, 0x70a2, 0xad80, 0x000f, 0x7036, 0x0078,
1465 0x3ca0, 0x7040, 0xa086, 0x0001, 0x0040, 0x2533, 0x0078, 0x24fa,
1466 0x2031, 0x0000, 0x691c, 0xa184, 0x0002, 0x0040, 0x3ca9, 0xa6b5,
1467 0x0004, 0xa184, 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3da6,
1468 0x2004, 0xa635, 0x6820, 0xa084, 0x0400, 0x0040, 0x3cc1, 0x789b,
1469 0x0018, 0x78ab, 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5,
1470 0x5000, 0x6820, 0xa084, 0x8000, 0x0040, 0x3ccf, 0xa6b5, 0x0400,
1471 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3cef, 0x681c,
1472 0xd0fc, 0x00c0, 0x3cdd, 0xa6b5, 0x0800, 0x6820, 0xd0c4, 0x0040,
1473 0x3cef, 0xa6b5, 0x4000, 0x0078, 0x3cef, 0x6820, 0xd0c4, 0x0040,
1474 0x3ce5, 0xa6b5, 0x4000, 0x0078, 0x3cef, 0x789b, 0x0018, 0x78ab,
1475 0x0002, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0xa684,
1476 0x0200, 0x0040, 0x3d09, 0x682c, 0x78d2, 0x6830, 0x78d6, 0xa684,
1477 0x0100, 0x0040, 0x3d07, 0x682c, 0xa084, 0x0001, 0x0040, 0x3d07,
1478 0x7888, 0xa084, 0x0040, 0x0040, 0x3d07, 0xa6b5, 0x8000, 0x1078,
1479 0x47f6, 0x7e5a, 0x6eb6, 0x0078, 0x4835, 0x1078, 0x39c8, 0x00c0,
1480 0x3da0, 0x702c, 0x8004, 0x0048, 0x3d1b, 0x2019, 0x4f49, 0x1078,
1481 0x2313, 0x702f, 0x0001, 0x2041, 0x0001, 0x2031, 0x1000, 0x789b,
1482 0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x691c,
1483 0xa184, 0x0002, 0x0040, 0x3d34, 0xa6b5, 0x0004, 0x78ab, 0x0020,
1484 0x6828, 0x78aa, 0xa8c0, 0x0002, 0x681c, 0xd0f4, 0x0040, 0x3d3d,
1485 0x2c50, 0x1078, 0x3a7a, 0x1078, 0x4702, 0x6820, 0xa084, 0x8000,
1486 0x0040, 0x3d4b, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007,
1487 0x78aa, 0x0078, 0x3d52, 0x681c, 0xa084, 0x8000, 0x00c0, 0x3d52,
1488 0xa6b5, 0x0800, 0x6820, 0xa084, 0x0100, 0x0040, 0x3d59, 0xa6b5,
1489 0x4000, 0x681c, 0xa084, 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080,
1490 0x3da6, 0x2004, 0xa635, 0xa684, 0x0100, 0x0040, 0x3d73, 0x682c,
1491 0xa084, 0x0001, 0x0040, 0x3d73, 0x7888, 0xa084, 0x0040, 0x0040,
1492 0x3d73, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6, 0x6814,
1493 0x8007, 0x78aa, 0x7882, 0x2810, 0x7aaa, 0x7830, 0xa084, 0x00c0,
1494 0x00c0, 0x3da0, 0x0018, 0x3da0, 0x70b4, 0xa080, 0x00dd, 0x781a,
1495 0x1078, 0x39e0, 0xa684, 0x0200, 0x0040, 0x3d94, 0x682c, 0x78d2,
1496 0x6830, 0x78d6, 0x1078, 0x47f6, 0x2d00, 0x70a2, 0x704a, 0x6810,
1497 0x70be, 0x7003, 0x0007, 0xad80, 0x000f, 0x7036, 0x0078, 0x24fa,
1498 0x1078, 0x1bd3, 0x1078, 0x39e0, 0x0078, 0x24fa, 0x0000, 0x0300,
1499 0x0200, 0x0000, 0x1078, 0x248c, 0x2300, 0x0079, 0x3daf, 0x3db2,
1500 0x3db2, 0x3db4, 0x1078, 0x248c, 0x1078, 0x4805, 0x6924, 0xa184,
1501 0x00ff, 0xa086, 0x000a, 0x0040, 0x3dc6, 0xa184, 0xff00, 0xa085,
1502 0x000a, 0x6826, 0x1078, 0x1bd3, 0x0078, 0x3c68, 0x2001, 0x000a,
1503 0x1078, 0x4797, 0x0078, 0x3c68, 0xa282, 0x0005, 0x0050, 0x3dd2,
1504 0x1078, 0x248c, 0x7000, 0xa084, 0x0007, 0x10c0, 0x3a8c, 0x1078,
1505 0x1989, 0x00c0, 0x3df4, 0x2069, 0xffff, 0xa684, 0x0004, 0x0040,
1506 0x3de5, 0x2001, 0x2800, 0x0078, 0x3de7, 0x2001, 0x0800, 0x71b4,
1507 0xa188, 0x0091, 0x789b, 0x000e, 0x8007, 0x78aa, 0x2031, 0x0400,
1508 0x7e5a, 0x791a, 0x0078, 0x24fa, 0x6807, 0x0106, 0x680b, 0x0000,
1509 0x689f, 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x00c0, 0x3e15,
1510 0xa286, 0x0002, 0x00c0, 0x3e15, 0x78a0, 0xa005, 0x00c0, 0x3e15,
1511 0xa484, 0x8000, 0x00c0, 0x3e15, 0x78e4, 0xa084, 0x0008, 0x0040,
1512 0x3e15, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x1078, 0x4217, 0x2d00,
1513 0x70a2, 0x704a, 0x7003, 0x0007, 0x7037, 0x0000, 0x6824, 0xa084,
1514 0x0080, 0x0040, 0x3e27, 0x1078, 0x42cd, 0x0078, 0x24fa, 0x2300,
1515 0x0079, 0x3e2a, 0x3e2d, 0x3eae, 0x3ec7, 0x2200, 0x0079, 0x3e30,
1516 0x3e35, 0x3e45, 0x3e6b, 0x3e77, 0x3e9a, 0x2029, 0x0001, 0xa026,
1517 0x2011, 0x0000, 0x1078, 0x43f3, 0x0079, 0x3e3e, 0x3e43, 0x24fa,
1518 0x3c68, 0x3e43, 0x3e43, 0x1078, 0x248c, 0x7990, 0xa18c, 0x0007,
1519 0x00c0, 0x3e4c, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, 0x0004,
1520 0x0040, 0x3e54, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, 0x0001,
1521 0x1078, 0x43f3, 0x0079, 0x3e5c, 0x3e61, 0x24fa, 0x3c68, 0x3e69,
1522 0x3e63, 0x0078, 0x483b, 0x70ab, 0x3e67, 0x0078, 0x24fa, 0x0078,
1523 0x3e61, 0x1078, 0x248c, 0xa684, 0x0010, 0x0040, 0x3e75, 0x1078,
1524 0x429c, 0x0040, 0x3e75, 0x0078, 0x24fa, 0x0078, 0x430d, 0x6000,
1525 0xa084, 0x0002, 0x0040, 0x3e94, 0x70b4, 0xa080, 0x00cd, 0x781a,
1526 0x0d7e, 0x1078, 0x4812, 0x2d00, 0x682e, 0x6827, 0x0000, 0x1078,
1527 0x3bc6, 0x0d7f, 0x1078, 0x19ac, 0x7003, 0x0000, 0x7037, 0x0000,
1528 0x704b, 0x0000, 0x0078, 0x3c68, 0xa684, 0x0004, 0x00c0, 0x3e9a,
1529 0x0078, 0x483b, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3eac, 0x6000,
1530 0xa084, 0x0001, 0x0040, 0x3eac, 0x70ab, 0x3eac, 0x2001, 0x0007,
1531 0x1078, 0x478f, 0x0078, 0x4841, 0x0078, 0x483b, 0x2200, 0x0079,
1532 0x3eb1, 0x3eb6, 0x3eb8, 0x3eb6, 0x3eb6, 0x3eb6, 0x1078, 0x248c,
1533 0x70a7, 0x3ebc, 0x0078, 0x4847, 0x78e4, 0xa084, 0x0008, 0x00c0,
1534 0x3eb8, 0x1078, 0x4781, 0x70ab, 0x3ec5, 0x0078, 0x483b, 0x2200,
1535 0x0079, 0x3eca, 0x3ecf, 0x3ed1, 0x3ed1, 0x3ecf, 0x3ecf, 0x1078,
1536 0x248c, 0x78e4, 0xa084, 0x0008, 0x0040, 0x3ee6, 0x70a7, 0x3eda,
1537 0x0078, 0x4847, 0x2011, 0x0004, 0x1078, 0x43ed, 0x0079, 0x3ee0,
1538 0x3ee6, 0x24fa, 0x3c68, 0x3ee6, 0x3ef0, 0x3ef4, 0x70ab, 0x3eee,
1539 0x2001, 0x0003, 0x1078, 0x478f, 0x0078, 0x4841, 0x0078, 0x483b,
1540 0x70ab, 0x3ee6, 0x0078, 0x24fa, 0x70ab, 0x3ef8, 0x0078, 0x24fa,
1541 0x0078, 0x3eee, 0xa282, 0x0003, 0x0050, 0x3f00, 0x1078, 0x248c,
1542 0xa386, 0x0002, 0x00c0, 0x3f19, 0xa286, 0x0002, 0x00c0, 0x3f1f,
1543 0x78a0, 0xa005, 0x00c0, 0x3f1f, 0xa484, 0x8000, 0x00c0, 0x3f1f,
1544 0x78e4, 0xa084, 0x0008, 0x0040, 0x3f19, 0xa6b5, 0x0008, 0x2019,
1545 0x0000, 0xa684, 0x0008, 0x0040, 0x3f1f, 0x1078, 0x4279, 0x6810,
1546 0x70be, 0x7003, 0x0007, 0x2300, 0x0079, 0x3f26, 0x3f29, 0x3f56,
1547 0x3f5e, 0x2200, 0x0079, 0x3f2c, 0x3f31, 0x3f2f, 0x3f4a, 0x1078,
1548 0x248c, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078,
1549 0x43f3, 0x0079, 0x3f3b, 0x3f40, 0x24fa, 0x3c68, 0x3f48, 0x3f42,
1550 0x0078, 0x483b, 0x70ab, 0x3f46, 0x0078, 0x24fa, 0x0078, 0x3f40,
1551 0x1078, 0x248c, 0xa684, 0x0010, 0x0040, 0x3f54, 0x1078, 0x429c,
1552 0x0040, 0x3f54, 0x0078, 0x24fa, 0x0078, 0x430d, 0x2200, 0x0079,
1553 0x3f59, 0x3f5c, 0x3f5c, 0x3f5c, 0x1078, 0x248c, 0x2200, 0x0079,
1554 0x3f61, 0x3f64, 0x3f66, 0x3f66, 0x1078, 0x248c, 0x78e4, 0xa084,
1555 0x0008, 0x0040, 0x3f7b, 0x70a7, 0x3f6f, 0x0078, 0x4847, 0x2011,
1556 0x0004, 0x1078, 0x43ed, 0x0079, 0x3f75, 0x3f7b, 0x24fa, 0x3c68,
1557 0x3f7b, 0x3f85, 0x3f89, 0x70ab, 0x3f83, 0x2001, 0x0003, 0x1078,
1558 0x478f, 0x0078, 0x4841, 0x0078, 0x483b, 0x70ab, 0x3f7b, 0x0078,
1559 0x24fa, 0x70ab, 0x3f8d, 0x0078, 0x24fa, 0x0078, 0x3f83, 0x2300,
1560 0x0079, 0x3f92, 0x3f97, 0x3f99, 0x3f95, 0x1078, 0x248c, 0x70a4,
1561 0x007a, 0x70a4, 0x007a, 0xa282, 0x0002, 0x0050, 0x3fa1, 0x1078,
1562 0x248c, 0xa684, 0x0200, 0x0040, 0x3fab, 0x1078, 0x47fe, 0x1078,
1563 0x43d5, 0x1078, 0x4805, 0x2300, 0x0079, 0x3fae, 0x3fb1, 0x3fd9,
1564 0x403f, 0xad86, 0xffff, 0x0040, 0x3c68, 0xa286, 0x0001, 0x0040,
1565 0x3fbb, 0x1078, 0x248c, 0xa684, 0x0200, 0x0040, 0x3fc3, 0x1078,
1566 0x47fe, 0x1078, 0x4805, 0x2001, 0x0001, 0x1078, 0x4797, 0x78b8,
1567 0xa084, 0xc001, 0x0040, 0x3fd5, 0x7848, 0xa085, 0x0008, 0x784a,
1568 0x7848, 0xa084, 0x0008, 0x00c0, 0x3fd0, 0x7003, 0x0000, 0x0078,
1569 0x3c68, 0x2200, 0x0079, 0x3fdc, 0x3fde, 0x400f, 0x70a7, 0x3fe2,
1570 0x0078, 0x4847, 0x2011, 0x000d, 0x1078, 0x43ed, 0x0079, 0x3fe8,
1571 0x3fef, 0x24fa, 0x3c68, 0x3ff7, 0x3fff, 0x4005, 0x4007, 0xa6b4,
1572 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4,
1573 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0x70ab,
1574 0x4003, 0x0078, 0x24fa, 0x0078, 0x3fef, 0x1078, 0x248c, 0x70ab,
1575 0x400b, 0x0078, 0x24fa, 0x1078, 0x484d, 0x0078, 0x24fa, 0x70a7,
1576 0x4013, 0x0078, 0x4847, 0x2011, 0x0012, 0x1078, 0x43ed, 0x0079,
1577 0x4019, 0x401f, 0x24fa, 0x3c68, 0x402b, 0x4033, 0x4039, 0xa6b4,
1578 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70b4, 0xa080, 0x00aa,
1579 0x781a, 0x0078, 0x24fa, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6,
1580 0x7e5a, 0x0078, 0x4835, 0x70ab, 0x4037, 0x0078, 0x24fa, 0x0078,
1581 0x401f, 0x70ab, 0x403d, 0x0078, 0x24fa, 0x0078, 0x402b, 0xa286,
1582 0x0001, 0x0040, 0x4045, 0x1078, 0x248c, 0x70a7, 0x4049, 0x0078,
1583 0x4847, 0x2011, 0x0015, 0x1078, 0x43ed, 0x0079, 0x404f, 0x4054,
1584 0x24fa, 0x3c68, 0x4062, 0x406e, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
1585 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70b4, 0xa080, 0x00b5, 0x781a,
1586 0x0078, 0x24fa, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
1587 0x70b4, 0xa080, 0x00aa, 0x781a, 0x0078, 0x24fa, 0x70ab, 0x4072,
1588 0x0078, 0x24fa, 0x0078, 0x4054, 0xa282, 0x0003, 0x0050, 0x407a,
1589 0x1078, 0x248c, 0x2300, 0x0079, 0x407d, 0x4080, 0x40b7, 0x4114,
1590 0xa286, 0x0001, 0x0040, 0x4086, 0x1078, 0x248c, 0x6804, 0xa084,
1591 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4093, 0x1078, 0x3bc6, 0x7003,
1592 0x0000, 0x0078, 0x3c68, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684,
1593 0x0200, 0x0040, 0x40a1, 0x1078, 0x47fe, 0x1078, 0x43d5, 0x1078,
1594 0x4805, 0x2001, 0x0001, 0x1078, 0x4797, 0x78b8, 0xa084, 0xc001,
1595 0x0040, 0x40b3, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084,
1596 0x0008, 0x00c0, 0x40ae, 0x7003, 0x0000, 0x0078, 0x3c68, 0x2200,
1597 0x0079, 0x40ba, 0x40bc, 0x40ef, 0x70a7, 0x40c0, 0x0078, 0x4847,
1598 0x2011, 0x000d, 0x1078, 0x43ed, 0x0079, 0x40c6, 0x40cd, 0x24fa,
1599 0x3c68, 0x40d5, 0x40dd, 0x40e3, 0x40e5, 0xa6b4, 0x00ff, 0xa6b5,
1600 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4, 0x00ff, 0xa6b5,
1601 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0x70ab, 0x40e1, 0x0078,
1602 0x24fa, 0x0078, 0x40cd, 0x1078, 0x248c, 0x70ab, 0x40eb, 0x1078,
1603 0x4805, 0x0078, 0x24fa, 0x1078, 0x484d, 0x0078, 0x24fa, 0x70a7,
1604 0x40f3, 0x0078, 0x4847, 0x2011, 0x0005, 0x1078, 0x43ed, 0x0079,
1605 0x40f9, 0x40fe, 0x24fa, 0x3c68, 0x4106, 0x410e, 0xa6b4, 0x00ff,
1606 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4, 0x00ff,
1607 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0x70ab, 0x4112,
1608 0x0078, 0x24fa, 0x0078, 0x40fe, 0xa286, 0x0001, 0x0040, 0x411a,
1609 0x1078, 0x248c, 0x70a7, 0x411e, 0x0078, 0x4847, 0x2011, 0x0006,
1610 0x1078, 0x43ed, 0x0079, 0x4124, 0x4129, 0x24fa, 0x3c68, 0x412f,
1611 0x4139, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4835, 0xa6b4,
1612 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a, 0x0078,
1613 0x4835, 0x70ab, 0x413d, 0x0078, 0x24fa, 0x0078, 0x4129, 0x2300,
1614 0x0079, 0x4142, 0x4147, 0x4145, 0x4145, 0x1078, 0x248c, 0x1078,
1615 0x248c, 0x2300, 0x71a8, 0xa005, 0x017a, 0x6810, 0x70be, 0xa282,
1616 0x0003, 0x0050, 0x4155, 0x1078, 0x248c, 0x2300, 0x0079, 0x4158,
1617 0x415b, 0x4169, 0x418b, 0xa684, 0x0200, 0x0040, 0x4163, 0x1078,
1618 0x47fe, 0x1078, 0x4805, 0x2001, 0x0001, 0x1078, 0x4797, 0x0078,
1619 0x24fa, 0xa296, 0x0002, 0x0040, 0x4172, 0x82ff, 0x0040, 0x4172,
1620 0x1078, 0x248c, 0x70a7, 0x4176, 0x0078, 0x4847, 0x2011, 0x0018,
1621 0x1078, 0x43ed, 0x0079, 0x417c, 0x4181, 0x24fa, 0x3c68, 0x4183,
1622 0x4185, 0x0078, 0x4835, 0x0078, 0x4835, 0x70ab, 0x4189, 0x0078,
1623 0x24fa, 0x0078, 0x4181, 0x2200, 0x0079, 0x418e, 0x4190, 0x41a9,
1624 0x70a7, 0x4194, 0x0078, 0x4847, 0x2011, 0x0017, 0x1078, 0x43ed,
1625 0x0079, 0x419a, 0x419f, 0x24fa, 0x3c68, 0x41a1, 0x41a3, 0x0078,
1626 0x4835, 0x0078, 0x4835, 0x70ab, 0x41a7, 0x0078, 0x24fa, 0x0078,
1627 0x419f, 0xa484, 0x8000, 0x00c0, 0x4205, 0xa684, 0x0100, 0x0040,
1628 0x41b5, 0x1078, 0x47fe, 0x1078, 0x43d5, 0x78d8, 0x78d2, 0x78dc,
1629 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x41c0, 0x0078, 0x4847,
1630 0x2011, 0x000d, 0x1078, 0x43ed, 0x0079, 0x41c6, 0x41cd, 0x24fa,
1631 0x3c68, 0x41cd, 0x41f3, 0x41f9, 0x41fb, 0x78d8, 0x79dc, 0xa105,
1632 0x00c0, 0x41df, 0x78b8, 0xa084, 0x001f, 0x00c0, 0x41df, 0x70b3,
1633 0x0000, 0x7858, 0xa084, 0xfdff, 0x785a, 0x0078, 0x4835, 0xa684,
1634 0x0100, 0x0040, 0x41f1, 0x7848, 0xa085, 0x0008, 0x784a, 0x1078,
1635 0x47bc, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x70b3, 0x0000, 0x1078,
1636 0x47f6, 0x0078, 0x4835, 0x70ab, 0x41f7, 0x0078, 0x24fa, 0x0078,
1637 0x41cd, 0x1078, 0x248c, 0x70ab, 0x4201, 0x1078, 0x4805, 0x0078,
1638 0x24fa, 0x1078, 0x484d, 0x0078, 0x24fa, 0x1078, 0x4805, 0x70ab,
1639 0x420f, 0x2001, 0x0003, 0x1078, 0x478f, 0x0078, 0x4841, 0x1078,
1640 0x47f6, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078, 0x4835, 0x70b8,
1641 0x6812, 0x70be, 0x8000, 0x70ba, 0x681b, 0x0000, 0xa684, 0x0008,
1642 0x0040, 0x423a, 0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004,
1643 0x8004, 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000,
1644 0xaf80, 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f,
1645 0x137f, 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x4249,
1646 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007, 0x2008, 0x0078,
1647 0x425c, 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020, 0x0040, 0x425c,
1648 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078, 0x47c7, 0x6824,
1649 0xa085, 0x003b, 0x6826, 0x017f, 0xa184, 0x001f, 0xa805, 0x6816,
1650 0x1078, 0x3c3b, 0x68be, 0xa684, 0x0004, 0x0040, 0x426d, 0xa18c,
1651 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4, 0x00ff,
1652 0x6000, 0xa084, 0x0008, 0x0040, 0x4277, 0xa6b5, 0x4000, 0x6eb6,
1653 0x007c, 0x157e, 0x137e, 0x147e, 0x6918, 0x7890, 0x8004, 0x8004,
1654 0x8004, 0x8004, 0xa084, 0x000f, 0x007e, 0xa100, 0x681a, 0x007f,
1655 0x8000, 0x8004, 0x0040, 0x4298, 0x20a8, 0x8104, 0xa080, 0x000b,
1656 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0x53a5,
1657 0x147f, 0x137f, 0x157f, 0x007c, 0x682c, 0xa084, 0x0020, 0x00c0,
1658 0x42a4, 0x620c, 0x0078, 0x42a5, 0x6210, 0x6b18, 0x2300, 0xa202,
1659 0x0040, 0x42c5, 0x2018, 0xa382, 0x000e, 0x0048, 0x42b5, 0x0040,
1660 0x42b5, 0x2019, 0x000e, 0x0078, 0x42b9, 0x7858, 0xa084, 0xffef,
1661 0x785a, 0x783b, 0x1b01, 0x7893, 0x0000, 0x7ba2, 0x70b4, 0xa080,
1662 0x008e, 0x781a, 0xa085, 0x0001, 0x007c, 0x7858, 0xa084, 0xffef,
1663 0x785a, 0x7893, 0x0000, 0xa006, 0x007c, 0x6904, 0xa18c, 0x00ff,
1664 0xa196, 0x0007, 0x0040, 0x42da, 0xa196, 0x000f, 0x0040, 0x42da,
1665 0x6807, 0x0117, 0x6914, 0x1078, 0x3c3b, 0x6100, 0x8104, 0x00c8,
1666 0x42f5, 0x601c, 0xa005, 0x0040, 0x42e9, 0x2001, 0x0800, 0x0078,
1667 0x42f7, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x4812, 0x007f, 0x6826,
1668 0x2d00, 0x682e, 0x1078, 0x3bc6, 0x0d7f, 0x2001, 0x0200, 0x6924,
1669 0xa18c, 0x00ff, 0xa10d, 0x6926, 0x8007, 0x789b, 0x000e, 0x78aa,
1670 0x6820, 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a,
1671 0x71b4, 0xa188, 0x0091, 0x791a, 0x007c, 0xa6c4, 0x0f00, 0xa684,
1672 0x0002, 0x00c0, 0x4321, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184,
1673 0x0007, 0x2008, 0xa805, 0x6816, 0x1078, 0x3c3b, 0x68be, 0x0078,
1674 0x4324, 0x6914, 0x1078, 0x3c3b, 0x6100, 0x8104, 0x00c8, 0x4382,
1675 0xa184, 0x0300, 0x0040, 0x4330, 0x6807, 0x0117, 0x0078, 0x434e,
1676 0x6004, 0xa005, 0x00c0, 0x4357, 0x6807, 0x0117, 0x601c, 0xa005,
1677 0x00c0, 0x4344, 0x0d7e, 0x1078, 0x4812, 0x6827, 0x0034, 0x2d00,
1678 0x682e, 0x1078, 0x3bc6, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x434e,
1679 0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x4352, 0x2031, 0x0400,
1680 0x2001, 0x0800, 0x71b4, 0xa188, 0x0091, 0x0078, 0x43b0, 0x6018,
1681 0xa005, 0x00c0, 0x4344, 0x601c, 0xa005, 0x00c0, 0x4344, 0x689f,
1682 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x43be, 0xd694,
1683 0x00c0, 0x437b, 0x6100, 0xd1d4, 0x0040, 0x437b, 0x692c, 0xa18c,
1684 0x00ff, 0x0040, 0x43be, 0xa186, 0x0003, 0x0040, 0x43be, 0xa186,
1685 0x0012, 0x0040, 0x43be, 0xa6b5, 0x0800, 0x71b4, 0xa188, 0x00ae,
1686 0x0078, 0x43b9, 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c,
1687 0x00ff, 0xa186, 0x0012, 0x00c0, 0x4393, 0x2001, 0x43cb, 0x2009,
1688 0x0001, 0x0078, 0x43a4, 0xa186, 0x0003, 0x00c0, 0x439d, 0x2001,
1689 0x43cc, 0x2009, 0x0012, 0x0078, 0x43a4, 0x2001, 0x0200, 0x71b4,
1690 0xa188, 0x0091, 0x0078, 0x43b0, 0x1078, 0x47e1, 0x78a3, 0x0000,
1691 0x681c, 0xa085, 0x0040, 0x681e, 0x71b4, 0xa188, 0x00da, 0xa006,
1692 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000,
1693 0x6822, 0x6eb6, 0x7e5a, 0x791a, 0x0078, 0x24fa, 0x6eb6, 0x1078,
1694 0x3bc6, 0x6810, 0x70be, 0x7003, 0x0007, 0x70a3, 0x0000, 0x704b,
1695 0x0000, 0x0078, 0x24fa, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00,
1696 0x0000, 0x0000, 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837,
1697 0x0000, 0xa684, 0x0200, 0x0040, 0x43ec, 0x78b8, 0xa08c, 0x001f,
1698 0xa084, 0x8000, 0x0040, 0x43e5, 0x8108, 0x78d8, 0xa100, 0x6836,
1699 0x78dc, 0xa081, 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac,
1700 0x0007, 0x2021, 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c,
1701 0x00ff, 0xa184, 0x0080, 0x00c0, 0x441b, 0xa182, 0x0020, 0x00c8,
1702 0x4439, 0xa182, 0x0012, 0x00c8, 0x4781, 0x2100, 0x1079, 0x4409,
1703 0x007c, 0x4781, 0x45eb, 0x4781, 0x4781, 0x4446, 0x4449, 0x4483,
1704 0x44b9, 0x44ed, 0x44f0, 0x4781, 0x4781, 0x44a4, 0x4514, 0x454e,
1705 0x4781, 0x4781, 0x4574, 0xa184, 0x0020, 0x00c0, 0x45a8, 0xa18c,
1706 0x001f, 0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x4436, 0x70b4,
1707 0xa080, 0x00cd, 0x781a, 0x2001, 0x0014, 0x1078, 0x4797, 0x1078,
1708 0x4805, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000,
1709 0x007c, 0xa182, 0x0024, 0x00c8, 0x4781, 0xa184, 0x0003, 0x1079,
1710 0x4409, 0x007c, 0x4781, 0x4781, 0x4781, 0x4781, 0x1078, 0x4781,
1711 0x007c, 0x2200, 0x0079, 0x444c, 0x4577, 0x4577, 0x4470, 0x4470,
1712 0x4470, 0x4470, 0x4470, 0x4470, 0x4470, 0x4470, 0x446e, 0x4470,
1713 0x4465, 0x4470, 0x4470, 0x4470, 0x4470, 0x4470, 0x4478, 0x447b,
1714 0x4577, 0x447b, 0x4470, 0x4470, 0x4470, 0x0c7e, 0x077e, 0x6f14,
1715 0x1078, 0x37b0, 0x077f, 0x0c7f, 0x0078, 0x4470, 0x1078, 0x468e,
1716 0x6827, 0x02b3, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x45ab,
1717 0x1078, 0x4773, 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001,
1718 0x4800, 0x0078, 0x4593, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086,
1719 0x0006, 0x00c0, 0x448d, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078,
1720 0x4812, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078,
1721 0x3b96, 0x1078, 0x45d3, 0x2b68, 0x1078, 0x3bc6, 0x0d7f, 0x1078,
1722 0x3bc6, 0x2001, 0x0002, 0x007c, 0x1078, 0x45d3, 0x2001, 0x0017,
1723 0x1078, 0x4797, 0x70a3, 0x0000, 0x2009, 0x5238, 0x200b, 0x0006,
1724 0x70af, 0x0017, 0x2009, 0x0200, 0x1078, 0x3ad4, 0x2001, 0x0001,
1725 0x007c, 0x2200, 0x0079, 0x44bc, 0x4577, 0x45a8, 0x45a8, 0x45a8,
1726 0x44dd, 0x45ba, 0x44e5, 0x45ba, 0x45ba, 0x45bd, 0x45bd, 0x45c2,
1727 0x45c2, 0x44d5, 0x44d5, 0x45a8, 0x45a8, 0x45ba, 0x45a8, 0x44e5,
1728 0x4577, 0x44e5, 0x44e5, 0x44e5, 0x44e5, 0x6827, 0x0084, 0x2009,
1729 0x000b, 0x2001, 0x4300, 0x0078, 0x45cc, 0x6827, 0x000d, 0x2009,
1730 0x000b, 0x2001, 0x4300, 0x0078, 0x45ab, 0x6827, 0x0093, 0x2009,
1731 0x000b, 0x2001, 0x4300, 0x0078, 0x4593, 0x2001, 0x0000, 0x007c,
1732 0x2200, 0x0079, 0x44f3, 0x4577, 0x450c, 0x450c, 0x450c, 0x450c,
1733 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba, 0x45ba,
1734 0x450c, 0x450c, 0x450c, 0x450c, 0x45ba, 0x450c, 0x450c, 0x45ba,
1735 0x45ba, 0x45ba, 0x45ba, 0x4577, 0x6827, 0x0093, 0x2009, 0x000b,
1736 0x2001, 0x4300, 0x0078, 0x4593, 0xa684, 0x0004, 0x00c0, 0x4528,
1737 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4781, 0x1078,
1738 0x45d3, 0x6807, 0x0117, 0x1078, 0x3bc6, 0x2001, 0x0002, 0x007c,
1739 0x6000, 0xa084, 0x0004, 0x0040, 0x4781, 0x2d58, 0x6804, 0xa084,
1740 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4537, 0x6807, 0x0117, 0x6827,
1741 0x0002, 0x1078, 0x4812, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e,
1742 0x0d7e, 0x1078, 0x3ba5, 0x1078, 0x45d3, 0x2b68, 0x1078, 0x3bc6,
1743 0x0d7f, 0x1078, 0x3bc6, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084,
1744 0x0004, 0x0040, 0x4781, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006,
1745 0x00c0, 0x455c, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078,
1746 0x4812, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078,
1747 0x3bb5, 0x1078, 0x45d3, 0x2b68, 0x1078, 0x3bc6, 0x0d7f, 0x1078,
1748 0x3bc6, 0x2001, 0x0002, 0x007c, 0x1078, 0x4781, 0x007c, 0x70b4,
1749 0xa080, 0x00cd, 0x781a, 0x2001, 0x0001, 0x1078, 0x4797, 0x1078,
1750 0x4805, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x47c7,
1751 0x1078, 0x47fe, 0x1078, 0x43d5, 0x1078, 0x42cd, 0x1078, 0x4805,
1752 0x2001, 0x0001, 0x007c, 0x1078, 0x47c7, 0x1078, 0x47fe, 0x1078,
1753 0x43d5, 0x70b4, 0xa080, 0x00cd, 0x781a, 0x2001, 0x0013, 0x1078,
1754 0x4797, 0x1078, 0x4805, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c,
1755 0x1078, 0x4781, 0x007c, 0x1078, 0x47c7, 0x1078, 0x47fe, 0x1078,
1756 0x43d5, 0x1078, 0x42cd, 0x1078, 0x4805, 0x1078, 0x484d, 0x2001,
1757 0x0001, 0x007c, 0x2001, 0x0003, 0x007c, 0x1078, 0x468e, 0x2001,
1758 0x0000, 0x007c, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x37b0, 0x077f,
1759 0x0c7f, 0x2001, 0x0000, 0x007c, 0x1078, 0x47c7, 0x1078, 0x4781,
1760 0x2001, 0x0006, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
1761 0x0040, 0x45de, 0xa186, 0x000f, 0x00c0, 0x45e2, 0x1078, 0x47fe,
1762 0x1078, 0x43d5, 0x70b4, 0xa080, 0x00cd, 0x781a, 0x1078, 0x4805,
1763 0x7003, 0x0000, 0x007c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084,
1764 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x4781, 0x1079, 0x45f8, 0x007c,
1765 0x4781, 0x45fc, 0x4781, 0x4695, 0xa282, 0x0003, 0x0040, 0x4603,
1766 0x1078, 0x4781, 0x007c, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4,
1767 0x00ff, 0x69b8, 0xa184, 0x0100, 0x0040, 0x4642, 0xa18c, 0xfeff,
1768 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x4642, 0xa4a4, 0x00ff, 0x0040,
1769 0x4636, 0xa482, 0x000c, 0x0040, 0x461f, 0x00c8, 0x4629, 0x852b,
1770 0x852b, 0x1078, 0x382e, 0x0040, 0x4629, 0x1078, 0x3627, 0x0078,
1771 0x4638, 0x1078, 0x4760, 0x1078, 0x3652, 0x69b8, 0xa18d, 0x0100,
1772 0x69ba, 0xa6b5, 0x1000, 0x7e5a, 0x0078, 0x463b, 0x1078, 0x3652,
1773 0xa6b4, 0xefff, 0x7e5a, 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001,
1774 0x0001, 0x007c, 0x0c7e, 0x1078, 0x4682, 0x6200, 0xd2e4, 0x0040,
1775 0x4673, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048,
1776 0x4655, 0x0040, 0x4655, 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8,
1777 0x465a, 0x2220, 0x6208, 0xa294, 0x00ff, 0x701c, 0xa202, 0x00c8,
1778 0x4662, 0x721c, 0x2200, 0xa502, 0x00c8, 0x4667, 0x2228, 0x1078,
1779 0x4764, 0x852b, 0x852b, 0x1078, 0x382e, 0x0040, 0x4673, 0x1078,
1780 0x362e, 0x0078, 0x4677, 0x1078, 0x4760, 0x1078, 0x3659, 0xa6b5,
1781 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004,
1782 0x0c7f, 0x007c, 0x007e, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003,
1783 0x8003, 0x8003, 0xa0e0, 0x5480, 0x007f, 0x007c, 0x0c7e, 0x1078,
1784 0x4682, 0x1078, 0x3659, 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0,
1785 0x4781, 0x7aa8, 0xa294, 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040,
1786 0x46cc, 0xa18c, 0xfdff, 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x46cc,
1787 0xa282, 0x0002, 0x00c8, 0x376b, 0x1078, 0x472a, 0x1078, 0x36f9,
1788 0x1078, 0x3652, 0xa684, 0x0100, 0x0040, 0x46c2, 0x682c, 0xa084,
1789 0x0001, 0x0040, 0x46c2, 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040,
1790 0x46c2, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x0091,
1791 0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e, 0x1078, 0x4682, 0xa284,
1792 0xfffe, 0x0040, 0x46d7, 0x2011, 0x0001, 0x0078, 0x46db, 0xa284,
1793 0x0001, 0x0040, 0x46e1, 0x6100, 0xd1ec, 0x00c0, 0x46e1, 0x2011,
1794 0x0000, 0x1078, 0x471c, 0x1078, 0x3700, 0x1078, 0x3659, 0xa684,
1795 0x0100, 0x0040, 0x46f7, 0x682c, 0xa084, 0x0001, 0x0040, 0x46f7,
1796 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x46f7, 0xc6fd, 0xa6b5,
1797 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004,
1798 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6000, 0x2011, 0x0001, 0xa084,
1799 0x2000, 0x00c0, 0x470d, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
1800 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x68b8, 0xa085,
1801 0x0200, 0x68ba, 0x0c7f, 0x007c, 0x789b, 0x0018, 0x78ab, 0x0001,
1802 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0081, 0x78ab,
1803 0x0004, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0x1000,
1804 0x00c0, 0x4738, 0x2029, 0x0032, 0x2021, 0x0000, 0x0078, 0x4758,
1805 0x6508, 0xa5ac, 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x4748,
1806 0xa582, 0x0019, 0x00c8, 0x474e, 0x2029, 0x0019, 0x0078, 0x474e,
1807 0xa582, 0x000c, 0x00c8, 0x474e, 0x2029, 0x000c, 0x6408, 0x8427,
1808 0xa4a4, 0x00ff, 0xa482, 0x000c, 0x0048, 0x4758, 0x2021, 0x000c,
1809 0x1078, 0x4764, 0x68b8, 0xa085, 0x0100, 0x68ba, 0x0c7f, 0x007c,
1810 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0018, 0x78ab, 0x0001,
1811 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081,
1812 0x78ab, 0x0005, 0x007c, 0x2001, 0x0003, 0x1078, 0x478f, 0xa6b5,
1813 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0005,
1814 0x007c, 0x2001, 0x0007, 0x1078, 0x478f, 0xa6b5, 0x1000, 0x7e5a,
1815 0x70b4, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, 0x007c, 0x789b,
1816 0x0018, 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001, 0x007c, 0x6904,
1817 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x47a5, 0xa196, 0x000f,
1818 0x0040, 0x47a5, 0x1078, 0x19ac, 0x007c, 0x6924, 0xa194, 0x003f,
1819 0x00c0, 0x47ae, 0xa18c, 0xffc0, 0xa105, 0x6826, 0x1078, 0x3bc6,
1820 0x691c, 0xa184, 0x0100, 0x0040, 0x47bb, 0x6914, 0x1078, 0x3c3b,
1821 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834, 0x682e, 0xa112,
1822 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e,
1823 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b, 0x0000, 0x600f,
1824 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f,
1825 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826,
1826 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0,
1827 0x81ac, 0x0040, 0x47ec, 0x53a6, 0xa184, 0x0001, 0x0040, 0x47f2,
1828 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c, 0x70b0, 0xa005,
1829 0x10c0, 0x248c, 0x70b3, 0x8000, 0x0078, 0x4b4b, 0x71b0, 0x81ff,
1830 0x0040, 0x4804, 0x1078, 0x4c41, 0x007c, 0x71b0, 0x81ff, 0x0040,
1831 0x4811, 0x7848, 0xa085, 0x0008, 0x784a, 0x70b3, 0x0000, 0x1078,
1832 0x4887, 0x007c, 0x0c7e, 0x0d7e, 0x1078, 0x1989, 0x00c0, 0x481a,
1833 0x1078, 0x248c, 0x0c7f, 0x157e, 0x137e, 0x147e, 0x2da0, 0x2c98,
1834 0x20a9, 0x0031, 0x53a3, 0x147f, 0x137f, 0x157f, 0x6807, 0x010d,
1835 0x680b, 0x0000, 0x7004, 0x8007, 0x681a, 0x6823, 0x0000, 0x681f,
1836 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c, 0x70b4, 0xa080, 0x0091,
1837 0x781a, 0x0078, 0x24fa, 0x70b4, 0xa080, 0x0081, 0x781a, 0x0078,
1838 0x24fa, 0x70b4, 0xa080, 0x00b9, 0x781a, 0x0078, 0x24fa, 0x70b4,
1839 0xa080, 0x00c3, 0x781a, 0x0078, 0x24fa, 0x6904, 0xa18c, 0x00ff,
1840 0xa196, 0x0007, 0x0040, 0x485a, 0xa196, 0x000f, 0x0040, 0x485a,
1841 0x6807, 0x0117, 0x6824, 0xa084, 0x00ff, 0xa085, 0x0200, 0x6826,
1842 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822,
1843 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71b4, 0xa188, 0x0091, 0x791a,
1844 0x007c, 0x1078, 0x4805, 0x7848, 0xa085, 0x000c, 0x784a, 0x70b4,
1845 0xa080, 0x00cd, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x1078,
1846 0x47c7, 0x2001, 0x0013, 0x1078, 0x4797, 0x0078, 0x3c68, 0x127e,
1847 0x2091, 0x2200, 0x2049, 0x4887, 0x7000, 0x7204, 0xa205, 0x720c,
1848 0xa215, 0x7008, 0xa084, 0xfff7, 0xa205, 0x0040, 0x4899, 0x0078,
1849 0x489e, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084,
1850 0x0001, 0x00c0, 0x48cc, 0x7108, 0x8103, 0x00c8, 0x48ab, 0x1078,
1851 0x49ce, 0x0078, 0x48a3, 0x700c, 0xa08c, 0x00ff, 0x0040, 0x48cc,
1852 0x7004, 0x8004, 0x00c8, 0x48c3, 0x7014, 0xa005, 0x00c0, 0x48bf,
1853 0x7010, 0xa005, 0x0040, 0x48c3, 0xa102, 0x00c8, 0x48a3, 0x7007,
1854 0x0010, 0x0078, 0x48cc, 0x8aff, 0x0040, 0x48cc, 0x1078, 0x4c18,
1855 0x00c0, 0x48c6, 0x0040, 0x48a3, 0x1078, 0x4957, 0x7003, 0x0000,
1856 0x127f, 0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186,
1857 0x0007, 0x0040, 0x48df, 0xa18e, 0x000f, 0x00c0, 0x48e2, 0x6040,
1858 0x0078, 0x48e3, 0x6428, 0x017f, 0x84ff, 0x0040, 0x490d, 0x2c70,
1859 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x491d, 0x273c, 0x87fb, 0x00c0,
1860 0x48fb, 0x0048, 0x48f5, 0x1078, 0x248c, 0x609c, 0xa075, 0x0040,
1861 0x490d, 0x0078, 0x48e8, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c,
1862 0xa529, 0x8421, 0x0040, 0x490d, 0x8738, 0x2704, 0xa005, 0x00c0,
1863 0x48fc, 0x709c, 0xa075, 0x00c0, 0x48e8, 0x007c, 0x0000, 0x0005,
1864 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003,
1865 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4912, 0x490f,
1866 0x0000, 0x0000, 0x8000, 0x0000, 0x4912, 0x0000, 0x491a, 0x4917,
1867 0x0000, 0x0000, 0x0000, 0x0000, 0x491a, 0x0000, 0x4915, 0x4915,
1868 0x0000, 0x0000, 0x8000, 0x0000, 0x4915, 0x0000, 0x491b, 0x491b,
1869 0x0000, 0x0000, 0x0000, 0x0000, 0x491b, 0x127e, 0x2091, 0x2200,
1870 0x2079, 0x5200, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002,
1871 0x7003, 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002,
1872 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049,
1873 0x4957, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x49aa, 0x7007,
1874 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4961, 0xa184, 0x01e0,
1875 0x0040, 0x496c, 0x1078, 0x248c, 0x2001, 0x04fd, 0x2004, 0xa082,
1876 0x0005, 0x00c8, 0x4977, 0xa184, 0x4000, 0x00c0, 0x4961, 0xa19c,
1877 0x300c, 0xa386, 0x2004, 0x0040, 0x4985, 0xa386, 0x0008, 0x0040,
1878 0x4990, 0xa386, 0x200c, 0x00c0, 0x4961, 0x7200, 0x8204, 0x0048,
1879 0x4990, 0x730c, 0xa384, 0x00ff, 0x0040, 0x4990, 0x1078, 0x248c,
1880 0x7007, 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, 0x49aa, 0x7008,
1881 0xa084, 0x01e0, 0x00c0, 0x49aa, 0x7310, 0x7014, 0xa305, 0x0040,
1882 0x49aa, 0x710c, 0xa184, 0x0300, 0x00c0, 0x49aa, 0xa184, 0x00ff,
1883 0x00c0, 0x4957, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084,
1884 0x0008, 0x00c0, 0x49ae, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048,
1885 0x49b3, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e,
1886 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x49ce, 0x157f,
1887 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500,
1888 0x730c, 0xa384, 0x0300, 0x00c0, 0x49f5, 0xa184, 0x01e0, 0x00c0,
1889 0x4a19, 0x7108, 0xa184, 0x01e0, 0x00c0, 0x4a19, 0x2001, 0x04fd,
1890 0x2004, 0xa082, 0x0005, 0x00c8, 0x49e9, 0xa184, 0x4000, 0x00c0,
1891 0x49d9, 0xa184, 0x0007, 0x0079, 0x49ed, 0x49f7, 0x4a09, 0x49f5,
1892 0x4a09, 0x49f5, 0x4a55, 0x49f5, 0x4a53, 0x1078, 0x248c, 0x7004,
1893 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, 0x4a04,
1894 0x2049, 0x0000, 0x0078, 0x4a08, 0x1078, 0x4c18, 0x00c0, 0x4a04,
1895 0x007c, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff,
1896 0x00c0, 0x4a14, 0x0078, 0x4a18, 0x1078, 0x4c18, 0x00c0, 0x4a14,
1897 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x4a1c, 0x2091, 0x6000,
1898 0x00e0, 0x4a20, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008,
1899 0x7004, 0xa084, 0x0008, 0x00c0, 0x4a28, 0x7007, 0x0012, 0x7108,
1900 0x8103, 0x0048, 0x4a2d, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0,
1901 0x4a41, 0x7004, 0xa005, 0x00c0, 0x4a41, 0x700c, 0xa005, 0x0040,
1902 0x4a43, 0x0078, 0x4a24, 0x2049, 0x0000, 0x1078, 0x38d7, 0x6818,
1903 0xa084, 0x8000, 0x0040, 0x4a4e, 0x681b, 0x0002, 0x007c, 0x1078,
1904 0x248c, 0x1078, 0x248c, 0x1078, 0x4ab1, 0x7210, 0x7114, 0x700c,
1905 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078,
1906 0x4ab1, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c,
1907 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x4a78, 0x00c8, 0x4a78,
1908 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x4a5f,
1909 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4a84,
1910 0xa7ba, 0x4917, 0x0078, 0x4a86, 0xa7ba, 0x490f, 0x007f, 0xa73d,
1911 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012, 0x1078,
1912 0x4957, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4aa5, 0x609c,
1913 0xa005, 0x0040, 0x4aae, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080,
1914 0x491d, 0x203c, 0x87fb, 0x1040, 0x248c, 0x8a51, 0x0040, 0x4aad,
1915 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, 0x0000,
1916 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x4ac5, 0x6000,
1917 0xa064, 0x00c0, 0x4abc, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080,
1918 0x492d, 0x203c, 0x87fb, 0x1040, 0x248c, 0x007c, 0x127e, 0x0d7e,
1919 0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90,
1920 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084,
1921 0x0008, 0x007f, 0x0040, 0x4ae0, 0xa0b8, 0x4917, 0x0078, 0x4ae2,
1922 0xa0b8, 0x490f, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff,
1923 0xa186, 0x0007, 0x0040, 0x4af0, 0xa18e, 0x000f, 0x00c0, 0x4af9,
1924 0x681c, 0xa084, 0x0040, 0x0040, 0x4b00, 0xa6b5, 0x0001, 0x0078,
1925 0x4b00, 0x681c, 0xa084, 0x0040, 0x0040, 0x4b00, 0xa6b5, 0x0001,
1926 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b02, 0x2400,
1927 0xa305, 0x00c0, 0x4b0d, 0x0078, 0x4b33, 0x2c58, 0x2704, 0x6104,
1928 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184,
1929 0x0008, 0x0040, 0x4b23, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014,
1930 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c,
1931 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078,
1932 0x4a92, 0x0078, 0x4b35, 0x1078, 0x4c18, 0x00c0, 0x4b33, 0x127f,
1933 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007,
1934 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b41, 0x7003, 0x0008,
1935 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f,
1936 0x2049, 0x4b4b, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
1937 0x4b54, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186,
1938 0x0007, 0x0040, 0x4b67, 0xa18e, 0x000f, 0x00c0, 0x4b72, 0x681c,
1939 0xa084, 0x0040, 0x0040, 0x4b6e, 0xa6b5, 0x0001, 0x6840, 0x2050,
1940 0x0078, 0x4b7b, 0x681c, 0xa084, 0x0020, 0x00c0, 0x4b79, 0xa6b5,
1941 0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8,
1942 0x491d, 0x273c, 0x87fb, 0x00c0, 0x4b8f, 0x0048, 0x4b89, 0x1078,
1943 0x248c, 0x689c, 0xa065, 0x0040, 0x4b93, 0x0078, 0x4b7c, 0x1078,
1944 0x4c18, 0x00c0, 0x4b8f, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e,
1945 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08,
1946 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040,
1947 0x4bad, 0xa18e, 0x000f, 0x00c0, 0x4bb6, 0x681c, 0xa084, 0x0040,
1948 0x0040, 0x4bbd, 0xa6b5, 0x0001, 0x0078, 0x4bbd, 0x681c, 0xa084,
1949 0x0040, 0x0040, 0x4bbd, 0xa6b5, 0x0001, 0x2049, 0x4b96, 0x017e,
1950 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4bcb, 0xa18e,
1951 0x000f, 0x00c0, 0x4bce, 0x6840, 0x0078, 0x4bcf, 0x6828, 0x017f,
1952 0xa055, 0x0040, 0x4c15, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f,
1953 0xa7b8, 0x491d, 0x273c, 0x87fb, 0x00c0, 0x4be9, 0x0048, 0x4be2,
1954 0x1078, 0x248c, 0x709c, 0xa075, 0x2060, 0x0040, 0x4c15, 0x0078,
1955 0x4bd5, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048,
1956 0x4c02, 0x8a51, 0x00c0, 0x4bf6, 0x1078, 0x248c, 0x8738, 0x2704,
1957 0xa005, 0x00c0, 0x4bea, 0x709c, 0xa075, 0x2060, 0x0040, 0x4c15,
1958 0x0078, 0x4bd5, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908,
1959 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4c11, 0x1078,
1960 0x248c, 0x2071, 0x0020, 0x0078, 0x4b00, 0x127f, 0x2000, 0x007c,
1961 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x0040, 0x4c40, 0x2704,
1962 0xac08, 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104,
1963 0x7012, 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040,
1964 0x4c37, 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602,
1965 0x7004, 0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4a92,
1966 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x4c41,
1967 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, 0x4c6b, 0x017e,
1968 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4c5b, 0xa18e,
1969 0x000f, 0x00c0, 0x4c5e, 0x6840, 0x0078, 0x4c5f, 0x6828, 0x017f,
1970 0xa005, 0x0040, 0x4c79, 0x0078, 0x489e, 0x0020, 0x4c6b, 0x1078,
1971 0x4a55, 0x0078, 0x4c79, 0x00a0, 0x4c72, 0x7108, 0x1078, 0x49ce,
1972 0x0078, 0x4c4a, 0x7007, 0x0010, 0x00a0, 0x4c74, 0x7108, 0x1078,
1973 0x49ce, 0x7008, 0xa086, 0x0008, 0x00c0, 0x4c4a, 0x7000, 0xa005,
1974 0x00c0, 0x4c4a, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000,
1975 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091,
1976 0x2200, 0x0d7f, 0x2049, 0x4c89, 0xad80, 0x0011, 0x20a0, 0x2099,
1977 0x0031, 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007,
1978 0x0002, 0x7003, 0x0001, 0x0040, 0x4ca8, 0x8000, 0x80ac, 0x53a5,
1979 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4caa, 0x0c7f,
1980 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f,
1981 0x2000, 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005,
1982 0x0040, 0x4cd1, 0x7994, 0x70d0, 0xa106, 0x00c0, 0x4cd1, 0x7804,
1983 0xa005, 0x0040, 0x4cd1, 0x7807, 0x0000, 0x0068, 0x4cd1, 0x2091,
1984 0x4080, 0x7820, 0x8001, 0x7822, 0x00c0, 0x4d2c, 0x7824, 0x7822,
1985 0x2069, 0x5240, 0x6800, 0xa084, 0x0007, 0x0040, 0x4cef, 0xa086,
1986 0x0002, 0x0040, 0x4cef, 0x6834, 0xa00d, 0x0040, 0x4cef, 0x2104,
1987 0xa005, 0x0040, 0x4cef, 0x8001, 0x200a, 0x0040, 0x4dd4, 0x7848,
1988 0xa005, 0x0040, 0x4cfd, 0x8001, 0x784a, 0x00c0, 0x4cfd, 0x2009,
1989 0x0102, 0x6844, 0x200a, 0x1078, 0x226f, 0x6890, 0xa005, 0x0040,
1990 0x4d09, 0x8001, 0x6892, 0x00c0, 0x4d09, 0x686f, 0x0000, 0x6873,
1991 0x0001, 0x2061, 0x5500, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034,
1992 0xa005, 0x0040, 0x4d1f, 0x8001, 0x6036, 0x00c0, 0x4d1f, 0x6010,
1993 0xa005, 0x0040, 0x4d1f, 0x017e, 0x1078, 0x226f, 0x017f, 0xace0,
1994 0x0010, 0x0070, 0x4d25, 0x0078, 0x4d0f, 0x8109, 0x0040, 0x4d2c,
1995 0x20a9, 0x0100, 0x0078, 0x4d0f, 0x1078, 0x4d39, 0x1078, 0x4d5e,
1996 0x2009, 0x5251, 0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001,
1997 0x007c, 0x7834, 0x8001, 0x7836, 0x00c0, 0x4d5d, 0x7838, 0x7836,
1998 0x2091, 0x8000, 0x7844, 0xa005, 0x00c0, 0x4d48, 0x2001, 0x0101,
1999 0x8001, 0x7846, 0xa080, 0x7500, 0x2040, 0x2004, 0xa065, 0x0040,
2000 0x4d5d, 0x6024, 0xa005, 0x0040, 0x4d59, 0x8001, 0x6026, 0x0040,
2001 0x4d8d, 0x6000, 0x2c40, 0x0078, 0x4d4e, 0x007c, 0x7828, 0x8001,
2002 0x782a, 0x00c0, 0x4d8c, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0,
2003 0x4d6b, 0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003,
2004 0x8003, 0xa090, 0x5500, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008,
2005 0x0040, 0x4d8c, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x4d84,
2006 0x8001, 0x2012, 0x00c0, 0x4d8c, 0x2304, 0xa084, 0xfff7, 0xa085,
2007 0x0080, 0x201a, 0x1078, 0x226f, 0x007c, 0x2069, 0x5240, 0x6800,
2008 0xa005, 0x0040, 0x4d97, 0x6848, 0xac06, 0x0040, 0x4dd4, 0x601b,
2009 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff,
2010 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078,
2011 0x19c5, 0x6818, 0xa005, 0x0040, 0x4daf, 0x8001, 0x681a, 0x6808,
2012 0xa084, 0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x4db9, 0x1078,
2013 0x248c, 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078,
2014 0x1cdc, 0x2069, 0x5240, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006,
2015 0x686e, 0x00c0, 0x4dcf, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078,
2016 0x226a, 0x2091, 0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x5240,
2017 0x2104, 0xa084, 0x0007, 0x0040, 0x4e30, 0xa086, 0x0007, 0x00c0,
2018 0x4dea, 0x0d7e, 0x2009, 0x5252, 0x216c, 0x1078, 0x3b1c, 0x0d7f,
2019 0x0078, 0x4e30, 0x2009, 0x5252, 0x2164, 0x1078, 0x2437, 0x601b,
2020 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff,
2021 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830,
2022 0xa084, 0x0040, 0x0040, 0x4e24, 0x684b, 0x0004, 0x20a9, 0x0014,
2023 0x6848, 0xa084, 0x0004, 0x0040, 0x4e11, 0x0070, 0x4e11, 0x0078,
2024 0x4e08, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
2025 0x0040, 0x4e1e, 0x0070, 0x4e1e, 0x0078, 0x4e15, 0x20a9, 0x00fa,
2026 0x0070, 0x4e24, 0x0078, 0x4e20, 0x6808, 0xa084, 0xfffd, 0x680a,
2027 0x681b, 0x0048, 0x2009, 0x525b, 0x200b, 0x0007, 0x784c, 0x784a,
2028 0x2091, 0x8001, 0x007c, 0x2079, 0x5200, 0x1078, 0x4e5e, 0x1078,
2029 0x4e42, 0x1078, 0x4e50, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b,
2030 0x0000, 0x007c, 0x2019, 0x0003, 0x2011, 0x5246, 0x2204, 0xa086,
2031 0x003c, 0x0040, 0x4e4d, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c,
2032 0x2019, 0x0039, 0x2011, 0x5246, 0x2204, 0xa086, 0x003c, 0x0040,
2033 0x4e5b, 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971,
2034 0x2011, 0x5246, 0x2204, 0xa086, 0x003c, 0x0040, 0x4e69, 0x2019,
2035 0x2626, 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c,
2036 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2037 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2038 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2039 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2040 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014,
2041 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000,
2042 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b,
2043 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c,
2044 0x0002, 0x0014, 0x98cd, 0x009e, 0x0093, 0xa202, 0x8838, 0x3806,
2045 0x8839, 0x20c3, 0x0864, 0x9885, 0x28c1, 0x9cae, 0xa203, 0x300c,
2046 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0x9865, 0x28f2,
2047 0x9c91, 0x9858, 0x300c, 0x28e1, 0x9c91, 0x2802, 0xa206, 0x64c3,
2048 0x282e, 0xa207, 0x64a0, 0x6de0, 0x67a0, 0x6fc0, 0x1814, 0x883b,
2049 0x7824, 0x68c1, 0x7864, 0x883e, 0x9879, 0x8576, 0x8677, 0x206b,
2050 0x28c1, 0x9cae, 0x2044, 0x2103, 0x20a2, 0x2081, 0x9865, 0xa209,
2051 0x2901, 0x988d, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c,
2052 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c91, 0x0014, 0xa204,
2053 0xa300, 0x3009, 0x19e2, 0xf864, 0x856e, 0x883f, 0x08e6, 0x9891,
2054 0xf881, 0x988c, 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2, 0x80f0,
2055 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014, 0x1de2,
2056 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1,
2057 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6,
2058 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x8000, 0x2847,
2059 0x1011, 0x98c0, 0x8000, 0xa000, 0x2802, 0x1011, 0x98c6, 0x9865,
2060 0x283e, 0x1011, 0x98ca, 0xa20b, 0x0017, 0x300c, 0xa300, 0x1de2,
2061 0xdb81, 0x0014, 0x0210, 0x98d7, 0x0014, 0x26e0, 0x873a, 0xfb02,
2062 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cb3, 0x0704,
2063 0x0000, 0x006c, 0x0002, 0x984f, 0x0014, 0x009e, 0x00a0, 0x0017,
2064 0x60ff, 0x300c, 0x8720, 0xa211, 0x9cd0, 0x8772, 0x8837, 0x2101,
2065 0x987a, 0x10d2, 0x78e2, 0x9cd3, 0x9859, 0xd984, 0xf0e2, 0xf0a1,
2066 0x98cd, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, 0x9401, 0xb520,
2067 0xc802, 0x8820, 0x987a, 0x2301, 0x987a, 0x10d2, 0x78e4, 0x9cd3,
2068 0x8821, 0x8820, 0x9859, 0xf123, 0xf142, 0xf101, 0x98c6, 0x10d2,
2069 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, 0x0014, 0x6845,
2070 0x0214, 0xa21b, 0x9cd0, 0x2001, 0x98c5, 0x8201, 0x1852, 0xd184,
2071 0xd163, 0x8834, 0x8001, 0x988d, 0x3027, 0x84a8, 0x1a56, 0x8833,
2072 0x0014, 0xa218, 0x6981, 0x9cbc, 0x6926, 0x6902, 0x1a34, 0x9899,
2073 0x1a14, 0x7021, 0x0014, 0xa300, 0x6141, 0x6964, 0x8010, 0x8592,
2074 0x8026, 0x84b9, 0x69e4, 0x8023, 0x16e1, 0x8001, 0x10f1, 0x6946,
2075 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0x98b5, 0x6969, 0xa214,
2076 0x61c2, 0x8002, 0x14e1, 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827,
2077 0x0014, 0xa217, 0x9cbc, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8,
2078 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9cd0, 0x10d2, 0x70e4, 0x0004,
2079 0x8007, 0x9424, 0xcc1a, 0x9cd3, 0x98c5, 0x8827, 0x300a, 0x0013,
2080 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, 0x0014,
2081 0x878e, 0x0016, 0xa21c, 0x1035, 0x9891, 0xa210, 0xa000, 0x8010,
2082 0x8592, 0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ea, 0x8021,
2083 0x3807, 0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x9891, 0x0000,
2084 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2085 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2086 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2087 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
2088 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014,
2089 0x98e2, 0x98cd, 0x0014, 0x0014, 0x0014, 0x0080, 0x0137, 0x0000,
2090 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b,
2091 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202, 0x8838,
2092 0x3806, 0x8839, 0x20c3, 0x0864, 0xa82f, 0x28c1, 0x9cae, 0xa203,
2093 0x300c, 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0xa804,
2094 0x28f2, 0x9c91, 0xa8f4, 0x300c, 0x28e1, 0x9c91, 0x2802, 0xa206,
2095 0x64c3, 0x282e, 0xa207, 0x64a0, 0x6de0, 0x67a0, 0x6fc0, 0x1814,
2096 0x883b, 0x7824, 0x68c1, 0x7864, 0x883e, 0xa802, 0x8576, 0x8677,
2097 0x206b, 0x28c1, 0x9cae, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8e4,
2098 0xa209, 0x2901, 0xa809, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a,
2099 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c91, 0x0014,
2100 0xa204, 0xa300, 0x3009, 0x19e2, 0xf864, 0x856e, 0x883f, 0x08e6,
2101 0xa8f7, 0xf881, 0xa8f0, 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2,
2102 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014,
2103 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008,
2104 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008, 0x84a8,
2105 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x8000,
2106 0x2847, 0x1011, 0xa8fc, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd,
2107 0xa89b, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x0017, 0x300c, 0xa300,
2108 0x1de2, 0xdb81, 0x0014, 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a,
2109 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cb3,
2110 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211, 0x9d63, 0x8772,
2111 0x8837, 0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d66, 0xa8fc, 0xd984,
2112 0xf0e2, 0xf0a1, 0xa86c, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f,
2113 0x9401, 0xb520, 0xc802, 0x8820, 0xa80f, 0x2301, 0xa80d, 0x10d2,
2114 0x78e4, 0x9d66, 0x8821, 0x8820, 0xa8e6, 0xf123, 0xf142, 0xf101,
2115 0xa84f, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001,
2116 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d63, 0x2001, 0xa840, 0x8201,
2117 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801, 0x3027, 0x84a8,
2118 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d4f, 0x6926, 0x6902,
2119 0x1a34, 0xa801, 0x1a14, 0x7021, 0x0014, 0xa300, 0x6141, 0x6964,
2120 0x8010, 0x8592, 0x8026, 0x84b9, 0x69e4, 0x8023, 0x16e1, 0x8001,
2121 0x10f1, 0x6946, 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa807,
2122 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1, 0x8004, 0x16e1, 0x0101,
2123 0x300a, 0x8827, 0x0014, 0xa217, 0x9d4f, 0x0014, 0xa300, 0x8181,
2124 0x842a, 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9d63, 0x10d2,
2125 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d66, 0xa8f8, 0x8827,
2126 0x300a, 0x0013, 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e,
2127 0xa21d, 0x0014, 0x878e, 0x0016, 0xa21c, 0x1035, 0xa8b4, 0xa210,
2128 0x3807, 0x300c, 0x817e, 0x872b, 0x8772, 0xa8ad, 0x0000, 0x0d0c
2129};
2130static unsigned short risc_code_length01 = 0x4158;
diff --git a/drivers/scsi/ql12160_fw.h b/drivers/scsi/ql12160_fw.h
deleted file mode 100644
index d89dac0cc9d4..000000000000
--- a/drivers/scsi/ql12160_fw.h
+++ /dev/null
@@ -1,1811 +0,0 @@
1/*****************************************************************************
2 * QLOGIC LINUX SOFTWARE
3 *
4 * QLogic ISP12160 device driver for Linux 2.2.x and 2.4.x
5 * Copyright (C) 2002 Qlogic Corporation (www.qlogic.com)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
10 * later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 *****************************************************************************/
18
19/************************************************************************
20 * --- ISP12160A Initiator Firmware --- *
21 * 32 LUN Support *
22 ************************************************************************/
23
24/*
25 * Firmware Version 10.04.42 (15:44 Apr 18, 2003)
26 */
27
28#ifdef UNIQUE_FW_NAME
29static unsigned char fw12160i_version_str[] = {10,4,42};
30#else
31static unsigned char firmware_version[] = {10,4,42};
32#endif
33
34#ifdef UNIQUE_FW_NAME
35#define fw12160i_VERSION_STRING "10.04.42"
36#else
37#define FW_VERSION_STRING "10.04.42"
38#endif
39
40#ifdef UNIQUE_FW_NAME
41static unsigned short fw12160i_addr01 = 0x1000;
42#else
43static unsigned short risc_code_addr01 = 0x1000;
44#endif
45
46#ifdef UNIQUE_FW_NAME
47static unsigned short fw12160i_code01[] = {
48#else
49static unsigned short risc_code01[] = {
50#endif
51 0x0804, 0x1041, 0x0000, 0x36c9, 0x0000, 0x2043, 0x4f50, 0x5952,
52 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
53 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
54 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
55 0x3132, 0x3136, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
56 0x6572, 0x7369, 0x6f6e, 0x2031, 0x302e, 0x3034, 0x2020, 0x2043,
57 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
58 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
59 0x2400, 0x20c9, 0x90ff, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001,
60 0x01ff, 0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2,
61 0x20c1, 0x0020, 0x2089, 0x1221, 0x2071, 0x0010, 0x70c3, 0x0004,
62 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000a,
63 0x2001, 0x04fd, 0x2004, 0x70d6, 0x2009, 0xfeff, 0x2130, 0x2128,
64 0xa1a2, 0x4700, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
65 0xa192, 0x9100, 0x2009, 0x0000, 0x2001, 0x0032, 0x080c, 0x1e05,
66 0x2218, 0x2079, 0x4700, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9,
67 0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2009, 0xff00, 0x3400, 0xa102,
68 0x0218, 0x0110, 0x20a8, 0x42a4, 0x781b, 0x0064, 0x7814, 0xc0cd,
69 0xc0d5, 0x7816, 0x2071, 0x0200, 0x00d6, 0x2069, 0x4740, 0x080c,
70 0x465c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1130, 0x2069, 0x4780,
71 0x2071, 0x0100, 0x080c, 0x465c, 0x7814, 0xc0d4, 0x7816, 0x00de,
72 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, 0xc08d, 0x7802,
73 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, 0x7827, 0x0002,
74 0x2009, 0x0002, 0x2069, 0x4740, 0x681b, 0x0003, 0x6823, 0x0007,
75 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0006,
76 0x6833, 0x0008, 0x683b, 0x0000, 0x8109, 0x0500, 0x68cf, 0x000a,
77 0x68bf, 0x47c0, 0x2079, 0x4700, 0x68d3, 0x762d, 0x68c3, 0x4cc0,
78 0x68c7, 0x4bc0, 0x68cb, 0x8cc0, 0x68a7, 0x8f44, 0x68ab, 0x8f49,
79 0x68af, 0x8f44, 0x68b3, 0x8f44, 0x68a3, 0x0001, 0x2001, 0x01ff,
80 0x2004, 0xd0fc, 0x11c8, 0x2069, 0x4780, 0x0870, 0x68cf, 0x000a,
81 0x68bf, 0x49c0, 0x68d3, 0x7839, 0x68c3, 0x6cc0, 0x68c7, 0x4c40,
82 0x68cb, 0x8dd0, 0x68a7, 0x8f49, 0x68ab, 0x8f4e, 0x68af, 0x8f49,
83 0x68b3, 0x8f49, 0x68a3, 0x0001, 0x00e6, 0x2069, 0x4bc0, 0x2071,
84 0x0200, 0x70ec, 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120,
85 0x2019, 0x180c, 0x2021, 0x000c, 0x080c, 0x1d75, 0x2001, 0x01ff,
86 0x2004, 0xd0fc, 0x1188, 0x2069, 0x4c40, 0x2071, 0x0100, 0x70ec,
87 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120, 0x2019, 0x180c,
88 0x2021, 0x000c, 0x080c, 0x1d75, 0x00ee, 0x2011, 0x0002, 0x2069,
89 0x4cc0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b,
90 0x0040, 0x7bc8, 0xa386, 0xfeff, 0x1128, 0x6817, 0x0100, 0x681f,
91 0x0064, 0x0020, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
92 0x1f04, 0x1135, 0x8109, 0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc,
93 0x1128, 0x8211, 0x0118, 0x2069, 0x6cc0, 0x08d8, 0x080c, 0x22f6,
94 0x080c, 0x403d, 0x080c, 0x1b8c, 0x080c, 0x4615, 0x2091, 0x2200,
95 0x2079, 0x4700, 0x2071, 0x0050, 0x2091, 0x2400, 0x2079, 0x4700,
96 0x2071, 0x0020, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x4740,
97 0x2091, 0x2800, 0x2079, 0x0100, 0x2071, 0x4780, 0x2091, 0x2000,
98 0x2079, 0x4700, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090,
99 0x2071, 0x0010, 0x70c3, 0x0000, 0x1004, 0x118c, 0x70c0, 0xa086,
100 0x0002, 0x1110, 0x080c, 0x13ba, 0x2039, 0x0000, 0x080c, 0x12ab,
101 0x78ac, 0xa005, 0x1180, 0x0e04, 0x119a, 0x786c, 0xa065, 0x0110,
102 0x080c, 0x20a1, 0x080c, 0x1e26, 0x0e04, 0x11af, 0x786c, 0xa065,
103 0x0110, 0x080c, 0x20a1, 0x0e04, 0x11af, 0x2009, 0x4747, 0x2011,
104 0x4787, 0x2104, 0x220c, 0xa105, 0x0110, 0x080c, 0x1c9b, 0x2071,
105 0x4740, 0x70a0, 0xa005, 0x01e8, 0x744c, 0xa485, 0x0000, 0x01c8,
106 0x2079, 0x0200, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, 0x2190,
107 0x080c, 0x274c, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x11d1,
108 0x2079, 0x4700, 0x786c, 0xa065, 0x0120, 0x2071, 0x0010, 0x080c,
109 0x20a1, 0x1d04, 0x11d9, 0x2079, 0x4700, 0x2071, 0x0010, 0x080c,
110 0x4429, 0x2071, 0x4780, 0x70a0, 0xa005, 0x0188, 0x704c, 0xa025,
111 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d,
112 0x2190, 0x080c, 0x274c, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079,
113 0x4700, 0x2071, 0x0010, 0x0e04, 0x11fa, 0x786c, 0xa065, 0x0110,
114 0x080c, 0x20a1, 0x1d04, 0x118e, 0x080c, 0x4429, 0x0804, 0x118e,
115 0x3c00, 0xa084, 0x0007, 0x0002, 0x120c, 0x120c, 0x120e, 0x120e,
116 0x1213, 0x1213, 0x1218, 0x1218, 0x080c, 0x2575, 0x2091, 0x2400,
117 0x080c, 0x40d5, 0x0005, 0x2091, 0x2200, 0x080c, 0x40d5, 0x0005,
118 0x2091, 0x2200, 0x080c, 0x40d5, 0x2091, 0x2400, 0x080c, 0x40d5,
119 0x0005, 0x1241, 0x1241, 0x1242, 0x1242, 0x124d, 0x124d, 0x124d,
120 0x124d, 0x1256, 0x1256, 0x1261, 0x1261, 0x124d, 0x124d, 0x124d,
121 0x124d, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270,
122 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270,
123 0x1270, 0x0cf8, 0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c,
124 0x2592, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126,
125 0x080c, 0x1200, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106,
126 0x0126, 0x2091, 0x2600, 0x080c, 0x2592, 0x012e, 0x010e, 0x000e,
127 0x000d, 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x2592,
128 0x2091, 0x2800, 0x080c, 0x2592, 0x012e, 0x010e, 0x000e, 0x000d,
129 0x0006, 0x0106, 0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0x4700,
130 0x2071, 0x0200, 0x2069, 0x4740, 0x3d00, 0xd08c, 0x0130, 0x70ec,
131 0xa084, 0x1c00, 0x78e2, 0x080c, 0x465c, 0x3d00, 0xd084, 0x0150,
132 0x2069, 0x4780, 0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6,
133 0x080c, 0x465c, 0x080c, 0x2526, 0x00fe, 0x00ee, 0x00de, 0x012e,
134 0x010e, 0x000e, 0x000d, 0x7008, 0x800b, 0x1240, 0x7007, 0x0002,
135 0xa08c, 0x01e0, 0x1120, 0xd09c, 0x0108, 0x0887, 0x0897, 0x70c3,
136 0x4002, 0x0804, 0x13bd, 0x0e04, 0x131e, 0x2061, 0x0000, 0x6018,
137 0xd084, 0x1904, 0x131e, 0x7828, 0xa005, 0x1120, 0x0004, 0x131f,
138 0x0804, 0x131e, 0xd0fc, 0x0130, 0x0006, 0x080c, 0x1b29, 0x000e,
139 0x0150, 0x0028, 0x0006, 0x080c, 0x1b1e, 0x000e, 0x0120, 0x2001,
140 0x4007, 0x0804, 0x13bc, 0x7910, 0xd0fc, 0x1128, 0x2061, 0x4740,
141 0xc19c, 0xc7fc, 0x0020, 0x2061, 0x4780, 0xc19d, 0xc7fd, 0x6060,
142 0xa005, 0x1904, 0x131e, 0x7912, 0x607e, 0x7828, 0xc0fc, 0xa086,
143 0x0018, 0x1120, 0x00c6, 0x080c, 0x1926, 0x00ce, 0x782b, 0x0000,
144 0x6078, 0xa065, 0x01e0, 0x00c6, 0x609c, 0x080c, 0x1bf3, 0x00ce,
145 0x609f, 0x0000, 0x080c, 0x1a60, 0x2009, 0x0018, 0x6087, 0x0103,
146 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
147 0x080c, 0x1b34, 0x000e, 0x7812, 0x1198, 0x080c, 0x1b7f, 0x7810,
148 0xd09c, 0x1118, 0x2061, 0x4740, 0x0020, 0x2061, 0x4780, 0xc09c,
149 0x7812, 0x607b, 0x0000, 0x60d0, 0xd0c4, 0x0130, 0xc0c4, 0x60d2,
150 0x2001, 0x4005, 0x0804, 0x13bc, 0x0804, 0x13ba, 0x0005, 0xa006,
151 0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a,
152 0x0040, 0x1a04, 0x136c, 0x0002, 0x13ba, 0x1408, 0x13d6, 0x143c,
153 0x1470, 0x1470, 0x13ce, 0x1a78, 0x147a, 0x13c8, 0x13da, 0x13db,
154 0x13dc, 0x13dd, 0x1a7c, 0x13c8, 0x1487, 0x14db, 0x1941, 0x1a72,
155 0x13de, 0x17c8, 0x17fe, 0x1830, 0x1876, 0x1785, 0x1792, 0x17a5,
156 0x17b7, 0x15bf, 0x13c8, 0x150d, 0x1518, 0x1526, 0x1534, 0x154b,
157 0x1559, 0x155c, 0x156e, 0x157c, 0x1586, 0x15a5, 0x15b1, 0x13c8,
158 0x13c8, 0x13c8, 0x13c8, 0x15cc, 0x15dd, 0x15f7, 0x162b, 0x1654,
159 0x1666, 0x1669, 0x1693, 0x16cc, 0x16de, 0x1753, 0x1763, 0x13c8,
160 0x13c8, 0x13c8, 0x13c8, 0x1775, 0x2100, 0xa08a, 0x0040, 0x1a04,
161 0x13c8, 0x0002, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x1a9e,
162 0x1aa4, 0x13c8, 0x13c8, 0x13c8, 0x1aa8, 0x1ae8, 0x13c8, 0x13c8,
163 0x13c8, 0x13c8, 0x1403, 0x146b, 0x1482, 0x14d6, 0x193c, 0x13c8,
164 0x13c8, 0x190b, 0x13c8, 0x1aec, 0x1a90, 0x1a9a, 0x13c8, 0x13c8,
165 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
166 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
167 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
168 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
169 0x13c8, 0x13c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0028, 0x73ce,
170 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04, 0x13bd, 0x2061,
171 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x0005,
172 0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78, 0x2099, 0x0041,
173 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20, 0x70c4, 0x70c3,
174 0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0, 0x2091, 0x8000,
175 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
176 0x70d3, 0x000a, 0x2001, 0x0004, 0x70d6, 0x2079, 0x0000, 0x781b,
177 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051,
178 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091,
179 0x4080, 0x0804, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018,
180 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0,
181 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e,
182 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0904, 0x13ba, 0xa182,
183 0x0040, 0x1210, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007,
184 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002,
185 0xa084, 0x01e0, 0x0120, 0x70c3, 0x4002, 0x0804, 0x13bd, 0x24a8,
186 0x53a5, 0x0c10, 0x0804, 0x13ba, 0x2029, 0x0000, 0x2520, 0x71d0,
187 0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1, 0x0030, 0x7003, 0x0000,
188 0x7007, 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, 0x0040,
189 0x7007, 0x0006, 0x81ff, 0x0904, 0x13ba, 0xa182, 0x0040, 0x1210,
190 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007,
191 0x0001, 0x7008, 0xd0fc, 0x0de8, 0xa084, 0x01e0, 0x0d48, 0x70c3,
192 0x4002, 0x0804, 0x13bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0878,
193 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x1108, 0x200a, 0x72ca,
194 0x0804, 0x13b9, 0x70c7, 0x000a, 0x70cb, 0x0004, 0x70cf, 0x002a,
195 0x0804, 0x13ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, 0x2029,
196 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca,
197 0x73ce, 0x74d2, 0xa005, 0x05e8, 0xa40a, 0x0108, 0x1240, 0x8001,
198 0x7872, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc085, 0x78ae, 0x2001,
199 0x4005, 0x0804, 0x13bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76,
200 0xa48c, 0xff00, 0x0170, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c,
201 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000,
202 0x0050, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1,
203 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605,
204 0x0118, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae,
205 0x0018, 0x78ac, 0xc085, 0x78ae, 0x0804, 0x13ba, 0x75d8, 0x76dc,
206 0x75da, 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8,
207 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0500,
208 0xa40a, 0x0110, 0x1a04, 0x13bc, 0x8001, 0x7892, 0xa084, 0xfc00,
209 0x0138, 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0804, 0x13bc,
210 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0118, 0x7a10,
211 0xc2c5, 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0018,
212 0x78ac, 0xc0c5, 0x78ae, 0x0804, 0x13ba, 0x2009, 0x0000, 0x786c,
213 0xa065, 0x0118, 0x8108, 0x6000, 0x0cd8, 0x7ac4, 0x0804, 0x13b8,
214 0x2009, 0x4748, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
215 0x13b9, 0x2011, 0x4788, 0x2214, 0x0804, 0x13b8, 0x2009, 0x4749,
216 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011,
217 0x4789, 0x2214, 0x0804, 0x13b8, 0x2061, 0x4740, 0x6128, 0x622c,
218 0x8214, 0x8214, 0x8214, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1148,
219 0x2061, 0x4780, 0x6328, 0x73da, 0x632c, 0x831c, 0x831c, 0x831c,
220 0x73de, 0x0804, 0x13b8, 0x2009, 0x474c, 0x210c, 0x2001, 0x01ff,
221 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x478c, 0x2214, 0x0804,
222 0x13b8, 0x7918, 0x0804, 0x13b9, 0x2009, 0x0202, 0x210c, 0xa18c,
223 0x0f30, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011,
224 0x0102, 0x2214, 0xa294, 0x0f30, 0x0804, 0x13b8, 0x2009, 0x474d,
225 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011,
226 0x478d, 0x2214, 0x0804, 0x13b8, 0x7920, 0x2001, 0x01ff, 0x2004,
227 0xd0fc, 0x1904, 0x13b9, 0x7a24, 0x0804, 0x13b8, 0x2011, 0x4c40,
228 0x71c4, 0xd1fc, 0x1110, 0x2011, 0x4bc0, 0x8107, 0xa084, 0x000f,
229 0x8003, 0x8003, 0x8003, 0xa268, 0x6a00, 0x6b08, 0x6c1c, 0x74da,
230 0xd1fc, 0x1118, 0x2021, 0x023b, 0x0010, 0x2021, 0x013b, 0x2424,
231 0xa4a4, 0x1c00, 0x74de, 0x0804, 0x13b7, 0x77c4, 0x080c, 0x1b9a,
232 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0804,
233 0x13b7, 0x2061, 0x4740, 0x6118, 0x2001, 0x01ff, 0x2004, 0xd0fc,
234 0x1904, 0x13b9, 0x2061, 0x4780, 0x6218, 0x0804, 0x13b8, 0x77c4,
235 0x080c, 0x1b9a, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x77da,
236 0x2091, 0x8001, 0x0804, 0x13b7, 0x71c4, 0x2110, 0xa294, 0x000f,
237 0xa282, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x23b4, 0xa384, 0x4000,
238 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x71c4, 0x2100, 0xc0bc,
239 0xa082, 0x0010, 0x1a04, 0x13b3, 0xd1bc, 0x1120, 0x2011, 0x4748,
240 0x2204, 0x0020, 0x2011, 0x4788, 0x2204, 0xc0bd, 0x0006, 0x2100,
241 0xc0bc, 0x2012, 0x080c, 0x2358, 0x001e, 0x0804, 0x13b9, 0x71c4,
242 0x2021, 0x4749, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0030, 0x71c8,
243 0x2021, 0x4789, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1623, 0x20a9,
244 0x0008, 0x2204, 0xa106, 0x0138, 0x8210, 0x1f04, 0x1609, 0x71c4,
245 0x72c8, 0x0804, 0x13b2, 0xa292, 0x1623, 0x0026, 0x2122, 0x001e,
246 0x080c, 0x236a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1110, 0xd3fc,
247 0x09f0, 0x0804, 0x13ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0004,
248 0x0001, 0x0002, 0x0003, 0x2061, 0x4740, 0x6128, 0x622c, 0x8214,
249 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003, 0x8003,
250 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11a0, 0x0026, 0x0016,
251 0x2061, 0x4780, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8,
252 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de,
253 0x001e, 0x002e, 0x0804, 0x13b8, 0x2061, 0x4740, 0x6130, 0x70c4,
254 0x6032, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2061,
255 0x4780, 0x6230, 0x70c8, 0x6032, 0x0804, 0x13b8, 0x7918, 0x0804,
256 0x13b9, 0x71c4, 0xa184, 0xf0cf, 0x0148, 0x2001, 0x01ff, 0x2004,
257 0xd0fc, 0x1904, 0x13b3, 0x72c8, 0x0804, 0x13b2, 0x2019, 0x0000,
258 0x080c, 0x23a6, 0x0036, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118,
259 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa184, 0xf0cf, 0x0128, 0x000e,
260 0x2110, 0x71c4, 0x0804, 0x13b2, 0xc3fd, 0x080c, 0x23a6, 0x2310,
261 0x001e, 0x0804, 0x13b8, 0x71c4, 0xa182, 0x0010, 0x0248, 0x2001,
262 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b3, 0x72c8, 0x0804, 0x13b2,
263 0x2011, 0x474d, 0x2204, 0x0006, 0x8104, 0x1208, 0x8108, 0x2112,
264 0x2019, 0x0000, 0x080c, 0x2393, 0x2001, 0x01ff, 0x2004, 0xd0fc,
265 0x0118, 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa182, 0x0010, 0x0228,
266 0x0006, 0x2110, 0x71c4, 0x0804, 0x13b2, 0x2011, 0x478d, 0x2204,
267 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, 0xc3fd, 0x080c, 0x2393,
268 0x002e, 0x001e, 0x0804, 0x13b8, 0x71c4, 0x72c8, 0xa184, 0xfffd,
269 0x1904, 0x13b2, 0xa284, 0xfffd, 0x1904, 0x13b2, 0x2100, 0x7920,
270 0x7822, 0x2200, 0x7a24, 0x7826, 0x0804, 0x13b8, 0x2011, 0x4c40,
271 0x71c4, 0xd1fc, 0x1110, 0x2011, 0x4bc0, 0x8107, 0xa084, 0x000f,
272 0x8003, 0x8003, 0x8003, 0xa268, 0x72c8, 0x73cc, 0x74d8, 0x71c6,
273 0x6800, 0x70ca, 0x73ce, 0x74da, 0x2091, 0x8000, 0x6a02, 0xd2ac,
274 0x1118, 0x2021, 0x0000, 0x0090, 0xa484, 0x00ff, 0xa082, 0x0002,
275 0x1a04, 0x174f, 0x843f, 0xa7bc, 0x00ff, 0x0140, 0xa786, 0x0002,
276 0x1904, 0x174f, 0xa484, 0x00ff, 0x0904, 0x174f, 0x2061, 0x0200,
277 0xd1fc, 0x0110, 0x2061, 0x0100, 0x2029, 0x0009, 0x2031, 0x0062,
278 0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, 0xa084, 0x00ff, 0x1110,
279 0xa73d, 0x1138, 0x2041, 0x0019, 0xa384, 0x00ff, 0xa082, 0x001a,
280 0x0210, 0xa4a4, 0x00ff, 0x8307, 0xa084, 0x00ff, 0x0188, 0xa842,
281 0x02f0, 0xa086, 0x0010, 0x1120, 0xa39c, 0x00ff, 0xa39d, 0x0f00,
282 0xa3bc, 0x00ff, 0x2500, 0xa702, 0x0290, 0x2600, 0xa702, 0x1278,
283 0x2039, 0x003a, 0x6804, 0xa705, 0x6806, 0x6b0a, 0x6b0c, 0x73ce,
284 0x681c, 0x70da, 0x6c1e, 0x2091, 0x8001, 0x0804, 0x13ba, 0x2091,
285 0x8001, 0x0804, 0x13b4, 0x77c4, 0x080c, 0x1b9a, 0x2091, 0x8000,
286 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e,
287 0x2708, 0x0804, 0x13b7, 0x70c4, 0x2061, 0x4740, 0x6118, 0x601a,
288 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x70c8, 0x2061,
289 0x4780, 0x6218, 0x601a, 0x0804, 0x13b8, 0x71c4, 0x72c8, 0x73cc,
290 0xa182, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x23d8, 0xa384, 0x4000,
291 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x77c4, 0x080c, 0x1b9a,
292 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708,
293 0x0804, 0x13b8, 0x77c4, 0x080c, 0x1b9a, 0x2091, 0x8000, 0x6a08,
294 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0110, 0x080c, 0x22d5,
295 0x2091, 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4, 0x080c, 0x1b9a,
296 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005, 0x0110,
297 0x080c, 0x22d5, 0x2091, 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4,
298 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000,
299 0x080c, 0x1bb2, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0804, 0x13b8,
300 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1b29, 0x0138, 0x0804, 0x13bc,
301 0x080c, 0x1b1e, 0x0110, 0x0804, 0x13bc, 0x73c8, 0x72cc, 0x77c6,
302 0x73ca, 0x72ce, 0x080c, 0x1c2a, 0x11e8, 0x6818, 0xa005, 0x01a0,
303 0x2708, 0x0076, 0x080c, 0x23f7, 0x007e, 0x1170, 0x2001, 0x0015,
304 0xd7fc, 0x1118, 0x2061, 0x4740, 0x0018, 0xc0fd, 0x2061, 0x4780,
305 0x782a, 0x2091, 0x8001, 0x0005, 0x2091, 0x8001, 0x2001, 0x4005,
306 0x0804, 0x13bc, 0x2091, 0x8001, 0x0804, 0x13ba, 0x77c4, 0xd7fc,
307 0x0128, 0x080c, 0x1b29, 0x0138, 0x0804, 0x13bc, 0x080c, 0x1b1e,
308 0x0110, 0x0804, 0x13bc, 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005,
309 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1bb2, 0x2009, 0x0016,
310 0xd7fc, 0x1118, 0x2061, 0x4740, 0x0018, 0x2061, 0x4780, 0xc1fd,
311 0x6063, 0x0003, 0x607b, 0x0000, 0x6772, 0x607f, 0x000f, 0x792a,
312 0x61d0, 0xc1c4, 0x61d2, 0x080c, 0x22d5, 0x2091, 0x8001, 0x0005,
313 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xd7fc, 0x0128, 0x080c, 0x1b29,
314 0x0138, 0x0804, 0x13bc, 0x080c, 0x1b1e, 0x0110, 0x0804, 0x13bc,
315 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x1118,
316 0x2061, 0x4740, 0x0018, 0x2061, 0x4780, 0xc1fd, 0x607b, 0x0000,
317 0x6063, 0x0002, 0x6772, 0x607f, 0x000f, 0x792a, 0x61d0, 0xc1c4,
318 0x61d2, 0x080c, 0x22d5, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049,
319 0x0005, 0x2051, 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0118,
320 0x60d0, 0xc0fd, 0x60d2, 0x080c, 0x1bb2, 0x70c8, 0x6836, 0x8738,
321 0xa784, 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005, 0x2019, 0x0000,
322 0x72c8, 0xd284, 0x0128, 0x080c, 0x1b29, 0x0138, 0x0804, 0x13bc,
323 0x080c, 0x1b1e, 0x0110, 0x0804, 0x13bc, 0x72c8, 0x72ca, 0x78ac,
324 0xa084, 0x0003, 0x1518, 0x2039, 0x0000, 0xd284, 0x0108, 0xc7fd,
325 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x080c, 0x1b9a,
326 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x6837, 0x0000,
327 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x1d80, 0xa7bc, 0xff00,
328 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d40, 0x2091, 0x8000,
329 0x72c8, 0x2069, 0x0100, 0xd284, 0x1110, 0x2069, 0x0200, 0x6808,
330 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b, 0x0004,
331 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x18c2, 0x684b,
332 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04, 0x18cb,
333 0x20a9, 0x00fa, 0x1f04, 0x18d2, 0x2079, 0x4700, 0x2009, 0x0018,
334 0x72c8, 0xd284, 0x1118, 0x2061, 0x4740, 0x0018, 0x2061, 0x4780,
335 0xc1fd, 0x607b, 0x0000, 0x792a, 0x6063, 0x0001, 0x607f, 0x000f,
336 0x60a3, 0x0000, 0x60a4, 0x60ae, 0x60b2, 0x60d0, 0xd0b4, 0x0160,
337 0xc0b4, 0x60d2, 0x00c6, 0x60b4, 0xa065, 0x6008, 0xc0d4, 0x600a,
338 0x6018, 0x8001, 0x601a, 0x00ce, 0x60d0, 0xa084, 0x7eff, 0x60d2,
339 0x78ac, 0xc08d, 0x78ae, 0x83ff, 0x0108, 0x0005, 0x681b, 0x0054,
340 0x2091, 0x8001, 0x0005, 0x73cc, 0x080c, 0x1878, 0x69ec, 0x6a48,
341 0xa185, 0x1800, 0x684a, 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021,
342 0x0004, 0x20a9, 0x09ff, 0x1f04, 0x191b, 0x8421, 0x1dd0, 0x8319,
343 0x1db0, 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118,
344 0x2069, 0x4740, 0x0010, 0x2069, 0x4780, 0x71c4, 0x71c6, 0x6916,
345 0x81ff, 0x1110, 0x68a3, 0x0001, 0x78ac, 0xc08c, 0x78ae, 0xd084,
346 0x1110, 0x080c, 0x1c7a, 0x0005, 0x75d8, 0x74dc, 0x75da, 0x74de,
347 0x0010, 0xa02e, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca,
348 0x72ce, 0x2079, 0x4700, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c,
349 0x1b77, 0x0904, 0x1a5c, 0x20a9, 0x0005, 0x20a1, 0x4714, 0x2091,
350 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x080c, 0x1d41,
351 0x0120, 0x080c, 0x1b7f, 0x0804, 0x1a5c, 0x6004, 0xa08c, 0x00ff,
352 0xa18e, 0x0009, 0x1120, 0x0006, 0x080c, 0x2086, 0x000e, 0xa084,
353 0xff00, 0x8007, 0x8009, 0x0904, 0x19f1, 0x00c6, 0x2c68, 0x080c,
354 0x1b77, 0x05a8, 0x2c00, 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000,
355 0x00ce, 0x00c6, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040,
356 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda,
357 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0904, 0x19f0, 0x2009,
358 0x0040, 0x080c, 0x1d41, 0x15a0, 0x6004, 0xa084, 0x00ff, 0xa086,
359 0x0002, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x1138,
360 0x0016, 0x080c, 0x2083, 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce,
361 0x00c6, 0x609c, 0x080c, 0x1bf3, 0x00ce, 0x609f, 0x0000, 0x080c,
362 0x1a60, 0x2009, 0x0018, 0x6008, 0xc0cd, 0x600a, 0x6004, 0x6086,
363 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
364 0x080c, 0x1b34, 0x000e, 0x7812, 0x080c, 0x1b7f, 0x0804, 0x1a5c,
365 0x00ce, 0x00c6, 0x609c, 0x080c, 0x1bf3, 0x00ce, 0x609f, 0x0000,
366 0x080c, 0x1a60, 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003,
367 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
368 0x080c, 0x1b34, 0x000e, 0x7812, 0x080c, 0x1b7f, 0x0804, 0x1a5c,
369 0x00ce, 0x6114, 0xd1fc, 0x0120, 0x080c, 0x1b29, 0x01f0, 0x0018,
370 0x080c, 0x1b1e, 0x01d0, 0x080c, 0x1a60, 0x2009, 0x0018, 0x6087,
371 0x0103, 0x601b, 0x0021, 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff,
372 0x0110, 0xc0c5, 0x7812, 0x080c, 0x1b34, 0x000e, 0x7812, 0x080c,
373 0x1b7f, 0x2001, 0x4007, 0x0804, 0x13bc, 0x6104, 0xa18c, 0x00ff,
374 0xa186, 0x0005, 0x1118, 0x601c, 0xc0bd, 0x601e, 0x74c4, 0x73c8,
375 0x72cc, 0x6014, 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc,
376 0x1118, 0x2071, 0x4740, 0x0018, 0x2071, 0x4780, 0xc1fd, 0x792a,
377 0x7063, 0x0005, 0x71d0, 0xc1c4, 0x71d2, 0x7366, 0x726a, 0x746e,
378 0x7072, 0x7077, 0x0000, 0x2c00, 0x707a, 0xa02e, 0x2530, 0x611c,
379 0xa184, 0x0060, 0x0110, 0x080c, 0x3fe9, 0x00ee, 0x6596, 0x65a6,
380 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023,
381 0x0000, 0x6024, 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x080c,
382 0x22d5, 0x2091, 0x8001, 0x0005, 0x70c3, 0x4005, 0x0804, 0x13bd,
383 0x20a9, 0x0005, 0x2099, 0x4714, 0x2091, 0x8000, 0x530a, 0x2091,
384 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
385 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, 0x791e, 0x0804, 0x13ba,
386 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c, 0xa016,
387 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000, 0x1118,
388 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, 0x70ca, 0x0804, 0x13bd,
389 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x1a04, 0x13b3, 0x7966,
390 0x0804, 0x13ba, 0x7964, 0x71c6, 0x0804, 0x13ba, 0x7900, 0x71c6,
391 0x71c4, 0x7902, 0x0804, 0x13ba, 0x7900, 0x71c6, 0x0804, 0x13ba,
392 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0160, 0x810c, 0x0230,
393 0x8210, 0x810c, 0x810c, 0x0210, 0x8210, 0x810c, 0x81ff, 0x1904,
394 0x13b4, 0x8210, 0x7a0e, 0xd28c, 0x0538, 0x7910, 0xc1cd, 0x7912,
395 0x2009, 0x0021, 0x2019, 0x0003, 0xd284, 0x01c0, 0x8108, 0x2019,
396 0x0041, 0x2011, 0x8f4e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312,
397 0x2019, 0x0043, 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312,
398 0x2019, 0x0047, 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x8f53,
399 0x2112, 0x2011, 0x8f73, 0x2312, 0x7904, 0x7806, 0x0804, 0x13b9,
400 0x7804, 0x70c6, 0x0804, 0x13ba, 0x71c4, 0xd1fc, 0x1118, 0x2011,
401 0x4bc0, 0x0010, 0x2011, 0x4c40, 0x8107, 0xa084, 0x000f, 0x8003,
402 0x8003, 0x8003, 0xa268, 0x2011, 0x0000, 0x6814, 0xd0fc, 0x0110,
403 0xa295, 0x0200, 0xd0b4, 0x0110, 0xa295, 0x0001, 0x6b0c, 0x6800,
404 0x70da, 0x0804, 0x13b7, 0x7814, 0xd0f4, 0x0130, 0x2001, 0x4007,
405 0x70db, 0x0000, 0xa005, 0x0048, 0xd0fc, 0x0130, 0x2001, 0x4007,
406 0x70db, 0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x7814, 0xd0f4,
407 0x0130, 0x2001, 0x4007, 0x70db, 0x0000, 0xa005, 0x0008, 0xa006,
408 0x0005, 0x7814, 0xd0fc, 0x0130, 0x2001, 0x4007, 0x70db, 0x0001,
409 0xa005, 0x0008, 0xa006, 0x0005, 0x7112, 0x721a, 0x731e, 0x7810,
410 0xd0c4, 0x0110, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c,
411 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2,
412 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0140, 0x810f,
413 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107,
414 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211, 0x7d10,
415 0xd5c4, 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc,
416 0x0de8, 0x7003, 0x0001, 0x7007, 0x0006, 0x711a, 0x721e, 0x7d10,
417 0xd5c4, 0x0110, 0x7322, 0x7426, 0xa084, 0x01e0, 0x0005, 0x7848,
418 0xa065, 0x0120, 0x2c04, 0x784a, 0x2063, 0x0000, 0x0005, 0x00f6,
419 0x2079, 0x4700, 0x7848, 0x2062, 0x2c00, 0xa005, 0x1110, 0x080c,
420 0x2575, 0x784a, 0x00fe, 0x0005, 0x2011, 0x9100, 0x7a4a, 0x7bc4,
421 0x8319, 0x0128, 0xa280, 0x0032, 0x2012, 0x2010, 0x0cc8, 0x2013,
422 0x0000, 0x0005, 0x0016, 0x0026, 0xd7fc, 0x1118, 0x2011, 0x4cc0,
423 0x0010, 0x2011, 0x6cc0, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
424 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa268, 0x002e,
425 0x001e, 0x0005, 0x0c39, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808,
426 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x00e6, 0xd7fc, 0x1128, 0x2009,
427 0x4752, 0x2071, 0x4740, 0x0020, 0x2009, 0x4792, 0x2071, 0x4780,
428 0x210c, 0x6804, 0xa005, 0x0148, 0xa116, 0x1138, 0x2060, 0x6000,
429 0x6806, 0x0016, 0x200b, 0x0000, 0x0018, 0x2009, 0x0000, 0x0016,
430 0x6804, 0xa065, 0x0178, 0x6000, 0x6806, 0x0421, 0x080c, 0x1db2,
431 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x6812, 0x1d88, 0x7910,
432 0xc1a5, 0x7912, 0x001e, 0x6902, 0x6906, 0x2d00, 0x2060, 0x080c,
433 0x26bf, 0x00ee, 0x0005, 0xa065, 0x0160, 0x2008, 0x609c, 0xa005,
434 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x7848, 0x794a,
435 0x2062, 0x0005, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c,
436 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a,
437 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, 0x1128, 0x2071, 0x4740,
438 0x2031, 0x47c0, 0x0020, 0x2071, 0x4780, 0x2031, 0x49c0, 0x704c,
439 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, 0x8000, 0x704e, 0xa006,
440 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x4740, 0x0010,
441 0x2079, 0x4780, 0x080c, 0x1b9a, 0x2091, 0x8000, 0x6804, 0x780a,
442 0xa065, 0x05f0, 0x0030, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065,
443 0x05b8, 0x6010, 0xa306, 0x1db8, 0x600c, 0xa206, 0x1da0, 0x2c28,
444 0x7848, 0xac06, 0x1108, 0x0448, 0x6804, 0xac06, 0x1140, 0x6000,
445 0x2060, 0x6806, 0xa005, 0x1118, 0x6803, 0x0000, 0x0048, 0x6400,
446 0x7808, 0x2060, 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00, 0x6802,
447 0x2560, 0x080c, 0x1c02, 0x601b, 0x0005, 0x6023, 0x0020, 0x00fe,
448 0x080c, 0x1db2, 0x00f6, 0x7908, 0x8109, 0x790a, 0x6810, 0x8001,
449 0x6812, 0x1118, 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff, 0xa005,
450 0x00fe, 0x0005, 0x0076, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0108,
451 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x2091,
452 0x8000, 0x080c, 0x1bb2, 0x8738, 0xa784, 0x001f, 0x1dd0, 0xa7bc,
453 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d90, 0x2091,
454 0x8001, 0x007e, 0x0005, 0x786c, 0x2009, 0x8f74, 0x210c, 0xa10d,
455 0x0118, 0xa065, 0x0804, 0x20a1, 0x2061, 0x0000, 0x6018, 0xd084,
456 0x11b8, 0x7810, 0xd08c, 0x0130, 0xc08c, 0x7812, 0xc7fc, 0x2069,
457 0x4740, 0x0028, 0xc08d, 0x7812, 0x2069, 0x4780, 0xc7fd, 0x2091,
458 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, 0xa005, 0x1108,
459 0x0005, 0xa08c, 0xfff0, 0x0110, 0x080c, 0x2575, 0x0002, 0x1cd7,
460 0x1cda, 0x1ce0, 0x1ce4, 0x1cd8, 0x1ce8, 0x1cd8, 0x1cd8, 0x1cd8,
461 0x1cee, 0x1d18, 0x1d1b, 0x1d20, 0x1d29, 0x1cd8, 0x1cd8, 0x0005,
462 0x080c, 0x2575, 0x080c, 0x1c7a, 0x2001, 0x8001, 0x0804, 0x1d32,
463 0x2001, 0x8003, 0x0804, 0x1d32, 0x2001, 0x8004, 0x0804, 0x1d32,
464 0x080c, 0x1c7a, 0x2001, 0x8006, 0x0804, 0x1d32, 0x2011, 0x800a,
465 0x2091, 0x8000, 0xd7fc, 0x1118, 0x2069, 0x4740, 0x0010, 0x2069,
466 0x4780, 0x2038, 0x6800, 0xa086, 0x0000, 0x0120, 0x6f1e, 0x2091,
467 0x8001, 0x0005, 0x0026, 0x6870, 0xa0bc, 0xff00, 0x2041, 0x0021,
468 0x2049, 0x0004, 0x2051, 0x0010, 0x080c, 0x1bb2, 0x8738, 0xa784,
469 0x001f, 0x1dd0, 0x2091, 0x8001, 0x000e, 0x6970, 0x71c6, 0x00d0,
470 0x2001, 0x800c, 0x00b8, 0x080c, 0x1c7a, 0x2001, 0x800d, 0x0090,
471 0xd7fc, 0x0110, 0x78e4, 0x0008, 0x78e0, 0x70c6, 0x2001, 0x800e,
472 0x0048, 0xd7fc, 0x0110, 0x78ec, 0x0008, 0x78e8, 0x70c6, 0x2001,
473 0x800f, 0x0000, 0x70c2, 0xd7fc, 0x1118, 0x70db, 0x0000, 0x0010,
474 0x70db, 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080,
475 0x0005, 0xac80, 0x0001, 0x81ff, 0x0518, 0x2099, 0x0030, 0x20a0,
476 0x700c, 0xa084, 0x07ff, 0x0100, 0x7018, 0x0006, 0x701c, 0x0006,
477 0x7020, 0x0006, 0x7024, 0x0006, 0x7112, 0x81ac, 0x721a, 0x731e,
478 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b,
479 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x1110, 0x53a5, 0xa006,
480 0x7003, 0x0000, 0x7007, 0x0004, 0x000e, 0x7026, 0x000e, 0x7022,
481 0x000e, 0x701e, 0x000e, 0x701a, 0x0005, 0x2011, 0x0020, 0x2009,
482 0x0010, 0x6b0a, 0x6c0e, 0x681f, 0x0201, 0x6803, 0xfd20, 0x6807,
483 0x0038, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109,
484 0x1d80, 0x0005, 0x70ec, 0xd0dc, 0x1520, 0x2029, 0x0001, 0x7814,
485 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019, 0x0c0a, 0x2021, 0x000a,
486 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x0070, 0x70ec, 0xd0e4,
487 0x1128, 0x2019, 0x180c, 0x2021, 0x000c, 0x0030, 0x2019, 0x1809,
488 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a, 0x6c0e, 0x6d1e, 0x6807,
489 0x0038, 0x0005, 0x6004, 0x6086, 0x2c08, 0x2063, 0x0000, 0x7868,
490 0xa005, 0x796a, 0x0110, 0x2c02, 0x0008, 0x796e, 0x0005, 0x00c6,
491 0x2061, 0x4700, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068,
492 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008, 0x616e, 0x00ce, 0x0005,
493 0x2091, 0x8000, 0x2c04, 0x786e, 0xa005, 0x1108, 0x786a, 0x2091,
494 0x8001, 0x609c, 0xa005, 0x0188, 0x00c6, 0x2060, 0x2008, 0x609c,
495 0xa005, 0x0138, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, 0xa005,
496 0x1dc8, 0x7848, 0x794a, 0x2062, 0x00ce, 0x7848, 0x2062, 0x609f,
497 0x0000, 0xac85, 0x0000, 0x1110, 0x080c, 0x2575, 0x784a, 0x0005,
498 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x1208, 0xa200,
499 0x1f04, 0x1dfc, 0x8086, 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010,
500 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a,
501 0x1220, 0x1f04, 0x1e0c, 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04,
502 0x1e0c, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080, 0x000e, 0x015e,
503 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8, 0x7d74, 0x70d0,
504 0xa506, 0x0904, 0x1eda, 0x7810, 0x2050, 0x080c, 0x1b77, 0x0904,
505 0x1eda, 0xa046, 0x7970, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040,
506 0x1208, 0x0030, 0x72d0, 0xa206, 0x0118, 0x8840, 0x2009, 0x0080,
507 0x00c6, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020,
508 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0110, 0x080c,
509 0x1b77, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, 0x2091, 0x8001,
510 0xa08c, 0x01e0, 0x1538, 0x53a5, 0x8cff, 0x1120, 0x88ff, 0x0904,
511 0x1ec7, 0x0050, 0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001,
512 0x20a0, 0x53a5, 0x0804, 0x1ec7, 0xa046, 0x7218, 0x731c, 0xdac4,
513 0x0110, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3,
514 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0xdac4, 0x0118, 0x7422,
515 0x7526, 0xa006, 0x7007, 0x0004, 0x0904, 0x1ec7, 0x8cff, 0x0110,
516 0x080c, 0x1b7f, 0x00ce, 0x080c, 0x1b7f, 0xa046, 0x7888, 0x8000,
517 0x788a, 0xa086, 0x0002, 0x01c0, 0x7a7c, 0x7b78, 0xdac4, 0x0110,
518 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399,
519 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, 0x731e, 0xdac4,
520 0x0588, 0x7422, 0x7526, 0x0470, 0x6014, 0xd0fc, 0x1118, 0x2069,
521 0x4740, 0x0010, 0x2069, 0x4780, 0x2091, 0x8000, 0x681f, 0x0002,
522 0x88ff, 0x0120, 0xa046, 0x788c, 0x2060, 0x0c70, 0x788b, 0x0000,
523 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0098, 0x00ce,
524 0x788b, 0x0000, 0x080c, 0x205c, 0x6004, 0xa084, 0x000f, 0x0059,
525 0x88ff, 0x0130, 0x788c, 0x2060, 0x6004, 0xa084, 0x000f, 0x0019,
526 0x0804, 0x1e26, 0x0005, 0x0002, 0x1eec, 0x1f07, 0x1f20, 0x1eec,
527 0x1f2d, 0x1efd, 0x1eec, 0x1eec, 0x1eec, 0x1f05, 0x1f1e, 0x1eec,
528 0x1eec, 0x1eec, 0x1eec, 0x1eec, 0x2039, 0x0400, 0x78bc, 0xa705,
529 0x78be, 0x6008, 0xa705, 0x600a, 0x080c, 0x1f69, 0x609c, 0x78ba,
530 0x609f, 0x0000, 0x080c, 0x2048, 0x0005, 0x78bc, 0xd0c4, 0x0108,
531 0x0c58, 0x601c, 0xc0bd, 0x601e, 0x0030, 0x080c, 0x2086, 0x78bc,
532 0xd0c4, 0x0108, 0x0c08, 0x78bf, 0x0000, 0x6004, 0x8007, 0xa084,
533 0x00ff, 0x78b2, 0x8001, 0x0138, 0x080c, 0x1f69, 0x0120, 0x78bc,
534 0xc0c5, 0x78be, 0x0010, 0x0804, 0x1f84, 0x0005, 0x080c, 0x2083,
535 0x78bc, 0xa08c, 0x0e00, 0x1110, 0xd0c4, 0x1108, 0x0828, 0x080c,
536 0x1f69, 0x1110, 0x0804, 0x1f84, 0x0005, 0x78bc, 0xd0c4, 0x0110,
537 0x0804, 0x1eec, 0x78bf, 0x0000, 0x6714, 0x2011, 0x0001, 0x22a8,
538 0x6018, 0xa084, 0x00ff, 0xa005, 0x0188, 0xa7bc, 0xff00, 0x20a9,
539 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc, 0x8000, 0x2011, 0x0002,
540 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108, 0x00c0, 0x080c, 0x1b9a,
541 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808,
542 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x1f04,
543 0x1f51, 0x8211, 0x0118, 0x20a9, 0x0100, 0x0c58, 0x080c, 0x1b7f,
544 0x0005, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x1110,
545 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002, 0x78b8, 0xad06, 0x1108,
546 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1130, 0x78bc, 0xc0c4, 0x78be,
547 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6, 0xa02e, 0x2530, 0x7dba,
548 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff,
549 0x601e, 0xa984, 0x0060, 0x0160, 0x080c, 0x3fe9, 0x86ff, 0x1140,
550 0x85ff, 0x1130, 0x2039, 0x0800, 0x080c, 0x2048, 0x0804, 0x2046,
551 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x4780, 0xd7fc,
552 0x1110, 0x2071, 0x4740, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
553 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71c0, 0xa168,
554 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71c4,
555 0xa100, 0x60c2, 0x2091, 0x8000, 0x7814, 0xd0c4, 0x0138, 0xd7fc,
556 0x1118, 0xd0f4, 0x1140, 0x0010, 0xd0fc, 0x1128, 0x6e08, 0xd684,
557 0x01f0, 0xd9fc, 0x11e0, 0x2091, 0x8001, 0x080c, 0x1c02, 0x2091,
558 0x8000, 0x080c, 0x1db2, 0x2091, 0x8001, 0x7814, 0xd0c4, 0x0904,
559 0x2046, 0xd7fc, 0x1120, 0xd0f4, 0x1130, 0x0804, 0x2046, 0xd0fc,
560 0x1110, 0x0804, 0x2046, 0x601b, 0x0021, 0x0804, 0x2046, 0x6024,
561 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10, 0x6814, 0xa202,
562 0x0268, 0x0160, 0x2091, 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba,
563 0x609f, 0x0000, 0x080c, 0x2048, 0x0804, 0x2046, 0x2c08, 0xd9fc,
564 0x01f0, 0x6800, 0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084, 0x0002,
565 0x0168, 0x7048, 0xa206, 0x1150, 0x6b04, 0x2160, 0x2304, 0x6002,
566 0xa005, 0x1108, 0x6902, 0x2260, 0x6102, 0x0098, 0x2d00, 0x2060,
567 0x080c, 0x26bf, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0050, 0x6800,
568 0x6902, 0xa065, 0x0110, 0x6102, 0x0008, 0x6906, 0x2160, 0x6003,
569 0x0000, 0x2160, 0xd9fc, 0x0118, 0xa6b4, 0xfffc, 0x6e0a, 0x6810,
570 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4,
571 0x0128, 0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1c13, 0x00ee, 0x0005,
572 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x080c, 0x1db2, 0x2091,
573 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c, 0x78ba, 0x609f, 0x0000,
574 0x0c78, 0x78b6, 0x78ba, 0x0005, 0x7970, 0x7874, 0x2818, 0xd384,
575 0x0118, 0x8000, 0xa112, 0x0220, 0x8000, 0xa112, 0x1278, 0xc384,
576 0x7a7c, 0x721a, 0x7a78, 0x721e, 0xdac4, 0x0120, 0x7a84, 0x7222,
577 0x7a80, 0x7226, 0xa006, 0xd384, 0x0108, 0x8000, 0x7876, 0x70d2,
578 0x781c, 0xa005, 0x0138, 0x8001, 0x781e, 0x1120, 0x0e04, 0x2082,
579 0x2091, 0x4080, 0x0005, 0x2039, 0x2098, 0x0010, 0x2039, 0x209e,
580 0x2704, 0xa005, 0x0160, 0xac00, 0x2068, 0x6908, 0x6810, 0x6912,
581 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738, 0x0c88, 0x0005,
582 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b,
583 0x0000, 0x2041, 0x0000, 0x780c, 0x0002, 0x224a, 0x2225, 0x20a9,
584 0x2119, 0x2039, 0x8f74, 0x2734, 0x7d10, 0x00c0, 0x6084, 0xa086,
585 0x0103, 0x1904, 0x2103, 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff,
586 0x11d8, 0x0804, 0x2103, 0x8603, 0xa080, 0x8f55, 0x620c, 0x2202,
587 0x8000, 0x6210, 0x2202, 0x080c, 0x1dd0, 0x8630, 0xa68e, 0x000f,
588 0x0904, 0x2184, 0x786c, 0xa065, 0x1d08, 0x7808, 0xa602, 0x1220,
589 0xd5ac, 0x1110, 0x263a, 0x0005, 0xa682, 0x0003, 0x1a04, 0x2184,
590 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x11f8, 0x2011,
591 0x8f55, 0x2204, 0x70c6, 0x8210, 0x2204, 0x70ca, 0xd684, 0x1130,
592 0x8210, 0x2204, 0x70da, 0x8210, 0x2204, 0x70de, 0xa685, 0x8020,
593 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf,
594 0x7812, 0x2091, 0x8001, 0x203b, 0x0000, 0x0005, 0x7810, 0xc0ad,
595 0x7812, 0x0804, 0x2184, 0x263a, 0x080c, 0x2250, 0x1904, 0x226c,
596 0x786c, 0xa065, 0x1904, 0x20ae, 0x2091, 0x8000, 0x7810, 0xa084,
597 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0804,
598 0x226c, 0x2039, 0x8f74, 0x2734, 0x7d10, 0x00a0, 0x6084, 0xa086,
599 0x0103, 0x1904, 0x216e, 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff,
600 0x11b8, 0x0804, 0x216e, 0xa680, 0x8f55, 0x620c, 0x2202, 0x080c,
601 0x1dd0, 0x8630, 0xa68e, 0x001e, 0x0904, 0x2184, 0x786c, 0xa065,
602 0x1d28, 0x7808, 0xa602, 0x1220, 0xd5ac, 0x1110, 0x263a, 0x0005,
603 0xa682, 0x0006, 0x1a04, 0x2184, 0x2091, 0x8000, 0x2069, 0x0000,
604 0x6818, 0xd084, 0x11f8, 0x2011, 0x8f55, 0x2009, 0x8f4e, 0x26a8,
605 0x211c, 0x2204, 0x201a, 0x8108, 0x8210, 0x1f04, 0x2150, 0xa685,
606 0x8030, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084,
607 0xffcf, 0x7812, 0x2091, 0x8001, 0xa006, 0x2009, 0x8f75, 0x200a,
608 0x203a, 0x0005, 0x7810, 0xc0ad, 0x7812, 0x00b0, 0x263a, 0x080c,
609 0x2250, 0x1904, 0x226c, 0x786c, 0xa065, 0x1904, 0x211e, 0x2091,
610 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812,
611 0x2091, 0x8001, 0x0804, 0x226c, 0x2091, 0x8000, 0x7007, 0x0004,
612 0x7994, 0x70d4, 0xa102, 0x0228, 0x0168, 0x7b90, 0xa302, 0x1150,
613 0x0010, 0x8002, 0x1138, 0x263a, 0x7810, 0xc0ad, 0x7812, 0x2091,
614 0x8001, 0x0005, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c, 0x810c,
615 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004, 0x8004,
616 0x7a9c, 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4,
617 0x0130, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1,
618 0x0030, 0x7003, 0x0000, 0x2009, 0x8f54, 0x260a, 0x8109, 0x2198,
619 0x2104, 0xd084, 0x0108, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6,
620 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a,
621 0x1208, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0140, 0x810f,
622 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107,
623 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211, 0xd4c4,
624 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0de8,
625 0xa084, 0x01e0, 0x01d0, 0x7d10, 0x2031, 0x8f54, 0x2634, 0x78a8,
626 0x8000, 0x78aa, 0xd08c, 0x1138, 0x7007, 0x0006, 0x7004, 0xd094,
627 0x1de8, 0x0804, 0x2186, 0x2069, 0x4747, 0x206b, 0x0003, 0x78ac,
628 0xa085, 0x0300, 0x78ae, 0xa006, 0x0048, 0x2030, 0x75d6, 0x2091,
629 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001,
630 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a, 0x721e,
631 0xd5c4, 0x0110, 0x7322, 0x7426, 0x0005, 0x6084, 0xa086, 0x0103,
632 0x11d8, 0x6114, 0x6018, 0xa105, 0x11b8, 0x2069, 0x0000, 0x6818,
633 0xd084, 0x1190, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020,
634 0x681b, 0x0001, 0x2091, 0x4080, 0x080c, 0x1dd0, 0x0e04, 0x2243,
635 0x786c, 0xa065, 0x1d10, 0x0005, 0x0059, 0x1530, 0x786c, 0xa065,
636 0x19e0, 0x0410, 0x0029, 0x1500, 0x786c, 0xa065, 0x1dd8, 0x00e0,
637 0x6084, 0xa086, 0x0103, 0x1168, 0x6018, 0xc0fc, 0x601a, 0xa086,
638 0x0004, 0x1138, 0x7804, 0xd0a4, 0x0120, 0x080c, 0x1dd0, 0xa006,
639 0x0005, 0x0079, 0x1118, 0xa085, 0x0001, 0x0005, 0x00b9, 0x1110,
640 0x2041, 0x0001, 0x7d10, 0x0005, 0x88ff, 0x0110, 0x2091, 0x4080,
641 0x0005, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x1118, 0xa385, 0x0000,
642 0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184, 0xff00,
643 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
644 0x0018, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0,
645 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018, 0x6028,
646 0xa005, 0x0110, 0x2009, 0x0040, 0x080c, 0x1b34, 0x01d0, 0x78a8,
647 0x8000, 0x78aa, 0xd08c, 0x1510, 0x6014, 0xd0fc, 0x1118, 0x2069,
648 0x4740, 0x0010, 0x2069, 0x4780, 0x2091, 0x8000, 0x681f, 0x0003,
649 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001,
650 0x0068, 0x78ab, 0x0000, 0x080c, 0x1dd0, 0x7990, 0x7894, 0x8000,
651 0xa10a, 0x1208, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010,
652 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2009, 0x4758, 0x0010,
653 0x2009, 0x4798, 0x2091, 0x8000, 0x200a, 0x00f6, 0x2009, 0x4780,
654 0x2079, 0x0100, 0xd7fc, 0x1120, 0x2009, 0x4740, 0x2079, 0x0200,
655 0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009, 0x4745,
656 0x0010, 0x2009, 0x4785, 0x2104, 0xa005, 0x1130, 0x7830, 0xa084,
657 0x00c0, 0x1110, 0x781b, 0x0052, 0x00fe, 0x0005, 0x2009, 0x0002,
658 0x2069, 0x4700, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x234b,
659 0x2071, 0x4780, 0x2079, 0x0100, 0x2021, 0x49bf, 0x784b, 0x000f,
660 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x2019, 0x3e37, 0x0030,
661 0x20a1, 0x012b, 0x2019, 0x3e37, 0xd184, 0x0110, 0x20a1, 0x022b,
662 0x2304, 0xa005, 0x0140, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398,
663 0x53a6, 0x3318, 0x0ca8, 0x789b, 0x0000, 0x789b, 0x0020, 0x20a9,
664 0x0010, 0x78af, 0x0000, 0x78af, 0x2020, 0x1f04, 0x2329, 0x7003,
665 0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd, 0x080c,
666 0x246c, 0x001e, 0x7020, 0xa084, 0x000f, 0xa085, 0x6300, 0x7806,
667 0x780f, 0x9000, 0x7843, 0x00d8, 0x7853, 0x0090, 0x780b, 0x2f08,
668 0x7452, 0x704f, 0x0000, 0x8109, 0x0140, 0x2071, 0x4740, 0x2079,
669 0x0200, 0x2021, 0x47bf, 0x0804, 0x2306, 0x080c, 0x2526, 0x0005,
670 0x0016, 0x2011, 0x0101, 0xd1bc, 0x1110, 0x2011, 0x0201, 0xa18c,
671 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x001e, 0x080c,
672 0x246c, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011, 0x0201,
673 0x20a9, 0x0009, 0x810b, 0x1f04, 0x2372, 0xa18c, 0x0e00, 0x2204,
674 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005, 0x2019, 0x0002, 0x2009,
675 0x0101, 0x20a9, 0x0005, 0x8213, 0x1f04, 0x2383, 0xa294, 0x00e0,
676 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0118, 0x2009,
677 0x0201, 0x0c78, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011,
678 0x0201, 0x20a9, 0x000c, 0x810b, 0x1f04, 0x239b, 0xa18c, 0xf000,
679 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0x2011, 0x0102,
680 0xd3fc, 0x1110, 0x2011, 0x0202, 0x2204, 0xa09c, 0x0f30, 0xa084,
681 0xf0cf, 0xa105, 0x2012, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc,
682 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020,
683 0x609a, 0x62ac, 0x63ac, 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100,
684 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080,
685 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005,
686 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc,
687 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020,
688 0x0118, 0xc2ac, 0xa39d, 0x4000, 0xc3ec, 0xd3b4, 0x1108, 0xc3ed,
689 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091,
690 0x8000, 0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x2450, 0xd1fc,
691 0x0118, 0x2061, 0x8ed0, 0x0010, 0x2061, 0x8dc0, 0x080c, 0x2458,
692 0x0560, 0x20a9, 0x0101, 0xd1fc, 0x0118, 0x2061, 0x8dd0, 0x0010,
693 0x2061, 0x8cc0, 0x00c6, 0x080c, 0x2458, 0x0128, 0x00ce, 0x8c60,
694 0x1f04, 0x2412, 0x04a8, 0x000e, 0xd1fc, 0x0128, 0xa082, 0x8dd0,
695 0x2071, 0x4780, 0x0020, 0xa082, 0x8cc0, 0x2071, 0x4740, 0x7076,
696 0x7172, 0x2138, 0x2001, 0x0004, 0x7062, 0x707f, 0x000f, 0x71d0,
697 0xc1c4, 0x71d2, 0x080c, 0x22cb, 0x00c0, 0xd1fc, 0x1118, 0x2071,
698 0x4740, 0x0010, 0x2071, 0x4780, 0x6020, 0xc0dd, 0x6022, 0x7172,
699 0x2138, 0x2c00, 0x707a, 0x2001, 0x0006, 0x7062, 0x707f, 0x000f,
700 0x71d0, 0xc1c4, 0x71d2, 0x080c, 0x22cb, 0x2001, 0x0000, 0x0010,
701 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005,
702 0x2c04, 0xa005, 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c,
703 0xa206, 0x1128, 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000,
704 0x0c80, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x2079,
705 0x4780, 0x2071, 0x0100, 0xd1bc, 0x1120, 0x2079, 0x4740, 0x2071,
706 0x0200, 0x7920, 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x1110, 0x001e,
707 0x0060, 0x810b, 0x810b, 0x810b, 0x810b, 0x000e, 0xa18d, 0x0800,
708 0xd0bc, 0x1110, 0xa18d, 0x0f00, 0x2104, 0x00ee, 0x00fe, 0x0005,
709 0x2001, 0x4701, 0x2004, 0xd0ac, 0x1138, 0x68e4, 0xd0ac, 0x0120,
710 0xa084, 0x0006, 0x1108, 0x0009, 0x0005, 0x6014, 0x00e6, 0x0036,
711 0x2018, 0x2071, 0x4c40, 0xd0fc, 0x1110, 0x2071, 0x4bc0, 0x8007,
712 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084,
713 0x000a, 0x1904, 0x2523, 0x7108, 0xa194, 0xff00, 0x0904, 0x2523,
714 0xa18c, 0x00ff, 0x701c, 0xa084, 0xff00, 0x01c0, 0x7004, 0xa085,
715 0x003a, 0x7006, 0x2001, 0x0009, 0xa102, 0x16d8, 0x2001, 0x000a,
716 0xa102, 0x16d0, 0x2001, 0x000c, 0xa102, 0x16c8, 0x701c, 0xa084,
717 0x00ff, 0x701e, 0x7004, 0xa084, 0xffdf, 0x7006, 0x2001, 0x000a,
718 0xa106, 0x01a8, 0x2001, 0x000c, 0xa106, 0x01a0, 0x2001, 0x0012,
719 0xa106, 0x0198, 0x2001, 0x0014, 0xa106, 0x0190, 0x2001, 0x0019,
720 0xa106, 0x0188, 0x2001, 0x0032, 0xa106, 0x0180, 0x00d8, 0x2009,
721 0x000c, 0x00d0, 0x2009, 0x0012, 0x00b8, 0x2009, 0x0014, 0x00a0,
722 0x2009, 0x0019, 0x0088, 0x2009, 0x0020, 0x0070, 0x2009, 0x003f,
723 0x0058, 0x2009, 0x000a, 0x0040, 0x2009, 0x000c, 0x0028, 0x2009,
724 0x0019, 0x0010, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x7004,
725 0xa085, 0x000a, 0x7006, 0x2071, 0x4700, 0x7004, 0xd0bc, 0x0158,
726 0xd3fc, 0x1120, 0x73ea, 0x2071, 0x4740, 0x0018, 0x73ee, 0x2071,
727 0x4780, 0x701f, 0x000d, 0x003e, 0x00ee, 0x0005, 0x2001, 0x01ff,
728 0x2004, 0xd0fc, 0x11d0, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
729 0x12a0, 0x2071, 0x0200, 0x71ec, 0xa18c, 0x1c00, 0x810f, 0x810c,
730 0x810c, 0x2079, 0x0100, 0x78ec, 0xa084, 0x1c00, 0x8007, 0x8004,
731 0x8004, 0xa105, 0xa08a, 0x0007, 0x0208, 0x0005, 0x0002, 0x2574,
732 0x255b, 0x2574, 0x255b, 0x254e, 0x2568, 0x254e, 0x7008, 0xa084,
733 0xc3ff, 0xa085, 0x3000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085,
734 0x3000, 0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x2000,
735 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x780a, 0x0005,
736 0x7008, 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x700a, 0x7808, 0xa084,
737 0xc3ff, 0xa085, 0x0c00, 0x780a, 0x0005, 0x0e04, 0x2575, 0x2091,
738 0x8000, 0x2071, 0x0000, 0x0006, 0x7018, 0xd084, 0x1de8, 0x000e,
739 0x2071, 0x0010, 0x70ca, 0x000e, 0x70c6, 0x70c3, 0x8002, 0x70db,
740 0x0a04, 0x70df, 0x002a, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
741 0x4080, 0x0cf8, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708a,
742 0x758e, 0x7492, 0x7696, 0x779a, 0xa594, 0x003f, 0xd4f4, 0x0138,
743 0xd7bc, 0x1128, 0xa784, 0x007d, 0x1904, 0x3c9c, 0x0871, 0xa49c,
744 0x000f, 0xa382, 0x0004, 0x0320, 0xa3a6, 0x0007, 0x1930, 0x2418,
745 0x8507, 0xa084, 0x000f, 0x0002, 0x2b6c, 0x2c57, 0x2c95, 0x2efb,
746 0x3279, 0x32d0, 0x3376, 0x3405, 0x34d9, 0x35ab, 0x25c7, 0x25c4,
747 0x299e, 0x2a85, 0x324d, 0x25c4, 0x080c, 0x2575, 0x0005, 0xa006,
748 0x0038, 0x7808, 0xc08d, 0x780a, 0xa006, 0x7002, 0x704a, 0x7042,
749 0x70ce, 0x705c, 0xa005, 0x1904, 0x2718, 0x7060, 0xa084, 0x0007,
750 0x0002, 0x25e1, 0x2652, 0x265a, 0x2663, 0x266c, 0x26fe, 0x2675,
751 0x2652, 0x7830, 0xd0bc, 0x1d10, 0x71d0, 0xd1bc, 0x19f8, 0xd1b4,
752 0x1904, 0x262f, 0x70a0, 0xa086, 0x0001, 0x09c0, 0x7014, 0xa005,
753 0x19a8, 0x70b0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0080,
754 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
755 0xa886, 0x0001, 0x0118, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d,
756 0x6e1c, 0x2001, 0x0010, 0x0804, 0x284b, 0x705c, 0xa005, 0x1904,
757 0x25c6, 0x00c6, 0x00d6, 0x70b0, 0xa06d, 0x6800, 0xa065, 0xa055,
758 0x789b, 0x0080, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804,
759 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0118, 0x69bc, 0x7daa, 0x79aa,
760 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0804, 0x284b, 0x080c,
761 0x3c5b, 0x1904, 0x25c6, 0x781b, 0x0068, 0x70b8, 0xa06d, 0x68b4,
762 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808,
763 0xc08d, 0x780a, 0x68bc, 0x703e, 0xc1b4, 0x71d2, 0x70b4, 0xa065,
764 0x68c0, 0x7056, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009,
765 0x7042, 0x0005, 0x080c, 0x3c5b, 0x1120, 0x781b, 0x0054, 0x7003,
766 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1128, 0x2011, 0x000c, 0x0419,
767 0x7003, 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1128, 0x2011, 0x0006,
768 0x00d1, 0x7003, 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1128, 0x2011,
769 0x000d, 0x0089, 0x7003, 0x0004, 0x0005, 0x080c, 0x3c5b, 0x1150,
770 0x2011, 0x0006, 0x0041, 0x7078, 0x707b, 0x0000, 0x2068, 0x704a,
771 0x7003, 0x0004, 0x0005, 0x7170, 0xc1fc, 0x8107, 0x7882, 0x789b,
772 0x0080, 0xa286, 0x000c, 0x1120, 0x7aaa, 0x2001, 0x0001, 0x0098,
773 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d, 0x0120,
774 0x7aaa, 0x2001, 0x0002, 0x0038, 0x78ab, 0x0020, 0x7174, 0x79aa,
775 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060, 0x78aa, 0x785b, 0x0004,
776 0x781b, 0x0113, 0x080c, 0x3c6e, 0x707f, 0x000f, 0x70d0, 0xd0b4,
777 0x0168, 0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084,
778 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x0005, 0x7014,
779 0xa005, 0x1138, 0x70d0, 0xd0b4, 0x0128, 0x70b4, 0xac06, 0x1110,
780 0x0c29, 0x0005, 0x0016, 0x71a0, 0xa186, 0x0001, 0x0528, 0x00d6,
781 0x0026, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b0, 0x2068, 0x6800,
782 0xac06, 0x0120, 0x8211, 0x01b0, 0x00c9, 0x0cc8, 0x00c6, 0x2100,
783 0x2011, 0x0001, 0xa212, 0x70b0, 0x2068, 0x6800, 0x2060, 0x6008,
784 0xa084, 0xfbef, 0x600a, 0x8211, 0x0110, 0x0041, 0x0cb0, 0x70a3,
785 0x0001, 0x00ce, 0x002e, 0x00de, 0x001e, 0x0005, 0xade8, 0x0005,
786 0x70a8, 0xad06, 0x1110, 0x70a4, 0x2068, 0x0005, 0x080c, 0x3c5b,
787 0x1904, 0x25c6, 0x7078, 0x2068, 0x7770, 0x080c, 0x3b95, 0x2c50,
788 0x080c, 0x3cf6, 0x789b, 0x0080, 0x6814, 0xa084, 0x001f, 0xc0bd,
789 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0804, 0x2850,
790 0x080c, 0x3c5b, 0x1904, 0x25c6, 0x789b, 0x0080, 0x705c, 0x2068,
791 0x6f14, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6, 0x70b4,
792 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a,
793 0x00ce, 0x080c, 0x3b95, 0x2c50, 0x080c, 0x3cf6, 0x6824, 0xa005,
794 0x0130, 0xa082, 0x0006, 0x0208, 0x0010, 0x6827, 0x0005, 0x6814,
795 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001,
796 0x2001, 0x0003, 0x0804, 0x2850, 0xc28d, 0x72d2, 0x72bc, 0xa200,
797 0xa015, 0x7150, 0x8108, 0xa12a, 0x0208, 0x71bc, 0x2164, 0x6504,
798 0x85ff, 0x1170, 0x7152, 0x8421, 0x1da8, 0x70d0, 0xd08c, 0x0128,
799 0x70cc, 0xa005, 0x1110, 0x70cf, 0x000a, 0x0005, 0x2200, 0x0c90,
800 0x70d0, 0xc08c, 0x70d2, 0x70cf, 0x0000, 0x6034, 0xa005, 0x1db0,
801 0x6708, 0xa784, 0x073f, 0x01d0, 0xd7d4, 0x1d80, 0xa784, 0x0021,
802 0x1d68, 0xa784, 0x0002, 0x0130, 0xa784, 0x0004, 0x0d38, 0xa7bc,
803 0xfffb, 0x670a, 0xa784, 0x0218, 0x1d08, 0xa784, 0x0100, 0x0130,
804 0x6018, 0xa005, 0x19d8, 0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823,
805 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0128, 0x601c, 0xa302,
806 0x0220, 0x0118, 0x0858, 0x83ff, 0x1948, 0x2d58, 0x2c50, 0x7152,
807 0xd7bc, 0x1120, 0x7028, 0x6022, 0x603a, 0x0010, 0xc7bc, 0x670a,
808 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001, 0x6b14,
809 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0110, 0xd684, 0x0110,
810 0xa39c, 0xffbf, 0xd6a4, 0x0110, 0xa39d, 0x0020, 0xa684, 0x000e,
811 0x1904, 0x2802, 0xc7a5, 0x670a, 0x2c00, 0x68c6, 0x77a0, 0xa786,
812 0x0001, 0x1178, 0x70d0, 0xd0b4, 0x1160, 0x7000, 0xa082, 0x0002,
813 0x1240, 0x7830, 0xd0bc, 0x1128, 0x789b, 0x0080, 0x7baa, 0x0804,
814 0x2849, 0x8739, 0x77a2, 0x2750, 0x77ac, 0xa7b0, 0x0005, 0x70a8,
815 0xa606, 0x1108, 0x76a4, 0x76ae, 0x2c3a, 0x8738, 0x2d3a, 0x8738,
816 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc, 0x0150,
817 0x2091, 0x8000, 0x2091, 0x303d, 0x70d0, 0xa084, 0x303d, 0x2091,
818 0x8000, 0x2090, 0xaad5, 0x0000, 0x0120, 0x8421, 0x2200, 0x1904,
819 0x2751, 0x0005, 0xd1dc, 0x0904, 0x37f1, 0x2029, 0x0020, 0xd69c,
820 0x1120, 0x8528, 0xd68c, 0x1108, 0x8528, 0x8840, 0x6f14, 0x610c,
821 0x8108, 0xa18c, 0x00ff, 0x70c8, 0xa160, 0x2c64, 0x8cff, 0x0188,
822 0x6014, 0xa706, 0x1dd0, 0x60b8, 0x8001, 0x60ba, 0x1d88, 0x2a60,
823 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x1904, 0x2751,
824 0x0005, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, 0x6008,
825 0xc0d5, 0x600a, 0x77a0, 0xa786, 0x0001, 0x1904, 0x27d9, 0x70d0,
826 0xd0b4, 0x1904, 0x27d9, 0x7000, 0xa082, 0x0002, 0x1a04, 0x27d9,
827 0x7830, 0xd0bc, 0x1904, 0x27d9, 0x789b, 0x0080, 0x7baa, 0x7daa,
828 0x79aa, 0x2001, 0x0002, 0x0006, 0x6018, 0x8000, 0x601a, 0x0008,
829 0x0006, 0x2960, 0x6104, 0x2a60, 0x080c, 0x3d09, 0x1590, 0xa184,
830 0x0018, 0x0180, 0xa184, 0x0010, 0x0118, 0x080c, 0x399a, 0x1548,
831 0xa184, 0x0008, 0x0138, 0x69a0, 0xa184, 0x0600, 0x1118, 0x080c,
832 0x38b8, 0x00f8, 0x69a0, 0xa184, 0x1e00, 0x0528, 0xa184, 0x0800,
833 0x0178, 0x00c6, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104,
834 0xa18d, 0x0010, 0x6106, 0x00ce, 0x080c, 0x399a, 0x1150, 0x69a0,
835 0xa184, 0x0200, 0x0118, 0x080c, 0x38fd, 0x0018, 0xa184, 0x0400,
836 0x19f0, 0x69a0, 0xa184, 0x1000, 0x0130, 0x6914, 0xa18c, 0xff00,
837 0x810f, 0x080c, 0x23c5, 0x002e, 0xa68c, 0x00e0, 0xa684, 0x0060,
838 0x0128, 0xa086, 0x0060, 0x1110, 0xa18d, 0x4000, 0xa18d, 0x0104,
839 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a,
840 0xd6bc, 0x0168, 0xc0fc, 0x7083, 0x0000, 0xa08a, 0x000d, 0x0328,
841 0xa08a, 0x000c, 0x7182, 0x2001, 0x000c, 0x800c, 0x7186, 0x78aa,
842 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0,
843 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898,
844 0x25a0, 0xa286, 0x0020, 0x1508, 0x70d0, 0xc0b5, 0x70d2, 0x2c00,
845 0x70b6, 0x2d00, 0x70ba, 0x6814, 0xc0fc, 0x8007, 0x7882, 0xa286,
846 0x0002, 0x0904, 0x2921, 0x70a0, 0x8000, 0x70a2, 0x74b0, 0xa498,
847 0x0005, 0x70a8, 0xa306, 0x1108, 0x73a4, 0x73b2, 0xa286, 0x0010,
848 0x0904, 0x25c6, 0x00de, 0x00ce, 0x0005, 0x7000, 0xa005, 0x19e0,
849 0xa286, 0x0002, 0x1904, 0x2938, 0x080c, 0x3c5b, 0x19a8, 0x6814,
850 0xc0fc, 0x8007, 0x7882, 0x2091, 0x8000, 0x781b, 0x0068, 0x68b4,
851 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x2091,
852 0x8001, 0x7808, 0xc08d, 0x780a, 0x0126, 0x00d6, 0x00c6, 0x70d0,
853 0xa084, 0x2e00, 0x2090, 0x00ce, 0x00de, 0x012e, 0x2900, 0x7056,
854 0x68bc, 0x703e, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009,
855 0x7042, 0x7830, 0xd0bc, 0x0140, 0x2091, 0x303d, 0x70d0, 0xa084,
856 0x303d, 0x2091, 0x8000, 0x2090, 0x70a0, 0xa005, 0x1108, 0x0005,
857 0x8421, 0x0de8, 0x724c, 0x70bc, 0xa200, 0xa015, 0x0804, 0x2751,
858 0xa286, 0x0010, 0x1560, 0x080c, 0x3c5b, 0x1904, 0x28cc, 0x6814,
859 0xc0fc, 0x8007, 0x7882, 0x781b, 0x0068, 0x68b4, 0x785a, 0x6894,
860 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a,
861 0x70a0, 0x8000, 0x70a2, 0x74b0, 0xa490, 0x0005, 0x70a8, 0xa206,
862 0x1108, 0x72a4, 0x72b2, 0x2900, 0x7056, 0x68bc, 0x703e, 0x7003,
863 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0x6bb4,
864 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94,
865 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x0068, 0x2900,
866 0x7056, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, 0x0170,
867 0x70d0, 0xa084, 0x2e00, 0xa086, 0x2600, 0x1118, 0x2009, 0x0000,
868 0x0010, 0x2009, 0x0001, 0xa284, 0x000f, 0x0033, 0xad80, 0x0009,
869 0x7042, 0x2d00, 0x704a, 0x0005, 0x299c, 0x4208, 0x4208, 0x41f6,
870 0x4208, 0x299c, 0x299c, 0x299c, 0x080c, 0x2575, 0x7808, 0xa084,
871 0xfffd, 0x780a, 0x00f6, 0x2079, 0x4700, 0x78ac, 0x00fe, 0xd084,
872 0x01c0, 0x7160, 0xa186, 0x0001, 0x0904, 0x2a61, 0xa186, 0x0007,
873 0x0170, 0xa186, 0x0005, 0x1158, 0x7078, 0x2068, 0x681b, 0x0004,
874 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7063,
875 0x0000, 0x70a3, 0x0000, 0x70a4, 0x70ae, 0x70b2, 0x080c, 0x26ae,
876 0x0156, 0x2011, 0x0004, 0x7160, 0xa186, 0x0001, 0x0158, 0xa186,
877 0x0007, 0x1118, 0x701f, 0x0005, 0x0010, 0x701f, 0x0001, 0x70d0,
878 0xc0c5, 0x70d2, 0x2001, 0x470a, 0x2004, 0xa084, 0x00ff, 0xa086,
879 0x0018, 0x0130, 0x7018, 0x7016, 0xa005, 0x1110, 0x70a3, 0x0001,
880 0x0066, 0x080c, 0x3f4e, 0x20a9, 0x0010, 0x2039, 0x0000, 0x080c,
881 0x3a8b, 0xa7b8, 0x0100, 0x1f04, 0x29ef, 0x006e, 0x7000, 0x0002,
882 0x2a2c, 0x2a0a, 0x2a0a, 0x2a02, 0x2a2c, 0x2a2c, 0x2a2c, 0x2a00,
883 0x080c, 0x2575, 0x705c, 0xa005, 0x0538, 0xad06, 0x1118, 0x6800,
884 0x705e, 0x0080, 0x6820, 0xd084, 0x1148, 0x6f14, 0x080c, 0x3b95,
885 0x6008, 0xc0d4, 0x600a, 0x080c, 0x37c7, 0x0020, 0x7058, 0x2060,
886 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0108,
887 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff,
888 0xc09d, 0x6822, 0x080c, 0x1dbf, 0x2011, 0x0004, 0x74c8, 0xa4a0,
889 0x0100, 0x04b1, 0xaea0, 0x0017, 0x0499, 0x20a9, 0x0101, 0x74c8,
890 0x0479, 0x8420, 0x1f04, 0x2a38, 0x70c0, 0x2060, 0x2021, 0x0002,
891 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0198, 0x6018, 0x0016, 0x0006,
892 0x2011, 0x4702, 0x220c, 0xa102, 0x2012, 0x000e, 0x001e, 0xa102,
893 0x0338, 0x6012, 0x1128, 0x2011, 0x4704, 0x2204, 0xc0a5, 0x2012,
894 0x601b, 0x0000, 0xace0, 0x0010, 0x1f04, 0x2a42, 0x8421, 0x1d00,
895 0x015e, 0x7063, 0x0000, 0x7003, 0x0000, 0x704b, 0x0000, 0x0005,
896 0x0046, 0x2404, 0xa005, 0x01a8, 0x2068, 0x6800, 0x0006, 0x6a1a,
897 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e,
898 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1dbf, 0x000e,
899 0x0c48, 0x004e, 0x2023, 0x0000, 0x0005, 0xa282, 0x0003, 0x0310,
900 0x080c, 0x2575, 0x2300, 0x0002, 0x2a8f, 0x2b0c, 0x2b1a, 0xa282,
901 0x0002, 0x0110, 0x080c, 0x2575, 0x7060, 0x7063, 0x0000, 0x707f,
902 0x0000, 0x0022, 0x77d0, 0xc7c5, 0x77d2, 0x0002, 0x2aa6, 0x2aa6,
903 0x2aa8, 0x2ae0, 0x37fb, 0x2aa6, 0x2ae0, 0x2aa6, 0x080c, 0x2575,
904 0x7770, 0x080c, 0x3a8b, 0x7770, 0xa7bc, 0x8f00, 0x080c, 0x3b95,
905 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0x8dc0, 0x0010,
906 0x2021, 0x8ed0, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c, 0x2b34,
907 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021, 0x8cc0,
908 0x0010, 0x2021, 0x8dd0, 0x0046, 0x2009, 0x0005, 0x2011, 0x0010,
909 0x080c, 0x2b34, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2acb, 0x015e,
910 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x25c9, 0x0804, 0x25c9,
911 0x7770, 0x080c, 0x3b95, 0x6018, 0xa005, 0x0520, 0xd7fc, 0x1118,
912 0x2021, 0x8dc0, 0x0010, 0x2021, 0x8ed0, 0x2009, 0x0005, 0x2011,
913 0x0020, 0x080c, 0x2b34, 0x01b0, 0x0156, 0x20a9, 0x0101, 0xd7fc,
914 0x1118, 0x2021, 0x8cc0, 0x0010, 0x2021, 0x8dd0, 0x0046, 0x2009,
915 0x0005, 0x2011, 0x0020, 0x0481, 0x004e, 0x0118, 0x8420, 0x1f04,
916 0x2afe, 0x015e, 0x0804, 0x25c9, 0x2200, 0x0002, 0x2b11, 0x2b13,
917 0x2b13, 0x080c, 0x2575, 0x7063, 0x0000, 0x70d0, 0xc0c5, 0x70d2,
918 0x0804, 0x25c9, 0x2200, 0x0002, 0x2b21, 0x2b13, 0x2b1f, 0x080c,
919 0x2575, 0x080c, 0x3f4e, 0x7000, 0xa086, 0x0002, 0x1904, 0x3780,
920 0x080c, 0x37e1, 0x6008, 0xa084, 0xfbef, 0x600a, 0x080c, 0x3772,
921 0x0904, 0x3780, 0x0804, 0x25c9, 0x2404, 0xa005, 0x0590, 0x2068,
922 0x2d04, 0x0006, 0x6814, 0xa706, 0x0118, 0x2d20, 0x000e, 0x0ca8,
923 0x000e, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4,
924 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xa205, 0x6822,
925 0x080c, 0x1dbf, 0x2021, 0x4702, 0x241c, 0x8319, 0x2322, 0x6010,
926 0x8001, 0x6012, 0x1128, 0x2021, 0x4704, 0x2404, 0xc0a5, 0x2022,
927 0x6008, 0xa084, 0xf9ef, 0x600a, 0x080c, 0x26ca, 0x080c, 0x37e1,
928 0x0005, 0xa085, 0x0001, 0x0ce0, 0x2300, 0x0002, 0x2b73, 0x2b71,
929 0x2bee, 0x080c, 0x2575, 0x78e4, 0xa005, 0x17b0, 0x3208, 0xa18c,
930 0x0800, 0x0118, 0x0104, 0x25c6, 0x0010, 0x0304, 0x25c6, 0x2008,
931 0xa084, 0x0030, 0x1110, 0x0804, 0x324d, 0x78ec, 0xa084, 0x0003,
932 0x0dd0, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184,
933 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184,
934 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001,
935 0x0001, 0x0002, 0x2bd1, 0x2bda, 0x2bc7, 0x2baa, 0x3c4f, 0x3c4f,
936 0x2baa, 0x2be4, 0x080c, 0x2575, 0x7000, 0xa086, 0x0004, 0x1190,
937 0x7060, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000,
938 0x0804, 0x2a85, 0x7060, 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086,
939 0x0004, 0x0d90, 0x79e4, 0x2001, 0x0003, 0x0804, 0x2f3b, 0x6818,
940 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a61, 0x781b, 0x006e,
941 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a61,
942 0x0804, 0x3c2d, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c,
943 0x3a61, 0x781b, 0x00fa, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b,
944 0x001d, 0x080c, 0x3a61, 0x781b, 0x00cb, 0x0005, 0xa584, 0x000f,
945 0x11c0, 0x7000, 0x0002, 0x25c9, 0x2bfb, 0x2bfd, 0x3780, 0x3780,
946 0x3780, 0x2bfb, 0x2bfb, 0x080c, 0x2575, 0x080c, 0x37e1, 0x6008,
947 0xa084, 0xfbef, 0x600a, 0x080c, 0x3772, 0x0904, 0x3780, 0x0804,
948 0x25c9, 0x78e4, 0xa005, 0x1b04, 0x2bac, 0x3208, 0xa18c, 0x0800,
949 0x0118, 0x0104, 0x2bac, 0x0010, 0x0304, 0x2bac, 0x2008, 0xa084,
950 0x0030, 0x1118, 0x781b, 0x0068, 0x0005, 0x78ec, 0xa084, 0x0003,
951 0x0dc8, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184,
952 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184,
953 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001,
954 0x0001, 0x0002, 0x2c49, 0x2c4d, 0x2c44, 0x2c42, 0x3c4f, 0x3c4f,
955 0x2c42, 0x3c49, 0x080c, 0x2575, 0x080c, 0x3a67, 0x781b, 0x006e,
956 0x0005, 0x080c, 0x3a67, 0x0804, 0x3c2d, 0x080c, 0x3a67, 0x781b,
957 0x00fa, 0x0005, 0x080c, 0x3a67, 0x781b, 0x00cb, 0x0005, 0x2300,
958 0x0002, 0x2c5e, 0x2c5c, 0x2c60, 0x080c, 0x2575, 0x0804, 0x3405,
959 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0904,
960 0x3405, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3405, 0xa184, 0x0100,
961 0x0d98, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184,
962 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184,
963 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001,
964 0x0001, 0x0002, 0x2c92, 0x2c4d, 0x2bc7, 0x3c0b, 0x3c4f, 0x3c4f,
965 0x3c0b, 0x3c49, 0x080c, 0x3c17, 0x0005, 0xa282, 0x0005, 0x0310,
966 0x080c, 0x2575, 0x7898, 0x2040, 0x2300, 0x0002, 0x2ca1, 0x2ecb,
967 0x2ed5, 0x2200, 0x0002, 0x2cbd, 0x2caa, 0x2cbd, 0x2ca8, 0x2ead,
968 0x080c, 0x2575, 0x789b, 0x0018, 0x78a8, 0x2010, 0xa084, 0x00ff,
969 0xa082, 0x0020, 0x0a04, 0x3a30, 0xa08a, 0x0004, 0x1a04, 0x3a30,
970 0x0002, 0x3a30, 0x3a30, 0x3a30, 0x39e4, 0x789b, 0x0018, 0x79a8,
971 0xa184, 0x0080, 0x0148, 0x0804, 0x3a30, 0x7000, 0xa005, 0x1dd8,
972 0x2011, 0x0004, 0x0804, 0x35b7, 0xa184, 0x00ff, 0xa08a, 0x0010,
973 0x1a04, 0x3a30, 0x0002, 0x2ce5, 0x2ce3, 0x2cf7, 0x2cfb, 0x2da9,
974 0x3a30, 0x3a30, 0x2dab, 0x3a30, 0x3a30, 0x2ea9, 0x2ea9, 0x3a30,
975 0x3a30, 0x3a30, 0x2eab, 0x080c, 0x2575, 0xd6e4, 0x0140, 0x2001,
976 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x00c7, 0x0005, 0x6818,
977 0xd0fc, 0x0118, 0x681b, 0x001d, 0x0c90, 0x0804, 0x3c0b, 0x681b,
978 0x001d, 0x0804, 0x3a5b, 0x6920, 0x6922, 0xa684, 0x1800, 0x1904,
979 0x2d4c, 0x6820, 0xd084, 0x1904, 0x2d54, 0x6818, 0xa086, 0x0008,
980 0x1110, 0x681b, 0x0000, 0xd6d4, 0x0568, 0xd6bc, 0x0558, 0x7083,
981 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0718, 0xa08a,
982 0x000c, 0x7182, 0x2001, 0x000c, 0x800c, 0x7186, 0x789b, 0x0061,
983 0x78aa, 0x0156, 0x0136, 0x0146, 0x0016, 0x3208, 0xa18c, 0x0600,
984 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x001e, 0x789b,
985 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e,
986 0x013e, 0x015e, 0x6038, 0xa005, 0x1150, 0x681c, 0xa084, 0x000e,
987 0x0904, 0x3a5b, 0x080c, 0x3a6d, 0x782b, 0x3008, 0x0010, 0x8001,
988 0x603a, 0x781b, 0x0071, 0x0005, 0xd6e4, 0x0130, 0x781b, 0x0083,
989 0x0005, 0x781b, 0x0083, 0x0005, 0xa684, 0x0060, 0x0dd0, 0xd6dc,
990 0x0dc0, 0xd6fc, 0x01a0, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8,
991 0x78d0, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98,
992 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4,
993 0x0118, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x1148,
994 0x0006, 0x080c, 0x3f4e, 0x080c, 0x4208, 0x000e, 0x781b, 0x0080,
995 0x0005, 0xa006, 0x080c, 0x42e8, 0x6ab0, 0x69ac, 0x6c98, 0x6b94,
996 0x2200, 0xa105, 0x0120, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa,
997 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x1130,
998 0xc6f5, 0x7e5a, 0x6eb6, 0x781b, 0x0080, 0x0005, 0x781b, 0x0080,
999 0x2200, 0xa115, 0x1118, 0x080c, 0x4208, 0x0005, 0x080c, 0x4235,
1000 0x0005, 0x080c, 0x2575, 0x0804, 0x2e3f, 0x00c6, 0x7054, 0x2060,
1001 0x6920, 0xa18c, 0xecff, 0x6922, 0x6000, 0xa084, 0xcfdf, 0x6002,
1002 0x080c, 0x3917, 0xa006, 0x2040, 0x2038, 0x080c, 0x39bf, 0x0804,
1003 0x2e33, 0x00c6, 0x7054, 0x2060, 0x2c48, 0x7aa8, 0xa294, 0x00ff,
1004 0xa286, 0x0004, 0x11d8, 0x6920, 0xd1e4, 0x1170, 0x2039, 0x0000,
1005 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x391a,
1006 0x080c, 0x39bf, 0x0804, 0x2e33, 0xa18c, 0xecff, 0x6922, 0x6104,
1007 0xa18c, 0xffdd, 0x6106, 0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003,
1008 0x01d0, 0x6104, 0xa184, 0x0010, 0x0548, 0x080c, 0x3b91, 0x080c,
1009 0x399a, 0x88ff, 0x0518, 0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa,
1010 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005,
1011 0x781b, 0x0082, 0x0005, 0x6920, 0xd1cc, 0x0130, 0xa18c, 0xfdff,
1012 0x6922, 0x6000, 0xc0ec, 0x6002, 0x2039, 0x0000, 0x2041, 0x0000,
1013 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x39bf, 0xa286, 0x0001,
1014 0x0158, 0x6104, 0xa184, 0x0008, 0x01b0, 0x080c, 0x3b91, 0x080c,
1015 0x38b8, 0x88ff, 0x1980, 0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c,
1016 0xfeff, 0x6922, 0x6000, 0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006,
1017 0x2010, 0x080c, 0x391a, 0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b,
1018 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0x0804, 0x3a57, 0x2808,
1019 0x789b, 0x0080, 0x2019, 0x0080, 0x78a8, 0xa094, 0x00ff, 0xa286,
1020 0x0001, 0x11b8, 0x2300, 0xa102, 0xa086, 0x0001, 0x0904, 0x2dad,
1021 0x7ca8, 0xa4a4, 0x00ff, 0xa480, 0x0002, 0xa300, 0x2018, 0xa102,
1022 0x0a04, 0x2dc1, 0x0904, 0x2dc1, 0x24a8, 0x7aa8, 0x1f04, 0x2e5d,
1023 0x0c18, 0xa284, 0x00f0, 0xa082, 0x0020, 0x06b8, 0x2200, 0xa082,
1024 0x0021, 0x1698, 0x7aa8, 0x8318, 0x8318, 0x2100, 0xa302, 0x0aa0,
1025 0xa286, 0x0023, 0x0950, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58,
1026 0xa684, 0xfff1, 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a,
1027 0x78a0, 0xa005, 0x0904, 0x2e34, 0x20a8, 0x7998, 0x789b, 0x0060,
1028 0x78aa, 0x2011, 0x0080, 0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa,
1029 0x7a98, 0x1f04, 0x2e8b, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b,
1030 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x8318, 0x2100, 0xa302,
1031 0x0a04, 0x2e44, 0xa284, 0x0080, 0x1904, 0x3a5b, 0x78a0, 0xa005,
1032 0x08c8, 0x0804, 0x3a5b, 0x0804, 0x3a30, 0x7054, 0xa04d, 0x789b,
1033 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0110, 0x080c,
1034 0x2575, 0x7aa8, 0xa294, 0x00ff, 0x784b, 0x0008, 0x78a8, 0xa084,
1035 0x00ff, 0xa08a, 0x0005, 0x1a04, 0x3a30, 0x0002, 0x3a30, 0x382f,
1036 0x3a30, 0x394a, 0x3d59, 0xa282, 0x0000, 0x1110, 0x080c, 0x2575,
1037 0x080c, 0x3a61, 0x781b, 0x0082, 0x0005, 0xa282, 0x0003, 0x1110,
1038 0x080c, 0x2575, 0xd4fc, 0x11d0, 0x7060, 0xa005, 0x0110, 0x080c,
1039 0x2575, 0x6f14, 0x7772, 0xa7bc, 0x8f00, 0x080c, 0x3b95, 0x6008,
1040 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x1db0, 0x080c,
1041 0x3a64, 0x7063, 0x0002, 0x701f, 0x0009, 0x0010, 0x080c, 0x3a70,
1042 0x781b, 0x0082, 0x0005, 0xa282, 0x0004, 0x0310, 0x080c, 0x2575,
1043 0x2300, 0x0002, 0x2f05, 0x309b, 0x30d7, 0xa286, 0x0003, 0x0598,
1044 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x71d0, 0xd1b4, 0x0528, 0xd1bc,
1045 0x1518, 0x2001, 0x4701, 0x2004, 0xd0c4, 0x11f0, 0x7868, 0xa084,
1046 0x00ff, 0x11d0, 0xa282, 0x0002, 0x12b8, 0x00d6, 0x783b, 0x8300,
1047 0x781b, 0x0059, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6,
1048 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030,
1049 0x00de, 0x2001, 0x0000, 0x0058, 0x783b, 0x1300, 0x781b, 0x0057,
1050 0x2001, 0x0000, 0x0020, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x7046,
1051 0x68a0, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0xa284, 0x000f,
1052 0x0002, 0x307c, 0x2f56, 0x2f53, 0x31a7, 0x3232, 0x25c9, 0x2f51,
1053 0x2f51, 0x080c, 0x2575, 0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x0120,
1054 0x7044, 0xa086, 0x0014, 0x11e8, 0x080c, 0x3f4e, 0x2009, 0x0000,
1055 0x6818, 0xd0fc, 0x0108, 0x7044, 0xa086, 0x0014, 0x0168, 0x6818,
1056 0xa086, 0x0008, 0x1904, 0x303e, 0x7858, 0xd09c, 0x0904, 0x303e,
1057 0x6820, 0xd0ac, 0x0904, 0x303e, 0x681b, 0x0014, 0x2009, 0x0002,
1058 0x04a8, 0x7868, 0xa08c, 0x00ff, 0x0588, 0xa186, 0x0008, 0x1158,
1059 0x6008, 0xc0a4, 0x600a, 0x080c, 0x3772, 0x0540, 0x080c, 0x37e1,
1060 0x080c, 0x3f4e, 0x0060, 0xa186, 0x0028, 0x1500, 0x6018, 0xa005,
1061 0x0d78, 0x8001, 0x0d68, 0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820,
1062 0xd084, 0x0904, 0x25c9, 0xc084, 0x6822, 0x080c, 0x26bf, 0x7058,
1063 0x00c6, 0x2060, 0x6800, 0x6002, 0x00ce, 0x6004, 0x6802, 0xa005,
1064 0x2d00, 0x1108, 0x6002, 0x6006, 0x0804, 0x25c9, 0x0016, 0x81ff,
1065 0x15f0, 0x7000, 0xa086, 0x0030, 0x05d0, 0x71d0, 0xd1bc, 0x15b8,
1066 0xd1b4, 0x11e8, 0x705c, 0xa005, 0x1590, 0x70a0, 0xa086, 0x0001,
1067 0x0570, 0x7003, 0x0000, 0x0046, 0x0056, 0x0076, 0x0066, 0x00c6,
1068 0x00d6, 0x080c, 0x25f1, 0x00de, 0x00ce, 0x006e, 0x007e, 0x005e,
1069 0x004e, 0x71d0, 0xd1b4, 0x11d8, 0x7003, 0x0040, 0x00c0, 0x080c,
1070 0x3c5b, 0x11a8, 0x781b, 0x0068, 0x00d6, 0x70b8, 0xa06d, 0x68b4,
1071 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4,
1072 0x71d2, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, 0x00de, 0x080c,
1073 0x30ff, 0x001e, 0x81ff, 0x0904, 0x303e, 0xa684, 0xdf00, 0x681e,
1074 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x1904, 0x303f, 0x6818,
1075 0xa086, 0x0014, 0x1130, 0x2008, 0xd6e4, 0x0118, 0x7868, 0xa08c,
1076 0x00ff, 0x080c, 0x3a7a, 0x080c, 0x26ca, 0x6820, 0xd0dc, 0x1578,
1077 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xb284, 0x0600,
1078 0x0118, 0xa290, 0x4bc0, 0x0010, 0xa290, 0x4c40, 0xa290, 0x0000,
1079 0x221c, 0xd3c4, 0x0170, 0x6820, 0xd0e4, 0x0128, 0xa084, 0xefff,
1080 0x6822, 0xc3ac, 0x2312, 0x8210, 0x2204, 0xa085, 0x0038, 0x2012,
1081 0x8211, 0xd3d4, 0x0138, 0x68a0, 0xd0c4, 0x1120, 0x080c, 0x3167,
1082 0x0804, 0x25c9, 0x6008, 0xc08d, 0x600a, 0x0008, 0x692a, 0x6916,
1083 0x6818, 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, 0x691e,
1084 0x6410, 0x84ff, 0x0168, 0x2009, 0x4702, 0x2104, 0x8001, 0x200a,
1085 0x8421, 0x6412, 0x1128, 0x2021, 0x4704, 0x2404, 0xc0a5, 0x2022,
1086 0x6018, 0xa005, 0x0118, 0x8001, 0x601a, 0x1118, 0x6008, 0xc0a4,
1087 0x600a, 0x6820, 0xd084, 0x1130, 0x6800, 0xa005, 0x1108, 0x6002,
1088 0x6006, 0x0020, 0x7058, 0x2060, 0x6800, 0x6002, 0x2061, 0x4700,
1089 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a,
1090 0x0110, 0x2d02, 0x0008, 0x616e, 0x7200, 0xa286, 0x0030, 0x0158,
1091 0xa286, 0x0040, 0x1904, 0x25c9, 0x7003, 0x0002, 0x7048, 0x2068,
1092 0x68c4, 0x2060, 0x0005, 0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc,
1093 0x703e, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80,
1094 0x0009, 0x7042, 0x0005, 0xa282, 0x0004, 0x0210, 0x080c, 0x2575,
1095 0x2200, 0x0002, 0x30a6, 0x30b5, 0x30c1, 0x30b5, 0xa586, 0x1300,
1096 0x0160, 0xa586, 0x8300, 0x1d90, 0x7003, 0x0000, 0x6018, 0x8001,
1097 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a, 0x7000, 0xa086, 0x0005,
1098 0x0128, 0x080c, 0x3a61, 0x781b, 0x0082, 0x0005, 0x781b, 0x0083,
1099 0x0005, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, 0x0018,
1100 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0128, 0xa186,
1101 0x0000, 0x0110, 0x0804, 0x3a30, 0x781b, 0x0083, 0x0005, 0x6820,
1102 0xc095, 0x6822, 0x82ff, 0x1118, 0x080c, 0x3a61, 0x0030, 0x8211,
1103 0x0110, 0x080c, 0x2575, 0x080c, 0x3a70, 0x781b, 0x0082, 0x0005,
1104 0x080c, 0x3c6e, 0x7830, 0xa084, 0x00c0, 0x1170, 0x0016, 0x3208,
1105 0xa18c, 0x0800, 0x001e, 0x0118, 0x0104, 0x30fc, 0x0010, 0x0304,
1106 0x30fc, 0x791a, 0xa006, 0x0005, 0xa085, 0x0001, 0x0005, 0xa684,
1107 0x0060, 0x1130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, 0x3166,
1108 0xd6dc, 0x1198, 0x68b4, 0xd0dc, 0x1180, 0x6998, 0x6a94, 0x692e,
1109 0x6a32, 0x7044, 0xa005, 0x1130, 0x2200, 0xa105, 0x0904, 0x3f4e,
1110 0x7047, 0x0015, 0x0804, 0x3f4e, 0x0005, 0xd6ac, 0x01f0, 0xd6f4,
1111 0x0130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, 0x3f4e, 0x68b4,
1112 0xa084, 0x4000, 0xa635, 0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110,
1113 0x7047, 0x0015, 0xd6dc, 0x1128, 0x68b4, 0xd0dc, 0x0110, 0x6ca8,
1114 0x6da4, 0x6c2e, 0x6d32, 0x0804, 0x3f4e, 0xd6f4, 0x0130, 0x682f,
1115 0x0000, 0x6833, 0x0000, 0x0804, 0x3f4e, 0x68b4, 0xa084, 0x4800,
1116 0xa635, 0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, 0x0015,
1117 0x2408, 0x2510, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291,
1118 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x1110, 0x0804, 0x3f4e,
1119 0x7000, 0xa086, 0x0006, 0x0110, 0x0804, 0x3f4e, 0x0005, 0x6946,
1120 0x6008, 0xc0cd, 0xd3cc, 0x0108, 0xc08d, 0x600a, 0x6818, 0x683a,
1121 0x681b, 0x0006, 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c,
1122 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020,
1123 0x6897, 0x0000, 0x689b, 0x0020, 0x7000, 0x0002, 0x25c9, 0x3196,
1124 0x3190, 0x318e, 0x318e, 0x318e, 0x318e, 0x318e, 0x080c, 0x2575,
1125 0x6820, 0xd084, 0x1118, 0x080c, 0x37c7, 0x0030, 0x7058, 0x2c50,
1126 0x2060, 0x6800, 0x6002, 0x2a60, 0xaea0, 0x0017, 0x2404, 0xa005,
1127 0x0110, 0x2020, 0x0cd8, 0x2d22, 0x206b, 0x0000, 0x0005, 0x080c,
1128 0x37cd, 0x080c, 0x37e1, 0x6008, 0xc0cc, 0x600a, 0x682b, 0x0000,
1129 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944, 0x6916, 0x2009,
1130 0x0000, 0xae86, 0x4740, 0x0110, 0x2009, 0x0001, 0x080c, 0x431f,
1131 0xd6dc, 0x01c8, 0x691c, 0xc1ed, 0x691e, 0x6828, 0xa082, 0x000e,
1132 0x0290, 0x6848, 0xa084, 0x000f, 0xa086, 0x000b, 0x1160, 0x685c,
1133 0xa086, 0x0047, 0x1140, 0x2001, 0x4701, 0x2004, 0xd0ac, 0x1118,
1134 0x2700, 0x080c, 0x249e, 0x6818, 0xd0fc, 0x0140, 0x681b, 0x0000,
1135 0x7868, 0xa08c, 0x00ff, 0x0110, 0x681b, 0x001e, 0xaea0, 0x0017,
1136 0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060,
1137 0x6000, 0xd0a4, 0x0580, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051,
1138 0x0020, 0x00d6, 0x00f6, 0x0156, 0x0146, 0x2079, 0x4700, 0x080c,
1139 0x1bb2, 0x014e, 0x015e, 0x00fe, 0x70c8, 0x2010, 0x2009, 0x0101,
1140 0x0026, 0x2204, 0xa06d, 0x0140, 0x6814, 0xa706, 0x0110, 0x6800,
1141 0x0cc8, 0x6820, 0xc0d5, 0x6822, 0x002e, 0x8210, 0x8109, 0x1d80,
1142 0x00de, 0x7063, 0x0003, 0x707b, 0x0000, 0x7772, 0x707f, 0x000f,
1143 0x71d0, 0xc1c4, 0x71d2, 0x6818, 0xa086, 0x0002, 0x1138, 0x6817,
1144 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e, 0x080c, 0x1dbf,
1145 0x0804, 0x25c9, 0x7cd8, 0x7ddc, 0x7fd0, 0x080c, 0x30ff, 0x682b,
1146 0x0000, 0x789b, 0x000e, 0x6f14, 0x080c, 0x3c72, 0xa08c, 0x00ff,
1147 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00,
1148 0x691e, 0x7063, 0x0000, 0x0804, 0x25c9, 0x7000, 0xa005, 0x1110,
1149 0x0804, 0x25c9, 0xa006, 0x080c, 0x3f4e, 0x6920, 0xd1ac, 0x1110,
1150 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
1151 0xa084, 0x00ff, 0x6822, 0x7000, 0x0002, 0x25c9, 0x326f, 0x326f,
1152 0x3272, 0x3272, 0x3272, 0x326d, 0x326d, 0x080c, 0x2575, 0x6818,
1153 0x0804, 0x2f3b, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0804,
1154 0x3795, 0x2300, 0x0002, 0x327e, 0x3280, 0x32ce, 0x080c, 0x2575,
1155 0xd6fc, 0x1904, 0x2d5b, 0x7000, 0xa00d, 0x0002, 0x25c9, 0x3290,
1156 0x3290, 0x32ba, 0x3290, 0x32cb, 0x328e, 0x328e, 0x080c, 0x2575,
1157 0xa684, 0x0060, 0x0538, 0xa086, 0x0060, 0x1510, 0xc6ac, 0xc6f4,
1158 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002,
1159 0x0148, 0x080c, 0x3f4e, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c,
1160 0x4235, 0x0010, 0x080c, 0x4208, 0x781b, 0x0083, 0x71d0, 0xd1b4,
1161 0x1904, 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, 0x260d, 0x0005,
1162 0xd6ec, 0x09f0, 0x6818, 0xd0fc, 0x0170, 0xd6f4, 0x1130, 0x681b,
1163 0x0015, 0x781b, 0x0083, 0x0804, 0x25c6, 0x681b, 0x0007, 0x682f,
1164 0x0000, 0x6833, 0x0000, 0x080c, 0x3c17, 0x0005, 0x080c, 0x2575,
1165 0x2300, 0x0002, 0x32d7, 0x32f9, 0x3351, 0x080c, 0x2575, 0x7000,
1166 0x0002, 0x32e1, 0x32e3, 0x32ea, 0x32e1, 0x32e1, 0x32e1, 0x32e1,
1167 0x32e1, 0x080c, 0x2575, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c,
1168 0x4235, 0x0010, 0x080c, 0x4208, 0x681c, 0xc0b4, 0x681e, 0x70d0,
1169 0xd0b4, 0x1904, 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, 0x260d,
1170 0x0005, 0xd6fc, 0x1904, 0x3341, 0x7000, 0xa00d, 0x0002, 0x25c9,
1171 0x330f, 0x3309, 0x3339, 0x330f, 0x333e, 0x3307, 0x3307, 0x080c,
1172 0x2575, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684,
1173 0x0060, 0x0538, 0xa086, 0x0060, 0x1510, 0xa6b4, 0xbfbf, 0xc6ed,
1174 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0148, 0x080c, 0x3f4e, 0x69ac,
1175 0x68b0, 0xa115, 0x0118, 0x080c, 0x4235, 0x0010, 0x080c, 0x4208,
1176 0x781b, 0x0083, 0x681c, 0xc0b4, 0x681e, 0x71d0, 0xd1b4, 0x1904,
1177 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904, 0x260d, 0x0005, 0xd6ec,
1178 0x09f0, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0007, 0x781b, 0x00fb,
1179 0x0005, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302,
1180 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0083,
1181 0x0005, 0xd6dc, 0x0130, 0x782b, 0x3009, 0x781b, 0x0083, 0x0804,
1182 0x25c6, 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, 0x1150,
1183 0xa484, 0x0200, 0x0108, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0083,
1184 0x0804, 0x25c6, 0x6820, 0xc095, 0x6822, 0x080c, 0x3c02, 0xc6dd,
1185 0x080c, 0x3a61, 0x781b, 0x0082, 0x0804, 0x25c6, 0x2300, 0x0002,
1186 0x337b, 0x337d, 0x337f, 0x080c, 0x2575, 0x0804, 0x3a5b, 0x7d98,
1187 0xd6d4, 0x15a8, 0x79e4, 0xd1ac, 0x0130, 0x78ec, 0xa084, 0x0003,
1188 0x0110, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
1189 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac, 0x0120, 0x78ec, 0xa084,
1190 0x0003, 0x1120, 0x2001, 0x0014, 0x0804, 0x2f3b, 0x7884, 0xd0fc,
1191 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
1192 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
1193 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x04c2, 0x7a90,
1194 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0568, 0x789b,
1195 0x0080, 0x7ba8, 0xa384, 0x0001, 0x11d0, 0x7ba8, 0x7ba8, 0xa386,
1196 0x0004, 0x1118, 0x2009, 0xffdf, 0x0058, 0xa386, 0x0001, 0x1118,
1197 0x2009, 0xfff7, 0x0028, 0xa386, 0x0003, 0x1148, 0x2009, 0xffef,
1198 0x00c6, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x00ce, 0x789b,
1199 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009,
1200 0x6920, 0xa18c, 0xecff, 0x6922, 0x7d9a, 0x0804, 0x3c0b, 0x2bd1,
1201 0x2bda, 0x33f9, 0x33ff, 0x33f7, 0x33f7, 0x3c0b, 0x3c0b, 0x080c,
1202 0x2575, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0804, 0x3c11, 0x6920,
1203 0xa18c, 0xfcff, 0x6922, 0x0804, 0x3c0b, 0x79e4, 0xa184, 0x0030,
1204 0x0120, 0x78ec, 0xa084, 0x0003, 0x1570, 0x7000, 0xa086, 0x0004,
1205 0x1190, 0x7060, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019,
1206 0x0000, 0x0804, 0x2a85, 0x7060, 0xa086, 0x0006, 0x0db0, 0x7060,
1207 0xa086, 0x0004, 0x0d90, 0x7000, 0xa086, 0x0000, 0x0904, 0x25c6,
1208 0x6920, 0xa184, 0x0420, 0x0128, 0xc1d4, 0x6922, 0x6818, 0x0804,
1209 0x2f3b, 0x6818, 0xa08e, 0x0002, 0x0120, 0xc0fd, 0x681a, 0x2001,
1210 0x0014, 0x0804, 0x2f3b, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
1211 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
1212 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
1213 0x0010, 0x2001, 0x0001, 0x0002, 0x3c0b, 0x3c0b, 0x345c, 0x3c0b,
1214 0x3c4f, 0x3c4f, 0x3c0b, 0x3c0b, 0xd6bc, 0x0570, 0x7180, 0x81ff,
1215 0x0558, 0xa182, 0x000d, 0x1318, 0x7083, 0x0000, 0x0028, 0xa182,
1216 0x000c, 0x7082, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, 0x0156,
1217 0x0136, 0x0146, 0x7084, 0x8114, 0xa210, 0x7286, 0xa080, 0x000b,
1218 0xad00, 0x2098, 0xb284, 0x0600, 0x0118, 0x20a1, 0x022b, 0x0010,
1219 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e,
1220 0x013e, 0x015e, 0x0804, 0x3c11, 0xd6d4, 0x1904, 0x34cf, 0x6820,
1221 0xd084, 0x0904, 0x3c11, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0120,
1222 0xa086, 0x0060, 0x1108, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b,
1223 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a,
1224 0x78aa, 0x8008, 0x810c, 0x0904, 0x37f6, 0xa18c, 0x00f8, 0x1904,
1225 0x37f6, 0x0156, 0x0136, 0x0146, 0x0016, 0x20a1, 0x012b, 0x3208,
1226 0xa18c, 0x0600, 0x0110, 0x20a1, 0x022b, 0x001e, 0x789b, 0x0000,
1227 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e,
1228 0x015e, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0804, 0x3c11, 0x6818,
1229 0xd0fc, 0x0110, 0x681b, 0x0008, 0x080c, 0x3a61, 0x781b, 0x00ed,
1230 0x0005, 0x2300, 0x0002, 0x34e0, 0x359d, 0x34de, 0x080c, 0x2575,
1231 0x7cd8, 0x7ddc, 0x7fd0, 0x82ff, 0x1528, 0x7200, 0xa286, 0x0003,
1232 0x0904, 0x2f09, 0x71d0, 0xd1bc, 0x11f8, 0xd1b4, 0x01e8, 0x2001,
1233 0x4701, 0x2004, 0xd0c4, 0x11c0, 0x00d6, 0x783b, 0x8800, 0x781b,
1234 0x0059, 0x70b8, 0xa06d, 0x68b4, 0xc0a5, 0x785a, 0x6894, 0x78d6,
1235 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030,
1236 0x00de, 0x0030, 0x7200, 0x0020, 0x783b, 0x1800, 0x781b, 0x0057,
1237 0xa284, 0x000f, 0x0002, 0x3588, 0x3545, 0x351d, 0x2f38, 0x351b,
1238 0x3588, 0x351b, 0x351b, 0x080c, 0x2575, 0x681c, 0xd0ec, 0x0118,
1239 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006,
1240 0xa005, 0x1108, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084,
1241 0x000e, 0x1120, 0x71c8, 0xa188, 0x0100, 0x0028, 0x7030, 0x68ba,
1242 0x713c, 0x70c8, 0xa108, 0x2104, 0x6802, 0x2d0a, 0x715a, 0xd6dc,
1243 0x1120, 0xc6fc, 0x6eb6, 0x0804, 0x3588, 0x6eb6, 0xa684, 0x0060,
1244 0x1120, 0xa684, 0x7fff, 0x68b6, 0x04d8, 0xd6dc, 0x1150, 0xa684,
1245 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x080c, 0x3f4e,
1246 0x0478, 0xd6ac, 0x0140, 0xa006, 0x080c, 0x3f4e, 0x2408, 0x2510,
1247 0x69aa, 0x6aa6, 0x0068, 0x2408, 0x2510, 0x2700, 0x8007, 0xa084,
1248 0x007f, 0xa108, 0xa291, 0x0000, 0x69aa, 0x6aa6, 0x080c, 0x3f4e,
1249 0xd6fc, 0x01b0, 0xa684, 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac,
1250 0x1138, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000,
1251 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae,
1252 0x7000, 0xa086, 0x0030, 0x1904, 0x25c9, 0x7003, 0x0002, 0x70b8,
1253 0xa06d, 0x68bc, 0x703e, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00,
1254 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0xa586, 0x8800, 0x1148,
1255 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef,
1256 0x600a, 0x0804, 0x3a5b, 0x7043, 0x0000, 0xa282, 0x0006, 0x0310,
1257 0x080c, 0x2575, 0x2300, 0x0002, 0x35b7, 0x35c8, 0x35d2, 0x2200,
1258 0x0002, 0x35bf, 0x3a5b, 0x35c1, 0x35bf, 0x3603, 0x3651, 0x080c,
1259 0x2575, 0x7a80, 0xa294, 0x0f00, 0x080c, 0x36a5, 0x0804, 0x3a30,
1260 0x00c1, 0x0002, 0x3a5b, 0x35d0, 0x35d0, 0x3603, 0x35d0, 0x3a5b,
1261 0x080c, 0x2575, 0x0071, 0x0002, 0x35dc, 0x35da, 0x35da, 0x35dc,
1262 0x35da, 0x35dc, 0x080c, 0x2575, 0x080c, 0x3a70, 0x781b, 0x0082,
1263 0x0005, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x37e1, 0x0010,
1264 0x080c, 0x3f4e, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0020, 0x7000,
1265 0xa086, 0x0003, 0x0da8, 0x7003, 0x0005, 0x2001, 0x8ee0, 0xae8e,
1266 0x4740, 0x0110, 0x2001, 0x8f12, 0x2068, 0x704a, 0xad80, 0x0009,
1267 0x7042, 0x2200, 0x0005, 0x7000, 0xa086, 0x0002, 0x1158, 0x70d0,
1268 0xc0b5, 0x70d2, 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x0038, 0x080c,
1269 0x3f4e, 0x0020, 0x7000, 0xa086, 0x0003, 0x0dc8, 0x7003, 0x0001,
1270 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f,
1271 0xa215, 0x2069, 0x8dc0, 0xb284, 0x0600, 0x1118, 0xc2fd, 0x2069,
1272 0x8ed0, 0x2d04, 0x2d08, 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206,
1273 0x0120, 0x6800, 0x0cb8, 0x080c, 0x36a5, 0x6eb4, 0x7e5a, 0x6920,
1274 0xa184, 0x0c00, 0x0904, 0x36cb, 0x7060, 0xa086, 0x0006, 0x1128,
1275 0x7070, 0xa206, 0x1110, 0x7062, 0x707a, 0x681b, 0x0005, 0xc1ad,
1276 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c, 0x3a67, 0x0804,
1277 0x36cb, 0x7200, 0xa286, 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2,
1278 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x0030, 0x080c, 0x3f4e, 0x0018,
1279 0xa286, 0x0003, 0x0dd0, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00,
1280 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0xae86, 0x4740,
1281 0x0108, 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70c8,
1282 0xa168, 0x2d04, 0x2d08, 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206,
1283 0x0118, 0x6800, 0x0cb8, 0x0409, 0x6eb4, 0x6920, 0xa184, 0x0c00,
1284 0x0904, 0x36cb, 0xd0dc, 0x0178, 0x7060, 0xa086, 0x0004, 0x1140,
1285 0x7070, 0xa206, 0x1128, 0x7074, 0xa306, 0x1110, 0x7062, 0x707a,
1286 0x080c, 0x3a6d, 0x0480, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922,
1287 0x080c, 0x3a67, 0x707b, 0x0000, 0x0430, 0x7003, 0x0005, 0xb284,
1288 0x0600, 0x0118, 0x2001, 0x8ee0, 0x0010, 0x2001, 0x8f12, 0x2068,
1289 0x704a, 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x1f04,
1290 0x36b4, 0x015e, 0xb284, 0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd,
1291 0x6a16, 0xad80, 0x0009, 0x7042, 0x68b7, 0x0700, 0x6823, 0x0800,
1292 0x6827, 0x0003, 0x0005, 0xc6ec, 0xa6ac, 0x0060, 0x0904, 0x3712,
1293 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x11e0, 0x7bd2, 0x7bda,
1294 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x05c8, 0xd6f4, 0x1108, 0xc6ed,
1295 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0083, 0xd69c, 0x0128, 0x2009,
1296 0x0082, 0x2019, 0x0000, 0x2320, 0x791a, 0xd6ec, 0x0588, 0x080c,
1297 0x4208, 0x0470, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305,
1298 0x01f8, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x1108,
1299 0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0083, 0xd69c, 0x0128, 0x2011,
1300 0x0082, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec, 0x0188, 0x080c,
1301 0x4235, 0x0070, 0x2019, 0x0000, 0x2320, 0x0010, 0xa6b4, 0xb7ff,
1302 0x7e5a, 0x2009, 0x0083, 0xd69c, 0x0110, 0x2009, 0x0082, 0x791a,
1303 0x68c0, 0x7056, 0x2d00, 0x704a, 0x68c4, 0x2060, 0x71d0, 0x2001,
1304 0x4701, 0x2004, 0xd0c4, 0x15c8, 0x70d4, 0xa02d, 0x01b8, 0xd1bc,
1305 0x0548, 0x7a80, 0xa294, 0x0f00, 0x70d8, 0xa206, 0x0118, 0x78e0,
1306 0xa504, 0x1558, 0x70d6, 0xc1bc, 0x71d2, 0x0438, 0x2031, 0x0001,
1307 0x852c, 0x0218, 0x8633, 0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594,
1308 0xff00, 0x0130, 0x2011, 0x0008, 0x852f, 0x0c81, 0x8637, 0x0008,
1309 0x0c69, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, 0x0170, 0x72da,
1310 0x76d6, 0x0058, 0x7a80, 0xa294, 0x0f00, 0x70d8, 0xa236, 0x0dc0,
1311 0x78e0, 0xa534, 0x0da8, 0xc1bd, 0x71d2, 0xd1b4, 0x1904, 0x25c6,
1312 0x2300, 0xa405, 0x0904, 0x25c6, 0x70a0, 0xa086, 0x0001, 0x1904,
1313 0x260d, 0x0005, 0x6020, 0xa005, 0x0150, 0x8001, 0x6022, 0x6008,
1314 0xa085, 0x0008, 0x600a, 0x700f, 0x0100, 0x702c, 0x6026, 0x0005,
1315 0xa006, 0x080c, 0x3f4e, 0x7000, 0xa086, 0x0002, 0x0120, 0x7060,
1316 0xa086, 0x0005, 0x1150, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b,
1317 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f,
1318 0x0002, 0x25c9, 0x37a6, 0x37a3, 0x37c3, 0x37af, 0x25c9, 0x37a1,
1319 0x37a1, 0x080c, 0x2575, 0x0449, 0x0411, 0x0028, 0x0431, 0x7058,
1320 0x2060, 0x6800, 0x6002, 0x080c, 0x1dbf, 0x0804, 0x25c9, 0x7060,
1321 0x7063, 0x0000, 0x707f, 0x0000, 0x0002, 0x37bf, 0x37bf, 0x37bd,
1322 0x37bd, 0x37bd, 0x37bf, 0x37bd, 0x37bf, 0x0804, 0x2a9a, 0x7063,
1323 0x0000, 0x0804, 0x25c9, 0x681b, 0x0000, 0x0804, 0x31a7, 0x6800,
1324 0xa005, 0x1108, 0x6002, 0x6006, 0x0005, 0x6410, 0x84ff, 0x0168,
1325 0x2009, 0x4702, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, 0x1128,
1326 0x2021, 0x4704, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a,
1327 0x0005, 0x6018, 0xa005, 0x0110, 0x8001, 0x601a, 0x0005, 0x080c,
1328 0x3c6e, 0x681b, 0x0018, 0x0490, 0x080c, 0x3c6e, 0x681b, 0x0019,
1329 0x0468, 0x080c, 0x3c6e, 0x681b, 0x001a, 0x0440, 0x080c, 0x3c6e,
1330 0x681b, 0x0003, 0x0418, 0x7770, 0x080c, 0x3b95, 0x7174, 0xa18c,
1331 0x00ff, 0x3210, 0xa294, 0x0600, 0x0118, 0xa1e8, 0x8cc0, 0x0010,
1332 0xa1e8, 0x8dd0, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x1118, 0x707a,
1333 0x0804, 0x25c9, 0x6814, 0x7270, 0xa206, 0x0110, 0x6800, 0x0c98,
1334 0x6800, 0x200a, 0x681b, 0x0005, 0x707b, 0x0000, 0x080c, 0x37cd,
1335 0x6820, 0xd084, 0x1110, 0x080c, 0x37c7, 0x080c, 0x37e1, 0x681f,
1336 0x0000, 0x6823, 0x0020, 0x080c, 0x1dbf, 0x0804, 0x25c9, 0xa282,
1337 0x0003, 0x1904, 0x3a35, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4,
1338 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x05b0, 0xc1c4, 0x6922,
1339 0xa6b4, 0x00ff, 0x0530, 0xa682, 0x0018, 0x0218, 0x0110, 0x2031,
1340 0x0018, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x2041,
1341 0x0000, 0x080c, 0x3aee, 0x0118, 0x080c, 0x391a, 0x00a0, 0x080c,
1342 0x3aba, 0x080c, 0x3917, 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695,
1343 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082,
1344 0x0005, 0x080c, 0x3917, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071,
1345 0x0005, 0x781b, 0x0083, 0x0005, 0x00c6, 0x7054, 0x2060, 0x6100,
1346 0xd1e4, 0x0598, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x0018,
1347 0x0218, 0x0110, 0x2011, 0x0018, 0x2600, 0xa202, 0x1208, 0x2230,
1348 0xa686, 0x0010, 0x1108, 0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec,
1349 0xd0e4, 0x0130, 0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028,
1350 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208,
1351 0x2228, 0x080c, 0x3abe, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c,
1352 0x3aee, 0x0118, 0x080c, 0x391a, 0x0020, 0x080c, 0x3aba, 0x080c,
1353 0x3917, 0x7858, 0xc095, 0x785a, 0x00ce, 0x781b, 0x0082, 0x0005,
1354 0x00c6, 0x2960, 0x6000, 0xd0e4, 0x1188, 0xd0b4, 0x1150, 0x6010,
1355 0xa084, 0x000f, 0x1130, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x00ce,
1356 0x0005, 0x2011, 0x0032, 0x2019, 0x0000, 0x00f0, 0x68a0, 0xd0cc,
1357 0x1dc0, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282,
1358 0x000b, 0x1218, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c, 0x1210,
1359 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x0018,
1360 0x0218, 0x0110, 0x2019, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003,
1361 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5,
1362 0x6822, 0x080c, 0x3a7a, 0x00ce, 0x0005, 0x00c6, 0x2960, 0x6104,
1363 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0000,
1364 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa,
1365 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x00ce, 0x0005, 0xa006,
1366 0x2030, 0x2010, 0x00c6, 0x7154, 0x2160, 0x2018, 0x2008, 0xa084,
1367 0xffe0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4,
1368 0xa084, 0x7770, 0xa18c, 0x000f, 0xa105, 0x2029, 0x4705, 0x252c,
1369 0xd5cc, 0x0140, 0xd3a4, 0x0110, 0xa085, 0x0800, 0xd3fc, 0x0110,
1370 0xa085, 0x8080, 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x001f, 0x8637,
1371 0x8204, 0x8004, 0xa605, 0x600e, 0x6004, 0xa084, 0xffd5, 0x6006,
1372 0x00ce, 0x0005, 0xa282, 0x0002, 0x1904, 0x3a3f, 0x7aa8, 0x6920,
1373 0xc1bd, 0x6922, 0xd1cc, 0x0568, 0xc1cc, 0x6922, 0xa294, 0x00ff,
1374 0xa282, 0x0002, 0x1a04, 0x3a30, 0x080c, 0x39c1, 0x080c, 0x3917,
1375 0xa980, 0x0001, 0x200c, 0x080c, 0x3b91, 0x080c, 0x38b8, 0x88ff,
1376 0x0178, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
1377 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005,
1378 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083,
1379 0x0005, 0xa282, 0x0002, 0x1218, 0xa284, 0x0001, 0x0140, 0x7154,
1380 0xa188, 0x0000, 0x210c, 0xd1ec, 0x1110, 0x2011, 0x0000, 0x080c,
1381 0x3aac, 0x0479, 0x080c, 0x3917, 0x7858, 0xc095, 0x785a, 0x781b,
1382 0x0082, 0x0005, 0x00c6, 0x0026, 0x2960, 0x6000, 0x2011, 0x0001,
1383 0xd0ec, 0x1158, 0xd0bc, 0x1138, 0x6014, 0xd0b4, 0x1120, 0xc1a4,
1384 0x6106, 0xa006, 0x0088, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
1385 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x080c, 0x3a7a,
1386 0x6820, 0xa085, 0x0200, 0x6822, 0x002e, 0x00ce, 0x0005, 0x8807,
1387 0xa715, 0x00c6, 0x2009, 0x0000, 0x7054, 0x2060, 0x82ff, 0x0110,
1388 0x2009, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084,
1389 0xff9f, 0xa105, 0xc0ec, 0xd0b4, 0x1108, 0xc0ed, 0x6100, 0xd1f4,
1390 0x0110, 0xa085, 0x0020, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084,
1391 0xffef, 0x6006, 0x00ce, 0x0005, 0x0006, 0x7000, 0xa086, 0x0003,
1392 0x0110, 0x000e, 0x0010, 0x000e, 0x0498, 0xd6ac, 0x0588, 0x7888,
1393 0xa084, 0x0040, 0x0568, 0x7bb8, 0x8307, 0xa084, 0x007f, 0x1518,
1394 0x8207, 0xa084, 0x00ff, 0x0904, 0x3a57, 0xa09a, 0x0004, 0x1a04,
1395 0x3a57, 0xd6f4, 0x11d0, 0x79d8, 0x7adc, 0xa108, 0xa291, 0x0000,
1396 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x080c, 0x42e8, 0x781b, 0x0080,
1397 0xb284, 0x0600, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001,
1398 0x080c, 0x419a, 0x0005, 0x080c, 0x2575, 0x781b, 0x0080, 0x0005,
1399 0x781b, 0x0083, 0x0005, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031,
1400 0x0000, 0xa006, 0x2010, 0x080c, 0x391a, 0x080c, 0x39bf, 0x7e58,
1401 0x080c, 0x3a73, 0x781b, 0x0082, 0x0005, 0x0cd1, 0x6820, 0xc0c4,
1402 0x6822, 0x00c6, 0x7054, 0x2060, 0x080c, 0x3944, 0x00b0, 0x0c81,
1403 0x6820, 0xc0cc, 0x6822, 0x00c6, 0x7054, 0x2060, 0x080c, 0x39de,
1404 0x0060, 0x0c31, 0x6820, 0xa084, 0xecff, 0x6822, 0x00c6, 0x7054,
1405 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006, 0x00ce, 0x0005, 0x0049,
1406 0x781b, 0x0082, 0x0005, 0x6827, 0x0002, 0x0049, 0x781b, 0x0082,
1407 0x0005, 0x2001, 0x0005, 0x0088, 0x2001, 0x000c, 0x0070, 0x6820,
1408 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0040, 0x2001, 0x000d, 0x0028,
1409 0x2001, 0x0009, 0x0010, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa,
1410 0xc69d, 0x7e5a, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6,
1411 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
1412 0x601a, 0x00ce, 0x0005, 0x0076, 0x873f, 0xa7bc, 0x000f, 0x873b,
1413 0x873b, 0x8703, 0xa0e0, 0x4bc0, 0xae8e, 0x4740, 0x0110, 0xa0e0,
1414 0x4c40, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x7fe0, 0x78ae,
1415 0x6012, 0x79a4, 0xa184, 0x773f, 0x78a6, 0x6016, 0x6004, 0xa085,
1416 0x0038, 0x6006, 0x007e, 0x0005, 0x789b, 0x0080, 0x78ab, 0x0001,
1417 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab,
1418 0x0004, 0x0800, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0080,
1419 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa,
1420 0x789b, 0x0060, 0x78ab, 0x0005, 0x0804, 0x3a7a, 0x0156, 0x8007,
1421 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4,
1422 0xa18c, 0xffe0, 0x2021, 0x3b7a, 0x2019, 0x0011, 0x20a9, 0x000e,
1423 0x2011, 0x0032, 0x2404, 0xa084, 0xffe0, 0xa106, 0x0128, 0x8420,
1424 0x2300, 0xa210, 0x1f04, 0x3ae2, 0x015e, 0x0005, 0x0156, 0x0804,
1425 0x3b30, 0x2021, 0x3b88, 0x20a9, 0x0009, 0x2011, 0x0029, 0xa582,
1426 0x0028, 0x0550, 0x8420, 0x95a9, 0x2011, 0x0033, 0xa582, 0x0033,
1427 0x0618, 0x8420, 0x95a9, 0x2019, 0x000a, 0x2011, 0x0065, 0x2200,
1428 0xa502, 0x02d0, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3b07, 0x015e,
1429 0x0088, 0x2021, 0x3b7a, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011,
1430 0x0033, 0x2200, 0xa502, 0x0240, 0x8420, 0x2300, 0xa210, 0x1f04,
1431 0x3b19, 0x015e, 0xa006, 0x0005, 0x8211, 0x015e, 0xa582, 0x0064,
1432 0x1220, 0x7808, 0xa085, 0x0070, 0x780a, 0x2404, 0xa005, 0x0005,
1433 0xa886, 0x0002, 0x01e8, 0x2021, 0x3b66, 0x20a9, 0x000d, 0x2011,
1434 0x0028, 0xa582, 0x0028, 0x0d48, 0x8420, 0x2019, 0x0019, 0x2011,
1435 0x0033, 0x2200, 0xa502, 0x0e00, 0x8420, 0x2300, 0xa210, 0x1f04,
1436 0x3b41, 0x015e, 0x2011, 0x0184, 0xa582, 0x0185, 0x0ab0, 0x0890,
1437 0x2021, 0x3b75, 0x20a9, 0x0003, 0x2011, 0x0024, 0xa586, 0x0024,
1438 0x0960, 0x8420, 0x2011, 0x0028, 0xa586, 0x0028, 0x0930, 0x8420,
1439 0x2019, 0x0019, 0x2011, 0x0033, 0x0804, 0x3b19, 0x1021, 0x2202,
1440 0x3403, 0x4604, 0x5805, 0x6a06, 0x7c07, 0x4610, 0x4612, 0x5812,
1441 0x5a12, 0x6a14, 0x6c14, 0x6e14, 0x7e17, 0x9021, 0xb002, 0xe204,
1442 0xe210, 0xe210, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404,
1443 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07,
1444 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, 0x7e07,
1445 0x0e00, 0x789b, 0x0080, 0xa046, 0x0005, 0xa784, 0x0f00, 0x800b,
1446 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xd7fc,
1447 0x0118, 0xa0e0, 0x6cc0, 0x0010, 0xa0e0, 0x4cc0, 0x0005, 0x00e6,
1448 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009, 0x4780, 0x2071,
1449 0x4780, 0x0030, 0x2009, 0x4740, 0x2079, 0x0200, 0x2071, 0x4740,
1450 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002, 0x3bc8, 0x3bc8,
1451 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc6, 0x3bc6, 0x080c, 0x2575,
1452 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0580, 0x7858,
1453 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814,
1454 0x1530, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x1de0, 0x784b,
1455 0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830, 0xd0bc, 0x11b8,
1456 0xb284, 0x0800, 0x0118, 0x0104, 0x3bff, 0x0010, 0x0304, 0x3bff,
1457 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec, 0xa084, 0x0003, 0x0138,
1458 0x681c, 0xd0ac, 0x1110, 0x00d9, 0x0010, 0x781b, 0x00fb, 0x00fe,
1459 0x00ee, 0x0005, 0x2001, 0x4701, 0x2004, 0xd0ac, 0x1118, 0x6814,
1460 0x080c, 0x249e, 0x0005, 0x781b, 0x0083, 0x0005, 0x781b, 0x0082,
1461 0x0005, 0x781b, 0x0071, 0x0005, 0x781b, 0x006e, 0x0005, 0x2009,
1462 0x4719, 0x210c, 0xa186, 0x0000, 0x0150, 0xa186, 0x0001, 0x0150,
1463 0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x781b,
1464 0x00f3, 0x0005, 0x701f, 0x000a, 0x0005, 0x2009, 0x4719, 0x210c,
1465 0xa186, 0x0000, 0x0168, 0xa186, 0x0001, 0x0138, 0x701f, 0x000b,
1466 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x701f, 0x000a, 0x0005,
1467 0x781b, 0x00f2, 0x0005, 0x781b, 0x00fb, 0x0005, 0x781b, 0x00fa,
1468 0x0005, 0x781b, 0x00cc, 0x0005, 0x781b, 0x00cb, 0x0005, 0x6818,
1469 0xd0fc, 0x0110, 0x681b, 0x001d, 0x701f, 0x000b, 0x7063, 0x0001,
1470 0x781b, 0x0054, 0x0005, 0x7830, 0xa084, 0x00c0, 0x1170, 0x7808,
1471 0xc08c, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084,
1472 0x0021, 0x0118, 0x7808, 0xc08d, 0x780a, 0x0005, 0x7808, 0xc08d,
1473 0x780a, 0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, 0xb284, 0x0800,
1474 0x0118, 0x1104, 0x3c80, 0x0010, 0x1304, 0x3c80, 0x78ac, 0x0005,
1475 0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000,
1476 0x78ec, 0xa084, 0x0021, 0x0140, 0xb284, 0x0800, 0x0118, 0x1104,
1477 0x3c8f, 0x0010, 0x1304, 0x3c92, 0x78ac, 0x0006, 0x7808, 0xa085,
1478 0x0002, 0x780a, 0x000e, 0x0005, 0xa784, 0x0001, 0x1904, 0x324d,
1479 0xa784, 0x0070, 0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2490,
1480 0x2d78, 0x2c68, 0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008,
1481 0x78ec, 0xa084, 0x0003, 0x0904, 0x324d, 0x0804, 0x3c0b, 0xa784,
1482 0x0004, 0x01c8, 0x78b8, 0xa084, 0x8000, 0x01a8, 0x784b, 0x0008,
1483 0x78ec, 0xa084, 0x0003, 0x0904, 0x324d, 0x78e4, 0xa084, 0x0007,
1484 0xa086, 0x0001, 0x1140, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a,
1485 0x781b, 0x00fb, 0x0005, 0xa784, 0x0080, 0x0140, 0x7884, 0xd0fc,
1486 0x0128, 0x080c, 0x3a57, 0x681b, 0x0022, 0x0005, 0x681b, 0x0003,
1487 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000,
1488 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x2bac, 0xb284,
1489 0x0800, 0x0110, 0x0104, 0x25c6, 0x0304, 0x25c6, 0x6b14, 0x8307,
1490 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080,
1491 0x4c40, 0x0010, 0xa080, 0x4bc0, 0x2060, 0x2048, 0x7056, 0x2a60,
1492 0x0005, 0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, 0x3d57, 0x68a0,
1493 0xd1ac, 0x1120, 0xa084, 0x0e00, 0x0904, 0x3d55, 0x6108, 0x8117,
1494 0xa18c, 0x00ff, 0x631c, 0x832f, 0xd0dc, 0x0110, 0xa39d, 0x0001,
1495 0xd0cc, 0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110,
1496 0x8213, 0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec,
1497 0xd0e4, 0x1118, 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248,
1498 0x2009, 0x000a, 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029,
1499 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa,
1500 0x78ab, 0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820,
1501 0xa085, 0x1000, 0x6822, 0x080c, 0x3a7a, 0xa085, 0x0001, 0x00ce,
1502 0x0005, 0xa282, 0x0006, 0x1904, 0x3a49, 0x7da8, 0x7eac, 0x8637,
1503 0xa5ac, 0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff,
1504 0xa8c4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x3dcb,
1505 0xa18c, 0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x3a23, 0xa6b4,
1506 0x00ff, 0x0904, 0x3dc8, 0xa682, 0x0031, 0x1a04, 0x3a23, 0xa582,
1507 0x0009, 0x0a04, 0x3a23, 0xa882, 0x0003, 0x1a04, 0x3a23, 0xa886,
1508 0x0002, 0x01d0, 0xa886, 0x0000, 0x1904, 0x3a23, 0x2001, 0x000c,
1509 0x79ec, 0xd1e4, 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c,
1510 0x3a23, 0x00c6, 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000,
1511 0xc0ac, 0x6002, 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x3a23,
1512 0x8634, 0xa682, 0x0018, 0x0228, 0x0120, 0x2031, 0x0018, 0x0804,
1513 0x3e19, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c,
1514 0x3aee, 0x0904, 0x3a23, 0x080c, 0x391a, 0x080c, 0x39bf, 0x7e58,
1515 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005,
1516 0x080c, 0x3917, 0x0c90, 0xa886, 0x0002, 0x1108, 0x8634, 0x7154,
1517 0xa188, 0x0000, 0x210c, 0xd1ac, 0x0904, 0x3a23, 0xd1ec, 0x1120,
1518 0x2039, 0x0000, 0x2041, 0x0000, 0xd1e4, 0x1120, 0x2031, 0x0000,
1519 0x2041, 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c, 0xa284, 0x00ff,
1520 0xa706, 0x0110, 0x2039, 0x0000, 0xa605, 0x0190, 0x6108, 0x811f,
1521 0xa39c, 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330, 0x8807, 0xa705,
1522 0xa086, 0x0201, 0x0160, 0xa886, 0x0000, 0x0168, 0x2039, 0x0000,
1523 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x0070, 0xa284,
1524 0xff00, 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502, 0x0108, 0x2128,
1525 0x852b, 0x852b, 0x080c, 0x3aee, 0x0d58, 0x080c, 0x391a, 0x080c,
1526 0x39bf, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab,
1527 0x0004, 0x7daa, 0x78ab, 0x0000, 0x7eaa, 0x7faa, 0x2800, 0x78aa,
1528 0x789b, 0x0060, 0x78ab, 0x0008, 0x6820, 0xc0e5, 0x6822, 0x080c,
1529 0x3a7a, 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x0020,
1530 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1531 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1532 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1533 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1534 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9855, 0x984d, 0x0014,
1535 0x9911, 0x98ff, 0x0014, 0x0014, 0x0090, 0x00e7, 0x0100, 0x0402,
1536 0x2008, 0xf880, 0x0018, 0x0017, 0x840f, 0xd8c1, 0x0014, 0x0016,
1537 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, 0x2500,
1538 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
1539 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, 0x3806,
1540 0x8839, 0x20c4, 0x0864, 0xa850, 0x3008, 0x28c1, 0x9d18, 0xa201,
1541 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a,
1542 0xa808, 0x28e2, 0x9cce, 0xa8f3, 0x0864, 0xa83e, 0x300c, 0xa801,
1543 0x3008, 0x28e1, 0x9cce, 0x28a2, 0x7163, 0xa831, 0x2021, 0xa818,
1544 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, 0x6fc0, 0x67a4, 0x6c80,
1545 0x0212, 0xa205, 0x883d, 0x882b, 0x1814, 0x883b, 0x7027, 0x85f2,
1546 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa813, 0x883e, 0xa811,
1547 0x2882, 0x7162, 0xa814, 0x280a, 0xa204, 0x64c0, 0x6de0, 0x67a0,
1548 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa802, 0x7861,
1549 0x883e, 0x206a, 0x28c1, 0x9d18, 0x2042, 0x2101, 0xa8ca, 0x2902,
1550 0xa20e, 0xa80b, 0xa207, 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872,
1551 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x7121, 0x0014,
1552 0x0704, 0x3008, 0x9cce, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009,
1553 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861,
1554 0xa8eb, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532,
1555 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8,
1556 0xd6e0, 0x1fe6, 0x0014, 0x3008, 0x8000, 0x2849, 0x1011, 0xa8fc,
1557 0x3008, 0x8000, 0xa000, 0x2081, 0x2802, 0x1011, 0xa8fc, 0xa889,
1558 0x3008, 0x20a1, 0x283c, 0x1011, 0xa8fc, 0xa209, 0x0017, 0x300c,
1559 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014,
1560 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, 0x18f2, 0x0014, 0xa20b,
1561 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d22, 0x0704, 0xa206, 0x6865,
1562 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa,
1563 0x8160, 0x842a, 0x8180, 0xf021, 0x3008, 0x84a8, 0x11d7, 0x7042,
1564 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x0000, 0x0126, 0x70d0,
1565 0xa084, 0x4c00, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205,
1566 0x11a0, 0x720c, 0x82ff, 0x0128, 0x8aff, 0x1178, 0x7200, 0xd284,
1567 0x1160, 0x7804, 0xd0cc, 0x0110, 0x080c, 0x435b, 0x7007, 0x0008,
1568 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, 0x7000, 0xa084, 0x0003,
1569 0x7002, 0xc69c, 0xd084, 0x0588, 0x7108, 0xe000, 0x7008, 0xa106,
1570 0x1dd8, 0xa184, 0x0003, 0x0904, 0x3fca, 0xa184, 0x01e0, 0x1904,
1571 0x3fca, 0xd1f4, 0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60,
1572 0x2011, 0x0180, 0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20,
1573 0x700c, 0xa106, 0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008,
1574 0xa106, 0x1dd8, 0xa184, 0x0003, 0x0568, 0xd194, 0x0db0, 0xd1f4,
1575 0x0548, 0x7007, 0x0002, 0x0880, 0x0428, 0x7108, 0xd1fc, 0x0130,
1576 0x080c, 0x40d6, 0x8aff, 0x0904, 0x3f54, 0x0cb8, 0x700c, 0xa08c,
1577 0x07ff, 0x01e8, 0x7004, 0xd084, 0x0178, 0x7014, 0xa005, 0x1148,
1578 0x7010, 0x7310, 0xa306, 0x1de0, 0x2300, 0xa005, 0x0128, 0xa102,
1579 0x1e20, 0x7007, 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c, 0x429a,
1580 0x1de8, 0x09d8, 0x080c, 0x405c, 0x012e, 0x2000, 0x0005, 0x7204,
1581 0x7108, 0xc19c, 0x8103, 0x1218, 0x7007, 0x0002, 0x0cc0, 0xa205,
1582 0x1d88, 0x7007, 0x0008, 0x7003, 0x0008, 0x0006, 0x2001, 0x4701,
1583 0x2004, 0xd0cc, 0x0110, 0x080c, 0x435b, 0x000e, 0x012e, 0x2000,
1584 0x0005, 0x6428, 0x84ff, 0x0508, 0x2c70, 0x7004, 0xa0bc, 0x000f,
1585 0xa7b8, 0x401d, 0x273c, 0x87fb, 0x1148, 0x0210, 0x080c, 0x2575,
1586 0x609c, 0xa075, 0x0190, 0x0c88, 0x2039, 0x4012, 0x2704, 0xae68,
1587 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0138, 0x8738, 0x2704,
1588 0xa005, 0x1da8, 0x709c, 0xa075, 0x1d00, 0x0005, 0x0000, 0x0005,
1589 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003,
1590 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4012, 0x400f,
1591 0x0000, 0x0000, 0x8000, 0x0000, 0x4012, 0x0000, 0x401a, 0x4017,
1592 0x0000, 0x0000, 0x0000, 0x0000, 0x401a, 0x0000, 0x4015, 0x4015,
1593 0x0000, 0x0000, 0x8000, 0x0000, 0x4015, 0x0000, 0x401b, 0x401b,
1594 0x0000, 0x0000, 0x0000, 0x0000, 0x401b, 0x2079, 0x4700, 0x2071,
1595 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x2009,
1596 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
1597 0x0000, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1128, 0x8109, 0x0118,
1598 0x2071, 0x0020, 0x0c80, 0x0005, 0x7004, 0x8004, 0x1a04, 0x40b2,
1599 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c,
1600 0x410e, 0x0804, 0x40d2, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108,
1601 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c, 0x410e,
1602 0x0804, 0x40d2, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0190, 0xa386,
1603 0x0008, 0x01c0, 0x7004, 0xd084, 0x1148, 0x7108, 0x7008, 0xa106,
1604 0x1de0, 0xa184, 0x0003, 0x0110, 0x0804, 0x410e, 0xa386, 0x200c,
1605 0x19f0, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384, 0x07ff, 0x0110,
1606 0x080c, 0x2575, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
1607 0x0118, 0x080c, 0x410e, 0x0470, 0x7007, 0x0012, 0x7000, 0xd084,
1608 0x1148, 0x7310, 0x7014, 0xa305, 0x0128, 0x710c, 0xa184, 0x07ff,
1609 0x1904, 0x405c, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
1610 0x0118, 0x080c, 0x410e, 0x00b0, 0x7007, 0x0012, 0x7007, 0x0008,
1611 0x7004, 0xd09c, 0x1de8, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184,
1612 0x01e0, 0x0118, 0x080c, 0x410e, 0x0028, 0x7007, 0x0012, 0x7108,
1613 0x8103, 0x0e88, 0x7003, 0x0008, 0x0005, 0x7108, 0xa184, 0x01e0,
1614 0x15a8, 0x7108, 0xa184, 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002,
1615 0x40ea, 0x40f8, 0x40e8, 0x40f8, 0x40e8, 0x4148, 0x40e8, 0x4146,
1616 0x080c, 0x2575, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff,
1617 0x1118, 0x2049, 0x0000, 0x0005, 0x080c, 0x429a, 0x1de8, 0x0005,
1618 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140,
1619 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030,
1620 0x8aff, 0x0118, 0x080c, 0x429a, 0x1de8, 0x0005, 0x7007, 0x0012,
1621 0x7108, 0x1d04, 0x4111, 0x2091, 0x6000, 0x1d04, 0x4115, 0x2091,
1622 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8,
1623 0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000,
1624 0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108,
1625 0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000,
1626 0x0010, 0x2001, 0x0001, 0x080c, 0x3ba7, 0x681b, 0x0002, 0x2051,
1627 0x0000, 0x0005, 0x080c, 0x2575, 0x080c, 0x2575, 0x080c, 0x4187,
1628 0x7210, 0x7114, 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211,
1629 0xa189, 0x0000, 0x04a1, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200,
1630 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238,
1631 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60,
1632 0x8a07, 0x0006, 0x6004, 0xd09c, 0x0118, 0xa7ba, 0x4017, 0x0010,
1633 0xa7ba, 0x400f, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92,
1634 0x6b8e, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110,
1635 0x080c, 0x410e, 0x7007, 0x0012, 0x080c, 0x405c, 0x0005, 0x8a50,
1636 0x8739, 0x2704, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108, 0x2d60,
1637 0x6004, 0xa084, 0x000f, 0xa080, 0x402d, 0x203c, 0x87fb, 0x090c,
1638 0x2575, 0x0005, 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004,
1639 0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057,
1640 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084, 0x0008,
1641 0x000e, 0x0118, 0xa0b8, 0x4017, 0x0010, 0xa0b8, 0x400f, 0xb284,
1642 0x0200, 0x0110, 0x7e20, 0x0008, 0x7e24, 0xa6b5, 0x000c, 0x681c,
1643 0xd0b4, 0x0108, 0xc685, 0x2400, 0xa305, 0x0550, 0x2c58, 0x2704,
1644 0x6104, 0xac60, 0x6000, 0xa400, 0x2048, 0xa9cc, 0x0004, 0x0118,
1645 0x080c, 0x43a3, 0x0400, 0x701a, 0x6004, 0xa301, 0x701e, 0xd19c,
1646 0x0140, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, 0x0000,
1647 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203,
1648 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x080c, 0x42c5, 0x0010,
1649 0x080c, 0x429a, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x00d6,
1650 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7007, 0x0004,
1651 0x7004, 0xd094, 0x1de8, 0x7003, 0x0008, 0x012e, 0x2000, 0x0005,
1652 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de,
1653 0x7e20, 0xb284, 0x0200, 0x1108, 0x7e24, 0xa6b5, 0x000c, 0x681c,
1654 0xd0ac, 0x1118, 0xc685, 0x7003, 0x0000, 0x6828, 0x2050, 0x2d60,
1655 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x401d, 0x273c, 0x87fb, 0x1138,
1656 0x0210, 0x080c, 0x2575, 0x689c, 0xa065, 0x0120, 0x0c88, 0x080c,
1657 0x429a, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x0006, 0x0016,
1658 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7e20, 0xb284,
1659 0x0200, 0x1108, 0x7e24, 0x00de, 0x003e, 0x004e, 0xa6b5, 0x000c,
1660 0x681c, 0xd0b4, 0x0128, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004,
1661 0x2049, 0x4235, 0x6828, 0xa055, 0x00d6, 0x0904, 0x4296, 0x2d70,
1662 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x401d, 0x273c, 0x87fb,
1663 0x1140, 0x0210, 0x080c, 0x2575, 0x709c, 0xa075, 0x2060, 0x0570,
1664 0x0c80, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0268,
1665 0x8a51, 0x1110, 0x080c, 0x2575, 0x8738, 0x2704, 0xa005, 0x1d90,
1666 0x709c, 0xa075, 0x2060, 0x01d0, 0x08e0, 0x8422, 0x8420, 0x831a,
1667 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b,
1668 0x1210, 0x080c, 0x2575, 0xb284, 0x0200, 0x0118, 0x2071, 0x0050,
1669 0x0010, 0x2071, 0x0020, 0x00de, 0x0804, 0x41c3, 0x00de, 0x012e,
1670 0x2000, 0x0005, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e, 0x0110,
1671 0xa006, 0x0005, 0xa084, 0x0003, 0xa086, 0x0003, 0x1108, 0x0005,
1672 0x2704, 0xac78, 0x7800, 0x2f08, 0xd094, 0x1904, 0x43a6, 0x701a,
1673 0x7804, 0x701e, 0x7808, 0x7012, 0x780c, 0x7016, 0x6004, 0xd09c,
1674 0x0120, 0x7810, 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084,
1675 0x0010, 0xc085, 0x7006, 0x2079, 0x4700, 0x8a51, 0x01e8, 0x8738,
1676 0x2704, 0xa005, 0x1168, 0x609c, 0xa005, 0x01b8, 0x2060, 0x6004,
1677 0xa084, 0x000f, 0xa080, 0x401d, 0x203c, 0x87fb, 0x090c, 0x2575,
1678 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e, 0x0110, 0xa006, 0x0028,
1679 0xa084, 0x0003, 0xa086, 0x0003, 0x0005, 0x2051, 0x0000, 0x0005,
1680 0x0126, 0x0006, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090,
1681 0x00de, 0x008e, 0x7108, 0xa184, 0x0003, 0x1128, 0x6828, 0xa005,
1682 0x0178, 0x0804, 0x3f6d, 0x7108, 0xd1fc, 0x0118, 0x080c, 0x40d6,
1683 0x0c88, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0de8, 0x080c, 0x40d6,
1684 0x7008, 0xa086, 0x0008, 0x1d30, 0x7000, 0xa005, 0x1d18, 0x7003,
1685 0x0000, 0x2049, 0x0000, 0x0006, 0x2001, 0x4701, 0x2004, 0xd0cc,
1686 0x0110, 0x080c, 0x435b, 0x000e, 0x012e, 0x2000, 0x0005, 0x0126,
1687 0x0146, 0x0136, 0x0156, 0x00c6, 0x00d6, 0x70d0, 0xa084, 0x4c00,
1688 0x8004, 0x2090, 0x00de, 0x2049, 0x431f, 0xad80, 0x0011, 0x20a0,
1689 0xb284, 0x0200, 0x0118, 0x2099, 0x0032, 0x0010, 0x2099, 0x0031,
1690 0x700c, 0xa084, 0x07ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002,
1691 0x7003, 0x0001, 0x0118, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084,
1692 0x07ff, 0x0130, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x1de0,
1693 0x00ce, 0x2049, 0x0000, 0x7003, 0x0000, 0x015e, 0x013e, 0x014e,
1694 0x012e, 0x2000, 0x0005, 0x6814, 0xd0fc, 0x0904, 0x439e, 0x7000,
1695 0xd084, 0x05e0, 0x7e24, 0xa6b5, 0x0004, 0x7007, 0x0004, 0x7004,
1696 0xa084, 0x0004, 0x1de0, 0x7118, 0x0016, 0x711c, 0x0016, 0x7120,
1697 0x0016, 0x7124, 0x0016, 0x701b, 0x0000, 0x701f, 0x3fff, 0x7023,
1698 0x0000, 0x7027, 0x0000, 0x7013, 0x0004, 0x7017, 0x0000, 0x7602,
1699 0x7007, 0x0001, 0x2001, 0xffff, 0x2009, 0x0031, 0x200a, 0x200a,
1700 0x7108, 0x7008, 0xa106, 0x1de0, 0xd1fc, 0x0dd0, 0x002e, 0x7226,
1701 0x002e, 0x7222, 0x002e, 0x721e, 0x002e, 0x721a, 0x7007, 0x0002,
1702 0x7008, 0xa086, 0x0008, 0x0110, 0x0804, 0x410e, 0x7007, 0x0004,
1703 0x7003, 0x0000, 0x0005, 0x2049, 0x41c3, 0x0068, 0x7008, 0xa084,
1704 0x0003, 0x0110, 0xa006, 0x0005, 0xa006, 0x2020, 0x2018, 0x2c58,
1705 0x2160, 0x2049, 0x0000, 0x8b58, 0x6100, 0x2100, 0xa408, 0x711a,
1706 0x6004, 0xa301, 0x701e, 0x0006, 0x2b04, 0xa084, 0x0008, 0x0150,
1707 0x6010, 0xa081, 0x0000, 0x7022, 0x0006, 0x6014, 0xa081, 0x0000,
1708 0x7026, 0x0006, 0xa184, 0x0007, 0x2011, 0x0008, 0xa22a, 0x6208,
1709 0x2400, 0xa212, 0x0026, 0x620c, 0x2240, 0x2300, 0xa843, 0x002e,
1710 0x88ff, 0x1170, 0x2500, 0xa202, 0x0108, 0x1250, 0x2220, 0x2041,
1711 0x0000, 0x2b04, 0xd09c, 0x0110, 0x000e, 0x000e, 0x000e, 0x0450,
1712 0x7512, 0x7017, 0x0000, 0x7602, 0xa986, 0x41c3, 0x1118, 0x7007,
1713 0x0001, 0x0028, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006, 0x2500,
1714 0xa100, 0x701a, 0x2b04, 0xa084, 0x0008, 0x0110, 0x000e, 0x004e,
1715 0x001e, 0xa189, 0x0000, 0x711e, 0x2b0c, 0xa18c, 0x0008, 0x0130,
1716 0xa4a1, 0x0000, 0x7422, 0xa081, 0x0000, 0x7026, 0x2500, 0xa222,
1717 0xa8c3, 0x0000, 0x7412, 0x2820, 0x7416, 0x7602, 0xa986, 0x41c3,
1718 0x1118, 0x7007, 0x0001, 0x0028, 0x7004, 0xa084, 0x0010, 0xc085,
1719 0x7006, 0x8b59, 0x2b60, 0x2079, 0x4700, 0x080c, 0x42c5, 0xa006,
1720 0x0005, 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac, 0xa005, 0x1168,
1721 0x7974, 0x70d0, 0xa106, 0x1148, 0x781c, 0xa005, 0x0130, 0x781f,
1722 0x0000, 0x0e04, 0x443d, 0x2091, 0x4080, 0x2069, 0x4780, 0xc7fd,
1723 0x6800, 0xa084, 0x000f, 0x1198, 0x68d0, 0xd0b4, 0x0180, 0xd0bc,
1724 0x1170, 0x00f6, 0x2079, 0x0100, 0xd7fc, 0x1110, 0x2079, 0x0200,
1725 0x7830, 0xa084, 0x00c0, 0x1110, 0x080c, 0x22d5, 0x00fe, 0xd7fc,
1726 0x0120, 0x2069, 0x4740, 0xc7fc, 0x0c18, 0x7830, 0x8001, 0x7832,
1727 0x1904, 0x44c7, 0x7834, 0x7832, 0x2061, 0x6cc0, 0x2069, 0x4780,
1728 0xc7fd, 0x68cc, 0xa005, 0x0128, 0x8001, 0x68ce, 0x1110, 0x080c,
1729 0x4639, 0x6800, 0xa084, 0x000f, 0x0168, 0xa086, 0x0001, 0x0150,
1730 0x6840, 0xa00d, 0x0138, 0x2104, 0xa005, 0x0120, 0x8001, 0x200a,
1731 0x0904, 0x45d6, 0x6814, 0xa005, 0x01a8, 0x8001, 0x6816, 0x1190,
1732 0x68a3, 0x0001, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x0200, 0x0010,
1733 0x2079, 0x0100, 0x080c, 0x3c6e, 0x00fe, 0x6860, 0xa005, 0x0110,
1734 0x080c, 0x22d5, 0x687c, 0xa005, 0x0140, 0x8001, 0x687e, 0x1128,
1735 0x6863, 0x0000, 0x68d0, 0xc0c5, 0x68d2, 0x68d0, 0xd0fc, 0x01b0,
1736 0xc0fc, 0x68d2, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0158, 0x8001,
1737 0x6036, 0x68d0, 0xc0fd, 0x68d2, 0x1128, 0x6010, 0xa005, 0x0110,
1738 0x080c, 0x22d5, 0xace0, 0x0010, 0x1f04, 0x44ac, 0xd7fc, 0x0138,
1739 0x2061, 0x4cc0, 0x2069, 0x4740, 0xc7fc, 0x0804, 0x4469, 0x0459,
1740 0x7838, 0x8001, 0x783a, 0x11a0, 0x783c, 0x783a, 0x2061, 0x4cc0,
1741 0x2069, 0x4740, 0xc7fc, 0x680c, 0xa005, 0x0110, 0x080c, 0x4543,
1742 0xd7fc, 0x1130, 0x2061, 0x6cc0, 0x2069, 0x4780, 0xc7fd, 0x0c98,
1743 0x7810, 0xd0cc, 0x0168, 0xd0ac, 0x1120, 0xd0a4, 0x0148, 0xc0ad,
1744 0x7812, 0x2091, 0x8001, 0x0e04, 0x44ef, 0x080c, 0x20a1, 0x0005,
1745 0x2091, 0x8001, 0x0005, 0x7840, 0x8001, 0x7842, 0x1904, 0x4542,
1746 0x7844, 0x7842, 0x2069, 0x4740, 0xc7fc, 0x2079, 0x0200, 0x68d4,
1747 0xa005, 0x0138, 0x7de0, 0xa504, 0x1120, 0x68d6, 0x68d0, 0xc0bc,
1748 0x68d2, 0x2079, 0x4700, 0x6810, 0xa005, 0x1110, 0x2001, 0x0101,
1749 0x8001, 0x6812, 0xd7fc, 0x0118, 0xa080, 0x8dd0, 0x0010, 0xa080,
1750 0x8cc0, 0x2040, 0x2004, 0xa065, 0x01e0, 0x6024, 0xa005, 0x01b0,
1751 0x8001, 0x6026, 0x1198, 0x6800, 0xa005, 0x0130, 0x6848, 0xac06,
1752 0x1118, 0x080c, 0x45d6, 0x0068, 0x6860, 0xa005, 0x0118, 0x6027,
1753 0x0001, 0x0020, 0x080c, 0x4584, 0x2804, 0x0c28, 0x6000, 0x2c40,
1754 0x0c10, 0xd7fc, 0x1138, 0x2069, 0x4780, 0xc7fd, 0x2079, 0x0100,
1755 0x0804, 0x44ff, 0x0005, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008,
1756 0xd09c, 0x0558, 0x6024, 0xa005, 0x0118, 0x8001, 0x6026, 0x0418,
1757 0x6008, 0xc09c, 0xd084, 0x1110, 0xd0ac, 0x01c0, 0x600a, 0x6004,
1758 0xa005, 0x01d8, 0x00d6, 0x00c6, 0x0016, 0x2068, 0x6010, 0x8001,
1759 0x6012, 0x080c, 0x37c7, 0x2d00, 0x2c68, 0x2060, 0x080c, 0x1c02,
1760 0x080c, 0x1db2, 0x001e, 0x00ce, 0x00de, 0x0038, 0xc0bd, 0x600a,
1761 0xa18d, 0x0001, 0x0010, 0xa18d, 0x0100, 0xace0, 0x0010, 0x1f04,
1762 0x4547, 0xa184, 0x0001, 0x0130, 0xa18c, 0xfffe, 0x690e, 0x080c,
1763 0x22d5, 0x0008, 0x690e, 0x0005, 0x2c00, 0x687a, 0x6714, 0x6f72,
1764 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084,
1765 0x5f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022,
1766 0x6000, 0x2042, 0x2069, 0x4780, 0xd7fc, 0x1110, 0x2069, 0x4740,
1767 0x6858, 0xac06, 0x1110, 0x2800, 0x685a, 0x080c, 0x1b9a, 0x6818,
1768 0xa005, 0x0110, 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810,
1769 0x7908, 0x8109, 0x790a, 0x8001, 0x1310, 0x080c, 0x2575, 0x6812,
1770 0x1118, 0x7910, 0xc1a5, 0x7912, 0x602f, 0x0000, 0x6033, 0x0000,
1771 0x2c68, 0x080c, 0x1dbf, 0xd7fc, 0x1118, 0x2069, 0x4740, 0x0010,
1772 0x2069, 0x4780, 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x1118,
1773 0x6976, 0x2001, 0x0004, 0x080c, 0x22cb, 0x0005, 0x00d6, 0x6948,
1774 0x2160, 0xd7fc, 0x1118, 0x2069, 0x0200, 0x0010, 0x2069, 0x0100,
1775 0x080c, 0x2490, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00, 0x601e,
1776 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000,
1777 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4,
1778 0x01b0, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110,
1779 0x1f04, 0x45fd, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084,
1780 0x0110, 0x1f04, 0x4606, 0x20a9, 0x00fa, 0x1f04, 0x460d, 0x681b,
1781 0x0054, 0x00de, 0x6863, 0x0007, 0x0005, 0x2079, 0x4700, 0x00e1,
1782 0x0089, 0x00a9, 0x2009, 0x0002, 0x2069, 0x4780, 0x680f, 0x0000,
1783 0x6813, 0x0000, 0x6817, 0x0000, 0x8109, 0x0118, 0x2069, 0x4740,
1784 0x0ca8, 0x0005, 0x2019, 0x00a3, 0x7b3a, 0x7b3e, 0x0005, 0x2019,
1785 0x0033, 0x7b42, 0x7b46, 0x0005, 0x2019, 0x32dd, 0x7b32, 0x7b36,
1786 0x0005, 0x6a4c, 0xa285, 0x0000, 0x01f0, 0x6950, 0x6bbc, 0xa300,
1787 0x00c6, 0x2164, 0x6304, 0x83ff, 0x1138, 0x8211, 0x0148, 0x8108,
1788 0xa11a, 0x0eb8, 0x69bc, 0x0ca8, 0x68cf, 0x000a, 0x00ce, 0x0005,
1789 0x694c, 0x6abc, 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109,
1790 0x1dc8, 0x694e, 0x00ce, 0x0005, 0x0016, 0x1d04, 0x465d, 0x2091,
1791 0x6000, 0x1d04, 0x4661, 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x1118,
1792 0xd0d4, 0x0190, 0x00a0, 0xae8e, 0x0100, 0x0138, 0x7814, 0xc0f5,
1793 0xc0c5, 0x7816, 0xd0d4, 0x1580, 0x0460, 0x7814, 0xc0fd, 0xc0c5,
1794 0x7816, 0xd0d4, 0x1548, 0x0428, 0xd0e4, 0x0904, 0x46c4, 0x1d04,
1795 0x467f, 0x2091, 0x6000, 0x2009, 0x000c, 0x1d04, 0x4685, 0x2091,
1796 0x6000, 0x8109, 0x1dd0, 0x70e4, 0xa084, 0x01ff, 0xa086, 0x01ff,
1797 0x1110, 0x70ec, 0x08c0, 0xae8e, 0x0100, 0x0128, 0x7814, 0xc0f4,
1798 0xd0fc, 0x1130, 0x0020, 0x7814, 0xc0fc, 0xd0f4, 0x1108, 0xc0c4,
1799 0x7816, 0x7804, 0xd08c, 0x0500, 0x00c6, 0x2061, 0x0000, 0x6018,
1800 0xd084, 0x11b8, 0xae86, 0x0200, 0x00e6, 0x2071, 0x0010, 0x0120,
1801 0x70db, 0x0001, 0x78e4, 0x0018, 0x70db, 0x0000, 0x78e0, 0x70c6,
1802 0x70c3, 0x800e, 0x601b, 0x0001, 0x2091, 0x4080, 0x00ee, 0x00ce,
1803 0x0018, 0x00ce, 0x681f, 0x000c, 0x001e, 0x70a0, 0x70a2, 0x0005,
1804 0x0c26
1805};
1806#ifdef UNIQUE_FW_NAME
1807static unsigned short fw12160i_length01 = 0x36c9;
1808#else
1809static unsigned short risc_code_length01 = 0x36c9;
1810#endif
1811
diff --git a/drivers/scsi/ql1280_fw.h b/drivers/scsi/ql1280_fw.h
deleted file mode 100644
index 784f2a04bf28..000000000000
--- a/drivers/scsi/ql1280_fw.h
+++ /dev/null
@@ -1,2048 +0,0 @@
1/*****************************************************************************
2 * QLOGIC LINUX SOFTWARE
3 *
4 * QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x
5 * Copyright (C) 2001 Qlogic Corporation (www.qlogic.com)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
10 * later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 *****************************************************************************/
18
19/************************************************************************
20 * --- ISP1240/1080/1280 Initiator Firmware --- *
21 * 32 LUN Support *
22 ************************************************************************/
23
24
25/*
26 * Firmware Version 8.15.11 (10:20 Jan 02, 2002)
27 */
28
29#ifdef UNIQUE_FW_NAME
30static unsigned char fw1280ei_version_str[] = {8,15,11};
31#else
32static unsigned char firmware_version[] = {8,15,11};
33#endif
34
35#ifdef UNIQUE_FW_NAME
36#define fw1280ei_VERSION_STRING "8.15.11"
37#else
38#define FW_VERSION_STRING "8.15.11"
39#endif
40
41#ifdef UNIQUE_FW_NAME
42static unsigned short fw1280ei_addr01 = 0x1000 ;
43#else
44static unsigned short risc_code_addr01 = 0x1000 ;
45#endif
46
47#ifdef UNIQUE_FW_NAME
48static unsigned short fw1280ei_code01[] = {
49#else
50static unsigned short risc_code01[] = {
51#endif
52 0x0078, 0x1041, 0x0000, 0x3e2e, 0x0000, 0x2043, 0x4f50, 0x5952,
53 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
54 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
55 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
56 0x3132, 0x3430, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
57 0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3135, 0x2020, 0x2043,
58 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
59 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
60 0x2400, 0x20c9, 0x98ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080,
61 0x00c0, 0x1054, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010,
62 0x2089, 0x1374, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086,
63 0x1280, 0x00c0, 0x1069, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2071,
64 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f8, 0x0078,
65 0x106d, 0x20c1, 0x0020, 0x2089, 0x131c, 0x2071, 0x0010, 0x70c3,
66 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
67 0x0008, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, 0x0000,
68 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64,
69 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114,
70 0xa286, 0xa5a5, 0x0040, 0x10a4, 0xa386, 0x000f, 0x0040, 0x10a0,
71 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, 0x1080,
72 0x2c6a, 0x2a5a, 0x0078, 0x10a2, 0x2c6a, 0x2a5a, 0x2130, 0x2128,
73 0xa1a2, 0x4f00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
74 0xa192, 0x9900, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x20c1,
75 0x2218, 0x2079, 0x4f00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9,
76 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2009, 0xff00, 0x3400,
77 0xa102, 0x0048, 0x10cf, 0x0040, 0x10cf, 0x20a8, 0x42a4, 0x2001,
78 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e5, 0x2071, 0x0100,
79 0x0d7e, 0x2069, 0x4f40, 0x1078, 0x4db0, 0x0d7f, 0x7810, 0xc0ed,
80 0x7812, 0x781b, 0x0064, 0x0078, 0x110a, 0x2001, 0x04fc, 0x2004,
81 0xa086, 0x1280, 0x00c0, 0x1105, 0x7814, 0xc0ed, 0xc0d5, 0x7816,
82 0x781b, 0x0064, 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4f40, 0x1078,
83 0x4db0, 0x2069, 0x4f80, 0x2071, 0x0100, 0x1078, 0x4db0, 0x7814,
84 0xc0d4, 0x7816, 0x0d7f, 0x0078, 0x110a, 0x7814, 0xc0e5, 0x7816,
85 0x781b, 0x003c, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800,
86 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002,
87 0x7827, 0x0002, 0x2009, 0x0002, 0x2069, 0x4f40, 0x681b, 0x0003,
88 0x6823, 0x0007, 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028,
89 0x6837, 0x0000, 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000,
90 0x8109, 0x0040, 0x115e, 0x68d3, 0x000a, 0x68c3, 0x4fc0, 0x2079,
91 0x4f00, 0x7814, 0xd0e4, 0x00c0, 0x1144, 0xd0ec, 0x00c0, 0x1148,
92 0x68d7, 0x7329, 0x0078, 0x114a, 0x68d7, 0x730d, 0x0078, 0x114a,
93 0x68d7, 0x732d, 0x68c7, 0x54c0, 0x68cb, 0x53c0, 0x68cf, 0x94c0,
94 0x68ab, 0x9744, 0x68af, 0x9749, 0x68b3, 0x9744, 0x68b7, 0x9744,
95 0x68a7, 0x0001, 0x2069, 0x4f80, 0x0078, 0x111e, 0x68d3, 0x000a,
96 0x68c3, 0x51c0, 0x7814, 0xd0e4, 0x00c0, 0x116a, 0x68d7, 0x7439,
97 0x0078, 0x116c, 0x68d7, 0x7419, 0x68c7, 0x74c0, 0x68cb, 0x5440,
98 0x68cf, 0x95d0, 0x68ab, 0x9749, 0x68af, 0x974e, 0x68b3, 0x9749,
99 0x68b7, 0x9749, 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11c2,
100 0x7814, 0xd0e4, 0x00c0, 0x11b4, 0x0e7e, 0x2069, 0x53c0, 0x2071,
101 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1195, 0x2019, 0x0c0c, 0x2021,
102 0x000c, 0x1078, 0x2050, 0x0078, 0x119b, 0x2019, 0x0c0a, 0x2021,
103 0x000a, 0x1078, 0x2050, 0x2069, 0x5440, 0x2071, 0x0100, 0x70ec,
104 0xd0e4, 0x00c0, 0x11ab, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078,
105 0x2050, 0x0078, 0x11b1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078,
106 0x2050, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0c, 0x2021, 0x000c,
107 0x2069, 0x53c0, 0x1078, 0x2050, 0x2069, 0x5440, 0x1078, 0x2050,
108 0x0078, 0x11db, 0x2069, 0x53c0, 0x0e7e, 0x2071, 0x0100, 0x70ec,
109 0xd0e4, 0x00c0, 0x11d4, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078,
110 0x2050, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0a, 0x2021, 0x000a,
111 0x1078, 0x2050, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x54c0, 0x2009,
112 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8,
113 0xa386, 0xfeff, 0x00c0, 0x11f2, 0x6817, 0x0100, 0x681f, 0x0064,
114 0x0078, 0x11f6, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
115 0x00f0, 0x11e3, 0x8109, 0x00c0, 0x11e1, 0x8211, 0x0040, 0x1204,
116 0x2069, 0x74c0, 0x0078, 0x11df, 0x1078, 0x26a2, 0x1078, 0x4712,
117 0x1078, 0x1e1b, 0x1078, 0x4d42, 0x2091, 0x2100, 0x2079, 0x4f00,
118 0x7810, 0xd0ec, 0x0040, 0x1218, 0x2071, 0x0020, 0x0078, 0x121a,
119 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x4f00, 0x2071, 0x0020,
120 0x2091, 0x2300, 0x2079, 0x4f00, 0x7810, 0xd0ec, 0x0040, 0x122c,
121 0x2079, 0x0100, 0x0078, 0x122e, 0x2079, 0x0200, 0x2071, 0x4f40,
122 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x4f80, 0x2091, 0x2000,
123 0x2079, 0x4f00, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090,
124 0x2071, 0x0010, 0x70c3, 0x0000, 0x0090, 0x124d, 0x70c0, 0xa086,
125 0x0002, 0x00c0, 0x124d, 0x1078, 0x15c1, 0x2039, 0x0000, 0x7810,
126 0xd0ec, 0x00c0, 0x12cf, 0x1078, 0x148e, 0x78ac, 0xa005, 0x00c0,
127 0x126b, 0x0068, 0x1261, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078,
128 0x23dc, 0x1078, 0x20e8, 0x0068, 0x1278, 0x786c, 0xa065, 0x0040,
129 0x126b, 0x1078, 0x23dc, 0x0068, 0x1278, 0x2009, 0x4f47, 0x2011,
130 0x4f87, 0x2104, 0x220c, 0xa105, 0x0040, 0x1278, 0x1078, 0x1f51,
131 0x2071, 0x4f40, 0x70a4, 0xa005, 0x0040, 0x129d, 0x7450, 0xa485,
132 0x0000, 0x0040, 0x129d, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4,
133 0xa28c, 0x303d, 0x2190, 0x1078, 0x2bb1, 0x2091, 0x8000, 0x2091,
134 0x303d, 0x0068, 0x129d, 0x2079, 0x4f00, 0x786c, 0xa065, 0x0040,
135 0x129d, 0x2071, 0x0010, 0x1078, 0x23dc, 0x00e0, 0x12a5, 0x2079,
136 0x4f00, 0x2071, 0x0010, 0x1078, 0x4b16, 0x2071, 0x4f80, 0x70a4,
137 0xa005, 0x0040, 0x12bd, 0x7050, 0xa025, 0x0040, 0x12bd, 0x2079,
138 0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078,
139 0x2bb1, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, 0x4f00, 0x2071,
140 0x0010, 0x0068, 0x12c9, 0x786c, 0xa065, 0x0040, 0x12c9, 0x1078,
141 0x23dc, 0x00e0, 0x1253, 0x1078, 0x4b16, 0x0078, 0x1253, 0x1078,
142 0x148e, 0x78ac, 0xa005, 0x00c0, 0x12e7, 0x0068, 0x12dd, 0x786c,
143 0xa065, 0x0040, 0x12dd, 0x1078, 0x23dc, 0x1078, 0x20e8, 0x0068,
144 0x12f1, 0x786c, 0xa065, 0x0040, 0x12e7, 0x1078, 0x23dc, 0x0068,
145 0x12f1, 0x2009, 0x4f47, 0x2104, 0xa005, 0x0040, 0x12f1, 0x1078,
146 0x1f51, 0x2071, 0x4f40, 0x70a4, 0xa005, 0x0040, 0x130c, 0x7450,
147 0xa485, 0x0000, 0x0040, 0x130c, 0x2079, 0x0100, 0x2091, 0x8000,
148 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2bb1, 0x2091, 0x8000,
149 0x2091, 0x303d, 0x2079, 0x4f00, 0x2071, 0x0010, 0x0068, 0x1316,
150 0x786c, 0xa065, 0x0040, 0x1316, 0x1078, 0x23dc, 0x00e0, 0x12cf,
151 0x1078, 0x4b16, 0x0078, 0x12cf, 0x133c, 0x133c, 0x133e, 0x133e,
152 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363,
153 0x134b, 0x134b, 0x134b, 0x134b, 0x133c, 0x133c, 0x133e, 0x133e,
154 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363,
155 0x134b, 0x134b, 0x134b, 0x134b, 0x0078, 0x133c, 0x007e, 0x107e,
156 0x127e, 0x2091, 0x2400, 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f,
157 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c8,
158 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
159 0x127e, 0x2091, 0x2300, 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f,
160 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300,
161 0x1078, 0x29d1, 0x2091, 0x2400, 0x1078, 0x29d1, 0x127f, 0x107f,
162 0x007f, 0x2091, 0x8001, 0x007c, 0x1394, 0x1394, 0x1396, 0x1396,
163 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13ae, 0x13ae, 0x1396, 0x1396,
164 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13af, 0x13af, 0x13af, 0x13af,
165 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af,
166 0x13af, 0x13af, 0x13af, 0x13af, 0x0078, 0x1394, 0x007e, 0x107e,
167 0x127e, 0x2091, 0x2300, 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f,
168 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13d5,
169 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e,
170 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069,
171 0x4f40, 0x2079, 0x4f00, 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078,
172 0x4db0, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007c,
173 0x3c00, 0xa084, 0x0007, 0x0079, 0x13cd, 0x13de, 0x13de, 0x13e0,
174 0x13e0, 0x13e5, 0x13e5, 0x13ea, 0x13ea, 0x3c00, 0xa084, 0x0003,
175 0x0079, 0x13da, 0x13de, 0x13de, 0x13f3, 0x13f3, 0x1078, 0x29b2,
176 0x2091, 0x2200, 0x1078, 0x47ec, 0x007c, 0x2091, 0x2100, 0x1078,
177 0x47ec, 0x007c, 0x2091, 0x2100, 0x1078, 0x47ec, 0x2091, 0x2200,
178 0x1078, 0x47ec, 0x007c, 0x2091, 0x2100, 0x1078, 0x47ec, 0x007c,
179 0x1418, 0x1418, 0x141a, 0x141a, 0x1427, 0x1427, 0x1427, 0x1427,
180 0x1432, 0x1432, 0x143f, 0x143f, 0x1427, 0x1427, 0x1427, 0x1427,
181 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450,
182 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450,
183 0x0078, 0x1418, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078,
184 0x29d1, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e,
185 0x107e, 0x127e, 0x1078, 0x13c8, 0x127f, 0x107f, 0x007f, 0x2091,
186 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078,
187 0x29d1, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e,
188 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x29d1, 0x2091, 0x2400,
189 0x1078, 0x29d1, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c,
190 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2079, 0x4f00,
191 0x2071, 0x0200, 0x2069, 0x4f40, 0x3d00, 0xd08c, 0x0040, 0x1466,
192 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, 0x4db0, 0x3d00, 0xd084,
193 0x0040, 0x1474, 0x2069, 0x4f80, 0x2071, 0x0100, 0x70ec, 0xa084,
194 0x1c00, 0x78e6, 0x1078, 0x4db0, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f,
195 0x107f, 0x007f, 0x007c, 0x7008, 0x800b, 0x00c8, 0x1489, 0x7007,
196 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x148a, 0xd09c, 0x0040, 0x1489,
197 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x15c4, 0x0068, 0x151a,
198 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, 0x151a, 0x7828, 0xa005,
199 0x00c0, 0x149e, 0x0010, 0x151b, 0x0078, 0x151a, 0x7910, 0xd1f4,
200 0x0040, 0x14a4, 0x0078, 0x14b9, 0x7914, 0xd1ec, 0x0040, 0x14bd,
201 0xd0fc, 0x0040, 0x14b3, 0x007e, 0x1078, 0x1dae, 0x007f, 0x0040,
202 0x14bd, 0x0078, 0x14b9, 0x007e, 0x1078, 0x1da1, 0x007f, 0x0040,
203 0x14bd, 0x2001, 0x4007, 0x0078, 0x15c3, 0x7910, 0xd0fc, 0x00c0,
204 0x14c7, 0x2061, 0x4f40, 0xc19c, 0xc7fc, 0x0078, 0x14cb, 0x2061,
205 0x4f80, 0xc19d, 0xc7fd, 0x6064, 0xa005, 0x00c0, 0x151a, 0x7912,
206 0x6082, 0x7828, 0xc0fc, 0xa086, 0x0018, 0x00c0, 0x14db, 0x0c7e,
207 0x1078, 0x1b85, 0x0c7f, 0x782b, 0x0000, 0x607c, 0xa065, 0x0040,
208 0x1500, 0x0c7e, 0x609c, 0x1078, 0x1e90, 0x0c7f, 0x609f, 0x0000,
209 0x1078, 0x1cd5, 0x2009, 0x0018, 0x6087, 0x0103, 0x7810, 0x007e,
210 0x84ff, 0x00c0, 0x14f6, 0x85ff, 0x0040, 0x14f8, 0xc0c5, 0x7812,
211 0x1078, 0x1dbb, 0x007f, 0x7812, 0x00c0, 0x1514, 0x1078, 0x1e0d,
212 0x7810, 0xd09c, 0x00c0, 0x1508, 0x2061, 0x4f40, 0x0078, 0x150c,
213 0x2061, 0x4f80, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4, 0xd0dc,
214 0x0040, 0x1518, 0xc0dc, 0x60d6, 0x2001, 0x4005, 0x0078, 0x15c3,
215 0x0078, 0x15c1, 0x007c, 0x7810, 0xd0f4, 0x0040, 0x1523, 0x2001,
216 0x4007, 0x0078, 0x15c3, 0xa006, 0x70c2, 0x70c6, 0x70ca, 0x70ce,
217 0x70da, 0x70c0, 0xa03d, 0xa08a, 0x0040, 0x00c8, 0x1531, 0x0079,
218 0x1538, 0x2100, 0xa08a, 0x0040, 0x00c8, 0x15cf, 0x0079, 0x1578,
219 0x15c1, 0x1617, 0x15e0, 0x164f, 0x1687, 0x1687, 0x15d7, 0x1ced,
220 0x1692, 0x15cf, 0x15e4, 0x15e6, 0x15e8, 0x15ea, 0x1cf2, 0x15cf,
221 0x16a0, 0x16fd, 0x1ba5, 0x1ce7, 0x15ec, 0x19ea, 0x1a2c, 0x1a67,
222 0x1ab8, 0x19a5, 0x19b2, 0x19c6, 0x19d9, 0x17eb, 0x15cf, 0x1734,
223 0x1741, 0x174d, 0x1759, 0x176f, 0x177b, 0x177e, 0x178a, 0x1796,
224 0x179e, 0x17d3, 0x17df, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x17f8,
225 0x180a, 0x1826, 0x185c, 0x1884, 0x1894, 0x1897, 0x18c8, 0x18f9,
226 0x190b, 0x1974, 0x1984, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x1994,
227 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x1d17, 0x1d1d, 0x15cf,
228 0x15cf, 0x15cf, 0x1d21, 0x1d66, 0x15cf, 0x15cf, 0x15cf, 0x15cf,
229 0x1611, 0x1681, 0x169a, 0x16f7, 0x1b9f, 0x15cf, 0x15cf, 0x1b68,
230 0x15cf, 0x1d6a, 0x1d09, 0x1d13, 0x15cf, 0x15cf, 0x15cf, 0x15cf,
231 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf,
232 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf,
233 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf,
234 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf, 0x15cf,
235 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x15c3, 0x73ce, 0x72ca,
236 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x15c4, 0x2061, 0x0000,
237 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, 0x70c3,
238 0x4001, 0x0078, 0x15c4, 0x70c3, 0x4006, 0x0078, 0x15c4, 0x2099,
239 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, 0x15c1,
240 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x15c1, 0x0078, 0x15c1,
241 0x0078, 0x15c1, 0x0078, 0x15c1, 0x2091, 0x8000, 0x70c3, 0x0004,
242 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0008,
243 0x2001, 0x000f, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031,
244 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445, 0x2061,
245 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080, 0x0078,
246 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x161a, 0x2029,
247 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2099,
248 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e, 0x7422,
249 0x7526, 0x2021, 0x0040, 0x81ff, 0x0040, 0x15c1, 0xa182, 0x0040,
250 0x00c8, 0x1634, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007,
251 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, 0x163b, 0x7007,
252 0x0002, 0xa084, 0x01e0, 0x0040, 0x1649, 0x70c3, 0x4002, 0x0078,
253 0x15c4, 0x24a8, 0x53a5, 0x0078, 0x162b, 0x0078, 0x15c1, 0x2029,
254 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1,
255 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e, 0x7422,
256 0x7526, 0x2021, 0x0040, 0x7007, 0x0006, 0x81ff, 0x0040, 0x15c1,
257 0xa182, 0x0040, 0x00c8, 0x166e, 0x2120, 0xa006, 0x2008, 0x8403,
258 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040,
259 0x1675, 0xa084, 0x01e0, 0x0040, 0x1663, 0x70c3, 0x4002, 0x0078,
260 0x15c4, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1652, 0x71c4,
261 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x168f, 0x200a, 0x72ca,
262 0x0078, 0x15c0, 0x70c7, 0x0008, 0x70cb, 0x000f, 0x70cf, 0x000b,
263 0x0078, 0x15c1, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x16a3,
264 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6,
265 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x16f2, 0xa40a, 0x0040,
266 0x16b3, 0x00c8, 0x16bc, 0x8001, 0x7872, 0xa084, 0xfc00, 0x0040,
267 0x16c0, 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078, 0x15c3,
268 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00, 0x0040,
269 0x16d8, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, 0xa118,
270 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078, 0x16e2,
271 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, 0x0000,
272 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, 0x0040,
273 0x16ec, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae,
274 0x0078, 0x16f5, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x15c1, 0x75d8,
275 0x76dc, 0x75da, 0x76de, 0x0078, 0x1700, 0x2029, 0x0000, 0x2530,
276 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6,
277 0xa005, 0x0040, 0x172f, 0xa40a, 0x0040, 0x1710, 0x00c8, 0x1719,
278 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x171d, 0x78ac, 0xc0c5,
279 0x78ae, 0x2001, 0x4005, 0x0078, 0x15c3, 0x7a9a, 0x7b9e, 0x7da2,
280 0x7ea6, 0x2600, 0xa505, 0x0040, 0x1728, 0x7a10, 0xc2c5, 0x7a12,
281 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, 0x1732, 0x78ac,
282 0xc0c5, 0x78ae, 0x0078, 0x15c1, 0x2009, 0x0000, 0x786c, 0xa065,
283 0x0040, 0x173e, 0x8108, 0x6000, 0x0078, 0x1737, 0x7ac4, 0x0078,
284 0x15bf, 0x2009, 0x4f48, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15c0,
285 0x2011, 0x4f88, 0x2214, 0x0078, 0x15bf, 0x2009, 0x4f49, 0x210c,
286 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2011, 0x4f89, 0x2214, 0x0078,
287 0x15bf, 0x2061, 0x4f40, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214,
288 0x7810, 0xd0ec, 0x00c0, 0x176d, 0x2061, 0x4f80, 0x6328, 0x73da,
289 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, 0x15bf, 0x2009,
290 0x4f4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2011, 0x4f8c,
291 0x2214, 0x0078, 0x15bf, 0x7918, 0x0078, 0x15c0, 0x2009, 0x4f4d,
292 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2011, 0x4f8d, 0x2214,
293 0x0078, 0x15bf, 0x2009, 0x4f4e, 0x210c, 0x7810, 0xd0ec, 0x00c0,
294 0x15c0, 0x2011, 0x4f8e, 0x2214, 0x0078, 0x15bf, 0x7920, 0x7810,
295 0xd0ec, 0x00c0, 0x15c0, 0x7a24, 0x0078, 0x15bf, 0x71c4, 0xd1fc,
296 0x00c0, 0x17a6, 0x2011, 0x53c0, 0x0078, 0x17a8, 0x2011, 0x5440,
297 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, 0x6a00,
298 0x6804, 0xd09c, 0x0040, 0x17b7, 0x6b08, 0x0078, 0x17b8, 0x6b0c,
299 0xd1fc, 0x00c0, 0x17bf, 0x2021, 0x023b, 0x0078, 0x17c1, 0x2021,
300 0x013b, 0x2424, 0x7914, 0xd1e4, 0x0040, 0x17cd, 0xd4c4, 0x00c0,
301 0x17cc, 0xc4d5, 0x0078, 0x17cd, 0xc4dd, 0xa4a4, 0x1c00, 0x74de,
302 0x71c4, 0x0078, 0x15be, 0x77c4, 0x1078, 0x1e2b, 0x2091, 0x8000,
303 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x15be, 0x2061,
304 0x4f40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2061, 0x4f80,
305 0x6218, 0x0078, 0x15bf, 0x77c4, 0x1078, 0x1e2b, 0x2091, 0x8000,
306 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, 0x15be,
307 0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, 0x15b9,
308 0x1078, 0x27c6, 0xa384, 0x4000, 0x0040, 0x1808, 0xa295, 0x0020,
309 0x0078, 0x15be, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8,
310 0x15b9, 0xd1bc, 0x00c0, 0x1819, 0x2011, 0x4f48, 0x2204, 0x0078,
311 0x181d, 0x2011, 0x4f88, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc,
312 0x2012, 0x1078, 0x2723, 0x017f, 0x0078, 0x15c0, 0x71c4, 0x2021,
313 0x4f49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x1835, 0x71c8,
314 0x2021, 0x4f89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1854, 0x20a9,
315 0x0008, 0x2204, 0xa106, 0x0040, 0x1844, 0x8210, 0x00f0, 0x1839,
316 0x71c4, 0x72c8, 0x0078, 0x15b8, 0xa292, 0x1854, 0x027e, 0x2122,
317 0x017f, 0x1078, 0x2744, 0x7810, 0xd0ec, 0x00c0, 0x1852, 0xd3fc,
318 0x0040, 0x182f, 0x0078, 0x15c1, 0x03e8, 0x00fa, 0x01f4, 0x02ee,
319 0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0x4f40, 0x6128, 0x622c,
320 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003,
321 0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x1882, 0x027e, 0x017e,
322 0x2061, 0x4f80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8,
323 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de,
324 0x017f, 0x027f, 0x0078, 0x15bf, 0x2061, 0x4f40, 0x6130, 0x70c4,
325 0x6032, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x2061, 0x4f80, 0x6230,
326 0x70c8, 0x6032, 0x0078, 0x15bf, 0x7918, 0x0078, 0x15c0, 0x71c4,
327 0xa184, 0xffcf, 0x0040, 0x18a3, 0x7810, 0xd0ec, 0x00c0, 0x15b9,
328 0x72c8, 0x0078, 0x15b8, 0x2011, 0x4f4d, 0x2204, 0x2112, 0x007e,
329 0x2019, 0x0000, 0x1078, 0x27ab, 0x7810, 0xd0ec, 0x0040, 0x18b3,
330 0x017f, 0x0078, 0x15c0, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x18bc,
331 0x2110, 0x71c4, 0x0078, 0x15b8, 0x2011, 0x4f8d, 0x2204, 0x2112,
332 0x007e, 0xc3fd, 0x1078, 0x27ab, 0x027f, 0x017f, 0x0078, 0x15bf,
333 0x71c4, 0xa182, 0x0010, 0x0048, 0x18d4, 0x7810, 0xd0ec, 0x00c0,
334 0x15b9, 0x72c8, 0x0078, 0x15b8, 0x2011, 0x4f4e, 0x2204, 0x007e,
335 0x2112, 0x2019, 0x0000, 0x1078, 0x2789, 0x7810, 0xd0ec, 0x0040,
336 0x18e4, 0x017f, 0x0078, 0x15c0, 0x71c8, 0xa182, 0x0010, 0x0048,
337 0x18ed, 0x2110, 0x71c4, 0x0078, 0x15b8, 0x2011, 0x4f8e, 0x2204,
338 0x007e, 0x2112, 0xc3fd, 0x1078, 0x2789, 0x027f, 0x017f, 0x0078,
339 0x15bf, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15b8, 0xa284,
340 0xfffd, 0x00c0, 0x15b8, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24,
341 0x7826, 0x0078, 0x15bf, 0x71c4, 0xd1fc, 0x00c0, 0x1913, 0x2011,
342 0x53c0, 0x0078, 0x1915, 0x2011, 0x5440, 0x8107, 0xa084, 0x000f,
343 0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0xd2bc,
344 0x0040, 0x1924, 0xa39d, 0x0010, 0xd2b4, 0x0040, 0x1929, 0xa39d,
345 0x0008, 0x2091, 0x8000, 0x6800, 0x007e, 0xa226, 0x0040, 0x1948,
346 0x6a02, 0xd4ec, 0x0040, 0x1935, 0xc3a5, 0xd4e4, 0x0040, 0x1939,
347 0xc39d, 0xd4f4, 0x0040, 0x1948, 0x810f, 0xd2f4, 0x0040, 0x1944,
348 0x1078, 0x2808, 0x0078, 0x1948, 0x1078, 0x27e6, 0x0078, 0x1948,
349 0x72cc, 0x6808, 0xa206, 0x0040, 0x196a, 0xa2a4, 0x00ff, 0x7814,
350 0xd0e4, 0x00c0, 0x195b, 0xa482, 0x0028, 0x0048, 0x1967, 0x0040,
351 0x1967, 0x0078, 0x195f, 0xa482, 0x0043, 0x0048, 0x1967, 0x71c4,
352 0x71c6, 0x027f, 0x72ca, 0x2091, 0x8001, 0x0078, 0x15ba, 0x6a0a,
353 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4,
354 0x2091, 0x8001, 0x0078, 0x15be, 0x77c4, 0x1078, 0x1e2b, 0x2091,
355 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc,
356 0x681e, 0x2708, 0x0078, 0x15be, 0x70c4, 0x2061, 0x4f40, 0x6118,
357 0x601a, 0x7810, 0xd0ec, 0x00c0, 0x15c0, 0x70c8, 0x2061, 0x4f80,
358 0x6218, 0x601a, 0x0078, 0x15bf, 0x71c4, 0x72c8, 0x73cc, 0xa182,
359 0x0010, 0x00c8, 0x15b9, 0x1078, 0x282a, 0xa384, 0x4000, 0x0040,
360 0x19a3, 0xa295, 0x0020, 0x0078, 0x15be, 0x77c4, 0x1078, 0x1e2b,
361 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708,
362 0x0078, 0x15bf, 0x77c4, 0x1078, 0x1e2b, 0x2091, 0x8000, 0x6a08,
363 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x19c1, 0x1078,
364 0x266f, 0x2091, 0x8001, 0x2708, 0x0078, 0x15bf, 0x77c4, 0x1078,
365 0x1e2b, 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005,
366 0x0040, 0x19d4, 0x1078, 0x266f, 0x2091, 0x8001, 0x2708, 0x0078,
367 0x15bf, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020,
368 0x2091, 0x8000, 0x1078, 0x1e46, 0x2091, 0x8001, 0x2708, 0x6a08,
369 0x0078, 0x15bf, 0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x19fe, 0xd7fc,
370 0x0040, 0x19f8, 0x1078, 0x1dae, 0x0040, 0x19fe, 0x0078, 0x15c3,
371 0x1078, 0x1da1, 0x0040, 0x19fe, 0x0078, 0x15c3, 0x73c8, 0x72cc,
372 0x77c6, 0x73ca, 0x72ce, 0x1078, 0x1ecd, 0x00c0, 0x1a28, 0x6818,
373 0xa005, 0x0040, 0x1a22, 0x2708, 0x077e, 0x1078, 0x285a, 0x077f,
374 0x00c0, 0x1a22, 0x2001, 0x0015, 0xd7fc, 0x00c0, 0x1a1b, 0x2061,
375 0x4f40, 0x0078, 0x1a1e, 0xc0fd, 0x2061, 0x4f80, 0x782a, 0x2091,
376 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15c3,
377 0x2091, 0x8001, 0x0078, 0x15c1, 0x77c4, 0x7814, 0xd0e4, 0x00c0,
378 0x1a40, 0xd7fc, 0x0040, 0x1a3a, 0x1078, 0x1dae, 0x0040, 0x1a40,
379 0x0078, 0x15c3, 0x1078, 0x1da1, 0x0040, 0x1a40, 0x0078, 0x15c3,
380 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091,
381 0x8000, 0x1078, 0x1e46, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x1a54,
382 0x2061, 0x4f40, 0x0078, 0x1a57, 0x2061, 0x4f80, 0xc1fd, 0x6067,
383 0x0003, 0x607f, 0x0000, 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4,
384 0xc1dc, 0x61d6, 0x1078, 0x266f, 0x2091, 0x8001, 0x007c, 0x77c8,
385 0x77ca, 0x77c4, 0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a7e, 0xd7fc,
386 0x0040, 0x1a78, 0x1078, 0x1dae, 0x0040, 0x1a7e, 0x0078, 0x15c3,
387 0x1078, 0x1da1, 0x0040, 0x1a7e, 0x0078, 0x15c3, 0xa7bc, 0xff00,
388 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a8b, 0x2061,
389 0x4f40, 0x0078, 0x1a8e, 0x2061, 0x4f80, 0xc1fd, 0x607f, 0x0000,
390 0x6067, 0x0002, 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, 0xc1dc,
391 0x61d6, 0x1078, 0x266f, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049,
392 0x0005, 0x2051, 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0040,
393 0x1aac, 0x60d4, 0xc0fd, 0x60d6, 0x1078, 0x1e46, 0x70c8, 0x6836,
394 0x8738, 0xa784, 0x001f, 0x00c0, 0x1aac, 0x2091, 0x8001, 0x007c,
395 0x2019, 0x0000, 0x7814, 0xd0e4, 0x00c0, 0x1ace, 0x72c8, 0xd284,
396 0x0040, 0x1ac8, 0x1078, 0x1dae, 0x0040, 0x1ace, 0x0078, 0x15c3,
397 0x1078, 0x1da1, 0x0040, 0x1ace, 0x0078, 0x15c3, 0x72c8, 0x72ca,
398 0x78ac, 0xa084, 0x0003, 0x00c0, 0x1af9, 0x2039, 0x0000, 0xd284,
399 0x0040, 0x1adb, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
400 0x0008, 0x1078, 0x1e2b, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d,
401 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1ae1,
402 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0,
403 0x1ae1, 0x2091, 0x8000, 0x72c8, 0xd284, 0x00c0, 0x1b0b, 0x7810,
404 0xd0ec, 0x0040, 0x1b07, 0x2069, 0x0100, 0x0078, 0x1b0d, 0x2069,
405 0x0200, 0x0078, 0x1b0d, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd,
406 0x680a, 0x6830, 0xd0b4, 0x0040, 0x1b2d, 0x684b, 0x0004, 0x20a9,
407 0x0014, 0x6848, 0xd094, 0x0040, 0x1b1f, 0x00f0, 0x1b19, 0x684b,
408 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, 0x1b29, 0x00f0,
409 0x1b23, 0x20a9, 0x00fa, 0x00f0, 0x1b2b, 0x2079, 0x4f00, 0x2009,
410 0x0018, 0x72c8, 0xd284, 0x00c0, 0x1b39, 0x2061, 0x4f40, 0x0078,
411 0x1b3c, 0x2061, 0x4f80, 0xc1fd, 0x607f, 0x0000, 0x792a, 0x6067,
412 0x0001, 0x6083, 0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6,
413 0x60d4, 0xd0b4, 0x0040, 0x1b58, 0xc0b4, 0x60d6, 0x0c7e, 0x60b8,
414 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f,
415 0x60d4, 0xa084, 0x77ff, 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x83ff,
416 0x0040, 0x1b63, 0x007c, 0x681b, 0x0047, 0x2091, 0x8001, 0x007c,
417 0x73cc, 0x1078, 0x1aba, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a,
418 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff,
419 0x00f0, 0x1b78, 0x8421, 0x00c0, 0x1b76, 0x8319, 0x00c0, 0x1b74,
420 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b8c,
421 0x2069, 0x4f40, 0x0078, 0x1b8e, 0x2069, 0x4f80, 0x71c4, 0x71c6,
422 0x6916, 0x81ff, 0x00c0, 0x1b96, 0x68a7, 0x0001, 0x78ac, 0xc08c,
423 0x78ae, 0xd084, 0x00c0, 0x1b9e, 0x1078, 0x1f2d, 0x007c, 0x75d8,
424 0x74dc, 0x75da, 0x74de, 0x0078, 0x1ba7, 0xa02e, 0x2520, 0x71c4,
425 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4f00, 0x7dde,
426 0x7cda, 0x7bd6, 0x7ad2, 0x1078, 0x1e04, 0x0040, 0x1cd1, 0x20a9,
427 0x0005, 0x20a1, 0x4f14, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001,
428 0x2009, 0x0040, 0x1078, 0x2018, 0x0040, 0x1bca, 0x1078, 0x1e0d,
429 0x0078, 0x1cd1, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0,
430 0x1bd5, 0x007e, 0x1078, 0x23bf, 0x007f, 0xa084, 0xff00, 0x8007,
431 0x8009, 0x0040, 0x1c61, 0x0c7e, 0x2c68, 0x1078, 0x1e04, 0x0040,
432 0x1c1b, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1bdc, 0x609f, 0x0000,
433 0x0c7f, 0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040,
434 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda,
435 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1c60, 0x2009,
436 0x0040, 0x1078, 0x2018, 0x00c0, 0x1c3e, 0x6004, 0xa084, 0x00ff,
437 0xa086, 0x0002, 0x00c0, 0x1c1b, 0x6004, 0xa084, 0x00ff, 0xa086,
438 0x000a, 0x00c0, 0x1c17, 0x017e, 0x1078, 0x23bb, 0x017f, 0x2d00,
439 0x6002, 0x0078, 0x1bea, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e90,
440 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1cd5, 0x2009, 0x0018, 0x6008,
441 0xc0cd, 0x600a, 0x6004, 0x6086, 0x7810, 0x007e, 0x84ff, 0x00c0,
442 0x1c34, 0x85ff, 0x0040, 0x1c36, 0xc0c5, 0x7812, 0x1078, 0x1dbb,
443 0x007f, 0x7812, 0x1078, 0x1e0d, 0x0078, 0x1cd1, 0x0c7f, 0x0c7e,
444 0x609c, 0x1078, 0x1e90, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1cd5,
445 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003, 0x7810, 0x007e,
446 0x84ff, 0x00c0, 0x1c56, 0x85ff, 0x0040, 0x1c58, 0xc0c5, 0x7812,
447 0x1078, 0x1dbb, 0x007f, 0x7812, 0x1078, 0x1e0d, 0x0078, 0x1cd1,
448 0x0c7f, 0x7814, 0xd0e4, 0x00c0, 0x1c8f, 0x6114, 0xd1fc, 0x0040,
449 0x1c6f, 0x1078, 0x1dae, 0x0040, 0x1c8f, 0x0078, 0x1c73, 0x1078,
450 0x1da1, 0x0040, 0x1c8f, 0x1078, 0x1cd5, 0x2009, 0x0018, 0x6087,
451 0x0103, 0x601b, 0x0021, 0x7810, 0x007e, 0x84ff, 0x00c0, 0x1c83,
452 0x85ff, 0x0040, 0x1c85, 0xc0c5, 0x7812, 0x1078, 0x1dbb, 0x007f,
453 0x7812, 0x1078, 0x1e0d, 0x2001, 0x4007, 0x0078, 0x15c3, 0x74c4,
454 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012,
455 0xd0fc, 0x00c0, 0x1c9f, 0x2071, 0x4f40, 0x0078, 0x1ca2, 0x2071,
456 0x4f80, 0xc1fd, 0x792a, 0x7067, 0x0005, 0x71d4, 0xc1dc, 0x71d6,
457 0x736a, 0x726e, 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e,
458 0xa02e, 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x1cb9, 0x1078,
459 0x46b6, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000,
460 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000, 0x6024, 0xa096, 0x0001,
461 0x00c0, 0x1ccc, 0x8000, 0x6026, 0x1078, 0x266f, 0x2091, 0x8001,
462 0x007c, 0x70c3, 0x4005, 0x0078, 0x15c4, 0x20a9, 0x0005, 0x2099,
463 0x4f14, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210,
464 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4,
465 0x70c7, 0x0000, 0x791e, 0x0078, 0x15c1, 0x71c4, 0x71c6, 0x2168,
466 0x0078, 0x1cf4, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210,
467 0x8d68, 0x8109, 0x00c0, 0x1cf6, 0xa285, 0x0000, 0x00c0, 0x1d04,
468 0x70c3, 0x4000, 0x0078, 0x1d06, 0x70c3, 0x4003, 0x70ca, 0x0078,
469 0x15c4, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15b9,
470 0x7966, 0x0078, 0x15c1, 0x7964, 0x71c6, 0x0078, 0x15c1, 0x7900,
471 0x71c6, 0x71c4, 0x7902, 0x0078, 0x15c1, 0x7900, 0x71c6, 0x0078,
472 0x15c1, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0040, 0x1d36,
473 0x810c, 0x0048, 0x1d32, 0x8210, 0x810c, 0x810c, 0x0048, 0x1d32,
474 0x8210, 0x810c, 0x81ff, 0x00c0, 0x15ba, 0x8210, 0x7a0e, 0xd28c,
475 0x0040, 0x1d62, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019,
476 0x0003, 0xd284, 0x0040, 0x1d5c, 0x8108, 0x2019, 0x0041, 0x2011,
477 0x974e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043,
478 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047,
479 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x9753, 0x2112, 0x2011,
480 0x9773, 0x2312, 0x7904, 0x7806, 0x0078, 0x15c0, 0x7804, 0x70c6,
481 0x0078, 0x15c1, 0x71c4, 0xd1fc, 0x00c0, 0x1d72, 0x2011, 0x53c0,
482 0x0078, 0x1d74, 0x2011, 0x5440, 0x8107, 0xa084, 0x000f, 0x8003,
483 0x8003, 0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d83, 0x2011,
484 0x0001, 0x0078, 0x1d85, 0x2011, 0x0000, 0x6b0c, 0x6800, 0x70da,
485 0x0078, 0x15be, 0x7814, 0xd0f4, 0x0040, 0x1d95, 0x2001, 0x4007,
486 0x70db, 0x0000, 0xa005, 0x0078, 0x1da0, 0xd0fc, 0x0040, 0x1d9f,
487 0x2001, 0x4007, 0x70db, 0x0001, 0xa005, 0x0078, 0x1da0, 0xa006,
488 0x007c, 0x7814, 0xd0f4, 0x0040, 0x1dac, 0x2001, 0x4007, 0x70db,
489 0x0000, 0xa005, 0x0078, 0x1dad, 0xa006, 0x007c, 0x7814, 0xd0fc,
490 0x0040, 0x1db9, 0x2001, 0x4007, 0x70db, 0x0001, 0xa005, 0x0078,
491 0x1dba, 0xa006, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810, 0xd0c4,
492 0x0040, 0x1dc4, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c,
493 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2,
494 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040, 0x1de1,
495 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078,
496 0x1de4, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006,
497 0xa211, 0x7d10, 0xd5c4, 0x0040, 0x1df1, 0x7b84, 0xa319, 0x7c80,
498 0xa421, 0x7008, 0xd0fc, 0x0040, 0x1df1, 0x7003, 0x0001, 0x7007,
499 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1e01, 0x7322,
500 0x7426, 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040, 0x1e0c,
501 0x2c04, 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4f00,
502 0x7848, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1e18, 0x1078, 0x29b2,
503 0x784a, 0x0f7f, 0x007c, 0x2011, 0x9900, 0x7a4a, 0x7bc4, 0x8319,
504 0x0040, 0x1e28, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078, 0x1e1f,
505 0x2013, 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0, 0x1e34,
506 0x2011, 0x54c0, 0x0078, 0x1e36, 0x2011, 0x74c0, 0xa784, 0x0f00,
507 0x800b, 0xa784, 0x001f, 0x0040, 0x1e41, 0x8003, 0x8003, 0x8003,
508 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078, 0x1e2b,
509 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d,
510 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1e5b, 0x2009, 0x4f53, 0x2071,
511 0x4f40, 0x0078, 0x1e5f, 0x2009, 0x4f93, 0x2071, 0x4f80, 0x210c,
512 0x6804, 0xa005, 0x0040, 0x1e6f, 0xa116, 0x00c0, 0x1e6f, 0x2060,
513 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x1e72, 0x2009,
514 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e87, 0x6000, 0x6806,
515 0x1078, 0x1ea2, 0x1078, 0x2064, 0x6810, 0x7908, 0x8109, 0x790a,
516 0x8001, 0x6812, 0x00c0, 0x1e72, 0x7910, 0xc1a5, 0x7912, 0x017f,
517 0x6902, 0x6906, 0x2d00, 0x2060, 0x1078, 0x2b13, 0x0e7f, 0x007c,
518 0xa065, 0x0040, 0x1ea1, 0x2008, 0x609c, 0xa005, 0x0040, 0x1e9e,
519 0x2062, 0x609f, 0x0000, 0xa065, 0x0078, 0x1e94, 0x7848, 0x794a,
520 0x2062, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c,
521 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a,
522 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc, 0x00c0, 0x1ebd, 0x2071,
523 0x4f40, 0x2031, 0x4fc0, 0x0078, 0x1ec1, 0x2071, 0x4f80, 0x2031,
524 0x51c0, 0x7050, 0xa08c, 0x0200, 0x00c0, 0x1ecb, 0xa608, 0x2d0a,
525 0x8000, 0x7052, 0xa006, 0x0e7f, 0x007c, 0x0f7e, 0xd7fc, 0x00c0,
526 0x1ed5, 0x2079, 0x4f40, 0x0078, 0x1ed7, 0x2079, 0x4f80, 0x1078,
527 0x1e2b, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0040, 0x1f2b,
528 0x0078, 0x1ee9, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065, 0x0040,
529 0x1f2b, 0x6010, 0xa306, 0x00c0, 0x1ee2, 0x600c, 0xa206, 0x00c0,
530 0x1ee2, 0x2c28, 0x784c, 0xac06, 0x00c0, 0x1ef8, 0x0078, 0x1f28,
531 0x6804, 0xac06, 0x00c0, 0x1f06, 0x6000, 0x2060, 0x6806, 0xa005,
532 0x00c0, 0x1f06, 0x6803, 0x0000, 0x0078, 0x1f10, 0x6400, 0x7808,
533 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1f10, 0x2c00, 0x6802,
534 0x2560, 0x0f7f, 0x1078, 0x1ea2, 0x0f7e, 0x601b, 0x0005, 0x6023,
535 0x0020, 0x0f7f, 0x1078, 0x2064, 0x0f7e, 0x7908, 0x8109, 0x790a,
536 0x6810, 0x8001, 0x6812, 0x00c0, 0x1f28, 0x7810, 0xc0a5, 0x7812,
537 0x2001, 0xffff, 0xa005, 0x0f7f, 0x007c, 0x077e, 0x2700, 0x2039,
538 0x0000, 0xd0fc, 0x0040, 0x1f35, 0xc7fd, 0x2041, 0x0021, 0x2049,
539 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1e46, 0x8738,
540 0xa784, 0x001f, 0x00c0, 0x1f3d, 0xa7bc, 0xff00, 0x873f, 0x8738,
541 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1f3d, 0x2091, 0x8001, 0x077f,
542 0x007c, 0x786c, 0x2009, 0x9774, 0x210c, 0xa10d, 0x0040, 0x1f5b,
543 0xa065, 0x0078, 0x23dc, 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0,
544 0x1f7b, 0x7810, 0xd08c, 0x0040, 0x1f6c, 0xc08c, 0x7812, 0xc7fc,
545 0x2069, 0x4f40, 0x0078, 0x1f71, 0xc08d, 0x7812, 0x2069, 0x4f80,
546 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001,
547 0xa005, 0x00c0, 0x1f7c, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1f82,
548 0x1078, 0x29b2, 0x0079, 0x1f84, 0x1f94, 0x1f97, 0x1f9d, 0x1fa1,
549 0x1f95, 0x1fa5, 0x1f95, 0x1f95, 0x1f95, 0x1fab, 0x1fdc, 0x1fe0,
550 0x1fe6, 0x1ffb, 0x1f95, 0x1f95, 0x007c, 0x1078, 0x29b2, 0x1078,
551 0x1f2d, 0x2001, 0x8001, 0x0078, 0x2007, 0x2001, 0x8003, 0x0078,
552 0x2007, 0x2001, 0x8004, 0x0078, 0x2007, 0x1078, 0x1f2d, 0x2001,
553 0x8006, 0x0078, 0x2007, 0x2091, 0x8000, 0x077e, 0xd7fc, 0x00c0,
554 0x1fb7, 0x2069, 0x4f40, 0x2039, 0x0009, 0x0078, 0x1fbb, 0x2069,
555 0x4f80, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0040, 0x1fc5,
556 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, 0x6874, 0x077f, 0xa0bc,
557 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078,
558 0x1e46, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1fcf, 0x2091, 0x8001,
559 0x2001, 0x800a, 0x0078, 0x2007, 0x2001, 0x800c, 0x0078, 0x2007,
560 0x1078, 0x1f2d, 0x2001, 0x800d, 0x0078, 0x2007, 0x7814, 0xd0e4,
561 0x00c0, 0x1ff9, 0xd0ec, 0x0040, 0x1ff3, 0xd7fc, 0x0040, 0x1ff3,
562 0x78e4, 0x0078, 0x1ff4, 0x78e0, 0x70c6, 0x2001, 0x800e, 0x0078,
563 0x2007, 0x0078, 0x1f95, 0xd7fc, 0x0040, 0x2001, 0x78ec, 0x0078,
564 0x2002, 0x78e8, 0x70c6, 0x2001, 0x800f, 0x0078, 0x2007, 0x70c2,
565 0xd7fc, 0x00c0, 0x200f, 0x70db, 0x0000, 0x0078, 0x2011, 0x70db,
566 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c,
567 0xac80, 0x0001, 0x81ff, 0x0040, 0x2043, 0x2099, 0x0030, 0x20a0,
568 0x700c, 0xa084, 0x03ff, 0x0040, 0x2025, 0x7018, 0x007e, 0x701c,
569 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac, 0x721a,
570 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008,
571 0x800b, 0x00c8, 0x2037, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0,
572 0x2043, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x007f,
573 0x7026, 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a, 0x007c,
574 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803, 0xfd00,
575 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004,
576 0x8109, 0x00c0, 0x2054, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063,
577 0x0000, 0x7868, 0xa005, 0x796a, 0x0040, 0x2071, 0x2c02, 0x0078,
578 0x2072, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4f00, 0x6887, 0x0103,
579 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x2083,
580 0x2d02, 0x0078, 0x2084, 0x616e, 0x0c7f, 0x007c, 0x2091, 0x8000,
581 0x2c04, 0x786e, 0xa005, 0x00c0, 0x208e, 0x786a, 0x2091, 0x8001,
582 0x609c, 0xa005, 0x0040, 0x20a7, 0x0c7e, 0x2060, 0x2008, 0x609c,
583 0xa005, 0x0040, 0x20a3, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c,
584 0xa005, 0x00c0, 0x209b, 0x7848, 0x794a, 0x2062, 0x0c7f, 0x7848,
585 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x20b1, 0x1078,
586 0x29b2, 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086,
587 0x818e, 0x00c8, 0x20bc, 0xa200, 0x00f0, 0x20b7, 0x8086, 0x818e,
588 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x20e2, 0xa11a,
589 0x00c8, 0x20e2, 0x8213, 0x818d, 0x0048, 0x20d5, 0xa11a, 0x00c8,
590 0x20d6, 0x00f0, 0x20ca, 0x0078, 0x20da, 0xa11a, 0x2308, 0x8210,
591 0x00f0, 0x20ca, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f,
592 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x20de,
593 0x7d74, 0x70d0, 0xa506, 0x0040, 0x21ce, 0x7810, 0x2050, 0x7800,
594 0xd08c, 0x0040, 0x210a, 0xdaec, 0x0040, 0x210a, 0x0e7e, 0x2091,
595 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x2107, 0x7008,
596 0x0e7f, 0xa086, 0x0008, 0x0040, 0x210a, 0x0078, 0x21ce, 0x0e7f,
597 0x0078, 0x21ce, 0x1078, 0x1e04, 0x0040, 0x21ce, 0xa046, 0x7970,
598 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x2119, 0x0078,
599 0x2120, 0x72d0, 0xa206, 0x0040, 0x2120, 0x8840, 0x2009, 0x0080,
600 0x0c7e, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020,
601 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040, 0x2132,
602 0x1078, 0x1e04, 0x7008, 0xd0fc, 0x0040, 0x2132, 0x7007, 0x0002,
603 0x2091, 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2169, 0x53a5, 0x8cff,
604 0x00c0, 0x2147, 0x88ff, 0x0040, 0x21b8, 0x0078, 0x2151, 0x2c00,
605 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0078,
606 0x21b8, 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x2159, 0x7420,
607 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab,
608 0x0000, 0x721a, 0x731e, 0xdac4, 0x0040, 0x2169, 0x7422, 0x7526,
609 0xa006, 0x7007, 0x0004, 0x0040, 0x21b8, 0x8cff, 0x0040, 0x2172,
610 0x1078, 0x1e0d, 0x0c7f, 0x1078, 0x1e0d, 0xa046, 0x7888, 0x8000,
611 0x788a, 0xa086, 0x0002, 0x0040, 0x2198, 0x7a7c, 0x7b78, 0xdac4,
612 0x0040, 0x2184, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004,
613 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a,
614 0x731e, 0xdac4, 0x0040, 0x21ce, 0x7422, 0x7526, 0x0078, 0x21ce,
615 0x6014, 0xd0fc, 0x00c0, 0x21a0, 0x2069, 0x4f40, 0x0078, 0x21a2,
616 0x2069, 0x4f80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff, 0x0040,
617 0x21ae, 0xa046, 0x788c, 0x2060, 0x0078, 0x2198, 0x788b, 0x0000,
618 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078, 0x21ce,
619 0x0c7f, 0x788b, 0x0000, 0x1078, 0x238d, 0x6004, 0xa084, 0x000f,
620 0x1078, 0x21cf, 0x88ff, 0x0040, 0x21cc, 0x788c, 0x2060, 0x6004,
621 0xa084, 0x000f, 0x1078, 0x21cf, 0x0078, 0x20e8, 0x007c, 0x0079,
622 0x21d1, 0x21e1, 0x21ff, 0x221d, 0x21e1, 0x222e, 0x21f2, 0x21e1,
623 0x21e1, 0x21e1, 0x21fd, 0x221b, 0x21e1, 0x21e1, 0x21e1, 0x21e1,
624 0x21e1, 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705,
625 0x600a, 0x1078, 0x2271, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078,
626 0x2377, 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x21f8, 0x0078, 0x21e1,
627 0x601c, 0xc0bd, 0x601e, 0x0078, 0x2205, 0x1078, 0x23bf, 0x78bc,
628 0xd0c4, 0x0040, 0x2205, 0x0078, 0x21e1, 0x78bf, 0x0000, 0x6004,
629 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x2218, 0x1078,
630 0x2271, 0x0040, 0x2218, 0x78bc, 0xc0c5, 0x78be, 0x0078, 0x221a,
631 0x0078, 0x2290, 0x007c, 0x1078, 0x23bb, 0x78bc, 0xa08c, 0x0e00,
632 0x00c0, 0x2225, 0xd0c4, 0x00c0, 0x2227, 0x0078, 0x21e1, 0x1078,
633 0x2271, 0x00c0, 0x222d, 0x0078, 0x2290, 0x007c, 0x78bc, 0xd0c4,
634 0x0040, 0x2234, 0x0078, 0x21e1, 0x78bf, 0x0000, 0x6714, 0x2011,
635 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x2254,
636 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, 0x2254,
637 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002,
638 0x0040, 0x2254, 0x0078, 0x226e, 0x1078, 0x1e2b, 0x2d00, 0x2091,
639 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde,
640 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x2257, 0x8211,
641 0x0040, 0x226e, 0x20a9, 0x0100, 0x0078, 0x2257, 0x1078, 0x1e0d,
642 0x007c, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x00c0,
643 0x227c, 0x78ba, 0x0078, 0x2284, 0x689e, 0x2d00, 0x6002, 0x78b8,
644 0xad06, 0x00c0, 0x2284, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x00c0,
645 0x228f, 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x007c,
646 0x0e7e, 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c,
647 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040,
648 0x22a3, 0x1078, 0x46b6, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714,
649 0x2071, 0x4f80, 0xd7fc, 0x00c0, 0x22af, 0x2071, 0x4f40, 0xa784,
650 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x22ba, 0x8003, 0x8003,
651 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007, 0xa084,
652 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2, 0x2091,
653 0x8000, 0x7814, 0xd0c4, 0x0040, 0x22df, 0xd0ec, 0x0040, 0x22db,
654 0xd7fc, 0x00c0, 0x22d8, 0xd0f4, 0x00c0, 0x22e6, 0x0078, 0x22df,
655 0xd0fc, 0x00c0, 0x22e6, 0x7810, 0xd0f4, 0x00c0, 0x22e6, 0x6e08,
656 0xd684, 0x0040, 0x2310, 0xd9fc, 0x00c0, 0x2310, 0x2091, 0x8001,
657 0x1078, 0x1ea2, 0x2091, 0x8000, 0x1078, 0x2064, 0x2091, 0x8001,
658 0x7814, 0xd0e4, 0x00c0, 0x2375, 0x7814, 0xd0c4, 0x0040, 0x2375,
659 0xd0ec, 0x0040, 0x2308, 0xd7fc, 0x00c0, 0x2303, 0xd0f4, 0x00c0,
660 0x230c, 0x0078, 0x2375, 0xd0fc, 0x00c0, 0x230c, 0x0078, 0x2375,
661 0x7810, 0xd0f4, 0x0040, 0x2375, 0x601b, 0x0021, 0x0078, 0x2375,
662 0x6024, 0xa096, 0x0001, 0x00c0, 0x2317, 0x8000, 0x6026, 0x6a10,
663 0x6814, 0xa202, 0x0048, 0x232a, 0x0040, 0x232a, 0x2091, 0x8001,
664 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, 0x2377,
665 0x0078, 0x2375, 0x2c08, 0xd9fc, 0x0040, 0x2352, 0x6800, 0xa065,
666 0x0040, 0x2352, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0040, 0x2348,
667 0x704c, 0xa206, 0x00c0, 0x2348, 0x6b04, 0x2160, 0x2304, 0x6002,
668 0xa005, 0x00c0, 0x2344, 0x6902, 0x2260, 0x6102, 0x0078, 0x235e,
669 0x2d00, 0x2060, 0x1078, 0x2b13, 0x6e08, 0x2160, 0x6202, 0x6906,
670 0x0078, 0x235e, 0x6800, 0x6902, 0xa065, 0x0040, 0x235a, 0x6102,
671 0x0078, 0x235b, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0xd9fc,
672 0x0040, 0x2365, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, 0x7d08, 0x8528,
673 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040, 0x2375,
674 0xa6b6, 0x0040, 0x6e0a, 0x1078, 0x1eb3, 0x0e7f, 0x007c, 0x6008,
675 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x2064, 0x2091, 0x8001,
676 0x78b8, 0xa065, 0x0040, 0x238a, 0x609c, 0x78ba, 0x609f, 0x0000,
677 0x0078, 0x2377, 0x78b6, 0x78ba, 0x007c, 0x7970, 0x7874, 0x2818,
678 0xd384, 0x0040, 0x2397, 0x8000, 0xa112, 0x0048, 0x239c, 0x8000,
679 0xa112, 0x00c8, 0x23ac, 0xc384, 0x7a7c, 0x721a, 0x7a78, 0x721e,
680 0xdac4, 0x0040, 0x23a7, 0x7a84, 0x7222, 0x7a80, 0x7226, 0xa006,
681 0xd384, 0x0040, 0x23ac, 0x8000, 0x7876, 0x70d2, 0x781c, 0xa005,
682 0x0040, 0x23ba, 0x8001, 0x781e, 0x00c0, 0x23ba, 0x0068, 0x23ba,
683 0x2091, 0x4080, 0x007c, 0x2039, 0x23d3, 0x0078, 0x23c1, 0x2039,
684 0x23d9, 0x2704, 0xa005, 0x0040, 0x23d2, 0xac00, 0x2068, 0x6908,
685 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738,
686 0x0078, 0x23c1, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b,
687 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, 0x780c, 0x0079,
688 0x23e1, 0x25b3, 0x2586, 0x23e5, 0x245e, 0x2039, 0x9774, 0x2734,
689 0x7d10, 0x0078, 0x2405, 0x6084, 0xa086, 0x0103, 0x00c0, 0x2447,
690 0x6114, 0x6018, 0xa105, 0x0040, 0x23fa, 0x86ff, 0x00c0, 0x2416,
691 0x0078, 0x2447, 0x8603, 0xa080, 0x9755, 0x620c, 0x2202, 0x8000,
692 0x6210, 0x2202, 0x1078, 0x2086, 0x8630, 0xa68e, 0x000f, 0x0040,
693 0x24d2, 0x786c, 0xa065, 0x00c0, 0x23eb, 0x7808, 0xa602, 0x00c8,
694 0x2416, 0xd5ac, 0x00c0, 0x2416, 0x263a, 0x007c, 0xa682, 0x0003,
695 0x00c8, 0x24d2, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084,
696 0x00c0, 0x2442, 0x2011, 0x9755, 0x2204, 0x70c6, 0x8210, 0x2204,
697 0x70ca, 0xd684, 0x00c0, 0x2432, 0x8210, 0x2204, 0x70da, 0x8210,
698 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, 0x0001, 0x2091,
699 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, 0x203b,
700 0x0000, 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, 0x24d2, 0x263a,
701 0x1078, 0x25bd, 0x00c0, 0x25e0, 0x786c, 0xa065, 0x00c0, 0x23eb,
702 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040, 0x2459,
703 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0078, 0x25e0, 0x2039, 0x9774,
704 0x2734, 0x7d10, 0x0078, 0x247a, 0x6084, 0xa086, 0x0103, 0x00c0,
705 0x24bb, 0x6114, 0x6018, 0xa105, 0x0040, 0x2473, 0x86ff, 0x00c0,
706 0x248b, 0x0078, 0x24bb, 0xa680, 0x9755, 0x620c, 0x2202, 0x1078,
707 0x2086, 0x8630, 0xa68e, 0x001e, 0x0040, 0x24d2, 0x786c, 0xa065,
708 0x00c0, 0x2464, 0x7808, 0xa602, 0x00c8, 0x248b, 0xd5ac, 0x00c0,
709 0x248b, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, 0x24d2, 0x2091,
710 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x24b6, 0x2011,
711 0x9755, 0x2009, 0x974e, 0x26a8, 0x211c, 0x2204, 0x201a, 0x8108,
712 0x8210, 0x00f0, 0x249c, 0xa685, 0x8030, 0x70c2, 0x681b, 0x0001,
713 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001,
714 0xa006, 0x2009, 0x9775, 0x200a, 0x203a, 0x007c, 0x7810, 0xc0ad,
715 0x7812, 0x0078, 0x24d2, 0x263a, 0x1078, 0x25bd, 0x00c0, 0x25e0,
716 0x786c, 0xa065, 0x00c0, 0x2464, 0x2091, 0x8000, 0x7810, 0xa084,
717 0xffcf, 0x86ff, 0x0040, 0x24cd, 0xc0ad, 0x7812, 0x2091, 0x8001,
718 0x0078, 0x25e0, 0x2091, 0x8000, 0x7007, 0x0004, 0x7994, 0x70d4,
719 0xa102, 0x0048, 0x24e3, 0x0040, 0x24ed, 0x7b90, 0xa302, 0x00c0,
720 0x24ed, 0x0078, 0x24e6, 0x8002, 0x00c0, 0x24ed, 0x263a, 0x7810,
721 0xc0ad, 0x7812, 0x2091, 0x8001, 0x007c, 0xa184, 0xff00, 0x0040,
722 0x24fa, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
723 0x0078, 0x24fd, 0x8107, 0x8004, 0x8004, 0x7a9c, 0xa210, 0x721a,
724 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0040, 0x250d, 0x7aa4,
725 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, 0x0030, 0x7003,
726 0x0000, 0x2009, 0x9754, 0x260a, 0x8109, 0x2198, 0x2104, 0xd084,
727 0x0040, 0x251b, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6, 0x8603,
728 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8,
729 0x252a, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0040, 0x2539,
730 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078,
731 0x253c, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006,
732 0xa211, 0xd4c4, 0x0040, 0x2548, 0x7b84, 0xa319, 0x7c80, 0xa421,
733 0x7008, 0xd0fc, 0x0040, 0x2548, 0xa084, 0x01e0, 0x0040, 0x256d,
734 0x7d10, 0x2031, 0x9754, 0x2634, 0x78a8, 0x8000, 0x78aa, 0xd08c,
735 0x00c0, 0x2562, 0x7007, 0x0006, 0x7004, 0xd094, 0x00c0, 0x255c,
736 0x0078, 0x24d4, 0x2069, 0x4f47, 0x206b, 0x0003, 0x78ac, 0xa085,
737 0x0300, 0x78ae, 0xa006, 0x0078, 0x2576, 0x2030, 0x75d6, 0x2091,
738 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001,
739 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a, 0x721e,
740 0xd5c4, 0x0040, 0x2585, 0x7322, 0x7426, 0x007c, 0x6084, 0xa086,
741 0x0103, 0x00c0, 0x25a9, 0x6114, 0x6018, 0xa105, 0x00c0, 0x25a9,
742 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x25a9, 0x600c, 0x70c6,
743 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080,
744 0x1078, 0x2086, 0x0068, 0x25a8, 0x786c, 0xa065, 0x00c0, 0x2586,
745 0x007c, 0x1078, 0x25bd, 0x00c0, 0x25e0, 0x786c, 0xa065, 0x00c0,
746 0x2586, 0x0078, 0x25e0, 0x1078, 0x25bd, 0x00c0, 0x25e0, 0x786c,
747 0xa065, 0x00c0, 0x25b3, 0x0078, 0x25e0, 0x6084, 0xa086, 0x0103,
748 0x00c0, 0x25d1, 0x6018, 0xc0fc, 0x601a, 0xa086, 0x0004, 0x00c0,
749 0x25d1, 0x7804, 0xd0a4, 0x0040, 0x25d1, 0x1078, 0x2086, 0xa006,
750 0x007c, 0x1078, 0x25e6, 0x00c0, 0x25d8, 0xa085, 0x0001, 0x007c,
751 0x1078, 0x25f5, 0x00c0, 0x25de, 0x2041, 0x0001, 0x7d10, 0x007c,
752 0x88ff, 0x0040, 0x25e5, 0x2091, 0x4080, 0x007c, 0x7b90, 0x7994,
753 0x70d4, 0xa102, 0x00c0, 0x25ef, 0xa385, 0x0000, 0x007c, 0x0048,
754 0x25f3, 0xa302, 0x007c, 0x8002, 0x007c, 0x7810, 0xd0ec, 0x0040,
755 0x260d, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005,
756 0x00c0, 0x260a, 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x260d,
757 0x0078, 0x265e, 0x0e7f, 0x0078, 0x265e, 0xa184, 0xff00, 0x0040,
758 0x261a, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
759 0x0078, 0x261d, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4,
760 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018,
761 0x6028, 0xa005, 0x0040, 0x262e, 0x2009, 0x0040, 0x1078, 0x1dbb,
762 0x0040, 0x2650, 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x00c0, 0x265e,
763 0x6014, 0xd0fc, 0x00c0, 0x2640, 0x2069, 0x4f40, 0x0078, 0x2642,
764 0x2069, 0x4f80, 0x2091, 0x8000, 0x681f, 0x0003, 0x78ab, 0x0000,
765 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0078, 0x265e,
766 0x78ab, 0x0000, 0x1078, 0x2086, 0x7990, 0x7894, 0x8000, 0xa10a,
767 0x00c8, 0x265b, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010,
768 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x266a, 0x2009, 0x4f59,
769 0x0078, 0x266c, 0x2009, 0x4f99, 0x2091, 0x8000, 0x200a, 0x0f7e,
770 0xd7fc, 0x00c0, 0x2683, 0x2009, 0x4f40, 0x2001, 0x4f04, 0x2004,
771 0xd0ec, 0x0040, 0x267f, 0x2079, 0x0100, 0x0078, 0x2687, 0x2079,
772 0x0200, 0x0078, 0x2687, 0x2009, 0x4f80, 0x2079, 0x0100, 0x2104,
773 0xa086, 0x0000, 0x00c0, 0x26a0, 0xd7fc, 0x00c0, 0x2693, 0x2009,
774 0x4f45, 0x0078, 0x2695, 0x2009, 0x4f85, 0x2104, 0xa005, 0x00c0,
775 0x26a0, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x26a0, 0x781b, 0x0045,
776 0x0f7f, 0x007c, 0x2009, 0x0002, 0x2069, 0x4f00, 0x6810, 0xd0ec,
777 0x00c0, 0x270f, 0x2071, 0x4f80, 0x2079, 0x0100, 0x2021, 0x51bf,
778 0x784b, 0x000f, 0x2019, 0x44a7, 0xd184, 0x0040, 0x26c3, 0x6810,
779 0xd0ec, 0x0040, 0x26bf, 0x20a1, 0x012b, 0x0078, 0x26c5, 0x20a1,
780 0x022b, 0x0078, 0x26c5, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040,
781 0x26d2, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318,
782 0x0078, 0x26c5, 0x789b, 0x0020, 0x20a9, 0x0010, 0x6814, 0xd0e4,
783 0x0040, 0x26e2, 0x78af, 0x0000, 0x78af, 0x9020, 0x00f0, 0x26da,
784 0x0078, 0x26e8, 0x78af, 0x0000, 0x78af, 0x8020, 0x00f0, 0x26e2,
785 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040, 0x26f1,
786 0xc1bd, 0x1078, 0x28e2, 0x017f, 0x7020, 0xa084, 0x000f, 0x007e,
787 0x6814, 0xd0e4, 0x007f, 0x00c0, 0x2701, 0xa085, 0x6340, 0x0078,
788 0x2703, 0xa085, 0x62c0, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8,
789 0x7853, 0x0080, 0x780b, 0x0008, 0x7456, 0x7053, 0x0000, 0x8109,
790 0x0040, 0x2722, 0x2071, 0x4f40, 0x6810, 0xd0ec, 0x0040, 0x271c,
791 0x2079, 0x0100, 0x0078, 0x271e, 0x2079, 0x0200, 0x2021, 0x4fbf,
792 0x0078, 0x26b0, 0x007c, 0x017e, 0xd1bc, 0x00c0, 0x2737, 0x007e,
793 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2733, 0x2011,
794 0x0101, 0x0078, 0x2739, 0x2011, 0x0201, 0x0078, 0x2739, 0x2011,
795 0x0101, 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012,
796 0x017f, 0x1078, 0x28e2, 0x007c, 0xd3fc, 0x00c0, 0x2757, 0x007e,
797 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2753, 0x2011,
798 0x0101, 0x0078, 0x2759, 0x2011, 0x0201, 0x0078, 0x2759, 0x2011,
799 0x0101, 0x20a9, 0x0009, 0x810b, 0x00f0, 0x275b, 0xa18c, 0x0e00,
800 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2019, 0x0002,
801 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x0040, 0x2773, 0x8319, 0x2009,
802 0x0101, 0x0078, 0x2775, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213,
803 0x00f0, 0x2777, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205,
804 0x200a, 0x8319, 0x0040, 0x2788, 0x2009, 0x0201, 0x0078, 0x2775,
805 0x007c, 0xd3fc, 0x00c0, 0x279c, 0x007e, 0x2001, 0x4f04, 0x2004,
806 0xd0ec, 0x007f, 0x0040, 0x2798, 0x2011, 0x0101, 0x0078, 0x279e,
807 0x2011, 0x0201, 0x0078, 0x279e, 0x2011, 0x0101, 0x20a9, 0x000c,
808 0x810b, 0x00f0, 0x27a0, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff,
809 0xa105, 0x2012, 0x007c, 0xd3fc, 0x00c0, 0x27be, 0x007e, 0x2001,
810 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27ba, 0x2011, 0x0102,
811 0x0078, 0x27c0, 0x2011, 0x0202, 0x0078, 0x27c0, 0x2011, 0x0102,
812 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc,
813 0x00c0, 0x27da, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f,
814 0x0040, 0x27d6, 0x2061, 0x0100, 0x0078, 0x27dc, 0x2061, 0x0200,
815 0x0078, 0x27dc, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080,
816 0x0020, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc,
817 0x00c0, 0x27fa, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f,
818 0x0040, 0x27f6, 0x2061, 0x0100, 0x0078, 0x27fc, 0x2061, 0x0200,
819 0x0078, 0x27fc, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080,
820 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c,
821 0x0c7e, 0xd1bc, 0x00c0, 0x281c, 0x007e, 0x2001, 0x4f04, 0x2004,
822 0xd0ec, 0x007f, 0x0040, 0x2818, 0x2061, 0x0100, 0x0078, 0x281e,
823 0x2061, 0x0200, 0x0078, 0x281e, 0x2061, 0x0100, 0xc1bc, 0x8103,
824 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae,
825 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x283e, 0x007e, 0x2001,
826 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x283a, 0x2061, 0x0100,
827 0x0078, 0x2840, 0x2061, 0x0200, 0x0078, 0x2840, 0x2061, 0x0100,
828 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c,
829 0x0020, 0x0040, 0x284e, 0xc2ac, 0xa39d, 0x4000, 0xc3fc, 0xd3b4,
830 0x00c0, 0x2853, 0xc3fd, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018,
831 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005,
832 0x0040, 0x28c0, 0xd1fc, 0x0040, 0x2869, 0x2061, 0x96d0, 0x0078,
833 0x286b, 0x2061, 0x95c0, 0x1078, 0x28c8, 0x0040, 0x28a2, 0x20a9,
834 0x0101, 0xd1fc, 0x0040, 0x2878, 0x2061, 0x95d0, 0x0078, 0x287a,
835 0x2061, 0x94c0, 0x0c7e, 0x1078, 0x28c8, 0x0040, 0x2885, 0x0c7f,
836 0x8c60, 0x00f0, 0x287a, 0x0078, 0x28c0, 0x007f, 0xd1fc, 0x0040,
837 0x288f, 0xa082, 0x95d0, 0x2071, 0x4f80, 0x0078, 0x2893, 0xa082,
838 0x94c0, 0x2071, 0x4f40, 0x707a, 0x7176, 0x2138, 0x2001, 0x0004,
839 0x7066, 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x1078, 0x2663,
840 0x0078, 0x28bc, 0xd1fc, 0x00c0, 0x28a9, 0x2071, 0x4f40, 0x0078,
841 0x28ab, 0x2071, 0x4f80, 0x6020, 0xc0dd, 0x6022, 0x7176, 0x2138,
842 0x2c00, 0x707e, 0x2001, 0x0006, 0x7066, 0x7083, 0x000f, 0x71d4,
843 0xc1dc, 0x71d6, 0x1078, 0x2663, 0x2001, 0x0000, 0x0078, 0x28c2,
844 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c,
845 0x2c04, 0xa005, 0x0040, 0x28df, 0x2060, 0x6010, 0xa306, 0x00c0,
846 0x28dc, 0x600c, 0xa206, 0x00c0, 0x28dc, 0x6014, 0xa106, 0x00c0,
847 0x28dc, 0xa006, 0x0078, 0x28e1, 0x6000, 0x0078, 0x28c9, 0xa085,
848 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x28fa,
849 0x2079, 0x4f40, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f,
850 0x0040, 0x28f6, 0x2071, 0x0100, 0x0078, 0x28fe, 0x2071, 0x0200,
851 0x0078, 0x28fe, 0x2079, 0x4f80, 0x2071, 0x0100, 0x7920, 0xa18c,
852 0x000f, 0x70ec, 0xd0c4, 0x00c0, 0x2908, 0x017f, 0x0078, 0x2923,
853 0x810b, 0x810b, 0x810b, 0x810b, 0x007f, 0xd0bc, 0x00c0, 0x2920,
854 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x291c,
855 0xa18d, 0x0f00, 0x0078, 0x2922, 0xa18d, 0x0f00, 0x0078, 0x2922,
856 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x0e7e, 0x2001,
857 0x4f01, 0x2004, 0xd0ac, 0x00c0, 0x29a3, 0x68e4, 0xd0ac, 0x0040,
858 0x29a3, 0xa084, 0x0006, 0x00c0, 0x29a3, 0x6014, 0xd0fc, 0x00c0,
859 0x293d, 0x2071, 0x53c0, 0x0078, 0x293f, 0x2071, 0x5440, 0x8007,
860 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084,
861 0x000a, 0x00c0, 0x29a3, 0x7108, 0xa194, 0xff00, 0x0040, 0x29a3,
862 0xa18c, 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x2972, 0x2001,
863 0x000c, 0xa106, 0x0040, 0x2976, 0x2001, 0x0012, 0xa106, 0x0040,
864 0x297a, 0x2001, 0x0014, 0xa106, 0x0040, 0x297e, 0x2001, 0x0019,
865 0xa106, 0x0040, 0x2982, 0x2001, 0x0032, 0xa106, 0x0040, 0x2986,
866 0x0078, 0x298a, 0x2009, 0x000c, 0x0078, 0x298c, 0x2009, 0x0012,
867 0x0078, 0x298c, 0x2009, 0x0014, 0x0078, 0x298c, 0x2009, 0x0019,
868 0x0078, 0x298c, 0x2009, 0x0020, 0x0078, 0x298c, 0x2009, 0x003f,
869 0x0078, 0x298c, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x2071,
870 0x4f00, 0x7004, 0xd0bc, 0x0040, 0x29a3, 0x6014, 0xd0fc, 0x00c0,
871 0x299e, 0x70ea, 0x2071, 0x4f40, 0x0078, 0x29a1, 0x70ee, 0x2071,
872 0x4f80, 0x701f, 0x000d, 0x0e7f, 0x007c, 0x2001, 0x4f05, 0x2004,
873 0xd0e4, 0x00c0, 0x29b1, 0x7804, 0xa084, 0xff1f, 0xa085, 0x6340,
874 0x7806, 0x007c, 0x0068, 0x29b2, 0x2091, 0x8000, 0x2071, 0x0000,
875 0x007e, 0x7018, 0xd084, 0x00c0, 0x29b9, 0x007f, 0x2071, 0x0010,
876 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x080f, 0x70df,
877 0x000b, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
878 0x29cf, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708e, 0x7592,
879 0x7496, 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, 0x0040, 0x29e6,
880 0xa784, 0x007d, 0x00c0, 0x441d, 0x1078, 0x29b2, 0xa49c, 0x000f,
881 0xa382, 0x0004, 0x0050, 0x29f1, 0xa3a6, 0x0007, 0x00c0, 0x29b2,
882 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x29f6, 0x3071, 0x3162,
883 0x318d, 0x33ff, 0x37e8, 0x3862, 0x3917, 0x39a8, 0x3a96, 0x3b85,
884 0x2a09, 0x2a06, 0x2e42, 0x2f65, 0x37b9, 0x2a06, 0x1078, 0x29b2,
885 0x007c, 0xa006, 0x0078, 0x2a13, 0x7808, 0xc08d, 0x780a, 0xa006,
886 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, 0xa005, 0x00c0, 0x2b79,
887 0x7064, 0xa084, 0x0007, 0x0079, 0x2a1d, 0x2a25, 0x2a98, 0x2aa1,
888 0x2aac, 0x2ab7, 0x2b5f, 0x2ac2, 0x2a98, 0x7830, 0xd0bc, 0x00c0,
889 0x2a08, 0x71d4, 0xd1bc, 0x00c0, 0x2a08, 0xd1b4, 0x00c0, 0x2a75,
890 0x70a4, 0xa086, 0x0001, 0x0040, 0x2a08, 0x70b4, 0xa06d, 0x6800,
891 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045,
892 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040, 0x2a4b,
893 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0010,
894 0x0078, 0x2cd3, 0x7060, 0xa005, 0x00c0, 0x2a08, 0x0c7e, 0x0d7e,
895 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c,
896 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886,
897 0x0001, 0x0040, 0x2a6e, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d,
898 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2cd3, 0x1078, 0x43b0, 0x00c0,
899 0x2a08, 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894,
900 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a,
901 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, 0x68c0, 0x705a,
902 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c,
903 0x1078, 0x43b0, 0x00c0, 0x2aa0, 0x781b, 0x0047, 0x7003, 0x0004,
904 0x007c, 0x1078, 0x43b0, 0x00c0, 0x2aab, 0x2011, 0x000c, 0x1078,
905 0x2ad2, 0x7003, 0x0004, 0x007c, 0x1078, 0x43b0, 0x00c0, 0x2ab6,
906 0x2011, 0x0006, 0x1078, 0x2ad2, 0x7003, 0x0004, 0x007c, 0x1078,
907 0x43b0, 0x00c0, 0x2ac1, 0x2011, 0x000d, 0x1078, 0x2ad2, 0x7003,
908 0x0004, 0x007c, 0x1078, 0x43b0, 0x00c0, 0x2ad1, 0x2011, 0x0006,
909 0x1078, 0x2ad2, 0x707c, 0x707f, 0x0000, 0x2068, 0x704e, 0x7003,
910 0x0001, 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0010,
911 0xa286, 0x000c, 0x00c0, 0x2ae1, 0x7aaa, 0x2001, 0x0001, 0x0078,
912 0x2af6, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d,
913 0x0040, 0x2aef, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2af6, 0x78ab,
914 0x0020, 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060,
915 0x78aa, 0x785b, 0x0004, 0x781b, 0x0116, 0x1078, 0x43d3, 0x7083,
916 0x000f, 0x70d4, 0xd0b4, 0x0040, 0x2b12, 0xc0b4, 0x70d6, 0x0c7e,
917 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
918 0x601a, 0x0c7f, 0x007c, 0x7014, 0xa005, 0x00c0, 0x2b21, 0x70d4,
919 0xd0b4, 0x0040, 0x2b22, 0x70b8, 0xac06, 0x00c0, 0x2b22, 0x1078,
920 0x2b01, 0x007c, 0x017e, 0x71a4, 0xa186, 0x0001, 0x0040, 0x2b54,
921 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b4, 0x2068,
922 0x6800, 0xac06, 0x0040, 0x2b3b, 0x8211, 0x0040, 0x2b52, 0x1078,
923 0x2b56, 0x0078, 0x2b30, 0x0c7e, 0x2100, 0x2011, 0x0001, 0xa212,
924 0x70b4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a,
925 0x8211, 0x0040, 0x2b4f, 0x1078, 0x2b56, 0x0078, 0x2b42, 0x70a7,
926 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, 0xade8, 0x0005,
927 0x70ac, 0xad06, 0x00c0, 0x2b5e, 0x70a8, 0x2068, 0x007c, 0x1078,
928 0x43b0, 0x00c0, 0x2a08, 0x707c, 0x2068, 0x7774, 0x1078, 0x424e,
929 0x2c50, 0x1078, 0x4492, 0x789b, 0x0010, 0x6814, 0xa084, 0x001f,
930 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0078,
931 0x2cd9, 0x1078, 0x43b0, 0x00c0, 0x2a08, 0x789b, 0x0010, 0x7060,
932 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, 0x2b93, 0xc0b4, 0x70d6,
933 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
934 0x8001, 0x601a, 0x0c7f, 0x1078, 0x424e, 0x2c50, 0x1078, 0x4492,
935 0x6824, 0xa005, 0x0040, 0x2ba4, 0xa082, 0x0006, 0x0048, 0x2ba2,
936 0x0078, 0x2ba4, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xc0bd,
937 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0078,
938 0x2cd9, 0xc28d, 0x72d6, 0x72c0, 0xa200, 0xa015, 0x7154, 0x8108,
939 0xa12a, 0x0048, 0x2bbc, 0x71c0, 0x2164, 0x6504, 0x85ff, 0x00c0,
940 0x2bd3, 0x7156, 0x8421, 0x00c0, 0x2bb7, 0x70d4, 0xd08c, 0x0040,
941 0x2bcf, 0x70d0, 0xa005, 0x00c0, 0x2bcf, 0x70d3, 0x000a, 0x007c,
942 0x2200, 0x0078, 0x2bc1, 0x70d4, 0xc08c, 0x70d6, 0x70d3, 0x0000,
943 0x6034, 0xa005, 0x00c0, 0x2bd0, 0x6708, 0xa784, 0x073f, 0x0040,
944 0x2c02, 0xd7d4, 0x00c0, 0x2bd0, 0xa784, 0x0021, 0x00c0, 0x2bd0,
945 0xa784, 0x0002, 0x0040, 0x2bf3, 0xa784, 0x0004, 0x0040, 0x2bd0,
946 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x00c0, 0x2bd0, 0xa784,
947 0x0100, 0x0040, 0x2c02, 0x6018, 0xa005, 0x00c0, 0x2bd0, 0xa7bc,
948 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e,
949 0x6318, 0x0040, 0x2c13, 0x601c, 0xa302, 0x0048, 0x2c16, 0x0040,
950 0x2c16, 0x0078, 0x2bd0, 0x83ff, 0x00c0, 0x2bd0, 0x2d58, 0x2c50,
951 0x7156, 0xd7bc, 0x00c0, 0x2c1f, 0x7028, 0x6022, 0x603a, 0xc7bc,
952 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001,
953 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, 0x2c33,
954 0xd684, 0x0040, 0x2c35, 0xa39c, 0xffbf, 0xd6a4, 0x0040, 0x2c3a,
955 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2c85, 0xc7a5, 0x670a,
956 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c59, 0x70d4,
957 0xd0b4, 0x00c0, 0x2c59, 0x7000, 0xa082, 0x0002, 0x00c8, 0x2c59,
958 0x7830, 0xd0bc, 0x00c0, 0x2c59, 0x789b, 0x0010, 0x7baa, 0x0078,
959 0x2cd1, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005, 0x70ac,
960 0xa606, 0x00c0, 0x2c64, 0x76a8, 0x76b2, 0x2c3a, 0x8738, 0x2d3a,
961 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc,
962 0x0040, 0x2c7c, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d4, 0xa084,
963 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, 0x2c84,
964 0x8421, 0x2200, 0x00c0, 0x2bb6, 0x007c, 0xd1dc, 0x0040, 0x3e49,
965 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2c92, 0x8528, 0xd68c, 0x00c0,
966 0x2c92, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff,
967 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2cb1, 0x6014, 0xa706,
968 0x00c0, 0x2c9a, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2c95, 0x2a60,
969 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x00c0, 0x2bb6,
970 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, 0x6008,
971 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c59, 0x70d4,
972 0xd0b4, 0x00c0, 0x2c59, 0x7000, 0xa082, 0x0002, 0x00c8, 0x2c59,
973 0x7830, 0xd0bc, 0x00c0, 0x2c59, 0x789b, 0x0010, 0x7baa, 0x7daa,
974 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, 0x601a, 0x0078,
975 0x2cda, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018, 0x0040,
976 0x2cf6, 0xa184, 0x0010, 0x0040, 0x2ce9, 0x1078, 0x405e, 0x00c0,
977 0x2d1b, 0xa184, 0x0008, 0x0040, 0x2cf6, 0x69a0, 0xa184, 0x0600,
978 0x00c0, 0x2cf6, 0x1078, 0x3f3e, 0x0078, 0x2d1b, 0x69a0, 0xa184,
979 0x1e00, 0x0040, 0x2d26, 0xa184, 0x0800, 0x0040, 0x2d0f, 0x0c7e,
980 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010,
981 0x6106, 0x0c7f, 0x1078, 0x405e, 0x00c0, 0x2d1b, 0x69a0, 0xa184,
982 0x0200, 0x0040, 0x2d17, 0x1078, 0x3fa1, 0x0078, 0x2d1b, 0xa184,
983 0x0400, 0x00c0, 0x2cf2, 0x69a0, 0xa184, 0x1000, 0x0040, 0x2d26,
984 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x27e6, 0x027f, 0xa68c,
985 0x00e0, 0xa684, 0x0060, 0x0040, 0x2d33, 0xa086, 0x0060, 0x00c0,
986 0x2d33, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060,
987 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040, 0x2d4e,
988 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, 0x2d4c, 0xa08a,
989 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa, 0x3518,
990 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b,
991 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0,
992 0xa286, 0x0020, 0x00c0, 0x2d86, 0x70d4, 0xc0b5, 0x70d6, 0x2c00,
993 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882, 0xa286,
994 0x0002, 0x0040, 0x2dbc, 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa498,
995 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2d7e, 0x73a8, 0x73b6, 0xa286,
996 0x0010, 0x0040, 0x2a08, 0x0d7f, 0x0c7f, 0x007c, 0x7000, 0xa005,
997 0x00c0, 0x2d64, 0xa286, 0x0002, 0x00c0, 0x2dd6, 0x1078, 0x43b0,
998 0x00c0, 0x2d64, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091, 0x8000,
999 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898,
1000 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a, 0x127e,
1001 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f,
1002 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002, 0x2d00,
1003 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040, 0x2dc8,
1004 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090,
1005 0x70a4, 0xa005, 0x00c0, 0x2dcd, 0x007c, 0x8421, 0x0040, 0x2dcc,
1006 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2bb6, 0xa286, 0x0010,
1007 0x00c0, 0x2e07, 0x1078, 0x43b0, 0x00c0, 0x2d64, 0x6814, 0xc0fc,
1008 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6,
1009 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x70a4,
1010 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206, 0x00c0,
1011 0x2dfa, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003,
1012 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0x6bb4,
1013 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94,
1014 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x005b, 0x2900,
1015 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, 0x0040,
1016 0x2e32, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0, 0x2e2c,
1017 0x2009, 0x0000, 0x0078, 0x2e2e, 0x2009, 0x0001, 0xa284, 0x000f,
1018 0x1079, 0x2e38, 0xad80, 0x0009, 0x7046, 0x2d00, 0x704e, 0x007c,
1019 0x2e40, 0x493f, 0x493f, 0x492c, 0x493f, 0x2e40, 0x2e40, 0x2e40,
1020 0x1078, 0x29b2, 0x7808, 0xa084, 0xfffd, 0x780a, 0x1078, 0x29a5,
1021 0x0f7e, 0x2079, 0x4f00, 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2e6a,
1022 0x7064, 0xa086, 0x0001, 0x00c0, 0x2e58, 0x7066, 0x0078, 0x2f41,
1023 0x7064, 0xa086, 0x0005, 0x00c0, 0x2e68, 0x707c, 0x2068, 0x681b,
1024 0x0004, 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822,
1025 0x7067, 0x0000, 0x70a7, 0x0000, 0x70a8, 0x70b2, 0x70b6, 0x1078,
1026 0x2b01, 0x157e, 0x2011, 0x0004, 0x7164, 0xa186, 0x0001, 0x0040,
1027 0x2e8a, 0xa186, 0x0007, 0x00c0, 0x2e81, 0x701f, 0x0005, 0x0078,
1028 0x2e8a, 0x701f, 0x0001, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6,
1029 0x0078, 0x2e8c, 0x7067, 0x0000, 0x2001, 0x4f0a, 0x2004, 0xa084,
1030 0x00ff, 0xa086, 0x0018, 0x0040, 0x2e9c, 0x7018, 0x7016, 0xa005,
1031 0x00c0, 0x2e9c, 0x70a7, 0x0001, 0x067e, 0x1078, 0x45d6, 0x20a9,
1032 0x0010, 0x2039, 0x0000, 0x1078, 0x4148, 0xa7b8, 0x0100, 0x00f0,
1033 0x2ea3, 0x067f, 0x7000, 0x0079, 0x2ead, 0x2ee7, 0x2ec2, 0x2ec2,
1034 0x2eb7, 0x2ee7, 0x2ee7, 0x2ee7, 0x2eb5, 0x1078, 0x29b2, 0x7060,
1035 0xa005, 0x0040, 0x2ee7, 0xad06, 0x00c0, 0x2ec2, 0x6800, 0x7062,
1036 0x0078, 0x2ed4, 0x6820, 0xd084, 0x00c0, 0x2ed0, 0x6f14, 0x1078,
1037 0x424e, 0x6008, 0xc0d4, 0x600a, 0x1078, 0x3e19, 0x0078, 0x2ed4,
1038 0x705c, 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818,
1039 0xd0fc, 0x0040, 0x2edc, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000,
1040 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x1078, 0x2073, 0xb284,
1041 0x0400, 0x0040, 0x2eef, 0x2021, 0x96d0, 0x0078, 0x2ef1, 0x2021,
1042 0x95c0, 0x1078, 0x2f46, 0xb284, 0x0400, 0x0040, 0x2efb, 0x2021,
1043 0x4f98, 0x0078, 0x2efd, 0x2021, 0x4f58, 0x1078, 0x2f46, 0x20a9,
1044 0x0101, 0xb284, 0x0400, 0x0040, 0x2f09, 0x2021, 0x95d0, 0x0078,
1045 0x2f0b, 0x2021, 0x94c0, 0x1078, 0x2f46, 0x8420, 0x00f0, 0x2f0b,
1046 0xb284, 0x0300, 0x0040, 0x2f18, 0x2061, 0x54c0, 0x0078, 0x2f1a,
1047 0x2061, 0x74c0, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff,
1048 0x0040, 0x2f37, 0x6018, 0x017e, 0x007e, 0x2011, 0x4f02, 0x220c,
1049 0xa102, 0x2012, 0x007f, 0x017f, 0xa102, 0x0050, 0x2f37, 0x6012,
1050 0x00c0, 0x2f37, 0x2011, 0x4f04, 0x2204, 0xc0a5, 0x2012, 0x601b,
1051 0x0000, 0xace0, 0x0010, 0x00f0, 0x2f1e, 0x8421, 0x00c0, 0x2f1c,
1052 0x157f, 0x7003, 0x0000, 0x704f, 0x0000, 0x007c, 0x047e, 0x2404,
1053 0xa005, 0x0040, 0x2f61, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817,
1054 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820,
1055 0xa084, 0x00ff, 0xc09d, 0x6822, 0x1078, 0x2073, 0x007f, 0x0078,
1056 0x2f48, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050,
1057 0x2f6b, 0x1078, 0x29b2, 0x2300, 0x0079, 0x2f6e, 0x2f71, 0x2ffc,
1058 0x3019, 0xa282, 0x0002, 0x0040, 0x2f77, 0x1078, 0x29b2, 0x7064,
1059 0x7067, 0x0000, 0x7083, 0x0000, 0x0079, 0x2f7e, 0x2f86, 0x2f86,
1060 0x2f88, 0x2fc8, 0x3e55, 0x2f86, 0x2fc8, 0x2f86, 0x1078, 0x29b2,
1061 0x7774, 0x1078, 0x4148, 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x424e,
1062 0x6018, 0xa005, 0x0040, 0x2fbf, 0xd7fc, 0x00c0, 0x2f9b, 0x2021,
1063 0x95c0, 0x0078, 0x2f9d, 0x2021, 0x96d0, 0x2009, 0x0005, 0x2011,
1064 0x0010, 0x1078, 0x3034, 0x0040, 0x2fbf, 0x157e, 0x20a9, 0x0101,
1065 0xd7fc, 0x00c0, 0x2faf, 0x2021, 0x94c0, 0x0078, 0x2fb1, 0x2021,
1066 0x95d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x3034,
1067 0x047f, 0x0040, 0x2fbe, 0x8420, 0x00f0, 0x2fb1, 0x157f, 0x8738,
1068 0xa784, 0x001f, 0x00c0, 0x2f8e, 0x0078, 0x2a0c, 0x0078, 0x2a0c,
1069 0x7774, 0x1078, 0x424e, 0x6018, 0xa005, 0x0040, 0x2ffa, 0xd7fc,
1070 0x00c0, 0x2fd6, 0x2021, 0x95c0, 0x0078, 0x2fd8, 0x2021, 0x96d0,
1071 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x3034, 0x0040, 0x2ffa,
1072 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x2fea, 0x2021, 0x94c0,
1073 0x0078, 0x2fec, 0x2021, 0x95d0, 0x047e, 0x2009, 0x0005, 0x2011,
1074 0x0020, 0x1078, 0x3034, 0x047f, 0x0040, 0x2ff9, 0x8420, 0x00f0,
1075 0x2fec, 0x157f, 0x0078, 0x2a0c, 0x2200, 0x0079, 0x2fff, 0x3002,
1076 0x3004, 0x3004, 0x1078, 0x29b2, 0x2009, 0x0012, 0x7064, 0xa086,
1077 0x0002, 0x0040, 0x300d, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040,
1078 0x3012, 0x691a, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078,
1079 0x435d, 0x2200, 0x0079, 0x301c, 0x3021, 0x3004, 0x301f, 0x1078,
1080 0x29b2, 0x1078, 0x45d6, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3dc7,
1081 0x1078, 0x3e36, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3db8,
1082 0x0040, 0x3dc7, 0x0078, 0x2a0c, 0x2404, 0xa005, 0x0040, 0x306d,
1083 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x3043, 0x2d20,
1084 0x007f, 0x0078, 0x3035, 0x007f, 0x2022, 0x691a, 0x6817, 0x0000,
1085 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084,
1086 0x00ff, 0xa205, 0x6822, 0x1078, 0x2073, 0x2021, 0x4f02, 0x241c,
1087 0x8319, 0x2322, 0x6010, 0x8001, 0x6012, 0x00c0, 0x3064, 0x2021,
1088 0x4f04, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a,
1089 0x1078, 0x2b22, 0x1078, 0x3e36, 0x007c, 0xa085, 0x0001, 0x0078,
1090 0x306c, 0x2300, 0x0079, 0x3074, 0x3079, 0x3077, 0x30f9, 0x1078,
1091 0x29b2, 0x78e4, 0xa005, 0x00d0, 0x30af, 0x3208, 0x007e, 0x2001,
1092 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x308a, 0xa18c, 0x0300,
1093 0x0078, 0x308c, 0xa18c, 0x0400, 0x0040, 0x3092, 0x0018, 0x2a08,
1094 0x0078, 0x3094, 0x0028, 0x2a08, 0x2008, 0xa084, 0x0030, 0x00c0,
1095 0x309b, 0x0078, 0x37b9, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3099,
1096 0x2100, 0xa084, 0x0007, 0x0079, 0x30a5, 0x30d9, 0x30e3, 0x30ce,
1097 0x30ad, 0x43a5, 0x43a5, 0x30ad, 0x30ee, 0x1078, 0x29b2, 0x7000,
1098 0xa086, 0x0004, 0x00c0, 0x30c9, 0x7064, 0xa086, 0x0002, 0x00c0,
1099 0x30bf, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x2f65, 0x7064,
1100 0xa086, 0x0006, 0x0040, 0x30b9, 0x7064, 0xa086, 0x0004, 0x0040,
1101 0x30b9, 0x79e4, 0x2001, 0x0003, 0x0078, 0x3443, 0x6818, 0xd0fc,
1102 0x0040, 0x30d4, 0x681b, 0x001d, 0x1078, 0x4118, 0x781b, 0x0064,
1103 0x007c, 0x6818, 0xd0fc, 0x0040, 0x30df, 0x681b, 0x001d, 0x1078,
1104 0x4118, 0x0078, 0x4381, 0x6818, 0xd0fc, 0x0040, 0x30e9, 0x681b,
1105 0x001d, 0x1078, 0x4118, 0x781b, 0x00f8, 0x007c, 0x6818, 0xd0fc,
1106 0x0040, 0x30f4, 0x681b, 0x001d, 0x1078, 0x4118, 0x781b, 0x00c8,
1107 0x007c, 0xa584, 0x000f, 0x00c0, 0x3118, 0x1078, 0x29a5, 0x7000,
1108 0x0079, 0x3102, 0x2a0c, 0x310a, 0x310c, 0x3dc7, 0x3dc7, 0x3dc7,
1109 0x310a, 0x310a, 0x1078, 0x29b2, 0x1078, 0x3e36, 0x6008, 0xa084,
1110 0xfbef, 0x600a, 0x1078, 0x3db8, 0x0040, 0x3dc7, 0x0078, 0x2a0c,
1111 0x78e4, 0xa005, 0x00d0, 0x30af, 0x3208, 0x007e, 0x2001, 0x4f04,
1112 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3129, 0xa18c, 0x0300, 0x0078,
1113 0x312b, 0xa18c, 0x0400, 0x0040, 0x3131, 0x0018, 0x30af, 0x0078,
1114 0x3133, 0x0028, 0x30af, 0x2008, 0xa084, 0x0030, 0x00c0, 0x313b,
1115 0x781b, 0x005b, 0x007c, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3138,
1116 0x2100, 0xa184, 0x0007, 0x0079, 0x3145, 0x3154, 0x3158, 0x314f,
1117 0x314d, 0x43a5, 0x43a5, 0x314d, 0x439f, 0x1078, 0x29b2, 0x1078,
1118 0x4120, 0x781b, 0x0064, 0x007c, 0x1078, 0x4120, 0x0078, 0x4381,
1119 0x1078, 0x4120, 0x781b, 0x00f8, 0x007c, 0x1078, 0x4120, 0x781b,
1120 0x00c8, 0x007c, 0x2300, 0x0079, 0x3165, 0x316a, 0x3168, 0x316c,
1121 0x1078, 0x29b2, 0x0078, 0x39a8, 0x681b, 0x0016, 0x78a3, 0x0000,
1122 0x79e4, 0xa184, 0x0030, 0x0040, 0x39a8, 0x78ec, 0xa084, 0x0003,
1123 0x0040, 0x39a8, 0xa184, 0x0100, 0x0040, 0x3170, 0xa184, 0x0007,
1124 0x0079, 0x3182, 0x318a, 0x3158, 0x30ce, 0x435d, 0x43a5, 0x43a5,
1125 0x435d, 0x439f, 0x1078, 0x4369, 0x007c, 0xa282, 0x0005, 0x0050,
1126 0x3193, 0x1078, 0x29b2, 0x2300, 0x0079, 0x3196, 0x3199, 0x33c9,
1127 0x33d4, 0x2200, 0x0079, 0x319c, 0x31b6, 0x31a3, 0x31b6, 0x31a1,
1128 0x33ac, 0x1078, 0x29b2, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
1129 0xa082, 0x0020, 0x0048, 0x4107, 0xa08a, 0x0004, 0x00c8, 0x4107,
1130 0x0079, 0x31b2, 0x4107, 0x4107, 0x4107, 0x40b1, 0x789b, 0x0018,
1131 0x79a8, 0xa184, 0x0080, 0x0040, 0x31c7, 0x0078, 0x4107, 0x7000,
1132 0xa005, 0x00c0, 0x31bd, 0x2011, 0x0004, 0x0078, 0x3b93, 0xa184,
1133 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x4107, 0x0079, 0x31cf, 0x31e1,
1134 0x31df, 0x31f6, 0x31fa, 0x32cd, 0x4107, 0x4107, 0x32cf, 0x4107,
1135 0x4107, 0x33a8, 0x33a8, 0x4107, 0x4107, 0x4107, 0x33aa, 0x1078,
1136 0x29b2, 0xd6e4, 0x0040, 0x31ec, 0x2001, 0x0300, 0x8000, 0x8000,
1137 0x783a, 0x781b, 0x00c3, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x31f4,
1138 0x681b, 0x001d, 0x0078, 0x31e4, 0x0078, 0x435d, 0x681b, 0x001d,
1139 0x0078, 0x4111, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x325f,
1140 0x6820, 0xd084, 0x00c0, 0x3265, 0x6818, 0xa086, 0x0008, 0x00c0,
1141 0x320b, 0x681b, 0x0000, 0xd6d4, 0x0040, 0x32ca, 0xd6bc, 0x0040,
1142 0x324b, 0x7087, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d,
1143 0x0050, 0x324b, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c,
1144 0x718a, 0x789b, 0x0061, 0x78aa, 0x157e, 0x137e, 0x147e, 0x017e,
1145 0x3208, 0xa18c, 0x0300, 0x0040, 0x323d, 0x007e, 0x2001, 0x4f04,
1146 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3239, 0x20a1, 0x012b, 0x0078,
1147 0x323f, 0x20a1, 0x022b, 0x0078, 0x323f, 0x20a1, 0x012b, 0x017f,
1148 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6,
1149 0x147f, 0x137f, 0x157f, 0x6038, 0xa005, 0x00c0, 0x325a, 0x681c,
1150 0xa084, 0x000e, 0x0040, 0x4111, 0x1078, 0x4127, 0x782b, 0x3008,
1151 0x0078, 0x325c, 0x8001, 0x603a, 0x781b, 0x0067, 0x007c, 0xd6e4,
1152 0x0040, 0x3265, 0x781b, 0x0079, 0x007c, 0xa684, 0x0060, 0x0040,
1153 0x32c7, 0xd6dc, 0x0040, 0x32c7, 0xd6fc, 0x00c0, 0x3271, 0x0078,
1154 0x3288, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x801b,
1155 0x00c8, 0x327b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
1156 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae,
1157 0xd6f4, 0x0040, 0x328e, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, 0xa086,
1158 0x0003, 0x00c0, 0x329c, 0x007e, 0x1078, 0x45d6, 0x1078, 0x493f,
1159 0x007f, 0x781b, 0x0076, 0x007c, 0xa006, 0x1078, 0x4a44, 0x6ab0,
1160 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x32ab, 0x2200,
1161 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6,
1162 0x7bde, 0x2300, 0xa405, 0x00c0, 0x32bb, 0xc6f5, 0x7e5a, 0x6eb6,
1163 0x781b, 0x0076, 0x007c, 0x781b, 0x0076, 0x2200, 0xa115, 0x00c0,
1164 0x32c4, 0x1078, 0x493f, 0x007c, 0x1078, 0x4977, 0x007c, 0x781b,
1165 0x0079, 0x007c, 0x781b, 0x0067, 0x007c, 0x1078, 0x29b2, 0x0078,
1166 0x331b, 0x6920, 0xd1c4, 0x0040, 0x32e4, 0xc1c4, 0x6922, 0x0c7e,
1167 0x7058, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, 0xa084, 0xfff5,
1168 0x6006, 0x0c7f, 0x0078, 0x330f, 0xd1cc, 0x0040, 0x330f, 0xc1cc,
1169 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x6004,
1170 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x330f,
1171 0x1078, 0x424a, 0x1078, 0x3f3e, 0x88ff, 0x0040, 0x330f, 0x789b,
1172 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0,
1173 0x330c, 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7e58,
1174 0xd6d4, 0x00c0, 0x3316, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079,
1175 0x007c, 0x0078, 0x410c, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007,
1176 0x00c0, 0x3329, 0x6820, 0xa084, 0x0100, 0x0040, 0x3319, 0x2009,
1177 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
1178 0x00c0, 0x3345, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
1179 0x333d, 0x0048, 0x333d, 0x0078, 0x333f, 0x0078, 0x32d1, 0x24a8,
1180 0x7aa8, 0x00f0, 0x333f, 0x0078, 0x332b, 0xa284, 0x00f0, 0xa086,
1181 0x0020, 0x00c0, 0x3399, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040,
1182 0x3355, 0x0048, 0x3355, 0x0078, 0x3396, 0xa286, 0x0023, 0x0040,
1183 0x3319, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1,
1184 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x7058,
1185 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x3376,
1186 0x1078, 0x424a, 0x1078, 0x405e, 0x0078, 0x3384, 0x0c7e, 0x7058,
1187 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x330f,
1188 0x1078, 0x424a, 0x1078, 0x3f3e, 0x88ff, 0x0040, 0x330f, 0x789b,
1189 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3393,
1190 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7aa8, 0x0078,
1191 0x332b, 0x8318, 0x2300, 0xa102, 0x0040, 0x33a2, 0x0048, 0x33a2,
1192 0x0078, 0x332b, 0xa284, 0x0080, 0x00c0, 0x4111, 0x0078, 0x410c,
1193 0x0078, 0x4111, 0x0078, 0x4107, 0x7058, 0xa04d, 0x789b, 0x0018,
1194 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, 0x33b9, 0x1078,
1195 0x29b2, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a,
1196 0x0004, 0x00c8, 0x4107, 0x0079, 0x33c5, 0x4107, 0x3e8f, 0x4107,
1197 0x4006, 0xa282, 0x0000, 0x00c0, 0x33cf, 0x1078, 0x29b2, 0x1078,
1198 0x4118, 0x781b, 0x0078, 0x007c, 0xa282, 0x0003, 0x00c0, 0x33da,
1199 0x1078, 0x29b2, 0xd4fc, 0x00c0, 0x33fa, 0x7064, 0xa005, 0x0040,
1200 0x33e3, 0x1078, 0x29b2, 0x6f14, 0x7776, 0xa7bc, 0x8f00, 0x1078,
1201 0x424e, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f,
1202 0x00c0, 0x33e7, 0x1078, 0x411c, 0x7067, 0x0002, 0x701f, 0x0009,
1203 0x0078, 0x33fc, 0x1078, 0x412b, 0x781b, 0x0078, 0x007c, 0xa282,
1204 0x0004, 0x0050, 0x3405, 0x1078, 0x29b2, 0x2300, 0x0079, 0x3408,
1205 0x340b, 0x35cb, 0x360e, 0xa286, 0x0003, 0x0040, 0x3443, 0x7200,
1206 0x7cd8, 0x7ddc, 0x7fd0, 0x71d4, 0xd1bc, 0x00c0, 0x343b, 0xd1b4,
1207 0x0040, 0x343b, 0x7868, 0xa084, 0x00ff, 0x00c0, 0x343b, 0xa282,
1208 0x0002, 0x00c8, 0x343b, 0x0d7e, 0x783b, 0x8300, 0x781b, 0x004c,
1209 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898,
1210 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x2001,
1211 0x0000, 0x0078, 0x3447, 0x783b, 0x1300, 0x781b, 0x004a, 0x2001,
1212 0x0000, 0x0078, 0x3447, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x704a,
1213 0x68a0, 0xd0ec, 0x0040, 0x344f, 0x6008, 0xc08d, 0x600a, 0xa284,
1214 0x000f, 0x0079, 0x3453, 0x35ab, 0x3460, 0x345d, 0x3711, 0x379d,
1215 0x2a0c, 0x345b, 0x345b, 0x1078, 0x29b2, 0x6008, 0xc0d4, 0x600a,
1216 0xd6e4, 0x0040, 0x3468, 0x7048, 0xa086, 0x0014, 0x00c0, 0x3488,
1217 0x1078, 0x45d6, 0x2009, 0x0000, 0x6818, 0xd0fc, 0x0040, 0x3471,
1218 0x7048, 0xa086, 0x0014, 0x0040, 0x3482, 0x6818, 0xa086, 0x0008,
1219 0x00c0, 0x3563, 0x7858, 0xd09c, 0x0040, 0x3563, 0x6820, 0xd0ac,
1220 0x0040, 0x3563, 0x681b, 0x0014, 0x2009, 0x0002, 0x0078, 0x34c7,
1221 0x7868, 0xa08c, 0x00ff, 0x0040, 0x34c7, 0xa186, 0x0008, 0x00c0,
1222 0x349e, 0x6008, 0xc0a4, 0x600a, 0x1078, 0x3db8, 0x0040, 0x34c7,
1223 0x1078, 0x3e36, 0x1078, 0x45d6, 0x0078, 0x34af, 0xa186, 0x0028,
1224 0x00c0, 0x34c7, 0x6018, 0xa005, 0x0040, 0x3491, 0x8001, 0x0040,
1225 0x3491, 0x8001, 0x0040, 0x3491, 0x601e, 0x0078, 0x3491, 0x6820,
1226 0xd084, 0x0040, 0x2a0c, 0xc084, 0x6822, 0x1078, 0x2b13, 0x705c,
1227 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005,
1228 0x2d00, 0x00c0, 0x34c4, 0x6002, 0x6006, 0x0078, 0x2a0c, 0x017e,
1229 0x81ff, 0x00c0, 0x3511, 0x7000, 0xa086, 0x0030, 0x0040, 0x3511,
1230 0x71d4, 0xd1bc, 0x00c0, 0x3511, 0xd1b4, 0x00c0, 0x34f8, 0x7060,
1231 0xa005, 0x00c0, 0x3511, 0x70a4, 0xa086, 0x0001, 0x0040, 0x3511,
1232 0x7003, 0x0000, 0x047e, 0x057e, 0x077e, 0x067e, 0x0c7e, 0x0d7e,
1233 0x1078, 0x2a35, 0x0d7f, 0x0c7f, 0x067f, 0x077f, 0x057f, 0x047f,
1234 0x71d4, 0xd1b4, 0x00c0, 0x3511, 0x7003, 0x0040, 0x0078, 0x3511,
1235 0x1078, 0x43b0, 0x00c0, 0x3511, 0x781b, 0x005b, 0x0d7e, 0x70bc,
1236 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
1237 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a,
1238 0x0d7f, 0x1078, 0x3648, 0x017f, 0x81ff, 0x0040, 0x3563, 0xa684,
1239 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x00c0,
1240 0x3564, 0x6818, 0xa086, 0x0014, 0x00c0, 0x352d, 0x2008, 0xd6e4,
1241 0x0040, 0x352d, 0x7868, 0xa08c, 0x00ff, 0x1078, 0x2b01, 0x1078,
1242 0x2b22, 0x6820, 0xd0dc, 0x00c0, 0x3564, 0x8717, 0xa294, 0x000f,
1243 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x3543, 0xa290,
1244 0x53c0, 0x0078, 0x3545, 0xa290, 0x5440, 0xa290, 0x0000, 0x221c,
1245 0xd3c4, 0x00c0, 0x354d, 0x0078, 0x3553, 0x8210, 0x2204, 0xa085,
1246 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x355e, 0x68a0, 0xd0c4,
1247 0x00c0, 0x355e, 0x1078, 0x36c2, 0x0078, 0x2a0c, 0x6008, 0xc08d,
1248 0x600a, 0x0078, 0x3564, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0040,
1249 0x356b, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff,
1250 0x0040, 0x3580, 0x2009, 0x4f02, 0x2104, 0x8001, 0x200a, 0x8421,
1251 0x6412, 0x00c0, 0x3580, 0x2021, 0x4f04, 0x2404, 0xc0a5, 0x2022,
1252 0x6018, 0xa005, 0x0040, 0x3588, 0x8001, 0x601a, 0x00c0, 0x358b,
1253 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x3597, 0x6800,
1254 0xa005, 0x00c0, 0x3594, 0x6002, 0x6006, 0x0078, 0x359b, 0x705c,
1255 0x2060, 0x6800, 0x6002, 0x2061, 0x4f00, 0x6887, 0x0103, 0x2d08,
1256 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x35aa, 0x2d02,
1257 0x0078, 0x35ab, 0x616e, 0x7200, 0xa286, 0x0030, 0x0040, 0x35bb,
1258 0xa286, 0x0040, 0x00c0, 0x2a0c, 0x7003, 0x0002, 0x704c, 0x2068,
1259 0x68c4, 0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc,
1260 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80,
1261 0x0009, 0x7046, 0x007c, 0xa282, 0x0004, 0x0048, 0x35d1, 0x1078,
1262 0x29b2, 0x2200, 0x0079, 0x35d4, 0x35d8, 0x35e9, 0x35f6, 0x35e9,
1263 0xa586, 0x1300, 0x0040, 0x35e9, 0xa586, 0x8300, 0x00c0, 0x35cf,
1264 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef,
1265 0x600a, 0x7000, 0xa086, 0x0005, 0x0040, 0x35f3, 0x1078, 0x4118,
1266 0x781b, 0x0078, 0x007c, 0x781b, 0x0079, 0x007c, 0x7890, 0x8007,
1267 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
1268 0x00ff, 0xa186, 0x0003, 0x0040, 0x360b, 0xa186, 0x0000, 0x0040,
1269 0x360b, 0x0078, 0x4107, 0x781b, 0x0079, 0x007c, 0x6820, 0xc095,
1270 0x6822, 0x82ff, 0x00c0, 0x3618, 0x1078, 0x4118, 0x0078, 0x361f,
1271 0x8211, 0x0040, 0x361d, 0x1078, 0x29b2, 0x1078, 0x412b, 0x781b,
1272 0x0078, 0x007c, 0x1078, 0x43d3, 0x7830, 0xa084, 0x00c0, 0x00c0,
1273 0x3645, 0x017e, 0x3208, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec,
1274 0x007f, 0x0040, 0x3637, 0xa18c, 0x0300, 0x0078, 0x3639, 0xa18c,
1275 0x0400, 0x017f, 0x0040, 0x3640, 0x0018, 0x3645, 0x0078, 0x3642,
1276 0x0028, 0x3645, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c,
1277 0xa684, 0x0060, 0x00c0, 0x3652, 0x682f, 0x0000, 0x6833, 0x0000,
1278 0x0078, 0x36c1, 0xd6dc, 0x00c0, 0x366a, 0x68b4, 0xd0dc, 0x00c0,
1279 0x366a, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, 0xa005, 0x00c0,
1280 0x3667, 0x2200, 0xa105, 0x0040, 0x45d6, 0x704b, 0x0015, 0x0078,
1281 0x45d6, 0x007c, 0xd6ac, 0x0040, 0x3690, 0xd6f4, 0x0040, 0x3676,
1282 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x45d6, 0x68b4, 0xa084,
1283 0x4000, 0xa635, 0xd6f4, 0x00c0, 0x3670, 0x7048, 0xa005, 0x00c0,
1284 0x3683, 0x704b, 0x0015, 0xd6dc, 0x00c0, 0x368c, 0x68b4, 0xd0dc,
1285 0x0040, 0x368c, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0078, 0x45d6,
1286 0xd6f4, 0x0040, 0x3699, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
1287 0x45d6, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x00c0, 0x3693,
1288 0x7048, 0xa005, 0x00c0, 0x36a6, 0x704b, 0x0015, 0x2408, 0x2510,
1289 0x2700, 0x80fb, 0x00c8, 0x36ad, 0x8000, 0xa084, 0x003f, 0xa108,
1290 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x36ba,
1291 0x0078, 0x45d6, 0x7000, 0xa086, 0x0006, 0x0040, 0x36c1, 0x0078,
1292 0x45d6, 0x007c, 0x6946, 0x6008, 0xc0cd, 0xd3cc, 0x0040, 0x36c9,
1293 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f, 0x0000,
1294 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003,
1295 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020,
1296 0x7000, 0x0079, 0x36e3, 0x2a0c, 0x36f5, 0x36ed, 0x36eb, 0x36eb,
1297 0x36eb, 0x36eb, 0x36eb, 0x1078, 0x29b2, 0x6820, 0xd084, 0x00c0,
1298 0x36f5, 0x1078, 0x3e19, 0x0078, 0x36fb, 0x705c, 0x2c50, 0x2060,
1299 0x6800, 0x6002, 0x2a60, 0x3208, 0xa18c, 0x0300, 0x0040, 0x3704,
1300 0x2021, 0x4f58, 0x0078, 0x3706, 0x2021, 0x4f98, 0x2404, 0xa005,
1301 0x0040, 0x370d, 0x2020, 0x0078, 0x3706, 0x2d22, 0x206b, 0x0000,
1302 0x007c, 0x1078, 0x3e20, 0x1078, 0x3e36, 0x6008, 0xc0cc, 0x600a,
1303 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944,
1304 0x6916, 0x3208, 0xa18c, 0x0300, 0x0040, 0x372a, 0x2009, 0x0000,
1305 0x0078, 0x372c, 0x2009, 0x0001, 0x1078, 0x4a81, 0xd6dc, 0x0040,
1306 0x3734, 0x691c, 0xc1ed, 0x691e, 0x6818, 0xd0fc, 0x0040, 0x3743,
1307 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3741, 0x681b, 0x001e, 0x0078,
1308 0x3743, 0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, 0x374b, 0x2021,
1309 0x4f98, 0x0078, 0x374d, 0x2021, 0x4f58, 0x6800, 0x2022, 0x6a3c,
1310 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0040,
1311 0x378d, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x0d7e,
1312 0x0f7e, 0x157e, 0x147e, 0x2079, 0x4f00, 0x1078, 0x1e46, 0x147f,
1313 0x157f, 0x0f7f, 0x70cc, 0x2010, 0x2009, 0x0101, 0x027e, 0x2204,
1314 0xa06d, 0x0040, 0x377d, 0x6814, 0xa706, 0x0040, 0x377a, 0x6800,
1315 0x0078, 0x3770, 0x6820, 0xc0d5, 0x6822, 0x027f, 0x8210, 0x8109,
1316 0x00c0, 0x376e, 0x0d7f, 0x7067, 0x0003, 0x707f, 0x0000, 0x7776,
1317 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x6818, 0xa086, 0x0002,
1318 0x00c0, 0x3799, 0x6817, 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec,
1319 0x681e, 0x1078, 0x2073, 0x0078, 0x2a0c, 0x7cd8, 0x7ddc, 0x7fd0,
1320 0x1078, 0x3648, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078,
1321 0x43d7, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x37b2,
1322 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, 0x0000, 0x0078,
1323 0x2a0c, 0x7000, 0xa005, 0x00c0, 0x37bf, 0x0078, 0x2a0c, 0xa006,
1324 0x1078, 0x45d6, 0x6920, 0xd1ac, 0x00c0, 0x37c8, 0x681b, 0x0014,
1325 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff,
1326 0x6822, 0x7000, 0x0079, 0x37d4, 0x2a0c, 0x37de, 0x37de, 0x37e1,
1327 0x37e1, 0x37e1, 0x37dc, 0x37dc, 0x1078, 0x29b2, 0x6818, 0x0078,
1328 0x3443, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0078, 0x3dde,
1329 0x2300, 0x0079, 0x37eb, 0x37ee, 0x37f0, 0x3860, 0x1078, 0x29b2,
1330 0xd6fc, 0x00c0, 0x3847, 0x7000, 0xa00d, 0x0079, 0x37f7, 0x2a0c,
1331 0x3801, 0x3801, 0x3831, 0x3801, 0x3844, 0x37ff, 0x37ff, 0x1078,
1332 0x29b2, 0xa684, 0x0060, 0x0040, 0x3831, 0xa086, 0x0060, 0x00c0,
1333 0x382e, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac,
1334 0x681e, 0xa186, 0x0002, 0x0040, 0x3820, 0x1078, 0x45d6, 0x69ac,
1335 0x68b0, 0xa115, 0x0040, 0x3820, 0x1078, 0x4977, 0x0078, 0x3822,
1336 0x1078, 0x493f, 0x781b, 0x0079, 0x71d4, 0xd1b4, 0x00c0, 0x2a08,
1337 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a52, 0x007c, 0xd6ec, 0x0040,
1338 0x380b, 0x6818, 0xd0fc, 0x0040, 0x3844, 0xd6f4, 0x00c0, 0x383e,
1339 0x681b, 0x0015, 0x781b, 0x0079, 0x0078, 0x2a08, 0x681b, 0x0007,
1340 0x682f, 0x0000, 0x6833, 0x0000, 0x1078, 0x4369, 0x007c, 0xc6fc,
1341 0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x3850, 0x8000,
1342 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
1343 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0079, 0x007c,
1344 0x1078, 0x29b2, 0x2300, 0x0079, 0x3865, 0x386a, 0x388f, 0x38ef,
1345 0x1078, 0x29b2, 0x7000, 0x0079, 0x386d, 0x3875, 0x3877, 0x3880,
1346 0x3875, 0x3875, 0x3875, 0x3875, 0x3875, 0x1078, 0x29b2, 0x69ac,
1347 0x68b0, 0xa115, 0x0040, 0x3880, 0x1078, 0x4977, 0x0078, 0x3882,
1348 0x1078, 0x493f, 0x681c, 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x00c0,
1349 0x2a08, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a52, 0x007c, 0xd6fc,
1350 0x00c0, 0x38df, 0x7000, 0xa00d, 0x0079, 0x3896, 0x2a0c, 0x38a6,
1351 0x38a0, 0x38d6, 0x38a6, 0x38dc, 0x389e, 0x389e, 0x1078, 0x29b2,
1352 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060,
1353 0x0040, 0x38d6, 0xa086, 0x0060, 0x00c0, 0x38d3, 0xa6b4, 0xbfbf,
1354 0xc6ed, 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0040, 0x38c2, 0x1078,
1355 0x45d6, 0x69ac, 0x68b0, 0xa115, 0x0040, 0x38c2, 0x1078, 0x4977,
1356 0x0078, 0x38c4, 0x1078, 0x493f, 0x781b, 0x0079, 0x681c, 0xc0b4,
1357 0x681e, 0x71d4, 0xd1b4, 0x00c0, 0x2a08, 0x70a4, 0xa086, 0x0001,
1358 0x00c0, 0x2a52, 0x007c, 0xd6ec, 0x0040, 0x38b0, 0x6818, 0xd0fc,
1359 0x0040, 0x38dc, 0x681b, 0x0007, 0x781b, 0x00f9, 0x007c, 0xc6fc,
1360 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94,
1361 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0079, 0x007c, 0xd6dc,
1362 0x0040, 0x38f8, 0x782b, 0x3009, 0x781b, 0x0079, 0x0078, 0x2a08,
1363 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, 0x00c0, 0x390b,
1364 0xa484, 0x0200, 0x0040, 0x3905, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b,
1365 0x0079, 0x0078, 0x2a08, 0x6820, 0xc095, 0x6822, 0x1078, 0x42e2,
1366 0xc6dd, 0x1078, 0x4118, 0x781b, 0x0078, 0x0078, 0x2a08, 0x2300,
1367 0x0079, 0x391a, 0x391d, 0x391f, 0x3921, 0x1078, 0x29b2, 0x0078,
1368 0x4111, 0xd6d4, 0x00c0, 0x395c, 0x79e4, 0xd1ac, 0x0040, 0x392f,
1369 0x78ec, 0xa084, 0x0003, 0x0040, 0x392f, 0x782b, 0x3009, 0x789b,
1370 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xd1ac,
1371 0x0040, 0x393f, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x3958, 0x2001,
1372 0x4f04, 0x2004, 0xd0e4, 0x00c0, 0x3954, 0x6820, 0xd0c4, 0x0040,
1373 0x3954, 0x0c7e, 0x7058, 0x2060, 0x6004, 0xc09d, 0x6006, 0x6008,
1374 0xa084, 0x00ff, 0x600a, 0x0c7f, 0x2001, 0x0014, 0x0078, 0x3443,
1375 0xa184, 0x0007, 0x0079, 0x3992, 0x7a90, 0xa294, 0x0007, 0x789b,
1376 0x0060, 0x79a8, 0x81ff, 0x0040, 0x3990, 0x789b, 0x0010, 0x7ba8,
1377 0xa384, 0x0001, 0x00c0, 0x3983, 0x7ba8, 0x7ba8, 0xa386, 0x0001,
1378 0x00c0, 0x3976, 0x2009, 0xfff7, 0x0078, 0x397c, 0xa386, 0x0003,
1379 0x00c0, 0x3983, 0x2009, 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004,
1380 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
1381 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922,
1382 0x0078, 0x435d, 0x30d9, 0x30e3, 0x399c, 0x39a2, 0x399a, 0x399a,
1383 0x435d, 0x435d, 0x1078, 0x29b2, 0x6920, 0xa18c, 0xfcff, 0x6922,
1384 0x0078, 0x4363, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x435d,
1385 0x79e4, 0xa184, 0x0030, 0x0040, 0x39b2, 0x78ec, 0xa084, 0x0003,
1386 0x00c0, 0x39e6, 0x7000, 0xa086, 0x0004, 0x00c0, 0x39cc, 0x7064,
1387 0xa086, 0x0002, 0x00c0, 0x39c2, 0x2011, 0x0002, 0x2019, 0x0000,
1388 0x0078, 0x2f65, 0x7064, 0xa086, 0x0006, 0x0040, 0x39bc, 0x7064,
1389 0xa086, 0x0004, 0x0040, 0x39bc, 0x7000, 0xa086, 0x0000, 0x0040,
1390 0x2a08, 0x6920, 0xa184, 0x0420, 0x0040, 0x39db, 0xc1d4, 0x6922,
1391 0x6818, 0x0078, 0x3443, 0x6818, 0xa08e, 0x0002, 0x0040, 0x39e4,
1392 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078, 0x3443, 0xa184, 0x0007,
1393 0x0079, 0x39ea, 0x435d, 0x435d, 0x39f2, 0x435d, 0x43a5, 0x43a5,
1394 0x435d, 0x435d, 0xd6bc, 0x0040, 0x3a34, 0x7184, 0x81ff, 0x0040,
1395 0x3a34, 0xa182, 0x000d, 0x00d0, 0x3a01, 0x7087, 0x0000, 0x0078,
1396 0x3a06, 0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061,
1397 0x79aa, 0x157e, 0x137e, 0x147e, 0x7088, 0x8114, 0xa210, 0x728a,
1398 0xa080, 0x000b, 0xad00, 0x2098, 0xb284, 0x0300, 0x0040, 0x3a28,
1399 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3a24,
1400 0x20a1, 0x012b, 0x0078, 0x3a2a, 0x20a1, 0x022b, 0x0078, 0x3a2a,
1401 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f,
1402 0x137f, 0x157f, 0x0078, 0x4363, 0xd6d4, 0x00c0, 0x3a88, 0x6820,
1403 0xd084, 0x0040, 0x4363, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040,
1404 0x3a46, 0xa086, 0x0060, 0x00c0, 0x3a46, 0xc1f5, 0xc194, 0x795a,
1405 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818,
1406 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3e4f, 0xa18c,
1407 0x00f8, 0x00c0, 0x3e4f, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208,
1408 0xa18c, 0x0300, 0x0040, 0x3a74, 0x007e, 0x2001, 0x4f04, 0x2004,
1409 0xd0ec, 0x007f, 0x0040, 0x3a70, 0x20a1, 0x012b, 0x0078, 0x3a76,
1410 0x20a1, 0x022b, 0x0078, 0x3a76, 0x20a1, 0x012b, 0x017f, 0x789b,
1411 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f,
1412 0x137f, 0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, 0x4363,
1413 0x6818, 0xd0fc, 0x0040, 0x3a8e, 0x681b, 0x0008, 0x6820, 0xc0ad,
1414 0x6822, 0x1078, 0x4120, 0x781b, 0x00ea, 0x007c, 0x2300, 0x0079,
1415 0x3a99, 0x3a9e, 0x3b76, 0x3a9c, 0x1078, 0x29b2, 0x7cd8, 0x7ddc,
1416 0x7fd0, 0x82ff, 0x00c0, 0x3ac7, 0x7200, 0xa286, 0x0003, 0x0040,
1417 0x3410, 0x71d4, 0xd1bc, 0x00c0, 0x3aca, 0xd1b4, 0x0040, 0x3aca,
1418 0x0d7e, 0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4,
1419 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da,
1420 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, 0x3ace, 0x7200,
1421 0x0078, 0x3ace, 0x783b, 0x1800, 0x781b, 0x004a, 0xa284, 0x000f,
1422 0x0079, 0x3ad2, 0x3b61, 0x3b10, 0x3adc, 0x343f, 0x3ada, 0x3b61,
1423 0x3ada, 0x3ada, 0x1078, 0x29b2, 0x681c, 0xd0ec, 0x0040, 0x3ae3,
1424 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006,
1425 0xa005, 0x00c0, 0x3aec, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c,
1426 0xa084, 0x000e, 0x00c0, 0x3b00, 0xb284, 0x0300, 0x0040, 0x3afc,
1427 0x2009, 0x95c0, 0x0078, 0x3b05, 0x2009, 0x96d0, 0x0078, 0x3b05,
1428 0x7030, 0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a,
1429 0x715e, 0xd6dc, 0x00c0, 0x3b10, 0xc6fc, 0x6eb6, 0x0078, 0x3b61,
1430 0x6eb6, 0xa684, 0x0060, 0x00c0, 0x3b1a, 0xa684, 0x7fff, 0x68b6,
1431 0x0078, 0x3b61, 0xd6dc, 0x00c0, 0x3b28, 0xa684, 0x7fff, 0x68b6,
1432 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x45d6, 0x0078, 0x3b61,
1433 0xd6ac, 0x0040, 0x3b34, 0xa006, 0x1078, 0x45d6, 0x2408, 0x2510,
1434 0x69aa, 0x6aa6, 0x0078, 0x3b44, 0x2408, 0x2510, 0x2700, 0x801b,
1435 0x00c8, 0x3b3b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
1436 0x69aa, 0x6aa6, 0x1078, 0x45d6, 0xd6fc, 0x0040, 0x3b61, 0xa684,
1437 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x00c0, 0x3b59, 0x2700,
1438 0x801b, 0x00c8, 0x3b54, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
1439 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303,
1440 0x68ae, 0x7000, 0xa086, 0x0030, 0x00c0, 0x2a0c, 0x7003, 0x0002,
1441 0x70bc, 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a,
1442 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa586, 0x8800,
1443 0x00c0, 0x3b83, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008,
1444 0xa084, 0xfbef, 0x600a, 0x0078, 0x4111, 0x7047, 0x0000, 0xa282,
1445 0x0006, 0x0050, 0x3b8d, 0x1078, 0x29b2, 0x2300, 0x0079, 0x3b90,
1446 0x3b93, 0x3ba5, 0x3bb1, 0x2200, 0x0079, 0x3b96, 0x3b9c, 0x4111,
1447 0x3b9e, 0x3b9c, 0x3beb, 0x3c40, 0x1078, 0x29b2, 0x7a80, 0xa294,
1448 0x0f00, 0x1078, 0x3cca, 0x0078, 0x4107, 0x1078, 0x3bc2, 0x0079,
1449 0x3ba9, 0x4111, 0x3baf, 0x3baf, 0x3beb, 0x3baf, 0x4111, 0x1078,
1450 0x29b2, 0x1078, 0x3bc2, 0x0079, 0x3bb5, 0x3bbd, 0x3bbb, 0x3bbb,
1451 0x3bbd, 0x3bbb, 0x3bbd, 0x1078, 0x29b2, 0x1078, 0x412b, 0x781b,
1452 0x0078, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3bd3, 0x1078,
1453 0x3e36, 0x0078, 0x3bcd, 0x1078, 0x45d6, 0x6008, 0xa084, 0xfbef,
1454 0x600a, 0x0078, 0x3bd8, 0x7000, 0xa086, 0x0003, 0x0040, 0x3bcb,
1455 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3be2, 0x2001, 0x96e0,
1456 0x0078, 0x3be4, 0x2001, 0x9712, 0x2068, 0x704e, 0xad80, 0x0009,
1457 0x7046, 0x2200, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3bfd,
1458 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078,
1459 0x3c02, 0x1078, 0x45d6, 0x0078, 0x3c02, 0x7000, 0xa086, 0x0003,
1460 0x0040, 0x3bf9, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b,
1461 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x95c0, 0xb284,
1462 0x0300, 0x00c0, 0x3c16, 0xc2fd, 0x2069, 0x96d0, 0x2d04, 0x2d08,
1463 0x715e, 0xa06d, 0x0040, 0x3c23, 0x6814, 0xa206, 0x0040, 0x3c25,
1464 0x6800, 0x0078, 0x3c17, 0x1078, 0x3cca, 0x6eb4, 0x7e5a, 0x6920,
1465 0xa184, 0x0c00, 0x0040, 0x3cf4, 0x7064, 0xa086, 0x0006, 0x00c0,
1466 0x3c37, 0x7074, 0xa206, 0x00c0, 0x3c37, 0x7066, 0x707e, 0x681b,
1467 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x4120, 0x0078, 0x3cf4,
1468 0x7200, 0xa286, 0x0002, 0x00c0, 0x3c52, 0x70d4, 0xc0b5, 0x70d6,
1469 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3c56, 0x1078, 0x45d6,
1470 0x0078, 0x3c56, 0xa286, 0x0003, 0x0040, 0x3c4e, 0x7003, 0x0001,
1471 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f,
1472 0xa215, 0xb284, 0x0300, 0x00c0, 0x3c66, 0xc2fd, 0x79a8, 0x79a8,
1473 0xa18c, 0x00ff, 0x2118, 0x70cc, 0xa168, 0x2d04, 0x2d08, 0x715e,
1474 0xa06d, 0x0040, 0x3c7a, 0x6814, 0xa206, 0x0040, 0x3ca3, 0x6800,
1475 0x0078, 0x3c6e, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3c84,
1476 0x2001, 0x96e0, 0x0078, 0x3c86, 0x2001, 0x9712, 0x2068, 0x704e,
1477 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3c8b,
1478 0x157f, 0xb284, 0x0300, 0x0040, 0x3c98, 0xc2fc, 0x0078, 0x3c99,
1479 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823,
1480 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0040,
1481 0x3cf4, 0xd0dc, 0x0040, 0x3cbf, 0x7064, 0xa086, 0x0004, 0x00c0,
1482 0x3cbb, 0x7074, 0xa206, 0x00c0, 0x3cbb, 0x7078, 0xa306, 0x00c0,
1483 0x3cbb, 0x7066, 0x707e, 0x1078, 0x4127, 0x0078, 0x3cf4, 0x681b,
1484 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x4120, 0x707f, 0x0000,
1485 0x0078, 0x3cf4, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3cd4,
1486 0x2001, 0x96e0, 0x0078, 0x3cd6, 0x2001, 0x9712, 0x2068, 0x704e,
1487 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3cdb,
1488 0x157f, 0xb284, 0x0300, 0x0040, 0x3ce8, 0xc2fc, 0x0078, 0x3ce9,
1489 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823,
1490 0x0800, 0x6827, 0x0003, 0x007c, 0xc6ec, 0xa6ac, 0x0060, 0x0040,
1491 0x3d46, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3d21,
1492 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x0040, 0x3d4b,
1493 0xd6f4, 0x00c0, 0x3d0c, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009,
1494 0x0079, 0xd69c, 0x0040, 0x3d19, 0x2009, 0x0078, 0x2019, 0x0000,
1495 0x2320, 0x791a, 0xd6ec, 0x0040, 0x3d56, 0x1078, 0x493f, 0x0078,
1496 0x3d56, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040,
1497 0x3d4d, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x00c0,
1498 0x3d32, 0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0079, 0xd69c, 0x0040,
1499 0x3d3e, 0x2011, 0x0078, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec,
1500 0x0040, 0x3d56, 0x1078, 0x4977, 0x0078, 0x3d56, 0x2019, 0x0000,
1501 0x2320, 0x0078, 0x3d4d, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0079,
1502 0xd69c, 0x0040, 0x3d55, 0x2009, 0x0078, 0x791a, 0x68c0, 0x705a,
1503 0x2d00, 0x704e, 0x68c4, 0x2060, 0x71d4, 0x2001, 0x4f01, 0x2004,
1504 0xd0c4, 0x00c0, 0x3dab, 0x70d8, 0xa02d, 0x0040, 0x3d84, 0xd1bc,
1505 0x0040, 0x3d9e, 0x7a80, 0xa294, 0x0f00, 0x70dc, 0xa206, 0x0040,
1506 0x3d75, 0x78e0, 0xa504, 0x00c0, 0x3dab, 0x70da, 0xc1bc, 0x71d6,
1507 0x0078, 0x3dab, 0x2031, 0x0001, 0x852c, 0x0048, 0x3d83, 0x8633,
1508 0x8210, 0x0078, 0x3d7c, 0x007c, 0x7de0, 0xa594, 0xff00, 0x0040,
1509 0x3d91, 0x2011, 0x0008, 0x852f, 0x1078, 0x3d7a, 0x8637, 0x0078,
1510 0x3d93, 0x1078, 0x3d7a, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206,
1511 0x0040, 0x3dab, 0x72de, 0x76da, 0x0078, 0x3dab, 0x7a80, 0xa294,
1512 0x0f00, 0x70dc, 0xa236, 0x0040, 0x3d9b, 0x78e0, 0xa534, 0x0040,
1513 0x3d9b, 0xc1bd, 0x71d6, 0xd1b4, 0x00c0, 0x2a08, 0x2300, 0xa405,
1514 0x0040, 0x2a08, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a52, 0x007c,
1515 0x6020, 0xa005, 0x0040, 0x3dc6, 0x8001, 0x6022, 0x6008, 0xa085,
1516 0x0008, 0x600a, 0x700f, 0x0100, 0x702c, 0x6026, 0x007c, 0xa006,
1517 0x1078, 0x45d6, 0x7000, 0xa086, 0x0002, 0x0040, 0x3dd4, 0x7064,
1518 0xa086, 0x0005, 0x00c0, 0x3dde, 0x682b, 0x0000, 0x6817, 0x0000,
1519 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084,
1520 0x000f, 0x0079, 0x3de3, 0x2a0c, 0x3df3, 0x3ded, 0x3e15, 0x3dfd,
1521 0x2a0c, 0x3deb, 0x3deb, 0x1078, 0x29b2, 0x1078, 0x3e20, 0x1078,
1522 0x3e19, 0x0078, 0x3df9, 0x1078, 0x3e20, 0x705c, 0x2060, 0x6800,
1523 0x6002, 0x1078, 0x2073, 0x0078, 0x2a0c, 0x7064, 0x7067, 0x0000,
1524 0x7083, 0x0000, 0x0079, 0x3e04, 0x3e11, 0x3e11, 0x3e0c, 0x3e0c,
1525 0x3e0c, 0x3e11, 0x3e0c, 0x3e11, 0x77d4, 0xc7dd, 0x77d6, 0x0079,
1526 0x2f7e, 0x7067, 0x0000, 0x0078, 0x2a0c, 0x681b, 0x0000, 0x0078,
1527 0x3711, 0x6800, 0xa005, 0x00c0, 0x3e1e, 0x6002, 0x6006, 0x007c,
1528 0x6410, 0x84ff, 0x0040, 0x3e32, 0x2009, 0x4f02, 0x2104, 0x8001,
1529 0x200a, 0x8421, 0x6412, 0x00c0, 0x3e32, 0x2021, 0x4f04, 0x2404,
1530 0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005,
1531 0x0040, 0x3e3c, 0x8001, 0x601a, 0x007c, 0x1078, 0x43d3, 0x681b,
1532 0x0018, 0x0078, 0x3e7d, 0x1078, 0x43d3, 0x681b, 0x0019, 0x0078,
1533 0x3e7d, 0x1078, 0x43d3, 0x681b, 0x001a, 0x0078, 0x3e7d, 0x1078,
1534 0x43d3, 0x681b, 0x0003, 0x0078, 0x3e7d, 0x7774, 0x1078, 0x424e,
1535 0x7178, 0xa18c, 0x00ff, 0x3210, 0xa294, 0x0300, 0x0040, 0x3e64,
1536 0xa1e8, 0x94c0, 0x0078, 0x3e66, 0xa1e8, 0x95d0, 0x2d04, 0x2d08,
1537 0x2068, 0xa005, 0x00c0, 0x3e6f, 0x707e, 0x0078, 0x2a0c, 0x6814,
1538 0x7274, 0xa206, 0x0040, 0x3e77, 0x6800, 0x0078, 0x3e67, 0x6800,
1539 0x200a, 0x681b, 0x0005, 0x707f, 0x0000, 0x1078, 0x3e20, 0x6820,
1540 0xd084, 0x00c0, 0x3e85, 0x1078, 0x3e19, 0x1078, 0x3e36, 0x681f,
1541 0x0000, 0x6823, 0x0020, 0x1078, 0x2073, 0x0078, 0x2a0c, 0xa282,
1542 0x0003, 0x00c0, 0x4107, 0x7da8, 0xa5ac, 0x00ff, 0x7e5a, 0x7ea8,
1543 0xa6b4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3eea,
1544 0xc1c4, 0x6922, 0xa6b4, 0x00ff, 0x0040, 0x3ed7, 0xa682, 0x000c,
1545 0x0048, 0x3eae, 0x0040, 0x3eae, 0x2031, 0x000c, 0x2500, 0xa086,
1546 0x000a, 0x0040, 0x3eb5, 0x852b, 0x852b, 0x1078, 0x41e0, 0x0040,
1547 0x3ebd, 0x1078, 0x3fbc, 0x0078, 0x3ee0, 0x1078, 0x419b, 0x0c7e,
1548 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3ff2, 0x0c7f,
1549 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0,
1550 0x3ed4, 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x0c7e,
1551 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3ff2, 0x0c7f,
1552 0x7e58, 0xd6d4, 0x00c0, 0x3ee7, 0x781b, 0x0067, 0x007c, 0x781b,
1553 0x0079, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6100, 0xd1e4, 0x0040,
1554 0x3f33, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048,
1555 0x3efd, 0x0040, 0x3efd, 0x2011, 0x000c, 0x2600, 0xa202, 0x00c8,
1556 0x3f02, 0x2230, 0x6208, 0xa294, 0x00ff, 0x2001, 0x4f05, 0x2004,
1557 0xd0e4, 0x00c0, 0x3f17, 0x78ec, 0xd0e4, 0x0040, 0x3f17, 0xa282,
1558 0x000a, 0x00c8, 0x3f1d, 0x2011, 0x000a, 0x0078, 0x3f1d, 0xa282,
1559 0x000c, 0x00c8, 0x3f1d, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8,
1560 0x3f22, 0x2228, 0x1078, 0x419f, 0x2500, 0xa086, 0x000a, 0x0040,
1561 0x3f2b, 0x852b, 0x852b, 0x1078, 0x41e0, 0x0040, 0x3f33, 0x1078,
1562 0x3fbc, 0x0078, 0x3f37, 0x1078, 0x419b, 0x1078, 0x3ff2, 0x7858,
1563 0xc095, 0x785a, 0x0c7f, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x2960,
1564 0x6000, 0xd0e4, 0x00c0, 0x3f58, 0xd0b4, 0x00c0, 0x3f52, 0x6010,
1565 0xa084, 0x000f, 0x00c0, 0x3f52, 0x6104, 0xa18c, 0xfff5, 0x6106,
1566 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3f83,
1567 0x68a0, 0xd0cc, 0x00c0, 0x3f52, 0x6208, 0xa294, 0x00ff, 0x2001,
1568 0x4f05, 0x2004, 0xd0e4, 0x00c0, 0x3f71, 0x78ec, 0xd0e4, 0x0040,
1569 0x3f71, 0xa282, 0x000b, 0x00c8, 0x3f71, 0x2011, 0x000a, 0x0078,
1570 0x3f77, 0xa282, 0x000c, 0x00c8, 0x3f77, 0x2011, 0x000c, 0x6308,
1571 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, 0x0048, 0x3f83, 0x0040,
1572 0x3f83, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
1573 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822,
1574 0x70d4, 0xd0b4, 0x0040, 0x3f9f, 0xc0b4, 0x70d6, 0x70b8, 0xa065,
1575 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f,
1576 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011,
1577 0x0032, 0x2019, 0x0000, 0x0078, 0x3fad, 0x78ab, 0x0001, 0x78ab,
1578 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820,
1579 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7158, 0x2160, 0x2018,
1580 0xa08c, 0x0020, 0x0040, 0x3fc5, 0xc0ac, 0x2008, 0xa084, 0xfff0,
1581 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084,
1582 0xfff0, 0xa18c, 0x000f, 0xa105, 0xc0f4, 0xa39c, 0x0020, 0x0040,
1583 0x3fdb, 0xa085, 0x4000, 0xc0fc, 0xd0b4, 0x00c0, 0x3fe0, 0xc0fd,
1584 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004,
1585 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006,
1586 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6018, 0x789a, 0x78a4,
1587 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886,
1588 0x600c, 0xa084, 0x00ff, 0x600e, 0x0c7f, 0x007c, 0xa282, 0x0002,
1589 0x00c0, 0x4107, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0040,
1590 0x4041, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8,
1591 0x4107, 0x1078, 0x4094, 0x1078, 0x3ff2, 0xa980, 0x0001, 0x200c,
1592 0x1078, 0x424a, 0x1078, 0x3f3e, 0x88ff, 0x0040, 0x4037, 0x789b,
1593 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0,
1594 0x4034, 0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7e58,
1595 0xd6d4, 0x00c0, 0x403e, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079,
1596 0x007c, 0xa282, 0x0002, 0x00c8, 0x4049, 0xa284, 0x0001, 0x0040,
1597 0x4052, 0x7158, 0xa188, 0x0000, 0x210c, 0xd1ec, 0x00c0, 0x4052,
1598 0x2011, 0x0000, 0x1078, 0x417c, 0x1078, 0x4094, 0x1078, 0x3ff2,
1599 0x7858, 0xc095, 0x785a, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x027e,
1600 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x00c0, 0x4075, 0xd0bc,
1601 0x00c0, 0x4073, 0x6014, 0xd0b4, 0x00c0, 0x4073, 0xc1a4, 0x6106,
1602 0xa006, 0x0078, 0x4091, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
1603 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x70d4, 0xd0b4,
1604 0x0040, 0x408d, 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084,
1605 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, 0xa085, 0x0200,
1606 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x82ff,
1607 0x0040, 0x409c, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a,
1608 0x78a4, 0xa084, 0xffbf, 0xa205, 0xc0fc, 0xd0b4, 0x00c0, 0x40a9,
1609 0xc0fd, 0x78a6, 0x6016, 0x788a, 0x6004, 0xc0a4, 0x6006, 0x0c7f,
1610 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x40ba, 0x007f,
1611 0x0078, 0x40bd, 0x007f, 0x0078, 0x4104, 0xd6ac, 0x0040, 0x4104,
1612 0x7888, 0xa084, 0x0040, 0x0040, 0x4104, 0x7bb8, 0xa384, 0x003f,
1613 0x831b, 0x00c8, 0x40cc, 0x8000, 0xa005, 0x0040, 0x40e1, 0x831b,
1614 0x00c8, 0x40d5, 0x8001, 0x0040, 0x4101, 0xd6f4, 0x0040, 0x40e1,
1615 0x78b8, 0x801b, 0x00c8, 0x40dd, 0x8000, 0xa084, 0x003f, 0x00c0,
1616 0x4101, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108,
1617 0x00c8, 0x40ec, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade,
1618 0x1078, 0x4a44, 0x781b, 0x0076, 0xb284, 0x0300, 0x0040, 0x40fc,
1619 0x2001, 0x0000, 0x0078, 0x40fe, 0x2001, 0x0001, 0x1078, 0x48ce,
1620 0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0079, 0x007c, 0x1078,
1621 0x412f, 0x781b, 0x0078, 0x007c, 0x1078, 0x4118, 0x781b, 0x0078,
1622 0x007c, 0x6827, 0x0002, 0x1078, 0x4120, 0x781b, 0x0078, 0x007c,
1623 0x2001, 0x0005, 0x0078, 0x4131, 0x2001, 0x000c, 0x0078, 0x4131,
1624 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0078, 0x4131, 0x2001,
1625 0x000d, 0x0078, 0x4131, 0x2001, 0x0009, 0x0078, 0x4131, 0x2001,
1626 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d4, 0xd0b4,
1627 0x0040, 0x4147, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008,
1628 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c,
1629 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0x017e,
1630 0xb28c, 0x0300, 0x0040, 0x4158, 0xa0e0, 0x53c0, 0x0078, 0x415a,
1631 0xa0e0, 0x5440, 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
1632 0x000f, 0x0040, 0x416a, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
1633 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040,
1634 0x0040, 0x417a, 0xa184, 0xffbf, 0xc0fd, 0x78a6, 0x6016, 0x6004,
1635 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001,
1636 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab,
1637 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x419a, 0xc0b4, 0x70d6, 0x0c7e,
1638 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
1639 0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b,
1640 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
1641 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70d4, 0xd0b4, 0x0040,
1642 0x41be, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084,
1643 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x157e,
1644 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a,
1645 0x79a4, 0xa18c, 0xfff0, 0x2021, 0x4233, 0x2019, 0x0011, 0x20a9,
1646 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040,
1647 0x41de, 0x8420, 0x2300, 0xa210, 0x00f0, 0x41d3, 0x157f, 0x007c,
1648 0x157e, 0x2001, 0x4f05, 0x2004, 0xd0e4, 0x00c0, 0x4211, 0x2021,
1649 0x4241, 0x20a9, 0x0009, 0x2011, 0x0028, 0xa582, 0x0019, 0x0040,
1650 0x4227, 0x0048, 0x4227, 0x8420, 0x95a9, 0x2011, 0x0032, 0xa582,
1651 0x0032, 0x0040, 0x4227, 0x0048, 0x4227, 0x8420, 0x95a9, 0x2019,
1652 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x4227, 0x0048,
1653 0x4227, 0x8420, 0x2300, 0xa210, 0x00f0, 0x4203, 0x157f, 0x0078,
1654 0x4225, 0x2021, 0x4233, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011,
1655 0x0032, 0x2200, 0xa502, 0x0040, 0x4227, 0x0048, 0x4227, 0x8420,
1656 0x2300, 0xa210, 0x00f0, 0x4219, 0x157f, 0xa006, 0x007c, 0x157f,
1657 0xa582, 0x0064, 0x00c8, 0x4230, 0x7808, 0xa085, 0x0070, 0x780a,
1658 0x2404, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403,
1659 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07,
1660 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07,
1661 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00,
1662 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
1663 0xd7fc, 0x0040, 0x425f, 0xa0e0, 0x74c0, 0x0078, 0x4261, 0xa0e0,
1664 0x54c0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x426f, 0x2079,
1665 0x0100, 0x2009, 0x4f80, 0x2071, 0x4f80, 0x0078, 0x427f, 0x2009,
1666 0x4f40, 0x2071, 0x4f40, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x0040,
1667 0x427d, 0x2079, 0x0100, 0x0078, 0x427f, 0x2079, 0x0200, 0x2091,
1668 0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x4286, 0x4290, 0x4290,
1669 0x4290, 0x4290, 0x4290, 0x4290, 0x428e, 0x428e, 0x1078, 0x29b2,
1670 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, 0x42df,
1671 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086,
1672 0x1814, 0x00c0, 0x42df, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004,
1673 0x00c0, 0x42a5, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0,
1674 0x42ac, 0x7830, 0xd0bc, 0x00c0, 0x42df, 0x007e, 0x2001, 0x4f04,
1675 0x2004, 0xd0ec, 0x007f, 0x0040, 0x42c1, 0xb284, 0x0300, 0x0078,
1676 0x42c3, 0xb284, 0x0400, 0x0040, 0x42c9, 0x0018, 0x42df, 0x0078,
1677 0x42cb, 0x0028, 0x42df, 0x79e4, 0xa184, 0x0030, 0x0040, 0x42df,
1678 0x78ec, 0xa084, 0x0003, 0x0040, 0x42df, 0x681c, 0xd0ac, 0x00c0,
1679 0x42dd, 0x1078, 0x4369, 0x0078, 0x42df, 0x781b, 0x00f9, 0x0f7f,
1680 0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4f01, 0x2004, 0xd0ac, 0x00c0,
1681 0x435b, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
1682 0xb28c, 0x0300, 0x0040, 0x42f8, 0xa0e0, 0x53c0, 0x0078, 0x42fa,
1683 0xa0e0, 0x5440, 0x6004, 0xa084, 0x000a, 0x00c0, 0x435b, 0x6108,
1684 0xa194, 0xff00, 0x0040, 0x435b, 0xa18c, 0x00ff, 0x2001, 0x000a,
1685 0xa106, 0x0040, 0x4326, 0x2001, 0x000c, 0xa106, 0x0040, 0x432a,
1686 0x2001, 0x0012, 0xa106, 0x0040, 0x432e, 0x2001, 0x0014, 0xa106,
1687 0x0040, 0x4332, 0x2001, 0x0019, 0xa106, 0x0040, 0x4336, 0x2001,
1688 0x0032, 0xa106, 0x0040, 0x433a, 0x0078, 0x433e, 0x2009, 0x000c,
1689 0x0078, 0x4340, 0x2009, 0x0012, 0x0078, 0x4340, 0x2009, 0x0014,
1690 0x0078, 0x4340, 0x2009, 0x0019, 0x0078, 0x4340, 0x2009, 0x0020,
1691 0x0078, 0x4340, 0x2009, 0x003f, 0x0078, 0x4340, 0x2011, 0x0000,
1692 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x2061,
1693 0x4f00, 0x6004, 0xd0bc, 0x0040, 0x435b, 0x6814, 0xd0fc, 0x00c0,
1694 0x4356, 0x60ea, 0x2061, 0x4f40, 0x0078, 0x4359, 0x60ee, 0x2061,
1695 0x4f80, 0x601f, 0x800f, 0x0c7f, 0x007c, 0x781b, 0x0079, 0x007c,
1696 0x781b, 0x0078, 0x007c, 0x781b, 0x0067, 0x007c, 0x781b, 0x0064,
1697 0x007c, 0x2009, 0x4f19, 0x210c, 0xa186, 0x0000, 0x0040, 0x437b,
1698 0xa186, 0x0001, 0x0040, 0x437e, 0x701f, 0x000b, 0x7067, 0x0001,
1699 0x781b, 0x0047, 0x007c, 0x781b, 0x00f0, 0x007c, 0x701f, 0x000a,
1700 0x007c, 0x2009, 0x4f19, 0x210c, 0xa186, 0x0000, 0x0040, 0x4396,
1701 0xa186, 0x0001, 0x0040, 0x4393, 0x701f, 0x000b, 0x7067, 0x0001,
1702 0x781b, 0x0047, 0x007c, 0x701f, 0x000a, 0x007c, 0x781b, 0x00ef,
1703 0x007c, 0x781b, 0x00f9, 0x007c, 0x781b, 0x00f8, 0x007c, 0x781b,
1704 0x00c9, 0x007c, 0x781b, 0x00c8, 0x007c, 0x6818, 0xd0fc, 0x0040,
1705 0x43ab, 0x681b, 0x001d, 0x7067, 0x0001, 0x781b, 0x0047, 0x007c,
1706 0x7830, 0xa084, 0x00c0, 0x00c0, 0x43d2, 0x7808, 0xc08c, 0x780a,
1707 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x00c0,
1708 0x43cf, 0x2001, 0x4f05, 0x2004, 0xd0e4, 0x00c0, 0x43cd, 0x7804,
1709 0xa084, 0xff1f, 0xa085, 0x00e0, 0x7806, 0xa006, 0x007c, 0x7808,
1710 0xc08d, 0x780a, 0x007c, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7830,
1711 0xa084, 0x0040, 0x00c0, 0x43d7, 0x2001, 0x4f04, 0x2004, 0xd0ec,
1712 0x0040, 0x43e6, 0xb284, 0x0300, 0x0078, 0x43e8, 0xb284, 0x0400,
1713 0x0040, 0x43ee, 0x0098, 0x43f2, 0x0078, 0x43f0, 0x00a8, 0x43f2,
1714 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005,
1715 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x4415, 0x007e,
1716 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x440b, 0xb284,
1717 0x0300, 0x0078, 0x440d, 0xb284, 0x0400, 0x0040, 0x4413, 0x0098,
1718 0x440f, 0x0078, 0x4415, 0x00a8, 0x4413, 0x78ac, 0x007e, 0x7808,
1719 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0,
1720 0x37b9, 0xa784, 0x0070, 0x0040, 0x442d, 0x0c7e, 0x2d60, 0x2f68,
1721 0x1078, 0x2926, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040,
1722 0x443a, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x37b9,
1723 0x0078, 0x435d, 0xa784, 0x0004, 0x0040, 0x4469, 0x78b8, 0xa084,
1724 0x4001, 0x0040, 0x4469, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
1725 0x0040, 0x37b9, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0,
1726 0x4469, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00f9,
1727 0x007c, 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0040, 0x4466, 0x681b,
1728 0x0015, 0xd6f4, 0x0040, 0x4466, 0x681b, 0x0007, 0x1078, 0x4369,
1729 0x007c, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f,
1730 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
1731 0x0040, 0x30af, 0x007e, 0x2001, 0x4f04, 0x2004, 0xd0ec, 0x007f,
1732 0x0040, 0x4486, 0xb284, 0x0300, 0x0078, 0x4488, 0xb284, 0x0400,
1733 0x0040, 0x448e, 0x0018, 0x2a08, 0x0078, 0x4490, 0x0028, 0x2a08,
1734 0x0078, 0x410c, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003,
1735 0x8003, 0xd3fc, 0x0040, 0x44a0, 0xa080, 0x5440, 0x0078, 0x44a2,
1736 0xa080, 0x53c0, 0x2060, 0x2048, 0x705a, 0x2a60, 0x007c, 0x0020,
1737 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1738 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1739 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1740 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
1741 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014,
1742 0x9914, 0x98fd, 0x0014, 0x0014, 0x0080, 0x00ff, 0x0100, 0x0402,
1743 0x2008, 0xf880, 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014,
1744 0x2500, 0x0013, 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
1745 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
1746 0x0010, 0xa200, 0x3806, 0x7102, 0x805f, 0x9481, 0x8839, 0x20c4,
1747 0x0864, 0xa856, 0x3008, 0x28c1, 0x9d1b, 0xa201, 0x300c, 0x2847,
1748 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2,
1749 0x9ccb, 0xa8f3, 0x0864, 0xa844, 0x300c, 0xa801, 0x3008, 0x28e1,
1750 0x9ccb, 0x2021, 0xa81d, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0,
1751 0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x7942, 0x8020,
1752 0xa4a1, 0x882b, 0x1814, 0x883b, 0x80df, 0x94a1, 0x7027, 0x85f2,
1753 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa816, 0x883e, 0xa814,
1754 0x2001, 0xa812, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x7942,
1755 0x8020, 0xa4a1, 0x1814, 0x80df, 0x94a1, 0x883b, 0x7023, 0x8576,
1756 0x8677, 0xa802, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d1b, 0x2044,
1757 0x2103, 0x20a2, 0x2081, 0xa8c3, 0xa207, 0x0904, 0xa20e, 0xa809,
1758 0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601,
1759 0xa208, 0x856e, 0x866f, 0x7161, 0x0014, 0x0704, 0x3008, 0x9ccb,
1760 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844,
1761 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014,
1762 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014,
1763 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014,
1764 0x3008, 0x8000, 0x284a, 0x1011, 0xa8fc, 0x3008, 0x9d33, 0x8000,
1765 0xa000, 0x2802, 0x1011, 0xa8fd, 0x9d39, 0xa8bd, 0x3008, 0x9d33,
1766 0x283b, 0x1011, 0xa8fd, 0xa209, 0x7102, 0x805f, 0x9481, 0x0017,
1767 0x300c, 0xa209, 0x8000, 0x85a4, 0x1de2, 0xa209, 0xdac1, 0x0014,
1768 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0,
1769 0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d25,
1770 0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016,
1771 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021,
1772 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822,
1773 0x0016, 0x7944, 0x8421, 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944,
1774 0x8421, 0xa0df, 0x9532, 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4,
1775 0xa084, 0x4600, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205,
1776 0x00c0, 0x4602, 0x720c, 0x82ff, 0x0040, 0x45ed, 0x8aff, 0x00c0,
1777 0x4602, 0x7200, 0xd284, 0x00c0, 0x4602, 0x7804, 0xd0cc, 0x0040,
1778 0x45f3, 0x1078, 0x4acc, 0x7023, 0x0000, 0x7027, 0x0000, 0x7000,
1779 0xd084, 0x0040, 0x45fd, 0x7007, 0x0004, 0x7003, 0x0008, 0x127f,
1780 0x2000, 0x007c, 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084,
1781 0x0040, 0x465b, 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x460a,
1782 0xa184, 0x0003, 0x0040, 0x468c, 0xa184, 0x01e0, 0x00c0, 0x468c,
1783 0xd1f4, 0x00c0, 0x460a, 0xa184, 0x3000, 0xa086, 0x1000, 0x0040,
1784 0x460a, 0x2001, 0x4f05, 0x2004, 0xd0e4, 0x0040, 0x4637, 0x2011,
1785 0x0180, 0x710c, 0x8211, 0x0040, 0x4645, 0x7008, 0xd0f4, 0x00c0,
1786 0x460a, 0x700c, 0xa106, 0x0040, 0x462a, 0x0078, 0x4627, 0x2011,
1787 0x0180, 0x710c, 0x8211, 0x0040, 0x4645, 0x7008, 0xd0f4, 0x00c0,
1788 0x460a, 0x700c, 0xa106, 0x0040, 0x463a, 0x7007, 0x0012, 0x7108,
1789 0x0005, 0x7008, 0xa106, 0x00c0, 0x4647, 0xa184, 0x0003, 0x0040,
1790 0x468c, 0xd194, 0x0040, 0x4647, 0xd1f4, 0x0040, 0x468c, 0x7007,
1791 0x0002, 0x0078, 0x460a, 0x7108, 0xd1fc, 0x0040, 0x4666, 0x1078,
1792 0x47ed, 0x8aff, 0x0040, 0x45dc, 0x0078, 0x465b, 0x700c, 0xa08c,
1793 0x03ff, 0x0040, 0x4691, 0x7004, 0xd084, 0x0040, 0x4683, 0x7014,
1794 0xa005, 0x00c0, 0x467f, 0x7010, 0x7310, 0xa306, 0x00c0, 0x4673,
1795 0x2300, 0xa005, 0x0040, 0x4683, 0xa102, 0x00c8, 0x465b, 0x7007,
1796 0x0010, 0x0078, 0x468c, 0x8aff, 0x0040, 0x4691, 0x1078, 0x49f2,
1797 0x00c0, 0x4686, 0x0040, 0x465b, 0x1078, 0x4738, 0x127f, 0x2000,
1798 0x007c, 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8, 0x46a0, 0x7007,
1799 0x0002, 0x0078, 0x4691, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c,
1800 0xa205, 0x00c0, 0x468c, 0x7023, 0x0000, 0x7027, 0x0000, 0x7003,
1801 0x0008, 0x007e, 0x2001, 0x4f01, 0x2004, 0xd0cc, 0x0040, 0x46b2,
1802 0x1078, 0x4acc, 0x007f, 0x127f, 0x2000, 0x007c, 0x6428, 0x84ff,
1803 0x0040, 0x46e2, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x46f2,
1804 0x273c, 0x87fb, 0x00c0, 0x46d0, 0x0048, 0x46c8, 0x1078, 0x29b2,
1805 0x609c, 0xa075, 0x0040, 0x46e2, 0x0078, 0x46bb, 0x2039, 0x46e7,
1806 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0040,
1807 0x46e2, 0x8738, 0x2704, 0xa005, 0x00c0, 0x46d1, 0x709c, 0xa075,
1808 0x00c0, 0x46bb, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011,
1809 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015,
1810 0x001b, 0x0000, 0x0000, 0x46e7, 0x46e4, 0x0000, 0x0000, 0x8000,
1811 0x0000, 0x46e7, 0x0000, 0x46ef, 0x46ec, 0x0000, 0x0000, 0x0000,
1812 0x0000, 0x46ef, 0x0000, 0x46ea, 0x46ea, 0x0000, 0x0000, 0x8000,
1813 0x0000, 0x46ea, 0x0000, 0x46f0, 0x46f0, 0x0000, 0x0000, 0x0000,
1814 0x0000, 0x46f0, 0x2079, 0x4f00, 0x2071, 0x0010, 0x7007, 0x000a,
1815 0x7007, 0x0002, 0x7003, 0x0001, 0x7810, 0xd0ec, 0x0040, 0x4726,
1816 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x472a, 0x2009, 0x0002,
1817 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000,
1818 0x8109, 0x0040, 0x4737, 0x2071, 0x0020, 0x0078, 0x472a, 0x007c,
1819 0x7004, 0x8004, 0x00c8, 0x47c1, 0x7108, 0x7008, 0xa106, 0x00c0,
1820 0x473c, 0xa184, 0x01e0, 0x0040, 0x4749, 0x1078, 0x4830, 0x0078,
1821 0x47e9, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, 0x7008, 0xa106,
1822 0x00c0, 0x474d, 0xa184, 0x01e0, 0x0040, 0x475a, 0x1078, 0x4830,
1823 0x0078, 0x47e9, 0x7810, 0xd0ec, 0x0040, 0x4774, 0x2001, 0x04fd,
1824 0x2004, 0xa086, 0x0003, 0x00c0, 0x4778, 0xa184, 0x4000, 0x0040,
1825 0x477c, 0xa382, 0x0003, 0x00c8, 0x477c, 0xa184, 0x0004, 0x0040,
1826 0x474d, 0x8318, 0x0078, 0x474d, 0x7814, 0xd0ec, 0x00c0, 0x477c,
1827 0xa184, 0x4000, 0x00c0, 0x474d, 0xa19c, 0x300c, 0xa386, 0x2004,
1828 0x0040, 0x4799, 0xa386, 0x0008, 0x0040, 0x47a4, 0x7004, 0xd084,
1829 0x00c0, 0x4795, 0x7108, 0x7008, 0xa106, 0x00c0, 0x478a, 0xa184,
1830 0x0003, 0x0040, 0x4795, 0x0078, 0x4830, 0xa386, 0x200c, 0x00c0,
1831 0x474d, 0x7200, 0x8204, 0x0048, 0x47a4, 0x730c, 0xa384, 0x03ff,
1832 0x0040, 0x47a4, 0x1078, 0x29b2, 0x7108, 0x7008, 0xa106, 0x00c0,
1833 0x47a4, 0xa184, 0x01e0, 0x0040, 0x47b1, 0x1078, 0x4830, 0x0078,
1834 0x47e9, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x47c1, 0x7310,
1835 0x7014, 0xa305, 0x0040, 0x47c1, 0x710c, 0xa184, 0x03ff, 0x00c0,
1836 0x4738, 0x7108, 0x7008, 0xa106, 0x00c0, 0x47c1, 0xa184, 0x01e0,
1837 0x0040, 0x47ce, 0x1078, 0x4830, 0x0078, 0x47e9, 0x7007, 0x0012,
1838 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x47d2, 0x7108, 0x7008,
1839 0xa106, 0x00c0, 0x47d6, 0xa184, 0x01e0, 0x0040, 0x47e3, 0x1078,
1840 0x4830, 0x0078, 0x47e9, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048,
1841 0x47d6, 0x7003, 0x0008, 0x007c, 0x7108, 0xa184, 0x01e0, 0x00c0,
1842 0x4830, 0x7108, 0xa184, 0x01e0, 0x00c0, 0x4830, 0xa184, 0x0007,
1843 0x0079, 0x47fa, 0x4804, 0x4814, 0x4802, 0x4814, 0x4802, 0x4872,
1844 0x4802, 0x4870, 0x1078, 0x29b2, 0x7004, 0xa084, 0x0010, 0xc08d,
1845 0x7006, 0x8aff, 0x00c0, 0x480f, 0x2049, 0x0000, 0x007c, 0x1078,
1846 0x49f2, 0x00c0, 0x480f, 0x007c, 0x7004, 0xa084, 0x0010, 0xc08d,
1847 0x7006, 0x7004, 0xd084, 0x00c0, 0x4828, 0x7108, 0x7008, 0xa106,
1848 0x00c0, 0x481d, 0xa184, 0x0003, 0x0040, 0x4828, 0x0078, 0x4830,
1849 0x8aff, 0x0040, 0x482f, 0x1078, 0x49f2, 0x00c0, 0x482b, 0x007c,
1850 0x7007, 0x0012, 0x7108, 0x00e0, 0x4833, 0x2091, 0x6000, 0x00e0,
1851 0x4837, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004,
1852 0xd09c, 0x00c0, 0x483f, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0,
1853 0x4843, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x4857, 0x7004,
1854 0xa005, 0x00c0, 0x4857, 0x700c, 0xa005, 0x0040, 0x4859, 0x0078,
1855 0x483b, 0x2049, 0x0000, 0xb284, 0x0100, 0x0040, 0x4863, 0x2001,
1856 0x0000, 0x0078, 0x4865, 0x2001, 0x0001, 0x1078, 0x4262, 0x681b,
1857 0x0002, 0x2051, 0x0000, 0x007c, 0x1078, 0x29b2, 0x1078, 0x29b2,
1858 0x1078, 0x48b9, 0x7210, 0x7114, 0x700c, 0xa09c, 0x03ff, 0x2800,
1859 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x48b9, 0x2704, 0x2c58,
1860 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400,
1861 0xa305, 0x0040, 0x4895, 0x00c8, 0x4895, 0x8412, 0x8210, 0x830a,
1862 0xa189, 0x0000, 0x2b60, 0x0078, 0x487c, 0x2b60, 0x8a07, 0x007e,
1863 0x6004, 0xd09c, 0x0040, 0x48a0, 0xa7ba, 0x46ec, 0x0078, 0x48a2,
1864 0xa7ba, 0x46e4, 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92,
1865 0x6b8e, 0x7108, 0x7008, 0xa106, 0x00c0, 0x48a9, 0xa184, 0x01e0,
1866 0x0040, 0x48b4, 0x1078, 0x4830, 0x7007, 0x0012, 0x1078, 0x4738,
1867 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x48cd, 0x6000,
1868 0xa064, 0x00c0, 0x48c4, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080,
1869 0x4702, 0x203c, 0x87fb, 0x1040, 0x29b2, 0x007c, 0x127e, 0x0d7e,
1870 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060,
1871 0x6888, 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff,
1872 0x007e, 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x48eb, 0xa0b8,
1873 0x46ec, 0x0078, 0x48ed, 0xa0b8, 0x46e4, 0xb284, 0x0100, 0x0040,
1874 0x48f4, 0x7e20, 0x0078, 0x48f5, 0x7e24, 0xa6b5, 0x000c, 0x681c,
1875 0xd0b4, 0x0040, 0x48fc, 0xc685, 0x2400, 0xa305, 0x0040, 0x4925,
1876 0x2c58, 0x2704, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004,
1877 0xa301, 0x701e, 0xd19c, 0x0040, 0x4915, 0x6010, 0xa081, 0x0000,
1878 0x7022, 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202,
1879 0x7012, 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001,
1880 0x2b60, 0x1078, 0x4a1c, 0x0078, 0x4927, 0x1078, 0x49f2, 0x00c0,
1881 0x4925, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084,
1882 0x4600, 0x8004, 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094,
1883 0x00c0, 0x4936, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e,
1884 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f,
1885 0x0d7f, 0x7e20, 0xb284, 0x0100, 0x00c0, 0x494f, 0x7e24, 0xa6b5,
1886 0x000c, 0x681c, 0xd0ac, 0x00c0, 0x495a, 0xc685, 0x7003, 0x0000,
1887 0x7007, 0x0004, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f,
1888 0xa7b8, 0x46f2, 0x273c, 0x87fb, 0x00c0, 0x4970, 0x0048, 0x496a,
1889 0x1078, 0x29b2, 0x689c, 0xa065, 0x0040, 0x4974, 0x0078, 0x495d,
1890 0x1078, 0x49f2, 0x00c0, 0x4970, 0x127f, 0x2000, 0x007c, 0x127e,
1891 0x007e, 0x017e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e,
1892 0x2090, 0x007f, 0x7e20, 0xb284, 0x0100, 0x00c0, 0x4988, 0x7e24,
1893 0x0d7f, 0x037f, 0x047f, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040,
1894 0x4996, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, 0x2049, 0x4977,
1895 0x6828, 0xa055, 0x0d7e, 0x0040, 0x49ee, 0x2d70, 0x2e60, 0x7004,
1896 0xa0bc, 0x000f, 0xa7b8, 0x46f2, 0x273c, 0x87fb, 0x00c0, 0x49b3,
1897 0x0048, 0x49ac, 0x1078, 0x29b2, 0x709c, 0xa075, 0x2060, 0x0040,
1898 0x49ee, 0x0078, 0x499f, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c,
1899 0xa31b, 0x0048, 0x49cc, 0x8a51, 0x00c0, 0x49c0, 0x1078, 0x29b2,
1900 0x8738, 0x2704, 0xa005, 0x00c0, 0x49b4, 0x709c, 0xa075, 0x2060,
1901 0x0040, 0x49ee, 0x0078, 0x499f, 0x8422, 0x8420, 0x831a, 0xa399,
1902 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8,
1903 0x49db, 0x1078, 0x29b2, 0xb284, 0x0100, 0x0040, 0x49e9, 0x2001,
1904 0x4f04, 0x2004, 0xd0ec, 0x00c0, 0x49e9, 0x2071, 0x0050, 0x0078,
1905 0x49eb, 0x2071, 0x0020, 0x0d7f, 0x0078, 0x48fc, 0x0d7f, 0x127f,
1906 0x2000, 0x007c, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040,
1907 0x49fb, 0xa006, 0x007c, 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0,
1908 0x4a02, 0x007c, 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e,
1909 0x7808, 0x7012, 0x780c, 0x7016, 0x6004, 0xd09c, 0x0040, 0x4a14,
1910 0x7810, 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010,
1911 0xc085, 0x7006, 0x2079, 0x4f00, 0x8738, 0x8a51, 0x0040, 0x4a40,
1912 0x2704, 0xa005, 0x00c0, 0x4a32, 0x609c, 0xa005, 0x0040, 0x4a41,
1913 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x46f2, 0x203c, 0x87fb,
1914 0x1040, 0x29b2, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040,
1915 0x4a3c, 0xa006, 0x0078, 0x4a41, 0xa084, 0x0003, 0xa086, 0x0003,
1916 0x007c, 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70d4,
1917 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184,
1918 0x0003, 0x00c0, 0x4a59, 0x6828, 0xa005, 0x0040, 0x4a69, 0x0078,
1919 0x4602, 0x7108, 0xd1fc, 0x0040, 0x4a61, 0x1078, 0x47ed, 0x0078,
1920 0x4a4e, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x4a63, 0x1078,
1921 0x47ed, 0x7008, 0xa086, 0x0008, 0x00c0, 0x4a4e, 0x7000, 0xa005,
1922 0x00c0, 0x4a4e, 0x7003, 0x0000, 0x2049, 0x0000, 0x007e, 0x7804,
1923 0xd0cc, 0x0040, 0x4a7d, 0x1078, 0x4acc, 0x007f, 0x127f, 0x2000,
1924 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70d4,
1925 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x4a81, 0xad80,
1926 0x0011, 0x20a0, 0xb284, 0x0100, 0x0040, 0x4aa4, 0x2001, 0x4f04,
1927 0x2004, 0xd0ec, 0x0040, 0x4aa0, 0x2099, 0x0031, 0x0078, 0x4aa6,
1928 0x2099, 0x0032, 0x0078, 0x4aa6, 0x2099, 0x0031, 0x700c, 0xa084,
1929 0x03ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001,
1930 0x0040, 0x4ab5, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff,
1931 0x0040, 0x4ac1, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
1932 0x4abc, 0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f,
1933 0x147f, 0x127f, 0x2000, 0x007c, 0x6814, 0xd0fc, 0x0040, 0x4b11,
1934 0x7000, 0xd084, 0x0040, 0x4b11, 0x7e24, 0xa6b5, 0x0004, 0x7007,
1935 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4ad9, 0x7118, 0x017e,
1936 0x711c, 0x017e, 0x7120, 0x017e, 0x7124, 0x017e, 0xa00e, 0x711a,
1937 0x701f, 0x3fff, 0x7122, 0x7126, 0x7013, 0x0004, 0x7116, 0x7602,
1938 0x7007, 0x0001, 0x2001, 0xffff, 0x2009, 0x0031, 0x200a, 0x200a,
1939 0x7108, 0x7008, 0xa106, 0x00c0, 0x4af8, 0xd1fc, 0x0040, 0x4af8,
1940 0x027f, 0x7226, 0x027f, 0x7222, 0x027f, 0x721e, 0x027f, 0x721a,
1941 0x7007, 0x0002, 0x7008, 0xa086, 0x0008, 0x0040, 0x4b11, 0x0078,
1942 0x4830, 0x7007, 0x0004, 0x7003, 0x0000, 0x007c, 0x2091, 0x8000,
1943 0x2091, 0x6000, 0x78ac, 0xa005, 0x00c0, 0x4b2d, 0x7974, 0x70d0,
1944 0xa106, 0x00c0, 0x4b2d, 0x781c, 0xa005, 0x0040, 0x4b2d, 0x781f,
1945 0x0000, 0x0068, 0x4b2d, 0x2091, 0x4080, 0x7830, 0x8001, 0x7832,
1946 0x00c0, 0x4bb5, 0x7834, 0x7832, 0x7810, 0xd0ec, 0x00c0, 0x4bae,
1947 0x2061, 0x74c0, 0x2069, 0x4f80, 0xc7fd, 0x68d0, 0xa005, 0x0040,
1948 0x4b47, 0x8001, 0x68d2, 0x00c0, 0x4b47, 0x1078, 0x4d83, 0x6800,
1949 0xa084, 0x000f, 0x0040, 0x4b5c, 0xa086, 0x0001, 0x0040, 0x4b5c,
1950 0x6844, 0xa00d, 0x0040, 0x4b5c, 0x2104, 0xa005, 0x0040, 0x4b5c,
1951 0x8001, 0x200a, 0x0040, 0x4cf6, 0x6814, 0xa005, 0x0040, 0x4b81,
1952 0x8001, 0x6816, 0x00c0, 0x4b81, 0x68a7, 0x0001, 0x0f7e, 0xd7fc,
1953 0x00c0, 0x4b76, 0x7810, 0xd0ec, 0x0040, 0x4b72, 0x2079, 0x0100,
1954 0x0078, 0x4b78, 0x2079, 0x0200, 0x0078, 0x4b78, 0x2079, 0x0100,
1955 0x1078, 0x43d3, 0x0f7f, 0x6864, 0xa005, 0x0040, 0x4b81, 0x1078,
1956 0x266f, 0x6880, 0xa005, 0x0040, 0x4b8e, 0x8001, 0x6882, 0x00c0,
1957 0x4b8e, 0x6867, 0x0000, 0x68d4, 0xc0dd, 0x68d6, 0x68d4, 0xd0fc,
1958 0x0040, 0x4bab, 0xc0fc, 0x68d6, 0x20a9, 0x0200, 0x6034, 0xa005,
1959 0x0040, 0x4ba7, 0x8001, 0x6036, 0x68d4, 0xc0fd, 0x68d6, 0x00c0,
1960 0x4ba7, 0x6010, 0xa005, 0x0040, 0x4ba7, 0x1078, 0x266f, 0xace0,
1961 0x0010, 0x00f0, 0x4b96, 0xd7fc, 0x0040, 0x4bb5, 0x2061, 0x54c0,
1962 0x2069, 0x4f40, 0xc7fc, 0x0078, 0x4b3d, 0x1078, 0x4bf1, 0x7838,
1963 0x8001, 0x783a, 0x00c0, 0x4bd7, 0x783c, 0x783a, 0x2061, 0x54c0,
1964 0x2069, 0x4f40, 0xc7fc, 0x680c, 0xa005, 0x0040, 0x4bc9, 0x1078,
1965 0x4c5b, 0xd7fc, 0x00c0, 0x4bd7, 0x7810, 0xd0ec, 0x00c0, 0x4bd7,
1966 0x2061, 0x74c0, 0x2069, 0x4f80, 0xc7fd, 0x0078, 0x4bc3, 0x7814,
1967 0xd0e4, 0x00c0, 0x4bdb, 0x7810, 0xd0cc, 0x0040, 0x4bee, 0xd0ac,
1968 0x00c0, 0x4be7, 0xd0a4, 0x0040, 0x4bee, 0xc0ad, 0x7812, 0x2091,
1969 0x8001, 0x0068, 0x4bed, 0x1078, 0x23dc, 0x007c, 0x2091, 0x8001,
1970 0x007c, 0x7840, 0x8001, 0x7842, 0x00c0, 0x4c5a, 0x7844, 0x7842,
1971 0x2069, 0x4f40, 0xc7fc, 0x7810, 0x2079, 0x0200, 0xd0ec, 0x0040,
1972 0x4c03, 0x2079, 0x0100, 0x68d8, 0xa005, 0x0040, 0x4c0f, 0x7de0,
1973 0xa504, 0x00c0, 0x4c0f, 0x68da, 0x68d4, 0xc0bc, 0x68d6, 0x2079,
1974 0x4f00, 0x6810, 0xa005, 0x00c0, 0x4c17, 0x2001, 0x0101, 0x8001,
1975 0x6812, 0xd7fc, 0x0040, 0x4c20, 0xa080, 0x95d0, 0x0078, 0x4c22,
1976 0xa080, 0x94c0, 0x2040, 0x2004, 0xa065, 0x0040, 0x4c4c, 0x6024,
1977 0xa005, 0x0040, 0x4c48, 0x8001, 0x6026, 0x00c0, 0x4c48, 0x6800,
1978 0xa005, 0x0040, 0x4c3b, 0x684c, 0xac06, 0x00c0, 0x4c3b, 0x1078,
1979 0x4cf6, 0x0078, 0x4c4c, 0x6864, 0xa005, 0x0040, 0x4c43, 0x6027,
1980 0x0001, 0x0078, 0x4c48, 0x1078, 0x4ca9, 0x2804, 0x0078, 0x4c24,
1981 0x6000, 0x2c40, 0x0078, 0x4c24, 0xd7fc, 0x00c0, 0x4c5a, 0x7810,
1982 0xd0ec, 0x00c0, 0x4c5a, 0x2069, 0x4f80, 0xc7fd, 0x2079, 0x0100,
1983 0x0078, 0x4c03, 0x007c, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008,
1984 0xd09c, 0x0040, 0x4c95, 0x6024, 0xa005, 0x0040, 0x4c6b, 0x8001,
1985 0x6026, 0x0078, 0x4c93, 0x6008, 0xc09c, 0xd084, 0x00c0, 0x4c73,
1986 0xd0ac, 0x0040, 0x4c8d, 0x600a, 0x6004, 0xa005, 0x0040, 0x4c95,
1987 0x0d7e, 0x0c7e, 0x017e, 0x2068, 0x6010, 0x8001, 0x6012, 0x1078,
1988 0x3e19, 0x2d00, 0x2c68, 0x2060, 0x1078, 0x1ea2, 0x1078, 0x2064,
1989 0x017f, 0x0c7f, 0x0d7f, 0x0078, 0x4c95, 0xc0bd, 0x600a, 0xa18d,
1990 0x0001, 0x0078, 0x4c95, 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0,
1991 0x4c5f, 0xa184, 0x0001, 0x0040, 0x4ca4, 0xa18c, 0xfffe, 0x690e,
1992 0x1078, 0x266f, 0x0078, 0x4ca5, 0x690e, 0x007c, 0x00c0, 0x4ca5,
1993 0x786c, 0x2c00, 0x687e, 0x6714, 0x6f76, 0x6017, 0x0000, 0x602b,
1994 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020,
1995 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x1078,
1996 0x1e2b, 0x6818, 0xa005, 0x0040, 0x4cc7, 0x8001, 0x681a, 0x6808,
1997 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x00d0,
1998 0x4cd3, 0x1078, 0x29b2, 0x6812, 0x00c0, 0x4cd9, 0x7910, 0xc1a5,
1999 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x2073,
2000 0xd7fc, 0x00c0, 0x4ce7, 0x2069, 0x4f40, 0x0078, 0x4ce9, 0x2069,
2001 0x4f80, 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x4cf3,
2002 0x697a, 0x2001, 0x0004, 0x1078, 0x2663, 0x007c, 0x0d7e, 0x694c,
2003 0x2160, 0xd7fc, 0x00c0, 0x4d08, 0x7810, 0xd0ec, 0x0040, 0x4d04,
2004 0x2069, 0x0100, 0x0078, 0x4d0a, 0x2069, 0x0200, 0x0078, 0x4d0a,
2005 0x2069, 0x0100, 0x1078, 0x2926, 0x601b, 0x0006, 0x6858, 0xa084,
2006 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022,
2007 0x602f, 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a,
2008 0x6830, 0xd0b4, 0x0040, 0x4d3c, 0x684b, 0x0004, 0x20a9, 0x0014,
2009 0x6848, 0xd094, 0x0040, 0x4d2e, 0x00f0, 0x4d28, 0x684b, 0x0009,
2010 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, 0x4d38, 0x00f0, 0x4d32,
2011 0x20a9, 0x00fa, 0x00f0, 0x4d3a, 0x681b, 0x0047, 0x0d7f, 0x6867,
2012 0x0007, 0x007c, 0x2079, 0x4f00, 0x1078, 0x4d76, 0x1078, 0x4d5c,
2013 0x1078, 0x4d69, 0x2009, 0x0002, 0x2069, 0x4f80, 0x680f, 0x0000,
2014 0x6813, 0x0000, 0x6817, 0x0000, 0x8109, 0x0040, 0x4d5b, 0x2069,
2015 0x4f40, 0x0078, 0x4d4e, 0x007c, 0x7810, 0xd0ec, 0x0040, 0x4d64,
2016 0x2019, 0x00cc, 0x0078, 0x4d66, 0x2019, 0x007b, 0x7b3a, 0x7b3e,
2017 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x4d71, 0x2019, 0x0040, 0x0078,
2018 0x4d73, 0x2019, 0x0026, 0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4,
2019 0x00c0, 0x4d7e, 0x2019, 0x3f94, 0x0078, 0x4d80, 0x2019, 0x2624,
2020 0x7b32, 0x7b36, 0x007c, 0x6a50, 0xa285, 0x0000, 0x0040, 0x4daf,
2021 0x6954, 0x6bc0, 0xa300, 0x0c7e, 0x2164, 0x6304, 0x83ff, 0x00c0,
2022 0x4d9b, 0x8211, 0x0040, 0x4d9f, 0x8108, 0xa11a, 0x0048, 0x4d8c,
2023 0x69c0, 0x0078, 0x4d8c, 0x68d3, 0x000a, 0x0c7f, 0x007c, 0x6950,
2024 0x6ac0, 0x2264, 0x602b, 0x0000, 0x602f, 0x0000, 0x6008, 0xc0b5,
2025 0x600a, 0x8210, 0x8109, 0x00c0, 0x4da1, 0x6952, 0x0c7f, 0x007c,
2026 0x00e0, 0x4db0, 0x2091, 0x6000, 0x00e0, 0x4db4, 0x2091, 0x6000,
2027 0x70ec, 0xd0dc, 0x00c0, 0x4dc1, 0xd0d4, 0x0040, 0x4dea, 0x0078,
2028 0x4ded, 0x2008, 0x7810, 0xd0ec, 0x0040, 0x4dd4, 0xd1c4, 0x00c0,
2029 0x4e0e, 0x7814, 0xc0c5, 0x7816, 0x7810, 0xc0f5, 0x7812, 0xd0ec,
2030 0x0040, 0x4e0a, 0x0078, 0x4e06, 0xae8e, 0x0100, 0x0040, 0x4de1,
2031 0x7814, 0xc0f5, 0xc0c5, 0x7816, 0xd0d4, 0x00c0, 0x4e0a, 0x0078,
2032 0x4e06, 0x7814, 0xc0fd, 0xc0c5, 0x7816, 0xd0d4, 0x00c0, 0x4e0a,
2033 0x0078, 0x4e06, 0xd0e4, 0x0040, 0x4e0c, 0x00e0, 0x4ded, 0x2091,
2034 0x6000, 0x2009, 0x000c, 0x00e0, 0x4df3, 0x2091, 0x6000, 0x8109,
2035 0x00c0, 0x4df3, 0x70e4, 0xa084, 0x01ff, 0xa086, 0x01ff, 0x00c0,
2036 0x4e04, 0x70ec, 0x0078, 0x4dc1, 0x1078, 0x4e0f, 0x7804, 0xd08c,
2037 0x0040, 0x4e0c, 0x681f, 0x000c, 0x70a0, 0x70a2, 0x007c, 0x7910,
2038 0xd1ec, 0x0040, 0x4e19, 0x7814, 0xc0c4, 0xc1f4, 0x7912, 0x0078,
2039 0x4e2b, 0xae8e, 0x0100, 0x0040, 0x4e25, 0x7814, 0xc0f4, 0xd0fc,
2040 0x00c0, 0x4e2b, 0xc0c4, 0x0078, 0x4e2b, 0x7814, 0xc0fc, 0xd0f4,
2041 0x00c0, 0x4e2b, 0xc0c4, 0x7816, 0x007c, 0x14e3
2042};
2043#ifdef UNIQUE_FW_NAME
2044static unsigned short fw1280ei_length01 = 0x3e2e;
2045#else
2046static unsigned short risc_code_length01 = 0x3e2e;
2047#endif
2048
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index df09820e8916..687dcf2d0154 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -348,6 +348,7 @@
348#include <linux/interrupt.h> 348#include <linux/interrupt.h>
349#include <linux/init.h> 349#include <linux/init.h>
350#include <linux/dma-mapping.h> 350#include <linux/dma-mapping.h>
351#include <linux/firmware.h>
351 352
352#include <asm/io.h> 353#include <asm/io.h>
353#include <asm/irq.h> 354#include <asm/irq.h>
@@ -384,11 +385,7 @@
384#define MEMORY_MAPPED_IO 1 385#define MEMORY_MAPPED_IO 1
385#endif 386#endif
386 387
387#define UNIQUE_FW_NAME
388#include "qla1280.h" 388#include "qla1280.h"
389#include "ql12160_fw.h" /* ISP RISC codes */
390#include "ql1280_fw.h"
391#include "ql1040_fw.h"
392 389
393#ifndef BITS_PER_LONG 390#ifndef BITS_PER_LONG
394#error "BITS_PER_LONG not defined!" 391#error "BITS_PER_LONG not defined!"
@@ -541,10 +538,7 @@ __setup("qla1280=", qla1280_setup);
541struct qla_boards { 538struct qla_boards {
542 unsigned char name[9]; /* Board ID String */ 539 unsigned char name[9]; /* Board ID String */
543 int numPorts; /* Number of SCSI ports */ 540 int numPorts; /* Number of SCSI ports */
544 unsigned short *fwcode; /* pointer to FW array */ 541 char *fwname; /* firmware name */
545 unsigned short *fwlen; /* number of words in array */
546 unsigned short *fwstart; /* start address for F/W */
547 unsigned char *fwver; /* Ptr to F/W version array */
548}; 542};
549 543
550/* NOTE: the last argument in each entry is used to index ql1280_board_tbl */ 544/* NOTE: the last argument in each entry is used to index ql1280_board_tbl */
@@ -567,19 +561,13 @@ MODULE_DEVICE_TABLE(pci, qla1280_pci_tbl);
567 561
568static struct qla_boards ql1280_board_tbl[] = { 562static struct qla_boards ql1280_board_tbl[] = {
569 /* Name , Number of ports, FW details */ 563 /* Name , Number of ports, FW details */
570 {"QLA12160", 2, &fw12160i_code01[0], &fw12160i_length01, 564 {"QLA12160", 2, "qlogic/12160.bin"},
571 &fw12160i_addr01, &fw12160i_version_str[0]}, 565 {"QLA1040", 1, "qlogic/1040.bin"},
572 {"QLA1040", 1, &risc_code01[0], &risc_code_length01, 566 {"QLA1080", 1, "qlogic/1280.bin"},
573 &risc_code_addr01, &firmware_version[0]}, 567 {"QLA1240", 2, "qlogic/1280.bin"},
574 {"QLA1080", 1, &fw1280ei_code01[0], &fw1280ei_length01, 568 {"QLA1280", 2, "qlogic/1280.bin"},
575 &fw1280ei_addr01, &fw1280ei_version_str[0]}, 569 {"QLA10160", 1, "qlogic/12160.bin"},
576 {"QLA1240", 2, &fw1280ei_code01[0], &fw1280ei_length01, 570 {" ", 0, " "},
577 &fw1280ei_addr01, &fw1280ei_version_str[0]},
578 {"QLA1280", 2, &fw1280ei_code01[0], &fw1280ei_length01,
579 &fw1280ei_addr01, &fw1280ei_version_str[0]},
580 {"QLA10160", 1, &fw12160i_code01[0], &fw12160i_length01,
581 &fw12160i_addr01, &fw12160i_version_str[0]},
582 {" ", 0}
583}; 571};
584 572
585static int qla1280_verbose = 1; 573static int qla1280_verbose = 1;
@@ -704,7 +692,7 @@ qla1280_info(struct Scsi_Host *host)
704 sprintf (bp, 692 sprintf (bp,
705 "QLogic %s PCI to SCSI Host Adapter\n" 693 "QLogic %s PCI to SCSI Host Adapter\n"
706 " Firmware version: %2d.%02d.%02d, Driver version %s", 694 " Firmware version: %2d.%02d.%02d, Driver version %s",
707 &bdp->name[0], bdp->fwver[0], bdp->fwver[1], bdp->fwver[2], 695 &bdp->name[0], ha->fwver1, ha->fwver2, ha->fwver3,
708 QLA1280_VERSION); 696 QLA1280_VERSION);
709 return bp; 697 return bp;
710} 698}
@@ -1648,36 +1636,60 @@ qla1280_chip_diag(struct scsi_qla_host *ha)
1648static int 1636static int
1649qla1280_load_firmware_pio(struct scsi_qla_host *ha) 1637qla1280_load_firmware_pio(struct scsi_qla_host *ha)
1650{ 1638{
1651 uint16_t risc_address, *risc_code_address, risc_code_size; 1639 const struct firmware *fw;
1640 const __le16 *fw_data;
1641 uint16_t risc_address, risc_code_size;
1652 uint16_t mb[MAILBOX_REGISTER_COUNT], i; 1642 uint16_t mb[MAILBOX_REGISTER_COUNT], i;
1653 int err; 1643 int err;
1654 1644
1645 err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname,
1646 &ha->pdev->dev);
1647 if (err) {
1648 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
1649 ql1280_board_tbl[ha->devnum].fwname, err);
1650 return err;
1651 }
1652 if ((fw->size % 2) || (fw->size < 6)) {
1653 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
1654 fw->size, ql1280_board_tbl[ha->devnum].fwname);
1655 err = -EINVAL;
1656 goto out;
1657 }
1658 ha->fwver1 = fw->data[0];
1659 ha->fwver2 = fw->data[1];
1660 ha->fwver3 = fw->data[2];
1661 fw_data = (const __le16 *)&fw->data[0];
1662 ha->fwstart = __le16_to_cpu(fw_data[2]);
1663
1655 /* Load RISC code. */ 1664 /* Load RISC code. */
1656 risc_address = *ql1280_board_tbl[ha->devnum].fwstart; 1665 risc_address = ha->fwstart;
1657 risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; 1666 fw_data = (const __le16 *)&fw->data[4];
1658 risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; 1667 risc_code_size = (fw->size - 6) / 2;
1659 1668
1660 for (i = 0; i < risc_code_size; i++) { 1669 for (i = 0; i < risc_code_size; i++) {
1661 mb[0] = MBC_WRITE_RAM_WORD; 1670 mb[0] = MBC_WRITE_RAM_WORD;
1662 mb[1] = risc_address + i; 1671 mb[1] = risc_address + i;
1663 mb[2] = risc_code_address[i]; 1672 mb[2] = __le16_to_cpu(fw_data[i]);
1664 1673
1665 err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); 1674 err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb);
1666 if (err) { 1675 if (err) {
1667 printk(KERN_ERR "scsi(%li): Failed to load firmware\n", 1676 printk(KERN_ERR "scsi(%li): Failed to load firmware\n",
1668 ha->host_no); 1677 ha->host_no);
1669 return err; 1678 goto out;
1670 } 1679 }
1671 } 1680 }
1672 1681out:
1673 return 0; 1682 release_firmware(fw);
1683 return err;
1674} 1684}
1675 1685
1676#define DUMP_IT_BACK 0 /* for debug of RISC loading */ 1686#define DUMP_IT_BACK 0 /* for debug of RISC loading */
1677static int 1687static int
1678qla1280_load_firmware_dma(struct scsi_qla_host *ha) 1688qla1280_load_firmware_dma(struct scsi_qla_host *ha)
1679{ 1689{
1680 uint16_t risc_address, *risc_code_address, risc_code_size; 1690 const struct firmware *fw;
1691 const __le16 *fw_data;
1692 uint16_t risc_address, risc_code_size;
1681 uint16_t mb[MAILBOX_REGISTER_COUNT], cnt; 1693 uint16_t mb[MAILBOX_REGISTER_COUNT], cnt;
1682 int err = 0, num, i; 1694 int err = 0, num, i;
1683#if DUMP_IT_BACK 1695#if DUMP_IT_BACK
@@ -1689,10 +1701,29 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
1689 return -ENOMEM; 1701 return -ENOMEM;
1690#endif 1702#endif
1691 1703
1704 err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname,
1705 &ha->pdev->dev);
1706 if (err) {
1707 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
1708 ql1280_board_tbl[ha->devnum].fwname, err);
1709 return err;
1710 }
1711 if ((fw->size % 2) || (fw->size < 6)) {
1712 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
1713 fw->size, ql1280_board_tbl[ha->devnum].fwname);
1714 err = -EINVAL;
1715 goto out;
1716 }
1717 ha->fwver1 = fw->data[0];
1718 ha->fwver2 = fw->data[1];
1719 ha->fwver3 = fw->data[2];
1720 fw_data = (const __le16 *)&fw->data[0];
1721 ha->fwstart = __le16_to_cpu(fw_data[2]);
1722
1692 /* Load RISC code. */ 1723 /* Load RISC code. */
1693 risc_address = *ql1280_board_tbl[ha->devnum].fwstart; 1724 risc_address = ha->fwstart;
1694 risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; 1725 fw_data = (const __le16 *)&fw->data[4];
1695 risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; 1726 risc_code_size = (fw->size - 6) / 2;
1696 1727
1697 dprintk(1, "%s: DMA RISC code (%i) words\n", 1728 dprintk(1, "%s: DMA RISC code (%i) words\n",
1698 __func__, risc_code_size); 1729 __func__, risc_code_size);
@@ -1708,10 +1739,9 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
1708 1739
1709 dprintk(2, "qla1280_setup_chip: loading risc @ =(0x%p)," 1740 dprintk(2, "qla1280_setup_chip: loading risc @ =(0x%p),"
1710 "%d,%d(0x%x)\n", 1741 "%d,%d(0x%x)\n",
1711 risc_code_address, cnt, num, risc_address); 1742 fw_data, cnt, num, risc_address);
1712 for(i = 0; i < cnt; i++) 1743 for(i = 0; i < cnt; i++)
1713 ((__le16 *)ha->request_ring)[i] = 1744 ((__le16 *)ha->request_ring)[i] = fw_data[i];
1714 cpu_to_le16(risc_code_address[i]);
1715 1745
1716 mb[0] = MBC_LOAD_RAM; 1746 mb[0] = MBC_LOAD_RAM;
1717 mb[1] = risc_address; 1747 mb[1] = risc_address;
@@ -1763,7 +1793,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
1763#endif 1793#endif
1764 risc_address += cnt; 1794 risc_address += cnt;
1765 risc_code_size = risc_code_size - cnt; 1795 risc_code_size = risc_code_size - cnt;
1766 risc_code_address = risc_code_address + cnt; 1796 fw_data = fw_data + cnt;
1767 num++; 1797 num++;
1768 } 1798 }
1769 1799
@@ -1771,6 +1801,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
1771#if DUMP_IT_BACK 1801#if DUMP_IT_BACK
1772 pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); 1802 pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf);
1773#endif 1803#endif
1804 release_firmware(fw);
1774 return err; 1805 return err;
1775} 1806}
1776 1807
@@ -1786,7 +1817,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha)
1786 /* Verify checksum of loaded RISC code. */ 1817 /* Verify checksum of loaded RISC code. */
1787 mb[0] = MBC_VERIFY_CHECKSUM; 1818 mb[0] = MBC_VERIFY_CHECKSUM;
1788 /* mb[1] = ql12_risc_code_addr01; */ 1819 /* mb[1] = ql12_risc_code_addr01; */
1789 mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; 1820 mb[1] = ha->fwstart;
1790 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); 1821 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb);
1791 if (err) { 1822 if (err) {
1792 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); 1823 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no);
@@ -1796,7 +1827,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha)
1796 /* Start firmware execution. */ 1827 /* Start firmware execution. */
1797 dprintk(1, "%s: start firmware running.\n", __func__); 1828 dprintk(1, "%s: start firmware running.\n", __func__);
1798 mb[0] = MBC_EXECUTE_FIRMWARE; 1829 mb[0] = MBC_EXECUTE_FIRMWARE;
1799 mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; 1830 mb[1] = ha->fwstart;
1800 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); 1831 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]);
1801 if (err) { 1832 if (err) {
1802 printk(KERN_ERR "scsi(%li): Failed to start firmware\n", 1833 printk(KERN_ERR "scsi(%li): Failed to start firmware\n",
@@ -4244,8 +4275,8 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
4244 ha->devnum = devnum; /* specifies microcode load address */ 4275 ha->devnum = devnum; /* specifies microcode load address */
4245 4276
4246#ifdef QLA_64BIT_PTR 4277#ifdef QLA_64BIT_PTR
4247 if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK)) { 4278 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(64))) {
4248 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) { 4279 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(32))) {
4249 printk(KERN_WARNING "scsi(%li): Unable to set a " 4280 printk(KERN_WARNING "scsi(%li): Unable to set a "
4250 "suitable DMA mask - aborting\n", ha->host_no); 4281 "suitable DMA mask - aborting\n", ha->host_no);
4251 error = -ENODEV; 4282 error = -ENODEV;
@@ -4255,7 +4286,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
4255 dprintk(2, "scsi(%li): 64 Bit PCI Addressing Enabled\n", 4286 dprintk(2, "scsi(%li): 64 Bit PCI Addressing Enabled\n",
4256 ha->host_no); 4287 ha->host_no);
4257#else 4288#else
4258 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) { 4289 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(32))) {
4259 printk(KERN_WARNING "scsi(%li): Unable to set a " 4290 printk(KERN_WARNING "scsi(%li): Unable to set a "
4260 "suitable DMA mask - aborting\n", ha->host_no); 4291 "suitable DMA mask - aborting\n", ha->host_no);
4261 error = -ENODEV; 4292 error = -ENODEV;
@@ -4450,6 +4481,9 @@ module_exit(qla1280_exit);
4450MODULE_AUTHOR("Qlogic & Jes Sorensen"); 4481MODULE_AUTHOR("Qlogic & Jes Sorensen");
4451MODULE_DESCRIPTION("Qlogic ISP SCSI (qla1x80/qla1x160) driver"); 4482MODULE_DESCRIPTION("Qlogic ISP SCSI (qla1x80/qla1x160) driver");
4452MODULE_LICENSE("GPL"); 4483MODULE_LICENSE("GPL");
4484MODULE_FIRMWARE("qlogic/1040.bin");
4485MODULE_FIRMWARE("qlogic/1280.bin");
4486MODULE_FIRMWARE("qlogic/12160.bin");
4453MODULE_VERSION(QLA1280_VERSION); 4487MODULE_VERSION(QLA1280_VERSION);
4454 4488
4455/* 4489/*
diff --git a/drivers/scsi/qla1280.h b/drivers/scsi/qla1280.h
index ff2c363ead26..d7c44b8d2b4f 100644
--- a/drivers/scsi/qla1280.h
+++ b/drivers/scsi/qla1280.h
@@ -1069,6 +1069,12 @@ struct scsi_qla_host {
1069 1069
1070 struct nvram nvram; 1070 struct nvram nvram;
1071 int nvram_valid; 1071 int nvram_valid;
1072
1073 /* Firmware Info */
1074 unsigned short fwstart; /* start address for F/W */
1075 unsigned char fwver1; /* F/W version first char */
1076 unsigned char fwver2; /* F/W version second char */
1077 unsigned char fwver3; /* F/W version third char */
1072}; 1078};
1073 1079
1074#endif /* _QLA1280_H */ 1080#endif /* _QLA1280_H */
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index ee9d40152430..b09993a06576 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -96,7 +96,9 @@ qla2x00_sysfs_read_nvram(struct kobject *kobj,
96 if (!capable(CAP_SYS_ADMIN)) 96 if (!capable(CAP_SYS_ADMIN))
97 return 0; 97 return 0;
98 98
99 /* Read NVRAM data from cache. */ 99 if (IS_NOCACHE_VPD_TYPE(ha))
100 ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_nvram << 2,
101 ha->nvram_size);
100 return memory_read_from_buffer(buf, count, &off, ha->nvram, 102 return memory_read_from_buffer(buf, count, &off, ha->nvram,
101 ha->nvram_size); 103 ha->nvram_size);
102} 104}
@@ -111,7 +113,8 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj,
111 struct qla_hw_data *ha = vha->hw; 113 struct qla_hw_data *ha = vha->hw;
112 uint16_t cnt; 114 uint16_t cnt;
113 115
114 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size) 116 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size ||
117 !ha->isp_ops->write_nvram)
115 return 0; 118 return 0;
116 119
117 /* Checksum NVRAM. */ 120 /* Checksum NVRAM. */
@@ -137,12 +140,21 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj,
137 *iter = chksum; 140 *iter = chksum;
138 } 141 }
139 142
143 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) {
144 qla_printk(KERN_WARNING, ha,
145 "HBA not online, failing NVRAM update.\n");
146 return -EAGAIN;
147 }
148
140 /* Write NVRAM. */ 149 /* Write NVRAM. */
141 ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->nvram_base, count); 150 ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->nvram_base, count);
142 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->nvram, ha->nvram_base, 151 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->nvram, ha->nvram_base,
143 count); 152 count);
144 153
154 /* NVRAM settings take effect immediately. */
145 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 155 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
156 qla2xxx_wake_dpc(vha);
157 qla2x00_wait_for_chip_reset(vha);
146 158
147 return (count); 159 return (count);
148} 160}
@@ -330,6 +342,12 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,
330 if (ha->optrom_state != QLA_SWRITING) 342 if (ha->optrom_state != QLA_SWRITING)
331 break; 343 break;
332 344
345 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) {
346 qla_printk(KERN_WARNING, ha,
347 "HBA not online, failing flash update.\n");
348 return -EAGAIN;
349 }
350
333 DEBUG2(qla_printk(KERN_INFO, ha, 351 DEBUG2(qla_printk(KERN_INFO, ha,
334 "Writing flash region -- 0x%x/0x%x.\n", 352 "Writing flash region -- 0x%x/0x%x.\n",
335 ha->optrom_region_start, ha->optrom_region_size)); 353 ha->optrom_region_start, ha->optrom_region_size));
@@ -364,7 +382,9 @@ qla2x00_sysfs_read_vpd(struct kobject *kobj,
364 if (!capable(CAP_SYS_ADMIN)) 382 if (!capable(CAP_SYS_ADMIN))
365 return 0; 383 return 0;
366 384
367 /* Read NVRAM data from cache. */ 385 if (IS_NOCACHE_VPD_TYPE(ha))
386 ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_vpd << 2,
387 ha->vpd_size);
368 return memory_read_from_buffer(buf, count, &off, ha->vpd, ha->vpd_size); 388 return memory_read_from_buffer(buf, count, &off, ha->vpd, ha->vpd_size);
369} 389}
370 390
@@ -376,14 +396,35 @@ qla2x00_sysfs_write_vpd(struct kobject *kobj,
376 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 396 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj,
377 struct device, kobj))); 397 struct device, kobj)));
378 struct qla_hw_data *ha = vha->hw; 398 struct qla_hw_data *ha = vha->hw;
399 uint8_t *tmp_data;
379 400
380 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size) 401 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size ||
402 !ha->isp_ops->write_nvram)
381 return 0; 403 return 0;
382 404
405 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) {
406 qla_printk(KERN_WARNING, ha,
407 "HBA not online, failing VPD update.\n");
408 return -EAGAIN;
409 }
410
383 /* Write NVRAM. */ 411 /* Write NVRAM. */
384 ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->vpd_base, count); 412 ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->vpd_base, count);
385 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, ha->vpd_base, count); 413 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, ha->vpd_base, count);
386 414
415 /* Update flash version information for 4Gb & above. */
416 if (!IS_FWI2_CAPABLE(ha))
417 goto done;
418
419 tmp_data = vmalloc(256);
420 if (!tmp_data) {
421 qla_printk(KERN_WARNING, ha,
422 "Unable to allocate memory for VPD information update.\n");
423 goto done;
424 }
425 ha->isp_ops->get_flash_version(vha, tmp_data);
426 vfree(tmp_data);
427done:
387 return count; 428 return count;
388} 429}
389 430
@@ -458,6 +499,199 @@ static struct bin_attribute sysfs_sfp_attr = {
458 .read = qla2x00_sysfs_read_sfp, 499 .read = qla2x00_sysfs_read_sfp,
459}; 500};
460 501
502static ssize_t
503qla2x00_sysfs_write_reset(struct kobject *kobj,
504 struct bin_attribute *bin_attr,
505 char *buf, loff_t off, size_t count)
506{
507 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj,
508 struct device, kobj)));
509 struct qla_hw_data *ha = vha->hw;
510 int type;
511
512 if (off != 0)
513 return 0;
514
515 type = simple_strtol(buf, NULL, 10);
516 switch (type) {
517 case 0x2025c:
518 qla_printk(KERN_INFO, ha,
519 "Issuing ISP reset on (%ld).\n", vha->host_no);
520
521 scsi_block_requests(vha->host);
522 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
523 qla2xxx_wake_dpc(vha);
524 qla2x00_wait_for_chip_reset(vha);
525 scsi_unblock_requests(vha->host);
526 break;
527 case 0x2025d:
528 if (!IS_QLA81XX(ha))
529 break;
530
531 qla_printk(KERN_INFO, ha,
532 "Issuing MPI reset on (%ld).\n", vha->host_no);
533
534 /* Make sure FC side is not in reset */
535 qla2x00_wait_for_hba_online(vha);
536
537 /* Issue MPI reset */
538 scsi_block_requests(vha->host);
539 if (qla81xx_restart_mpi_firmware(vha) != QLA_SUCCESS)
540 qla_printk(KERN_WARNING, ha,
541 "MPI reset failed on (%ld).\n", vha->host_no);
542 scsi_unblock_requests(vha->host);
543 break;
544 }
545 return count;
546}
547
548static struct bin_attribute sysfs_reset_attr = {
549 .attr = {
550 .name = "reset",
551 .mode = S_IWUSR,
552 },
553 .size = 0,
554 .write = qla2x00_sysfs_write_reset,
555};
556
557static ssize_t
558qla2x00_sysfs_write_edc(struct kobject *kobj,
559 struct bin_attribute *bin_attr,
560 char *buf, loff_t off, size_t count)
561{
562 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj,
563 struct device, kobj)));
564 struct qla_hw_data *ha = vha->hw;
565 uint16_t dev, adr, opt, len;
566 int rval;
567
568 ha->edc_data_len = 0;
569
570 if (!capable(CAP_SYS_ADMIN) || off != 0 || count < 8)
571 return 0;
572
573 if (!ha->edc_data) {
574 ha->edc_data = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
575 &ha->edc_data_dma);
576 if (!ha->edc_data) {
577 DEBUG2(qla_printk(KERN_INFO, ha,
578 "Unable to allocate memory for EDC write.\n"));
579 return 0;
580 }
581 }
582
583 dev = le16_to_cpup((void *)&buf[0]);
584 adr = le16_to_cpup((void *)&buf[2]);
585 opt = le16_to_cpup((void *)&buf[4]);
586 len = le16_to_cpup((void *)&buf[6]);
587
588 if (!(opt & BIT_0))
589 if (len == 0 || len > DMA_POOL_SIZE || len > count - 8)
590 return -EINVAL;
591
592 memcpy(ha->edc_data, &buf[8], len);
593
594 rval = qla2x00_write_edc(vha, dev, adr, ha->edc_data_dma,
595 ha->edc_data, len, opt);
596 if (rval != QLA_SUCCESS) {
597 DEBUG2(qla_printk(KERN_INFO, ha,
598 "Unable to write EDC (%x) %02x:%02x:%04x:%02x:%02x.\n",
599 rval, dev, adr, opt, len, *buf));
600 return 0;
601 }
602
603 return count;
604}
605
606static struct bin_attribute sysfs_edc_attr = {
607 .attr = {
608 .name = "edc",
609 .mode = S_IWUSR,
610 },
611 .size = 0,
612 .write = qla2x00_sysfs_write_edc,
613};
614
615static ssize_t
616qla2x00_sysfs_write_edc_status(struct kobject *kobj,
617 struct bin_attribute *bin_attr,
618 char *buf, loff_t off, size_t count)
619{
620 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj,
621 struct device, kobj)));
622 struct qla_hw_data *ha = vha->hw;
623 uint16_t dev, adr, opt, len;
624 int rval;
625
626 ha->edc_data_len = 0;
627
628 if (!capable(CAP_SYS_ADMIN) || off != 0 || count < 8)
629 return 0;
630
631 if (!ha->edc_data) {
632 ha->edc_data = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
633 &ha->edc_data_dma);
634 if (!ha->edc_data) {
635 DEBUG2(qla_printk(KERN_INFO, ha,
636 "Unable to allocate memory for EDC status.\n"));
637 return 0;
638 }
639 }
640
641 dev = le16_to_cpup((void *)&buf[0]);
642 adr = le16_to_cpup((void *)&buf[2]);
643 opt = le16_to_cpup((void *)&buf[4]);
644 len = le16_to_cpup((void *)&buf[6]);
645
646 if (!(opt & BIT_0))
647 if (len == 0 || len > DMA_POOL_SIZE)
648 return -EINVAL;
649
650 memset(ha->edc_data, 0, len);
651 rval = qla2x00_read_edc(vha, dev, adr, ha->edc_data_dma,
652 ha->edc_data, len, opt);
653 if (rval != QLA_SUCCESS) {
654 DEBUG2(qla_printk(KERN_INFO, ha,
655 "Unable to write EDC status (%x) %02x:%02x:%04x:%02x.\n",
656 rval, dev, adr, opt, len));
657 return 0;
658 }
659
660 ha->edc_data_len = len;
661
662 return count;
663}
664
665static ssize_t
666qla2x00_sysfs_read_edc_status(struct kobject *kobj,
667 struct bin_attribute *bin_attr,
668 char *buf, loff_t off, size_t count)
669{
670 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj,
671 struct device, kobj)));
672 struct qla_hw_data *ha = vha->hw;
673
674 if (!capable(CAP_SYS_ADMIN) || off != 0 || count == 0)
675 return 0;
676
677 if (!ha->edc_data || ha->edc_data_len == 0 || ha->edc_data_len > count)
678 return -EINVAL;
679
680 memcpy(buf, ha->edc_data, ha->edc_data_len);
681
682 return ha->edc_data_len;
683}
684
685static struct bin_attribute sysfs_edc_status_attr = {
686 .attr = {
687 .name = "edc_status",
688 .mode = S_IRUSR | S_IWUSR,
689 },
690 .size = 0,
691 .write = qla2x00_sysfs_write_edc_status,
692 .read = qla2x00_sysfs_read_edc_status,
693};
694
461static struct sysfs_entry { 695static struct sysfs_entry {
462 char *name; 696 char *name;
463 struct bin_attribute *attr; 697 struct bin_attribute *attr;
@@ -469,6 +703,9 @@ static struct sysfs_entry {
469 { "optrom_ctl", &sysfs_optrom_ctl_attr, }, 703 { "optrom_ctl", &sysfs_optrom_ctl_attr, },
470 { "vpd", &sysfs_vpd_attr, 1 }, 704 { "vpd", &sysfs_vpd_attr, 1 },
471 { "sfp", &sysfs_sfp_attr, 1 }, 705 { "sfp", &sysfs_sfp_attr, 1 },
706 { "reset", &sysfs_reset_attr, },
707 { "edc", &sysfs_edc_attr, 2 },
708 { "edc_status", &sysfs_edc_status_attr, 2 },
472 { NULL }, 709 { NULL },
473}; 710};
474 711
@@ -482,6 +719,8 @@ qla2x00_alloc_sysfs_attr(scsi_qla_host_t *vha)
482 for (iter = bin_file_entries; iter->name; iter++) { 719 for (iter = bin_file_entries; iter->name; iter++) {
483 if (iter->is4GBp_only && !IS_FWI2_CAPABLE(vha->hw)) 720 if (iter->is4GBp_only && !IS_FWI2_CAPABLE(vha->hw))
484 continue; 721 continue;
722 if (iter->is4GBp_only == 2 && !IS_QLA25XX(vha->hw))
723 continue;
485 724
486 ret = sysfs_create_bin_file(&host->shost_gendev.kobj, 725 ret = sysfs_create_bin_file(&host->shost_gendev.kobj,
487 iter->attr); 726 iter->attr);
@@ -502,6 +741,8 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha)
502 for (iter = bin_file_entries; iter->name; iter++) { 741 for (iter = bin_file_entries; iter->name; iter++) {
503 if (iter->is4GBp_only && !IS_FWI2_CAPABLE(ha)) 742 if (iter->is4GBp_only && !IS_FWI2_CAPABLE(ha))
504 continue; 743 continue;
744 if (iter->is4GBp_only == 2 && !IS_QLA25XX(ha))
745 continue;
505 746
506 sysfs_remove_bin_file(&host->shost_gendev.kobj, 747 sysfs_remove_bin_file(&host->shost_gendev.kobj,
507 iter->attr); 748 iter->attr);
@@ -818,9 +1059,33 @@ qla2x00_mpi_version_show(struct device *dev, struct device_attribute *attr,
818 if (!IS_QLA81XX(ha)) 1059 if (!IS_QLA81XX(ha))
819 return snprintf(buf, PAGE_SIZE, "\n"); 1060 return snprintf(buf, PAGE_SIZE, "\n");
820 1061
821 return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x.%02x (%x)\n", 1062 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n",
822 ha->mpi_version[0], ha->mpi_version[1], ha->mpi_version[2], 1063 ha->mpi_version[0], ha->mpi_version[1], ha->mpi_version[2],
823 ha->mpi_version[3], ha->mpi_capabilities); 1064 ha->mpi_capabilities);
1065}
1066
1067static ssize_t
1068qla2x00_phy_version_show(struct device *dev, struct device_attribute *attr,
1069 char *buf)
1070{
1071 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
1072 struct qla_hw_data *ha = vha->hw;
1073
1074 if (!IS_QLA81XX(ha))
1075 return snprintf(buf, PAGE_SIZE, "\n");
1076
1077 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d\n",
1078 ha->phy_version[0], ha->phy_version[1], ha->phy_version[2]);
1079}
1080
1081static ssize_t
1082qla2x00_flash_block_size_show(struct device *dev,
1083 struct device_attribute *attr, char *buf)
1084{
1085 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
1086 struct qla_hw_data *ha = vha->hw;
1087
1088 return snprintf(buf, PAGE_SIZE, "0x%x\n", ha->fdt_block_size);
824} 1089}
825 1090
826static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); 1091static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL);
@@ -848,6 +1113,9 @@ static DEVICE_ATTR(optrom_fw_version, S_IRUGO, qla2x00_optrom_fw_version_show,
848static DEVICE_ATTR(total_isp_aborts, S_IRUGO, qla2x00_total_isp_aborts_show, 1113static DEVICE_ATTR(total_isp_aborts, S_IRUGO, qla2x00_total_isp_aborts_show,
849 NULL); 1114 NULL);
850static DEVICE_ATTR(mpi_version, S_IRUGO, qla2x00_mpi_version_show, NULL); 1115static DEVICE_ATTR(mpi_version, S_IRUGO, qla2x00_mpi_version_show, NULL);
1116static DEVICE_ATTR(phy_version, S_IRUGO, qla2x00_phy_version_show, NULL);
1117static DEVICE_ATTR(flash_block_size, S_IRUGO, qla2x00_flash_block_size_show,
1118 NULL);
851 1119
852struct device_attribute *qla2x00_host_attrs[] = { 1120struct device_attribute *qla2x00_host_attrs[] = {
853 &dev_attr_driver_version, 1121 &dev_attr_driver_version,
@@ -868,6 +1136,8 @@ struct device_attribute *qla2x00_host_attrs[] = {
868 &dev_attr_optrom_fw_version, 1136 &dev_attr_optrom_fw_version,
869 &dev_attr_total_isp_aborts, 1137 &dev_attr_total_isp_aborts,
870 &dev_attr_mpi_version, 1138 &dev_attr_mpi_version,
1139 &dev_attr_phy_version,
1140 &dev_attr_flash_block_size,
871 NULL, 1141 NULL,
872}; 1142};
873 1143
@@ -1012,7 +1282,10 @@ qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport)
1012 if (!fcport) 1282 if (!fcport)
1013 return; 1283 return;
1014 1284
1015 qla2x00_abort_fcport_cmds(fcport); 1285 if (unlikely(pci_channel_offline(fcport->vha->hw->pdev)))
1286 qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16);
1287 else
1288 qla2x00_abort_fcport_cmds(fcport);
1016 1289
1017 /* 1290 /*
1018 * Transport has effectively 'deleted' the rport, clear 1291 * Transport has effectively 'deleted' the rport, clear
@@ -1032,16 +1305,18 @@ qla2x00_terminate_rport_io(struct fc_rport *rport)
1032 if (!fcport) 1305 if (!fcport)
1033 return; 1306 return;
1034 1307
1308 if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) {
1309 qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16);
1310 return;
1311 }
1035 /* 1312 /*
1036 * At this point all fcport's software-states are cleared. Perform any 1313 * At this point all fcport's software-states are cleared. Perform any
1037 * final cleanup of firmware resources (PCBs and XCBs). 1314 * final cleanup of firmware resources (PCBs and XCBs).
1038 */ 1315 */
1039 if (fcport->loop_id != FC_NO_LOOP_ID) { 1316 if (fcport->loop_id != FC_NO_LOOP_ID)
1040 fcport->vha->hw->isp_ops->fabric_logout(fcport->vha, 1317 fcport->vha->hw->isp_ops->fabric_logout(fcport->vha,
1041 fcport->loop_id, fcport->d_id.b.domain, 1318 fcport->loop_id, fcport->d_id.b.domain,
1042 fcport->d_id.b.area, fcport->d_id.b.al_pa); 1319 fcport->d_id.b.area, fcport->d_id.b.al_pa);
1043 fcport->loop_id = FC_NO_LOOP_ID;
1044 }
1045 1320
1046 qla2x00_abort_fcport_cmds(fcport); 1321 qla2x00_abort_fcport_cmds(fcport);
1047} 1322}
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index e0c5bb54b258..714ee67567e1 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -176,8 +176,7 @@
176/* ISP request and response entry counts (37-65535) */ 176/* ISP request and response entry counts (37-65535) */
177#define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */ 177#define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */
178#define REQUEST_ENTRY_CNT_2200 2048 /* Number of request entries. */ 178#define REQUEST_ENTRY_CNT_2200 2048 /* Number of request entries. */
179#define REQUEST_ENTRY_CNT_2XXX_EXT_MEM 4096 /* Number of request entries. */ 179#define REQUEST_ENTRY_CNT_24XX 2048 /* Number of request entries. */
180#define REQUEST_ENTRY_CNT_24XX 4096 /* Number of request entries. */
181#define RESPONSE_ENTRY_CNT_2100 64 /* Number of response entries.*/ 180#define RESPONSE_ENTRY_CNT_2100 64 /* Number of response entries.*/
182#define RESPONSE_ENTRY_CNT_2300 512 /* Number of response entries.*/ 181#define RESPONSE_ENTRY_CNT_2300 512 /* Number of response entries.*/
183 182
@@ -201,20 +200,7 @@ typedef struct srb {
201/* 200/*
202 * SRB flag definitions 201 * SRB flag definitions
203 */ 202 */
204#define SRB_TIMEOUT BIT_0 /* Command timed out */ 203#define SRB_DMA_VALID BIT_0 /* Command sent to ISP */
205#define SRB_DMA_VALID BIT_1 /* Command sent to ISP */
206#define SRB_WATCHDOG BIT_2 /* Command on watchdog list */
207#define SRB_ABORT_PENDING BIT_3 /* Command abort sent to device */
208
209#define SRB_ABORTED BIT_4 /* Command aborted command already */
210#define SRB_RETRY BIT_5 /* Command needs retrying */
211#define SRB_GOT_SENSE BIT_6 /* Command has sense data */
212#define SRB_FAILOVER BIT_7 /* Command in failover state */
213
214#define SRB_BUSY BIT_8 /* Command is in busy retry state */
215#define SRB_FO_CANCEL BIT_9 /* Command don't need to do failover */
216#define SRB_IOCTL BIT_10 /* IOCTL command. */
217#define SRB_TAPE BIT_11 /* FCP2 (Tape) command. */
218 204
219/* 205/*
220 * ISP I/O Register Set structure definitions. 206 * ISP I/O Register Set structure definitions.
@@ -372,10 +358,10 @@ struct device_reg_2xxx {
372}; 358};
373 359
374struct device_reg_25xxmq { 360struct device_reg_25xxmq {
375 volatile uint32_t req_q_in; 361 uint32_t req_q_in;
376 volatile uint32_t req_q_out; 362 uint32_t req_q_out;
377 volatile uint32_t rsp_q_in; 363 uint32_t rsp_q_in;
378 volatile uint32_t rsp_q_out; 364 uint32_t rsp_q_out;
379}; 365};
380 366
381typedef union { 367typedef union {
@@ -620,6 +606,7 @@ typedef struct {
620#define MBC_GET_TIMEOUT_PARAMS 0x22 /* Get FW timeouts. */ 606#define MBC_GET_TIMEOUT_PARAMS 0x22 /* Get FW timeouts. */
621#define MBC_TRACE_CONTROL 0x27 /* Trace control command. */ 607#define MBC_TRACE_CONTROL 0x27 /* Trace control command. */
622#define MBC_GEN_SYSTEM_ERROR 0x2a /* Generate System Error. */ 608#define MBC_GEN_SYSTEM_ERROR 0x2a /* Generate System Error. */
609#define MBC_WRITE_SFP 0x30 /* Write SFP Data. */
623#define MBC_READ_SFP 0x31 /* Read SFP Data. */ 610#define MBC_READ_SFP 0x31 /* Read SFP Data. */
624#define MBC_SET_TIMEOUT_PARAMS 0x32 /* Set FW timeouts. */ 611#define MBC_SET_TIMEOUT_PARAMS 0x32 /* Set FW timeouts. */
625#define MBC_MID_INITIALIZE_FIRMWARE 0x48 /* MID Initialize firmware. */ 612#define MBC_MID_INITIALIZE_FIRMWARE 0x48 /* MID Initialize firmware. */
@@ -1570,39 +1557,13 @@ typedef struct fc_port {
1570#define FCS_DEVICE_DEAD 2 1557#define FCS_DEVICE_DEAD 2
1571#define FCS_DEVICE_LOST 3 1558#define FCS_DEVICE_LOST 3
1572#define FCS_ONLINE 4 1559#define FCS_ONLINE 4
1573#define FCS_NOT_SUPPORTED 5
1574#define FCS_FAILOVER 6
1575#define FCS_FAILOVER_FAILED 7
1576 1560
1577/* 1561/*
1578 * FC port flags. 1562 * FC port flags.
1579 */ 1563 */
1580#define FCF_FABRIC_DEVICE BIT_0 1564#define FCF_FABRIC_DEVICE BIT_0
1581#define FCF_LOGIN_NEEDED BIT_1 1565#define FCF_LOGIN_NEEDED BIT_1
1582#define FCF_FO_MASKED BIT_2 1566#define FCF_TAPE_PRESENT BIT_2
1583#define FCF_FAILOVER_NEEDED BIT_3
1584#define FCF_RESET_NEEDED BIT_4
1585#define FCF_PERSISTENT_BOUND BIT_5
1586#define FCF_TAPE_PRESENT BIT_6
1587#define FCF_FARP_DONE BIT_7
1588#define FCF_FARP_FAILED BIT_8
1589#define FCF_FARP_REPLY_NEEDED BIT_9
1590#define FCF_AUTH_REQ BIT_10
1591#define FCF_SEND_AUTH_REQ BIT_11
1592#define FCF_RECEIVE_AUTH_REQ BIT_12
1593#define FCF_AUTH_SUCCESS BIT_13
1594#define FCF_RLC_SUPPORT BIT_14
1595#define FCF_CONFIG BIT_15 /* Needed? */
1596#define FCF_RESCAN_NEEDED BIT_16
1597#define FCF_XP_DEVICE BIT_17
1598#define FCF_MSA_DEVICE BIT_18
1599#define FCF_EVA_DEVICE BIT_19
1600#define FCF_MSA_PORT_ACTIVE BIT_20
1601#define FCF_FAILBACK_DISABLE BIT_21
1602#define FCF_FAILOVER_DISABLE BIT_22
1603#define FCF_DSXXX_DEVICE BIT_23
1604#define FCF_AA_EVA_DEVICE BIT_24
1605#define FCF_AA_MSA_DEVICE BIT_25
1606 1567
1607/* No loop ID flag. */ 1568/* No loop ID flag. */
1608#define FC_NO_LOOP_ID 0x1000 1569#define FC_NO_LOOP_ID 0x1000
@@ -2102,9 +2063,6 @@ struct isp_operations {
2102 2063
2103 int (*get_flash_version) (struct scsi_qla_host *, void *); 2064 int (*get_flash_version) (struct scsi_qla_host *, void *);
2104 int (*start_scsi) (srb_t *); 2065 int (*start_scsi) (srb_t *);
2105 void (*wrt_req_reg) (struct qla_hw_data *, uint16_t, uint16_t);
2106 void (*wrt_rsp_reg) (struct qla_hw_data *, uint16_t, uint16_t);
2107 uint16_t (*rd_req_reg) (struct qla_hw_data *, uint16_t);
2108}; 2066};
2109 2067
2110/* MSI-X Support *************************************************************/ 2068/* MSI-X Support *************************************************************/
@@ -2200,6 +2158,8 @@ struct rsp_que {
2200 dma_addr_t dma; 2158 dma_addr_t dma;
2201 response_t *ring; 2159 response_t *ring;
2202 response_t *ring_ptr; 2160 response_t *ring_ptr;
2161 uint32_t __iomem *rsp_q_in; /* FWI2-capable only. */
2162 uint32_t __iomem *rsp_q_out;
2203 uint16_t ring_index; 2163 uint16_t ring_index;
2204 uint16_t out_ptr; 2164 uint16_t out_ptr;
2205 uint16_t length; 2165 uint16_t length;
@@ -2217,6 +2177,8 @@ struct req_que {
2217 dma_addr_t dma; 2177 dma_addr_t dma;
2218 request_t *ring; 2178 request_t *ring;
2219 request_t *ring_ptr; 2179 request_t *ring_ptr;
2180 uint32_t __iomem *req_q_in; /* FWI2-capable only. */
2181 uint32_t __iomem *req_q_out;
2220 uint16_t ring_index; 2182 uint16_t ring_index;
2221 uint16_t in_ptr; 2183 uint16_t in_ptr;
2222 uint16_t cnt; 2184 uint16_t cnt;
@@ -2256,10 +2218,10 @@ struct qla_hw_data {
2256 uint32_t msix_enabled :1; 2218 uint32_t msix_enabled :1;
2257 uint32_t disable_serdes :1; 2219 uint32_t disable_serdes :1;
2258 uint32_t gpsc_supported :1; 2220 uint32_t gpsc_supported :1;
2259 uint32_t vsan_enabled :1;
2260 uint32_t npiv_supported :1; 2221 uint32_t npiv_supported :1;
2261 uint32_t fce_enabled :1; 2222 uint32_t fce_enabled :1;
2262 uint32_t hw_event_marker_found:1; 2223 uint32_t fac_supported :1;
2224 uint32_t chip_reset_done :1;
2263 } flags; 2225 } flags;
2264 2226
2265 /* This spinlock is used to protect "io transactions", you must 2227 /* This spinlock is used to protect "io transactions", you must
@@ -2277,7 +2239,7 @@ struct qla_hw_data {
2277 2239
2278#define MIN_IOBASE_LEN 0x100 2240#define MIN_IOBASE_LEN 0x100
2279/* Multi queue data structs */ 2241/* Multi queue data structs */
2280 device_reg_t *mqiobase; 2242 device_reg_t __iomem *mqiobase;
2281 uint16_t msix_count; 2243 uint16_t msix_count;
2282 uint8_t mqenable; 2244 uint8_t mqenable;
2283 struct req_que **req_q_map; 2245 struct req_que **req_q_map;
@@ -2300,7 +2262,6 @@ struct qla_hw_data {
2300 uint16_t max_loop_id; 2262 uint16_t max_loop_id;
2301 2263
2302 uint16_t fb_rev; 2264 uint16_t fb_rev;
2303 uint16_t max_public_loop_ids;
2304 uint16_t min_external_loopid; /* First external loop Id */ 2265 uint16_t min_external_loopid; /* First external loop Id */
2305 2266
2306#define PORT_SPEED_UNKNOWN 0xFFFF 2267#define PORT_SPEED_UNKNOWN 0xFFFF
@@ -2381,6 +2342,8 @@ struct qla_hw_data {
2381 IS_QLA25XX(ha) || IS_QLA81XX(ha)) 2342 IS_QLA25XX(ha) || IS_QLA81XX(ha))
2382#define IS_NOPOLLING_TYPE(ha) ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && \ 2343#define IS_NOPOLLING_TYPE(ha) ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && \
2383 (ha)->flags.msix_enabled) 2344 (ha)->flags.msix_enabled)
2345#define IS_FAC_REQUIRED(ha) (IS_QLA81XX(ha))
2346#define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha))
2384 2347
2385#define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) 2348#define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA)
2386#define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) 2349#define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2)
@@ -2425,6 +2388,10 @@ struct qla_hw_data {
2425 void *sfp_data; 2388 void *sfp_data;
2426 dma_addr_t sfp_data_dma; 2389 dma_addr_t sfp_data_dma;
2427 2390
2391 uint8_t *edc_data;
2392 dma_addr_t edc_data_dma;
2393 uint16_t edc_data_len;
2394
2428 struct task_struct *dpc_thread; 2395 struct task_struct *dpc_thread;
2429 uint8_t dpc_active; /* DPC routine is active */ 2396 uint8_t dpc_active; /* DPC routine is active */
2430 2397
@@ -2439,6 +2406,8 @@ struct qla_hw_data {
2439 dma_addr_t init_cb_dma; 2406 dma_addr_t init_cb_dma;
2440 init_cb_t *init_cb; 2407 init_cb_t *init_cb;
2441 int init_cb_size; 2408 int init_cb_size;
2409 dma_addr_t ex_init_cb_dma;
2410 struct ex_init_cb_81xx *ex_init_cb;
2442 2411
2443 /* These are used by mailbox operations. */ 2412 /* These are used by mailbox operations. */
2444 volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT]; 2413 volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
@@ -2453,15 +2422,6 @@ struct qla_hw_data {
2453 struct completion mbx_cmd_comp; /* Serialize mbx access */ 2422 struct completion mbx_cmd_comp; /* Serialize mbx access */
2454 struct completion mbx_intr_comp; /* Used for completion notification */ 2423 struct completion mbx_intr_comp; /* Used for completion notification */
2455 2424
2456 uint32_t mbx_flags;
2457#define MBX_IN_PROGRESS BIT_0
2458#define MBX_BUSY BIT_1 /* Got the Access */
2459#define MBX_SLEEPING_ON_SEM BIT_2
2460#define MBX_POLLING_FOR_COMP BIT_3
2461#define MBX_COMPLETED BIT_4
2462#define MBX_TIMEDOUT BIT_5
2463#define MBX_ACCESS_TIMEDOUT BIT_6
2464
2465 /* Basic firmware related information. */ 2425 /* Basic firmware related information. */
2466 uint16_t fw_major_version; 2426 uint16_t fw_major_version;
2467 uint16_t fw_minor_version; 2427 uint16_t fw_minor_version;
@@ -2473,13 +2433,15 @@ struct qla_hw_data {
2473#define RISC_START_ADDRESS_2100 0x1000 2433#define RISC_START_ADDRESS_2100 0x1000
2474#define RISC_START_ADDRESS_2300 0x800 2434#define RISC_START_ADDRESS_2300 0x800
2475#define RISC_START_ADDRESS_2400 0x100000 2435#define RISC_START_ADDRESS_2400 0x100000
2436 uint16_t fw_xcb_count;
2476 2437
2477 uint16_t fw_options[16]; /* slots: 1,2,3,10,11 */ 2438 uint16_t fw_options[16]; /* slots: 1,2,3,10,11 */
2478 uint8_t fw_seriallink_options[4]; 2439 uint8_t fw_seriallink_options[4];
2479 uint16_t fw_seriallink_options24[4]; 2440 uint16_t fw_seriallink_options24[4];
2480 2441
2481 uint8_t mpi_version[4]; 2442 uint8_t mpi_version[3];
2482 uint32_t mpi_capabilities; 2443 uint32_t mpi_capabilities;
2444 uint8_t phy_version[3];
2483 2445
2484 /* Firmware dump information. */ 2446 /* Firmware dump information. */
2485 struct qla2xxx_fw_dump *fw_dump; 2447 struct qla2xxx_fw_dump *fw_dump;
@@ -2545,6 +2507,8 @@ struct qla_hw_data {
2545 uint32_t flt_region_boot; 2507 uint32_t flt_region_boot;
2546 uint32_t flt_region_fw; 2508 uint32_t flt_region_fw;
2547 uint32_t flt_region_vpd_nvram; 2509 uint32_t flt_region_vpd_nvram;
2510 uint32_t flt_region_vpd;
2511 uint32_t flt_region_nvram;
2548 uint32_t flt_region_npiv_conf; 2512 uint32_t flt_region_npiv_conf;
2549 2513
2550 /* Needed for BEACON */ 2514 /* Needed for BEACON */
@@ -2613,36 +2577,19 @@ typedef struct scsi_qla_host {
2613#define LOOP_RESYNC_ACTIVE 5 2577#define LOOP_RESYNC_ACTIVE 5
2614#define LOCAL_LOOP_UPDATE 6 /* Perform a local loop update. */ 2578#define LOCAL_LOOP_UPDATE 6 /* Perform a local loop update. */
2615#define RSCN_UPDATE 7 /* Perform an RSCN update. */ 2579#define RSCN_UPDATE 7 /* Perform an RSCN update. */
2616#define MAILBOX_RETRY 8 2580#define RELOGIN_NEEDED 8
2617#define ISP_RESET_NEEDED 9 /* Initiate a ISP reset. */ 2581#define REGISTER_FC4_NEEDED 9 /* SNS FC4 registration required. */
2618#define FAILOVER_EVENT_NEEDED 10 2582#define ISP_ABORT_RETRY 10 /* ISP aborted. */
2619#define FAILOVER_EVENT 11 2583#define BEACON_BLINK_NEEDED 11
2620#define FAILOVER_NEEDED 12 2584#define REGISTER_FDMI_NEEDED 12
2621#define SCSI_RESTART_NEEDED 13 /* Processes SCSI retry queue. */ 2585#define FCPORT_UPDATE_NEEDED 13
2622#define PORT_RESTART_NEEDED 14 /* Processes Retry queue. */ 2586#define VP_DPC_NEEDED 14 /* wake up for VP dpc handling */
2623#define RESTART_QUEUES_NEEDED 15 /* Restarts the Lun queue. */ 2587#define UNLOADING 15
2624#define ABORT_QUEUES_NEEDED 16 2588#define NPIV_CONFIG_NEEDED 16
2625#define RELOGIN_NEEDED 17
2626#define LOGIN_RETRY_NEEDED 18 /* Initiate required fabric logins. */
2627#define REGISTER_FC4_NEEDED 19 /* SNS FC4 registration required. */
2628#define ISP_ABORT_RETRY 20 /* ISP aborted. */
2629#define FCPORT_RESCAN_NEEDED 21 /* IO descriptor processing needed */
2630#define IODESC_PROCESS_NEEDED 22 /* IO descriptor processing needed */
2631#define IOCTL_ERROR_RECOVERY 23
2632#define LOOP_RESET_NEEDED 24
2633#define BEACON_BLINK_NEEDED 25
2634#define REGISTER_FDMI_NEEDED 26
2635#define FCPORT_UPDATE_NEEDED 27
2636#define VP_DPC_NEEDED 28 /* wake up for VP dpc handling */
2637#define UNLOADING 29
2638#define NPIV_CONFIG_NEEDED 30
2639 2589
2640 uint32_t device_flags; 2590 uint32_t device_flags;
2641#define DFLG_LOCAL_DEVICES BIT_0 2591#define SWITCH_FOUND BIT_0
2642#define DFLG_RETRY_LOCAL_DEVICES BIT_1 2592#define DFLG_NO_CABLE BIT_1
2643#define DFLG_FABRIC_DEVICES BIT_2
2644#define SWITCH_FOUND BIT_3
2645#define DFLG_NO_CABLE BIT_4
2646 2593
2647 srb_t *status_srb; /* Status continuation entry. */ 2594 srb_t *status_srb; /* Status continuation entry. */
2648 2595
@@ -2755,10 +2702,5 @@ typedef struct scsi_qla_host {
2755#include "qla_inline.h" 2702#include "qla_inline.h"
2756 2703
2757#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr) 2704#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr)
2758#define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual)
2759#define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual)
2760#define CMD_SCSI_STATUS(Cmnd) ((Cmnd)->SCp.Status)
2761#define CMD_ACTUAL_SNSLEN(Cmnd) ((Cmnd)->SCp.Message)
2762#define CMD_ENTRY_STATUS(Cmnd) ((Cmnd)->SCp.have_data_in)
2763 2705
2764#endif 2706#endif
diff --git a/drivers/scsi/qla2xxx/qla_dfs.c b/drivers/scsi/qla2xxx/qla_dfs.c
index c66036da7d2b..3a9a6ca42266 100644
--- a/drivers/scsi/qla2xxx/qla_dfs.c
+++ b/drivers/scsi/qla2xxx/qla_dfs.c
@@ -71,7 +71,7 @@ qla2x00_dfs_fce_open(struct inode *inode, struct file *file)
71 71
72 mutex_unlock(&ha->fce_mutex); 72 mutex_unlock(&ha->fce_mutex);
73out: 73out:
74 return single_open(file, qla2x00_dfs_fce_show, ha); 74 return single_open(file, qla2x00_dfs_fce_show, vha);
75} 75}
76 76
77static int 77static int
@@ -145,7 +145,7 @@ create_dir:
145 atomic_inc(&qla2x00_dfs_root_count); 145 atomic_inc(&qla2x00_dfs_root_count);
146 146
147create_nodes: 147create_nodes:
148 ha->dfs_fce = debugfs_create_file("fce", S_IRUSR, ha->dfs_dir, ha, 148 ha->dfs_fce = debugfs_create_file("fce", S_IRUSR, ha->dfs_dir, vha,
149 &dfs_fce_ops); 149 &dfs_fce_ops);
150 if (!ha->dfs_fce) { 150 if (!ha->dfs_fce) {
151 qla_printk(KERN_NOTICE, ha, 151 qla_printk(KERN_NOTICE, ha,
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
index ffff42554087..96ccb9642ba0 100644
--- a/drivers/scsi/qla2xxx/qla_fw.h
+++ b/drivers/scsi/qla2xxx/qla_fw.h
@@ -1403,6 +1403,21 @@ struct access_chip_rsp_84xx {
1403#define MBA_IDC_TIME_EXT 0x8102 1403#define MBA_IDC_TIME_EXT 0x8102
1404 1404
1405#define MBC_IDC_ACK 0x101 1405#define MBC_IDC_ACK 0x101
1406#define MBC_RESTART_MPI_FW 0x3d
1407#define MBC_FLASH_ACCESS_CTRL 0x3e /* Control flash access. */
1408
1409/* Flash access control option field bit definitions */
1410#define FAC_OPT_FORCE_SEMAPHORE BIT_15
1411#define FAC_OPT_REQUESTOR_ID BIT_14
1412#define FAC_OPT_CMD_SUBCODE 0xff
1413
1414/* Flash access control command subcodes */
1415#define FAC_OPT_CMD_WRITE_PROTECT 0x00
1416#define FAC_OPT_CMD_WRITE_ENABLE 0x01
1417#define FAC_OPT_CMD_ERASE_SECTOR 0x02
1418#define FAC_OPT_CMD_LOCK_SEMAPHORE 0x03
1419#define FAC_OPT_CMD_UNLOCK_SEMAPHORE 0x04
1420#define FAC_OPT_CMD_GET_SECTOR_SIZE 0x05
1406 1421
1407struct nvram_81xx { 1422struct nvram_81xx {
1408 /* NVRAM header. */ 1423 /* NVRAM header. */
@@ -1440,7 +1455,17 @@ struct nvram_81xx {
1440 uint16_t reserved_6[24]; 1455 uint16_t reserved_6[24];
1441 1456
1442 /* Offset 128. */ 1457 /* Offset 128. */
1443 uint16_t reserved_7[64]; 1458 uint16_t ex_version;
1459 uint8_t prio_fcf_matching_flags;
1460 uint8_t reserved_6_1[3];
1461 uint16_t pri_fcf_vlan_id;
1462 uint8_t pri_fcf_fabric_name[8];
1463 uint16_t reserved_6_2[7];
1464 uint8_t spma_mac_addr[6];
1465 uint16_t reserved_6_3[14];
1466
1467 /* Offset 192. */
1468 uint16_t reserved_7[32];
1444 1469
1445 /* 1470 /*
1446 * BIT 0 = Enable spinup delay 1471 * BIT 0 = Enable spinup delay
@@ -1664,6 +1689,17 @@ struct mid_init_cb_81xx {
1664 struct mid_conf_entry_24xx entries[MAX_MULTI_ID_FABRIC]; 1689 struct mid_conf_entry_24xx entries[MAX_MULTI_ID_FABRIC];
1665}; 1690};
1666 1691
1692struct ex_init_cb_81xx {
1693 uint16_t ex_version;
1694 uint8_t prio_fcf_matching_flags;
1695 uint8_t reserved_1[3];
1696 uint16_t pri_fcf_vlan_id;
1697 uint8_t pri_fcf_fabric_name[8];
1698 uint16_t reserved_2[7];
1699 uint8_t spma_mac_addr[6];
1700 uint16_t reserved_3[14];
1701};
1702
1667#define FARX_ACCESS_FLASH_CONF_81XX 0x7FFD0000 1703#define FARX_ACCESS_FLASH_CONF_81XX 0x7FFD0000
1668#define FARX_ACCESS_FLASH_DATA_81XX 0x7F800000 1704#define FARX_ACCESS_FLASH_DATA_81XX 0x7F800000
1669 1705
@@ -1672,6 +1708,10 @@ struct mid_init_cb_81xx {
1672#define FA_RISC_CODE_ADDR_81 0xA0000 1708#define FA_RISC_CODE_ADDR_81 0xA0000
1673#define FA_FW_AREA_ADDR_81 0xC0000 1709#define FA_FW_AREA_ADDR_81 0xC0000
1674#define FA_VPD_NVRAM_ADDR_81 0xD0000 1710#define FA_VPD_NVRAM_ADDR_81 0xD0000
1711#define FA_VPD0_ADDR_81 0xD0000
1712#define FA_VPD1_ADDR_81 0xD0400
1713#define FA_NVRAM0_ADDR_81 0xD0080
1714#define FA_NVRAM1_ADDR_81 0xD0480
1675#define FA_FEATURE_ADDR_81 0xD4000 1715#define FA_FEATURE_ADDR_81 0xD4000
1676#define FA_FLASH_DESCR_ADDR_81 0xD8000 1716#define FA_FLASH_DESCR_ADDR_81 0xD8000
1677#define FA_FLASH_LAYOUT_ADDR_81 0xD8400 1717#define FA_FLASH_LAYOUT_ADDR_81 0xD8400
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 6de283f8f111..528913f6bed9 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -73,6 +73,7 @@ extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
73extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum 73extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum
74 fc_host_event_code, u32); 74 fc_host_event_code, u32);
75extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *); 75extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *);
76extern int qla81xx_restart_mpi_firmware(scsi_qla_host_t *);
76 77
77extern void qla2x00_abort_fcport_cmds(fc_port_t *); 78extern void qla2x00_abort_fcport_cmds(fc_port_t *);
78extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, 79extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *,
@@ -82,7 +83,7 @@ extern void qla2x00_relogin(struct scsi_qla_host *);
82/* 83/*
83 * Global Functions in qla_mid.c source file. 84 * Global Functions in qla_mid.c source file.
84 */ 85 */
85extern struct scsi_host_template qla24xx_driver_template; 86extern struct scsi_host_template qla2xxx_driver_template;
86extern struct scsi_transport_template *qla2xxx_transport_vport_template; 87extern struct scsi_transport_template *qla2xxx_transport_vport_template;
87extern void qla2x00_timer(scsi_qla_host_t *); 88extern void qla2x00_timer(scsi_qla_host_t *);
88extern void qla2x00_start_timer(scsi_qla_host_t *, void *, unsigned long); 89extern void qla2x00_start_timer(scsi_qla_host_t *, void *, unsigned long);
@@ -110,6 +111,7 @@ extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *, int);
110extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *); 111extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *);
111 112
112extern int qla2x00_wait_for_hba_online(scsi_qla_host_t *); 113extern int qla2x00_wait_for_hba_online(scsi_qla_host_t *);
114extern int qla2x00_wait_for_chip_reset(scsi_qla_host_t *);
113 115
114extern void qla2xxx_wake_dpc(struct scsi_qla_host *); 116extern void qla2xxx_wake_dpc(struct scsi_qla_host *);
115extern void qla2x00_alert_all_vps(struct rsp_que *, uint16_t *); 117extern void qla2x00_alert_all_vps(struct rsp_que *, uint16_t *);
@@ -144,8 +146,8 @@ extern int
144qla2x00_execute_fw(scsi_qla_host_t *, uint32_t); 146qla2x00_execute_fw(scsi_qla_host_t *, uint32_t);
145 147
146extern void 148extern void
147qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *, 149qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *, uint16_t *, uint16_t *,
148 uint16_t *, uint16_t *, uint16_t *, uint32_t *, uint8_t *, uint32_t *); 150 uint16_t *, uint32_t *, uint8_t *, uint32_t *, uint8_t *);
149 151
150extern int 152extern int
151qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *); 153qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *);
@@ -263,12 +265,29 @@ extern int
263qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t); 265qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t);
264 266
265extern int 267extern int
268qla2x00_read_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t,
269 uint8_t *, uint16_t, uint16_t);
270
271extern int
272qla2x00_write_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t,
273 uint8_t *, uint16_t, uint16_t);
274
275extern int
266qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *); 276qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *);
267 277
268extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); 278extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *);
269 279
270extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *); 280extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *);
271 281
282extern int
283qla81xx_fac_get_sector_size(scsi_qla_host_t *, uint32_t *);
284
285extern int
286qla81xx_fac_do_write_enable(scsi_qla_host_t *, int);
287
288extern int
289qla81xx_fac_erase_sector(scsi_qla_host_t *, uint32_t, uint32_t);
290
272/* 291/*
273 * Global Function Prototypes in qla_isr.c source file. 292 * Global Function Prototypes in qla_isr.c source file.
274 */ 293 */
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 87f9abc71460..bd7dd84c0648 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -20,7 +20,6 @@
20* QLogic ISP2x00 Hardware Support Function Prototypes. 20* QLogic ISP2x00 Hardware Support Function Prototypes.
21*/ 21*/
22static int qla2x00_isp_firmware(scsi_qla_host_t *); 22static int qla2x00_isp_firmware(scsi_qla_host_t *);
23static void qla2x00_resize_request_q(scsi_qla_host_t *);
24static int qla2x00_setup_chip(scsi_qla_host_t *); 23static int qla2x00_setup_chip(scsi_qla_host_t *);
25static int qla2x00_init_rings(scsi_qla_host_t *); 24static int qla2x00_init_rings(scsi_qla_host_t *);
26static int qla2x00_fw_ready(scsi_qla_host_t *); 25static int qla2x00_fw_ready(scsi_qla_host_t *);
@@ -61,8 +60,10 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha)
61 int rval; 60 int rval;
62 struct qla_hw_data *ha = vha->hw; 61 struct qla_hw_data *ha = vha->hw;
63 struct req_que *req = ha->req_q_map[0]; 62 struct req_que *req = ha->req_q_map[0];
63
64 /* Clear adapter flags. */ 64 /* Clear adapter flags. */
65 vha->flags.online = 0; 65 vha->flags.online = 0;
66 ha->flags.chip_reset_done = 0;
66 vha->flags.reset_active = 0; 67 vha->flags.reset_active = 0;
67 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); 68 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
68 atomic_set(&vha->loop_state, LOOP_DOWN); 69 atomic_set(&vha->loop_state, LOOP_DOWN);
@@ -70,7 +71,6 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha)
70 vha->dpc_flags = 0; 71 vha->dpc_flags = 0;
71 vha->flags.management_server_logged_in = 0; 72 vha->flags.management_server_logged_in = 0;
72 vha->marker_needed = 0; 73 vha->marker_needed = 0;
73 ha->mbx_flags = 0;
74 ha->isp_abort_cnt = 0; 74 ha->isp_abort_cnt = 0;
75 ha->beacon_blink_led = 0; 75 ha->beacon_blink_led = 0;
76 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); 76 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
@@ -131,6 +131,7 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha)
131 } 131 }
132 } 132 }
133 rval = qla2x00_init_rings(vha); 133 rval = qla2x00_init_rings(vha);
134 ha->flags.chip_reset_done = 1;
134 135
135 return (rval); 136 return (rval);
136} 137}
@@ -512,7 +513,6 @@ qla2x00_reset_chip(scsi_qla_host_t *vha)
512static inline void 513static inline void
513qla24xx_reset_risc(scsi_qla_host_t *vha) 514qla24xx_reset_risc(scsi_qla_host_t *vha)
514{ 515{
515 int hw_evt = 0;
516 unsigned long flags = 0; 516 unsigned long flags = 0;
517 struct qla_hw_data *ha = vha->hw; 517 struct qla_hw_data *ha = vha->hw;
518 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; 518 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
@@ -542,8 +542,6 @@ qla24xx_reset_risc(scsi_qla_host_t *vha)
542 d2 = (uint32_t) RD_REG_WORD(&reg->mailbox0); 542 d2 = (uint32_t) RD_REG_WORD(&reg->mailbox0);
543 barrier(); 543 barrier();
544 } 544 }
545 if (cnt == 0)
546 hw_evt = 1;
547 545
548 /* Wait for soft-reset to complete. */ 546 /* Wait for soft-reset to complete. */
549 d2 = RD_REG_DWORD(&reg->ctrl_status); 547 d2 = RD_REG_DWORD(&reg->ctrl_status);
@@ -816,7 +814,7 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
816 qla_printk(KERN_INFO, ha, "Allocated (%d KB) for FCE...\n", 814 qla_printk(KERN_INFO, ha, "Allocated (%d KB) for FCE...\n",
817 FCE_SIZE / 1024); 815 FCE_SIZE / 1024);
818 816
819 fce_size = sizeof(struct qla2xxx_fce_chain) + EFT_SIZE; 817 fce_size = sizeof(struct qla2xxx_fce_chain) + FCE_SIZE;
820 ha->flags.fce_enabled = 1; 818 ha->flags.fce_enabled = 1;
821 ha->fce_dma = tc_dma; 819 ha->fce_dma = tc_dma;
822 ha->fce = tc; 820 ha->fce = tc;
@@ -894,62 +892,6 @@ cont_alloc:
894} 892}
895 893
896/** 894/**
897 * qla2x00_resize_request_q() - Resize request queue given available ISP memory.
898 * @ha: HA context
899 *
900 * Returns 0 on success.
901 */
902static void
903qla2x00_resize_request_q(scsi_qla_host_t *vha)
904{
905 int rval;
906 uint16_t fw_iocb_cnt = 0;
907 uint16_t request_q_length = REQUEST_ENTRY_CNT_2XXX_EXT_MEM;
908 dma_addr_t request_dma;
909 request_t *request_ring;
910 struct qla_hw_data *ha = vha->hw;
911 struct req_que *req = ha->req_q_map[0];
912
913 /* Valid only on recent ISPs. */
914 if (IS_QLA2100(ha) || IS_QLA2200(ha))
915 return;
916
917 /* Retrieve IOCB counts available to the firmware. */
918 rval = qla2x00_get_resource_cnts(vha, NULL, NULL, NULL, &fw_iocb_cnt,
919 &ha->max_npiv_vports);
920 if (rval)
921 return;
922 /* No point in continuing if current settings are sufficient. */
923 if (fw_iocb_cnt < 1024)
924 return;
925 if (req->length >= request_q_length)
926 return;
927
928 /* Attempt to claim larger area for request queue. */
929 request_ring = dma_alloc_coherent(&ha->pdev->dev,
930 (request_q_length + 1) * sizeof(request_t), &request_dma,
931 GFP_KERNEL);
932 if (request_ring == NULL)
933 return;
934
935 /* Resize successful, report extensions. */
936 qla_printk(KERN_INFO, ha, "Extended memory detected (%d KB)...\n",
937 (ha->fw_memory_size + 1) / 1024);
938 qla_printk(KERN_INFO, ha, "Resizing request queue depth "
939 "(%d -> %d)...\n", req->length, request_q_length);
940
941 /* Clear old allocations. */
942 dma_free_coherent(&ha->pdev->dev,
943 (req->length + 1) * sizeof(request_t), req->ring,
944 req->dma);
945
946 /* Begin using larger queue. */
947 req->length = request_q_length;
948 req->ring = request_ring;
949 req->dma = request_dma;
950}
951
952/**
953 * qla2x00_setup_chip() - Load and start RISC firmware. 895 * qla2x00_setup_chip() - Load and start RISC firmware.
954 * @ha: HA context 896 * @ha: HA context
955 * 897 *
@@ -963,6 +905,7 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
963 struct qla_hw_data *ha = vha->hw; 905 struct qla_hw_data *ha = vha->hw;
964 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 906 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
965 unsigned long flags; 907 unsigned long flags;
908 uint16_t fw_major_version;
966 909
967 if (!IS_FWI2_CAPABLE(ha) && !IS_QLA2100(ha) && !IS_QLA2200(ha)) { 910 if (!IS_FWI2_CAPABLE(ha) && !IS_QLA2100(ha) && !IS_QLA2200(ha)) {
968 /* Disable SRAM, Instruction RAM and GP RAM parity. */ 911 /* Disable SRAM, Instruction RAM and GP RAM parity. */
@@ -986,13 +929,15 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
986 929
987 rval = qla2x00_execute_fw(vha, srisc_address); 930 rval = qla2x00_execute_fw(vha, srisc_address);
988 /* Retrieve firmware information. */ 931 /* Retrieve firmware information. */
989 if (rval == QLA_SUCCESS && ha->fw_major_version == 0) { 932 if (rval == QLA_SUCCESS) {
933 fw_major_version = ha->fw_major_version;
990 qla2x00_get_fw_version(vha, 934 qla2x00_get_fw_version(vha,
991 &ha->fw_major_version, 935 &ha->fw_major_version,
992 &ha->fw_minor_version, 936 &ha->fw_minor_version,
993 &ha->fw_subminor_version, 937 &ha->fw_subminor_version,
994 &ha->fw_attributes, &ha->fw_memory_size, 938 &ha->fw_attributes, &ha->fw_memory_size,
995 ha->mpi_version, &ha->mpi_capabilities); 939 ha->mpi_version, &ha->mpi_capabilities,
940 ha->phy_version);
996 ha->flags.npiv_supported = 0; 941 ha->flags.npiv_supported = 0;
997 if (IS_QLA2XXX_MIDTYPE(ha) && 942 if (IS_QLA2XXX_MIDTYPE(ha) &&
998 (ha->fw_attributes & BIT_2)) { 943 (ha->fw_attributes & BIT_2)) {
@@ -1003,9 +948,11 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
1003 ha->max_npiv_vports = 948 ha->max_npiv_vports =
1004 MIN_MULTI_ID_FABRIC - 1; 949 MIN_MULTI_ID_FABRIC - 1;
1005 } 950 }
1006 qla2x00_resize_request_q(vha); 951 qla2x00_get_resource_cnts(vha, NULL,
952 &ha->fw_xcb_count, NULL, NULL,
953 &ha->max_npiv_vports);
1007 954
1008 if (ql2xallocfwdump) 955 if (!fw_major_version && ql2xallocfwdump)
1009 qla2x00_alloc_fw_dump(vha); 956 qla2x00_alloc_fw_dump(vha);
1010 } 957 }
1011 } else { 958 } else {
@@ -1028,6 +975,21 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
1028 spin_unlock_irqrestore(&ha->hardware_lock, flags); 975 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1029 } 976 }
1030 977
978 if (rval == QLA_SUCCESS && IS_FAC_REQUIRED(ha)) {
979 uint32_t size;
980
981 rval = qla81xx_fac_get_sector_size(vha, &size);
982 if (rval == QLA_SUCCESS) {
983 ha->flags.fac_supported = 1;
984 ha->fdt_block_size = size << 2;
985 } else {
986 qla_printk(KERN_ERR, ha,
987 "Unsupported FAC firmware (%d.%02d.%02d).\n",
988 ha->fw_major_version, ha->fw_minor_version,
989 ha->fw_subminor_version);
990 }
991 }
992
1031 if (rval) { 993 if (rval) {
1032 DEBUG2_3(printk("scsi(%ld): Setup chip **** FAILED ****.\n", 994 DEBUG2_3(printk("scsi(%ld): Setup chip **** FAILED ****.\n",
1033 vha->host_no)); 995 vha->host_no));
@@ -1314,8 +1276,11 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
1314 mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports); 1276 mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports);
1315 } 1277 }
1316 1278
1317 1279 if (IS_FWI2_CAPABLE(ha)) {
1318 mid_init_cb->options = __constant_cpu_to_le16(BIT_1); 1280 mid_init_cb->options = __constant_cpu_to_le16(BIT_1);
1281 mid_init_cb->init_cb.execution_throttle =
1282 cpu_to_le16(ha->fw_xcb_count);
1283 }
1319 1284
1320 rval = qla2x00_init_firmware(vha, ha->init_cb_size); 1285 rval = qla2x00_init_firmware(vha, ha->init_cb_size);
1321 if (rval) { 1286 if (rval) {
@@ -1989,7 +1954,6 @@ qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags)
1989 fcport->port_type = FCT_UNKNOWN; 1954 fcport->port_type = FCT_UNKNOWN;
1990 fcport->loop_id = FC_NO_LOOP_ID; 1955 fcport->loop_id = FC_NO_LOOP_ID;
1991 atomic_set(&fcport->state, FCS_UNCONFIGURED); 1956 atomic_set(&fcport->state, FCS_UNCONFIGURED);
1992 fcport->flags = FCF_RLC_SUPPORT;
1993 fcport->supported_classes = FC_COS_UNSPECIFIED; 1957 fcport->supported_classes = FC_COS_UNSPECIFIED;
1994 1958
1995 return fcport; 1959 return fcport;
@@ -2171,7 +2135,6 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha)
2171 vha->host_no, fcport->loop_id)); 2135 vha->host_no, fcport->loop_id));
2172 2136
2173 atomic_set(&fcport->state, FCS_DEVICE_LOST); 2137 atomic_set(&fcport->state, FCS_DEVICE_LOST);
2174 fcport->flags &= ~FCF_FARP_DONE;
2175 } 2138 }
2176 } 2139 }
2177 2140
@@ -2228,8 +2191,7 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha)
2228 WWN_SIZE)) 2191 WWN_SIZE))
2229 continue; 2192 continue;
2230 2193
2231 fcport->flags &= ~(FCF_FABRIC_DEVICE | 2194 fcport->flags &= ~FCF_FABRIC_DEVICE;
2232 FCF_PERSISTENT_BOUND);
2233 fcport->loop_id = new_fcport->loop_id; 2195 fcport->loop_id = new_fcport->loop_id;
2234 fcport->port_type = new_fcport->port_type; 2196 fcport->port_type = new_fcport->port_type;
2235 fcport->d_id.b24 = new_fcport->d_id.b24; 2197 fcport->d_id.b24 = new_fcport->d_id.b24;
@@ -2242,7 +2204,6 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha)
2242 2204
2243 if (!found) { 2205 if (!found) {
2244 /* New device, add to fcports list. */ 2206 /* New device, add to fcports list. */
2245 new_fcport->flags &= ~FCF_PERSISTENT_BOUND;
2246 if (vha->vp_idx) { 2207 if (vha->vp_idx) {
2247 new_fcport->vha = vha; 2208 new_fcport->vha = vha;
2248 new_fcport->vp_idx = vha->vp_idx; 2209 new_fcport->vp_idx = vha->vp_idx;
@@ -2275,11 +2236,6 @@ cleanup_allocation:
2275 "rval=%x\n", vha->host_no, rval)); 2236 "rval=%x\n", vha->host_no, rval));
2276 } 2237 }
2277 2238
2278 if (found_devs) {
2279 vha->device_flags |= DFLG_LOCAL_DEVICES;
2280 vha->device_flags &= ~DFLG_RETRY_LOCAL_DEVICES;
2281 }
2282
2283 return (rval); 2239 return (rval);
2284} 2240}
2285 2241
@@ -2765,7 +2721,6 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
2765 fcport->loop_id = FC_NO_LOOP_ID; 2721 fcport->loop_id = FC_NO_LOOP_ID;
2766 fcport->flags |= (FCF_FABRIC_DEVICE | 2722 fcport->flags |= (FCF_FABRIC_DEVICE |
2767 FCF_LOGIN_NEEDED); 2723 FCF_LOGIN_NEEDED);
2768 fcport->flags &= ~FCF_PERSISTENT_BOUND;
2769 break; 2724 break;
2770 } 2725 }
2771 2726
@@ -2808,9 +2763,6 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
2808 kfree(swl); 2763 kfree(swl);
2809 kfree(new_fcport); 2764 kfree(new_fcport);
2810 2765
2811 if (!list_empty(new_fcports))
2812 vha->device_flags |= DFLG_FABRIC_DEVICES;
2813
2814 return (rval); 2766 return (rval);
2815} 2767}
2816 2768
@@ -2993,7 +2945,6 @@ qla2x00_device_resync(scsi_qla_host_t *vha)
2993 0, 0); 2945 0, 0);
2994 } 2946 }
2995 } 2947 }
2996 fcport->flags &= ~FCF_FARP_DONE;
2997 } 2948 }
2998 } 2949 }
2999 return (rval); 2950 return (rval);
@@ -3302,6 +3253,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
3302 3253
3303 if (vha->flags.online) { 3254 if (vha->flags.online) {
3304 vha->flags.online = 0; 3255 vha->flags.online = 0;
3256 ha->flags.chip_reset_done = 0;
3305 clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 3257 clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
3306 ha->qla_stats.total_isp_aborts++; 3258 ha->qla_stats.total_isp_aborts++;
3307 3259
@@ -3451,6 +3403,7 @@ qla2x00_restart_isp(scsi_qla_host_t *vha)
3451 3403
3452 if (!status && !(status = qla2x00_init_rings(vha))) { 3404 if (!status && !(status = qla2x00_init_rings(vha))) {
3453 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); 3405 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
3406 ha->flags.chip_reset_done = 1;
3454 /* Initialize the queues in use */ 3407 /* Initialize the queues in use */
3455 qla25xx_init_queues(ha); 3408 qla25xx_init_queues(ha);
3456 3409
@@ -4338,23 +4291,17 @@ qla81xx_nvram_config(scsi_qla_host_t *vha)
4338 4291
4339 /* Determine NVRAM starting address. */ 4292 /* Determine NVRAM starting address. */
4340 ha->nvram_size = sizeof(struct nvram_81xx); 4293 ha->nvram_size = sizeof(struct nvram_81xx);
4341 ha->nvram_base = FA_NVRAM_FUNC0_ADDR;
4342 ha->vpd_size = FA_NVRAM_VPD_SIZE; 4294 ha->vpd_size = FA_NVRAM_VPD_SIZE;
4343 ha->vpd_base = FA_NVRAM_VPD0_ADDR;
4344 if (PCI_FUNC(ha->pdev->devfn) & 1) {
4345 ha->nvram_base = FA_NVRAM_FUNC1_ADDR;
4346 ha->vpd_base = FA_NVRAM_VPD1_ADDR;
4347 }
4348 4295
4349 /* Get VPD data into cache */ 4296 /* Get VPD data into cache */
4350 ha->vpd = ha->nvram + VPD_OFFSET; 4297 ha->vpd = ha->nvram + VPD_OFFSET;
4351 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, 4298 ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_vpd << 2,
4352 ha->nvram_base - FA_NVRAM_FUNC0_ADDR, FA_NVRAM_VPD_SIZE * 4); 4299 ha->vpd_size);
4353 4300
4354 /* Get NVRAM data into cache and calculate checksum. */ 4301 /* Get NVRAM data into cache and calculate checksum. */
4355 dptr = (uint32_t *)nv; 4302 ha->isp_ops->read_optrom(vha, ha->nvram, ha->flt_region_nvram << 2,
4356 ha->isp_ops->read_nvram(vha, (uint8_t *)dptr, ha->nvram_base,
4357 ha->nvram_size); 4303 ha->nvram_size);
4304 dptr = (uint32_t *)nv;
4358 for (cnt = 0, chksum = 0; cnt < ha->nvram_size >> 2; cnt++) 4305 for (cnt = 0, chksum = 0; cnt < ha->nvram_size >> 2; cnt++)
4359 chksum += le32_to_cpu(*dptr++); 4306 chksum += le32_to_cpu(*dptr++);
4360 4307
@@ -4452,6 +4399,9 @@ qla81xx_nvram_config(scsi_qla_host_t *vha)
4452 icb->enode_mac[5] = 0x06 + PCI_FUNC(ha->pdev->devfn); 4399 icb->enode_mac[5] = 0x06 + PCI_FUNC(ha->pdev->devfn);
4453 } 4400 }
4454 4401
4402 /* Use extended-initialization control block. */
4403 memcpy(ha->ex_init_cb, &nv->ex_version, sizeof(*ha->ex_init_cb));
4404
4455 /* 4405 /*
4456 * Setup driver NVRAM options. 4406 * Setup driver NVRAM options.
4457 */ 4407 */
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 2258152b1f41..a8abbb95730d 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -776,7 +776,7 @@ qla24xx_start_scsi(srb_t *sp)
776 776
777 req_cnt = qla24xx_calc_iocbs(tot_dsds); 777 req_cnt = qla24xx_calc_iocbs(tot_dsds);
778 if (req->cnt < (req_cnt + 2)) { 778 if (req->cnt < (req_cnt + 2)) {
779 cnt = ha->isp_ops->rd_req_reg(ha, req->id); 779 cnt = RD_REG_DWORD_RELAXED(req->req_q_out);
780 780
781 if (req->ring_index < cnt) 781 if (req->ring_index < cnt)
782 req->cnt = cnt - req->ring_index; 782 req->cnt = cnt - req->ring_index;
@@ -836,7 +836,8 @@ qla24xx_start_scsi(srb_t *sp)
836 sp->flags |= SRB_DMA_VALID; 836 sp->flags |= SRB_DMA_VALID;
837 837
838 /* Set chip new ring index. */ 838 /* Set chip new ring index. */
839 ha->isp_ops->wrt_req_reg(ha, req->id, req->ring_index); 839 WRT_REG_DWORD(req->req_q_in, req->ring_index);
840 RD_REG_DWORD_RELAXED(&ha->iobase->isp24.hccr);
840 841
841 /* Manage unprocessed RIO/ZIO commands in response queue. */ 842 /* Manage unprocessed RIO/ZIO commands in response queue. */
842 if (vha->flags.process_response_queue && 843 if (vha->flags.process_response_queue &&
@@ -854,35 +855,3 @@ queuing_error:
854 855
855 return QLA_FUNCTION_FAILED; 856 return QLA_FUNCTION_FAILED;
856} 857}
857
858uint16_t
859qla24xx_rd_req_reg(struct qla_hw_data *ha, uint16_t id)
860{
861 device_reg_t __iomem *reg = (void *) ha->iobase;
862 return RD_REG_DWORD_RELAXED(&reg->isp24.req_q_out);
863}
864
865uint16_t
866qla25xx_rd_req_reg(struct qla_hw_data *ha, uint16_t id)
867{
868 device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id;
869 return RD_REG_DWORD_RELAXED(&reg->isp25mq.req_q_out);
870}
871
872void
873qla24xx_wrt_req_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index)
874{
875 device_reg_t __iomem *reg = (void *) ha->iobase;
876 WRT_REG_DWORD(&reg->isp24.req_q_in, index);
877 RD_REG_DWORD_RELAXED(&reg->isp24.req_q_in);
878}
879
880void
881qla25xx_wrt_req_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index)
882{
883 device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id;
884 struct device_reg_2xxx __iomem *ioreg = &ha->iobase->isp;
885 WRT_REG_DWORD(&reg->isp25mq.req_q_in, index);
886 RD_REG_DWORD(&ioreg->hccr); /* PCI posting */
887}
888
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index f250e5b7897c..d04981848e56 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -852,9 +852,6 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha,
852 /* Free outstanding command slot. */ 852 /* Free outstanding command slot. */
853 req->outstanding_cmds[index] = NULL; 853 req->outstanding_cmds[index] = NULL;
854 854
855 CMD_COMPL_STATUS(sp->cmd) = 0L;
856 CMD_SCSI_STATUS(sp->cmd) = 0L;
857
858 /* Save ISP completion status */ 855 /* Save ISP completion status */
859 sp->cmd->result = DID_OK << 16; 856 sp->cmd->result = DID_OK << 16;
860 857
@@ -955,7 +952,6 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t sense_len)
955 if (sense_len >= SCSI_SENSE_BUFFERSIZE) 952 if (sense_len >= SCSI_SENSE_BUFFERSIZE)
956 sense_len = SCSI_SENSE_BUFFERSIZE; 953 sense_len = SCSI_SENSE_BUFFERSIZE;
957 954
958 CMD_ACTUAL_SNSLEN(cp) = sense_len;
959 sp->request_sense_length = sense_len; 955 sp->request_sense_length = sense_len;
960 sp->request_sense_ptr = cp->sense_buffer; 956 sp->request_sense_ptr = cp->sense_buffer;
961 if (sp->request_sense_length > 32) 957 if (sp->request_sense_length > 32)
@@ -973,8 +969,7 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t sense_len)
973 cp->device->channel, cp->device->id, cp->device->lun, cp, 969 cp->device->channel, cp->device->id, cp->device->lun, cp,
974 cp->serial_number)); 970 cp->serial_number));
975 if (sense_len) 971 if (sense_len)
976 DEBUG5(qla2x00_dump_buffer(cp->sense_buffer, 972 DEBUG5(qla2x00_dump_buffer(cp->sense_buffer, sense_len));
977 CMD_ACTUAL_SNSLEN(cp)));
978} 973}
979 974
980/** 975/**
@@ -1043,9 +1038,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
1043 } 1038 }
1044 1039
1045 lscsi_status = scsi_status & STATUS_MASK; 1040 lscsi_status = scsi_status & STATUS_MASK;
1046 CMD_ENTRY_STATUS(cp) = sts->entry_status;
1047 CMD_COMPL_STATUS(cp) = comp_status;
1048 CMD_SCSI_STATUS(cp) = scsi_status;
1049 1041
1050 fcport = sp->fcport; 1042 fcport = sp->fcport;
1051 1043
@@ -1104,7 +1096,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
1104 if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) { 1096 if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) {
1105 resid = resid_len; 1097 resid = resid_len;
1106 scsi_set_resid(cp, resid); 1098 scsi_set_resid(cp, resid);
1107 CMD_RESID_LEN(cp) = resid;
1108 1099
1109 if (!lscsi_status && 1100 if (!lscsi_status &&
1110 ((unsigned)(scsi_bufflen(cp) - resid) < 1101 ((unsigned)(scsi_bufflen(cp) - resid) <
@@ -1160,7 +1151,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
1160 1151
1161 if (scsi_status & SS_RESIDUAL_UNDER) { 1152 if (scsi_status & SS_RESIDUAL_UNDER) {
1162 scsi_set_resid(cp, resid); 1153 scsi_set_resid(cp, resid);
1163 CMD_RESID_LEN(cp) = resid;
1164 } else { 1154 } else {
1165 DEBUG2(printk(KERN_INFO 1155 DEBUG2(printk(KERN_INFO
1166 "scsi(%ld:%d:%d) UNDERRUN status detected " 1156 "scsi(%ld:%d:%d) UNDERRUN status detected "
@@ -1499,7 +1489,6 @@ qla24xx_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0)
1499void 1489void
1500qla24xx_process_response_queue(struct rsp_que *rsp) 1490qla24xx_process_response_queue(struct rsp_que *rsp)
1501{ 1491{
1502 struct qla_hw_data *ha = rsp->hw;
1503 struct sts_entry_24xx *pkt; 1492 struct sts_entry_24xx *pkt;
1504 struct scsi_qla_host *vha; 1493 struct scsi_qla_host *vha;
1505 1494
@@ -1553,7 +1542,7 @@ qla24xx_process_response_queue(struct rsp_que *rsp)
1553 } 1542 }
1554 1543
1555 /* Adjust ring index */ 1544 /* Adjust ring index */
1556 ha->isp_ops->wrt_rsp_reg(ha, rsp->id, rsp->ring_index); 1545 WRT_REG_DWORD(rsp->rsp_q_out, rsp->ring_index);
1557} 1546}
1558 1547
1559static void 1548static void
@@ -2029,7 +2018,7 @@ skip_msix:
2029skip_msi: 2018skip_msi:
2030 2019
2031 ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, 2020 ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler,
2032 IRQF_DISABLED|IRQF_SHARED, QLA2XXX_DRIVER_NAME, rsp); 2021 IRQF_SHARED, QLA2XXX_DRIVER_NAME, rsp);
2033 if (ret) { 2022 if (ret) {
2034 qla_printk(KERN_WARNING, ha, 2023 qla_printk(KERN_WARNING, ha,
2035 "Failed to reserve interrupt %d already in use.\n", 2024 "Failed to reserve interrupt %d already in use.\n",
@@ -2117,18 +2106,3 @@ int qla25xx_request_irq(struct rsp_que *rsp)
2117 msix->rsp = rsp; 2106 msix->rsp = rsp;
2118 return ret; 2107 return ret;
2119} 2108}
2120
2121void
2122qla25xx_wrt_rsp_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index)
2123{
2124 device_reg_t __iomem *reg = (void *) ha->mqiobase + QLA_QUE_PAGE * id;
2125 WRT_REG_DWORD(&reg->isp25mq.rsp_q_out, index);
2126}
2127
2128void
2129qla24xx_wrt_rsp_reg(struct qla_hw_data *ha, uint16_t id, uint16_t index)
2130{
2131 device_reg_t __iomem *reg = (void *) ha->iobase;
2132 WRT_REG_DWORD(&reg->isp24.rsp_q_out, index);
2133}
2134
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 4aab7acf7525..e67c1660bf46 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -45,6 +45,9 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
45 struct qla_hw_data *ha = vha->hw; 45 struct qla_hw_data *ha = vha->hw;
46 scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev); 46 scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
47 47
48 if (ha->pdev->error_state > pci_channel_io_frozen)
49 return QLA_FUNCTION_TIMEOUT;
50
48 reg = ha->iobase; 51 reg = ha->iobase;
49 io_lock_on = base_vha->flags.init_done; 52 io_lock_on = base_vha->flags.init_done;
50 53
@@ -408,7 +411,7 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr)
408void 411void
409qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor, 412qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor,
410 uint16_t *subminor, uint16_t *attributes, uint32_t *memory, uint8_t *mpi, 413 uint16_t *subminor, uint16_t *attributes, uint32_t *memory, uint8_t *mpi,
411 uint32_t *mpi_caps) 414 uint32_t *mpi_caps, uint8_t *phy)
412{ 415{
413 int rval; 416 int rval;
414 mbx_cmd_t mc; 417 mbx_cmd_t mc;
@@ -420,7 +423,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor,
420 mcp->out_mb = MBX_0; 423 mcp->out_mb = MBX_0;
421 mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; 424 mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
422 if (IS_QLA81XX(vha->hw)) 425 if (IS_QLA81XX(vha->hw))
423 mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10; 426 mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8;
424 mcp->flags = 0; 427 mcp->flags = 0;
425 mcp->tov = MBX_TOV_SECONDS; 428 mcp->tov = MBX_TOV_SECONDS;
426 rval = qla2x00_mailbox_command(vha, mcp); 429 rval = qla2x00_mailbox_command(vha, mcp);
@@ -435,11 +438,13 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha, uint16_t *major, uint16_t *minor,
435 else 438 else
436 *memory = (mcp->mb[5] << 16) | mcp->mb[4]; 439 *memory = (mcp->mb[5] << 16) | mcp->mb[4];
437 if (IS_QLA81XX(vha->hw)) { 440 if (IS_QLA81XX(vha->hw)) {
438 mpi[0] = mcp->mb[10] >> 8; 441 mpi[0] = mcp->mb[10] & 0xff;
439 mpi[1] = mcp->mb[10] & 0xff; 442 mpi[1] = mcp->mb[11] >> 8;
440 mpi[2] = mcp->mb[11] >> 8; 443 mpi[2] = mcp->mb[11] & 0xff;
441 mpi[3] = mcp->mb[11] & 0xff;
442 *mpi_caps = (mcp->mb[12] << 16) | mcp->mb[13]; 444 *mpi_caps = (mcp->mb[12] << 16) | mcp->mb[13];
445 phy[0] = mcp->mb[8] & 0xff;
446 phy[1] = mcp->mb[9] >> 8;
447 phy[2] = mcp->mb[9] & 0xff;
443 } 448 }
444 449
445 if (rval != QLA_SUCCESS) { 450 if (rval != QLA_SUCCESS) {
@@ -1043,14 +1048,22 @@ qla2x00_init_firmware(scsi_qla_host_t *vha, uint16_t size)
1043 else 1048 else
1044 mcp->mb[0] = MBC_INITIALIZE_FIRMWARE; 1049 mcp->mb[0] = MBC_INITIALIZE_FIRMWARE;
1045 1050
1051 mcp->mb[1] = 0;
1046 mcp->mb[2] = MSW(ha->init_cb_dma); 1052 mcp->mb[2] = MSW(ha->init_cb_dma);
1047 mcp->mb[3] = LSW(ha->init_cb_dma); 1053 mcp->mb[3] = LSW(ha->init_cb_dma);
1048 mcp->mb[4] = 0;
1049 mcp->mb[5] = 0;
1050 mcp->mb[6] = MSW(MSD(ha->init_cb_dma)); 1054 mcp->mb[6] = MSW(MSD(ha->init_cb_dma));
1051 mcp->mb[7] = LSW(MSD(ha->init_cb_dma)); 1055 mcp->mb[7] = LSW(MSD(ha->init_cb_dma));
1052 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0; 1056 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
1053 mcp->in_mb = MBX_5|MBX_4|MBX_0; 1057 if (IS_QLA81XX(ha) && ha->ex_init_cb->ex_version) {
1058 mcp->mb[1] = BIT_0;
1059 mcp->mb[10] = MSW(ha->ex_init_cb_dma);
1060 mcp->mb[11] = LSW(ha->ex_init_cb_dma);
1061 mcp->mb[12] = MSW(MSD(ha->ex_init_cb_dma));
1062 mcp->mb[13] = LSW(MSD(ha->ex_init_cb_dma));
1063 mcp->mb[14] = sizeof(*ha->ex_init_cb);
1064 mcp->out_mb |= MBX_14|MBX_13|MBX_12|MBX_11|MBX_10;
1065 }
1066 mcp->in_mb = MBX_0;
1054 mcp->buf_size = size; 1067 mcp->buf_size = size;
1055 mcp->flags = MBX_DMA_OUT; 1068 mcp->flags = MBX_DMA_OUT;
1056 mcp->tov = MBX_TOV_SECONDS; 1069 mcp->tov = MBX_TOV_SECONDS;
@@ -1187,10 +1200,6 @@ qla2x00_get_port_database(scsi_qla_host_t *vha, fc_port_t *fcport, uint8_t opt)
1187 fcport->d_id.b.al_pa = pd->port_id[2]; 1200 fcport->d_id.b.al_pa = pd->port_id[2];
1188 fcport->d_id.b.rsvd_1 = 0; 1201 fcport->d_id.b.rsvd_1 = 0;
1189 1202
1190 /* Check for device require authentication. */
1191 pd->common_features & BIT_5 ? (fcport->flags |= FCF_AUTH_REQ) :
1192 (fcport->flags &= ~FCF_AUTH_REQ);
1193
1194 /* If not target must be initiator or unknown type. */ 1203 /* If not target must be initiator or unknown type. */
1195 if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0) 1204 if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0)
1196 fcport->port_type = FCT_INITIATOR; 1205 fcport->port_type = FCT_INITIATOR;
@@ -3218,3 +3227,204 @@ qla81xx_idc_ack(scsi_qla_host_t *vha, uint16_t *mb)
3218 3227
3219 return rval; 3228 return rval;
3220} 3229}
3230
3231int
3232qla81xx_fac_get_sector_size(scsi_qla_host_t *vha, uint32_t *sector_size)
3233{
3234 int rval;
3235 mbx_cmd_t mc;
3236 mbx_cmd_t *mcp = &mc;
3237
3238 if (!IS_QLA81XX(vha->hw))
3239 return QLA_FUNCTION_FAILED;
3240
3241 DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
3242
3243 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
3244 mcp->mb[1] = FAC_OPT_CMD_GET_SECTOR_SIZE;
3245 mcp->out_mb = MBX_1|MBX_0;
3246 mcp->in_mb = MBX_1|MBX_0;
3247 mcp->tov = MBX_TOV_SECONDS;
3248 mcp->flags = 0;
3249 rval = qla2x00_mailbox_command(vha, mcp);
3250
3251 if (rval != QLA_SUCCESS) {
3252 DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x.\n",
3253 __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1]));
3254 } else {
3255 DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
3256 *sector_size = mcp->mb[1];
3257 }
3258
3259 return rval;
3260}
3261
3262int
3263qla81xx_fac_do_write_enable(scsi_qla_host_t *vha, int enable)
3264{
3265 int rval;
3266 mbx_cmd_t mc;
3267 mbx_cmd_t *mcp = &mc;
3268
3269 if (!IS_QLA81XX(vha->hw))
3270 return QLA_FUNCTION_FAILED;
3271
3272 DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
3273
3274 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
3275 mcp->mb[1] = enable ? FAC_OPT_CMD_WRITE_ENABLE :
3276 FAC_OPT_CMD_WRITE_PROTECT;
3277 mcp->out_mb = MBX_1|MBX_0;
3278 mcp->in_mb = MBX_1|MBX_0;
3279 mcp->tov = MBX_TOV_SECONDS;
3280 mcp->flags = 0;
3281 rval = qla2x00_mailbox_command(vha, mcp);
3282
3283 if (rval != QLA_SUCCESS) {
3284 DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x.\n",
3285 __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1]));
3286 } else {
3287 DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
3288 }
3289
3290 return rval;
3291}
3292
3293int
3294qla81xx_fac_erase_sector(scsi_qla_host_t *vha, uint32_t start, uint32_t finish)
3295{
3296 int rval;
3297 mbx_cmd_t mc;
3298 mbx_cmd_t *mcp = &mc;
3299
3300 if (!IS_QLA81XX(vha->hw))
3301 return QLA_FUNCTION_FAILED;
3302
3303 DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
3304
3305 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
3306 mcp->mb[1] = FAC_OPT_CMD_ERASE_SECTOR;
3307 mcp->mb[2] = LSW(start);
3308 mcp->mb[3] = MSW(start);
3309 mcp->mb[4] = LSW(finish);
3310 mcp->mb[5] = MSW(finish);
3311 mcp->out_mb = MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
3312 mcp->in_mb = MBX_2|MBX_1|MBX_0;
3313 mcp->tov = MBX_TOV_SECONDS;
3314 mcp->flags = 0;
3315 rval = qla2x00_mailbox_command(vha, mcp);
3316
3317 if (rval != QLA_SUCCESS) {
3318 DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x "
3319 "mb[2]=%x.\n", __func__, vha->host_no, rval, mcp->mb[0],
3320 mcp->mb[1], mcp->mb[2]));
3321 } else {
3322 DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
3323 }
3324
3325 return rval;
3326}
3327
3328int
3329qla81xx_restart_mpi_firmware(scsi_qla_host_t *vha)
3330{
3331 int rval = 0;
3332 mbx_cmd_t mc;
3333 mbx_cmd_t *mcp = &mc;
3334
3335 DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
3336
3337 mcp->mb[0] = MBC_RESTART_MPI_FW;
3338 mcp->out_mb = MBX_0;
3339 mcp->in_mb = MBX_0|MBX_1;
3340 mcp->tov = MBX_TOV_SECONDS;
3341 mcp->flags = 0;
3342 rval = qla2x00_mailbox_command(vha, mcp);
3343
3344 if (rval != QLA_SUCCESS) {
3345 DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=0x%x mb[1]=0x%x.\n",
3346 __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1]));
3347 } else {
3348 DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
3349 }
3350
3351 return rval;
3352}
3353
3354int
3355qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
3356 dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt)
3357{
3358 int rval;
3359 mbx_cmd_t mc;
3360 mbx_cmd_t *mcp = &mc;
3361
3362 DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
3363
3364 mcp->mb[0] = MBC_READ_SFP;
3365 mcp->mb[1] = dev;
3366 mcp->mb[2] = MSW(sfp_dma);
3367 mcp->mb[3] = LSW(sfp_dma);
3368 mcp->mb[6] = MSW(MSD(sfp_dma));
3369 mcp->mb[7] = LSW(MSD(sfp_dma));
3370 mcp->mb[8] = len;
3371 mcp->mb[9] = adr;
3372 mcp->mb[10] = opt;
3373 mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
3374 mcp->in_mb = MBX_0;
3375 mcp->tov = MBX_TOV_SECONDS;
3376 mcp->flags = 0;
3377 rval = qla2x00_mailbox_command(vha, mcp);
3378
3379 if (opt & BIT_0)
3380 if (sfp)
3381 *sfp = mcp->mb[8];
3382
3383 if (rval != QLA_SUCCESS) {
3384 DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
3385 vha->host_no, rval, mcp->mb[0]));
3386 } else {
3387 DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
3388 }
3389
3390 return rval;
3391}
3392
3393int
3394qla2x00_write_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
3395 dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt)
3396{
3397 int rval;
3398 mbx_cmd_t mc;
3399 mbx_cmd_t *mcp = &mc;
3400
3401 DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
3402
3403 if (opt & BIT_0)
3404 if (sfp)
3405 len = *sfp;
3406
3407 mcp->mb[0] = MBC_WRITE_SFP;
3408 mcp->mb[1] = dev;
3409 mcp->mb[2] = MSW(sfp_dma);
3410 mcp->mb[3] = LSW(sfp_dma);
3411 mcp->mb[6] = MSW(MSD(sfp_dma));
3412 mcp->mb[7] = LSW(MSD(sfp_dma));
3413 mcp->mb[8] = len;
3414 mcp->mb[9] = adr;
3415 mcp->mb[10] = opt;
3416 mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
3417 mcp->in_mb = MBX_0;
3418 mcp->tov = MBX_TOV_SECONDS;
3419 mcp->flags = 0;
3420 rval = qla2x00_mailbox_command(vha, mcp);
3421
3422 if (rval != QLA_SUCCESS) {
3423 DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
3424 vha->host_no, rval, mcp->mb[0]));
3425 } else {
3426 DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
3427 }
3428
3429 return rval;
3430}
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index 785c61279e6e..51716c7e3008 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -359,7 +359,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
359 scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost); 359 scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost);
360 struct qla_hw_data *ha = base_vha->hw; 360 struct qla_hw_data *ha = base_vha->hw;
361 scsi_qla_host_t *vha; 361 scsi_qla_host_t *vha;
362 struct scsi_host_template *sht = &qla24xx_driver_template; 362 struct scsi_host_template *sht = &qla2xxx_driver_template;
363 struct Scsi_Host *host; 363 struct Scsi_Host *host;
364 364
365 vha = qla2x00_create_host(sht, ha); 365 vha = qla2x00_create_host(sht, ha);
@@ -584,6 +584,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
584 struct req_que *req = NULL; 584 struct req_que *req = NULL;
585 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); 585 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
586 uint16_t que_id = 0; 586 uint16_t que_id = 0;
587 device_reg_t __iomem *reg;
587 588
588 req = kzalloc(sizeof(struct req_que), GFP_KERNEL); 589 req = kzalloc(sizeof(struct req_que), GFP_KERNEL);
589 if (req == NULL) { 590 if (req == NULL) {
@@ -631,6 +632,9 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
631 req->ring_index = 0; 632 req->ring_index = 0;
632 req->cnt = req->length; 633 req->cnt = req->length;
633 req->id = que_id; 634 req->id = que_id;
635 reg = ISP_QUE_REG(ha, que_id);
636 req->req_q_in = &reg->isp25mq.req_q_in;
637 req->req_q_out = &reg->isp25mq.req_q_out;
634 req->max_q_depth = ha->req_q_map[0]->max_q_depth; 638 req->max_q_depth = ha->req_q_map[0]->max_q_depth;
635 mutex_unlock(&ha->vport_lock); 639 mutex_unlock(&ha->vport_lock);
636 640
@@ -658,7 +662,8 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options,
658 int ret = 0; 662 int ret = 0;
659 struct rsp_que *rsp = NULL; 663 struct rsp_que *rsp = NULL;
660 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); 664 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
661 uint16_t que_id = 0;; 665 uint16_t que_id = 0;
666 device_reg_t __iomem *reg;
662 667
663 rsp = kzalloc(sizeof(struct rsp_que), GFP_KERNEL); 668 rsp = kzalloc(sizeof(struct rsp_que), GFP_KERNEL);
664 if (rsp == NULL) { 669 if (rsp == NULL) {
@@ -706,6 +711,9 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options,
706 rsp->ring_ptr = rsp->ring; 711 rsp->ring_ptr = rsp->ring;
707 rsp->ring_index = 0; 712 rsp->ring_index = 0;
708 rsp->id = que_id; 713 rsp->id = que_id;
714 reg = ISP_QUE_REG(ha, que_id);
715 rsp->rsp_q_in = &reg->isp25mq.rsp_q_in;
716 rsp->rsp_q_out = &reg->isp25mq.rsp_q_out;
709 mutex_unlock(&ha->vport_lock); 717 mutex_unlock(&ha->vport_lock);
710 718
711 ret = qla25xx_request_irq(rsp); 719 ret = qla25xx_request_irq(rsp);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 3ddfa889e949..e4fdcdad80d0 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -104,9 +104,7 @@ static int qla2xxx_slave_alloc(struct scsi_device *);
104static int qla2xxx_scan_finished(struct Scsi_Host *, unsigned long time); 104static int qla2xxx_scan_finished(struct Scsi_Host *, unsigned long time);
105static void qla2xxx_scan_start(struct Scsi_Host *); 105static void qla2xxx_scan_start(struct Scsi_Host *);
106static void qla2xxx_slave_destroy(struct scsi_device *); 106static void qla2xxx_slave_destroy(struct scsi_device *);
107static int qla2x00_queuecommand(struct scsi_cmnd *cmd, 107static int qla2xxx_queuecommand(struct scsi_cmnd *cmd,
108 void (*fn)(struct scsi_cmnd *));
109static int qla24xx_queuecommand(struct scsi_cmnd *cmd,
110 void (*fn)(struct scsi_cmnd *)); 108 void (*fn)(struct scsi_cmnd *));
111static int qla2xxx_eh_abort(struct scsi_cmnd *); 109static int qla2xxx_eh_abort(struct scsi_cmnd *);
112static int qla2xxx_eh_device_reset(struct scsi_cmnd *); 110static int qla2xxx_eh_device_reset(struct scsi_cmnd *);
@@ -117,42 +115,10 @@ static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
117static int qla2x00_change_queue_depth(struct scsi_device *, int); 115static int qla2x00_change_queue_depth(struct scsi_device *, int);
118static int qla2x00_change_queue_type(struct scsi_device *, int); 116static int qla2x00_change_queue_type(struct scsi_device *, int);
119 117
120static struct scsi_host_template qla2x00_driver_template = { 118struct scsi_host_template qla2xxx_driver_template = {
121 .module = THIS_MODULE, 119 .module = THIS_MODULE,
122 .name = QLA2XXX_DRIVER_NAME, 120 .name = QLA2XXX_DRIVER_NAME,
123 .queuecommand = qla2x00_queuecommand, 121 .queuecommand = qla2xxx_queuecommand,
124
125 .eh_abort_handler = qla2xxx_eh_abort,
126 .eh_device_reset_handler = qla2xxx_eh_device_reset,
127 .eh_target_reset_handler = qla2xxx_eh_target_reset,
128 .eh_bus_reset_handler = qla2xxx_eh_bus_reset,
129 .eh_host_reset_handler = qla2xxx_eh_host_reset,
130
131 .slave_configure = qla2xxx_slave_configure,
132
133 .slave_alloc = qla2xxx_slave_alloc,
134 .slave_destroy = qla2xxx_slave_destroy,
135 .scan_finished = qla2xxx_scan_finished,
136 .scan_start = qla2xxx_scan_start,
137 .change_queue_depth = qla2x00_change_queue_depth,
138 .change_queue_type = qla2x00_change_queue_type,
139 .this_id = -1,
140 .cmd_per_lun = 3,
141 .use_clustering = ENABLE_CLUSTERING,
142 .sg_tablesize = SG_ALL,
143
144 /*
145 * The RISC allows for each command to transfer (2^32-1) bytes of data,
146 * which equates to 0x800000 sectors.
147 */
148 .max_sectors = 0xFFFF,
149 .shost_attrs = qla2x00_host_attrs,
150};
151
152struct scsi_host_template qla24xx_driver_template = {
153 .module = THIS_MODULE,
154 .name = QLA2XXX_DRIVER_NAME,
155 .queuecommand = qla24xx_queuecommand,
156 122
157 .eh_abort_handler = qla2xxx_eh_abort, 123 .eh_abort_handler = qla2xxx_eh_abort,
158 .eh_device_reset_handler = qla2xxx_eh_device_reset, 124 .eh_device_reset_handler = qla2xxx_eh_device_reset,
@@ -430,73 +396,7 @@ qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport,
430} 396}
431 397
432static int 398static int
433qla2x00_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) 399qla2xxx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
434{
435 scsi_qla_host_t *vha = shost_priv(cmd->device->host);
436 fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
437 struct fc_rport *rport = starget_to_rport(scsi_target(cmd->device));
438 struct qla_hw_data *ha = vha->hw;
439 srb_t *sp;
440 int rval;
441
442 if (unlikely(pci_channel_offline(ha->pdev))) {
443 cmd->result = DID_REQUEUE << 16;
444 goto qc_fail_command;
445 }
446
447 rval = fc_remote_port_chkready(rport);
448 if (rval) {
449 cmd->result = rval;
450 goto qc_fail_command;
451 }
452
453 /* Close window on fcport/rport state-transitioning. */
454 if (fcport->drport)
455 goto qc_target_busy;
456
457 if (atomic_read(&fcport->state) != FCS_ONLINE) {
458 if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD ||
459 atomic_read(&vha->loop_state) == LOOP_DEAD) {
460 cmd->result = DID_NO_CONNECT << 16;
461 goto qc_fail_command;
462 }
463 goto qc_target_busy;
464 }
465
466 spin_unlock_irq(vha->host->host_lock);
467
468 sp = qla2x00_get_new_sp(vha, fcport, cmd, done);
469 if (!sp)
470 goto qc_host_busy_lock;
471
472 rval = ha->isp_ops->start_scsi(sp);
473 if (rval != QLA_SUCCESS)
474 goto qc_host_busy_free_sp;
475
476 spin_lock_irq(vha->host->host_lock);
477
478 return 0;
479
480qc_host_busy_free_sp:
481 qla2x00_sp_free_dma(sp);
482 mempool_free(sp, ha->srb_mempool);
483
484qc_host_busy_lock:
485 spin_lock_irq(vha->host->host_lock);
486 return SCSI_MLQUEUE_HOST_BUSY;
487
488qc_target_busy:
489 return SCSI_MLQUEUE_TARGET_BUSY;
490
491qc_fail_command:
492 done(cmd);
493
494 return 0;
495}
496
497
498static int
499qla24xx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
500{ 400{
501 scsi_qla_host_t *vha = shost_priv(cmd->device->host); 401 scsi_qla_host_t *vha = shost_priv(cmd->device->host);
502 fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata; 402 fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
@@ -507,7 +407,10 @@ qla24xx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
507 int rval; 407 int rval;
508 408
509 if (unlikely(pci_channel_offline(ha->pdev))) { 409 if (unlikely(pci_channel_offline(ha->pdev))) {
510 cmd->result = DID_REQUEUE << 16; 410 if (ha->pdev->error_state == pci_channel_io_frozen)
411 cmd->result = DID_REQUEUE << 16;
412 else
413 cmd->result = DID_NO_CONNECT << 16;
511 goto qc24_fail_command; 414 goto qc24_fail_command;
512 } 415 }
513 416
@@ -635,6 +538,34 @@ qla2x00_wait_for_hba_online(scsi_qla_host_t *vha)
635 return (return_status); 538 return (return_status);
636} 539}
637 540
541int
542qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha)
543{
544 int return_status;
545 unsigned long wait_reset;
546 struct qla_hw_data *ha = vha->hw;
547 scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
548
549 wait_reset = jiffies + (MAX_LOOP_TIMEOUT * HZ);
550 while (((test_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags)) ||
551 test_bit(ABORT_ISP_ACTIVE, &base_vha->dpc_flags) ||
552 test_bit(ISP_ABORT_RETRY, &base_vha->dpc_flags) ||
553 ha->dpc_active) && time_before(jiffies, wait_reset)) {
554
555 msleep(1000);
556
557 if (!test_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags) &&
558 ha->flags.chip_reset_done)
559 break;
560 }
561 if (ha->flags.chip_reset_done)
562 return_status = QLA_SUCCESS;
563 else
564 return_status = QLA_FUNCTION_FAILED;
565
566 return return_status;
567}
568
638/* 569/*
639 * qla2x00_wait_for_loop_ready 570 * qla2x00_wait_for_loop_ready
640 * Wait for MAX_LOOP_TIMEOUT(5 min) value for loop 571 * Wait for MAX_LOOP_TIMEOUT(5 min) value for loop
@@ -1163,7 +1094,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
1163 continue; 1094 continue;
1164 for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { 1095 for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
1165 sp = req->outstanding_cmds[cnt]; 1096 sp = req->outstanding_cmds[cnt];
1166 if (sp && sp->fcport->vha == vha) { 1097 if (sp) {
1167 req->outstanding_cmds[cnt] = NULL; 1098 req->outstanding_cmds[cnt] = NULL;
1168 sp->cmd->result = res; 1099 sp->cmd->result = res;
1169 qla2x00_sp_compl(ha, sp); 1100 qla2x00_sp_compl(ha, sp);
@@ -1245,10 +1176,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
1245 /* Assume a 32bit DMA mask. */ 1176 /* Assume a 32bit DMA mask. */
1246 ha->flags.enable_64bit_addressing = 0; 1177 ha->flags.enable_64bit_addressing = 0;
1247 1178
1248 if (!dma_set_mask(&ha->pdev->dev, DMA_64BIT_MASK)) { 1179 if (!dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(64))) {
1249 /* Any upper-dword bits set? */ 1180 /* Any upper-dword bits set? */
1250 if (MSD(dma_get_required_mask(&ha->pdev->dev)) && 1181 if (MSD(dma_get_required_mask(&ha->pdev->dev)) &&
1251 !pci_set_consistent_dma_mask(ha->pdev, DMA_64BIT_MASK)) { 1182 !pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) {
1252 /* Ok, a 64bit DMA mask is applicable. */ 1183 /* Ok, a 64bit DMA mask is applicable. */
1253 ha->flags.enable_64bit_addressing = 1; 1184 ha->flags.enable_64bit_addressing = 1;
1254 ha->isp_ops->calc_req_entries = qla2x00_calc_iocbs_64; 1185 ha->isp_ops->calc_req_entries = qla2x00_calc_iocbs_64;
@@ -1257,8 +1188,8 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
1257 } 1188 }
1258 } 1189 }
1259 1190
1260 dma_set_mask(&ha->pdev->dev, DMA_32BIT_MASK); 1191 dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(32));
1261 pci_set_consistent_dma_mask(ha->pdev, DMA_32BIT_MASK); 1192 pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(32));
1262} 1193}
1263 1194
1264static void 1195static void
@@ -1351,9 +1282,6 @@ static struct isp_operations qla2100_isp_ops = {
1351 .write_optrom = qla2x00_write_optrom_data, 1282 .write_optrom = qla2x00_write_optrom_data,
1352 .get_flash_version = qla2x00_get_flash_version, 1283 .get_flash_version = qla2x00_get_flash_version,
1353 .start_scsi = qla2x00_start_scsi, 1284 .start_scsi = qla2x00_start_scsi,
1354 .wrt_req_reg = NULL,
1355 .wrt_rsp_reg = NULL,
1356 .rd_req_reg = NULL,
1357}; 1285};
1358 1286
1359static struct isp_operations qla2300_isp_ops = { 1287static struct isp_operations qla2300_isp_ops = {
@@ -1389,9 +1317,6 @@ static struct isp_operations qla2300_isp_ops = {
1389 .write_optrom = qla2x00_write_optrom_data, 1317 .write_optrom = qla2x00_write_optrom_data,
1390 .get_flash_version = qla2x00_get_flash_version, 1318 .get_flash_version = qla2x00_get_flash_version,
1391 .start_scsi = qla2x00_start_scsi, 1319 .start_scsi = qla2x00_start_scsi,
1392 .wrt_req_reg = NULL,
1393 .wrt_rsp_reg = NULL,
1394 .rd_req_reg = NULL,
1395}; 1320};
1396 1321
1397static struct isp_operations qla24xx_isp_ops = { 1322static struct isp_operations qla24xx_isp_ops = {
@@ -1427,9 +1352,6 @@ static struct isp_operations qla24xx_isp_ops = {
1427 .write_optrom = qla24xx_write_optrom_data, 1352 .write_optrom = qla24xx_write_optrom_data,
1428 .get_flash_version = qla24xx_get_flash_version, 1353 .get_flash_version = qla24xx_get_flash_version,
1429 .start_scsi = qla24xx_start_scsi, 1354 .start_scsi = qla24xx_start_scsi,
1430 .wrt_req_reg = qla24xx_wrt_req_reg,
1431 .wrt_rsp_reg = qla24xx_wrt_rsp_reg,
1432 .rd_req_reg = qla24xx_rd_req_reg,
1433}; 1355};
1434 1356
1435static struct isp_operations qla25xx_isp_ops = { 1357static struct isp_operations qla25xx_isp_ops = {
@@ -1465,9 +1387,6 @@ static struct isp_operations qla25xx_isp_ops = {
1465 .write_optrom = qla24xx_write_optrom_data, 1387 .write_optrom = qla24xx_write_optrom_data,
1466 .get_flash_version = qla24xx_get_flash_version, 1388 .get_flash_version = qla24xx_get_flash_version,
1467 .start_scsi = qla24xx_start_scsi, 1389 .start_scsi = qla24xx_start_scsi,
1468 .wrt_req_reg = qla24xx_wrt_req_reg,
1469 .wrt_rsp_reg = qla24xx_wrt_rsp_reg,
1470 .rd_req_reg = qla24xx_rd_req_reg,
1471}; 1390};
1472 1391
1473static struct isp_operations qla81xx_isp_ops = { 1392static struct isp_operations qla81xx_isp_ops = {
@@ -1493,8 +1412,8 @@ static struct isp_operations qla81xx_isp_ops = {
1493 .build_iocbs = NULL, 1412 .build_iocbs = NULL,
1494 .prep_ms_iocb = qla24xx_prep_ms_iocb, 1413 .prep_ms_iocb = qla24xx_prep_ms_iocb,
1495 .prep_ms_fdmi_iocb = qla24xx_prep_ms_fdmi_iocb, 1414 .prep_ms_fdmi_iocb = qla24xx_prep_ms_fdmi_iocb,
1496 .read_nvram = qla25xx_read_nvram_data, 1415 .read_nvram = NULL,
1497 .write_nvram = qla25xx_write_nvram_data, 1416 .write_nvram = NULL,
1498 .fw_dump = qla81xx_fw_dump, 1417 .fw_dump = qla81xx_fw_dump,
1499 .beacon_on = qla24xx_beacon_on, 1418 .beacon_on = qla24xx_beacon_on,
1500 .beacon_off = qla24xx_beacon_off, 1419 .beacon_off = qla24xx_beacon_off,
@@ -1503,9 +1422,6 @@ static struct isp_operations qla81xx_isp_ops = {
1503 .write_optrom = qla24xx_write_optrom_data, 1422 .write_optrom = qla24xx_write_optrom_data,
1504 .get_flash_version = qla24xx_get_flash_version, 1423 .get_flash_version = qla24xx_get_flash_version,
1505 .start_scsi = qla24xx_start_scsi, 1424 .start_scsi = qla24xx_start_scsi,
1506 .wrt_req_reg = qla24xx_wrt_req_reg,
1507 .wrt_rsp_reg = qla24xx_wrt_rsp_reg,
1508 .rd_req_reg = qla24xx_rd_req_reg,
1509}; 1425};
1510 1426
1511static inline void 1427static inline void
@@ -1727,7 +1643,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1727 struct rsp_que *rsp = NULL; 1643 struct rsp_que *rsp = NULL;
1728 1644
1729 bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO); 1645 bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO);
1730 sht = &qla2x00_driver_template; 1646 sht = &qla2xxx_driver_template;
1731 if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 || 1647 if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
1732 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 || 1648 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 ||
1733 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8432 || 1649 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8432 ||
@@ -1736,7 +1652,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1736 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2532 || 1652 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2532 ||
1737 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8001) { 1653 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8001) {
1738 bars = pci_select_bars(pdev, IORESOURCE_MEM); 1654 bars = pci_select_bars(pdev, IORESOURCE_MEM);
1739 sht = &qla24xx_driver_template;
1740 mem_only = 1; 1655 mem_only = 1;
1741 } 1656 }
1742 1657
@@ -1927,10 +1842,16 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1927 ha->rsp_q_map[0] = rsp; 1842 ha->rsp_q_map[0] = rsp;
1928 ha->req_q_map[0] = req; 1843 ha->req_q_map[0] = req;
1929 1844
1845 /* FWI2-capable only. */
1846 req->req_q_in = &ha->iobase->isp24.req_q_in;
1847 req->req_q_out = &ha->iobase->isp24.req_q_out;
1848 rsp->rsp_q_in = &ha->iobase->isp24.rsp_q_in;
1849 rsp->rsp_q_out = &ha->iobase->isp24.rsp_q_out;
1930 if (ha->mqenable) { 1850 if (ha->mqenable) {
1931 ha->isp_ops->wrt_req_reg = qla25xx_wrt_req_reg; 1851 req->req_q_in = &ha->mqiobase->isp25mq.req_q_in;
1932 ha->isp_ops->wrt_rsp_reg = qla25xx_wrt_rsp_reg; 1852 req->req_q_out = &ha->mqiobase->isp25mq.req_q_out;
1933 ha->isp_ops->rd_req_reg = qla25xx_rd_req_reg; 1853 rsp->rsp_q_in = &ha->mqiobase->isp25mq.rsp_q_in;
1854 rsp->rsp_q_out = &ha->mqiobase->isp25mq.rsp_q_out;
1934 } 1855 }
1935 1856
1936 if (qla2x00_initialize_adapter(base_vha)) { 1857 if (qla2x00_initialize_adapter(base_vha)) {
@@ -2000,6 +1921,16 @@ probe_init_failed:
2000 ha->max_queues = 0; 1921 ha->max_queues = 0;
2001 1922
2002probe_failed: 1923probe_failed:
1924 if (base_vha->timer_active)
1925 qla2x00_stop_timer(base_vha);
1926 base_vha->flags.online = 0;
1927 if (ha->dpc_thread) {
1928 struct task_struct *t = ha->dpc_thread;
1929
1930 ha->dpc_thread = NULL;
1931 kthread_stop(t);
1932 }
1933
2003 qla2x00_free_device(base_vha); 1934 qla2x00_free_device(base_vha);
2004 1935
2005 scsi_host_put(base_vha->host); 1936 scsi_host_put(base_vha->host);
@@ -2033,10 +1964,30 @@ qla2x00_remove_one(struct pci_dev *pdev)
2033 1964
2034 set_bit(UNLOADING, &base_vha->dpc_flags); 1965 set_bit(UNLOADING, &base_vha->dpc_flags);
2035 1966
1967 qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16);
1968
2036 qla2x00_dfs_remove(base_vha); 1969 qla2x00_dfs_remove(base_vha);
2037 1970
2038 qla84xx_put_chip(base_vha); 1971 qla84xx_put_chip(base_vha);
2039 1972
1973 /* Disable timer */
1974 if (base_vha->timer_active)
1975 qla2x00_stop_timer(base_vha);
1976
1977 base_vha->flags.online = 0;
1978
1979 /* Kill the kernel thread for this host */
1980 if (ha->dpc_thread) {
1981 struct task_struct *t = ha->dpc_thread;
1982
1983 /*
1984 * qla2xxx_wake_dpc checks for ->dpc_thread
1985 * so we need to zero it out.
1986 */
1987 ha->dpc_thread = NULL;
1988 kthread_stop(t);
1989 }
1990
2040 qla2x00_free_sysfs_attr(base_vha); 1991 qla2x00_free_sysfs_attr(base_vha);
2041 1992
2042 fc_remove_host(base_vha->host); 1993 fc_remove_host(base_vha->host);
@@ -2065,25 +2016,6 @@ static void
2065qla2x00_free_device(scsi_qla_host_t *vha) 2016qla2x00_free_device(scsi_qla_host_t *vha)
2066{ 2017{
2067 struct qla_hw_data *ha = vha->hw; 2018 struct qla_hw_data *ha = vha->hw;
2068 qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16);
2069
2070 /* Disable timer */
2071 if (vha->timer_active)
2072 qla2x00_stop_timer(vha);
2073
2074 vha->flags.online = 0;
2075
2076 /* Kill the kernel thread for this host */
2077 if (ha->dpc_thread) {
2078 struct task_struct *t = ha->dpc_thread;
2079
2080 /*
2081 * qla2xxx_wake_dpc checks for ->dpc_thread
2082 * so we need to zero it out.
2083 */
2084 ha->dpc_thread = NULL;
2085 kthread_stop(t);
2086 }
2087 2019
2088 if (ha->flags.fce_enabled) 2020 if (ha->flags.fce_enabled)
2089 qla2x00_disable_fce_trace(vha, NULL, NULL); 2021 qla2x00_disable_fce_trace(vha, NULL, NULL);
@@ -2313,9 +2245,19 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
2313 } else 2245 } else
2314 ha->npiv_info = NULL; 2246 ha->npiv_info = NULL;
2315 2247
2248 /* Get consistent memory allocated for EX-INIT-CB. */
2249 if (IS_QLA81XX(ha)) {
2250 ha->ex_init_cb = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
2251 &ha->ex_init_cb_dma);
2252 if (!ha->ex_init_cb)
2253 goto fail_ex_init_cb;
2254 }
2255
2316 INIT_LIST_HEAD(&ha->vp_list); 2256 INIT_LIST_HEAD(&ha->vp_list);
2317 return 1; 2257 return 1;
2318 2258
2259fail_ex_init_cb:
2260 kfree(ha->npiv_info);
2319fail_npiv_info: 2261fail_npiv_info:
2320 dma_free_coherent(&ha->pdev->dev, ((*rsp)->length + 1) * 2262 dma_free_coherent(&ha->pdev->dev, ((*rsp)->length + 1) *
2321 sizeof(response_t), (*rsp)->ring, (*rsp)->dma); 2263 sizeof(response_t), (*rsp)->ring, (*rsp)->dma);
@@ -2398,18 +2340,22 @@ qla2x00_mem_free(struct qla_hw_data *ha)
2398 if (ha->sfp_data) 2340 if (ha->sfp_data)
2399 dma_pool_free(ha->s_dma_pool, ha->sfp_data, ha->sfp_data_dma); 2341 dma_pool_free(ha->s_dma_pool, ha->sfp_data, ha->sfp_data_dma);
2400 2342
2343 if (ha->edc_data)
2344 dma_pool_free(ha->s_dma_pool, ha->edc_data, ha->edc_data_dma);
2345
2401 if (ha->ms_iocb) 2346 if (ha->ms_iocb)
2402 dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma); 2347 dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma);
2403 2348
2349 if (ha->ex_init_cb)
2350 dma_pool_free(ha->s_dma_pool, ha->ex_init_cb, ha->ex_init_cb_dma);
2351
2404 if (ha->s_dma_pool) 2352 if (ha->s_dma_pool)
2405 dma_pool_destroy(ha->s_dma_pool); 2353 dma_pool_destroy(ha->s_dma_pool);
2406 2354
2407
2408 if (ha->gid_list) 2355 if (ha->gid_list)
2409 dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list, 2356 dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list,
2410 ha->gid_list_dma); 2357 ha->gid_list_dma);
2411 2358
2412
2413 if (ha->init_cb) 2359 if (ha->init_cb)
2414 dma_free_coherent(&ha->pdev->dev, ha->init_cb_size, 2360 dma_free_coherent(&ha->pdev->dev, ha->init_cb_size,
2415 ha->init_cb, ha->init_cb_dma); 2361 ha->init_cb, ha->init_cb_dma);
@@ -2428,6 +2374,8 @@ qla2x00_mem_free(struct qla_hw_data *ha)
2428 ha->ms_iocb_dma = 0; 2374 ha->ms_iocb_dma = 0;
2429 ha->init_cb = NULL; 2375 ha->init_cb = NULL;
2430 ha->init_cb_dma = 0; 2376 ha->init_cb_dma = 0;
2377 ha->ex_init_cb = NULL;
2378 ha->ex_init_cb_dma = 0;
2431 2379
2432 ha->s_dma_pool = NULL; 2380 ha->s_dma_pool = NULL;
2433 2381
@@ -2914,19 +2862,11 @@ qla2x00_timer(scsi_qla_host_t *vha)
2914 spin_unlock_irqrestore(&ha->hardware_lock, 2862 spin_unlock_irqrestore(&ha->hardware_lock,
2915 cpu_flags); 2863 cpu_flags);
2916 } 2864 }
2917 set_bit(ABORT_QUEUES_NEEDED, &vha->dpc_flags);
2918 start_dpc++; 2865 start_dpc++;
2919 } 2866 }
2920 2867
2921 /* if the loop has been down for 4 minutes, reinit adapter */ 2868 /* if the loop has been down for 4 minutes, reinit adapter */
2922 if (atomic_dec_and_test(&vha->loop_down_timer) != 0) { 2869 if (atomic_dec_and_test(&vha->loop_down_timer) != 0) {
2923 DEBUG(printk("scsi(%ld): Loop down exceed 4 mins - "
2924 "restarting queues.\n",
2925 vha->host_no));
2926
2927 set_bit(RESTART_QUEUES_NEEDED, &vha->dpc_flags);
2928 start_dpc++;
2929
2930 if (!(vha->device_flags & DFLG_NO_CABLE) && 2870 if (!(vha->device_flags & DFLG_NO_CABLE) &&
2931 !vha->vp_idx) { 2871 !vha->vp_idx) {
2932 DEBUG(printk("scsi(%ld): Loop down - " 2872 DEBUG(printk("scsi(%ld): Loop down - "
@@ -3053,6 +2993,8 @@ qla2x00_release_firmware(void)
3053static pci_ers_result_t 2993static pci_ers_result_t
3054qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) 2994qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
3055{ 2995{
2996 scsi_qla_host_t *base_vha = pci_get_drvdata(pdev);
2997
3056 switch (state) { 2998 switch (state) {
3057 case pci_channel_io_normal: 2999 case pci_channel_io_normal:
3058 return PCI_ERS_RESULT_CAN_RECOVER; 3000 return PCI_ERS_RESULT_CAN_RECOVER;
@@ -3060,7 +3002,7 @@ qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
3060 pci_disable_device(pdev); 3002 pci_disable_device(pdev);
3061 return PCI_ERS_RESULT_NEED_RESET; 3003 return PCI_ERS_RESULT_NEED_RESET;
3062 case pci_channel_io_perm_failure: 3004 case pci_channel_io_perm_failure:
3063 qla2x00_remove_one(pdev); 3005 qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16);
3064 return PCI_ERS_RESULT_DISCONNECT; 3006 return PCI_ERS_RESULT_DISCONNECT;
3065 } 3007 }
3066 return PCI_ERS_RESULT_NEED_RESET; 3008 return PCI_ERS_RESULT_NEED_RESET;
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
index 284827926eff..152ecfc26cd2 100644
--- a/drivers/scsi/qla2xxx/qla_sup.c
+++ b/drivers/scsi/qla2xxx/qla_sup.c
@@ -612,8 +612,8 @@ qla2xxx_find_flt_start(scsi_qla_host_t *vha, uint32_t *start)
612 612
613 /* Good data. Use specified location. */ 613 /* Good data. Use specified location. */
614 loc = locations[1]; 614 loc = locations[1];
615 *start = le16_to_cpu(fltl->start_hi) << 16 | 615 *start = (le16_to_cpu(fltl->start_hi) << 16 |
616 le16_to_cpu(fltl->start_lo); 616 le16_to_cpu(fltl->start_lo)) >> 2;
617end: 617end:
618 DEBUG2(qla_printk(KERN_DEBUG, ha, "FLTL[%s] = 0x%x.\n", loc, *start)); 618 DEBUG2(qla_printk(KERN_DEBUG, ha, "FLTL[%s] = 0x%x.\n", loc, *start));
619 return QLA_SUCCESS; 619 return QLA_SUCCESS;
@@ -629,6 +629,14 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr)
629 { FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR_81 }; 629 { FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR, FA_BOOT_CODE_ADDR_81 };
630 const uint32_t def_vpd_nvram[] = 630 const uint32_t def_vpd_nvram[] =
631 { FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR_81 }; 631 { FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR, FA_VPD_NVRAM_ADDR_81 };
632 const uint32_t def_vpd0[] =
633 { 0, 0, FA_VPD0_ADDR_81 };
634 const uint32_t def_vpd1[] =
635 { 0, 0, FA_VPD1_ADDR_81 };
636 const uint32_t def_nvram0[] =
637 { 0, 0, FA_NVRAM0_ADDR_81 };
638 const uint32_t def_nvram1[] =
639 { 0, 0, FA_NVRAM1_ADDR_81 };
632 const uint32_t def_fdt[] = 640 const uint32_t def_fdt[] =
633 { FA_FLASH_DESCR_ADDR_24, FA_FLASH_DESCR_ADDR, 641 { FA_FLASH_DESCR_ADDR_24, FA_FLASH_DESCR_ADDR,
634 FA_FLASH_DESCR_ADDR_81 }; 642 FA_FLASH_DESCR_ADDR_81 };
@@ -693,6 +701,20 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr)
693 break; 701 break;
694 case FLT_REG_VPD_0: 702 case FLT_REG_VPD_0:
695 ha->flt_region_vpd_nvram = start; 703 ha->flt_region_vpd_nvram = start;
704 if (!(PCI_FUNC(ha->pdev->devfn) & 1))
705 ha->flt_region_vpd = start;
706 break;
707 case FLT_REG_VPD_1:
708 if (PCI_FUNC(ha->pdev->devfn) & 1)
709 ha->flt_region_vpd = start;
710 break;
711 case FLT_REG_NVRAM_0:
712 if (!(PCI_FUNC(ha->pdev->devfn) & 1))
713 ha->flt_region_nvram = start;
714 break;
715 case FLT_REG_NVRAM_1:
716 if (PCI_FUNC(ha->pdev->devfn) & 1)
717 ha->flt_region_nvram = start;
696 break; 718 break;
697 case FLT_REG_FDT: 719 case FLT_REG_FDT:
698 ha->flt_region_fdt = start; 720 ha->flt_region_fdt = start;
@@ -722,13 +744,18 @@ no_flash_data:
722 ha->flt_region_fw = def_fw[def]; 744 ha->flt_region_fw = def_fw[def];
723 ha->flt_region_boot = def_boot[def]; 745 ha->flt_region_boot = def_boot[def];
724 ha->flt_region_vpd_nvram = def_vpd_nvram[def]; 746 ha->flt_region_vpd_nvram = def_vpd_nvram[def];
747 ha->flt_region_vpd = !(PCI_FUNC(ha->pdev->devfn) & 1) ?
748 def_vpd0[def]: def_vpd1[def];
749 ha->flt_region_nvram = !(PCI_FUNC(ha->pdev->devfn) & 1) ?
750 def_nvram0[def]: def_nvram1[def];
725 ha->flt_region_fdt = def_fdt[def]; 751 ha->flt_region_fdt = def_fdt[def];
726 ha->flt_region_npiv_conf = !(PCI_FUNC(ha->pdev->devfn) & 1) ? 752 ha->flt_region_npiv_conf = !(PCI_FUNC(ha->pdev->devfn) & 1) ?
727 def_npiv_conf0[def]: def_npiv_conf1[def]; 753 def_npiv_conf0[def]: def_npiv_conf1[def];
728done: 754done:
729 DEBUG2(qla_printk(KERN_DEBUG, ha, "FLT[%s]: boot=0x%x fw=0x%x " 755 DEBUG2(qla_printk(KERN_DEBUG, ha, "FLT[%s]: boot=0x%x fw=0x%x "
730 "vpd_nvram=0x%x fdt=0x%x flt=0x%x npiv=0x%x.\n", loc, 756 "vpd_nvram=0x%x vpd=0x%x nvram=0x%x fdt=0x%x flt=0x%x "
731 ha->flt_region_boot, ha->flt_region_fw, ha->flt_region_vpd_nvram, 757 "npiv=0x%x.\n", loc, ha->flt_region_boot, ha->flt_region_fw,
758 ha->flt_region_vpd_nvram, ha->flt_region_vpd, ha->flt_region_nvram,
732 ha->flt_region_fdt, ha->flt_region_flt, ha->flt_region_npiv_conf)); 759 ha->flt_region_fdt, ha->flt_region_flt, ha->flt_region_npiv_conf));
733} 760}
734 761
@@ -931,31 +958,41 @@ done:
931 ha->npiv_info = NULL; 958 ha->npiv_info = NULL;
932} 959}
933 960
934static void 961static int
935qla24xx_unprotect_flash(struct qla_hw_data *ha) 962qla24xx_unprotect_flash(scsi_qla_host_t *vha)
936{ 963{
964 struct qla_hw_data *ha = vha->hw;
937 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; 965 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
938 966
967 if (ha->flags.fac_supported)
968 return qla81xx_fac_do_write_enable(vha, 1);
969
939 /* Enable flash write. */ 970 /* Enable flash write. */
940 WRT_REG_DWORD(&reg->ctrl_status, 971 WRT_REG_DWORD(&reg->ctrl_status,
941 RD_REG_DWORD(&reg->ctrl_status) | CSRX_FLASH_ENABLE); 972 RD_REG_DWORD(&reg->ctrl_status) | CSRX_FLASH_ENABLE);
942 RD_REG_DWORD(&reg->ctrl_status); /* PCI Posting. */ 973 RD_REG_DWORD(&reg->ctrl_status); /* PCI Posting. */
943 974
944 if (!ha->fdt_wrt_disable) 975 if (!ha->fdt_wrt_disable)
945 return; 976 goto done;
946 977
947 /* Disable flash write-protection, first clear SR protection bit */ 978 /* Disable flash write-protection, first clear SR protection bit */
948 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); 979 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0);
949 /* Then write zero again to clear remaining SR bits.*/ 980 /* Then write zero again to clear remaining SR bits.*/
950 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); 981 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0);
982done:
983 return QLA_SUCCESS;
951} 984}
952 985
953static void 986static int
954qla24xx_protect_flash(struct qla_hw_data *ha) 987qla24xx_protect_flash(scsi_qla_host_t *vha)
955{ 988{
956 uint32_t cnt; 989 uint32_t cnt;
990 struct qla_hw_data *ha = vha->hw;
957 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; 991 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
958 992
993 if (ha->flags.fac_supported)
994 return qla81xx_fac_do_write_enable(vha, 0);
995
959 if (!ha->fdt_wrt_disable) 996 if (!ha->fdt_wrt_disable)
960 goto skip_wrt_protect; 997 goto skip_wrt_protect;
961 998
@@ -973,6 +1010,26 @@ skip_wrt_protect:
973 WRT_REG_DWORD(&reg->ctrl_status, 1010 WRT_REG_DWORD(&reg->ctrl_status,
974 RD_REG_DWORD(&reg->ctrl_status) & ~CSRX_FLASH_ENABLE); 1011 RD_REG_DWORD(&reg->ctrl_status) & ~CSRX_FLASH_ENABLE);
975 RD_REG_DWORD(&reg->ctrl_status); /* PCI Posting. */ 1012 RD_REG_DWORD(&reg->ctrl_status); /* PCI Posting. */
1013
1014 return QLA_SUCCESS;
1015}
1016
1017static int
1018qla24xx_erase_sector(scsi_qla_host_t *vha, uint32_t fdata)
1019{
1020 struct qla_hw_data *ha = vha->hw;
1021 uint32_t start, finish;
1022
1023 if (ha->flags.fac_supported) {
1024 start = fdata >> 2;
1025 finish = start + (ha->fdt_block_size >> 2) - 1;
1026 return qla81xx_fac_erase_sector(vha, flash_data_addr(ha,
1027 start), flash_data_addr(ha, finish));
1028 }
1029
1030 return qla24xx_write_flash_dword(ha, ha->fdt_erase_cmd,
1031 (fdata & 0xff00) | ((fdata << 16) & 0xff0000) |
1032 ((fdata >> 16) & 0xff));
976} 1033}
977 1034
978static int 1035static int
@@ -987,8 +1044,6 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
987 void *optrom = NULL; 1044 void *optrom = NULL;
988 struct qla_hw_data *ha = vha->hw; 1045 struct qla_hw_data *ha = vha->hw;
989 1046
990 ret = QLA_SUCCESS;
991
992 /* Prepare burst-capable write on supported ISPs. */ 1047 /* Prepare burst-capable write on supported ISPs. */
993 if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && !(faddr & 0xfff) && 1048 if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && !(faddr & 0xfff) &&
994 dwords > OPTROM_BURST_DWORDS) { 1049 dwords > OPTROM_BURST_DWORDS) {
@@ -1004,7 +1059,12 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
1004 rest_addr = (ha->fdt_block_size >> 2) - 1; 1059 rest_addr = (ha->fdt_block_size >> 2) - 1;
1005 sec_mask = ~rest_addr; 1060 sec_mask = ~rest_addr;
1006 1061
1007 qla24xx_unprotect_flash(ha); 1062 ret = qla24xx_unprotect_flash(vha);
1063 if (ret != QLA_SUCCESS) {
1064 qla_printk(KERN_WARNING, ha,
1065 "Unable to unprotect flash for update.\n");
1066 goto done;
1067 }
1008 1068
1009 for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) { 1069 for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) {
1010 fdata = (faddr & sec_mask) << 2; 1070 fdata = (faddr & sec_mask) << 2;
@@ -1017,9 +1077,7 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
1017 ha->fdt_unprotect_sec_cmd, 1077 ha->fdt_unprotect_sec_cmd,
1018 (fdata & 0xff00) | ((fdata << 16) & 1078 (fdata & 0xff00) | ((fdata << 16) &
1019 0xff0000) | ((fdata >> 16) & 0xff)); 1079 0xff0000) | ((fdata >> 16) & 0xff));
1020 ret = qla24xx_write_flash_dword(ha, ha->fdt_erase_cmd, 1080 ret = qla24xx_erase_sector(vha, fdata);
1021 (fdata & 0xff00) |((fdata << 16) &
1022 0xff0000) | ((fdata >> 16) & 0xff));
1023 if (ret != QLA_SUCCESS) { 1081 if (ret != QLA_SUCCESS) {
1024 DEBUG9(qla_printk("Unable to erase sector: " 1082 DEBUG9(qla_printk("Unable to erase sector: "
1025 "address=%x.\n", faddr)); 1083 "address=%x.\n", faddr));
@@ -1073,8 +1131,11 @@ qla24xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
1073 0xff0000) | ((fdata >> 16) & 0xff)); 1131 0xff0000) | ((fdata >> 16) & 0xff));
1074 } 1132 }
1075 1133
1076 qla24xx_protect_flash(ha); 1134 ret = qla24xx_protect_flash(vha);
1077 1135 if (ret != QLA_SUCCESS)
1136 qla_printk(KERN_WARNING, ha,
1137 "Unable to protect flash after update.\n");
1138done:
1078 if (optrom) 1139 if (optrom)
1079 dma_free_coherent(&ha->pdev->dev, 1140 dma_free_coherent(&ha->pdev->dev,
1080 OPTROM_BURST_SIZE, optrom, optrom_dma); 1141 OPTROM_BURST_SIZE, optrom, optrom_dma);
@@ -1915,7 +1976,7 @@ qla2x00_resume_hba(struct scsi_qla_host *vha)
1915 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); 1976 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags);
1916 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 1977 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
1917 qla2xxx_wake_dpc(vha); 1978 qla2xxx_wake_dpc(vha);
1918 qla2x00_wait_for_hba_online(vha); 1979 qla2x00_wait_for_chip_reset(vha);
1919 scsi_unblock_requests(vha->host); 1980 scsi_unblock_requests(vha->host);
1920} 1981}
1921 1982
@@ -2206,11 +2267,7 @@ qla24xx_write_optrom_data(struct scsi_qla_host *vha, uint8_t *buf,
2206 rval = qla24xx_write_flash_data(vha, (uint32_t *)buf, offset >> 2, 2267 rval = qla24xx_write_flash_data(vha, (uint32_t *)buf, offset >> 2,
2207 length >> 2); 2268 length >> 2);
2208 2269
2209 /* Resume HBA -- RISC reset needed. */
2210 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); 2270 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags);
2211 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
2212 qla2xxx_wake_dpc(vha);
2213 qla2x00_wait_for_hba_online(vha);
2214 scsi_unblock_requests(vha->host); 2271 scsi_unblock_requests(vha->host);
2215 2272
2216 return rval; 2273 return rval;
@@ -2518,7 +2575,7 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf)
2518 dcode = mbuf; 2575 dcode = mbuf;
2519 2576
2520 /* Begin with first PCI expansion ROM header. */ 2577 /* Begin with first PCI expansion ROM header. */
2521 pcihdr = ha->flt_region_boot; 2578 pcihdr = ha->flt_region_boot << 2;
2522 last_image = 1; 2579 last_image = 1;
2523 do { 2580 do {
2524 /* Verify PCI expansion ROM header. */ 2581 /* Verify PCI expansion ROM header. */
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index a772eab2f0ea..19d1afc3a343 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,9 +7,9 @@
7/* 7/*
8 * Driver version 8 * Driver version
9 */ 9 */
10#define QLA2XXX_VERSION "8.03.00-k4" 10#define QLA2XXX_VERSION "8.03.01-k1"
11 11
12#define QLA_DRIVER_MAJOR_VER 8 12#define QLA_DRIVER_MAJOR_VER 8
13#define QLA_DRIVER_MINOR_VER 3 13#define QLA_DRIVER_MINOR_VER 3
14#define QLA_DRIVER_PATCH_VER 0 14#define QLA_DRIVER_PATCH_VER 1
15#define QLA_DRIVER_BETA_VER 0 15#define QLA_DRIVER_BETA_VER 0
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index eb3a414b189a..ec9da6ce8489 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -1369,16 +1369,16 @@ static void qla4xxx_config_dma_addressing(struct scsi_qla_host *ha)
1369 int retval; 1369 int retval;
1370 1370
1371 /* Update our PCI device dma_mask for full 64 bit mask */ 1371 /* Update our PCI device dma_mask for full 64 bit mask */
1372 if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK) == 0) { 1372 if (pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(64)) == 0) {
1373 if (pci_set_consistent_dma_mask(ha->pdev, DMA_64BIT_MASK)) { 1373 if (pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) {
1374 dev_dbg(&ha->pdev->dev, 1374 dev_dbg(&ha->pdev->dev,
1375 "Failed to set 64 bit PCI consistent mask; " 1375 "Failed to set 64 bit PCI consistent mask; "
1376 "using 32 bit.\n"); 1376 "using 32 bit.\n");
1377 retval = pci_set_consistent_dma_mask(ha->pdev, 1377 retval = pci_set_consistent_dma_mask(ha->pdev,
1378 DMA_32BIT_MASK); 1378 DMA_BIT_MASK(32));
1379 } 1379 }
1380 } else 1380 } else
1381 retval = pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK); 1381 retval = pci_set_dma_mask(ha->pdev, DMA_BIT_MASK(32));
1382} 1382}
1383 1383
1384static int qla4xxx_slave_alloc(struct scsi_device *sdev) 1384static int qla4xxx_slave_alloc(struct scsi_device *sdev)
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index 69d6ad862b60..fa34b92850a6 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -28,6 +28,7 @@
28#include <linux/dma-mapping.h> 28#include <linux/dma-mapping.h>
29#include <linux/of.h> 29#include <linux/of.h>
30#include <linux/of_device.h> 30#include <linux/of_device.h>
31#include <linux/firmware.h>
31 32
32#include <asm/byteorder.h> 33#include <asm/byteorder.h>
33 34
@@ -53,8 +54,6 @@
53 54
54#define DEFAULT_LOOP_COUNT 10000 55#define DEFAULT_LOOP_COUNT 10000
55 56
56#include "qlogicpti_asm.c"
57
58static struct qlogicpti *qptichain = NULL; 57static struct qlogicpti *qptichain = NULL;
59static DEFINE_SPINLOCK(qptichain_lock); 58static DEFINE_SPINLOCK(qptichain_lock);
60 59
@@ -465,16 +464,32 @@ static int qlogicpti_reset_hardware(struct Scsi_Host *host)
465 464
466static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti) 465static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
467{ 466{
467 const struct firmware *fw;
468 const char fwname[] = "qlogic/isp1000.bin";
469 const __le16 *fw_data;
468 struct Scsi_Host *host = qpti->qhost; 470 struct Scsi_Host *host = qpti->qhost;
469 unsigned short csum = 0; 471 unsigned short csum = 0;
470 unsigned short param[6]; 472 unsigned short param[6];
471 unsigned short *risc_code, risc_code_addr, risc_code_length; 473 unsigned short risc_code_addr, risc_code_length;
474 int err;
472 unsigned long flags; 475 unsigned long flags;
473 int i, timeout; 476 int i, timeout;
474 477
475 risc_code = &sbus_risc_code01[0]; 478 err = request_firmware(&fw, fwname, &qpti->op->dev);
479 if (err) {
480 printk(KERN_ERR "Failed to load image \"%s\" err %d\n",
481 fwname, err);
482 return err;
483 }
484 if (fw->size % 2) {
485 printk(KERN_ERR "Bogus length %zu in image \"%s\"\n",
486 fw->size, fwname);
487 err = -EINVAL;
488 goto outfirm;
489 }
490 fw_data = (const __le16 *)&fw->data[0];
476 risc_code_addr = 0x1000; /* all f/w modules load at 0x1000 */ 491 risc_code_addr = 0x1000; /* all f/w modules load at 0x1000 */
477 risc_code_length = sbus_risc_code_length01; 492 risc_code_length = fw->size / 2;
478 493
479 spin_lock_irqsave(host->host_lock, flags); 494 spin_lock_irqsave(host->host_lock, flags);
480 495
@@ -482,12 +497,12 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
482 * afterwards via the mailbox commands. 497 * afterwards via the mailbox commands.
483 */ 498 */
484 for (i = 0; i < risc_code_length; i++) 499 for (i = 0; i < risc_code_length; i++)
485 csum += risc_code[i]; 500 csum += __le16_to_cpu(fw_data[i]);
486 if (csum) { 501 if (csum) {
487 spin_unlock_irqrestore(host->host_lock, flags);
488 printk(KERN_EMERG "qlogicpti%d: Aieee, firmware checksum failed!", 502 printk(KERN_EMERG "qlogicpti%d: Aieee, firmware checksum failed!",
489 qpti->qpti_id); 503 qpti->qpti_id);
490 return 1; 504 err = 1;
505 goto out;
491 } 506 }
492 sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); 507 sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL);
493 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); 508 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL);
@@ -496,9 +511,9 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
496 while (--timeout && (sbus_readw(qpti->qregs + SBUS_CTRL) & SBUS_CTRL_RESET)) 511 while (--timeout && (sbus_readw(qpti->qregs + SBUS_CTRL) & SBUS_CTRL_RESET))
497 udelay(20); 512 udelay(20);
498 if (!timeout) { 513 if (!timeout) {
499 spin_unlock_irqrestore(host->host_lock, flags);
500 printk(KERN_EMERG "qlogicpti%d: Cannot reset the ISP.", qpti->qpti_id); 514 printk(KERN_EMERG "qlogicpti%d: Cannot reset the ISP.", qpti->qpti_id);
501 return 1; 515 err = 1;
516 goto out;
502 } 517 }
503 518
504 sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); 519 sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL);
@@ -536,21 +551,21 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
536 if (qlogicpti_mbox_command(qpti, param, 1)) { 551 if (qlogicpti_mbox_command(qpti, param, 1)) {
537 printk(KERN_EMERG "qlogicpti%d: Cannot stop firmware for reload.\n", 552 printk(KERN_EMERG "qlogicpti%d: Cannot stop firmware for reload.\n",
538 qpti->qpti_id); 553 qpti->qpti_id);
539 spin_unlock_irqrestore(host->host_lock, flags); 554 err = 1;
540 return 1; 555 goto out;
541 } 556 }
542 557
543 /* Load it up.. */ 558 /* Load it up.. */
544 for (i = 0; i < risc_code_length; i++) { 559 for (i = 0; i < risc_code_length; i++) {
545 param[0] = MBOX_WRITE_RAM_WORD; 560 param[0] = MBOX_WRITE_RAM_WORD;
546 param[1] = risc_code_addr + i; 561 param[1] = risc_code_addr + i;
547 param[2] = risc_code[i]; 562 param[2] = __le16_to_cpu(fw_data[i]);
548 if (qlogicpti_mbox_command(qpti, param, 1) || 563 if (qlogicpti_mbox_command(qpti, param, 1) ||
549 param[0] != MBOX_COMMAND_COMPLETE) { 564 param[0] != MBOX_COMMAND_COMPLETE) {
550 printk("qlogicpti%d: Firmware dload failed, I'm bolixed!\n", 565 printk("qlogicpti%d: Firmware dload failed, I'm bolixed!\n",
551 qpti->qpti_id); 566 qpti->qpti_id);
552 spin_unlock_irqrestore(host->host_lock, flags); 567 err = 1;
553 return 1; 568 goto out;
554 } 569 }
555 } 570 }
556 571
@@ -569,8 +584,8 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
569 (param[0] != MBOX_COMMAND_COMPLETE)) { 584 (param[0] != MBOX_COMMAND_COMPLETE)) {
570 printk(KERN_EMERG "qlogicpti%d: New firmware csum failure!\n", 585 printk(KERN_EMERG "qlogicpti%d: New firmware csum failure!\n",
571 qpti->qpti_id); 586 qpti->qpti_id);
572 spin_unlock_irqrestore(host->host_lock, flags); 587 err = 1;
573 return 1; 588 goto out;
574 } 589 }
575 590
576 /* Start using newly downloaded firmware. */ 591 /* Start using newly downloaded firmware. */
@@ -583,8 +598,8 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
583 (param[0] != MBOX_COMMAND_COMPLETE)) { 598 (param[0] != MBOX_COMMAND_COMPLETE)) {
584 printk(KERN_EMERG "qlogicpti%d: AboutFirmware cmd fails.\n", 599 printk(KERN_EMERG "qlogicpti%d: AboutFirmware cmd fails.\n",
585 qpti->qpti_id); 600 qpti->qpti_id);
586 spin_unlock_irqrestore(host->host_lock, flags); 601 err = 1;
587 return 1; 602 goto out;
588 } 603 }
589 604
590 /* Snag the major and minor revisions from the result. */ 605 /* Snag the major and minor revisions from the result. */
@@ -599,8 +614,8 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
599 (param[0] != MBOX_COMMAND_COMPLETE)) { 614 (param[0] != MBOX_COMMAND_COMPLETE)) {
600 printk(KERN_EMERG "qlogicpti%d: could not set clock rate.\n", 615 printk(KERN_EMERG "qlogicpti%d: could not set clock rate.\n",
601 qpti->qpti_id); 616 qpti->qpti_id);
602 spin_unlock_irqrestore(host->host_lock, flags); 617 err = 1;
603 return 1; 618 goto out;
604 } 619 }
605 620
606 if (qpti->is_pti != 0) { 621 if (qpti->is_pti != 0) {
@@ -616,8 +631,11 @@ static int __devinit qlogicpti_load_firmware(struct qlogicpti *qpti)
616 qlogicpti_mbox_command(qpti, param, 1); 631 qlogicpti_mbox_command(qpti, param, 1);
617 } 632 }
618 633
634out:
619 spin_unlock_irqrestore(host->host_lock, flags); 635 spin_unlock_irqrestore(host->host_lock, flags);
620 return 0; 636outfirm:
637 release_firmware(fw);
638 return err;
621} 639}
622 640
623static int qlogicpti_verify_tmon(struct qlogicpti *qpti) 641static int qlogicpti_verify_tmon(struct qlogicpti *qpti)
@@ -1458,6 +1476,7 @@ MODULE_DESCRIPTION("QlogicISP SBUS driver");
1458MODULE_AUTHOR("David S. Miller (davem@davemloft.net)"); 1476MODULE_AUTHOR("David S. Miller (davem@davemloft.net)");
1459MODULE_LICENSE("GPL"); 1477MODULE_LICENSE("GPL");
1460MODULE_VERSION("2.1"); 1478MODULE_VERSION("2.1");
1479MODULE_FIRMWARE("qlogic/isp1000.bin");
1461 1480
1462module_init(qpti_init); 1481module_init(qpti_init);
1463module_exit(qpti_exit); 1482module_exit(qpti_exit);
diff --git a/drivers/scsi/qlogicpti_asm.c b/drivers/scsi/qlogicpti_asm.c
deleted file mode 100644
index 19aa84f46018..000000000000
--- a/drivers/scsi/qlogicpti_asm.c
+++ /dev/null
@@ -1,1160 +0,0 @@
1/* Version 1.31.00 ISP1000 Initiator RISC firmware */
2unsigned short sbus_risc_code01[] __devinitdata = {
3 0x0078, 0x1030, 0x0000, 0x2419, 0x0000, 0x12ff, 0x2043, 0x4f50,
4 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932,
5 0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749,
6 0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049,
7 0x5350, 0x3130, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520,
8 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3331, 0x2020,
9 0x20b9, 0x1212, 0x20c1, 0x0008, 0x2071, 0x0010, 0x70c3, 0x0004,
10 0x20c9, 0x3fff, 0x2089, 0x10c8, 0x70c7, 0x4953, 0x70cb, 0x5020,
11 0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2031, 0x0030,
12 0x2079, 0x3500, 0x7863, 0x0000, 0x2fa0, 0x2009, 0x0327, 0x2011,
13 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x1051, 0x789b,
14 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0bb8, 0x2069,
15 0x3540, 0x00a8, 0x106a, 0x681b, 0x003c, 0x2009, 0x1313, 0x21b8,
16 0x0078, 0x106c, 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa,
17 0x680f, 0x0008, 0x6813, 0x0005, 0x681f, 0x0000, 0x6823, 0x0006,
18 0x6817, 0x0008, 0x6827, 0x0000, 0x2069, 0x3600, 0x2011, 0x0020,
19 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f, 0x0019, 0x6803, 0xdd00,
20 0x6807, 0x001a, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004,
21 0x8109, 0x00c0, 0x1082, 0x2069, 0x3680, 0x20a9, 0x0080, 0x6837,
22 0x0000, 0x680b, 0x0040, 0x6817, 0x0100, 0x681f, 0x0064, 0xade8,
23 0x0010, 0x0070, 0x10a5, 0x0078, 0x1097, 0x1078, 0x1a38, 0x1078,
24 0x2f3a, 0x1078, 0x1681, 0x1078, 0x33ba, 0x3200, 0xa085, 0x000d,
25 0x2090, 0x70c3, 0x0000, 0x0090, 0x10bc, 0x70c0, 0xa086, 0x0002,
26 0x00c0, 0x10bc, 0x1078, 0x11ba, 0x1078, 0x10ec, 0x1078, 0x1817,
27 0x1078, 0x19a8, 0x1078, 0x327d, 0x1078, 0x177d, 0x0078, 0x10bc,
28 0x10d0, 0x10d2, 0x1bc3, 0x1bc3, 0x2f98, 0x2f98, 0x1bc3, 0x1bc3,
29 0x0078, 0x10d0, 0x0078, 0x10d2, 0x0078, 0x10d4, 0x0078, 0x10d6,
30 0x7008, 0x800c, 0x00c8, 0x10e7, 0x7007, 0x0002, 0xa08c, 0x000c,
31 0x00c0, 0x10e8, 0x8004, 0x8004, 0x00c8, 0x10e7, 0x087a, 0x097a,
32 0x70c3, 0x4002, 0x0078, 0x11bd, 0x7814, 0xa005, 0x00c0, 0x10f4,
33 0x0010, 0x1130, 0x0078, 0x112f, 0x2009, 0x3568, 0x2104, 0xa005,
34 0x00c0, 0x112f, 0x7814, 0xa086, 0x0001, 0x00c0, 0x1101, 0x1078,
35 0x1536, 0x7817, 0x0000, 0x2009, 0x356f, 0x2104, 0xa065, 0x0040,
36 0x111d, 0x2009, 0x356a, 0x211c, 0x8108, 0x2114, 0x8108, 0x2104,
37 0xa210, 0xa399, 0x0000, 0x2009, 0x001c, 0x6083, 0x0103, 0x1078,
38 0x1611, 0x00c0, 0x1129, 0x1078, 0x1678, 0x2009, 0x356f, 0x200b,
39 0x0000, 0x2009, 0x3569, 0x2104, 0x200b, 0x0000, 0xa005, 0x0040,
40 0x112d, 0x2001, 0x4005, 0x0078, 0x11bc, 0x0078, 0x11ba, 0x007c,
41 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x0040, 0x1138, 0x007c,
42 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000,
43 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1188, 0x2038, 0x0079, 0x1148,
44 0x11ba, 0x1205, 0x11d3, 0x1205, 0x1256, 0x1256, 0x11ca, 0x1590,
45 0x1261, 0x11c6, 0x11d7, 0x11d9, 0x11db, 0x11dd, 0x1595, 0x11c6,
46 0x1267, 0x1283, 0x1544, 0x158a, 0x11df, 0x146b, 0x148d, 0x14a7,
47 0x14d0, 0x1424, 0x1432, 0x1446, 0x145a, 0x12ef, 0x11c6, 0x129f,
48 0x12a6, 0x12ab, 0x12b0, 0x12b6, 0x12bb, 0x12c0, 0x12c5, 0x12ca,
49 0x12ce, 0x12e3, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x12fb,
50 0x1304, 0x1313, 0x1339, 0x1343, 0x134a, 0x1370, 0x137f, 0x138e,
51 0x13a0, 0x1409, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x1419,
52 0xa0bc, 0xffa0, 0x00c0, 0x11c6, 0x2038, 0xa084, 0x001f, 0x0079,
53 0x1191, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6,
54 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6,
55 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6, 0x11c6,
56 0x11c6, 0x11c6, 0x11c6, 0x15ed, 0x15f7, 0x15fb, 0x1609, 0x11c6,
57 0x11c6, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x11bc, 0x73ce,
58 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x2061, 0x0000, 0x601b,
59 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, 0x70c3, 0x4001,
60 0x0078, 0x11bd, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005,
61 0x53a3, 0x0078, 0x11ba, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078,
62 0x11ba, 0x0078, 0x11ba, 0x0078, 0x11ba, 0x0078, 0x11ba, 0x2091,
63 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf,
64 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b,
65 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051,
66 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091,
67 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x71d0, 0x72c8, 0x73cc,
68 0x70c4, 0x20a0, 0x2098, 0x2031, 0x0030, 0x81ff, 0x0040, 0x11ba,
69 0x7007, 0x0004, 0x731a, 0x721e, 0x2051, 0x0012, 0x2049, 0x1234,
70 0x2041, 0x11ba, 0x7003, 0x0002, 0xa786, 0x0001, 0x00c0, 0x1226,
71 0x2049, 0x1242, 0x2041, 0x124e, 0x7003, 0x0003, 0x7017, 0x0000,
72 0x810b, 0x7112, 0x00c8, 0x122e, 0x7017, 0x0001, 0x7007, 0x0001,
73 0xa786, 0x0001, 0x0040, 0x1242, 0x700c, 0xa084, 0x007f, 0x8004,
74 0x2009, 0x0020, 0xa102, 0x0942, 0x094a, 0x20a8, 0x26a0, 0x53a6,
75 0x0078, 0x10d8, 0x700c, 0xa084, 0x007f, 0x0040, 0x1242, 0x80ac,
76 0x0048, 0x1242, 0x2698, 0x53a5, 0x0078, 0x10d8, 0x700c, 0xa084,
77 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x11ba, 0x71c4, 0x70c8,
78 0x2114, 0xa79e, 0x0004, 0x00c0, 0x125e, 0x200a, 0x72ca, 0x0078,
79 0x11b9, 0x70c7, 0x0001, 0x70cb, 0x001f, 0x0078, 0x11ba, 0x70c4,
80 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005,
81 0x0040, 0x127d, 0x8001, 0x7872, 0x7a7a, 0x7b7e, 0x7c76, 0x7898,
82 0xa084, 0xfffc, 0x789a, 0x0078, 0x1281, 0x7898, 0xa085, 0x0001,
83 0x789a, 0x0078, 0x11ba, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6,
84 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x1299, 0x8001, 0x7886,
85 0x7a8e, 0x7b92, 0x7c8a, 0x7898, 0xa084, 0xfcff, 0x789a, 0x0078,
86 0x129d, 0x7898, 0xa085, 0x0100, 0x789a, 0x0078, 0x11ba, 0x2009,
87 0x3559, 0x210c, 0x2011, 0x0410, 0x0078, 0x11b8, 0x2009, 0x3541,
88 0x210c, 0x0078, 0x11b9, 0x2009, 0x3542, 0x210c, 0x0078, 0x11b9,
89 0x2061, 0x3540, 0x610c, 0x6210, 0x0078, 0x11b8, 0x2009, 0x3545,
90 0x210c, 0x0078, 0x11b9, 0x2009, 0x3546, 0x210c, 0x0078, 0x11b9,
91 0x2009, 0x3547, 0x210c, 0x0078, 0x11b9, 0x2009, 0x3548, 0x210c,
92 0x0078, 0x11b9, 0x7908, 0x7a0c, 0x0078, 0x11b8, 0x71c4, 0x8107,
93 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3600, 0x6a00,
94 0x6804, 0xa084, 0x0008, 0x0040, 0x12e0, 0x6b08, 0x0078, 0x12e1,
95 0x6b0c, 0x0078, 0x11b7, 0x77c4, 0x1078, 0x1692, 0x2091, 0x8000,
96 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x11b7, 0x77c4,
97 0x1078, 0x1692, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091,
98 0x8001, 0x0078, 0x11b7, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x11b2,
99 0x1078, 0x1abc, 0x0078, 0x11b7, 0x71c4, 0xa182, 0x0010, 0x00c8,
100 0x11b2, 0x2011, 0x3541, 0x2204, 0x007e, 0x2112, 0x1078, 0x1a75,
101 0x017f, 0x0078, 0x11b9, 0x71c4, 0x2011, 0x1331, 0x20a9, 0x0008,
102 0x2204, 0xa106, 0x0040, 0x1323, 0x8210, 0x0070, 0x1321, 0x0078,
103 0x1318, 0x0078, 0x11b2, 0xa292, 0x1331, 0x027e, 0x2011, 0x3542,
104 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x1a81, 0x017f, 0x0078,
105 0x11b9, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032,
106 0x004b, 0x2061, 0x3540, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8,
107 0x6012, 0x0078, 0x11b8, 0x2061, 0x3540, 0x6114, 0x70c4, 0x6016,
108 0x0078, 0x11b9, 0x71c4, 0x2011, 0x0004, 0x2019, 0x1212, 0xa186,
109 0x0028, 0x0040, 0x1363, 0x2011, 0x0005, 0x2019, 0x1212, 0xa186,
110 0x0032, 0x0040, 0x1363, 0x2011, 0x0006, 0x2019, 0x1313, 0xa186,
111 0x003c, 0x00c0, 0x11b2, 0x2061, 0x3540, 0x6018, 0x007e, 0x611a,
112 0x23b8, 0x1078, 0x1a92, 0x1078, 0x33ba, 0x017f, 0x0078, 0x11b9,
113 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x11b2, 0x2011, 0x3547, 0x2204,
114 0x2112, 0x007e, 0x1078, 0x1ab4, 0x017f, 0x0078, 0x11b9, 0x71c4,
115 0xa182, 0x0010, 0x00c8, 0x11b2, 0x2011, 0x3548, 0x2204, 0x007e,
116 0x2112, 0x1078, 0x1aa3, 0x017f, 0x0078, 0x11b9, 0x71c4, 0x72c8,
117 0xa184, 0xfffd, 0x00c0, 0x11b1, 0xa284, 0xfffd, 0x00c0, 0x11b1,
118 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x11b8,
119 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
120 0x3600, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e, 0xa226, 0x0040,
121 0x13cf, 0x6a02, 0xa484, 0x2000, 0x0040, 0x13b8, 0xa39d, 0x0010,
122 0xa484, 0x1000, 0x0040, 0x13be, 0xa39d, 0x0008, 0xa484, 0x4000,
123 0x0040, 0x13cf, 0x810f, 0xa284, 0x4000, 0x0040, 0x13cb, 0x1078,
124 0x1ad6, 0x0078, 0x13cf, 0x1078, 0x1ac8, 0x0078, 0x13cf, 0x72cc,
125 0x82ff, 0x0040, 0x1401, 0x6808, 0xa206, 0x0040, 0x1401, 0xa2a4,
126 0x00ff, 0x2061, 0x3540, 0x6118, 0xa186, 0x0028, 0x0040, 0x13e8,
127 0xa186, 0x0032, 0x0040, 0x13ee, 0xa186, 0x003c, 0x0040, 0x13f4,
128 0xa482, 0x0064, 0x0048, 0x13fe, 0x0078, 0x13f8, 0xa482, 0x0050,
129 0x0048, 0x13fe, 0x0078, 0x13f8, 0xa482, 0x0043, 0x0048, 0x13fe,
130 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x11b3, 0x6a0a, 0xa39d,
131 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078,
132 0x11b7, 0x77c4, 0x1078, 0x1692, 0x2091, 0x8000, 0x6a14, 0x6b1c,
133 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078,
134 0x11b7, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x11b2,
135 0x1078, 0x1ae4, 0x0078, 0x11b7, 0x77c4, 0x1078, 0x1692, 0x2091,
136 0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708,
137 0x0078, 0x11b8, 0x77c4, 0x1078, 0x1692, 0x2091, 0x8000, 0x6a08,
138 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1441, 0x1078,
139 0x1a19, 0x2091, 0x8001, 0x2708, 0x0078, 0x11b8, 0x77c4, 0x1078,
140 0x1692, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804,
141 0xa005, 0x0040, 0x1455, 0x1078, 0x1a19, 0x2091, 0x8001, 0x2708,
142 0x0078, 0x11b8, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051,
143 0x0020, 0x2091, 0x8000, 0x1078, 0x169f, 0x2091, 0x8001, 0x2708,
144 0x6a08, 0x0078, 0x11b8, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca,
145 0x73ce, 0x1078, 0x1718, 0x00c0, 0x1489, 0x6818, 0xa005, 0x0040,
146 0x1483, 0x2708, 0x1078, 0x1af4, 0x00c0, 0x1483, 0x7817, 0xffff,
147 0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078,
148 0x11bc, 0x2091, 0x8001, 0x0078, 0x11ba, 0x77c4, 0x77c6, 0x2041,
149 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
150 0x169f, 0x2061, 0x3540, 0x60a3, 0x0003, 0x67b6, 0x60a7, 0x0000,
151 0x7817, 0xffff, 0x2091, 0x8001, 0x1078, 0x1a19, 0x007c, 0x77c8,
152 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061,
153 0x3540, 0x60a3, 0x0002, 0x60a7, 0x0000, 0x67b6, 0x7817, 0xffff,
154 0x1078, 0x1a19, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0004,
155 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x169f, 0x70c8, 0x6836,
156 0x8738, 0xa784, 0x0007, 0x00c0, 0x14c4, 0x2091, 0x8001, 0x007c,
157 0x7898, 0xa084, 0x0003, 0x00c0, 0x14f4, 0x2039, 0x0000, 0x2041,
158 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x1692, 0x2091,
159 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784,
160 0x0007, 0x00c0, 0x14dd, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f,
161 0xa784, 0x0f00, 0x00c0, 0x14dd, 0x2091, 0x8000, 0x2069, 0x0100,
162 0x6830, 0xa084, 0x0040, 0x0040, 0x151d, 0x684b, 0x0004, 0x20a9,
163 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x150a, 0x0070, 0x150a,
164 0x0078, 0x1501, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084,
165 0x0001, 0x0040, 0x1517, 0x0070, 0x1517, 0x0078, 0x150e, 0x20a9,
166 0x00fa, 0x0070, 0x151d, 0x0078, 0x1519, 0x2079, 0x3500, 0x7817,
167 0x0001, 0x2061, 0x3540, 0x60a3, 0x0001, 0x60a7, 0x0000, 0x60c3,
168 0x000f, 0x7898, 0xa085, 0x0002, 0x789a, 0x6808, 0xa084, 0xfffd,
169 0x680a, 0x681b, 0x0046, 0x2091, 0x8001, 0x007c, 0x7898, 0xa084,
170 0xfffd, 0x789a, 0xa084, 0x0001, 0x00c0, 0x1540, 0x1078, 0x1760,
171 0x71c4, 0x71c6, 0x794a, 0x007c, 0x74c4, 0x73c8, 0x72cc, 0x74c6,
172 0x73ca, 0x72ce, 0x2079, 0x3500, 0x2009, 0x0040, 0x1078, 0x166f,
173 0x0040, 0x1586, 0x1078, 0x163f, 0x0040, 0x155a, 0x1078, 0x1678,
174 0x0078, 0x1586, 0x6010, 0x2091, 0x8001, 0x7817, 0xffff, 0x2009,
175 0x3568, 0x200b, 0x0005, 0x8108, 0x200b, 0x0000, 0x8108, 0x230a,
176 0x8108, 0x220a, 0x8108, 0x240a, 0x8108, 0x200a, 0x8108, 0x200b,
177 0x0000, 0x8108, 0x2c0a, 0xa02e, 0x2530, 0x0e7e, 0x1078, 0x2f13,
178 0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000, 0x60af,
179 0x0000, 0x2091, 0x8001, 0x1078, 0x1a19, 0x007c, 0x70c3, 0x4005,
180 0x0078, 0x11bd, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x11ba,
181 0x71c4, 0x71c6, 0x2168, 0x0078, 0x1597, 0x2069, 0x1000, 0x690c,
182 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1599, 0xa285,
183 0x0000, 0x00c0, 0x15a7, 0x70c3, 0x4000, 0x0078, 0x15a9, 0x70c3,
184 0x4003, 0x70ca, 0x0078, 0x11bd, 0x71c4, 0x72c8, 0x73cc, 0x2100,
185 0xa184, 0xfffc, 0x00c0, 0x11c6, 0x2100, 0x0079, 0x15b7, 0x15ce,
186 0x15e3, 0x15e5, 0x15e7, 0x70c3, 0x4003, 0x71ce, 0x72d2, 0x73d6,
187 0x0078, 0x15ca, 0x70c3, 0x4000, 0x70cf, 0x0000, 0x70d3, 0x0000,
188 0x70d7, 0x0000, 0x77c6, 0x71ca, 0x0078, 0x11ba, 0x2031, 0x15e9,
189 0x2624, 0x8630, 0x2412, 0x2204, 0xa446, 0x00c0, 0x15bb, 0xa484,
190 0xffff, 0x00c0, 0x15d0, 0x2031, 0x15e9, 0x8210, 0x8319, 0xa384,
191 0xffff, 0x00c0, 0x15d0, 0x0078, 0x15c2, 0x0078, 0x15c2, 0x0078,
192 0x15c2, 0x5555, 0xaaaa, 0xffff, 0x0000, 0x7960, 0x71c6, 0x71c4,
193 0xa182, 0x0003, 0x00c8, 0x11b2, 0x7962, 0x0078, 0x11ba, 0x7960,
194 0x71c6, 0x0078, 0x11ba, 0x7954, 0x71c6, 0x71c4, 0x7956, 0x7958,
195 0x71ca, 0x71c8, 0x795a, 0x795c, 0x71ce, 0x71cc, 0x795e, 0x0078,
196 0x11ba, 0x7954, 0x71c6, 0x7958, 0x71ca, 0x795c, 0x71ce, 0x0078,
197 0x11ba, 0x700c, 0xa084, 0x007f, 0x0040, 0x161d, 0x7007, 0x0004,
198 0x7004, 0xa084, 0x0004, 0x00c0, 0x1618, 0x7017, 0x0000, 0x7112,
199 0x721a, 0x731e, 0x8108, 0x810c, 0x81a9, 0x8c98, 0x20a1, 0x0030,
200 0x6080, 0x20a2, 0x53a6, 0x780c, 0xa085, 0x0000, 0x7002, 0x7007,
201 0x0001, 0x7108, 0x8104, 0x00c8, 0x1631, 0x7007, 0x0002, 0xa184,
202 0x000c, 0x710c, 0xa184, 0x0300, 0x7003, 0x0000, 0x007c, 0x700c,
203 0xa084, 0x007f, 0x0040, 0x164b, 0x7007, 0x0004, 0x7004, 0xa084,
204 0x0004, 0x00c0, 0x1646, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e,
205 0x2099, 0x0030, 0x8108, 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002,
206 0x7007, 0x0001, 0x7008, 0x800c, 0x00c8, 0x165a, 0x7007, 0x0002,
207 0xa08c, 0x000c, 0x00c0, 0x166c, 0x710c, 0xa184, 0x0300, 0x00c0,
208 0x166c, 0x2ca0, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x7850,
209 0xa065, 0x0040, 0x1677, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c,
210 0x0f7e, 0x2079, 0x3500, 0x7850, 0x2062, 0x2c00, 0x7852, 0x0f7f,
211 0x007c, 0x2011, 0x4000, 0x7a52, 0x2019, 0x0410, 0x8319, 0x0040,
212 0x168f, 0xa280, 0x002f, 0x2012, 0x2010, 0x0078, 0x1686, 0x2013,
213 0x0000, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, 0x0007, 0x8003,
214 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x3680, 0x007c, 0x1078,
215 0x1692, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef,
216 0xa80d, 0x690a, 0x2009, 0x354f, 0x210c, 0x6804, 0xa005, 0x0040,
217 0x16bc, 0xa116, 0x00c0, 0x16bc, 0x2060, 0x6000, 0x6806, 0x017e,
218 0x200b, 0x0000, 0x0078, 0x16bf, 0x2009, 0x0000, 0x017e, 0x6804,
219 0xa065, 0x0040, 0x16ce, 0x6000, 0x6806, 0x1078, 0x16df, 0x1078,
220 0x17cb, 0x6810, 0x8001, 0x6812, 0x00c0, 0x16bf, 0x017f, 0x6902,
221 0x6906, 0x007c, 0xa065, 0x0040, 0x16de, 0x6098, 0x609b, 0x0000,
222 0x2008, 0x1078, 0x1678, 0x2100, 0x0078, 0x16d2, 0x007c, 0x6003,
223 0x0103, 0x20a9, 0x001c, 0xac80, 0x0004, 0x20a0, 0x2001, 0x0000,
224 0x40a4, 0x6828, 0x6016, 0x682c, 0x601e, 0x007c, 0x0e7e, 0x2071,
225 0x3540, 0x7040, 0xa08c, 0x0080, 0x00c0, 0x16fc, 0xa088, 0x3580,
226 0x2d0a, 0x8000, 0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
227 0x3540, 0x2009, 0x3580, 0x7240, 0x8221, 0x8211, 0x0048, 0x1716,
228 0x2104, 0x8108, 0xad06, 0x00c0, 0x1705, 0x8119, 0x211e, 0x8108,
229 0x8318, 0x8211, 0x00c8, 0x170e, 0x7442, 0xa006, 0x0e7f, 0x007c,
230 0x1078, 0x1692, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040,
231 0x175f, 0x0078, 0x1729, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040,
232 0x175f, 0x600c, 0xa306, 0x00c0, 0x1723, 0x6008, 0xa206, 0x00c0,
233 0x1723, 0x2c28, 0x2001, 0x354f, 0x2004, 0xac06, 0x0040, 0x175f,
234 0x6804, 0xac06, 0x00c0, 0x1746, 0x6000, 0x2060, 0x6806, 0xa005,
235 0x00c0, 0x1746, 0x6803, 0x0000, 0x0078, 0x1750, 0x6400, 0x781c,
236 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1750, 0x2c00, 0x6802,
237 0x2560, 0x1078, 0x16df, 0x6017, 0x0005, 0x601f, 0x0020, 0x1078,
238 0x17cb, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff, 0xa005, 0x007c,
239 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
240 0x2091, 0x8000, 0x1078, 0x169f, 0x8738, 0xa784, 0x0007, 0x00c0,
241 0x176a, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00,
242 0x00c0, 0x176a, 0x2091, 0x8001, 0x007c, 0x2061, 0x0000, 0x6018,
243 0xa084, 0x0001, 0x00c0, 0x178a, 0x78ac, 0x78af, 0x0000, 0xa005,
244 0x00c0, 0x178b, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1791, 0x1078,
245 0x1ba5, 0x0079, 0x1793, 0x17a3, 0x17a5, 0x17ab, 0x17af, 0x17a3,
246 0x17b3, 0x17a3, 0x17a3, 0x17a3, 0x17a3, 0x17b9, 0x17bd, 0x17a3,
247 0x17a3, 0x17a3, 0x17a3, 0x1078, 0x1ba5, 0x1078, 0x1760, 0x2001,
248 0x8001, 0x0078, 0x17c3, 0x2001, 0x8003, 0x0078, 0x17c3, 0x2001,
249 0x8004, 0x0078, 0x17c3, 0x1078, 0x1760, 0x2001, 0x8006, 0x0078,
250 0x17c3, 0x2001, 0x800c, 0x0078, 0x17c3, 0x1078, 0x1760, 0x2001,
251 0x800d, 0x0078, 0x17c3, 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001,
252 0x2091, 0x4080, 0x007c, 0x2c04, 0x6082, 0x2c08, 0x2063, 0x0000,
253 0x7864, 0x8000, 0x7866, 0x7868, 0xa005, 0x796a, 0x0040, 0x17db,
254 0x2c02, 0x0078, 0x17dc, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x3500,
255 0x6883, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6064, 0x8000, 0x6066,
256 0x6068, 0xa005, 0x616a, 0x0040, 0x17f0, 0x2d02, 0x0078, 0x17f1,
257 0x616e, 0x0c7f, 0x007c, 0x1078, 0x1804, 0x0040, 0x1803, 0x0c7e,
258 0x6098, 0xa065, 0x0040, 0x17fe, 0x1078, 0x16d2, 0x0c7f, 0x609b,
259 0x0000, 0x1078, 0x1678, 0x007c, 0x786c, 0xa065, 0x0040, 0x1816,
260 0x2091, 0x8000, 0x7864, 0x8001, 0x7866, 0x2c04, 0x786e, 0xa005,
261 0x00c0, 0x1814, 0x786a, 0x8000, 0x2091, 0x8001, 0x007c, 0x7898,
262 0xa005, 0x00c0, 0x1865, 0x7974, 0x70d0, 0x0005, 0x0005, 0x72d0,
263 0xa206, 0x00c0, 0x181c, 0x2200, 0xa106, 0x00c0, 0x1833, 0x7804,
264 0xa005, 0x0040, 0x1865, 0x7807, 0x0000, 0x0068, 0x1865, 0x2091,
265 0x4080, 0x0078, 0x1865, 0x1078, 0x166f, 0x0040, 0x1865, 0x7a7c,
266 0x7b78, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0x2009,
267 0x0040, 0x1078, 0x163f, 0x0040, 0x185c, 0x1078, 0x1678, 0x7880,
268 0x8000, 0x7882, 0xa086, 0x0002, 0x00c0, 0x1865, 0x2091, 0x8000,
269 0x78af, 0x0002, 0x7883, 0x0000, 0x7898, 0xa085, 0x0003, 0x789a,
270 0x2091, 0x8001, 0x0078, 0x1865, 0x7883, 0x0000, 0x1078, 0x1992,
271 0x6000, 0xa084, 0x0007, 0x0079, 0x1866, 0x007c, 0x186e, 0x187d,
272 0x189d, 0x186e, 0x18af, 0x186e, 0x186e, 0x186e, 0x2039, 0x0400,
273 0x78a8, 0xa705, 0x78aa, 0x6004, 0xa705, 0x6006, 0x1078, 0x18ed,
274 0x6018, 0x78a6, 0x1078, 0x197a, 0x007c, 0x78a8, 0xa084, 0x0100,
275 0x0040, 0x1884, 0x0078, 0x186e, 0x78ab, 0x0000, 0x6000, 0x8007,
276 0xa084, 0x00ff, 0x789e, 0x8001, 0x609b, 0x0000, 0x0040, 0x189a,
277 0x1078, 0x18ed, 0x0040, 0x189a, 0x78a8, 0xa085, 0x0100, 0x78aa,
278 0x0078, 0x189c, 0x1078, 0x1911, 0x007c, 0x78a8, 0xa08c, 0x0e00,
279 0x00c0, 0x18a6, 0xa084, 0x0100, 0x00c0, 0x18a8, 0x0078, 0x186e,
280 0x1078, 0x18ed, 0x00c0, 0x18ae, 0x1078, 0x1911, 0x007c, 0x78a8,
281 0xa084, 0x0100, 0x0040, 0x18b6, 0x0078, 0x186e, 0x78ab, 0x0000,
282 0x6710, 0x20a9, 0x0001, 0x6014, 0xa084, 0x00ff, 0xa005, 0x0040,
283 0x18d3, 0xa7bc, 0xff00, 0x20a9, 0x0008, 0xa08e, 0x0001, 0x0040,
284 0x18d3, 0x2039, 0x0000, 0x20a9, 0x0080, 0xa08e, 0x0002, 0x0040,
285 0x18d3, 0x0078, 0x18ea, 0x1078, 0x1692, 0x2d00, 0x2091, 0x8000,
286 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a,
287 0x2d00, 0xa080, 0x0010, 0x2068, 0x2091, 0x8001, 0x0070, 0x18ea,
288 0x0078, 0x18d6, 0x1078, 0x1678, 0x007c, 0x78a0, 0xa06d, 0x00c0,
289 0x18f8, 0x2c00, 0x78a2, 0x78a6, 0x609b, 0x0000, 0x0078, 0x1904,
290 0x2c00, 0x689a, 0x609b, 0x0000, 0x78a2, 0x2d00, 0x6002, 0x78a4,
291 0xad06, 0x00c0, 0x1904, 0x6002, 0x789c, 0x8001, 0x789e, 0x00c0,
292 0x1910, 0x78a8, 0xa084, 0x0000, 0x78aa, 0x78a4, 0x2060, 0xa006,
293 0x007c, 0xa02e, 0x2530, 0x6118, 0xa184, 0x0060, 0x619e, 0x0040,
294 0x191d, 0x0e7e, 0x1078, 0x2f13, 0x0e7f, 0x6592, 0x65a2, 0x6696,
295 0x66a6, 0x60ab, 0x0000, 0x60af, 0x0000, 0x6710, 0x1078, 0x1692,
296 0x2091, 0x8000, 0x6808, 0xa084, 0x0001, 0x0040, 0x193f, 0x2091,
297 0x8001, 0x1078, 0x16df, 0x2091, 0x8000, 0x1078, 0x17cb, 0x2091,
298 0x8001, 0x78a3, 0x0000, 0x78a7, 0x0000, 0x0078, 0x1979, 0x6020,
299 0xa096, 0x0001, 0x00c0, 0x1946, 0x8000, 0x6022, 0x6a10, 0x6814,
300 0x2091, 0x8001, 0xa202, 0x0048, 0x1955, 0x0040, 0x1955, 0x2039,
301 0x0200, 0x1078, 0x197a, 0x0078, 0x1979, 0x2c08, 0x2091, 0x8000,
302 0x6800, 0xa065, 0x0040, 0x195d, 0x6102, 0x6902, 0x00c0, 0x1961,
303 0x6906, 0x2160, 0x6003, 0x0000, 0x6810, 0x8000, 0x6812, 0x2091,
304 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040, 0x1973, 0xa086, 0x0040,
305 0x680a, 0x1078, 0x16ee, 0x1078, 0x1a19, 0x78a7, 0x0000, 0x78a3,
306 0x0000, 0x007c, 0x6004, 0xa705, 0x6006, 0x2091, 0x8000, 0x1078,
307 0x17cb, 0x2091, 0x8001, 0x78a4, 0xa065, 0x0040, 0x198d, 0x6098,
308 0x78a6, 0x609b, 0x0000, 0x0078, 0x197d, 0x78a3, 0x0000, 0x78a7,
309 0x0000, 0x007c, 0x7970, 0x7874, 0x8000, 0xa10a, 0x00c8, 0x1999,
310 0xa006, 0x7876, 0x70d2, 0x7804, 0xa005, 0x0040, 0x19a7, 0x8001,
311 0x7806, 0x00c0, 0x19a7, 0x0068, 0x19a7, 0x2091, 0x4080, 0x007c,
312 0x0068, 0x19c2, 0x2029, 0x0000, 0x786c, 0xa065, 0x0040, 0x19bd,
313 0x1078, 0x19c3, 0x0040, 0x19bd, 0x057e, 0x1078, 0x19d9, 0x057f,
314 0x00c0, 0x19bd, 0x8528, 0x0078, 0x19ac, 0x85ff, 0x0040, 0x19c2,
315 0x2091, 0x4080, 0x007c, 0x7b84, 0x7988, 0x72d4, 0x0005, 0x0005,
316 0x70d4, 0xa206, 0x00c0, 0x19c5, 0x2200, 0xa102, 0x00c0, 0x19d3,
317 0x2300, 0xa005, 0x007c, 0x0048, 0x19d7, 0xa302, 0x007c, 0x8002,
318 0x007c, 0x1078, 0x1a0b, 0x2009, 0x001c, 0x6024, 0xa005, 0x0040,
319 0x19e3, 0x2009, 0x0040, 0x1078, 0x1611, 0x0040, 0x19fc, 0x7894,
320 0x8000, 0x7896, 0xa086, 0x0002, 0x00c0, 0x1a0a, 0x2091, 0x8000,
321 0x78af, 0x0003, 0x7897, 0x0000, 0x7898, 0xa085, 0x0300, 0x789a,
322 0x2091, 0x8001, 0x0078, 0x1a0a, 0x7897, 0x0000, 0x1078, 0x17f3,
323 0x7984, 0x7888, 0x8000, 0xa10a, 0x00c8, 0x1a07, 0xa006, 0x788a,
324 0x70d6, 0xa006, 0x007c, 0x8107, 0x8004, 0x8004, 0x7a90, 0x7b8c,
325 0xa210, 0xa399, 0x0000, 0x007c, 0x2009, 0x3568, 0x2091, 0x8000,
326 0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3540, 0x2091, 0x8000,
327 0x2104, 0xa086, 0x0000, 0x00c0, 0x1a34, 0x2009, 0x3512, 0x2104,
328 0xa005, 0x00c0, 0x1a34, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1a34,
329 0x0018, 0x1a34, 0x781b, 0x0044, 0x2091, 0x8001, 0x0f7f, 0x007c,
330 0x127e, 0x2091, 0x2300, 0x2071, 0x3540, 0x2079, 0x0100, 0x2019,
331 0x2dd8, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, 0x1a50, 0x789a,
332 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, 0x0078, 0x1a43,
333 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x0220,
334 0x0070, 0x1a5c, 0x0078, 0x1a54, 0x7003, 0x0000, 0x1078, 0x1b5b,
335 0x7004, 0xa084, 0x000f, 0xa085, 0x6280, 0x7806, 0x780f, 0x9200,
336 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0038, 0x7047, 0x357f,
337 0x7043, 0x0000, 0x127f, 0x2000, 0x007c, 0xa18c, 0x000f, 0x2011,
338 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x1b5b,
339 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x1a8a,
340 0x0078, 0x1a85, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105,
341 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070,
342 0x1a9b, 0x0078, 0x1a96, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f,
343 0xa205, 0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b,
344 0x0070, 0x1aac, 0x0078, 0x1aa7, 0xa18c, 0xf000, 0x2204, 0xa084,
345 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084,
346 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020,
347 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c,
348 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a,
349 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003,
350 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085,
351 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020,
352 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4,
353 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e,
354 0x6818, 0xa005, 0x0040, 0x1b39, 0x2061, 0x3f80, 0x1078, 0x1b41,
355 0x0040, 0x1b27, 0x20a9, 0x0000, 0x2061, 0x3e80, 0x0c7e, 0x1078,
356 0x1b41, 0x0040, 0x1b13, 0x0c7f, 0x8c60, 0x0070, 0x1b11, 0x0078,
357 0x1b06, 0x0078, 0x1b39, 0x007f, 0xa082, 0x3e80, 0x2071, 0x3540,
358 0x70ba, 0x601c, 0xa085, 0x0800, 0x601e, 0x71b6, 0x60a7, 0x0000,
359 0x2001, 0x0004, 0x70a2, 0x1078, 0x1a14, 0x0078, 0x1b35, 0x2071,
360 0x3540, 0x601c, 0xa085, 0x0800, 0x601e, 0x71b6, 0x60a7, 0x0000,
361 0x2001, 0x0006, 0x70a2, 0x1078, 0x1a14, 0x2001, 0x0000, 0x0078,
362 0x1b3b, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f,
363 0x007c, 0x2c04, 0xa005, 0x0040, 0x1b58, 0x2060, 0x600c, 0xa306,
364 0x00c0, 0x1b55, 0x6008, 0xa206, 0x00c0, 0x1b55, 0x6010, 0xa106,
365 0x00c0, 0x1b55, 0xa006, 0x0078, 0x1b5a, 0x6000, 0x0078, 0x1b42,
366 0xa085, 0x0001, 0x007c, 0x2011, 0x3541, 0x220c, 0xa18c, 0x000f,
367 0x2011, 0x013b, 0x2204, 0xa084, 0x0100, 0x0040, 0x1b6a, 0x2021,
368 0xff80, 0x2122, 0x007c, 0x0e7e, 0x68e4, 0xa08c, 0x0020, 0x0040,
369 0x1ba3, 0xa084, 0x0006, 0x00c0, 0x1ba3, 0x6010, 0x8007, 0xa084,
370 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, 0x3600, 0x7004, 0xa084,
371 0x000a, 0x00c0, 0x1ba3, 0x7108, 0xa194, 0xff00, 0x0040, 0x1ba3,
372 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x1b96, 0x2001,
373 0x0032, 0xa106, 0x0040, 0x1b9a, 0x0078, 0x1b9e, 0x2009, 0x0020,
374 0x0078, 0x1ba0, 0x2009, 0x003f, 0x0078, 0x1ba0, 0x2011, 0x0000,
375 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x1ba5, 0x007e,
376 0x2071, 0x0000, 0x7018, 0xa084, 0x0001, 0x00c0, 0x1baa, 0x007f,
377 0x2e08, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002,
378 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x007f, 0x2070,
379 0x007f, 0x0078, 0x1bc1, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300,
380 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0xa594, 0x003f, 0xa484, 0x4000,
381 0x0040, 0x1bd8, 0xa784, 0x007c, 0x00c0, 0x2d9c, 0x1078, 0x1ba5,
382 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x1be0, 0x1078, 0x1ba5,
383 0x8507, 0xa084, 0x000f, 0x0079, 0x1be5, 0x1fea, 0x209a, 0x20c0,
384 0x22e6, 0x256b, 0x25b3, 0x25ea, 0x2665, 0x26bf, 0x2744, 0x1c0b,
385 0x1bf5, 0x1e53, 0x1f1d, 0x254a, 0x1bf5, 0x1078, 0x1ba5, 0x0018,
386 0x1bc8, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7003,
387 0x0000, 0x703f, 0x0000, 0x7030, 0xa005, 0x0040, 0x1c09, 0x7033,
388 0x0000, 0x0018, 0x1bc8, 0x705c, 0xa005, 0x00c0, 0x1cb6, 0x70a0,
389 0xa084, 0x0007, 0x0079, 0x1c14, 0x1cd6, 0x1c1c, 0x1c2a, 0x1c4b,
390 0x1c71, 0x1c9d, 0x1c9b, 0x1c1c, 0x7808, 0xa084, 0xfffd, 0x780a,
391 0x2009, 0x0046, 0x1078, 0x2412, 0x00c0, 0x1c28, 0x7003, 0x0004,
392 0x0078, 0x1bf7, 0x1078, 0x2d5e, 0x00c0, 0x1c49, 0x70b4, 0x8007,
393 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b,
394 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078,
395 0x2410, 0x00c0, 0x1c49, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033,
396 0x3570, 0x0078, 0x1bf7, 0x1078, 0x2d5e, 0x00c0, 0x1c6f, 0x71b4,
397 0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x0007,
398 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab,
399 0x0002, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078, 0x2410, 0x00c0,
400 0x1c6f, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033, 0x3570, 0x0078,
401 0x1bf7, 0x1078, 0x2d5e, 0x00c0, 0x1c99, 0x71b4, 0x8107, 0x789b,
402 0x007e, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0,
403 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab, 0x000d, 0x789b,
404 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078,
405 0x2410, 0x00c0, 0x1c99, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033,
406 0x3570, 0x0078, 0x1bf7, 0x0078, 0x1c4b, 0x1078, 0x2d5e, 0x00c0,
407 0x1bf7, 0x70bc, 0x2068, 0x789b, 0x0010, 0x6f10, 0x1078, 0x2ca1,
408 0x2c50, 0x6810, 0xa084, 0x0007, 0xa085, 0x0080, 0x78aa, 0x6e18,
409 0x2041, 0x0001, 0x2001, 0x0004, 0x0078, 0x1dde, 0x1078, 0x2d5e,
410 0x00c0, 0x1bf7, 0x789b, 0x0010, 0x705c, 0x2068, 0x6f10, 0x1078,
411 0x2ca1, 0x2c50, 0x6008, 0xa085, 0x0010, 0x600a, 0x6810, 0xa084,
412 0x0007, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001,
413 0x1078, 0x2dc5, 0x2001, 0x0003, 0x0078, 0x1dc9, 0x0018, 0x1bc8,
414 0x7440, 0xa485, 0x0000, 0x0040, 0x1cf0, 0xa080, 0x3580, 0x2030,
415 0x7144, 0x8108, 0xa12a, 0x0048, 0x1ce7, 0x2009, 0x3580, 0x2164,
416 0x6504, 0x85ff, 0x00c0, 0x1cfd, 0x8421, 0x00c0, 0x1ce1, 0x7146,
417 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1bf7, 0x7640, 0xa6b0,
418 0x3580, 0x7144, 0x2600, 0x0078, 0x1cec, 0x7146, 0x2568, 0x2558,
419 0x753e, 0x2c50, 0x6034, 0xa085, 0x0000, 0x00c0, 0x1cfa, 0x6708,
420 0x7736, 0xa784, 0x013f, 0x0040, 0x1d2f, 0xa784, 0x0021, 0x00c0,
421 0x1cfa, 0xa784, 0x0002, 0x0040, 0x1d1c, 0xa784, 0x0004, 0x0040,
422 0x1cfa, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008, 0x00c0, 0x1cfa,
423 0xa784, 0x0010, 0x00c0, 0x1cfa, 0xa784, 0x0100, 0x0040, 0x1d2f,
424 0x6018, 0xa005, 0x00c0, 0x1cfa, 0xa7bc, 0xfeff, 0x670a, 0x681f,
425 0x0000, 0x6e18, 0xa684, 0x000e, 0x6118, 0x0040, 0x1d3f, 0x601c,
426 0xa102, 0x0048, 0x1d42, 0x0040, 0x1d42, 0x0078, 0x1cf6, 0x81ff,
427 0x00c0, 0x1cf6, 0xa784, 0x0080, 0x00c0, 0x1d48, 0x700c, 0x6022,
428 0xa7bc, 0xff7f, 0x670a, 0x6b10, 0x8307, 0xa084, 0x000f, 0x8003,
429 0x8003, 0x8003, 0xa080, 0x3600, 0x2060, 0x2048, 0x704a, 0x6000,
430 0x704e, 0x6004, 0x7052, 0x2a60, 0x0018, 0x1bc8, 0x789b, 0x0010,
431 0xa046, 0x1078, 0x2d5e, 0x00c0, 0x1bf7, 0x6b10, 0xa39c, 0x0007,
432 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, 0x0040, 0x1d73, 0xa684,
433 0x0001, 0x0040, 0x1d75, 0xa39c, 0xffbf, 0xa684, 0x0010, 0x0040,
434 0x1d7b, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e, 0x00c0,
435 0x1d86, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x1dc7, 0x714c, 0xa18c,
436 0x0800, 0x0040, 0x2902, 0x2011, 0x0021, 0x8004, 0x8004, 0x0048,
437 0x1d9d, 0x2011, 0x0022, 0x8004, 0x0048, 0x1d9d, 0x2011, 0x0020,
438 0x8004, 0x0048, 0x1d9d, 0x0040, 0x1dc7, 0x7aaa, 0x8840, 0x1078,
439 0x2d77, 0x6a10, 0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0, 0x3e80,
440 0x2c64, 0x8cff, 0x0040, 0x1dbe, 0x6010, 0xa206, 0x00c0, 0x1da8,
441 0x60b4, 0x8001, 0x60b6, 0x00c0, 0x1da3, 0x0c7e, 0x2a60, 0x6008,
442 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, 0x1cd6, 0x1078, 0x2d5e,
443 0x00c0, 0x1bf7, 0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e, 0x2001,
444 0x0001, 0x007e, 0x7150, 0xa184, 0x0018, 0x0040, 0x1ddd, 0xa184,
445 0x0010, 0x0040, 0x1dd7, 0x1078, 0x2acc, 0x00c0, 0x1ddd, 0xa184,
446 0x0008, 0x0040, 0x1ddd, 0x1078, 0x29e6, 0x007f, 0x7002, 0xa68c,
447 0x0060, 0x88ff, 0x0040, 0x1de6, 0xa18d, 0x0004, 0x795a, 0x69b2,
448 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061, 0x6814, 0xa085,
449 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012c,
450 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000a, 0x2098, 0x53a6,
451 0x147f, 0x137f, 0x157f, 0x6810, 0x8007, 0x789b, 0x007e, 0x78aa,
452 0x6d90, 0x7dd6, 0x7dde, 0x6e94, 0x7ed2, 0x7eda, 0x7830, 0xa084,
453 0x00c0, 0x00c0, 0x1e15, 0x0098, 0x1e1d, 0x6008, 0xa084, 0xffef,
454 0x600a, 0x1078, 0x2d77, 0x0078, 0x1bff, 0x7200, 0xa284, 0x0007,
455 0xa086, 0x0001, 0x00c0, 0x1e2a, 0x781b, 0x0049, 0x1078, 0x2d77,
456 0x0078, 0x1e3b, 0x6ab0, 0xa295, 0x2000, 0x7a5a, 0x781b, 0x0049,
457 0x1078, 0x2d77, 0x7200, 0x2500, 0xa605, 0x0040, 0x1e3b, 0xa284,
458 0x0007, 0x1079, 0x1e49, 0xad80, 0x0008, 0x7032, 0xa284, 0x0007,
459 0xa086, 0x0001, 0x00c0, 0x1e47, 0x6018, 0x8000, 0x601a, 0x0078,
460 0x1bf7, 0x1e51, 0x30f0, 0x30f0, 0x30df, 0x30f0, 0x1e51, 0x1e51,
461 0x1e51, 0x1078, 0x1ba5, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e,
462 0x2079, 0x3500, 0x7898, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x1e79,
463 0x70a0, 0xa086, 0x0001, 0x00c0, 0x1e68, 0x70a2, 0x0078, 0x1f01,
464 0x70a0, 0xa086, 0x0005, 0x00c0, 0x1e77, 0x70bc, 0x2068, 0x6817,
465 0x0004, 0x6813, 0x0000, 0x681c, 0xa085, 0x0008, 0x681e, 0x70a3,
466 0x0000, 0x157e, 0x2011, 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040,
467 0x1e9b, 0xa186, 0x0007, 0x00c0, 0x1e8b, 0x2009, 0x352b, 0x200b,
468 0x0005, 0x0078, 0x1e9b, 0x2009, 0x3513, 0x2104, 0x2009, 0x3512,
469 0x200a, 0x2009, 0x352b, 0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7,
470 0x0001, 0x0078, 0x1e9d, 0x70a3, 0x0000, 0x1078, 0x2ec7, 0x20a9,
471 0x0010, 0x2039, 0x0000, 0x1078, 0x2ba6, 0xa7b8, 0x0100, 0x0070,
472 0x1eab, 0x0078, 0x1ea3, 0x7000, 0x2020, 0x0079, 0x1eaf, 0x1edd,
473 0x1ec6, 0x1ec6, 0x1eb9, 0x1edd, 0x1edd, 0x1eb7, 0x1eb7, 0x1078,
474 0x1ba5, 0x2021, 0x3557, 0x2404, 0xa005, 0x0040, 0x1ec6, 0xad06,
475 0x00c0, 0x1ec6, 0x6800, 0x2022, 0x0078, 0x1ed6, 0x681c, 0xa084,
476 0x0001, 0x00c0, 0x1ed2, 0x6f10, 0x1078, 0x2ca1, 0x1078, 0x28d9,
477 0x0078, 0x1ed6, 0x7054, 0x2060, 0x6800, 0x6002, 0x6a16, 0x681c,
478 0xa085, 0x0008, 0x681e, 0x1078, 0x17dd, 0x2021, 0x3f80, 0x1078,
479 0x1f07, 0x2021, 0x3557, 0x1078, 0x1f07, 0x20a9, 0x0000, 0x2021,
480 0x3e80, 0x1078, 0x1f07, 0x8420, 0x0070, 0x1ef0, 0x0078, 0x1ee9,
481 0x20a9, 0x0080, 0x2061, 0x3680, 0x6018, 0x6110, 0xa102, 0x6012,
482 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x1f00, 0x0078, 0x1ef4,
483 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1bf7, 0x047e,
484 0x2404, 0xa005, 0x0040, 0x1f19, 0x2068, 0x6800, 0x007e, 0x6a16,
485 0x681c, 0xa085, 0x0008, 0x681e, 0x1078, 0x17dd, 0x007f, 0x0078,
486 0x1f09, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050,
487 0x1f23, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x1f26, 0x1f29, 0x1f9c,
488 0x1faa, 0xa282, 0x0002, 0x0040, 0x1f2f, 0x1078, 0x1ba5, 0x70a0,
489 0x70a3, 0x0000, 0x70c3, 0x0000, 0x0079, 0x1f36, 0x1f3e, 0x1f3e,
490 0x1f40, 0x1f74, 0x2908, 0x1f3e, 0x1f74, 0x1f3e, 0x1078, 0x1ba5,
491 0x77b4, 0x1078, 0x2ba6, 0x77b4, 0xa7bc, 0x0f00, 0x1078, 0x2ca1,
492 0x6018, 0xa005, 0x0040, 0x1f6b, 0x2021, 0x3f80, 0x2009, 0x0004,
493 0x2011, 0x0010, 0x1078, 0x1fc5, 0x0040, 0x1f6b, 0x157e, 0x20a9,
494 0x0000, 0x2021, 0x3e80, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010,
495 0x1078, 0x1fc5, 0x047f, 0x0040, 0x1f6a, 0x8420, 0x0070, 0x1f6a,
496 0x0078, 0x1f5b, 0x157f, 0x8738, 0xa784, 0x0007, 0x00c0, 0x1f46,
497 0x0078, 0x1bff, 0x0078, 0x1bff, 0x77b4, 0x1078, 0x2ca1, 0x6018,
498 0xa005, 0x0040, 0x1f9a, 0x2021, 0x3f80, 0x2009, 0x0005, 0x2011,
499 0x0020, 0x1078, 0x1fc5, 0x0040, 0x1f9a, 0x157e, 0x20a9, 0x0000,
500 0x2021, 0x3e80, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078,
501 0x1fc5, 0x047f, 0x0040, 0x1f99, 0x8420, 0x0070, 0x1f99, 0x0078,
502 0x1f8a, 0x157f, 0x0078, 0x1bff, 0x2200, 0x0079, 0x1f9f, 0x1fa2,
503 0x1fa4, 0x1fa4, 0x1078, 0x1ba5, 0x70a3, 0x0000, 0x70a7, 0x0001,
504 0x0078, 0x1bf7, 0x2200, 0x0079, 0x1fad, 0x1fb2, 0x1fa4, 0x1fb0,
505 0x1078, 0x1ba5, 0x1078, 0x241f, 0x7000, 0xa086, 0x0001, 0x00c0,
506 0x28af, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
507 0x28a2, 0x0040, 0x28af, 0x0078, 0x1cd6, 0x2404, 0xa005, 0x0040,
508 0x1fe6, 0x2068, 0x2d04, 0x007e, 0x6810, 0xa706, 0x0040, 0x1fd4,
509 0x2d20, 0x007f, 0x0078, 0x1fc6, 0x007f, 0x2022, 0x6916, 0x681c,
510 0xa205, 0x681e, 0x1078, 0x17dd, 0x6010, 0x8001, 0x6012, 0x6008,
511 0xa084, 0xffef, 0x600a, 0x1078, 0x28ef, 0x007c, 0xa085, 0x0001,
512 0x0078, 0x1fe5, 0x2300, 0x0079, 0x1fed, 0x1ff2, 0x1ff0, 0x2035,
513 0x1078, 0x1ba5, 0x78e4, 0xa005, 0x00d0, 0x2015, 0x0018, 0x2015,
514 0x2008, 0xa084, 0x0030, 0x00c0, 0x2001, 0x781b, 0x0049, 0x0078,
515 0x1bf7, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1ffd, 0x2100, 0xa084,
516 0x0007, 0x0079, 0x200b, 0x2023, 0x2029, 0x201d, 0x2013, 0x2d58,
517 0x2d58, 0x2013, 0x202f, 0x1078, 0x1ba5, 0x7000, 0xa005, 0x0040,
518 0x1bff, 0x2001, 0x0003, 0x0078, 0x22fa, 0x1078, 0x2b89, 0x781b,
519 0x0055, 0x0078, 0x1bf7, 0x1078, 0x2b89, 0x781b, 0x00dc, 0x0078,
520 0x1bf7, 0x1078, 0x2b89, 0x781b, 0x00e3, 0x0078, 0x1bf7, 0x1078,
521 0x2b89, 0x781b, 0x009d, 0x0078, 0x1bf7, 0xa584, 0x000f, 0x00c0,
522 0x205f, 0x1078, 0x241f, 0x7000, 0x0079, 0x203e, 0x2046, 0x2053,
523 0x2046, 0x28af, 0x2048, 0x28af, 0x2046, 0x2046, 0x1078, 0x1ba5,
524 0x71a0, 0x70a3, 0x0000, 0xa186, 0x0004, 0x00c0, 0x2051, 0x0078,
525 0x2908, 0x0078, 0x28af, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef,
526 0x600a, 0x1078, 0x28a2, 0x0040, 0x28af, 0x0078, 0x1cd6, 0x78e4,
527 0xa005, 0x00d0, 0x2015, 0x0018, 0x2015, 0x2008, 0xa084, 0x0030,
528 0x00c0, 0x206e, 0x781b, 0x0049, 0x0078, 0x1bf7, 0x78ec, 0xa084,
529 0x0003, 0x0040, 0x206a, 0x2100, 0xa184, 0x0007, 0x0079, 0x2078,
530 0x2088, 0x208e, 0x2082, 0x2080, 0x2d58, 0x2d58, 0x2080, 0x2d50,
531 0x1078, 0x1ba5, 0x1078, 0x2b91, 0x781b, 0x0055, 0x0078, 0x1bf7,
532 0x1078, 0x2b91, 0x781b, 0x00dc, 0x0078, 0x1bf7, 0x1078, 0x2b91,
533 0x781b, 0x00e3, 0x0078, 0x1bf7, 0x1078, 0x2b91, 0x781b, 0x009d,
534 0x0078, 0x1bf7, 0x2300, 0x0079, 0x209d, 0x20a2, 0x20a0, 0x20a4,
535 0x1078, 0x1ba5, 0x0078, 0x2665, 0x6817, 0x0008, 0x78a3, 0x0000,
536 0x79e4, 0xa184, 0x0030, 0x0040, 0x2665, 0x78ec, 0xa084, 0x0003,
537 0x0040, 0x2665, 0xa184, 0x0007, 0x0079, 0x20b6, 0x2023, 0x2029,
538 0x201d, 0x2d30, 0x2d58, 0x2d58, 0x20be, 0x2d50, 0x1078, 0x1ba5,
539 0xa282, 0x0005, 0x0050, 0x20c6, 0x1078, 0x1ba5, 0x2300, 0x0079,
540 0x20c9, 0x20cc, 0x22ce, 0x22da, 0x2200, 0x0079, 0x20cf, 0x20d4,
541 0x20d6, 0x20e9, 0x20d4, 0x22b3, 0x1078, 0x1ba5, 0x789b, 0x0018,
542 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x2b6a, 0xa08a,
543 0x0004, 0x00c8, 0x2b6a, 0x0079, 0x20e5, 0x2b6a, 0x2b6a, 0x2b6a,
544 0x2b0c, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x20fe,
545 0xa184, 0x0018, 0x0040, 0x20fa, 0x0078, 0x2b6a, 0x7000, 0xa005,
546 0x00c0, 0x20f4, 0x2011, 0x0003, 0x0078, 0x2752, 0xa184, 0x00ff,
547 0xa08a, 0x0010, 0x00c8, 0x2b6a, 0x0079, 0x2106, 0x2118, 0x2116,
548 0x212e, 0x2130, 0x21c2, 0x2b6a, 0x2b6a, 0x21c4, 0x2b6a, 0x2b6a,
549 0x22af, 0x22af, 0x2b6a, 0x2b6a, 0x2b6a, 0x22b1, 0x1078, 0x1ba5,
550 0xa684, 0x1000, 0x0040, 0x2125, 0x2001, 0x0300, 0x8000, 0x8000,
551 0x783a, 0x781b, 0x009a, 0x0078, 0x1bf7, 0x6814, 0xa084, 0x8000,
552 0x0040, 0x212c, 0x6817, 0x0003, 0x0078, 0x2d30, 0x1078, 0x1ba5,
553 0x691c, 0x691e, 0xa684, 0x1800, 0x00c0, 0x214a, 0x681c, 0xa084,
554 0x0001, 0x00c0, 0x2152, 0x6814, 0xa086, 0x0008, 0x00c0, 0x2142,
555 0x6817, 0x0000, 0xa684, 0x0400, 0x0040, 0x21be, 0x781b, 0x0058,
556 0x0078, 0x1bf7, 0xa684, 0x1000, 0x0040, 0x2152, 0x781b, 0x0058,
557 0x0078, 0x1bf7, 0xa684, 0x0060, 0x0040, 0x21ba, 0xa684, 0x0800,
558 0x0040, 0x21ba, 0xa684, 0x8000, 0x00c0, 0x2160, 0x0078, 0x217a,
559 0xa6b4, 0x7fff, 0x7e5a, 0x6eb2, 0x789b, 0x0074, 0x7aac, 0x79ac,
560 0x78ac, 0x801b, 0x00c8, 0x216d, 0x8000, 0xa084, 0x003f, 0xa108,
561 0xa291, 0x0000, 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90, 0x2200,
562 0xa303, 0x68aa, 0xa684, 0x4000, 0x0040, 0x2182, 0xa6b4, 0xbfff,
563 0x7e5a, 0x6eb2, 0x7000, 0xa086, 0x0003, 0x00c0, 0x218f, 0x1078,
564 0x2f3a, 0x1078, 0x30df, 0x781b, 0x0067, 0x0078, 0x1bf7, 0xa006,
565 0x1078, 0x3194, 0x6aac, 0x69a8, 0x6c94, 0x6b90, 0x2200, 0xa105,
566 0x0040, 0x219e, 0x2200, 0xa422, 0x2100, 0xa31b, 0x7cd2, 0x7bd6,
567 0x2300, 0xa405, 0x00c0, 0x21ac, 0xa6b5, 0x4000, 0x7e5a, 0x6eb2,
568 0x781b, 0x0067, 0x0078, 0x1bf7, 0x781b, 0x0067, 0x2200, 0xa115,
569 0x00c0, 0x21b6, 0x1078, 0x30f0, 0x0078, 0x1bf7, 0x1078, 0x311d,
570 0x0078, 0x1bf7, 0x781b, 0x006a, 0x0078, 0x1bf7, 0x781b, 0x0058,
571 0x0078, 0x1bf7, 0x1078, 0x1ba5, 0x0078, 0x2221, 0x691c, 0xa184,
572 0x0100, 0x0040, 0x21dc, 0xa18c, 0xfeff, 0x691e, 0x0c7e, 0x7048,
573 0x2060, 0x6000, 0xa084, 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5,
574 0x6006, 0x0c7f, 0x0078, 0x2210, 0xa184, 0x0200, 0x0040, 0x2210,
575 0xa18c, 0xfdff, 0x691e, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084,
576 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48,
577 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2210, 0x1078, 0x2c9d, 0x1078,
578 0x29e6, 0x88ff, 0x0040, 0x2210, 0x789b, 0x0060, 0x2800, 0x78aa,
579 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x220c,
580 0x781b, 0x0055, 0x0078, 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7,
581 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2219, 0x781b, 0x0058, 0x0078,
582 0x1bf7, 0x781b, 0x006a, 0x0078, 0x1bf7, 0x0078, 0x2b70, 0x0078,
583 0x2b70, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040, 0x221f,
584 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0,
585 0x2244, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x223c,
586 0x0048, 0x223c, 0x0078, 0x223e, 0x0078, 0x21c6, 0x24a8, 0x7aa8,
587 0x00f0, 0x223e, 0x0078, 0x222a, 0xa284, 0x00f0, 0xa086, 0x0020,
588 0x00c0, 0x22a0, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x2254,
589 0x0048, 0x2254, 0x0078, 0x229d, 0xa286, 0x0023, 0x0040, 0x221f,
590 0x6818, 0xa084, 0xfff1, 0x681a, 0x7e58, 0xa684, 0xfff1, 0xa085,
591 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, 0x0010, 0x600a, 0x0c7e,
592 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0010,
593 0x0040, 0x2278, 0x1078, 0x2c9d, 0x1078, 0x2acc, 0x0078, 0x2287,
594 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184,
595 0x0008, 0x0040, 0x2210, 0x1078, 0x2c9d, 0x1078, 0x29e6, 0x88ff,
596 0x0040, 0x2210, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004,
597 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2299, 0x781b, 0x0055, 0x0078,
598 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x7aa8, 0x0078, 0x222a,
599 0x8318, 0x2300, 0xa102, 0x0040, 0x22a9, 0x0048, 0x22a9, 0x0078,
600 0x222a, 0xa284, 0x0080, 0x00c0, 0x2b76, 0x0078, 0x2b70, 0x0078,
601 0x2b76, 0x0078, 0x2b6a, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
602 0xa08e, 0x0001, 0x0040, 0x22be, 0x1078, 0x1ba5, 0x7aa8, 0xa294,
603 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x2b6a,
604 0x0079, 0x22ca, 0x2b6a, 0x2939, 0x2b6a, 0x2a67, 0xa282, 0x0000,
605 0x00c0, 0x22d4, 0x1078, 0x1ba5, 0x1078, 0x2b89, 0x781b, 0x0069,
606 0x0078, 0x1bf7, 0xa282, 0x0003, 0x00c0, 0x22e0, 0x1078, 0x1ba5,
607 0x1078, 0x2b99, 0x781b, 0x0069, 0x0078, 0x1bf7, 0xa282, 0x0004,
608 0x0050, 0x22ec, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x22ef, 0x22f2,
609 0x23c9, 0x23fa, 0xa286, 0x0003, 0x0040, 0x22f8, 0x1078, 0x1ba5,
610 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, 0x0007, 0x0079, 0x2300,
611 0x2308, 0x230a, 0x230a, 0x2508, 0x2530, 0x24d2, 0x2308, 0x2308,
612 0x1078, 0x1ba5, 0xa684, 0x1000, 0x00c0, 0x2312, 0x1078, 0x2ec7,
613 0x0040, 0x23a3, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x235a, 0xa186,
614 0x0008, 0x00c0, 0x2329, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef,
615 0x600a, 0x1078, 0x28a2, 0x0040, 0x235a, 0x1078, 0x2ec7, 0x0078,
616 0x2341, 0xa186, 0x0028, 0x00c0, 0x235a, 0x1078, 0x2ec7, 0x6008,
617 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2341, 0x8001,
618 0x601a, 0xa005, 0x0040, 0x2341, 0x8001, 0xa005, 0x0040, 0x2341,
619 0x601e, 0x681c, 0xa084, 0x0001, 0x0040, 0x1bff, 0x681c, 0xa084,
620 0xfffe, 0x681e, 0x7054, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f,
621 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2357, 0x6002, 0x6006,
622 0x0078, 0x1bff, 0x017e, 0x1078, 0x241f, 0x017f, 0xa684, 0xdf00,
623 0x681a, 0x6827, 0x0000, 0x6f10, 0x81ff, 0x0040, 0x23a3, 0xa186,
624 0x0002, 0x00c0, 0x239b, 0xa684, 0x0800, 0x00c0, 0x2377, 0xa684,
625 0x0060, 0x0040, 0x2377, 0x78d8, 0x7adc, 0x682e, 0x6a2a, 0x8717,
626 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xa290, 0x3600, 0xa290,
627 0x0000, 0x221c, 0xa384, 0x0100, 0x00c0, 0x2388, 0x0078, 0x238e,
628 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, 0xa384, 0x0400,
629 0x0040, 0x239b, 0x689c, 0xa084, 0x0100, 0x00c0, 0x239b, 0x1078,
630 0x2491, 0x0078, 0x1bff, 0xa186, 0x0018, 0x0040, 0x23a3, 0xa186,
631 0x0014, 0x0040, 0x1bff, 0x6912, 0x6814, 0xa084, 0x8000, 0x0040,
632 0x23ab, 0x7038, 0x6816, 0xa68c, 0xdf00, 0x691a, 0x1078, 0x28e0,
633 0x1078, 0x28ef, 0x00c0, 0x23b8, 0x6008, 0xa084, 0xffef, 0x600a,
634 0x681c, 0xa084, 0x0001, 0x00c0, 0x23c1, 0x1078, 0x28d9, 0x0078,
635 0x23c5, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078, 0x17dd, 0x0078,
636 0x1bff, 0xa282, 0x0004, 0x0048, 0x23cf, 0x1078, 0x1ba5, 0x2200,
637 0x0079, 0x23d2, 0x23d6, 0x23d8, 0x23e5, 0x23d8, 0x1078, 0x1ba5,
638 0x7000, 0xa086, 0x0005, 0x0040, 0x23e1, 0x1078, 0x2b89, 0x781b,
639 0x0069, 0x781b, 0x006a, 0x0078, 0x1bf7, 0x7890, 0x8007, 0x8001,
640 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
641 0xa186, 0x0003, 0x0040, 0x23f6, 0x0078, 0x2b6a, 0x781b, 0x006a,
642 0x0078, 0x1bf7, 0x681c, 0xa085, 0x0004, 0x681e, 0x82ff, 0x00c0,
643 0x2405, 0x1078, 0x2b89, 0x0078, 0x240c, 0x8211, 0x0040, 0x240a,
644 0x1078, 0x1ba5, 0x1078, 0x2b99, 0x781b, 0x0069, 0x0078, 0x1bf7,
645 0x1078, 0x2d77, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x241c, 0x0018,
646 0x241c, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684,
647 0x0060, 0x00c0, 0x2429, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078,
648 0x2490, 0xa684, 0x0800, 0x00c0, 0x2438, 0x68b0, 0xa084, 0x4800,
649 0xa635, 0xa684, 0x0800, 0x00c0, 0x2438, 0x1078, 0x2ec7, 0x007c,
650 0xa684, 0x0020, 0x0040, 0x2462, 0x78d0, 0x8003, 0x00c8, 0x2446,
651 0xa006, 0x1078, 0x3194, 0x78d4, 0x1078, 0x31f9, 0xa684, 0x4000,
652 0x0040, 0x2450, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078, 0x2435,
653 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x244a,
654 0x7038, 0xa005, 0x00c0, 0x245c, 0x79d8, 0x7adc, 0x692e, 0x6a2a,
655 0x0078, 0x2435, 0xa684, 0x4000, 0x0040, 0x246c, 0x682f, 0x0000,
656 0x682b, 0x0000, 0x0078, 0x2435, 0x68b0, 0xa084, 0x4800, 0xa635,
657 0xa684, 0x4000, 0x00c0, 0x2466, 0x7038, 0xa005, 0x00c0, 0x247a,
658 0x703b, 0x0007, 0x79d8, 0x7adc, 0x78d0, 0x80f3, 0x00c8, 0x2481,
659 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a2a,
660 0x2100, 0xa205, 0x00c0, 0x248e, 0x0078, 0x2435, 0x1078, 0x3194,
661 0x007c, 0xa384, 0x0200, 0x0040, 0x2499, 0x6008, 0xa085, 0x0002,
662 0x600a, 0x6817, 0x0006, 0x6a28, 0x692c, 0x6a3a, 0x693e, 0x682b,
663 0x0300, 0x682f, 0x0000, 0x6833, 0x2000, 0x6893, 0x0000, 0x6897,
664 0x0020, 0x7000, 0x0079, 0x24ac, 0x24b4, 0x24b6, 0x24bf, 0x24b4,
665 0x24b4, 0x24b4, 0x24b4, 0x24b4, 0x1078, 0x1ba5, 0x681c, 0xa084,
666 0x0001, 0x00c0, 0x24bf, 0x1078, 0x28d9, 0x0078, 0x24c5, 0x7054,
667 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0x2021, 0x3557, 0x2404,
668 0xa005, 0x0040, 0x24ce, 0x2020, 0x0078, 0x24c7, 0x2d22, 0x206b,
669 0x0000, 0x007c, 0x77b4, 0x1078, 0x2ba6, 0xa7bc, 0x0f00, 0x1078,
670 0x2ca1, 0x6018, 0xa005, 0x0040, 0x2501, 0x0d7e, 0x2001, 0x3f90,
671 0x2068, 0x0d7f, 0x2021, 0x3f80, 0x2009, 0x0004, 0x2011, 0x0010,
672 0x1078, 0x1fc5, 0x0040, 0x2501, 0x157e, 0x20a9, 0x0000, 0x2021,
673 0x3e80, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x1fc5,
674 0x047f, 0x0040, 0x2500, 0x8420, 0x0070, 0x2500, 0x0078, 0x24f1,
675 0x157f, 0x8738, 0xa784, 0x0007, 0x00c0, 0x24d7, 0x0078, 0x1bff,
676 0x1078, 0x28e0, 0x1078, 0x28ef, 0x6827, 0x0000, 0x789b, 0x000e,
677 0x6f10, 0x6813, 0x0002, 0x1078, 0x31ca, 0xa684, 0x0800, 0x0040,
678 0x251d, 0x6918, 0xa18d, 0x2000, 0x691a, 0x6814, 0xa084, 0x8000,
679 0x0040, 0x2524, 0x6817, 0x0000, 0x2021, 0x3557, 0x6800, 0x2022,
680 0x6a38, 0x693c, 0x6a2a, 0x692e, 0x1078, 0x17dd, 0x0078, 0x1bff,
681 0x1078, 0x241f, 0x6827, 0x0000, 0x789b, 0x000e, 0x6f10, 0x1078,
682 0x2d7c, 0xa08c, 0x00ff, 0x6912, 0x6814, 0xa084, 0x8000, 0x0040,
683 0x2543, 0x7038, 0x6816, 0xa68c, 0xdf00, 0x691a, 0x70a3, 0x0000,
684 0x0078, 0x1bff, 0xa006, 0x1078, 0x2ec7, 0x6813, 0x0000, 0x6817,
685 0x0001, 0xa68c, 0xdf00, 0x691a, 0x6827, 0x0000, 0x7000, 0x0079,
686 0x2559, 0x2561, 0x2563, 0x2563, 0x2565, 0x2565, 0x2565, 0x2561,
687 0x2561, 0x1078, 0x1ba5, 0x1078, 0x28ef, 0x6008, 0xa084, 0xffef,
688 0x600a, 0x0078, 0x28ba, 0x2300, 0x0079, 0x256e, 0x2571, 0x2573,
689 0x25b1, 0x1078, 0x1ba5, 0x7000, 0x0079, 0x2576, 0x257e, 0x2580,
690 0x2580, 0x258b, 0x2580, 0x2592, 0x257e, 0x257e, 0x1078, 0x1ba5,
691 0xa684, 0x2000, 0x00c0, 0x258b, 0xa6b5, 0x2000, 0x7e5a, 0x1078,
692 0x30f0, 0x0078, 0x2d30, 0x6814, 0xa084, 0x8000, 0x0040, 0x2592,
693 0x6817, 0x0007, 0x2009, 0x3518, 0x210c, 0xa186, 0x0000, 0x0040,
694 0x25a7, 0xa186, 0x0001, 0x0040, 0x25ab, 0x2009, 0x352b, 0x200b,
695 0x000b, 0x70a3, 0x0001, 0x781b, 0x0046, 0x0078, 0x1bf7, 0x781b,
696 0x00dd, 0x0078, 0x1bf7, 0x2009, 0x352b, 0x200b, 0x000a, 0x0078,
697 0x1bf7, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x25b6, 0x25b9, 0x25bb,
698 0x25de, 0x1078, 0x1ba5, 0x7000, 0x0079, 0x25be, 0x25c6, 0x25c8,
699 0x25c8, 0x25d3, 0x25c8, 0x25da, 0x25c6, 0x25c6, 0x1078, 0x1ba5,
700 0xa684, 0x2000, 0x00c0, 0x25d3, 0xa6b5, 0x2000, 0x7e5a, 0x1078,
701 0x30f0, 0x0078, 0x2d30, 0x6814, 0xa084, 0x8000, 0x0040, 0x25da,
702 0x6817, 0x0007, 0x781b, 0x00e4, 0x0078, 0x1bf7, 0x681c, 0xa085,
703 0x0004, 0x681e, 0xa6b5, 0x0800, 0x1078, 0x2b89, 0x781b, 0x0069,
704 0x0078, 0x1bf7, 0x2300, 0x0079, 0x25ed, 0x25f0, 0x25f2, 0x25f4,
705 0x1078, 0x1ba5, 0x1078, 0x1ba5, 0xa684, 0x0400, 0x00c0, 0x2613,
706 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb,
707 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040, 0x260b, 0x78ec, 0xa084,
708 0x0003, 0x00c0, 0x260f, 0x2001, 0x0014, 0x0078, 0x22fa, 0xa184,
709 0x0007, 0x0079, 0x264b, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060,
710 0x79a8, 0x81ff, 0x0040, 0x2649, 0x789b, 0x0010, 0x7ba8, 0xa384,
711 0x0001, 0x00c0, 0x263a, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0,
712 0x262d, 0x2009, 0xfff7, 0x0078, 0x2633, 0xa386, 0x0003, 0x00c0,
713 0x263a, 0x2009, 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004, 0xa104,
714 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb,
715 0x785a, 0x782b, 0x3009, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
716 0x691e, 0x0078, 0x2d30, 0x2023, 0x2029, 0x2655, 0x265d, 0x2653,
717 0x2653, 0x2653, 0x2d30, 0x1078, 0x1ba5, 0x691c, 0xa18c, 0xfdff,
718 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d38, 0x691c, 0xa18c, 0xfdff,
719 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d30, 0x79e4, 0xa184, 0x0030,
720 0x0040, 0x266f, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2677, 0x6814,
721 0xa085, 0x8000, 0x6816, 0x2001, 0x0014, 0x0078, 0x22fa, 0xa184,
722 0x0007, 0x0079, 0x267b, 0x2d30, 0x2d30, 0x2683, 0x2d30, 0x2d58,
723 0x2d58, 0x2d30, 0x2d30, 0xa684, 0x0400, 0x00c0, 0x26b4, 0x681c,
724 0xa084, 0x0001, 0x0040, 0x2d38, 0xa68c, 0x2060, 0xa18c, 0xfffb,
725 0x795a, 0x69b2, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061,
726 0x6814, 0xa085, 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, 0x147e,
727 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000a,
728 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6810, 0x8007, 0x789b,
729 0x007e, 0x78aa, 0x0078, 0x2d38, 0x6814, 0xa084, 0x8000, 0x0040,
730 0x26bb, 0x6817, 0x0008, 0x781b, 0x00d8, 0x0078, 0x1bf7, 0x2300,
731 0x0079, 0x26c2, 0x26c7, 0x2742, 0x26c5, 0x1078, 0x1ba5, 0x7000,
732 0xa084, 0x0007, 0x0079, 0x26cc, 0x26d4, 0x26d6, 0x26f2, 0x26d4,
733 0x26d4, 0x24d2, 0x26d4, 0x26d4, 0x1078, 0x1ba5, 0x691c, 0xa18d,
734 0x0001, 0x691e, 0x6800, 0x6006, 0xa005, 0x00c0, 0x26e0, 0x6002,
735 0x6818, 0xa084, 0x000e, 0x0040, 0x26ec, 0x7014, 0x68b6, 0x712c,
736 0xa188, 0x3e80, 0x0078, 0x26ee, 0x2009, 0x3f80, 0x2104, 0x6802,
737 0x2d0a, 0x7156, 0x6eb2, 0xa684, 0x0060, 0x0040, 0x2740, 0xa684,
738 0x0800, 0x00c0, 0x2704, 0xa684, 0x7fff, 0x68b2, 0x6890, 0x6894,
739 0x1078, 0x2ec7, 0x0078, 0x2740, 0xa684, 0x0020, 0x0040, 0x2716,
740 0xa006, 0x1078, 0x3194, 0x78d0, 0x8003, 0x00c8, 0x2712, 0x78d4,
741 0x1078, 0x31f9, 0x79d8, 0x7adc, 0x0078, 0x271a, 0x1078, 0x2cae,
742 0x1078, 0x3194, 0xa684, 0x8000, 0x0040, 0x2740, 0xa684, 0x7fff,
743 0x68b2, 0x789b, 0x0074, 0x1078, 0x2d7c, 0x2010, 0x1078, 0x2d7c,
744 0x2008, 0xa684, 0x0020, 0x00c0, 0x2738, 0x1078, 0x2d7c, 0x801b,
745 0x00c8, 0x2733, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
746 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90, 0x2200, 0xa303, 0x68aa,
747 0x0078, 0x1bff, 0x0078, 0x2b76, 0x7033, 0x0000, 0xa282, 0x0005,
748 0x0050, 0x274c, 0x1078, 0x1ba5, 0x2300, 0x0079, 0x274f, 0x2752,
749 0x275c, 0x277f, 0x2200, 0x0079, 0x2755, 0x275a, 0x2b76, 0x275a,
750 0x27a8, 0x27f9, 0x1078, 0x1ba5, 0x7000, 0xa086, 0x0001, 0x00c0,
751 0x2769, 0x1078, 0x28ef, 0x1078, 0x2ec7, 0x7034, 0x600a, 0x0078,
752 0x276e, 0x7000, 0xa086, 0x0003, 0x0040, 0x2763, 0x7003, 0x0005,
753 0x2001, 0x3f90, 0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x2778,
754 0x2b76, 0x277d, 0x27a8, 0x277d, 0x2b76, 0x1078, 0x1ba5, 0x7000,
755 0xa086, 0x0001, 0x00c0, 0x278c, 0x1078, 0x28ef, 0x1078, 0x2ec7,
756 0x7034, 0x600a, 0x0078, 0x2791, 0x7000, 0xa086, 0x0003, 0x0040,
757 0x2786, 0x7003, 0x0005, 0x2001, 0x3f90, 0x2068, 0x703e, 0x7032,
758 0x2200, 0x0079, 0x279b, 0x27a2, 0x27a0, 0x27a2, 0x27a0, 0x27a2,
759 0x1078, 0x1ba5, 0x1078, 0x2b99, 0x781b, 0x0069, 0x0078, 0x1bf7,
760 0x7000, 0xa086, 0x0001, 0x00c0, 0x27b5, 0x1078, 0x28ef, 0x1078,
761 0x2ec7, 0x7034, 0x600a, 0x0078, 0x27ba, 0x7000, 0xa086, 0x0003,
762 0x0040, 0x27af, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b,
763 0x0018, 0x7ca8, 0xa484, 0x0007, 0xa215, 0x2069, 0x3f80, 0x2d04,
764 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, 0x27d5, 0x6810, 0xa206,
765 0x0040, 0x27ee, 0x6800, 0x0078, 0x27c8, 0x7003, 0x0005, 0x2001,
766 0x3f90, 0x2068, 0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003,
767 0x0000, 0x8000, 0x0070, 0x27e6, 0x0078, 0x27df, 0x157f, 0x6a12,
768 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a,
769 0x681c, 0xa084, 0x0c00, 0x0040, 0x284f, 0x1078, 0x2b91, 0x0078,
770 0x284f, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2806, 0x1078, 0x28ef,
771 0x1078, 0x2ec7, 0x7034, 0x600a, 0x0078, 0x280b, 0x7000, 0xa086,
772 0x0003, 0x0040, 0x2800, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00,
773 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007, 0xa215, 0x79a8, 0x79a8,
774 0xa18c, 0x00ff, 0xa1e8, 0x3e80, 0x2d04, 0x2d08, 0x7156, 0x2068,
775 0xa005, 0x0040, 0x282a, 0x6810, 0xa206, 0x0040, 0x2843, 0x6800,
776 0x0078, 0x281d, 0x7003, 0x0005, 0x2001, 0x3f90, 0x2068, 0x703e,
777 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070,
778 0x283b, 0x0078, 0x2834, 0x157f, 0x6a12, 0x68b3, 0x0700, 0x681f,
779 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084, 0x0c00,
780 0x0040, 0x284f, 0x1078, 0x2b8d, 0x7e58, 0x0078, 0x284f, 0x027e,
781 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600,
782 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0xa684, 0x0060,
783 0x0040, 0x2886, 0x6b94, 0x6c90, 0x69a8, 0x68ac, 0xa105, 0x00c0,
784 0x2874, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a,
785 0x1078, 0x30f0, 0x0078, 0x2886, 0x68ac, 0xa31a, 0x2100, 0xa423,
786 0x2400, 0xa305, 0x0040, 0x2886, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde,
787 0x68ac, 0xa6b4, 0xbfff, 0x7e5a, 0x1078, 0x311d, 0x077f, 0x1078,
788 0x2ca1, 0x2009, 0x006a, 0xa684, 0x0008, 0x0040, 0x2891, 0x2009,
789 0x0069, 0xa6b5, 0x2000, 0x7e5a, 0x791a, 0x2d00, 0x703e, 0x8207,
790 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, 0x2048,
791 0x0078, 0x1bf7, 0x6020, 0xa005, 0x0040, 0x28ae, 0x8001, 0x6022,
792 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006,
793 0x1078, 0x2ec7, 0x6813, 0x0000, 0x6817, 0x0001, 0x681f, 0x0040,
794 0x681b, 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x28bf, 0x28c7,
795 0x28c9, 0x28c9, 0x28d5, 0x28d1, 0x28c7, 0x28c7, 0x28c7, 0x1078,
796 0x1ba5, 0x1078, 0x28e0, 0x1078, 0x28d9, 0x1078, 0x17dd, 0x0078,
797 0x1bff, 0x70a3, 0x0000, 0x0078, 0x1bff, 0x6817, 0x0000, 0x0078,
798 0x2508, 0x6800, 0xa005, 0x00c0, 0x28de, 0x6002, 0x6006, 0x007c,
799 0x6010, 0xa005, 0x0040, 0x28e9, 0x8001, 0x00d0, 0x28e9, 0x1078,
800 0x1ba5, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018,
801 0xa005, 0x0040, 0x28f5, 0x8001, 0x601a, 0x007c, 0x1078, 0x2d77,
802 0x6817, 0x0018, 0x0078, 0x2926, 0x1078, 0x2d77, 0x6817, 0x0019,
803 0x0078, 0x2926, 0x1078, 0x2d77, 0x6817, 0x001a, 0x0078, 0x2926,
804 0x77b4, 0x1078, 0x2ca1, 0x71b8, 0xa18c, 0x00ff, 0xa1e8, 0x3e80,
805 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x2918, 0x0078, 0x1bff,
806 0x6810, 0x72b4, 0xa206, 0x0040, 0x2920, 0x6800, 0x0078, 0x2911,
807 0x6800, 0x200a, 0x6817, 0x0005, 0x70bf, 0x0000, 0x1078, 0x28e0,
808 0x681c, 0xa084, 0x0001, 0x00c0, 0x292f, 0x1078, 0x28d9, 0x1078,
809 0x28ef, 0x681b, 0x0000, 0x681f, 0x0020, 0x1078, 0x17dd, 0x0078,
810 0x1bff, 0xa282, 0x0003, 0x00c0, 0x2b6a, 0x7da8, 0xa5ac, 0x00ff,
811 0x7ea8, 0xa6b4, 0x00ff, 0x691c, 0xa18d, 0x0080, 0x691e, 0xa184,
812 0x0100, 0x0040, 0x2999, 0xa18c, 0xfeff, 0x691e, 0xa6b4, 0x00ff,
813 0x0040, 0x2983, 0xa682, 0x000f, 0x0048, 0x295a, 0x0040, 0x295a,
814 0x2031, 0x000f, 0x852b, 0x852b, 0x1078, 0x2c24, 0x0040, 0x2964,
815 0x1078, 0x2a33, 0x0078, 0x298c, 0x1078, 0x2bdf, 0x0c7e, 0x2960,
816 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2a57, 0x0c7f, 0x691c,
817 0xa18d, 0x0100, 0x691e, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684,
818 0x0400, 0x00c0, 0x297f, 0x781b, 0x0055, 0x0078, 0x1bf7, 0x781b,
819 0x0069, 0x0078, 0x1bf7, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5,
820 0x6006, 0x1078, 0x2a57, 0x0c7f, 0x7e58, 0xa684, 0x0400, 0x00c0,
821 0x2995, 0x781b, 0x0058, 0x0078, 0x1bf7, 0x781b, 0x006a, 0x0078,
822 0x1bf7, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000, 0x0040,
823 0x29d9, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000f, 0x0048,
824 0x29ad, 0x0040, 0x29ad, 0x2011, 0x000f, 0x2600, 0xa202, 0x00c8,
825 0x29b2, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028,
826 0x00c0, 0x29c2, 0xa282, 0x0019, 0x00c8, 0x29c8, 0x2011, 0x0019,
827 0x0078, 0x29c8, 0xa282, 0x000c, 0x00c8, 0x29c8, 0x2011, 0x000c,
828 0x2200, 0xa502, 0x00c8, 0x29cd, 0x2228, 0x1078, 0x2be3, 0x852b,
829 0x852b, 0x1078, 0x2c24, 0x0040, 0x29d9, 0x1078, 0x2a33, 0x0078,
830 0x29dd, 0x1078, 0x2bdf, 0x1078, 0x2a57, 0x7858, 0xa085, 0x0004,
831 0x785a, 0x0c7f, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x0c7e, 0x2960,
832 0x6000, 0xa084, 0x1000, 0x00c0, 0x2a01, 0x6010, 0xa084, 0x000f,
833 0x00c0, 0x29fb, 0xa18c, 0x0002, 0x00c0, 0x29fb, 0xa18c, 0xfff5,
834 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078,
835 0x2a23, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0,
836 0x2a11, 0xa282, 0x0019, 0x00c8, 0x2a17, 0x2011, 0x0019, 0x0078,
837 0x2a17, 0xa282, 0x000c, 0x00c8, 0x2a17, 0x2011, 0x000c, 0x6308,
838 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000f, 0x0048, 0x2a23, 0x0040,
839 0x2a23, 0x2019, 0x000f, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
840 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x681c, 0xa085, 0x0100,
841 0x681e, 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008, 0xa084,
842 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4,
843 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a,
844 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605,
845 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e,
846 0x7048, 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6,
847 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c, 0xa282,
848 0x0002, 0x00c0, 0x2b6a, 0x7aa8, 0x691c, 0xa18d, 0x0080, 0x691e,
849 0xa184, 0x0200, 0x0040, 0x2aac, 0xa18c, 0xfdff, 0x691e, 0xa294,
850 0x00ff, 0xa282, 0x0002, 0x00c8, 0x2b6a, 0x1078, 0x2af3, 0x1078,
851 0x2a57, 0xa980, 0x0001, 0x200c, 0x1078, 0x2c9d, 0x1078, 0x29e6,
852 0x88ff, 0x0040, 0x2a9f, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58,
853 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2a9b, 0x781b,
854 0x0055, 0x0078, 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x7e58,
855 0xa684, 0x0400, 0x00c0, 0x2aa8, 0x781b, 0x0058, 0x0078, 0x1bf7,
856 0x781b, 0x006a, 0x0078, 0x1bf7, 0xa282, 0x0002, 0x00c8, 0x2ab4,
857 0xa284, 0x0001, 0x0040, 0x2abe, 0x7148, 0xa188, 0x0000, 0x210c,
858 0xa18c, 0x2000, 0x00c0, 0x2abe, 0x2011, 0x0000, 0x1078, 0x2bd1,
859 0x1078, 0x2af3, 0x1078, 0x2a57, 0x7858, 0xa085, 0x0004, 0x785a,
860 0x781b, 0x0069, 0x0078, 0x1bf7, 0x0c7e, 0x027e, 0x2960, 0x6000,
861 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x2ae3, 0x6014, 0xa084,
862 0x0040, 0x00c0, 0x2ae1, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078,
863 0x2af0, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
864 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x681c, 0xa085, 0x0200, 0x681e,
865 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040,
866 0x2afb, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4,
867 0xa084, 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084,
868 0xffef, 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003,
869 0x0040, 0x2b15, 0x007f, 0x0078, 0x2b18, 0x007f, 0x0078, 0x2b66,
870 0xa684, 0x0020, 0x0040, 0x2b66, 0x7888, 0xa084, 0x0040, 0x0040,
871 0x2b66, 0x78a8, 0x8001, 0x0040, 0x2b25, 0x7bb8, 0xa384, 0x003f,
872 0x831b, 0x00c8, 0x2b2c, 0x8000, 0xa005, 0x0040, 0x2b4d, 0x831b,
873 0x00c8, 0x2b35, 0x8001, 0x0040, 0x2b62, 0xa006, 0x1078, 0x3194,
874 0x78b4, 0x1078, 0x31f9, 0x0078, 0x2b66, 0xa684, 0x4000, 0x0040,
875 0x2b4d, 0x78b8, 0x801b, 0x00c8, 0x2b46, 0x8000, 0xa084, 0x003f,
876 0x00c0, 0x2b62, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001,
877 0x0001, 0xa108, 0x00c8, 0x2b56, 0xa291, 0x0000, 0x79d2, 0x79da,
878 0x7ad6, 0x7ade, 0x1078, 0x3194, 0x781b, 0x0067, 0x1078, 0x305e,
879 0x0078, 0x1bf7, 0x781b, 0x0067, 0x0078, 0x1bf7, 0x781b, 0x006a,
880 0x0078, 0x1bf7, 0x1078, 0x2b9d, 0x781b, 0x0069, 0x0078, 0x1bf7,
881 0x1078, 0x2b89, 0x781b, 0x0069, 0x0078, 0x1bf7, 0x6823, 0x0002,
882 0x1078, 0x2b91, 0x691c, 0xa18d, 0x0020, 0x691e, 0x6814, 0xa084,
883 0x8000, 0x0040, 0x2b85, 0x6817, 0x0005, 0x781b, 0x0069, 0x0078,
884 0x1bf7, 0x2001, 0x0005, 0x0078, 0x2b9f, 0x2001, 0x000c, 0x0078,
885 0x2b9f, 0x2001, 0x0006, 0x0078, 0x2b9f, 0x2001, 0x000d, 0x0078,
886 0x2b9f, 0x2001, 0x0009, 0x0078, 0x2b9f, 0x2001, 0x0007, 0x789b,
887 0x007f, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, 0x007c, 0x077e, 0x873f,
888 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, 0x3600, 0xa7b8,
889 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040, 0x2bbf, 0xa184,
890 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008, 0x6006, 0x8738,
891 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, 0x2bcf, 0xa184,
892 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010, 0x6006, 0x077f,
893 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
894 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x007c, 0x2031,
895 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab,
896 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab,
897 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003,
898 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2001, 0x3546,
899 0x2004, 0xa082, 0x0028, 0x0040, 0x2c0d, 0x2021, 0x2c84, 0x2019,
900 0x0014, 0x20a9, 0x000c, 0x0078, 0x2c13, 0x2021, 0x2c90, 0x2019,
901 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404, 0xa084, 0xfff0,
902 0xa106, 0x0040, 0x2c22, 0x8420, 0x2300, 0xa210, 0x0070, 0x2c22,
903 0x0078, 0x2c15, 0x157f, 0x007c, 0x157e, 0x2011, 0x3546, 0x2214,
904 0xa282, 0x0032, 0x0048, 0x2c38, 0x0040, 0x2c3c, 0x2021, 0x2c76,
905 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x0078, 0x2c4c,
906 0xa282, 0x0028, 0x0040, 0x2c44, 0x2021, 0x2c84, 0x2019, 0x0014,
907 0x20a9, 0x000c, 0x0078, 0x2c4a, 0x2021, 0x2c90, 0x2019, 0x0019,
908 0x20a9, 0x000d, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x2c5c,
909 0x0048, 0x2c5c, 0x8420, 0x2300, 0xa210, 0x0070, 0x2c59, 0x0078,
910 0x2c4c, 0x157f, 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8,
911 0x2c65, 0x7808, 0xa085, 0x0070, 0x780a, 0x78ec, 0xa084, 0x0300,
912 0x0040, 0x2c73, 0x2404, 0xa09e, 0x1201, 0x00c0, 0x2c73, 0x2001,
913 0x2101, 0x0078, 0x2c74, 0x2404, 0xa005, 0x007c, 0x1201, 0x3002,
914 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806,
915 0x7a06, 0x0a07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202,
916 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05,
917 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604,
918 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046,
919 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, 0x0007, 0x8003, 0x8003,
920 0x8003, 0x8003, 0xa105, 0xa0e0, 0x3680, 0x007c, 0x79d8, 0x7adc,
921 0x78d0, 0x801b, 0x00c8, 0x2cb5, 0x8000, 0xa084, 0x003f, 0xa108,
922 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3540,
923 0x2091, 0x8000, 0x2104, 0x0079, 0x2cc5, 0x2cf7, 0x2ccf, 0x2ccf,
924 0x2ccf, 0x2ccf, 0x2ccf, 0x2ccd, 0x2ccd, 0x1078, 0x1ba5, 0x784b,
925 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x2cd1, 0x784b, 0x0008,
926 0x7848, 0xa084, 0x0008, 0x00c0, 0x2cd8, 0x68b0, 0xa085, 0x4000,
927 0x68b2, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080,
928 0x00c0, 0x2cf7, 0x0018, 0x2cf7, 0x6818, 0xa084, 0x0020, 0x00c0,
929 0x2cf5, 0x781b, 0x00dd, 0x0078, 0x2cf7, 0x781b, 0x00e4, 0x2091,
930 0x8001, 0x0f7f, 0x007c, 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f,
931 0x8003, 0x8003, 0x8003, 0xa0e0, 0x3600, 0x6004, 0xa084, 0x000a,
932 0x00c0, 0x2d2e, 0x6108, 0xa194, 0xff00, 0x0040, 0x2d2e, 0xa18c,
933 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x2d1d, 0x2001, 0x0032,
934 0xa106, 0x0040, 0x2d21, 0x0078, 0x2d25, 0x2009, 0x0020, 0x0078,
935 0x2d27, 0x2009, 0x003f, 0x0078, 0x2d27, 0x2011, 0x0000, 0x2100,
936 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c,
937 0x781b, 0x006a, 0x0078, 0x1bf7, 0x781b, 0x0069, 0x0078, 0x1bf7,
938 0x781b, 0x0058, 0x0078, 0x1bf7, 0x781b, 0x0055, 0x0078, 0x1bf7,
939 0x781b, 0x00dd, 0x0078, 0x1bf7, 0x781b, 0x00dc, 0x0078, 0x1bf7,
940 0x781b, 0x00e4, 0x0078, 0x1bf7, 0x781b, 0x00e3, 0x0078, 0x1bf7,
941 0x781b, 0x009e, 0x0078, 0x1bf7, 0x781b, 0x009d, 0x0078, 0x1bf7,
942 0x70a3, 0x0001, 0x781b, 0x0046, 0x0078, 0x1bf7, 0x007e, 0x7830,
943 0xa084, 0x00c0, 0x00c0, 0x2d75, 0x7808, 0xa084, 0xfffd, 0x780a,
944 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
945 0x2d75, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0x7808,
946 0xa085, 0x0002, 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0,
947 0x2d7c, 0x0098, 0x2d85, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd,
948 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021,
949 0x0040, 0x2d94, 0x0098, 0x2d92, 0x78ac, 0x007e, 0x7808, 0xa085,
950 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0070, 0x0040, 0x2da8,
951 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x1b6b, 0x2d78, 0x2c68, 0x0c7f,
952 0x6817, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681a, 0x682f, 0x0000,
953 0x682b, 0x0000, 0x784b, 0x0008, 0x78e4, 0xa005, 0x00d0, 0x2015,
954 0xa084, 0x0020, 0x0040, 0x2015, 0x78ec, 0xa084, 0x0003, 0x0040,
955 0x2015, 0x0018, 0x2015, 0x0078, 0x2b70, 0x0c7e, 0x6810, 0x8007,
956 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, 0x2060,
957 0x2048, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0x0c7f, 0x007c,
958 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
959 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
960 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
961 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
962 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9847, 0x0014,
963 0x0014, 0x98f5, 0x98e7, 0x0014, 0x0014, 0x0080, 0x00bf, 0x0100,
964 0x0402, 0x2008, 0xf880, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014,
965 0xa200, 0x8838, 0x817e, 0x842a, 0x84a0, 0x3806, 0x8839, 0x28c2,
966 0x9cc3, 0xa805, 0x0864, 0xa83b, 0x3008, 0x28c1, 0x9cc3, 0xa201,
967 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a,
968 0xa808, 0x28e2, 0x9ca0, 0xa8f3, 0x0864, 0xa829, 0x300c, 0xa801,
969 0x3008, 0x28e1, 0x9ca0, 0x280d, 0xa204, 0x64c0, 0x67a0, 0x6fc0,
970 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa80f, 0x786e, 0x883e,
971 0xa80c, 0x282b, 0xa205, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b,
972 0x7023, 0x8576, 0x8677, 0xa801, 0x883e, 0x2069, 0x28c1, 0x9cc3,
973 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8dc, 0xa207, 0x0014, 0xa203,
974 0x8000, 0x84a8, 0x85a4, 0x1872, 0x849a, 0x883c, 0x1fe2, 0xf601,
975 0xa208, 0x856e, 0x866f, 0x0704, 0x3008, 0x9ca0, 0x0014, 0xa202,
976 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf848, 0x8174, 0x86eb,
977 0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6, 0xa8f1, 0xf861, 0xa8e8,
978 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2,
979 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0,
980 0x1fe6, 0x0014, 0xa206, 0x6865, 0x817f, 0x842a, 0x1dc1, 0x8823,
981 0x0016, 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a,
982 0xf021, 0x3008, 0x84a8, 0x1dc6, 0x20d7, 0x8822, 0x0016, 0x8000,
983 0x2848, 0x1011, 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2802, 0x1011,
984 0xa8fd, 0xa887, 0x3008, 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017,
985 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x26e0, 0x873a,
986 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x817e,
987 0x842a, 0x84a0, 0x3806, 0x0210, 0x9ccd, 0x0704, 0x0000, 0x127e,
988 0x2091, 0x2200, 0x2049, 0x2ec7, 0x7000, 0x7204, 0xa205, 0x720c,
989 0xa215, 0x7008, 0xa084, 0xfffd, 0xa205, 0x0040, 0x2ed9, 0x0078,
990 0x2ede, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084,
991 0x0001, 0x00c0, 0x2f0c, 0x7108, 0x8104, 0x00c8, 0x2eeb, 0x1078,
992 0x2fa8, 0x0078, 0x2ee3, 0x700c, 0xa08c, 0x007f, 0x0040, 0x2f0c,
993 0x7004, 0x8004, 0x00c8, 0x2f03, 0x7014, 0xa005, 0x00c0, 0x2eff,
994 0x7010, 0xa005, 0x0040, 0x2f03, 0xa102, 0x00c8, 0x2ee3, 0x7007,
995 0x0010, 0x0078, 0x2f0c, 0x8aff, 0x0040, 0x2f0c, 0x1078, 0x316b,
996 0x00c0, 0x2f06, 0x0040, 0x2ee3, 0x1078, 0x2f56, 0x7003, 0x0000,
997 0x127f, 0x2000, 0x007c, 0x6424, 0x84ff, 0x0040, 0x2f30, 0x2c70,
998 0x2039, 0x2f35, 0x2704, 0xae68, 0x680c, 0xa630, 0x6808, 0xa529,
999 0x8421, 0x0040, 0x2f30, 0x8738, 0x2704, 0xa005, 0x00c0, 0x2f1b,
1000 0x7098, 0xa075, 0x0040, 0x2f30, 0x2039, 0x2f32, 0x0078, 0x2f1a,
1001 0x007c, 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018,
1002 0x001c, 0x0000, 0x127e, 0x2091, 0x2200, 0x2079, 0x3500, 0x2071,
1003 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071,
1004 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049,
1005 0x0000, 0x78b3, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x2f56,
1006 0x7004, 0x8004, 0x00c8, 0x2f82, 0x7007, 0x0012, 0x7108, 0x7008,
1007 0xa106, 0x00c0, 0x2f5e, 0xa184, 0x0030, 0x0040, 0x2f6b, 0xa086,
1008 0x0030, 0x00c0, 0x2f5e, 0x7000, 0xa084, 0x0001, 0x00c0, 0x2f82,
1009 0x7008, 0xa084, 0x000c, 0x00c0, 0x2f80, 0x710c, 0xa184, 0x0300,
1010 0x00c0, 0x2f80, 0xa184, 0x007f, 0x00c0, 0x2f56, 0x0078, 0x2f82,
1011 0x6817, 0x0003, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084,
1012 0x0008, 0x00c0, 0x2f86, 0x7007, 0x0012, 0x7108, 0x8104, 0x0048,
1013 0x2f8b, 0x78b3, 0x0000, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c,
1014 0x107e, 0x007e, 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078,
1015 0x2fa8, 0x157f, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c,
1016 0x7204, 0x2118, 0x7108, 0x700c, 0xa084, 0x0300, 0x00c0, 0x2fea,
1017 0xa184, 0x000c, 0x00c0, 0x2fea, 0x8213, 0x8213, 0x8213, 0x8213,
1018 0xa284, 0x0100, 0xa10d, 0x810b, 0x810b, 0x810f, 0xa184, 0x0007,
1019 0x0079, 0x2fc2, 0x2fcc, 0x2fdc, 0x2fea, 0x2fdc, 0x2ffe, 0x2ffe,
1020 0x2fea, 0x2ffc, 0x1078, 0x1ba5, 0x7007, 0x0002, 0x8aff, 0x00c0,
1021 0x2fd5, 0x2049, 0x0000, 0x0078, 0x2fd9, 0x1078, 0x316b, 0x00c0,
1022 0x2fd5, 0x78b3, 0x0000, 0x007c, 0x7007, 0x0002, 0x8aff, 0x00c0,
1023 0x2fe3, 0x0078, 0x2fe7, 0x1078, 0x316b, 0x00c0, 0x2fe3, 0x78b3,
1024 0x0000, 0x007c, 0x7007, 0x0002, 0x1078, 0x2f56, 0x1078, 0x2cbb,
1025 0x6814, 0xa084, 0x8000, 0x0040, 0x2ff7, 0x6817, 0x0002, 0x007c,
1026 0x1078, 0x1ba5, 0x1078, 0x1ba5, 0x1078, 0x3050, 0x7210, 0x7114,
1027 0x700c, 0xa09c, 0x007f, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000,
1028 0x78b0, 0xa005, 0x0040, 0x3010, 0x78b3, 0x0000, 0x0078, 0x3033,
1029 0x1078, 0x3050, 0x2704, 0x2c58, 0xac60, 0x630c, 0x2200, 0xa322,
1030 0x6308, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x3029, 0x00c8,
1031 0x3029, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078,
1032 0x3010, 0x2b60, 0x8a07, 0xa7ba, 0x2f32, 0xa73d, 0x2c00, 0x6882,
1033 0x6f86, 0x6c8e, 0x6b8a, 0x7007, 0x0012, 0x1078, 0x2f56, 0x007c,
1034 0x8738, 0x2704, 0xa005, 0x00c0, 0x3044, 0x6098, 0xa005, 0x0040,
1035 0x304d, 0x2060, 0x2039, 0x2f32, 0x8a51, 0x0040, 0x304c, 0x7008,
1036 0xa084, 0x00c0, 0xa086, 0x00c0, 0x007c, 0x2051, 0x0000, 0x007c,
1037 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x305d, 0x2039, 0x2f38,
1038 0x6000, 0xa064, 0x00c0, 0x305d, 0x2d60, 0x007c, 0x127e, 0x0d7e,
1039 0x2091, 0x2200, 0x0d7f, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c,
1040 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x2f32, 0x7e08,
1041 0xa6b5, 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x3079, 0xa6b5,
1042 0x0001, 0x0f7e, 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040,
1043 0x0040, 0x3088, 0xa684, 0x0001, 0x00c0, 0x3088, 0xa6b5, 0x0001,
1044 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x308a, 0x7000,
1045 0xa005, 0x0040, 0x3095, 0x1078, 0x1ba5, 0x2400, 0xa305, 0x00c0,
1046 0x309b, 0x0078, 0x30d8, 0x2c58, 0x2704, 0xac60, 0x6004, 0xa400,
1047 0x007e, 0x701a, 0x6000, 0xa301, 0x701e, 0x2009, 0x04fd, 0x2104,
1048 0xa086, 0x04fd, 0x007f, 0x00c0, 0x30c8, 0xa084, 0x0001, 0x0040,
1049 0x30c8, 0xa684, 0x0001, 0x00c0, 0x30c8, 0x7013, 0x0001, 0x7017,
1050 0x0000, 0x7602, 0x7007, 0x0001, 0x78b3, 0x0001, 0xa4a0, 0x0001,
1051 0xa399, 0x0000, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e,
1052 0x620c, 0x2400, 0xa202, 0x7012, 0x6208, 0x2300, 0xa203, 0x7016,
1053 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x3038, 0x0078, 0x30da,
1054 0x1078, 0x316b, 0x00c0, 0x30d8, 0x127f, 0x2000, 0x007c, 0x127e,
1055 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084,
1056 0x0004, 0x00c0, 0x30e6, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c,
1057 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x30f0, 0x7007,
1058 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x30f9, 0x7000, 0xa005,
1059 0x0040, 0x3104, 0x1078, 0x1ba5, 0x7e08, 0xa6b5, 0x000c, 0x6818,
1060 0xa084, 0x0040, 0x0040, 0x310e, 0xa6b5, 0x0001, 0x6824, 0xa005,
1061 0x0040, 0x311a, 0x2050, 0x2039, 0x2f35, 0x2d60, 0x1078, 0x316b,
1062 0x00c0, 0x3116, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
1063 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
1064 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x3130, 0xa6b5, 0x0001,
1065 0x2049, 0x311d, 0x6824, 0xa055, 0x0040, 0x3168, 0x2d70, 0x2e60,
1066 0x2039, 0x2f35, 0x2704, 0xae68, 0x680c, 0xa422, 0x6808, 0xa31b,
1067 0x0048, 0x3155, 0x8a51, 0x00c0, 0x3147, 0x1078, 0x1ba5, 0x8738,
1068 0x2704, 0xa005, 0x00c0, 0x313b, 0x7098, 0xa075, 0x2060, 0x0040,
1069 0x3168, 0x2039, 0x2f32, 0x0078, 0x313a, 0x8422, 0x8420, 0x831a,
1070 0xa399, 0x0000, 0x690c, 0x2400, 0xa122, 0x6908, 0x2300, 0xa11b,
1071 0x00c8, 0x3164, 0x1078, 0x1ba5, 0x2071, 0x0020, 0x0078, 0x3088,
1072 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0,
1073 0x0040, 0x3193, 0x2704, 0xac08, 0x2104, 0x701e, 0x8108, 0x2104,
1074 0x701a, 0x8108, 0x2104, 0x7016, 0x8108, 0x2104, 0x7012, 0x0f7e,
1075 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, 0x0040, 0x318e,
1076 0xa684, 0x0001, 0x00c0, 0x318e, 0xa6b5, 0x0001, 0x7602, 0x7007,
1077 0x0001, 0x1078, 0x3038, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091,
1078 0x2200, 0x2049, 0x3194, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x00c0,
1079 0x00c0, 0x31aa, 0x6824, 0xa005, 0x0040, 0x31ba, 0x0078, 0x2ede,
1080 0x0078, 0x31ba, 0x7108, 0x8104, 0x00c8, 0x31b2, 0x1078, 0x2fa8,
1081 0x0078, 0x319d, 0x7007, 0x0010, 0x7108, 0x8104, 0x00c8, 0x31b4,
1082 0x1078, 0x2fa8, 0x7008, 0xa086, 0x0002, 0x00c0, 0x319d, 0x7000,
1083 0xa005, 0x00c0, 0x319d, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f,
1084 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0d7e, 0x2091,
1085 0x2200, 0x0d7f, 0x2049, 0x31ca, 0xad80, 0x0010, 0x20a0, 0x2099,
1086 0x0031, 0x700c, 0xa084, 0x007f, 0x6826, 0x7007, 0x0008, 0x7007,
1087 0x0002, 0x7003, 0x0001, 0x0040, 0x31e8, 0x8000, 0x80ac, 0x53a5,
1088 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x31ea, 0x2049,
1089 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
1090 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049,
1091 0x31f9, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4,
1092 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x2f32, 0x7e08, 0xa6b5, 0x0004,
1093 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3212, 0x2c58,
1094 0x2704, 0xac60, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e,
1095 0x7013, 0x0001, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x007f,
1096 0x8007, 0x2009, 0x0031, 0x200a, 0x00a0, 0x322c, 0x7108, 0x7007,
1097 0x0002, 0x810c, 0x00c8, 0x322c, 0x810c, 0x0048, 0x3239, 0x0078,
1098 0x2fea, 0xa4a0, 0x0001, 0xa399, 0x0000, 0x6b8a, 0x6c8e, 0x7007,
1099 0x0004, 0x2049, 0x0000, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c,
1100 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x3251,
1101 0xa200, 0x00f0, 0x324c, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9,
1102 0x0010, 0xa005, 0x0040, 0x3277, 0xa11a, 0x00c8, 0x3277, 0x8213,
1103 0x818d, 0x0048, 0x326a, 0xa11a, 0x00c8, 0x326b, 0x00f0, 0x325f,
1104 0x0078, 0x326f, 0xa11a, 0x2308, 0x8210, 0x00f0, 0x325f, 0x007e,
1105 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e,
1106 0x3200, 0xa085, 0x0800, 0x0078, 0x3273, 0x00e0, 0x32bf, 0x2091,
1107 0x6000, 0x7820, 0x8001, 0x7822, 0x00c0, 0x32b9, 0x7824, 0x7822,
1108 0x2091, 0x8000, 0x2069, 0x3540, 0x6800, 0xa084, 0x0007, 0x0040,
1109 0x32a1, 0xa086, 0x0002, 0x0040, 0x32a1, 0x6830, 0xa00d, 0x0040,
1110 0x32a1, 0x2104, 0xa005, 0x0040, 0x32a1, 0x8001, 0x200a, 0x0040,
1111 0x336f, 0x2061, 0x3680, 0x20a9, 0x0080, 0x6034, 0xa005, 0x0040,
1112 0x32b3, 0x8001, 0x6036, 0x00c0, 0x32b3, 0x6010, 0xa005, 0x0040,
1113 0x32b3, 0x1078, 0x1a19, 0xace0, 0x0010, 0x0070, 0x32b9, 0x0078,
1114 0x32a5, 0x1078, 0x32d4, 0x1078, 0x32c2, 0x1078, 0x32f9, 0x2091,
1115 0x8001, 0x007c, 0x783c, 0x8001, 0x783e, 0x00c0, 0x32d3, 0x7840,
1116 0x783e, 0x7848, 0xa005, 0x0040, 0x32d3, 0x8001, 0x784a, 0x00c0,
1117 0x32d3, 0x1078, 0x1a19, 0x007c, 0x7834, 0x8001, 0x7836, 0x00c0,
1118 0x32f8, 0x7838, 0x7836, 0x2091, 0x8000, 0x7844, 0xa005, 0x00c0,
1119 0x32e3, 0x2001, 0x0101, 0x8001, 0x7846, 0xa080, 0x3e80, 0x2040,
1120 0x2004, 0xa065, 0x0040, 0x32f8, 0x6020, 0xa005, 0x0040, 0x32f4,
1121 0x8001, 0x6022, 0x0040, 0x3328, 0x6000, 0x2c40, 0x0078, 0x32e9,
1122 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, 0x3327, 0x782c, 0x782a,
1123 0x7830, 0xa005, 0x00c0, 0x3306, 0x2001, 0x0080, 0x8001, 0x7832,
1124 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, 0x3680, 0xa298, 0x0002,
1125 0x2304, 0xa084, 0x0008, 0x0040, 0x3327, 0xa290, 0x0009, 0x2204,
1126 0xa005, 0x0040, 0x331f, 0x8001, 0x2012, 0x00c0, 0x3327, 0x2304,
1127 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, 0x1078, 0x1a19, 0x007c,
1128 0x2069, 0x3540, 0x6800, 0xa005, 0x0040, 0x3332, 0x683c, 0xac06,
1129 0x0040, 0x336f, 0x6017, 0x0006, 0x60b0, 0xa084, 0x3f00, 0x601a,
1130 0x601c, 0xa084, 0x00ff, 0xa085, 0x0060, 0x601e, 0x6000, 0x2042,
1131 0x6710, 0x6fb6, 0x1078, 0x1692, 0x6818, 0xa005, 0x0040, 0x334a,
1132 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, 0x680a, 0x6810, 0x8001,
1133 0x00d0, 0x3354, 0x1078, 0x1ba5, 0x6812, 0x602f, 0x0000, 0x602b,
1134 0x0000, 0x2c68, 0x1078, 0x17dd, 0x2069, 0x3540, 0x2001, 0x0006,
1135 0x68a2, 0x7944, 0xa184, 0x0100, 0x00c0, 0x336a, 0x69ba, 0x2001,
1136 0x0004, 0x68a2, 0x1078, 0x1a14, 0x2091, 0x8001, 0x007c, 0x2009,
1137 0x354f, 0x2164, 0x2069, 0x0100, 0x1078, 0x1b6b, 0x6017, 0x0006,
1138 0x6858, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff, 0xa085,
1139 0x0048, 0x601e, 0x602f, 0x0000, 0x602b, 0x0000, 0x6830, 0xa084,
1140 0x0040, 0x0040, 0x33ab, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
1141 0xa084, 0x0004, 0x0040, 0x3398, 0x0070, 0x3398, 0x0078, 0x338f,
1142 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040,
1143 0x33a5, 0x0070, 0x33a5, 0x0078, 0x339c, 0x20a9, 0x00fa, 0x0070,
1144 0x33ab, 0x0078, 0x33a7, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b,
1145 0x0046, 0x2009, 0x3568, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091,
1146 0x8001, 0x007c, 0x2079, 0x3500, 0x1078, 0x3403, 0x1078, 0x33cb,
1147 0x1078, 0x33e0, 0x1078, 0x33f5, 0x7833, 0x0000, 0x7847, 0x0000,
1148 0x784b, 0x0000, 0x007c, 0x2019, 0x000a, 0x2011, 0x3546, 0x2204,
1149 0xa086, 0x0032, 0x0040, 0x33dd, 0x2019, 0x000c, 0x2204, 0xa086,
1150 0x003c, 0x0040, 0x33dd, 0x2019, 0x0008, 0x7b2a, 0x7b2e, 0x007c,
1151 0x2019, 0x0030, 0x2011, 0x3546, 0x2204, 0xa086, 0x0032, 0x0040,
1152 0x33f2, 0x2019, 0x0039, 0x2204, 0xa086, 0x003c, 0x0040, 0x33f2,
1153 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x000d, 0x2011,
1154 0x3546, 0x2204, 0xa086, 0x003c, 0x0040, 0x3400, 0x2019, 0x000a,
1155 0x7b3e, 0x7b42, 0x007c, 0x2019, 0x2faf, 0x2011, 0x3546, 0x2204,
1156 0xa086, 0x0032, 0x0040, 0x3415, 0x2019, 0x3971, 0x2204, 0xa086,
1157 0x003c, 0x0040, 0x3415, 0x2019, 0x2626, 0x7b22, 0x7b26, 0x007c,
1158 0x92a7
1159};
1160unsigned short __devinitdata sbus_risc_code_length01 = 0x2419;
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index a2ef03243a2c..166417a6afba 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -169,12 +169,10 @@ scsi_pool_alloc_command(struct scsi_host_cmd_pool *pool, gfp_t gfp_mask)
169{ 169{
170 struct scsi_cmnd *cmd; 170 struct scsi_cmnd *cmd;
171 171
172 cmd = kmem_cache_alloc(pool->cmd_slab, gfp_mask | pool->gfp_mask); 172 cmd = kmem_cache_zalloc(pool->cmd_slab, gfp_mask | pool->gfp_mask);
173 if (!cmd) 173 if (!cmd)
174 return NULL; 174 return NULL;
175 175
176 memset(cmd, 0, sizeof(*cmd));
177
178 cmd->sense_buffer = kmem_cache_alloc(pool->sense_slab, 176 cmd->sense_buffer = kmem_cache_alloc(pool->sense_slab,
179 gfp_mask | pool->gfp_mask); 177 gfp_mask | pool->gfp_mask);
180 if (!cmd->sense_buffer) { 178 if (!cmd->sense_buffer) {
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 4b13e36d3aa0..d1cb64ad1a3f 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -791,7 +791,22 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
791 "%d bytes done.\n", 791 "%d bytes done.\n",
792 req->nr_sectors, good_bytes)); 792 req->nr_sectors, good_bytes));
793 793
794 /* A number of bytes were successfully read. If there 794 /*
795 * Recovered errors need reporting, but they're always treated
796 * as success, so fiddle the result code here. For BLOCK_PC
797 * we already took a copy of the original into rq->errors which
798 * is what gets returned to the user
799 */
800 if (sense_valid && sshdr.sense_key == RECOVERED_ERROR) {
801 if (!(req->cmd_flags & REQ_QUIET))
802 scsi_print_sense("", cmd);
803 result = 0;
804 /* BLOCK_PC may have set error */
805 error = 0;
806 }
807
808 /*
809 * A number of bytes were successfully read. If there
795 * are leftovers and there is some kind of error 810 * are leftovers and there is some kind of error
796 * (result != 0), retry the rest. 811 * (result != 0), retry the rest.
797 */ 812 */
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index aeab5d9dff27..3fcb64b91c43 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1051,12 +1051,6 @@ static int sd_done(struct scsi_cmnd *SCpnt)
1051 good_bytes = sd_completed_bytes(SCpnt); 1051 good_bytes = sd_completed_bytes(SCpnt);
1052 break; 1052 break;
1053 case RECOVERED_ERROR: 1053 case RECOVERED_ERROR:
1054 /* Inform the user, but make sure that it's not treated
1055 * as a hard error.
1056 */
1057 scsi_print_sense("sd", SCpnt);
1058 SCpnt->result = 0;
1059 memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1060 good_bytes = scsi_bufflen(SCpnt); 1054 good_bytes = scsi_bufflen(SCpnt);
1061 break; 1055 break;
1062 case NO_SENSE: 1056 case NO_SENSE:
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
index c9146d751cbf..4f618f487356 100644
--- a/drivers/scsi/ses.c
+++ b/drivers/scsi/ses.c
@@ -264,6 +264,7 @@ struct ses_host_edev {
264 struct enclosure_device *edev; 264 struct enclosure_device *edev;
265}; 265};
266 266
267#if 0
267int ses_match_host(struct enclosure_device *edev, void *data) 268int ses_match_host(struct enclosure_device *edev, void *data)
268{ 269{
269 struct ses_host_edev *sed = data; 270 struct ses_host_edev *sed = data;
@@ -280,6 +281,7 @@ int ses_match_host(struct enclosure_device *edev, void *data)
280 sed->edev = edev; 281 sed->edev = edev;
281 return 1; 282 return 1;
282} 283}
284#endif /* 0 */
283 285
284static void ses_process_descriptor(struct enclosure_component *ecomp, 286static void ses_process_descriptor(struct enclosure_component *ecomp,
285 unsigned char *desc) 287 unsigned char *desc)
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index ffc87851f2e8..82312df9b0bf 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -1312,8 +1312,10 @@ static void sg_rq_end_io(struct request *rq, int uptodate)
1312 wake_up_interruptible(&sfp->read_wait); 1312 wake_up_interruptible(&sfp->read_wait);
1313 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN); 1313 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
1314 kref_put(&sfp->f_ref, sg_remove_sfp); 1314 kref_put(&sfp->f_ref, sg_remove_sfp);
1315 } else 1315 } else {
1316 execute_in_process_context(sg_rq_end_io_usercontext, &srp->ew); 1316 INIT_WORK(&srp->ew.work, sg_rq_end_io_usercontext);
1317 schedule_work(&srp->ew.work);
1318 }
1317} 1319}
1318 1320
1319static struct file_operations sg_fops = { 1321static struct file_operations sg_fops = {
@@ -1656,10 +1658,30 @@ static int sg_start_req(Sg_request *srp, unsigned char *cmd)
1656 md->null_mapped = hp->dxferp ? 0 : 1; 1658 md->null_mapped = hp->dxferp ? 0 : 1;
1657 } 1659 }
1658 1660
1659 if (iov_count) 1661 if (iov_count) {
1660 res = blk_rq_map_user_iov(q, rq, md, hp->dxferp, iov_count, 1662 int len, size = sizeof(struct sg_iovec) * iov_count;
1661 hp->dxfer_len, GFP_ATOMIC); 1663 struct iovec *iov;
1662 else 1664
1665 iov = kmalloc(size, GFP_ATOMIC);
1666 if (!iov)
1667 return -ENOMEM;
1668
1669 if (copy_from_user(iov, hp->dxferp, size)) {
1670 kfree(iov);
1671 return -EFAULT;
1672 }
1673
1674 len = iov_length(iov, iov_count);
1675 if (hp->dxfer_len < len) {
1676 iov_count = iov_shorten(iov, iov_count, hp->dxfer_len);
1677 len = hp->dxfer_len;
1678 }
1679
1680 res = blk_rq_map_user_iov(q, rq, md, (struct sg_iovec *)iov,
1681 iov_count,
1682 len, GFP_ATOMIC);
1683 kfree(iov);
1684 } else
1663 res = blk_rq_map_user(q, rq, md, hp->dxferp, 1685 res = blk_rq_map_user(q, rq, md, hp->dxferp,
1664 hp->dxfer_len, GFP_ATOMIC); 1686 hp->dxfer_len, GFP_ATOMIC);
1665 1687
@@ -2079,7 +2101,8 @@ static void sg_remove_sfp(struct kref *kref)
2079 write_unlock_irqrestore(&sg_index_lock, iflags); 2101 write_unlock_irqrestore(&sg_index_lock, iflags);
2080 wake_up_interruptible(&sdp->o_excl_wait); 2102 wake_up_interruptible(&sdp->o_excl_wait);
2081 2103
2082 execute_in_process_context(sg_remove_sfp_usercontext, &sfp->ew); 2104 INIT_WORK(&sfp->ew.work, sg_remove_sfp_usercontext);
2105 schedule_work(&sfp->ew.work);
2083} 2106}
2084 2107
2085static int 2108static int
diff --git a/drivers/scsi/sni_53c710.c b/drivers/scsi/sni_53c710.c
index 77f0b2cdaa94..37b3359e863e 100644
--- a/drivers/scsi/sni_53c710.c
+++ b/drivers/scsi/sni_53c710.c
@@ -83,7 +83,7 @@ static int __init snirm710_probe(struct platform_device *dev)
83 } 83 }
84 84
85 hostdata->dev = &dev->dev; 85 hostdata->dev = &dev->dev;
86 dma_set_mask(&dev->dev, DMA_32BIT_MASK); 86 dma_set_mask(&dev->dev, DMA_BIT_MASK(32));
87 hostdata->base = ioremap_nocache(base, 0x100); 87 hostdata->base = ioremap_nocache(base, 0x100);
88 hostdata->differential = 0; 88 hostdata->differential = 0;
89 89
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index e7fa3caead79..0e1a0f2d2ad5 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -309,15 +309,6 @@ static int sr_done(struct scsi_cmnd *SCpnt)
309 break; 309 break;
310 310
311 case RECOVERED_ERROR: 311 case RECOVERED_ERROR:
312
313 /*
314 * An error occured, but it recovered. Inform the
315 * user, but make sure that it's not treated as a
316 * hard error.
317 */
318 scsi_print_sense("sr", SCpnt);
319 SCpnt->result = 0;
320 SCpnt->sense_buffer[0] = 0x0;
321 good_bytes = this_count; 312 good_bytes = this_count;
322 break; 313 break;
323 314
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 47b614e8580c..8d2a95c4e5b5 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -36,11 +36,11 @@
36#include <scsi/scsi_eh.h> 36#include <scsi/scsi_eh.h>
37 37
38#define DRV_NAME "stex" 38#define DRV_NAME "stex"
39#define ST_DRIVER_VERSION "4.6.0000.1" 39#define ST_DRIVER_VERSION "4.6.0000.3"
40#define ST_VER_MAJOR 4 40#define ST_VER_MAJOR 4
41#define ST_VER_MINOR 6 41#define ST_VER_MINOR 6
42#define ST_OEM 0 42#define ST_OEM 0
43#define ST_BUILD_VER 1 43#define ST_BUILD_VER 3
44 44
45enum { 45enum {
46 /* MU register offset */ 46 /* MU register offset */
@@ -55,6 +55,13 @@ enum {
55 OIS = 0x30, /* MU_OUTBOUND_INTERRUPT_STATUS */ 55 OIS = 0x30, /* MU_OUTBOUND_INTERRUPT_STATUS */
56 OIM = 0x3c, /* MU_OUTBOUND_INTERRUPT_MASK */ 56 OIM = 0x3c, /* MU_OUTBOUND_INTERRUPT_MASK */
57 57
58 YH2I_INT = 0x20,
59 YINT_EN = 0x34,
60 YI2H_INT = 0x9c,
61 YI2H_INT_C = 0xa0,
62 YH2I_REQ = 0xc0,
63 YH2I_REQ_HI = 0xc4,
64
58 /* MU register value */ 65 /* MU register value */
59 MU_INBOUND_DOORBELL_HANDSHAKE = 1, 66 MU_INBOUND_DOORBELL_HANDSHAKE = 1,
60 MU_INBOUND_DOORBELL_REQHEADCHANGED = 2, 67 MU_INBOUND_DOORBELL_REQHEADCHANGED = 2,
@@ -95,20 +102,14 @@ enum {
95 TASK_ATTRIBUTE_ORDERED = 0x2, 102 TASK_ATTRIBUTE_ORDERED = 0x2,
96 TASK_ATTRIBUTE_ACA = 0x4, 103 TASK_ATTRIBUTE_ACA = 0x4,
97 104
98 /* request count, etc. */ 105 SS_STS_NORMAL = 0x80000000,
99 MU_MAX_REQUEST = 32, 106 SS_STS_DONE = 0x40000000,
107 SS_STS_HANDSHAKE = 0x20000000,
100 108
101 /* one message wasted, use MU_MAX_REQUEST+1 109 SS_HEAD_HANDSHAKE = 0x80,
102 to handle MU_MAX_REQUEST messages */
103 MU_REQ_COUNT = (MU_MAX_REQUEST + 1),
104 MU_STATUS_COUNT = (MU_MAX_REQUEST + 1),
105 110
106 STEX_CDB_LENGTH = 16, 111 STEX_CDB_LENGTH = 16,
107 REQ_VARIABLE_LEN = 1024,
108 STATUS_VAR_LEN = 128, 112 STATUS_VAR_LEN = 128,
109 ST_CAN_QUEUE = MU_MAX_REQUEST,
110 ST_CMD_PER_LUN = MU_MAX_REQUEST,
111 ST_MAX_SG = 32,
112 113
113 /* sg flags */ 114 /* sg flags */
114 SG_CF_EOT = 0x80, /* end of table */ 115 SG_CF_EOT = 0x80, /* end of table */
@@ -120,9 +121,9 @@ enum {
120 121
121 st_shasta = 0, 122 st_shasta = 0,
122 st_vsc = 1, 123 st_vsc = 1,
123 st_vsc1 = 2, 124 st_yosemite = 2,
124 st_yosemite = 3, 125 st_seq = 3,
125 st_seq = 4, 126 st_yel = 4,
126 127
127 PASSTHRU_REQ_TYPE = 0x00000001, 128 PASSTHRU_REQ_TYPE = 0x00000001,
128 PASSTHRU_REQ_NO_WAKEUP = 0x00000100, 129 PASSTHRU_REQ_NO_WAKEUP = 0x00000100,
@@ -160,26 +161,36 @@ struct st_sgitem {
160 u8 ctrl; /* SG_CF_xxx */ 161 u8 ctrl; /* SG_CF_xxx */
161 u8 reserved[3]; 162 u8 reserved[3];
162 __le32 count; 163 __le32 count;
164 __le64 addr;
165};
166
167struct st_ss_sgitem {
163 __le32 addr; 168 __le32 addr;
164 __le32 addr_hi; 169 __le32 addr_hi;
170 __le32 count;
165}; 171};
166 172
167struct st_sgtable { 173struct st_sgtable {
168 __le16 sg_count; 174 __le16 sg_count;
169 __le16 max_sg_count; 175 __le16 max_sg_count;
170 __le32 sz_in_byte; 176 __le32 sz_in_byte;
171 struct st_sgitem table[ST_MAX_SG]; 177};
178
179struct st_msg_header {
180 __le64 handle;
181 u8 flag;
182 u8 channel;
183 __le16 timeout;
184 u32 reserved;
172}; 185};
173 186
174struct handshake_frame { 187struct handshake_frame {
175 __le32 rb_phy; /* request payload queue physical address */ 188 __le64 rb_phy; /* request payload queue physical address */
176 __le32 rb_phy_hi;
177 __le16 req_sz; /* size of each request payload */ 189 __le16 req_sz; /* size of each request payload */
178 __le16 req_cnt; /* count of reqs the buffer can hold */ 190 __le16 req_cnt; /* count of reqs the buffer can hold */
179 __le16 status_sz; /* size of each status payload */ 191 __le16 status_sz; /* size of each status payload */
180 __le16 status_cnt; /* count of status the buffer can hold */ 192 __le16 status_cnt; /* count of status the buffer can hold */
181 __le32 hosttime; /* seconds from Jan 1, 1970 (GMT) */ 193 __le64 hosttime; /* seconds from Jan 1, 1970 (GMT) */
182 __le32 hosttime_hi;
183 u8 partner_type; /* who sends this frame */ 194 u8 partner_type; /* who sends this frame */
184 u8 reserved0[7]; 195 u8 reserved0[7];
185 __le32 partner_ver_major; 196 __le32 partner_ver_major;
@@ -188,7 +199,8 @@ struct handshake_frame {
188 __le32 partner_ver_build; 199 __le32 partner_ver_build;
189 __le32 extra_offset; /* NEW */ 200 __le32 extra_offset; /* NEW */
190 __le32 extra_size; /* NEW */ 201 __le32 extra_size; /* NEW */
191 u32 reserved1[2]; 202 __le32 scratch_size;
203 u32 reserved1;
192}; 204};
193 205
194struct req_msg { 206struct req_msg {
@@ -200,7 +212,7 @@ struct req_msg {
200 u8 data_dir; 212 u8 data_dir;
201 u8 payload_sz; /* payload size in 4-byte, not used */ 213 u8 payload_sz; /* payload size in 4-byte, not used */
202 u8 cdb[STEX_CDB_LENGTH]; 214 u8 cdb[STEX_CDB_LENGTH];
203 u8 variable[REQ_VARIABLE_LEN]; 215 u32 variable[0];
204}; 216};
205 217
206struct status_msg { 218struct status_msg {
@@ -256,12 +268,6 @@ struct st_drvver {
256 u32 reserved[3]; 268 u32 reserved[3];
257}; 269};
258 270
259#define MU_REQ_BUFFER_SIZE (MU_REQ_COUNT * sizeof(struct req_msg))
260#define MU_STATUS_BUFFER_SIZE (MU_STATUS_COUNT * sizeof(struct status_msg))
261#define MU_BUFFER_SIZE (MU_REQ_BUFFER_SIZE + MU_STATUS_BUFFER_SIZE)
262#define STEX_EXTRA_SIZE sizeof(struct st_frame)
263#define STEX_BUFFER_SIZE (MU_BUFFER_SIZE + STEX_EXTRA_SIZE)
264
265struct st_ccb { 271struct st_ccb {
266 struct req_msg *req; 272 struct req_msg *req;
267 struct scsi_cmnd *cmd; 273 struct scsi_cmnd *cmd;
@@ -273,6 +279,7 @@ struct st_ccb {
273 u32 req_type; 279 u32 req_type;
274 u8 srb_status; 280 u8 srb_status;
275 u8 scsi_status; 281 u8 scsi_status;
282 u8 reserved[2];
276}; 283};
277 284
278struct st_hba { 285struct st_hba {
@@ -284,6 +291,10 @@ struct st_hba {
284 struct Scsi_Host *host; 291 struct Scsi_Host *host;
285 struct pci_dev *pdev; 292 struct pci_dev *pdev;
286 293
294 struct req_msg * (*alloc_rq) (struct st_hba *);
295 int (*map_sg)(struct st_hba *, struct req_msg *, struct st_ccb *);
296 void (*send) (struct st_hba *, struct req_msg *, u16);
297
287 u32 req_head; 298 u32 req_head;
288 u32 req_tail; 299 u32 req_tail;
289 u32 status_head; 300 u32 status_head;
@@ -291,16 +302,36 @@ struct st_hba {
291 302
292 struct status_msg *status_buffer; 303 struct status_msg *status_buffer;
293 void *copy_buffer; /* temp buffer for driver-handled commands */ 304 void *copy_buffer; /* temp buffer for driver-handled commands */
294 struct st_ccb ccb[MU_MAX_REQUEST]; 305 struct st_ccb *ccb;
295 struct st_ccb *wait_ccb; 306 struct st_ccb *wait_ccb;
296 wait_queue_head_t waitq; 307 __le32 *scratch;
297 308
298 unsigned int mu_status; 309 unsigned int mu_status;
310 unsigned int cardtype;
311 int msi_enabled;
299 int out_req_cnt; 312 int out_req_cnt;
313 u32 extra_offset;
314 u16 rq_count;
315 u16 rq_size;
316 u16 sts_count;
317};
300 318
301 unsigned int cardtype; 319struct st_card_info {
320 struct req_msg * (*alloc_rq) (struct st_hba *);
321 int (*map_sg)(struct st_hba *, struct req_msg *, struct st_ccb *);
322 void (*send) (struct st_hba *, struct req_msg *, u16);
323 unsigned int max_id;
324 unsigned int max_lun;
325 unsigned int max_channel;
326 u16 rq_count;
327 u16 rq_size;
328 u16 sts_count;
302}; 329};
303 330
331static int msi;
332module_param(msi, int, 0);
333MODULE_PARM_DESC(msi, "Enable Message Signaled Interrupts(0=off, 1=on)");
334
304static const char console_inq_page[] = 335static const char console_inq_page[] =
305{ 336{
306 0x03,0x00,0x03,0x03,0xFA,0x00,0x00,0x30, 337 0x03,0x00,0x03,0x03,0xFA,0x00,0x00,0x30,
@@ -318,22 +349,20 @@ MODULE_DESCRIPTION("Promise Technology SuperTrak EX Controllers");
318MODULE_LICENSE("GPL"); 349MODULE_LICENSE("GPL");
319MODULE_VERSION(ST_DRIVER_VERSION); 350MODULE_VERSION(ST_DRIVER_VERSION);
320 351
321static void stex_gettime(__le32 *time) 352static void stex_gettime(__le64 *time)
322{ 353{
323 struct timeval tv; 354 struct timeval tv;
324 355
325 do_gettimeofday(&tv); 356 do_gettimeofday(&tv);
326 *time = cpu_to_le32(tv.tv_sec & 0xffffffff); 357 *time = cpu_to_le64(tv.tv_sec);
327 *(time + 1) = cpu_to_le32((tv.tv_sec >> 16) >> 16);
328} 358}
329 359
330static struct status_msg *stex_get_status(struct st_hba *hba) 360static struct status_msg *stex_get_status(struct st_hba *hba)
331{ 361{
332 struct status_msg *status = 362 struct status_msg *status = hba->status_buffer + hba->status_tail;
333 hba->status_buffer + hba->status_tail;
334 363
335 ++hba->status_tail; 364 ++hba->status_tail;
336 hba->status_tail %= MU_STATUS_COUNT; 365 hba->status_tail %= hba->sts_count+1;
337 366
338 return status; 367 return status;
339} 368}
@@ -351,47 +380,83 @@ static void stex_invalid_field(struct scsi_cmnd *cmd,
351 380
352static struct req_msg *stex_alloc_req(struct st_hba *hba) 381static struct req_msg *stex_alloc_req(struct st_hba *hba)
353{ 382{
354 struct req_msg *req = ((struct req_msg *)hba->dma_mem) + 383 struct req_msg *req = hba->dma_mem + hba->req_head * hba->rq_size;
355 hba->req_head;
356 384
357 ++hba->req_head; 385 ++hba->req_head;
358 hba->req_head %= MU_REQ_COUNT; 386 hba->req_head %= hba->rq_count+1;
359 387
360 return req; 388 return req;
361} 389}
362 390
391static struct req_msg *stex_ss_alloc_req(struct st_hba *hba)
392{
393 return (struct req_msg *)(hba->dma_mem +
394 hba->req_head * hba->rq_size + sizeof(struct st_msg_header));
395}
396
363static int stex_map_sg(struct st_hba *hba, 397static int stex_map_sg(struct st_hba *hba,
364 struct req_msg *req, struct st_ccb *ccb) 398 struct req_msg *req, struct st_ccb *ccb)
365{ 399{
366 struct scsi_cmnd *cmd; 400 struct scsi_cmnd *cmd;
367 struct scatterlist *sg; 401 struct scatterlist *sg;
368 struct st_sgtable *dst; 402 struct st_sgtable *dst;
403 struct st_sgitem *table;
369 int i, nseg; 404 int i, nseg;
370 405
371 cmd = ccb->cmd; 406 cmd = ccb->cmd;
372 dst = (struct st_sgtable *)req->variable; 407 nseg = scsi_dma_map(cmd);
373 dst->max_sg_count = cpu_to_le16(ST_MAX_SG); 408 BUG_ON(nseg < 0);
374 dst->sz_in_byte = cpu_to_le32(scsi_bufflen(cmd)); 409 if (nseg) {
410 dst = (struct st_sgtable *)req->variable;
411
412 ccb->sg_count = nseg;
413 dst->sg_count = cpu_to_le16((u16)nseg);
414 dst->max_sg_count = cpu_to_le16(hba->host->sg_tablesize);
415 dst->sz_in_byte = cpu_to_le32(scsi_bufflen(cmd));
416
417 table = (struct st_sgitem *)(dst + 1);
418 scsi_for_each_sg(cmd, sg, nseg, i) {
419 table[i].count = cpu_to_le32((u32)sg_dma_len(sg));
420 table[i].addr = cpu_to_le64(sg_dma_address(sg));
421 table[i].ctrl = SG_CF_64B | SG_CF_HOST;
422 }
423 table[--i].ctrl |= SG_CF_EOT;
424 }
425
426 return nseg;
427}
428
429static int stex_ss_map_sg(struct st_hba *hba,
430 struct req_msg *req, struct st_ccb *ccb)
431{
432 struct scsi_cmnd *cmd;
433 struct scatterlist *sg;
434 struct st_sgtable *dst;
435 struct st_ss_sgitem *table;
436 int i, nseg;
375 437
438 cmd = ccb->cmd;
376 nseg = scsi_dma_map(cmd); 439 nseg = scsi_dma_map(cmd);
377 if (nseg < 0) 440 BUG_ON(nseg < 0);
378 return -EIO;
379 if (nseg) { 441 if (nseg) {
442 dst = (struct st_sgtable *)req->variable;
443
380 ccb->sg_count = nseg; 444 ccb->sg_count = nseg;
381 dst->sg_count = cpu_to_le16((u16)nseg); 445 dst->sg_count = cpu_to_le16((u16)nseg);
446 dst->max_sg_count = cpu_to_le16(hba->host->sg_tablesize);
447 dst->sz_in_byte = cpu_to_le32(scsi_bufflen(cmd));
382 448
449 table = (struct st_ss_sgitem *)(dst + 1);
383 scsi_for_each_sg(cmd, sg, nseg, i) { 450 scsi_for_each_sg(cmd, sg, nseg, i) {
384 dst->table[i].count = cpu_to_le32((u32)sg_dma_len(sg)); 451 table[i].count = cpu_to_le32((u32)sg_dma_len(sg));
385 dst->table[i].addr = 452 table[i].addr =
386 cpu_to_le32(sg_dma_address(sg) & 0xffffffff); 453 cpu_to_le32(sg_dma_address(sg) & 0xffffffff);
387 dst->table[i].addr_hi = 454 table[i].addr_hi =
388 cpu_to_le32((sg_dma_address(sg) >> 16) >> 16); 455 cpu_to_le32((sg_dma_address(sg) >> 16) >> 16);
389 dst->table[i].ctrl = SG_CF_64B | SG_CF_HOST;
390 } 456 }
391 dst->table[--i].ctrl |= SG_CF_EOT;
392 } 457 }
393 458
394 return 0; 459 return nseg;
395} 460}
396 461
397static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb) 462static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb)
@@ -400,7 +465,7 @@ static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb)
400 size_t count = sizeof(struct st_frame); 465 size_t count = sizeof(struct st_frame);
401 466
402 p = hba->copy_buffer; 467 p = hba->copy_buffer;
403 count = scsi_sg_copy_to_buffer(ccb->cmd, p, count); 468 scsi_sg_copy_to_buffer(ccb->cmd, p, count);
404 memset(p->base, 0, sizeof(u32)*6); 469 memset(p->base, 0, sizeof(u32)*6);
405 *(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0); 470 *(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0);
406 p->rom_addr = 0; 471 p->rom_addr = 0;
@@ -418,15 +483,13 @@ static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb)
418 p->subid = 483 p->subid =
419 hba->pdev->subsystem_vendor << 16 | hba->pdev->subsystem_device; 484 hba->pdev->subsystem_vendor << 16 | hba->pdev->subsystem_device;
420 485
421 count = scsi_sg_copy_from_buffer(ccb->cmd, p, count); 486 scsi_sg_copy_from_buffer(ccb->cmd, p, count);
422} 487}
423 488
424static void 489static void
425stex_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag) 490stex_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag)
426{ 491{
427 req->tag = cpu_to_le16(tag); 492 req->tag = cpu_to_le16(tag);
428 req->task_attr = TASK_ATTRIBUTE_SIMPLE;
429 req->task_manage = 0; /* not supported yet */
430 493
431 hba->ccb[tag].req = req; 494 hba->ccb[tag].req = req;
432 hba->out_req_cnt++; 495 hba->out_req_cnt++;
@@ -436,13 +499,44 @@ stex_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag)
436 readl(hba->mmio_base + IDBL); /* flush */ 499 readl(hba->mmio_base + IDBL); /* flush */
437} 500}
438 501
502static void
503stex_ss_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag)
504{
505 struct scsi_cmnd *cmd;
506 struct st_msg_header *msg_h;
507 dma_addr_t addr;
508
509 req->tag = cpu_to_le16(tag);
510
511 hba->ccb[tag].req = req;
512 hba->out_req_cnt++;
513
514 cmd = hba->ccb[tag].cmd;
515 msg_h = (struct st_msg_header *)req - 1;
516 if (likely(cmd)) {
517 msg_h->channel = (u8)cmd->device->channel;
518 msg_h->timeout = cpu_to_le16(cmd->request->timeout/HZ);
519 }
520 addr = hba->dma_handle + hba->req_head * hba->rq_size;
521 addr += (hba->ccb[tag].sg_count+4)/11;
522 msg_h->handle = cpu_to_le64(addr);
523
524 ++hba->req_head;
525 hba->req_head %= hba->rq_count+1;
526
527 writel((addr >> 16) >> 16, hba->mmio_base + YH2I_REQ_HI);
528 readl(hba->mmio_base + YH2I_REQ_HI); /* flush */
529 writel(addr, hba->mmio_base + YH2I_REQ);
530 readl(hba->mmio_base + YH2I_REQ); /* flush */
531}
532
439static int 533static int
440stex_slave_alloc(struct scsi_device *sdev) 534stex_slave_alloc(struct scsi_device *sdev)
441{ 535{
442 /* Cheat: usually extracted from Inquiry data */ 536 /* Cheat: usually extracted from Inquiry data */
443 sdev->tagged_supported = 1; 537 sdev->tagged_supported = 1;
444 538
445 scsi_activate_tcq(sdev, ST_CMD_PER_LUN); 539 scsi_activate_tcq(sdev, sdev->host->can_queue);
446 540
447 return 0; 541 return 0;
448} 542}
@@ -469,7 +563,7 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
469{ 563{
470 struct st_hba *hba; 564 struct st_hba *hba;
471 struct Scsi_Host *host; 565 struct Scsi_Host *host;
472 unsigned int id,lun; 566 unsigned int id, lun;
473 struct req_msg *req; 567 struct req_msg *req;
474 u16 tag; 568 u16 tag;
475 569
@@ -516,7 +610,8 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
516 case INQUIRY: 610 case INQUIRY:
517 if (id != host->max_id - 1) 611 if (id != host->max_id - 1)
518 break; 612 break;
519 if (lun == 0 && (cmd->cmnd[1] & INQUIRY_EVPD) == 0) { 613 if (!lun && !cmd->device->channel &&
614 (cmd->cmnd[1] & INQUIRY_EVPD) == 0) {
520 scsi_sg_copy_from_buffer(cmd, (void *)console_inq_page, 615 scsi_sg_copy_from_buffer(cmd, (void *)console_inq_page,
521 sizeof(console_inq_page)); 616 sizeof(console_inq_page));
522 cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; 617 cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
@@ -554,7 +649,7 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
554 if (unlikely(tag >= host->can_queue)) 649 if (unlikely(tag >= host->can_queue))
555 return SCSI_MLQUEUE_HOST_BUSY; 650 return SCSI_MLQUEUE_HOST_BUSY;
556 651
557 req = stex_alloc_req(hba); 652 req = hba->alloc_rq(hba);
558 653
559 req->lun = lun; 654 req->lun = lun;
560 req->target = id; 655 req->target = id;
@@ -572,12 +667,13 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
572 hba->ccb[tag].cmd = cmd; 667 hba->ccb[tag].cmd = cmd;
573 hba->ccb[tag].sense_bufflen = SCSI_SENSE_BUFFERSIZE; 668 hba->ccb[tag].sense_bufflen = SCSI_SENSE_BUFFERSIZE;
574 hba->ccb[tag].sense_buffer = cmd->sense_buffer; 669 hba->ccb[tag].sense_buffer = cmd->sense_buffer;
575 hba->ccb[tag].req_type = 0;
576 670
577 if (cmd->sc_data_direction != DMA_NONE) 671 if (!hba->map_sg(hba, req, &hba->ccb[tag])) {
578 stex_map_sg(hba, req, &hba->ccb[tag]); 672 hba->ccb[tag].sg_count = 0;
673 memset(&req->variable[0], 0, 8);
674 }
579 675
580 stex_send_cmd(hba, req, tag); 676 hba->send(hba, req, tag);
581 return 0; 677 return 0;
582} 678}
583 679
@@ -586,7 +682,7 @@ static void stex_scsi_done(struct st_ccb *ccb)
586 struct scsi_cmnd *cmd = ccb->cmd; 682 struct scsi_cmnd *cmd = ccb->cmd;
587 int result; 683 int result;
588 684
589 if (ccb->srb_status == SRB_STATUS_SUCCESS || ccb->srb_status == 0) { 685 if (ccb->srb_status == SRB_STATUS_SUCCESS || ccb->srb_status == 0) {
590 result = ccb->scsi_status; 686 result = ccb->scsi_status;
591 switch (ccb->scsi_status) { 687 switch (ccb->scsi_status) {
592 case SAM_STAT_GOOD: 688 case SAM_STAT_GOOD:
@@ -626,8 +722,6 @@ static void stex_scsi_done(struct st_ccb *ccb)
626static void stex_copy_data(struct st_ccb *ccb, 722static void stex_copy_data(struct st_ccb *ccb,
627 struct status_msg *resp, unsigned int variable) 723 struct status_msg *resp, unsigned int variable)
628{ 724{
629 size_t count = variable;
630
631 if (resp->scsi_status != SAM_STAT_GOOD) { 725 if (resp->scsi_status != SAM_STAT_GOOD) {
632 if (ccb->sense_buffer != NULL) 726 if (ccb->sense_buffer != NULL)
633 memcpy(ccb->sense_buffer, resp->variable, 727 memcpy(ccb->sense_buffer, resp->variable,
@@ -637,17 +731,16 @@ static void stex_copy_data(struct st_ccb *ccb,
637 731
638 if (ccb->cmd == NULL) 732 if (ccb->cmd == NULL)
639 return; 733 return;
640 count = scsi_sg_copy_from_buffer(ccb->cmd, resp->variable, count); 734 scsi_sg_copy_from_buffer(ccb->cmd, resp->variable, variable);
641} 735}
642 736
643static void stex_ys_commands(struct st_hba *hba, 737static void stex_check_cmd(struct st_hba *hba,
644 struct st_ccb *ccb, struct status_msg *resp) 738 struct st_ccb *ccb, struct status_msg *resp)
645{ 739{
646 if (ccb->cmd->cmnd[0] == MGT_CMD && 740 if (ccb->cmd->cmnd[0] == MGT_CMD &&
647 resp->scsi_status != SAM_STAT_CHECK_CONDITION) { 741 resp->scsi_status != SAM_STAT_CHECK_CONDITION)
648 scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) - 742 scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) -
649 le32_to_cpu(*(__le32 *)&resp->variable[0])); 743 le32_to_cpu(*(__le32 *)&resp->variable[0]));
650 }
651} 744}
652 745
653static void stex_mu_intr(struct st_hba *hba, u32 doorbell) 746static void stex_mu_intr(struct st_hba *hba, u32 doorbell)
@@ -658,12 +751,12 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell)
658 unsigned int size; 751 unsigned int size;
659 u16 tag; 752 u16 tag;
660 753
661 if (!(doorbell & MU_OUTBOUND_DOORBELL_STATUSHEADCHANGED)) 754 if (unlikely(!(doorbell & MU_OUTBOUND_DOORBELL_STATUSHEADCHANGED)))
662 return; 755 return;
663 756
664 /* status payloads */ 757 /* status payloads */
665 hba->status_head = readl(base + OMR1); 758 hba->status_head = readl(base + OMR1);
666 if (unlikely(hba->status_head >= MU_STATUS_COUNT)) { 759 if (unlikely(hba->status_head > hba->sts_count)) {
667 printk(KERN_WARNING DRV_NAME "(%s): invalid status head\n", 760 printk(KERN_WARNING DRV_NAME "(%s): invalid status head\n",
668 pci_name(hba->pdev)); 761 pci_name(hba->pdev));
669 return; 762 return;
@@ -693,13 +786,13 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell)
693 continue; 786 continue;
694 } 787 }
695 788
789 hba->out_req_cnt--;
696 ccb = &hba->ccb[tag]; 790 ccb = &hba->ccb[tag];
697 if (hba->wait_ccb == ccb) 791 if (unlikely(hba->wait_ccb == ccb))
698 hba->wait_ccb = NULL; 792 hba->wait_ccb = NULL;
699 if (unlikely(ccb->req == NULL)) { 793 if (unlikely(ccb->req == NULL)) {
700 printk(KERN_WARNING DRV_NAME 794 printk(KERN_WARNING DRV_NAME
701 "(%s): lagging req\n", pci_name(hba->pdev)); 795 "(%s): lagging req\n", pci_name(hba->pdev));
702 hba->out_req_cnt--;
703 continue; 796 continue;
704 } 797 }
705 798
@@ -720,7 +813,7 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell)
720 813
721 if (likely(ccb->cmd != NULL)) { 814 if (likely(ccb->cmd != NULL)) {
722 if (hba->cardtype == st_yosemite) 815 if (hba->cardtype == st_yosemite)
723 stex_ys_commands(hba, ccb, resp); 816 stex_check_cmd(hba, ccb, resp);
724 817
725 if (unlikely(ccb->cmd->cmnd[0] == PASSTHRU_CMD && 818 if (unlikely(ccb->cmd->cmnd[0] == PASSTHRU_CMD &&
726 ccb->cmd->cmnd[1] == PASSTHRU_GET_ADAPTER)) 819 ccb->cmd->cmnd[1] == PASSTHRU_GET_ADAPTER))
@@ -728,17 +821,8 @@ static void stex_mu_intr(struct st_hba *hba, u32 doorbell)
728 821
729 scsi_dma_unmap(ccb->cmd); 822 scsi_dma_unmap(ccb->cmd);
730 stex_scsi_done(ccb); 823 stex_scsi_done(ccb);
731 hba->out_req_cnt--; 824 } else
732 } else if (ccb->req_type & PASSTHRU_REQ_TYPE) {
733 hba->out_req_cnt--;
734 if (ccb->req_type & PASSTHRU_REQ_NO_WAKEUP) {
735 ccb->req_type = 0;
736 continue;
737 }
738 ccb->req_type = 0; 825 ccb->req_type = 0;
739 if (waitqueue_active(&hba->waitq))
740 wake_up(&hba->waitq);
741 }
742 } 826 }
743 827
744update_status: 828update_status:
@@ -771,7 +855,103 @@ static irqreturn_t stex_intr(int irq, void *__hba)
771 return IRQ_RETVAL(handled); 855 return IRQ_RETVAL(handled);
772} 856}
773 857
774static int stex_handshake(struct st_hba *hba) 858static void stex_ss_mu_intr(struct st_hba *hba)
859{
860 struct status_msg *resp;
861 struct st_ccb *ccb;
862 __le32 *scratch;
863 unsigned int size;
864 int count = 0;
865 u32 value;
866 u16 tag;
867
868 if (unlikely(hba->out_req_cnt <= 0 ||
869 hba->mu_status == MU_STATE_RESETTING))
870 return;
871
872 while (count < hba->sts_count) {
873 scratch = hba->scratch + hba->status_tail;
874 value = le32_to_cpu(*scratch);
875 if (unlikely(!(value & SS_STS_NORMAL)))
876 return;
877
878 resp = hba->status_buffer + hba->status_tail;
879 *scratch = 0;
880 ++count;
881 ++hba->status_tail;
882 hba->status_tail %= hba->sts_count+1;
883
884 tag = (u16)value;
885 if (unlikely(tag >= hba->host->can_queue)) {
886 printk(KERN_WARNING DRV_NAME
887 "(%s): invalid tag\n", pci_name(hba->pdev));
888 continue;
889 }
890
891 hba->out_req_cnt--;
892 ccb = &hba->ccb[tag];
893 if (unlikely(hba->wait_ccb == ccb))
894 hba->wait_ccb = NULL;
895 if (unlikely(ccb->req == NULL)) {
896 printk(KERN_WARNING DRV_NAME
897 "(%s): lagging req\n", pci_name(hba->pdev));
898 continue;
899 }
900
901 ccb->req = NULL;
902 if (likely(value & SS_STS_DONE)) { /* normal case */
903 ccb->srb_status = SRB_STATUS_SUCCESS;
904 ccb->scsi_status = SAM_STAT_GOOD;
905 } else {
906 ccb->srb_status = resp->srb_status;
907 ccb->scsi_status = resp->scsi_status;
908 size = resp->payload_sz * sizeof(u32);
909 if (unlikely(size < sizeof(*resp) - STATUS_VAR_LEN ||
910 size > sizeof(*resp))) {
911 printk(KERN_WARNING DRV_NAME
912 "(%s): bad status size\n",
913 pci_name(hba->pdev));
914 } else {
915 size -= sizeof(*resp) - STATUS_VAR_LEN;
916 if (size)
917 stex_copy_data(ccb, resp, size);
918 }
919 if (likely(ccb->cmd != NULL))
920 stex_check_cmd(hba, ccb, resp);
921 }
922
923 if (likely(ccb->cmd != NULL)) {
924 scsi_dma_unmap(ccb->cmd);
925 stex_scsi_done(ccb);
926 } else
927 ccb->req_type = 0;
928 }
929}
930
931static irqreturn_t stex_ss_intr(int irq, void *__hba)
932{
933 struct st_hba *hba = __hba;
934 void __iomem *base = hba->mmio_base;
935 u32 data;
936 unsigned long flags;
937 int handled = 0;
938
939 spin_lock_irqsave(hba->host->host_lock, flags);
940
941 data = readl(base + YI2H_INT);
942 if (data && data != 0xffffffff) {
943 /* clear the interrupt */
944 writel(data, base + YI2H_INT_C);
945 stex_ss_mu_intr(hba);
946 handled = 1;
947 }
948
949 spin_unlock_irqrestore(hba->host->host_lock, flags);
950
951 return IRQ_RETVAL(handled);
952}
953
954static int stex_common_handshake(struct st_hba *hba)
775{ 955{
776 void __iomem *base = hba->mmio_base; 956 void __iomem *base = hba->mmio_base;
777 struct handshake_frame *h; 957 struct handshake_frame *h;
@@ -800,26 +980,27 @@ static int stex_handshake(struct st_hba *hba)
800 data = readl(base + OMR1); 980 data = readl(base + OMR1);
801 if ((data & 0xffff0000) == MU_HANDSHAKE_SIGNATURE_HALF) { 981 if ((data & 0xffff0000) == MU_HANDSHAKE_SIGNATURE_HALF) {
802 data &= 0x0000ffff; 982 data &= 0x0000ffff;
803 if (hba->host->can_queue > data) 983 if (hba->host->can_queue > data) {
804 hba->host->can_queue = data; 984 hba->host->can_queue = data;
985 hba->host->cmd_per_lun = data;
986 }
805 } 987 }
806 988
807 h = (struct handshake_frame *)(hba->dma_mem + MU_REQ_BUFFER_SIZE); 989 h = (struct handshake_frame *)hba->status_buffer;
808 h->rb_phy = cpu_to_le32(hba->dma_handle); 990 h->rb_phy = cpu_to_le64(hba->dma_handle);
809 h->rb_phy_hi = cpu_to_le32((hba->dma_handle >> 16) >> 16); 991 h->req_sz = cpu_to_le16(hba->rq_size);
810 h->req_sz = cpu_to_le16(sizeof(struct req_msg)); 992 h->req_cnt = cpu_to_le16(hba->rq_count+1);
811 h->req_cnt = cpu_to_le16(MU_REQ_COUNT);
812 h->status_sz = cpu_to_le16(sizeof(struct status_msg)); 993 h->status_sz = cpu_to_le16(sizeof(struct status_msg));
813 h->status_cnt = cpu_to_le16(MU_STATUS_COUNT); 994 h->status_cnt = cpu_to_le16(hba->sts_count+1);
814 stex_gettime(&h->hosttime); 995 stex_gettime(&h->hosttime);
815 h->partner_type = HMU_PARTNER_TYPE; 996 h->partner_type = HMU_PARTNER_TYPE;
816 if (hba->dma_size > STEX_BUFFER_SIZE) { 997 if (hba->extra_offset) {
817 h->extra_offset = cpu_to_le32(STEX_BUFFER_SIZE); 998 h->extra_offset = cpu_to_le32(hba->extra_offset);
818 h->extra_size = cpu_to_le32(ST_ADDITIONAL_MEM); 999 h->extra_size = cpu_to_le32(ST_ADDITIONAL_MEM);
819 } else 1000 } else
820 h->extra_offset = h->extra_size = 0; 1001 h->extra_offset = h->extra_size = 0;
821 1002
822 status_phys = hba->dma_handle + MU_REQ_BUFFER_SIZE; 1003 status_phys = hba->dma_handle + (hba->rq_count+1) * hba->rq_size;
823 writel(status_phys, base + IMR0); 1004 writel(status_phys, base + IMR0);
824 readl(base + IMR0); 1005 readl(base + IMR0);
825 writel((status_phys >> 16) >> 16, base + IMR1); 1006 writel((status_phys >> 16) >> 16, base + IMR1);
@@ -851,10 +1032,79 @@ static int stex_handshake(struct st_hba *hba)
851 readl(base + IMR1); 1032 readl(base + IMR1);
852 writel(0, base + OMR1); 1033 writel(0, base + OMR1);
853 readl(base + OMR1); /* flush */ 1034 readl(base + OMR1); /* flush */
854 hba->mu_status = MU_STATE_STARTED;
855 return 0; 1035 return 0;
856} 1036}
857 1037
1038static int stex_ss_handshake(struct st_hba *hba)
1039{
1040 void __iomem *base = hba->mmio_base;
1041 struct st_msg_header *msg_h;
1042 struct handshake_frame *h;
1043 __le32 *scratch = hba->scratch;
1044 u32 data;
1045 unsigned long before;
1046 int ret = 0;
1047
1048 h = (struct handshake_frame *)(hba->alloc_rq(hba));
1049 msg_h = (struct st_msg_header *)h - 1;
1050 msg_h->handle = cpu_to_le64(hba->dma_handle);
1051 msg_h->flag = SS_HEAD_HANDSHAKE;
1052
1053 h->rb_phy = cpu_to_le64(hba->dma_handle);
1054 h->req_sz = cpu_to_le16(hba->rq_size);
1055 h->req_cnt = cpu_to_le16(hba->rq_count+1);
1056 h->status_sz = cpu_to_le16(sizeof(struct status_msg));
1057 h->status_cnt = cpu_to_le16(hba->sts_count+1);
1058 stex_gettime(&h->hosttime);
1059 h->partner_type = HMU_PARTNER_TYPE;
1060 h->extra_offset = h->extra_size = 0;
1061 h->scratch_size = cpu_to_le32((hba->sts_count+1)*sizeof(u32));
1062
1063 data = readl(base + YINT_EN);
1064 data &= ~4;
1065 writel(data, base + YINT_EN);
1066 writel((hba->dma_handle >> 16) >> 16, base + YH2I_REQ_HI);
1067 writel(hba->dma_handle, base + YH2I_REQ);
1068
1069 scratch = hba->scratch;
1070 before = jiffies;
1071 while (!(le32_to_cpu(*scratch) & SS_STS_HANDSHAKE)) {
1072 if (time_after(jiffies, before + MU_MAX_DELAY * HZ)) {
1073 printk(KERN_ERR DRV_NAME
1074 "(%s): no signature after handshake frame\n",
1075 pci_name(hba->pdev));
1076 ret = -1;
1077 break;
1078 }
1079 rmb();
1080 msleep(1);
1081 }
1082
1083 *scratch = 0;
1084 msg_h->flag = 0;
1085 return ret;
1086}
1087
1088static int stex_handshake(struct st_hba *hba)
1089{
1090 int err;
1091 unsigned long flags;
1092
1093 err = (hba->cardtype == st_yel) ?
1094 stex_ss_handshake(hba) : stex_common_handshake(hba);
1095 if (err == 0) {
1096 spin_lock_irqsave(hba->host->host_lock, flags);
1097 hba->req_head = 0;
1098 hba->req_tail = 0;
1099 hba->status_head = 0;
1100 hba->status_tail = 0;
1101 hba->out_req_cnt = 0;
1102 hba->mu_status = MU_STATE_STARTED;
1103 spin_unlock_irqrestore(hba->host->host_lock, flags);
1104 }
1105 return err;
1106}
1107
858static int stex_abort(struct scsi_cmnd *cmd) 1108static int stex_abort(struct scsi_cmnd *cmd)
859{ 1109{
860 struct Scsi_Host *host = cmd->device->host; 1110 struct Scsi_Host *host = cmd->device->host;
@@ -883,15 +1133,23 @@ static int stex_abort(struct scsi_cmnd *cmd)
883 goto out; 1133 goto out;
884 } 1134 }
885 1135
886 data = readl(base + ODBL); 1136 if (hba->cardtype == st_yel) {
887 if (data == 0 || data == 0xffffffff) 1137 data = readl(base + YI2H_INT);
888 goto fail_out; 1138 if (data == 0 || data == 0xffffffff)
1139 goto fail_out;
889 1140
890 writel(data, base + ODBL); 1141 writel(data, base + YI2H_INT_C);
891 readl(base + ODBL); /* flush */ 1142 stex_ss_mu_intr(hba);
1143 } else {
1144 data = readl(base + ODBL);
1145 if (data == 0 || data == 0xffffffff)
1146 goto fail_out;
892 1147
893 stex_mu_intr(hba, data); 1148 writel(data, base + ODBL);
1149 readl(base + ODBL); /* flush */
894 1150
1151 stex_mu_intr(hba, data);
1152 }
895 if (hba->wait_ccb == NULL) { 1153 if (hba->wait_ccb == NULL) {
896 printk(KERN_WARNING DRV_NAME 1154 printk(KERN_WARNING DRV_NAME
897 "(%s): lost interrupt\n", pci_name(hba->pdev)); 1155 "(%s): lost interrupt\n", pci_name(hba->pdev));
@@ -950,8 +1208,8 @@ static void stex_hard_reset(struct st_hba *hba)
950static int stex_reset(struct scsi_cmnd *cmd) 1208static int stex_reset(struct scsi_cmnd *cmd)
951{ 1209{
952 struct st_hba *hba; 1210 struct st_hba *hba;
953 unsigned long flags; 1211 void __iomem *base;
954 unsigned long before; 1212 unsigned long flags, before;
955 1213
956 hba = (struct st_hba *) &cmd->device->host->hostdata[0]; 1214 hba = (struct st_hba *) &cmd->device->host->hostdata[0];
957 1215
@@ -971,13 +1229,6 @@ static int stex_reset(struct scsi_cmnd *cmd)
971 pci_name(hba->pdev)); 1229 pci_name(hba->pdev));
972 return FAILED; 1230 return FAILED;
973 } 1231 }
974 spin_lock_irqsave(hba->host->host_lock, flags);
975 hba->req_head = 0;
976 hba->req_tail = 0;
977 hba->status_head = 0;
978 hba->status_tail = 0;
979 hba->out_req_cnt = 0;
980 spin_unlock_irqrestore(hba->host->host_lock, flags);
981 return SUCCESS; 1232 return SUCCESS;
982 } 1233 }
983 1234
@@ -994,7 +1245,23 @@ static int stex_reset(struct scsi_cmnd *cmd)
994 msleep(1); 1245 msleep(1);
995 } 1246 }
996 1247
1248 base = hba->mmio_base;
1249 writel(0, base + IMR0);
1250 readl(base + IMR0);
1251 writel(0, base + OMR0);
1252 readl(base + OMR0);
1253 writel(0, base + IMR1);
1254 readl(base + IMR1);
1255 writel(0, base + OMR1);
1256 readl(base + OMR1); /* flush */
1257 spin_lock_irqsave(hba->host->host_lock, flags);
1258 hba->req_head = 0;
1259 hba->req_tail = 0;
1260 hba->status_head = 0;
1261 hba->status_tail = 0;
1262 hba->out_req_cnt = 0;
997 hba->mu_status = MU_STATE_STARTED; 1263 hba->mu_status = MU_STATE_STARTED;
1264 spin_unlock_irqrestore(hba->host->host_lock, flags);
998 return SUCCESS; 1265 return SUCCESS;
999} 1266}
1000 1267
@@ -1028,30 +1295,157 @@ static struct scsi_host_template driver_template = {
1028 .slave_destroy = stex_slave_destroy, 1295 .slave_destroy = stex_slave_destroy,
1029 .eh_abort_handler = stex_abort, 1296 .eh_abort_handler = stex_abort,
1030 .eh_host_reset_handler = stex_reset, 1297 .eh_host_reset_handler = stex_reset,
1031 .can_queue = ST_CAN_QUEUE,
1032 .this_id = -1, 1298 .this_id = -1,
1033 .sg_tablesize = ST_MAX_SG, 1299};
1034 .cmd_per_lun = ST_CMD_PER_LUN, 1300
1301static struct pci_device_id stex_pci_tbl[] = {
1302 /* st_shasta */
1303 { 0x105a, 0x8350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1304 st_shasta }, /* SuperTrak EX8350/8300/16350/16300 */
1305 { 0x105a, 0xc350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1306 st_shasta }, /* SuperTrak EX12350 */
1307 { 0x105a, 0x4302, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1308 st_shasta }, /* SuperTrak EX4350 */
1309 { 0x105a, 0xe350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1310 st_shasta }, /* SuperTrak EX24350 */
1311
1312 /* st_vsc */
1313 { 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc },
1314
1315 /* st_yosemite */
1316 { 0x105a, 0x8650, 0x105a, PCI_ANY_ID, 0, 0, st_yosemite },
1317
1318 /* st_seq */
1319 { 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq },
1320
1321 /* st_yel */
1322 { 0x105a, 0x8650, 0x1033, PCI_ANY_ID, 0, 0, st_yel },
1323 { 0x105a, 0x8760, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_yel },
1324 { } /* terminate list */
1325};
1326
1327static struct st_card_info stex_card_info[] = {
1328 /* st_shasta */
1329 {
1330 .max_id = 17,
1331 .max_lun = 8,
1332 .max_channel = 0,
1333 .rq_count = 32,
1334 .rq_size = 1048,
1335 .sts_count = 32,
1336 .alloc_rq = stex_alloc_req,
1337 .map_sg = stex_map_sg,
1338 .send = stex_send_cmd,
1339 },
1340
1341 /* st_vsc */
1342 {
1343 .max_id = 129,
1344 .max_lun = 1,
1345 .max_channel = 0,
1346 .rq_count = 32,
1347 .rq_size = 1048,
1348 .sts_count = 32,
1349 .alloc_rq = stex_alloc_req,
1350 .map_sg = stex_map_sg,
1351 .send = stex_send_cmd,
1352 },
1353
1354 /* st_yosemite */
1355 {
1356 .max_id = 2,
1357 .max_lun = 256,
1358 .max_channel = 0,
1359 .rq_count = 256,
1360 .rq_size = 1048,
1361 .sts_count = 256,
1362 .alloc_rq = stex_alloc_req,
1363 .map_sg = stex_map_sg,
1364 .send = stex_send_cmd,
1365 },
1366
1367 /* st_seq */
1368 {
1369 .max_id = 129,
1370 .max_lun = 1,
1371 .max_channel = 0,
1372 .rq_count = 32,
1373 .rq_size = 1048,
1374 .sts_count = 32,
1375 .alloc_rq = stex_alloc_req,
1376 .map_sg = stex_map_sg,
1377 .send = stex_send_cmd,
1378 },
1379
1380 /* st_yel */
1381 {
1382 .max_id = 129,
1383 .max_lun = 256,
1384 .max_channel = 3,
1385 .rq_count = 801,
1386 .rq_size = 512,
1387 .sts_count = 801,
1388 .alloc_rq = stex_ss_alloc_req,
1389 .map_sg = stex_ss_map_sg,
1390 .send = stex_ss_send_cmd,
1391 },
1035}; 1392};
1036 1393
1037static int stex_set_dma_mask(struct pci_dev * pdev) 1394static int stex_set_dma_mask(struct pci_dev * pdev)
1038{ 1395{
1039 int ret; 1396 int ret;
1040 1397
1041 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK) 1398 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))
1042 && !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) 1399 && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
1043 return 0; 1400 return 0;
1044 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1401 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1045 if (!ret) 1402 if (!ret)
1046 ret = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 1403 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1047 return ret; 1404 return ret;
1048} 1405}
1049 1406
1407static int stex_request_irq(struct st_hba *hba)
1408{
1409 struct pci_dev *pdev = hba->pdev;
1410 int status;
1411
1412 if (msi) {
1413 status = pci_enable_msi(pdev);
1414 if (status != 0)
1415 printk(KERN_ERR DRV_NAME
1416 "(%s): error %d setting up MSI\n",
1417 pci_name(pdev), status);
1418 else
1419 hba->msi_enabled = 1;
1420 } else
1421 hba->msi_enabled = 0;
1422
1423 status = request_irq(pdev->irq, hba->cardtype == st_yel ?
1424 stex_ss_intr : stex_intr, IRQF_SHARED, DRV_NAME, hba);
1425
1426 if (status != 0) {
1427 if (hba->msi_enabled)
1428 pci_disable_msi(pdev);
1429 }
1430 return status;
1431}
1432
1433static void stex_free_irq(struct st_hba *hba)
1434{
1435 struct pci_dev *pdev = hba->pdev;
1436
1437 free_irq(pdev->irq, hba);
1438 if (hba->msi_enabled)
1439 pci_disable_msi(pdev);
1440}
1441
1050static int __devinit 1442static int __devinit
1051stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) 1443stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1052{ 1444{
1053 struct st_hba *hba; 1445 struct st_hba *hba;
1054 struct Scsi_Host *host; 1446 struct Scsi_Host *host;
1447 const struct st_card_info *ci = NULL;
1448 u32 sts_offset, cp_offset, scratch_offset;
1055 int err; 1449 int err;
1056 1450
1057 err = pci_enable_device(pdev); 1451 err = pci_enable_device(pdev);
@@ -1095,10 +1489,17 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1095 } 1489 }
1096 1490
1097 hba->cardtype = (unsigned int) id->driver_data; 1491 hba->cardtype = (unsigned int) id->driver_data;
1098 if (hba->cardtype == st_vsc && (pdev->subsystem_device & 1)) 1492 ci = &stex_card_info[hba->cardtype];
1099 hba->cardtype = st_vsc1; 1493 sts_offset = scratch_offset = (ci->rq_count+1) * ci->rq_size;
1100 hba->dma_size = (hba->cardtype == st_vsc1 || hba->cardtype == st_seq) ? 1494 if (hba->cardtype == st_yel)
1101 (STEX_BUFFER_SIZE + ST_ADDITIONAL_MEM) : (STEX_BUFFER_SIZE); 1495 sts_offset += (ci->sts_count+1) * sizeof(u32);
1496 cp_offset = sts_offset + (ci->sts_count+1) * sizeof(struct status_msg);
1497 hba->dma_size = cp_offset + sizeof(struct st_frame);
1498 if (hba->cardtype == st_seq ||
1499 (hba->cardtype == st_vsc && (pdev->subsystem_device & 1))) {
1500 hba->extra_offset = hba->dma_size;
1501 hba->dma_size += ST_ADDITIONAL_MEM;
1502 }
1102 hba->dma_mem = dma_alloc_coherent(&pdev->dev, 1503 hba->dma_mem = dma_alloc_coherent(&pdev->dev,
1103 hba->dma_size, &hba->dma_handle, GFP_KERNEL); 1504 hba->dma_size, &hba->dma_handle, GFP_KERNEL);
1104 if (!hba->dma_mem) { 1505 if (!hba->dma_mem) {
@@ -1108,35 +1509,46 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1108 goto out_iounmap; 1509 goto out_iounmap;
1109 } 1510 }
1110 1511
1111 hba->status_buffer = 1512 hba->ccb = kcalloc(ci->rq_count, sizeof(struct st_ccb), GFP_KERNEL);
1112 (struct status_msg *)(hba->dma_mem + MU_REQ_BUFFER_SIZE); 1513 if (!hba->ccb) {
1113 hba->copy_buffer = hba->dma_mem + MU_BUFFER_SIZE; 1514 err = -ENOMEM;
1515 printk(KERN_ERR DRV_NAME "(%s): ccb alloc failed\n",
1516 pci_name(pdev));
1517 goto out_pci_free;
1518 }
1519
1520 if (hba->cardtype == st_yel)
1521 hba->scratch = (__le32 *)(hba->dma_mem + scratch_offset);
1522 hba->status_buffer = (struct status_msg *)(hba->dma_mem + sts_offset);
1523 hba->copy_buffer = hba->dma_mem + cp_offset;
1524 hba->rq_count = ci->rq_count;
1525 hba->rq_size = ci->rq_size;
1526 hba->sts_count = ci->sts_count;
1527 hba->alloc_rq = ci->alloc_rq;
1528 hba->map_sg = ci->map_sg;
1529 hba->send = ci->send;
1114 hba->mu_status = MU_STATE_STARTING; 1530 hba->mu_status = MU_STATE_STARTING;
1115 1531
1116 if (hba->cardtype == st_shasta) { 1532 if (hba->cardtype == st_yel)
1117 host->max_lun = 8; 1533 host->sg_tablesize = 38;
1118 host->max_id = 16 + 1; 1534 else
1119 } else if (hba->cardtype == st_yosemite) { 1535 host->sg_tablesize = 32;
1120 host->max_lun = 256; 1536 host->can_queue = ci->rq_count;
1121 host->max_id = 1 + 1; 1537 host->cmd_per_lun = ci->rq_count;
1122 } else { 1538 host->max_id = ci->max_id;
1123 /* st_vsc , st_vsc1 and st_seq */ 1539 host->max_lun = ci->max_lun;
1124 host->max_lun = 1; 1540 host->max_channel = ci->max_channel;
1125 host->max_id = 128 + 1;
1126 }
1127 host->max_channel = 0;
1128 host->unique_id = host->host_no; 1541 host->unique_id = host->host_no;
1129 host->max_cmd_len = STEX_CDB_LENGTH; 1542 host->max_cmd_len = STEX_CDB_LENGTH;
1130 1543
1131 hba->host = host; 1544 hba->host = host;
1132 hba->pdev = pdev; 1545 hba->pdev = pdev;
1133 init_waitqueue_head(&hba->waitq);
1134 1546
1135 err = request_irq(pdev->irq, stex_intr, IRQF_SHARED, DRV_NAME, hba); 1547 err = stex_request_irq(hba);
1136 if (err) { 1548 if (err) {
1137 printk(KERN_ERR DRV_NAME "(%s): request irq failed\n", 1549 printk(KERN_ERR DRV_NAME "(%s): request irq failed\n",
1138 pci_name(pdev)); 1550 pci_name(pdev));
1139 goto out_pci_free; 1551 goto out_ccb_free;
1140 } 1552 }
1141 1553
1142 err = stex_handshake(hba); 1554 err = stex_handshake(hba);
@@ -1164,7 +1576,9 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1164 return 0; 1576 return 0;
1165 1577
1166out_free_irq: 1578out_free_irq:
1167 free_irq(pdev->irq, hba); 1579 stex_free_irq(hba);
1580out_ccb_free:
1581 kfree(hba->ccb);
1168out_pci_free: 1582out_pci_free:
1169 dma_free_coherent(&pdev->dev, hba->dma_size, 1583 dma_free_coherent(&pdev->dev, hba->dma_size,
1170 hba->dma_mem, hba->dma_handle); 1584 hba->dma_mem, hba->dma_handle);
@@ -1183,15 +1597,20 @@ out_disable:
1183static void stex_hba_stop(struct st_hba *hba) 1597static void stex_hba_stop(struct st_hba *hba)
1184{ 1598{
1185 struct req_msg *req; 1599 struct req_msg *req;
1600 struct st_msg_header *msg_h;
1186 unsigned long flags; 1601 unsigned long flags;
1187 unsigned long before; 1602 unsigned long before;
1188 u16 tag = 0; 1603 u16 tag = 0;
1189 1604
1190 spin_lock_irqsave(hba->host->host_lock, flags); 1605 spin_lock_irqsave(hba->host->host_lock, flags);
1191 req = stex_alloc_req(hba); 1606 req = hba->alloc_rq(hba);
1192 memset(req->cdb, 0, STEX_CDB_LENGTH); 1607 if (hba->cardtype == st_yel) {
1608 msg_h = (struct st_msg_header *)req - 1;
1609 memset(msg_h, 0, hba->rq_size);
1610 } else
1611 memset(req, 0, hba->rq_size);
1193 1612
1194 if (hba->cardtype == st_yosemite) { 1613 if (hba->cardtype == st_yosemite || hba->cardtype == st_yel) {
1195 req->cdb[0] = MGT_CMD; 1614 req->cdb[0] = MGT_CMD;
1196 req->cdb[1] = MGT_CMD_SIGNATURE; 1615 req->cdb[1] = MGT_CMD_SIGNATURE;
1197 req->cdb[2] = CTLR_CONFIG_CMD; 1616 req->cdb[2] = CTLR_CONFIG_CMD;
@@ -1206,27 +1625,31 @@ static void stex_hba_stop(struct st_hba *hba)
1206 hba->ccb[tag].sg_count = 0; 1625 hba->ccb[tag].sg_count = 0;
1207 hba->ccb[tag].sense_bufflen = 0; 1626 hba->ccb[tag].sense_bufflen = 0;
1208 hba->ccb[tag].sense_buffer = NULL; 1627 hba->ccb[tag].sense_buffer = NULL;
1209 hba->ccb[tag].req_type |= PASSTHRU_REQ_TYPE; 1628 hba->ccb[tag].req_type = PASSTHRU_REQ_TYPE;
1210 1629
1211 stex_send_cmd(hba, req, tag); 1630 hba->send(hba, req, tag);
1212 spin_unlock_irqrestore(hba->host->host_lock, flags); 1631 spin_unlock_irqrestore(hba->host->host_lock, flags);
1213 1632
1214 before = jiffies; 1633 before = jiffies;
1215 while (hba->ccb[tag].req_type & PASSTHRU_REQ_TYPE) { 1634 while (hba->ccb[tag].req_type & PASSTHRU_REQ_TYPE) {
1216 if (time_after(jiffies, before + ST_INTERNAL_TIMEOUT * HZ)) 1635 if (time_after(jiffies, before + ST_INTERNAL_TIMEOUT * HZ)) {
1636 hba->ccb[tag].req_type = 0;
1217 return; 1637 return;
1218 msleep(10); 1638 }
1639 msleep(1);
1219 } 1640 }
1220} 1641}
1221 1642
1222static void stex_hba_free(struct st_hba *hba) 1643static void stex_hba_free(struct st_hba *hba)
1223{ 1644{
1224 free_irq(hba->pdev->irq, hba); 1645 stex_free_irq(hba);
1225 1646
1226 iounmap(hba->mmio_base); 1647 iounmap(hba->mmio_base);
1227 1648
1228 pci_release_regions(hba->pdev); 1649 pci_release_regions(hba->pdev);
1229 1650
1651 kfree(hba->ccb);
1652
1230 dma_free_coherent(&hba->pdev->dev, hba->dma_size, 1653 dma_free_coherent(&hba->pdev->dev, hba->dma_size,
1231 hba->dma_mem, hba->dma_handle); 1654 hba->dma_mem, hba->dma_handle);
1232} 1655}
@@ -1255,27 +1678,6 @@ static void stex_shutdown(struct pci_dev *pdev)
1255 stex_hba_stop(hba); 1678 stex_hba_stop(hba);
1256} 1679}
1257 1680
1258static struct pci_device_id stex_pci_tbl[] = {
1259 /* st_shasta */
1260 { 0x105a, 0x8350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1261 st_shasta }, /* SuperTrak EX8350/8300/16350/16300 */
1262 { 0x105a, 0xc350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1263 st_shasta }, /* SuperTrak EX12350 */
1264 { 0x105a, 0x4302, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1265 st_shasta }, /* SuperTrak EX4350 */
1266 { 0x105a, 0xe350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1267 st_shasta }, /* SuperTrak EX24350 */
1268
1269 /* st_vsc */
1270 { 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc },
1271
1272 /* st_yosemite */
1273 { 0x105a, 0x8650, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_yosemite },
1274
1275 /* st_seq */
1276 { 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq },
1277 { } /* terminate list */
1278};
1279MODULE_DEVICE_TABLE(pci, stex_pci_tbl); 1681MODULE_DEVICE_TABLE(pci, stex_pci_tbl);
1280 1682
1281static struct pci_driver stex_pci_driver = { 1683static struct pci_driver stex_pci_driver = {
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 23e782015880..583966ec8266 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -1349,7 +1349,7 @@ static struct Scsi_Host * __devinit sym_attach(struct scsi_host_template *tpnt,
1349 if ((SYM_CONF_DMA_ADDRESSING_MODE > 0) && (np->features & FE_DAC) && 1349 if ((SYM_CONF_DMA_ADDRESSING_MODE > 0) && (np->features & FE_DAC) &&
1350 !pci_set_dma_mask(pdev, DMA_DAC_MASK)) { 1350 !pci_set_dma_mask(pdev, DMA_DAC_MASK)) {
1351 set_dac(np); 1351 set_dac(np);
1352 } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 1352 } else if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
1353 printf_warning("%s: No suitable DMA available\n", sym_name(np)); 1353 printf_warning("%s: No suitable DMA available\n", sym_name(np));
1354 goto attach_failed; 1354 goto attach_failed;
1355 } 1355 }
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.h b/drivers/scsi/sym53c8xx_2/sym_glue.h
index 567fbe0b4f09..b80bf709f104 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.h
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.h
@@ -234,7 +234,7 @@ static inline struct sym_hcb * sym_get_hcb(struct Scsi_Host *host)
234/* 234/*
235 * Set the status field of a CAM CCB. 235 * Set the status field of a CAM CCB.
236 */ 236 */
237static __inline void 237static inline void
238sym_set_cam_status(struct scsi_cmnd *cmd, int status) 238sym_set_cam_status(struct scsi_cmnd *cmd, int status)
239{ 239{
240 cmd->result &= ~(0xff << 16); 240 cmd->result &= ~(0xff << 16);
@@ -244,7 +244,7 @@ sym_set_cam_status(struct scsi_cmnd *cmd, int status)
244/* 244/*
245 * Get the status field of a CAM CCB. 245 * Get the status field of a CAM CCB.
246 */ 246 */
247static __inline int 247static inline int
248sym_get_cam_status(struct scsi_cmnd *cmd) 248sym_get_cam_status(struct scsi_cmnd *cmd)
249{ 249{
250 return host_byte(cmd->result); 250 return host_byte(cmd->result);
@@ -253,7 +253,7 @@ sym_get_cam_status(struct scsi_cmnd *cmd)
253/* 253/*
254 * Build CAM result for a successful IO and for a failed IO. 254 * Build CAM result for a successful IO and for a failed IO.
255 */ 255 */
256static __inline void sym_set_cam_result_ok(struct sym_ccb *cp, struct scsi_cmnd *cmd, int resid) 256static inline void sym_set_cam_result_ok(struct sym_ccb *cp, struct scsi_cmnd *cmd, int resid)
257{ 257{
258 scsi_set_resid(cmd, resid); 258 scsi_set_resid(cmd, resid);
259 cmd->result = (((DID_OK) << 16) + ((cp->ssss_status) & 0x7f)); 259 cmd->result = (((DID_OK) << 16) + ((cp->ssss_status) & 0x7f));
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
index ccea7db59f49..ffa70d1ed182 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
@@ -602,7 +602,7 @@ sym_getsync(struct sym_hcb *np, u_char dt, u_char sfac, u_char *divp, u_char *fa
602/* 602/*
603 * Set initial io register bits from burst code. 603 * Set initial io register bits from burst code.
604 */ 604 */
605static __inline void sym_init_burst(struct sym_hcb *np, u_char bc) 605static inline void sym_init_burst(struct sym_hcb *np, u_char bc)
606{ 606{
607 np->rv_ctest4 &= ~0x80; 607 np->rv_ctest4 &= ~0x80;
608 np->rv_dmode &= ~(0x3 << 6); 608 np->rv_dmode &= ~(0x3 << 6);
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.h b/drivers/scsi/sym53c8xx_2/sym_hipd.h
index 61d28fcfffbf..9ebc8706b6bf 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.h
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.h
@@ -1080,23 +1080,23 @@ int sym_hcb_attach(struct Scsi_Host *shost, struct sym_fw *fw, struct sym_nvram
1080 */ 1080 */
1081 1081
1082#if SYM_CONF_DMA_ADDRESSING_MODE == 0 1082#if SYM_CONF_DMA_ADDRESSING_MODE == 0
1083#define DMA_DAC_MASK DMA_32BIT_MASK 1083#define DMA_DAC_MASK DMA_BIT_MASK(32)
1084#define sym_build_sge(np, data, badd, len) \ 1084#define sym_build_sge(np, data, badd, len) \
1085do { \ 1085do { \
1086 (data)->addr = cpu_to_scr(badd); \ 1086 (data)->addr = cpu_to_scr(badd); \
1087 (data)->size = cpu_to_scr(len); \ 1087 (data)->size = cpu_to_scr(len); \
1088} while (0) 1088} while (0)
1089#elif SYM_CONF_DMA_ADDRESSING_MODE == 1 1089#elif SYM_CONF_DMA_ADDRESSING_MODE == 1
1090#define DMA_DAC_MASK DMA_40BIT_MASK 1090#define DMA_DAC_MASK DMA_BIT_MASK(40)
1091#define sym_build_sge(np, data, badd, len) \ 1091#define sym_build_sge(np, data, badd, len) \
1092do { \ 1092do { \
1093 (data)->addr = cpu_to_scr(badd); \ 1093 (data)->addr = cpu_to_scr(badd); \
1094 (data)->size = cpu_to_scr((((badd) >> 8) & 0xff000000) + len); \ 1094 (data)->size = cpu_to_scr((((badd) >> 8) & 0xff000000) + len); \
1095} while (0) 1095} while (0)
1096#elif SYM_CONF_DMA_ADDRESSING_MODE == 2 1096#elif SYM_CONF_DMA_ADDRESSING_MODE == 2
1097#define DMA_DAC_MASK DMA_64BIT_MASK 1097#define DMA_DAC_MASK DMA_BIT_MASK(64)
1098int sym_lookup_dmap(struct sym_hcb *np, u32 h, int s); 1098int sym_lookup_dmap(struct sym_hcb *np, u32 h, int s);
1099static __inline void 1099static inline void
1100sym_build_sge(struct sym_hcb *np, struct sym_tblmove *data, u64 badd, int len) 1100sym_build_sge(struct sym_hcb *np, struct sym_tblmove *data, u64 badd, int len)
1101{ 1101{
1102 u32 h = (badd>>32); 1102 u32 h = (badd>>32);
@@ -1201,7 +1201,7 @@ dma_addr_t __vtobus(m_pool_ident_t dev_dmat, void *m);
1201 1201
1202#define sym_m_pool_match(mp_id1, mp_id2) (mp_id1 == mp_id2) 1202#define sym_m_pool_match(mp_id1, mp_id2) (mp_id1 == mp_id2)
1203 1203
1204static __inline void *sym_m_get_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) 1204static inline void *sym_m_get_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp)
1205{ 1205{
1206 void *vaddr = NULL; 1206 void *vaddr = NULL;
1207 dma_addr_t baddr = 0; 1207 dma_addr_t baddr = 0;
@@ -1215,7 +1215,7 @@ static __inline void *sym_m_get_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp)
1215 return vaddr; 1215 return vaddr;
1216} 1216}
1217 1217
1218static __inline void sym_m_free_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp) 1218static inline void sym_m_free_dma_mem_cluster(m_pool_p mp, m_vtob_p vbp)
1219{ 1219{
1220 dma_free_coherent(mp->dev_dmat, SYM_MEM_CLUSTER_SIZE, vbp->vaddr, 1220 dma_free_coherent(mp->dev_dmat, SYM_MEM_CLUSTER_SIZE, vbp->vaddr,
1221 vbp->baddr); 1221 vbp->baddr);
diff --git a/drivers/scsi/sym53c8xx_2/sym_malloc.c b/drivers/scsi/sym53c8xx_2/sym_malloc.c
index 92bf9b14a7a2..883cac10daf9 100644
--- a/drivers/scsi/sym53c8xx_2/sym_malloc.c
+++ b/drivers/scsi/sym53c8xx_2/sym_malloc.c
@@ -262,7 +262,7 @@ static void ___free_dma_mem_cluster(m_pool_p mp, void *m)
262#endif 262#endif
263 263
264/* Fetch the memory pool for a given pool id (i.e. DMA constraints) */ 264/* Fetch the memory pool for a given pool id (i.e. DMA constraints) */
265static __inline m_pool_p ___get_dma_pool(m_pool_ident_t dev_dmat) 265static inline m_pool_p ___get_dma_pool(m_pool_ident_t dev_dmat)
266{ 266{
267 m_pool_p mp; 267 m_pool_p mp;
268 for (mp = mp0.next; 268 for (mp = mp0.next;
diff --git a/drivers/scsi/sym53c8xx_2/sym_misc.h b/drivers/scsi/sym53c8xx_2/sym_misc.h
index 430537183c18..96c15145902c 100644
--- a/drivers/scsi/sym53c8xx_2/sym_misc.h
+++ b/drivers/scsi/sym53c8xx_2/sym_misc.h
@@ -52,17 +52,17 @@ typedef struct sym_quehead {
52 (ptr)->flink = (ptr); (ptr)->blink = (ptr); \ 52 (ptr)->flink = (ptr); (ptr)->blink = (ptr); \
53} while (0) 53} while (0)
54 54
55static __inline struct sym_quehead *sym_que_first(struct sym_quehead *head) 55static inline struct sym_quehead *sym_que_first(struct sym_quehead *head)
56{ 56{
57 return (head->flink == head) ? 0 : head->flink; 57 return (head->flink == head) ? 0 : head->flink;
58} 58}
59 59
60static __inline struct sym_quehead *sym_que_last(struct sym_quehead *head) 60static inline struct sym_quehead *sym_que_last(struct sym_quehead *head)
61{ 61{
62 return (head->blink == head) ? 0 : head->blink; 62 return (head->blink == head) ? 0 : head->blink;
63} 63}
64 64
65static __inline void __sym_que_add(struct sym_quehead * new, 65static inline void __sym_que_add(struct sym_quehead * new,
66 struct sym_quehead * blink, 66 struct sym_quehead * blink,
67 struct sym_quehead * flink) 67 struct sym_quehead * flink)
68{ 68{
@@ -72,19 +72,19 @@ static __inline void __sym_que_add(struct sym_quehead * new,
72 blink->flink = new; 72 blink->flink = new;
73} 73}
74 74
75static __inline void __sym_que_del(struct sym_quehead * blink, 75static inline void __sym_que_del(struct sym_quehead * blink,
76 struct sym_quehead * flink) 76 struct sym_quehead * flink)
77{ 77{
78 flink->blink = blink; 78 flink->blink = blink;
79 blink->flink = flink; 79 blink->flink = flink;
80} 80}
81 81
82static __inline int sym_que_empty(struct sym_quehead *head) 82static inline int sym_que_empty(struct sym_quehead *head)
83{ 83{
84 return head->flink == head; 84 return head->flink == head;
85} 85}
86 86
87static __inline void sym_que_splice(struct sym_quehead *list, 87static inline void sym_que_splice(struct sym_quehead *list,
88 struct sym_quehead *head) 88 struct sym_quehead *head)
89{ 89{
90 struct sym_quehead *first = list->flink; 90 struct sym_quehead *first = list->flink;
@@ -101,7 +101,7 @@ static __inline void sym_que_splice(struct sym_quehead *list,
101 } 101 }
102} 102}
103 103
104static __inline void sym_que_move(struct sym_quehead *orig, 104static inline void sym_que_move(struct sym_quehead *orig,
105 struct sym_quehead *dest) 105 struct sym_quehead *dest)
106{ 106{
107 struct sym_quehead *first, *last; 107 struct sym_quehead *first, *last;
@@ -129,7 +129,7 @@ static __inline void sym_que_move(struct sym_quehead *orig,
129 129
130#define sym_insque_head(new, head) __sym_que_add(new, head, (head)->flink) 130#define sym_insque_head(new, head) __sym_que_add(new, head, (head)->flink)
131 131
132static __inline struct sym_quehead *sym_remque_head(struct sym_quehead *head) 132static inline struct sym_quehead *sym_remque_head(struct sym_quehead *head)
133{ 133{
134 struct sym_quehead *elem = head->flink; 134 struct sym_quehead *elem = head->flink;
135 135
@@ -142,7 +142,7 @@ static __inline struct sym_quehead *sym_remque_head(struct sym_quehead *head)
142 142
143#define sym_insque_tail(new, head) __sym_que_add(new, (head)->blink, head) 143#define sym_insque_tail(new, head) __sym_que_add(new, (head)->blink, head)
144 144
145static __inline struct sym_quehead *sym_remque_tail(struct sym_quehead *head) 145static inline struct sym_quehead *sym_remque_tail(struct sym_quehead *head)
146{ 146{
147 struct sym_quehead *elem = head->blink; 147 struct sym_quehead *elem = head->blink;
148 148
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index 533f82025adf..7ddff3f55087 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -306,6 +306,63 @@ static void __devexit pci_plx9050_exit(struct pci_dev *dev)
306 } 306 }
307} 307}
308 308
309#define NI8420_INT_ENABLE_REG 0x38
310#define NI8420_INT_ENABLE_BIT 0x2000
311
312static void __devexit pci_ni8420_exit(struct pci_dev *dev)
313{
314 void __iomem *p;
315 unsigned long base, len;
316 unsigned int bar = 0;
317
318 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
319 moan_device("no memory in bar", dev);
320 return;
321 }
322
323 base = pci_resource_start(dev, bar);
324 len = pci_resource_len(dev, bar);
325 p = ioremap_nocache(base, len);
326 if (p == NULL)
327 return;
328
329 /* Disable the CPU Interrupt */
330 writel(readl(p + NI8420_INT_ENABLE_REG) & ~(NI8420_INT_ENABLE_BIT),
331 p + NI8420_INT_ENABLE_REG);
332 iounmap(p);
333}
334
335
336/* MITE registers */
337#define MITE_IOWBSR1 0xc4
338#define MITE_IOWCR1 0xf4
339#define MITE_LCIMR1 0x08
340#define MITE_LCIMR2 0x10
341
342#define MITE_LCIMR2_CLR_CPU_IE (1 << 30)
343
344static void __devexit pci_ni8430_exit(struct pci_dev *dev)
345{
346 void __iomem *p;
347 unsigned long base, len;
348 unsigned int bar = 0;
349
350 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
351 moan_device("no memory in bar", dev);
352 return;
353 }
354
355 base = pci_resource_start(dev, bar);
356 len = pci_resource_len(dev, bar);
357 p = ioremap_nocache(base, len);
358 if (p == NULL)
359 return;
360
361 /* Disable the CPU Interrupt */
362 writel(MITE_LCIMR2_CLR_CPU_IE, p + MITE_LCIMR2);
363 iounmap(p);
364}
365
309/* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */ 366/* SBS Technologies Inc. PMC-OCTPRO and P-OCTAL cards */
310static int 367static int
311sbs_setup(struct serial_private *priv, const struct pciserial_board *board, 368sbs_setup(struct serial_private *priv, const struct pciserial_board *board,
@@ -597,6 +654,108 @@ static int pci_xircom_init(struct pci_dev *dev)
597 return 0; 654 return 0;
598} 655}
599 656
657static int pci_ni8420_init(struct pci_dev *dev)
658{
659 void __iomem *p;
660 unsigned long base, len;
661 unsigned int bar = 0;
662
663 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
664 moan_device("no memory in bar", dev);
665 return 0;
666 }
667
668 base = pci_resource_start(dev, bar);
669 len = pci_resource_len(dev, bar);
670 p = ioremap_nocache(base, len);
671 if (p == NULL)
672 return -ENOMEM;
673
674 /* Enable CPU Interrupt */
675 writel(readl(p + NI8420_INT_ENABLE_REG) | NI8420_INT_ENABLE_BIT,
676 p + NI8420_INT_ENABLE_REG);
677
678 iounmap(p);
679 return 0;
680}
681
682#define MITE_IOWBSR1_WSIZE 0xa
683#define MITE_IOWBSR1_WIN_OFFSET 0x800
684#define MITE_IOWBSR1_WENAB (1 << 7)
685#define MITE_LCIMR1_IO_IE_0 (1 << 24)
686#define MITE_LCIMR2_SET_CPU_IE (1 << 31)
687#define MITE_IOWCR1_RAMSEL_MASK 0xfffffffe
688
689static int pci_ni8430_init(struct pci_dev *dev)
690{
691 void __iomem *p;
692 unsigned long base, len;
693 u32 device_window;
694 unsigned int bar = 0;
695
696 if ((pci_resource_flags(dev, bar) & IORESOURCE_MEM) == 0) {
697 moan_device("no memory in bar", dev);
698 return 0;
699 }
700
701 base = pci_resource_start(dev, bar);
702 len = pci_resource_len(dev, bar);
703 p = ioremap_nocache(base, len);
704 if (p == NULL)
705 return -ENOMEM;
706
707 /* Set device window address and size in BAR0 */
708 device_window = ((base + MITE_IOWBSR1_WIN_OFFSET) & 0xffffff00)
709 | MITE_IOWBSR1_WENAB | MITE_IOWBSR1_WSIZE;
710 writel(device_window, p + MITE_IOWBSR1);
711
712 /* Set window access to go to RAMSEL IO address space */
713 writel((readl(p + MITE_IOWCR1) & MITE_IOWCR1_RAMSEL_MASK),
714 p + MITE_IOWCR1);
715
716 /* Enable IO Bus Interrupt 0 */
717 writel(MITE_LCIMR1_IO_IE_0, p + MITE_LCIMR1);
718
719 /* Enable CPU Interrupt */
720 writel(MITE_LCIMR2_SET_CPU_IE, p + MITE_LCIMR2);
721
722 iounmap(p);
723 return 0;
724}
725
726/* UART Port Control Register */
727#define NI8430_PORTCON 0x0f
728#define NI8430_PORTCON_TXVR_ENABLE (1 << 3)
729
730static int
731pci_ni8430_setup(struct serial_private *priv,
732 const struct pciserial_board *board,
733 struct uart_port *port, int idx)
734{
735 void __iomem *p;
736 unsigned long base, len;
737 unsigned int bar, offset = board->first_offset;
738
739 if (idx >= board->num_ports)
740 return 1;
741
742 bar = FL_GET_BASE(board->flags);
743 offset += idx * board->uart_offset;
744
745 base = pci_resource_start(priv->dev, bar);
746 len = pci_resource_len(priv->dev, bar);
747 p = ioremap_nocache(base, len);
748
749 /* enable the transciever */
750 writeb(readb(p + offset + NI8430_PORTCON) | NI8430_PORTCON_TXVR_ENABLE,
751 p + offset + NI8430_PORTCON);
752
753 iounmap(p);
754
755 return setup_port(priv, port, bar, offset, board->reg_shift);
756}
757
758
600static int pci_netmos_init(struct pci_dev *dev) 759static int pci_netmos_init(struct pci_dev *dev)
601{ 760{
602 /* subdevice 0x00PS means <P> parallel, <S> serial */ 761 /* subdevice 0x00PS means <P> parallel, <S> serial */
@@ -913,6 +1072,126 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
913 .exit = __devexit_p(pci_ite887x_exit), 1072 .exit = __devexit_p(pci_ite887x_exit),
914 }, 1073 },
915 /* 1074 /*
1075 * National Instruments
1076 */
1077 {
1078 .vendor = PCI_VENDOR_ID_NI,
1079 .device = PCI_DEVICE_ID_NI_PCI23216,
1080 .subvendor = PCI_ANY_ID,
1081 .subdevice = PCI_ANY_ID,
1082 .init = pci_ni8420_init,
1083 .setup = pci_default_setup,
1084 .exit = __devexit_p(pci_ni8420_exit),
1085 },
1086 {
1087 .vendor = PCI_VENDOR_ID_NI,
1088 .device = PCI_DEVICE_ID_NI_PCI2328,
1089 .subvendor = PCI_ANY_ID,
1090 .subdevice = PCI_ANY_ID,
1091 .init = pci_ni8420_init,
1092 .setup = pci_default_setup,
1093 .exit = __devexit_p(pci_ni8420_exit),
1094 },
1095 {
1096 .vendor = PCI_VENDOR_ID_NI,
1097 .device = PCI_DEVICE_ID_NI_PCI2324,
1098 .subvendor = PCI_ANY_ID,
1099 .subdevice = PCI_ANY_ID,
1100 .init = pci_ni8420_init,
1101 .setup = pci_default_setup,
1102 .exit = __devexit_p(pci_ni8420_exit),
1103 },
1104 {
1105 .vendor = PCI_VENDOR_ID_NI,
1106 .device = PCI_DEVICE_ID_NI_PCI2322,
1107 .subvendor = PCI_ANY_ID,
1108 .subdevice = PCI_ANY_ID,
1109 .init = pci_ni8420_init,
1110 .setup = pci_default_setup,
1111 .exit = __devexit_p(pci_ni8420_exit),
1112 },
1113 {
1114 .vendor = PCI_VENDOR_ID_NI,
1115 .device = PCI_DEVICE_ID_NI_PCI2324I,
1116 .subvendor = PCI_ANY_ID,
1117 .subdevice = PCI_ANY_ID,
1118 .init = pci_ni8420_init,
1119 .setup = pci_default_setup,
1120 .exit = __devexit_p(pci_ni8420_exit),
1121 },
1122 {
1123 .vendor = PCI_VENDOR_ID_NI,
1124 .device = PCI_DEVICE_ID_NI_PCI2322I,
1125 .subvendor = PCI_ANY_ID,
1126 .subdevice = PCI_ANY_ID,
1127 .init = pci_ni8420_init,
1128 .setup = pci_default_setup,
1129 .exit = __devexit_p(pci_ni8420_exit),
1130 },
1131 {
1132 .vendor = PCI_VENDOR_ID_NI,
1133 .device = PCI_DEVICE_ID_NI_PXI8420_23216,
1134 .subvendor = PCI_ANY_ID,
1135 .subdevice = PCI_ANY_ID,
1136 .init = pci_ni8420_init,
1137 .setup = pci_default_setup,
1138 .exit = __devexit_p(pci_ni8420_exit),
1139 },
1140 {
1141 .vendor = PCI_VENDOR_ID_NI,
1142 .device = PCI_DEVICE_ID_NI_PXI8420_2328,
1143 .subvendor = PCI_ANY_ID,
1144 .subdevice = PCI_ANY_ID,
1145 .init = pci_ni8420_init,
1146 .setup = pci_default_setup,
1147 .exit = __devexit_p(pci_ni8420_exit),
1148 },
1149 {
1150 .vendor = PCI_VENDOR_ID_NI,
1151 .device = PCI_DEVICE_ID_NI_PXI8420_2324,
1152 .subvendor = PCI_ANY_ID,
1153 .subdevice = PCI_ANY_ID,
1154 .init = pci_ni8420_init,
1155 .setup = pci_default_setup,
1156 .exit = __devexit_p(pci_ni8420_exit),
1157 },
1158 {
1159 .vendor = PCI_VENDOR_ID_NI,
1160 .device = PCI_DEVICE_ID_NI_PXI8420_2322,
1161 .subvendor = PCI_ANY_ID,
1162 .subdevice = PCI_ANY_ID,
1163 .init = pci_ni8420_init,
1164 .setup = pci_default_setup,
1165 .exit = __devexit_p(pci_ni8420_exit),
1166 },
1167 {
1168 .vendor = PCI_VENDOR_ID_NI,
1169 .device = PCI_DEVICE_ID_NI_PXI8422_2324,
1170 .subvendor = PCI_ANY_ID,
1171 .subdevice = PCI_ANY_ID,
1172 .init = pci_ni8420_init,
1173 .setup = pci_default_setup,
1174 .exit = __devexit_p(pci_ni8420_exit),
1175 },
1176 {
1177 .vendor = PCI_VENDOR_ID_NI,
1178 .device = PCI_DEVICE_ID_NI_PXI8422_2322,
1179 .subvendor = PCI_ANY_ID,
1180 .subdevice = PCI_ANY_ID,
1181 .init = pci_ni8420_init,
1182 .setup = pci_default_setup,
1183 .exit = __devexit_p(pci_ni8420_exit),
1184 },
1185 {
1186 .vendor = PCI_VENDOR_ID_NI,
1187 .device = PCI_ANY_ID,
1188 .subvendor = PCI_ANY_ID,
1189 .subdevice = PCI_ANY_ID,
1190 .init = pci_ni8430_init,
1191 .setup = pci_ni8430_setup,
1192 .exit = __devexit_p(pci_ni8430_exit),
1193 },
1194 /*
916 * Panacom 1195 * Panacom
917 */ 1196 */
918 { 1197 {
@@ -1216,6 +1495,7 @@ enum pci_board_num_t {
1216 pbn_b1_2_115200, 1495 pbn_b1_2_115200,
1217 pbn_b1_4_115200, 1496 pbn_b1_4_115200,
1218 pbn_b1_8_115200, 1497 pbn_b1_8_115200,
1498 pbn_b1_16_115200,
1219 1499
1220 pbn_b1_1_921600, 1500 pbn_b1_1_921600,
1221 pbn_b1_2_921600, 1501 pbn_b1_2_921600,
@@ -1225,6 +1505,9 @@ enum pci_board_num_t {
1225 pbn_b1_2_1250000, 1505 pbn_b1_2_1250000,
1226 1506
1227 pbn_b1_bt_1_115200, 1507 pbn_b1_bt_1_115200,
1508 pbn_b1_bt_2_115200,
1509 pbn_b1_bt_4_115200,
1510
1228 pbn_b1_bt_2_921600, 1511 pbn_b1_bt_2_921600,
1229 1512
1230 pbn_b1_1_1382400, 1513 pbn_b1_1_1382400,
@@ -1280,6 +1563,10 @@ enum pci_board_num_t {
1280 pbn_exar_XR17C154, 1563 pbn_exar_XR17C154,
1281 pbn_exar_XR17C158, 1564 pbn_exar_XR17C158,
1282 pbn_pasemi_1682M, 1565 pbn_pasemi_1682M,
1566 pbn_ni8430_2,
1567 pbn_ni8430_4,
1568 pbn_ni8430_8,
1569 pbn_ni8430_16,
1283}; 1570};
1284 1571
1285/* 1572/*
@@ -1487,6 +1774,12 @@ static struct pciserial_board pci_boards[] __devinitdata = {
1487 .base_baud = 115200, 1774 .base_baud = 115200,
1488 .uart_offset = 8, 1775 .uart_offset = 8,
1489 }, 1776 },
1777 [pbn_b1_16_115200] = {
1778 .flags = FL_BASE1,
1779 .num_ports = 16,
1780 .base_baud = 115200,
1781 .uart_offset = 8,
1782 },
1490 1783
1491 [pbn_b1_1_921600] = { 1784 [pbn_b1_1_921600] = {
1492 .flags = FL_BASE1, 1785 .flags = FL_BASE1,
@@ -1525,6 +1818,18 @@ static struct pciserial_board pci_boards[] __devinitdata = {
1525 .base_baud = 115200, 1818 .base_baud = 115200,
1526 .uart_offset = 8, 1819 .uart_offset = 8,
1527 }, 1820 },
1821 [pbn_b1_bt_2_115200] = {
1822 .flags = FL_BASE1|FL_BASE_BARS,
1823 .num_ports = 2,
1824 .base_baud = 115200,
1825 .uart_offset = 8,
1826 },
1827 [pbn_b1_bt_4_115200] = {
1828 .flags = FL_BASE1|FL_BASE_BARS,
1829 .num_ports = 4,
1830 .base_baud = 115200,
1831 .uart_offset = 8,
1832 },
1528 1833
1529 [pbn_b1_bt_2_921600] = { 1834 [pbn_b1_bt_2_921600] = {
1530 .flags = FL_BASE1|FL_BASE_BARS, 1835 .flags = FL_BASE1|FL_BASE_BARS,
@@ -1850,6 +2155,37 @@ static struct pciserial_board pci_boards[] __devinitdata = {
1850 .num_ports = 1, 2155 .num_ports = 1,
1851 .base_baud = 8333333, 2156 .base_baud = 8333333,
1852 }, 2157 },
2158 /*
2159 * National Instruments 843x
2160 */
2161 [pbn_ni8430_16] = {
2162 .flags = FL_BASE0,
2163 .num_ports = 16,
2164 .base_baud = 3686400,
2165 .uart_offset = 0x10,
2166 .first_offset = 0x800,
2167 },
2168 [pbn_ni8430_8] = {
2169 .flags = FL_BASE0,
2170 .num_ports = 8,
2171 .base_baud = 3686400,
2172 .uart_offset = 0x10,
2173 .first_offset = 0x800,
2174 },
2175 [pbn_ni8430_4] = {
2176 .flags = FL_BASE0,
2177 .num_ports = 4,
2178 .base_baud = 3686400,
2179 .uart_offset = 0x10,
2180 .first_offset = 0x800,
2181 },
2182 [pbn_ni8430_2] = {
2183 .flags = FL_BASE0,
2184 .num_ports = 2,
2185 .base_baud = 3686400,
2186 .uart_offset = 0x10,
2187 .first_offset = 0x800,
2188 },
1853}; 2189};
1854 2190
1855static const struct pci_device_id softmodem_blacklist[] = { 2191static const struct pci_device_id softmodem_blacklist[] = {
@@ -3052,6 +3388,82 @@ static struct pci_device_id serial_pci_tbl[] = {
3052 pbn_pasemi_1682M }, 3388 pbn_pasemi_1682M },
3053 3389
3054 /* 3390 /*
3391 * National Instruments
3392 */
3393 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI23216,
3394 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3395 pbn_b1_16_115200 },
3396 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2328,
3397 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3398 pbn_b1_8_115200 },
3399 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324,
3400 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3401 pbn_b1_bt_4_115200 },
3402 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322,
3403 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3404 pbn_b1_bt_2_115200 },
3405 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2324I,
3406 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3407 pbn_b1_bt_4_115200 },
3408 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI2322I,
3409 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3410 pbn_b1_bt_2_115200 },
3411 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_23216,
3412 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3413 pbn_b1_16_115200 },
3414 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2328,
3415 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3416 pbn_b1_8_115200 },
3417 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2324,
3418 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3419 pbn_b1_bt_4_115200 },
3420 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8420_2322,
3421 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3422 pbn_b1_bt_2_115200 },
3423 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2324,
3424 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3425 pbn_b1_bt_4_115200 },
3426 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8422_2322,
3427 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3428 pbn_b1_bt_2_115200 },
3429 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2322,
3430 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3431 pbn_ni8430_2 },
3432 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2322,
3433 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3434 pbn_ni8430_2 },
3435 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2324,
3436 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3437 pbn_ni8430_4 },
3438 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2324,
3439 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3440 pbn_ni8430_4 },
3441 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_2328,
3442 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3443 pbn_ni8430_8 },
3444 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_2328,
3445 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3446 pbn_ni8430_8 },
3447 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8430_23216,
3448 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3449 pbn_ni8430_16 },
3450 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8430_23216,
3451 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3452 pbn_ni8430_16 },
3453 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2322,
3454 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3455 pbn_ni8430_2 },
3456 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2322,
3457 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3458 pbn_ni8430_2 },
3459 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PXI8432_2324,
3460 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3461 pbn_ni8430_4 },
3462 { PCI_VENDOR_ID_NI, PCI_DEVICE_ID_NI_PCI8432_2324,
3463 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
3464 pbn_ni8430_4 },
3465
3466 /*
3055 * ADDI-DATA GmbH communication cards <info@addi-data.com> 3467 * ADDI-DATA GmbH communication cards <info@addi-data.com>
3056 */ 3468 */
3057 { PCI_VENDOR_ID_ADDIDATA, 3469 { PCI_VENDOR_ID_ADDIDATA,
diff --git a/drivers/serial/8250_pnp.c b/drivers/serial/8250_pnp.c
index bbcfc26a3b6d..d71dfe398940 100644
--- a/drivers/serial/8250_pnp.c
+++ b/drivers/serial/8250_pnp.c
@@ -333,6 +333,10 @@ static const struct pnp_device_id pnp_dev_table[] = {
333 { "WACF006", 0 }, 333 { "WACF006", 0 },
334 { "WACF007", 0 }, 334 { "WACF007", 0 },
335 { "WACF008", 0 }, 335 { "WACF008", 0 },
336 { "WACF009", 0 },
337 { "WACF00A", 0 },
338 { "WACF00B", 0 },
339 { "WACF00C", 0 },
336 /* Compaq touchscreen */ 340 /* Compaq touchscreen */
337 { "FPI2002", 0 }, 341 { "FPI2002", 0 },
338 /* Fujitsu Stylistic touchscreens */ 342 /* Fujitsu Stylistic touchscreens */
@@ -346,8 +350,9 @@ static const struct pnp_device_id pnp_dev_table[] = {
346 { "FUJ02B8", 0 }, 350 { "FUJ02B8", 0 },
347 { "FUJ02B9", 0 }, 351 { "FUJ02B9", 0 },
348 { "FUJ02BC", 0 }, 352 { "FUJ02BC", 0 },
349 /* Fujitsu Wacom Tablet PC devices */ 353 /* Fujitsu Wacom Tablet PC device */
350 { "FUJ02E5", 0 }, 354 { "FUJ02E5", 0 },
355 /* Fujitsu P-series tablet PC device */
351 { "FUJ02E6", 0 }, 356 { "FUJ02E6", 0 },
352 /* 357 /*
353 * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in 358 * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index aa9d3a4c2d50..0328fd4006e5 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -533,6 +533,13 @@ config SERIAL_S3C6400
533 Serial port support for the Samsung S3C6400 and S3C6410 533 Serial port support for the Samsung S3C6400 and S3C6410
534 SoCs 534 SoCs
535 535
536config SERIAL_MAX3100
537 tristate "MAX3100 support"
538 depends on SPI
539 select SERIAL_CORE
540 help
541 MAX3100 chip support
542
536config SERIAL_DZ 543config SERIAL_DZ
537 bool "DECstation DZ serial driver" 544 bool "DECstation DZ serial driver"
538 depends on MACH_DECSTATION && 32BIT 545 depends on MACH_DECSTATION && 32BIT
@@ -700,7 +707,7 @@ choice
700 707
701config SERIAL_BFIN_DMA 708config SERIAL_BFIN_DMA
702 bool "DMA mode" 709 bool "DMA mode"
703 depends on !DMA_UNCACHED_NONE && !KGDB_UART 710 depends on !DMA_UNCACHED_NONE && KGDB_SERIAL_CONSOLE=n
704 help 711 help
705 This driver works under DMA mode. If this option is selected, the 712 This driver works under DMA mode. If this option is selected, the
706 blackfin simple dma driver is also enabled. 713 blackfin simple dma driver is also enabled.
@@ -727,19 +734,19 @@ config BFIN_UART0_CTSRTS
727 734
728config UART0_CTS_PIN 735config UART0_CTS_PIN
729 int "UART0 CTS pin" 736 int "UART0 CTS pin"
730 depends on BFIN_UART0_CTSRTS 737 depends on BFIN_UART0_CTSRTS && !BF548
731 default 23 738 default 23
732 help 739 help
733 The default pin is GPIO_GP7. 740 The default pin is GPIO_GP7.
734 Refer to ./include/asm-blackfin/gpio.h to see the GPIO map. 741 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
735 742
736config UART0_RTS_PIN 743config UART0_RTS_PIN
737 int "UART0 RTS pin" 744 int "UART0 RTS pin"
738 depends on BFIN_UART0_CTSRTS 745 depends on BFIN_UART0_CTSRTS && !BF548
739 default 22 746 default 22
740 help 747 help
741 The default pin is GPIO_GP6. 748 The default pin is GPIO_GP6.
742 Refer to ./include/asm-blackfin/gpio.h to see the GPIO map. 749 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
743 750
744config SERIAL_BFIN_UART1 751config SERIAL_BFIN_UART1
745 bool "Enable UART1" 752 bool "Enable UART1"
@@ -756,21 +763,21 @@ config BFIN_UART1_CTSRTS
756 763
757config UART1_CTS_PIN 764config UART1_CTS_PIN
758 int "UART1 CTS pin" 765 int "UART1 CTS pin"
759 depends on BFIN_UART1_CTSRTS && !BF54x 766 depends on BFIN_UART1_CTSRTS && !BF548
760 default -1 767 default -1
761 help 768 help
762 Refer to ./include/asm-blackfin/gpio.h to see the GPIO map. 769 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
763 770
764config UART1_RTS_PIN 771config UART1_RTS_PIN
765 int "UART1 RTS pin" 772 int "UART1 RTS pin"
766 depends on BFIN_UART1_CTSRTS && !BF54x 773 depends on BFIN_UART1_CTSRTS && !BF548
767 default -1 774 default -1
768 help 775 help
769 Refer to ./include/asm-blackfin/gpio.h to see the GPIO map. 776 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
770 777
771config SERIAL_BFIN_UART2 778config SERIAL_BFIN_UART2
772 bool "Enable UART2" 779 bool "Enable UART2"
773 depends on SERIAL_BFIN && (BF54x) 780 depends on SERIAL_BFIN && (BF54x || BF538 || BF539)
774 help 781 help
775 Enable UART2 782 Enable UART2
776 783
@@ -783,17 +790,17 @@ config BFIN_UART2_CTSRTS
783 790
784config UART2_CTS_PIN 791config UART2_CTS_PIN
785 int "UART2 CTS pin" 792 int "UART2 CTS pin"
786 depends on BFIN_UART2_CTSRTS 793 depends on BFIN_UART2_CTSRTS && !BF548
787 default -1 794 default -1
788 help 795 help
789 Refer to ./include/asm-blackfin/gpio.h to see the GPIO map. 796 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
790 797
791config UART2_RTS_PIN 798config UART2_RTS_PIN
792 int "UART2 RTS pin" 799 int "UART2 RTS pin"
793 depends on BFIN_UART2_CTSRTS 800 depends on BFIN_UART2_CTSRTS && !BF548
794 default -1 801 default -1
795 help 802 help
796 Refer to ./include/asm-blackfin/gpio.h to see the GPIO map. 803 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
797 804
798config SERIAL_BFIN_UART3 805config SERIAL_BFIN_UART3
799 bool "Enable UART3" 806 bool "Enable UART3"
@@ -808,6 +815,20 @@ config BFIN_UART3_CTSRTS
808 Enable hardware flow control in the driver. Using GPIO emulate the CTS/RTS 815 Enable hardware flow control in the driver. Using GPIO emulate the CTS/RTS
809 signal. 816 signal.
810 817
818config UART3_CTS_PIN
819 int "UART3 CTS pin"
820 depends on BFIN_UART3_CTSRTS && !BF548
821 default -1
822 help
823 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
824
825config UART3_RTS_PIN
826 int "UART3 RTS pin"
827 depends on BFIN_UART3_CTSRTS && !BF548
828 default -1
829 help
830 Refer to arch/blackfin/mach-*/include/mach/gpio.h to see the GPIO map.
831
811config SERIAL_IMX 832config SERIAL_IMX
812 bool "IMX serial port support" 833 bool "IMX serial port support"
813 depends on ARM && (ARCH_IMX || ARCH_MXC) 834 depends on ARM && (ARCH_IMX || ARCH_MXC)
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index 8844c0a03929..d438eb2a73de 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -43,6 +43,7 @@ obj-$(CONFIG_SERIAL_S3C2412) += s3c2412.o
43obj-$(CONFIG_SERIAL_S3C2440) += s3c2440.o 43obj-$(CONFIG_SERIAL_S3C2440) += s3c2440.o
44obj-$(CONFIG_SERIAL_S3C24A0) += s3c24a0.o 44obj-$(CONFIG_SERIAL_S3C24A0) += s3c24a0.o
45obj-$(CONFIG_SERIAL_S3C6400) += s3c6400.o 45obj-$(CONFIG_SERIAL_S3C6400) += s3c6400.o
46obj-$(CONFIG_SERIAL_MAX3100) += max3100.o
46obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o 47obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o
47obj-$(CONFIG_SERIAL_MUX) += mux.o 48obj-$(CONFIG_SERIAL_MUX) += mux.o
48obj-$(CONFIG_SERIAL_68328) += 68328serial.o 49obj-$(CONFIG_SERIAL_68328) += 68328serial.o
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 318d69dce8e1..18ba812a4f84 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -63,7 +63,6 @@ static int kgdboc_break_enabled;
63#define DMA_RX_YCOUNT (PAGE_SIZE / DMA_RX_XCOUNT) 63#define DMA_RX_YCOUNT (PAGE_SIZE / DMA_RX_XCOUNT)
64 64
65#define DMA_RX_FLUSH_JIFFIES (HZ / 50) 65#define DMA_RX_FLUSH_JIFFIES (HZ / 50)
66#define CTS_CHECK_JIFFIES (HZ / 50)
67 66
68#ifdef CONFIG_SERIAL_BFIN_DMA 67#ifdef CONFIG_SERIAL_BFIN_DMA
69static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart); 68static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart);
@@ -71,10 +70,65 @@ static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart);
71static void bfin_serial_tx_chars(struct bfin_serial_port *uart); 70static void bfin_serial_tx_chars(struct bfin_serial_port *uart);
72#endif 71#endif
73 72
74static void bfin_serial_mctrl_check(struct bfin_serial_port *uart);
75
76static void bfin_serial_reset_irda(struct uart_port *port); 73static void bfin_serial_reset_irda(struct uart_port *port);
77 74
75#if defined(CONFIG_SERIAL_BFIN_CTSRTS) || \
76 defined(CONFIG_SERIAL_BFIN_HARD_CTSRTS)
77static unsigned int bfin_serial_get_mctrl(struct uart_port *port)
78{
79 struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
80 if (uart->cts_pin < 0)
81 return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
82
83 /* CTS PIN is negative assertive. */
84 if (UART_GET_CTS(uart))
85 return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
86 else
87 return TIOCM_DSR | TIOCM_CAR;
88}
89
90static void bfin_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
91{
92 struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
93 if (uart->rts_pin < 0)
94 return;
95
96 /* RTS PIN is negative assertive. */
97 if (mctrl & TIOCM_RTS)
98 UART_ENABLE_RTS(uart);
99 else
100 UART_DISABLE_RTS(uart);
101}
102
103/*
104 * Handle any change of modem status signal.
105 */
106static irqreturn_t bfin_serial_mctrl_cts_int(int irq, void *dev_id)
107{
108 struct bfin_serial_port *uart = dev_id;
109 unsigned int status;
110
111 status = bfin_serial_get_mctrl(&uart->port);
112 uart_handle_cts_change(&uart->port, status & TIOCM_CTS);
113#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
114 uart->scts = 1;
115 UART_CLEAR_SCTS(uart);
116 UART_CLEAR_IER(uart, EDSSI);
117#endif
118
119 return IRQ_HANDLED;
120}
121#else
122static unsigned int bfin_serial_get_mctrl(struct uart_port *port)
123{
124 return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
125}
126
127static void bfin_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
128{
129}
130#endif
131
78/* 132/*
79 * interrupts are disabled on entry 133 * interrupts are disabled on entry
80 */ 134 */
@@ -111,6 +165,13 @@ static void bfin_serial_start_tx(struct uart_port *port)
111 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; 165 struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
112 struct tty_struct *tty = uart->port.info->port.tty; 166 struct tty_struct *tty = uart->port.info->port.tty;
113 167
168#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
169 if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) {
170 uart->scts = 0;
171 uart_handle_cts_change(&uart->port, uart->scts);
172 }
173#endif
174
114 /* 175 /*
115 * To avoid losting RX interrupt, we reset IR function 176 * To avoid losting RX interrupt, we reset IR function
116 * before sending data. 177 * before sending data.
@@ -174,10 +235,10 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
174 return; 235 return;
175 } 236 }
176 237
177 if (!uart->port.info || !uart->port.info->tty) 238 if (!uart->port.info || !uart->port.info->port.tty)
178 return; 239 return;
179#endif 240#endif
180 tty = uart->port.info->tty; 241 tty = uart->port.info->port.tty;
181 242
182 if (ANOMALY_05000363) { 243 if (ANOMALY_05000363) {
183 /* The BF533 (and BF561) family of processors have a nice anomaly 244 /* The BF533 (and BF561) family of processors have a nice anomaly
@@ -264,12 +325,6 @@ static void bfin_serial_tx_chars(struct bfin_serial_port *uart)
264{ 325{
265 struct circ_buf *xmit = &uart->port.info->xmit; 326 struct circ_buf *xmit = &uart->port.info->xmit;
266 327
267 /*
268 * Check the modem control lines before
269 * transmitting anything.
270 */
271 bfin_serial_mctrl_check(uart);
272
273 if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) { 328 if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) {
274#ifdef CONFIG_BF54x 329#ifdef CONFIG_BF54x
275 /* Clear TFI bit */ 330 /* Clear TFI bit */
@@ -312,6 +367,12 @@ static irqreturn_t bfin_serial_tx_int(int irq, void *dev_id)
312{ 367{
313 struct bfin_serial_port *uart = dev_id; 368 struct bfin_serial_port *uart = dev_id;
314 369
370#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
371 if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) {
372 uart->scts = 0;
373 uart_handle_cts_change(&uart->port, uart->scts);
374 }
375#endif
315 spin_lock(&uart->port.lock); 376 spin_lock(&uart->port.lock);
316 if (UART_GET_LSR(uart) & THRE) 377 if (UART_GET_LSR(uart) & THRE)
317 bfin_serial_tx_chars(uart); 378 bfin_serial_tx_chars(uart);
@@ -328,12 +389,6 @@ static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart)
328 389
329 uart->tx_done = 0; 390 uart->tx_done = 0;
330 391
331 /*
332 * Check the modem control lines before
333 * transmitting anything.
334 */
335 bfin_serial_mctrl_check(uart);
336
337 if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) { 392 if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) {
338 uart->tx_count = 0; 393 uart->tx_count = 0;
339 uart->tx_done = 1; 394 uart->tx_done = 1;
@@ -401,9 +456,11 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart)
401 else 456 else
402 flg = TTY_NORMAL; 457 flg = TTY_NORMAL;
403 458
404 for (i = uart->rx_dma_buf.tail; i != uart->rx_dma_buf.head; i++) { 459 for (i = uart->rx_dma_buf.tail; ; i++) {
405 if (i >= UART_XMIT_SIZE) 460 if (i >= UART_XMIT_SIZE)
406 i = 0; 461 i = 0;
462 if (i == uart->rx_dma_buf.head)
463 break;
407 if (!uart_handle_sysrq_char(&uart->port, uart->rx_dma_buf.buf[i])) 464 if (!uart_handle_sysrq_char(&uart->port, uart->rx_dma_buf.buf[i]))
408 uart_insert_char(&uart->port, status, OE, 465 uart_insert_char(&uart->port, status, OE,
409 uart->rx_dma_buf.buf[i], flg); 466 uart->rx_dma_buf.buf[i], flg);
@@ -415,7 +472,8 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart)
415 472
416void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) 473void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
417{ 474{
418 int x_pos, pos, flags; 475 int x_pos, pos;
476 unsigned long flags;
419 477
420 spin_lock_irqsave(&uart->port.lock, flags); 478 spin_lock_irqsave(&uart->port.lock, flags);
421 479
@@ -445,6 +503,13 @@ static irqreturn_t bfin_serial_dma_tx_int(int irq, void *dev_id)
445 struct bfin_serial_port *uart = dev_id; 503 struct bfin_serial_port *uart = dev_id;
446 struct circ_buf *xmit = &uart->port.info->xmit; 504 struct circ_buf *xmit = &uart->port.info->xmit;
447 505
506#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
507 if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) {
508 uart->scts = 0;
509 uart_handle_cts_change(&uart->port, uart->scts);
510 }
511#endif
512
448 spin_lock(&uart->port.lock); 513 spin_lock(&uart->port.lock);
449 if (!(get_dma_curr_irqstat(uart->tx_dma_channel)&DMA_RUN)) { 514 if (!(get_dma_curr_irqstat(uart->tx_dma_channel)&DMA_RUN)) {
450 disable_dma(uart->tx_dma_channel); 515 disable_dma(uart->tx_dma_channel);
@@ -493,61 +558,6 @@ static unsigned int bfin_serial_tx_empty(struct uart_port *port)
493 return 0; 558 return 0;
494} 559}
495 560
496static unsigned int bfin_serial_get_mctrl(struct uart_port *port)
497{
498#ifdef CONFIG_SERIAL_BFIN_CTSRTS
499 struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
500 if (uart->cts_pin < 0)
501 return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
502
503 if (UART_GET_CTS(uart))
504 return TIOCM_DSR | TIOCM_CAR;
505 else
506#endif
507 return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
508}
509
510static void bfin_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
511{
512#ifdef CONFIG_SERIAL_BFIN_CTSRTS
513 struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
514 if (uart->rts_pin < 0)
515 return;
516
517 if (mctrl & TIOCM_RTS)
518 UART_CLEAR_RTS(uart);
519 else
520 UART_SET_RTS(uart);
521#endif
522}
523
524/*
525 * Handle any change of modem status signal since we were last called.
526 */
527static void bfin_serial_mctrl_check(struct bfin_serial_port *uart)
528{
529#ifdef CONFIG_SERIAL_BFIN_CTSRTS
530 unsigned int status;
531 struct uart_info *info = uart->port.info;
532 struct tty_struct *tty = info->port.tty;
533
534 status = bfin_serial_get_mctrl(&uart->port);
535 uart_handle_cts_change(&uart->port, status & TIOCM_CTS);
536 if (!(status & TIOCM_CTS)) {
537 tty->hw_stopped = 1;
538 uart->cts_timer.data = (unsigned long)(uart);
539 uart->cts_timer.function = (void *)bfin_serial_mctrl_check;
540 uart->cts_timer.expires = jiffies + CTS_CHECK_JIFFIES;
541 add_timer(&(uart->cts_timer));
542 } else {
543 tty->hw_stopped = 0;
544 }
545#endif
546}
547
548/*
549 * Interrupts are always disabled.
550 */
551static void bfin_serial_break_ctl(struct uart_port *port, int break_state) 561static void bfin_serial_break_ctl(struct uart_port *port, int break_state)
552{ 562{
553 struct bfin_serial_port *uart = (struct bfin_serial_port *)port; 563 struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
@@ -603,7 +613,7 @@ static int bfin_serial_startup(struct uart_port *port)
603 uart->rx_dma_timer.expires = jiffies + DMA_RX_FLUSH_JIFFIES; 613 uart->rx_dma_timer.expires = jiffies + DMA_RX_FLUSH_JIFFIES;
604 add_timer(&(uart->rx_dma_timer)); 614 add_timer(&(uart->rx_dma_timer));
605#else 615#else
606#if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \ 616# if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \
607 defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE) 617 defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE)
608 if (kgdboc_port_line == uart->port.line && kgdboc_break_enabled) 618 if (kgdboc_port_line == uart->port.line && kgdboc_break_enabled)
609 kgdboc_break_enabled = 0; 619 kgdboc_break_enabled = 0;
@@ -658,11 +668,50 @@ static int bfin_serial_startup(struct uart_port *port)
658 } 668 }
659 } 669 }
660# endif 670# endif
661#if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \ 671# if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \
662 defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE) 672 defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE)
663 } 673 }
664# endif 674# endif
665#endif 675#endif
676
677#ifdef CONFIG_SERIAL_BFIN_CTSRTS
678 if (uart->cts_pin >= 0) {
679 if (request_irq(gpio_to_irq(uart->cts_pin),
680 bfin_serial_mctrl_cts_int,
681 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING |
682 IRQF_DISABLED, "BFIN_UART_CTS", uart)) {
683 uart->cts_pin = -1;
684 pr_info("Unable to attach BlackFin UART CTS interrupt.\
685 So, disable it.\n");
686 }
687 }
688 if (uart->rts_pin >= 0) {
689 gpio_request(uart->rts_pin, DRIVER_NAME);
690 gpio_direction_output(uart->rts_pin, 0);
691 }
692#endif
693#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
694 if (request_irq(uart->status_irq,
695 bfin_serial_mctrl_cts_int,
696 IRQF_DISABLED, "BFIN_UART_MODEM_STATUS", uart)) {
697 pr_info("Unable to attach BlackFin UART Modem \
698 Status interrupt.\n");
699 }
700
701 if (uart->cts_pin >= 0) {
702 gpio_request(uart->cts_pin, DRIVER_NAME);
703 gpio_direction_output(uart->cts_pin, 1);
704 }
705 if (uart->rts_pin >= 0) {
706 gpio_request(uart->rts_pin, DRIVER_NAME);
707 gpio_direction_output(uart->rts_pin, 0);
708 }
709
710 /* CTS RTS PINs are negative assertive. */
711 UART_PUT_MCR(uart, ACTS);
712 UART_SET_IER(uart, EDSSI);
713#endif
714
666 UART_SET_IER(uart, ERBFI); 715 UART_SET_IER(uart, ERBFI);
667 return 0; 716 return 0;
668} 717}
@@ -696,6 +745,21 @@ static void bfin_serial_shutdown(struct uart_port *port)
696 free_irq(uart->port.irq, uart); 745 free_irq(uart->port.irq, uart);
697 free_irq(uart->port.irq+1, uart); 746 free_irq(uart->port.irq+1, uart);
698#endif 747#endif
748
749#ifdef CONFIG_SERIAL_BFIN_CTSRTS
750 if (uart->cts_pin >= 0)
751 free_irq(gpio_to_irq(uart->cts_pin), uart);
752 if (uart->rts_pin >= 0)
753 gpio_free(uart->rts_pin);
754#endif
755#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
756 if (uart->cts_pin >= 0)
757 gpio_free(uart->cts_pin);
758 if (uart->rts_pin >= 0)
759 gpio_free(uart->rts_pin);
760 if (UART_GET_IER(uart) && EDSSI)
761 free_irq(uart->status_irq, uart);
762#endif
699} 763}
700 764
701static void 765static void
@@ -757,7 +821,7 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,
757 } 821 }
758 822
759 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); 823 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
760 quot = uart_get_divisor(port, baud); 824 quot = uart_get_divisor(port, baud) - ANOMALY_05000230;
761 spin_lock_irqsave(&uart->port.lock, flags); 825 spin_lock_irqsave(&uart->port.lock, flags);
762 826
763 UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15); 827 UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15);
@@ -861,6 +925,20 @@ static void bfin_serial_set_ldisc(struct uart_port *port)
861 } 925 }
862} 926}
863 927
928static void bfin_serial_reset_irda(struct uart_port *port)
929{
930 int line = port->line;
931 unsigned short val;
932
933 val = UART_GET_GCTL(&bfin_serial_ports[line]);
934 val &= ~(IREN | RPOLC);
935 UART_PUT_GCTL(&bfin_serial_ports[line], val);
936 SSYNC();
937 val |= (IREN | RPOLC);
938 UART_PUT_GCTL(&bfin_serial_ports[line], val);
939 SSYNC();
940}
941
864#ifdef CONFIG_CONSOLE_POLL 942#ifdef CONFIG_CONSOLE_POLL
865static void bfin_serial_poll_put_char(struct uart_port *port, unsigned char chr) 943static void bfin_serial_poll_put_char(struct uart_port *port, unsigned char chr)
866{ 944{
@@ -906,20 +984,6 @@ static int bfin_kgdboc_port_startup(struct uart_port *port)
906} 984}
907#endif 985#endif
908 986
909static void bfin_serial_reset_irda(struct uart_port *port)
910{
911 int line = port->line;
912 unsigned short val;
913
914 val = UART_GET_GCTL(&bfin_serial_ports[line]);
915 val &= ~(IREN | RPOLC);
916 UART_PUT_GCTL(&bfin_serial_ports[line], val);
917 SSYNC();
918 val |= (IREN | RPOLC);
919 UART_PUT_GCTL(&bfin_serial_ports[line], val);
920 SSYNC();
921}
922
923static struct uart_ops bfin_serial_pops = { 987static struct uart_ops bfin_serial_pops = {
924 .tx_empty = bfin_serial_tx_empty, 988 .tx_empty = bfin_serial_tx_empty,
925 .set_mctrl = bfin_serial_set_mctrl, 989 .set_mctrl = bfin_serial_set_mctrl,
@@ -949,6 +1013,39 @@ static struct uart_ops bfin_serial_pops = {
949#endif 1013#endif
950}; 1014};
951 1015
1016static void __init bfin_serial_hw_init(void)
1017{
1018#ifdef CONFIG_SERIAL_BFIN_UART0
1019 peripheral_request(P_UART0_TX, DRIVER_NAME);
1020 peripheral_request(P_UART0_RX, DRIVER_NAME);
1021#endif
1022
1023#ifdef CONFIG_SERIAL_BFIN_UART1
1024 peripheral_request(P_UART1_TX, DRIVER_NAME);
1025 peripheral_request(P_UART1_RX, DRIVER_NAME);
1026
1027# if defined(CONFIG_BFIN_UART1_CTSRTS) && defined(CONFIG_BF54x)
1028 peripheral_request(P_UART1_RTS, DRIVER_NAME);
1029 peripheral_request(P_UART1_CTS, DRIVER_NAME);
1030# endif
1031#endif
1032
1033#ifdef CONFIG_SERIAL_BFIN_UART2
1034 peripheral_request(P_UART2_TX, DRIVER_NAME);
1035 peripheral_request(P_UART2_RX, DRIVER_NAME);
1036#endif
1037
1038#ifdef CONFIG_SERIAL_BFIN_UART3
1039 peripheral_request(P_UART3_TX, DRIVER_NAME);
1040 peripheral_request(P_UART3_RX, DRIVER_NAME);
1041
1042# if defined(CONFIG_BFIN_UART3_CTSRTS) && defined(CONFIG_BF54x)
1043 peripheral_request(P_UART3_RTS, DRIVER_NAME);
1044 peripheral_request(P_UART3_CTS, DRIVER_NAME);
1045# endif
1046#endif
1047}
1048
952static void __init bfin_serial_init_ports(void) 1049static void __init bfin_serial_init_ports(void)
953{ 1050{
954 static int first = 1; 1051 static int first = 1;
@@ -958,6 +1055,8 @@ static void __init bfin_serial_init_ports(void)
958 return; 1055 return;
959 first = 0; 1056 first = 0;
960 1057
1058 bfin_serial_hw_init();
1059
961 for (i = 0; i < nr_active_ports; i++) { 1060 for (i = 0; i < nr_active_ports; i++) {
962 bfin_serial_ports[i].port.uartclk = get_sclk(); 1061 bfin_serial_ports[i].port.uartclk = get_sclk();
963 bfin_serial_ports[i].port.fifosize = BFIN_UART_TX_FIFO_SIZE; 1062 bfin_serial_ports[i].port.fifosize = BFIN_UART_TX_FIFO_SIZE;
@@ -970,6 +1069,8 @@ static void __init bfin_serial_init_ports(void)
970 bfin_serial_resource[i].uart_base_addr; 1069 bfin_serial_resource[i].uart_base_addr;
971 bfin_serial_ports[i].port.irq = 1070 bfin_serial_ports[i].port.irq =
972 bfin_serial_resource[i].uart_irq; 1071 bfin_serial_resource[i].uart_irq;
1072 bfin_serial_ports[i].status_irq =
1073 bfin_serial_resource[i].uart_status_irq;
973 bfin_serial_ports[i].port.flags = UPF_BOOT_AUTOCONF; 1074 bfin_serial_ports[i].port.flags = UPF_BOOT_AUTOCONF;
974#ifdef CONFIG_SERIAL_BFIN_DMA 1075#ifdef CONFIG_SERIAL_BFIN_DMA
975 bfin_serial_ports[i].tx_done = 1; 1076 bfin_serial_ports[i].tx_done = 1;
@@ -980,16 +1081,14 @@ static void __init bfin_serial_init_ports(void)
980 bfin_serial_resource[i].uart_rx_dma_channel; 1081 bfin_serial_resource[i].uart_rx_dma_channel;
981 init_timer(&(bfin_serial_ports[i].rx_dma_timer)); 1082 init_timer(&(bfin_serial_ports[i].rx_dma_timer));
982#endif 1083#endif
983#ifdef CONFIG_SERIAL_BFIN_CTSRTS 1084#if defined(CONFIG_SERIAL_BFIN_CTSRTS) || \
984 init_timer(&(bfin_serial_ports[i].cts_timer)); 1085 defined(CONFIG_SERIAL_BFIN_HARD_CTSRTS)
985 bfin_serial_ports[i].cts_pin = 1086 bfin_serial_ports[i].cts_pin =
986 bfin_serial_resource[i].uart_cts_pin; 1087 bfin_serial_resource[i].uart_cts_pin;
987 bfin_serial_ports[i].rts_pin = 1088 bfin_serial_ports[i].rts_pin =
988 bfin_serial_resource[i].uart_rts_pin; 1089 bfin_serial_resource[i].uart_rts_pin;
989#endif 1090#endif
990 bfin_serial_hw_init(&bfin_serial_ports[i]);
991 } 1091 }
992
993} 1092}
994 1093
995#if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK) 1094#if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK)
@@ -1046,7 +1145,8 @@ bfin_serial_console_setup(struct console *co, char *options)
1046 int baud = 57600; 1145 int baud = 57600;
1047 int bits = 8; 1146 int bits = 8;
1048 int parity = 'n'; 1147 int parity = 'n';
1049# ifdef CONFIG_SERIAL_BFIN_CTSRTS 1148# if defined(CONFIG_SERIAL_BFIN_CTSRTS) || \
1149 defined(CONFIG_SERIAL_BFIN_HARD_CTSRTS)
1050 int flow = 'r'; 1150 int flow = 'r';
1051# else 1151# else
1052 int flow = 'n'; 1152 int flow = 'n';
@@ -1088,7 +1188,7 @@ static void
1088bfin_serial_console_write(struct console *co, const char *s, unsigned int count) 1188bfin_serial_console_write(struct console *co, const char *s, unsigned int count)
1089{ 1189{
1090 struct bfin_serial_port *uart = &bfin_serial_ports[co->index]; 1190 struct bfin_serial_port *uart = &bfin_serial_ports[co->index];
1091 int flags = 0; 1191 unsigned long flags;
1092 1192
1093 spin_lock_irqsave(&uart->port.lock, flags); 1193 spin_lock_irqsave(&uart->port.lock, flags);
1094 uart_console_write(&uart->port, s, count, bfin_serial_console_putchar); 1194 uart_console_write(&uart->port, s, count, bfin_serial_console_putchar);
@@ -1243,7 +1343,8 @@ static int bfin_serial_remove(struct platform_device *dev)
1243 continue; 1343 continue;
1244 uart_remove_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port); 1344 uart_remove_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
1245 bfin_serial_ports[i].port.dev = NULL; 1345 bfin_serial_ports[i].port.dev = NULL;
1246#ifdef CONFIG_SERIAL_BFIN_CTSRTS 1346#if defined(CONFIG_SERIAL_BFIN_CTSRTS) || \
1347 defined(CONFIG_SERIAL_BFIN_HARD_CTSRTS)
1247 gpio_free(bfin_serial_ports[i].cts_pin); 1348 gpio_free(bfin_serial_ports[i].cts_pin);
1248 gpio_free(bfin_serial_ports[i].rts_pin); 1349 gpio_free(bfin_serial_ports[i].rts_pin);
1249#endif 1350#endif
diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c
index 5c6ef51da274..f8df0681e160 100644
--- a/drivers/serial/cpm_uart/cpm_uart_core.c
+++ b/drivers/serial/cpm_uart/cpm_uart_core.c
@@ -1106,6 +1106,10 @@ static int cpm_uart_init_port(struct device_node *np,
1106 for (i = 0; i < NUM_GPIOS; i++) 1106 for (i = 0; i < NUM_GPIOS; i++)
1107 pinfo->gpios[i] = of_get_gpio(np, i); 1107 pinfo->gpios[i] = of_get_gpio(np, i);
1108 1108
1109#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
1110 udbg_putc = NULL;
1111#endif
1112
1109 return cpm_uart_request_port(&pinfo->port); 1113 return cpm_uart_request_port(&pinfo->port);
1110 1114
1111out_pram: 1115out_pram:
@@ -1255,10 +1259,6 @@ static int __init cpm_uart_console_setup(struct console *co, char *options)
1255 baud = 9600; 1259 baud = 9600;
1256 } 1260 }
1257 1261
1258#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
1259 udbg_putc = NULL;
1260#endif
1261
1262 if (IS_SMC(pinfo)) { 1262 if (IS_SMC(pinfo)) {
1263 out_be16(&pinfo->smcup->smc_brkcr, 0); 1263 out_be16(&pinfo->smcup->smc_brkcr, 0);
1264 cpm_line_cr_cmd(pinfo, CPM_CR_STOP_TX); 1264 cpm_line_cr_cmd(pinfo, CPM_CR_STOP_TX);
@@ -1339,13 +1339,13 @@ static int __devinit cpm_uart_probe(struct of_device *ofdev,
1339 1339
1340 dev_set_drvdata(&ofdev->dev, pinfo); 1340 dev_set_drvdata(&ofdev->dev, pinfo);
1341 1341
1342 /* initialize the device pointer for the port */
1343 pinfo->port.dev = &ofdev->dev;
1344
1342 ret = cpm_uart_init_port(ofdev->node, pinfo); 1345 ret = cpm_uart_init_port(ofdev->node, pinfo);
1343 if (ret) 1346 if (ret)
1344 return ret; 1347 return ret;
1345 1348
1346 /* initialize the device pointer for the port */
1347 pinfo->port.dev = &ofdev->dev;
1348
1349 return uart_add_one_port(&cpm_reg, &pinfo->port); 1349 return uart_add_one_port(&cpm_reg, &pinfo->port);
1350} 1350}
1351 1351
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c
index e642c22c80e2..7ba7d70f04d6 100644
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -1391,7 +1391,7 @@ static inline void e100_disable_rx_irq(struct e100_serial *info)
1391#if defined(CONFIG_ETRAX_RS485) 1391#if defined(CONFIG_ETRAX_RS485)
1392/* Enable RS-485 mode on selected port. This is UGLY. */ 1392/* Enable RS-485 mode on selected port. This is UGLY. */
1393static int 1393static int
1394e100_enable_rs485(struct tty_struct *tty,struct rs485_control *r) 1394e100_enable_rs485(struct tty_struct *tty, struct serial_rs485 *r)
1395{ 1395{
1396 struct e100_serial * info = (struct e100_serial *)tty->driver_data; 1396 struct e100_serial * info = (struct e100_serial *)tty->driver_data;
1397 1397
@@ -1409,13 +1409,11 @@ e100_enable_rs485(struct tty_struct *tty,struct rs485_control *r)
1409 CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 1); 1409 CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 1);
1410#endif 1410#endif
1411 1411
1412 info->rs485.rts_on_send = 0x01 & r->rts_on_send; 1412 info->rs485.flags = r->flags;
1413 info->rs485.rts_after_sent = 0x01 & r->rts_after_sent;
1414 if (r->delay_rts_before_send >= 1000) 1413 if (r->delay_rts_before_send >= 1000)
1415 info->rs485.delay_rts_before_send = 1000; 1414 info->rs485.delay_rts_before_send = 1000;
1416 else 1415 else
1417 info->rs485.delay_rts_before_send = r->delay_rts_before_send; 1416 info->rs485.delay_rts_before_send = r->delay_rts_before_send;
1418 info->rs485.enabled = r->enabled;
1419/* printk("rts: on send = %i, after = %i, enabled = %i", 1417/* printk("rts: on send = %i, after = %i, enabled = %i",
1420 info->rs485.rts_on_send, 1418 info->rs485.rts_on_send,
1421 info->rs485.rts_after_sent, 1419 info->rs485.rts_after_sent,
@@ -1430,17 +1428,18 @@ e100_write_rs485(struct tty_struct *tty,
1430 const unsigned char *buf, int count) 1428 const unsigned char *buf, int count)
1431{ 1429{
1432 struct e100_serial * info = (struct e100_serial *)tty->driver_data; 1430 struct e100_serial * info = (struct e100_serial *)tty->driver_data;
1433 int old_enabled = info->rs485.enabled; 1431 int old_value = (info->rs485.flags) & SER_RS485_ENABLED;
1434 1432
1435 /* rs485 is always implicitly enabled if we're using the ioctl() 1433 /* rs485 is always implicitly enabled if we're using the ioctl()
1436 * but it doesn't have to be set in the rs485_control 1434 * but it doesn't have to be set in the serial_rs485
1437 * (to be backward compatible with old apps) 1435 * (to be backward compatible with old apps)
1438 * So we store, set and restore it. 1436 * So we store, set and restore it.
1439 */ 1437 */
1440 info->rs485.enabled = 1; 1438 info->rs485.flags |= SER_RS485_ENABLED;
1441 /* rs_write now deals with RS485 if enabled */ 1439 /* rs_write now deals with RS485 if enabled */
1442 count = rs_write(tty, buf, count); 1440 count = rs_write(tty, buf, count);
1443 info->rs485.enabled = old_enabled; 1441 if (!old_value)
1442 info->rs485.flags &= ~(SER_RS485_ENABLED);
1444 return count; 1443 return count;
1445} 1444}
1446 1445
@@ -1451,7 +1450,7 @@ static void rs485_toggle_rts_timer_function(unsigned long data)
1451 struct e100_serial *info = (struct e100_serial *)data; 1450 struct e100_serial *info = (struct e100_serial *)data;
1452 1451
1453 fast_timers_rs485[info->line].function = NULL; 1452 fast_timers_rs485[info->line].function = NULL;
1454 e100_rts(info, info->rs485.rts_after_sent); 1453 e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND));
1455#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER) 1454#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
1456 e100_enable_rx(info); 1455 e100_enable_rx(info);
1457 e100_enable_rx_irq(info); 1456 e100_enable_rx_irq(info);
@@ -1647,7 +1646,7 @@ transmit_chars_dma(struct e100_serial *info)
1647 info->tr_running = 0; 1646 info->tr_running = 0;
1648 1647
1649#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER) 1648#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER)
1650 if (info->rs485.enabled) { 1649 if (info->rs485.flags & SER_RS485_ENABLED) {
1651 /* Set a short timer to toggle RTS */ 1650 /* Set a short timer to toggle RTS */
1652 start_one_shot_timer(&fast_timers_rs485[info->line], 1651 start_one_shot_timer(&fast_timers_rs485[info->line],
1653 rs485_toggle_rts_timer_function, 1652 rs485_toggle_rts_timer_function,
@@ -2577,7 +2576,7 @@ static void handle_ser_tx_interrupt(struct e100_serial *info)
2577 info->icount.tx++; 2576 info->icount.tx++;
2578 if (info->xmit.head == info->xmit.tail) { 2577 if (info->xmit.head == info->xmit.tail) {
2579#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER) 2578#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER)
2580 if (info->rs485.enabled) { 2579 if (info->rs485.flags & SER_RS485_ENABLED) {
2581 /* Set a short timer to toggle RTS */ 2580 /* Set a short timer to toggle RTS */
2582 start_one_shot_timer(&fast_timers_rs485[info->line], 2581 start_one_shot_timer(&fast_timers_rs485[info->line],
2583 rs485_toggle_rts_timer_function, 2582 rs485_toggle_rts_timer_function,
@@ -3218,7 +3217,7 @@ rs_write(struct tty_struct *tty,
3218#if defined(CONFIG_ETRAX_RS485) 3217#if defined(CONFIG_ETRAX_RS485)
3219 struct e100_serial *info = (struct e100_serial *)tty->driver_data; 3218 struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3220 3219
3221 if (info->rs485.enabled) 3220 if (info->rs485.flags & SER_RS485_ENABLED)
3222 { 3221 {
3223 /* If we are in RS-485 mode, we need to toggle RTS and disable 3222 /* If we are in RS-485 mode, we need to toggle RTS and disable
3224 * the receiver before initiating a DMA transfer 3223 * the receiver before initiating a DMA transfer
@@ -3228,7 +3227,7 @@ rs_write(struct tty_struct *tty,
3228 fast_timers_rs485[info->line].function = NULL; 3227 fast_timers_rs485[info->line].function = NULL;
3229 del_fast_timer(&fast_timers_rs485[info->line]); 3228 del_fast_timer(&fast_timers_rs485[info->line]);
3230#endif 3229#endif
3231 e100_rts(info, info->rs485.rts_on_send); 3230 e100_rts(info, (info->rs485.flags & SER_RS485_RTS_ON_SEND));
3232#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER) 3231#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
3233 e100_disable_rx(info); 3232 e100_disable_rx(info);
3234 e100_enable_rx_irq(info); 3233 e100_enable_rx_irq(info);
@@ -3242,7 +3241,7 @@ rs_write(struct tty_struct *tty,
3242 count = rs_raw_write(tty, buf, count); 3241 count = rs_raw_write(tty, buf, count);
3243 3242
3244#if defined(CONFIG_ETRAX_RS485) 3243#if defined(CONFIG_ETRAX_RS485)
3245 if (info->rs485.enabled) 3244 if (info->rs485.flags & SER_RS485_ENABLED)
3246 { 3245 {
3247 unsigned int val; 3246 unsigned int val;
3248 /* If we are in RS-485 mode the following has to be done: 3247 /* If we are in RS-485 mode the following has to be done:
@@ -3263,7 +3262,7 @@ rs_write(struct tty_struct *tty,
3263 get_lsr_info(info, &val); 3262 get_lsr_info(info, &val);
3264 }while (!(val & TIOCSER_TEMT)); 3263 }while (!(val & TIOCSER_TEMT));
3265 3264
3266 e100_rts(info, info->rs485.rts_after_sent); 3265 e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND));
3267 3266
3268#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER) 3267#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
3269 e100_enable_rx(info); 3268 e100_enable_rx(info);
@@ -3678,14 +3677,52 @@ rs_ioctl(struct tty_struct *tty, struct file * file,
3678#if defined(CONFIG_ETRAX_RS485) 3677#if defined(CONFIG_ETRAX_RS485)
3679 case TIOCSERSETRS485: 3678 case TIOCSERSETRS485:
3680 { 3679 {
3680 /* In this ioctl we still use the old structure
3681 * rs485_control for backward compatibility
3682 * (if we use serial_rs485, then old user-level code
3683 * wouldn't work anymore...).
3684 * The use of this ioctl is deprecated: use TIOCSRS485
3685 * instead.*/
3681 struct rs485_control rs485ctrl; 3686 struct rs485_control rs485ctrl;
3687 struct serial_rs485 rs485data;
3688 printk(KERN_DEBUG "The use of this ioctl is deprecated. Use TIOCSRS485 instead\n");
3682 if (copy_from_user(&rs485ctrl, (struct rs485_control *)arg, 3689 if (copy_from_user(&rs485ctrl, (struct rs485_control *)arg,
3683 sizeof(rs485ctrl))) 3690 sizeof(rs485ctrl)))
3684 return -EFAULT; 3691 return -EFAULT;
3685 3692
3686 return e100_enable_rs485(tty, &rs485ctrl); 3693 rs485data.delay_rts_before_send = rs485ctrl.delay_rts_before_send;
3694 rs485data.flags = 0;
3695 if (rs485ctrl.enabled)
3696 rs485data.flags |= SER_RS485_ENABLED;
3697 else
3698 rs485data.flags &= ~(SER_RS485_ENABLED);
3699
3700 if (rs485ctrl.rts_on_send)
3701 rs485data.flags |= SER_RS485_RTS_ON_SEND;
3702 else
3703 rs485data.flags &= ~(SER_RS485_RTS_ON_SEND);
3704
3705 if (rs485ctrl.rts_after_sent)
3706 rs485data.flags |= SER_RS485_RTS_AFTER_SEND;
3707 else
3708 rs485data.flags &= ~(SER_RS485_RTS_AFTER_SEND);
3709
3710 return e100_enable_rs485(tty, &rs485data);
3687 } 3711 }
3688 3712
3713 case TIOCSRS485:
3714 {
3715 /* This is the new version of TIOCSRS485, with new
3716 * data structure serial_rs485 */
3717 struct serial_rs485 rs485data;
3718 if (copy_from_user(&rs485data, (struct rs485_control *)arg,
3719 sizeof(rs485data)))
3720 return -EFAULT;
3721
3722 return e100_enable_rs485(tty, &rs485data);
3723 }
3724
3725
3689 case TIOCSERWRRS485: 3726 case TIOCSERWRRS485:
3690 { 3727 {
3691 struct rs485_write rs485wr; 3728 struct rs485_write rs485wr;
@@ -3827,8 +3864,8 @@ rs_close(struct tty_struct *tty, struct file * filp)
3827 /* port closed */ 3864 /* port closed */
3828 3865
3829#if defined(CONFIG_ETRAX_RS485) 3866#if defined(CONFIG_ETRAX_RS485)
3830 if (info->rs485.enabled) { 3867 if (info->rs485.flags & SER_RS485_ENABLED) {
3831 info->rs485.enabled = 0; 3868 info->rs485.flags &= ~(SER_RS485_ENABLED);
3832#if defined(CONFIG_ETRAX_RS485_ON_PA) 3869#if defined(CONFIG_ETRAX_RS485_ON_PA)
3833 *R_PORT_PA_DATA = port_pa_data_shadow &= ~(1 << rs485_pa_bit); 3870 *R_PORT_PA_DATA = port_pa_data_shadow &= ~(1 << rs485_pa_bit);
3834#endif 3871#endif
@@ -4493,10 +4530,10 @@ rs_init(void)
4493 4530
4494#if defined(CONFIG_ETRAX_RS485) 4531#if defined(CONFIG_ETRAX_RS485)
4495 /* Set sane defaults */ 4532 /* Set sane defaults */
4496 info->rs485.rts_on_send = 0; 4533 info->rs485.flags &= ~(SER_RS485_RTS_ON_SEND);
4497 info->rs485.rts_after_sent = 1; 4534 info->rs485.flags |= SER_RS485_RTS_AFTER_SEND;
4498 info->rs485.delay_rts_before_send = 0; 4535 info->rs485.delay_rts_before_send = 0;
4499 info->rs485.enabled = 0; 4536 info->rs485.flags &= ~(SER_RS485_ENABLED);
4500#endif 4537#endif
4501 INIT_WORK(&info->work, do_softint); 4538 INIT_WORK(&info->work, do_softint);
4502 4539
diff --git a/drivers/serial/crisv10.h b/drivers/serial/crisv10.h
index f36a729280bc..ea0beb46a10d 100644
--- a/drivers/serial/crisv10.h
+++ b/drivers/serial/crisv10.h
@@ -125,7 +125,7 @@ struct e100_serial {
125 int errorcode; 125 int errorcode;
126 126
127#ifdef CONFIG_ETRAX_RS485 127#ifdef CONFIG_ETRAX_RS485
128 struct rs485_control rs485; /* RS-485 support */ 128 struct serial_rs485 rs485; /* RS-485 support */
129#endif 129#endif
130}; 130};
131 131
diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c
index 2b7531d9f6ab..6579e2be1dd1 100644
--- a/drivers/serial/icom.c
+++ b/drivers/serial/icom.c
@@ -1098,7 +1098,6 @@ static void icom_set_termios(struct uart_port *port,
1098{ 1098{
1099 int baud; 1099 int baud;
1100 unsigned cflag, iflag; 1100 unsigned cflag, iflag;
1101 int bits;
1102 char new_config2; 1101 char new_config2;
1103 char new_config3 = 0; 1102 char new_config3 = 0;
1104 char tmp_byte; 1103 char tmp_byte;
@@ -1119,34 +1118,27 @@ static void icom_set_termios(struct uart_port *port,
1119 switch (cflag & CSIZE) { 1118 switch (cflag & CSIZE) {
1120 case CS5: /* 5 bits/char */ 1119 case CS5: /* 5 bits/char */
1121 new_config2 |= ICOM_ACFG_5BPC; 1120 new_config2 |= ICOM_ACFG_5BPC;
1122 bits = 7;
1123 break; 1121 break;
1124 case CS6: /* 6 bits/char */ 1122 case CS6: /* 6 bits/char */
1125 new_config2 |= ICOM_ACFG_6BPC; 1123 new_config2 |= ICOM_ACFG_6BPC;
1126 bits = 8;
1127 break; 1124 break;
1128 case CS7: /* 7 bits/char */ 1125 case CS7: /* 7 bits/char */
1129 new_config2 |= ICOM_ACFG_7BPC; 1126 new_config2 |= ICOM_ACFG_7BPC;
1130 bits = 9;
1131 break; 1127 break;
1132 case CS8: /* 8 bits/char */ 1128 case CS8: /* 8 bits/char */
1133 new_config2 |= ICOM_ACFG_8BPC; 1129 new_config2 |= ICOM_ACFG_8BPC;
1134 bits = 10;
1135 break; 1130 break;
1136 default: 1131 default:
1137 bits = 10;
1138 break; 1132 break;
1139 } 1133 }
1140 if (cflag & CSTOPB) { 1134 if (cflag & CSTOPB) {
1141 /* 2 stop bits */ 1135 /* 2 stop bits */
1142 new_config2 |= ICOM_ACFG_2STOP_BIT; 1136 new_config2 |= ICOM_ACFG_2STOP_BIT;
1143 bits++;
1144 } 1137 }
1145 if (cflag & PARENB) { 1138 if (cflag & PARENB) {
1146 /* parity bit enabled */ 1139 /* parity bit enabled */
1147 new_config2 |= ICOM_ACFG_PARITY_ENAB; 1140 new_config2 |= ICOM_ACFG_PARITY_ENAB;
1148 trace(ICOM_PORT, "PARENB", 0); 1141 trace(ICOM_PORT, "PARENB", 0);
1149 bits++;
1150 } 1142 }
1151 if (cflag & PARODD) { 1143 if (cflag & PARODD) {
1152 /* odd parity */ 1144 /* odd parity */
@@ -1322,7 +1314,6 @@ static struct uart_driver icom_uart_driver = {
1322static int __devinit icom_init_ports(struct icom_adapter *icom_adapter) 1314static int __devinit icom_init_ports(struct icom_adapter *icom_adapter)
1323{ 1315{
1324 u32 subsystem_id = icom_adapter->subsystem_id; 1316 u32 subsystem_id = icom_adapter->subsystem_id;
1325 int retval = 0;
1326 int i; 1317 int i;
1327 struct icom_port *icom_port; 1318 struct icom_port *icom_port;
1328 1319
@@ -1368,7 +1359,7 @@ static int __devinit icom_init_ports(struct icom_adapter *icom_adapter)
1368 } 1359 }
1369 } 1360 }
1370 1361
1371 return retval; 1362 return 0;
1372} 1363}
1373 1364
1374static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *icom_adapter, int port_num) 1365static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *icom_adapter, int port_num)
@@ -1391,7 +1382,6 @@ static int __devinit icom_load_ports(struct icom_adapter *icom_adapter)
1391{ 1382{
1392 struct icom_port *icom_port; 1383 struct icom_port *icom_port;
1393 int port_num; 1384 int port_num;
1394 int retval;
1395 1385
1396 for (port_num = 0; port_num < icom_adapter->numb_ports; port_num++) { 1386 for (port_num = 0; port_num < icom_adapter->numb_ports; port_num++) {
1397 1387
@@ -1405,7 +1395,7 @@ static int __devinit icom_load_ports(struct icom_adapter *icom_adapter)
1405 icom_port->adapter = icom_adapter; 1395 icom_port->adapter = icom_adapter;
1406 1396
1407 /* get port memory */ 1397 /* get port memory */
1408 if ((retval = get_port_memory(icom_port)) != 0) { 1398 if (get_port_memory(icom_port) != 0) {
1409 dev_err(&icom_port->adapter->pci_dev->dev, 1399 dev_err(&icom_port->adapter->pci_dev->dev,
1410 "Memory allocation for port FAILED\n"); 1400 "Memory allocation for port FAILED\n");
1411 } 1401 }
diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c
index ac79cbe4c2cf..d2d32a198629 100644
--- a/drivers/serial/jsm/jsm_driver.c
+++ b/drivers/serial/jsm/jsm_driver.c
@@ -52,12 +52,11 @@ int jsm_debug;
52module_param(jsm_debug, int, 0); 52module_param(jsm_debug, int, 0);
53MODULE_PARM_DESC(jsm_debug, "Driver debugging level"); 53MODULE_PARM_DESC(jsm_debug, "Driver debugging level");
54 54
55static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) 55static int __devinit jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
56{ 56{
57 int rc = 0; 57 int rc = 0;
58 struct jsm_board *brd; 58 struct jsm_board *brd;
59 static int adapter_count = 0; 59 static int adapter_count = 0;
60 int retval;
61 60
62 rc = pci_enable_device(pdev); 61 rc = pci_enable_device(pdev);
63 if (rc) { 62 if (rc) {
@@ -134,7 +133,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
134 rc = jsm_tty_init(brd); 133 rc = jsm_tty_init(brd);
135 if (rc < 0) { 134 if (rc < 0) {
136 dev_err(&pdev->dev, "Can't init tty devices (%d)\n", rc); 135 dev_err(&pdev->dev, "Can't init tty devices (%d)\n", rc);
137 retval = -ENXIO; 136 rc = -ENXIO;
138 goto out_free_irq; 137 goto out_free_irq;
139 } 138 }
140 139
@@ -142,7 +141,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
142 if (rc < 0) { 141 if (rc < 0) {
143 /* XXX: leaking all resources from jsm_tty_init here! */ 142 /* XXX: leaking all resources from jsm_tty_init here! */
144 dev_err(&pdev->dev, "Can't init uart port (%d)\n", rc); 143 dev_err(&pdev->dev, "Can't init uart port (%d)\n", rc);
145 retval = -ENXIO; 144 rc = -ENXIO;
146 goto out_free_irq; 145 goto out_free_irq;
147 } 146 }
148 147
@@ -161,7 +160,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
161 /* XXX: leaking all resources from jsm_tty_init and 160 /* XXX: leaking all resources from jsm_tty_init and
162 jsm_uart_port_init here! */ 161 jsm_uart_port_init here! */
163 dev_err(&pdev->dev, "memory allocation for flipbuf failed\n"); 162 dev_err(&pdev->dev, "memory allocation for flipbuf failed\n");
164 retval = -ENOMEM; 163 rc = -ENOMEM;
165 goto out_free_irq; 164 goto out_free_irq;
166 } 165 }
167 166
diff --git a/drivers/serial/jsm/jsm_neo.c b/drivers/serial/jsm/jsm_neo.c
index e6390d023634..9dadaa11d266 100644
--- a/drivers/serial/jsm/jsm_neo.c
+++ b/drivers/serial/jsm/jsm_neo.c
@@ -533,7 +533,6 @@ static void neo_copy_data_from_queue_to_uart(struct jsm_channel *ch)
533 if (!(ch->ch_flags & (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM))) 533 if (!(ch->ch_flags & (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM)))
534 return; 534 return;
535 535
536 len_written = 0;
537 n = UART_17158_TX_FIFOSIZE - ch->ch_t_tlevel; 536 n = UART_17158_TX_FIFOSIZE - ch->ch_t_tlevel;
538 537
539 /* cache head and tail of queue */ 538 /* cache head and tail of queue */
@@ -619,14 +618,10 @@ static void neo_parse_modem(struct jsm_channel *ch, u8 signals)
619/* Make the UART raise any of the output signals we want up */ 618/* Make the UART raise any of the output signals we want up */
620static void neo_assert_modem_signals(struct jsm_channel *ch) 619static void neo_assert_modem_signals(struct jsm_channel *ch)
621{ 620{
622 u8 out;
623
624 if (!ch) 621 if (!ch)
625 return; 622 return;
626 623
627 out = ch->ch_mostat; 624 writeb(ch->ch_mostat, &ch->ch_neo_uart->mcr);
628
629 writeb(out, &ch->ch_neo_uart->mcr);
630 625
631 /* flush write operation */ 626 /* flush write operation */
632 neo_pci_posting_flush(ch->ch_bd); 627 neo_pci_posting_flush(ch->ch_bd);
@@ -936,10 +931,9 @@ static inline void neo_parse_lsr(struct jsm_board *brd, u32 port)
936static void neo_param(struct jsm_channel *ch) 931static void neo_param(struct jsm_channel *ch)
937{ 932{
938 u8 lcr = 0; 933 u8 lcr = 0;
939 u8 uart_lcr = 0; 934 u8 uart_lcr, ier;
940 u8 ier = 0; 935 u32 baud;
941 u32 baud = 9600; 936 int quot;
942 int quot = 0;
943 struct jsm_board *bd; 937 struct jsm_board *bd;
944 938
945 bd = ch->ch_bd; 939 bd = ch->ch_bd;
diff --git a/drivers/serial/jsm/jsm_tty.c b/drivers/serial/jsm/jsm_tty.c
index 324c74d2f666..31496dc0a0d1 100644
--- a/drivers/serial/jsm/jsm_tty.c
+++ b/drivers/serial/jsm/jsm_tty.c
@@ -183,7 +183,6 @@ static void jsm_tty_break(struct uart_port *port, int break_state)
183static int jsm_tty_open(struct uart_port *port) 183static int jsm_tty_open(struct uart_port *port)
184{ 184{
185 struct jsm_board *brd; 185 struct jsm_board *brd;
186 int rc = 0;
187 struct jsm_channel *channel = (struct jsm_channel *)port; 186 struct jsm_channel *channel = (struct jsm_channel *)port;
188 struct ktermios *termios; 187 struct ktermios *termios;
189 188
@@ -265,7 +264,7 @@ static int jsm_tty_open(struct uart_port *port)
265 channel->ch_open_count++; 264 channel->ch_open_count++;
266 265
267 jsm_printk(OPEN, INFO, &channel->ch_bd->pci_dev, "finish\n"); 266 jsm_printk(OPEN, INFO, &channel->ch_bd->pci_dev, "finish\n");
268 return rc; 267 return 0;
269} 268}
270 269
271static void jsm_tty_close(struct uart_port *port) 270static void jsm_tty_close(struct uart_port *port)
@@ -367,7 +366,7 @@ static struct uart_ops jsm_ops = {
367 * Init the tty subsystem. Called once per board after board has been 366 * Init the tty subsystem. Called once per board after board has been
368 * downloaded and init'ed. 367 * downloaded and init'ed.
369 */ 368 */
370int jsm_tty_init(struct jsm_board *brd) 369int __devinit jsm_tty_init(struct jsm_board *brd)
371{ 370{
372 int i; 371 int i;
373 void __iomem *vaddr; 372 void __iomem *vaddr;
@@ -431,7 +430,7 @@ int jsm_tty_init(struct jsm_board *brd)
431 return 0; 430 return 0;
432} 431}
433 432
434int jsm_uart_port_init(struct jsm_board *brd) 433int __devinit jsm_uart_port_init(struct jsm_board *brd)
435{ 434{
436 int i; 435 int i;
437 struct jsm_channel *ch; 436 struct jsm_channel *ch;
@@ -748,7 +747,7 @@ static void jsm_carrier(struct jsm_channel *ch)
748void jsm_check_queue_flow_control(struct jsm_channel *ch) 747void jsm_check_queue_flow_control(struct jsm_channel *ch)
749{ 748{
750 struct board_ops *bd_ops = ch->ch_bd->bd_ops; 749 struct board_ops *bd_ops = ch->ch_bd->bd_ops;
751 int qleft = 0; 750 int qleft;
752 751
753 /* Store how much space we have left in the queue */ 752 /* Store how much space we have left in the queue */
754 if ((qleft = ch->ch_r_tail - ch->ch_r_head - 1) < 0) 753 if ((qleft = ch->ch_r_tail - ch->ch_r_head - 1) < 0)
@@ -834,7 +833,7 @@ void jsm_check_queue_flow_control(struct jsm_channel *ch)
834 */ 833 */
835int jsm_tty_write(struct uart_port *port) 834int jsm_tty_write(struct uart_port *port)
836{ 835{
837 int bufcount = 0, n = 0; 836 int bufcount;
838 int data_count = 0,data_count1 =0; 837 int data_count = 0,data_count1 =0;
839 u16 head; 838 u16 head;
840 u16 tail; 839 u16 tail;
@@ -850,14 +849,12 @@ int jsm_tty_write(struct uart_port *port)
850 if ((bufcount = tail - head - 1) < 0) 849 if ((bufcount = tail - head - 1) < 0)
851 bufcount += WQUEUESIZE; 850 bufcount += WQUEUESIZE;
852 851
853 n = bufcount; 852 bufcount = min(bufcount, 56);
854
855 n = min(n, 56);
856 remain = WQUEUESIZE - head; 853 remain = WQUEUESIZE - head;
857 854
858 data_count = 0; 855 data_count = 0;
859 if (n >= remain) { 856 if (bufcount >= remain) {
860 n -= remain; 857 bufcount -= remain;
861 while ((port->info->xmit.head != temp_tail) && 858 while ((port->info->xmit.head != temp_tail) &&
862 (data_count < remain)) { 859 (data_count < remain)) {
863 channel->ch_wqueue[head++] = 860 channel->ch_wqueue[head++] =
@@ -871,8 +868,8 @@ int jsm_tty_write(struct uart_port *port)
871 } 868 }
872 869
873 data_count1 = 0; 870 data_count1 = 0;
874 if (n > 0) { 871 if (bufcount > 0) {
875 remain = n; 872 remain = bufcount;
876 while ((port->info->xmit.head != temp_tail) && 873 while ((port->info->xmit.head != temp_tail) &&
877 (data_count1 < remain)) { 874 (data_count1 < remain)) {
878 channel->ch_wqueue[head++] = 875 channel->ch_wqueue[head++] =
diff --git a/drivers/serial/pmac_zilog.c b/drivers/serial/pmac_zilog.c
index ad3488504010..9c1243fbd512 100644
--- a/drivers/serial/pmac_zilog.c
+++ b/drivers/serial/pmac_zilog.c
@@ -1538,6 +1538,21 @@ no_dma:
1538 uap->port.type = PORT_PMAC_ZILOG; 1538 uap->port.type = PORT_PMAC_ZILOG;
1539 uap->port.flags = 0; 1539 uap->port.flags = 0;
1540 1540
1541 /*
1542 * Fixup for the port on Gatwick for which the device-tree has
1543 * missing interrupts. Normally, the macio_dev would contain
1544 * fixed up interrupt info, but we use the device-tree directly
1545 * here due to early probing so we need the fixup too.
1546 */
1547 if (uap->port.irq == NO_IRQ &&
1548 np->parent && np->parent->parent &&
1549 of_device_is_compatible(np->parent->parent, "gatwick")) {
1550 /* IRQs on gatwick are offset by 64 */
1551 uap->port.irq = irq_create_mapping(NULL, 64 + 15);
1552 uap->tx_dma_irq = irq_create_mapping(NULL, 64 + 4);
1553 uap->rx_dma_irq = irq_create_mapping(NULL, 64 + 5);
1554 }
1555
1541 /* Setup some valid baud rate information in the register 1556 /* Setup some valid baud rate information in the register
1542 * shadows so we don't write crap there before baud rate is 1557 * shadows so we don't write crap there before baud rate is
1543 * first initialized. 1558 * first initialized.
diff --git a/drivers/serial/ucc_uart.c b/drivers/serial/ucc_uart.c
index 315a9333ca3c..7de66c06b05d 100644
--- a/drivers/serial/ucc_uart.c
+++ b/drivers/serial/ucc_uart.c
@@ -1274,6 +1274,7 @@ static int ucc_uart_probe(struct of_device *ofdev,
1274 if (!iprop) { 1274 if (!iprop) {
1275 iprop = of_get_property(np, "device-id", NULL); 1275 iprop = of_get_property(np, "device-id", NULL);
1276 if (!iprop) { 1276 if (!iprop) {
1277 kfree(qe_port);
1277 dev_err(&ofdev->dev, "UCC is unspecified in " 1278 dev_err(&ofdev->dev, "UCC is unspecified in "
1278 "device tree\n"); 1279 "device tree\n");
1279 return -EINVAL; 1280 return -EINVAL;
diff --git a/drivers/sn/ioc3.c b/drivers/sn/ioc3.c
index a0aa33dde0a4..816d4c592a3c 100644
--- a/drivers/sn/ioc3.c
+++ b/drivers/sn/ioc3.c
@@ -617,9 +617,9 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
617 pci_set_master(pdev); 617 pci_set_master(pdev);
618 618
619#ifdef USE_64BIT_DMA 619#ifdef USE_64BIT_DMA
620 ret = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 620 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
621 if (!ret) { 621 if (!ret) {
622 ret = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); 622 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
623 if (ret < 0) { 623 if (ret < 0) {
624 printk(KERN_WARNING "%s: Unable to obtain 64 bit DMA " 624 printk(KERN_WARNING "%s: Unable to obtain 64 bit DMA "
625 "for consistent allocations\n", 625 "for consistent allocations\n",
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c
index 33fcef3150d4..c1688c71f052 100644
--- a/drivers/spi/pxa2xx_spi.c
+++ b/drivers/spi/pxa2xx_spi.c
@@ -28,6 +28,7 @@
28#include <linux/workqueue.h> 28#include <linux/workqueue.h>
29#include <linux/delay.h> 29#include <linux/delay.h>
30#include <linux/clk.h> 30#include <linux/clk.h>
31#include <linux/gpio.h>
31 32
32#include <asm/io.h> 33#include <asm/io.h>
33#include <asm/irq.h> 34#include <asm/irq.h>
@@ -53,6 +54,7 @@ MODULE_ALIAS("platform:pxa2xx-spi");
53#define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK) 54#define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK)
54#define IS_DMA_ALIGNED(x) ((((u32)(x)) & 0x07) == 0) 55#define IS_DMA_ALIGNED(x) ((((u32)(x)) & 0x07) == 0)
55#define MAX_DMA_LEN 8191 56#define MAX_DMA_LEN 8191
57#define DMA_ALIGNMENT 8
56 58
57/* 59/*
58 * for testing SSCR1 changes that require SSP restart, basically 60 * for testing SSCR1 changes that require SSP restart, basically
@@ -166,6 +168,8 @@ struct chip_data {
166 u8 enable_dma; 168 u8 enable_dma;
167 u8 bits_per_word; 169 u8 bits_per_word;
168 u32 speed_hz; 170 u32 speed_hz;
171 int gpio_cs;
172 int gpio_cs_inverted;
169 int (*write)(struct driver_data *drv_data); 173 int (*write)(struct driver_data *drv_data);
170 int (*read)(struct driver_data *drv_data); 174 int (*read)(struct driver_data *drv_data);
171 void (*cs_control)(u32 command); 175 void (*cs_control)(u32 command);
@@ -173,6 +177,32 @@ struct chip_data {
173 177
174static void pump_messages(struct work_struct *work); 178static void pump_messages(struct work_struct *work);
175 179
180static void cs_assert(struct driver_data *drv_data)
181{
182 struct chip_data *chip = drv_data->cur_chip;
183
184 if (chip->cs_control) {
185 chip->cs_control(PXA2XX_CS_ASSERT);
186 return;
187 }
188
189 if (gpio_is_valid(chip->gpio_cs))
190 gpio_set_value(chip->gpio_cs, chip->gpio_cs_inverted);
191}
192
193static void cs_deassert(struct driver_data *drv_data)
194{
195 struct chip_data *chip = drv_data->cur_chip;
196
197 if (chip->cs_control) {
198 chip->cs_control(PXA2XX_CS_ASSERT);
199 return;
200 }
201
202 if (gpio_is_valid(chip->gpio_cs))
203 gpio_set_value(chip->gpio_cs, !chip->gpio_cs_inverted);
204}
205
176static int flush(struct driver_data *drv_data) 206static int flush(struct driver_data *drv_data)
177{ 207{
178 unsigned long limit = loops_per_jiffy << 1; 208 unsigned long limit = loops_per_jiffy << 1;
@@ -189,10 +219,6 @@ static int flush(struct driver_data *drv_data)
189 return limit; 219 return limit;
190} 220}
191 221
192static void null_cs_control(u32 command)
193{
194}
195
196static int null_writer(struct driver_data *drv_data) 222static int null_writer(struct driver_data *drv_data)
197{ 223{
198 void __iomem *reg = drv_data->ioaddr; 224 void __iomem *reg = drv_data->ioaddr;
@@ -400,7 +426,6 @@ static void giveback(struct driver_data *drv_data)
400 msg = drv_data->cur_msg; 426 msg = drv_data->cur_msg;
401 drv_data->cur_msg = NULL; 427 drv_data->cur_msg = NULL;
402 drv_data->cur_transfer = NULL; 428 drv_data->cur_transfer = NULL;
403 drv_data->cur_chip = NULL;
404 queue_work(drv_data->workqueue, &drv_data->pump_messages); 429 queue_work(drv_data->workqueue, &drv_data->pump_messages);
405 spin_unlock_irqrestore(&drv_data->lock, flags); 430 spin_unlock_irqrestore(&drv_data->lock, flags);
406 431
@@ -416,7 +441,7 @@ static void giveback(struct driver_data *drv_data)
416 * a message with an error, or next message is for another chip 441 * a message with an error, or next message is for another chip
417 */ 442 */
418 if (!last_transfer->cs_change) 443 if (!last_transfer->cs_change)
419 drv_data->cs_control(PXA2XX_CS_DEASSERT); 444 cs_deassert(drv_data);
420 else { 445 else {
421 struct spi_message *next_msg; 446 struct spi_message *next_msg;
422 447
@@ -445,12 +470,14 @@ static void giveback(struct driver_data *drv_data)
445 if (next_msg && next_msg->spi != msg->spi) 470 if (next_msg && next_msg->spi != msg->spi)
446 next_msg = NULL; 471 next_msg = NULL;
447 if (!next_msg || msg->state == ERROR_STATE) 472 if (!next_msg || msg->state == ERROR_STATE)
448 drv_data->cs_control(PXA2XX_CS_DEASSERT); 473 cs_deassert(drv_data);
449 } 474 }
450 475
451 msg->state = NULL; 476 msg->state = NULL;
452 if (msg->complete) 477 if (msg->complete)
453 msg->complete(msg->context); 478 msg->complete(msg->context);
479
480 drv_data->cur_chip = NULL;
454} 481}
455 482
456static int wait_ssp_rx_stall(void const __iomem *ioaddr) 483static int wait_ssp_rx_stall(void const __iomem *ioaddr)
@@ -887,7 +914,7 @@ static void pump_transfers(unsigned long data)
887 914
888 /* Drop chip select only if cs_change is requested */ 915 /* Drop chip select only if cs_change is requested */
889 if (previous->cs_change) 916 if (previous->cs_change)
890 drv_data->cs_control(PXA2XX_CS_DEASSERT); 917 cs_deassert(drv_data);
891 } 918 }
892 919
893 /* Check for transfers that need multiple DMA segments */ 920 /* Check for transfers that need multiple DMA segments */
@@ -922,7 +949,6 @@ static void pump_transfers(unsigned long data)
922 } 949 }
923 drv_data->n_bytes = chip->n_bytes; 950 drv_data->n_bytes = chip->n_bytes;
924 drv_data->dma_width = chip->dma_width; 951 drv_data->dma_width = chip->dma_width;
925 drv_data->cs_control = chip->cs_control;
926 drv_data->tx = (void *)transfer->tx_buf; 952 drv_data->tx = (void *)transfer->tx_buf;
927 drv_data->tx_end = drv_data->tx + transfer->len; 953 drv_data->tx_end = drv_data->tx + transfer->len;
928 drv_data->rx = transfer->rx_buf; 954 drv_data->rx = transfer->rx_buf;
@@ -1084,11 +1110,7 @@ static void pump_transfers(unsigned long data)
1084 write_SSTO(chip->timeout, reg); 1110 write_SSTO(chip->timeout, reg);
1085 } 1111 }
1086 1112
1087 /* FIXME, need to handle cs polarity, 1113 cs_assert(drv_data);
1088 * this driver uses struct pxa2xx_spi_chip.cs_control to
1089 * specify a CS handling function, and it ignores most
1090 * struct spi_device.mode[s], including SPI_CS_HIGH */
1091 drv_data->cs_control(PXA2XX_CS_ASSERT);
1092 1114
1093 /* after chip select, release the data by enabling service 1115 /* after chip select, release the data by enabling service
1094 * requests and interrupts, without changing any mode bits */ 1116 * requests and interrupts, without changing any mode bits */
@@ -1166,6 +1188,44 @@ static int transfer(struct spi_device *spi, struct spi_message *msg)
1166/* the spi->mode bits understood by this driver: */ 1188/* the spi->mode bits understood by this driver: */
1167#define MODEBITS (SPI_CPOL | SPI_CPHA) 1189#define MODEBITS (SPI_CPOL | SPI_CPHA)
1168 1190
1191static int setup_cs(struct spi_device *spi, struct chip_data *chip,
1192 struct pxa2xx_spi_chip *chip_info)
1193{
1194 int err = 0;
1195
1196 if (chip == NULL || chip_info == NULL)
1197 return 0;
1198
1199 /* NOTE: setup() can be called multiple times, possibly with
1200 * different chip_info, release previously requested GPIO
1201 */
1202 if (gpio_is_valid(chip->gpio_cs))
1203 gpio_free(chip->gpio_cs);
1204
1205 /* If (*cs_control) is provided, ignore GPIO chip select */
1206 if (chip_info->cs_control) {
1207 chip->cs_control = chip_info->cs_control;
1208 return 0;
1209 }
1210
1211 if (gpio_is_valid(chip_info->gpio_cs)) {
1212 err = gpio_request(chip_info->gpio_cs, "SPI_CS");
1213 if (err) {
1214 dev_err(&spi->dev, "failed to request chip select "
1215 "GPIO%d\n", chip_info->gpio_cs);
1216 return err;
1217 }
1218
1219 chip->gpio_cs = chip_info->gpio_cs;
1220 chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;
1221
1222 err = gpio_direction_output(chip->gpio_cs,
1223 !chip->gpio_cs_inverted);
1224 }
1225
1226 return err;
1227}
1228
1169static int setup(struct spi_device *spi) 1229static int setup(struct spi_device *spi)
1170{ 1230{
1171 struct pxa2xx_spi_chip *chip_info = NULL; 1231 struct pxa2xx_spi_chip *chip_info = NULL;
@@ -1211,7 +1271,7 @@ static int setup(struct spi_device *spi)
1211 return -ENOMEM; 1271 return -ENOMEM;
1212 } 1272 }
1213 1273
1214 chip->cs_control = null_cs_control; 1274 chip->gpio_cs = -1;
1215 chip->enable_dma = 0; 1275 chip->enable_dma = 0;
1216 chip->timeout = TIMOUT_DFLT; 1276 chip->timeout = TIMOUT_DFLT;
1217 chip->dma_burst_size = drv_data->master_info->enable_dma ? 1277 chip->dma_burst_size = drv_data->master_info->enable_dma ?
@@ -1225,8 +1285,6 @@ static int setup(struct spi_device *spi)
1225 /* chip_info isn't always needed */ 1285 /* chip_info isn't always needed */
1226 chip->cr1 = 0; 1286 chip->cr1 = 0;
1227 if (chip_info) { 1287 if (chip_info) {
1228 if (chip_info->cs_control)
1229 chip->cs_control = chip_info->cs_control;
1230 if (chip_info->timeout) 1288 if (chip_info->timeout)
1231 chip->timeout = chip_info->timeout; 1289 chip->timeout = chip_info->timeout;
1232 if (chip_info->tx_threshold) 1290 if (chip_info->tx_threshold)
@@ -1308,13 +1366,16 @@ static int setup(struct spi_device *spi)
1308 1366
1309 spi_set_ctldata(spi, chip); 1367 spi_set_ctldata(spi, chip);
1310 1368
1311 return 0; 1369 return setup_cs(spi, chip, chip_info);
1312} 1370}
1313 1371
1314static void cleanup(struct spi_device *spi) 1372static void cleanup(struct spi_device *spi)
1315{ 1373{
1316 struct chip_data *chip = spi_get_ctldata(spi); 1374 struct chip_data *chip = spi_get_ctldata(spi);
1317 1375
1376 if (gpio_is_valid(chip->gpio_cs))
1377 gpio_free(chip->gpio_cs);
1378
1318 kfree(chip); 1379 kfree(chip);
1319} 1380}
1320 1381
@@ -1438,6 +1499,7 @@ static int __init pxa2xx_spi_probe(struct platform_device *pdev)
1438 1499
1439 master->bus_num = pdev->id; 1500 master->bus_num = pdev->id;
1440 master->num_chipselect = platform_info->num_chipselect; 1501 master->num_chipselect = platform_info->num_chipselect;
1502 master->dma_alignment = DMA_ALIGNMENT;
1441 master->cleanup = cleanup; 1503 master->cleanup = cleanup;
1442 master->setup = setup; 1504 master->setup = setup;
1443 master->transfer = transfer; 1505 master->transfer = transfer;
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
index 3410b0c55ed2..f014cc21e813 100644
--- a/drivers/spi/spi_bfin5xx.c
+++ b/drivers/spi/spi_bfin5xx.c
@@ -25,18 +25,17 @@
25#include <asm/dma.h> 25#include <asm/dma.h>
26#include <asm/portmux.h> 26#include <asm/portmux.h>
27#include <asm/bfin5xx_spi.h> 27#include <asm/bfin5xx_spi.h>
28#include <asm/cacheflush.h>
28 29
29#define DRV_NAME "bfin-spi" 30#define DRV_NAME "bfin-spi"
30#define DRV_AUTHOR "Bryan Wu, Luke Yang" 31#define DRV_AUTHOR "Bryan Wu, Luke Yang"
31#define DRV_DESC "Blackfin BF5xx on-chip SPI Controller Driver" 32#define DRV_DESC "Blackfin on-chip SPI Controller Driver"
32#define DRV_VERSION "1.0" 33#define DRV_VERSION "1.0"
33 34
34MODULE_AUTHOR(DRV_AUTHOR); 35MODULE_AUTHOR(DRV_AUTHOR);
35MODULE_DESCRIPTION(DRV_DESC); 36MODULE_DESCRIPTION(DRV_DESC);
36MODULE_LICENSE("GPL"); 37MODULE_LICENSE("GPL");
37 38
38#define IS_DMA_ALIGNED(x) (((u32)(x)&0x07) == 0)
39
40#define START_STATE ((void *)0) 39#define START_STATE ((void *)0)
41#define RUNNING_STATE ((void *)1) 40#define RUNNING_STATE ((void *)1)
42#define DONE_STATE ((void *)2) 41#define DONE_STATE ((void *)2)
@@ -44,6 +43,9 @@ MODULE_LICENSE("GPL");
44#define QUEUE_RUNNING 0 43#define QUEUE_RUNNING 0
45#define QUEUE_STOPPED 1 44#define QUEUE_STOPPED 1
46 45
46/* Value to send if no TX value is supplied */
47#define SPI_IDLE_TXVAL 0x0000
48
47struct driver_data { 49struct driver_data {
48 /* Driver model hookup */ 50 /* Driver model hookup */
49 struct platform_device *pdev; 51 struct platform_device *pdev;
@@ -110,6 +112,8 @@ struct chip_data {
110 u8 bits_per_word; /* 8 or 16 */ 112 u8 bits_per_word; /* 8 or 16 */
111 u8 cs_change_per_word; 113 u8 cs_change_per_word;
112 u16 cs_chg_udelay; /* Some devices require > 255usec delay */ 114 u16 cs_chg_udelay; /* Some devices require > 255usec delay */
115 u32 cs_gpio;
116 u16 idle_tx_val;
113 void (*write) (struct driver_data *); 117 void (*write) (struct driver_data *);
114 void (*read) (struct driver_data *); 118 void (*read) (struct driver_data *);
115 void (*duplex) (struct driver_data *); 119 void (*duplex) (struct driver_data *);
@@ -154,10 +158,13 @@ static u16 hz_to_spi_baud(u32 speed_hz)
154 if ((sclk % (2 * speed_hz)) > 0) 158 if ((sclk % (2 * speed_hz)) > 0)
155 spi_baud++; 159 spi_baud++;
156 160
161 if (spi_baud < MIN_SPI_BAUD_VAL)
162 spi_baud = MIN_SPI_BAUD_VAL;
163
157 return spi_baud; 164 return spi_baud;
158} 165}
159 166
160static int flush(struct driver_data *drv_data) 167static int bfin_spi_flush(struct driver_data *drv_data)
161{ 168{
162 unsigned long limit = loops_per_jiffy << 1; 169 unsigned long limit = loops_per_jiffy << 1;
163 170
@@ -171,33 +178,40 @@ static int flush(struct driver_data *drv_data)
171} 178}
172 179
173/* Chip select operation functions for cs_change flag */ 180/* Chip select operation functions for cs_change flag */
174static void cs_active(struct driver_data *drv_data, struct chip_data *chip) 181static void bfin_spi_cs_active(struct driver_data *drv_data, struct chip_data *chip)
175{ 182{
176 u16 flag = read_FLAG(drv_data); 183 if (likely(chip->chip_select_num)) {
184 u16 flag = read_FLAG(drv_data);
177 185
178 flag |= chip->flag; 186 flag |= chip->flag;
179 flag &= ~(chip->flag << 8); 187 flag &= ~(chip->flag << 8);
180 188
181 write_FLAG(drv_data, flag); 189 write_FLAG(drv_data, flag);
190 } else {
191 gpio_set_value(chip->cs_gpio, 0);
192 }
182} 193}
183 194
184static void cs_deactive(struct driver_data *drv_data, struct chip_data *chip) 195static void bfin_spi_cs_deactive(struct driver_data *drv_data, struct chip_data *chip)
185{ 196{
186 u16 flag = read_FLAG(drv_data); 197 if (likely(chip->chip_select_num)) {
198 u16 flag = read_FLAG(drv_data);
187 199
188 flag |= (chip->flag << 8); 200 flag &= ~chip->flag;
201 flag |= (chip->flag << 8);
189 202
190 write_FLAG(drv_data, flag); 203 write_FLAG(drv_data, flag);
204 } else {
205 gpio_set_value(chip->cs_gpio, 1);
206 }
191 207
192 /* Move delay here for consistency */ 208 /* Move delay here for consistency */
193 if (chip->cs_chg_udelay) 209 if (chip->cs_chg_udelay)
194 udelay(chip->cs_chg_udelay); 210 udelay(chip->cs_chg_udelay);
195} 211}
196 212
197#define MAX_SPI_SSEL 7
198
199/* stop controller and re-config current chip*/ 213/* stop controller and re-config current chip*/
200static void restore_state(struct driver_data *drv_data) 214static void bfin_spi_restore_state(struct driver_data *drv_data)
201{ 215{
202 struct chip_data *chip = drv_data->cur_chip; 216 struct chip_data *chip = drv_data->cur_chip;
203 217
@@ -211,294 +225,256 @@ static void restore_state(struct driver_data *drv_data)
211 write_BAUD(drv_data, chip->baud); 225 write_BAUD(drv_data, chip->baud);
212 226
213 bfin_spi_enable(drv_data); 227 bfin_spi_enable(drv_data);
214 cs_active(drv_data, chip); 228 bfin_spi_cs_active(drv_data, chip);
215} 229}
216 230
217/* used to kick off transfer in rx mode */ 231/* used to kick off transfer in rx mode and read unwanted RX data */
218static unsigned short dummy_read(struct driver_data *drv_data) 232static inline void bfin_spi_dummy_read(struct driver_data *drv_data)
219{ 233{
220 unsigned short tmp; 234 (void) read_RDBR(drv_data);
221 tmp = read_RDBR(drv_data);
222 return tmp;
223} 235}
224 236
225static void null_writer(struct driver_data *drv_data) 237static void bfin_spi_null_writer(struct driver_data *drv_data)
226{ 238{
227 u8 n_bytes = drv_data->n_bytes; 239 u8 n_bytes = drv_data->n_bytes;
240 u16 tx_val = drv_data->cur_chip->idle_tx_val;
241
242 /* clear RXS (we check for RXS inside the loop) */
243 bfin_spi_dummy_read(drv_data);
228 244
229 while (drv_data->tx < drv_data->tx_end) { 245 while (drv_data->tx < drv_data->tx_end) {
230 write_TDBR(drv_data, 0); 246 write_TDBR(drv_data, tx_val);
231 while ((read_STAT(drv_data) & BIT_STAT_TXS))
232 cpu_relax();
233 drv_data->tx += n_bytes; 247 drv_data->tx += n_bytes;
248 /* wait until transfer finished.
249 checking SPIF or TXS may not guarantee transfer completion */
250 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
251 cpu_relax();
252 /* discard RX data and clear RXS */
253 bfin_spi_dummy_read(drv_data);
234 } 254 }
235} 255}
236 256
237static void null_reader(struct driver_data *drv_data) 257static void bfin_spi_null_reader(struct driver_data *drv_data)
238{ 258{
239 u8 n_bytes = drv_data->n_bytes; 259 u8 n_bytes = drv_data->n_bytes;
240 dummy_read(drv_data); 260 u16 tx_val = drv_data->cur_chip->idle_tx_val;
261
262 /* discard old RX data and clear RXS */
263 bfin_spi_dummy_read(drv_data);
241 264
242 while (drv_data->rx < drv_data->rx_end) { 265 while (drv_data->rx < drv_data->rx_end) {
266 write_TDBR(drv_data, tx_val);
267 drv_data->rx += n_bytes;
243 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 268 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
244 cpu_relax(); 269 cpu_relax();
245 dummy_read(drv_data); 270 bfin_spi_dummy_read(drv_data);
246 drv_data->rx += n_bytes;
247 } 271 }
248} 272}
249 273
250static void u8_writer(struct driver_data *drv_data) 274static void bfin_spi_u8_writer(struct driver_data *drv_data)
251{ 275{
252 dev_dbg(&drv_data->pdev->dev, 276 /* clear RXS (we check for RXS inside the loop) */
253 "cr8-s is 0x%x\n", read_STAT(drv_data)); 277 bfin_spi_dummy_read(drv_data);
254 278
255 while (drv_data->tx < drv_data->tx_end) { 279 while (drv_data->tx < drv_data->tx_end) {
256 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 280 write_TDBR(drv_data, (*(u8 *) (drv_data->tx++)));
257 while (read_STAT(drv_data) & BIT_STAT_TXS) 281 /* wait until transfer finished.
282 checking SPIF or TXS may not guarantee transfer completion */
283 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
258 cpu_relax(); 284 cpu_relax();
259 ++drv_data->tx; 285 /* discard RX data and clear RXS */
286 bfin_spi_dummy_read(drv_data);
260 } 287 }
261
262 /* poll for SPI completion before return */
263 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
264 cpu_relax();
265} 288}
266 289
267static void u8_cs_chg_writer(struct driver_data *drv_data) 290static void bfin_spi_u8_cs_chg_writer(struct driver_data *drv_data)
268{ 291{
269 struct chip_data *chip = drv_data->cur_chip; 292 struct chip_data *chip = drv_data->cur_chip;
270 293
271 while (drv_data->tx < drv_data->tx_end) { 294 /* clear RXS (we check for RXS inside the loop) */
272 cs_active(drv_data, chip); 295 bfin_spi_dummy_read(drv_data);
273 296
274 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 297 while (drv_data->tx < drv_data->tx_end) {
275 while (read_STAT(drv_data) & BIT_STAT_TXS) 298 bfin_spi_cs_active(drv_data, chip);
276 cpu_relax(); 299 write_TDBR(drv_data, (*(u8 *) (drv_data->tx++)));
277 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 300 /* make sure transfer finished before deactiving CS */
301 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
278 cpu_relax(); 302 cpu_relax();
279 303 bfin_spi_dummy_read(drv_data);
280 cs_deactive(drv_data, chip); 304 bfin_spi_cs_deactive(drv_data, chip);
281
282 ++drv_data->tx;
283 } 305 }
284} 306}
285 307
286static void u8_reader(struct driver_data *drv_data) 308static void bfin_spi_u8_reader(struct driver_data *drv_data)
287{ 309{
288 dev_dbg(&drv_data->pdev->dev, 310 u16 tx_val = drv_data->cur_chip->idle_tx_val;
289 "cr-8 is 0x%x\n", read_STAT(drv_data));
290
291 /* poll for SPI completion before start */
292 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
293 cpu_relax();
294 311
295 /* clear TDBR buffer before read(else it will be shifted out) */ 312 /* discard old RX data and clear RXS */
296 write_TDBR(drv_data, 0xFFFF); 313 bfin_spi_dummy_read(drv_data);
297 314
298 dummy_read(drv_data); 315 while (drv_data->rx < drv_data->rx_end) {
299 316 write_TDBR(drv_data, tx_val);
300 while (drv_data->rx < drv_data->rx_end - 1) {
301 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 317 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
302 cpu_relax(); 318 cpu_relax();
303 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 319 *(u8 *) (drv_data->rx++) = read_RDBR(drv_data);
304 ++drv_data->rx;
305 } 320 }
306
307 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
308 cpu_relax();
309 *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
310 ++drv_data->rx;
311} 321}
312 322
313static void u8_cs_chg_reader(struct driver_data *drv_data) 323static void bfin_spi_u8_cs_chg_reader(struct driver_data *drv_data)
314{ 324{
315 struct chip_data *chip = drv_data->cur_chip; 325 struct chip_data *chip = drv_data->cur_chip;
326 u16 tx_val = chip->idle_tx_val;
316 327
317 while (drv_data->rx < drv_data->rx_end) { 328 /* discard old RX data and clear RXS */
318 cs_active(drv_data, chip); 329 bfin_spi_dummy_read(drv_data);
319 read_RDBR(drv_data); /* kick off */
320 330
331 while (drv_data->rx < drv_data->rx_end) {
332 bfin_spi_cs_active(drv_data, chip);
333 write_TDBR(drv_data, tx_val);
321 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 334 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
322 cpu_relax(); 335 cpu_relax();
323 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 336 *(u8 *) (drv_data->rx++) = read_RDBR(drv_data);
324 cpu_relax(); 337 bfin_spi_cs_deactive(drv_data, chip);
325
326 *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
327 cs_deactive(drv_data, chip);
328
329 ++drv_data->rx;
330 } 338 }
331} 339}
332 340
333static void u8_duplex(struct driver_data *drv_data) 341static void bfin_spi_u8_duplex(struct driver_data *drv_data)
334{ 342{
335 /* in duplex mode, clk is triggered by writing of TDBR */ 343 /* discard old RX data and clear RXS */
344 bfin_spi_dummy_read(drv_data);
345
336 while (drv_data->rx < drv_data->rx_end) { 346 while (drv_data->rx < drv_data->rx_end) {
337 write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); 347 write_TDBR(drv_data, (*(u8 *) (drv_data->tx++)));
338 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
339 cpu_relax();
340 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 348 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
341 cpu_relax(); 349 cpu_relax();
342 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 350 *(u8 *) (drv_data->rx++) = read_RDBR(drv_data);
343 ++drv_data->rx;
344 ++drv_data->tx;
345 } 351 }
346} 352}
347 353
348static void u8_cs_chg_duplex(struct driver_data *drv_data) 354static void bfin_spi_u8_cs_chg_duplex(struct driver_data *drv_data)
349{ 355{
350 struct chip_data *chip = drv_data->cur_chip; 356 struct chip_data *chip = drv_data->cur_chip;
351 357
352 while (drv_data->rx < drv_data->rx_end) { 358 /* discard old RX data and clear RXS */
353 cs_active(drv_data, chip); 359 bfin_spi_dummy_read(drv_data);
354
355 write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
356 360
357 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 361 while (drv_data->rx < drv_data->rx_end) {
358 cpu_relax(); 362 bfin_spi_cs_active(drv_data, chip);
363 write_TDBR(drv_data, (*(u8 *) (drv_data->tx++)));
359 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 364 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
360 cpu_relax(); 365 cpu_relax();
361 *(u8 *) (drv_data->rx) = read_RDBR(drv_data); 366 *(u8 *) (drv_data->rx++) = read_RDBR(drv_data);
362 367 bfin_spi_cs_deactive(drv_data, chip);
363 cs_deactive(drv_data, chip);
364
365 ++drv_data->rx;
366 ++drv_data->tx;
367 } 368 }
368} 369}
369 370
370static void u16_writer(struct driver_data *drv_data) 371static void bfin_spi_u16_writer(struct driver_data *drv_data)
371{ 372{
372 dev_dbg(&drv_data->pdev->dev, 373 /* clear RXS (we check for RXS inside the loop) */
373 "cr16 is 0x%x\n", read_STAT(drv_data)); 374 bfin_spi_dummy_read(drv_data);
374 375
375 while (drv_data->tx < drv_data->tx_end) { 376 while (drv_data->tx < drv_data->tx_end) {
376 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 377 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
377 while ((read_STAT(drv_data) & BIT_STAT_TXS))
378 cpu_relax();
379 drv_data->tx += 2; 378 drv_data->tx += 2;
379 /* wait until transfer finished.
380 checking SPIF or TXS may not guarantee transfer completion */
381 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
382 cpu_relax();
383 /* discard RX data and clear RXS */
384 bfin_spi_dummy_read(drv_data);
380 } 385 }
381
382 /* poll for SPI completion before return */
383 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
384 cpu_relax();
385} 386}
386 387
387static void u16_cs_chg_writer(struct driver_data *drv_data) 388static void bfin_spi_u16_cs_chg_writer(struct driver_data *drv_data)
388{ 389{
389 struct chip_data *chip = drv_data->cur_chip; 390 struct chip_data *chip = drv_data->cur_chip;
390 391
391 while (drv_data->tx < drv_data->tx_end) { 392 /* clear RXS (we check for RXS inside the loop) */
392 cs_active(drv_data, chip); 393 bfin_spi_dummy_read(drv_data);
393 394
395 while (drv_data->tx < drv_data->tx_end) {
396 bfin_spi_cs_active(drv_data, chip);
394 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 397 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
395 while ((read_STAT(drv_data) & BIT_STAT_TXS))
396 cpu_relax();
397 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
398 cpu_relax();
399
400 cs_deactive(drv_data, chip);
401
402 drv_data->tx += 2; 398 drv_data->tx += 2;
399 /* make sure transfer finished before deactiving CS */
400 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
401 cpu_relax();
402 bfin_spi_dummy_read(drv_data);
403 bfin_spi_cs_deactive(drv_data, chip);
403 } 404 }
404} 405}
405 406
406static void u16_reader(struct driver_data *drv_data) 407static void bfin_spi_u16_reader(struct driver_data *drv_data)
407{ 408{
408 dev_dbg(&drv_data->pdev->dev, 409 u16 tx_val = drv_data->cur_chip->idle_tx_val;
409 "cr-16 is 0x%x\n", read_STAT(drv_data));
410
411 /* poll for SPI completion before start */
412 while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
413 cpu_relax();
414
415 /* clear TDBR buffer before read(else it will be shifted out) */
416 write_TDBR(drv_data, 0xFFFF);
417 410
418 dummy_read(drv_data); 411 /* discard old RX data and clear RXS */
412 bfin_spi_dummy_read(drv_data);
419 413
420 while (drv_data->rx < (drv_data->rx_end - 2)) { 414 while (drv_data->rx < drv_data->rx_end) {
415 write_TDBR(drv_data, tx_val);
421 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 416 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
422 cpu_relax(); 417 cpu_relax();
423 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 418 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
424 drv_data->rx += 2; 419 drv_data->rx += 2;
425 } 420 }
426
427 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
428 cpu_relax();
429 *(u16 *) (drv_data->rx) = read_SHAW(drv_data);
430 drv_data->rx += 2;
431} 421}
432 422
433static void u16_cs_chg_reader(struct driver_data *drv_data) 423static void bfin_spi_u16_cs_chg_reader(struct driver_data *drv_data)
434{ 424{
435 struct chip_data *chip = drv_data->cur_chip; 425 struct chip_data *chip = drv_data->cur_chip;
426 u16 tx_val = chip->idle_tx_val;
436 427
437 /* poll for SPI completion before start */ 428 /* discard old RX data and clear RXS */
438 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 429 bfin_spi_dummy_read(drv_data);
439 cpu_relax();
440
441 /* clear TDBR buffer before read(else it will be shifted out) */
442 write_TDBR(drv_data, 0xFFFF);
443
444 cs_active(drv_data, chip);
445 dummy_read(drv_data);
446
447 while (drv_data->rx < drv_data->rx_end - 2) {
448 cs_deactive(drv_data, chip);
449 430
431 while (drv_data->rx < drv_data->rx_end) {
432 bfin_spi_cs_active(drv_data, chip);
433 write_TDBR(drv_data, tx_val);
450 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 434 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
451 cpu_relax(); 435 cpu_relax();
452 cs_active(drv_data, chip);
453 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 436 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
454 drv_data->rx += 2; 437 drv_data->rx += 2;
438 bfin_spi_cs_deactive(drv_data, chip);
455 } 439 }
456 cs_deactive(drv_data, chip);
457
458 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
459 cpu_relax();
460 *(u16 *) (drv_data->rx) = read_SHAW(drv_data);
461 drv_data->rx += 2;
462} 440}
463 441
464static void u16_duplex(struct driver_data *drv_data) 442static void bfin_spi_u16_duplex(struct driver_data *drv_data)
465{ 443{
466 /* in duplex mode, clk is triggered by writing of TDBR */ 444 /* discard old RX data and clear RXS */
467 while (drv_data->tx < drv_data->tx_end) { 445 bfin_spi_dummy_read(drv_data);
446
447 while (drv_data->rx < drv_data->rx_end) {
468 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 448 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
469 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 449 drv_data->tx += 2;
470 cpu_relax();
471 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 450 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
472 cpu_relax(); 451 cpu_relax();
473 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 452 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
474 drv_data->rx += 2; 453 drv_data->rx += 2;
475 drv_data->tx += 2;
476 } 454 }
477} 455}
478 456
479static void u16_cs_chg_duplex(struct driver_data *drv_data) 457static void bfin_spi_u16_cs_chg_duplex(struct driver_data *drv_data)
480{ 458{
481 struct chip_data *chip = drv_data->cur_chip; 459 struct chip_data *chip = drv_data->cur_chip;
482 460
483 while (drv_data->tx < drv_data->tx_end) { 461 /* discard old RX data and clear RXS */
484 cs_active(drv_data, chip); 462 bfin_spi_dummy_read(drv_data);
485 463
464 while (drv_data->rx < drv_data->rx_end) {
465 bfin_spi_cs_active(drv_data, chip);
486 write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); 466 write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
487 while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) 467 drv_data->tx += 2;
488 cpu_relax();
489 while (!(read_STAT(drv_data) & BIT_STAT_RXS)) 468 while (!(read_STAT(drv_data) & BIT_STAT_RXS))
490 cpu_relax(); 469 cpu_relax();
491 *(u16 *) (drv_data->rx) = read_RDBR(drv_data); 470 *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
492
493 cs_deactive(drv_data, chip);
494
495 drv_data->rx += 2; 471 drv_data->rx += 2;
496 drv_data->tx += 2; 472 bfin_spi_cs_deactive(drv_data, chip);
497 } 473 }
498} 474}
499 475
500/* test if ther is more transfer to be done */ 476/* test if ther is more transfer to be done */
501static void *next_transfer(struct driver_data *drv_data) 477static void *bfin_spi_next_transfer(struct driver_data *drv_data)
502{ 478{
503 struct spi_message *msg = drv_data->cur_msg; 479 struct spi_message *msg = drv_data->cur_msg;
504 struct spi_transfer *trans = drv_data->cur_transfer; 480 struct spi_transfer *trans = drv_data->cur_transfer;
@@ -517,7 +493,7 @@ static void *next_transfer(struct driver_data *drv_data)
517 * caller already set message->status; 493 * caller already set message->status;
518 * dma and pio irqs are blocked give finished message back 494 * dma and pio irqs are blocked give finished message back
519 */ 495 */
520static void giveback(struct driver_data *drv_data) 496static void bfin_spi_giveback(struct driver_data *drv_data)
521{ 497{
522 struct chip_data *chip = drv_data->cur_chip; 498 struct chip_data *chip = drv_data->cur_chip;
523 struct spi_transfer *last_transfer; 499 struct spi_transfer *last_transfer;
@@ -537,26 +513,30 @@ static void giveback(struct driver_data *drv_data)
537 513
538 msg->state = NULL; 514 msg->state = NULL;
539 515
540 /* disable chip select signal. And not stop spi in autobuffer mode */
541 if (drv_data->tx_dma != 0xFFFF) {
542 cs_deactive(drv_data, chip);
543 bfin_spi_disable(drv_data);
544 }
545
546 if (!drv_data->cs_change) 516 if (!drv_data->cs_change)
547 cs_deactive(drv_data, chip); 517 bfin_spi_cs_deactive(drv_data, chip);
518
519 /* Not stop spi in autobuffer mode */
520 if (drv_data->tx_dma != 0xFFFF)
521 bfin_spi_disable(drv_data);
548 522
549 if (msg->complete) 523 if (msg->complete)
550 msg->complete(msg->context); 524 msg->complete(msg->context);
551} 525}
552 526
553static irqreturn_t dma_irq_handler(int irq, void *dev_id) 527static irqreturn_t bfin_spi_dma_irq_handler(int irq, void *dev_id)
554{ 528{
555 struct driver_data *drv_data = dev_id; 529 struct driver_data *drv_data = dev_id;
556 struct chip_data *chip = drv_data->cur_chip; 530 struct chip_data *chip = drv_data->cur_chip;
557 struct spi_message *msg = drv_data->cur_msg; 531 struct spi_message *msg = drv_data->cur_msg;
532 unsigned long timeout;
533 unsigned short dmastat = get_dma_curr_irqstat(drv_data->dma_channel);
534 u16 spistat = read_STAT(drv_data);
535
536 dev_dbg(&drv_data->pdev->dev,
537 "in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
538 dmastat, spistat);
558 539
559 dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n");
560 clear_dma_irqstat(drv_data->dma_channel); 540 clear_dma_irqstat(drv_data->dma_channel);
561 541
562 /* Wait for DMA to complete */ 542 /* Wait for DMA to complete */
@@ -575,16 +555,30 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
575 cpu_relax(); 555 cpu_relax();
576 } 556 }
577 557
558 dev_dbg(&drv_data->pdev->dev,
559 "in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
560 dmastat, read_STAT(drv_data));
561
562 timeout = jiffies + HZ;
578 while (!(read_STAT(drv_data) & SPIF)) 563 while (!(read_STAT(drv_data) & SPIF))
579 cpu_relax(); 564 if (!time_before(jiffies, timeout)) {
565 dev_warn(&drv_data->pdev->dev, "timeout waiting for SPIF");
566 break;
567 } else
568 cpu_relax();
580 569
581 msg->actual_length += drv_data->len_in_bytes; 570 if ((dmastat & DMA_ERR) && (spistat & RBSY)) {
571 msg->state = ERROR_STATE;
572 dev_err(&drv_data->pdev->dev, "dma receive: fifo/buffer overflow\n");
573 } else {
574 msg->actual_length += drv_data->len_in_bytes;
582 575
583 if (drv_data->cs_change) 576 if (drv_data->cs_change)
584 cs_deactive(drv_data, chip); 577 bfin_spi_cs_deactive(drv_data, chip);
585 578
586 /* Move to next transfer */ 579 /* Move to next transfer */
587 msg->state = next_transfer(drv_data); 580 msg->state = bfin_spi_next_transfer(drv_data);
581 }
588 582
589 /* Schedule transfer tasklet */ 583 /* Schedule transfer tasklet */
590 tasklet_schedule(&drv_data->pump_transfers); 584 tasklet_schedule(&drv_data->pump_transfers);
@@ -598,7 +592,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
598 return IRQ_HANDLED; 592 return IRQ_HANDLED;
599} 593}
600 594
601static void pump_transfers(unsigned long data) 595static void bfin_spi_pump_transfers(unsigned long data)
602{ 596{
603 struct driver_data *drv_data = (struct driver_data *)data; 597 struct driver_data *drv_data = (struct driver_data *)data;
604 struct spi_message *message = NULL; 598 struct spi_message *message = NULL;
@@ -621,20 +615,23 @@ static void pump_transfers(unsigned long data)
621 615
622 /* Handle for abort */ 616 /* Handle for abort */
623 if (message->state == ERROR_STATE) { 617 if (message->state == ERROR_STATE) {
618 dev_dbg(&drv_data->pdev->dev, "transfer: we've hit an error\n");
624 message->status = -EIO; 619 message->status = -EIO;
625 giveback(drv_data); 620 bfin_spi_giveback(drv_data);
626 return; 621 return;
627 } 622 }
628 623
629 /* Handle end of message */ 624 /* Handle end of message */
630 if (message->state == DONE_STATE) { 625 if (message->state == DONE_STATE) {
626 dev_dbg(&drv_data->pdev->dev, "transfer: all done!\n");
631 message->status = 0; 627 message->status = 0;
632 giveback(drv_data); 628 bfin_spi_giveback(drv_data);
633 return; 629 return;
634 } 630 }
635 631
636 /* Delay if requested at end of transfer */ 632 /* Delay if requested at end of transfer */
637 if (message->state == RUNNING_STATE) { 633 if (message->state == RUNNING_STATE) {
634 dev_dbg(&drv_data->pdev->dev, "transfer: still running ...\n");
638 previous = list_entry(transfer->transfer_list.prev, 635 previous = list_entry(transfer->transfer_list.prev,
639 struct spi_transfer, transfer_list); 636 struct spi_transfer, transfer_list);
640 if (previous->delay_usecs) 637 if (previous->delay_usecs)
@@ -642,13 +639,20 @@ static void pump_transfers(unsigned long data)
642 } 639 }
643 640
644 /* Setup the transfer state based on the type of transfer */ 641 /* Setup the transfer state based on the type of transfer */
645 if (flush(drv_data) == 0) { 642 if (bfin_spi_flush(drv_data) == 0) {
646 dev_err(&drv_data->pdev->dev, "pump_transfers: flush failed\n"); 643 dev_err(&drv_data->pdev->dev, "pump_transfers: flush failed\n");
647 message->status = -EIO; 644 message->status = -EIO;
648 giveback(drv_data); 645 bfin_spi_giveback(drv_data);
649 return; 646 return;
650 } 647 }
651 648
649 if (transfer->len == 0) {
650 /* Move to next transfer of this msg */
651 message->state = bfin_spi_next_transfer(drv_data);
652 /* Schedule next transfer tasklet */
653 tasklet_schedule(&drv_data->pump_transfers);
654 }
655
652 if (transfer->tx_buf != NULL) { 656 if (transfer->tx_buf != NULL) {
653 drv_data->tx = (void *)transfer->tx_buf; 657 drv_data->tx = (void *)transfer->tx_buf;
654 drv_data->tx_end = drv_data->tx + transfer->len; 658 drv_data->tx_end = drv_data->tx + transfer->len;
@@ -679,31 +683,31 @@ static void pump_transfers(unsigned long data)
679 drv_data->n_bytes = 1; 683 drv_data->n_bytes = 1;
680 width = CFG_SPI_WORDSIZE8; 684 width = CFG_SPI_WORDSIZE8;
681 drv_data->read = chip->cs_change_per_word ? 685 drv_data->read = chip->cs_change_per_word ?
682 u8_cs_chg_reader : u8_reader; 686 bfin_spi_u8_cs_chg_reader : bfin_spi_u8_reader;
683 drv_data->write = chip->cs_change_per_word ? 687 drv_data->write = chip->cs_change_per_word ?
684 u8_cs_chg_writer : u8_writer; 688 bfin_spi_u8_cs_chg_writer : bfin_spi_u8_writer;
685 drv_data->duplex = chip->cs_change_per_word ? 689 drv_data->duplex = chip->cs_change_per_word ?
686 u8_cs_chg_duplex : u8_duplex; 690 bfin_spi_u8_cs_chg_duplex : bfin_spi_u8_duplex;
687 break; 691 break;
688 692
689 case 16: 693 case 16:
690 drv_data->n_bytes = 2; 694 drv_data->n_bytes = 2;
691 width = CFG_SPI_WORDSIZE16; 695 width = CFG_SPI_WORDSIZE16;
692 drv_data->read = chip->cs_change_per_word ? 696 drv_data->read = chip->cs_change_per_word ?
693 u16_cs_chg_reader : u16_reader; 697 bfin_spi_u16_cs_chg_reader : bfin_spi_u16_reader;
694 drv_data->write = chip->cs_change_per_word ? 698 drv_data->write = chip->cs_change_per_word ?
695 u16_cs_chg_writer : u16_writer; 699 bfin_spi_u16_cs_chg_writer : bfin_spi_u16_writer;
696 drv_data->duplex = chip->cs_change_per_word ? 700 drv_data->duplex = chip->cs_change_per_word ?
697 u16_cs_chg_duplex : u16_duplex; 701 bfin_spi_u16_cs_chg_duplex : bfin_spi_u16_duplex;
698 break; 702 break;
699 703
700 default: 704 default:
701 /* No change, the same as default setting */ 705 /* No change, the same as default setting */
702 drv_data->n_bytes = chip->n_bytes; 706 drv_data->n_bytes = chip->n_bytes;
703 width = chip->width; 707 width = chip->width;
704 drv_data->write = drv_data->tx ? chip->write : null_writer; 708 drv_data->write = drv_data->tx ? chip->write : bfin_spi_null_writer;
705 drv_data->read = drv_data->rx ? chip->read : null_reader; 709 drv_data->read = drv_data->rx ? chip->read : bfin_spi_null_reader;
706 drv_data->duplex = chip->duplex ? chip->duplex : null_writer; 710 drv_data->duplex = chip->duplex ? chip->duplex : bfin_spi_null_writer;
707 break; 711 break;
708 } 712 }
709 cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD)); 713 cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD));
@@ -717,7 +721,7 @@ static void pump_transfers(unsigned long data)
717 } 721 }
718 dev_dbg(&drv_data->pdev->dev, 722 dev_dbg(&drv_data->pdev->dev,
719 "transfer: drv_data->write is %p, chip->write is %p, null_wr is %p\n", 723 "transfer: drv_data->write is %p, chip->write is %p, null_wr is %p\n",
720 drv_data->write, chip->write, null_writer); 724 drv_data->write, chip->write, bfin_spi_null_writer);
721 725
722 /* speed and width has been set on per message */ 726 /* speed and width has been set on per message */
723 message->state = RUNNING_STATE; 727 message->state = RUNNING_STATE;
@@ -731,32 +735,34 @@ static void pump_transfers(unsigned long data)
731 735
732 write_STAT(drv_data, BIT_STAT_CLR); 736 write_STAT(drv_data, BIT_STAT_CLR);
733 cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD)); 737 cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD));
734 cs_active(drv_data, chip); 738 if (drv_data->cs_change)
739 bfin_spi_cs_active(drv_data, chip);
735 740
736 dev_dbg(&drv_data->pdev->dev, 741 dev_dbg(&drv_data->pdev->dev,
737 "now pumping a transfer: width is %d, len is %d\n", 742 "now pumping a transfer: width is %d, len is %d\n",
738 width, transfer->len); 743 width, transfer->len);
739 744
740 /* 745 /*
741 * Try to map dma buffer and do a dma transfer if 746 * Try to map dma buffer and do a dma transfer. If successful use,
742 * successful use different way to r/w according to 747 * different way to r/w according to the enable_dma settings and if
743 * drv_data->cur_chip->enable_dma 748 * we are not doing a full duplex transfer (since the hardware does
749 * not support full duplex DMA transfers).
744 */ 750 */
745 if (!full_duplex && drv_data->cur_chip->enable_dma 751 if (!full_duplex && drv_data->cur_chip->enable_dma
746 && drv_data->len > 6) { 752 && drv_data->len > 6) {
747 753
754 unsigned long dma_start_addr, flags;
755
748 disable_dma(drv_data->dma_channel); 756 disable_dma(drv_data->dma_channel);
749 clear_dma_irqstat(drv_data->dma_channel); 757 clear_dma_irqstat(drv_data->dma_channel);
750 bfin_spi_disable(drv_data);
751 758
752 /* config dma channel */ 759 /* config dma channel */
753 dev_dbg(&drv_data->pdev->dev, "doing dma transfer\n"); 760 dev_dbg(&drv_data->pdev->dev, "doing dma transfer\n");
761 set_dma_x_count(drv_data->dma_channel, drv_data->len);
754 if (width == CFG_SPI_WORDSIZE16) { 762 if (width == CFG_SPI_WORDSIZE16) {
755 set_dma_x_count(drv_data->dma_channel, drv_data->len);
756 set_dma_x_modify(drv_data->dma_channel, 2); 763 set_dma_x_modify(drv_data->dma_channel, 2);
757 dma_width = WDSIZE_16; 764 dma_width = WDSIZE_16;
758 } else { 765 } else {
759 set_dma_x_count(drv_data->dma_channel, drv_data->len);
760 set_dma_x_modify(drv_data->dma_channel, 1); 766 set_dma_x_modify(drv_data->dma_channel, 1);
761 dma_width = WDSIZE_8; 767 dma_width = WDSIZE_8;
762 } 768 }
@@ -779,58 +785,75 @@ static void pump_transfers(unsigned long data)
779 enable_dma(drv_data->dma_channel); 785 enable_dma(drv_data->dma_channel);
780 786
781 /* start SPI transfer */ 787 /* start SPI transfer */
782 write_CTRL(drv_data, 788 write_CTRL(drv_data, cr | BIT_CTL_TIMOD_DMA_TX);
783 (cr | CFG_SPI_DMAWRITE | BIT_CTL_ENABLE));
784 789
785 /* just return here, there can only be one transfer 790 /* just return here, there can only be one transfer
786 * in this mode 791 * in this mode
787 */ 792 */
788 message->status = 0; 793 message->status = 0;
789 giveback(drv_data); 794 bfin_spi_giveback(drv_data);
790 return; 795 return;
791 } 796 }
792 797
793 /* In dma mode, rx or tx must be NULL in one transfer */ 798 /* In dma mode, rx or tx must be NULL in one transfer */
799 dma_config = (RESTART | dma_width | DI_EN);
794 if (drv_data->rx != NULL) { 800 if (drv_data->rx != NULL) {
795 /* set transfer mode, and enable SPI */ 801 /* set transfer mode, and enable SPI */
796 dev_dbg(&drv_data->pdev->dev, "doing DMA in.\n"); 802 dev_dbg(&drv_data->pdev->dev, "doing DMA in to %p (size %zx)\n",
803 drv_data->rx, drv_data->len_in_bytes);
797 804
798 /* clear tx reg soformer data is not shifted out */ 805 /* invalidate caches, if needed */
799 write_TDBR(drv_data, 0xFFFF); 806 if (bfin_addr_dcachable((unsigned long) drv_data->rx))
807 invalidate_dcache_range((unsigned long) drv_data->rx,
808 (unsigned long) (drv_data->rx +
809 drv_data->len_in_bytes));
800 810
801 set_dma_x_count(drv_data->dma_channel, drv_data->len); 811 dma_config |= WNR;
802 812 dma_start_addr = (unsigned long)drv_data->rx;
803 /* start dma */ 813 cr |= BIT_CTL_TIMOD_DMA_RX | BIT_CTL_SENDOPT;
804 dma_enable_irq(drv_data->dma_channel);
805 dma_config = (WNR | RESTART | dma_width | DI_EN);
806 set_dma_config(drv_data->dma_channel, dma_config);
807 set_dma_start_addr(drv_data->dma_channel,
808 (unsigned long)drv_data->rx);
809 enable_dma(drv_data->dma_channel);
810
811 /* start SPI transfer */
812 write_CTRL(drv_data,
813 (cr | CFG_SPI_DMAREAD | BIT_CTL_ENABLE));
814 814
815 } else if (drv_data->tx != NULL) { 815 } else if (drv_data->tx != NULL) {
816 dev_dbg(&drv_data->pdev->dev, "doing DMA out.\n"); 816 dev_dbg(&drv_data->pdev->dev, "doing DMA out.\n");
817 817
818 /* start dma */ 818 /* flush caches, if needed */
819 dma_enable_irq(drv_data->dma_channel); 819 if (bfin_addr_dcachable((unsigned long) drv_data->tx))
820 dma_config = (RESTART | dma_width | DI_EN); 820 flush_dcache_range((unsigned long) drv_data->tx,
821 set_dma_config(drv_data->dma_channel, dma_config); 821 (unsigned long) (drv_data->tx +
822 set_dma_start_addr(drv_data->dma_channel, 822 drv_data->len_in_bytes));
823 (unsigned long)drv_data->tx); 823
824 enable_dma(drv_data->dma_channel); 824 dma_start_addr = (unsigned long)drv_data->tx;
825 cr |= BIT_CTL_TIMOD_DMA_TX;
826
827 } else
828 BUG();
829
830 /* oh man, here there be monsters ... and i dont mean the
831 * fluffy cute ones from pixar, i mean the kind that'll eat
832 * your data, kick your dog, and love it all. do *not* try
833 * and change these lines unless you (1) heavily test DMA
834 * with SPI flashes on a loaded system (e.g. ping floods),
835 * (2) know just how broken the DMA engine interaction with
836 * the SPI peripheral is, and (3) have someone else to blame
837 * when you screw it all up anyways.
838 */
839 set_dma_start_addr(drv_data->dma_channel, dma_start_addr);
840 set_dma_config(drv_data->dma_channel, dma_config);
841 local_irq_save(flags);
842 SSYNC();
843 write_CTRL(drv_data, cr);
844 enable_dma(drv_data->dma_channel);
845 dma_enable_irq(drv_data->dma_channel);
846 local_irq_restore(flags);
825 847
826 /* start SPI transfer */
827 write_CTRL(drv_data,
828 (cr | CFG_SPI_DMAWRITE | BIT_CTL_ENABLE));
829 }
830 } else { 848 } else {
831 /* IO mode write then read */ 849 /* IO mode write then read */
832 dev_dbg(&drv_data->pdev->dev, "doing IO transfer\n"); 850 dev_dbg(&drv_data->pdev->dev, "doing IO transfer\n");
833 851
852 /* we always use SPI_WRITE mode. SPI_READ mode
853 seems to have problems with setting up the
854 output value in TDBR prior to the transfer. */
855 write_CTRL(drv_data, (cr | CFG_SPI_WRITE));
856
834 if (full_duplex) { 857 if (full_duplex) {
835 /* full duplex mode */ 858 /* full duplex mode */
836 BUG_ON((drv_data->tx_end - drv_data->tx) != 859 BUG_ON((drv_data->tx_end - drv_data->tx) !=
@@ -838,9 +861,6 @@ static void pump_transfers(unsigned long data)
838 dev_dbg(&drv_data->pdev->dev, 861 dev_dbg(&drv_data->pdev->dev,
839 "IO duplex: cr is 0x%x\n", cr); 862 "IO duplex: cr is 0x%x\n", cr);
840 863
841 /* set SPI transfer mode */
842 write_CTRL(drv_data, (cr | CFG_SPI_WRITE));
843
844 drv_data->duplex(drv_data); 864 drv_data->duplex(drv_data);
845 865
846 if (drv_data->tx != drv_data->tx_end) 866 if (drv_data->tx != drv_data->tx_end)
@@ -850,9 +870,6 @@ static void pump_transfers(unsigned long data)
850 dev_dbg(&drv_data->pdev->dev, 870 dev_dbg(&drv_data->pdev->dev,
851 "IO write: cr is 0x%x\n", cr); 871 "IO write: cr is 0x%x\n", cr);
852 872
853 /* set SPI transfer mode */
854 write_CTRL(drv_data, (cr | CFG_SPI_WRITE));
855
856 drv_data->write(drv_data); 873 drv_data->write(drv_data);
857 874
858 if (drv_data->tx != drv_data->tx_end) 875 if (drv_data->tx != drv_data->tx_end)
@@ -862,9 +879,6 @@ static void pump_transfers(unsigned long data)
862 dev_dbg(&drv_data->pdev->dev, 879 dev_dbg(&drv_data->pdev->dev,
863 "IO read: cr is 0x%x\n", cr); 880 "IO read: cr is 0x%x\n", cr);
864 881
865 /* set SPI transfer mode */
866 write_CTRL(drv_data, (cr | CFG_SPI_READ));
867
868 drv_data->read(drv_data); 882 drv_data->read(drv_data);
869 if (drv_data->rx != drv_data->rx_end) 883 if (drv_data->rx != drv_data->rx_end)
870 tranf_success = 0; 884 tranf_success = 0;
@@ -876,20 +890,19 @@ static void pump_transfers(unsigned long data)
876 message->state = ERROR_STATE; 890 message->state = ERROR_STATE;
877 } else { 891 } else {
878 /* Update total byte transfered */ 892 /* Update total byte transfered */
879 message->actual_length += drv_data->len; 893 message->actual_length += drv_data->len_in_bytes;
880
881 /* Move to next transfer of this msg */ 894 /* Move to next transfer of this msg */
882 message->state = next_transfer(drv_data); 895 message->state = bfin_spi_next_transfer(drv_data);
896 if (drv_data->cs_change)
897 bfin_spi_cs_deactive(drv_data, chip);
883 } 898 }
884
885 /* Schedule next transfer tasklet */ 899 /* Schedule next transfer tasklet */
886 tasklet_schedule(&drv_data->pump_transfers); 900 tasklet_schedule(&drv_data->pump_transfers);
887
888 } 901 }
889} 902}
890 903
891/* pop a msg from queue and kick off real transfer */ 904/* pop a msg from queue and kick off real transfer */
892static void pump_messages(struct work_struct *work) 905static void bfin_spi_pump_messages(struct work_struct *work)
893{ 906{
894 struct driver_data *drv_data; 907 struct driver_data *drv_data;
895 unsigned long flags; 908 unsigned long flags;
@@ -917,7 +930,7 @@ static void pump_messages(struct work_struct *work)
917 930
918 /* Setup the SSP using the per chip configuration */ 931 /* Setup the SSP using the per chip configuration */
919 drv_data->cur_chip = spi_get_ctldata(drv_data->cur_msg->spi); 932 drv_data->cur_chip = spi_get_ctldata(drv_data->cur_msg->spi);
920 restore_state(drv_data); 933 bfin_spi_restore_state(drv_data);
921 934
922 list_del_init(&drv_data->cur_msg->queue); 935 list_del_init(&drv_data->cur_msg->queue);
923 936
@@ -946,7 +959,7 @@ static void pump_messages(struct work_struct *work)
946 * got a msg to transfer, queue it in drv_data->queue. 959 * got a msg to transfer, queue it in drv_data->queue.
947 * And kick off message pumper 960 * And kick off message pumper
948 */ 961 */
949static int transfer(struct spi_device *spi, struct spi_message *msg) 962static int bfin_spi_transfer(struct spi_device *spi, struct spi_message *msg)
950{ 963{
951 struct driver_data *drv_data = spi_master_get_devdata(spi->master); 964 struct driver_data *drv_data = spi_master_get_devdata(spi->master);
952 unsigned long flags; 965 unsigned long flags;
@@ -975,7 +988,7 @@ static int transfer(struct spi_device *spi, struct spi_message *msg)
975 988
976#define MAX_SPI_SSEL 7 989#define MAX_SPI_SSEL 7
977 990
978static u16 ssel[3][MAX_SPI_SSEL] = { 991static u16 ssel[][MAX_SPI_SSEL] = {
979 {P_SPI0_SSEL1, P_SPI0_SSEL2, P_SPI0_SSEL3, 992 {P_SPI0_SSEL1, P_SPI0_SSEL2, P_SPI0_SSEL3,
980 P_SPI0_SSEL4, P_SPI0_SSEL5, 993 P_SPI0_SSEL4, P_SPI0_SSEL5,
981 P_SPI0_SSEL6, P_SPI0_SSEL7}, 994 P_SPI0_SSEL6, P_SPI0_SSEL7},
@@ -990,12 +1003,12 @@ static u16 ssel[3][MAX_SPI_SSEL] = {
990}; 1003};
991 1004
992/* first setup for new devices */ 1005/* first setup for new devices */
993static int setup(struct spi_device *spi) 1006static int bfin_spi_setup(struct spi_device *spi)
994{ 1007{
995 struct bfin5xx_spi_chip *chip_info = NULL; 1008 struct bfin5xx_spi_chip *chip_info = NULL;
996 struct chip_data *chip; 1009 struct chip_data *chip;
997 struct driver_data *drv_data = spi_master_get_devdata(spi->master); 1010 struct driver_data *drv_data = spi_master_get_devdata(spi->master);
998 u8 spi_flg; 1011 int ret;
999 1012
1000 /* Abort device setup if requested features are not supported */ 1013 /* Abort device setup if requested features are not supported */
1001 if (spi->mode & ~(SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST)) { 1014 if (spi->mode & ~(SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST)) {
@@ -1041,6 +1054,8 @@ static int setup(struct spi_device *spi)
1041 chip->bits_per_word = chip_info->bits_per_word; 1054 chip->bits_per_word = chip_info->bits_per_word;
1042 chip->cs_change_per_word = chip_info->cs_change_per_word; 1055 chip->cs_change_per_word = chip_info->cs_change_per_word;
1043 chip->cs_chg_udelay = chip_info->cs_chg_udelay; 1056 chip->cs_chg_udelay = chip_info->cs_chg_udelay;
1057 chip->cs_gpio = chip_info->cs_gpio;
1058 chip->idle_tx_val = chip_info->idle_tx_val;
1044 } 1059 }
1045 1060
1046 /* translate common spi framework into our register */ 1061 /* translate common spi framework into our register */
@@ -1059,13 +1074,13 @@ static int setup(struct spi_device *spi)
1059 */ 1074 */
1060 if (chip->enable_dma && !drv_data->dma_requested) { 1075 if (chip->enable_dma && !drv_data->dma_requested) {
1061 /* register dma irq handler */ 1076 /* register dma irq handler */
1062 if (request_dma(drv_data->dma_channel, "BF53x_SPI_DMA") < 0) { 1077 if (request_dma(drv_data->dma_channel, "BFIN_SPI_DMA") < 0) {
1063 dev_dbg(&spi->dev, 1078 dev_dbg(&spi->dev,
1064 "Unable to request BlackFin SPI DMA channel\n"); 1079 "Unable to request BlackFin SPI DMA channel\n");
1065 return -ENODEV; 1080 return -ENODEV;
1066 } 1081 }
1067 if (set_dma_callback(drv_data->dma_channel, 1082 if (set_dma_callback(drv_data->dma_channel,
1068 (void *)dma_irq_handler, drv_data) < 0) { 1083 bfin_spi_dma_irq_handler, drv_data) < 0) {
1069 dev_dbg(&spi->dev, "Unable to set dma callback\n"); 1084 dev_dbg(&spi->dev, "Unable to set dma callback\n");
1070 return -EPERM; 1085 return -EPERM;
1071 } 1086 }
@@ -1078,37 +1093,47 @@ static int setup(struct spi_device *spi)
1078 * SPI_BAUD, not the real baudrate 1093 * SPI_BAUD, not the real baudrate
1079 */ 1094 */
1080 chip->baud = hz_to_spi_baud(spi->max_speed_hz); 1095 chip->baud = hz_to_spi_baud(spi->max_speed_hz);
1081 spi_flg = ~(1 << (spi->chip_select)); 1096 chip->flag = 1 << (spi->chip_select);
1082 chip->flag = ((u16) spi_flg << 8) | (1 << (spi->chip_select));
1083 chip->chip_select_num = spi->chip_select; 1097 chip->chip_select_num = spi->chip_select;
1084 1098
1099 if (chip->chip_select_num == 0) {
1100 ret = gpio_request(chip->cs_gpio, spi->modalias);
1101 if (ret) {
1102 if (drv_data->dma_requested)
1103 free_dma(drv_data->dma_channel);
1104 return ret;
1105 }
1106 gpio_direction_output(chip->cs_gpio, 1);
1107 }
1108
1085 switch (chip->bits_per_word) { 1109 switch (chip->bits_per_word) {
1086 case 8: 1110 case 8:
1087 chip->n_bytes = 1; 1111 chip->n_bytes = 1;
1088 chip->width = CFG_SPI_WORDSIZE8; 1112 chip->width = CFG_SPI_WORDSIZE8;
1089 chip->read = chip->cs_change_per_word ? 1113 chip->read = chip->cs_change_per_word ?
1090 u8_cs_chg_reader : u8_reader; 1114 bfin_spi_u8_cs_chg_reader : bfin_spi_u8_reader;
1091 chip->write = chip->cs_change_per_word ? 1115 chip->write = chip->cs_change_per_word ?
1092 u8_cs_chg_writer : u8_writer; 1116 bfin_spi_u8_cs_chg_writer : bfin_spi_u8_writer;
1093 chip->duplex = chip->cs_change_per_word ? 1117 chip->duplex = chip->cs_change_per_word ?
1094 u8_cs_chg_duplex : u8_duplex; 1118 bfin_spi_u8_cs_chg_duplex : bfin_spi_u8_duplex;
1095 break; 1119 break;
1096 1120
1097 case 16: 1121 case 16:
1098 chip->n_bytes = 2; 1122 chip->n_bytes = 2;
1099 chip->width = CFG_SPI_WORDSIZE16; 1123 chip->width = CFG_SPI_WORDSIZE16;
1100 chip->read = chip->cs_change_per_word ? 1124 chip->read = chip->cs_change_per_word ?
1101 u16_cs_chg_reader : u16_reader; 1125 bfin_spi_u16_cs_chg_reader : bfin_spi_u16_reader;
1102 chip->write = chip->cs_change_per_word ? 1126 chip->write = chip->cs_change_per_word ?
1103 u16_cs_chg_writer : u16_writer; 1127 bfin_spi_u16_cs_chg_writer : bfin_spi_u16_writer;
1104 chip->duplex = chip->cs_change_per_word ? 1128 chip->duplex = chip->cs_change_per_word ?
1105 u16_cs_chg_duplex : u16_duplex; 1129 bfin_spi_u16_cs_chg_duplex : bfin_spi_u16_duplex;
1106 break; 1130 break;
1107 1131
1108 default: 1132 default:
1109 dev_err(&spi->dev, "%d bits_per_word is not supported\n", 1133 dev_err(&spi->dev, "%d bits_per_word is not supported\n",
1110 chip->bits_per_word); 1134 chip->bits_per_word);
1111 kfree(chip); 1135 if (chip_info)
1136 kfree(chip);
1112 return -ENODEV; 1137 return -ENODEV;
1113 } 1138 }
1114 1139
@@ -1125,7 +1150,7 @@ static int setup(struct spi_device *spi)
1125 peripheral_request(ssel[spi->master->bus_num] 1150 peripheral_request(ssel[spi->master->bus_num]
1126 [chip->chip_select_num-1], spi->modalias); 1151 [chip->chip_select_num-1], spi->modalias);
1127 1152
1128 cs_deactive(drv_data, chip); 1153 bfin_spi_cs_deactive(drv_data, chip);
1129 1154
1130 return 0; 1155 return 0;
1131} 1156}
@@ -1134,19 +1159,25 @@ static int setup(struct spi_device *spi)
1134 * callback for spi framework. 1159 * callback for spi framework.
1135 * clean driver specific data 1160 * clean driver specific data
1136 */ 1161 */
1137static void cleanup(struct spi_device *spi) 1162static void bfin_spi_cleanup(struct spi_device *spi)
1138{ 1163{
1139 struct chip_data *chip = spi_get_ctldata(spi); 1164 struct chip_data *chip = spi_get_ctldata(spi);
1140 1165
1166 if (!chip)
1167 return;
1168
1141 if ((chip->chip_select_num > 0) 1169 if ((chip->chip_select_num > 0)
1142 && (chip->chip_select_num <= spi->master->num_chipselect)) 1170 && (chip->chip_select_num <= spi->master->num_chipselect))
1143 peripheral_free(ssel[spi->master->bus_num] 1171 peripheral_free(ssel[spi->master->bus_num]
1144 [chip->chip_select_num-1]); 1172 [chip->chip_select_num-1]);
1145 1173
1174 if (chip->chip_select_num == 0)
1175 gpio_free(chip->cs_gpio);
1176
1146 kfree(chip); 1177 kfree(chip);
1147} 1178}
1148 1179
1149static inline int init_queue(struct driver_data *drv_data) 1180static inline int bfin_spi_init_queue(struct driver_data *drv_data)
1150{ 1181{
1151 INIT_LIST_HEAD(&drv_data->queue); 1182 INIT_LIST_HEAD(&drv_data->queue);
1152 spin_lock_init(&drv_data->lock); 1183 spin_lock_init(&drv_data->lock);
@@ -1156,10 +1187,10 @@ static inline int init_queue(struct driver_data *drv_data)
1156 1187
1157 /* init transfer tasklet */ 1188 /* init transfer tasklet */
1158 tasklet_init(&drv_data->pump_transfers, 1189 tasklet_init(&drv_data->pump_transfers,
1159 pump_transfers, (unsigned long)drv_data); 1190 bfin_spi_pump_transfers, (unsigned long)drv_data);
1160 1191
1161 /* init messages workqueue */ 1192 /* init messages workqueue */
1162 INIT_WORK(&drv_data->pump_messages, pump_messages); 1193 INIT_WORK(&drv_data->pump_messages, bfin_spi_pump_messages);
1163 drv_data->workqueue = create_singlethread_workqueue( 1194 drv_data->workqueue = create_singlethread_workqueue(
1164 dev_name(drv_data->master->dev.parent)); 1195 dev_name(drv_data->master->dev.parent));
1165 if (drv_data->workqueue == NULL) 1196 if (drv_data->workqueue == NULL)
@@ -1168,7 +1199,7 @@ static inline int init_queue(struct driver_data *drv_data)
1168 return 0; 1199 return 0;
1169} 1200}
1170 1201
1171static inline int start_queue(struct driver_data *drv_data) 1202static inline int bfin_spi_start_queue(struct driver_data *drv_data)
1172{ 1203{
1173 unsigned long flags; 1204 unsigned long flags;
1174 1205
@@ -1190,7 +1221,7 @@ static inline int start_queue(struct driver_data *drv_data)
1190 return 0; 1221 return 0;
1191} 1222}
1192 1223
1193static inline int stop_queue(struct driver_data *drv_data) 1224static inline int bfin_spi_stop_queue(struct driver_data *drv_data)
1194{ 1225{
1195 unsigned long flags; 1226 unsigned long flags;
1196 unsigned limit = 500; 1227 unsigned limit = 500;
@@ -1219,11 +1250,11 @@ static inline int stop_queue(struct driver_data *drv_data)
1219 return status; 1250 return status;
1220} 1251}
1221 1252
1222static inline int destroy_queue(struct driver_data *drv_data) 1253static inline int bfin_spi_destroy_queue(struct driver_data *drv_data)
1223{ 1254{
1224 int status; 1255 int status;
1225 1256
1226 status = stop_queue(drv_data); 1257 status = bfin_spi_stop_queue(drv_data);
1227 if (status != 0) 1258 if (status != 0)
1228 return status; 1259 return status;
1229 1260
@@ -1232,7 +1263,7 @@ static inline int destroy_queue(struct driver_data *drv_data)
1232 return 0; 1263 return 0;
1233} 1264}
1234 1265
1235static int __init bfin5xx_spi_probe(struct platform_device *pdev) 1266static int __init bfin_spi_probe(struct platform_device *pdev)
1236{ 1267{
1237 struct device *dev = &pdev->dev; 1268 struct device *dev = &pdev->dev;
1238 struct bfin5xx_spi_master *platform_info; 1269 struct bfin5xx_spi_master *platform_info;
@@ -1258,9 +1289,9 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
1258 1289
1259 master->bus_num = pdev->id; 1290 master->bus_num = pdev->id;
1260 master->num_chipselect = platform_info->num_chipselect; 1291 master->num_chipselect = platform_info->num_chipselect;
1261 master->cleanup = cleanup; 1292 master->cleanup = bfin_spi_cleanup;
1262 master->setup = setup; 1293 master->setup = bfin_spi_setup;
1263 master->transfer = transfer; 1294 master->transfer = bfin_spi_transfer;
1264 1295
1265 /* Find and map our resources */ 1296 /* Find and map our resources */
1266 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1297 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1285,13 +1316,13 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
1285 } 1316 }
1286 1317
1287 /* Initial and start queue */ 1318 /* Initial and start queue */
1288 status = init_queue(drv_data); 1319 status = bfin_spi_init_queue(drv_data);
1289 if (status != 0) { 1320 if (status != 0) {
1290 dev_err(dev, "problem initializing queue\n"); 1321 dev_err(dev, "problem initializing queue\n");
1291 goto out_error_queue_alloc; 1322 goto out_error_queue_alloc;
1292 } 1323 }
1293 1324
1294 status = start_queue(drv_data); 1325 status = bfin_spi_start_queue(drv_data);
1295 if (status != 0) { 1326 if (status != 0) {
1296 dev_err(dev, "problem starting queue\n"); 1327 dev_err(dev, "problem starting queue\n");
1297 goto out_error_queue_alloc; 1328 goto out_error_queue_alloc;
@@ -1317,7 +1348,7 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
1317 return status; 1348 return status;
1318 1349
1319out_error_queue_alloc: 1350out_error_queue_alloc:
1320 destroy_queue(drv_data); 1351 bfin_spi_destroy_queue(drv_data);
1321out_error_no_dma_ch: 1352out_error_no_dma_ch:
1322 iounmap((void *) drv_data->regs_base); 1353 iounmap((void *) drv_data->regs_base);
1323out_error_ioremap: 1354out_error_ioremap:
@@ -1328,7 +1359,7 @@ out_error_get_res:
1328} 1359}
1329 1360
1330/* stop hardware and remove the driver */ 1361/* stop hardware and remove the driver */
1331static int __devexit bfin5xx_spi_remove(struct platform_device *pdev) 1362static int __devexit bfin_spi_remove(struct platform_device *pdev)
1332{ 1363{
1333 struct driver_data *drv_data = platform_get_drvdata(pdev); 1364 struct driver_data *drv_data = platform_get_drvdata(pdev);
1334 int status = 0; 1365 int status = 0;
@@ -1337,7 +1368,7 @@ static int __devexit bfin5xx_spi_remove(struct platform_device *pdev)
1337 return 0; 1368 return 0;
1338 1369
1339 /* Remove the queue */ 1370 /* Remove the queue */
1340 status = destroy_queue(drv_data); 1371 status = bfin_spi_destroy_queue(drv_data);
1341 if (status != 0) 1372 if (status != 0)
1342 return status; 1373 return status;
1343 1374
@@ -1362,12 +1393,12 @@ static int __devexit bfin5xx_spi_remove(struct platform_device *pdev)
1362} 1393}
1363 1394
1364#ifdef CONFIG_PM 1395#ifdef CONFIG_PM
1365static int bfin5xx_spi_suspend(struct platform_device *pdev, pm_message_t state) 1396static int bfin_spi_suspend(struct platform_device *pdev, pm_message_t state)
1366{ 1397{
1367 struct driver_data *drv_data = platform_get_drvdata(pdev); 1398 struct driver_data *drv_data = platform_get_drvdata(pdev);
1368 int status = 0; 1399 int status = 0;
1369 1400
1370 status = stop_queue(drv_data); 1401 status = bfin_spi_stop_queue(drv_data);
1371 if (status != 0) 1402 if (status != 0)
1372 return status; 1403 return status;
1373 1404
@@ -1377,7 +1408,7 @@ static int bfin5xx_spi_suspend(struct platform_device *pdev, pm_message_t state)
1377 return 0; 1408 return 0;
1378} 1409}
1379 1410
1380static int bfin5xx_spi_resume(struct platform_device *pdev) 1411static int bfin_spi_resume(struct platform_device *pdev)
1381{ 1412{
1382 struct driver_data *drv_data = platform_get_drvdata(pdev); 1413 struct driver_data *drv_data = platform_get_drvdata(pdev);
1383 int status = 0; 1414 int status = 0;
@@ -1386,7 +1417,7 @@ static int bfin5xx_spi_resume(struct platform_device *pdev)
1386 bfin_spi_enable(drv_data); 1417 bfin_spi_enable(drv_data);
1387 1418
1388 /* Start the queue running */ 1419 /* Start the queue running */
1389 status = start_queue(drv_data); 1420 status = bfin_spi_start_queue(drv_data);
1390 if (status != 0) { 1421 if (status != 0) {
1391 dev_err(&pdev->dev, "problem starting queue (%d)\n", status); 1422 dev_err(&pdev->dev, "problem starting queue (%d)\n", status);
1392 return status; 1423 return status;
@@ -1395,29 +1426,29 @@ static int bfin5xx_spi_resume(struct platform_device *pdev)
1395 return 0; 1426 return 0;
1396} 1427}
1397#else 1428#else
1398#define bfin5xx_spi_suspend NULL 1429#define bfin_spi_suspend NULL
1399#define bfin5xx_spi_resume NULL 1430#define bfin_spi_resume NULL
1400#endif /* CONFIG_PM */ 1431#endif /* CONFIG_PM */
1401 1432
1402MODULE_ALIAS("platform:bfin-spi"); 1433MODULE_ALIAS("platform:bfin-spi");
1403static struct platform_driver bfin5xx_spi_driver = { 1434static struct platform_driver bfin_spi_driver = {
1404 .driver = { 1435 .driver = {
1405 .name = DRV_NAME, 1436 .name = DRV_NAME,
1406 .owner = THIS_MODULE, 1437 .owner = THIS_MODULE,
1407 }, 1438 },
1408 .suspend = bfin5xx_spi_suspend, 1439 .suspend = bfin_spi_suspend,
1409 .resume = bfin5xx_spi_resume, 1440 .resume = bfin_spi_resume,
1410 .remove = __devexit_p(bfin5xx_spi_remove), 1441 .remove = __devexit_p(bfin_spi_remove),
1411}; 1442};
1412 1443
1413static int __init bfin5xx_spi_init(void) 1444static int __init bfin_spi_init(void)
1414{ 1445{
1415 return platform_driver_probe(&bfin5xx_spi_driver, bfin5xx_spi_probe); 1446 return platform_driver_probe(&bfin_spi_driver, bfin_spi_probe);
1416} 1447}
1417module_init(bfin5xx_spi_init); 1448module_init(bfin_spi_init);
1418 1449
1419static void __exit bfin5xx_spi_exit(void) 1450static void __exit bfin_spi_exit(void)
1420{ 1451{
1421 platform_driver_unregister(&bfin5xx_spi_driver); 1452 platform_driver_unregister(&bfin_spi_driver);
1422} 1453}
1423module_exit(bfin5xx_spi_exit); 1454module_exit(bfin_spi_exit);
diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c
index 0480d8bb19d3..0671aeef5792 100644
--- a/drivers/spi/spi_imx.c
+++ b/drivers/spi/spi_imx.c
@@ -186,6 +186,7 @@
186#define QUEUE_STOPPED (1) 186#define QUEUE_STOPPED (1)
187 187
188#define IS_DMA_ALIGNED(x) (((u32)(x) & 0x03) == 0) 188#define IS_DMA_ALIGNED(x) (((u32)(x) & 0x03) == 0)
189#define DMA_ALIGNMENT 4
189/*-------------------------------------------------------------------------*/ 190/*-------------------------------------------------------------------------*/
190 191
191 192
@@ -779,7 +780,8 @@ static irqreturn_t interrupt_transfer(struct driver_data *drv_data)
779 780
780 /* Read trailing bytes */ 781 /* Read trailing bytes */
781 limit = loops_per_jiffy << 1; 782 limit = loops_per_jiffy << 1;
782 while ((read(drv_data) == 0) && limit--); 783 while ((read(drv_data) == 0) && --limit)
784 cpu_relax();
783 785
784 if (limit == 0) 786 if (limit == 0)
785 dev_err(&drv_data->pdev->dev, 787 dev_err(&drv_data->pdev->dev,
@@ -1481,6 +1483,7 @@ static int __init spi_imx_probe(struct platform_device *pdev)
1481 1483
1482 master->bus_num = pdev->id; 1484 master->bus_num = pdev->id;
1483 master->num_chipselect = platform_info->num_chipselect; 1485 master->num_chipselect = platform_info->num_chipselect;
1486 master->dma_alignment = DMA_ALIGNMENT;
1484 master->cleanup = cleanup; 1487 master->cleanup = cleanup;
1485 master->setup = setup; 1488 master->setup = setup;
1486 master->transfer = transfer; 1489 master->transfer = transfer;
diff --git a/drivers/staging/agnx/pci.c b/drivers/staging/agnx/pci.c
index 4ff4c1601423..25c0ffd2faa0 100644
--- a/drivers/staging/agnx/pci.c
+++ b/drivers/staging/agnx/pci.c
@@ -477,8 +477,8 @@ static int __devinit agnx_pci_probe(struct pci_dev *pdev,
477 return err; 477 return err;
478 } 478 }
479 479
480 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || 480 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||
481 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 481 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
482 printk(KERN_ERR PFX "No suitable DMA available\n"); 482 printk(KERN_ERR PFX "No suitable DMA available\n");
483 goto err_free_reg; 483 goto err_free_reg;
484 } 484 }
diff --git a/drivers/staging/altpciechdma/altpciechdma.c b/drivers/staging/altpciechdma/altpciechdma.c
index 3e41e0861481..5869e1484a95 100644
--- a/drivers/staging/altpciechdma/altpciechdma.c
+++ b/drivers/staging/altpciechdma/altpciechdma.c
@@ -849,15 +849,15 @@ static int __devinit probe(struct pci_dev *dev, const struct pci_device_id *id)
849#if 1 /* @todo For now, disable 64-bit, because I do not understand the implications (DAC!) */ 849#if 1 /* @todo For now, disable 64-bit, because I do not understand the implications (DAC!) */
850 /* query for DMA transfer */ 850 /* query for DMA transfer */
851 /* @see Documentation/PCI/PCI-DMA-mapping.txt */ 851 /* @see Documentation/PCI/PCI-DMA-mapping.txt */
852 if (!pci_set_dma_mask(dev, DMA_64BIT_MASK)) { 852 if (!pci_set_dma_mask(dev, DMA_BIT_MASK(64))) {
853 pci_set_consistent_dma_mask(dev, DMA_64BIT_MASK); 853 pci_set_consistent_dma_mask(dev, DMA_BIT_MASK(64));
854 /* use 64-bit DMA */ 854 /* use 64-bit DMA */
855 printk(KERN_DEBUG "Using a 64-bit DMA mask.\n"); 855 printk(KERN_DEBUG "Using a 64-bit DMA mask.\n");
856 } else 856 } else
857#endif 857#endif
858 if (!pci_set_dma_mask(dev, DMA_32BIT_MASK)) { 858 if (!pci_set_dma_mask(dev, DMA_BIT_MASK(32))) {
859 printk(KERN_DEBUG "Could not set 64-bit DMA mask.\n"); 859 printk(KERN_DEBUG "Could not set 64-bit DMA mask.\n");
860 pci_set_consistent_dma_mask(dev, DMA_32BIT_MASK); 860 pci_set_consistent_dma_mask(dev, DMA_BIT_MASK(32));
861 /* use 32-bit DMA */ 861 /* use 32-bit DMA */
862 printk(KERN_DEBUG "Using a 32-bit DMA mask.\n"); 862 printk(KERN_DEBUG "Using a 32-bit DMA mask.\n");
863 } else { 863 } else {
diff --git a/drivers/staging/serqt_usb/serqt_usb.c b/drivers/staging/serqt_usb/serqt_usb.c
index 1781510c53fd..234f332fc82f 100644
--- a/drivers/staging/serqt_usb/serqt_usb.c
+++ b/drivers/staging/serqt_usb/serqt_usb.c
@@ -289,7 +289,8 @@ static void serial_unthrottle(struct tty_struct *tty);
289static int serial_break(struct tty_struct *tty, int break_state); 289static int serial_break(struct tty_struct *tty, int break_state);
290static int serial_chars_in_buffer(struct tty_struct *tty); 290static int serial_chars_in_buffer(struct tty_struct *tty);
291 291
292static int qt_open(struct usb_serial_port *port, struct file *filp); 292static int qt_open(struct tty_struct *tty, struct usb_serial_port *port,
293 struct file *filp);
293static int BoxSetPrebufferLevel(struct usb_serial *serial); 294static int BoxSetPrebufferLevel(struct usb_serial *serial);
294 295
295static int BoxSetATC(struct usb_serial *serial, __u16 n_Mode); 296static int BoxSetATC(struct usb_serial *serial, __u16 n_Mode);
@@ -300,24 +301,26 @@ static int BoxSetUart(struct usb_serial *serial, unsigned short Uart_Number,
300static int BoxOPenCloseChannel(struct usb_serial *serial, __u16 Uart_Number, 301static int BoxOPenCloseChannel(struct usb_serial *serial, __u16 Uart_Number,
301 __u16 OpenClose, 302 __u16 OpenClose,
302 struct qt_open_channel_data *pDeviceData); 303 struct qt_open_channel_data *pDeviceData);
303static void qt_close(struct usb_serial_port *port, struct file *filp); 304static void qt_close(struct tty_struct *tty, struct usb_serial_port *port,
305 struct file *filp);
304static int BoxGetRegister(struct usb_serial *serial, unsigned short Uart_Number, 306static int BoxGetRegister(struct usb_serial *serial, unsigned short Uart_Number,
305 unsigned short Register_Num, __u8 *pValue); 307 unsigned short Register_Num, __u8 *pValue);
306static int BoxSetRegister(struct usb_serial *serial, unsigned short Uart_Number, 308static int BoxSetRegister(struct usb_serial *serial, unsigned short Uart_Number,
307 unsigned short Register_Num, unsigned short Value); 309 unsigned short Register_Num, unsigned short Value);
308static void qt_write_bulk_callback(struct urb *urb); 310static void qt_write_bulk_callback(struct urb *urb);
309static int qt_write(struct usb_serial_port *port, int from_user, 311static int qt_write(struct tty_struct *tty, struct usb_serial_port *port,
310 const unsigned char *buf, int count); 312 const unsigned char *buf, int count);
311static void port_softint(struct work_struct *work); 313static void port_softint(struct work_struct *work);
312static int qt_write_room(struct usb_serial_port *port); 314static int qt_write_room(struct usb_serial_port *port);
313static int qt_chars_in_buffer(struct usb_serial_port *port); 315static int qt_chars_in_buffer(struct usb_serial_port *port);
314static int qt_ioctl(struct usb_serial_port *port, struct file *file, 316static int qt_ioctl(struct tty_struct *tty, struct usb_serial_port *port,
315 unsigned int cmd, unsigned long arg); 317 struct file *file, unsigned int cmd, unsigned long arg);
316static void qt_set_termios(struct usb_serial_port *port, 318static void qt_set_termios(struct tty_struct *tty,
319 struct usb_serial_port *port,
317 struct ktermios *old_termios); 320 struct ktermios *old_termios);
318static int BoxSetHW_FlowCtrl(struct usb_serial *serial, unsigned int UartNumber, 321static int BoxSetHW_FlowCtrl(struct usb_serial *serial, unsigned int index,
319 int bSet); 322 int bSet);
320static int BoxDisable_SW_FlowCtrl(struct usb_serial *serial, __u16 UartNumber); 323static int BoxDisable_SW_FlowCtrl(struct usb_serial *serial, __u16 index);
321static int EmulateWriteQMCR_Reg(int index, unsigned uc_value); 324static int EmulateWriteQMCR_Reg(int index, unsigned uc_value);
322static int EmulateReadQMCR_Reg(int index, unsigned *uc_value); 325static int EmulateReadQMCR_Reg(int index, unsigned *uc_value);
323static struct usb_serial *find_the_box(unsigned int index); 326static struct usb_serial *find_the_box(unsigned int index);
@@ -336,10 +339,11 @@ static int serial_tiocmset(struct tty_struct *tty, struct file *file,
336 unsigned int set, unsigned int clear); 339 unsigned int set, unsigned int clear);
337static int serial_tiocmget(struct tty_struct *tty, struct file *file); 340static int serial_tiocmget(struct tty_struct *tty, struct file *file);
338 341
339static int qt_tiocmset(struct usb_serial_port *port, struct file *file, 342static int qt_tiocmset(struct tty_struct *tty, struct usb_serial_port *port,
340 unsigned int value); 343 struct file *file, unsigned int value);
341 344
342static int qt_tiocmget(struct usb_serial_port *port, struct file *file); 345static int qt_tiocmget(struct tty_struct *tty, struct usb_serial_port *port,
346 struct file *file);
343 347
344/* Version Information */ 348/* Version Information */
345#define DRIVER_VERSION "v2.14" 349#define DRIVER_VERSION "v2.14"
@@ -818,7 +822,7 @@ static struct usb_serial *get_free_serial(int num_ports, int *minor)
818 return NULL; 822 return NULL;
819} 823}
820 824
821static int flip_that(struct tty_struct *tty, __u16 UartNumber, 825static int flip_that(struct tty_struct *tty, __u16 index,
822 struct usb_serial *serial) 826 struct usb_serial *serial)
823{ 827{
824 tty_flip_buffer_push(tty); 828 tty_flip_buffer_push(tty);
@@ -829,18 +833,18 @@ static int flip_that(struct tty_struct *tty, __u16 UartNumber,
829/* Handles processing and moving data to the tty layer */ 833/* Handles processing and moving data to the tty layer */
830static void port_sofrint(void *private) 834static void port_sofrint(void *private)
831{ 835{
832 struct usb_serial_port *port = (struct usb_serial_port *)private; 836 struct usb_serial_port *port = private;
833 struct usb_serial *serial = get_usb_serial(port, __func__); 837 struct usb_serial *serial = get_usb_serial(port, __func__);
834 struct tty_struct *tty = port->tty; 838 struct tty_struct *tty = port->tty;
835 unsigned char *data = port->read_urb->transfer_buffer; 839 unsigned char *data = port->read_urb->transfer_buffer;
836 unsigned int UartNumber; 840 unsigned int index;
837 struct urb *urb = port->read_urb; 841 struct urb *urb = port->read_urb;
838 unsigned int RxCount = urb->actual_length; 842 unsigned int RxCount = urb->actual_length;
839 int i, result; 843 int i, result;
840 int flag, flag_data; 844 int flag, flag_data;
841 845
842 /* UartNumber = MINOR(port->tty->device) - serial->minor; */ 846 /* index = MINOR(port->tty->device) - serial->minor; */
843 UartNumber = tty->index - serial->minor; 847 index = tty->index - serial->minor;
844 848
845 mydbg("%s - port %d\n", __func__, port->number); 849 mydbg("%s - port %d\n", __func__, port->number);
846 mydbg("%s - port->RxHolding = %d\n", __func__, port->RxHolding); 850 mydbg("%s - port->RxHolding = %d\n", __func__, port->RxHolding);
@@ -948,7 +952,7 @@ static void port_sofrint(void *private)
948 __func__, result); 952 __func__, result);
949 else { 953 else {
950 if (tty && RxCount) 954 if (tty && RxCount)
951 flip_that(tty, UartNumber, serial); 955 flip_that(tty, index, serial);
952 } 956 }
953 957
954 return; 958 return;
@@ -1097,7 +1101,7 @@ static int serial_open(struct tty_struct *tty, struct file *filp)
1097 port->RxHolding = 0; 1101 port->RxHolding = 0;
1098 mydbg("%s port->RxHolding = 0\n", __func__); 1102 mydbg("%s port->RxHolding = 0\n", __func__);
1099 1103
1100 retval = qt_open(port, filp); 1104 retval = qt_open(tty, port, filp);
1101 } 1105 }
1102 1106
1103 if (retval) 1107 if (retval)
@@ -1112,11 +1116,12 @@ static int serial_open(struct tty_struct *tty, struct file *filp)
1112/***************************************************************************** 1116/*****************************************************************************
1113 *device's specific driver functions 1117 *device's specific driver functions
1114 *****************************************************************************/ 1118 *****************************************************************************/
1115static int qt_open(struct usb_serial_port *port, struct file *filp) 1119static int qt_open(struct tty_struct *tty, struct usb_serial_port *port,
1120 struct file *filp)
1116{ 1121{
1117 struct usb_serial *serial = port->serial; 1122 struct usb_serial *serial = port->serial;
1118 int result = 0; 1123 int result = 0;
1119 unsigned int UartNumber; 1124 unsigned int index;
1120 struct qt_get_device_data DeviceData; 1125 struct qt_get_device_data DeviceData;
1121 struct qt_open_channel_data ChannelData; 1126 struct qt_open_channel_data ChannelData;
1122 unsigned short default_divisor = 0x30; /* gives 9600 baud rate */ 1127 unsigned short default_divisor = 0x30; /* gives 9600 baud rate */
@@ -1128,13 +1133,7 @@ static int qt_open(struct usb_serial_port *port, struct file *filp)
1128 1133
1129 mydbg("%s - port %d\n", __func__, port->number); 1134 mydbg("%s - port %d\n", __func__, port->number);
1130 1135
1131 /* force low_latency on so that our tty_push actually forces the data through, 1136 index = tty->index - serial->minor;
1132 otherwise it is scheduled, and with high data rates (like with OHCI) data
1133 can get lost. */
1134 if (port->tty)
1135 port->tty->low_latency = 0;
1136
1137 UartNumber = port->tty->index - serial->minor;
1138 1137
1139 status = box_get_device(serial, &DeviceData); 1138 status = box_get_device(serial, &DeviceData);
1140 if (status < 0) { 1139 if (status < 0) {
@@ -1147,7 +1146,7 @@ static int qt_open(struct usb_serial_port *port, struct file *filp)
1147 /* Open uart channel */ 1146 /* Open uart channel */
1148 1147
1149 /* Port specific setups */ 1148 /* Port specific setups */
1150 status = BoxOPenCloseChannel(serial, UartNumber, 1, &ChannelData); 1149 status = BoxOPenCloseChannel(serial, index, 1, &ChannelData);
1151 if (status < 0) { 1150 if (status < 0) {
1152 mydbg(__FILE__ "BoxOPenCloseChannel failed\n"); 1151 mydbg(__FILE__ "BoxOPenCloseChannel failed\n");
1153 return status; 1152 return status;
@@ -1161,7 +1160,7 @@ static int qt_open(struct usb_serial_port *port, struct file *filp)
1161 (SERIAL_MSR_CTS | SERIAL_MSR_DSR | SERIAL_MSR_RI | SERIAL_MSR_CD); 1160 (SERIAL_MSR_CTS | SERIAL_MSR_DSR | SERIAL_MSR_RI | SERIAL_MSR_CD);
1162 1161
1163 /* Set Baud rate to default and turn off (default)flow control here */ 1162 /* Set Baud rate to default and turn off (default)flow control here */
1164 status = BoxSetUart(serial, UartNumber, default_divisor, default_LCR); 1163 status = BoxSetUart(serial, index, default_divisor, default_LCR);
1165 if (status < 0) { 1164 if (status < 0) {
1166 mydbg(__FILE__ "BoxSetUart failed\n"); 1165 mydbg(__FILE__ "BoxSetUart failed\n");
1167 return status; 1166 return status;
@@ -1169,7 +1168,7 @@ static int qt_open(struct usb_serial_port *port, struct file *filp)
1169 mydbg(__FILE__ "BoxSetUart completed.\n"); 1168 mydbg(__FILE__ "BoxSetUart completed.\n");
1170 1169
1171 /* Put this here to make it responsive to stty and defauls set by the tty layer */ 1170 /* Put this here to make it responsive to stty and defauls set by the tty layer */
1172 qt_set_termios(port, NULL); 1171 qt_set_termios(tty, port, NULL);
1173 1172
1174 /* Initialize the wait que head */ 1173 /* Initialize the wait que head */
1175 init_waitqueue_head(&(port->wait)); 1174 init_waitqueue_head(&(port->wait));
@@ -1203,7 +1202,7 @@ static int qt_open(struct usb_serial_port *port, struct file *filp)
1203static void serial_close(struct tty_struct *tty, struct file *filp) 1202static void serial_close(struct tty_struct *tty, struct file *filp)
1204{ 1203{
1205 struct usb_serial_port *port = 1204 struct usb_serial_port *port =
1206 (struct usb_serial_port *)tty->driver_data; 1205 tty->driver_data;
1207 struct usb_serial *serial = get_usb_serial(port, __func__); 1206 struct usb_serial *serial = get_usb_serial(port, __func__);
1208 1207
1209 if (!serial) 1208 if (!serial)
@@ -1226,7 +1225,7 @@ static void serial_close(struct tty_struct *tty, struct file *filp)
1226 mydbg("%s - port->closePending = 1\n", __func__); 1225 mydbg("%s - port->closePending = 1\n", __func__);
1227 1226
1228 if (serial->dev) { 1227 if (serial->dev) {
1229 qt_close(port, filp); 1228 qt_close(tty, port, filp);
1230 port->open_count = 0; 1229 port->open_count = 0;
1231 } 1230 }
1232 } 1231 }
@@ -1240,20 +1239,21 @@ exit:
1240 1239
1241} 1240}
1242 1241
1243static void qt_close(struct usb_serial_port *port, struct file *filp) 1242static void qt_close(struct tty_struct *tty, struct usb_serial_port *port,
1243 struct file *filp)
1244{ 1244{
1245 unsigned long jift = jiffies + 10 * HZ; 1245 unsigned long jift = jiffies + 10 * HZ;
1246 __u8 LSR_Value, MCR_Value; 1246 u8 lsr, mcr;
1247 struct usb_serial *serial = port->serial; 1247 struct usb_serial *serial = port->serial;
1248 int status; 1248 int status;
1249 unsigned int UartNumber; 1249 unsigned int index;
1250 1250
1251 struct qt_open_channel_data ChannelData; 1251 struct qt_open_channel_data ChannelData;
1252 status = 0; 1252 status = 0;
1253 LSR_Value = 0; 1253 lsr = 0;
1254 1254
1255 mydbg("%s - port %d\n", __func__, port->number); 1255 mydbg("%s - port %d\n", __func__, port->number);
1256 UartNumber = port->tty->index - serial->minor; 1256 index = tty->index - serial->minor;
1257 1257
1258 /* shutdown any bulk reads that might be going on */ 1258 /* shutdown any bulk reads that might be going on */
1259 if (serial->num_bulk_out) 1259 if (serial->num_bulk_out)
@@ -1263,20 +1263,19 @@ static void qt_close(struct usb_serial_port *port, struct file *filp)
1263 1263
1264 /* wait up to 30 seconds for transmitter to empty */ 1264 /* wait up to 30 seconds for transmitter to empty */
1265 do { 1265 do {
1266 status = BoxGetRegister(serial, UartNumber, LINE_STATUS_REGISTER, &LSR_Value); 1266 status = BoxGetRegister(serial, index, LINE_STATUS_REGISTER, &lsr);
1267 if (status < 0) { 1267 if (status < 0) {
1268 mydbg(__FILE__ "box_get_device failed\n"); 1268 mydbg(__FILE__ "box_get_device failed\n");
1269 break; 1269 break;
1270 } 1270 }
1271 1271
1272 if ((LSR_Value & SERIAL_LSR_TEMT) 1272 if ((lsr & SERIAL_LSR_TEMT)
1273 && (port->ReadBulkStopped == 1)) 1273 && (port->ReadBulkStopped == 1))
1274 break; 1274 break;
1275 schedule(); 1275 schedule();
1276 1276
1277 } 1277 }
1278 while (jiffies <= jift) 1278 while (jiffies <= jift);
1279 ;
1280 1279
1281 if (jiffies > jift) 1280 if (jiffies > jift)
1282 mydbg("%s - port %d timout of checking transmitter empty\n", 1281 mydbg("%s - port %d timout of checking transmitter empty\n",
@@ -1286,17 +1285,17 @@ static void qt_close(struct usb_serial_port *port, struct file *filp)
1286 __func__, port->number); 1285 __func__, port->number);
1287 1286
1288 status = 1287 status =
1289 BoxGetRegister(serial, UartNumber, MODEM_CONTROL_REGISTER, 1288 BoxGetRegister(serial, index, MODEM_CONTROL_REGISTER,
1290 &MCR_Value); 1289 &mcr);
1291 mydbg(__FILE__ "BoxGetRegister MCR = 0x%x.\n", MCR_Value); 1290 mydbg(__FILE__ "BoxGetRegister MCR = 0x%x.\n", mcr);
1292 1291
1293 if (status >= 0) { 1292 if (status >= 0) {
1294 MCR_Value &= ~(SERIAL_MCR_DTR | SERIAL_MCR_RTS); 1293 mcr &= ~(SERIAL_MCR_DTR | SERIAL_MCR_RTS);
1295 /* status = BoxSetRegister(serial, UartNumber, MODEM_CONTROL_REGISTER, MCR_Value); */ 1294 /* status = BoxSetRegister(serial, index, MODEM_CONTROL_REGISTER, mcr); */
1296 } 1295 }
1297 1296
1298 /* Close uart channel */ 1297 /* Close uart channel */
1299 status = BoxOPenCloseChannel(serial, UartNumber, 0, &ChannelData); 1298 status = BoxOPenCloseChannel(serial, index, 0, &ChannelData);
1300 if (status < 0) 1299 if (status < 0)
1301 mydbg("%s - port %d BoxOPenCloseChannel failed.\n", 1300 mydbg("%s - port %d BoxOPenCloseChannel failed.\n",
1302 __func__, port->number); 1301 __func__, port->number);
@@ -1308,12 +1307,10 @@ static void qt_close(struct usb_serial_port *port, struct file *filp)
1308static int serial_write(struct tty_struct *tty, const unsigned char *buf, 1307static int serial_write(struct tty_struct *tty, const unsigned char *buf,
1309 int count) 1308 int count)
1310{ 1309{
1311 struct usb_serial_port *port = 1310 struct usb_serial_port *port = tty->driver_data;
1312 (struct usb_serial_port *)tty->driver_data;
1313 struct usb_serial *serial; 1311 struct usb_serial *serial;
1314 int retval = -EINVAL; 1312 int retval = -EINVAL;
1315 unsigned int UartNumber; 1313 unsigned int index;
1316 int from_user = 0;
1317 1314
1318 serial = get_usb_serial(port, __func__); 1315 serial = get_usb_serial(port, __func__);
1319 if (serial == NULL) 1316 if (serial == NULL)
@@ -1321,7 +1318,7 @@ static int serial_write(struct tty_struct *tty, const unsigned char *buf,
1321 /* This can happen if we get disconnected a */ 1318 /* This can happen if we get disconnected a */
1322 if (port->open_count == 0) 1319 if (port->open_count == 0)
1323 return -ENODEV; 1320 return -ENODEV;
1324 UartNumber = port->tty->index - serial->minor; 1321 index = tty->index - serial->minor;
1325 1322
1326 mydbg("%s - port %d, %d byte(s)\n", __func__, port->number, count); 1323 mydbg("%s - port %d, %d byte(s)\n", __func__, port->number, count);
1327 mydbg("%s - port->RxHolding = %d\n", __func__, port->RxHolding); 1324 mydbg("%s - port->RxHolding = %d\n", __func__, port->RxHolding);
@@ -1331,19 +1328,19 @@ static int serial_write(struct tty_struct *tty, const unsigned char *buf,
1331 goto exit; 1328 goto exit;
1332 } 1329 }
1333 1330
1334 retval = qt_write(port, from_user, buf, count); 1331 retval = qt_write(tty, port, buf, count);
1335 1332
1336exit: 1333exit:
1337 return retval; 1334 return retval;
1338} 1335}
1339 1336
1340static int qt_write(struct usb_serial_port *port, int from_user, 1337static int qt_write(struct tty_struct *tty, struct usb_serial_port *port,
1341 const unsigned char *buf, int count) 1338 const unsigned char *buf, int count)
1342{ 1339{
1343 int result; 1340 int result;
1344 unsigned int UartNumber; 1341 unsigned int index;
1345
1346 struct usb_serial *serial = get_usb_serial(port, __func__); 1342 struct usb_serial *serial = get_usb_serial(port, __func__);
1343
1347 if (serial == NULL) 1344 if (serial == NULL)
1348 return -ENODEV; 1345 return -ENODEV;
1349 1346
@@ -1354,7 +1351,7 @@ static int qt_write(struct usb_serial_port *port, int from_user,
1354 return 0; 1351 return 0;
1355 } 1352 }
1356 1353
1357 UartNumber = port->tty->index - serial->minor; 1354 index = tty->index - serial->minor;
1358 /* only do something if we have a bulk out endpoint */ 1355 /* only do something if we have a bulk out endpoint */
1359 if (serial->num_bulk_out) { 1356 if (serial->num_bulk_out) {
1360 if (port->write_urb->status == -EINPROGRESS) { 1357 if (port->write_urb->status == -EINPROGRESS) {
@@ -1364,14 +1361,7 @@ static int qt_write(struct usb_serial_port *port, int from_user,
1364 1361
1365 count = 1362 count =
1366 (count > port->bulk_out_size) ? port->bulk_out_size : count; 1363 (count > port->bulk_out_size) ? port->bulk_out_size : count;
1367 1364 memcpy(port->write_urb->transfer_buffer, buf, count);
1368 if (from_user) {
1369 if (copy_from_user
1370 (port->write_urb->transfer_buffer, buf, count))
1371 return -EFAULT;
1372 } else {
1373 memcpy(port->write_urb->transfer_buffer, buf, count);
1374 }
1375 1365
1376 /* usb_serial_debug_data(__FILE__, __func__, count, port->write_urb->transfer_buffer); */ 1366 /* usb_serial_debug_data(__FILE__, __func__, count, port->write_urb->transfer_buffer); */
1377 1367
@@ -1449,8 +1439,7 @@ static void port_softint(struct work_struct *work)
1449} 1439}
1450static int serial_write_room(struct tty_struct *tty) 1440static int serial_write_room(struct tty_struct *tty)
1451{ 1441{
1452 struct usb_serial_port *port = 1442 struct usb_serial_port *port = tty->driver_data;
1453 (struct usb_serial_port *)tty->driver_data;
1454 struct usb_serial *serial = get_usb_serial(port, __func__); 1443 struct usb_serial *serial = get_usb_serial(port, __func__);
1455 int retval = -EINVAL; 1444 int retval = -EINVAL;
1456 1445
@@ -1493,8 +1482,7 @@ static int qt_write_room(struct usb_serial_port *port)
1493} 1482}
1494static int serial_chars_in_buffer(struct tty_struct *tty) 1483static int serial_chars_in_buffer(struct tty_struct *tty)
1495{ 1484{
1496 struct usb_serial_port *port = 1485 struct usb_serial_port *port = tty->driver_data;
1497 (struct usb_serial_port *)tty->driver_data;
1498 struct usb_serial *serial = get_usb_serial(port, __func__); 1486 struct usb_serial *serial = get_usb_serial(port, __func__);
1499 int retval = -EINVAL; 1487 int retval = -EINVAL;
1500 1488
@@ -1537,17 +1525,16 @@ static int serial_tiocmset(struct tty_struct *tty, struct file *file,
1537 unsigned int set, unsigned int clear) 1525 unsigned int set, unsigned int clear)
1538{ 1526{
1539 1527
1540 struct usb_serial_port *port = 1528 struct usb_serial_port *port = tty->driver_data;
1541 (struct usb_serial_port *)tty->driver_data;
1542 struct usb_serial *serial = get_usb_serial(port, __func__); 1529 struct usb_serial *serial = get_usb_serial(port, __func__);
1543 int retval = -ENODEV; 1530 int retval = -ENODEV;
1544 unsigned int UartNumber; 1531 unsigned int index;
1545 mydbg("In %s \n", __func__); 1532 mydbg("In %s \n", __func__);
1546 1533
1547 if (!serial) 1534 if (!serial)
1548 return -ENODEV; 1535 return -ENODEV;
1549 1536
1550 UartNumber = port->tty->index - serial->minor; 1537 index = tty->index - serial->minor;
1551 1538
1552 down(&port->sem); 1539 down(&port->sem);
1553 1540
@@ -1559,22 +1546,22 @@ static int serial_tiocmset(struct tty_struct *tty, struct file *file,
1559 goto exit; 1546 goto exit;
1560 } 1547 }
1561 1548
1562 retval = qt_tiocmset(port, file, set); 1549 retval = qt_tiocmset(tty, port, file, set);
1563 1550
1564exit: 1551exit:
1565 up(&port->sem); 1552 up(&port->sem);
1566 return retval; 1553 return retval;
1567} 1554}
1568 1555
1569static int qt_tiocmset(struct usb_serial_port *port, struct file *file, 1556static int qt_tiocmset(struct tty_struct *tty, struct usb_serial_port *port,
1570 unsigned int value) 1557 struct file *file, unsigned int value)
1571{ 1558{
1572 1559
1573 __u8 MCR_Value; 1560 u8 mcr;
1574 int status; 1561 int status;
1575 unsigned int UartNumber; 1562 unsigned int index;
1576
1577 struct usb_serial *serial = get_usb_serial(port, __func__); 1563 struct usb_serial *serial = get_usb_serial(port, __func__);
1564
1578 if (serial == NULL) 1565 if (serial == NULL)
1579 return -ENODEV; 1566 return -ENODEV;
1580 1567
@@ -1583,10 +1570,10 @@ static int qt_tiocmset(struct usb_serial_port *port, struct file *file,
1583 /**************************************************************************************/ 1570 /**************************************************************************************/
1584 /** TIOCMGET 1571 /** TIOCMGET
1585 */ 1572 */
1586 UartNumber = port->tty->index - serial->minor; 1573 index = tty->index - serial->minor;
1587 status = 1574 status =
1588 BoxGetRegister(port->serial, UartNumber, MODEM_CONTROL_REGISTER, 1575 BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER,
1589 &MCR_Value); 1576 &mcr);
1590 if (status < 0) 1577 if (status < 0)
1591 return -ESPIPE; 1578 return -ESPIPE;
1592 1579
@@ -1594,17 +1581,17 @@ static int qt_tiocmset(struct usb_serial_port *port, struct file *file,
1594 * Turn off the RTS and DTR and loopbcck and then only turn on what was 1581 * Turn off the RTS and DTR and loopbcck and then only turn on what was
1595 * asked for 1582 * asked for
1596 */ 1583 */
1597 MCR_Value &= ~(SERIAL_MCR_RTS | SERIAL_MCR_DTR | SERIAL_MCR_LOOP); 1584 mcr &= ~(SERIAL_MCR_RTS | SERIAL_MCR_DTR | SERIAL_MCR_LOOP);
1598 if (value & TIOCM_RTS) 1585 if (value & TIOCM_RTS)
1599 MCR_Value |= SERIAL_MCR_RTS; 1586 mcr |= SERIAL_MCR_RTS;
1600 if (value & TIOCM_DTR) 1587 if (value & TIOCM_DTR)
1601 MCR_Value |= SERIAL_MCR_DTR; 1588 mcr |= SERIAL_MCR_DTR;
1602 if (value & TIOCM_LOOP) 1589 if (value & TIOCM_LOOP)
1603 MCR_Value |= SERIAL_MCR_LOOP; 1590 mcr |= SERIAL_MCR_LOOP;
1604 1591
1605 status = 1592 status =
1606 BoxSetRegister(port->serial, UartNumber, MODEM_CONTROL_REGISTER, 1593 BoxSetRegister(port->serial, index, MODEM_CONTROL_REGISTER,
1607 MCR_Value); 1594 mcr);
1608 if (status < 0) 1595 if (status < 0)
1609 return -ESPIPE; 1596 return -ESPIPE;
1610 else 1597 else
@@ -1614,18 +1601,16 @@ static int qt_tiocmset(struct usb_serial_port *port, struct file *file,
1614static int serial_tiocmget(struct tty_struct *tty, struct file *file) 1601static int serial_tiocmget(struct tty_struct *tty, struct file *file)
1615{ 1602{
1616 1603
1617 struct usb_serial_port *port = 1604 struct usb_serial_port *port = tty->driver_data;
1618 (struct usb_serial_port *)tty->driver_data;
1619
1620 struct usb_serial *serial = get_usb_serial(port, __func__); 1605 struct usb_serial *serial = get_usb_serial(port, __func__);
1621 int retval = -ENODEV; 1606 int retval = -ENODEV;
1622 unsigned int UartNumber; 1607 unsigned int index;
1623 mydbg("In %s \n", __func__); 1608 mydbg("In %s \n", __func__);
1624 1609
1625 if (!serial) 1610 if (!serial)
1626 return -ENODEV; 1611 return -ENODEV;
1627 1612
1628 UartNumber = port->tty->index - serial->minor; 1613 index = tty->index - serial->minor;
1629 1614
1630 down(&port->sem); 1615 down(&port->sem);
1631 1616
@@ -1637,56 +1622,55 @@ static int serial_tiocmget(struct tty_struct *tty, struct file *file)
1637 goto exit; 1622 goto exit;
1638 } 1623 }
1639 1624
1640 retval = qt_tiocmget(port, file); 1625 retval = qt_tiocmget(tty, port, file);
1641 1626
1642exit: 1627exit:
1643 up(&port->sem); 1628 up(&port->sem);
1644 return retval; 1629 return retval;
1645} 1630}
1646 1631
1647static int qt_tiocmget(struct usb_serial_port *port, struct file *file) 1632static int qt_tiocmget(struct tty_struct *tty,
1633 struct usb_serial_port *port, struct file *file)
1648{ 1634{
1649 1635
1650 __u8 MCR_Value; 1636 u8 mcr;
1651 __u8 MSR_Value; 1637 u8 msr;
1652 unsigned int result = 0; 1638 unsigned int result = 0;
1653 int status; 1639 int status;
1654 unsigned int UartNumber; 1640 unsigned int index;
1655 struct tty_struct *tty;
1656 1641
1657 struct usb_serial *serial = get_usb_serial(port, __func__); 1642 struct usb_serial *serial = get_usb_serial(port, __func__);
1658 if (serial == NULL) 1643 if (serial == NULL)
1659 return -ENODEV; 1644 return -ENODEV;
1660 tty = port->tty;
1661 1645
1662 mydbg("%s - port %d, tty =0x%p\n", __func__, port->number, tty); 1646 mydbg("%s - port %d, tty =0x%p\n", __func__, port->number, tty);
1663 1647
1664 /**************************************************************************************/ 1648 /**************************************************************************************/
1665 /** TIOCMGET 1649 /** TIOCMGET
1666 */ 1650 */
1667 UartNumber = port->tty->index - serial->minor; 1651 index = tty->index - serial->minor;
1668 status = 1652 status =
1669 BoxGetRegister(port->serial, UartNumber, MODEM_CONTROL_REGISTER, 1653 BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER,
1670 &MCR_Value); 1654 &mcr);
1671 if (status >= 0) { 1655 if (status >= 0) {
1672 status = 1656 status =
1673 BoxGetRegister(port->serial, UartNumber, 1657 BoxGetRegister(port->serial, index,
1674 MODEM_STATUS_REGISTER, &MSR_Value); 1658 MODEM_STATUS_REGISTER, &msr);
1675 1659
1676 } 1660 }
1677 1661
1678 if (status >= 0) { 1662 if (status >= 0) {
1679 result = ((MCR_Value & SERIAL_MCR_DTR) ? TIOCM_DTR : 0) 1663 result = ((mcr & SERIAL_MCR_DTR) ? TIOCM_DTR : 0)
1680 /* DTR IS SET */ 1664 /* DTR IS SET */
1681 | ((MCR_Value & SERIAL_MCR_RTS) ? TIOCM_RTS : 0) 1665 | ((mcr & SERIAL_MCR_RTS) ? TIOCM_RTS : 0)
1682 /* RTS IS SET */ 1666 /* RTS IS SET */
1683 | ((MSR_Value & SERIAL_MSR_CTS) ? TIOCM_CTS : 0) 1667 | ((msr & SERIAL_MSR_CTS) ? TIOCM_CTS : 0)
1684 /* CTS is set */ 1668 /* CTS is set */
1685 | ((MSR_Value & SERIAL_MSR_CD) ? TIOCM_CAR : 0) 1669 | ((msr & SERIAL_MSR_CD) ? TIOCM_CAR : 0)
1686 /* Carrier detect is set */ 1670 /* Carrier detect is set */
1687 | ((MSR_Value & SERIAL_MSR_RI) ? TIOCM_RI : 0) 1671 | ((msr & SERIAL_MSR_RI) ? TIOCM_RI : 0)
1688 /* Ring indicator set */ 1672 /* Ring indicator set */
1689 | ((MSR_Value & SERIAL_MSR_DSR) ? TIOCM_DSR : 0); 1673 | ((msr & SERIAL_MSR_DSR) ? TIOCM_DSR : 0);
1690 /* DSR is set */ 1674 /* DSR is set */
1691 return result; 1675 return result;
1692 1676
@@ -1698,17 +1682,16 @@ static int serial_ioctl(struct tty_struct *tty, struct file *file,
1698 unsigned int cmd, unsigned long arg) 1682 unsigned int cmd, unsigned long arg)
1699{ 1683{
1700 1684
1701 struct usb_serial_port *port = 1685 struct usb_serial_port *port = tty->driver_data;
1702 (struct usb_serial_port *)tty->driver_data;
1703 struct usb_serial *serial = get_usb_serial(port, __func__); 1686 struct usb_serial *serial = get_usb_serial(port, __func__);
1704 int retval = -ENODEV; 1687 int retval = -ENODEV;
1705 unsigned int UartNumber; 1688 unsigned int index;
1706 mydbg("In %s \n", __func__); 1689 mydbg("In %s \n", __func__);
1707 1690
1708 if (!serial) 1691 if (!serial)
1709 return -ENODEV; 1692 return -ENODEV;
1710 1693
1711 UartNumber = port->tty->index - serial->minor; 1694 index = tty->index - serial->minor;
1712 1695
1713 down(&port->sem); 1696 down(&port->sem);
1714 1697
@@ -1720,125 +1703,34 @@ static int serial_ioctl(struct tty_struct *tty, struct file *file,
1720 goto exit; 1703 goto exit;
1721 } 1704 }
1722 1705
1723 retval = qt_ioctl(port, file, cmd, arg); 1706 retval = qt_ioctl(tty, port, file, cmd, arg);
1724 1707
1725exit: 1708exit:
1726 up(&port->sem); 1709 up(&port->sem);
1727 return retval; 1710 return retval;
1728} 1711}
1729static int qt_ioctl(struct usb_serial_port *port, struct file *file, 1712static int qt_ioctl(struct tty_struct *tty, struct usb_serial_port *port,
1730 unsigned int cmd, unsigned long arg) 1713 struct file *file, unsigned int cmd, unsigned long arg)
1731{ 1714{
1732 __u8 MCR_Value; 1715 __u8 mcr;
1733 __u8 MSR_Value; 1716 __u8 msr;
1734 unsigned short Prev_MSR_Value; 1717 unsigned short prev_msr;
1735 unsigned int value, result = 0; 1718 unsigned int value, result = 0;
1736 int status; 1719 int status;
1737 unsigned int UartNumber; 1720 unsigned int index;
1738 struct tty_struct *tty;
1739 1721
1740 struct usb_serial *serial = get_usb_serial(port, __func__); 1722 struct usb_serial *serial = get_usb_serial(port, __func__);
1741 if (serial == NULL) 1723 if (serial == NULL)
1742 return -ENODEV; 1724 return -ENODEV;
1743 tty = port->tty;
1744 1725
1745 mydbg("%s - port %d, tty =0x%p\n", __func__, port->number, tty); 1726 mydbg("%s - port %d, tty =0x%p\n", __func__, port->number, tty);
1746 1727
1747 /* TIOCMGET */ 1728 /* TIOCMGET */
1748 UartNumber = port->tty->index - serial->minor; 1729 index = tty->index - serial->minor;
1749
1750 if (cmd == TIOCMGET) {
1751 MCR_Value = port->shadowMCR;
1752 MSR_Value = port->shadowMSR;
1753
1754 {
1755 result = ((MCR_Value & SERIAL_MCR_DTR) ? TIOCM_DTR : 0)
1756 /* DTR IS SET */
1757 | ((MCR_Value & SERIAL_MCR_RTS) ? TIOCM_RTS : 0)
1758 /* RTS IS SET */
1759 | ((MSR_Value & SERIAL_MSR_CTS) ? TIOCM_CTS : 0)
1760 /* CTS is set */
1761 | ((MSR_Value & SERIAL_MSR_CD) ? TIOCM_CAR : 0)
1762 /* Carrier detect is set */
1763 | ((MSR_Value & SERIAL_MSR_RI) ? TIOCM_RI : 0)
1764 /* Ring indicator set */
1765 | ((MSR_Value & SERIAL_MSR_DSR) ? TIOCM_DSR : 0);
1766 /* DSR is set */
1767 if (copy_to_user
1768 ((unsigned int *)arg, &result,
1769 sizeof(unsigned int)))
1770 return -EFAULT;
1771 return 0;
1772
1773 }
1774 }
1775
1776 /* TIOCMBIS, TIOCMBIC, AND TIOCMSET */
1777 if (cmd == TIOCMBIS || cmd == TIOCMBIC || cmd == TIOCMSET) {
1778 status =
1779 BoxGetRegister(port->serial, UartNumber,
1780 MODEM_CONTROL_REGISTER, &MCR_Value);
1781 if (status < 0)
1782 return -ESPIPE;
1783 if (copy_from_user
1784 (&value, (unsigned int *)arg, sizeof(unsigned int)))
1785 return -EFAULT;
1786
1787 switch (cmd) {
1788 case TIOCMBIS:
1789 if (value & TIOCM_RTS)
1790 MCR_Value |= SERIAL_MCR_RTS;
1791 if (value & TIOCM_DTR)
1792 MCR_Value |= SERIAL_MCR_DTR;
1793 if (value & TIOCM_LOOP)
1794 MCR_Value |= SERIAL_MCR_LOOP;
1795 break;
1796 case TIOCMBIC:
1797 if (value & TIOCM_RTS)
1798 MCR_Value &= ~SERIAL_MCR_RTS;
1799 if (value & TIOCM_DTR)
1800 MCR_Value &= ~SERIAL_MCR_DTR;
1801 if (value & TIOCM_LOOP)
1802 MCR_Value &= ~SERIAL_MCR_LOOP;
1803 break;
1804 case TIOCMSET:
1805 /*
1806 * Turn off the RTS and DTR and loopbcck and then only
1807 * turn on what was asked for
1808 */
1809 MCR_Value &=
1810 ~(SERIAL_MCR_RTS | SERIAL_MCR_DTR |
1811 SERIAL_MCR_LOOP);
1812 if (value & TIOCM_RTS)
1813 MCR_Value |= SERIAL_MCR_RTS;
1814 if (value & TIOCM_DTR)
1815 MCR_Value |= SERIAL_MCR_DTR;
1816 if (value & TIOCM_LOOP)
1817 MCR_Value |= SERIAL_MCR_LOOP;
1818 break;
1819 default:
1820 break;
1821
1822 }
1823 status =
1824 BoxSetRegister(port->serial, UartNumber,
1825 MODEM_CONTROL_REGISTER, MCR_Value);
1826 if (status < 0)
1827 return -ESPIPE;
1828 else {
1829 port->shadowMCR = MCR_Value;
1830 return 0;
1831 }
1832
1833 }
1834 /**************************************************************************************/
1835 /** TIOCMBIS, TIOCMBIC, AND TIOCMSET end
1836 */
1837 /**************************************************************************************/
1838 1730
1839 if (cmd == TIOCMIWAIT) { 1731 if (cmd == TIOCMIWAIT) {
1840 DECLARE_WAITQUEUE(wait, current); 1732 DECLARE_WAITQUEUE(wait, current);
1841 Prev_MSR_Value = port->shadowMSR & SERIAL_MSR_MASK; 1733 prev_msr = port->shadowMSR & SERIAL_MSR_MASK;
1842 while (1) { 1734 while (1) {
1843 add_wait_queue(&port->wait, &wait); 1735 add_wait_queue(&port->wait, &wait);
1844 set_current_state(TASK_INTERRUPTIBLE); 1736 set_current_state(TASK_INTERRUPTIBLE);
@@ -1847,22 +1739,22 @@ static int qt_ioctl(struct usb_serial_port *port, struct file *file,
1847 /* see if a signal woke us up */ 1739 /* see if a signal woke us up */
1848 if (signal_pending(current)) 1740 if (signal_pending(current))
1849 return -ERESTARTSYS; 1741 return -ERESTARTSYS;
1850 MSR_Value = port->shadowMSR & SERIAL_MSR_MASK; 1742 msr = port->shadowMSR & SERIAL_MSR_MASK;
1851 if (MSR_Value == Prev_MSR_Value) 1743 if (msr == prev_msr)
1852 return -EIO; /* no change error */ 1744 return -EIO; /* no change error */
1853 1745
1854 if ((arg & TIOCM_RNG 1746 if ((arg & TIOCM_RNG
1855 && ((Prev_MSR_Value & SERIAL_MSR_RI) == 1747 && ((prev_msr & SERIAL_MSR_RI) ==
1856 (MSR_Value & SERIAL_MSR_RI))) 1748 (msr & SERIAL_MSR_RI)))
1857 || (arg & TIOCM_DSR 1749 || (arg & TIOCM_DSR
1858 && ((Prev_MSR_Value & SERIAL_MSR_DSR) == 1750 && ((prev_msr & SERIAL_MSR_DSR) ==
1859 (MSR_Value & SERIAL_MSR_DSR))) 1751 (msr & SERIAL_MSR_DSR)))
1860 || (arg & TIOCM_CD 1752 || (arg & TIOCM_CD
1861 && ((Prev_MSR_Value & SERIAL_MSR_CD) == 1753 && ((prev_msr & SERIAL_MSR_CD) ==
1862 (MSR_Value & SERIAL_MSR_CD))) 1754 (msr & SERIAL_MSR_CD)))
1863 || (arg & TIOCM_CTS 1755 || (arg & TIOCM_CTS
1864 && ((Prev_MSR_Value & SERIAL_MSR_CTS) == 1756 && ((prev_msr & SERIAL_MSR_CTS) ==
1865 (MSR_Value & SERIAL_MSR_CTS)))) { 1757 (msr & SERIAL_MSR_CTS)))) {
1866 return 0; 1758 return 0;
1867 } 1759 }
1868 1760
@@ -1878,7 +1770,7 @@ static int qt_ioctl(struct usb_serial_port *port, struct file *file,
1878static void serial_set_termios(struct tty_struct *tty, struct ktermios *old) 1770static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
1879{ 1771{
1880 struct usb_serial_port *port = 1772 struct usb_serial_port *port =
1881 (struct usb_serial_port *)tty->driver_data; 1773 tty->driver_data;
1882 struct usb_serial *serial = get_usb_serial(port, __func__); 1774 struct usb_serial *serial = get_usb_serial(port, __func__);
1883 1775
1884 if (!serial) 1776 if (!serial)
@@ -1894,22 +1786,22 @@ static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
1894 } 1786 }
1895 1787
1896 /* pass on to the driver specific version of this function if it is available */ 1788 /* pass on to the driver specific version of this function if it is available */
1897 qt_set_termios(port, old); 1789 qt_set_termios(tty, port, old);
1898 1790
1899exit: 1791exit:
1900 up(&port->sem); 1792 up(&port->sem);
1901} 1793}
1902 1794
1903static void qt_set_termios(struct usb_serial_port *port, 1795static void qt_set_termios(struct tty_struct *tty,
1796 struct usb_serial_port *port,
1904 struct ktermios *old_termios) 1797 struct ktermios *old_termios)
1905{ 1798{
1906 unsigned int cflag; 1799 unsigned int cflag;
1907 int baud, divisor, remainder; 1800 int baud, divisor, remainder;
1908 unsigned char LCR_change_to = 0; 1801 unsigned char new_LCR = 0;
1909 struct tty_struct *tty;
1910 int status; 1802 int status;
1911 struct usb_serial *serial; 1803 struct usb_serial *serial;
1912 __u16 UartNumber; 1804 __u16 index;
1913 __u16 tmp, tmp2; 1805 __u16 tmp, tmp2;
1914 1806
1915 mydbg("%s - port %d\n", __func__, port->number); 1807 mydbg("%s - port %d\n", __func__, port->number);
@@ -1921,59 +1813,46 @@ static void qt_set_termios(struct usb_serial_port *port,
1921 tmp2 = serial->minor; 1813 tmp2 = serial->minor;
1922 mydbg("%s - serial->minor = %d\n", __func__, tmp2); 1814 mydbg("%s - serial->minor = %d\n", __func__, tmp2);
1923 1815
1924 UartNumber = port->tty->index - serial->minor; 1816 index = port->tty->index - serial->minor;
1925
1926 tty = port->tty;
1927 1817
1928 cflag = tty->termios->c_cflag; 1818 cflag = tty->termios->c_cflag;
1929 1819
1930 if (old_termios) {
1931 if ((cflag == old_termios->c_cflag)
1932 && (RELEVANT_IFLAG(tty->termios->c_iflag) ==
1933 RELEVANT_IFLAG(old_termios->c_iflag))) {
1934 mydbg("%s - Nothing to change\n", __func__);
1935 return;
1936 }
1937
1938 }
1939
1940 mydbg("%s - 3\n", __func__); 1820 mydbg("%s - 3\n", __func__);
1941 1821
1942 switch (cflag) { 1822 switch (cflag) {
1943 case CS5: 1823 case CS5:
1944 LCR_change_to |= SERIAL_5_DATA; 1824 new_LCR |= SERIAL_5_DATA;
1945 break; 1825 break;
1946 case CS6: 1826 case CS6:
1947 LCR_change_to |= SERIAL_6_DATA; 1827 new_LCR |= SERIAL_6_DATA;
1948 break; 1828 break;
1949 case CS7: 1829 case CS7:
1950 LCR_change_to |= SERIAL_7_DATA; 1830 new_LCR |= SERIAL_7_DATA;
1951 break; 1831 break;
1952 default: 1832 default:
1953 case CS8: 1833 case CS8:
1954 LCR_change_to |= SERIAL_8_DATA; 1834 new_LCR |= SERIAL_8_DATA;
1955 break; 1835 break;
1956 } 1836 }
1957 1837
1958 /* Parity stuff */ 1838 /* Parity stuff */
1959 if (cflag & PARENB) { 1839 if (cflag & PARENB) {
1960 if (cflag & PARODD) 1840 if (cflag & PARODD)
1961 LCR_change_to |= SERIAL_ODD_PARITY; 1841 new_LCR |= SERIAL_ODD_PARITY;
1962 else 1842 else
1963 LCR_change_to |= SERIAL_EVEN_PARITY; 1843 new_LCR |= SERIAL_EVEN_PARITY;
1964 } 1844 }
1965 if (cflag & CSTOPB) 1845 if (cflag & CSTOPB)
1966 LCR_change_to |= SERIAL_TWO_STOPB; 1846 new_LCR |= SERIAL_TWO_STOPB;
1967 else 1847 else
1968 LCR_change_to |= SERIAL_TWO_STOPB; 1848 new_LCR |= SERIAL_TWO_STOPB;
1969 1849
1970 mydbg("%s - 4\n", __func__); 1850 mydbg("%s - 4\n", __func__);
1971 /* Thats the LCR stuff, go ahead and set it */ 1851 /* Thats the LCR stuff, go ahead and set it */
1972 baud = tty_get_baud_rate(tty); 1852 baud = tty_get_baud_rate(tty);
1973 if (!baud) { 1853 if (!baud)
1974 /* pick a default, any default... */ 1854 /* pick a default, any default... */
1975 baud = 9600; 1855 baud = 9600;
1976 }
1977 1856
1978 mydbg("%s - got baud = %d\n", __func__, baud); 1857 mydbg("%s - got baud = %d\n", __func__, baud);
1979 1858
@@ -1986,9 +1865,7 @@ static void qt_set_termios(struct usb_serial_port *port,
1986 /* 1865 /*
1987 * Set Baud rate to default and turn off (default)flow control here 1866 * Set Baud rate to default and turn off (default)flow control here
1988 */ 1867 */
1989 status = 1868 status = BoxSetUart(serial, index, (unsigned short)divisor, new_LCR);
1990 BoxSetUart(serial, UartNumber, (unsigned short)divisor,
1991 LCR_change_to);
1992 if (status < 0) { 1869 if (status < 0) {
1993 mydbg(__FILE__ "BoxSetUart failed\n"); 1870 mydbg(__FILE__ "BoxSetUart failed\n");
1994 return; 1871 return;
@@ -2000,7 +1877,7 @@ static void qt_set_termios(struct usb_serial_port *port,
2000 port->number); 1877 port->number);
2001 1878
2002 /* Enable RTS/CTS flow control */ 1879 /* Enable RTS/CTS flow control */
2003 status = BoxSetHW_FlowCtrl(serial, UartNumber, 1); 1880 status = BoxSetHW_FlowCtrl(serial, index, 1);
2004 1881
2005 if (status < 0) { 1882 if (status < 0) {
2006 mydbg(__FILE__ "BoxSetHW_FlowCtrl failed\n"); 1883 mydbg(__FILE__ "BoxSetHW_FlowCtrl failed\n");
@@ -2011,7 +1888,7 @@ static void qt_set_termios(struct usb_serial_port *port,
2011 mydbg("%s - disabling HW flow control port %d\n", __func__, 1888 mydbg("%s - disabling HW flow control port %d\n", __func__,
2012 port->number); 1889 port->number);
2013 1890
2014 status = BoxSetHW_FlowCtrl(serial, UartNumber, 0); 1891 status = BoxSetHW_FlowCtrl(serial, index, 0);
2015 if (status < 0) { 1892 if (status < 0) {
2016 mydbg(__FILE__ "BoxSetHW_FlowCtrl failed\n"); 1893 mydbg(__FILE__ "BoxSetHW_FlowCtrl failed\n");
2017 return; 1894 return;
@@ -2025,19 +1902,20 @@ static void qt_set_termios(struct usb_serial_port *port,
2025 unsigned char stop_char = STOP_CHAR(tty); 1902 unsigned char stop_char = STOP_CHAR(tty);
2026 unsigned char start_char = START_CHAR(tty); 1903 unsigned char start_char = START_CHAR(tty);
2027 status = 1904 status =
2028 BoxSetSW_FlowCtrl(serial, UartNumber, stop_char, 1905 BoxSetSW_FlowCtrl(serial, index, stop_char,
2029 start_char); 1906 start_char);
2030 if (status < 0) 1907 if (status < 0)
2031 mydbg(__FILE__ "BoxSetSW_FlowCtrl (enabled) failed\n"); 1908 mydbg(__FILE__ "BoxSetSW_FlowCtrl (enabled) failed\n");
2032 1909
2033 } else { 1910 } else {
2034 /* disable SW flow control */ 1911 /* disable SW flow control */
2035 status = BoxDisable_SW_FlowCtrl(serial, UartNumber); 1912 status = BoxDisable_SW_FlowCtrl(serial, index);
2036 if (status < 0) 1913 if (status < 0)
2037 mydbg(__FILE__ "BoxSetSW_FlowCtrl (diabling) failed\n"); 1914 mydbg(__FILE__ "BoxSetSW_FlowCtrl (diabling) failed\n");
2038 1915
2039 } 1916 }
2040 1917 tty->termios->c_cflag &= ~CMSPAR;
1918 /* FIXME: Error cases should be returning the actual bits changed only */
2041} 1919}
2042 1920
2043/**************************************************************************** 1921/****************************************************************************
@@ -2237,11 +2115,11 @@ static int BoxSetUart(struct usb_serial *serial, unsigned short Uart_Number,
2237 return result; 2115 return result;
2238} 2116}
2239 2117
2240static int BoxSetHW_FlowCtrl(struct usb_serial *serial, unsigned int UartNumber, 2118static int BoxSetHW_FlowCtrl(struct usb_serial *serial, unsigned int index,
2241 int bSet) 2119 int bSet)
2242{ 2120{
2243 __u8 MCR_Value = 0; 2121 __u8 mcr = 0;
2244 __u8 MSR_Value = 0, MOUT_Value = 0; 2122 __u8 msr = 0, MOUT_Value = 0;
2245 struct usb_serial_port *port; 2123 struct usb_serial_port *port;
2246 unsigned int status; 2124 unsigned int status;
2247 2125
@@ -2249,34 +2127,34 @@ static int BoxSetHW_FlowCtrl(struct usb_serial *serial, unsigned int UartNumber,
2249 2127
2250 if (bSet == 1) { 2128 if (bSet == 1) {
2251 /* flow control, box will clear RTS line to prevent remote */ 2129 /* flow control, box will clear RTS line to prevent remote */
2252 MCR_Value = SERIAL_MCR_RTS; 2130 mcr = SERIAL_MCR_RTS;
2253 } /* device from xmitting more chars */ 2131 } /* device from xmitting more chars */
2254 else { 2132 else {
2255 /* no flow control to remote device */ 2133 /* no flow control to remote device */
2256 MCR_Value = 0; 2134 mcr = 0;
2257 2135
2258 } 2136 }
2259 MOUT_Value = MCR_Value << 8; 2137 MOUT_Value = mcr << 8;
2260 2138
2261 if (bSet == 1) { 2139 if (bSet == 1) {
2262 /* flow control, box will inhibit xmit data if CTS line is 2140 /* flow control, box will inhibit xmit data if CTS line is
2263 * asserted */ 2141 * asserted */
2264 MSR_Value = SERIAL_MSR_CTS; 2142 msr = SERIAL_MSR_CTS;
2265 } else { 2143 } else {
2266 /* Box will not inhimbe xmit data due to CTS line */ 2144 /* Box will not inhimbe xmit data due to CTS line */
2267 MSR_Value = 0; 2145 msr = 0;
2268 } 2146 }
2269 MOUT_Value |= MSR_Value; 2147 MOUT_Value |= msr;
2270 2148
2271 status = 2149 status =
2272 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 2150 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2273 QT_HW_FLOW_CONTROL_MASK, 0x40, MOUT_Value, 2151 QT_HW_FLOW_CONTROL_MASK, 0x40, MOUT_Value,
2274 UartNumber, NULL, 0, 300); 2152 index, NULL, 0, 300);
2275 return status; 2153 return status;
2276 2154
2277} 2155}
2278 2156
2279static int BoxSetSW_FlowCtrl(struct usb_serial *serial, __u16 UartNumber, 2157static int BoxSetSW_FlowCtrl(struct usb_serial *serial, __u16 index,
2280 unsigned char stop_char, unsigned char start_char) 2158 unsigned char stop_char, unsigned char start_char)
2281{ 2159{
2282 __u16 nSWflowout; 2160 __u16 nSWflowout;
@@ -2288,17 +2166,17 @@ static int BoxSetSW_FlowCtrl(struct usb_serial *serial, __u16 UartNumber,
2288 result = 2166 result =
2289 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 2167 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2290 QT_SW_FLOW_CONTROL_MASK, 0x40, nSWflowout, 2168 QT_SW_FLOW_CONTROL_MASK, 0x40, nSWflowout,
2291 UartNumber, NULL, 0, 300); 2169 index, NULL, 0, 300);
2292 return result; 2170 return result;
2293 2171
2294} 2172}
2295static int BoxDisable_SW_FlowCtrl(struct usb_serial *serial, __u16 UartNumber) 2173static int BoxDisable_SW_FlowCtrl(struct usb_serial *serial, __u16 index)
2296{ 2174{
2297 int result; 2175 int result;
2298 2176
2299 result = 2177 result =
2300 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 2178 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2301 QT_SW_FLOW_CONTROL_DISABLE, 0x40, 0, UartNumber, 2179 QT_SW_FLOW_CONTROL_DISABLE, 0x40, 0, index,
2302 NULL, 0, 300); 2180 NULL, 0, 300);
2303 return result; 2181 return result;
2304 2182
@@ -2307,7 +2185,7 @@ static int BoxDisable_SW_FlowCtrl(struct usb_serial *serial, __u16 UartNumber)
2307static void serial_throttle(struct tty_struct *tty) 2185static void serial_throttle(struct tty_struct *tty)
2308{ 2186{
2309 struct usb_serial_port *port = 2187 struct usb_serial_port *port =
2310 (struct usb_serial_port *)tty->driver_data; 2188 tty->driver_data;
2311 struct usb_serial *serial = get_usb_serial(port, __func__); 2189 struct usb_serial *serial = get_usb_serial(port, __func__);
2312 mydbg("%s - port %d\n", __func__, port->number); 2190 mydbg("%s - port %d\n", __func__, port->number);
2313 2191
@@ -2334,7 +2212,7 @@ exit:
2334static void serial_unthrottle(struct tty_struct *tty) 2212static void serial_unthrottle(struct tty_struct *tty)
2335{ 2213{
2336 struct usb_serial_port *port = 2214 struct usb_serial_port *port =
2337 (struct usb_serial_port *)tty->driver_data; 2215 tty->driver_data;
2338 struct usb_serial *serial = get_usb_serial(port, __func__); 2216 struct usb_serial *serial = get_usb_serial(port, __func__);
2339 unsigned int result; 2217 unsigned int result;
2340 2218
@@ -2380,20 +2258,19 @@ exit:
2380 2258
2381static int serial_break(struct tty_struct *tty, int break_state) 2259static int serial_break(struct tty_struct *tty, int break_state)
2382{ 2260{
2383 struct usb_serial_port *port = 2261 struct usb_serial_port *port = tty->driver_data;
2384 (struct usb_serial_port *)tty->driver_data;
2385 struct usb_serial *serial = get_usb_serial(port, __func__); 2262 struct usb_serial *serial = get_usb_serial(port, __func__);
2386 __u16 UartNumber, Break_Value; 2263 u16 index, onoff;
2387 unsigned int result; 2264 unsigned int result;
2388 2265
2389 UartNumber = port->tty->index - serial->minor; 2266 index = tty->index - serial->minor;
2390 if (!serial) 2267 if (!serial)
2391 return -ENODEV; 2268 return -ENODEV;
2392 2269
2393 if (break_state == -1) 2270 if (break_state == -1)
2394 Break_Value = 1; 2271 onoff = 1;
2395 else 2272 else
2396 Break_Value = 0; 2273 onoff = 0;
2397 2274
2398 down(&port->sem); 2275 down(&port->sem);
2399 2276
@@ -2406,7 +2283,7 @@ static int serial_break(struct tty_struct *tty, int break_state)
2406 2283
2407 result = 2284 result =
2408 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 2285 usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
2409 QT_BREAK_CONTROL, 0x40, Break_Value, UartNumber, 2286 QT_BREAK_CONTROL, 0x40, onoff, index,
2410 NULL, 0, 300); 2287 NULL, 0, 300);
2411 2288
2412exit: 2289exit:
diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c
index 953684f729da..948156348478 100644
--- a/drivers/staging/slicoss/slicoss.c
+++ b/drivers/staging/slicoss/slicoss.c
@@ -371,9 +371,9 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev,
371 printk(KERN_DEBUG "%s\n", slic_proc_version); 371 printk(KERN_DEBUG "%s\n", slic_proc_version);
372 } 372 }
373 373
374 err = pci_set_dma_mask(pcidev, DMA_64BIT_MASK); 374 err = pci_set_dma_mask(pcidev, DMA_BIT_MASK(64));
375 if (err) { 375 if (err) {
376 err = pci_set_dma_mask(pcidev, DMA_32BIT_MASK); 376 err = pci_set_dma_mask(pcidev, DMA_BIT_MASK(32));
377 if (err) 377 if (err)
378 goto err_out_disable_pci; 378 goto err_out_disable_pci;
379 } 379 }
diff --git a/drivers/staging/sxg/sxg.c b/drivers/staging/sxg/sxg.c
index 0050a022010f..891f6e334672 100644
--- a/drivers/staging/sxg/sxg.c
+++ b/drivers/staging/sxg/sxg.c
@@ -934,16 +934,16 @@ static int sxg_entry_probe(struct pci_dev *pcidev,
934 934
935 pci_read_config_byte(pcidev, PCI_REVISION_ID, &revision_id); 935 pci_read_config_byte(pcidev, PCI_REVISION_ID, &revision_id);
936 936
937 if (!(err = pci_set_dma_mask(pcidev, DMA_64BIT_MASK))) { 937 if (!(err = pci_set_dma_mask(pcidev, DMA_BIT_MASK(64)))) {
938 DBG_ERROR("pci_set_dma_mask(DMA_64BIT_MASK) successful\n"); 938 DBG_ERROR("pci_set_dma_mask(DMA_BIT_MASK(64)) successful\n");
939 } else { 939 } else {
940 if ((err = pci_set_dma_mask(pcidev, DMA_32BIT_MASK))) { 940 if ((err = pci_set_dma_mask(pcidev, DMA_BIT_MASK(32)))) {
941 DBG_ERROR 941 DBG_ERROR
942 ("No usable DMA configuration, aborting err[%x]\n", 942 ("No usable DMA configuration, aborting err[%x]\n",
943 err); 943 err);
944 return err; 944 return err;
945 } 945 }
946 DBG_ERROR("pci_set_dma_mask(DMA_32BIT_MASK) successful\n"); 946 DBG_ERROR("pci_set_dma_mask(DMA_BIT_MASK(32)) successful\n");
947 } 947 }
948 948
949 DBG_ERROR("Call pci_request_regions\n"); 949 DBG_ERROR("Call pci_request_regions\n");
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index b3d5a23ab56f..869d47cb6db3 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -1358,6 +1358,9 @@ static struct usb_device_id acm_ids[] = {
1358 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */ 1358 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1359 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ 1359 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1360 }, 1360 },
1361 { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1362 .driver_info = SINGLE_RX_URB,
1363 },
1361 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */ 1364 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1362 .driver_info = SINGLE_RX_URB, /* firmware bug */ 1365 .driver_info = SINGLE_RX_URB, /* firmware bug */
1363 }, 1366 },
@@ -1493,4 +1496,4 @@ module_exit(acm_exit);
1493MODULE_AUTHOR( DRIVER_AUTHOR ); 1496MODULE_AUTHOR( DRIVER_AUTHOR );
1494MODULE_DESCRIPTION( DRIVER_DESC ); 1497MODULE_DESCRIPTION( DRIVER_DESC );
1495MODULE_LICENSE("GPL"); 1498MODULE_LICENSE("GPL");
1496 1499MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index f2618d17710d..c637207a1c80 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -622,7 +622,7 @@ static int ehci_run (struct usb_hcd *hcd)
622 ehci_writel(ehci, 0, &ehci->regs->segment); 622 ehci_writel(ehci, 0, &ehci->regs->segment);
623#if 0 623#if 0
624// this is deeply broken on almost all architectures 624// this is deeply broken on almost all architectures
625 if (!dma_set_mask(hcd->self.controller, DMA_64BIT_MASK)) 625 if (!dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64)))
626 ehci_info(ehci, "enabled 64bit DMA\n"); 626 ehci_info(ehci, "enabled 64bit DMA\n");
627#endif 627#endif
628 } 628 }
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index abb9a7706ec7..5aa8bce90e1f 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -108,7 +108,7 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
108 case 0x00d8: /* CK8 */ 108 case 0x00d8: /* CK8 */
109 case 0x00e8: /* CK8S */ 109 case 0x00e8: /* CK8S */
110 if (pci_set_consistent_dma_mask(pdev, 110 if (pci_set_consistent_dma_mask(pdev,
111 DMA_31BIT_MASK) < 0) 111 DMA_BIT_MASK(31)) < 0)
112 ehci_warn(ehci, "can't enable NVidia " 112 ehci_warn(ehci, "can't enable NVidia "
113 "workaround for >2GB RAM\n"); 113 "workaround for >2GB RAM\n");
114 break; 114 break;
diff --git a/drivers/usb/host/ehci-ps3.c b/drivers/usb/host/ehci-ps3.c
index 9c9da35abc6c..1ba9f9a8c308 100644
--- a/drivers/usb/host/ehci-ps3.c
+++ b/drivers/usb/host/ehci-ps3.c
@@ -81,7 +81,7 @@ static int ps3_ehci_probe(struct ps3_system_bus_device *dev)
81 int result; 81 int result;
82 struct usb_hcd *hcd; 82 struct usb_hcd *hcd;
83 unsigned int virq; 83 unsigned int virq;
84 static u64 dummy_mask = DMA_32BIT_MASK; 84 static u64 dummy_mask = DMA_BIT_MASK(32);
85 85
86 if (usb_disabled()) { 86 if (usb_disabled()) {
87 result = -ENODEV; 87 result = -ENODEV;
diff --git a/drivers/usb/host/ohci-ps3.c b/drivers/usb/host/ohci-ps3.c
index 3c1a3b5f89f1..3d1910317328 100644
--- a/drivers/usb/host/ohci-ps3.c
+++ b/drivers/usb/host/ohci-ps3.c
@@ -80,7 +80,7 @@ static int ps3_ohci_probe(struct ps3_system_bus_device *dev)
80 int result; 80 int result;
81 struct usb_hcd *hcd; 81 struct usb_hcd *hcd;
82 unsigned int virq; 82 unsigned int virq;
83 static u64 dummy_mask = DMA_32BIT_MASK; 83 static u64 dummy_mask = DMA_BIT_MASK(32);
84 84
85 if (usb_disabled()) { 85 if (usb_disabled()) {
86 result = -ENODEV; 86 result = -ENODEV;
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 1aed584be5eb..751a533a4347 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -79,6 +79,7 @@ static struct usb_device_id id_table [] = {
79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, 79 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) }, 80 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
81 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) }, 81 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
82 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
82 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) }, 83 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
83 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) }, 84 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
84 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) }, 85 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
index 54974f446a8c..1d7a22e3a9fd 100644
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -7,6 +7,10 @@
7 * (at your option) any later version. 7 * (at your option) any later version.
8 * 8 *
9 */ 9 */
10
11#define BENQ_VENDOR_ID 0x04a5
12#define BENQ_PRODUCT_ID_S81 0x4027
13
10#define PL2303_VENDOR_ID 0x067b 14#define PL2303_VENDOR_ID 0x067b
11#define PL2303_PRODUCT_ID 0x2303 15#define PL2303_PRODUCT_ID 0x2303
12#define PL2303_PRODUCT_ID_RSAQ2 0x04bb 16#define PL2303_PRODUCT_ID_RSAQ2 0x04bb
diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c
index 8b3cbc87adc7..69879e437940 100644
--- a/drivers/usb/serial/symbolserial.c
+++ b/drivers/usb/serial/symbolserial.c
@@ -139,14 +139,6 @@ static int symbol_open(struct tty_struct *tty, struct usb_serial_port *port,
139 priv->port = port; 139 priv->port = port;
140 spin_unlock_irqrestore(&priv->lock, flags); 140 spin_unlock_irqrestore(&priv->lock, flags);
141 141
142 /*
143 * Force low_latency on so that our tty_push actually forces the data
144 * through, otherwise it is scheduled, and with high data rates (like
145 * with OHCI) data can get lost.
146 */
147 if (tty)
148 tty->low_latency = 1;
149
150 /* Start reading from the device */ 142 /* Start reading from the device */
151 usb_fill_int_urb(priv->int_urb, priv->udev, 143 usb_fill_int_urb(priv->int_urb, priv->udev,
152 usb_rcvintpipe(priv->udev, priv->int_address), 144 usb_rcvintpipe(priv->udev, priv->int_address),
@@ -205,62 +197,6 @@ static void symbol_unthrottle(struct tty_struct *tty)
205 __func__, result); 197 __func__, result);
206} 198}
207 199
208static int symbol_ioctl(struct tty_struct *tty, struct file *file,
209 unsigned int cmd, unsigned long arg)
210{
211 struct usb_serial_port *port = tty->driver_data;
212 struct device *dev = &port->dev;
213
214 /*
215 * Right now we need to figure out what commands
216 * most userspace tools want to see for this driver,
217 * so just log the things.
218 */
219 switch (cmd) {
220 case TIOCSERGETLSR:
221 dev_info(dev, "%s: TIOCSERGETLSR\n", __func__);
222 break;
223
224 case TIOCGSERIAL:
225 dev_info(dev, "%s: TIOCGSERIAL\n", __func__);
226 break;
227
228 case TIOCMIWAIT:
229 dev_info(dev, "%s: TIOCMIWAIT\n", __func__);
230 break;
231
232 case TIOCGICOUNT:
233 dev_info(dev, "%s: TIOCGICOUNT\n", __func__);
234 break;
235 default:
236 dev_info(dev, "%s: unknown (%d)\n", __func__, cmd);
237 }
238 return -ENOIOCTLCMD;
239}
240
241static int symbol_tiocmget(struct tty_struct *tty, struct file *file)
242{
243 struct usb_serial_port *port = tty->driver_data;
244 struct device *dev = &port->dev;
245
246 /* TODO */
247 /* probably just need to shadow whatever was sent to us here */
248 dev_info(dev, "%s\n", __func__);
249 return 0;
250}
251
252static int symbol_tiocmset(struct tty_struct *tty, struct file *file,
253 unsigned int set, unsigned int clear)
254{
255 struct usb_serial_port *port = tty->driver_data;
256 struct device *dev = &port->dev;
257
258 /* TODO */
259 /* probably just need to shadow whatever was sent to us here */
260 dev_info(dev, "%s\n", __func__);
261 return 0;
262}
263
264static int symbol_startup(struct usb_serial *serial) 200static int symbol_startup(struct usb_serial *serial)
265{ 201{
266 struct symbol_private *priv; 202 struct symbol_private *priv;
@@ -367,9 +303,6 @@ static struct usb_serial_driver symbol_device = {
367 .shutdown = symbol_shutdown, 303 .shutdown = symbol_shutdown,
368 .throttle = symbol_throttle, 304 .throttle = symbol_throttle,
369 .unthrottle = symbol_unthrottle, 305 .unthrottle = symbol_unthrottle,
370 .ioctl = symbol_ioctl,
371 .tiocmget = symbol_tiocmget,
372 .tiocmset = symbol_tiocmset,
373}; 306};
374 307
375static int __init symbol_init(void) 308static int __init symbol_init(void)
diff --git a/drivers/uwb/whci.c b/drivers/uwb/whci.c
index 1f8964ed9882..2e2784627ad6 100644
--- a/drivers/uwb/whci.c
+++ b/drivers/uwb/whci.c
@@ -160,10 +160,10 @@ static int whci_probe(struct pci_dev *pci, const struct pci_device_id *id)
160 pci_enable_msi(pci); 160 pci_enable_msi(pci);
161 pci_set_master(pci); 161 pci_set_master(pci);
162 err = -ENXIO; 162 err = -ENXIO;
163 if (!pci_set_dma_mask(pci, DMA_64BIT_MASK)) 163 if (!pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
164 pci_set_consistent_dma_mask(pci, DMA_64BIT_MASK); 164 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
165 else if (!pci_set_dma_mask(pci, DMA_32BIT_MASK)) 165 else if (!pci_set_dma_mask(pci, DMA_BIT_MASK(32)))
166 pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK); 166 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
167 else 167 else
168 goto error_dma; 168 goto error_dma;
169 169
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index ffe2f2796e29..7826bdce4bbe 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -1550,6 +1550,7 @@ config FB_3DFX
1550 select FB_CFB_IMAGEBLIT 1550 select FB_CFB_IMAGEBLIT
1551 select FB_CFB_FILLRECT 1551 select FB_CFB_FILLRECT
1552 select FB_CFB_COPYAREA 1552 select FB_CFB_COPYAREA
1553 select FB_MODE_HELPERS
1553 help 1554 help
1554 This driver supports graphics boards with the 3Dfx Banshee, 1555 This driver supports graphics boards with the 3Dfx Banshee,
1555 Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have 1556 Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have
@@ -1565,6 +1566,14 @@ config FB_3DFX_ACCEL
1565 This will compile the 3Dfx Banshee/Voodoo3/VSA-100 frame buffer 1566 This will compile the 3Dfx Banshee/Voodoo3/VSA-100 frame buffer
1566 device driver with acceleration functions. 1567 device driver with acceleration functions.
1567 1568
1569config FB_3DFX_I2C
1570 bool "Enable DDC/I2C support"
1571 depends on FB_3DFX && EXPERIMENTAL
1572 select FB_DDC
1573 default y
1574 help
1575 Say Y here if you want DDC/I2C support for your 3dfx Voodoo3.
1576
1568config FB_VOODOO1 1577config FB_VOODOO1
1569 tristate "3Dfx Voodoo Graphics (sst1) support" 1578 tristate "3Dfx Voodoo Graphics (sst1) support"
1570 depends on FB && PCI 1579 depends on FB && PCI
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 72facb9eb7db..f9d19be05540 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -84,6 +84,15 @@ config LCD_TOSA
84 If you have an Sharp SL-6000 Zaurus say Y to enable a driver 84 If you have an Sharp SL-6000 Zaurus say Y to enable a driver
85 for its LCD. 85 for its LCD.
86 86
87config LCD_HP700
88 tristate "HP Jornada 700 series LCD Driver"
89 depends on LCD_CLASS_DEVICE
90 depends on SA1100_JORNADA720_SSP && !PREEMPT
91 default y
92 help
93 If you have an HP Jornada 700 series handheld (710/720/728)
94 say Y to enable LCD control driver.
95
87# 96#
88# Backlight 97# Backlight
89# 98#
@@ -157,6 +166,15 @@ config BACKLIGHT_HP680
157 If you have a HP Jornada 680, say y to enable the 166 If you have a HP Jornada 680, say y to enable the
158 backlight driver. 167 backlight driver.
159 168
169config BACKLIGHT_HP700
170 tristate "HP Jornada 700 series Backlight Driver"
171 depends on BACKLIGHT_CLASS_DEVICE
172 depends on SA1100_JORNADA720_SSP && !PREEMPT
173 default y
174 help
175 If you have an HP Jornada 700 series,
176 say Y to include backlight control driver.
177
160config BACKLIGHT_PROGEAR 178config BACKLIGHT_PROGEAR
161 tristate "Frontpath ProGear Backlight Driver" 179 tristate "Frontpath ProGear Backlight Driver"
162 depends on BACKLIGHT_CLASS_DEVICE && PCI && X86 180 depends on BACKLIGHT_CLASS_DEVICE && PCI && X86
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 63d759498165..4eb178c1d684 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -2,6 +2,7 @@
2 2
3obj-$(CONFIG_LCD_CLASS_DEVICE) += lcd.o 3obj-$(CONFIG_LCD_CLASS_DEVICE) += lcd.o
4obj-$(CONFIG_LCD_CORGI) += corgi_lcd.o 4obj-$(CONFIG_LCD_CORGI) += corgi_lcd.o
5obj-$(CONFIG_LCD_HP700) += jornada720_lcd.o
5obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o 6obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o
6obj-$(CONFIG_LCD_ILI9320) += ili9320.o 7obj-$(CONFIG_LCD_ILI9320) += ili9320.o
7obj-$(CONFIG_LCD_PLATFORM) += platform_lcd.o 8obj-$(CONFIG_LCD_PLATFORM) += platform_lcd.o
@@ -12,6 +13,7 @@ obj-$(CONFIG_LCD_TOSA) += tosa_lcd.o
12obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o 13obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
13obj-$(CONFIG_BACKLIGHT_ATMEL_PWM) += atmel-pwm-bl.o 14obj-$(CONFIG_BACKLIGHT_ATMEL_PWM) += atmel-pwm-bl.o
14obj-$(CONFIG_BACKLIGHT_GENERIC) += generic_bl.o 15obj-$(CONFIG_BACKLIGHT_GENERIC) += generic_bl.o
16obj-$(CONFIG_BACKLIGHT_HP700) += jornada720_bl.o
15obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o 17obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
16obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o 18obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
17obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o 19obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o
diff --git a/drivers/video/backlight/jornada720_bl.c b/drivers/video/backlight/jornada720_bl.c
new file mode 100644
index 000000000000..c3ebb6b41ce1
--- /dev/null
+++ b/drivers/video/backlight/jornada720_bl.c
@@ -0,0 +1,161 @@
1/*
2 *
3 * Backlight driver for HP Jornada 700 series (710/720/728)
4 * Copyright (C) 2006-2009 Kristoffer Ericson <kristoffer.ericson@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License version
8 * 2 or any later version as published by the Free Software Foundation.
9 *
10 */
11
12#include <linux/backlight.h>
13#include <linux/device.h>
14#include <linux/fb.h>
15#include <linux/kernel.h>
16#include <linux/module.h>
17#include <linux/platform_device.h>
18
19#include <mach/jornada720.h>
20#include <mach/hardware.h>
21
22#include <video/s1d13xxxfb.h>
23
24#define BL_MAX_BRIGHT 255
25#define BL_DEF_BRIGHT 25
26
27static int jornada_bl_get_brightness(struct backlight_device *bd)
28{
29 int ret;
30
31 /* check if backlight is on */
32 if (!(PPSR & PPC_LDD1))
33 return 0;
34
35 jornada_ssp_start();
36
37 /* cmd should return txdummy */
38 ret = jornada_ssp_byte(GETBRIGHTNESS);
39
40 if (jornada_ssp_byte(GETBRIGHTNESS) != TXDUMMY) {
41 printk(KERN_ERR "bl : get brightness timeout\n");
42 jornada_ssp_end();
43 return -ETIMEDOUT;
44 } else /* exchange txdummy for value */
45 ret = jornada_ssp_byte(TXDUMMY);
46
47 jornada_ssp_end();
48
49 return (BL_MAX_BRIGHT - ret);
50}
51
52static int jornada_bl_update_status(struct backlight_device *bd)
53{
54 int ret = 0;
55
56 jornada_ssp_start();
57
58 /* If backlight is off then really turn it off */
59 if ((bd->props.power != FB_BLANK_UNBLANK) || (bd->props.fb_blank != FB_BLANK_UNBLANK)) {
60 ret = jornada_ssp_byte(BRIGHTNESSOFF);
61 if (ret != TXDUMMY) {
62 printk(KERN_INFO "bl : brightness off timeout\n");
63 /* turn off backlight */
64 PPSR &= ~PPC_LDD1;
65 PPDR |= PPC_LDD1;
66 ret = -ETIMEDOUT;
67 }
68 } else /* turn on backlight */
69 PPSR |= PPC_LDD1;
70
71 /* send command to our mcu */
72 if (jornada_ssp_byte(SETBRIGHTNESS) != TXDUMMY) {
73 printk(KERN_INFO "bl : failed to set brightness\n");
74 ret = -ETIMEDOUT;
75 goto out
76 }
77
78 /* at this point we expect that the mcu has accepted
79 our command and is waiting for our new value
80 please note that maximum brightness is 255,
81 but due to physical layout it is equal to 0, so we simply
82 invert the value (MAX VALUE - NEW VALUE). */
83 if (jornada_ssp_byte(BL_MAX_BRIGHT - bd->props.brightness) != TXDUMMY) {
84 printk(KERN_ERR "bl : set brightness failed\n");
85 ret = -ETIMEDOUT;
86 }
87
88 /* If infact we get an TXDUMMY as output we are happy and dont
89 make any further comments about it */
90out:
91 jornada_ssp_end();
92
93 return ret;
94}
95
96static struct backlight_ops jornada_bl_ops = {
97 .get_brightness = jornada_bl_get_brightness,
98 .update_status = jornada_bl_update_status,
99 .options = BL_CORE_SUSPENDRESUME,
100};
101
102static int jornada_bl_probe(struct platform_device *pdev)
103{
104 int ret;
105 struct backlight_device *bd;
106
107 bd = backlight_device_register(S1D_DEVICENAME, &pdev->dev, NULL, &jornada_bl_ops);
108
109 if (IS_ERR(bd)) {
110 ret = PTR_ERR(bd);
111 printk(KERN_ERR "bl : failed to register device, err=%x\n", ret);
112 return ret;
113 }
114
115 bd->props.power = FB_BLANK_UNBLANK;
116 bd->props.brightness = BL_DEF_BRIGHT;
117 /* note. make sure max brightness is set otherwise
118 you will get seemingly non-related errors when
119 trying to change brightness */
120 bd->props.max_brightness = BL_MAX_BRIGHT;
121 jornada_bl_update_status(bd);
122
123 platform_set_drvdata(pdev, bd);
124 printk(KERN_INFO "HP Jornada 700 series backlight driver\n");
125
126 return 0;
127}
128
129static int jornada_bl_remove(struct platform_device *pdev)
130{
131 struct backlight_device *bd = platform_get_drvdata(pdev);
132
133 backlight_device_unregister(bd);
134
135 return 0;
136}
137
138static struct platform_driver jornada_bl_driver = {
139 .probe = jornada_bl_probe,
140 .remove = jornada_bl_remove,
141 .driver = {
142 .name = "jornada_bl",
143 },
144};
145
146int __init jornada_bl_init(void)
147{
148 return platform_driver_register(&jornada_bl_driver);
149}
150
151void __exit jornada_bl_exit(void)
152{
153 platform_driver_unregister(&jornada_bl_driver);
154}
155
156MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson>");
157MODULE_DESCRIPTION("HP Jornada 710/720/728 Backlight driver");
158MODULE_LICENSE("GPL");
159
160module_init(jornada_bl_init);
161module_exit(jornada_bl_exit);
diff --git a/drivers/video/backlight/jornada720_lcd.c b/drivers/video/backlight/jornada720_lcd.c
new file mode 100644
index 000000000000..cbbb167fd268
--- /dev/null
+++ b/drivers/video/backlight/jornada720_lcd.c
@@ -0,0 +1,153 @@
1/*
2 *
3 * LCD driver for HP Jornada 700 series (710/720/728)
4 * Copyright (C) 2006-2009 Kristoffer Ericson <kristoffer.ericson@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License version
8 * 2 or any later version as published by the Free Software Foundation.
9 *
10 */
11
12#include <linux/device.h>
13#include <linux/fb.h>
14#include <linux/kernel.h>
15#include <linux/lcd.h>
16#include <linux/module.h>
17#include <linux/platform_device.h>
18#include <linux/delay.h>
19
20#include <mach/jornada720.h>
21#include <mach/hardware.h>
22
23#include <video/s1d13xxxfb.h>
24
25#define LCD_MAX_CONTRAST 0xff
26#define LCD_DEF_CONTRAST 0x80
27
28static int jornada_lcd_get_power(struct lcd_device *dev)
29{
30 /* LDD2 in PPC = LCD POWER */
31 if (PPSR & PPC_LDD2)
32 return FB_BLANK_UNBLANK; /* PW ON */
33 else
34 return FB_BLANK_POWERDOWN; /* PW OFF */
35}
36
37static int jornada_lcd_get_contrast(struct lcd_device *dev)
38{
39 int ret;
40
41 if (jornada_lcd_get_power(dev) != FB_BLANK_UNBLANK)
42 return 0;
43
44 jornada_ssp_start();
45
46 if (jornada_ssp_byte(GETCONTRAST) != TXDUMMY) {
47 printk(KERN_ERR "lcd: get contrast failed\n");
48 jornada_ssp_end();
49 return -ETIMEDOUT;
50 } else {
51 ret = jornada_ssp_byte(TXDUMMY);
52 jornada_ssp_end();
53 return ret;
54 }
55}
56
57static int jornada_lcd_set_contrast(struct lcd_device *dev, int value)
58{
59 int ret;
60
61 jornada_ssp_start();
62
63 /* start by sending our set contrast cmd to mcu */
64 ret = jornada_ssp_byte(SETCONTRAST);
65
66 /* push the new value */
67 if (jornada_ssp_byte(value) != TXDUMMY) {
68 printk(KERN_ERR "lcd : set contrast failed\n");
69 jornada_ssp_end();
70 return -ETIMEDOUT;
71 }
72
73 /* if we get here we can assume everything went well */
74 jornada_ssp_end();
75
76 return 0;
77}
78
79static int jornada_lcd_set_power(struct lcd_device *dev, int power)
80{
81 if (power != FB_BLANK_UNBLANK) {
82 PPSR &= ~PPC_LDD2;
83 PPDR |= PPC_LDD2;
84 } else
85 PPSR |= PPC_LDD2;
86
87 return 0;
88}
89
90static struct lcd_ops jornada_lcd_props = {
91 .get_contrast = jornada_lcd_get_contrast,
92 .set_contrast = jornada_lcd_set_contrast,
93 .get_power = jornada_lcd_get_power,
94 .set_power = jornada_lcd_set_power,
95};
96
97static int jornada_lcd_probe(struct platform_device *pdev)
98{
99 struct lcd_device *lcd_device;
100 int ret;
101
102 lcd_device = lcd_device_register(S1D_DEVICENAME, &pdev->dev, NULL, &jornada_lcd_props);
103
104 if (IS_ERR(lcd_device)) {
105 ret = PTR_ERR(lcd_device);
106 printk(KERN_ERR "lcd : failed to register device\n");
107 return ret;
108 }
109
110 platform_set_drvdata(pdev, lcd_device);
111
112 /* lets set our default values */
113 jornada_lcd_set_contrast(lcd_device, LCD_DEF_CONTRAST);
114 jornada_lcd_set_power(lcd_device, FB_BLANK_UNBLANK);
115 /* give it some time to startup */
116 msleep(100);
117
118 return 0;
119}
120
121static int jornada_lcd_remove(struct platform_device *pdev)
122{
123 struct lcd_device *lcd_device = platform_get_drvdata(pdev);
124
125 lcd_device_unregister(lcd_device);
126
127 return 0;
128}
129
130static struct platform_driver jornada_lcd_driver = {
131 .probe = jornada_lcd_probe,
132 .remove = jornada_lcd_remove,
133 .driver = {
134 .name = "jornada_lcd",
135 },
136};
137
138int __init jornada_lcd_init(void)
139{
140 return platform_driver_register(&jornada_lcd_driver);
141}
142
143void __exit jornada_lcd_exit(void)
144{
145 platform_driver_unregister(&jornada_lcd_driver);
146}
147
148MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>");
149MODULE_DESCRIPTION("HP Jornada 710/720/728 LCD driver");
150MODULE_LICENSE("GPL");
151
152module_init(jornada_lcd_init);
153module_exit(jornada_lcd_exit);
diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c
index 65864c500455..3bb4c0a50c62 100644
--- a/drivers/video/backlight/mbp_nvidia_bl.c
+++ b/drivers/video/backlight/mbp_nvidia_bl.c
@@ -27,73 +27,192 @@
27 27
28static struct backlight_device *mbp_backlight_device; 28static struct backlight_device *mbp_backlight_device;
29 29
30static struct dmi_system_id __initdata mbp_device_table[] = { 30/* Structure to be passed to the DMI_MATCH function. */
31struct dmi_match_data {
32 /* I/O resource to allocate. */
33 unsigned long iostart;
34 unsigned long iolen;
35 /* Backlight operations structure. */
36 struct backlight_ops backlight_ops;
37};
38
39/* Module parameters. */
40static int debug;
41module_param_named(debug, debug, int, 0644);
42MODULE_PARM_DESC(debug, "Set to one to enable debugging messages.");
43
44/*
45 * Implementation for MacBooks with Intel chipset.
46 */
47static int intel_chipset_send_intensity(struct backlight_device *bd)
48{
49 int intensity = bd->props.brightness;
50
51 if (debug)
52 printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n",
53 intensity);
54
55 outb(0x04 | (intensity << 4), 0xb3);
56 outb(0xbf, 0xb2);
57 return 0;
58}
59
60static int intel_chipset_get_intensity(struct backlight_device *bd)
61{
62 int intensity;
63
64 outb(0x03, 0xb3);
65 outb(0xbf, 0xb2);
66 intensity = inb(0xb3) >> 4;
67
68 if (debug)
69 printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n",
70 intensity);
71
72 return intensity;
73}
74
75static const struct dmi_match_data intel_chipset_data = {
76 .iostart = 0xb2,
77 .iolen = 2,
78 .backlight_ops = {
79 .options = BL_CORE_SUSPENDRESUME,
80 .get_brightness = intel_chipset_get_intensity,
81 .update_status = intel_chipset_send_intensity,
82 }
83};
84
85/*
86 * Implementation for MacBooks with Nvidia chipset.
87 */
88static int nvidia_chipset_send_intensity(struct backlight_device *bd)
89{
90 int intensity = bd->props.brightness;
91
92 if (debug)
93 printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n",
94 intensity);
95
96 outb(0x04 | (intensity << 4), 0x52f);
97 outb(0xbf, 0x52e);
98 return 0;
99}
100
101static int nvidia_chipset_get_intensity(struct backlight_device *bd)
102{
103 int intensity;
104
105 outb(0x03, 0x52f);
106 outb(0xbf, 0x52e);
107 intensity = inb(0x52f) >> 4;
108
109 if (debug)
110 printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n",
111 intensity);
112
113 return intensity;
114}
115
116static const struct dmi_match_data nvidia_chipset_data = {
117 .iostart = 0x52e,
118 .iolen = 2,
119 .backlight_ops = {
120 .options = BL_CORE_SUSPENDRESUME,
121 .get_brightness = nvidia_chipset_get_intensity,
122 .update_status = nvidia_chipset_send_intensity
123 }
124};
125
126/*
127 * DMI matching.
128 */
129static /* const */ struct dmi_match_data *driver_data;
130
131static int mbp_dmi_match(const struct dmi_system_id *id)
132{
133 driver_data = id->driver_data;
134
135 printk(KERN_INFO "mbp_nvidia_bl: %s detected\n", id->ident);
136 return 1;
137}
138
139static const struct dmi_system_id __initdata mbp_device_table[] = {
31 { 140 {
32 .ident = "3,1", 141 .callback = mbp_dmi_match,
33 .matches = { 142 .ident = "MacBookPro 3,1",
143 .matches = {
34 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), 144 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
35 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"), 145 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"),
36 }, 146 },
147 .driver_data = (void *)&intel_chipset_data,
37 }, 148 },
38 { 149 {
39 .ident = "3,2", 150 .callback = mbp_dmi_match,
40 .matches = { 151 .ident = "MacBookPro 3,2",
152 .matches = {
41 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), 153 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
42 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,2"), 154 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,2"),
43 }, 155 },
156 .driver_data = (void *)&intel_chipset_data,
44 }, 157 },
45 { 158 {
46 .ident = "4,1", 159 .callback = mbp_dmi_match,
47 .matches = { 160 .ident = "MacBookPro 4,1",
161 .matches = {
48 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), 162 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
49 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4,1"), 163 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4,1"),
50 }, 164 },
165 .driver_data = (void *)&intel_chipset_data,
166 },
167 {
168 .callback = mbp_dmi_match,
169 .ident = "MacBook 5,1",
170 .matches = {
171 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
172 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5,1"),
173 },
174 .driver_data = (void *)&nvidia_chipset_data,
175 },
176 {
177 .callback = mbp_dmi_match,
178 .ident = "MacBookAir 2,1",
179 .matches = {
180 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
181 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2,1"),
182 },
183 .driver_data = (void *)&nvidia_chipset_data,
184 },
185 {
186 .callback = mbp_dmi_match,
187 .ident = "MacBookPro 5,1",
188 .matches = {
189 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
190 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,1"),
191 },
192 .driver_data = (void *)&nvidia_chipset_data,
51 }, 193 },
52 { } 194 { }
53}; 195};
54 196
55static int mbp_send_intensity(struct backlight_device *bd)
56{
57 int intensity = bd->props.brightness;
58
59 outb(0x04 | (intensity << 4), 0xb3);
60 outb(0xbf, 0xb2);
61
62 return 0;
63}
64
65static int mbp_get_intensity(struct backlight_device *bd)
66{
67 outb(0x03, 0xb3);
68 outb(0xbf, 0xb2);
69 return inb(0xb3) >> 4;
70}
71
72static struct backlight_ops mbp_ops = {
73 .options = BL_CORE_SUSPENDRESUME,
74 .get_brightness = mbp_get_intensity,
75 .update_status = mbp_send_intensity,
76};
77
78static int __init mbp_init(void) 197static int __init mbp_init(void)
79{ 198{
80 if (!dmi_check_system(mbp_device_table)) 199 if (!dmi_check_system(mbp_device_table))
81 return -ENODEV; 200 return -ENODEV;
82 201
83 if (!request_region(0xb2, 2, "Macbook Pro backlight")) 202 if (!request_region(driver_data->iostart, driver_data->iolen,
203 "Macbook Pro backlight"))
84 return -ENXIO; 204 return -ENXIO;
85 205
86 mbp_backlight_device = backlight_device_register("mbp_backlight", 206 mbp_backlight_device = backlight_device_register("mbp_backlight",
87 NULL, NULL, 207 NULL, NULL, &driver_data->backlight_ops);
88 &mbp_ops);
89 if (IS_ERR(mbp_backlight_device)) { 208 if (IS_ERR(mbp_backlight_device)) {
90 release_region(0xb2, 2); 209 release_region(driver_data->iostart, driver_data->iolen);
91 return PTR_ERR(mbp_backlight_device); 210 return PTR_ERR(mbp_backlight_device);
92 } 211 }
93 212
94 mbp_backlight_device->props.max_brightness = 15; 213 mbp_backlight_device->props.max_brightness = 15;
95 mbp_backlight_device->props.brightness = 214 mbp_backlight_device->props.brightness =
96 mbp_get_intensity(mbp_backlight_device); 215 driver_data->backlight_ops.get_brightness(mbp_backlight_device);
97 backlight_update_status(mbp_backlight_device); 216 backlight_update_status(mbp_backlight_device);
98 217
99 return 0; 218 return 0;
@@ -103,7 +222,7 @@ static void __exit mbp_exit(void)
103{ 222{
104 backlight_device_unregister(mbp_backlight_device); 223 backlight_device_unregister(mbp_backlight_device);
105 224
106 release_region(0xb2, 2); 225 release_region(driver_data->iostart, driver_data->iolen);
107} 226}
108 227
109module_init(mbp_init); 228module_init(mbp_init);
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index ea07258565f0..e641584e212e 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * simple PWM based backlight control, board code has to setup 4 * simple PWM based backlight control, board code has to setup
5 * 1) pin configuration so PWM waveforms can output 5 * 1) pin configuration so PWM waveforms can output
6 * 2) platform_data casts to the PWM id (0/1/2/3 on PXA) 6 * 2) platform_data being correctly configured
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
@@ -97,7 +97,7 @@ static int pwm_backlight_probe(struct platform_device *pdev)
97 } else 97 } else
98 dev_dbg(&pdev->dev, "got pwm for backlight\n"); 98 dev_dbg(&pdev->dev, "got pwm for backlight\n");
99 99
100 bl = backlight_device_register(pdev->name, &pdev->dev, 100 bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev,
101 pb, &pwm_backlight_ops); 101 pb, &pwm_backlight_ops);
102 if (IS_ERR(bl)) { 102 if (IS_ERR(bl)) {
103 dev_err(&pdev->dev, "failed to register backlight\n"); 103 dev_err(&pdev->dev, "failed to register backlight\n");
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c
index fb51197d1c98..f153c581cbd7 100644
--- a/drivers/video/fsl-diu-fb.c
+++ b/drivers/video/fsl-diu-fb.c
@@ -1352,14 +1352,15 @@ static int fsl_diu_resume(struct of_device *ofdev)
1352#endif /* CONFIG_PM */ 1352#endif /* CONFIG_PM */
1353 1353
1354/* Align to 64-bit(8-byte), 32-byte, etc. */ 1354/* Align to 64-bit(8-byte), 32-byte, etc. */
1355static int allocate_buf(struct diu_addr *buf, u32 size, u32 bytes_align) 1355static int allocate_buf(struct device *dev, struct diu_addr *buf, u32 size,
1356 u32 bytes_align)
1356{ 1357{
1357 u32 offset, ssize; 1358 u32 offset, ssize;
1358 u32 mask; 1359 u32 mask;
1359 dma_addr_t paddr = 0; 1360 dma_addr_t paddr = 0;
1360 1361
1361 ssize = size + bytes_align; 1362 ssize = size + bytes_align;
1362 buf->vaddr = dma_alloc_coherent(NULL, ssize, &paddr, GFP_DMA | 1363 buf->vaddr = dma_alloc_coherent(dev, ssize, &paddr, GFP_DMA |
1363 __GFP_ZERO); 1364 __GFP_ZERO);
1364 if (!buf->vaddr) 1365 if (!buf->vaddr)
1365 return -ENOMEM; 1366 return -ENOMEM;
@@ -1376,9 +1377,10 @@ static int allocate_buf(struct diu_addr *buf, u32 size, u32 bytes_align)
1376 return 0; 1377 return 0;
1377} 1378}
1378 1379
1379static void free_buf(struct diu_addr *buf, u32 size, u32 bytes_align) 1380static void free_buf(struct device *dev, struct diu_addr *buf, u32 size,
1381 u32 bytes_align)
1380{ 1382{
1381 dma_free_coherent(NULL, size + bytes_align, 1383 dma_free_coherent(dev, size + bytes_align,
1382 buf->vaddr, (buf->paddr - buf->offset)); 1384 buf->vaddr, (buf->paddr - buf->offset));
1383 return; 1385 return;
1384} 1386}
@@ -1476,17 +1478,19 @@ static int __devinit fsl_diu_probe(struct of_device *ofdev,
1476 machine_data->monitor_port = monitor_port; 1478 machine_data->monitor_port = monitor_port;
1477 1479
1478 /* Area descriptor memory pool aligns to 64-bit boundary */ 1480 /* Area descriptor memory pool aligns to 64-bit boundary */
1479 if (allocate_buf(&pool.ad, sizeof(struct diu_ad) * FSL_AOI_NUM, 8)) 1481 if (allocate_buf(&ofdev->dev, &pool.ad,
1482 sizeof(struct diu_ad) * FSL_AOI_NUM, 8))
1480 return -ENOMEM; 1483 return -ENOMEM;
1481 1484
1482 /* Get memory for Gamma Table - 32-byte aligned memory */ 1485 /* Get memory for Gamma Table - 32-byte aligned memory */
1483 if (allocate_buf(&pool.gamma, 768, 32)) { 1486 if (allocate_buf(&ofdev->dev, &pool.gamma, 768, 32)) {
1484 ret = -ENOMEM; 1487 ret = -ENOMEM;
1485 goto error; 1488 goto error;
1486 } 1489 }
1487 1490
1488 /* For performance, cursor bitmap buffer aligns to 32-byte boundary */ 1491 /* For performance, cursor bitmap buffer aligns to 32-byte boundary */
1489 if (allocate_buf(&pool.cursor, MAX_CURS * MAX_CURS * 2, 32)) { 1492 if (allocate_buf(&ofdev->dev, &pool.cursor, MAX_CURS * MAX_CURS * 2,
1493 32)) {
1490 ret = -ENOMEM; 1494 ret = -ENOMEM;
1491 goto error; 1495 goto error;
1492 } 1496 }
@@ -1554,11 +1558,13 @@ error:
1554 i > 0; i--) 1558 i > 0; i--)
1555 uninstall_fb(machine_data->fsl_diu_info[i - 1]); 1559 uninstall_fb(machine_data->fsl_diu_info[i - 1]);
1556 if (pool.ad.vaddr) 1560 if (pool.ad.vaddr)
1557 free_buf(&pool.ad, sizeof(struct diu_ad) * FSL_AOI_NUM, 8); 1561 free_buf(&ofdev->dev, &pool.ad,
1562 sizeof(struct diu_ad) * FSL_AOI_NUM, 8);
1558 if (pool.gamma.vaddr) 1563 if (pool.gamma.vaddr)
1559 free_buf(&pool.gamma, 768, 32); 1564 free_buf(&ofdev->dev, &pool.gamma, 768, 32);
1560 if (pool.cursor.vaddr) 1565 if (pool.cursor.vaddr)
1561 free_buf(&pool.cursor, MAX_CURS * MAX_CURS * 2, 32); 1566 free_buf(&ofdev->dev, &pool.cursor, MAX_CURS * MAX_CURS * 2,
1567 32);
1562 if (machine_data->dummy_aoi_virt) 1568 if (machine_data->dummy_aoi_virt)
1563 fsl_diu_free(machine_data->dummy_aoi_virt, 64); 1569 fsl_diu_free(machine_data->dummy_aoi_virt, 64);
1564 iounmap(dr.diu_reg); 1570 iounmap(dr.diu_reg);
@@ -1584,11 +1590,13 @@ static int fsl_diu_remove(struct of_device *ofdev)
1584 for (i = ARRAY_SIZE(machine_data->fsl_diu_info); i > 0; i--) 1590 for (i = ARRAY_SIZE(machine_data->fsl_diu_info); i > 0; i--)
1585 uninstall_fb(machine_data->fsl_diu_info[i - 1]); 1591 uninstall_fb(machine_data->fsl_diu_info[i - 1]);
1586 if (pool.ad.vaddr) 1592 if (pool.ad.vaddr)
1587 free_buf(&pool.ad, sizeof(struct diu_ad) * FSL_AOI_NUM, 8); 1593 free_buf(&ofdev->dev, &pool.ad,
1594 sizeof(struct diu_ad) * FSL_AOI_NUM, 8);
1588 if (pool.gamma.vaddr) 1595 if (pool.gamma.vaddr)
1589 free_buf(&pool.gamma, 768, 32); 1596 free_buf(&ofdev->dev, &pool.gamma, 768, 32);
1590 if (pool.cursor.vaddr) 1597 if (pool.cursor.vaddr)
1591 free_buf(&pool.cursor, MAX_CURS * MAX_CURS * 2, 32); 1598 free_buf(&ofdev->dev, &pool.cursor, MAX_CURS * MAX_CURS * 2,
1599 32);
1592 if (machine_data->dummy_aoi_virt) 1600 if (machine_data->dummy_aoi_virt)
1593 fsl_diu_free(machine_data->dummy_aoi_virt, 64); 1601 fsl_diu_free(machine_data->dummy_aoi_virt, 64);
1594 iounmap(dr.diu_reg); 1602 iounmap(dr.diu_reg);
diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c
index fa1a512ce030..21b3692092f2 100644
--- a/drivers/video/mx3fb.c
+++ b/drivers/video/mx3fb.c
@@ -400,12 +400,12 @@ static void sdc_disable_channel(struct mx3fb_info *mx3_fbi)
400static int sdc_set_window_pos(struct mx3fb_data *mx3fb, enum ipu_channel channel, 400static int sdc_set_window_pos(struct mx3fb_data *mx3fb, enum ipu_channel channel,
401 int16_t x_pos, int16_t y_pos) 401 int16_t x_pos, int16_t y_pos)
402{ 402{
403 x_pos += mx3fb->h_start_width;
404 y_pos += mx3fb->v_start_width;
405
406 if (channel != IDMAC_SDC_0) 403 if (channel != IDMAC_SDC_0)
407 return -EINVAL; 404 return -EINVAL;
408 405
406 x_pos += mx3fb->h_start_width;
407 y_pos += mx3fb->v_start_width;
408
409 mx3fb_write_reg(mx3fb, (x_pos << 16) | y_pos, SDC_BG_POS); 409 mx3fb_write_reg(mx3fb, (x_pos << 16) | y_pos, SDC_BG_POS);
410 return 0; 410 return 0;
411} 411}
@@ -491,11 +491,13 @@ static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel,
491 * 2^4 to get fractional part, as long as we stay under ~250MHz and on 491 * 2^4 to get fractional part, as long as we stay under ~250MHz and on
492 * i.MX31 it (HSP_CLK) is <= 178MHz. Currently 128.267MHz 492 * i.MX31 it (HSP_CLK) is <= 178MHz. Currently 128.267MHz
493 */ 493 */
494 dev_dbg(mx3fb->dev, "pixel clk = %d\n", pixel_clk);
495
496 ipu_clk = clk_get(mx3fb->dev, NULL); 494 ipu_clk = clk_get(mx3fb->dev, NULL);
497 div = clk_get_rate(ipu_clk) * 16 / pixel_clk; 495 if (!IS_ERR(ipu_clk)) {
498 clk_put(ipu_clk); 496 div = clk_get_rate(ipu_clk) * 16 / pixel_clk;
497 clk_put(ipu_clk);
498 } else {
499 div = 0;
500 }
499 501
500 if (div < 0x40) { /* Divider less than 4 */ 502 if (div < 0x40) { /* Divider less than 4 */
501 dev_dbg(mx3fb->dev, 503 dev_dbg(mx3fb->dev,
@@ -503,6 +505,9 @@ static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel,
503 div = 0x40; 505 div = 0x40;
504 } 506 }
505 507
508 dev_dbg(mx3fb->dev, "pixel clk = %u, divider %u.%u\n",
509 pixel_clk, div >> 4, (div & 7) * 125);
510
506 spin_lock_irqsave(&mx3fb->lock, lock_flags); 511 spin_lock_irqsave(&mx3fb->lock, lock_flags);
507 512
508 /* 513 /*
@@ -515,16 +520,16 @@ static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel,
515 /* DI settings */ 520 /* DI settings */
516 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF) & 0x78FFFFFF; 521 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF) & 0x78FFFFFF;
517 old_conf |= sig.datamask_en << DI_D3_DATAMSK_SHIFT | 522 old_conf |= sig.datamask_en << DI_D3_DATAMSK_SHIFT |
518 sig.clksel_en << DI_D3_CLK_SEL_SHIFT | 523 sig.clksel_en << DI_D3_CLK_SEL_SHIFT |
519 sig.clkidle_en << DI_D3_CLK_IDLE_SHIFT; 524 sig.clkidle_en << DI_D3_CLK_IDLE_SHIFT;
520 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_IF_CONF); 525 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_IF_CONF);
521 526
522 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL) & 0xE0FFFFFF; 527 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL) & 0xE0FFFFFF;
523 old_conf |= sig.data_pol << DI_D3_DATA_POL_SHIFT | 528 old_conf |= sig.data_pol << DI_D3_DATA_POL_SHIFT |
524 sig.clk_pol << DI_D3_CLK_POL_SHIFT | 529 sig.clk_pol << DI_D3_CLK_POL_SHIFT |
525 sig.enable_pol << DI_D3_DRDY_SHARP_POL_SHIFT | 530 sig.enable_pol << DI_D3_DRDY_SHARP_POL_SHIFT |
526 sig.Hsync_pol << DI_D3_HSYNC_POL_SHIFT | 531 sig.Hsync_pol << DI_D3_HSYNC_POL_SHIFT |
527 sig.Vsync_pol << DI_D3_VSYNC_POL_SHIFT; 532 sig.Vsync_pol << DI_D3_VSYNC_POL_SHIFT;
528 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_SIG_POL); 533 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_SIG_POL);
529 534
530 switch (pixel_fmt) { 535 switch (pixel_fmt) {
@@ -721,7 +726,6 @@ static int mx3fb_set_par(struct fb_info *fbi)
721 struct idmac_channel *ichan = mx3_fbi->idmac_channel; 726 struct idmac_channel *ichan = mx3_fbi->idmac_channel;
722 struct idmac_video_param *video = &ichan->params.video; 727 struct idmac_video_param *video = &ichan->params.video;
723 struct scatterlist *sg = mx3_fbi->sg; 728 struct scatterlist *sg = mx3_fbi->sg;
724 size_t screen_size;
725 729
726 dev_dbg(mx3fb->dev, "%s [%c]\n", __func__, list_empty(&ichan->queue) ? '-' : '+'); 730 dev_dbg(mx3fb->dev, "%s [%c]\n", __func__, list_empty(&ichan->queue) ? '-' : '+');
727 731
@@ -745,12 +749,10 @@ static int mx3fb_set_par(struct fb_info *fbi)
745 } 749 }
746 } 750 }
747 751
748 screen_size = fbi->fix.line_length * fbi->var.yres;
749
750 sg_init_table(&sg[0], 1); 752 sg_init_table(&sg[0], 1);
751 sg_init_table(&sg[1], 1); 753 sg_init_table(&sg[1], 1);
752 754
753 sg_dma_address(&sg[0]) = fbi->fix.smem_start; 755 sg_dma_address(&sg[0]) = fbi->fix.smem_start;
754 sg_set_page(&sg[0], virt_to_page(fbi->screen_base), 756 sg_set_page(&sg[0], virt_to_page(fbi->screen_base),
755 fbi->fix.smem_len, 757 fbi->fix.smem_len,
756 offset_in_page(fbi->screen_base)); 758 offset_in_page(fbi->screen_base));
@@ -927,7 +929,7 @@ static int mx3fb_setcolreg(unsigned int regno, unsigned int red,
927 u32 val; 929 u32 val;
928 int ret = 1; 930 int ret = 1;
929 931
930 dev_dbg(fbi->device, "%s\n", __func__); 932 dev_dbg(fbi->device, "%s, regno = %u\n", __func__, regno);
931 933
932 mutex_lock(&mx3_fbi->mutex); 934 mutex_lock(&mx3_fbi->mutex);
933 /* 935 /*
@@ -973,9 +975,8 @@ static int mx3fb_blank(int blank, struct fb_info *fbi)
973 struct mx3fb_info *mx3_fbi = fbi->par; 975 struct mx3fb_info *mx3_fbi = fbi->par;
974 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; 976 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;
975 977
976 dev_dbg(fbi->device, "%s\n", __func__); 978 dev_dbg(fbi->device, "%s, blank = %d, base %p, len %u\n", __func__,
977 979 blank, fbi->screen_base, fbi->fix.smem_len);
978 dev_dbg(fbi->device, "blank = %d\n", blank);
979 980
980 if (mx3_fbi->blank == blank) 981 if (mx3_fbi->blank == blank)
981 return 0; 982 return 0;
@@ -988,8 +989,11 @@ static int mx3fb_blank(int blank, struct fb_info *fbi)
988 case FB_BLANK_VSYNC_SUSPEND: 989 case FB_BLANK_VSYNC_SUSPEND:
989 case FB_BLANK_HSYNC_SUSPEND: 990 case FB_BLANK_HSYNC_SUSPEND:
990 case FB_BLANK_NORMAL: 991 case FB_BLANK_NORMAL:
991 sdc_disable_channel(mx3_fbi);
992 sdc_set_brightness(mx3fb, 0); 992 sdc_set_brightness(mx3fb, 0);
993 memset((char *)fbi->screen_base, 0, fbi->fix.smem_len);
994 /* Give LCD time to update - enough for 50 and 60 Hz */
995 msleep(25);
996 sdc_disable_channel(mx3_fbi);
993 break; 997 break;
994 case FB_BLANK_UNBLANK: 998 case FB_BLANK_UNBLANK:
995 sdc_enable_channel(mx3_fbi); 999 sdc_enable_channel(mx3_fbi);
@@ -1063,6 +1067,7 @@ static int mx3fb_pan_display(struct fb_var_screeninfo *var,
1063 mutex_unlock(&mx3_fbi->mutex); 1067 mutex_unlock(&mx3_fbi->mutex);
1064 dev_info(fbi->device, "Panning failed due to %s\n", ret < 0 ? 1068 dev_info(fbi->device, "Panning failed due to %s\n", ret < 0 ?
1065 "user interrupt" : "timeout"); 1069 "user interrupt" : "timeout");
1070 disable_irq(mx3_fbi->idmac_channel->eof_irq);
1066 return ret ? : -ETIMEDOUT; 1071 return ret ? : -ETIMEDOUT;
1067 } 1072 }
1068 1073
@@ -1073,6 +1078,9 @@ static int mx3fb_pan_display(struct fb_var_screeninfo *var,
1073 virt_to_page(fbi->screen_base + offset), fbi->fix.smem_len, 1078 virt_to_page(fbi->screen_base + offset), fbi->fix.smem_len,
1074 offset_in_page(fbi->screen_base + offset)); 1079 offset_in_page(fbi->screen_base + offset));
1075 1080
1081 if (mx3_fbi->txd)
1082 async_tx_ack(mx3_fbi->txd);
1083
1076 txd = dma_chan->device->device_prep_slave_sg(dma_chan, sg + 1084 txd = dma_chan->device->device_prep_slave_sg(dma_chan, sg +
1077 mx3_fbi->cur_ipu_buf, 1, DMA_TO_DEVICE, DMA_PREP_INTERRUPT); 1085 mx3_fbi->cur_ipu_buf, 1, DMA_TO_DEVICE, DMA_PREP_INTERRUPT);
1078 if (!txd) { 1086 if (!txd) {
@@ -1099,8 +1107,6 @@ static int mx3fb_pan_display(struct fb_var_screeninfo *var,
1099 return -EIO; 1107 return -EIO;
1100 } 1108 }
1101 1109
1102 if (mx3_fbi->txd)
1103 async_tx_ack(mx3_fbi->txd);
1104 mx3_fbi->txd = txd; 1110 mx3_fbi->txd = txd;
1105 1111
1106 fbi->var.xoffset = var->xoffset; 1112 fbi->var.xoffset = var->xoffset;
@@ -1506,7 +1512,7 @@ static struct platform_driver mx3fb_driver = {
1506 * example: 1512 * example:
1507 * video=mx3fb:bpp=16 1513 * video=mx3fb:bpp=16
1508 */ 1514 */
1509static int mx3fb_setup(void) 1515static int __init mx3fb_setup(void)
1510{ 1516{
1511#ifndef MODULE 1517#ifndef MODULE
1512 char *opt, *options = NULL; 1518 char *opt, *options = NULL;
diff --git a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c
index ee64771fbe3d..89f231dc443f 100644
--- a/drivers/video/tdfxfb.c
+++ b/drivers/video/tdfxfb.c
@@ -10,6 +10,12 @@
10 * Created : Thu Sep 23 18:17:43 1999, hmallat 10 * Created : Thu Sep 23 18:17:43 1999, hmallat
11 * Last modified: Tue Nov 2 21:19:47 1999, hmallat 11 * Last modified: Tue Nov 2 21:19:47 1999, hmallat
12 * 12 *
13 * I2C part copied from the i2c-voodoo3.c driver by:
14 * Frodo Looijaard <frodol@dds.nl>,
15 * Philip Edelbrock <phil@netroedge.com>,
16 * Ralph Metzler <rjkm@thp.uni-koeln.de>, and
17 * Mark D. Studebaker <mdsxyz123@yahoo.com>
18 *
13 * Lots of the information here comes from the Daryll Strauss' Banshee 19 * Lots of the information here comes from the Daryll Strauss' Banshee
14 * patches to the XF86 server, and the rest comes from the 3dfx 20 * patches to the XF86 server, and the rest comes from the 3dfx
15 * Banshee specification. I'm very much indebted to Daryll for his 21 * Banshee specification. I'm very much indebted to Daryll for his
@@ -481,6 +487,12 @@ static int tdfxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
481 return -EINVAL; 487 return -EINVAL;
482 } 488 }
483 489
490 if (info->monspecs.hfmax && info->monspecs.vfmax &&
491 info->monspecs.dclkmax && fb_validate_mode(var, info) < 0) {
492 DPRINTK("mode outside monitor's specs\n");
493 return -EINVAL;
494 }
495
484 var->xres = (var->xres + 15) & ~15; /* could sometimes be 8 */ 496 var->xres = (var->xres + 15) & ~15; /* could sometimes be 8 */
485 lpitch = var->xres * ((var->bits_per_pixel + 7) >> 3); 497 lpitch = var->xres * ((var->bits_per_pixel + 7) >> 3);
486 498
@@ -1167,6 +1179,207 @@ static struct fb_ops tdfxfb_ops = {
1167#endif 1179#endif
1168}; 1180};
1169 1181
1182#ifdef CONFIG_FB_3DFX_I2C
1183/* The voo GPIO registers don't have individual masks for each bit
1184 so we always have to read before writing. */
1185
1186static void tdfxfb_i2c_setscl(void *data, int val)
1187{
1188 struct tdfxfb_i2c_chan *chan = data;
1189 struct tdfx_par *par = chan->par;
1190 unsigned int r;
1191
1192 r = tdfx_inl(par, VIDSERPARPORT);
1193 if (val)
1194 r |= I2C_SCL_OUT;
1195 else
1196 r &= ~I2C_SCL_OUT;
1197 tdfx_outl(par, VIDSERPARPORT, r);
1198 tdfx_inl(par, VIDSERPARPORT); /* flush posted write */
1199}
1200
1201static void tdfxfb_i2c_setsda(void *data, int val)
1202{
1203 struct tdfxfb_i2c_chan *chan = data;
1204 struct tdfx_par *par = chan->par;
1205 unsigned int r;
1206
1207 r = tdfx_inl(par, VIDSERPARPORT);
1208 if (val)
1209 r |= I2C_SDA_OUT;
1210 else
1211 r &= ~I2C_SDA_OUT;
1212 tdfx_outl(par, VIDSERPARPORT, r);
1213 tdfx_inl(par, VIDSERPARPORT); /* flush posted write */
1214}
1215
1216/* The GPIO pins are open drain, so the pins always remain outputs.
1217 We rely on the i2c-algo-bit routines to set the pins high before
1218 reading the input from other chips. */
1219
1220static int tdfxfb_i2c_getscl(void *data)
1221{
1222 struct tdfxfb_i2c_chan *chan = data;
1223 struct tdfx_par *par = chan->par;
1224
1225 return (0 != (tdfx_inl(par, VIDSERPARPORT) & I2C_SCL_IN));
1226}
1227
1228static int tdfxfb_i2c_getsda(void *data)
1229{
1230 struct tdfxfb_i2c_chan *chan = data;
1231 struct tdfx_par *par = chan->par;
1232
1233 return (0 != (tdfx_inl(par, VIDSERPARPORT) & I2C_SDA_IN));
1234}
1235
1236static void tdfxfb_ddc_setscl(void *data, int val)
1237{
1238 struct tdfxfb_i2c_chan *chan = data;
1239 struct tdfx_par *par = chan->par;
1240 unsigned int r;
1241
1242 r = tdfx_inl(par, VIDSERPARPORT);
1243 if (val)
1244 r |= DDC_SCL_OUT;
1245 else
1246 r &= ~DDC_SCL_OUT;
1247 tdfx_outl(par, VIDSERPARPORT, r);
1248 tdfx_inl(par, VIDSERPARPORT); /* flush posted write */
1249}
1250
1251static void tdfxfb_ddc_setsda(void *data, int val)
1252{
1253 struct tdfxfb_i2c_chan *chan = data;
1254 struct tdfx_par *par = chan->par;
1255 unsigned int r;
1256
1257 r = tdfx_inl(par, VIDSERPARPORT);
1258 if (val)
1259 r |= DDC_SDA_OUT;
1260 else
1261 r &= ~DDC_SDA_OUT;
1262 tdfx_outl(par, VIDSERPARPORT, r);
1263 tdfx_inl(par, VIDSERPARPORT); /* flush posted write */
1264}
1265
1266static int tdfxfb_ddc_getscl(void *data)
1267{
1268 struct tdfxfb_i2c_chan *chan = data;
1269 struct tdfx_par *par = chan->par;
1270
1271 return (0 != (tdfx_inl(par, VIDSERPARPORT) & DDC_SCL_IN));
1272}
1273
1274static int tdfxfb_ddc_getsda(void *data)
1275{
1276 struct tdfxfb_i2c_chan *chan = data;
1277 struct tdfx_par *par = chan->par;
1278
1279 return (0 != (tdfx_inl(par, VIDSERPARPORT) & DDC_SDA_IN));
1280}
1281
1282static int __devinit tdfxfb_setup_ddc_bus(struct tdfxfb_i2c_chan *chan,
1283 const char *name, struct device *dev)
1284{
1285 int rc;
1286
1287 strlcpy(chan->adapter.name, name, sizeof(chan->adapter.name));
1288 chan->adapter.owner = THIS_MODULE;
1289 chan->adapter.class = I2C_CLASS_DDC;
1290 chan->adapter.algo_data = &chan->algo;
1291 chan->adapter.dev.parent = dev;
1292 chan->algo.setsda = tdfxfb_ddc_setsda;
1293 chan->algo.setscl = tdfxfb_ddc_setscl;
1294 chan->algo.getsda = tdfxfb_ddc_getsda;
1295 chan->algo.getscl = tdfxfb_ddc_getscl;
1296 chan->algo.udelay = 10;
1297 chan->algo.timeout = msecs_to_jiffies(500);
1298 chan->algo.data = chan;
1299
1300 i2c_set_adapdata(&chan->adapter, chan);
1301
1302 rc = i2c_bit_add_bus(&chan->adapter);
1303 if (rc == 0)
1304 DPRINTK("I2C bus %s registered.\n", name);
1305 else
1306 chan->par = NULL;
1307
1308 return rc;
1309}
1310
1311static int __devinit tdfxfb_setup_i2c_bus(struct tdfxfb_i2c_chan *chan,
1312 const char *name, struct device *dev)
1313{
1314 int rc;
1315
1316 strlcpy(chan->adapter.name, name, sizeof(chan->adapter.name));
1317 chan->adapter.owner = THIS_MODULE;
1318 chan->adapter.class = I2C_CLASS_TV_ANALOG;
1319 chan->adapter.algo_data = &chan->algo;
1320 chan->adapter.dev.parent = dev;
1321 chan->algo.setsda = tdfxfb_i2c_setsda;
1322 chan->algo.setscl = tdfxfb_i2c_setscl;
1323 chan->algo.getsda = tdfxfb_i2c_getsda;
1324 chan->algo.getscl = tdfxfb_i2c_getscl;
1325 chan->algo.udelay = 10;
1326 chan->algo.timeout = msecs_to_jiffies(500);
1327 chan->algo.data = chan;
1328
1329 i2c_set_adapdata(&chan->adapter, chan);
1330
1331 rc = i2c_bit_add_bus(&chan->adapter);
1332 if (rc == 0)
1333 DPRINTK("I2C bus %s registered.\n", name);
1334 else
1335 chan->par = NULL;
1336
1337 return rc;
1338}
1339
1340static void __devinit tdfxfb_create_i2c_busses(struct fb_info *info)
1341{
1342 struct tdfx_par *par = info->par;
1343
1344 tdfx_outl(par, VIDINFORMAT, 0x8160);
1345 tdfx_outl(par, VIDSERPARPORT, 0xcffc0020);
1346
1347 par->chan[0].par = par;
1348 par->chan[1].par = par;
1349
1350 tdfxfb_setup_ddc_bus(&par->chan[0], "Voodoo3-DDC", info->dev);
1351 tdfxfb_setup_i2c_bus(&par->chan[1], "Voodoo3-I2C", info->dev);
1352}
1353
1354static void tdfxfb_delete_i2c_busses(struct tdfx_par *par)
1355{
1356 if (par->chan[0].par)
1357 i2c_del_adapter(&par->chan[0].adapter);
1358 par->chan[0].par = NULL;
1359
1360 if (par->chan[1].par)
1361 i2c_del_adapter(&par->chan[1].adapter);
1362 par->chan[1].par = NULL;
1363}
1364
1365static int tdfxfb_probe_i2c_connector(struct tdfx_par *par,
1366 struct fb_monspecs *specs)
1367{
1368 u8 *edid = NULL;
1369
1370 DPRINTK("Probe DDC Bus\n");
1371 if (par->chan[0].par)
1372 edid = fb_ddc_read(&par->chan[0].adapter);
1373
1374 if (edid) {
1375 fb_edid_to_monspecs(edid, specs);
1376 kfree(edid);
1377 return 0;
1378 }
1379 return 1;
1380}
1381#endif /* CONFIG_FB_3DFX_I2C */
1382
1170/** 1383/**
1171 * tdfxfb_probe - Device Initializiation 1384 * tdfxfb_probe - Device Initializiation
1172 * 1385 *
@@ -1182,6 +1395,8 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
1182 struct tdfx_par *default_par; 1395 struct tdfx_par *default_par;
1183 struct fb_info *info; 1396 struct fb_info *info;
1184 int err, lpitch; 1397 int err, lpitch;
1398 struct fb_monspecs *specs;
1399 bool found;
1185 1400
1186 err = pci_enable_device(pdev); 1401 err = pci_enable_device(pdev);
1187 if (err) { 1402 if (err) {
@@ -1284,13 +1499,49 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
1284 if (hwcursor) 1499 if (hwcursor)
1285 info->fix.smem_len = (info->fix.smem_len - 1024) & 1500 info->fix.smem_len = (info->fix.smem_len - 1024) &
1286 (PAGE_MASK << 1); 1501 (PAGE_MASK << 1);
1287 1502 specs = &info->monspecs;
1288 if (!mode_option) 1503 found = false;
1504 info->var.bits_per_pixel = 8;
1505#ifdef CONFIG_FB_3DFX_I2C
1506 tdfxfb_create_i2c_busses(info);
1507 err = tdfxfb_probe_i2c_connector(default_par, specs);
1508
1509 if (!err) {
1510 if (specs->modedb == NULL)
1511 DPRINTK("Unable to get Mode Database\n");
1512 else {
1513 const struct fb_videomode *m;
1514
1515 fb_videomode_to_modelist(specs->modedb,
1516 specs->modedb_len,
1517 &info->modelist);
1518 m = fb_find_best_display(specs, &info->modelist);
1519 if (m) {
1520 fb_videomode_to_var(&info->var, m);
1521 /* fill all other info->var's fields */
1522 if (tdfxfb_check_var(&info->var, info) < 0)
1523 info->var = tdfx_var;
1524 else
1525 found = true;
1526 }
1527 }
1528 }
1529#endif
1530 if (!mode_option && !found)
1289 mode_option = "640x480@60"; 1531 mode_option = "640x480@60";
1290 1532
1291 err = fb_find_mode(&info->var, info, mode_option, NULL, 0, NULL, 8); 1533 if (mode_option) {
1292 if (!err || err == 4) 1534 err = fb_find_mode(&info->var, info, mode_option,
1293 info->var = tdfx_var; 1535 specs->modedb, specs->modedb_len,
1536 NULL, info->var.bits_per_pixel);
1537 if (!err || err == 4)
1538 info->var = tdfx_var;
1539 }
1540
1541 if (found) {
1542 fb_destroy_modedb(specs->modedb);
1543 specs->modedb = NULL;
1544 }
1294 1545
1295 /* maximize virtual vertical length */ 1546 /* maximize virtual vertical length */
1296 lpitch = info->var.xres_virtual * ((info->var.bits_per_pixel + 7) >> 3); 1547 lpitch = info->var.xres_virtual * ((info->var.bits_per_pixel + 7) >> 3);
@@ -1315,6 +1566,9 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
1315 return 0; 1566 return 0;
1316 1567
1317out_err_iobase: 1568out_err_iobase:
1569#ifdef CONFIG_FB_3DFX_I2C
1570 tdfxfb_delete_i2c_busses(default_par);
1571#endif
1318 if (default_par->mtrr_handle >= 0) 1572 if (default_par->mtrr_handle >= 0)
1319 mtrr_del(default_par->mtrr_handle, info->fix.smem_start, 1573 mtrr_del(default_par->mtrr_handle, info->fix.smem_start,
1320 info->fix.smem_len); 1574 info->fix.smem_len);
@@ -1379,6 +1633,9 @@ static void __devexit tdfxfb_remove(struct pci_dev *pdev)
1379 struct tdfx_par *par = info->par; 1633 struct tdfx_par *par = info->par;
1380 1634
1381 unregister_framebuffer(info); 1635 unregister_framebuffer(info);
1636#ifdef CONFIG_FB_3DFX_I2C
1637 tdfxfb_delete_i2c_busses(par);
1638#endif
1382 if (par->mtrr_handle >= 0) 1639 if (par->mtrr_handle >= 0)
1383 mtrr_del(par->mtrr_handle, info->fix.smem_start, 1640 mtrr_del(par->mtrr_handle, info->fix.smem_start,
1384 info->fix.smem_len); 1641 info->fix.smem_len);
diff --git a/drivers/watchdog/wdrtas.c b/drivers/watchdog/wdrtas.c
index 5d3b1a8e28b0..a38fa4907c92 100644
--- a/drivers/watchdog/wdrtas.c
+++ b/drivers/watchdog/wdrtas.c
@@ -106,6 +106,8 @@ static int wdrtas_set_interval(int interval)
106 return result; 106 return result;
107} 107}
108 108
109#define WDRTAS_SP_SPI_LEN 4
110
109/** 111/**
110 * wdrtas_get_interval - returns the current watchdog interval 112 * wdrtas_get_interval - returns the current watchdog interval
111 * @fallback_value: value (in seconds) to use, if the RTAS call fails 113 * @fallback_value: value (in seconds) to use, if the RTAS call fails
@@ -119,10 +121,17 @@ static int wdrtas_set_interval(int interval)
119static int wdrtas_get_interval(int fallback_value) 121static int wdrtas_get_interval(int fallback_value)
120{ 122{
121 long result; 123 long result;
122 char value[4]; 124 char value[WDRTAS_SP_SPI_LEN];
123 125
126 spin_lock(&rtas_data_buf_lock);
127 memset(rtas_data_buf, 0, WDRTAS_SP_SPI_LEN);
124 result = rtas_call(wdrtas_token_get_sp, 3, 1, NULL, 128 result = rtas_call(wdrtas_token_get_sp, 3, 1, NULL,
125 WDRTAS_SP_SPI, (void *)__pa(&value), 4); 129 WDRTAS_SP_SPI, __pa(rtas_data_buf),
130 WDRTAS_SP_SPI_LEN);
131
132 memcpy(value, rtas_data_buf, WDRTAS_SP_SPI_LEN);
133 spin_unlock(&rtas_data_buf_lock);
134
126 if (value[0] != 0 || value[1] != 2 || value[3] != 0 || result < 0) { 135 if (value[0] != 0 || value[1] != 2 || value[3] != 0 || result < 0) {
127 printk(KERN_WARNING "wdrtas: could not get sp_spi watchdog " 136 printk(KERN_WARNING "wdrtas: could not get sp_spi watchdog "
128 "timeout (%li). Continuing\n", result); 137 "timeout (%li). Continuing\n", result);
diff --git a/firmware/Makefile b/firmware/Makefile
index 16664894966d..1e7fd4df16a7 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -32,6 +32,10 @@ fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \
32 adaptec/starfire_tx.bin 32 adaptec/starfire_tx.bin
33fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin 33fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin
34fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw 34fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw
35fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-4.6.17.fw \
36 bnx2/bnx2-rv2p-09-4.6.15.fw \
37 bnx2/bnx2-mips-06-4.6.16.fw \
38 bnx2/bnx2-rv2p-06-4.6.16.fw
35fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin 39fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
36fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin 40fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
37fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ 41fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
@@ -40,7 +44,13 @@ fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
40fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin 44fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
41fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ 45fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
42 e100/d102e_ucode.bin 46 e100/d102e_ucode.bin
47fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin
43fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin 48fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin
49fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \
50 advansys/3550.bin advansys/38C0800.bin
51fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \
52 qlogic/12160.bin
53fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin
44fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin 54fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin
45fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp 55fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
46fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \ 56fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
diff --git a/firmware/WHENCE b/firmware/WHENCE
index d6c227db37c2..e4deb511cc73 100644
--- a/firmware/WHENCE
+++ b/firmware/WHENCE
@@ -45,6 +45,32 @@ Found alsa-firmware package in hex form, with the following comment:
45 45
46-------------------------------------------------------------------------- 46--------------------------------------------------------------------------
47 47
48Driver: SCSI_ADVANSYS - AdvanSys SCSI
49
50File: advansys/mcode.bin
51File: advansys/3550.bin
52File: advansys/38C0800.bin
53File: advansys/38C1600.bin
54
55Licence: BSD, no source available.
56
57Found in hex form in kernel source.
58
59--------------------------------------------------------------------------
60
61Driver: SCSI_QLOGIC_1280 - Qlogic QLA 1240/1x80/1x160 SCSI support
62
63File: qlogic/1040.bin
64File: qlogic/1280.bin
65File: qlogic/12160.bin
66
67Licence: Allegedly GPLv2+, but no source visible. Marked:
68
69 QLOGIC LINUX SOFTWARE
70 QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x
71 Copyright (C) 2001 Qlogic Corporation (www.qlogic.com)
72
73--------------------------------------------------------------------------
48Driver: smctr -- SMC ISA/MCA Token Ring adapter 74Driver: smctr -- SMC ISA/MCA Token Ring adapter
49 75
50File: tr_smctr.bin 76File: tr_smctr.bin
@@ -596,3 +622,43 @@ Licence: Allegedly GPL, but no source visible. Marked:
596Found in hex form in kernel source. 622Found in hex form in kernel source.
597 623
598-------------------------------------------------------------------------- 624--------------------------------------------------------------------------
625
626Driver: SCSI_QLOGICPTI - PTI Qlogic, ISP Driver
627
628File: qlogic/isp1000.bin
629
630Licence: Unknown
631
632Found in hex form in kernel source.
633
634--------------------------------------------------------------------------
635
636Driver: MYRI_SBUS - MyriCOM Gigabit Ethernet
637
638File: myricom/lanai.bin
639
640Licence: Unknown
641
642Found in hex form in kernel source.
643
644--------------------------------------------------------------------------
645
646Driver: BNX2 - Broadcom NetXtremeII
647
648File: bnx2/bnx2-mips-06-4.6.16.fw
649File: bnx2/bnx2-rv2p-06-4.6.16.fw
650File: bnx2/bnx2-mips-09-4.6.17.fw
651File: bnx2/bnx2-rv2p-09-4.6.15.fw
652
653Licence:
654
655 This file contains firmware data derived from proprietary unpublished
656 source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
657
658 Permission is hereby granted for the distribution of this firmware data
659 in hexadecimal or equivalent format, provided this copyright notice is
660 accompanying it.
661
662Found in hex form in kernel source.
663
664--------------------------------------------------------------------------
diff --git a/firmware/advansys/3550.bin.ihex b/firmware/advansys/3550.bin.ihex
new file mode 100644
index 000000000000..6809b0d84e4f
--- /dev/null
+++ b/firmware/advansys/3550.bin.ihex
@@ -0,0 +1,317 @@
1:10000000DD2DD504000000F200F0001618E400FC1D
2:10001000010048E4BE18188003F6020000FAFFFF52
3:10002000280E9EE7FF0082E700EA00F601E609E7F6
4:1000300055F001F601FA08000300040018F410005E
5:1000400000EC85F0BC00D5F08E0C385400E61EF0B4
6:1000500086F0B4009857D0010C1C3E1C0C00BB006D
7:10006000AA18028032F001FC880CC6120213184054
8:10007000005701EA3C006C016E0104123E570080FB
9:1000800003E6B600C00001013E01DA0F221008129B
10:10009000024AB95403581B8030E44BE4200032007C
11:1000A0003E00800024013C0168016A017001720178
12:1000B000740176017801620A920C2C102E1006133E
13:1000C0004C1CBB553C5604804AE402EE5BF0B1F098
14:1000D00003F706F703FC0F004000BE000001B00864
15:1000E00030136415321C381C4E1C10440248004C5E
16:1000F00004EA5DF004F602FC0500340036009800C6
17:10010000CC0020014E014E0B1E0E0C100A120413DF
18:100110004013301C004EBD56068300DC05F009F08C
19:1001200059F0A7F0B8F00EF70600190033009B0055
20:10013000A400B500BA00D000E100E700DE03560AD3
21:10014000140E021004100A1036100A131213521360
22:1001500010151415AC16201C341C361C08443844E9
23:1001600091440A454846014868548355B0570158A0
24:10017000835905E60BF00CF05CF04BF404F805F83D
25:1001800002FA03FA04FC05FC07000A000D001C003B
26:100190009E00A800AA00B900E00022012601790112
27:1001A0007A01C001C2017C025A03EA04E807680828
28:1001B0006908BA08E909060B3A0E00101A10ED108A
29:1001C000F11006120C1316131E1382134214D614C8
30:1001D0008A15C617D2176B18121C461C9C32004099
31:1001E0000E47484741488948804C00544455E555DE
32:1001F00014567757BF57405C0680089003A1FE9CB9
33:10020000F02902FEB80CFF100000D0FECC1800CF81
34:10021000FE8001FF030000FE9315FE0F05FF38006E
35:1002200000FE572400FE48004FFF04000010FF09A5
36:100230000000FF080101FF08FFFFFF270000FF107B
37:10024000FFFFFF0F0000FE7856FE3412FF21000072
38:10025000FE04F7CF2A670B01FECE0EFE04F7CF6730
39:100260000B3C2AFE3DF0FE0202FE20F09CFE91F0C7
40:10027000FEF001FE90F0FEF001FE8FF09C05513B78
41:1002800002FED40C01FE440DFEDD12FEFC10FE2821
42:100290001C05FEA600FED3124718FEA600B5FE48B8
43:1002A000F0FE8602FE49F0FEA002FE4AF0FEBE020B
44:1002B000FE46F0FE5002FE47F0FE5602FE43F0FE00
45:1002C0004402FE44F0FE4802FE45F0FE4C02170BCD
46:1002D000A0170618960229FE001CDEFE021CDDFE99
47:1002E0001E1CFEE91001FE2017FEE710FE06FCC7EB
48:1002F0000A6B019E0229144D379701FE640F0A6BA9
49:100300000182FEBD100A6B0182FEAD10FE161CFEBE
50:10031000581C170618962A2529FE3DF0FE020221D8
51:10032000FE9402FE5A1CEAFE141C14FE300037979D
52:1003300001FE540F1706189602D01E20071034FE37
53:10034000691017061896FE04EC20463D1220FE05A3
54:10035000F6C701FE5216094A4C35112D3C8A01E6BA
55:1003600002290A40010E07005D016FFE1810FE41D0
56:10037000580A99010EFEC85464FE0C0301E60229D6
57:100380002A46FE02E827F8FE9E43F7FE27F0FEDC31
58:1003900001FE074BFE20F09CFE401C25D2FE26F0FD
59:1003A000FE5603FEA0F0FE4403FE11F09CFEEF108B
60:1003B000FE9FF0FE6403EB0FFE1100025A2AFE4876
61:1003C0001CEB09041DFE1813231E98AC12980A405A
62:1003D000010EAC7501FEBC1511CA25D2FE01F0D28A
63:1003E000FE82F0FE9203EC11FEE40065FEA40325FC
64:1003F000321FFEB4030143FE06F0FEC4038D81FEEE
65:100400000AF0FE7A060222056B2816FEF604142C6A
66:1004100001338FFE660202D1EB2A671AFE671BF8D2
67:10042000F7FE481C70016E870A40010E070016D3C4
68:100430000ACA010E7460597627056B28FE10121443
69:100440002C01338FFE660202D1BC7DBD7F25226563
70:10045000FE3C041FFE380468FEA000FE9B57FE4EC3
71:10046000122BFF02001001081FFEE0042B01081FE1
72:1004700022302ED5FE4C44FE4C1260FE4448132C14
73:10048000FE4C5464D3467627FAEFFE621309041D2E
74:10049000FE2A132F077EA5FE2010132CFE4C546459
75:1004A000D3FAEF8609041DFE08132F077E6E090498
76:1004B0001DFE1C1214920904063B14C401338FFE66
77:1004C000700C02222B11FEE600FE1C90F903149220
78:1004D00001330229FE425B671AFE4659F8F7FE8790
79:1004E00080FE31E44F09040BFE7813FE2080071ACA
80:1004F000FE7012490406FE601305FEA2002816FED7
81:100500008005FE31E46A49040BFE4A1305FEA00093
82:1005100028FE42125E01082532F1010826FE9805E8
83:1005200011FEE3002349FE4AF0FE6A05FE49F0FE93
84:1005300064058324FE2100A124FE2200A0244CFE99
85:100540000948010826FE9805FEE2084904C53B015A
86:1005500086240612CC37FE270109041DFE2212470D
87:1005600001A714920904063B14C401338FFE700CDA
88:10057000022205FE9C0028FE3E12055028FE36137E
89:100580004701A726FE08060A06490419FE02125F63
90:1005900001FEAA141FFEFE05119A014311FEE5009B
91:1005A0000550B40C5005C628FE6212053F28FE5ABD
92:1005B0001301FE141801FE6618FE4348B719136CA8
93:1005C000FF020057488B1C3D85B7694701A726FEEF
94:1005D000720649041BDF890A4D01FED8141FFE680C
95:1005E00006119A014311FEE500053FB40C3F1706C2
96:1005F00001A7EC7270016E8711FEE200010825323E
97:10060000FE0AF0FEA6068CFE5C07FE06F0FE6407FE
98:100610008D81022209040BFE2E12151A0108150005
99:1006200001081500010815000108FE99A40108152C
100:100630000002FE320861041BFE381209041B6E150D
101:10064000FE1B000108150001081500010815000136
102:100650000815060108150002D9664CFE3A555FFEE2
103:100660009A814B1DBAFE32070A1DFE096FAFFECA02
104:1006700045FE3212622C85667B01082532FE0AF0A7
105:10068000FE32078D818CFE5C070222014302FE8A46
106:1006900006151902FE8A06FE9CF7D4FE2C90FEAECB
107:1006A0009077FECA070C541855094A6A351E200770
108:1006B00010FE0E1274FE808037206327FE0610FEA7
109:1006C00083E7C4A1FE0340094A4F3501A8ADFE1FD0
110:1006D00040125801A5FE0850FE8A50FE4451FEC645
111:1006E0005183FBFE8A900C521853FE0C90FE8E90A4
112:1006F000FE4050FEC2500C39183AFE4A1009046AF6
113:10070000FE2A12FE2C90FEAE900C54185509044F90
114:100710008501A8FE1F801258FE4490FEC6900C561C
115:100720001857FBFE8A900C521853FE4090FEC29060
116:100730000C39183A0C38184E094A19352A13FE4E4E
117:100740001165FE4808FE9EF0FE5C08B116322A7361
118:10075000DDB8FE8008B9FE9E088CFE7408FE06F027
119:10076000FE7A088D8102220143FEC9101519FEC9C7
120:1007700010610406FE101261040B4509040BFE68AB
121:1007800012FE2E1C02FE240A6104064561040BFEC3
122:100790005212FE2C1CFEAAF0FE1E09FEACF0FEBE9C
123:1007A00008FE8A10AAFEF310FEADF0FECA0802FE93
124:1007B000240AABFEE710FE2BF09DE91CFE00FEFEB6
125:1007C0001C12B5FED2F09DFE76181C1A169D05CBA4
126:1007D0001C06169DB86DB96DAAABFEB110705E2BEC
127:1007E000149201330FFE3500FE01F05A0F7C025ABD
128:1007F000FE74181CFE00F8166D671B01FE440D3BCD
129:1008000001E61E2774671A026D09040B21FE060A11
130:1008100009046AFE8212090419FE66131E58ACFC14
131:10082000FE8380FEC844FE2E13FE0491FE86916373
132:1008300027FE4059FEC15977D7055431550C7B1816
133:100840007CBE54BF5501A8AD63271258C038C14EB5
134:1008500079566857F4F5FE04FA38FE05FA4E01A5FC
135:10086000A2230C7B0C7C79566857FE1210090419E0
136:1008700016D77939683A0904FEF700350552315325
137:10088000FE1058FE9158FE1459FE9559026D090448
138:100890001916D70904FEF70035FE3A55FE19815F97
139:1008A000FE1090FE9290FED7102F079B16FEC608F2
140:1008B000119B09040BFE14130539313A77FEC60863
141:1008C000FE0C58FE8D58026D2347FE1980DE090488
142:1008D0000BFE1A12FE6C19FE1941E9B5FED1F0D9D2
143:1008E000147A01330FFE4400FE8E10FE6C19BE39DF
144:1008F000FEED19BF3AFE0C51FE8E51E91CFE00FFC1
145:1009000034FE7410B5FED2F0FEB20AFE76181C1A40
146:100910008405CB1C06FE08130FFE1600025AFED1FA
147:10092000F0FEC40A147A01330FFE1700FE4210FED7
148:10093000CEF0FECA0AFE3C10FECDF0FED60A0FFE37
149:100940002200025AFECBF0FEE20A0FFE2400025AF9
150:10095000FED0F0FEEC0A0F93DCFECFF0FEF60A0F9D
151:100960004CFE1010FECCF0D96104193B0FFE1200B2
152:100970002A13FE4E1165FE0C0BFE9EF0FE200BB1FD
153:1009800016322A73DDB822B9222AEC65FE2C0B251B
154:10099000328CFE480B8D81B8D4B9D402220143FEBB
155:1009A000DB1011FEE800AAAB70BC7DBD7FFE89F0B4
156:1009B00022302ED8BC7DBD7F01081F22302ED6B13B
157:1009C000450FFE4200025A7806FE814916FE380C99
158:1009D00009040BFE44130F004B0BFE54124BFE2870
159:1009E0000021FEA60C0A40010E07005D3EFE280015
160:1009F000FEE21001E701E80A9901FE320E59112DBD
161:100A0000016F02290FFE44004B0BDF3E0BFEB410BA
162:100A100001863E0BFEAA100186FE1982FE3446A313
163:100A20003E0B0FFE4300FE9610094A0B3501E7010D
164:100A3000E859112D016F670B593C8A02FE2A030900
165:100A4000040B843E0B0F00FE5C1061041BFE581269
166:100A500009041BFE5013FE1C1CFE9DF0FE5C0CFEE8
167:100A60001C1CFE9DF0FE620C094A1B35FEA9100FEE
168:100A7000FE1500FE04E60B5F5C0FFE1300FE101077
169:100A80000FFE4700A10FFE4100A00FFE240087AA21
170:100A9000AB70056B2821D15FFE04E61BFE9D41FE75
171:100AA0001C425901DA0229EA140B3795A914FE31C8
172:100AB00000379701FE540F02D03CFE06ECC9EE3E13
173:100AC0001DFECE45343CFE06EAC9FE474B89FE7545
174:100AD000570551FE9856FE38120A42010EFE444850
175:100AE0004609041DFE1A130A40010E47FE41580A2A
176:100AF00099010EFE49548EFE2A0D02FE2A030A5168
177:100B0000FEEE14EE3E1DFECE45343CFECE47FEAD5D
178:100B10001302291E200710FE9E1223124D1294125A
179:100B2000CE1E2D47372DB1E0FEBCF0FEEC0D1306B6
180:100B3000124D01FEE21505FE380131FE3A0177FE45
181:100B4000F00DFE02ECCE62005DFE04EC2046FE05D8
182:100B5000F6FE340101FE5216FBFE48F40DFE18139A
183:100B6000AFFE02EACE627AFEC513141B3795A95C6C
184:100B700005FE38011CFEF0FF0CFE600105FE3A0187
185:100B80000CFE62013D12202406122D112D8A13063F
186:100B90000323031E4DFEF7121E94AC1294077AFE37
187:100BA0007113FE241C141A3795A9FED910B6FE0342
188:100BB000DCFE7357FE805D03B6FE03DCFE5B57FE72
189:100BC000805D03FE0357B623FE00CC03FE0357B639
190:100BD000750309044CFE2213FE1C800706FE1A133F
191:100BE000FE1E80E1FE1D80A4FE0C90FE0E13FE0E84
192:100BF00090A3FE3C90FE30F40BFE3C50A001FE8220
193:100C0000162F072DE001FEBC1509041D4501E70163
194:100C1000E811FEE90009044CFE2C1301FE1416FE37
195:100C20001E1CFE1490FE96900CFE640118FE6601D8
196:100C300009044FFE1212FE038074FE01EC20FE80B8
197:100C4000401220632711C8591E20ED762003FE08AC
198:100C50001C05FEAC00FE065805FEAE00FE0758055A
199:100C6000FEB000FE085805FEB200FE0958FE0A1C40
200:100C7000246912C9230C500C3F1340485F171DFE16
201:100C8000904DFE915421FE080F3E10134248174C20
202:100C9000FE904DFE915421FE1E0F24101220782C40
203:100CA000461E20ED762011C8F6FED6F0FE320FEA81
204:100CB00070FE141CFE101CFE181C033CFE0C14EEEF
205:100CC000FE07E61DFECE47FEF513030186782C468F
206:100CD000FAEFFE42132F072DFE34130A42010EB025
207:100CE000FE3612F0FE454801E3FE00CCB0FEF313E1
208:100CF0003D750710A30A80010EFE805C016FFE0E99
209:100D000010077E45F6FED6F0FE6C0F03FE445874C5
210:100D1000FE01EC97FE9E40FE9DE700FE9CE71B76E1
211:100D20002701DAFEDD102ABC7DBD7F302ED5071BE2
212:100D3000FE4812070BFE5612071AFE301207C216A3
213:100D4000FE3E1107FE230016FE4A11070616FEA8F6
214:100D5000110719FE12120700162214C201339F2B2D
215:100D600001088C43032BFE62080ACA01FE320E11F1
216:100D70007E02292B2F079BFED9137939683A77FE1B
217:100D8000FC1009046AFE7212C038C14EF4F58EFEE2
218:100D9000C6101E58FE2613057B317C77FE820C0C94
219:100DA000541855230C7B0C7C01A82469731258013C
220:100DB000A5C038C14EFE0455FEA555FE04FA38FE06
221:100DC00005FA4EFE911005563157FE4056FEE1568B
222:100DD0000C56185783C038C14EF4F505523153FEF6
223:100DE0000056FEA1560C52185309046AFE1E121E2C
224:100DF00058FE1F4005543155FE2C50FEAE5005568E
225:100E00003157FE4450FEC65005523153FE0850FE85
226:100E10008A500539313AFE4050FEC250025C240629
227:100E200012CD025B2B01081F44302ED5070621444A
228:100E30002F079B215B016E1C3D164409040BE279D0
229:100E400039683AFE0A5534FE8B55BE39BF3AFE0C5E
230:100E500051FE8E51025BFE1981AFFE1941025B2BE0
231:100E6000010825321FA2302ED84B1AFEA6124B0BBA
232:100E70003B0244010825321FA2302ED6071A214416
233:100E800001081FA2302EFEE809FEC2496005FE9C43
234:100E9000002884490419349FFEBB454B00453E069B
235:100EA000783DFEDA14016E87FE4B45E22F079AE18A
236:100EB00005C62884053F28345E025BFEC05DFEF84F
237:100EC00014FE03170550B40C505E2B0108265C017C
238:100ED000FEAA14025C010825321F44302ED60706F4
239:100EE000214401FE8E13FE4258FE8214FEA4148794
240:100EF000FE4AF40B1644FE4AF406FE0C122F079A23
241:100F000085025B053FB40C3F5E2B0108265C01FEA9
242:100F1000D814025C130665FECA1226FEE01272F1B6
243:100F200001082372038FFEDC1225FEDC121FFECAAD
244:100F3000125E2B0108FED510136CFF020057488B80
245:100F40001CFEFF7FFE3056FE005C03136CFF0200A8
246:100F500057488B1C3DFE3056FE005C03136CFF02AD
247:100F60000057488B03136CFF020057488BFE0B5849
248:100F7000030A5001820A3F018203FC1C10FF030098
249:100F800054FE00F41948FE007DFE017DFE027DFE48
250:100F9000037C63270C521853BE56BF5703FE6208EA
251:100FA000FE824AFEE11AFE835A740301FE1418FE03
252:100FB00042485F608901081FFEA214302ED8010844
253:100FC0001FFEA214302EFEE80AFEC15905C628FEF7
254:100FD000CC1249041BFEC41323621BE24BC364FE04
255:100FE000E8133B130617C378DBFE7810FF02835526
256:100FF000A1FF028355621AA4BBFE30008EE4172CB9
257:101000001306FE5610620BE1BBFE64008EE40AFE7E
258:10101000640017931306FE28106206FE6013BBFEE1
259:10102000C8008EE40AFEC800174D130683BBFE906D
260:1010300001BAFE4E1489FE1210FE43F494FE56F0DF
261:10104000FE6014FE04F46CFE43F493FEF310F90109
262:10105000FE22131C3DFE1013FE0017FE4DE469BA7C
263:10106000FE9C14B769FE1C10FE0017FE4DE419BA71
264:10107000FE9C14B719836023FE4DF400DF8913062C
265:10108000FEB456FEC3580360130B03150601082671
266:10109000E5150B010826E5151A010826E572FE89FB
267:1010A000490108031506010826A6151A010826A6F7
268:1010B0001506010826A6FE8949010826A672FE89A2
269:1010C0004A01080360031ECC0706FE4413AD12CC90
270:1010D000FE49F4003B729F5EFE01ECFE2701F10128
271:1010E000082F07FEE300FE20131FFE5A152312CD22
272:1010F00001431ECD070645094A0635030A42010E83
273:10110000ED880710A40A80010E880A51019E030A87
274:1011100080010E88FE80E710071084FE455801E329
275:1011200088030A42010E880A51019E030A42010EF9
276:10113000FE8080F2FE49E410A40A80010EF20A51FA
277:1011400001820317107166FE6001FE18DFFE19DED2
278:10115000FE241CFE1DF71D90FEF61501FEFC16E098
279:10116000911D66FE2C01FE2F1903AE21FEE615FE31
280:10117000DA1017107105FE6401FE00F419FE18580C
281:1011800005FE6601FE19589119FE3C90FE30F406EA
282:10119000FE3C5066FE3800FE0F79FE1CF71990FEEB
283:1011A0004016FEB6143403AE21FE1816FE9C10172E
284:1011B0001071FE835AFE18DFFE19DEFE1DF738900F
285:1011C000FE6216FE9414FE10139138661BFEAF19D2
286:1011D000FE98E70003AE21FE5616FE6C1017107144
287:1011E000FE30BCFEB2BC91C5661BFE0F79FE1CF73B
288:1011F000C590FE9A16FE5C143403AE21FE8616FEE0
289:101200004210FE02F61071FE18FE54FE19FE55FC47
290:10121000FE1DF74F90FEC016FE3614FE1C13914FB4
291:1012200047FE8358FEAF19FE80E710FE81E71011DC
292:10123000FEDD006327036327FE124521FEB016146E
293:10124000063795A90229FE39F0FE04172303FE7E16
294:10125000181C1A5D130D037105CB1C06FEEF12FE60
295:10126000E110782C462F072DFE3C13FE8214FE421F
296:10127000133C8A0A42010EB0FE3E12F0FE454801C0
297:10128000E3FE00CCB0FEF3133D750710A30A800106
298:101290000EF2016FFE1610077E85FE4014FE24122A
299:1012A000F6FED6F0FE2417170B03FE9CE70B0FFE8D
300:1012B000150059762701DA1706033C8A094A1D35BD
301:1012C000112D016F170603FE3890FEBA9079C7689A
302:1012D000C8FE485534FEC955031E98731298030A78
303:1012E00099010EF00A40010EFE494416FEF01773F4
304:1012F00075030A42010E0710450A51019E0A40017A
305:101300000E737503FE4EE41A64FE241805FE900069
306:10131000FE3A455BFE4EE4C264FE361805FE9200BE
307:10132000FE02E61BDCFE4EE4FE0B0064FE481805E0
308:10133000FE9400FE02E619FE081005FE9600FE026D
309:10134000E62CFE4E45FE0C12AFFF046854DE1C690D
310:1013500003077AFE5AF0FE741824FE0900FE3410CA
311:10136000071BFE5AF0FE821824C3FE2610071A5DE2
312:10137000242CDC070B5D2493FE0E1007065D244D24
313:101380009FAD0314FE09000133FE04FE7D057FF9C5
314:101390000325FECA18FE14F00865FEC61803FF1ADE
315:0213A00000004B
316:00000001FF
317/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/advansys/38C0800.bin.ihex b/firmware/advansys/38C0800.bin.ihex
new file mode 100644
index 000000000000..a60b447ff74a
--- /dev/null
+++ b/firmware/advansys/38C0800.bin.ihex
@@ -0,0 +1,336 @@
1:10000000D83F0D05000000F200F000FC001618E4D7
2:10001000010048E4188003F60200CE1900FAFFFF41
3:100020001C0F00F69EE7FF0082E700EA01FA01E6F6
4:1000300009E755F001F60300040010001EF085F0FA
5:1000400018F40800BC00385400ECD5F0820D00E62E
6:1000500086F0B1F0985701FCB400D4010C1C3E1C92
7:100060003C00BB000010BA19028032F07C0D021374
8:10007000BA131840005701EA02FC03FC3E006C0171
9:100080006E0174017601B9543E57008003E6B60054
10:10009000C00001013E017A01CA08CE1016110412F7
11:1000A0000812024ABB553C5603581B8030E44BE40F
12:1000B0005DF002FA200032004000800024013C0183
13:1000C00068016A017001720178017C01620A860D83
14:1000D00006134C1C04804AE402EE5BF003F70C00AC
15:1000E0000F004700BE00000120115C16321C381CB6
16:1000F0004E1C1044004C04EA5CF0A7F004F603FA2E
17:100100000500340036009800CC0020014E014A0B57
18:10011000420C120F0C1022110A120413301C024858
19:10012000004E42544455BD56068300DC05F009F0EC
20:1001300059F0B8F04BF406F70EF704FC05FC060086
21:10014000190033009B00A400B500BA00D000E10004
22:10015000E700E203080F021004100A100A130C1340
23:1001600012132414341404160816A417201C341C6B
24:10017000361C0844384491440A45484601486854AE
25:100180003A558355E555B0570158835905E60BF0AC
26:100190000CF004F805F807000A001C001E009E0081
27:1001A000A800AA00B900E0002201260179017E0121
28:1001B000C401C60180025E03EE049A06F8076208D5
29:1001C00068086908D608E909FA0B2E0F12101A10F0
30:1001D000ED10F1102A1106120C123E121013161314
31:1001E0001E134614761482143615CA156B18BE18E1
32:1001F000CA18E619121C461C9C3200400E47FE9C91
33:10020000F02B02FEAC0DFF100000D7FEE81900D65F
34:10021000FE8401FF030000FE9315FE0F05FF38006A
35:1002200000FE572400FE4C005BFF04000011FF0994
36:100230000000FF080101FF08FFFFFF270000FF107B
37:10024000FFFFFF110000FE7856FE3412FF21000070
38:10025000FE04F7D62C990A01FEC20FFE04F7D699C8
39:100260000A422CFE3DF0FE0602FE20F0A7FE91F0B1
40:10027000FEF401FE90F0FEF401FE8FF0A7035D4D49
41:1002800002FEC80D01FE380EFEDD12FEFC10FE2837
42:100290001C03FEA600FED3124114FEA600C2FE48B7
43:1002A000F0FE8A02FE49F0FEA402FE4AF0FEC202FF
44:1002B000FE46F0FE5402FE47F0FE5A02FE43F0FEF8
45:1002C0004802FE44F0FE4C02FE45F0FE5002180AC1
46:1002D000AA180614A1022BFE001CE7FE021CE6FE73
47:1002E0001E1CFEE91001FE1818FEE710FE06FCCEEB
48:1002F000097001A8022B155939A201FE5810097086
49:100300000187FEBD1009700187FEAD10FE161CFEB0
50:10031000581C180614A12C1C2BFE3DF0FE060223CF
51:10032000FE9802FE5A1CF8FE141C15FE300039A27D
52:1003300001FE4810180614A102D72220071135FE2D
53:100340006910180614A1FE04EC204F431320FE058B
54:10035000F6CE01FE4A1708545837122F429201FE7A
55:100360008216022B0946010E0700660173FE181063
56:10037000FE415809A4010EFEC8546BFE100301FE95
57:100380008216022B2C4FFE02E82AFEBF57FE9E4328
58:10039000FE7757FE27F0FEE001FE074BFE20F0A798
59:1003A000FE401C1CD9FE26F0FE5A03FEA0F0FE48BB
60:1003B00003FE11F0A7FEEF10FE9FF0FE6803F91098
61:1003C000FE110002652CFE481CF908051BFE1813DF
62:1003D0002122A3B713A30946010EB77801FEB41674
63:1003E00012D11CD9FE01F0D9FE82F0FE9603FA125A
64:1003F000FEE40027FEA8031C341DFEB803014BFEDB
65:1004000006F0FEC8039586FE0AF0FE8A0602240363
66:10041000702817FEFA04156D01367BFE6A0202D8B9
67:10042000F92C9919FE671BFEBF57FE7757FE481C33
68:100430007401AF8C0946010E070017DA09D1010ECD
69:100440008D5164792A037028FE1012156D01367BD8
70:10045000FE6A0202D8C781C8831C2427FE40041DFF
71:10046000FE3C043BFEA000FE9B57FE4E122DFF02F9
72:100470000010010B1DFEE4042D010B1D243331DEA1
73:10048000FE4C44FE4C1251FE44480F6FFE4C546B20
74:10049000DA4F792AFE0680FE4847FE621308051BE4
75:1004A000FE2A13320782FE5213FE20100F6FFE4CFD
76:1004B000546BDAFE0680FE4847FE401308051BFE1B
77:1004C0000813320782FE301308051BFE1C12159D0F
78:1004D0000805064D15FE0D0001367BFE640D022455
79:1004E0002D12FEE600FE1C90FE405C04159D0136B8
80:1004F000022BFE425B9919FE4659FEBF57FE775705
81:10050000FE8780FE31E45B08050AFE8413FE20802E
82:100510000719FE7C12530506FE6C1303FEA2002889
83:1005200017FE9005FE31E45A53050AFE561303FEEA
84:10053000A00028FE4E1267FF02001027FE48051C8F
85:1005400034FE8948FF02001027FE560526FEA80546
86:1005500012FEE3002153FE4AF0FE7605FE49F0FE4E
87:1005600070058825FE2100AB25FE2200AA2558FE35
88:100570000948FF02001027FE860526FEA805FEE2B8
89:10058000085305CB4D01B0250613D339FE270108CA
90:10059000051BFE22124101B2159D0805064D15FEF0
91:1005A0000D0001367BFE640D022403FE9C0028EB47
92:1005B000035C28FE36134101B226FE1806090653D5
93:1005C000051FFE02125001FE9E151DFE0E0612A50D
94:1005D000014B12FEE500035CC10C5C03CD28FE62FA
95:1005E00012034528FE5A1301FE0C1901FE7619FE6E
96:1005F0004348C4CC0F71FF02005752931E438BC473
97:100600006E4101B226FE820653051AE9910959018D
98:10061000FECC151DFE780612A5014B12FEE5000367
99:1006200045C10C45180601B2FA767401AF8C12FE72
100:10063000E20027DB1C34FE0AF0FEB60694FE6C07CF
101:10064000FE06F0FE74079586022408050AFE2E12A7
102:100650001619010B1600010B1600010B1600010BF9
103:10066000FE99A4010B160002FE420868051AFE3826
104:100670001208051AFE301316FE1B00010B160001AE
105:100680000B1600010B1600010B1606010B160002DB
106:10069000E26C58BE50FE9A81551B7AFE4207091B38
107:1006A000FE096FBAFECA45FE3212696D8B6C7F2758
108:1006B000FE54071C34FE0AF0FE4207958694FE6C39
109:1006C000070224014B02DB161F02DBFE9CF7DCFE57
110:1006D0002C90FEAE9056FEDA070C60146108545A56
111:1006E0003722200711FE0E128DFE808039206A2AE3
112:1006F000FE0610FE83E7FE4800ABFE034008545B95
113:100700003701B3B8FE1F40136201EFFE0850FE8AA6
114:1007100050FE4451FEC65188FE0890FE8A900C5E41
115:10072000145FFE0C90FE8E90FE4050FEC2500C3DB9
116:10073000143EFE4A1008055AFE2A12FE2C90FEAE08
117:10074000900C60146108055B8B01B3FE1F8013627F
118:10075000FE4490FEC6900C3F1440FE0890FE8A9026
119:100760000C5E145FFE4090FEC2900C3D143E0C2EB9
120:10077000143C210C490C6308541F372C0FFE4E11FA
121:1007800027DDFE9EF0FE7608BC17342C77E6C5FE0A
122:100790009A08C6FEB80894FE8E08FE06F0FE94087D
123:1007A00095860224014BFEC910161FFEC91068056C
124:1007B00006FE101268050A4E08050AFE9012FE2E6B
125:1007C0001C02FE180B6805064E68050AFE7A12FE2A
126:1007D0002C1CFEAAF0FED209FEACF0FE000902FEBF
127:1007E000DE09FEB7F0FEFC08FE02F61A50FE701895
128:1007F000FEF118FE4055FEE155FE1058FE9158FEE0
129:100800001459FE95591C85FE8CF0FEFC08FEACF0D8
130:10081000FEF008B5FECB10FEADF0FE0C0902FE188E
131:100820000BB6FEBF10FE2BF085F41EFE00FEFE1C74
132:1008300012C2FED2F085FE76181E19178503D21E4D
133:10084000061785C54AC64AB5B6FE891074672D15C8
134:100850009D013610FE3500FE01F06510800265FE38
135:100860009880FE19E40AFE1A1251FE1982FE6C18D5
136:10087000FE4454BEFE1981FE74188F9017FECE08F8
137:10088000024A08055AEC032E293C0C3F14409B2ECB
138:100890009C3CFE6C18FEED18FE4454FEE5543A3FB5
139:1008A0003B40034929638FFEE354FE7418FEF5189C
140:1008B0008FFEE35490C056FECE08024AFE37F0FE8B
141:1008C000DA09FE8BF0FE6009024A08050A23FEFAE7
142:1008D0000A3A493B6356FE3E0A0FFEC007419800A4
143:1008E000ADFE0159FE52F0FE0C0A8F7AFE240A3A40
144:1008F000498FFEE35457497D63FE1458FE95580214
145:100900004A3A493B63FE1459FE9559BE574957630D
146:10091000024A08055AFE821208051FFE661322626B
147:10092000B7FE03A1FE8380FEC844FE2E13FE049191
148:10093000FE86916A2AFE4059FEC15956E00360299D
149:10094000610C7F148057607D6101B3B86A2A13621D
150:100950009B2E9C3C3A3F3B4090C0FE04FA2EFE0585
151:10096000FA3C01EFFE3610210C7F0C803A3F3B40F1
152:10097000E408051F17E03A3D3B3E0805FEF7003747
153:10098000035E295FFE1058FE915857497D6302FEB1
154:10099000F40908051F17E00805FEF70037BEFE1929
155:1009A0008150FE1090FE9290FED3103207A617FEE3
156:1009B000080912A608050AFE1413033D293E56FE37
157:1009C0000809FE0C58FE8D58024A2141FE1980E7A5
158:1009D00008050AFE1A12FE6C19FE1941F4C2FED176
159:1009E000F0E2157E013610FE4400FE8E10FE6C19FA
160:1009F000573DFEED197D3EFE0C51FE8E51F41EFE5C
161:100A000000FF35FE7410C2FED2F0FEA60BFE761873
162:100A10001E198A03D21E06FE081310FE1600026578
163:100A2000FED1F0FEB80B157E013610FE1700FE4217
164:100A300010FECEF0FEBE0BFE3C10FECDF0FECA0B4B
165:100A400010FE22000265FECBF0FED60B10FE240045
166:100A50000265FED0F0FEE00B109EE5FECFF0FEEA50
167:100A60000B1058FE1010FECCF0E268051F4D10FE72
168:100A700012002C0FFE4E1127FE000CFE9EF0FE14FD
169:100A80000CBC17342C77E6C524C6242CFA27FE208C
170:100A90000C1C3494FE3C0C9586C5DCC6DC0224019B
171:100AA0004BFEDB1012FEE800B5B674C781C883FEAA
172:100AB00089F0243331E1C781C88327FE660C1D24E9
173:100AC0003331DFBC4E10FE420002657C06FE8149D8
174:100AD00017FE2C0D08050AFE44131000550AFE549B
175:100AE0001255FE280023FE9A0D0946010E070066E6
176:100AF00044FE2800FEE21001F501F609A401FE26DD
177:100B00000F64122F0173022B10FE4400550AE944B2
178:100B10000AFEB41001B0440AFEAA1001B0FE198208
179:100B2000FE3446AC440A10FE4300FE961008540AF8
180:100B30003701F501F664122F0173990A644292029B
181:100B4000FE2E0308050A8A440A1000FE5C106805A0
182:100B50001AFE581208051AFE5013FE1C1CFE9DF0CA
183:100B6000FE500DFE1C1CFE9DF0FE560D08541A375B
184:100B7000FEA91010FE1500FE04E60A50FE2E10100D
185:100B8000FE1300FE1010106FAB10FE4100AA10FE05
186:100B900024008CB5B67403702823D850FE04E61ADE
187:100BA000FE9D41FE1C426401E3022BF8150A39A0A8
188:100BB000B415FE310039A201FE481002D742FE06EC
189:100BC000ECD0FC441BFECE453542FE06EAD0FE4783
190:100BD0004B91FE7557035DFE9856FE381209480189
191:100BE0000EFE44484F08051BFE1A130946010E412C
192:100BF000FE415809A4010EFE495496FE1E0E02FE47
193:100C00002E03095DFEEE14FC441BFECE453542FE6C
194:100C1000CE47FEAD13022B22200711FE9E12211398
195:100C200059139F13D5222F41392FBCADFEBCF0FEC6
196:100C3000E00E0F06135901FEDA1603FE380129FEF5
197:100C40003A0156FEE40EFE02ECD5690066FE04ECA5
198:100C5000204FFE05F6FE340101FE4A17FE0890FE05
199:100C600048F40DFE1813BAFE02EAD5697EFEC513DC
200:100C7000151A39A0B4FE2E1003FE38011EFEF0FF37
201:100C80000CFE600103FE3A010CFE620143132025B5
202:100C900006132F122F920F060421042259FEF71279
203:100CA000229FB7139F077EFE7113FE241C1519396E
204:100CB000A0B4FED910C3FE03DCFE7357FE805D04B2
205:100CC000C3FE03DCFE5B57FE805D04FE0357C321B9
206:100CD000FE00CC04FE0357C37804080558FE221317
207:100CE000FE1C800706FE1A13FE1E80EDFE1D80AE60
208:100CF000FE0C90FE0E13FE0E90ACFE3C90FE30F407
209:100D00000AFE3C50AA01FE7A1732072FAD01FEB44D
210:100D10001608051B4E01F501F612FEE900080558FC
211:100D2000FE2C1301FE0C17FE1E1CFE1490FE969066
212:100D30000CFE640114FE660108055BFE1212FE0340
213:100D4000808DFE01EC20FE804013206A2A12CF64C1
214:100D50002220FB792004FE081C03FEAC00FE06588E
215:100D600003FEAE00FE075803FEB000FE085803FE67
216:100D7000B200FE0958FE0A1C256E13D0210C5C0C33
217:100D8000450F465250181BFE904DFE915423FEFC19
218:100D90000F44110F48521858FE904DFE915423E411
219:100DA000251113207C6F4F2220FB792012CFFE14D7
220:100DB00056FED6F0FE2610F874FE141CFE101CFE23
221:100DC000181C0442FE0C14FCFE07E61BFECE47FE78
222:100DD000F5130401B07C6F4FFE0680FE4847FE42CB
223:100DE0001332072FFE34130948010EBBFE3612FEE4
224:100DF0004148FE454801F0FE00CCBBFEF3134378AA
225:100E00000711AC0984010EFE805C0173FE0E100711
226:100E1000824EFE1456FED6F0FE601004FE44588D3D
227:100E2000FE01ECA2FE9E40FE9DE700FE9CE71A79C3
228:100E30002A01E3FEDD102CC781C8833331DE071A97
229:100E4000FE4812070AFE56120719FE301207C9178C
230:100E5000FE321207FE230017EB070617FE9C12074F
231:100E60001FFE12120700172415C90136A92D010B08
232:100E7000944B042DDD09D101FE260F1282022B2D89
233:100E80003207A6FED9133A3D3B3E56FEF011080547
234:100E90005AFE72129B2E9C3C90C096FEBA112262A2
235:100EA000FE2613037F298056FE760D0C6014612107
236:100EB0000C7F0C8001B3256E77136201EF9B2E9C93
237:100EC0003CFE0455FEA555FE04FA2EFE05FA3CFE36
238:100ED0009110033F2940FE4056FEE1560C3F14405E
239:100EE000889B2E9C3C90C0035E295FFE0056FEA1AD
240:100EF000560C5E145F08055AFE1E122262FE1F4049
241:100F000003602961FE2C50FEAE50033F2940FE4491
242:100F100050FEC650035E295FFE0850FE8A50033D16
243:100F2000293EFE4050FEC2500289250613D40272AB
244:100F30002D010B1D4C3331DE0706234C3207A6234F
245:100F40007201AF1E43174C08050AEE3A3D3B3EFEC8
246:100F50000A5535FE8B55573D7D3EFE0C51FE8E5198
247:100F60000272FE1981BAFE194102722D010B1C3466
248:100F70001DE83331E15519FEA612550A4D024C0108
249:100F80000B1C341DE83331DF0719234C010B1DE81E
250:100F90003331FEE809FEC2495103FE9C00288A5302
251:100FA000051F35A9FEBB4555004E44067C43FEDABD
252:100FB0001401AF8CFE4B45EE3207A5ED03CD288A18
253:100FC00003452835670272FEC05DFEF814FE031764
254:100FD000035CC10C5C672D010B268901FE9E150286
255:100FE00089010B1C341D4C3331DF0706234C01F102
256:100FF000FE4258F1FEA4148CFE4AF40A174CFE4A35
257:10100000F406EA3207A58B02720345C10C45672D31
258:10101000010B268901FECC1502890F0627FEBE139F
259:1010200026FED41376FE8948010B2176047BFED080
260:10103000131CFED0131DFEBE13672D010BFED51031
261:101040000F71FF02005752931EFEFF7FFE3056FEC7
262:10105000005C040F71FF02005752931E43FE30568E
263:10106000FE005C040F71FF0200575293040F71FFE2
264:101070000200575293FE0B5804095C018709450191
265:101080008704FE03A11E11FF030054FE00F41F524B
266:10109000FE007DFE017DFE027DFE037C6A2A0C5E61
267:1010A000145F573F7D4004DDFE824AFEE11AFE8355
268:1010B0005A8D0401FE0C19FE4248505191010B1D3E
269:1010C000FE96153331E1010B1DFE96153331FEE816
270:1010D0000AFEC15903CD28FECC1253051AFEC413D3
271:1010E00021691AEE55CA6BFEDC144D0F0618CA7C36
272:1010F00030FE7810FF028355ABFF0283556919AEAD
273:1011000098FE300096F2186D0F06FE5610690AED33
274:1011100098FE640096F209FE6400189E0F06FE28F1
275:10112000106906FE601398FEC80096F209FEC8001A
276:1011300018590F068898FE90017AFE421591E4FE38
277:1011400043F49FFE56F0FE5415FE04F471FE43F482
278:101150009EFEF310FE405C01FE16141E43ECFE00E2
279:1011600017FE4DE46E7AFE9015C46EFE1C10FE0054
280:1011700017FE4DE4CC7AFE9015C4CC885121FE4D6B
281:10118000F400E9910F06FEB456FEC35804510F0A4D
282:10119000041606010B26F3160A010B26F316190195
283:1011A0000B26F376FE8949010B041606010B26B1C6
284:1011B0001619010B26B11606010B26B1FE8949014D
285:1011C0000B26B176FE894A010B04510422D307068F
286:1011D000FE4813B813D3FE49F4004D76A967FE010B
287:1011E000ECFE2701FE8948FF02001027FE2E163272
288:1011F00007FEE300FE20131DFE52162113D4014BFF
289:1012000022D407064E08540637040948010EFB8E07
290:101210000711AE0984010E8E095D01A8040984013D
291:101220000E8EFE80E71107118AFE455801F08E04EC
292:101230000948010E8E095D01A8040948010EFE80CF
293:1012400080FE804CFE49E411AE0984010EFE804C04
294:10125000095D0187041811756CFE6001FE18DFFE40
295:1012600019DEFE241CFE1DF71B97FEEE1601FEF490
296:1012700017AD9A1B6CFE2C01FE2F1904B923FEDE5C
297:1012800016FEDA1018117503FE6401FE00F41FFE4D
298:10129000185803FE6601FE19589A1FFE3C90FE3056
299:1012A000F406FE3C506CFE3800FE0F79FE1CF71F62
300:1012B00097FE3817FEB6143504B923FE1017FE9CAE
301:1012C00010181175FE835AFE18DFFE19DEFE1DF799
302:1012D0002E97FE5A17FE9414EC9A2E6C1AFEAF1934
303:1012E000FE98E70004B923FE4E17FE6C1018117526
304:1012F000FE30BCFEB2BC9ACB6C1AFE0F79FE1CF716
305:10130000CB97FE9217FE5C143504B923FE7E17FEC0
306:101310004210FE02F61175FE18FE60FE19FE61FE17
307:1013200003A1FE1DF75B97FEB817FE3614FE1C13D3
308:101330009A5B41FE8358FEAF19FE80E711FE81E7FC
309:101340001112FEDD006A2A046A2AFE124523FEA855
310:1013500017150639A0B4022BFE39F0FEFC17210444
311:10136000FE7E181E19660F0D047503D21E06FEEFD1
312:1013700012FEE1107C6F4F32072FFE3C13F1FE424C
313:101380001342920948010EBBEBFE4148FE4548015D
314:10139000F0FE00CCBBFEF31343780711AC098401C7
315:1013A0000EFE804C0173FE161007828BFE4014FE69
316:1013B0002412FE1456FED6F0FE1C18180A04FE9CD9
317:1013C000E70A10FE150064792A01E3180604429228
318:1013D00008541B37122F0173180604FE3890FEBA0A
319:1013E000903ACE3BCFFE485535FEC9550422A3772F
320:1013F00013A30409A4010EFE41480946010EFE494B
321:101400004417FEE8187778040948010E07114E09C1
322:101410005D01A80946010E777804FE4EE4196BFEC3
323:101420001C1903FE9000FE3A45FE2C10FE4EE4C946
324:101430006BFE2E1903FE9200FE02E61AE5FE4EE454
325:10144000FE0B006BFE401903FE9400FE02E61FFE39
326:10145000081003FE9600FE02E66DFE4E45EABAFF56
327:10146000046854E71E6EFE081CFE6719FE0A1CFE87
328:101470001AF4FE0004EAFE48F4197AFE74190F19F2
329:1014800004077EFE5AF0FE841925FE0900FE341082
330:10149000071AFE5AF0FE921925CAFE261007196691
331:1014A000256DE5070A66259EFE0E1007066625597E
332:1014B000A9B80415FE09000136FE04FE810383FE6F
333:1014C000405C041CF7FE14F00B27FED6191CF77BBA
334:0C14D000F7FE82F0FEDA1904FFCC0000E9
335:00000001FF
336/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/advansys/38C1600.bin.ihex b/firmware/advansys/38C1600.bin.ihex
new file mode 100644
index 000000000000..18c7c4862046
--- /dev/null
+++ b/firmware/advansys/38C1600.bin.ihex
@@ -0,0 +1,398 @@
1:1000000077EF0406000000F2001600FC001000F07C
2:1000100018E40100041E48E403F6F7132E1E020044
3:100020000717C05F00FAFFFF040000F609E782E748
4:1000300085F086F04E109EE7FF0055F001F60300B4
5:10004000985701E600EA00EC01FA18F40800F01DE8
6:10005000385432F01000C20E1EF0D5F0BC004BE454
7:1000600000E6B1F0B40002133E1CC8473E00D801C0
8:1000700006130C1C5E1E0057C85701FCBC0EA212D2
9:10008000B9540080620A5A12C8153E1E1840BD5667
10:1000900003E601EA5CF00F0020006C016E0104121F
11:1000A0000413BB553C563E5703584AE44000B60083
12:1000B000BB00C000000101013E01580A44100A12B1
13:1000C0004C1C4E1C024A30E405E60C003C0080004B
14:1000D00024013C0168016A0170017201740176011A
15:1000E00078017C01C60E0C10AC12AE12161A321C2E
16:1000F0006E1E02483A55C95702EE5BF003F706F749
17:1001000003FC06001E00BE00E1000C12181A701A53
18:10011000301C381C1044004CB057405C4DE404EADD
19:100120005DF0A7F004F602FC05000900190032009A
20:1001300033003400360098009E00CC0020014E01B0
21:1001400079013C09680D021004103A1008120A13D4
22:100150004016501600174A19004E0054015800DC92
23:1001600005F009F059F0B8F048F40EF70A009B00CA
24:100170009C00A400B500BA00D000E700F0036908B5
25:10018000E9095C0CB612BC19D81B201C341C361CA7
26:10019000421D0844384491440A45484689486854F9
27:1001A0008355835931E402E607F008F00BF00CF0B8
28:1001B0004BF404F805F802FA03FA04FC05FC070006
29:1001C000A800AA00B900E000E500220126016001B4
30:1001D0007A018201C801CA0186026A031805B207C2
31:1001E0006808100D06100A100E1012106010ED10A5
32:1001F000F310061210121E120C130E131013FE9C95
33:10020000F03505FEEC0EFF100000E9FE341F00E89B
34:10021000FE8801FF030000FE9315FE0F05FF380066
35:1002200000FE572400FE4C0065FF0400001AFF0981
36:100230000000FF080101FF08FFFFFF270000FF107B
37:10024000FFFFFF130000FE7856FE3412FF2100006E
38:10025000FE04F7E8377D0D01FE4A11FE04F7E87D44
39:100260000D5137FE3DF0FE0C02FE20F0BCFE91F079
40:10027000FEF801FE90F0FEF801FE8FF0BC03674D22
41:1002800005FE080F01FE780FFEDD1205FE0E03FECF
42:10029000281C03FEA600FED1123E22FEA600ACFEE4
43:1002A00048F0FE9002FE49F0FEAA02FE4AF0FEC8A7
44:1002B00002FE46F0FE5A02FE47F0FE6002FE43F0E8
45:1002C000FE4E02FE44F0FE5202FE45F0FE56021CB7
46:1002D0000DA21C0722B70535FE001CFEF110FE0220
47:1002E0001CF5FE1E1CFEE910015FFEE710FE06FC79
48:1002F000DE0A8101A305351F9547B801FEE4110A06
49:1003000081015CFEBD100A81015CFEAD10FE161C71
50:10031000FE581C1C0722B7372A35FE3DF0FE0C02A2
51:100320002BFE9E02FE5A1CFE121CFE141C1FFE30E9
52:100330000047B801FED4111C0722B705E9212C099A
53:100340001A31FE69101C0722B7FE04EC2C6001FE76
54:100350001E1E202CFE05F6DE01FE621B010C614A0A
55:100360004415565101FE9E1E01FE961A05350A5788
56:1003700001180900360185FE1810FE41580ABA011D
57:1003800018FEC8547BFE1C0301FE961A0535376023
58:10039000FE02E830FEBF57FE9E43FE7757FE27F071
59:1003A000FEE401FE074BFE20F0BCFE401C2AEBFEE3
60:1003B00026F0FE6603FEA0F0FE5403FE11F0BCFE24
61:1003C000EF10FE9FF0FE7403FE461C19FE1100059F
62:1003D0007037FE481CFE461C010C0628FE1813262A
63:1003E00021B9C720B90A570118C78901FEC81A15D3
64:1003F000E12AEBFE01F0EBFE82F0FEA403FE9C324C
65:1004000015FEE4002FFEB6032A3C16FEC60301418A
66:10041000FE06F0FED603AFA0FE0AF0FEA2070529F5
67:1004200003811E1BFE24051F6301428FFE7002051F
68:10043000EAFE461C377D1DFE671BFEBF57FE775741
69:10044000FE481C7501A6860A57011809001BEC0A14
70:10045000E101187750408D3003811EF81F6301427F
71:100460008FFE700205EAD799D89C2A292FFE4E04E8
72:1004700016FE4A047EFEA000FE9B57FE541232FF79
73:10048000020010010816FE02053201081629272570
74:10049000EEFE4C44FE581250FE44481334FE4C54B9
75:1004A0007BEC608D3001FE4E1EFE4847FE7C130142
76:1004B0000C0628FE32130143099BFE6813FE26102A
77:1004C0001334FE4C547BEC01FE4E1EFE4847FE5496
78:1004D00013010C0628A50143099BFE4013010C06DD
79:1004E00028F91F7F010C06074D1FFE0D0001428FEA
80:1004F000FEA40E05293215FEE6000FFE1C9004FE38
81:100500009C933A0B0E8B021F7F01420535FE425B26
82:100510007D1DFE4659FEBF57FE77570FFE878004AC
83:10052000FE8783FEC9470B0ED065010C060DFE98B1
84:10053000130FFE208004FEA083330B0E091DFE84E2
85:100540001201380607FE701303FEA2001E1BFEDA1E
86:1005500005D0540138060DFE581303FEA0001EFE00
87:1005600050125EFF0200102FFE90052A3CCCFF02C5
88:1005700000102FFE9E0517FEF40515FEE300260170
89:1005800038FE4AF0FEC005FE49F0FEBA05712EFEA7
90:100590002100F12EFE2200A22E4AFE0948FF020091
91:1005A000102FFED00517FEF405FEE208013806FE06
92:1005B0001C004D01A72E0720E447FE2701010C0671
93:1005C00028FE24123E01841F7F010C06074D1FFEEA
94:1005D0000D0001428FFEA40E052903E61EFECA137C
95:1005E00003B61EFE401203661EFE38133E0184173A
96:1005F000FE72060A0701380624FE02124F01FE565B
97:100600001916FE68061582014115E203668A106616
98:10061000039A1EFE701203551EFE681301C60912CE
99:1006200048FE92062E1201FEAC1DFE434862801366
100:1006300058FF02005752AD233F4E62493E018417D6
101:10064000FEEA0601380612F7450A9501FE841916DE
102:10065000FEE0061582014115E203558A10551C077C
103:100660000184FEAE10036F1EFE9E133E0184039AAA
104:100670001EFE1A1201380612FC01C601FEAC1DFE58
105:1006800043486280F0450A9503B61EF801380624F7
106:1006900036FE02F60771788C004D62493E2D934E6E
107:1006A000D00D17FE9A0701FEC01916FE90072620EE
108:1006B0009E1582014115E2219E0907FB03E6FE58C3
109:1006C0005710E605FE2A06036F8A106F1C07018487
110:1006D000FE9C325F7501A68615FEE2002FED2A3CD6
111:1006E000FE0AF0FECE07AEFE9608FE06F0FE9E085D
112:1006F000AFA00529010C060DFE2E12141D010814D1
113:100700000001081400010814000108FE99A4010862
114:10071000140005FEC60901760612FE3A12010C0607
115:1007200012FE301314FE1B0001081400010814000F
116:1007300001081400010814070108140005EF7C4AA1
117:10074000784F0FFE9A8104FE9A83FECB470B0E2D45
118:100750002848FE6C080A28FE096FCAFECA45FE3208
119:100760001253634E7C972FFE7E082A3CFE0AF0FE51
120:100770006C08AFA0AEFE96080529014105ED1424D2
121:1007800005EDFE9CF79F01FEAE1EFE185801FEBE51
122:100790001EFE9958FE7818FEF9188EFE1609106A8A
123:1007A000226B010C615444212C091AF87701FE7E5A
124:1007B0001E472C7A30F0FE83E7FE3F0071FE0340B7
125:1007C000010C61654401C2C8FE1F40206E01FE6A33
126:1007D00016FE0850FE8A50FE4451FEC651FE10100F
127:1007E00001FECE1E01FEDE1E1068226901FEEE1E15
128:1007F00001FEFE1EFE4050FEC250104B224CFE8AEF
129:1008000010010C0654FE501201FEAE1E01FEBE1E6B
130:10081000106A226B010C06654E01C20FFE1F800498
131:10082000FE9F83330B0E206E0FFE449004FEC49394
132:100830003A0BFEC69004FEC693790B0E106C226D27
133:1008400001FECE1E01FEDE1E106822690FFE4090E2
134:1008500004FEC0933A0BFEC29004FEC293790B0EC5
135:10086000104B224C10642234010C6124443713FED7
136:100870004E112FFEDE09FE9EF0FEF209FE01481B1E
137:100880003C3788F5D4FE1E0AD5FE420AD2FE1E0A67
138:10089000D3FE420AAEFE120AFE06F0FE180AAFA010
139:1008A00005290141FEC1101424FEC110017606077E
140:1008B000FE14120176060D5D010C060DFE7412FE8B
141:1008C0002E1C05FE1A0C017606075D0176060D4109
142:1008D000FE2C1CFEAAF0FECE0AFEACF0FE660AFE5E
143:1008E0009210C4F6FEADF0FE720A05FE1A0CC5FEAB
144:1008F000E710FE2BF0BFFE6B1823FE00FEFE1C125D
145:10090000ACFED2F0BFFE7618231D1BBF03E3230706
146:100910001BBFD45BD55BD25BD35BC4C5FEA910758E
147:100920005E321F7F014219FE3500FE01F0701998FA
148:100930000570FE741823FE00F81B5B7D1201FE7823
149:100940000F4D01FE961A2130777D1D055B010C06C7
150:100950000D2BFEE20B010C0654FEA612010C062420
151:10096000FE8813216EC701FE1E1F0FFE838004FE4A
152:100970008383FEC9470B0EFEC844FE42130FFE04DC
153:100980009104FE8493FECA570BFE869104FE869363
154:10099000FECB570B0E7A30FE4059FEC1598E4003F4
155:1009A0006A3B6B10972298D96ADA6B01C2C87A3019
156:1009B000206EDB64DC34916C7E6DFE4455FEE555A3
157:1009C000FE04FA64FE05FA3401FE6A16A3261097A7
158:1009D0001098916C7E6DFE1410010C06241B409142
159:1009E0004B7E4C010C06FEF7004403683B69FE1089
160:1009F00058FE9158FE1459FE9559055B010C0624CA
161:100A00001B40010C06FEF700447801FE8E1E4F0FBE
162:100A1000FE109004FE90933A0BFE929004FE929387
163:100A2000790B0EFEBD10014309BB1BFE6E0A15BB00
164:100A3000010C060DFE1413034B3B4C8EFE6E0AFE9A
165:100A40000C58FE8D58055B263E0FFE198004FE995A
166:100A500083330B0EFEE510010C060DFE1A12FE6C20
167:100A600019FE1941FE6B18ACFED1F0EF1F92014246
168:100A700019FE4400FE9010FE6C19D94BFEED19DAF8
169:100A80004CFE0C51FE8E51FE6B1823FE00FF31FE12
170:100A90007610ACFED2F0FEBA0CFE7618231D5D0374
171:100AA000E32307FE081319FE16000570FED1F0FEC1
172:100AB000CC0C1F92014219FE17005CFECEF0FED254
173:100AC0000CFE3E10FECDF0FEDE0C19FE220005707D
174:100AD000FECBF0FEEA0C19FE24000570FED0F0FEFD
175:100AE000F40C1994FE1C10FECFF0FEFE0C194AF314
176:100AF000FECCF0EF017606244D19FE12003713FEEE
177:100B00004E112FFE160DFE9EF0FE2A0DFE01481B13
178:100B10003C3788F5D429D529D229D32937FE9C32F0
179:100B20002FFE3E0D2A3CAEFE620DAFA0D49FD59F96
180:100B3000D29FD39F05290141FED31015FEE800C4C2
181:100B4000C575D799D89CFE89F0292725BED799D895
182:100B50009C2FFE8C0D16292725BDFE0148A419FEE9
183:100B6000420005709007FE81491BFE640E010C06D1
184:100B70000DFE441319002D0DFE54122DFE28002BDE
185:100B8000FEDA0E0A57011809003646FE2800FEFA62
186:100B90001001FEF41C01FE001D0ABA01FE581040AF
187:100BA00015560185053519FE44002D0DF7460DFE3D
188:100BB000CC1001A7460DFEC21001A70FFE1982043A
189:100BC000FE9983FECC470B0EFE3446A5460D19FE5A
190:100BD0004300FEA210010C610D4401FEF41C01FE55
191:100BE000001D40155601857D0D405101FE9E1E05DC
192:100BF000FE3A03010C060D5D460D1900FE62100160
193:100C0000760612FE5C12010C0612FE5213FE1C1C2C
194:100C1000FE9DF0FE8E0EFE1C1CFE9DF0FE940E014D
195:100C20000C611244FE9F1019FE1500FE04E60D4FE4
196:100C3000FE2E1019FE1300FE101019FE4700F119C8
197:100C4000FE4100A219FE240086C4C57503811E2B37
198:100C5000EA4FFE04E612FE9D41FE1C424001F405EF
199:100C600035FE121C1F0D47B5C31FFE310047B801EA
200:100C7000FED41105E951FE06ECE0FE0E474628FEC3
201:100C8000CE453151FE06EAE0FE474B45FE7557035F
202:100C900067FE9856FE38120A5A0118FE4448600151
203:100CA0000C0628FE18130A5701183EFE41580ABACE
204:100CB000FEFA14FE4954B0FE5E0F05FE3A030A67C1
205:100CC000FEE014FE0E474628FECE453151FECE47CB
206:100CD000FEAD130535212C091AFE98122620962008
207:100CE000E7FE081CFE7C19FEFD19FE0A1C03E5FE4A
208:100CF0004855A53BFE6201FEC95531FE741001FE48
209:100D0000F01A03FE38013BFE3A018EFE1E10FE0271
210:100D1000ECE7530036FE04EC2C60FE05F6FE3401D1
211:100D200001FE621B01FECE1EB211FE1813CAFE02A6
212:100D3000EAE75392FEC3131F1247B5C3FE2A1003FE
213:100D4000FE380123FEF0FF10E503FE3A0110FE62BB
214:100D50000101FE1E1E202C155601FE9E1E130702C9
215:100D600026022196C720960992FE79131F1D47B5CA
216:100D7000C3FEE110CFFE03DCFE7357FE805D02CFA1
217:100D8000FE03DCFE5B57FE805D02FE0357CF26FEAE
218:100D900000CC02FE0357CF8902010C064AFE4E1317
219:100DA0000FFE1C8004FE9C83330B0E0907FE3A13D2
220:100DB0000FFE1E8004FE9E83330B0EFE2A130FFED1
221:100DC0001D8004FE9D83FEF9130EFE1C1301FEEE32
222:100DD0001EACFE141301FEFE1EFE8158FA01FE0E2B
223:100DE0001FFE30F40DFE3C50A201FE921B01430990
224:100DF00056FB01FEC81A010C0628A401FEF41C01D2
225:100E0000FE001D15FEE900010C064AFE4E1301FE10
226:100E1000221BFE1E1C0FFE149004FE94933A0BFE40
227:100E2000969004FE9693790B0E10FE640122FE66E6
228:100E300001010C0665F90FFE038004FE8383330B6A
229:100E40000E77FE01EC2CFE8040202C7A3015DF401E
230:100E5000212CFE00408D2C02FE081C03FEAC00FE7F
231:100E6000065803FEAE00FE075803FEB000FE085809
232:100E700003FEB200FE0958FE0A1C2E4920E026108F
233:100E8000661055106F1357524F1C28FE904DFE915F
234:100E9000542BFE8811461A135A521C4AFE904DFEDE
235:100EA00091542BFE9E112E1A202C903460212CFE82
236:100EB00000408D2C15DFFE1456FED6F0FEB211FE5A
237:100EC000121C75FE141CFE101CFE181C0251FE0C98
238:100ED00014FE0E47FE07E628FECE47FEF51302017C
239:100EE000A7903460FE0680FE4847FE4213FE028053
240:100EF0000956FE34130A5A0118CBFE3612FE414839
241:100F0000FE454801FEB216FE00CCCBFEF3133F892E
242:100F1000091AA50A9D0118FE805C0185F2099BA4AF
243:100F2000FE1456FED6F0FEEC1102FE445877FE0188
244:100F3000ECB8FE9E40FE9DE700FE9CE7128D30015E
245:100F4000F4FEDD1037D799D89C2725EE0912FE480C
246:100F500012090DFE5612091DFE301209DD1BFEC4DA
247:100F60001309FE23001BFED01309071BFE341409CE
248:100F700024FE121209001B291FDD0142A1320108C3
249:100F8000AE410232FE62080AE101FE5810159B05CF
250:100F90003532014309BBFED713914B7E4C8EFE8048
251:100FA00013010C0654FE7212DB64DC34FE4455FE61
252:100FB000E555B0FE4A13216EFE261303973B988E2B
253:100FC000FEB60E106A226B261097109801C22E49A9
254:100FD00088206E01FE6A16DB64DC34FE0455FEA533
255:100FE00055FE04FA64FE05FA34FE8F10036C3B6D67
256:100FF000FE4056FEE156106C226D71DB64DC34FE5F
257:101000004455FEE55503683B69FE0056FEA15610A7
258:10101000682269010C0654F9216EFE1F40036A3BE9
259:101020006BFE2C50FEAE50036C3B6DFE4450FEC672
260:101030005003683B69FE0850FE8A50034B3B4CFE50
261:101040004050FEC25005732E07209E0572320108E3
262:10105000163D2725EE09072B3D014309BB2B7201E5
263:10106000A6233F1B3D010C060DFE1E13914B7E4C2B
264:10107000FE0A5531FE8B55D94BDA4CFE0C51FE8ED3
265:1010800051057201FE8E1ECAFE1941057232010819
266:101090002A3C16C02725BE2D1DC02D0D832D7F1B7C
267:1010A000FE6615053D01082A3C16C02725BD091D11
268:1010B0002B3D010816C02725FEE809FEC249500352
269:1010C000B61E830138062431A1FEBB452D00A4467F
270:1010D00007903F01FEF81501A686FE4B45FE201342
271:1010E00001430982FE1613039A1E5D03551E315EED
272:1010F0000572FEC05D01A7FE031703668A10665ED7
273:10110000320108177301FE5619057301082A3C16AF
274:101110003D2725BD09072B3D01FEBE16FE4258FEA8
275:10112000E81401A686FE4AF40D1B3DFE4AF407FEB4
276:101130000E12014309824E057203558A10555E3224
277:101140000108177301FE8419057301082A3C163D36
278:101150002725BD09122B3D01FEE8178BFEAA14FEC0
279:10116000B61486A8B20D1B3DB207FE0E120143094C
280:10117000824E0572036F8A106F5E32010817730189
281:10118000FEC019057313072FFECC1517FEE2155F7D
282:10119000CC0108265F028FFEDE152AFEDE1516FE44
283:1011A000CC155E320108FED5101358FF02005752CD
284:1011B000AD23FEFF7FFE3056FE005C021358FF0297
285:1011C000005752AD233FFE3056FE005C021358FF1D
286:1011D00002005752AD021358FF02005752FE005E44
287:1011E000021358FF02005752ADFE0B58020A660167
288:1011F0005C0A55015C0A6F015C0201FE1E1F231A86
289:10120000FF030054FE00F424520FFE007C04FE078E
290:101210007C3A0B0EFE0071FEF918FE7A19FEFB19DE
291:10122000FE1AF700FE1BF7007A3010682269D96CAD
292:10123000DA6D02FE6208FE824AFEE11AFE835A77E8
293:101240000201C6FE42484F5045010816FEE017272E
294:1012500025BE010816FEE0172725FEE80AFEC15943
295:10126000039A1EFEDA1201380612FED0132653121C
296:1012700048FE0817D1125312FE1E132DB47BFE2612
297:10128000174D13071CB49004FE7810FF028355F12C
298:10129000FF028355531DFE1213D6FE3000B0FE80B0
299:1012A000171C631307FE5610530DFE1613D6FE646B
300:1012B00000B0FE80170AFE64001C941307FE28107D
301:1012C0005307FE6013D6FEC800B0FE80170AFEC8A2
302:1012D000001C95130771D6FE900148FE8C1745F34C
303:1012E000FE43F496FE56F0FE9E17FE04F458FE43AD
304:1012F000F494F68B01FE2416233FFCA88C4948FE8B
305:10130000DA176249FE1C10A88C8048FEDA1762804A
306:10131000715026FE4DF400F7451307FEB456FEC388
307:10132000580250130D02503E784F45010816A92768
308:1013300025BEFE03EAFE7E01010816A92725FEE967
309:101340000A010816A92725FEE90AFE05EAFE7F0123
310:10135000010816A92725FE6909FE02EAFE8001019F
311:101360000816A92725FEE80847FE810103B61E835B
312:101370000138062431A278F2530736FE34F43FA137
313:1013800078039A1E830138061231F04F45FE901003
314:10139000FE405A233FFB8C4948FEAA186249718CD3
315:1013A0008048FEAA186280FEB456FE405D01C60168
316:1013B000FEAC1DFE0217FEC845FE5AF0FEC018FE28
317:1013C00043482D9336FE34F4FE0011FE40102DB438
318:1013D00036FE34F404FE34102DFE0B00364663FE58
319:1013E0002810FEC049FF020054B2FE900148FEFAE8
320:1013F0001845FE1CF43FF3FE40F496FE56F0FE0C3A
321:1014000019FE04F458FE40F494F63E2D934ED00D90
322:1014100021FE7F01FEC846FE24138C005D2621FEBE
323:101420007E01FEC845FE141321FE8001FE4845FAE8
324:1014300021FE8101FEC8444E260213070278455062
325:10144000130D021407010817FE8219140D01081765
326:10145000FE8219141D010817FE82195FFE894901D9
327:1014600008021407010817C1141D010817C1140749
328:10147000010817C1FE8949010817C15FFE894A01A9
329:1014800008025002140701081774147F010817742A
330:10149000141201081774FE89490108177414000119
331:1014A000081774FE894A01081774FE0949010817D4
332:1014B000745FCC01080221E40907FE4C13C820E444
333:1014C000FE49F4004D5FA15EFE01ECFE2701CCFF5A
334:1014D0000200102FFE3E1A014309FEE300FE221314
335:1014E00016FE641A26209E0141219E09075D010C0B
336:1014F000610744020A5A0118FE0040AA091AFE12A6
337:10150000130A9D0118AA0A6701A3020A9D0118AADD
338:10151000FE80E71A091A5DFE455801FEB216AA02BE
339:101520000A5A0118AA0A6701A3020A5A011801FE01
340:101530007E1EFE804CFE49E41AFE12130A9D01181D
341:10154000FE804C0A67015C021C1A877CE5FE18DFEE
342:10155000FE19DEFE241CFE1DF728B1FE041B01FE51
343:101560002A1CFAB3287CFE2C01FE2F1902C92BFE7F
344:10157000F41AFEFA101C1A8703FE6401FE00F4241C
345:10158000FE185803FE6601FE1958B32401FE0E1F13
346:10159000FE30F407FE3C507CFE3800FE0F79FE1C46
347:1015A000F724B1FE501BFED4143102C92BFE261BBA
348:1015B000FEBA101C1A87FE835AFE18DFFE19DEFEE3
349:1015C0001DF754B1FE721BFEB214FCB3547C12FE24
350:1015D000AF19FE98E70002C92BFE661BFE8A101C9D
351:1015E0001A878B0FFE309004FEB0933A0BFE18580A
352:1015F000FE329004FEB2933A0BFE19580EA8B34A7D
353:101600007C12FE0F79FE1CF74AB1FEC61BFE5E146B
354:101610003102C92BFE961B5CFE02F61A87FE18FEED
355:101620006AFE19FE6B01FE1E1FFE1DF765B1FEEE80
356:101630001BFE3614FE1C13B3653EFE8358FEAF1925
357:10164000FE80E71AFE81E71A15FEDD007A30027A85
358:1016500030FE12452BFEDC1B1F0747B5C30535FEC8
359:1016600039F0752602FE7E18231D361311028703FA
360:10167000E32307FEEF12FEE110903460FE028009C2
361:1016800056FE3C13FE8214FE421351FE06830A5A94
362:101690000118CBFE3E12FE4148FE454801FEB2163F
363:1016A000FE00CCCBFEF3133F89091AA50A9D011851
364:1016B000FE804C0185FE1610099B4EFE4014FE2450
365:1016C00012FE1456FED6F0FE521C1C0D02FE9CE7C4
366:1016D0000D19FE1500408D3001F41C070251FE0665
367:1016E00083FE1880612844155601851C0702FE38C8
368:1016F00090FEBA9091DE7EDFFE485531FEC955025C
369:1017000021B98820B9020ABA0118FE41480A5701D6
370:1017100018FE49441BFE1E1D8889020A5A01180939
371:101720001AA40A6701A30A570118888902FE4EE429
372:101730001D7BFE521D03FE9000FE3A45FE2C10FE5E
373:101740004EE4DD7BFE641D03FE9200D112FE1A10F2
374:10175000FE4EE4FE0B007BFE761D03FE9400D124BA
375:10176000FE081003FE9600D163FE4E4583CAFF04B7
376:101770006854FEF1102349FE081CFE6719FE0A1C7E
377:10178000FE1AF4FE000483B21D48FEAA1D131D02BA
378:101790000992FE5AF0FEBA1D2E93FE34100912FE75
379:1017A0005AF0FEC81D2EB4FE2610091D362E63FE0B
380:1017B0001A10090D362E94F20907362E95A1C8028B
381:1017C0001F930142FE04FE99039C8B022AFE1C1EFD
382:1017D000FE14F0082FFE0C1E2AFE1C1E8FFE1C1E7F
383:1017E000FE82F0FE101E020F3F04FE8083330B0EBC
384:1017F000020FFE188004FE9883330B0E020FFE02C8
385:101800008004FE8283330B0E020FFE068004FE86E8
386:1018100083330B0E020FFE1B8004FE9B83330B0EE3
387:10182000020FFE048004FE8483330B0E020FFE8041
388:101830008004FE8083FEC9470B0E020FFE1981044F
389:10184000FE9983FECA470B0E020FFE068304FE8636
390:1018500083FECE470B0E020FFE2C9004FEAC933A93
391:101860000B0E020FFEAE9004FEAE93790B0E020F2C
392:10187000FE089004FE88933A0B0E020FFE8A900435
393:10188000FE8A93790B0E020FFE0C9004FE8C933AA5
394:101890000B0E020FFE8E9004FE8E93790B0E020F3C
395:1018A000FE3C9004FEBC933A0B0E028B0FFE0380AD
396:0E18B00004FE8383330B770EA802FF66000050
397:00000001FF
398/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/advansys/mcode.bin.ihex b/firmware/advansys/mcode.bin.ihex
new file mode 100644
index 000000000000..cd160d938667
--- /dev/null
+++ b/firmware/advansys/mcode.bin.ihex
@@ -0,0 +1,147 @@
1:100000003F452C01010301190F0000000000000012
2:10001000000000000F0F0F0F0F0F0F0F0000000068
3:1000200000000000000000000000000000000000D0
4:1000300000000000000000000000000000000000C0
5:100040000000000000000000C3120D0501000000C8
6:1000500000FF000000000000FF80FFFF0100000023
7:10006000000000000000002300000000000700FF67
8:1000700000000000FFFFFF00000000000000E48817
9:100080000000000080734804360000A2C2008073A4
10:1000900003233640B600360005D60CD212DA00A291
11:1000A000C20092801E985000F5004898DF23366009
12:1000B000B60092804F00F5004898EF233660B600F6
13:1000C000928080629280004615EE13EA020109D800
14:1000D000CD044D0000A3D600A6977F2304618401C0
15:1000E000E684D2C18073CD044D0000A3DA01A69747
16:1000F000C681C28880738077000101A1FE004F0095
17:10010000849707A6080100330300C288030301DEB9
18:10011000C288CE006960CE0002034A6000A2780166
19:10012000806307A62401788103038063E20007A6A9
20:10013000340100330400C2880307020104CA0D23FE
21:1001400068984D04048505D80D236898CD041523BF
22:10015000F888FB23026182018063020306A3620127
23:1001600000330A00C2884E0007A36E0100330B0063
24:10017000C288CD04362D00331A00C288500488810D
25:1001800006AB820188814E0007A39201500000A3B4
26:100190003C0100057C814697020105C60423A001AD
27:1001A0001523A101BE81FD23026182010ADA4A0002
28:1001B000066100A0B4018063CD04362D00331B001E
29:1001C000C28806236898CD04E684060100A2D40103
30:1001D000576000A0DA01E6848023A001E6848073E2
31:1001E0004B00066100A2000204010CDE020103CCF8
32:1001F0004F008497FC810823024182014F006297DF
33:1002000048048480F0970046560003C00123E800AC
34:1002100081730629034206E203EE6BEB1123F88893
35:100220000498F0808073807707A42A027C9506A644
36:10023000340203A64C044682040103D8B4986A969B
37:100240004682FE95806783038063B62D02A66C020A
38:1002500007A65A0206A65E0203A66202C2887C9521
39:100260004882609648820423A0011423A1013C84A3
40:1002700004010CDCE0232561EF0014014F04A80108
41:100280006F00A5010323A40106239C01242B1C015C
42:1002900002A6AA0207A65A0206A65E0203A6200428
43:1002A00001A6B40200A6B40200331200C288000EF8
44:1002B0008063004300A08C024D0404010BDCE723A3
45:1002C00004618401103112351401EC006C38003FD8
46:1002D0000000EA821823046118A0E2020401A2C807
47:1002E00000331F00C28808310A350C390E3D7E9854
48:1002F000B62D01A6140300A6140307A60C0306A638
49:10030000100303A6200402A66C0200333300C28847
50:100310007C95EE826096EE82829880427E9864E4BC
51:1003200004012DC83105070100A2540300438701D1
52:10033000050586987E9800A6160307A64C0303A61B
53:100340003C0406A6500301A6160300332500C2880C
54:100350007C95328360963283040110CE07C8050570
55:10036000EB0400330020C020816272830001050588
56:10037000FFA27A03B1010823B2012E8305051501FE
57:1003800000A29A03EC006E0095016C38003F00005B
58:1003900001A6960300A69603108480427E9801A6CB
59:1003A000A40300A6BC031084A898804201A6A4035D
60:1003B00007A6B203D4837C95A88300332F00C2889C
61:1003C000A898804200A6BC0307A6CA03D4837C95E4
62:1003D000C08300332600C288382B80328036042345
63:1003E000A0011223A101108407F006A4F403806B7E
64:1003F000806705238303806303A60E0407A6060413
65:1004000006A60A0400331700C2887C95F483609620
66:10041000F483208407F006A42004806B8067052302
67:1004200083038063B62D03A63C0407A6340406A606
68:10043000380400333000C2887C9520846096208484
69:100440001D0106CC00330084C0200023EA00816235
70:10045000A20D806307A65A0400331800C288030364
71:100460008063A30107A46404230100A286040AA0F8
72:100470007604E00000331D00C2880BA08204E00077
73:1004800000331E00C2884223F888002322A3E6041A
74:10049000082322A3A204282322A3AE04022322A31A
75:1004A000C4044223F8884A00066100A0AE04452334
76:1004B000F888049800A2C004B49800330082C020D9
77:1004C0008162E8814723F88804010BDE0498B49820
78:1004D00000330081C0208162140100A00002432388
79:1004E000F8880423A0014423A10180734D0003A3D5
80:1004F000F40400332700C288040104DC0223A201B3
81:100500000423A001049826954B00F6004F044F00E9
82:1005100000A3220500057600066100A21C050A85DD
83:100520004697CD04248548048480020103DA8023A1
84:10053000820134850223A0014A00066100A2400521
85:100540001D0104D6FF2386414B60CB00FF238001B1
86:1005500049008101040102C830018001F704030150
87:1005600049048001C90000050001FFA0600577046F
88:100570000123EA005D00FEC700620023EA00006379
89:1005800007A4F805030302A08E05F48500332D00AF
90:10059000C28804A0B80580630023DF004A0006611A
91:1005A00000A2A4051D0106D60223024182015000CB
92:1005B00062970485042302418201048508A0BE05D8
93:1005C000F48503A0C405F48501A0CE0588008063EE
94:1005D000CC8607A0EE055F00002BDF0800A2E60531
95:1005E0008067806301A27A067C8506236898482389
96:1005F000F88807238000068780637C850023DF005E
97:1006000000634A00066100A236061D0116D4C0230D
98:1006100007418303806306A61C0600333700C288A7
99:100620001D0101D620236360830380630223DF0062
100:1006300007A67C05EF046F0000634B000641CB006A
101:100640005200066100A24E061D0103CAC0230741E5
102:1006500000631D0104CC00330083C020816280232D
103:1006600007410063806708238303806300630123DD
104:10067000DF0006A6840607A67C058067806300333A
105:100680000040C020816200630000FE958303806308
106:1006900006A6940607A67C05000001A01407002BFF
107:1006A000400E8063010006A6AA0607A67C05400E40
108:1006B0008063004300A0A20606A6BC0607A67C0530
109:1006C0008067400E806307A67C050023DF0000637F
110:1006D00007A6D60600332A00C28803038063890078
111:1006E0000A2B07A6E80600332900C288004300A2AF
112:1006F000F406C00E8063DE86C00E00330080C0208A
113:100700008162040102DA80637C85807B806306A6B7
114:100710008C0600332C00C2880CA22E07FE958303A2
115:10072000806306A62C0707A67C0500333D00C2881F
116:1007300000008067830380630CA0440707A67C0544
117:10074000BF2304618401E6840063F0040101F10029
118:100750000001F20001058001720471008101700442
119:10076000800581050063F004F20072040101F100CC
120:1007700070008101700471008101720080017104B8
121:100780007000800170040063F004F2007204000144
122:10079000F10070008001700471008001720081011D
123:1007A000710470008101700400630023B3018305AC
124:1007B000A301A201A1010123A0010001C80003A11E
125:1007C000C40700330700C28880058105040111C8F1
126:1007D0004800B001B1010823B201050148040043FB
127:1007E00000A2E4070005DA870001C800FF238001AA
128:1007F00005050063F7041A09F6086E040002804339
129:100800007608800277040063F7041A09F6086E047C
130:10081000000200A0140816880043760880027704BE
131:100820000063F3040023F40074008043F400CF401D
132:1008300000A2440874040201F7C9F6D9000101A11D
133:10084000240804982695248873040063F30475042F
134:100850005A88020104D84697049826954A8875005C
135:1008600000A3640800054E8873040063807B8063E6
136:1008700006A6760800333E00C28880678303806343
137:100880000063382B9C88382B928832093105929866
138:100890000505B209006300320036003A003E0063ED
139:1008A00080328036803A803EB43D0063382B40323F
140:1008B0004036403A403E00635A20C94000A0B40888
141:1008C0005D00FEC300638073E6200223E8008273AC
142:1008D000FFFD80731323F8886620C0200423A00145
143:1008E000A123A1018162E28880738077680000A261
144:1008F000800003C2F1C74123F8881123A10104231A
145:04090000A001E684E8
146:00000001FF
147/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/bnx2/bnx2-mips-06-4.6.16.fw.ihex b/firmware/bnx2/bnx2-mips-06-4.6.16.fw.ihex
new file mode 100644
index 000000000000..0df10b53a6af
--- /dev/null
+++ b/firmware/bnx2/bnx2-mips-06-4.6.16.fw.ihex
@@ -0,0 +1,5805 @@
1:10000000080000F80800000000004DA4000000C82F
2:1000100000000000000000000000000008004DA4E7
3:100020000000001400004E6C080000800800000072
4:10003000000056CC00004E800800582000000084CC
5:100040000000A54C080056CC000001340000A5D0EB
6:10005000080031D808000000000070DC0000A70490
7:10006000000000000000000000000000080070DC3C
8:1000700000000024000117E00800048808000400C4
9:100080000000175C000118040000000000000000E0
10:100090000000000000000000000000000000000060
11:1000A000080000980800000000003A7400012F606A
12:1000B0000000000000000000000000000000000040
13:0800C000000000000000000038
14:0800C8000A00003E00000000E8
15:1000D000000000000000000D636F6D342E362E31DD
16:1000E00036000000040610020000000000000003BB
17:1000F00000000014000000320000000300000000B7
18:1001000000000000000000000000000000000000EF
19:1001100000000010000001360000EA60000000014D
20:1001200000000000000000000000000000000008C7
21:1001300000000000000000000000000000000000BF
22:1001400000000000000000000000000000000000AF
23:10015000000000000000000000000000000000009F
24:10016000000000020000000000000000000000008D
25:10017000000000000000000000000000000000007F
26:10018000000000000000000000000010000000005F
27:10019000000000000000000000000000000000005F
28:1001A000000000000000000000000000000000004F
29:1001B000000000000000000000000000000000003F
30:1001C0000000000010000003000000000000000D0F
31:1001D0000000000D3C02080024424DE03C030800F2
32:1001E00024634ED4AC4000000043202B1480FFFD5C
33:1001F000244200043C1D080037BD7FFC03A0F02111
34:100200003C100800261000F83C1C0800279C4DE01C
35:100210000E0002AA000000000000000D3C03601068
36:100220008C6450002402FF7F3C1A8000008220244E
37:100230003484380C24020037AC645000AF4200080C
38:1002400024020C80AF4200243C1B80083C060800BE
39:1002500024C6079C3C02080024424E182404001BBC
40:100260002484FFFFAC4600000481FFFD244200040B
41:100270003C020800244203803C010800AC224E20CE
42:100280003C020800244206803C010800AC224E24B7
43:100290003C02080024420D803C010800AC224E6064
44:1002A0003C02080024420A103C03080024630908A9
45:1002B0003C040800248409443C05080024A53C248F
46:1002C0003C010800AC224E683C0208002442057044
47:1002D0003C010800AC264E643C010800AC254E747D
48:1002E0003C010800AC234E7C3C010800AC224E804F
49:1002F0003C010800AC244E843C010800AC234E1C99
50:100300003C010800AC204E283C010800AC204E2CDB
51:100310003C010800AC204E303C010800AC204E34BB
52:100320003C010800AC204E383C010800AC204E3C9B
53:100330003C010800AC204E403C010800AC244E4477
54:100340003C010800AC204E483C010800AC204E4C5B
55:100350003C010800AC204E503C010800AC204E543B
56:100360003C010800AC204E583C010800AC264E5C15
57:100370003C010800AC204E6C3C010800AC254E70DE
58:100380003C010800AC234E780A0006F4000000008F
59:100390003C0308008C6300208F8200081043000398
60:1003A000000000000A00052CAF83000803E00008ED
61:1003B0000000000027BDFFE8AFB00010AFBF001481
62:1003C00027500100920200091040001A2403000186
63:1003D0003C0208008C42002010400016000018214A
64:1003E0000E00056400000000960300083C060800AB
65:1003F00094C64E968E0400188F8200209605000C3D
66:1004000000031C0000661825AC440000AC45000445
67:1004100024040001AC400008AC40000CAC400010CB
68:10042000AC400014AC4000180E000589AC43001C21
69:10043000000018218FBF00148FB000100060102141
70:1004400003E0000827BD001827BDFFE8AFBF00107C
71:100450009742010830437000240220001062000A15
72:1004600028642001548000128FBF00102402400035
73:1004700010620008240260001062000A8FBF0010A2
74:100480000A0000FB000010218FBF00100A0000BB13
75:1004900027BD00180E0003F6000000000A0000FA55
76:1004A0008FBF00100E000FB6000000008FBF0010BD
77:1004B0000000102103E0000827BD00183C020800DE
78:1004C0008C42002027BDFFE810400027AFBF00107E
79:1004D0000E00056400000000974201089743010CDC
80:1004E0008F8500203042003E3063FFFF0002140081
81:1004F00000431025ACA200008F4201003C0608001A
82:1005000094C64E968FBF0010ACA20004974301160C
83:100510009744010E3C02200000031C003084FFFFC2
84:1005200000641825ACA3000800C2302597420110D2
85:100530009743011224040001000214003063FFFFFE
86:1005400000431025ACA2000C9742011427BD0018EF
87:100550003042FFFFACA20010ACA00014ACA0001809
88:100560000A000589ACA6001C8FBF001003E000083C
89:1005700027BD00183C0208008C42002027BDFFE880
90:100580001040002AAFBF00100E00056400000000FC
91:10059000974201089743010C8F8500203042003EAE
92:1005A0003063FFFF0002140000431025ACA20000DE
93:1005B0008F4201003C06080094C64E968FBF001083
94:1005C000ACA20004974301169744010E3C022000A0
95:1005D00000031C003084FFFF00641825ACA3000852
96:1005E00000C23025974201109743011224040001F4
97:1005F000000214003063FFFF00431025ACA2000C82
98:100600009742011427BD00183042FFFFACA2001032
99:100610008F420118ACA200149342010B304200FF3C
100:10062000ACA200180A000589ACA6001C8FBF001000
101:1006300003E0000827BD001827BDFFE0AFB00010A1
102:10064000AFBF0018AFB10014275001009203000B98
103:100650002402001A961100081462003500002021BF
104:100660003222000110400009000000008E0200004C
105:1006700096030014000211C200021040005A10211B
106:10068000A44300800A000179322200020E00012BEF
107:10069000000000003C0208008C420040244200019F
108:1006A0003C010800AC220040322200020002202B54
109:1006B0003C0208008C420044322300042442000122
110:1006C0003C010800AC2200441060001A8FBF0018E3
111:1006D0008F4202B804410008240400013C020800D3
112:1006E0008C420060244200013C010800AC22006002
113:1006F0000A00019C8FB100148E02002096030016A0
114:1007000000002021AF4202808E020004A743028431
115:10071000AF4202883C021000AF4202B83C0208001F
116:100720008C42005C244200013C010800AC22005CC9
117:100730008FBF00188FB100148FB0001000801021FF
118:1007400003E0000827BD002027BDFFE0AFB0001088
119:10075000AFBF0018AFB10014275001009203000B87
120:1007600024020003961100081462003500002021C5
121:100770003222000110400009000000008E0200003B
122:1007800096030014000211C200021040005A10210A
123:10079000A44300800A0001BD322200020E0000FDC9
124:1007A000000000003C0208008C420040244200018E
125:1007B0003C010800AC220040322200020002202B43
126:1007C0003C0208008C420044322300042442000111
127:1007D0003C010800AC2200441060001A8FBF0018D2
128:1007E0008F4202B804410008240400013C020800C2
129:1007F0008C420060244200013C010800AC220060F1
130:100800000A0001E08FB100148E020020960300164A
131:1008100000002021AF4202808E020004A743028420
132:10082000AF4202883C021000AF4202B83C0208000E
133:100830008C42005C244200013C010800AC22005CB8
134:100840008FBF00188FB100148FB0001000801021EE
135:1008500003E0000827BD00209362000003E00008C9
136:10086000AF80000403E000080000102127BDFFE86E
137:10087000AFBF0014AFB000108F420100AF420020A4
138:100880008F420104AF4200A89350010B0E0001E417
139:10089000321000FF3C02080024424E18001018805D
140:1008A0002E10001C16000004006210210E0001E74B
141:1008B0000A0001FF000000008C4200000040F8091F
142:1008C00000000000104000053C0240008F4301047E
143:1008D0003C026020AC4300143C024000AF420138AF
144:1008E0003C0208008C4200348FBF00148FB000100F
145:1008F000244200013C010800AC22003403E000085F
146:1009000027BD001827BDFFE8AFBF00108F42014090
147:100910000E0001E4AF4200200E0003800000000042
148:100920003C024000AF4201783C03080024630038D9
149:100930008C6200008FBF001027BD00182442000108
150:1009400003E00008AC62000027BDFFE8AFBF001065
151:100950008F4201800E0001E4AF4200208F430180EE
152:1009600024020F0014620005000000008F4201887D
153:10097000A742009C0A0002393C024000936200003A
154:1009800024030050304200FF144300083C024000A2
155:100990000E00036400000000144000043C0240000C
156:1009A0000E000E42000000003C024000AF4201B8C1
157:1009B0003C0208008C42003C8FBF00102442000122
158:1009C0003C010800AC22003C03E0000827BD0018F1
159:1009D00003E00008000010218F4301048F82001003
160:1009E00010430008000000003C0208008C42008414
161:1009F000244200013C010800AC2200848F42010423
162:100A0000AF82001003E000080000000027BDFFE8EF
163:100A1000AFBF001027440100948200083043000259
164:100A2000304200041040001B000000008F4202B85A
165:100A300004410008240500013C0208008C420060CB
166:100A4000244200013C010800AC2200600A0002813F
167:100A50008FBF00108C820020948300160000282194
168:100A6000AF4202808C820004A7430284AF42028816
169:100A70003C021000AF4202B83C0208008C42005C0D
170:100A8000244200013C010800AC22005C0A00028103
171:100A90008FBF001010600008240500013C02080010
172:100AA0008C420084244200013C010800AC220084F6
173:100AB0000A0002818FBF00108F4401000E00024423
174:100AC00000000000000028218FBF001000A01021AE
175:100AD00003E0000827BD00183C0208008C42008893
176:100AE000274301009465000C244200013C010800EA
177:100AF000AC2200888C64001803451021904540000A
178:100B0000AF4400388C62001C2403FFF800052E005F
179:100B10000043102434420004AF42003C3C02000574
180:100B2000AF420030000000000000000000000000A4
181:100B3000AF450404000000000000000000000000B9
182:100B40003C02000634420001AF42003000000000C9
183:100B500000000000000000008F4200003042001042
184:100B60001040FFFD0000102103E00008000000001D
185:100B700027BDFFE0AFBF0018AFB100140E00005555
186:100B8000AFB000103C028000344200708C42000084
187:100B9000AF8200140E0000B2000000003C02800092
188:100BA000344600703C0308008C6300A03C0208003F
189:100BB0008C4200A4104300048F8400143C01080000
190:100BC000AC2300A4A743009E8CCA00003C0308008D
191:100BD0008C6300BC3C0208008C4200B80144202316
192:100BE00000641821000040210064202B00481021DF
193:100BF000004410213C010800AC2300BC3C0108006B
194:100C0000AC2200B88F510000322200071040FFE1F3
195:100C1000AF8A00148CC600003C0508008CA500BCFF
196:100C20003C0408008C8400B800CA302300A62821A8
197:100C30000000102100A6302B0082202100862021F8
198:100C4000322700013C010800AC2500BC3C01080033
199:100C5000AC2400B810E00021322200028F420100D3
200:100C6000AF4200208F420104AF4200A89342010B23
201:100C70000E0001E4305000FF2E02001C544000041E
202:100C8000001010800E0001E70A0002F800000000CA
203:100C90003C03080024634E18004310218C420000DE
204:100CA0000040F80900000000104000053C02400030
205:100CB0008F4301043C026020AC4300143C0240001E
206:100CC000AF4201383C0208008C420034244200014B
207:100CD0003C010800AC220034322200021040000E19
208:100CE000322200048F4201400E0001E4AF42002096
209:100CF0000E000380000000003C024000AF4201787B
210:100D00003C0208008C420038244200013C010800EB
211:100D1000AC220038322200041040FF9B3C028000CD
212:100D20008F4201800E0001E4AF4200208F4301801A
213:100D300024020F0014620005000000008F420188A9
214:100D4000A742009C0A00032D3C0240009362000071
215:100D500024030050304200FF144300083C024000CE
216:100D60000E00036400000000544000043C024000F8
217:100D70000E000E42000000003C024000AF4201B8ED
218:100D80003C0208008C42003C244200013C01080067
219:100D9000AC22003C0A0002B03C0280003C02900001
220:100DA0003442000100822025AF4400208F42002001
221:100DB0000440FFFE0000000003E000080000000007
222:100DC0003C028000344200010082202503E000083C
223:100DD000AF44002027BDFFE0AFB10014AFB000105A
224:100DE00000808821AFBF00180E00033530B000FF2F
225:100DF0009362007D0220202102028025A370007DE5
226:100E00008F7000743C0280000E00033E02028024BA
227:100E1000160000098FBF00188F4201F80440FFFE42
228:100E200024020002AF5101C0A34201C43C021000E1
229:100E3000AF4201F88FBF00188FB100148FB00010BF
230:100E400003E0000827BD002027BDFFD000001021CF
231:100E500003E0000827BD003027BDFFE8AFBF00104A
232:100E6000974201843042020010400005000020211A
233:100E70000E001079000000000A000378240400012D
234:100E80008F420188044000098FBF00108F42018803
235:100E90003C03FF00004310243C0304001443000300
236:100EA000240400019362003E8FBF001000801021D7
237:100EB00003E0000827BD0018A36000228F44014012
238:100EC0000A0003432405000127BDFFE8AFBF00145B
239:100ED000AFB000109362000024030020304200FFF6
240:100EE0001043000B00000000936200002403003058
241:100EF000304200FF10430006000000009362000033
242:100F000024030050304200FF144300628FBF0014DE
243:100F100093420148304200FF2443FFFF2C6200054A
244:100F20001040005C8FBF0014000310803C030800D9
245:100F300024634DA4004310218C42000000400008AF
246:100F4000000000000E0003358F4401408F70000C3C
247:100F50008F4201441602000224020001AF62000C1D
248:100F60000E00033E8F4401408F42014414500004A0
249:100F70008FBF00148FB000100A000FED27BD0018BE
250:100F80008F62000C0A0003EC000000009762001062
251:100F90008F4301443042FFFF14620009000000004B
252:100FA00024020001A76200108F420140AF420200FC
253:100FB0003C021000AF4202380A0003F38FBF001456
254:100FC000976200100A0003EC000000000E000335D9
255:100FD0008F440140976200128F4301443050FFFF5D
256:100FE0001603000224020001A76200120E00033E55
257:100FF0008F4401408F420144160200048FBF001449
258:101000008FB000100A00037C27BD00189762001201
259:101010000A0003EC00000000976200148F430144B3
260:101020003042FFFF146200068FBF0014240200014B
261:101030008FB00010A76200140A00131927BD001812
262:10104000976200140A0003EC00000000976200168B
263:101050008F4301443042FFFF146200062402000166
264:101060008FBF00148FB00010A76200160A000BE0BB
265:1010700027BD001897620016144000068FBF0014A9
266:101080003C0208008C420070244200013C01080030
267:10109000AC2200708FB0001003E0000827BD0018DC
268:1010A00027BDFFE8AFBF0014AFB0001093430109A4
269:1010B0002402001F8F500100106200A5286200204A
270:1010C00010400018240200382862000A1040000C6A
271:1010D0002402000B286200081040002C00000000D1
272:1010E000046000E728620002144000282402000681
273:1010F000106200268FBF00140A0004F08FB00010A9
274:101100001062005E2862000B144000DE8FBF0014E6
275:101110002402000E106200738FB000100A0004F069
276:1011200000000000106200C2286200391040000A6E
277:101130002402008024020036106200CC28620037AE
278:10114000104000B624020035106200C38FBF0014A7
279:101150000A0004F08FB000101062002B286200819A
280:1011600010400006240200C824020039106200B6B4
281:101170008FBF00140A0004F08FB0001010620099B5
282:101180008FBF00140A0004F08FB000103C0208006A
283:101190008C420020104000BB8FBF00140E0005647D
284:1011A000000000008F4201008F8300209745010C52
285:1011B00097460108AC6200008F4201043C0408001D
286:1011C00094844E9600052C00AC6200048F420118F6
287:1011D0000006340000C43025AC6200088F42011CB8
288:1011E00024040001AC62000C9342010A00A22825ED
289:1011F000AC650010AC600014AC600018AC66001C5C
290:101200000A0004C48FBF00143C0208008C42002076
291:101210001040009C8FBF00140E0005640000000009
292:10122000974401083C03080094634E969745010CCF
293:10123000000422029746010E8F820020000426003F
294:101240000083202500052C003C03008000A62825F3
295:1012500000832025AC400000AC400004AC400008F6
296:10126000AC40000CAC450010AC400014AC40001881
297:10127000AC44001C0A0004C3240400019742010C82
298:101280001440001500000000936200053042001079
299:1012900014400011000000000E0003350200202160
300:1012A0009362000502002021344200100E00033E2C
301:1012B000A36200059362000024030020304200FF77
302:1012C0001043006F020020218FBF00148FB0001068
303:1012D0000A00108F27BD00180000000D0A0004EF5F
304:1012E0008FBF00143C0208008C42002010400065B3
305:1012F0008FBF00140E000564000000008F4201043F
306:101300008F8300209744010C3C05080094A54E965D
307:10131000AC6200009762002C000424003042FFFF02
308:10132000008220253C02400E00A22825AC64000467
309:10133000AC600008AC60000CAC600010AC60001445
310:10134000AC600018AC65001C0A0004C32404000152
311:101350000E00033502002021A76000080E00033EA6
312:1013600002002021020020210E0003432405000179
313:101370003C0208008C420020104000428FBF001445
314:101380000E000564000000009742010C8F830020CE
315:101390003C05080094A54E9600021400AC700000B5
316:1013A000AC620004AC6000088F64004C3C02401F3B
317:1013B00000A22825AC64000C8F62005024040001B8
318:1013C000AC6200108F620054AC620014AC60001874
319:1013D000AC65001C8FBF00148FB000100A00058997
320:1013E00027BD00189362000024030020304200FF54
321:1013F000104300248FBF00140E000FD702002021DD
322:10140000104000208FBF0014020020218FB0001078
323:10141000000028210A00034327BD001802002021F4
324:101420008FBF00148FB000100A00065127BD0018AE
325:101430009745010C020020218FBF00148FB00010CF
326:101440000A00067127BD0018020020218FB000108D
327:101450000A00069627BD00189345010D02002021C1
328:101460008FB000100A0006E027BD001802002021FE
329:101470008FBF00148FB000100A0006BC27BD0018F3
330:101480008FBF00148FB0001003E0000827BD0018C4
331:101490008F4202780440FFFE34820080AF42024057
332:1014A00024020002A34202443C02100003E00008B0
333:1014B000AF4202783C04080094844EA23C0208002B
334:1014C0008C424EAC3083FFFF000318C00043102154
335:1014D000AF42003C3C0208008C424EA8AF420038AC
336:1014E0003C02005034420008AF42003000000000CF
337:1014F00000000000000000008F4200003042002089
338:101500001040FFFD000000008F4204003C01080075
339:10151000AC224E988F4204043C010800AC224E9C41
340:101520003C020020AF420030000000003C020800F6
341:1015300094424EA03C03080094634EA43C0508006E
342:1015400094A54EA624840001004310213083FFFFA0
343:101550003C010800A4224EA03C010800A4244EA295
344:1015600014650003000000003C010800A4204EA206
345:1015700003E00008000000003C05000A27BDFFE86A
346:10158000034528213C04080024844E88AFBF001086
347:101590000E0005EE2406000A3C02080094424E8A22
348:1015A0003C03080094634EA63042000F244200031F
349:1015B0000043180424027FFF0043102B1040000258
350:1015C000AF83001C0000000D0E0004FB00000000B3
351:1015D0003C02080094424E928FBF001027BD0018B5
352:1015E00003E00008A74200A23C02000A03421021C7
353:1015F000944300063C02080094424E923C010800CD
354:10160000A4234E8E004310238F83001C000214007D
355:10161000000214030043102B03E0000838420001CD
356:1016200027BDFFE8AFBF00103C02000A03421021B3
357:10163000944200063C010800A4224E8E0E0005488C
358:10164000000000005440FFF93C02000A8FBF001068
359:1016500003E0000827BD001827BDFFE8AFBF00105A
360:101660000E000548000000001040000300000000CC
361:101670000E000556000000003C0208008C424E9807
362:101680008FBF001027430400AF4200383C0208001F
363:101690008C424E9C27BD0018AF830020AF42003C17
364:1016A0003C020005AF42003003E00008AF800018A4
365:1016B0008F8200183C0300060002114000431025F1
366:1016C000AF420030000000000000000000000000F9
367:1016D0008F420000304200101040FFFD27420400FE
368:1016E000AF82002003E00008AF8000183C0608002D
369:1016F0008CC64E9C8F8500188F8300203C0208000A
370:1017000094424E9227BDFFE024A5000124630020EF
371:101710002442000124C70020AFB10014AFB0001074
372:10172000AFBF0018AF850018AF8300203C01080050
373:10173000A4224E92309000FF3C010800AC274E9C42
374:1017400004C100080000882104E000060000000039
375:101750003C0208008C424E98244200013C010800E3
376:10176000AC224E983C02080094424E923C03080082
377:1017700094634EA00010202B004310262C42000141
378:1017800000441025144000048F8300182402001028
379:101790001462000F000000000E00057A2411000101
380:1017A0003C03080094634E923C02080094424EA011
381:1017B00014620003000000000E0004FB00000000A3
382:1017C00016000003000000000E0005640000000089
383:1017D0003C03080094634E963C02080094424E94E9
384:1017E000246300013064FFFF3C010800A4234E96EF
385:1017F00014820003000000003C010800A4204E9663
386:1018000012000006000000003C02080094424E92C4
387:10181000A74200A20A0005DC022010210E000548A4
388:101820000000000010400004022010210E000556A8
389:1018300000000000022010218FBF00188FB100149B
390:101840008FB0001003E0000827BD00203084FFFFA8
391:1018500030A5FFFF000018211080000700000000E5
392:10186000308200011040000200042042006518216F
393:101870000A0005E40005284003E00008006010218C
394:1018800010C0000624C6FFFF8CA2000024A500049F
395:10189000AC8200000A0005EE2484000403E0000886
396:1018A0000000000010A0000824A3FFFFAC86000089
397:1018B00000000000000000002402FFFF2463FFFF7F
398:1018C0001462FFFA2484000403E000080000000012
399:1018D00024020001AF62000CA7620010A762001290
400:1018E000A762001403E00008A76200163082007FA0
401:1018F000034210213C08000E004818213C02080059
402:101900008C42002027BDFFD82407FF80AFB3001C06
403:10191000AFB20018AFB10014AFB00010AFBF0020DD
404:101920000080802130B100FF0087202430D200FFEA
405:101930001040002F00009821AF44002C906200005E
406:1019400024030050304200FF1443000E000000004A
407:101950003C0208008C4200E00202102100471024E3
408:10196000AF42002C3C0208008C4200E00202102131
409:101970003042007F0342102100481021944200D4DD
410:101980003053FFFF0E000564000000003C02080019
411:1019900094424E968F8300200011340000C23025FF
412:1019A00000122C003C02400000C2302534A500018A
413:1019B000AC7000008FBF0020AC6000048FB2001834
414:1019C000AC7300088FB10014AC60000C8FB3001C26
415:1019D000AC6500108FB00010AC600014240400014E
416:1019E000AC60001827BD00280A000589AC66001C01
417:1019F0008FBF00208FB3001C8FB200188FB100146E
418:101A00008FB0001003E0000827BD00289343010FAA
419:101A1000240200101062000E2865001110A00007BB
420:101A200024020012240200082405003A1062000675
421:101A30000000302103E0000800000000240500350C
422:101A40001462FFFC000030210A00060900000000BB
423:101A50008F42007424420FA003E00008AF62000C24
424:101A600027BDFFE8AFBF00100E00034324050001AF
425:101A70008FBF001024020001A762001227BD0018CA
426:101A80002402000103E00008A360002227BDFFE05C
427:101A9000AFB10014AFB00010AFBF001830B1FFFFFE
428:101AA0000E000335008080219362003F2403000470
429:101AB000304200FF1443000C0200202112200008D5
430:101AC0002402000A0E0006020000000093620005D6
431:101AD0002403FFFE00431024A36200052402001229
432:101AE000A362003F020020210E00033EA36000819C
433:101AF00016200003020020210E00066600000000F0
434:101B000002002021322600FF8FBF00188FB1001481
435:101B10008FB00010240500380A00060927BD0020F8
436:101B200027BDFFE0AFBF001CAFB20018AFB100147B
437:101B3000AFB000100E000335008080210E000602B9
438:101B4000000000009362003F24120018305100FF93
439:101B5000123200030200202124020012A362003F7F
440:101B6000936200052403FFFE004310240E00033E91
441:101B7000A362000502002021240500201632000780
442:101B8000000030218FBF001C8FB200188FB10014ED
443:101B90008FB000100A00034327BD00208FBF001C38
444:101BA0008FB200188FB100148FB0001024050039D7
445:101BB0000A00060927BD002027BDFFE8AFB00010CE
446:101BC000AFBF00149742010C24050036008080212D
447:101BD00014400010304600FF0E00033500000000E6
448:101BE00024020012A362003F9362000534420010F9
449:101BF0000E000602A36200050E00033E0200202133
450:101C0000020020210E000343240500200A0006D50F
451:101C1000000000000E000609000000000E00033561
452:101C200002002021936200232403FF9F0200202151
453:101C3000004310248FBF00148FB00010A362002354
454:101C40000A00033E27BD001827BDFFE0AFBF001804
455:101C5000AFB10014AFB0001030B100FF0E0003357B
456:101C600000808021240200120E000602A362003FC1
457:101C70000E00033E0200202102002021022030211C
458:101C80008FBF00188FB100148FB0001024050035ED
459:101C90000A00060927BD0020A380002C03E00008ED
460:101CA000A380002D8F4202780440FFFE8F82003413
461:101CB000AF42024024020002A34202443C02100050
462:101CC00003E00008AF4202783C0360008C625400DD
463:101CD000304200081440FFFD000000008C625408F0
464:101CE000AF82000024020052AC605408AC6454304F
465:101CF000AC6254342402000803E00008AC625400D3
466:101D00003C0260008C425400304200081040000544
467:101D10003C0360008C625400304200081440FFFD18
468:101D2000000000008F8300003C02600003E0000818
469:101D3000AC43540890A30000240200050080402119
470:101D40003063003F0000482114620005000050216C
471:101D500090A2001C94A3001E304900FF306AFFFFD0
472:101D6000AD00000CAD000010AD0000249502001481
473:101D70008D05001C8D0400183042FFFF0049102320
474:101D800000021100000237C30040382100862023E2
475:101D900000A2102B0082202300A72823AD05001CE1
476:101DA000AD040018A5090014A5090020A50A001615
477:101DB00003E00008A50A00228F4201F80440FFFE5C
478:101DC00024020002AF4401C0A34201C43C0210003F
479:101DD00003E00008AF4201F83C0208008C4200B466
480:101DE00027BDFFE8AFBF001424420001AFB00010D0
481:101DF0003C010800AC2200B48F4300243C02001FC9
482:101E000030AA00FF3442FF8030D800FF00628024F7
483:101E10000080F82130EF00FF1158003B01405821AD
484:101E2000240CFF803C19000A3163007F000310C0BE
485:101E300000031940006218213C0208008C4200DCBB
486:101E400025680001310D007F03E2102100431021BD
487:101E50003043007F03431821004C102400794821AF
488:101E6000AF4200248D220024016C1824006C7026DF
489:101E7000AD22000C8D220024310800FFAD2200109D
490:101E800095220014952300208D27001C3042FFFF6F
491:101E90003063FFFF8D26001800431023000211005D
492:101EA000000227C30040282100C4302300E2102B89
493:101EB00000C2302300E53823AD27001CAD260018F2
494:101EC00095220020A522001495220022154B000A1D
495:101ED000A52200168D2300248D220008254600012E
496:101EE000314500801462000430C4007F108F00026E
497:101EF00038AA008000C0502151AF000131C800FF56
498:101F00001518FFC9010058218F8400343082007FEA
499:101F1000034218213C02000A006218212402FF80BB
500:101F200000822024AF440024A06A0079A06A0083C4
501:101F30008C6200508F840034AC6200708C65007439
502:101F40003C027FFF3442FFFF00A228240E00073C22
503:101F5000AC650074AF5000248FBF00148FB0001028
504:101F600003E0000827BD001827BDFFC0AFBE003842
505:101F7000AFB70034AFB5002CAFB20020AFB1001C3A
506:101F8000AFB00018AFBF003CAFB60030AFB4002810
507:101F9000AFB300248F4500248F4600288F43002CC8
508:101FA0003C02001F3442FF800062182400C230242B
509:101FB0000080A821AFA3001400A2F0240E000700A7
510:101FC000AFA600103C0208008C4200E02410FF8005
511:101FD0000360882102A2102100501024AF42002487
512:101FE0003C0208008C4200E002A210213042007F37
513:101FF000034218213C02000A00629021924200D262
514:1020000093630084305700FF306300FF2402000117
515:1020100010620034036020212402000214620036A2
516:10202000000000000E0012E50240282192230083E8
517:10203000922200833063007F3042007F000210C094
518:1020400000031940006218213C0208008C4200DCA9
519:1020500002A210210043382100F01024AF420028D2
520:10206000922500789224008330E2007F03421821F9
521:102070003C02000C14850007006280212402FFFF4F
522:10208000A24200F12402FFFFA64200F20A0007F874
523:102090002402FFFF96020020A24200F196020022D5
524:1020A000A64200F28E020024AE4200F49222008387
525:1020B000A24200F08E4200C8AE4200FC8E4200C434
526:1020C000AE4200F88E220050AE4201008E4200CC9B
527:1020D000AE420104922200853042003F0A000853BC
528:1020E000344200400E00130802402821922200854D
529:1020F0000A0008533042003F936200852403FFDF4B
530:102100003042003FA36200859362008500431024A3
531:10211000A36200859363008393620078307400FFAC
532:10212000304200FF10540036240AFF803C0C000CA3
533:102130003283007F000310C00003194000621821A1
534:102140003C0208008C4200DC268800013109007F37
535:1021500002A210210043382130E2007F03421821FF
536:1021600000EA1024AF420028006C80218E02002477
537:10217000028A1824006A5826AE02000C8E0200243F
538:10218000310800FFAE0200109602001496030020F2
539:102190008E07001C3042FFFF3063FFFF8E060018E1
540:1021A0000043102300021100000227C30040282131
541:1021B00000C4302300E2102B00C2302300E5382396
542:1021C000AE07001CAE06001896020020A6020014FE
543:1021D00096020022A602001692220079304200FFE9
544:1021E000105400070000000051370001316800FF63
545:1021F00092220078304200FF1448FFCD0100A02158
546:1022000092220083A22200798E2200500A0008B395
547:10221000AE220070A22200858E22004C2405FF8091
548:10222000AE42010C9222008534420020A222008599
549:10223000924200D13C0308008C6300DC305400FF64
550:102240003C0208008C4200E400143140001420C01D
551:1022500002A3182100C4202102A210210064382109
552:10226000004610210045182400E52824AF45002829
553:10227000AF43002C3042007F924400D030E3007F17
554:1022800003422821034318213C02000C00628021F4
555:102290003C02000E309600FF00A298211296002A00
556:1022A000000000008E02000C0200202102602821A4
557:1022B00010400025261000280E00071B000000001B
558:1022C0009262000D26830001307400FF3042007FCF
559:1022D000A262000D2404FF801697FFF026730020F1
560:1022E0003C0208008C4200DC0000A02102A2102168
561:1022F00000441024AF4200283C0208008C4200E455
562:102300003C0308008C6300DC02A21021004410246E
563:10231000AF42002C3C0208008C4200E402A31821CA
564:102320003063007F02A210213042007F034220214F
565:10233000034318213C02000C006280213C02000E85
566:102340000A000875008298218E4200D8AE22005003
567:102350008E4200D8AE22007092250083924600D1B2
568:1023600092230083924400D12402FF8000A22824FB
569:102370003063007F308400FF00A628250064182AFF
570:102380001060000230A500FF38A50080A225008360
571:10239000A22500790E00070E000000009222007EA8
572:1023A00002A02021A222007A8E2300743C027FFF2B
573:1023B0003442FFFF006218240E00073CAE23007475
574:1023C0008FA20010AF5E00248FBF003CAF420028F8
575:1023D0008FBE00388FA200148FB700348FB6003044
576:1023E0008FB5002C8FB400288FB300248FB200204B
577:1023F0008FB1001C8FB0001827BD004003E000081B
578:10240000AF42002C90A2000024420001A0A20000D4
579:102410003C0308008C6300F4304200FF1443000FBB
580:1024200000803021A0A000003C0208008C4200E4A3
581:102430008F840034008220213082007F03421821E3
582:102440003C02000C006218212402FF80008220243C
583:10245000ACC3000003E00008AF4400288C820000F9
584:102460002442002003E00008AC82000094C2000077
585:102470003C080800950800CA30E7FFFF00804821AB
586:1024800001021021A4C2000094C200003042FFFFEC
587:1024900000E2102B54400001A4C7000094A20000E9
588:1024A0003C0308008C6300CC24420001A4A200007D
589:1024B00094A200003042FFFF544300078F8600289B
590:1024C0000107102BA4A00000544000010100382196
591:1024D000A4C700008F8600288CC4001CAF44003CB9
592:1024E00094A200008F43003C3042FFFF000210C066
593:1024F00000621821AF43003C8F42003C0082202341
594:1025000018800004000000008CC200180A000914A2
595:10251000244200018CC20018AF4200383C02005037
596:1025200034420010AF420030000000000000000004
597:10253000000000008F420000304200201040FFFDEC
598:10254000000000008F420404AD2200048F4204000A
599:10255000AD2200003C020020AF42003003E0000842
600:102560000000000027BDFFE0AFB20018AFB10014BB
601:10257000AFB00010AFBF001C94C2000000C08021AB
602:102580003C120800965200C624420001A602000038
603:102590009603000094E2000000E03021144300059F
604:1025A0008FB100300E0008E9024038210A000946C8
605:1025B000000000008C8300048C8200042442004050
606:1025C00004610007AC8200048C8200040440000413
607:1025D000000000008C82000024420001AC82000058
608:1025E000960200003042FFFF50520001A60000009A
609:1025F0009622000024420001A62200008F820028BB
610:102600009623000094420016144300048FBF001C60
611:1026100024020001A62200008FBF001C8FB2001808
612:102620008FB100148FB0001003E0000827BD002018
613:102630008F89002827BDFFE0AFBF00188D2200283A
614:102640002748040030E700FFAF4200388D22002CFD
615:10265000AF880030AF42003C3C020005AF42003082
616:10266000000000000000000000000000000000006A
617:1026700000000000000000008C82000C8C82000C26
618:10268000AD0200008C820010AD0200048C820018A4
619:10269000AD0200088C82001CAD02000C8CA200145C
620:1026A000AD0200108C820020AD0200149082000563
621:1026B000304200FF00021200AD0200188CA2001888
622:1026C000AD02001C8CA2000CAD0200208CA20010F8
623:1026D000AD0200248CA2001CAD0200288CA20020B8
624:1026E000AD02002CAD060030AD000034978300260B
625:1026F0003402FFFF14620002006020213404FFFF57
626:1027000010E00011AD040038952300369524003602
627:10271000240200013063FFFF000318C20069182182
628:1027200090650040308400070082100400451025A9
629:10273000A06200408F820028944200563042FFFF82
630:102740000A0009ADAD02003C952300369524003601
631:10275000240200013063FFFF000318C20069182142
632:1027600090650040308400070082100400021027AA
633:1027700000451024A0620040AD00003C00000000B5
634:1027800000000000000000003C020006344200404F
635:10279000AF42003000000000000000000000000018
636:1027A0008F420000304200101040FFFD8F8600284D
637:1027B000AF88003024C2005624C7003C24C400283F
638:1027C00024C5003224C600360E000927AFA200102F
639:1027D0008FBF001803E0000827BD00208F8300246E
640:1027E0003C0508008CA500E88F82003430633FFF71
641:1027F0000003198000451021004310212403FF80AD
642:102800003045007F00431024AF42002803451821C3
643:102810003C02000C0062302190C2000D0000382103
644:1028200034420010A0C2000D8F8900288F8A002436
645:1028300095230036000A1382304800032402000169
646:10284000A4C3000E1102000B290200021040000573
647:10285000240200021100000C240300010A0009F008
648:102860000000182111020006000000000A0009F013
649:10287000000018218CC2002C0A0009F0244300013A
650:102880008CC20014244300018CC200180043102B9A
651:1028900014400003000000000A0009F924070001A9
652:1028A0009522003E24420001A522003E000A138228
653:1028B000304300032C6200021040000900802821F0
654:1028C000146000040000000094C200360A000A09E7
655:1028D0003046FFFF8CC600380A000A090080282114
656:1028E000000030213C04080024844EB00A00095A3C
657:1028F00000000000274901008D22000C95230006EE
658:1029000001202021000216023045003F3063FFFF06
659:102910002402002728A6002810A2000EAF8300245E
660:1029200010C00008240200312402002110A2000976
661:102930002402002510A200079382002D0A000A2716
662:102940000000000010A200059382002D0A000A2753
663:10295000000000000A0009C5000000000A0006F798
664:102960000000000095230006912400058D25000C31
665:102970008D2600108D2700188D28001C8D29002021
666:10298000244200013C010800A4234EB63C0108008B
667:10299000A0244EB53C010800AC254EBC3C0108000B
668:1029A000AC264EC03C010800AC274EC83C010800D4
669:1029B000AC284ECC3C010800AC294ED003E0000806
670:1029C000A382002D8F87002827BDFFC0AFB300343E
671:1029D000AFB20030AFB1002CAFB00028AFBF0038AD
672:1029E0003C0208008C4200D094E3003030B0FFFF7E
673:1029F000005010073045FFFF3063FFFF00C09821F3
674:102A0000A7A200103C110800963100C614A30006CE
675:102A10003092FFFF8CE2002424420030AF42003CA1
676:102A20000A000A608CE2002094E200323042FFFF8C
677:102A300054A2000827A400188CE2002C2442003085
678:102A4000AF42003C8CE20028AF4200380A000A6E18
679:102A50008F84002827A5001027A6002002203821F7
680:102A60000E0008E9A7A000208FA200182442003021
681:102A7000AF4200388FA2001CAF42003C8F84002878
682:102A80003C020005AF42003094820034274304002A
683:102A90003042FFFF0202102B14400007AF830030CA
684:102AA00094820054948300340202102100431023C6
685:102AB0000A000A823043FFFF94830054948200345A
686:102AC0000223182100501023006218233063FFFFF7
687:102AD000948200163042FFFF144300030000000000
688:102AE0000A000A9024030001948200163042FFFF7E
689:102AF0000043102B104000058F8200309482001696
690:102B0000006210233043FFFF8F820030AC5300007F
691:102B1000AC400004AC520008AC43000C3C02000680
692:102B200034420010AF4200300000000000000000FE
693:102B3000000000008F420000304200101040FFFDF6
694:102B4000001018C20064182190650040320400078C
695:102B5000240200018FBF00388FB300348FB20030E1
696:102B60008FB1002C8FB00028008210040045102582
697:102B700027BD004003E00008A062004027BDFFA879
698:102B8000AFB60050AFB5004CAFB40048AFB300448F
699:102B9000AFB1003CAFBF0054AFB20040AFB000389F
700:102BA0008C9000003C0208008C4200E88F860034C4
701:102BB000960300022413FF8000C2302130633FFFE0
702:102BC0000003198000C3382100F3102490B20000E4
703:102BD000AF42002C9203000230E2007F034230211A
704:102BE0003C02000E00C28821306300C02402004075
705:102BF0000080A82100A0B021146200260000A021BE
706:102C00008E3400388E220018144000022402000185
707:102C1000AE2200189202000D304200201440001530
708:102C20008F8200343C0308008C6300DC001238C043
709:102C3000001231400043102100C7302100463821E6
710:102C400030E300073C02008030E6007800C2302507
711:102C50000343182100F31024AF4208002463090045
712:102C6000AF4608108E2200188C6300080043102124
713:102C7000AE2200188E22002C8E2300182442000160
714:102C80000062182B1060003D000000000A000B4499
715:102C900000000000920300022402FFC00043102441
716:102CA000304200FF1440000524020001AE2200184B
717:102CB000962200360A000B2D3054FFFF8E2200149E
718:102CC00024420001AE220018920200000002160009
719:102CD00000021603044100290000000096020002D1
720:102CE00027A4001000802821A7A200169602000247
721:102CF00024070001000030213042FFFFAF82002492
722:102D00000E00095AAFA0001C960300023C04080004
723:102D10008C8400E88F82003430633FFF0003198009
724:102D200000441021004310213043007F3C05000C7B
725:102D30000053102403431821AF42002800651821D6
726:102D40009062000D001221403042007FA062000D11
727:102D50003C0308008C6300E48F82003400431021A0
728:102D60000044382130E2007F034210210045102149
729:102D700000F31824AF430028AEA200009222000DF9
730:102D8000304200101040001302A020218F83002841
731:102D90008EA40000028030219462003E2442FFFF96
732:102DA000A462003E948400029625000E3084FFFF4A
733:102DB0000E000A3F30A5FFFF8F82002894430034A5
734:102DC0009622000E1443000302A0202124020001D9
735:102DD000A382002C02C028210E0008CF00000000B2
736:102DE0008FBF00548FB600508FB5004C8FB4004891
737:102DF0008FB300448FB200408FB1003C8FB00038D9
738:102E000003E0000827BD00588F85002827BDFFD0AC
739:102E1000AFB40028AFB20020AFBF002CAFB3002486
740:102E2000AFB1001CAFB0001890A800D090A600D1A0
741:102E30003C0208008C4200E48F83003430C700FF5E
742:102E4000A3A600100062182100071140006218219B
743:102E50003062007F034220213C02000C00822021CE
744:102E60002402FF8000621824311200FF8CB100D8C8
745:102E7000AFA400148CB300DC0000A021AF430028F5
746:102E800010F2001F240200018FA6001427A40014D2
747:102E900027A500108CC2000402228021027010239A
748:102EA000044000172402000190C3000D2402FF809B
749:102EB00000431024304200FF144000070200882124
750:102EC00090C2000D344200400E0008CFA0C2000D99
751:102ED0000A000B8B93A200100E000AAD241400010F
752:102EE0008F830028AC7000D893A20010A06200D19C
753:102EF00093A200101452FFE58FA6001424020001D3
754:102F0000168200048FBF002C0E0006F700000000A0
755:102F10008FBF002C8FB400288FB300248FB2002005
756:102F20008FB1001C8FB0001803E0000827BD0030EF
757:102F300027BDFFD8AFB3001CAFB20018AFB100146B
758:102F4000AFB00010AFBF00200080982100E08021CA
759:102F500030B1FFFF0E00056430D200FF000000001A
760:102F600000000000000000008F820020AC51000033
761:102F7000AC520004AC530008AC40000CAC40001054
762:102F8000AC400014AC4000183C03080094634E961B
763:102F900002038025AC50001C00000000000000006F
764:102FA00000000000240400018FBF00208FB3001C2C
765:102FB0008FB200188FB100148FB000100A0005897D
766:102FC00027BD002827BDFFE8AFB00010AFBF001439
767:102FD00030A5FFFF30C600FF0080802124020C8056
768:102FE000AF420024000000000000000000000000CC
769:102FF00000000000000000000E000B9A000000001E
770:103000003C040800248400E08C8200002403FF803C
771:103010008FBF00140202102100431024AF4200248D
772:103020008C8200003C03000A020280213210007FE3
773:10303000035010218FB000100043102127BD00184D
774:1030400003E00008AF82002827BDFFE8AFBF0010F3
775:103050008F4401403C0308008C6300E02402FF80A1
776:10306000AF8400340083182100621024AF42002492
777:103070003C02000803424021950500023063007FB6
778:103080003C02000A034318210062182130A5FFFF0B
779:103090003402FFFF000030213C07602010A2000630
780:1030A000AF8300282402FFFFA5020002946500D42C
781:1030B0000E000BBF30A5FFFF8FBF001024020C8055
782:1030C00027BD001803E00008AF4200243C020008BE
783:1030D00003424021950200023C0A0800954A00C6BE
784:1030E0003046FFFF14C000073402FFFF8F82002824
785:1030F0008F8400343C076020944500D40A000C28DB
786:1031000030A5FFFF10C200248F87002894E20054EE
787:1031100094E400163045FFFF00A6102300A6182BEC
788:103120003089FFFF106000043044FFFF00C510230A
789:10313000012210233044FFFF008A102B1040000CA6
790:10314000012A102324020001A50200162402FFFF19
791:10315000A502000294E500D48F84003400003021E1
792:1031600030A5FFFF3C0760200A000BBF00000000F5
793:103170000044102A104000080000000095020016CC
794:103180003042000110400004000000009742007E21
795:1031900024420014A502001603E00008000000000D
796:1031A0008F84002827BDFFE0AFBF00189482003451
797:1031B0009483003E1060001A3048FFFF9383002C78
798:1031C00024020001146200278FBF00188F8200289C
799:1031D000000818C231080007006218212447003A8D
800:1031E000244900542444002024450030244600345F
801:1031F00090620040304200FF01021007304200019F
802:10320000104000168FBF00180E000927AFA900104C
803:103210008F820028944200340A000C413048FFFF9E
804:1032200094830036948200341043000E8FBF001840
805:1032300094820036A482003494820056A482005402
806:103240008C82002CAC82002494820032A482003054
807:103250009482003CA482003A8FBF00180A000C013F
808:1032600027BD002003E0000827BD002027BDFFE8A0
809:10327000AFBF00108F4A01003C0508008CA500E09C
810:103280003C02080090424EBC3C0C0800958C4EB6A7
811:1032900001452821304B003F30A2007F03424021EE
812:1032A000396900323C02000A3963003F2C63000197
813:1032B000010240212D2900012402FF8000A22824C0
814:1032C00001234825AF8A003400801821AF4500242F
815:1032D000000030210080282124070001AF88002849
816:1032E0003C04080024844EB0AF8C00241520000656
817:1032F000A380002D240200201562000E3402FFFF7F
818:103300001582000C00000000240200201562000558
819:10331000000000008C6300142402FFFF106200070D
820:10332000000000000E00095A000000000A000C9D79
821:10333000000000000E0009C5006020210E000C36C0
822:10334000000000008FBF001024020C8027BD001871
823:1033500003E00008AF4200243C0208008C4200E079
824:1033600027BDFFA0AFB1003C008210212411FF80D7
825:10337000AFBE0058AFB70054AFB20040AFB0003896
826:10338000AFBF005CAFB60050AFB5004CAFB4004863
827:10339000AFB30044005110248F4800248F49002807
828:1033A0008F470028AF4200243C0208008C4200E016
829:1033B0000080902124060006008210213042007F08
830:1033C000034218213C02000A006280213C02001FD7
831:1033D0003442FF8000E2382427A40010260500F0C4
832:1033E0000122F0240102B8240E0005EEAFA7003040
833:1033F0008FA20018AE0200C48FA2001CAE0200C84B
834:103400008FA20024AE0200CC93A40010920300D13E
835:103410002402FF800082102400431025304900FF61
836:103420003083007F3122007F0062102A10400004A8
837:10343000000310C001311026304900FF000310C006
838:1034400000031940006218213C0208008C4200DC95
839:10345000920400D202421021004310210051102496
840:10346000AF42002893A300103063007F000310C018
841:1034700000031940006218213C0208008C4200DC65
842:1034800002421021004310213042007F03421821E4
843:103490003C02000C006240218FA300142402FFFFB5
844:1034A00010620030309500FF93A2001195030014C4
845:1034B000304400FF3063FFFF0064182B1060000DE4
846:1034C00000000000950400148D07001C8D060018F4
847:1034D0003084FFFF0044202300042100000010215D
848:1034E00000E4382100E4202B00C230210A000D172F
849:1034F00000C43021950400148D07001C8D060018AF
850:103500003084FFFF008220230004210000001021EE
851:103510000080182100C2302300E4202B00C4302397
852:1035200000E33823AD07001CAD06001893A200117C
853:10353000A502001497A20012A50200168FA2001483
854:10354000AD0200108FA20014AD02000C93A2001176
855:10355000A502002097A20012A50200228FA200144B
856:10356000AD0200242406FF80024610243256007F5C
857:10357000AF420024035618213C02000A0062802159
858:103580008E02004C8FA200203124007F000428C04E
859:10359000AE0200508FA200200004214000852821A7
860:1035A000AE02007093A2001001208821A2020083C5
861:1035B00093A20010A2020079920200853042003FDF
862:1035C000A20200853C0208008C4200DC024210216D
863:1035D0000045102100461024AF42002C3C02080098
864:1035E0008C4200E43C0308008C6300DC02421021A2
865:1035F0000044102100461024AF4200283C0208007D
866:103600008C4200E402431821006518210242102177
867:10361000004410213042007F3063007F93A50010EA
868:1036200003422021034318213C02000E0062402186
869:103630003C02000C10B1008C008248213233007F24
870:10364000166000192404FF803C0208008C4200DC54
871:103650000242102100441024AF42002C3C0208001A
872:103660008C4200E43C0308008C6300DC0242102121
873:1036700000441024AF4200283C0208008C4200E4C1
874:10368000024318213063007F024210213042007F44
875:1036900003422021034318213C02000E0062402116
876:1036A0003C02000C008248219124000D2414FF806C
877:1036B0000000102100942025A124000D9504000293
878:1036C000950500148D07001C3084FFFF30A5FFFF17
879:1036D0008D060018008520230004210000E4382115
880:1036E00000C2302100E4202B00C43021AD07001CB3
881:1036F000AD06001895020002A5020014A5000016F0
882:103700008D020008AD0200108D020008AD02000C11
883:1037100095020002A5020020A50000228D020008EB
884:10372000AD0200249122000D3042004010400042C2
885:10373000262200013C0208008C4200E0A3B30028CE
886:103740003C10000A0242102100541024AF42002411
887:103750003C0208008C4200E0A380002C27A4002C2F
888:10376000024210213042007F0342182100701821CC
889:103770008C6200D88D26000427A50028AFA9002C54
890:1037800000461021AC6200D80E000AADAF830028BD
891:1037900093A300288F8200280E0006F7A04300D1D3
892:1037A0000E000C360000000002541024AF4200242A
893:1037B0003C0208008C4200DC00132940001320C0AA
894:1037C00000A42021024210210044102100541024A2
895:1037D000AF42002C3C0208008C4200E43C0308008D
896:1037E0008C6300DC03563021024210210045102179
897:1037F00000541024AF4200283C0208008C4200E430
898:1038000002431821006418210242102100451021B2
899:103810003042007F3063007F0342202103431821A0
900:103820003C02000E006240213C02000C00D08021CE
901:1038300000824821262200013043007F14750005D4
902:10384000304400FF2403FF8002231024004310268D
903:10385000304400FF93A20010008088212508002832
904:103860001444FF762529002093A400108FA3001490
905:103870002402FFFF1062000A308900FF2482000149
906:10388000248300013042007F14550005306900FF99
907:103890002403FF800083102400431026304900FFDA
908:1038A00092020078305300FF11330032012088214A
909:1038B0003C0208008C4200DC3225007F000520C05D
910:1038C0000005294000A42021024210212406FF8087
911:1038D0000044102100461024AF42002C3C03080095
912:1038E0008C6300DC3C0208008C4200E40243182197
913:1038F00002421021004510210064182100461024C6
914:103900003063007FAF420028034318213C02000EC1
915:10391000006240213C0208008C4200E48D06000C4D
916:103920000100202102421021004510213042007F79
917:10393000034218213C02000C0062482110C0000D17
918:10394000012028210E00071B000000002402FF8038
919:103950000222182426240001006228263082007FDB
920:1039600014550002308300FF30A300FF1473FFD012
921:10397000006088218E0300743C027FFF3442FFFF09
922:1039800000621824AE0300740E00073C02402021A0
923:10399000AF5700248FA20030AF5E00288FBF005CBD
924:1039A0008FBE00588FB700548FB600508FB5004CB3
925:1039B0008FB400488FB300448FB200408FB1003CF9
926:1039C0008FB0003827BD006003E00008AF42002C34
927:1039D00027BDFFD8AFB1001CAFBF0020AFB00018AB
928:1039E00027510188922200032408FF803C03000A2B
929:1039F0003047007FA3A700108F4601803C020800DB
930:103A00008C4200E0AF86003400C2282100A81024B8
931:103A1000AF4200249224000030A2007F0342102114
932:103A200000431021AF8200283084007F240200026E
933:103A300014820025000719403C0208008C4200E473
934:103A400000C210210043282130A2007F0342182128
935:103A500000A81024AF4200283C02000C006218218C
936:103A60009062000DAFA3001400481025A062000D65
937:103A70008FA300149062000D304200405040006A55
938:103A80008FBF00208F860028A380002C27A400145D
939:103A90008CC200D88C63000427A5001000431021BD
940:103AA0000E000AADACC200D893A300108F8200288C
941:103AB0000E0006F7A04300D10E000C3600000000F7
942:103AC0000A000ED88FBF00200E00070000C0202182
943:103AD0000E00070E000000003C0200080342802197
944:103AE000922300019202007B1443004F8FBF0020FD
945:103AF000922200003044007F24020004108200174C
946:103B0000288200051040000624020005240200035C
947:103B1000108200078FB1001C0A000ED900000000BF
948:103B2000108200128FBF00200A000ED98FB1001C36
949:103B300092050083920600788E0700748F8400340B
950:103B400030A500FF00073E0230C600FF0E0007440C
951:103B500030E7007F0A000ED88FBF00200E000CA4B3
952:103B60008F8400340A000ED88FBF002024020C80FE
953:103B7000AF4200249202003E30420040104000203C
954:103B8000000000009202003E000216000002160330
955:103B900004410006000000008F8400340E0006710E
956:103BA000240500930A000ED88FBF00209202003F28
957:103BB00024030018304200FF1443000C8F840034AB
958:103BC000240500390E000609000030210E000335DF
959:103BD0008F84003424020012A202003F0E00033E34
960:103BE0008F8400340A000ED88FBF002024050036D1
961:103BF0000E000609000030210A000ED88FBF0020F9
962:103C00000E0003358F8400349202000534420020F8
963:103C1000A20200050E00033E8F8400340E00108FB8
964:103C20008F8400348FBF00208FB1001C8FB000182C
965:103C300024020C8027BD002803E00008AF420024C6
966:103C400027BDFFE8AFB00010AFBF0014274301004D
967:103C500094620008000214000002140304410002F0
968:103C6000000080212410000194620008304200808E
969:103C70001040001A02001021946200083042200017
970:103C800010400016020010218C6300183C021C2D0D
971:103C9000344219ED240600061062000F3C07602133
972:103CA0003C0208008C4200D4104000078F8200289C
973:103CB0008F830028906200623042000F344200403F
974:103CC000A06200628F8200288F840034944500D463
975:103CD0000E000BBF30A5FFFF020010218FBF0014A4
976:103CE0008FB0001003E0000827BD001827BDFFE0DB
977:103CF000AFB10014AFB00010A380002CAFBF00180C
978:103D00008F4501003C0308008C6300E02402FF8023
979:103D1000AF85003400A318213064007F03442021C4
980:103D2000006218243C02000A00822021AF430024D4
981:103D3000275001008E0200148C8300DCAF84002821
982:103D40000043102318400004000088218E02001454
983:103D50000E000B50AC8200DC9202000B2403000228
984:103D6000304200FF1443002F0000000096020008BC
985:103D7000304300FF24020082146200052402008404
986:103D80000E000A0B000000000A000F640000000093
987:103D900014620009240200818F8200288F8400347D
988:103DA0003C076021944500D49206000530A5FFFF32
989:103DB0000A000F5330C600FF146200270000000005
990:103DC0009202000A304300FF3062002010400004DD
991:103DD000306200408F8400340A000F4F24060040F8
992:103DE00010400004000316008F8400340A000F4FB7
993:103DF0002406004100021603044100178F8400349A
994:103E0000240600428F8200283C076019944500D4A4
995:103E100030A5FFFF0E000BBF000000000A000F647A
996:103E2000000000009202000B24030016304200FF45
997:103E300010430006000000009202000B240300174C
998:103E4000304200FF14430004000000000E000EDEAC
999:103E500000000000004088210E000C360000000029
1000:103E60009202000A304200081040000624020C8032
1001:103E70008F8500283C0400080E0012BD0344202159
1002:103E800024020C80AF4200248FBF001802201021B2
1003:103E90008FB000108FB1001403E0000827BD002090
1004:103EA00027BDFFE8AFBF0014AFB000108F50002453
1005:103EB0003C0308008C6300E08F4501002402FF8072
1006:103EC00000A318213064007F0344202100621824DD
1007:103ED0003C02000A00822021AF850034AF43002459
1008:103EE00090820062AF8400283042000F34420050BC
1009:103EF000A08200623C02001F3442FF800E0006F7E1
1010:103F000002028024AF5000248FBF00148FB0001035
1011:103F100003E0000827BD00183C0208008C42002086
1012:103F20001040001D2745010090A300093C02000835
1013:103F30000342202124020018546200033C020008BE
1014:103F40000A000FA5240200080342202124020016C3
1015:103F5000146200052402001724020012A082003F10
1016:103F60000A000FAF94A700085462000694A7000847
1017:103F7000936200052403FFFE00431024A3620005A2
1018:103F800094A7000890A6001B8CA4000094A500062E
1019:103F90000A000B9A00073C0003E000080000000044
1020:103FA0002744010094820008304500FF38A30082B6
1021:103FB00038A200842C6300012C4200010062182505
1022:103FC00010600006240200839382002D1040000D33
1023:103FD000000000000A000C690000000014A20005A7
1024:103FE00024A2FF808F4301043C02602003E000080C
1025:103FF000AC430014304200FF2C420002104000038A
1026:10400000240200220A000F090000000014A200038D
1027:10401000000000000A000F76000000000A000F9464
1028:10402000000000009363007E9362007A144300094D
1029:10403000000020219362000024030050304200FF62
1030:1040400014430004240400019362007E2442000112
1031:10405000A362007E03E00008008010218F4201F877
1032:104060000440FFFE24020002AF4401C0A34201C489
1033:104070003C02100003E00008AF4201F827BDFFE852
1034:10408000AFBF00109362003F2403000A304200FFDC
1035:1040900014430046000000008F6300548F62004C00
1036:1040A0001062007F036030219362000024030050FF
1037:1040B000304200FF1443002F000000008F440140F5
1038:1040C0003C0208008C4200E02403FF8000821021A3
1039:1040D00000431024AF4200243C0208008C4200E060
1040:1040E0008F6500543C03000A008220213084007F49
1041:1040F0000344102100431021AC4501089762003CA5
1042:104100008F63004C3042FFFF000210400062182114
1043:10411000AF63005C8F6300548F64004C9762003C77
1044:10412000006418233042FFFF0003184300021040D0
1045:104130000043102A10400006000000008F62005467
1046:104140008F63004C004310230A0010250002104327
1047:104150009762003C3042FFFF00021040ACC2006496
1048:1041600024020001A0C0007CA0C2008424020C80B4
1049:10417000AF4200240E000FD78F4401401040004989
1050:104180008FBF00108F4301408F4201F80440FFFEB3
1051:1041900024020002AF4301C0A34201C43C0210004C
1052:1041A000AF4201F80A0010778FBF00109362003F02
1053:1041B00024030010304200FF1443000400000000FC
1054:1041C0008F4401400A001063000028219362003FE1
1055:1041D00024030016304200FF14430004240200149C
1056:1041E000A362003F0A001071000000008F62004CC3
1057:1041F0008F630050004310230441002A8FBF00103A
1058:104200009362008124420001A362008193620081D5
1059:104210003C0308008C6300C0304200FF14430010D0
1060:10422000000000009362003F24030004304200FFBE
1061:1042300014430006000000008F4401408FBF0010AF
1062:10424000240500930A00067127BD00188F44014021
1063:10425000240500938FBF00100A0006E027BD001858
1064:104260008F4401400E000335000000008F620054AF
1065:104270002442FFFFAF6200548F6200502442FFFFD0
1066:10428000AF6200500E00033E8F4401408F44014056
1067:104290008FBF0010240500040A00034327BD001847
1068:1042A0008FBF001003E0000827BD00188F4201886F
1069:1042B0009363007E00021402304400FF306300FF6D
1070:1042C0001464000D0000000093620080304200FF83
1071:1042D0001044000900000000A36400809362000005
1072:1042E00024030050304200FF14430004000000008B
1073:1042F0000A0007A88F440180A364008003E000083F
1074:104300000000000027BDFFE8AFB00010AFBF0014F1
1075:1043100093620005240300303042003014430089CA
1076:10432000008080213C0208008C4200201040008068
1077:10433000020020210E000564000000008F8500208F
1078:10434000ACB000009362003E9363003F304200FF38
1079:1043500000021200306300FF00431025ACA20004ED
1080:104360009362008200021600000216030441000559
1081:10437000000000003C0308008C6300480A0010B5F0
1082:10438000000000009362003E3042004014400003F1
1083:104390000000182193620081304300FF9362008285
1084:1043A00000031E00304200FF0002140000621825C6
1085:1043B000ACA300088F620040ACA2000C8F620048E2
1086:1043C000ACA200108F62004CACA200148F620050AF
1087:1043D0008F63004C004310230441000300000000E1
1088:1043E0000A0010C98F62004C8F620050ACA2001806
1089:1043F0003C02080094424E963C03C00B0000202172
1090:10440000004310250E000589ACA2001C8F620054E9
1091:104410008F840020AC8200008F620058AC820004C0
1092:104420008F62005CAC8200088F6200608F43007472
1093:1044300000431021AC82000C8F620064AC8200103B
1094:10444000976300689762006A00031C003042FFFF18
1095:1044500000621825AC83001493620082240300805C
1096:10446000304200FF14430003000000000A0010FD6A
1097:10447000AC8000188F63000C240200011062000E53
1098:104480002402FFFF9362003E304200401440000AC5
1099:104490002402FFFF8F63000C8F4200740062182318
1100:1044A0003C02080000621024144000020000282191
1101:1044B0000060282100051043AC8200183C0208006F
1102:1044C00094424E963C03C00C00002021004310256E
1103:1044D0008F8300200E000589AC62001C8F620018DB
1104:1044E0008F8300203C05080094A54E96240400010B
1105:1044F000AC620000AC6000048F66006C3C02400DB2
1106:1045000000A22825AC6600088F6200DCAC62000CBB
1107:10451000AC6000109362000500021600AC6200144B
1108:10452000AC6000180E000589AC65001C020020215B
1109:104530008FBF00148FB00010A36000050A0004F2C2
1110:1045400027BD00188FBF00148FB0001003E00008D3
1111:1045500027BD00189742007C30C600FFA08600846B
1112:104560003047FFFF2402000514C2000B24E346502D
1113:1045700090A201122C4200071040000724E30A0019
1114:1045800090A30112240200140062100400E2102122
1115:104590000A0011353047FFFF3067FFFF03E00008D6
1116:1045A000A4870014AC87004C8CA201080080402135
1117:1045B00000A0482100E2102330C600FF184000038D
1118:1045C00093AA001324E2FFFCACA2010830C2000150
1119:1045D00010400008000000008D02005000E210238F
1120:1045E00004410013240600058D02005410E200105F
1121:1045F000000000008D02005414E2001A00000000C8
1122:104600003C0208008C4200D8304200201040000AD2
1123:1046100024020001910300789102008314430006F4
1124:104620002402000101002021012028212406000489
1125:104630000A00112300000000A100008411400009BD
1126:10464000A50200148F4301008F4201F80440FFFED1
1127:1046500024020002AF4301C0A34201C43C02100087
1128:10466000AF4201F803E000080000000027BDFFE8AA
1129:104670008FA90028AFBF00100080402100E9182357
1130:104680001860007330C600FFA080007CA08000810D
1131:104690008CA2010800E210230440004D000000003D
1132:1046A0008C8200509483003C8C8400640047482333
1133:1046B0003063FFFF012318210083202B10800004AA
1134:1046C000000000008D0200640A00118600E2102143
1135:1046D0009502003C3042FFFF0122102100E2102130
1136:1046E000AD02005C9502003C8D03005C3042FFFF90
1137:1046F0000002104000E210210043102B1040000384
1138:10470000000000000A0011958D02005C9502003C3B
1139:104710003042FFFF0002104000E21021AD02005CB9
1140:10472000A1000084AD07004C8CA2010800E2102318
1141:104730001840000224E2FFFCACA2010830C20001D4
1142:104740001040000A000000008D02005000E210231B
1143:1047500004410004010020218D02005414E20003F2
1144:10476000000000000A0011B7240600058D02005465
1145:1047700014E200478FBF00103C0208008C4200D8B2
1146:10478000304200201040000A24020001910300780A
1147:10479000910200831443000624020001010020213D
1148:1047A000240600048FBF00100A00112327BD001843
1149:1047B000A1000084A50200148F4301008F4201F87C
1150:1047C0000440FFFE240200020A0011DC0000000089
1151:1047D0008C82005C004910230043102B54400001E0
1152:1047E000AC87005C9502003C3042FFFF0062102B5A
1153:1047F00014400007240200029502003C8D03005C77
1154:104800003042FFFF00621821AD03005C2402000269
1155:10481000AD07004CA10200840E000FD78F440100A9
1156:104820001040001B8FBF00108F4301008F4201F822
1157:104830000440FFFE24020002AF4301C0A34201C4B2
1158:104840003C021000AF4201F80A0011F28FBF0010C5
1159:1048500030C200101040000E8FBF00108C83005C2F
1160:104860009482003C006918233042FFFF0062182147
1161:104870003C023FFF3444FFFF0083102B54400001F3
1162:104880000080182101231021AD02005C8FBF0010B1
1163:1048900003E0000827BD001827BDFFE88FAA002805
1164:1048A000AFBF00100080402100EA482319200021FA
1165:1048B00030C600FF8C83005C8C820064006A182381
1166:1048C0000043102B504000100069182194A20110E1
1167:1048D00001221021A4A2011094A201103042FFFF76
1168:1048E0000043102B1440000A3C023FFF94A2011029
1169:1048F00000431023A4A201109482003C3042FFFF29
1170:104900000A00121100621821A4A001103C023FFF0E
1171:104910003444FFFF0083102B544000010080182115
1172:1049200000671021AD02005CA100007C0A00125952
1173:10493000A100008130C200101040003C00000000C7
1174:104940008C820050004A10231840003800000000FC
1175:104950009082007C24420001A082007C9082007C36
1176:104960003C0308008C630024304200FF0043102BFE
1177:104970001440005C8FBF00108CA2010800E21023DD
1178:1049800018400058000000008C8300549482003CC2
1179:10499000006A18233042FFFF000318430002104052
1180:1049A0000043102A10400005000000008C820054D3
1181:1049B000004A10230A001240000210439482003C77
1182:1049C0003042FFFF00021040AD0200649502003C3F
1183:1049D0008D0400649503003C3042FFFF000210404C
1184:1049E000008220213063FFFF008318210143102142
1185:1049F000AD02005C8D020054ACA20108240200024A
1186:104A0000A10200840E000FD78F4401001040003532
1187:104A10008FBF00108F4301008F4201F80440FFFE5A
1188:104A2000240200020A00128200000000AD07004CC0
1189:104A30008CA2010800E210231840000224E2FFFCCF
1190:104A4000ACA2010830C200011040000A00000000C2
1191:104A50008D02005000E210230441000401002021D7
1192:104A60008D02005414E20003000000000A001279D5
1193:104A7000240600058D02005414E2001A8FBF0010B6
1194:104A80003C0208008C4200D8304200201040000A4E
1195:104A90002402000191030078910200831443000670
1196:104AA0002402000101002021240600048FBF001011
1197:104AB0000A00112327BD0018A1000084A5020014DC
1198:104AC0008F4301008F4201F80440FFFE24020002E0
1199:104AD000AF4301C0A34201C43C021000AF4201F841
1200:104AE0008FBF001003E0000827BD00188FAA001038
1201:104AF0008C8200500080402130C600FF004A102305
1202:104B000000A048211840000700E0182124020001FD
1203:104B1000A0800084A0A00112A48200140A0011F455
1204:104B2000AFAA0010A0800081AD07004C8CA2010844
1205:104B300000E210231840000224E2FFFCACA20108AE
1206:104B400030C2000110400008000000008D0200503B
1207:104B50000062102304410013240600058D02005456
1208:104B600010620010000000008D0200541462001159
1209:104B7000000000003C0208008C4200D830420020B7
1210:104B80001040000A24020001910300789102008382
1211:104B900014430006240200010100202101202821E5
1212:104BA000240600040A00112300000000A100008474
1213:104BB000A502001403E000080000000027BDFFE08C
1214:104BC000AFBF0018274201009046000A8C4800142D
1215:104BD0008C8B004C9082008430C900FF0168182340
1216:104BE000304A00FF1C60001A2D4600062402000116
1217:104BF0000142100410C00016304300030120302190
1218:104C00000100382114600007304C000C15800009A9
1219:104C1000304200301440000B8FBF00180A0012E32E
1220:104C2000000000000E0011F4AFAB00100A0012E308
1221:104C30008FBF00180E001169AFAB00100A0012E31D
1222:104C40008FBF0018AFAB00100E001289AFAA00147E
1223:104C50008FBF001803E0000827BD002024020003D6
1224:104C6000A08200848C82005403E00008ACA20108FA
1225:104C70003C02000803421821906200812406004390
1226:104C80003C07601924420001A0620081906300810A
1227:104C90003C0208008C4200C0306300FF1462001028
1228:104CA0002403FF803C0208008C4200E000821021B7
1229:104CB00000431024AF4200243C0208008C4200E074
1230:104CC0003C03000A008210213042007F0342102181
1231:104CD00000431021944500D40A000BBF30A5FFFF0C
1232:104CE00003E000080000000027BDFFE0AFBF001890
1233:104CF000AFB10014AFB000108F420180008080215E
1234:104D000000A088210E0012EA00402021A2000084A9
1235:104D10008E0200548FBF00188FB00010AE22010821
1236:104D20008FB1001403E0000827BD002027BDFFE07D
1237:104D30003C020008AFB00010AFBF0018AFB10014C4
1238:104D4000034280218F510140920300848E04005061
1239:104D50008E02004C14820040306600FF3C020800C6
1240:104D60008C4200E02403FF80022210210043102423
1241:104D7000AF4200243C0208008C4200E09744007CD3
1242:104D800092050081022210213042007F0342182147
1243:104D90003C02000A0062182114A0000B3084FFFFBF
1244:104DA0002402000554C20014248205DC9062011222
1245:104DB00024420001A062011224020C80AF420024B0
1246:104DC0000A00134224020005A0600112240200051B
1247:104DD00014C20009248205DC920200812C420007E3
1248:104DE0005040000524820A0092030081240200142E
1249:104DF00000621004008210213044FFFFA60400145A
1250:104E00000E0012EA022020219602003C8E03004C84
1251:104E1000022020213042FFFF0002104000621821D2
1252:104E20000E000335AE03005C9202007D02202021BB
1253:104E3000344200400E00033EA202007D8F4201F882
1254:104E40000440FFFE24020002AF5101C0A34201C48E
1255:104E50003C021000AF4201F88FBF00188FB1001460
1256:0C4E60008FB0001003E0000827BD002008
1257:044E6C0008000E7CB0
1258:104E700008000EC408000F0408000F5008000F843B
1259:104E80000A00002000000000000000000000000DEB
1260:104E90006370342E362E31360000000004061004F4
1261:104EA0000000000000000000000000000000000002
1262:104EB00000000000000000000000000000000000F2
1263:104EC00000000000000000000000002000000000C2
1264:104ED00000000000000000000000000000000000D2
1265:104EE00000000000000000000000000000000000C2
1266:104EF0000000000000000000000000010000002B86
1267:104F00000000000010000003000000000000000D81
1268:104F10000000000D3C020800244258A43C03080095
1269:104F200024635F70AC4000000043202B1480FFFD21
1270:104F3000244200043C1D080037BD7FFC03A0F02183
1271:104F40003C100800261000803C1C0800279C58A438
1272:104F50000E00019C000000000000000D27BDFFE8CE
1273:104F60003C096018AFBF00108D2C5000240DFF7F4E
1274:104F700024080031018D5824356A380C24070C00B0
1275:104F80003C1A8000AD2A50003C04800AAF4800085B
1276:104F90003C1B8008AF4700240E000924AF8400109A
1277:104FA0000E0008E7000000000E00083400000000BA
1278:104FB0000E00125E000000003C0460168C850000AC
1279:104FC0003C06FFFF3C02535300A618241062003F2A
1280:104FD00034867C0094C201F2A780002C10400003AC
1281:104FE000A78000CC38581E1EA798002C94C201F848
1282:104FF00010400004978300CC38591E1EA79900CC9E
1283:10500000978300CC2C7F006753E0000124030066E7
1284:105010009784002C2C820401144000020060282197
1285:10502000240404003C0760008CE904382403103C8D
1286:105030003128FFFF1103001730B9FFFF5720000C84
1287:10504000A38000CE24020050A38200CE939F00CE06
1288:1050500013E0000A8FBF001027BD0018A78000CC06
1289:10506000A780002CA780003403E00008A78000E69A
1290:10507000939F00CE17E0FFF88FBF001027BD0018E8
1291:10508000A78500CCA784002CA780003403E000088B
1292:10509000A78000E6A38000CE8CCB003C316A0001E3
1293:1050A0001140000E0000000030A7FFFF10E0FFE6F7
1294:1050B000240200508CCC00C83186000114C0FFE4EB
1295:1050C000939F00CE0A000072240200518C8F0004CE
1296:1050D0003C0E60000A00005501EE30218CEF0808FC
1297:1050E000240D5708000F740211CD000430B8FFFFE3
1298:1050F000240500660A000073240404001700FFD48E
1299:10510000939F00CE0A000072240200508F86001088
1300:105110003089FFFF000939408CC300103C08005063
1301:1051200000E82025AF4300388CC500142742040056
1302:10513000AF82001CAF45003CAF44003000000000CF
1303:10514000000000000000000000000000000000005F
1304:105150000000000000000000000000008F4B000075
1305:10516000316A00201140FFFD0000000003E000084C
1306:10517000000000008F840010948A001A8C8700249D
1307:105180003149FFFF000940C000E83021AF46003C34
1308:105190008C8500248F43003C00A310231840002975
1309:1051A000000000008C8B0020256200013C0D0050A7
1310:1051B00035AC0008AF420038AF4C003000000000B2
1311:1051C00000000000000000000000000000000000DF
1312:1051D0000000000000000000000000008F4F0000F1
1313:1051E00031EE002011C0FFFD000000008F4A0400D6
1314:1051F0003C080020AC8A00108F490404AC890014DC
1315:10520000AF48003000000000948600189487001C0E
1316:1052100000C71821A48300189485001A24A2000155
1317:10522000A482001A9498001A9499001E133800035F
1318:105230000000000003E000080000000003E0000898
1319:10524000A480001A8C8200200A0000CC3C0D005083
1320:105250000A0000BD000000003C0308008C63002031
1321:105260008F82001827BDFFE810620008AFBF001052
1322:105270000E0000F4AF8300183C0308008C6300208C
1323:1052800024040001106400048F8900108FBF0010F7
1324:1052900003E0000827BD00188FBF00103C07601214
1325:1052A000A520000A9528000A34E5001027BD001843
1326:1052B0003106FFFF03E00008ACA600903C020800A6
1327:1052C0008C42002027BDFFC8AFBF0034AFBE003006
1328:1052D000AFB7002CAFB60028AFB50024AFB40020A4
1329:1052E000AFB3001CAFB20018AFB1001410400050B3
1330:1052F000AFB000108F840010948600069483000ADB
1331:1053000000C3282330B6FFFF12C0004A8FBF00340D
1332:1053100094890018948A000A012A40233102FFFF71
1333:1053200002C2382B14E0000202C0202100402021DC
1334:105330002C8C0005158000020080A021241400049C
1335:105340000E0000A3028020218F8700100280982188
1336:10535000AF80001494ED000A028088211280004E74
1337:1053600031B2FFFF3C1770003C1540003C1E60004E
1338:105370008F8F001C8DEE000001D71824507500504F
1339:105380000220202102A3802B160000353C182000AB
1340:105390005078004702202021241000018F83001440
1341:1053A00014600039029158230230F8230250C821BA
1342:1053B00033F1FFFF1620FFEE3332FFFF8F8700101F
1343:1053C0003C110020AF5100300000000094E6000ABC
1344:1053D0003C1E601237D5001002662821A4E5000AA1
1345:1053E00094E2000A94F2000A94F400183057FFFF88
1346:1053F0001292003BAEB700908CED00148CE40010CC
1347:105400000013714001AE4021000E5FC3010E502B0E
1348:10541000008B4821012A1821ACE80014ACE30010ED
1349:1054200002D3382330F6FFFF16C0FFB98F84001077
1350:105430008FBF00348FBE00308FB7002C8FB600288E
1351:105440008FB500248FB400208FB3001C8FB20018DA
1352:105450008FB100148FB0001003E0000827BD0038A2
1353:10546000107E001B000000001477FFCC2410000108
1354:105470000E0015A9000000008F8300141060FFCB00
1355:105480000230F823029158238F87001001702021E9
1356:105490000A0001873093FFFF8F8300141460FFCB55
1357:1054A0003C110020AF5100300A0001530000000001
1358:1054B0000E00079B024028210A000147004080217E
1359:1054C0000E000341024028210A00014700408021CC
1360:1054D0000E001471022020210A00014700408021A3
1361:1054E0000E0000BD000000000A00016902D338234D
1362:1054F00027BDFFE8AFB00010AFBF00140E000037AB
1363:10550000000000003C028000345000700A0001AA34
1364:105510008E0600008F4F000039EE000131C20001FD
1365:10552000104000248F8600A88E0700003C0C080065
1366:105530008D8C003C3C0908008D29003800E668236A
1367:10554000018D28210000502100AD302B012A40217F
1368:10555000010620213C010800AC25003CAF8700A8D3
1369:105560003C010800AC2400380E0000F600000000EA
1370:105570003C0308008C6300701060FFE6006020218F
1371:105580003C0508008CA500683C0608008CC6006C31
1372:105590000E001538000000003C010800AC2000702F
1373:1055A0008F4F000039EE000131C200011440FFDED0
1374:1055B0008F8600A88E0A00008F8B00A83C0508008B
1375:1055C0008CA5003C3C0408008C840038014B482327
1376:1055D00000A938210082182100E9402B0068102121
1377:1055E0003C010800AC27003C3C010800AC2200381C
1378:1055F0008F5F01002419FF0024180C0003F92024F8
1379:1056000010980012AF840000AF440020936D00009A
1380:10561000240C002031A600FF10CC0012240E0050F4
1381:1056200010CE00043C194000AF5901380A0001A314
1382:10563000000000000E0011D4000000003C194000E2
1383:10564000AF5901380A0001A3000000000E00010F4D
1384:10565000000000003C194000AF5901380A0001A3C6
1385:10566000000000008F58010000802821330F00FF48
1386:1056700001E020210E0002EEAF8F00043C19400033
1387:10568000AF5901380A0001A30000000000A4102B4C
1388:1056900024030001104000090000302100052840CB
1389:1056A00000A4102B04A00003000318405440FFFC8A
1390:1056B000000528405060000A0004182B0085382B94
1391:1056C00054E000040003184200C330250085202365
1392:1056D000000318421460FFF9000528420004182B4B
1393:1056E00003E0000800C310213084FFFF30A5FFFF56
1394:1056F0008F4201B80440FFFE3C0740800087302500
1395:105700003C031000AF400180AF450184AF460188E3
1396:1057100003E00008AF4301B83084FFFF8F4201B8B7
1397:105720000440FFFE3C0740388CA600000087282577
1398:105730003C031000AF460180AF45018803E000083C
1399:10574000AF4301B88F8300388F8600301066000B9E
1400:10575000008040213C07080024E75A18000328C0B5
1401:1057600000A710218C44000024630001108800056C
1402:105770003063000F5466FFFA000328C003E00008FE
1403:10578000000010213C07080024E75A1C00A7302124
1404:1057900003E000088CC200003C039000346200016A
1405:1057A00000822025AF4400208F45002004A0FFFE8A
1406:1057B0000000000003E00008000000003C0380003F
1407:1057C000346200010082202503E00008AF4400207D
1408:1057D00027BDFFE0AFB100143091FFFFAFB0001064
1409:1057E000AFBF00181220001500A080218CA500007A
1410:1057F00010A00013240400020E000C6B24060140CC
1411:10580000AE0000008F4201B80440000D00002821C6
1412:105810003C064000022620258FBF00188FB10014DF
1413:105820008FB000103C03100027BD0020AF45018061
1414:10583000AF44018803E00008AF4301B88CA5000025
1415:105840008F4201B80440FFFE3C064000022620259E
1416:105850008FBF00188FB100148FB000103C031000F0
1417:1058600027BD0020AF450180AF44018803E0000858
1418:10587000AF4301B83086FFFF8F4201B80440FFFEFE
1419:105880003C0940068CA8000000C93825AF480180BB
1420:105890008CA400043C031000AF440184AF4701888E
1421:1058A00003E00008AF4301B827BDFFE0AFB0001030
1422:1058B000AFBF0018AFB100149363003E0080802199
1423:1058C0000080282130620040000020211040000F9D
1424:1058D0008E1100000E000860022020219367000056
1425:1058E0002404005030E500FF50A400128E0F000089
1426:1058F000022020218FBF00188FB100148FB000103C
1427:10590000A762013C0A00092027BD00200E00027D8D
1428:10591000000000000E0008600220202193670000B4
1429:105920002404005030E500FF14A4FFF202202021DF
1430:105930008E0F00003C1008008E1000503C0D000C33
1431:10594000240BFF8001F05021314E007F01DA6021ED
1432:10595000018D4021014B4824AF490028022020211D
1433:105960008FBF00188FB100148FB00010A50200D6B1
1434:1059700027BD00200A000920AF8800D027BDFFE026
1435:10598000AFBF0018AFB10014AFB0001093660001B4
1436:10599000008080210E00024630D10004936400058F
1437:1059A000001029C2A765000034830040A3630005EE
1438:1059B0000E00024F020020210E00092202002021C9
1439:1059C00024020001AF62000C02002821A76200102F
1440:1059D00024040002A762001224060140A7620014FA
1441:1059E0000E000C6BA76200161620000F8FBF001868
1442:1059F000978C00343C0B08008D6B00782588FFFFE6
1443:105A00003109FFFF256A0001012A382B10E000064A
1444:105A1000A78800343C0F6006240E001635ED0010F8
1445:105A2000ADAE00508FBF00188FB100148FB00010C2
1446:105A300003E0000827BD002027BDFFE0AFB1001440
1447:105A4000AFBF0018AFB0001000A088211080000A7E
1448:105A50003C0360002402008010820012000000005D
1449:105A60000000000D8FBF00188FB100148FB0001020
1450:105A700003E0000827BD00208C682BF80500FFFE1E
1451:105A800000000000AC712BC08FBF00188FB1001454
1452:105A90008FB000103C09100027BD002003E0000873
1453:105AA000AC692BF80E00024600A02021936500058A
1454:105AB000022020210E00024F30B000FF2403003EE0
1455:105AC0001603FFE7000000008F4401780480FFFE0A
1456:105AD000240700073C061000AF510140022020219E
1457:105AE000A34701448FBF00188FB100148FB000107E
1458:105AF000AF4601780A0002BF27BD002027BDFFE89E
1459:105B0000AFBF0014AFB000108F50002000000000A5
1460:105B10000E000922AF440020AF5000208FBF0014B8
1461:105B20008FB0001003E0000827BD00183084FFFF8D
1462:105B30008F4201B80440FFFE3C0740350087302506
1463:105B40003C031000AF450180AF400184AF4601889F
1464:105B500003E00008AF4301B83084FFFF8F4201B873
1465:105B60000440FFFE3C074036008730253C03100010
1466:105B7000AF450180AF400184AF46018803E00008D3
1467:105B8000AF4301B827BDFFD0AFB3001C3093FFFF78
1468:105B9000AFB50024AFB20018AFBF0028AFB40020EB
1469:105BA000AFB10014AFB0001030B5FFFF1260002796
1470:105BB000000090218F90001C8E0300003C068000A6
1471:105BC0002402004000033E0200032C0230E4007F68
1472:105BD000006688241482001D30A500FF8F830028F2
1473:105BE0002C68000A510000108F91001400035880A7
1474:105BF0003C0C0800258C56CC016C50218D490000CE
1475:105C0000012000080000000002B218213065FFFFEB
1476:105C10000E00021A24040084162000028F90001C3B
1477:105C2000AF8000288F910014260C0020264B000125
1478:105C3000018080213172FFFF16200004AF8C001C10
1479:105C40000253402B1500FFDC000000000240102131
1480:105C50008FBF00288FB500248FB400208FB3001CA5
1481:105C60008FB200188FB100148FB0001003E000084D
1482:105C700027BD0030240D003414AD00F600000000F4
1483:105C8000920B000E240A16803C07000CA36B002127
1484:105C90009203000D0347F8213C066000A363002037
1485:105CA000961100123C087FFF350CFFFFA771003CE6
1486:105CB00096020010240B00053054FFFFAF740084DF
1487:105CC0008E19001CAF4A00288FF800008CCF444882
1488:105CD0000319702601EE3021AF66004C8F69004C2D
1489:105CE00024CD00013C197F00AF6900508F64005043
1490:105CF000AF640054AF660070AF6D00588F650058F8
1491:105D000024040050AF65005CA3600023AF6C006406
1492:105D1000A36B00378E030014AF6300488F710048F7
1493:105D2000AF7100248E020018AF62006C9214000C58
1494:105D3000A3740036936A003E355F0020A37F003EC7
1495:105D40008F7800740319782435EE4000AF6E00742C
1496:105D500093700000320900FF112402332418FF80E1
1497:105D60003C04080024845A980E00028A00000000B7
1498:105D700024060004240700013C0408008C845A987F
1499:105D8000A366007DA36700058F4A01780540FFFEEA
1500:105D900024020002AF440140A34201448F90001C42
1501:105DA0003C141000AF5401780A000369AF8000284A
1502:105DB0002CAD003751A0FF9C8F9100140005A080EE
1503:105DC0003C180800271856F4029878218DEE000040
1504:105DD00001C00008000000002406000614A60011FF
1505:105DE000000000003C1F08008FFF5A9824040005A3
1506:105DF000AF5F00208E190018AF7900188F78004C23
1507:105E0000AF78001C8F6F0050122000C2AF6F00707F
1508:105E10000A000369AF840028240A000710AA00843E
1509:105E2000240300063C05080024A55A980E000254DD
1510:105E3000240400818F90001C0011102B0A000369BC
1511:105E4000AF820028240A000414AAFFF6240300509D
1512:105E50003C0E08008DCE5A98AF4E00208E090008E7
1513:105E6000AF6900408E060008AF6600448E07000C44
1514:105E7000AF6700488E040010AF64004C8E0D001018
1515:105E8000AF6D00848E080014AF6800508E050018B6
1516:105E9000AF6500548E0C001CAF6C0058936B000073
1517:105EA000317400FF128301F5000000008F64004888
1518:105EB0008F6600400086382304E000042404008C30
1519:105EC0001620FFDE24020003240400823C050800A3
1520:105ED00024A55A980E00027D000000008F90001C3F
1521:105EE000000010210A000369AF8200282409000580
1522:105EF00014A9FFCC240520003C0A08008D4A5A98BA
1523:105F0000AF4A00208E1F0004AF7F005C921900088A
1524:105F100024100008A37900218F98001C930F00091A
1525:105F2000A36F00208F86001C90CE000A31C400FFB2
1526:105F300010900010288300091460006C24020002F5
1527:105F4000240800201088000B3405800028850021DB
1528:105F500014A0000824054000240D0040108D000509
1529:105F60003C05000124070080108700023C05000268
1530:105F7000240540008F6E00743C0FFF0001CF802489
1531:105F800002054825AF69007490C4000BA36400812A
1532:105F90008F84001C9486000C10C0019B0000000040
1533:105FA000948E000C241FFFBF24060004A76E003C43
1534:105FB0009090000EA370003E8F89001C9124000F6A
1535:105FC000A364003F8F94001C8E8D00108F470074D7
1536:105FD00001A72823AF6500608E880014AF680064B5
1537:105FE000968C0018A76C0068968B001AA76B006A45
1538:105FF0008E82001CAF62006C96830002A763013E94
1539:10600000928A000EA36A003E9379003E033FC024AB
1540:106010001220016AA378003E8F90001C0A000369D9
1541:10602000AF8600282414002214B4FF7E2403000746
1542:106030003C0208008C425A981220000CAF4200200B
1543:106040000A000369AF830028240C003310AC00144D
1544:10605000240800283C05080024A55A980E000226B2
1545:10606000240400810A0003EE8F90001C3C04080009
1546:1060700024845A980E00028A00000000936B0000EE
1547:1060800024110050316300FF107101540000000022
1548:106090008F90001C000018210A000369AF830028BC
1549:1060A0003C0508008CA55A9824040081AF450020C7
1550:1060B000A36800343C05080024A55A980E00022667
1551:1060C000000000008F90001C240200090A000369F0
1552:1060D000AF82002802B288213225FFFF0E00021A8B
1553:1060E000240400840A0003698F90001C1082FFA121
1554:1060F000240504002894000312800176240C000477
1555:10610000240B0001548BFF9B240540000A00043D32
1556:10611000240501003C04080024845A988F62004C36
1557:106120000E00028A8F6300508F90001C0000202117
1558:106130000A000369AF8400288E1000042404008A3A
1559:10614000AF500020936E000531C900021520016593
1560:10615000020028219378002302002821330F002019
1561:1061600015E001602404008D9362003F24190012A1
1562:10617000305F00FF13F9015B240400810E0002462A
1563:106180000200202193740023240A0004020020212D
1564:1061900036830042A36300230E00024FA36A007DF2
1565:1061A0008F4B01780560FFFE24050002AF500140CF
1566:1061B000A34501448F90001C3C0C1000AF4C0178AB
1567:1061C0000A0003EF0011102B8E1000042404008A33
1568:1061D000AF500020936D000531A800021500001992
1569:1061E000020028219367003F2414001230E400FFCE
1570:1061F0001094010100000000936E003F240600048B
1571:1062000031C900FF112600FC000000000E0002460C
1572:1062100002002021936200232419FFFE02002021A6
1573:10622000345F0020A37F0023A374003F9378000510
1574:10623000031978240E00024FA36F000502002821E5
1575:10624000000020210E000336000000000A0003EECB
1576:106250008F90001C8E0500043C0F0008034F402166
1577:10626000AF450020910E00002406005031C900FF08
1578:106270001126017A240400888F5901B80720FFFEF7
1579:106280003C0C400E008C58253C031000AF450180AB
1580:10629000AF400184AF4B0188AF4301B891020000C9
1581:1062A000240AFF8024040004004AF825A11F0000EE
1582:1062B0000E000C6B240600300A0003EE8F90001CC9
1583:1062C0008E04001C0E000231000000001040014C42
1584:1062D000004048218F90001C240500898F4D01B893
1585:1062E00005A0FFFE00000000AF4901808E0F001CDA
1586:1062F0003C1440010011702B00B448253C111000E3
1587:10630000AF4F0184AF8E0028AF490188AF5101B86B
1588:106310000A00036A8F910014961900023C140800C9
1589:1063200026945A9833380004130000F23C026000AF
1590:106330008E1F001C3C010800AC3F5A98AF5F002044
1591:10634000920C0010240B0014318400FF148B011CEC
1592:106350000000000096090002312D000115A001B2D5
1593:10636000000000008E020004AE8200083C0E08000F
1594:106370008DCE5AA011C001A8000000008F690074E2
1595:106380003C0E800024040001012E6825AF6D0074CE
1596:10639000A3600005AF64000C3C0C08008D8C5AA073
1597:1063A0008F88001CA7640010000C59C2A76400125B
1598:1063B000A7640014A7640016A76B00088D030008EB
1599:1063C00024040002AF63002C8D0A000CAF6A003079
1600:1063D00091070010A36700348F82001C90450011C4
1601:1063E000A36500358F86001C90D00012A370003684
1602:1063F0008F9F001C93F90013A37900378F90001C26
1603:1064000096180014A778003896140016A774003A5E
1604:106410008E0F0018AF6F00245620FE02AF840028B4
1605:106420003C05080024A55A980E00025400002021C3
1606:106430008F90001C0A0004AC000020218E0F000485
1607:106440003C14080026945A983C010800AC2F5A9836
1608:10645000AF4F0020920E000331C90004112000024A
1609:106460002402001224020006A362003F9203001BD4
1610:10647000240AFFC03062003F004AF825A37F003E97
1611:106480009219000333380001170000C1000000001A
1612:106490008E020008AE8200083C0208008C425AA01E
1613:1064A000104000C000000000000221C2A7640008E4
1614:1064B0008E0D000C240B000124140014AF6D002C71
1615:1064C0008E080010AF68003096050016A7650038EA
1616:1064D000960C0014A76C003AAF6B000CA76B001071
1617:1064E000A76B0012A76B0014A76B0016122000EB1D
1618:1064F000A37400349206000330C700022CF00001A0
1619:10650000260200088F90001C0A000369AF82002851
1620:106510008E14000424030081AF54002093680023EC
1621:106520003105001010A000AC000000008F4401B83D
1622:106530000480FFFE3C06401F0011382B006610252A
1623:106540003C111000AF540180AF870028AF40018498
1624:10655000AF420188AF5101B80A00036A8F9100145D
1625:106560008E0600043C19000803592021AF46002084
1626:106570008E07000890980000240F0050331400FF8D
1627:10658000128F00A7240500888F4401B80480FFFE05
1628:106590003C0D40090011602B00AD10253C1110008E
1629:1065A000AF460180AF8C0028AF470184AF4201881D
1630:1065B000AF5101B80A00036A8F9100143C0508002E
1631:1065C00024A55A980E00027D240400828F90001C9E
1632:1065D000000030210A000369AF8600283C0408004F
1633:1065E0008C845A980E0014F6000000008F90001C56
1634:1065F0000A000486000018210E00033624040081DE
1635:106600000A0003EE8F90001C3C05080024A55A9850
1636:106610000E00027D2404008B8F90001C0011302B93
1637:106620000A000369AF8600283C1908008F395A9880
1638:106630003C1F08008FFF005024CCFFFE033F782151
1639:1066400001F87024AF4E00283C0408008C845A984E
1640:106650003C0908008D2900500089682131A5007F80
1641:1066600000BA402101078021AE0600D8AF9000D0CB
1642:10667000AE0000DC0A0003B8AE0C0108AF60008475
1643:106680003C0808008D085A983C0D08008DAD00505C
1644:106690002405FF803C02000C010D58210165602497
1645:1066A000AF4C00288E0A00143174007F029A182122
1646:1066B00000627821ADEA00D88E1F0014AF8F00D0A1
1647:1066C000ADFF00DC8E1900102738FFFE0A00040B16
1648:1066D000ADF80108548CFE27240540000A00043D53
1649:1066E000240510000E00032B000000000A0003EE3A
1650:1066F0008F90001C8C46442C3C056C6234B0797041
1651:106700003C010800AC205A9814D000082404000270
1652:1067100097880034978A002C02802821010A382BA0
1653:1067200010E0001124040092240400020E000C89E1
1654:10673000240501403C010800AC225A98AF420020D9
1655:106740003C0308008C635A98106000052404008301
1656:106750000E000854000000001040000924040083CB
1657:106760003C05080024A55A980E00025400000000C1
1658:106770008F90001C0011202B0A000369AF840028B1
1659:106780000E000858000000000A0005308F90001C21
1660:106790008E0400080E000231000000000A00058689
1661:1067A000AE8200083C05080024A55A980E00022677
1662:1067B000240400878F90001C0A0005A20011102BF2
1663:1067C0000E00085C000000003C05080024A55A9853
1664:1067D0000A00063A2404008B0E00024602802021A3
1665:1067E0009370002302802021360D00100E00024F0E
1666:1067F000A36D00238F90001C0A0005AB0000182138
1667:10680000240400040E000C89240500301440002AE2
1668:10681000004048218F90001C0A00051724050083C2
1669:106820009205000C30BF000113E0000300000000DF
1670:106830009602000EA482002C920A000C314800023D
1671:106840001100FF5100002821960B00128E03001446
1672:10685000A48B001A0A0005C2AC83001C8F83003889
1673:106860008F8700301067FE84000020213C0908005B
1674:1068700025295A1C000320C0008930218CD4000037
1675:106880001285005E247800013303000F5467FFFA7D
1676:10689000000320C00A0004FE000020213C0508007F
1677:1068A00024A55A980E00027D240400828F90001CBB
1678:1068B0000A0005A2000010213C0B0008034B202118
1679:1068C00024030050240A0001AF420020A0830000EE
1680:1068D000A08A00018F88001C91070004A08700187F
1681:1068E0008F82001C90450005A08500198F86001C32
1682:1068F00090DF0006A09F001A8F99001C93380007B4
1683:10690000A098001B8F94001C928F0008A08F001C81
1684:106910008F90001C920E0009A08E001D8F8D001C10
1685:1069200091AC000AA08C001E8F8B001C3C0C080050
1686:10693000258C5A1C9163000B3C0B0800256B5A18E0
1687:10694000A083001F8F8A001C9148000CA0880020A3
1688:106950008F87001C90E5000DA08500218F82001C10
1689:10696000240546469046000EA08600228F9F001CFC
1690:1069700093F9000FA09900238F98001C9314001026
1691:10698000A09400248F8F001C91F00011A09000258E
1692:106990008F90001C8F8E00308F990038960D001458
1693:1069A000000E18C025C80001A48D0028960A001604
1694:1069B000006C3021006BF821A48A002A9607001889
1695:1069C0003108000FA487002CA485002E8E02001C25
1696:1069D000ACC90000AF88003011190003AFE200001D
1697:1069E0000A00051700002821250C00013184000F42
1698:1069F000000028210A000517AF8400383C07080072
1699:106A000024E75A180087802100002021ACC0000034
1700:106A10000A0004FEAE0000003C05080024A55A98B8
1701:106A20000A00063A240400878E0400040E00023196
1702:106A3000000000000A00053BAE8200083084FFFF22
1703:106A400030C600FF8F4201B80440FFFE000644003C
1704:106A5000010430253C07200000C720253C0310001E
1705:106A6000AF400180AF450184AF44018803E00008D6
1706:106A7000AF4301B827BDFFE8AFB00010AFBF0014AF
1707:106A80003C076000240600021080000600A0802160
1708:106A90000010102B8FBF00148FB0001003E000080F
1709:106AA00027BD00183C09600EAD2000348CE5201C89
1710:106AB0008F82001C2408FFFC00A81824ACE3201CD3
1711:106AC0000E0006EF8C45000C0010102B8FBF001439
1712:106AD0008FB0001003E0000827BD00183C02600ED4
1713:106AE0003447010024090018274A04000000000070
1714:106AF00000000000000000003C06005034C302000B
1715:106B0000AF440038AF45003CAF430030014018218E
1716:106B10008F4B0000316800201100FFFD2406007F2C
1717:106B20002408FFFF8C6C000024C6FFFF24630004D0
1718:106B3000ACEC000014C8FFFB24E7000400000000D8
1719:106B400000000000000000003C0F0020AF4F0030AC
1720:106B50000000000024AD020001A5702B2529FFFFD5
1721:106B6000008E20211520FFE101A0282103E000086C
1722:106B70000000000027BDFFE0AFB10014AFBF001858
1723:106B8000AFB000103C05600E8CA20034008088215C
1724:106B9000144000063C0460008C87201C2408FFFC85
1725:106BA00000E8302434C30001AC83201C8F8B001C10
1726:106BB00024090001ACA90034956900028D65001418
1727:106BC0008D70000C2D2400818D6700048D660008F7
1728:106BD000108000078D6A00102D2C00041580000E17
1729:106BE00030CE0007312D000311A0000B0000000083
1730:106BF0002404008B020028210E0006EF2406000367
1731:106C00000011102B8FBF00188FB100148FB000102F
1732:106C100003E0000827BD002015C0FFF62404008B08
1733:106C20003C030020AF4300300000000024020001BC
1734:106C3000AF8200140000000000000000000000000F
1735:106C40003C1F0150013FC825253800033C0F600E52
1736:106C5000AF47003800181882AF46003C35E8003CCA
1737:106C6000AF590030274704008F44000030860020D1
1738:106C700010C0FFFD00000000106000082466FFFF48
1739:106C80002403FFFF8CEB000024C6FFFF24E7000471
1740:106C9000AD0B000014C3FFFB250800043C08600E88
1741:106CA000AD090038000000000000000000000000F6
1742:106CB0003C070020AF470030000000000E0007171F
1743:106CC0000140202102002821000020210E0006EFB3
1744:106CD000240600030011102B8FBF00188FB1001481
1745:106CE0008FB0001003E0000827BD002027BDFFD8AB
1746:106CF000AFB200183092FFFFAFB10014AFBF002059
1747:106D0000AFB3001CAFB000101240002C000088216F
1748:106D10000A0007AF2413000150B3003C8CE5000CBF
1749:106D20000000000D262D000131B1FFFF24EC0020F2
1750:106D30000232382B10E00021AF8C001C8F8200142F
1751:106D40001440001E8F87001C3C0670003C0320008E
1752:106D50008CE400000086282414A300188F85003CD2
1753:106D6000000444023C0980000089802414A0FFEA4A
1754:106D7000310600FF2404000210C4001F28CA0003CB
1755:106D800011400016240B000314D3FFE7262D000149
1756:106D9000020028210E0006FD240400018F87001C3C
1757:106DA000AF82003C262D000131B1FFFF24EC002012
1758:106DB0000232382B14E0FFE1AF8C001C02201021BE
1759:106DC0008FBF00208FB3001C8FB200188FB100144A
1760:106DD0008FB0001003E0000827BD002814CBFFD2BD
1761:106DE000262D00010E00073D020020218F87001C88
1762:106DF0000A0007C9AF82003C020028210E0006FDF0
1763:106E0000000020210A0007C88F87001C0E0006EF33
1764:106E1000240400841600FFC38F87001C0A0007A902
1765:106E2000AF80003C3082FFFF1440000300001821B7
1766:106E30000004240224030010308500FF14A0000584
1767:106E40003087000F246600080004220230C300FFD0
1768:106E50003087000F14E00005308900032468000427
1769:106E600000042102310300FF3089000315200005D2
1770:106E7000388B0001246A000200042082314300FFA5
1771:106E8000388B00013164000110800002246C000185
1772:106E9000318300FF03E0000800601021308BFFFF0A
1773:106EA000000B394230E600FF3C09080025295998BB
1774:106EB00000064080010960218D8700003164001FB9
1775:106EC000240A0001008A180430A500FF00E32025F1
1776:106ED00014A000020003102700E22024240F000168
1777:106EE00000CF700401096821000E282714800005D6
1778:106EF000ADA400008F86000C00A6102403E000085B
1779:106F0000AF82000C8F88000C01C8102503E0000838
1780:106F1000AF82000C3C06001F3C0360003084FFFF82
1781:106F200034C5FF8024020020AC602008AC60200C37
1782:106F3000AC602010AC652014AC642018AC6220005A
1783:106F4000000000000000000003E000080000000056
1784:106F500027BDFFE82402FFFFAFBF0010AF82000C87
1785:106F6000000020213C06080024C659982405FFFF94
1786:106F700024890001000440803124FFFF010618210C
1787:106F80002C87002014E0FFFAAC6500000E000825F5
1788:106F900000002021240200013C04600024050020A0
1789:106FA000AC822018AC85200000000000000000002A
1790:106FB00000000000244A00013142FFFF2C4604007B
1791:106FC00014C0FFF78FBF001003E0000827BD0018B2
1792:106FD0008F8300082C62040003E00008384200019F
1793:106FE0008F8300082462000103E00008AF820008DC
1794:106FF0008F8300082462FFFF03E00008AF820008CF
1795:1070000027BDFFE0AFB10014AFBF0018AFB0001054
1796:107010008F6B00303C06600000808821ACCB2008DC
1797:107020008F6A002C3C02800024030008ACCA200CAC
1798:107030009769003A9768003800092C003107FFFF74
1799:1070400000A72025ACC42010ACC22014ACC3200083
1800:107050000000000000000000000000003C03600091
1801:107060008C6D200031AC00081580FFF90000000095
1802:107070008C6E201405C00020000000000E0007E9FF
1803:107080008F84000C000240803C0908002529599893
1804:10709000010938218CE400000E0007E9000281405C
1805:1070A000020220213090FFFF020020210E0008077D
1806:1070B000000028213C0C8000022C58253210FFFFD4
1807:1070C0003C116000240A0020AE2B2014AE302018A2
1808:1070D000AE2A2000000000000000000000000000B8
1809:1070E000020010218FBF00188FB100148FB0001064
1810:1070F00003E0000827BD00208C6620143C02001F1E
1811:107100003443FF803C1FFFE800C3C02437F9080068
1812:1071100003198021001079C23C0C8000022C5825F4
1813:1071200031F0FFFF3C116000240A0020AE2B201438
1814:10713000AE302018AE2A2000000000000000000041
1815:1071400000000000020010218FBF00188FB1001452
1816:107150008FB0001003E0000827BD002027BDFFE826
1817:10716000AFB000103402FFFF3090FFFFAFBF00143C
1818:1071700012020006020020210E0008250000000077
1819:10718000020020210E000807240500018F8400085A
1820:107190008FBF00148FB000102483FFFF27BD00189D
1821:1071A00003E00008AF830008000439C230E6003F66
1822:1071B00000043B4200071840240210002CC40020A9
1823:1071C00024C8FFE0AF42002C2463000114800003B8
1824:1071D00030A900FF00071840310600FF000360805F
1825:1071E00024080001019A58213C0A000E00C8280416
1826:1071F000016A382111200005000530278CE90000C4
1827:107200000125302503E00008ACE600008CEE00000C
1828:1072100001C6682403E00008ACED000027BDFFE8CC
1829:10722000AFBF0014AFB000103C0460008C850808AC
1830:107230003403F00030A2F0005043000624020001A5
1831:107240008C8708083404E00030E6F00010C4001E0B
1832:1072500024020002AF8200403C1060003C0A0200A1
1833:10726000AE0A0814240910003C08000E8E034400E6
1834:1072700003482021AF49002C240501200E000CCF2B
1835:10728000000030218F830040106000043C02169102
1836:10729000240B0001106B000E3C023D6C344F00903B
1837:1072A000AE0F44088FBF00148FB000103C0C60007C
1838:1072B000240E10003C0D020027BD0018AD8E4420A6
1839:1072C00003E00008AD8D08100A0008F6AF8000400A
1840:1072D0003C0218DA344F0090AE0F44088FBF001400
1841:1072E0008FB000103C0C6000240E10003C0D02001A
1842:1072F00027BD0018AD8E442003E00008AD8D0810B6
1843:107300000A0008CA240500010A0008CA0000282152
1844:107310003C08080025085DA42404FFFF0100182193
1845:107320002402001E2442FFFFAC6400000441FFFD64
1846:10733000246300043C07080024E75E208CE5FFFC82
1847:107340002404001C24060001308A001F0146480462
1848:1073500024840001000910272C8300201460FFFA08
1849:1073600000A22824ACE5FFFC3C05666634A4616EEF
1850:107370003C06080024C65EE0AF840058AF88009C3D
1851:107380002404FFFF00C018212402001F2442FFFF35
1852:10739000AC6400000441FFFD246300043C07666602
1853:1073A0003C05080024A55EA0AF86004834E6616E67
1854:1073B000AF8600982404FFFF00A018212402000FCC
1855:1073C0002442FFFFAC6400000441FFFD246300047D
1856:1073D0003C0B66663C06080024C65E203568616E7C
1857:1073E000AF8500A4AF8800702404FFFF00C01821FF
1858:1073F0002402001F2442FFFFAC6400000441FFFD93
1859:10740000246300043C0D66663C0A0800254A5F6060
1860:1074100035AC616EAF860090AF8C005C2404FFFF3A
1861:1074200001401821240200032442FFFFAC64000045
1862:107430000441FFFD246300043C09080025295F7016
1863:107440008D27FFFC24040006240500013099001F4D
1864:107450000325C00424840001001878272C8E002006
1865:1074600015C0FFFA00EF3824AD27FFFC3C09666623
1866:1074700024030400240403DC24050200240600661F
1867:107480003522616E3C08080025085AA4AF820074BA
1868:10749000AF830044AF83006CAF830050AF830084A0
1869:1074A000AF8A008CAF840064AF85004CAF86005477
1870:1074B000AF840078AF850060AF860080010018219E
1871:1074C000240200022442FFFFAC6000000441FFFDE3
1872:1074D00024630004240400032403000C3C0A080075
1873:1074E000254A5AB0AF8A00680A00099D2405FFFFAB
1874:1074F0000004188024840001006858212C8700C0F3
1875:1075000014E0FFFBAD6500003C0E666635CD616E94
1876:10751000240C17A024081800AF8D0088AF8C0094AD
1877:1075200003E00008AF88007C2484007F000421C2AF
1878:1075300000004021000030210000382100002821F7
1879:107540000A0009B4AF8400A01060000624E700011F
1880:1075500000C4302124A500012CC20BF51440FFFA11
1881:107560002CA300663C09080025295F600120182132
1882:10757000240200032442FFFFAC6000000441FFFD31
1883:107580002463000410E0001A24E3FFFF00032942F3
1884:1075900010A0000A000020212406FFFF3C03080081
1885:1075A00024635F60248400010085502BAC660000DA
1886:1075B000250800011540FFFB2463000430E2001F92
1887:1075C0001040000800086880240C0001004C3804BA
1888:1075D000000858800169282124E6FFFF03E0000825
1889:1075E000ACA6000001A940212409FFFFAD0900005D
1890:1075F00003E0000800000000AF4400283C04000C39
1891:1076000003442021000528820A000CCF000030210D
1892:10761000000421803C036000AC64100800000000FE
1893:1076200000052980AC65100C0000000003E0000894
1894:107630008C62100C27BDFFE800802821240400384C
1895:10764000AFBF00140E0009E4AFB0001024040E0018
1896:10765000AF4400283C10000C0350202124050010EA
1897:107660000E000CCF0000302103501021AC40000070
1898:10767000AC400004240400388FBF00148FB0001009
1899:1076800024053FFF27BD00180A0009E48C430000D1
1900:10769000000421803C036000AC641008000000007E
1901:1076A0008C62100C03E000080002118227BDFFC8A5
1902:1076B000AFB400208F940068AFBE0030AFB7002C8D
1903:1076C000AFB600280000B8210080B021241E00C001
1904:1076D000AFBF0034AFB50024AFB3001CAFB2001889
1905:1076E000AFB10014AFB000100A000A21AFA5003CF2
1906:1076F000504000018F94006827DEFFFF13C0002870
1907:10770000269400048E9200003C03080024635DA0D0
1908:107710001240FFF70283102B3C04080024845AA473
1909:10772000028410230002A8C0000098210A000A3039
1910:1077300024110001001188401220002600000000E2
1911:1077400002B38021025128240200202110A0FFF959
1912:10775000267300010E0009ED0000000000166840CD
1913:1077600032EC000101AC20210E0009E402002821C6
1914:107770008F89009426F700018FA6003C3AEB0001A8
1915:10778000316A00012528FFFF0011382702CAB02105
1916:10779000AF88009416E6FFE702479024AE920000FF
1917:1077A00002E010218FBF00348FBE00308FB7002C55
1918:1077B0008FB600288FB500248FB400208FB3001C33
1919:1077C0008FB200188FB100148FB0001003E00008D2
1920:1077D00027BD00383C0E080025CE5DA0028E102B80
1921:1077E0000A000A1CAE92000027BDFFD8AFB10014FA
1922:1077F000AFB00010AFBF0020AFB3001CAFB2001895
1923:1078000000A0882110A0001F000480403C13080045
1924:1078100026735AA40A000A692412000112200019D2
1925:10782000261000010E000A0402002021000231424D
1926:107830002444FFA0000618803045001F2C8217A1A9
1927:10784000007318212631FFFF1040FFF400B230040E
1928:107850008C6900000200202124053FFF01264024FE
1929:107860001500FFEE012638250E0009E4AC67000084
1930:107870008F8A009426100001254700011620FFE999
1931:10788000AF8700948FBF00208FB3001C8FB2001809
1932:107890008FB100148FB0001003E0000827BD00284E
1933:1078A0008F85009C00805821000040210000482165
1934:1078B000240A001F3C0C0800258C5E1C3C0D0800AF
1935:1078C00025AD5DA48CA6000050C00014000040212E
1936:1078D00000AD1023000238C0240300010A000AA2F0
1937:1078E000000020211500000300E41021244820247A
1938:1078F0000000482125290001512B00132506DFDC5B
1939:10790000106000062484000100C3702415C0FFF538
1940:10791000000318400A000AA00000402110AC002615
1941:1079200024A3000400602821254AFFFF1540FFE53D
1942:10793000AF85009C512B00042506DFDC00004021B0
1943:1079400003E00008010010210006614230C5001F5D
1944:10795000000C50803C07080024E75DA424040001CB
1945:10796000014730211120000F00A420043C0508002D
1946:1079700024A55E20148000052529FFFF24C60004ED
1947:1079800010C5001100000000240400018CCF00008D
1948:107990000004C0270004204001F868241520FFF5EA
1949:1079A000ACCD00008F99007801001021032B4823F3
1950:1079B00003E00008AF8900783C05080024A55DA419
1951:1079C0000A000AAA000040213C06080024C65DA463
1952:1079D0000A000AC324040001308800FF24020002C8
1953:1079E0001102000A240300031103005C8F8900A424
1954:1079F000240400041104005F24050005110500673C
1955:107A00000000182103E00008006010218F89004861
1956:107A10003C0C0800258C5EE03C04080024845F6078
1957:107A2000240300201060000F00005821240D0002E4
1958:107A3000240E00033C0F080025EF5EE08D270000B8
1959:107A400014E0000B30F9FFFF252900040124C02BAE
1960:107A500053000001018048212463FFFF5460FFF8B8
1961:107A60008D2700000160182103E00008006010214C
1962:107A7000132000323C0500FF30E200FF00403021BF
1963:107A80001040004200005021240500010000202188
1964:107A90000005C84000A6C02417000003332500FFDE
1965:107AA00014A0FFFB24840001012CC023001828C06F
1966:107AB00000AA6021008C50213144001F240C0001D9
1967:107AC000008C18040003102700E23024110D00413F
1968:107AD000AD260000110E004C000A1840110D0036B2
1969:107AE0008F87006C510E00568F8C0060240D0004AF
1970:107AF000110D005A8F8E0084240E0005150EFFDA3A
1971:107B000001601821240B14301140000600001821D8
1972:107B10008F8400A024630001006A402B1500FFFD44
1973:107B2000016458218F8A0080AF89008C0160182180
1974:107B30002549FFFF0A000AFAAF89008000E52024EA
1975:107B4000000736021080FFD0240A001800075402F4
1976:107B5000314600FF0A000B02240A00103C0C08000A
1977:107B6000258C5EA03C04080024845EE00A000AE93B
1978:107B7000240300103C0C0800258C5E203C04080007
1979:107B800024845EA00A000AE88F89009000071A0288
1980:107B9000306600FF0A000B02240A00088F89008C5F
1981:107BA0003C0C0800258C5F603C04080024845F7056
1982:107BB0000A000AE924030004000A4080250B003073
1983:107BC00024E6FFFF01601821AF8900480A000AFA85
1984:107BD000AF86006C000AC982001978803C07080053
1985:107BE00024E75EA001E72021000A18428C8F0000E4
1986:107BF0003079001F032C38040007C02701F86024E7
1987:107C00000A000B17AC8C00000003314200062880EC
1988:107C100000AF28213062001F8CB8000024630001EF
1989:107C2000004CC804000321420019382700041080CA
1990:107C300003073024004F20210A000B5BACA6000094
1991:107C4000000A68C025AB0032258AFFFF01601821B9
1992:107C5000AF8900A40A000AFAAF8A0060254B1030F1
1993:107C6000AF8900900160182125C9FFFF0A000AFAB8
1994:107C7000AF890084308600072CC200061040001433
1995:107C800000000000000640803C030800246357D039
1996:107C9000010338218CE4000000800008000000008F
1997:107CA0002409000310A9000E00000000240A0005AA
1998:107CB00010AA000B00000000240B000110AB00080C
1999:107CC000000000008F8C00A010AC00050000000038
2000:107CD00003E00008000010210A000A8800A020210B
2001:107CE0000A000AD600C0202127BDFFE8308400FF2B
2002:107CF000240300021083000BAFBF00102406000312
2003:107D00001086003A2408000410880068240E00053C
2004:107D1000108E007F2CAF14308FBF001003E00008DE
2005:107D200027BD00182CA200301440FFFC8FBF0010AC
2006:107D300024A5FFD0000531C2000668803C0708007A
2007:107D400024E75EE001A730218CC9000000052882ED
2008:107D500030AC001F240B0001018B50048F840048BD
2009:107D6000012A4025ACC800008C830000506000014F
2010:107D7000AF8600488F98006C30AE000124A6FFFF4C
2011:107D8000270F000115C00002AF8F006C24A6000170
2012:107D90000006414200082080008718218C790000ED
2013:107DA00030C2001F240600010046F804033F3824B7
2014:107DB00010E0FFDA8FBF00100005C182001870804C
2015:107DC0003C0F080025EF5EA001CF48218D2B00005D
2016:107DD0000005684231A5001F00A66004016C502513
2017:107DE00027BD001803E00008AD2A00002CA70030D2
2018:107DF00014E0FFCA8FBF001030B900071723FFC778
2019:107E000024A8FFCE00086A02000D60803C0B080029
2020:107E1000256B5EA0018B30218CC40000000828C2B5
2021:107E200030AA001F24080001014848048F8200A4E2
2022:107E300000891825ACC300008C5F000053E00001EE
2023:107E4000AF8600A400057040000E7942000F288024
2024:107E50003C04080024845EE000A418218C6B000020
2025:107E600025DF000131CD001F001F514201A8600431
2026:107E7000016C4825000A1080AC69000000442821EC
2027:107E80008CA600008F98006033F9001F8FBF001090
2028:107E90000328380400C77825270E000127BD0018E5
2029:107EA000ACAF000003E00008AF8E006024A5EFD067
2030:107EB0002CB804001300FF998FBF00100005314259
2031:107EC000000658803C0A0800254A5E20016A3021DD
2032:107ED0008CC4000030A3001F2409000100691004B5
2033:107EE0008F9900900082F825ACDF00008F270000FA
2034:107EF00050E00001AF8600908F8D00848FBF00108E
2035:107F000027BD001825AC000103E00008AF8C0084F9
2036:107F100015E0FF828FBF00108F8600A00006104082
2037:107F20000046F821001F210003E4C8210019384051
2038:107F300024F8143000B8402B1100FF788FBF0010D8
2039:107F400024A4EBD00E00020300C0282100027942D5
2040:107F5000000F70803C0D080025AD5F6001CD202131
2041:107F60008C8B0000304C001F240600010186180491
2042:107F70008F89008C01635025AC8A00008D2500009C
2043:107F800050A00001AF84008C8F9800808FBF00103C
2044:107F900027BD00182708000103E00008AF88008013
2045:107FA00030A500072403000310A3001028A200043A
2046:107FB00014400008240700022403000410A3001545
2047:107FC0002408000510A8000F8F8500A003E000081A
2048:107FD0000000000014A7FFFD0080282114C3FFFB50
2049:107FE000240400020A000B9A000000002409000586
2050:107FF0000080282110C9FFFB2404000303E00008CF
2051:108000000000000014C5FFF1008028210A000B9A2F
2052:1080100024040005240A00010080282110CAFFF171
2053:108020002404000403E000080000000027BDFFE076
2054:10803000AFB00010000581C22603FFD024C5003F69
2055:108040002C6223D024C6007FAFB20018AFB1001459
2056:10805000AFBF001C309100FF000691C200052982CD
2057:1080600002002021104000082403FFFF0E000A5ADE
2058:108070000000000002002021022028210E000C48F0
2059:1080800002403021000018218FBF001C8FB2001861
2060:108090008FB100148FB000100060102103E00008C1
2061:1080A00027BD002027BDFFD824A2007FAFB3001C4E
2062:1080B000AFB20018000299C2309200FF24A3003F23
2063:1080C0000240202102602821AFB10014AFB000109F
2064:1080D000AFBF00200E000B7D00038982004080218D
2065:1080E000004020210220282114400009000018210E
2066:1080F0008FBF00208FB3001C8FB200188FB1001407
2067:108100008FB000100060102103E0000827BD002898
2068:108110000E000A0B00000000004028210200202170
2069:108120001051FFF3001019C00E000A5A00000000A1
2070:1081300002002021024028210E000C48026030215C
2071:108140008FBF00208FB3001C8FB200188FB10014B6
2072:108150008FB00010000018210060102103E000081B
2073:1081600027BD00283084FFFF30A5FFFF10800007E7
2074:10817000000018213082000110400002000420425B
2075:10818000006518211480FFFB0005284003E000086B
2076:108190000060102110C00007000000008CA2000049
2077:1081A00024C6FFFF24A50004AC82000014C0FFFB1E
2078:1081B0002484000403E000080000000010A0000870
2079:1081C00024A3FFFFAC8600000000000000000000B8
2080:1081D0002402FFFF2463FFFF1462FFFA24840004DB
2081:1081E00003E000080000000030A5FFFF8F4201B847
2082:1081F0000440FFFE3C07601500A730253C0310003B
2083:10820000AF440180AF400184AF46018803E000081D
2084:10821000AF4301B88F8500D02C8640000080182124
2085:108220008CA700840087102B144000100000000071
2086:108230008CA800842D06400050C0000F240340008D
2087:108240008CAA0084008A482B512000018CA3008452
2088:1082500000035A42000B20803C05080024A558204A
2089:108260000085182103E000088C62000014C0FFF4B0
2090:10827000000000002403400000035A42000B20804D
2091:108280003C05080024A558200085182103E00008BB
2092:108290008C6200008F8300D0906600D024C500015E
2093:1082A000A06500D08F8500D0906400D090A200D24D
2094:1082B0001044001700000000936C00788F8B00BC06
2095:1082C000318A00FFA16A000C25490001938700C490
2096:1082D000312200FF3048007F1107000B00026827A1
2097:1082E000A36200788F4E017805C0FFFE8F9900B021
2098:1082F000241800023C0F1000AF590140A35801445C
2099:1083000003E00008AF4F01780A000D1831A2008089
2100:10831000A0A000D00A000D0E000000008F8700D042
2101:1083200027BDFFC8AFBF0030AFB7002CAFB60028E5
2102:10833000AFB50024AFB40020AFB3001CAFB200183B
2103:10834000AFB10014AFB0001094E300E094E200E29B
2104:10835000104300D72405FFFF3C047FFF3497FFFF45
2105:108360002415FF800A000DFF3C16000E108A00D174
2106:108370008FBF00308F9100B03C1808008F18005C50
2107:10838000001230C0001291400311702101D57824F1
2108:10839000AF4F002C94EC00E231CD007F01BA5821A0
2109:1083A000318A7FFF01764821000A804002091021AE
2110:1083B000945300003C0808008D0800580246C02174
2111:1083C00032733FFF0013198001032021022428216A
2112:1083D00030BF007F03FAC82100B5A024AF54002CA1
2113:1083E0000336A0218E8700108E8F0030037858212D
2114:1083F000256D008800EF7023240C0002AE8E001063
2115:10840000AF8D00ACA16C0088976A003C8E84003070
2116:108410008F9100AC0E000CE53150FFFF00024B8045
2117:10842000020940253C02420001022025AE2400043E
2118:108430008E8300048F8D00AC8E860000240E000811
2119:10844000ADA3001CADA60018ADA0000CADA000109F
2120:10845000929F000A33F900FFA5B900149685000821
2121:108460003C1F000CA5A500169298000A331100FFCE
2122:10847000A5B100209690000824180005A5B00022A0
2123:10848000ADA00024928F000B2410C00031E700FF44
2124:10849000A5A70002A1AE00018E8C00308F8B00AC2E
2125:1084A0008F8400B0AD6C00083C0A08008D4A00546F
2126:1084B0000144482101354024AF4800283C0208000F
2127:1084C0008C4200540044302130C3007F007AC82120
2128:1084D000033F282102458821AF9100BCAF8500C031
2129:1084E000A23800008F8A00BC2403FFBF2418FFDFDE
2130:1084F000954F000201F0382400F37025A54E0002CC
2131:10850000914D000231AC003F358B0040A14B000281
2132:108510008F8600BC8F8900D0ACC000048D28007C01
2133:108520003C098000ACC8000890C4000D3082007F78
2134:10853000A0C2000D8F8500BC90BF000D03E3C824CE
2135:10854000A0B9000D8F9100BC9233000D02789024E9
2136:10855000A232000D8E9000348F8B00BCAD700010E5
2137:108560008E87002C8E8F003000EF7023AD6E0014CC
2138:10857000916D001831AC007FA16C00188F9F00BC7A
2139:108580008E8A00308FE8001801572024010930241A
2140:1085900000C41025AFE200189283000AA3E3001C78
2141:1085A000969900088F8500BC8F9800D0A4B9001E52
2142:1085B0008E9000308E8400300E0002038F05008400
2143:1085C0008F8500D0000291400002990090AF00BC5E
2144:1085D000025388210040302131E7000210E00003FF
2145:1085E00002118021000290800212802190B900BC0B
2146:1085F0003327000410E000020006F880021F8021EB
2147:108600008E9800308F8B00BC24068000330F00034F
2148:10861000000F702331CD0003020D6021AD6C00040A
2149:1086200094A400E294AA00E294B000E231497FFFF2
2150:108630002522000130537FFF0206182400734025D5
2151:10864000A4A800E294A400E23C1408008E94006008
2152:1086500030917FFF12340022000000000E000D0553
2153:10866000000000008F8700D00000282194F300E074
2154:1086700094F000E21213000F8FBF003090E900D099
2155:1086800090E800D1313200FF310400FF0244302B6A
2156:1086900014C0FF36264A000190EE00D2264B00019E
2157:1086A00031CD00FF008D6021158BFF338F9100B01D
2158:1086B0008FBF00308FB7002C8FB600288FB50024F5
2159:1086C0008FB400208FB3001C8FB200188FB100143C
2160:1086D0008FB0001000A0102103E0000827BD003873
2161:1086E00094A300E200664024A4A800E290A400E263
2162:1086F00090B900E2309100FF0011A1C20014F827E8
2163:10870000001F39C03332007F024730250A000DF7C1
2164:10871000A0A600E23084FFFF30A5FFFFAF440018A1
2165:10872000AF45001C03E000088F42001427BDFFB8CE
2166:10873000AFB000208F9000D03084FFFFAFA40010B6
2167:10874000AFBF0044AFBE0040AFB7003CAFB600388B
2168:10875000AFB50034AFB40030AFB3002CAFB20028D7
2169:10876000AFB10024A7A00018920600D1920500D056
2170:1087700030C400FF30A300FF0064102B1040012222
2171:10878000AFA00014920900D08FB50010312800FF6F
2172:108790000088382324F4FFFF0014882B0015982B41
2173:1087A00002339024524001268FB40014961E00120A
2174:1087B000961F00108FB7001003DFC82300171400A6
2175:1087C0000019C400000224030018140302E2B02AB6
2176:1087D00052C00001004020210284282B10A000027A
2177:1087E000008018210280182100033C0000071C03B0
2178:1087F0003064FFFF2C86000914C000020060B8211D
2179:10880000241700088E0A0008001769808E09000CE2
2180:1088100031ABFFFF3C0C0010016C402527520400D7
2181:10882000AF4A0038AF9200B8AF49003CAF480030C3
2182:108830000000000000000000000000000000000038
2183:108840000000000000000000000000000000000028
2184:108850008F4F000031EE002011C0FFFD0017982A55
2185:10886000027110240A000E920000B02155E00101AF
2186:108870009258000131130080126001CF01202021A5
2187:108880009655001232A5FFFF0E000CDAA7B50018AE
2188:108890008F9000D00291A02326C800018F9100B8CC
2189:1088A0000008B4000016B403262C004002D7782A32
2190:1088B0000014882B240B00010180902101F1102469
2191:1088C000AF8C00B8AFAB0014104001BC8F8900B072
2192:1088D0003C0C08008D8C0054240BFF80921E00D0AD
2193:1088E00001895021014B2824921900D0AF4500285E
2194:1088F0008E4700103C0808008D0800583C180800FE
2195:108900008F18005430E33FFF000321800104302121
2196:10891000012658212402FF800162F824920C00D025
2197:10892000AF5F002C9248000033D100FF333500FFC9
2198:108930000309982100117140001578C0326D007F45
2199:1089400001CF382101BA2821318300FF3164007F33
2200:108950003C0A000C00AA88210367F0210003314083
2201:10896000009A10213108003F3C1F000E00D1C021A9
2202:10897000005F982127D900882D150008AF9100C00D
2203:10898000AF9900ACAF9800BCAF9300B412A0018ABD
2204:1089900000008821240E0001010E4004310D005D0D
2205:1089A00011A0FFB2310F00028E4A00283C03008064
2206:1089B0003C04FFEFAE6A00008E450024A260000A6E
2207:1089C0003488FFFFAE6500049247002C3C1FFF9FD8
2208:1089D00037FEFFFFA267000C8E62000C3C180040BF
2209:1089E000A267000B0043302500C8C824033E88243A
2210:1089F0000238A825AE75000C8E490004AE60001840
2211:108A00003C0F00FFAE6900148E4D002C35EEFFFFC9
2212:108A10008F8B00B001AE6024AE6C00108E47000852
2213:108A2000A660000896450012AE6700208E42000C3A
2214:108A300030B03FFF00105180AE6200248E5E001403
2215:108A4000014B182130A40001AE7E00288E59001879
2216:108A5000000331C200044380AE79002C8E51001C0B
2217:108A600000C8F821A67F001CAE71003096580002A5
2218:108A70008E550020A678001EAE7500349249003352
2219:108A80003130000456000005925000008F8C00D059
2220:108A90008D8B007CAE6B0030925000008F8F00BC3D
2221:108AA000A1F00000924E003331CD000251A000072A
2222:108AB000925E00018F8900BC2418FF809131000074
2223:108AC0000311A825A1350000925E00018F9900BC1A
2224:108AD0002409FFBF240BFFDFA33E00018F9500BCDC
2225:108AE00092B8000D3311007FA2B1000D8F8E00BC33
2226:108AF00091D0000D02097824A1CF000D8F8800BC11
2227:108B00008E6D0014910A000D2DAC0001000C29405F
2228:108B1000014B382400E51825A103000D96420012F0
2229:108B20008F8800BC8F8700D0A50200028E4500040C
2230:108B300090FF00BC30A400030004302330DE0003AB
2231:108B400000BE102133F90002172000022444003433
2232:108B50002444003090E200BC00A2302430DF000446
2233:108B600017E0000224830004008018218F8F00ACDE
2234:108B700024090002AD030004A1E90000924E003F69
2235:108B80008F8D00ACA1AE00018F9500AC924C003FE0
2236:108B90008E440004A6AC0002976B003C0E000CE56E
2237:108BA0003170FFFF00025380020A38253C05420065
2238:108BB00000E51825AEA300048F8600AC8E4800386F
2239:108BC000ACC800188E440034ACC4001CACC0000C0F
2240:108BD000ACC00010A4C00014A4C00016A4C00020A3
2241:108BE000A4C00022ACC000248E6400145080000198
2242:108BF00024040001ACC400080E000D05241100017E
2243:108C00000A000E858F9000D0920F00D2920E00D0F5
2244:108C10008FB5001031EB00FF31CD00FF008D6023D8
2245:108C2000016C50212554FFFF0014882B0015982B50
2246:108C3000023390241640FEDD000000008FB40014C3
2247:108C40008FBF00448FBE00403A8200018FB7003CC6
2248:108C50008FB600388FB500348FB400308FB3002C3E
2249:108C60008FB200288FB100248FB0002003E00008ED
2250:108C700027BD004833110020122000EE241500010A
2251:108C8000921E00BC241F00010000A82133D900015E
2252:108C90001320000DAFBF001C8E4400148E0800840A
2253:108CA0000088102B14400002008030218E060084C2
2254:108CB0008E03006400C3A82B16A0000200C0202170
2255:108CC0008E0400640080A8218E4700148E05006485
2256:108CD00000E5302B14C0000200E020218E04006467
2257:108CE0000095F02313C000048FAC001C240A00027E
2258:108CF000AFAA001C8FAC001C028C582B156000A87A
2259:108D0000000018218E4F00388E6D000C3C0E008044
2260:108D1000AE6F00008E4A00343C10FF9F01AE582514
2261:108D2000AE6A00049246003F360CFFFF016C382407
2262:108D30003C0500203C03FFEFA266000B00E5102578
2263:108D40003468FFFF8F8700B80048F8243C0400080F
2264:108D500003E4C825AE79000C8CF80014AE6000184E
2265:108D600002BE7821AE7800148CF10018AE71001CA0
2266:108D70008CE90008AE6900248CEE000CAE6F002C6C
2267:108D8000AE600028AE6E0020A6600038A660003AF3
2268:108D90008CED001401B58023021E902312400011B7
2269:108DA000AE72001090EA003D8E6500048E640000F3
2270:108DB000000A310000A6C821000010210326402B24
2271:108DC0000082F82103E8C021AE790004AE780000EB
2272:108DD00090F1003DA271000A8F8900B8953200061B
2273:108DE000A67200088F9800AC2419000202A020216E
2274:108DF000A31900009769003C8F9200AC0E000CE5AF
2275:108E00003131FFFF00027B808F8500B8022F68257B
2276:108E10003C0E420001AE8025AE5000048F8400ACB1
2277:108E20008CAC0038AC8C00188CAB0034AC8B001CC4
2278:108E3000AC80000CAC800010A4800014A48000164C
2279:108E4000A4800020A4800022AC80002490A7003FD2
2280:108E5000A487000212A001342403000153C00002C1
2281:108E600090A2003D90A2003E24480001A08800018D
2282:108E70008F9F00ACAFF500088F8300D0240700342B
2283:108E8000906600BC30C5000250A0000124070030ED
2284:108E90008F9200B88F8A00BC906D00BC924B00008E
2285:108EA0002412C00032A50003A14B00008F8600B839
2286:108EB0008F8800BC2402000490C4000100451823E0
2287:108EC00030790003A10400018F8A00BC8F9F00B895
2288:108ED00000F538219558000297E9001200F9382171
2289:108EE00003128824312F3FFF022F7025A54E000268
2290:108EF0009150000231A80004320C003F358B004035
2291:108F0000A14B000212A000028F8500BC00E83821AE
2292:108F10008F8E00D0ACA70004240BFFBF8DCD007C4A
2293:108F20002EA400012403FFDFACAD000890B0000DBB
2294:108F300000044140320C007FA0AC000D8F8600BCC5
2295:108F400090CA000D014B1024A0C2000D8F8700BCF9
2296:108F500090E5000D00A3F82403E8C825A0F9000D52
2297:108F60008F9100B88F8D00BC8E380020ADB80010F6
2298:108F70008E290024ADA900148E2F0028ADAF001853
2299:108F80008E2E002C0E000D05ADAE001C8FB0001C07
2300:108F9000240C0002120C00ED8F9000D08FA3001C57
2301:108FA00000608821146000020060A8210000A02158
2302:108FB00056A0FE390291A0230014882B8FAE00101A
2303:108FC000960700103C0A002001D6F02302C7C021FA
2304:108FD00033D2FFFFA6180010AFB20010AF4A003026
2305:108FE0000000000096170010961300121277008EF2
2306:108FF000001641808E16000C8E0F0008000817C363
2307:1090000002C8282100A8582B01E2A82102AB182190
2308:10901000AE05000CAE0300088FB300100013B82B90
2309:10902000023780241200FF058F9000D00A000E4BFB
2310:10903000000000008E480038A6600008240F0003DE
2311:10904000AE6800008E4C0034A260000A8F9000B819
2312:10905000AE6C00043C050080920B003FA26F000C38
2313:109060008E62000C3C11FF9FA26B000B004568252F
2314:109070003623FFFF3C04FFEF8F8C00B801A33024A0
2315:10908000349FFFFF00DFC824AE79000C8D890014E7
2316:10909000959E00128F9800B0AE6900108D8E00145E
2317:1090A000AE600018AE600020AE6E0014AE6000240A
2318:1090B0008D87001833CE3FFF000E5180AE67002829
2319:1090C0008D8800080158902133D00001AE6800302F
2320:1090D0008D91000C8F8D00AC001259C200107B8066
2321:1090E000016F282124020002A665001CA66000363C
2322:1090F000AE71002CA1A200009763003C8F9800ACD9
2323:109100003C044200307FFFFF03E43025AF0600043B
2324:109110008F9900B824070001240BC0008F3300385A
2325:1091200024060034AF1300188F290034AF09001C47
2326:10913000AF00000CAF000010A7000014A70000163D
2327:10914000A7000020A7000022AF000024A7150002FE
2328:10915000A30700018F8A00AC8F9E00B88F8C00BCE3
2329:10916000AD55000893C80000A18800008F9200B898
2330:109170008F8F00BC92500001A1F000018F8400BCD1
2331:1091800094910002022B282400AE1025A482000234
2332:10919000908D000231A3003FA08300028F8300D096
2333:1091A0008F8400BC907F00BC33F30002526000014A
2334:1091B00024060030AC8600048C65007C240DFFBFC3
2335:1091C00002A08821AC8500089082000D3043007F0A
2336:1091D000A083000D8F8600BC90C4000D008DF82484
2337:1091E000A0DF000D8F8E00BC91D9000D3729002023
2338:1091F000A1C9000D8F9E00B88F9300BC8FC70020BF
2339:10920000AE6700108FD80024AE7800148FCA0028F3
2340:10921000AE6A00188FD2002C0E000D05AE72001C35
2341:109220000A00104C8F9000D0960200148E040004A7
2342:109230003043FFFF000368C0008DF821AF5F003CA2
2343:109240008E1900048F46003C032648231920003C59
2344:10925000000000008E05000024A200013C0B00105D
2345:1092600035750008AF420038AF55003000000000EF
2346:1092700000000000000000000000000000000000EE
2347:109280000000000000000000000000008F4C000003
2348:10929000318F002011E0FFFD000000008F5304001B
2349:1092A0003C080020AE1300088F570404AE17000CD2
2350:1092B000AF480030000000003C0608008CC60044A7
2351:1092C0002416000110D600BB000000009619001201
2352:1092D0003C0508008CA5004000B94821A6090012F1
2353:1092E000960E001425C70001A60700149618001456
2354:1092F0003304FFFF5486FF498FB30010A60000140B
2355:109300000E000E2530A5FFFF3C0408008C840024CD
2356:10931000961F00120044682303ED3023A6060012B6
2357:109320000A0010678FB30010A08300018F8200AC89
2358:1093300024040001AC4400080A000FFF8F8300D012
2359:109340008E0200000A0010F83C0B00108F9F00C036
2360:109350008FB8001C920F00D0920B00D0920D00D05D
2361:1093600031F100FF316E00FF000E28C000111140E6
2362:109370000045182131A600FF036350210006C940B3
2363:10938000033F382125490088AF8900ACAF8700BC76
2364:10939000A15800889768003C03C020218F9100AC41
2365:1093A0000E000CE53110FFFF00026380020C7825EF
2366:1093B0003C0442008F8C00B801E45825AE2B000419
2367:1093C0008D9100388F8B00AC00006821000D1100DA
2368:1093D000AD7100188D8E00343C087FFF3504FFFF0F
2369:1093E000AD6E001C9183003E8D65001C8D790018C8
2370:1093F000000331000003870200A6C0210050F825B9
2371:109400000306482B033F382100E95021AD78001CAA
2372:10941000AD6A0018AD60000CAD600010918F003E89
2373:109420002405000503C45024A56F00149591000481
2374:1094300003C02021A5710016918E003EA56E00206C
2375:10944000958D0004A56D0022AD6000249190003F31
2376:10945000A57000029182003D24430001A163000138
2377:109460008F8600AC8F9F00BCACDE0008A3E5000037
2378:109470008F9000BC8F9900B82405FFBF96070002AB
2379:10948000973800120247782433093FFF01E9882505
2380:10949000A6110002921200022418FFDF324E003F94
2381:1094A00035CD0040A20D00028F8600BC8F8C00D00D
2382:1094B0002412FFFFACC000048D8B007C3C0C8000AC
2383:1094C000ACCB000890C2000D3043007FA0C3000D5C
2384:1094D0008F8700BC90FF000D03E5C824A0F9000DA4
2385:1094E0008F9100BC9229000D01387824A22F000D25
2386:1094F0008F9000BCAE120010AE150014920E001832
2387:109500002415FF8002AE6825A20D00188F8500BCCF
2388:109510008F8300B88CAB0018016C1024004A3025F2
2389:10952000ACA600189068003EA0A8001C8F9F00B851
2390:109530008F8700BC8F9800D097F90004A4F9001E13
2391:109540000E0002038F0500848F8600D00002794050
2392:109550000002490090D200BC01E988210040282186
2393:109560003255000212A0000303D120210002A8807E
2394:109570000095202190CC00BC3192000412400003E1
2395:1095800033C900030005408000882021241900040D
2396:109590008F9E00BC0329382330F800030098502127
2397:1095A000AFCA00040E000D05A66500380A0010477A
2398:1095B0008F9000D0960A00123C1E08008FDE002417
2399:1095C00003CA9021A61200120A0010678FB3001080
2400:1095D00027BDFFE03C1808008F180050AFB0001006
2401:1095E000AFBF0018AFB10014AF8400B09371007426
2402:1095F000030478212410FF8031EE007F3225007FA4
2403:1096000001F0582401DA68213C0C000AA38500C44B
2404:1096100001AC2821AF4B002494A9001097680006E4
2405:1096200090A6006200803821240200300109202326
2406:1096300030C300F0AF8500D0106200193090FFFFFA
2407:1096400090AE0062240DFFF0240A005001AE6024A9
2408:10965000318B00FF116A002F000000001600000788
2409:10966000241F0C00AF5F00248FB100148FBF0018BF
2410:109670008FB0001003E0000827BD00200E000E2B65
2411:1096800002002021241F0C00AF5F00248FB10014C2
2412:109690008FBF00188FB0001003E0000827BD002026
2413:1096A00094A200E094A400E290BF01130082182667
2414:1096B0003079FFFF33E700C014E000092F310001CB
2415:1096C00016000038000000005620FFE6241F0C00A2
2416:1096D0000E000D27000000000A0011F9241F0C00E5
2417:1096E0001620FFDE000000000E000D270000000025
2418:1096F0001440FFDC241F0C00160000228F8300D0D2
2419:10970000906901133122003FA06201130A0011F990
2420:10971000241F0C0094AF00D48F8600D400E02821D1
2421:10972000240400050E000C6B31F0FFFF144000050F
2422:1097300024030003979100E6000018212625FFFF6F
2423:10974000A78500E68F5801B80700FFFE3C1960139B
2424:10975000AF400180241F0C00AF50018400793825F0
2425:109760003C101000AF4701888FB10014AF5001B812
2426:10977000AF5F00248FB000108FBF001803E0000817
2427:1097800027BD00200E000E2B020020215040FFB507
2428:10979000241F0C008F8300D0906901130A0012224D
2429:1097A0003122003F0E000E2B020020211440FFAD9D
2430:1097B000241F0C00122000078F8300D09068011333
2431:1097C0003106003F34C20040A06201130A0011F9C3
2432:1097D000241F0C000E000D27000000005040FFA1C8
2433:1097E000241F0C008F8300D0906801133106003FC6
2434:1097F0000A00125234C20040AF9B00C803E00008C8
2435:10980000AF8000EC3089FFFF000940422D0200418B
2436:10981000000929801440000200095040240800403B
2437:10982000000879400008C0C001F85821256701A848
2438:1098300000EF702125CC007F240DFF80018D1824BE
2439:109840000065302100CA282125640088240A008888
2440:109850003C010800AC2A004C3C010800AC2400503C
2441:10986000AF8500D43C010800AC2900603C01080031
2442:10987000AC2800643C010800AC2700543C010800FF
2443:10988000AC2300583C010800AC26005C03E0000853
2444:1098900000000000308300FF30C6FFFF30E400FF0F
2445:1098A0008F4201B80440FFFE00034C00012438251C
2446:1098B0003C08600000E820253C031000AF45018013
2447:1098C000AF460184AF44018803E00008AF4301B80C
2448:1098D0008F86001C3C096012352700108CCB0004D9
2449:1098E0003C0C600E35850010316A00062D480001E1
2450:1098F000ACE800C48CC40004ACA431808CC2000865
2451:1099000094C30002ACA2318403E00008A78300E402
2452:109910003C0308008C6300508F8400E88F86001C95
2453:109920002402FF800064C0210302C824AF5900282C
2454:109930008CCD00043305007F00BA78213C0E000C6A
2455:1099400001EE2821ACAD00588CC80008AF8500D0CE
2456:109950003C076012ACA8005C8CCC001034E800100E
2457:10996000ACAC000C8CCB000CACAB000894AA00147F
2458:109970003C0208008C42004425490001A4A90014BF
2459:1099800094A400143083FFFF106200178F8400D06E
2460:109990003C0A08008D4A0040A4AA00128CCE001890
2461:1099A000AC8E00248CCD0014AC8D00208CC7001828
2462:1099B000AC87002C8CCC001424060001AC8C002851
2463:1099C0008D0B00BC5166001A8D0200B48D0200B8E8
2464:1099D000A482003A948F003AA48F003C948800D46B
2465:1099E00003E000083102FFFF3C0908008D29002434
2466:1099F000A4A000148F8400D0A4A900128CCE00185B
2467:109A0000AC8E00248CCD0014AC8D00208CC70018C7
2468:109A1000AC87002C8CCC001424060001AC8C0028F0
2469:109A20008D0B00BC5566FFEA8D0200B88D0200B4B4
2470:109A3000A482003A948F003AA48F003C948800D40A
2471:109A400003E000083102FFFF8F86001C3C0C080079
2472:109A50008D8C0050240BFF808CCD00083C03000C43
2473:109A6000000D51C0018A4021010B4824AF8A00E853
2474:109A7000AF49002890C700073105007F00BA1021C8
2475:109A80000043282130E400041080002FAF8500D06F
2476:109A900090CF000731EE000811C0003C000000002C
2477:109AA0008CD9000C8CC400140324C02B1300002696
2478:109AB000000000008CC2000CACA200648CCD001829
2479:109AC0002402FFF8ACAD00688CCC0010ACAC008078
2480:109AD0008CCB000CACAB00848CCA001CACAA007C04
2481:109AE00090A900BC01224024A0A800BC90C300079C
2482:109AF0003067000810E000048F8500D090AF00BCF4
2483:109B000035EE0001A0AE00BC90D90007333800014B
2484:109B10001300000F8F8400D024070020908200BC27
2485:109B200034490002A08900BC8F8400D09088006274
2486:109B3000310300F014670006240A0034AC8A00C028
2487:109B40000A001334000000000A00130E8CC2001437
2488:109B500090CB00073166000210C000050000000035
2489:109B6000908D00BC35AC0004A08C00BC8F8400D06C
2490:109B700090980113330F003FA08F01138F8E00D0F8
2491:109B800095C500D403E0000830A2FFFFACA000643C
2492:109B90000A00130F0000000027BDFFD8AFB000106F
2493:109BA0008F90001CAFBF0024AFB40020AFB20018EC
2494:109BB000AFB10014AFB3001C9613000E3C07600A4F
2495:109BC0003C1460063264FFFF369300100E001261F1
2496:109BD00034F404108F8400D43C11600E0E0009AAE6
2497:109BE00036310010920E00153C0708008CE700602B
2498:109BF0003C12601231CD000FA38D00F08E0E0004D8
2499:109C00008E0D000896080012961F00109619001A73
2500:109C10009618001E960F001C310CFFFF33EBFFFF60
2501:109C2000332AFFFF3309FFFF31E6FFFF3C01080045
2502:109C3000AC2B00403C010800AC2C00243C01080087
2503:109C4000AC2A0044AE293178AE26317C9202001550
2504:109C50009603001636520010304400FF3065FFFFB7
2505:109C60003C0608008CC60064AE243188AE4500B4C2
2506:109C70009208001496190018241F0001011FC00447
2507:109C8000332FFFFF3C0508008CA50058AE5800B8E4
2508:109C9000AE4F00BC920C0014AF8E00D8AF8D00DC2C
2509:109CA000318B00FFAE4B00C0920A0015AE67004832
2510:109CB000AE66004C314900FFAE4900C8AE65007C7D
2511:109CC0003C0308008C6300503C0408008C84004C6A
2512:109CD0003C0808008D0800543C0208008C42005CDF
2513:109CE0008FBF0024AE6300808FB00010AE8300747D
2514:109CF0008FB3001CAE22319CAE4200DCAE2731A0F7
2515:109D0000AE2631A4AE24318CAE233190AE283194EE
2516:109D1000AE253198AE870050AE860054AE850070F7
2517:109D20008FB10014AE4700E0AE4600E4AE4400CC74
2518:109D3000AE4300D0AE4800D4AE4500D88FB400206A
2519:109D40008FB2001803E0000827BD002827BDFFE000
2520:109D5000AFB10014AFBF0018241100010E00085469
2521:109D6000AFB0001010510005978400E6978300CC37
2522:109D70000083102B144000088F8500D424070002B4
2523:109D80008FBF00188FB100148FB0001000E01021B9
2524:109D900003E0000827BD00200E000C892404000504
2525:109DA000AF8200E81040FFF6240700020E000858BA
2526:109DB0008F90001C979F00E68F9900E88F8D00C858
2527:109DC00027EF0001240E0050AF590020A78F00E6B6
2528:109DD000A1AE00003C0C08008D8C00648F8600C88A
2529:109DE000240A8000000C5E00ACCB0074A4C0000606
2530:109DF00094C9000A241FFF803C0D000C012AC024D6
2531:109E0000A4D8000A90C8000A24182000011F1825B1
2532:109E1000A0C3000A8F8700C8A0E000788F8500C823
2533:109E200000003821A0A000833C0208008C420050B2
2534:109E30008F8400E80044782101FFC824AF5900282E
2535:109E4000960B000231EE007F01DA6021018D302196
2536:109E5000A4CB00D4960A0002AF8600D03C0E0004CA
2537:109E600025492401A4C900E68E080004ACC80004FA
2538:109E70008E030008ACC30000A4C00010A4C00014EE
2539:109E8000A0C000D08F8500D02403FFBFA0A000D1C8
2540:109E90003C0408008C8400648F8200D0A04400D26F
2541:109EA0008E1F000C8F8A00D0978F00E4AD5F001CDE
2542:109EB0008E19001024100030AD590018A540003054
2543:109EC000A5510054A5510056A54F0016AD4E00688F
2544:109ED000AD580080AD580084914D006231AC000F48
2545:109EE000358B0010A14B00628F8600D090C90063B3
2546:109EF0003128007FA0C800638F8400D02406FFFFB4
2547:109F00009085006300A31024A08200638F9100D08D
2548:109F100000E01021923F00BC37F90001A23900BCDB
2549:109F20008F8A00D0938F00F0AD580064AD5000C010
2550:109F3000914E00D3000F690031CC000F018D5825E0
2551:109F4000A14B00D38F8500D08F8900DCACA900E83D
2552:109F50008F8800D88FBF00188FB100148FB0001009
2553:109F600027BD0020ACA800ECA4A600D6A4A000E069
2554:109F7000A4A000E203E000080000000027BDFFE00D
2555:109F8000AFB000108F90001CAFB10014AFBF00182D
2556:109F90008E1900043C1808008F180050240FFF8011
2557:109FA000001989C00238702131CD007F01CF6024B3
2558:109FB00001BA50213C0B000CAF4C0028014B402152
2559:109FC000950900D4950400D68E0700043131FFFFB7
2560:109FD000AF8800D00E000922000721C08E060004C1
2561:109FE0008F8300C8000629C0AF4500209064003E62
2562:109FF00030820040144000068F8400D0341FFFFFE1
2563:10A00000948300D63062FFFF145F0004000000005C
2564:10A01000948400D60E0008B73084FFFF8E0500043C
2565:10A02000022030218FBF00188FB100148FB00010B4
2566:10A030002404002200003821000529C00A001285EE
2567:10A0400027BD002027BDFFE0AFB100143091FFFF16
2568:10A05000AFB00010AFBF00181220001D000080211B
2569:10A060008F86001C8CC500002403000600053F02FB
2570:10A070000005140230E4000714830015304500FF8A
2571:10A080002CA800061100004D000558803C0C08006B
2572:10A09000258C57E8016C50218D49000001200008F3
2573:10A0A000000000008F8E00EC240D000111CD00593E
2574:10A0B00000000000260B00013170FFFF24CA0020C1
2575:10A0C0000211202B014030211480FFE6AF8A001CD2
2576:10A0D000020010218FBF00188FB100148FB0001044
2577:10A0E00003E0000827BD0020938700CE14E000386D
2578:10A0F000240400140E001346000000008F86001C8C
2579:10A10000240200010A00148DAF8200EC8F8900EC5C
2580:10A11000240800021128003B240400130000282119
2581:10A1200000003021240700010E001285000000000D
2582:10A130000A00148D8F86001C8F8700EC2405000216
2583:10A1400014E5FFF6240400120E0012F200000000D5
2584:10A150008F8500E800403021240400120E00128593
2585:10A16000000038210A00148D8F86001C8F8300ECBC
2586:10A17000241F0003147FFFD0260B00010E0012A441
2587:10A18000000000008F8500E800403021240200021A
2588:10A190002404001000003821AF8200EC0E0012856C
2589:10A1A000000000000A00148D8F86001C8F8F00ECC9
2590:10A1B0002406000211E6000B000000002404001039
2591:10A1C00000002821000030210A0014AA2407000101
2592:10A1D000000028210E001285000030210A00148D95
2593:10A1E0008F86001C0E0013B3000000001440001204
2594:10A1F0008F99001C8F86001C240200030A00148D16
2595:10A20000AF8200EC0E00143F000000000A00148D25
2596:10A210008F86001C0E001294000000002402000231
2597:10A2200024040014000028210000302100003821FF
2598:10A230000A0014C7AF8200EC00403821240400104B
2599:10A2400097380002000028210E0012853306FFFF18
2600:10A250000A00148D8F86001C8F8400C83C077FFF86
2601:10A2600034E6FFFF8C8500742402000100A6182448
2602:10A27000AC83007403E00008A082000510A0003643
2603:10A280002CA20080274A04003C0B00052409008012
2604:10A29000104000072408008030A6000F00C54021B0
2605:10A2A0002D0300811460000200A0482124080080D2
2606:10A2B000AF4B003000000000000000000000000074
2607:10A2C0001100000900003821014030218C8D000070
2608:10A2D00024E7000400E8602BACCD000024840004D7
2609:10A2E0001580FFFA24C600040000000000000000F2
2610:10A2F000000000003C0E0006010E3825AF4700307C
2611:10A300000000000000000000000000008F4F00006F
2612:10A3100031E800101100FFFD000000008F42003CFA
2613:10A320008F43003C0049C8210323C02B13000004C5
2614:10A33000000000008F4C003825860001AF46003831
2615:10A340008F47003C00A9282300E96821AF4D003C5D
2616:10A3500014A0FFCE2CA2008003E000080000000043
2617:10A3600027BDFFD03C020002AFB100143C11000C2D
2618:10A37000AF450038AFB3001CAF46003C00809821C9
2619:10A38000AF42003024050088AF440028035120214B
2620:10A39000AFBF0028AFB50024AFB40020AFB20018A3
2621:10A3A0000E0014FFAFB000103C1F08008FFF004CE0
2622:10A3B0003C1808008F1800642410FF8003F3A821C4
2623:10A3C00032B9007F02B078240018A0C0033A70218F
2624:10A3D0000018914001D12021AF4F00280E0014FF3A
2625:10A3E000025428213C0D08008DAD005024050120A9
2626:10A3F00001B35821316C007F01705024019A48212B
2627:10A40000013120210E0014FFAF4A00283C0808004B
2628:10A410008D0800543C0508008CA500640113382108
2629:10A4200030E6007F00F0182400DA2021009120217E
2630:10A43000AF4300280E0014FF000529403C0208002D
2631:10A440008C4200583C1008008E1000601200001C66
2632:10A45000005388212415FF800A0015823C14000C4B
2633:10A460003226007F0235182400DA202102402821FC
2634:10A47000AF430028009420210E0014FF2610FFC0D7
2635:10A480001200000F023288212E05004110A0FFF4B7
2636:10A49000241210003226007F00109180023518240B
2637:10A4A00000DA202102402821AF4300280094202117
2638:10A4B0000E0014FF000080211600FFF302328821F5
2639:10A4C0003C0B08008D6B005C240AFF802405000211
2640:10A4D00001734021010A4824AF4900283C040800C8
2641:10A4E000948400623110007F021A88213C07000C1E
2642:10A4F0000E000CB90227982100402821026020217B
2643:10A500008FBF00288FB500248FB400208FB3001CAC
2644:10A510008FB200188FB100148FB000100A0014FF22
2645:10A5200027BD00308F83001C8C62000410400003A4
2646:10A530000000000003E00008000000008C64001030
2647:0CA540008C6500080A0015388C66000CC1
2648:04A54C00000000000B
2649:10A550000000001B0000000F0000000A00000008BF
2650:10A5600000000006000000050000000500000004D7
2651:10A5700000000004000000030000000300000003CE
2652:10A5800000000003000000030000000200000002C1
2653:10A5900000000002000000020000000200000002B3
2654:10A5A00000000002000000020000000200000002A3
2655:10A5B0000000000200000002000000020000000293
2656:10A5C0000000000200000001000000010000000186
2657:10A5D00008000F3008000D8808000FC40800106C38
2658:10A5E00008000F5808000F98080011A408000DA4D7
2659:10A5F000080011C808000DF4080014980800144061
2660:10A6000008000DA408000DA408000DA408001254B1
2661:10A610000800125408000DA408000DA4080016E05C
2662:10A6200008000DA408000DA408000DA408000DA446
2663:10A63000080013D408000DA408000DA408000DA400
2664:10A6400008000DA408000DA408000DA408000DA426
2665:10A6500008000DA408000DA408000DA408000DA416
2666:10A6600008000DA408000DA408000DA408000FB8F0
2667:10A6700008000DA408000DA40800169008000DA401
2668:10A6800008000DA408000DA408000DA408000DA4E6
2669:10A6900008000DA408000DA408000DA408000DA4D6
2670:10A6A00008000DA408000DA408000DA408000DA4C6
2671:10A6B00008000DA408000DA408000DA408000DA4B6
2672:10A6C000080015BC08000DA408000DA408001348DC
2673:10A6D000080012B808002E5008002E5808002E203E
2674:10A6E00008002E2C08002E3808002E440800532C99
2675:10A6F000080052EC080052B80800528C080052685A
2676:04A7000008005224D7
2677:0CA704000A000C760000000000000000BD
2678:10A710000000000D727870342E362E3136000000A5
2679:10A72000040610030000000000000001000000000B
2680:10A730000000000000000000000000000000000019
2681:10A740000000000000000000000000000000000009
2682:10A7500000000000000000000000000000000000F9
2683:10A7600000000000000000000000000000000000E9
2684:10A7700000000000000000000000000000000000D9
2685:10A7800000000000000000000000000000000000C9
2686:10A7900000000000000000000000000000000000B9
2687:10A7A00000000000000000000000000000000000A9
2688:10A7B0000000000000000000000000000000000099
2689:10A7C0000000000000000000000000000000000089
2690:10A7D0000000000000000000000000000000000079
2691:10A7E0000000000000000000000000000000000069
2692:10A7F0000000000000000000000000000000000059
2693:10A800000000000000000000000000000000000048
2694:10A810000000000000000000000000000000000038
2695:10A820000000000000000000000000000000000028
2696:10A830000000000000000000000000000000000018
2697:10A840000000000000000000000000000000000008
2698:10A8500000000000000000000000000000000000F8
2699:10A8600000000000000000000000000000000000E8
2700:10A8700000000000000000000000000000000000D8
2701:10A8800000000000000000000000000000000000C8
2702:10A8900000000000000000000000000000000000B8
2703:10A8A00000000000000000000000000000000000A8
2704:10A8B0000000000000000000000000000000000098
2705:10A8C0000000000000000000000000000000000088
2706:10A8D0000000000000000000000000000000000078
2707:10A8E0000000000000000000000000000000000068
2708:10A8F0000000000000000000000000000000000058
2709:10A900000000000000000000000000000000000047
2710:10A910000000000000000000000000000000000037
2711:10A920000000000000000000000000000000000027
2712:10A930000000000000000000000000000000000017
2713:10A940000000000000000000000000000000000007
2714:10A9500000000000000000000000000000000000F7
2715:10A9600000000000000000000000000000000000E7
2716:10A9700000000000000000000000000000000000D7
2717:10A9800000000000000000000000000000000000C7
2718:10A9900000000000000000000000000000000000B7
2719:10A9A00000000000000000000000000000000000A7
2720:10A9B0000000000000000000000000000000000097
2721:10A9C0000000000000000000000000000000000087
2722:10A9D0000000000000000000000000000000000077
2723:10A9E0000000000000000000000000000000000067
2724:10A9F0000000000000000000000000000000000057
2725:10AA00000000000000000000000000000000000046
2726:10AA10000000000000000000000000000000000036
2727:10AA20000000000000000000000000000000000026
2728:10AA30000000000000000000000000000000000016
2729:10AA40000000000000000000000000000000000006
2730:10AA500000000000000000000000000000000000F6
2731:10AA600000000000000000000000000000000000E6
2732:10AA700000000000000000000000000000000000D6
2733:10AA800000000000000000000000000000000000C6
2734:10AA900000000000000000000000000000000000B6
2735:10AAA00000000000000000000000000000000000A6
2736:10AAB0000000000000000000000000000000000096
2737:10AAC0000000000000000000000000000000000086
2738:10AAD0000000000000000000000000000000000076
2739:10AAE0000000000000000000000000000000000066
2740:10AAF0000000000000000000000000000000000056
2741:10AB00000000000000000000000000000000000045
2742:10AB10000000000000000000000000000000000035
2743:10AB20000000000000000000000000000000000025
2744:10AB30000000000000000000000000000000000015
2745:10AB40000000000000000000000000000000000005
2746:10AB500000000000000000000000000000000000F5
2747:10AB600000000000000000000000000000000000E5
2748:10AB700000000000000000000000000000000000D5
2749:10AB800000000000000000000000000000000000C5
2750:10AB900000000000000000000000000000000000B5
2751:10ABA00000000000000000000000000000000000A5
2752:10ABB0000000000000000000000000000000000095
2753:10ABC0000000000000000000000000000000000085
2754:10ABD0000000000000000000000000000000000075
2755:10ABE0000000000000000000000000000000000065
2756:10ABF0000000000000000000000000000000000055
2757:10AC00000000000000000000000000000000000044
2758:10AC10000000000000000000000000000000000034
2759:10AC20000000000000000000000000000000000024
2760:10AC30000000000000000000000000000000000014
2761:10AC40000000000000000000000000000000000004
2762:10AC500000000000000000000000000000000000F4
2763:10AC600000000000000000000000000000000000E4
2764:10AC700000000000000000000000000000000000D4
2765:10AC800000000000000000000000000000000000C4
2766:10AC900000000000000000000000000000000000B4
2767:10ACA00000000000000000000000000000000000A4
2768:10ACB0000000000000000000000000000000000094
2769:10ACC0000000000000000000000000000000000084
2770:10ACD0000000000000000000000000000000000074
2771:10ACE0000000000000000000000000000000000064
2772:10ACF0000000000000000000000000000000000054
2773:10AD00000000000000000000000000000000000043
2774:10AD10000000000000000000000000000000000033
2775:10AD20000000000000000000000000000000000023
2776:10AD30000000000000000000000000000000000013
2777:10AD40000000000000000000000000000000000003
2778:10AD500000000000000000000000000000000000F3
2779:10AD600000000000000000000000000000000000E3
2780:10AD700000000000000000000000000000000000D3
2781:10AD800000000000000000000000000000000000C3
2782:10AD900000000000000000000000000000000000B3
2783:10ADA00000000000000000000000000000000000A3
2784:10ADB0000000000000000000000000000000000093
2785:10ADC0000000000000000000000000000000000083
2786:10ADD0000000000000000000000000000000000073
2787:10ADE0000000000000000000000000000000000063
2788:10ADF0000000000000000000000000000000000053
2789:10AE00000000000000000000000000000000000042
2790:10AE10000000000000000000000000000000000032
2791:10AE20000000000000000000000000000000000022
2792:10AE30000000000000000000000000000000000012
2793:10AE40000000000000000000000000000000000002
2794:10AE500000000000000000000000000000000000F2
2795:10AE600000000000000000000000000000000000E2
2796:10AE700000000000000000000000000000000000D2
2797:10AE800000000000000000000000000000000000C2
2798:10AE900000000000000000000000000000000000B2
2799:10AEA00000000000000000000000000000000000A2
2800:10AEB0000000000000000000000000000000000092
2801:10AEC0000000000000000000000000000000000082
2802:10AED0000000000000000000000000000000000072
2803:10AEE0000000000000000000000000000000000062
2804:10AEF0000000000000000000000000000000000052
2805:10AF00000000000000000000000000000000000041
2806:10AF10000000000000000000000000000000000031
2807:10AF20000000000000000000000000000000000021
2808:10AF30000000000000000000000000000000000011
2809:10AF40000000000000000000000000000000000001
2810:10AF500000000000000000000000000000000000F1
2811:10AF600000000000000000000000000000000000E1
2812:10AF700000000000000000000000000000000000D1
2813:10AF800000000000000000000000000000000000C1
2814:10AF900000000000000000000000000000000000B1
2815:10AFA00000000000000000000000000000000000A1
2816:10AFB0000000000000000000000000000000000091
2817:10AFC0000000000000000000000000000000000081
2818:10AFD0000000000000000000000000000000000071
2819:10AFE0000000000000000000000000000000000061
2820:10AFF0000000000000000000000000000000000051
2821:10B000000000000000000000000000000000000040
2822:10B010000000000000000000000000000000000030
2823:10B020000000000000000000000000000000000020
2824:10B030000000000000000000000000000000000010
2825:10B040000000000000000000000000000000000000
2826:10B0500000000000000000000000000000000000F0
2827:10B0600000000000000000000000000000000000E0
2828:10B0700000000000000000000000000000000000D0
2829:10B0800000000000000000000000000000000000C0
2830:10B0900000000000000000000000000000000000B0
2831:10B0A00000000000000000000000000000000000A0
2832:10B0B0000000000000000000000000000000000090
2833:10B0C0000000000000000000000000000000000080
2834:10B0D0000000000000000000000000000000000070
2835:10B0E0000000000000000000000000000000000060
2836:10B0F0000000000000000000000000000000000050
2837:10B10000000000000000000000000000000000003F
2838:10B11000000000000000000000000000000000002F
2839:10B12000000000000000000000000000000000001F
2840:10B13000000000000000000000000000000000000F
2841:10B1400000000000000000000000000000000000FF
2842:10B1500000000000000000000000000000000000EF
2843:10B1600000000000000000000000000000000000DF
2844:10B1700000000000000000000000000000000000CF
2845:10B1800000000000000000000000000000000000BF
2846:10B1900000000000000000000000000000000000AF
2847:10B1A000000000000000000000000000000000009F
2848:10B1B000000000000000000000000000000000008F
2849:10B1C000000000000000000000000000000000007F
2850:10B1D000000000000000000000000000000000006F
2851:10B1E000000000000000000000000000000000005F
2852:10B1F000000000000000000000000000000000004F
2853:10B20000000000000000000000000000000000003E
2854:10B21000000000000000000000000000000000002E
2855:10B22000000000000000000000000000000000001E
2856:10B23000000000000000000000000000000000000E
2857:10B2400000000000000000000000000000000000FE
2858:10B2500000000000000000000000000000000000EE
2859:10B2600000000000000000000000000000000000DE
2860:10B2700000000000000000000000000000000000CE
2861:10B2800000000000000000000000000000000000BE
2862:10B2900000000000000000000000000000000000AE
2863:10B2A000000000000000000000000000000000009E
2864:10B2B000000000000000000000000000000000008E
2865:10B2C000000000000000000000000000000000007E
2866:10B2D000000000000000000000000000000000006E
2867:10B2E000000000000000000000000000000000005E
2868:10B2F000000000000000000000000000000000004E
2869:10B30000000000000000000000000000000000003D
2870:10B31000000000000000000000000000000000002D
2871:10B32000000000000000000000000000000000001D
2872:10B33000000000000000000000000000000000000D
2873:10B3400000000000000000000000000000000000FD
2874:10B3500000000000000000000000000000000000ED
2875:10B3600000000000000000000000000000000000DD
2876:10B3700000000000000000000000000000000000CD
2877:10B3800000000000000000000000000000000000BD
2878:10B3900000000000000000000000000000000000AD
2879:10B3A000000000000000000000000000000000009D
2880:10B3B000000000000000000000000000000000008D
2881:10B3C000000000000000000000000000000000007D
2882:10B3D000000000000000000000000000000000006D
2883:10B3E000000000000000000000000000000000005D
2884:10B3F000000000000000000000000000000000004D
2885:10B40000000000000000000000000000000000003C
2886:10B41000000000000000000000000000000000002C
2887:10B42000000000000000000000000000000000001C
2888:10B43000000000000000000000000000000000000C
2889:10B4400000000000000000000000000000000000FC
2890:10B4500000000000000000000000000000000000EC
2891:10B4600000000000000000000000000000000000DC
2892:10B4700000000000000000000000000000000000CC
2893:10B4800000000000000000000000000000000000BC
2894:10B4900000000000000000000000000000000000AC
2895:10B4A000000000000000000000000000000000009C
2896:10B4B000000000000000000000000000000000008C
2897:10B4C000000000000000000000000000000000007C
2898:10B4D000000000000000000000000000000000006C
2899:10B4E000000000000000000000000000000000005C
2900:10B4F000000000000000000000000000000000004C
2901:10B50000000000000000000000000000000000003B
2902:10B51000000000000000000000000000000000002B
2903:10B52000000000000000000000000000000000001B
2904:10B53000000000000000000000000000000000000B
2905:10B5400000000000000000000000000000000000FB
2906:10B5500000000000000000000000000000000000EB
2907:10B5600000000000000000000000000000000000DB
2908:10B5700000000000000000000000000000000000CB
2909:10B5800000000000000000000000000000000000BB
2910:10B5900000000000000000000000000000000000AB
2911:10B5A000000000000000000000000000000000009B
2912:10B5B000000000000000000000000000000000008B
2913:10B5C000000000000000000000000000000000007B
2914:10B5D000000000000000000000000000000000006B
2915:10B5E000000000000000000000000000000000005B
2916:10B5F000000000000000000000000000000000004B
2917:10B60000000000000000000000000000000000003A
2918:10B61000000000000000000000000000000000002A
2919:10B62000000000000000000000000000000000001A
2920:10B63000000000000000000000000000000000000A
2921:10B6400000000000000000000000000000000000FA
2922:10B6500000000000000000000000000000000000EA
2923:10B6600000000000000000000000000000000000DA
2924:10B6700000000000000000000000000000000000CA
2925:10B6800000000000000000000000000000000000BA
2926:10B6900000000000000000000000000000000000AA
2927:10B6A000000000000000000000000000000000009A
2928:10B6B000000000000000000000000000000000008A
2929:10B6C000000000000000000000000000000000007A
2930:10B6D000000000000000000000000000000000006A
2931:10B6E000000000000000000000000000000000005A
2932:10B6F000000000000000000000000000000000004A
2933:10B700000000000000000000000000000000000039
2934:10B710000000000000000000000000000000000029
2935:10B720000000000000000000000000000000000019
2936:10B730000000000000000000000000000000000009
2937:10B7400000000000000000000000000000000000F9
2938:10B7500000000000000000000000000000000000E9
2939:10B7600000000000000000000000000000000000D9
2940:10B7700000000000000000000000000000000000C9
2941:10B7800000000000000000000000000000000000B9
2942:10B7900000000000000000000000000000000000A9
2943:10B7A0000000000000000000000000000000000099
2944:10B7B0000000000000000000000000000000000089
2945:10B7C0000000000000000000000000000000000079
2946:10B7D0000000000000000000000000000000000069
2947:10B7E0000000000000000000000000000000000059
2948:10B7F0000000000000000000000000000000000049
2949:10B800000000000000000000000000000000000038
2950:10B810000000000000000000000000000000000028
2951:10B820000000000000000000000000000000000018
2952:10B830000000000000000000000000000000000008
2953:10B8400000000000000000000000000000000000F8
2954:10B8500000000000000000000000000000000000E8
2955:10B8600000000000000000000000000000000000D8
2956:10B8700000000000000000000000000000000000C8
2957:10B8800000000000000000000000000000000000B8
2958:10B8900000000000000000000000000000000000A8
2959:10B8A0000000000000000000000000000000000098
2960:10B8B0000000000000000000000000000000000088
2961:10B8C0000000000000000000000000000000000078
2962:10B8D0000000000000000000000000000000000068
2963:10B8E0000000000000000000000000000000000058
2964:10B8F0000000000000000000000000000000000048
2965:10B900000000000000000000000000000000000037
2966:10B910000000000000000000000000000000000027
2967:10B920000000000000000000000000000000000017
2968:10B930000000000000000000000000000000000007
2969:10B9400000000000000000000000000000000000F7
2970:10B9500000000000000000000000000000000000E7
2971:10B9600000000000000000000000000000000000D7
2972:10B9700000000000000000000000000000000000C7
2973:10B9800000000000000000000000000000000000B7
2974:10B9900000000000000000000000000000000000A7
2975:10B9A0000000000000000000000000000000000097
2976:10B9B0000000000000000000000000000000000087
2977:10B9C0000000000000000000000000000000000077
2978:10B9D0000000000000000000000000000000000067
2979:10B9E0000000000000000000000000000000000057
2980:10B9F0000000000000000000000000000000000047
2981:10BA00000000000000000000000000000000000036
2982:10BA10000000000000000000000000000000000026
2983:10BA20000000000000000000000000000000000016
2984:10BA30000000000000000000000000000000000006
2985:10BA400000000000000000000000000000000000F6
2986:10BA500000000000000000000000000000000000E6
2987:10BA600000000000000000000000000000000000D6
2988:10BA700000000000000000000000000000000000C6
2989:10BA800000000000000000000000000000000000B6
2990:10BA900000000000000000000000000000000000A6
2991:10BAA0000000000000000000000000000000000096
2992:10BAB0000000000000000000000000000000000086
2993:10BAC0000000000000000000000000000000000076
2994:10BAD0000000000000000000000000000000000066
2995:10BAE0000000000000000000000000000000000056
2996:10BAF0000000000000000000000000000000000046
2997:10BB00000000000000000000000000000000000035
2998:10BB10000000000000000000000000000000000025
2999:10BB20000000000000000000000000000000000015
3000:10BB30000000000000000000000000000000000005
3001:10BB400000000000000000000000000000000000F5
3002:10BB500000000000000000000000000000000000E5
3003:10BB600000000000000000000000000000000000D5
3004:10BB700000000000000000000000000000000000C5
3005:10BB800000000000000000000000000000000000B5
3006:10BB900000000000000000000000000000000000A5
3007:10BBA0000000000000000000000000000000000095
3008:10BBB0000000000000000000000000000000000085
3009:10BBC0000000000000000000000000000000000075
3010:10BBD0000000000000000000000000000000000065
3011:10BBE0000000000000000000000000000000000055
3012:10BBF0000000000000000000000000000000000045
3013:10BC00000000000000000000000000000000000034
3014:10BC10000000000000000000000000000000000024
3015:10BC20000000000000000000000000000000000014
3016:10BC30000000000000000000000000000000000004
3017:10BC400000000000000000000000000000000000F4
3018:10BC500000000000000000000000000000000000E4
3019:10BC600000000000000000000000000000000000D4
3020:10BC700000000000000000000000000000000000C4
3021:10BC800000000000000000000000000000000000B4
3022:10BC900000000000000000000000000000000000A4
3023:10BCA0000000000000000000000000000000000094
3024:10BCB0000000000000000000000000000000000084
3025:10BCC0000000000000000000000000000000000074
3026:10BCD0000000000000000000000000000000000064
3027:10BCE0000000000000000000000000000000000054
3028:10BCF0000000000000000000000000000000000044
3029:10BD00000000000000000000000000000000000033
3030:10BD10000000000000000000000000000000000023
3031:10BD20000000000000000000000000000000000013
3032:10BD30000000000000000000000000000000000003
3033:10BD400000000000000000000000000000000000F3
3034:10BD500000000000000000000000000000000000E3
3035:10BD600000000000000000000000000000000000D3
3036:10BD700000000000000000000000000000000000C3
3037:10BD800000000000000000000000000000000000B3
3038:10BD900000000000000000000000000000000000A3
3039:10BDA0000000000000000000000000000000000093
3040:10BDB0000000000000000000000000000000000083
3041:10BDC0000000000000000000000000000000000073
3042:10BDD0000000000000000000000000000000000063
3043:10BDE0000000000000000000000000000000000053
3044:10BDF0000000000000000000000000000000000043
3045:10BE00000000000000000000000000000000000032
3046:10BE10000000000000000000000000000000000022
3047:10BE20000000000000000000000000000000000012
3048:10BE30000000000000000000000000000000000002
3049:10BE400000000000000000000000000000000000F2
3050:10BE500000000000000000000000000000000000E2
3051:10BE600000000000000000000000000000000000D2
3052:10BE700000000000000000000000000000000000C2
3053:10BE800000000000000000000000000000000000B2
3054:10BE900000000000000000000000000000000000A2
3055:10BEA0000000000000000000000000000000000092
3056:10BEB0000000000000000000000000000000000082
3057:10BEC0000000000000000000000000000000000072
3058:10BED0000000000000000000000000000000000062
3059:10BEE0000000000000000000000000000000000052
3060:10BEF0000000000000000000000000000000000042
3061:10BF00000000000000000000000000000000000031
3062:10BF10000000000000000000000000000000000021
3063:10BF20000000000000000000000000000000000011
3064:10BF30000000000000000000000000000000000001
3065:10BF400000000000000000000000000000000000F1
3066:10BF500000000000000000000000000000000000E1
3067:10BF600000000000000000000000000000000000D1
3068:10BF700000000000000000000000000000000000C1
3069:10BF800000000000000000000000000000000000B1
3070:10BF900000000000000000000000000000000000A1
3071:10BFA0000000000000000000000000000000000091
3072:10BFB0000000000000000000000000000000000081
3073:10BFC0000000000000000000000000000000000071
3074:10BFD0000000000000000000000000000000000061
3075:10BFE0000000000000000000000000000000000051
3076:10BFF0000000000000000000000000000000000041
3077:10C000000000000000000000000000000000000030
3078:10C010000000000000000000000000000000000020
3079:10C020000000000000000000000000000000000010
3080:10C030000000000000000000000000000000000000
3081:10C0400000000000000000000000000000000000F0
3082:10C0500000000000000000000000000000000000E0
3083:10C0600000000000000000000000000000000000D0
3084:10C0700000000000000000000000000000000000C0
3085:10C0800000000000000000000000000000000000B0
3086:10C0900000000000000000000000000000000000A0
3087:10C0A0000000000000000000000000000000000090
3088:10C0B0000000000000000000000000000000000080
3089:10C0C0000000000000000000000000000000000070
3090:10C0D0000000000000000000000000000000000060
3091:10C0E0000000000000000000000000000000000050
3092:10C0F0000000000000000000000000000000000040
3093:10C10000000000000000000000000000000000002F
3094:10C11000000000000000000000000000000000001F
3095:10C12000000000000000000000000000000000000F
3096:10C1300000000000000000000000000000000000FF
3097:10C1400000000000000000000000000000000000EF
3098:10C1500000000000000000000000000000000000DF
3099:10C1600000000000000000000000000000000000CF
3100:10C1700000000000000000000000000000000000BF
3101:10C1800000000000000000000000000000000000AF
3102:10C19000000000000000000000000000000000009F
3103:10C1A000000000000000000000000000000000008F
3104:10C1B000000000000000000000000000000000007F
3105:10C1C000000000000000000000000000000000006F
3106:10C1D000000000000000000000000000000000005F
3107:10C1E000000000000000000000000000000000004F
3108:10C1F000000000000000000000000000000000003F
3109:10C20000000000000000000000000000000000002E
3110:10C21000000000000000000000000000000000001E
3111:10C22000000000000000000000000000000000000E
3112:10C2300000000000000000000000000000000000FE
3113:10C2400000000000000000000000000000000000EE
3114:10C2500000000000000000000000000000000000DE
3115:10C2600000000000000000000000000000000000CE
3116:10C2700000000000000000000000000000000000BE
3117:10C2800000000000000000000000000000000000AE
3118:10C29000000000000000000000000000000000009E
3119:10C2A000000000000000000000000000000000008E
3120:10C2B000000000000000000000000000000000007E
3121:10C2C000000000000000000000000000000000006E
3122:10C2D000000000000000000000000000000000005E
3123:10C2E000000000000000000000000000000000004E
3124:10C2F000000000000000000000000000000000003E
3125:10C30000000000000000000000000000000000002D
3126:10C31000000000000000000000000000000000001D
3127:10C32000000000000000000000000000000000000D
3128:10C3300000000000000000000000000000000000FD
3129:10C3400000000000000000000000000000000000ED
3130:10C3500000000000000000000000000000000000DD
3131:10C3600000000000000000000000000000000000CD
3132:10C3700000000000000000000000000000000000BD
3133:10C3800000000000000000000000000000000000AD
3134:10C39000000000000000000000000000000000009D
3135:10C3A000000000000000000000000000000000008D
3136:10C3B000000000000000000000000000000000007D
3137:10C3C000000000000000000000000000000000006D
3138:10C3D000000000000000000000000000000000005D
3139:10C3E000000000000000000000000000000000004D
3140:10C3F000000000000000000000000000000000003D
3141:10C40000000000000000000000000000000000002C
3142:10C41000000000000000000000000000000000001C
3143:10C42000000000000000000000000000000000000C
3144:10C4300000000000000000000000000000000000FC
3145:10C4400000000000000000000000000000000000EC
3146:10C4500000000000000000000000000000000000DC
3147:10C4600000000000000000000000000000000000CC
3148:10C4700000000000000000000000000000000000BC
3149:10C4800000000000000000000000000000000000AC
3150:10C49000000000000000000000000000000000009C
3151:10C4A000000000000000000000000000000000008C
3152:10C4B000000000000000000000000000000000007C
3153:10C4C000000000000000000000000000000000006C
3154:10C4D000000000000000000000000000000000005C
3155:10C4E000000000000000000000000000000000004C
3156:10C4F000000000000000000000000000000000003C
3157:10C50000000000000000000000000000000000002B
3158:10C51000000000000000000000000000000000001B
3159:10C52000000000000000000000000000000000000B
3160:10C5300000000000000000000000000000000000FB
3161:10C5400000000000000000000000000000000000EB
3162:10C5500000000000000000000000000000000000DB
3163:10C5600000000000000000000000000000000000CB
3164:10C5700000000000000000000000000000000000BB
3165:10C5800000000000000000000000000000000000AB
3166:10C59000000000000000000000000000000000009B
3167:10C5A000000000000000000000000000000000008B
3168:10C5B000000000000000000000000000000000007B
3169:10C5C000000000000000000000000000000000006B
3170:10C5D000000000000000000000000000000000005B
3171:10C5E000000000000000000000000000000000004B
3172:10C5F000000000000000000000000000000000003B
3173:10C60000000000000000000000000000000000002A
3174:10C61000000000000000000000000000000000001A
3175:10C62000000000000000000000000000000000000A
3176:10C6300000000000000000000000000000000000FA
3177:10C6400000000000000000000000000000000000EA
3178:10C6500000000000000000000000000000000000DA
3179:10C6600000000000000000000000000000000000CA
3180:10C6700000000000000000000000000000000000BA
3181:10C6800000000000000000000000000000000000AA
3182:10C69000000000000000000000000000000000009A
3183:10C6A000000000000000000000000000000000008A
3184:10C6B000000000000000000000000000000000007A
3185:10C6C000000000000000000000000000000000006A
3186:10C6D000000000000000000000000000000000005A
3187:10C6E000000000000000000000000000000000004A
3188:10C6F000000000000000000000000000000000003A
3189:10C700000000000000000000000000000000000029
3190:10C710000000000000000000000000000000000019
3191:10C720000000000000000000000000000000000009
3192:10C7300000000000000000000000000000000000F9
3193:10C7400000000000000000000000000000000000E9
3194:10C7500000000000000000000000000000000000D9
3195:10C7600000000000000000000000000000000000C9
3196:10C7700000000000000000000000000000000000B9
3197:10C7800000000000000000000000000000000000A9
3198:10C790000000000000000000000000000000000099
3199:10C7A0000000000000000000000000000000000089
3200:10C7B0000000000000000000000000000000000079
3201:10C7C0000000000000000000000000000000000069
3202:10C7D0000000000000000000000000000000000059
3203:10C7E0000000000000000000000000000000000049
3204:10C7F0000000000000000000000000000000000039
3205:10C800000000000000000000000000000000000028
3206:10C810000000000000000000000000000000000018
3207:10C820000000000000000000000000000000000008
3208:10C8300000000000000000000000000000000000F8
3209:10C8400000000000000000000000000000000000E8
3210:10C8500000000000000000000000000000000000D8
3211:10C8600000000000000000000000000000000000C8
3212:10C8700000000000000000000000000000000000B8
3213:10C8800000000000000000000000000000000000A8
3214:10C890000000000000000000000000000000000098
3215:10C8A0000000000000000000000000000000000088
3216:10C8B0000000000000000000000000000000000078
3217:10C8C0000000000000000000000000000000000068
3218:10C8D0000000000000000000000000000000000058
3219:10C8E0000000000000000000000000000000000048
3220:10C8F0000000000000000000000000000000000038
3221:10C900000000000000000000000000000000000027
3222:10C910000000000000000000000000000000000017
3223:10C920000000000000000000000000000000000007
3224:10C9300000000000000000000000000000000000F7
3225:10C9400000000000000000000000000000000000E7
3226:10C9500000000000000000000000000000000000D7
3227:10C9600000000000000000000000000000000000C7
3228:10C9700000000000000000000000000000000000B7
3229:10C9800000000000000000000000000000000000A7
3230:10C990000000000000000000000000000000000097
3231:10C9A0000000000000000000000000000000000087
3232:10C9B0000000000000000000000000000000000077
3233:10C9C0000000000000000000000000000000000067
3234:10C9D0000000000000000000000000000000000057
3235:10C9E0000000000000000000000000000000000047
3236:10C9F0000000000000000000000000000000000037
3237:10CA00000000000000000000000000000000000026
3238:10CA10000000000000000000000000000000000016
3239:10CA20000000000000000000000000000000000006
3240:10CA300000000000000000000000000000000000F6
3241:10CA400000000000000000000000000000000000E6
3242:10CA500000000000000000000000000000000000D6
3243:10CA600000000000000000000000000000000000C6
3244:10CA700000000000000000000000000000000000B6
3245:10CA800000000000000000000000000000000000A6
3246:10CA90000000000000000000000000000000000096
3247:10CAA0000000000000000000000000000000000086
3248:10CAB0000000000000000000000000000000000076
3249:10CAC0000000000000000000000000000000000066
3250:10CAD0000000000000000000000000000000000056
3251:10CAE0000000000000000000000000000000000046
3252:10CAF0000000000000000000000000000000000036
3253:10CB00000000000000000000000000000000000025
3254:10CB10000000000000000000000000000000000015
3255:10CB20000000000000000000000000000000000005
3256:10CB300000000000000000000000000000000000F5
3257:10CB400000000000000000000000000000000000E5
3258:10CB500000000000000000000000000000000000D5
3259:10CB600000000000000000000000000000000000C5
3260:10CB700000000000000000000000000000000000B5
3261:10CB800000000000000000000000000000000000A5
3262:10CB90000000000000000000000000000000000095
3263:10CBA0000000000000000000000000000000000085
3264:10CBB0000000000000000000000000000000000075
3265:10CBC0000000000000000000000000000000000065
3266:10CBD0000000000000000000000000000000000055
3267:10CBE0000000000000000000000000000000000045
3268:10CBF0000000000000000000000000000000000035
3269:10CC00000000000000000000000000000000000024
3270:10CC10000000000000000000000000000000000014
3271:10CC20000000000000000000000000000000000004
3272:10CC300000000000000000000000000000000000F4
3273:10CC400000000000000000000000000000000000E4
3274:10CC500000000000000000000000000000000000D4
3275:10CC600000000000000000000000000000000000C4
3276:10CC700000000000000000000000000000000000B4
3277:10CC800000000000000000000000000000000000A4
3278:10CC90000000000000000000000000000000000094
3279:10CCA0000000000000000000000000000000000084
3280:10CCB0000000000000000000000000000000000074
3281:10CCC0000000000000000000000000000000000064
3282:10CCD0000000000000000000000000000000000054
3283:10CCE0000000000000000000000000000000000044
3284:10CCF0000000000000000000000000000000000034
3285:10CD00000000000000000000000000000000000023
3286:10CD10000000000000000000000000000000000013
3287:10CD20000000000000000000000000000000000003
3288:10CD300000000000000000000000000000000000F3
3289:10CD400000000000000000000000000000000000E3
3290:10CD500000000000000000000000000000000000D3
3291:10CD600000000000000000000000000000000000C3
3292:10CD700000000000000000000000000000000000B3
3293:10CD800000000000000000000000000000000000A3
3294:10CD90000000000000000000000000000000000093
3295:10CDA0000000000000000000000000000000000083
3296:10CDB0000000000000000000000000000000000073
3297:10CDC0000000000000000000000000000000000063
3298:10CDD0000000000000000000000000000000000053
3299:10CDE0000000000000000000000000000000000043
3300:10CDF0000000000000000000000000000000000033
3301:10CE00000000000000000000000000000000000022
3302:10CE10000000000000000000000000000000000012
3303:10CE20000000000000000000000000000000000002
3304:10CE300000000000000000000000000000000000F2
3305:10CE400000000000000000000000000000000000E2
3306:10CE500000000000000000000000000000000000D2
3307:10CE600000000000000000000000000000000000C2
3308:10CE700000000000000000000000000000000000B2
3309:10CE800000000000000000000000000000000000A2
3310:10CE90000000000000000000000000000000000092
3311:10CEA0000000000000000000000000000000000082
3312:10CEB0000000000000000000000000000000000072
3313:10CEC0000000000000000000000000000000000062
3314:10CED0000000000000000000000000000000000052
3315:10CEE0000000000000000000000000000000000042
3316:10CEF0000000000000000000000000000000000032
3317:10CF00000000000000000000000000000000000021
3318:10CF10000000000000000000000000000000000011
3319:10CF20000000000000000000000000000000000001
3320:10CF300000000000000000000000000000000000F1
3321:10CF400000000000000000000000000000000000E1
3322:10CF500000000000000000000000000000000000D1
3323:10CF600000000000000000000000000000000000C1
3324:10CF700000000000000000000000000000000000B1
3325:10CF800000000000000000000000000000000000A1
3326:10CF90000000000000000000000000000000000091
3327:10CFA0000000000000000000000000000000000081
3328:10CFB0000000000000000000000000000000000071
3329:10CFC0000000000000000000000000000000000061
3330:10CFD0000000000000000000000000000000000051
3331:10CFE0000000000000000000000000000000000041
3332:10CFF0000000000000000000000000000000000031
3333:10D000000000000000000000000000000000000020
3334:10D010000000000000000000000000000000000010
3335:10D020000000000000000000000000000000000000
3336:10D0300000000000000000000000000000000000F0
3337:10D0400000000000000000000000000000000000E0
3338:10D0500000000000000000000000000000000000D0
3339:10D0600000000000000000000000000000000000C0
3340:10D0700000000000000000000000000000000000B0
3341:10D0800000000000000000000000000000000000A0
3342:10D090000000000000000000000000000000000090
3343:10D0A0000000000000000000000000000000000080
3344:10D0B0000000000000000000000000000000000070
3345:10D0C0000000000000000000000000000000000060
3346:10D0D0000000000000000000000000000000000050
3347:10D0E0000000000000000000000000000000000040
3348:10D0F0000000000000000000000000000000000030
3349:10D10000000000000000000000000000000000001F
3350:10D11000000000000000000000000000000000000F
3351:10D1200000000000000000000000000000000000FF
3352:10D1300000000000000000000000000000000000EF
3353:10D1400000000000000000000000000000000000DF
3354:10D1500000000000000000000000000000000000CF
3355:10D1600000000000000000000000000000000000BF
3356:10D1700000000000000000000000000000000000AF
3357:10D18000000000000000000000000000000000009F
3358:10D19000000000000000000000000000000000008F
3359:10D1A000000000000000000000000000000000007F
3360:10D1B000000000000000000000000000000000006F
3361:10D1C000000000000000000000000000000000005F
3362:10D1D000000000000000000000000000000000004F
3363:10D1E000000000000000000000000000000000003F
3364:10D1F000000000000000000000000000000000002F
3365:10D20000000000000000000000000000000000001E
3366:10D21000000000000000000000000000000000000E
3367:10D2200000000000000000000000000000000000FE
3368:10D2300000000000000000000000000000000000EE
3369:10D2400000000000000000000000000000000000DE
3370:10D2500000000000000000000000000000000000CE
3371:10D2600000000000000000000000000000000000BE
3372:10D2700000000000000000000000000000000000AE
3373:10D28000000000000000000000000000000000009E
3374:10D29000000000000000000000000000000000008E
3375:10D2A000000000000000000000000000000000007E
3376:10D2B000000000000000000000000000000000006E
3377:10D2C000000000000000000000000000000000005E
3378:10D2D000000000000000000000000000000000004E
3379:10D2E000000000000000000000000000000000003E
3380:10D2F000000000000000000000000000000000002E
3381:10D30000000000000000000000000000000000001D
3382:10D31000000000000000000000000000000000000D
3383:10D3200000000000000000000000000000000000FD
3384:10D3300000000000000000000000000000000000ED
3385:10D3400000000000000000000000000000000000DD
3386:10D3500000000000000000000000000000000000CD
3387:10D3600000000000000000000000000000000000BD
3388:10D3700000000000000000000000000000000000AD
3389:10D38000000000000000000000000000000000009D
3390:10D39000000000000000000000000000000000008D
3391:10D3A000000000000000000000000000000000007D
3392:10D3B000000000000000000000000000000000006D
3393:10D3C000000000000000000000000000000000005D
3394:10D3D000000000000000000000000000000000004D
3395:10D3E000000000000000000000000000000000003D
3396:10D3F000000000000000000000000000000000002D
3397:10D40000000000000000000000000000000000001C
3398:10D41000000000000000000000000000000000000C
3399:10D4200000000000000000000000000000000000FC
3400:10D4300000000000000000000000000000000000EC
3401:10D4400000000000000000000000000000000000DC
3402:10D4500000000000000000000000000000000000CC
3403:10D4600000000000000000000000000000000000BC
3404:10D4700000000000000000000000000000000000AC
3405:10D48000000000000000000000000000000000009C
3406:10D49000000000000000000000000000000000008C
3407:10D4A000000000000000000000000000000000007C
3408:10D4B000000000000000000000000000000000006C
3409:10D4C000000000000000000000000000000000005C
3410:10D4D000000000000000000000000000000000004C
3411:10D4E000000000000000000000000000000000003C
3412:10D4F000000000000000000000000000000000002C
3413:10D50000000000000000000000000000000000001B
3414:10D51000000000000000000000000000000000000B
3415:10D5200000000000000000000000000000000000FB
3416:10D5300000000000000000000000000000000000EB
3417:10D5400000000000000000000000000000000000DB
3418:10D5500000000000000000000000000000000000CB
3419:10D5600000000000000000000000000000000000BB
3420:10D5700000000000000000000000000000000000AB
3421:10D58000000000000000000000000000000000009B
3422:10D59000000000000000000000000000000000008B
3423:10D5A000000000000000000000000000000000007B
3424:10D5B000000000000000000000000000000000006B
3425:10D5C000000000000000000000000000000000005B
3426:10D5D000000000000000000000000000000000004B
3427:10D5E000000000000000000000000000000000003B
3428:10D5F000000000000000000000000000000000002B
3429:10D60000000000000000000000000000000000001A
3430:10D61000000000000000000000000000000000000A
3431:10D6200000000000000000000000000000000000FA
3432:10D6300000000000000000000000000000000000EA
3433:10D6400000000000000000000000000000000000DA
3434:10D6500000000000000000000000000000000000CA
3435:10D6600000000000000000000000000000000000BA
3436:10D6700000000000000000000000000000000000AA
3437:10D68000000000000000000000000000000000009A
3438:10D69000000000000000000000000000000000008A
3439:10D6A000000000000000000000000000000000007A
3440:10D6B000000000000000000000000000000000006A
3441:10D6C000000000000000000000000000000000005A
3442:10D6D000000000000000000000000000000000004A
3443:10D6E000000000000000000000000000000000003A
3444:10D6F000000000000000000000000000000000002A
3445:10D700000000000000000000000000000000000019
3446:10D710000000000000000000000000000000000009
3447:10D7200000000000000000000000000000000000F9
3448:10D7300000000000000000000000000000000000E9
3449:10D7400000000000000000000000000000000000D9
3450:10D7500000000000000000000000000000000000C9
3451:10D7600000000000000000000000000000000000B9
3452:10D7700000000000000000000000000000000000A9
3453:10D780000000000000000000000000000000000099
3454:10D790000000000000000000000000000000000089
3455:10D7A0000000000000000000000000000000000079
3456:10D7B0000000000000000000000000000000000069
3457:10D7C0000000000000000000000000000000000059
3458:10D7D0000000000000000000000000000000000049
3459:10D7E0000000000000000000000000000000000039
3460:10D7F0000000000000000000000000000000000029
3461:10D800000000000000000000000000000000000018
3462:10D810000000000000000000000000000000000008
3463:10D8200000000000000000000000000000000000F8
3464:10D8300000000000000000000000000000000000E8
3465:10D8400000000000000000000000000000000000D8
3466:10D8500000000000000000000000000000000000C8
3467:10D8600000000000000000000000000000000000B8
3468:10D8700000000000000000000000000000000000A8
3469:10D880000000000000000000000000000000000098
3470:10D890000000000000000000000000000000000088
3471:10D8A0000000000000000000000000000000000078
3472:10D8B0000000000000000000000000000000000068
3473:10D8C0000000000000000000000000000000000058
3474:10D8D0000000000000000000000000000000000048
3475:10D8E00010000003000000000000000D0000000D0B
3476:10D8F0003C020800244271203C030800246375C8E0
3477:10D90000AC4000000043202B1480FFFD24420004A3
3478:10D910003C1D080037BD7FFC03A0F0213C1008002F
3479:10D92000261031D83C1C0800279C71200E00116481
3480:10D93000000000000000000D30A5FFFF30C600FF12
3481:10D94000274301808F4201B80440FFFE24020002F9
3482:10D95000AC640000A4650008A066000AA062000B89
3483:10D960003C021000AC67001803E00008AF4201B8A9
3484:10D970003C0360008C624FF80440FFFE3C02020052
3485:10D98000AC644FC0AC624FC43C02100003E000081E
3486:10D99000AC624FF827BDFFE8AFBF0014AFB0001076
3487:10D9A0000E0011B300808021936200052403FFFE66
3488:10D9B00002002021004310248FBF00148FB00010FC
3489:10D9C000A36200050A0011BC27BD001827BDFFE8AF
3490:10D9D000AFB00010AFBF00140E000EA40080802175
3491:10D9E0009362000024030050304200FF14430004FF
3492:10D9F00024020100AF4201800A000CC10200202174
3493:10DA0000AF400180020020218FBF00148FB00010B2
3494:10DA10000A000F7D27BD001827BDFF98AFBE00602C
3495:10DA2000AFB7005CAFB20048AFBF0064AFB60058FC
3496:10DA3000AFB50054AFB40050AFB3004CAFB1004429
3497:10DA4000AFB000408F5001289363003F9362000500
3498:10DA50000000F021307200FF000210273042000168
3499:10DA60000000B82114400066AFA0003893420116B0
3500:10DA700093430112304200FF306300FF0342202134
3501:10DA800003431021244540008F82000010400018FD
3502:10DA9000248840008F4201043C030001004310240D
3503:10DAA00010400013000000008CA3000C8F620030B7
3504:10DAB000146201A2240200018CA300108F62002CCA
3505:10DAC0001462019E240200019762003A9483400090
3506:10DAD0003042FFFF1462019924020001976200386E
3507:10DAE000950300023042FFFF1462019424020001FA
3508:10DAF00093620000304300FF240200201062000502
3509:10DB00002402005010620006000000000A000D0B05
3510:10DB1000000000000000000D0A000D14AFA000304E
3511:10DB20003C1E080027DE71880A000D14AFA00030EB
3512:10DB30003C0208008C4200DC244200013C01080049
3513:10DB4000AC2200DC0E00127D000000000A000E8FE7
3514:10DB50008FBF00648F4201043C0300209113000D2D
3515:10DB6000004310240002202B00042140AFA4003009
3516:10DB70008F4301043C02004000621824146000023C
3517:10DB8000348700400080382132620020AFA7003087
3518:10DB90001440000234E6008000E0302110C0000B89
3519:10DBA000AFA6003093C500088F67004C020020210B
3520:10DBB00000052B0034A5008130A5F0810E000C8DEE
3521:10DBC00030C600FF0A000E8C000000009362003E89
3522:10DBD000304200401040000E24020004564200066D
3523:10DBE00024020012020020210E0013DA010030216D
3524:10DBF0000A000E8F8FBF006416420005000000006F
3525:10DC00000E000CB2000020210A000E8F8FBF0064AE
3526:10DC10009742011A9504000E9363003532650004A3
3527:10DC20003055FFFF00642004AFA4003C8D110004B8
3528:10DC300010A000158D1400089362003E3042004091
3529:10DC400010400007000000000E00133B02202021BE
3530:10DC50001040000D000000000A000E8C00000000C3
3531:10DC60008F620044022210230440013200000000B1
3532:10DC70008F620048022210230441012E2404001662
3533:10DC80000A000DA28FC200048F62004802221023F6
3534:10DC900004400008000000003C0208008C423100F3
3535:10DCA000244200013C010800AC2231000A000E8130
3536:10DCB000000000008F62004002221023184000097B
3537:10DCC0002402000C3C0208008C423100327300FC3C
3538:10DCD0000000A821244200013C010800AC223100D0
3539:10DCE0002402000CAFA200308F62004000511823C4
3540:10DCF0001860000D02A3102A144001030000000068
3541:10DD00001475000602A310233A620001304200019C
3542:10DD1000144000FD0000000002A31023022388210C
3543:10DD20000A000D8A3055FFFF000018213262000200
3544:10DD30001040001A326200109362003E30420040F0
3545:10DD4000504000118FC200040E0011B302002021C8
3546:10DD500024020018A362003F936200052403FFFE23
3547:10DD600002002021004310240E0011BCA362000514
3548:10DD700024040039000028210E0013242406001872
3549:10DD80000A000E8E24020001240400170040F80946
3550:10DD9000000000000A000E8E24020001104000E581
3551:10DDA000000000008F64004C8F6200540282102338
3552:10DDB0001C4000E002841023044200010080A021E6
3553:10DDC000AFA30018AFB10010AFB50014934201200B
3554:10DDD0008F6600409764003C304200FF03422821D8
3555:10DDE0008FA2003C00A328218FA300303084FFFFC6
3556:10DDF0000044202B8FC200000064182524A5400099
3557:10DE0000AFA50020AFA60028AFA30030AFA6002426
3558:10DE1000AFA0002CAFB400340040F80927A40010D4
3559:10DE20008FA200303042000254400001327300FEE5
3560:10DE30009362003E30420040104000378FA3001430
3561:10DE40008F6200541682001A32620001240200140C
3562:10DE5000124200102A42001510400006240200164B
3563:10DE60002402000C12420007326200010A000DEB8E
3564:10DE70000000000012420005326200010A000DEBB2
3565:10DE8000000000000A000DE62417000E0A000DE64F
3566:10DE9000241700100A000DEA2417001293620023D1
3567:10DEA0002403FFBD00431024A3620023326200015B
3568:10DEB000104000198FA300142402000C1242000E1F
3569:10DEC0002A42000D104000062402000E2402000A1F
3570:10DED000124200078FA200240A000E032442000110
3571:10DEE000124200088FA200240A000E0324420001FF
3572:10DEF0000A000E01241700082402000E16E2000298
3573:10DF000024170016241700108FA2002424420001B9
3574:10DF1000AFA200248FA300148FA200248F760040AC
3575:10DF200000431021AF6200408FA2003C9364003692
3576:10DF30008F630040028290213402FFFF00821004B0
3577:10DF400000621821AF6300488FA6003030C200087D
3578:10DF50001040000E000000008F62005816420004BE
3579:10DF600030C600FF9742011A5040000134C600102D
3580:10DF700093C500088FA700340200202100052B0064
3581:10DF800034A500800E000C8D30A5F0808F6200401B
3582:10DF900000561023184000178FA200183C020800FA
3583:10DFA0008C423198304200101040000924020001D8
3584:10DFB000976200681440000624020001A76200680E
3585:10DFC0009742007A2442000A0A000E47A762001214
3586:10DFD000A76200120E0011B3020020219362007D9F
3587:10DFE0002403000102002021344200010A000E45F2
3588:10DFF000AFA300381840000A000000000E0011B363
3589:10E00000020020219362007D2403000102002021F0
3590:10E01000AFA30038344200040E0011BCA362007D9F
3591:10E020009362003E304200401440000C3262000116
3592:10E030001040000A000000008F6300408FC20004FF
3593:10E0400024040018246300010040F809AF63004075
3594:10E050008FA200300A000E8E304200048F620058FA
3595:10E0600010520010000000008F62001802221023DE
3596:10E070001C400008240200018F62001816220009CB
3597:10E08000000000008F62001C028210230440000583
3598:10E0900024020001AF720058AFA20038AF7100181F
3599:10E0A000AF74001C12E0000B8FA300380E0011B3F8
3600:10E0B00002002021A377003F0E0011BC02002021A6
3601:10E0C00002E03021240400370E0013240000282130
3602:10E0D0008FA3003810600003000000000E000C9BAE
3603:10E0E0000200202112A00005000018218FA200309C
3604:10E0F0003042000450400011006010212403000150
3605:10E100000A000E8E006010210E0011B302002021C3
3606:10E110009362007D02002021344200040E0011BCF5
3607:10E12000A362007D0E000C9B020020210A000E8ECF
3608:10E1300024020001AF400044240200018FBF0064AC
3609:10E140008FBE00608FB7005C8FB600588FB500544B
3610:10E150008FB400508FB3004C8FB200488FB1004491
3611:10E160008FB0004003E0000827BD00688C870004E2
3612:10E170008C8600000000102100E5382100E5282BE6
3613:10E1800000C2302100C53021AC87000403E0000844
3614:10E19000AC8600008F4201B80440FFFE2402080054
3615:10E1A000AF4201B803E00008000000003C02000894
3616:10E1B0000342282194A200483084FFFF1040001B36
3617:10E1C0002484001294A200483042FFFF0044102A29
3618:10E1D00010400017240200032402001A9343012078
3619:10E1E000A342018B8F820008306300FF3042400061
3620:10E1F000104000092463FFFE94A200483042FFFF54
3621:10E200000043102B144000058F820014A743019493
3622:10E210000A000EC8344200018F8200142403FFFE5E
3623:10E220000043102403E00008AF820014240200031E
3624:10E2300003E00008A342018B27BDFFE0AFB2001846
3625:10E24000AFB10014AFB00010AFBF001C30B1FFFF82
3626:10E2500030D0FFFF30F2FFFF8F4201B80440FFFED5
3627:10E2600000000000AF440180AF4400200E000EAA61
3628:10E27000020020218F8300088F840014A751018C95
3629:10E28000A750018EA74301908F8300043082800045
3630:10E29000AF4301A8A75201881040000E8F820014DE
3631:10E2A00093420116304200FC24420004005A10211F
3632:10E2B0008C4240003042FFFF144000068F82001461
3633:10E2C0003C02FFFF34427FFF00821024AF82001423
3634:10E2D0008F8200142403BFFF00431024A74201A62D
3635:10E2E0009743010C8F42010400031C003042FFFFE2
3636:10E2F00000621825AF4301AC3C021000AF4201B8E8
3637:10E300008FBF001C8FB200188FB100148FB00010A7
3638:10E3100003E0000827BD002027BDFFE0AFB20018D2
3639:10E3200030D2FFFFAF440180AF44002002402021E3
3640:10E33000AFB10014AFB0001030F1FFFFAFBF001C51
3641:10E340000E000EAA30B0FFFF8F8300142402BFFF1F
3642:10E35000A750018C006218248F820008A752018EFA
3643:10E36000A7510188A74301A6A74201903C021000D3
3644:10E37000AF4201B88FBF001C8FB200188FB10014DC
3645:10E380008FB0001003E0000827BD00202743018064
3646:10E390008F4201B80440FFFE24022000A46200085E
3647:10E3A00024020002A062000BA46000103C021000D6
3648:10E3B000AF4201B803E00008000000008F47007082
3649:10E3C000934201128F83000827BDFFF0304200FF07
3650:10E3D000000228823062010000003021104000431A
3651:10E3E00024A400033062400010400010306220007E
3652:10E3F00000041080005A10218C43400024A4000423
3653:10E4000000041080AFA30000005A10218C4240008D
3654:10E41000AFA2000493420116304200FC005A1021C2
3655:10E420008C4240000A000F56AFA200081040002F97
3656:10E430000000302100041080005A10218C4340005D
3657:10E4400024A4000400041080AFA30000005A10218F
3658:10E450008C424000AFA00008AFA200048FA80008C3
3659:10E460000000302100002021240A00083C09080097
3660:10E470002529010003A41021148A000300042A00A6
3661:10E480001100000A000000009042000024840001F6
3662:10E490002C83000C00A210210002108000491021E2
3663:10E4A0008C4200001460FFF300C230263C040800D8
3664:10E4B0008C8431048F4200702C830020106000098E
3665:10E4C000004738233C03080024633108000410800F
3666:10E4D0000043102124830001AC4700003C010800E8
3667:10E4E000AC233104AF8600042406000100C01021D3
3668:10E4F00003E0000827BD00103C0208008C420038F1
3669:10E5000027BDFFD0AFB50024AFB3001CAFBF0028BC
3670:10E51000AFB40020AFB20018AFB10014AFB000101C
3671:10E520003C15080026B50038144000022453FFFFB4
3672:10E53000000098218F840008308240001040000ABB
3673:10E54000308280003C0200200082102450400006EF
3674:10E55000308280008F8200142403BFFF00831824C0
3675:10E560000A000FA2344210001040000A3C020020B2
3676:10E5700000821024104000078F8200143C03FFFF2C
3677:10E5800034637FFF0083182434428000AF8200147C
3678:10E59000AF8300080E000F2E00000000144000089A
3679:10E5A0008F8400089743011E9742011C3063FFFFD0
3680:10E5B0000002140000621825AF8300048F84000855
3681:10E5C0009742010C30831000106000113046FFFFAD
3682:10E5D000308200201440000F241200053C0210007D
3683:10E5E000008210241040000B241200013C030E0096
3684:10E5F0003C020DFF008318243442FFFF0043102B20
3685:10E6000010400004000000000A000FC4241200059E
3686:10E61000241200013C0508008CA5003454A0001908
3687:10E620008F8400088F82001C544000168F840008DD
3688:10E630008F82001430424000544000128F84000842
3689:10E640003C021F01008210243C0310001443000D03
3690:10E650008F84000830C202001440000B3C0200010D
3691:10E660009746010E364700020000202124C6000410
3692:10E6700030C6FFFF0E000F05240500020A00108DB2
3693:10E680008FBF00283C020001008210241040000CC3
3694:10E690008F8300143C0208008C4200D89746010E7C
3695:10E6A000240400802442000130C6FFFF240500023C
3696:10E6B0003C010800AC2200D80A00108A240700039D
3697:10E6C00030624000104000063C0210003C020F0087
3698:10E6D0000082102450400001934201163C021000B9
3699:10E6E0000082102410400044000000003C0208009A
3700:10E6F0008C4200301040000C306240001040000A94
3701:10E700003C030F00008318243C0201000043102B3F
3702:10E7100014400005000000009746010E3647000235
3703:10E720000A0010872404008010A0000D3082010030
3704:10E730001040000B3C020F00008210243C0302003A
3705:10E74000104300078F82000400531024005510214D
3706:10E7500090420004244200040A00103A000221C042
3707:10E76000000000008F8600083C0508008CA500D042
3708:10E77000000616023050000F38A200012C420001A2
3709:10E780002E03000C0043102414400018001021C078
3710:10E790002602FFFC2C4200045440001400002021FB
3711:10E7A00038A200022C420001004310241040000354
3712:10E7B000000612420A00103A000020210010182B17
3713:10E7C0000043102450400009001021C09746010E5C
3714:10E7D000000020212405000224C6000430C6FFFFEB
3715:10E7E0000E000ECD3247FFFB001021C09746010EF0
3716:10E7F0000A001087364700028F4240003C11080093
3717:10E800008E310024304201001040004032220001CD
3718:10E810000220802110A00017325400043082010031
3719:10E8200010400015240200013C020F000082102459
3720:10E830003C0302001043000F8F8200049746010E34
3721:10E840000240382100531024005510219044000448
3722:10E8500024C6000430C6FFFF24840004000421C045
3723:10E860000E000ECD240500022402FFFE02228024A9
3724:10E870003252FFFB2402000116020007320200019F
3725:10E880003242000450400001365200029746010E09
3726:10E890000A001086024038211040000A32020004AB
3727:10E8A0009746010E024038210000202124C60004B2
3728:10E8B00030C6FFFF0E000ECD240500023252FFFBD2
3729:10E8C000320200041040000B8F8200083042080022
3730:10E8D00010400008000000009746010E0240382159
3731:10E8E0002404010024C6000430C6FFFF0E000ECD34
3732:10E8F00024050002568000108FBF00280E000F2252
3733:10E90000000000000A00108D8FBF00281040000A90
3734:10E910008FBF00289746010E3647000200002021D5
3735:10E9200024C6000430C6FFFF240500020E000ECDF1
3736:10E93000000000008FBF00288FB500248FB4002096
3737:10E940008FB3001C8FB200188FB100148FB000106D
3738:10E950000000102103E0000827BD0030274301809C
3739:10E960008F4201B80440FFFE000000008F420148C2
3740:10E9700000021402A462000824020002A062000B3C
3741:10E980008F420148A46200108F420144AC6200240F
3742:10E990003C02100003E00008AF4201B827BDFFE8C9
3743:10E9A000AFB000103C04600CAFBF00148C8250006C
3744:10E9B0002403FF7F3C1A8000004310243442380CAB
3745:10E9C000AC825000240200033C106000AF420008FB
3746:10E9D0008E0208083C1B80083C010800AC20002087
3747:10E9E0003042FFF0384200102C4200010E001B396B
3748:10E9F000AF8200003C04FFFF3C02040034830806A1
3749:10EA00003442000CAE021948AE03194C3C056016A6
3750:10EA10008E0219808CA30000344202000064182486
3751:10EA2000AE0219803C0253531462000334A47C00EC
3752:10EA30008CA20004005020218C82007C8C83007802
3753:10EA40008FBF00148FB0001027BD0018AF820018D0
3754:10EA500003E00008AF83001027BDFFE8AFBF001040
3755:10EA60008F4340003402FFFF3C040800248400F080
3756:10EA700010620007000000008F4240003C040800C4
3757:10EA8000248400E83042010010400009000000002A
3758:10EA90009745010E0E000E9A30A5FFFF9745010E17
3759:10EAA0003C040800248431C80A0010FC8FBF001009
3760:10EAB0008F4340008F8200103C040800248400E053
3761:10EAC0001462000A000000008F4340048F82001887
3762:10EAD00014620006000000009745010E3C04080087
3763:10EAE000248431B80A0010FC8FBF00109745010E36
3764:10EAF0008FBF001030A5FFFF0A000E9A27BD001837
3765:10EB000027BDFFE8AFBF00108F420128AF420020B1
3766:10EB10008F4201048F430100AF8200080E000EA453
3767:10EB2000AF8300140E0010D5000000003C02080066
3768:10EB30008C4200C0104000088F8400083C0208008E
3769:10EB40008C4200C4244200013C010800AC2200C4F5
3770:10EB50000A001135000000003C0200100082102461
3771:10EB60001440000A8F8300143C0208008C420020ED
3772:10EB7000244200013C010800AC2200200E000F7D61
3773:10EB8000000020210A001133000000002402BFFF12
3774:10EB9000006210241040000800000000240287FFDB
3775:10EBA00000621024144000083C020060008210241F
3776:10EBB00010400005000000000E000CC50000000021
3777:10EBC0000A001133000000000E00119D000000003B
3778:10EBD000104000063C0240008F4301243C026020AC
3779:10EBE000AC430014000000003C024000AF4201387A
3780:10EBF000000000008FBF001003E0000827BD0018D0
3781:10EC000027BDFFE8AFBF00108F4201403C04400029
3782:10EC1000AF4200208F4301483C027000006218247C
3783:10EC2000106400100083102B144000063C026000AA
3784:10EC30003C02200010620007000000000A00115F83
3785:10EC40003C0240001062000B3C0240000A00115FD1
3786:10EC5000000000000E001096000000000A00115F86
3787:10EC60003C0240000E0011C1000000000A00115FCC
3788:10EC70003C0240000E001B46000000003C02400029
3789:10EC8000AF420178000000008FBF001003E00008D1
3790:10EC900027BD001827BDFFE8AFBF00140E0010A667
3791:10ECA000AFB000103C028000344200708C43000082
3792:10ECB00000403821AF830020006030218CE8000044
3793:10ECC0003C0508008CA500FC3C0408008C8400F87E
3794:10ECD000010630230000102100A6282100A6302BB9
3795:10ECE00000822021008620213C010800AC2500FC88
3796:10ECF0003C010800AC2400F88F50000032020003F1
3797:10ED00001040FFEE010030218CE600003C050800B9
3798:10ED10008CA500FC3C0408008C8400F800C830235B
3799:10ED200000A628210000102100A6302B00822021FF
3800:10ED300000862021320700013C010800AC2500FCC0
3801:10ED4000AF8800203C010800AC2400F810E000046B
3802:10ED5000320200020E0010FF00000000320200022A
3803:10ED60005040FFD13C0280000E00113F0000000027
3804:10ED70000A0011693C0280008F4201003042003ECF
3805:10ED80001440001124020001AF4000488F420100EE
3806:10ED9000304207C01040000500000000AF40004CAA
3807:10EDA000AF40005003E0000824020001AF400054CF
3808:10EDB000AF4000408F420100304238005440000113
3809:10EDC000AF4000442402000103E0000800000000FE
3810:10EDD0003C0290003442000100822025AF44002014
3811:10EDE0008F4200200440FFFE0000000003E0000806
3812:10EDF000000000003C028000344200010082202517
3813:10EE000003E00008AF44002027BDFFE0AFB20018C8
3814:10EE1000AFBF001CAFB10014AFB000108F50014065
3815:10EE20008F5101483C0280000011940202222024EC
3816:10EE3000324300FF2402000E1062008A2862000F95
3817:10EE40001040001228620037240200061062003BC6
3818:10EE50002862000710400007240200091060001A11
3819:10EE60002402000110620025000000000A00127652
3820:10EE7000000000001062007B2402000B1062005BA7
3821:10EE80003222FFFF0A001276000000001040000846
3822:10EE90002402003828620035104000802402001F40
3823:10EEA0001062007E000000000A00127600000000E0
3824:10EEB0001062007A2402008010620042000000000C
3825:10EEC0000A001276000000008F4201B80440FFFEE5
3826:10EED00024020001AF500180AF400184A752018895
3827:10EEE000A342018A24020002A342018BA751019090
3828:10EEF0008F4201440A001271AF4201A41080000A3F
3829:10EF0000240200023C010800A02271783C010800A4
3830:10EF1000AC3071808F4201443C010800AC22717C0E
3831:10EF20000A0012788FBF001C8F4201B80440FFFE18
3832:10EF3000240200020A00125B000000008F4201B8A8
3833:10EF40000440FFFE00000000AF5001803C020800BA
3834:10EF50009042717810400003000018213C03080023
3835:10EF60008C637180AF430184A75201883C02080082
3836:10EF7000904271780000182134420001A342018AB6
3837:10EF800024020002A342018BA75101908F42014449
3838:10EF9000AF4201A43C020800904271781040000387
3839:10EFA0003C0210003C0308008C63717CAF4301A855
3840:10EFB000AF4201B83C010800A02071780A00127825
3841:10EFC0008FBF001C8F4201B80440FFFE24020002E4
3842:10EFD000A342018BA7520188A75101908F4201449F
3843:10EFE000A74201920A0012733C0210001440001D57
3844:10EFF0000000000093620005304200041440003716
3845:10F00000000000000E0011B30200202193620005F1
3846:10F0100002002021344200040E0011BCA36200054E
3847:10F02000936200053042000414400002000000001A
3848:10F030000000000D9362000024030020304200FF16
3849:10F0400014430008000000008F4201B80440FFFE96
3850:10F0500024020005AF500180A342018B3C02100046
3851:10F06000AF4201B88F4201B80440FFFE2402000203
3852:10F07000AF400180AF500184A7520188A342018AAA
3853:10F08000A342018BA7510190AF4001A48F420144DC
3854:10F09000AF4201A80A0012733C0210008F4201B86F
3855:10F0A0000440FFFE24020001AF500180AF40018404
3856:10F0B000A7520188A342018A24020002A342018BC5
3857:10F0C000A7510190AF4001A4AF4001A83C0210003D
3858:10F0D000AF4201B80A0012788FBF001C0000000D7B
3859:10F0E0008FBF001C8FB200188FB100148FB00010BA
3860:10F0F00003E0000827BD002027BDFFE8AFBF0010D8
3861:10F100000E000EA400000000AF4001808FBF001071
3862:10F11000000020210A000F7D27BD00183084FFFF6A
3863:10F1200030A5FFFF0000182110800007000000003C
3864:10F1300030820001104000020004204200651821C6
3865:10F140000A0012890005284003E000080060102131
3866:10F1500010C0000624C6FFFF8CA2000024A50004F6
3867:10F16000AC8200000A0012932484000403E000082B
3868:10F170000000000010A0000824A3FFFFAC860000E0
3869:10F1800000000000000000002402FFFF2463FFFFD6
3870:10F190001462FFFA2484000403E000080000000069
3871:10F1A00027BDFFE0AFB20018AFB10014AFB0001040
3872:10F1B000AFBF001C9482000C00A088212490001492
3873:10F1C0000002130200021080008290210000302112
3874:10F1D00000A020210E00129C240500050212102B15
3875:10F1E0001040005700001021920300002C6200091B
3876:10F1F0005040005192020001000310803C030800BF
3877:10F20000246370DC004310218C42000000400008A1
3878:10F2100000000000920300012402000C1462004868
3879:10F2200024020001025010232C42000A1440003630
3880:10F23000261000028E22000034420100AE2200009F
3881:10F240009202000092030001920400029205000362
3882:10F2500000031C00000216000043102500042200D9
3883:10F26000004410250045102526100004AE2200049D
3884:10F270009202000092030001920400029205000332
3885:10F280000002160000031C000043102500042200A9
3886:10F290000044102500451025261000040A0012B66F
3887:10F2A000AE2200089203000124020004146200163A
3888:10F2B0002610000292020000920400018E2300003A
3889:10F2C00000021200004410253463000426100002DE
3890:10F2D000AE22000C0A0012B6AE2300009203000119
3891:10F2E0002402000314620008261000028E2200008F
3892:10F2F000920300002610000134420008A2230010EF
3893:10F300000A0012B6AE2200000A00130F2402000108
3894:10F31000920300012402000210620002260400028F
3895:10F32000024020210A0012B6008080210A0012B695
3896:10F3300026100001920200010A0012B6020280218A
3897:10F340008FBF001C8FB200188FB100148FB0001057
3898:10F3500003E0000827BD002027BDFFE8AFBF001471
3899:10F36000AFB000100E0011B3008080219362007DC9
3900:10F3700002002021344200200E0011BCA362007D57
3901:10F38000020020218FBF00148FB000100A000C9BD8
3902:10F3900027BD0018308300FF30A500FF30C600FFF6
3903:10F3A000274701808F4201B80440FFFE00000000A3
3904:10F3B0008F42012834634000ACE2000024020001C7
3905:10F3C000ACE00004A4E30008A0E2000A240200026A
3906:10F3D000A0E2000B3C021000A4E50010ACE0002409
3907:10F3E000ACE00028A4E6001203E00008AF4201B838
3908:10F3F00027BDFFE8AFBF00109362003F2403001257
3909:10F40000304200FF1043000D008030218F62004425
3910:10F41000008210230440000A8FBF00108F62004852
3911:10F42000240400390000282100C2102304410004F4
3912:10F43000240600120E001324000000008FBF0010ED
3913:10F440002402000103E0000827BD001827BDFFC803
3914:10F45000AFB1002C00A08821AFB2003027A500106A
3915:10F460000080902102202021AFBF00340E0012A79F
3916:10F47000AFB0002810400009024020218E22000871
3917:10F48000AF6200840E001315AF6000402404003802
3918:10F490002405008D0A0013D1240600129362003463
3919:10F4A000936300378F640084304200FF306300FFB5
3920:10F4B0000043282100A4202B1080000B0000000036
3921:10F4C0009763003C8F6200843063FFFF0045102388
3922:10F4D0000062182B14600004000000008F6200849A
3923:10F4E0000A00137B004580239762003C3050FFFFE9
3924:10F4F0008FA3001030620004504000032E02021857
3925:10F500008FA2001C0202102B1440000502002021D3
3926:10F510003062000410400002240402188FA4001C72
3927:10F520002C82008010400002008080212410008086
3928:10F530000E0011B30240202124020001AF62000C32
3929:10F540009362003E001020403042007FA362003EE4
3930:10F550008E22000424420001AF620040A770003CEC
3931:10F560008F6200509623000E00431021AF620058B6
3932:10F570008F62005000441021AF62005C8E220004B4
3933:10F58000AF6200188E220008AF62001C8FA200102C
3934:10F59000304200085440000A93A20020A3600036C5
3935:10F5A000936200362403FFDFA36200359362003EBE
3936:10F5B00000431024A362003E0A0013B18E2200080B
3937:10F5C000A36200358E220008AF62004C8F620024D7
3938:10F5D0008F63004000431021AF6200489362000037
3939:10F5E00024030050304200FF144300122403FF8024
3940:10F5F0003C0208008C4231A002421021004310243A
3941:10F60000AF4200283C0208008C4231A08E24000842
3942:10F610003C03000C024210213042007F03421021C3
3943:10F6200000431021AC4400D88E230008AF8200288C
3944:10F63000AC4300DC0E0011BC024020212404003841
3945:10F64000000028212406000A0E00132400000000F8
3946:10F650008FBF00348FB200308FB1002C8FB00028E4
3947:10F660002402000103E0000827BD003827BDFFE8A1
3948:10F67000AFBF001090C7000D00C0282130E6001079
3949:10F6800010C0000A30E200048CA300088F6200540E
3950:10F690001062000630E20004144000178FBF001013
3951:10F6A000000020210A000CB227BD00181040000DF8
3952:10F6B00030E3001210C000108FBF00108CA30008B0
3953:10F6C0008F6200541462000D2402000124040038EB
3954:10F6D0002405008D0E001324240600120A0013FDD9
3955:10F6E0008FBF001024020012146200038FBF0010AD
3956:10F6F0000A00135227BD00182402000103E000088D
3957:10F7000027BD001827BDFFF827420180AFA20000E7
3958:10F71000308A00FF8F4201B80440FFFE0000000065
3959:10F720008F4601283C0208008C4231A02403FF8050
3960:10F73000AF86005000C2102100431024AF420024C5
3961:10F740003C0208008C4231A08FA900008FA8000065
3962:10F7500000C210213042007F034218213C02000AFF
3963:10F7600000621821946400D48FA700008FA50000C8
3964:10F7700024020002AF830028A0A2000B8FA3000088
3965:10F78000354260003084FFFFA4E200083C02100014
3966:10F79000AD260000AD040004AC60002427BD0008C5
3967:10F7A000AF4201B803E00008240200018C8200048B
3968:10F7B0008F83002800451023AC8200049062006310
3969:10F7C0003042007FA06200638C820020938300306F
3970:10F7D0008F85002834420002AF830044A780004296
3971:10F7E000AC820020A4A000E490A200632403FFBF29
3972:10F7F0000043102403E00008A0A200632743018017
3973:10F800008F4201B80440FFFE8F820050AC620000BE
3974:10F810008F420124AC62000424026083A4620008C9
3975:10F8200024020002A062000B3C02100003E000086A
3976:10F83000AF4201B88F880044938200308F83002844
3977:10F840003C07080024E7759400481023304200FF6D
3978:10F85000304900FC246500888F860048304A000348
3979:10F860001120000900002021248200048CA3000044
3980:10F87000304400FF0089102AACE3000024A50004F6
3981:10F880001440FFF924E70004114000090000202182
3982:10F890002482000190A30000304400FF008A102B56
3983:10F8A000A0E3000024A500011440FFF924E70001B3
3984:10F8B00030C20003144000048F850044310200036D
3985:10F8C0001040000D0000000010A0000900002021E1
3986:10F8D0002482000190C30000304400FF0085102BFB
3987:10F8E000A0E3000024C600011440FFF924E7000152
3988:10F8F00003E00008000000001100FFFD00002021CF
3989:10F90000248200048CC30000304400FF0088102BC8
3990:10F91000ACE3000024C600041440FFF924E700040F
3991:10F9200003E00008000000008F8300449382003051
3992:10F9300030C600FF30A500FF00431023304300FF16
3993:10F940008F820028008038210043102114C000025B
3994:10F95000244800880083382130E200031440000569
3995:10F9600030A2000314400003306200031040000D79
3996:10F970000000000010A000090000202124820001E6
3997:10F9800090E30000304400FF0085102BA10300002D
3998:10F9900024E700011440FFF92508000103E00008F6
3999:10F9A0000000000010A0FFFD0000202124820004C0
4000:10F9B0008CE30000304400FF0085102BAD030000F5
4001:10F9C00024E700041440FFF92508000403E00008C0
4002:10F9D0000000000027BDFFF82402FFFFAFA20000D7
4003:10F9E000008038212405002F3C0908002529719446
4004:10F9F000240800FF2406FFFF90E2000024A3FFFF7D
4005:10FA00000006220200C21026304200FF00021080D1
4006:10FA1000004910218C420000306500FF24E70001FE
4007:10FA200014A8FFF50082302600061027AFA20004BC
4008:10FA3000AFA200000000282127A6000400C5102363
4009:10FA40009044000324A2000100BD1821304500FFAE
4010:10FA50002CA200041440FFF9A06400008FA2000053
4011:10FA600003E0000827BD00080080482130AAFFFFFE
4012:10FA700030C600FF30E7FFFF274801808F4201B802
4013:10FA80000440FFFE8F820050AD0200008F4201242F
4014:10FA9000AD0200048D220020A5070008A102000A83
4015:10FAA00024020016A102000B934301208D220008BE
4016:10FAB0008D240004306300FF00431021978300422F
4017:10FAC000004410218D250024004310233C0308002E
4018:10FAD0008C6331A08F840028A502000C246300E809
4019:10FAE0002402FFFFA50A000EA5030010A5060012C0
4020:10FAF000AD050018AD020024948201142403FFF721
4021:10FB00003042FFFFAD0200288C820118AD02002CAC
4022:10FB10003C021000AD000030AF4201B88D22002041
4023:10FB20000043102403E00008AD2200208F8200284B
4024:10FB300030E7FFFF00804821904200D330A5FFFF4F
4025:10FB400030C600FF0002110030420F0000E23825ED
4026:10FB5000274801808F4201B80440FFFE8F82005089
4027:10FB6000AD0200008F420124AD0200048D2200206E
4028:10FB7000A5070008A102000A24020017A102000B39
4029:10FB8000934301208D2200088D240004306300FF80
4030:10FB90000043102197830042004410218F840028E5
4031:10FBA000004310233C0308008C6331A0A502000C25
4032:10FBB000A505000E246300E8A5030010A5060012A9
4033:10FBC000AD0000148D220024AD0200188C82005C70
4034:10FBD000AD02001C8C820058AD0200202402FFFF01
4035:10FBE000AD020024948200E63042FFFFAD020028FF
4036:10FBF00094820060948300BE30427FFF3063FFFF39
4037:10FC00000002120000431021AD02002C3C02100043
4038:10FC1000AD000030AF4201B8948200BE2403FFF76C
4039:10FC200000A21021A48200BE8D22002000431024D7
4040:10FC300003E00008AD220020274301808F4201B875
4041:10FC40000440FFFE24020018AC640000A062000B18
4042:10FC50008F820028944200E6A46200103C0210004B
4043:10FC6000AC60003003E00008AF4201B827430180D8
4044:10FC70008F4201B80440FFFE8F82002C9442001C8A
4045:10FC80003042FFFF000211C0AC62000024020019E4
4046:10FC9000A062000B3C021000AC60003003E00008E2
4047:10FCA000AF4201B88F87003430C300FF8F4201B8E4
4048:10FCB0000440FFFE8F82005034636000ACA200005D
4049:10FCC0009382004CA0A200058CE20010A4A20006C2
4050:10FCD000A4A300088C8200202403FFF7A0A2000A3E
4051:10FCE00024020002A0A2000B8CE20000ACA20010D3
4052:10FCF0008CE20004ACA200148CE2001CACA2002434
4053:10FD00008CE20020ACA200288CE2002CACA2002CDB
4054:10FD10008C820024ACA200183C021000AF4201B853
4055:10FD20008C8200200043102403E00008AC820020F5
4056:10FD30009382004C2403000127BDFFE800433004F8
4057:10FD40002C420020AFB00010AFBF00142410FFFE03
4058:10FD500010400005274501803C0208008C4231908C
4059:10FD60000A00159C004610243C0208008C42319485
4060:10FD70000046102414400007240600848F830028C6
4061:10FD80002410FFFF906200623042000F34420040B6
4062:10FD9000A06200620E001568000000000200102141
4063:10FDA0008FBF00148FB0001003E0000827BD0018BB
4064:10FDB0008F83002C27BDFFE0AFB20018AFB1001455
4065:10FDC000AFB00010AFBF001C9062000D00A09021EA
4066:10FDD00030D100FF3042007FA062000D8F850028E7
4067:10FDE0008E430018008080218CA2007C14620005E4
4068:10FDF0002402000E90A20063344200200A0015C5C0
4069:10FE0000A0A200630E00158BA382004C2403FFFF09
4070:10FE1000104300472404FFFF52200045000020212A
4071:10FE20008E4300003C020010006210245040000489
4072:10FE30003C020008020020210A0015D4240200150B
4073:10FE400000621024504000098E450000020020216D
4074:10FE5000240200140E00158BA382004C2403FFFF24
4075:10FE6000104300332404FFFF8E4500003C020002D3
4076:10FE700000A21024104000163C0200048F86002CC3
4077:10FE80008CC200148CC300108CC4001400431023D7
4078:10FE90000044102B50400005020020218E43002C0E
4079:10FEA0008CC2001010620003020020210A00160517
4080:10FEB000240200123C02000400A210245040001C46
4081:10FEC00000002021020020210A0016052402001350
4082:10FED00000A21024104000068F83002C8C620010BA
4083:10FEE00050400013000020210A0015FF02002021CD
4084:10FEF0008C620010504000048E42002C0200202131
4085:10FF00000A001605240200115040000900002021BB
4086:10FF100002002021240200170E00158BA382004C42
4087:10FF20002403FFFF104300022404FFFF00002021F0
4088:10FF30008FBF001C8FB200188FB100148FB000105B
4089:10FF40000080102103E0000827BD002093830030CB
4090:10FF500027BDFFE024020034AFB20018AFB1001497
4091:10FF6000AFBF001CAFB00010008088211462000CED
4092:10FF700000A090218F8400340E0014B48C900030C7
4093:10FF80001202000724020005022020210E00158B1A
4094:10FF9000A382004C2403FFFF1043005F2404FFFFF3
4095:10FFA00092420004104000098F8200280220202184
4096:10FFB0002402000C0E00158BA382004C2403FFFFCB
4097:10FFC000104300552404FFFF8F820028A3800024E3
4098:10FFD0008E4300048C4400803C0200FF3442FFFF4B
4099:10FFE000006218240083202B10800008AF83003C9F
4100:10FFF00002202021240200190E00158BA382004C40
4101:020000040001F9
4102:100000002403FFFF104300442404FFFF97820042B3
4103:100010008F8700448F88003C00471023110000396F
4104:10002000A78200428F8600283045FFFF8F84005052
4105:1000300090C300BC3C0208008C4231A0000318822F
4106:100040003070000100822021001010800102102178
4107:1000500000A2282B10A00010248200888F84003476
4108:100060001082000D3C033F018E420000004310242B
4109:100070003C0325001443000630E500FF8C8200009D
4110:10008000ACC200888C8200100A001665ACC20098D1
4111:100090000E001489000030218F85003C93830024DA
4112:1000A0008F86002830A20003000210233042000394
4113:1000B00000433821A387002494C400E400A228212F
4114:1000C0008F8300448F82004834841000A4C400E46D
4115:1000D00000431021AF8200481200000EAF8500449B
4116:1000E00024E20004A382002494C200E424A30004B8
4117:1000F000AF83004434422000A4C200E40A00168505
4118:10010000000020218F820048AF800044004710216A
4119:10011000AF820048000020218FBF001C8FB2001862
4120:100120008FB100148FB000100080102103E0000890
4121:1001300027BD00208F86002827BDFFE8AFBF001431
4122:10014000AFB0001090C200633042002010400008A1
4123:1001500030A500FF8CC2007C2403FFDF2442000195
4124:10016000ACC2007C90C2006300431024A0C20063B4
4125:1001700010A000238F83002827500180020028212F
4126:100180000E001568240600828F82002890420063CA
4127:100190003042004050400019A380004C8F8300344F
4128:1001A0008F4201B80440FFFE8F820050AE02000073
4129:1001B00024026082A602000824020002A202000BB0
4130:1001C0008C620008AE0200108C62000CAE020014BB
4131:1001D0008C620014AE0200188C620018AE0200247B
4132:1001E0008C620024AE0200288C620028AE02002C33
4133:1001F0003C021000AF4201B8A380004C8F8300285E
4134:100200008FBF00148FB000109062006327BD0018EC
4135:100210003042007FA0620063978200428F860044D4
4136:100220008F8500289383003000461023A782004268
4137:10023000A4A000E490A400638F820048AF83004430
4138:100240002403FFBF0046102100832024AF82004812
4139:10025000A0A400638F820028A04000BD8F820028E8
4140:1002600003E00008A44000BE8F8A002827BDFFE0FD
4141:10027000AFB10014AFB000108F880044AFBF0018BA
4142:1002800093890024954200E430D100FF0109182B26
4143:100290000080802130AC00FF3047FFFF0000582174
4144:1002A00014600003310600FF0120302101095823AA
4145:1002B000978300420068102B1440003200000000B9
4146:1002C00014680007240200018E0200202403FFFBB3
4147:1002D00034E7800000431024AE0200202402000115
4148:1002E00034E70880158200053165FFFF0E0014D940
4149:1002F000020020210A00171A020020210E00150A10
4150:10030000020020210E00154D8F8400508F8400289C
4151:100310009482006024420001A48200609482006004
4152:100320003C0308008C63318830427FFF5443000F48
4153:1003300002002021948200602403800000431024E6
4154:10034000A48200609082006090830060304200FFD1
4155:10035000000211C200021027000211C03063007FAA
4156:1003600000621825A08300600200202102202821BD
4157:100370008FBF00188FB100148FB000100A00168CC8
4158:1003800027BD0020914200632403FF800043102515
4159:10039000A1420063978200423048FFFF1100002015
4160:1003A000938300248F840028004B1023304600FFE5
4161:1003B000948300E42402EFFF0168282B00621824D4
4162:1003C000A48300E414A000038E0200200100582141
4163:1003D000000030212403FFFB34E780000043102499
4164:1003E000AE02002024020001158200053165FFFFE6
4165:1003F0000E0014D9020020210A0017429783004200
4166:100400000E00150A02002021978300428F820044CB
4167:10041000A780004200431023AF820044938300244E
4168:100420008F8200288FBF00188FB100148FB000108A
4169:1004300027BD002003E00008A04300BD8F820028F4
4170:1004400090430088904500BD244900883063003FF8
4171:100450002463FFE024020001006238042C630020C2
4172:1004600030E80019A385002410600010AF89003423
4173:100470003C028000344200022405000124060001F1
4174:100480001500000800E2182400002821146000056F
4175:1004900030E20020104000052405000191260001F3
4176:1004A00030C600010A0016D90000000003E0000871
4177:1004B0000000000027BDFFD8AFB000108F900034BF
4178:1004C000AFB40020AFB10014AFBF0024AFB3001C25
4179:1004D000AFB200188E0500103C0208008C4231B00B
4180:1004E0008F86003830A33FFF0062182B8CD3001496
4181:1004F000008088218CD20020106000780000A021AC
4182:1005000090C3000D2402FF8000431024304200FFFE
4183:100510005040007302202021000513823042000366
4184:100520005440006F0220202194C3001C8F820028B9
4185:100530008E050028A44301148CC200100262182307
4186:10054000146500072402001F8F82003C0062102106
4187:100550000262102B104000088F83002C2402001828
4188:100560000E00158BA382004C2403FFFF1043006F85
4189:100570002404FFFF8F83002C8F84003C8C620010CA
4190:100580000244902100441023AC6200108F820028A6
4191:10059000AC7200208C4200680052102B1040000901
4192:1005A0008F830038022020212402001D0E00158BAD
4193:1005B000A382004C2403FFFF1043005C2404FFFFD0
4194:1005C0008F8300388E0200248C63002410430007C0
4195:1005D000022020212402001C0E00158BA382004C57
4196:1005E0002403FFFF104300512404FFFF8F84002CDD
4197:1005F0008C82002424420001AC82002412530004A7
4198:100600008F8200288C4200685642000E8E02000045
4199:100610008E0200003C030080004310241440000DB3
4200:100620002402001A022020210E00158BA382004C08
4201:100630002403FFFF1043003D2404FFFF0A0017D6E8
4202:100640008E0200143C03008000431024504000033D
4203:100650008E020014AC8000208E0200142412FFFFD2
4204:10066000105200062402001B022020210E00158BD0
4205:10067000A382004C1052002D2404FFFF8E030000C3
4206:100680003C020001006210241040001F3C02008068
4207:100690000062102414400008022020212402001AC5
4208:1006A0000E00158BA382004C2403FFFF1043001F94
4209:1006B0002404FFFF02202021020028210E0015AB98
4210:1006C000240600012403FFFF2404FFFF1443000E4F
4211:1006D000241400010A00180B8FBF002402202021DF
4212:1006E0002402000D8FBF00248FB400208FB3001CA4
4213:1006F0008FB200188FB100148FB0001027BD0028F2
4214:100700000A00158BA382004C8F83002C022020212D
4215:100710000280302194620036240500012442000149
4216:100720000E0016D9A4620036000020218FBF0024DD
4217:100730008FB400208FB3001C8FB200188FB100144B
4218:100740008FB000100080102103E0000827BD0028B2
4219:100750008F83002827BDFFD8AFB40020AFB3001CA3
4220:10076000AFB20018AFB10014AFB00010AFBF00249B
4221:10077000906200638F9100342412FFFF34420040E6
4222:1007800092250000A06200638E2200100080982154
4223:1007900030B0003F105200060360A0212402000D7B
4224:1007A0000E00158BA382004C105200522404FFFF50
4225:1007B0008F8300288E2200188C63007C1043000772
4226:1007C000026020212402000E0E00158BA382004C33
4227:1007D0002403FFFF104300472404FFFF24040020EC
4228:1007E000120400048F8300289062006334420020CA
4229:1007F000A06200638F85003C10A0001E0000000076
4230:10080000560400048F820028026020210A00185537
4231:100810002402000A9683000A2404FFFD944200602B
4232:100820003042FFFF104300348FBF00243C02080019
4233:100830008C42318C0045102B1440000602602021B0
4234:10084000000028210E0016D9240600010A00187C99
4235:10085000000020212402002D0E00158BA382004CE5
4236:100860002403FFFF104300232404FFFF0A00187C29
4237:1008700000002021160400058F8400288E23001418
4238:100880002402FFFF50620018026020219482006061
4239:1008900024420001A4820060948200603C030800AE
4240:1008A0008C63318830427FFF5443000F0260202167
4241:1008B000948200602403800000431024A48200601E
4242:1008C0009082006090830060304200FF000211C2FD
4243:1008D00000021027000211C03063007F006218255B
4244:1008E000A0830060026020210E00168C2405000108
4245:1008F000000020218FBF00248FB400208FB3001C84
4246:100900008FB200188FB100148FB00010008010213A
4247:1009100003E0000827BD00288F83002827BDFFE8DB
4248:10092000AFB00010AFBF0014906200638F87003437
4249:1009300000808021344200408CE60010A0620063F9
4250:100940003C0308008C6331B030C23FFF0043102BE2
4251:100950001040004E8F8500382402FF8090A3000DC8
4252:1009600000431024304200FF504000490200202183
4253:10097000000613823048000324020002550200449E
4254:100980000200202194A2001C8F850028240300234C
4255:10099000A4A201148CE60000000616023042003FBB
4256:1009A000104300103C0300838CE300188CA2007CF1
4257:1009B000106200062402000E0E00158BA382004C6C
4258:1009C0002403FFFF104300382404FFFF8F83002817
4259:1009D0009062006334420020A06200630A0018C1E4
4260:1009E0008F83002C00C31024144300078F83002C36
4261:1009F00090A200623042000F34420020A0A20062A8
4262:100A0000A38800408F83002C9062000D3042007F4D
4263:100A1000A062000D8F83003C1060001802002021AE
4264:100A20008F8400388C8200100043102B1040000986
4265:100A300024020018020020210E00158BA382004C16
4266:100A40002403FFFF104300182404FFFF0A0018E9E5
4267:100A5000000020218C8200102405000102002021CA
4268:100A6000004310238F83002C240600010E0016D9AA
4269:100A7000AC6200100A0018E9000020210E00168C5C
4270:100A8000240500010A0018E90000202102002021AD
4271:100A90002402000D8FBF00148FB0001027BD001876
4272:100AA0000A00158BA382004C8FBF00148FB000107A
4273:100AB0000080102103E0000827BD001827BDFFD8E3
4274:100AC000AFB000108F900034AFB3001CAFBF002058
4275:100AD000AFB20018AFB100148E1200103C03080032
4276:100AE0008C6331B032423FFF0043102B1040007C3A
4277:100AF000008098218F8500382402FF8090A3000D8C
4278:100B000000431024304200FF504000760260202154
4279:100B10000012138230420003240300015443007189
4280:100B20000260202190A2000D3042000854400003D2
4281:100B30008F82003C0A00191924020024504000034F
4282:100B40008E03000C0A001919240200278CA2002031
4283:100B500014620005240200208E0300088CA20024E9
4284:100B600010620008240200200E00158BA382004CA6
4285:100B70002403FFFF1043006A2404FFFF0A00194406
4286:100B80008F84002C8E0200142411FFFF14510003E7
4287:100B90008F8700280A00193F240200258E030018C1
4288:100BA0008CE2007C146200162402000E8E030024E6
4289:100BB0008CA2002814620012240200218E06002854
4290:100BC0008CA2002C14C2000E2402001F8E03002CE5
4291:100BD0001060000B240200238CE200680043102BFD
4292:100BE00014400007240200268CA20014006618217D
4293:100BF0000043102B504000078F84002C2402002259
4294:100C00000E00158BA382004C105100452404FFFFF9
4295:100C10008F84002C2403FFF79082000D00431024E2
4296:100C2000A082000D8F8600283C0308008C6331AC45
4297:100C30008F82005094C400E08F85002C0043102167
4298:100C400030847FFF00042040004410213043007FA7
4299:100C5000034320213C03000E008320212403FF8056
4300:100C600000431024AF42002CA49200008CA2002864
4301:100C700024420001ACA200288CA2002C8E03002C80
4302:100C800000431021ACA2002C8E02002CACA200303C
4303:100C90008E020014ACA2003494A2003A2442000157
4304:100CA000A4A2003A94C600E03C0208008C4231B095
4305:100CB00024C4000130837FFF1462001300803021C0
4306:100CC000240280000082302430C2FFFF000213C2E1
4307:100CD000304200FF000210270A001981000233C0D1
4308:100CE000026020212402000D8FBF00208FB3001C62
4309:100CF0008FB200188FB100148FB0001027BD0028EC
4310:100D00000A00158BA382004C8F82002802602021EC
4311:100D1000240500010E00168CA44600E000002021EE
4312:100D20008FBF00208FB3001C8FB200188FB100144A
4313:100D30008FB000100080102103E0000827BD0028BC
4314:100D400027BDFFE0AFB100148F910034AFB00010A9
4315:100D5000AFBF00188E2600103C0308008C6331B032
4316:100D600030C23FFF0043102B1040005E0080802106
4317:100D70008F8500382402FF8090A3000D00431024CB
4318:100D8000304200FF50400058020020218F82003C7A
4319:100D900010400008000613828F8200289763000A23
4320:100DA0002404FFFD944200603042FFFF10430055D1
4321:100DB00000061382304200031440000E00000000C1
4322:100DC00092220002104000058E230024506000157E
4323:100DD000922300030A0019BA020020218CA20024E9
4324:100DE0005062001092230003020020210A0019C261
4325:100DF0002402000F90A2000D304200085440000968
4326:100E00009223000302002021240200100E00158B03
4327:100E1000A382004C2403FFFF1043003A2404FFFF89
4328:100E200092230003240200025462000C9222000369
4329:100E30008F82003C544000099222000302002021CE
4330:100E40002402002C0E00158BA382004C2403FFFF0C
4331:100E50001043002C2404FFFF9222000302202821CB
4332:100E600002002021384600102CC600012C4200014F
4333:100E70000E0015AB004630252411FFFF1051002154
4334:100E80002404FFFF8F83003C106000120200202129
4335:100E90003C0208008C42318C0043102B14400006A9
4336:100EA00000000000000028210E0016D924060001D1
4337:100EB0000A001A00000020212402002D0E00158BCC
4338:100EC000A382004C1051000F2404FFFF0A001A00F7
4339:100ED000000020210E00168C240500010A001A00D3
4340:100EE00000002021020020212402000D8FBF0018E5
4341:100EF0008FB100148FB0001027BD00200A00158BA1
4342:100F0000A382004C8FBF00188FB100148FB0001067
4343:100F10000080102103E0000827BD002093830040DB
4344:100F200027BDFFE024020002AFB10014AFB00010F3
4345:100F300000808821AFBF0018000080211062008C63
4346:100F40002404FFFD978500428F83004430A2FFFFF9
4347:100F50000043102B5440007D8F8400480E00144C39
4348:100F6000000000003C020800244275940220202169
4349:100F7000004028210E001612AF8200342409FFFF22
4350:100F80001049007B2404FFFF3C0808008D0875A46D
4351:100F90003C0208008C4231B03C0308009063759419
4352:100FA00031043FFF0082102B1040001B3067003FD0
4353:100FB0003C0208008C4231A88F830050000421803D
4354:100FC00000621821006418213062007F034228214A
4355:100FD0003C02000C00A228213C02008034420001A7
4356:100FE0003066007800C230252402FF8000621024A1
4357:100FF000AF42002830640007AF4208048F82002807
4358:101000000344202124840940AF460814AF85002CF6
4359:10101000AF840038AC4301189383004024020003DE
4360:101020001462003B240200012402002610E2003D6D
4361:1010300028E200271040001324020032240200227C
4362:1010400010E2003828E200231040000824020024A7
4363:101050002402002010E200242402002110E2001EDD
4364:10106000022020210A001A7F2402000B10E2002D2A
4365:101070002402002510E20010022020210A001A7F1D
4366:101080002402000B10E2001A28E200331040000690
4367:101090002402003F2402003110E2000B0220202134
4368:1010A0000A001A7F2402000B10E200110220202106
4369:1010B0000A001A7F2402000B0E00176C0220202168
4370:1010C0000A001A9A004080210E0018EE022020210A
4371:1010D0000A001A9A004080210E00198F0220202158
4372:1010E0000A001A9A004080211509000E0000000035
4373:1010F0000E001813022020210A001A9A00408021B5
4374:101100000E00158BA382004C0A001A9A0040802121
4375:1011100014620017020020212402002314E20005BB
4376:101120002402000B0E001885022020210A001A9AC2
4377:101130000040802102202021A382004C0E00158B4C
4378:101140002410FFFF0A001A9B0200202130A500FF97
4379:101150000E00148924060001978300428F82004408
4380:10116000A780004200431023AF82004402002021E8
4381:101170008FBF00188FB100148FB0001000801021B5
4382:1011800003E0000827BD002027BDFFE0AFB1001439
4383:10119000AFBF0018AFB000108F4601283C03080015
4384:1011A0008C6331A02402FF80AF86005000C3182159
4385:1011B0003065007F03452821006218243C02000AA4
4386:1011C000AF43002400A2282190A200620080882161
4387:1011D000AF850028304200FF00021102A3820040C8
4388:1011E00090A200BC304200021440000224030034EC
4389:1011F000240300308F820028A383003093830040B3
4390:101200008C4200C0A380004CAF8200442402000442
4391:10121000106200308F8400448E2400045080002D22
4392:101220008F8400448E2200103083FFFFA784004289
4393:101230001060001FAF8200488F8300282405FF80C4
4394:10124000022020219062006300A21024304200FF9F
4395:101250001440000D000000000E001A069790004296
4396:1012600010400010004018212402FFFD54620011BC
4397:101270008E230020020028210E00142A02202021A3
4398:101280000A001AEC8E2300209062006300A2102452
4399:10129000304200FF10400003022020210E00174EB4
4400:1012A00000000000978200421440FFE48F83002872
4401:1012B0008E23002030620004104000068F8400441A
4402:1012C0002402FFFB006210240E00143EAE22002018
4403:1012D0008F8400448F8300288FBF00188FB10014C3
4404:1012E0008FB000102402000127BD002003E0000899
4405:1012F000AC6400C030A500FF2403000124A9000154
4406:101300000069102B1040000C00004021240A00014D
4407:1013100000A31023004A3804246300013082000136
4408:101320000069302B104000020004204201074025D4
4409:1013300054C0FFF800A3102303E0000801001021AF
4410:1013400027BDFFE03C021EDCAFB20018AFB10014B5
4411:10135000AFBF001CAFB0001034526F4100008821B5
4412:10136000240500080E001AFC0220202100118080B4
4413:101370003C07080024E771940002160002071821B8
4414:10138000AC6200000000282124A200013045FFFFCC
4415:101390008C6200002CA600080441000200022040DC
4416:1013A0000092202614C0FFF8AC64000002078021E0
4417:1013B0008E0400000E001AFC2405002026230001E4
4418:1013C0003071FFFF2E2301001460FFE5AE02000024
4419:1013D0008FBF001C8FB200188FB100148FB00010A7
4420:1013E00003E0000827BD00203C02080024426A8474
4421:1013F0003C010800AC2271883C02080024425000E5
4422:101400003C010800AC22718C240200063C0108005B
4423:10141000A02271900A001B0F0000000027BDFFD81A
4424:10142000AFB3001CAFB20018AFBF0020AFB10014C3
4425:10143000AFB000108F5101408F480148000894025E
4426:10144000324300FF311300FF8F4201B80440FFFE1A
4427:1014500027500180AE1100008F420144AE0200040B
4428:1014600024020002A6120008A202000B24020014AB
4429:10147000AE130024106200252862001510400008F9
4430:101480002402001524020010106200302402001211
4431:10149000106200098FBF00200A001C308FB3001CAF
4432:1014A0001062006724020022106200378FBF002004
4433:1014B0000A001C308FB3001C3C0208008C4231A093
4434:1014C0002403FF800222102100431024AF42002495
4435:1014D0003C0208008C4231A0022210213042007FE1
4436:1014E000034218213C02000A00621821166000B372
4437:1014F000AF830028906200623042000F3442003017
4438:10150000A06200620A001C2F8FBF00203C04600014
4439:101510008C832C083C02F0033442FFFF0062182445
4440:10152000AC832C083C0208008C4231A08C832C0830
4441:101530002442007400021082000214800062182508
4442:10154000AC832C080A001C2F8FBF00203C0208002F
4443:101550008C4231A02403FF8002221021004310247A
4444:10156000AF4200243C0208008C4231A03C03000A38
4445:10157000022210213042007F03421021004310213B
4446:101580000A001C2EAF8200283C0208008C4231A0C9
4447:101590002404FF800222102100441024AF420024C2
4448:1015A0003C0208008C4231A0022210213042007F10
4449:1015B000034218213C02000A006218219062006375
4450:1015C00000821024304200FF1040007CAF830028CE
4451:1015D00024620088944300123C0208008C4231A827
4452:1015E00030633FFF000319800222102100431021C5
4453:1015F0003043007F03431821004410243C04000CB6
4454:1016000000641821AF4200280E00155AAF83002C49
4455:101610008F4201B80440FFFE00000000AE11000040
4456:101620008F420144AE02000424020002A612000808
4457:10163000A202000BAE1300240A001C2F8FBF002053
4458:101640002406FF8002261024AF4200203C0208003E
4459:101650008C4231A031043FFF00042180022210217E
4460:1016600000461024AF4200243C0308008C6331A8DC
4461:101670003C0208008C4231A03227007F022318214F
4462:1016800002221021006418213042007F3064007F64
4463:10169000034228213C02000A0066182400A22821E7
4464:1016A000034420213C02000C00822021AF4300288B
4465:1016B0003C0200080347182100629021AF850028F2
4466:1016C000AF84002C0E00155A010080218F4201B812
4467:1016D0000440FFFE8F82002C8F8400282745018064
4468:1016E0009042000DACB10000A4B00006000216004C
4469:1016F0000002160300021027000237C214C00016B1
4470:10170000248200889442001232033FFF30423FFFA0
4471:101710001443001224026082908300632402FF803D
4472:1017200000431024304200FF5040000C240260822D
4473:10173000908200623042000F34420040A08200627A
4474:1017400024026084A4A200082402000DA0A20005C7
4475:101750000A001C193C02270024026082A4A200088F
4476:10176000A0A000053C02270000061C00006218250E
4477:1017700024020002A0A2000BACA30010ACA0001435
4478:10178000ACA00024ACA00028ACA0002C8E42004CE1
4479:101790008F84002CACA200189083000D2402FF80DF
4480:1017A00000431024304200FF104000058FBF00208E
4481:1017B0009082000D3042007FA082000D8FBF00207C
4482:1017C0008FB3001C8FB200188FB100148FB00010BF
4483:1017D0003C02100027BD002803E00008AF4201B81A
4484:1017E00008004C2808004C2808004BA008004BD8E3
4485:1017F00008004C0C08004C3008004C3008004C30FD
4486:0418000008004B1081
4487:0C1804000A0001220000000000000000AB
4488:101810000000000D747061342E362E313600000049
4489:10182000040610010000000000000000000000009D
4490:1018300000000000000000000000000000000000A8
4491:101840000000000000000000000000000000000098
4492:101850000000000000000000000000000000000088
4493:101860000000000000000000000000000000000078
4494:101870000000000000000000000000000000000068
4495:101880000000000000000000000000000000000058
4496:1018900010000003000000000000000D0000000D1B
4497:1018A0003C02080024421B803C03080024632014EF
4498:1018B000AC4000000043202B1480FFFD24420004B4
4499:1018C0003C1D080037BD2FFC03A0F0213C10080090
4500:1018D000261004883C1C0800279C1B800E00015A1F
4501:1018E000000000000000000D3084FFFF3082000780
4502:1018F0008F85001810400002248300073064FFF831
4503:101900000085302130C41FFF03441821247B400090
4504:10191000AF85001CAF84001803E00008AF440084CA
4505:101920003084FFFF308200078F8500208F860028DB
4506:1019300010400002248300073064FFF80085202156
4507:101940000086182B14600002AF8500240086202337
4508:101950000344282134068000AF840020AF44008077
4509:1019600000A6202103E00008AF84003827BDFFD87F
4510:10197000AFB3001CAFB20018AFB00010AFBF00246F
4511:10198000AFB40020AFB100143C0860088D145000C3
4512:101990002418FF7F3C1A8000029898243672380C75
4513:1019A000AD1250008F5100083C07601C3C086000DD
4514:1019B00036300001AF500008AF800018AF40008003
4515:1019C000AF4000848CE600088D0F08083C076016C5
4516:1019D0008CEC000031EEFFF039CA00103C0DFFFF27
4517:1019E000340B80003C030080034B48212D44000150
4518:1019F000018D28243C0253533C010800AC230420F1
4519:101A0000AF890038AF860028AF840010275B400004
4520:101A100014A2000334E37C008CF90004032818218D
4521:101A20008C7F007C8C6500783C0280003452007012
4522:101A3000AF85003CAF9F00403C13080026731BC4D9
4523:101A40000240A0218E4800008F46000038C30001EC
4524:101A50003064000110800017AF88003402804821F4
4525:101A60008D2D00003C1908008F39045C3C110800E2
4526:101A70008E31045801A8F823033F7821000040214B
4527:101A80000228382101FF802B00F070213C01080062
4528:101A9000AC2F045C3C010800AC2E04588F4C0000B5
4529:101AA000398B0001316A00011540FFED01A0402192
4530:101AB000AF8D00348E4E00003C0C08008D8C045C11
4531:101AC0003C0A08008D4A045801C86823018D28216A
4532:101AD0000000582100AD302B014B20210086102141
4533:101AE0003C010800AC25045C3C010800AC22045811
4534:101AF0008F4501088F44010030A92000AF85000008
4535:101B0000AF84000C1120000A00A030213C0708001F
4536:101B10008CE7042C24EF00013C010800AC2F042CBE
4537:101B20003C104000AF5001380A0001900000000056
4538:101B300030B002001600001424110F0010910012A2
4539:101B400024070D001087023330B000065200FFF565
4540:101B50003C104000936D0000240C001031A600F0F2
4541:101B600010CC0269240E007010CE02DD8F8B0014A1
4542:101B700025670001AF8700143C104000AF500138CA
4543:101B80000A00019000000000974801041100FFE5E1
4544:101B90003C10400030B84000170000A200000000D8
4545:101BA0008F5901780720FFFE8F870038240900082D
4546:101BB000240508008CE30008AF450178A7490140DF
4547:101BC000A7400142974201048F8600003049FFFF81
4548:101BD00030DF000113E002D5012040212524FFFE63
4549:101BE000240A0002A74A01463088FFFFA7440148A3
4550:101BF0003C0B08008D6B043C156002C48F8F000CF9
4551:101C000030C30020146000022404000924040001F1
4552:101C100030CD0C00240C040051AC000134840004CD
4553:101C2000A744014A3C0508008CA504203C0200485A
4554:101C30003C19000100A2F82530D8000203F928253C
4555:101C400013000004000018213C04010000A4282512
4556:101C50002403000130CA000451400005AF8300088E
4557:101C60003C06001000A6282524030001AF830008CD
4558:101C7000AF45100000000000000000000000000060
4559:101C8000000000008F8300081060002300000000A7
4560:101C90008F4B10000561FFFE000000001060001E69
4561:101CA000000000008F4D10003C03002001A36024C1
4562:101CB000118000198F8F000031EE000211C0001654
4563:101CC00000000000975010141600001300000000E0
4564:101CD0009745100830BFFFFF27F800060018C8829C
4565:101CE0000019308000C7282133110001330300039D
4566:101CF000122003208CA200000000000D00C7F82174
4567:101D0000AFE200003C1908008F390430272600019B
4568:101D10003C010800AC2604308F6A00003405FFFF48
4569:101D2000AF8A00048CE200001045029A00002021D6
4570:101D30008CE5000030BF010013E0027E010020218D
4571:101D40003C0708008CE704743C1008008E10044C1B
4572:101D500000E858213C1808008F1804700168882B8F
4573:101D60003C0808008D080448000078210204602126
4574:101D7000030F18210184702B010F6821007150217D
4575:101D800001AE10213C010800AC2C044C3C010800C1
4576:101D9000AC2204483C010800AC2B04743C01080050
4577:101DA000AC2A04708F8D00180120302131290007E2
4578:101DB00025AE000831C21FFF03426021AF8D001C19
4579:101DC000AF820018259B4000AF4200841120000321
4580:101DD0008F90002024C800073106FFF88F84002868
4581:101DE00000D0282100A4782B15E00002AF90002439
4582:101DF00000A4282303452021340380000083102100
4583:101E00003C061000AF850020AF820038AF4500804F
4584:101E1000AF4601788F8B0014256700010A0001DDB1
4585:101E2000AF8700148F6200088F6700002411003014
4586:101E30000007C602330300F0107100A2241900400D
4587:101E40001479FF4B8F8B00148F4A01780540FFFEF9
4588:101E500030A7020014E00003000512820000000D0C
4589:101E6000000512823050000300104900013070213B
4590:101E7000000E688001B06021000C58800173802141
4591:101E80008E08000015000002000000000000000D98
4592:101E90008F6F000405E202B192030006920700056D
4593:101EA000920F00043C0200010007288000B060216E
4594:101EB0008D8900182771000825EE00050122682190
4595:101EC000000E3082AD8D0018022020210E0005800A
4596:101ED00026050014920B00068F7F00043C087FFF4C
4597:101EE000000B2080009130218CC30004350AFFFFD5
4598:101EF00003EAC8240079C021ACD800049207000589
4599:101F000092090004960D00080007288000B1F8210E
4600:101F10008FEF0000974201043C07FFFF01E75024C8
4601:101F2000304EFFFF01C96021018D58233168FFFF4A
4602:101F300001482025AFE400009203000724190001A6
4603:101F4000107902692406000310660279000000007F
4604:101F50008E190010241F000AA75F0140A7590142F3
4605:101F6000920300048F86000024070001A743014468
4606:101F7000A74001469758010430D100023C050041BA
4607:101F8000A758014800001821A747014A1220000362
4608:101F900030CA00043C050141240300015140000502
4609:101FA000AF8300083C08001000A828252403000186
4610:101FB000AF830008AF4510000000000000000000E3
4611:101FC00000000000000000008F8B0008116000047A
4612:101FD000000000008F4410000481FFFE000000009C
4613:101FE0008F6A0000920700043C0508008CA5044499
4614:101FF000AF8A0004975F01043C0F08008DEF044096
4615:1020000030E300FF33F9FFFF0079C02100B86821F9
4616:102010000000102124E6000A30C8FFFF01B8482B59
4617:1020200001E2702101C96021311000073C01080064
4618:10203000AC2D04443C010800AC2C04401200000309
4619:102040008F8D0018250B00073168FFF8010D7021F6
4620:1020500031CC1FFFAF8D001CAF8C0018AF4C00843B
4621:1020600097440104034C80213084FFFF308800072F
4622:1020700011000003261B4000248900073124FFF8CB
4623:102080008F8200208F850028008220210085782BF8
4624:1020900015E00002AF82002400852023034488213C
4625:1020A00034058000022510213C061000AF8400207A
4626:1020B000AF820038AF440080AF4601780A00028545
4627:1020C0008F8B00148F5F017807E0FFFE30AA0200BB
4628:1020D00015400003000542820000000D0005428209
4629:1020E000310200030002710001C26821000D60800E
4630:1020F000018248210009288000B380218E0B000056
4631:1021000011600002000000000000000D8F6F000C45
4632:1021100005E001F38F87003824190001AE19000093
4633:102120008CE30008A20000078F78000400181C024E
4634:10213000306600FF24D10005001130832CC400411B
4635:1021400014800002A20300040000000D8F6B000445
4636:102150003C0EFFFF00E028213164FFFF248F000BBD
4637:10216000000F408200081080004748218D2D00009C
4638:1021700026040014A60B000801AE60240E000580A2
4639:10218000AD2C00008F5F01083C0A100003EA3824E0
4640:1021900010E001A30000000097460104920300072D
4641:1021A00024D1FFEC346500023224FFFFA2050007B2
4642:1021B000960600082CC7001354E0000592030007A0
4643:1021C000920A0007355F0001A21F00079203000773
4644:1021D000240B0001106B01BA24090003106901CD22
4645:1021E0008F88003830CFFFFF25E400020004C88349
4646:1021F000333F00FF001F2880A219000500A85821C6
4647:102200008D780000975101043C03FFFF0303602415
4648:102210003222FFFF004F702325CDFFFE018D4825A0
4649:10222000AD690000920600053C02FFF6344EFFFF48
4650:1022300030CA00FF000A388000F020219099001475
4651:102240003C1FFF7F37E7FFFF3323000F0066782135
4652:1022500031F800FF0018288000B088218E2D002062
4653:1022600000A86021A20F000601AE4824AE0D000CAC
4654:10227000AD89000C920B00068E04000C0127F82497
4655:10228000000B50800150C821972600260148C0212C
4656:1022900000874024AF260024AE08000CAF3F00208A
4657:1022A000AF0600108F860000240C001024090002E5
4658:1022B000A74C0140A7400142A7400144A74901465D
4659:1022C000974B01042407000130C80002256AFFFE75
4660:1022D000A74A01483C050009A747014A110000032D
4661:1022E000000018213C0501092403000130CD000441
4662:1022F00051A00005AF8300083C06001000A6282569
4663:1023000024030001AF830008AF4510000000000067
4664:10231000000000000000000000000000921800040F
4665:1023200027110002322F0007000F1023304E000744
4666:10233000AE0E00108F900008120000040000000094
4667:102340008F4310000461FFFE000000008F78000042
4668:102350008F8F00183C1008008E100444AF980004C2
4669:102360009751010425E6001030CA1FFF3222FFFFFB
4670:10237000AF8F001CAF8A0018AF4A00842449FFFECB
4671:102380003C0B08008D6B0440974E0104012068212E
4672:10239000000967C3020D282131C9FFFF00AD402BA2
4673:1023A000016C382100E82021034AF8213139000767
4674:1023B0003C010800AC2504443C010800AC24044066
4675:1023C0001320000327FB4000252300073069FFF896
4676:1023D0008F9F00208F840028013F382100E4C82B04
4677:1023E00017200002AF9F002400E438230347202178
4678:1023F00034058000008510213C061000AF870020C6
4679:10240000AF820038AF470080AF4601780A000285EE
4680:102410008F8B0014975801041300FDC23C1040003C
4681:102420008F4301780460FFFE30B9400013200003A1
4682:102430003C0400080000000D3C040008AF440140CB
4683:1024400024080800AF4801788F8B0000974A0104E8
4684:10245000317F000113E000E93146FFFF24D0FFFE89
4685:10246000240C0002A74C0146A75001488F8F00188A
4686:102470002405000DA745014A8F71000025E20008E0
4687:1024800030491FFF0349702130CD0007AF91000490
4688:10249000AF8F001CAF89001800C03821AF490084FD
4689:1024A00011A0000325DB400024C6000730C7FFF859
4690:1024B0008F9800208F84002800F8302100C4382B2A
4691:1024C00014E00002AF98002400C430238F8A001467
4692:1024D00003465821340880000168F821255900017D
4693:1024E0003C0310003C104000AF860020AF9F003836
4694:1024F000AF460080AF430178AF990014AF50013868
4695:102500000A000190000000008F6900009744010458
4696:102510003127FFFF3088FFFF8F4F017805E0FFFE76
4697:1025200030FF0007001F18233078000724E6FFFE65
4698:102530002419000AA7590140A7580142A74601449F
4699:10254000A7400146A74801488F42010830510020AA
4700:1025500016200002240300092403000130AA00020F
4701:10256000A743014A3C040041114000030000182128
4702:102570003C0401412403000130AB0004516000051C
4703:10258000AF8300083C0500100085202524030001CE
4704:10259000AF830008AF4410000000000000000000FE
4705:1025A00000000000000000008F90000812000004EE
4706:1025B000000000008F4C10000581FFFE00000000AD
4707:1025C0008F780000276200088F8D003CAF980004D0
4708:1025D000944600089451000A944F000C30CEFFFF3F
4709:1025E0000011240031E9FFFF11CD00A20089202550
4710:1025F0003C0308008C6304443C1808008F18044016
4711:1026000000E85021255FFFFE007F782100001021A7
4712:1026100001FF302B03028821022648213C010800DB
4713:10262000AC2F04443C010800AC29044024EB000812
4714:102630003162FFFF3047000710E000038F8500186C
4715:10264000245000073202FFF83106FFFF30C80007B0
4716:102650000045702131CD1FFF034D6021AF85001C67
4717:10266000AF8D0018259B4000AF4D00841100000382
4718:102670008F8F002024C400073086FFF88F84002845
4719:1026800000CF282100A4482B15200002AF8F002482
4720:1026900000A42823AF850020AF4500803C1108002E
4721:1026A0008E3104340345C0213402800003023021FE
4722:1026B00012200005AF860038938300172419000EFE
4723:1026C0001079000D241F043F3C0A1000AF4A017826
4724:1026D0008F8B0014256700010A0001DDAF8700140D
4725:1026E0000E0005A63C1040008F8B001425670001EA
4726:1026F0000A0001DEAF8700143C0A1000A75F014802
4727:10270000AF4A01780A0004B48F8B0014240E0F0026
4728:1027100011EE003D30D100201620000224030009F4
4729:10272000240300010A000208A743014A0A0001FB32
4730:10273000A740014694E5000894E2000A94EB000CDF
4731:102740008F86003C0002FC00316AFFFF30B9FFFFBA
4732:102750001326003703EA20253C0508008CA5044415
4733:102760003C1F08008FFF04400000502100A83821C2
4734:1027700000E8302B03EAC8210326C0213C010800F1
4735:10278000AC2704443C010800AC3804400A0002694C
4736:102790008F8D00183C1908008F39047C3C03080019
4737:1027A0008C6304543C0608008CC604783C0F080077
4738:1027B0008DEF0450032838210068682100E8C02B01
4739:1027C00000C4882101A8402B01E47021023858215F
4740:1027D00001C860213C010800AC2D04543C010800F4
4741:1027E000AC2C04503C010800AC27047C3C010800E0
4742:1027F000AC2B04780A0002698F8D0018A7400146AF
4743:102800000A00041B8F8F001830D000201600FFC56F
4744:102810002403000D240300050A000208A743014A0F
4745:10282000975901042738FFF00A00036B3304FFFFB8
4746:102830008F8C0040148CFFC8000080213C110800E0
4747:102840008E31046C3C0408008C84046802287021DA
4748:1028500001C8782B00904021010F68213C0108003D
4749:10286000AC2E046C3C010800AC2D04680A0002691F
4750:102870008F8D00188F9900401499FF5D0000602132
4751:102880003C0508008CA5046C3C1008008E10046800
4752:1028900000E82021248EFFFE00AEF82103EE582B25
4753:1028A000020C5021014B18213C010800AC3F046C84
4754:1028B0003C010800AC2304680A00048B24EB0008E8
4755:1028C0008F8800383C02FFFF8D0E000C01C2682487
4756:1028D00001A46025AD0C000C0A00037930CFFFFF86
4757:1028E0000A0003A9AE000000974B01049204000403
4758:1028F0008E2A000C01644021251FFFF20147182495
4759:1029000033F9FFFF0079C025AE38000C0A0002D46D
4760:102910008E1900103C03FFFF8D11001002232824A4
4761:1029200000A47825AD0F00100A00037930CFFFFF17
4762:1029300097450104920600048E2F001000A6102176
4763:102940002449FFEE01E76824312EFFFF01AE602528
4764:10295000AE2C00100A0002D48E1900108E06000C56
4765:10296000AE0000000003C080031088210A0002A608
4766:10297000AE2600201460000D3050FFFF3C04FFFF26
4767:102980000044602401846826000D582B000C502B55
4768:10299000014B102410400002000000000000000D58
4769:1029A0008CA300000A00023E006410253A11FFFFCC
4770:1029B0000011782B0010702B01CF20241080000212
4771:1029C000000000000000000D8CB800000A00023E6C
4772:1029D0003702FFFF3084FFFF30A5FFFF10800007A4
4773:1029E0000000182130820001104000020004204243
4774:1029F000006518211480FFFB0005284003E0000853
4775:102A00000060102110C00007000000008CA2000030
4776:102A100024C6FFFF24A50004AC82000014C0FFFB05
4777:102A20002484000403E000080000000010A0000857
4778:102A300024A3FFFFAC86000000000000000000009F
4779:102A40002402FFFF2463FFFF1462FFFA24840004C2
4780:102A500003E0000800000000308EFFFF30D8FFFFC9
4781:102A600000057C0001F8602539CDFFFF01AC502145
4782:102A7000014C582B014B4821000944023127FFFF2C
4783:102A800000E830210006240230C5FFFF00A4182111
4784:102A90003862FFFF03E000083042FFFF3C0C0800F3
4785:102AA0008D8C0484240BFF8027BDFFD0018450212E
4786:102AB000014B4824AF4900203C0808008D080484DD
4787:102AC000AFB20020AFB00018AFBF0028AFB30024F2
4788:102AD000AFB1001C936600040104382130E4007F8C
4789:102AE000009A10213C0300080043902130C50020CB
4790:102AF000036080213C080111277B000814A000021C
4791:102B0000264600702646006C92130004975101047B
4792:102B1000920F00043267000F322EFFFF31ED0040AC
4793:102B200001C7282311A0000500004821925900BCCC
4794:102B3000333800041700009000000000924300BCEE
4795:102B4000307F000413E0000F0000000010A0000D13
4796:102B500000000000960E0002240AFF8000A76021FA
4797:102B600025CDFFFEA74D1016920B0004014B20242B
4798:102B7000308200FF10400085010C40253C0F04000E
4799:102B8000010F40258F5301780660FFFE2404000AE0
4800:102B9000A7440140960D00022404000931AC00074F
4801:102BA000000C5823316A0007A74A0142960200022E
4802:102BB0002443FFFEA7430144A7400146975F010459
4803:102BC000A75F01488F5901083338002053000001E6
4804:102BD00024040001920F000431EE001015C0000221
4805:102BE0003483001000801821A743014A0000000030
4806:102BF000000000000000000000000000AF481000CE
4807:102C000000000000000000000000000000000000C4
4808:102C10008F5110000621FFFE3113FFFF12600003E9
4809:102C2000000000008F481018ACC800009603000692
4810:102C3000307FFFFF27F90002001998820013888077
4811:102C4000023B30218CD800001520005700183402B8
4812:102C5000920300042405FF8000A3F82433F100FF51
4813:102C60001220002C00000000924700BC30F200024D
4814:102C70001240002800000000974B100C2562FFFE58
4815:102C8000A7421016000000003C0A0400354900303D
4816:102C9000AF4910000000000000000000000000002C
4817:102CA000000000008F4C10000581FFFE00000000B6
4818:102CB0009749100C8F51101C00C020213127FFFFB5
4819:102CC00024F20030001218820003288000BBF82193
4820:102CD0003226FFFFAFF100000E00059500112C0217
4821:102CE0000013C880033B98218E7800000002740016
4822:102CF000AFB800108FA80010310FFFFFAFAF00106A
4823:102D00008FA4001001C46825AFAD00108FA600107D
4824:102D1000AE66000097730008976D000A9766000C76
4825:102D20008F8A003C000D5C0030CCFFFF3262FFFF59
4826:102D3000104A0036016C2025960600023C10100057
4827:102D400024D300080E0001393264FFFF974C0104C0
4828:102D50000E0001473184FFFFAF5001788FBF00287C
4829:102D60008FB300248FB200208FB1001C8FB00018E9
4830:102D700003E0000827BD003010A0FF700000000035
4831:102D800024A5FFFC0A0005CE240900048CD1000014
4832:102D9000AF5110188F5301780660FF7A2404000A9F
4833:102DA0000A0005E30000000000A7C8218F88003852
4834:102DB0008F4E101C0019C0820018788001E8202175
4835:102DC000AC8E0000000E2C0200C020210E000595E4
4836:102DD00031C6FFFF023B28218CAD000000025400E9
4837:102DE00000403021AFAD00108FAC0010318BFFFFE1
4838:102DF000AFAB00108FA2001001424825AFA9001010
4839:102E00008FA700100A000613ACA700008F8F0040A8
4840:102E1000148FFFC90000000097420104960B0002C6
4841:102E20003C0508008CA5046C3049FFFF316AFFFFA8
4842:102E30003C1108008E310468012A382124F2FFFE7B
4843:102E400000B240210012FFC30112C82B023FC02173
4844:102E5000031920213C010800AC28046C3C01080047
4845:102E6000AC2404680A00064D0000000000A4102BEA
4846:102E700010400009240300010005284000A4102B85
4847:102E800004A00003000318405440FFFC0005284044
4848:102E900010600007000000000085302B14C0000205
4849:102EA00000031842008520231460FFFB0005284220
4850:102EB00003E00008008010218F85002C27BDFFE86B
4851:102EC000000530272CC300012CA40002008310252C
4852:102ED00010400003AFBF00102405007FAF85002C19
4853:102EE0000005282730A5FFFF0E000574240426F5F1
4854:102EF0008F830030240402BD004030210083382B32
4855:102F000010E0000924050001000420400083102B7C
4856:102F100004800003000528405440FFFC00042040CA
4857:102F200010A0000800C350210064402B15000002CF
4858:102F3000000528420064182314A0FFFB000420426F
4859:102F400000C350218FBF0010000A4C02312200FF45
4860:102F500027BD0018AF8A002C03E00008AF890030BD
4861:102F60000A00002600000000000000000000000D24
4862:102F7000747870342E362E313600000004061000AE
4863:102F80000000000A000001360000EA6000000000B6
4864:102F90000000000000000000000000000000000031
4865:102FA0000000000000000000000000000000000021
4866:102FB0000000000000000000000000000000000011
4867:102FC0000000001D000000000000000000000000E4
4868:102FD00000000000000000000000000000000000F1
4869:102FE00000000000000000000000000000000000E1
4870:102FF00000000000000000000000000010000003BE
4871:10300000000000000000000D0000000D3C02080060
4872:1030100024423AA03C03080024633C54AC40000026
4873:103020000043202B1480FFFD244200043C1D0800B7
4874:1030300037BD7FFC03A0F0213C100800261000984B
4875:103040003C1C0800279C3AA00E000305000000006D
4876:103050000000000D8F8300383C08800035070070A9
4877:103060008CE50000008330253C02900000C2202542
4878:10307000AF850030AF4400208F4900200520FFFEBF
4879:103080003C038000346200708C4500008F86003065
4880:103090003C1908008F39007C3C0E08008DCE00786A
4881:1030A00000A6202303245821000078210164682B06
4882:1030B00001CF6021018D50213C010800AC2B007C28
4883:1030C0003C010800AC2A007803E000080000000082
4884:1030D0000A00003D240400018F8400383C05800074
4885:1030E00034A200010082182503E00008AF4300204D
4886:1030F00003E00008000010213084FFFF30A5FFFF2F
4887:1031000010800007000018213082000110400002EA
4888:1031100000042042006518211480FFFB00052840B0
4889:1031200003E000080060102110C00007000000004C
4890:103130008CA2000024C6FFFF24A50004AC8200007E
4891:1031400014C0FFFB2484000403E00008000000001A
4892:1031500010A0000824A3FFFFAC86000000000000C0
4893:10316000000000002402FFFF2463FFFF1462FFFA47
4894:103170002484000403E0000800000000308AFFFF00
4895:1031800093A80013A74A014497490E1630C600FFC2
4896:103190003C021000A7490146AF450148A346015231
4897:1031A000A748015AAF4701608FA400188FA30014ED
4898:1031B000A7440158AF43015403E00008AF4201782F
4899:1031C00003E00008000000003C038000346200704F
4900:1031D0008C4900008F88003C2484000727BDFFF83D
4901:1031E0003084FFF8AF890030974D008A31ACFFFF83
4902:1031F000AFAC00008FAB0000016850232547FFFFF4
4903:1032000030E61FFF00C4282B14A0FFF73C0C800001
4904:10321000358B00708D6A00003C0708008CE7008445
4905:103220003C0608008CC60080000810820149182363
4906:103230000002788000E370210000202101C3C82B28
4907:1032400000C4C02101FA4021031948212502400091
4908:1032500027BD00083C010800AC2E00843C0108009A
4909:10326000AC29008003E00008000000008F82003CD1
4910:103270002486000730C5FFF800A2182130641FFF24
4911:1032800003E00008AF84003C3C0E20FF27BDFFE0B8
4912:103290003C1A80003C0F800835CDFFFDAFBF001801
4913:1032A000AFB10014AFB00010AF8F0044AF4D0E00AF
4914:1032B000000000000000000000000000000000000E
4915:1032C000000000003C0C00FF358BFFFDAF4B0E00F3
4916:1032D0003C0660048CC95000240AFF7F3C1160004A
4917:1032E000012A40243507380CACC750008E2404381E
4918:1032F00024050009AF4500083083FFFF38622F71B5
4919:103300002450C0B3AF80004C0E000064AF80003C7E
4920:1033100052000001AE20442C0E00046000000000AA
4921:103320008FBF00188FB100148FB000100A000E7705
4922:1033300027BD002027BDFFD0AFB20028AFB10024C9
4923:10334000AFBF002CAFB00020936200080080902136
4924:1033500000A088211440002D240400100E00009AC3
4925:10336000000000008F8E004C3C10320031C600FF80
4926:1033700000067C0001F0602525CD0001AF8D004CDA
4927:10338000AC4C0000936B00099369000A316A00FF9E
4928:10339000000A3C00312800FF00E82025AC4400046E
4929:1033A0008F83004C06400043AC430008AC40000C47
4930:1033B000979800403305000814A000022628000654
4931:1033C0002628000297420E148F450E1C8F670004BA
4932:1033D000937F00023044FFFF33F900FFAFB90010C4
4933:1033E0008F710014AFA800180E000087AFB1001451
4934:1033F0008FBF002C8FB200288FB100248FB0002027
4935:10340000240400100A0000C327BD0030936900099E
4936:103410009368000B312300FF310200FF006280211E
4937:10342000261F000A33F0FFFF0E00009A0200202141
4938:103430008F86004C3C0D410024D90001AF99004C0F
4939:103440009378000930C600FF00067400330500FFC2
4940:1034500024AF000201CF6025018D5825AC4B000040
4941:103460008F6A000C97440E1401523825AC470004B3
4942:103470008F450E1C8F670004936900023084FFFFA4
4943:10348000312800FFAFA800108F630014AFB10018FF
4944:103490000E000087AFA30014020020218FBF002C74
4945:1034A0008FB200288FB100248FB000200A0000C323
4946:1034B00027BD00303C1280000A000114AC52000C01
4947:1034C00027BDFFD8AFB3001CAFBF0020AFB20018BC
4948:1034D000AFB10014AFB00010936200081440008137
4949:1034E00000809821AF60000C9785004030A4400018
4950:1034F0001080008B2403001624104007A363000AE9
4951:10350000AF700014938F00428F6C001431EE0007EF
4952:10351000000E6A40018D5825AF6B0014978A004059
4953:103520008F6800143149001001093825AF67001475
4954:103530009786004030C300085060008D00002821AD
4955:103540008F6600143C0310003C02810000C3282554
4956:10355000AF65001497440E0A2418000E3405FFFCD2
4957:10356000309FFFFF03E2C825AF790004A378000273
4958:103570009372000A26510004A371000A9783004049
4959:103580009364000A30661F00000611830044F8218E
4960:1035900027F90028A379000997580E0CA778001086
4961:1035A0009372000926510002323000070010782380
4962:1035B00031EE0007A36E000B936D0009976C0010AD
4963:1035C0008F9000349789004031AB00FF016C50218F
4964:1035D000014540213127004010E000053105FFFF83
4965:1035E00000B0382B3C06800010E000140000882159
4966:1035F0000205402B15000033000020218F4A0E14D5
4967:10360000AF4A0E108F490E1CAF490E18AF450E0081
4968:103610008F4C0000318B00081160FFFD000000009E
4969:10362000974D0E0800A0802100003021A78D00409A
4970:103630008F450E0424110001AF850034976E0010F1
4971:1036400031D2FFFF8E640000009010231440000967
4972:10365000AE6200008F6A00148F8700483549004031
4973:10366000AF6900148F480E10ACE800208F430E188D
4974:10367000ACE3002400C020210E0000F50200282148
4975:103680008E66000014C00005000000008F6B00145F
4976:10369000240CFFBF016C9824AF7300148F6D000CD5
4977:1036A00001B22821AF65000C937200081640000398
4978:1036B000000000001620003100000000A371000887
4979:1036C000020020218FBF00208FB3001C8FB2001892
4980:1036D0008FB100148FB000100080102103E00008AB
4981:1036E00027BD00288F900034979100403C06800051
4982:1036F00002009021322F004015E0FFD20000882107
4983:10370000977F00108F98003433F9FFFF1738FFEDD3
4984:1037100000002021000030210A0001B9241100011D
4985:103720002403000E24104007A363000AAF700014A6
4986:10373000938F00428F6C001431EE0007000E6A4038
4987:10374000018D5825AF6B0014978A00408F680014D4
4988:103750003149001001093825AF67001497860040F1
4989:1037600030C300081460FF7600000000000028212C
4990:10377000AF6000040A000187A36000028F6F00148D
4991:103780003C19EFFF3738FFFE01F870240A0001D71B
4992:10379000AF6E00148F8700388F8A004427BDFFE08A
4993:1037A0008F860048AFB00018AFBF001C8F450104E2
4994:1037B0008D4900ACAF4700808CC8002000A9382399
4995:1037C00000008021AF480E108F440E1000004821E9
4996:1037D000AF440E148CC20024AF420E188F430E1853
4997:1037E000AF430E1C10E000362D390001936B00082A
4998:1037F0001160004F00000000976E001031CDFFFFF8
4999:1038000000ED602B1580004A000000009778001042
5000:10381000330FFFFFAF4F0E008F5F000033F900083A
5001:103820001320FFFD0000000097420E088F460E0493
5002:103830003045FFFF30A300011060008A0000000047
5003:103840000000000D30A8A040240400401104003BFB
5004:1038500030A9A0001120008500000000936C000832
5005:103860005180000927A40010976F001031EEFFFF70
5006:1038700000CE682B11A0000427A4001030B800402F
5007:103880001300007A00000000AFA70010A7850040D9
5008:10389000AF8600340E0001580000000000404821AF
5009:1038A0001440FFD08FA700108F420E148F84004861
5010:1038B000AC8200208F470E1CAC8700242D390001FC
5011:1038C0000330302510C000178FBF001C8F840038D4
5012:1038D00024100F0010900085000000008F4F017829
5013:1038E00005E0FFFE24180F001098006F0000000094
5014:1038F0008F470E14240202403C101000AF470144D1
5015:103900008F490E1CAF490148A3400152A740015AFC
5016:10391000AF400160A7400158AF420154AF50017859
5017:103920008FBF001C8FB0001803E0000827BD0020E7
5018:10393000AF470E000A00022E000000008F490178F8
5019:103940000520FFFE240A08008F84003CAF4A01785E
5020:103950009758008A330FFFFF01E4702325CDFFFF46
5021:1039600031AC1FFF2D8B00081560FFF9000000002F
5022:103970008F83004C8F9F003800C0482103442021D2
5023:103980002466000124190F00AF86004C306A00FF46
5024:1039900000E938232486400013F9000524080001BB
5025:1039A000938B004231680007000812403448000140
5026:1039B000000A7C003C18010001F87025AC8E400024
5027:1039C0008F8D004C30AC003630A40008ACCD000424
5028:1039D0001080002E010C3025974D0E0A8F8C003C74
5029:1039E0003C02810031A4FFFF258B000800824025A6
5030:1039F0003C03100031651FFF25390006241F000E0F
5031:103A0000AF48016000C33025A75F015AAF85003C75
5032:103A1000A759015814E0000A8F9F003824050F00B1
5033:103A200053E500022410000134C600408F430E10FD
5034:103A30008F880048AD0300208F4B0E18AD0B00247B
5035:103A40008F420E14AF4201448F440E1CAF44014814
5036:103A5000A34A01523C0A1000AF4601540A00022159
5037:103A6000AF4A017814C0FF7830A8A0408F420E14EE
5038:103A70008F84004800004821AC8200208F470E1C34
5039:103A8000AC8700240A0002582D3900018F98003CB1
5040:103A900025390002A7590158270F000831EE1FFFF2
5041:103AA0000A0002ADAF8E003CAF40014C1120002C4B
5042:103AB000000000008F460E10AF4601448F430E18E1
5043:103AC000240200403C101000AF430148A3400152C3
5044:103AD000A740015AAF400160A7400158AF420154CE
5045:103AE000AF5001780A0002718FBF001C1120000640
5046:103AF00000000000975F0E0833E5004014A00002AC
5047:103B0000000000000000000D8F4801780500FFFE56
5048:103B100000000000974E0E103C0D0500240320000D
5049:103B200031CCFFFF018D1025AF42014C8F440E14A4
5050:103B30003C0B1000AF4401448F4A0E1CAF4A0148B1
5051:103B4000A34001528F840038A740015AAF40016062
5052:103B5000A7400158AF4301540A00025FAF4B017800
5053:103B60008F590E14AF5901448F430E1C0A0002D91D
5054:103B70002402004027BDFFE0AFB20018AFB100142F
5055:103B8000AFB00010AFBF001C0E0000CA0000000064
5056:103B90003C0280008F8A0044345000703C120800C0
5057:103BA00026523B70020088218E0800008F450000DD
5058:103BB00038A400013083000110600017AF88003086
5059:103BC000022048218D2C00003C0208008C42006C31
5060:103BD0003C1808008F1800680188182300436821EA
5061:103BE0000000C82101A3782B0319702101CF4021C7
5062:103BF0003C010800AC2D006C3C010800AC280068BA
5063:103C00008F4B00003967000130E6000114C0FFED62
5064:103C100001804021AF8C00308E1800003C0E08005F
5065:103C20008DCE006C3C0C08008D8C00680308782356
5066:103C300001CF28210000402100AF302B01885821FE
5067:103C4000016620213C010800AC25006C3C01080005
5068:103C5000AC2400688F49010025470088AF870048E1
5069:103C6000AF890038AF4900208E070000AF870030D1
5070:103C70008F5901780720FFFE000000008E0F000022
5071:103C80003C0D08008DAD00743C0C08008D8C00705C
5072:103C900001E7702301AE28210000302100AE582B2F
5073:103CA00001862021008B3821240908003C010800EE
5074:103CB000AC2500743C010800AC270070AF490178C6
5075:103CC00093430108A383004293820042305F0001C6
5076:103CD00017E000158F830038241F0D00107F001996
5077:103CE00024020F001062001D000000009147000038
5078:103CF0002403005030E900FF112300043C0540007C
5079:103D0000AF4501380A000312000000000E0008DA77
5080:103D1000000000008F8A00443C054000AF45013898
5081:103D20000A00031200000000939900423338000695
5082:103D3000001851000E00020D0152D8210A00036E36
5083:103D40008F8A00443C1B0800277B3BF00E00020DCD
5084:103D5000000000000A00036E8F8A00443C1B08002C
5085:103D6000277B3C100E00020D000000000A00036ECD
5086:103D70008F8A004490AA00018FAB00108CAC001019
5087:103D80003C0300FF8D680004AD6C00208CAD001476
5088:103D900000E060213462FFFFAD6D00248CA70018A5
5089:103DA0003C09FF000109C024AD6700288CAE001C4F
5090:103DB0000182C82403197825AD6F0004AD6E002C74
5091:103DC0008CAD0008314A00FFAD6D001C94A90002C3
5092:103DD0003128FFFFAD68001090A70000A560000229
5093:103DE000A1600004A167000090A30002306200FF00
5094:103DF0000002198210600005240500011065000E04
5095:103E00000000000003E00008A16A00018CD800282F
5096:103E1000354A0080AD7800188CCF0014AD6F0014C7
5097:103E20008CCE0030AD6E00088CC4002CA16A00015D
5098:103E300003E00008AD64000C8CCD001CAD6D0018D3
5099:103E40008CC90014AD6900148CC80024AD6800084A
5100:103E50008CC70020AD67000C8CC200148C830064FA
5101:103E60000043C82B13200007000000008CC2001480
5102:103E7000144CFFE400000000354A008003E0000815
5103:103E8000A16A00018C8200640A0003C400000000E3
5104:103E900090AA000027BDFFF88FA9001CA3AA00006C
5105:103EA0008FAE00003C0FFF808FA8001835E2FFFFA7
5106:103EB0008CCD002C01C26024AFAC0000A120000416
5107:103EC00000E06021A7A000028FB800008D27000449
5108:103ED0000188182100A0582100C05021006D28261B
5109:103EE0003C06FF7F3C0F00FF2CAD000135EEFFFFCD
5110:103EF00034D9FFFF3C02FF0003193024000D1DC020
5111:103F0000010EC82400E2C02400C3702503197825DF
5112:103F1000AD2E0000AD2F00048D450024AFAE000093
5113:103F2000AD2500088D4D00202405FFFFAD2D000CB0
5114:103F3000956800023107FFFFAD2700109166001859
5115:103F400030C200FF000219C2506000018D450034EC
5116:103F5000AD2500148D67000827BD0008AD27001CA3
5117:103F60008C8B00CCAD2C0028AD20002CAD2B002478
5118:103F7000AD20001803E00008AD20002027BDFFE0C1
5119:103F8000AFB20018AFB10014AFB00010AFBF001C4B
5120:103F90009098000000C088213C0D00FF330F007F87
5121:103FA000A0CF0000908E000135ACFFFF3C0AFF005F
5122:103FB000A0CE000194A6001EA22000048CAB001429
5123:103FC0008E29000400A08021016C2824012A4024AD
5124:103FD0000080902101052025A6260002AE240004C1
5125:103FE00026050020262400080E0000722406000288
5126:103FF00092470000260500282624001400071E0012
5127:104000000003160324060004044000032403FFFFFA
5128:10401000965900023323FFFF0E000072AE230010FA
5129:10402000262400248FBF001C8FB200188FB100140B
5130:104030008FB0001024050003000030210A00007C2E
5131:1040400027BD002027BDFFD8AFB1001CAFB00018BE
5132:10405000AFBF002090A80000240200018FB0003CF8
5133:104060003103003F00808821106200148FAA0038BD
5134:10407000240B0005506B0016AFAA001000A02021F1
5135:1040800000C028210E00040702003021922400BC49
5136:10409000308300021060000326060030ACC0000030
5137:1040A00024C600048FBF00208FB1001C8FB0001801
5138:1040B00000C0102103E0000827BD0028014038217E
5139:1040C0000E000385AFB000100A00044B0000000092
5140:1040D0000E0003CCAFB000140A00044B0000000037
5141:1040E0003C02000A034218213C04080024843B08D7
5142:1040F0002405001A000030210A00007CAF83002C48
5143:104100003C038000346200708C48000000A05821FD
5144:1041100000C04821308A00FFAF8800308F4401780A
5145:104120000480FFFE3C0C8000358600708CC50000CA
5146:104130003C0308008C6300743C1808008F18007062
5147:1041400000A82023006468210000C82101A4782B66
5148:104150000319702101CF60213C010800AC2D0074CF
5149:104160003C010800AC2C00708F480E14AF4801448D
5150:10417000AF47014CA34A0152A74B0158934601088F
5151:1041800030C5000854A0000135291000934B0900E8
5152:1041900024070050316A00FF1147000700000000AB
5153:1041A0008F450E1CAF450148AF4901543C09100032
5154:1041B00003E00008AF490178934D010831A80008D9
5155:1041C0001100001000000000934F010831EE0010B4
5156:1041D00051C00001352900083C04080090843B6C64
5157:1041E000A34401508F4309A4AF4301488F4209A063
5158:1041F000AF420144AF4901543C09100003E00008FC
5159:10420000AF4901783C1908008F393B283338000842
5160:104210005700FFF1352900080A00049E0000000045
5161:1042200024070040AF470814AF4008108F420944EC
5162:104230008F4309508F4409548F45095C8F46094CC0
5163:10424000AF820064AF830054AF840050AF85005C40
5164:1042500003E00008AF8600609346010930C5007F87
5165:10426000000518C0000521400083102103E000086C
5166:10427000244200883C0A0800914A3B2D3C09080072
5167:1042800095293B263C051100000A3C002528000228
5168:1042900000E8302500C5182524820008AC83000002
5169:1042A00003E00008AC8000048F4A002C974D0908F9
5170:1042B0003C0E000E034E382131ACFFFF000C41C014
5171:1042C000AF48002C9743090894EB001A0080402166
5172:1042D000240200013169FFFFAC8900008CE6001C5C
5173:1042E00000A05821AC8600048CE40020AD04000836
5174:1042F00090E30019306300031062003E00000000EC
5175:104300002865000214A00071240F0002106F004CF9
5176:104310000000000024180003107800550000000081
5177:104320003C09080095293B1C93430934934F09210C
5178:104330003C05080094A53B22306400FF94EE002A5F
5179:104340000004688231EC00FF978F0058000DC60012
5180:10435000000CCC003127FFFF0319102500A73021E6
5181:104360000046202501CF68213C03400000836025E2
5182:10437000000D4C00AD090004AD0C0000935909205C
5183:104380003C1800062509001400193E0000F82825F5
5184:10439000AD0500088F4E092C25E6000130C27FFFD5
5185:1043A000AD0E000C8F440930A7820058250200286A
5186:1043B000AD0400108F4D0938AD0D0014AD2B000475
5187:1043C0008F4C0940AD2C0008934309373C19080075
5188:1043D00093393B2CAD200010000347000019C400A6
5189:1043E000011858253567FFFFAD27000C03E00008D2
5190:1043F000AF4A002C3C09080095293B1C3C0D0800E5
5191:1044000095AD3B263C0C0800958C3B1894E40024A9
5192:10441000312EFFFF01AE302100CC18230004CC0068
5193:104420002462FFF20322C025240F0800AD18000CFF
5194:10443000AD0F0014AD0000100A0004F225080018AA
5195:1044400094E5002494EE00283C09080095293B1CC3
5196:1044500000056C00000E640035A68100358408005C
5197:10446000AD06000CAD0400100A0004F2250800148B
5198:104470003C09080095293B1C3C0F080095EF3B26A2
5199:104480003C06080094C63B1894E400243125FFFF45
5200:1044900094ED002801E5702101C660230004CC00E2
5201:1044A000000D1C002582FFEE006278253738810060
5202:1044B00024050800AD18000CAD0F0010AD05001864
5203:1044C000AD0000140A0004F22508001C1460FF94DB
5204:1044D0000000000094E300243C09080095293B1CDF
5205:1044E0000003140034590800AD19000C0A0004F24E
5206:1044F0002508001003E00008240201F427BDFFE8AE
5207:10450000AFB00010AFBF00140E00005C008080212F
5208:1045100024050040AF4508148F8300548F84005059
5209:104520008F85005C0070182100641023184000047F
5210:10453000AF830054AF6300548F660054AF860050C1
5211:104540001200000C000000008F440074936800818A
5212:104550003409FA002D07000710E00005008910213A
5213:10456000936C0081240B01F4018B50040144102151
5214:10457000AF62000C8F4E095C01C5682319A00004CE
5215:104580008FBF00148F4F095CAF8F005C8FBF00148A
5216:104590008FB000100A00005E27BD00188F840064F1
5217:1045A0008F8300548F820050AF640044AF6300508B
5218:1045B00003E00008AF6200543C03800034620070E6
5219:1045C0008C43000027BDFFF8308700FF30A900FFB3
5220:1045D00030C800FFAF8300308F4401780480FFFEB5
5221:1045E0003C028000345900708F380000A3A70003FC
5222:1045F0003C0708008CE700748FAC00003C06080004
5223:104600008CC60070030378233C0E7FFF00EFC821A7
5224:1046100035CDFFFF00005021018D282400CA18214C
5225:10462000000847C0032F202B00A810250064C021DC
5226:10463000AFA200003C010800AC3900743C01080046
5227:10464000AC380070934F010AA3A000023C0E80FF1B
5228:10465000A3AF00018FAC0000312B007F35CDFFFFF1
5229:10466000018D4824000B5600012A40252407300004
5230:104670002406FF803C05100027BD0008AF48014C10
5231:10468000AF470154A7400158A346015203E0000878
5232:10469000AF45017827BDFFE8AFBF0014AFB00010F1
5233:1046A0008F6500743C068000309000FF00A6202536
5234:1046B0000E00005CAF640074936300053462000870
5235:1046C0000E00005EA3620005020020218FBF0014CF
5236:1046D0008FB0001024050005240600010A0005968D
5237:1046E00027BD001827BDFFE03C038000AFB00010DD
5238:1046F000AFBF0018AFB10014346200708C470000E7
5239:10470000309000FF30A800FFAF8700308F44017861
5240:104710000480FFFE3C188000371100708E2F0000CF
5241:104720003C0D08008DAD00743C0A08008D4A0070F5
5242:1047300001E7702301AE28210000582100AE302B84
5243:10474000014B4821012638213C010800AC250074AA
5244:10475000000088213C010800AC2700701100000F08
5245:10476000000000008F6200742619FFFF3208007FEE
5246:104770000002FE0233E5007F15000006332200FF31
5247:104780002407FF800207202624A3FFFF0083802543
5248:10479000320200FF00408021241110080E00005C4E
5249:1047A000000000008F4908183125000414A0FFFD07
5250:1047B0003218007F001878C00018714001CF6821BE
5251:1047C00025AC0088AF4C0818274A09808D4B002083
5252:1047D000AF4B01448D460024AF460148A350015021
5253:1047E0000E00005EA7400158022010218FBF001864
5254:1047F0008FB100148FB0001003E0000827BD002027
5255:1048000027BDFFE8308400FFAFBF00100E0005E1B8
5256:1048100030A500FF8F8300548FBF00103445004047
5257:104820002404FF903C02100027BD0018AF43014C48
5258:10483000A3440152AF45015403E00008AF420178A0
5259:1048400027BDFFE8AFBF0014AFB000109345093F8C
5260:10485000240200063C08080095083B2230A300FF14
5261:104860002487FFD8240500041062003624060002C5
5262:10487000974E093C3C0D02040006340031CCFFFF8A
5263:10488000018D5825AC8B0000934A093E3149002028
5264:104890001120000800000000935F09363C19010355
5265:1048A0003738030033F000FF02187825240500088C
5266:1048B000AC8F000493580934934D09213C104000FB
5267:1048C000330E00FF000E608231AB00FF000C56007B
5268:1048D000000B1400014218250068F82503F0C825D4
5269:1048E000AC99FFD8935809378F4C09488F4D094030
5270:1048F00000057882330E00FF01CF5821018D282357
5271:10490000000B57000146102530A3FFFF0043402550
5272:10491000000F488001273021ACE800200E00005C29
5273:1049200024D00028240400040E00005EA364003F8D
5274:10493000020010218FBF00148FB0001003E00008A8
5275:1049400027BD00180A0006442406001227BDFFD028
5276:1049500024090010AFB50024AFB40020AFB3001C91
5277:10496000AFB10014AFB000103C010800A0293B2CEF
5278:10497000AFBF0028AFB2001897480908309400FF75
5279:104980003C02000E3107FFFF000731C0AF46002C8C
5280:10499000974409089344010B30B300FF0342802180
5281:1049A000308300300000A821106000E4000088215E
5282:1049B000240C00043C010800A02C3B2C934B093E26
5283:1049C000000B5600000A2E0304A001310000000075
5284:1049D000AF4000489352010B324F002011E0000617
5285:1049E00000000000935F093E001FCE000019C603BF
5286:1049F00007000148000000009346010B30C2004050
5287:104A0000104000038F9200548F87005424F2FFFF60
5288:104A1000960A002C9345093493490937A78A005810
5289:104A200030A600FF312700FF00071080004620213C
5290:104A30000091F8213C010800A43F3B22920300189A
5291:104A40003C010800A4203B1C3C010800A4203B18AA
5292:104A5000307000FF03F04021250B000A3170FFFF8A
5293:104A60003C010800A4283B243C010800A4283B2664
5294:104A70000E00009A020020210E0004C500402021F3
5295:104A80008F4B002C975809083C19000E0359402100
5296:104A9000330FFFFF000F71C0AF4E002C9743090882
5297:104AA000950D001A241100010040382131ACFFFFA0
5298:104AB000AC4C00008D0A001CAC4A00048D0500209F
5299:104AC000AC4500089109001931230003107100BDA5
5300:104AD0002871000216200103240C0002106C00F55E
5301:104AE000240D0003106D00CA000000003C090800FE
5302:104AF00095293B1C93430934935809213C0A08002B
5303:104B0000954A3B22306400FF950C002A0004F8828D
5304:104B1000331900FF97980058001F760000197C0099
5305:104B20003126FFFF01CF402501466821010D882570
5306:104B3000019828213C0840000228102500054C005F
5307:104B4000ACE90004ACE20000934309203C040006F9
5308:104B500024E900140003FE0003E4C825ACF90008B2
5309:104B60008F4E092C270F000131E67FFFACEE000CC1
5310:104B70008F4D0930A786005824E60028ACED0010C0
5311:104B80008F4C0938ACEC0014AD3200048F51094051
5312:104B9000AD310008934209373C05080090A53B2C35
5313:104BA000AD2000100002270000051C000083F8253E
5314:104BB00037F2FFFFAD32000CAF4B002C12A00033D8
5315:104BC000000000009352093F24150006240500044C
5316:104BD000324B00FF117500CD24090002974F093CAC
5317:104BE0003C0E020431EDFFFF01AE6025ACEC002865
5318:104BF0009351093E322200201040000800000000BE
5319:104C0000934409363C180103371F0300309900FF15
5320:104C1000033F2825ACC5000424050008935209343D
5321:104C20009343092100056082324B00FF000BA882EC
5322:104C3000306400FF0015FE000004C40003F8C8251E
5323:104C4000032A782501E87025ACCEFFD8934D0937AB
5324:104C50008F5209488F42094031B100FF022C582180
5325:104C600002423023000B1F000009AC0000754825EC
5326:104C700030C8FFFF012850250E00005CACEA002080
5327:104C8000240700040E00005EA367003F0E0000C36F
5328:104C9000020020213C05080090A53B2C30B0000309
5329:104CA0001200000F028020218F8800542509000186
5330:104CB000AF890054AF6900508F6A0054014938230E
5331:104CC00018E00002012020218F640054AF640054DA
5332:104CD0008F420074244601F4AF66000C028020214C
5333:104CE00002602821A76000680E0005E13C13100057
5334:104CF0008F8E005434540006AF4E014C8F8D004C03
5335:104D00008FBF00288FB5002431B100FF25AC000112
5336:104D1000AF8C004C8FB20018A35101528FB000101D
5337:104D2000AF5401548FB10014AF5301788FB40020F9
5338:104D30008FB3001C03E0000827BD00309359093EE3
5339:104D40000019C6000018960306420048241100020C
5340:104D500093420923304400021080FF1E8F870060B9
5341:104D60008F86005414E6FF1B000000000E00005C5C
5342:104D7000000000009365003F2408001630A900FFE2
5343:104D80001128000C240A00083C0D080091AD3B2CB2
5344:104D900035AC00013C010800A02C3B2C936B003F7C
5345:104DA000316300FF106A0065240E000A106E005E79
5346:104DB0002402000C0E00005E000000000A00069DA8
5347:104DC000000000003C09080095293B1C3C19080024
5348:104DD00097393B263C18080097183B18950E00247D
5349:104DE000313FFFFF033F782101F86823000E8C005C
5350:104DF00025ACFFF2022C502524050800244700189A
5351:104E0000AC4A000CAC4500140A0006E5AC400010AA
5352:104E10003C09080095293B1C3C18080097183B26C4
5353:104E20003C0F080095EF3B18950D00243139FFFF2A
5354:104E3000950C00280319702101CF8823000D2C0048
5355:104E4000000C54002622FFEE0142302534A48100DC
5356:104E500024030800ACE4000CACE60010ACE300183E
5357:104E6000ACE000140A0006E524E7001C3C01080041
5358:104E7000A0313B2C9343093E24150001307F0020D4
5359:104E800017E0FED4241100080A00069D2411000436
5360:104E90008F6E00848F4D094011A0FECDAF8E00545F
5361:104EA000240F00143C010800A02F3B2C0A00069C94
5362:104EB0000000000095020024950600283C09080027
5363:104EC00095293B1C0002240000061C00349F810031
5364:104ED00034790800ACFF000CACF900100A0006E5BC
5365:104EE00024E700141460FF0100000000951800245E
5366:104EF0003C09080095293B1C2447001000187C0041
5367:104F000035EE08000A0006E5AC4E000C0A00071F4B
5368:104F1000240900128F64004CAF6400548F63005466
5369:104F20000A0006A6AF630050A362003F0E00005EB9
5370:104F3000000000000A00069D00000000240200148A
5371:104F40000A0007F3A362003F27BDFFE8308400FF9B
5372:104F5000AFBF00100E0005E130A500FF9378007E82
5373:104F60009379007F936E00809368007A332F00FF5F
5374:104F700000186600000F6C0031CB00FF018D482542
5375:104F8000000B52008FBF0010012A3825310600FFA8
5376:104F90003444700000E628252402FF813C03100001
5377:104FA00027BD0018AF45014CAF440154A342015244
5378:104FB00003E00008AF43017827BDFFD8AFB2001867
5379:104FC000AFB10014AFB00010AFBF0020AFB3001CF2
5380:104FD00093420109308600FF30B000FF000618C27E
5381:104FE000320400023071000114800005305200FFCD
5382:104FF0009367000530E5000810A0000D30C80010D0
5383:10500000024020210E0005CD0220282124040001A9
5384:105010008FBF00208FB3001C8FB200188FB1001417
5385:105020008FB000100080102103E0000827BD002889
5386:105030001500003200000000934301090000282100
5387:105040003062007F000220C00002F94003E4982192
5388:1050500026790088033B98218E7800248E6F000803
5389:10506000130F0046000000008F6400842418000223
5390:105070000004FD8233F900031338007C00000000B7
5391:1050800093660083934A0109514600043205007C6F
5392:1050900010A00060000000003205007C14A0005346
5393:1050A0000240202116200006320400018E7F0024D9
5394:1050B0008F59010417F9FFD60000202132040001A6
5395:1050C0001080000A024020218F4209408F93006423
5396:1050D00010530006000000000E00067B022028216D
5397:1050E0008F430940AF630044024020210E00062890
5398:1050F000022028210A00082C240400013C09080091
5399:105100008D290064252600013C010800AC260064BE
5400:1051100016000012000000008F6D00843C0E00C0DD
5401:1051200001AE602415800005024020210E0007FA20
5402:10513000022028210A00082C240400012405000470
5403:105140000E00059624060001024020210E0007FAF9
5404:10515000022028210A00082C240400010E00003D32
5405:1051600024040001936B007D020B50250E00005EAD
5406:10517000A36A007D0A00086F8F6D00848F6600743B
5407:105180008F4801048E67002400064E021507FFB603
5408:105190003126007F936B008326440001308A007F14
5409:1051A00011460043316300FF5464FFB08F640084F4
5410:1051B0002645000130B1007F30A200FF1226000416
5411:1051C00024050001004090210A000842241100013A
5412:1051D000240FFF80024F702401CF9026324200FF3F
5413:1051E000004090210A000842241100010E00067BB5
5414:1051F00002202821321800301300FFAA321000824A
5415:10520000024020210E0005CD022028210A00082C92
5416:10521000240400018F6E00743C0F800024050003FD
5417:1052200001CF9025AF7200749371008324060001B2
5418:105230000E000596322400FF0E00003D24040001FC
5419:10524000936D007D020D60250E00005EA36C007D55
5420:105250003C0B08008D6B0054257000013C010800D8
5421:10526000AC3000540A00082C240400018F6800743C
5422:105270003C0980002405000401093825AF6700744B
5423:1052800093630083240600010E000596306400FF3E
5424:105290000E00003D240400019362007D0202982567
5425:1052A0000E00005EA373007D0A00082C2404000198
5426:1052B000324D008039AC0080546CFF6C8F640084E8
5427:1052C0000A0008952645000127BDFFD03C0A0008CA
5428:1052D000AFBF002CAFB40028AFB30024AFB20020A2
5429:1052E000AFB1001CAFB00018034AD8212409004018
5430:1052F000AF490814AF4008108F4209448F4309504A
5431:105300008F4609548F47095C8F48094C9344010824
5432:105310009345010BAF820064308400FF30A500FF8D
5433:10532000AF830054AF860050AF87005C0E000816B4
5434:10533000AF8800601440015A8FBF002CA76000683E
5435:10534000934D0900240B00503C14080026943C3077
5436:1053500031AC00FF3C12080026523C40118B000388
5437:10536000000000000000A02100009021934F0109DF
5438:105370008F8800542402001031F1007F001170C0AA
5439:105380000011694001AE282124B80088AF580818E0
5440:105390008F4A01048F4B09A43C0C000E034CC8211A
5441:1053A000014B48233C010800AC293B088F440958B5
5442:1053B0003C010800A0223B2C9746090800881823CE
5443:1053C0003C010800AC233B0C30C7FFFF0007F9C0CD
5444:1053D0003C010800AC283B30AF5F002C9742090825
5445:1053E0009730002C8E910000932F0018037898219D
5446:1053F000A7900058AF9300480220F80931F000FF51
5447:10540000304E000215C0018E30530001126001427F
5448:10541000000000008F4F09A4241300013C01080084
5449:10542000AC2F3B3493510934934E0937322500FF9A
5450:1054300031CD00FF000D60800185502101505821C1
5451:105440003C010800A42B3B243C010800A42A3B2279
5452:1054500093490934312200FF0202202124900010D8
5453:105460003C010800A4303B20240800068F9900541A
5454:105470003C010800AC283B288F9F005C8F580958DE
5455:105480000000802103F9282304A0013C03192023F4
5456:105490000480013A00A4382B10E0013C0000000019
5457:1054A0003C010800AC253B0C8E4200000040F8098E
5458:1054B000000000003046000214C000DD00408821DA
5459:1054C00030430001546000108E4200043C04080088
5460:1054D0008C843B103C09C00000898025AF500E0031
5461:1054E0008F4B0000316A00081140FFFD00000000F2
5462:1054F00097450E0824100001A78500408F4C0E042C
5463:10550000AF8C00348E4200040040F8090000000017
5464:1055100002228825322D000215A00159000000004A
5465:105520003C09080095293B183C06080094C63B241A
5466:105530003C04080094843B1A3C1908008F393B1046
5467:10554000012658213C1808008F183B343C1F0800E6
5468:1055500097FF3B2E016418218F4E09400329282113
5469:10556000246F00020319682100BF60213C0108007C
5470:10557000A42B3B26AF8E00643C010800AC2D3B34CD
5471:105580003C010800A42C3B1C0E00009A31E4FFFFF4
5472:105590008F87004C004020213C010800A0273B2DB4
5473:1055A0008E42000824E80001AF88004C0040F80952
5474:1055B000000000008F4B002C974909083C0A000EA0
5475:1055C000034A38213124FFFF000419C08F8A005498
5476:1055D000AF43002C9743090894E6001A004040218D
5477:1055E00030DFFFFFAC5F00008CF9001CAC590004F9
5478:1055F0008CF80020AC58000890EF001931E300034C
5479:10560000107300E60000000028620002144001024E
5480:10561000240C0002106C00F4240D0003106D00A790
5481:10562000000000003C09080095293B1C9345093403
5482:10563000934C09213C0F080095EF3B2230BF00FF3F
5483:1056400094EE002A001F6882319900FF978C005861
5484:10565000000D16000019C4003124FFFF01E43021C1
5485:10566000005848250126382501CC28213C0340005C
5486:1056700000E3F82500056C00AD0D0004AD1F00002F
5487:10568000935909203C180006250D001400197E00CE
5488:1056900001F87025AD0E00088F42092C2586000107
5489:1056A0008E4C000CAD02000C8F44093030C97FFFD6
5490:1056B000A7890058AD0400108F4709382504002839
5491:1056C000AD070014ADAA00048F450940ADA5000840
5492:1056D000934309373C1F080093FF3B2CADA00010FB
5493:1056E0000003C700001FCC000319782535EEFFFF2B
5494:1056F000ADAE000CAF4B002C0180F809000000009B
5495:105700003C06080094C63B263C02080094423B1A23
5496:1057100000C24821252B00020E0000C33164FFFFA8
5497:105720003C0808008D083B083C0708008CE73B104C
5498:10573000010750233C010800AC2A3B081540000635
5499:10574000000000003C0808008D083B28350A004096
5500:105750003C010800AC2A3B28120000848F830048DB
5501:105760008F470E108F900048AE0700208F4B0E1809
5502:10577000AE0B00243C10080096103B1C0E00005C91
5503:1057800000000000240F0040AF4F08148F86005423
5504:105790008F89005000D018210069702319C00004BF
5505:1057A000AF830054AF6300548F640054AF84005043
5506:1057B0001200000C000000008F44007493780081F8
5507:1057C0003419FA002F020007104000050099182133
5508:1057D000937F0081240C01F403EC680401A41821D8
5509:1057E000AF63000C8F4A095C8F88005C0148282356
5510:1057F00018A00003000000008F50095CAF90005C0F
5511:105800000E00005E000000008F8300548E470010E1
5512:105810003C010800AC233B3000E0F8090000000028
5513:105820003C0B08008D6B3B081560FF102408000638
5514:105830008F590024975F09088F8900648F8E005468
5515:105840003C0C001F978400588F8F002C8F930050C2
5516:1058500033F8FFFF358DFF80032D3024001811C071
5517:1058600032320010AF420024A5E4002CAF460024E1
5518:10587000AF690044AF6E0050AF7300545640007CD7
5519:105880008E850004322A0040554000318E91000878
5520:105890008E88000C0100F809000000008FBF002C6A
5521:1058A0008FB400288FB300248FB200208FB1001C6A
5522:1058B0008FB0001803E0000827BD00303C09080045
5523:1058C00095293B1C3C03080094633B263C040800DC
5524:1058D00094843B1894F900243125FFFF94F80028A4
5525:1058E0000065F82103E478230019640000186C00B7
5526:1058F00025EEFFEE01AE302535828100240308003D
5527:10590000AD02000CAD060010AD030018AD00001490
5528:105910000A0009B32508001C934301098F8600384B
5529:1059200000033E0000E64025AF4800808F5F09A0DD
5530:105930008F5809A4AFBF0010AF5F0E148FB90010CD
5531:10594000AF590E10AF580E1C0A00092DAF580E1893
5532:105950000220F809000000008E88000C0100F80900
5533:10596000000000000A000A508FBF002CA460002035
5534:10597000A47300220A000A05AC7300243C0108004D
5535:10598000AC203B0C0A0009538E4200003C01080089
5536:10599000AC243B0C0A0009538E4200003C0908006D
5537:1059A00095293B1C3C1F080097FF3B263C0508003F
5538:1059B00094A53B1894F800243124FFFF03E4C82188
5539:1059C0000325782300186C0025EEFFF201AE602558
5540:1059D000AC4C000C24020800AD020014AD00001015
5541:1059E0000A0009B32508001894E6002494E300286F
5542:1059F0003C09080095293B1C000624000003FC001C
5543:105A00003485810037F90800AD05000CAD19001090
5544:105A10000A0009B3250800141460FF02000000000A
5545:105A200094F800243C09080095293B1C00187C00D0
5546:105A300035EE0800AD0E000C0A0009B32508001071
5547:105A400093520109000028210E000628324400FF6D
5548:105A50008FBF002C8FB400288FB300248FB200209A
5549:105A60008FB1001C8FB0001803E0000827BD003084
5550:105A700000A0F809000000000A000A4A322A00408B
5551:105A80001200FF6B000000008F4E0E148F92004832
5552:105A9000AE4E00208F530E1C0A000A34AE53002471
5553:105AA0008F820018008040213C040100904700854F
5554:105AB00030E3002010600009000000003C070800EF
5555:105AC0008CE73B308F83001400E320230480000820
5556:105AD0009389000014E300030100202103E0000883
5557:105AE000008010213C04010003E000080080102128
5558:105AF0001120000B006738238F8C001C2409003410
5559:105B0000918B00BC316A0002514000012409003031
5560:105B100000E9682B15A0FFF10100202100E93823DE
5561:105B20002419FFFC00B9C02400F9782400F8702B78
5562:105B300015C0FFEA01E8202130C20003000218234B
5563:105B400014C00012306900030000302100A9702148
5564:105B500001C6682100ED602B1180FFE03C040100CC
5565:105B60002D2F00010006482B0105382101E93024C2
5566:105B700014C0FFDA24E4FFFC2419FFFC00B9C024A0
5567:105B80000308202103E00008008010218F8B001CF7
5568:105B900024060004916A00BC314400041480FFEC28
5569:105BA00000A970210A000AFC0000302127BDFFE88F
5570:105BB000AFBF00108F460100934A01093C1F080047
5571:105BC0008FFF00902407FF80314F00FF31E8007FF6
5572:105BD0000008614003E6C821032CC02127090120E9
5573:105BE000012770243C010800A02F3B6CAF4E080C2D
5574:105BF0003C0D08008DAD00903C0400803482000311
5575:105C000001A65821016C18212465012030AA0078D2
5576:105C100001424025AF48081C3C1F08008FFF009040
5577:105C20008F88004403E6C021331900070307482486
5578:105C3000033A7821AF49002825E909C0952E0002D2
5579:105C40003C0D08008DAD008C3C0A08008D4A009088
5580:105C500031CC3FFF01A61821000C5980006B282190
5581:105C600000A72024AF44002C952200023C1F08000E
5582:105C70008FFF008C9107008530593FFF03E67821A4
5583:105C80000019C1800146702101F8682131CC007FE4
5584:105C900031AB007F019A2821017A50213C03000C8E
5585:105CA0003C04000E00A328210144102130E600200E
5586:105CB00027470980AF820028AF880018AF890020ED
5587:105CC000AF85001C10C00006AF8700248D02005075
5588:105CD0008CA4010C0044302318C0007700000000A1
5589:105CE000910C0085240DFFDF018D3824A10700856C
5590:105CF0008F8B00188F8900208F8700248D65004CC2
5591:105D0000AF850014912F000D31EE002011C0001757
5592:105D10000000000024090001A3890000AF800008F2
5593:105D20008CE400248F850008240A0008AF8000045A
5594:105D3000AF80000C3C010800A42A3B1A3C0108007B
5595:105D4000A4203B2E0E000AD0000030218F850020B9
5596:105D50008FBF0010AF82001090A8000D27BD001863
5597:105D60000008394203E0000830E20001913F0002E0
5598:105D70002418000133F900FF00192182109800391E
5599:105D8000240800021088005B8F8600288CE5002420
5600:105D900014A0001B8F9F001C91220000240A000504
5601:105DA0003046003F10CA0047240400018F860004DB
5602:105DB000A3840000AF86000CAF8600088CE40024AA
5603:105DC0008F850008240A00083C010800A42A3B1A19
5604:105DD0003C010800A4203B2E0E000AD00000000069
5605:105DE0008F8500208FBF0010AF82001090A8000D9B
5606:105DF00027BD00180008394203E0000830E2000126
5607:105E00008CF800088CF900248FEE00C4A3800000F9
5608:105E10008CE40024AF8E00088F8500088F86000474
5609:105E200003197823240A0008AF8F000C3C010800F6
5610:105E3000A42A3B1A3C010800A4203B2E0E000AD0E5
5611:105E4000000000008F8500208FBF0010AF8200107F
5612:105E500090A8000D27BD00180008394203E0000893
5613:105E600030E20001912300003062003F104400271F
5614:105E70008F85001C8CE400241480002100000000A9
5615:105E80008D2E00183C187FFF8F85001C370FFFFFF9
5616:105E900001CF1824AF8300048F9F00048CA80084D6
5617:105EA00003E8C82B1720000203E020218CA4008403
5618:105EB0000A000B8BAF8400048CA3010C0A000B6951
5619:105EC000AF8300148D2C00188F8600043C0D7FFFDB
5620:105ED0008F89001C35A3FFFF01835824240400018F
5621:105EE000AF8B000CAD2000CCA38400000A000B9700
5622:105EF000AF8600088CCA00140A000B8BAF8A00041E
5623:105F00008CA300C80A000BCEAF8300048F84002846
5624:105F10008CAC00648C8D0014018D582B1160000432
5625:105F2000000000008CA200640A000BCEAF820004C7
5626:105F30008C8200140A000BCEAF8200048F8500080B
5627:105F400027BDFFE0AFBF0018AFB1001414A00007D9
5628:105F5000AFB000108F8600202402000590C400001E
5629:105F60003083003F106200B68F84001C8F910004C4
5630:105F700000A080218F8C00243C0508008CA53B0CE0
5631:105F80008D8B000431663FFF00C5502B554000014A
5632:105F900000C02821938D000011A0007300B0F82BE1
5633:105FA0008F98001C24040034930F00BC31EE0002D3
5634:105FB00051C000012404003000A4C82B172000D1D8
5635:105FC0000000000000A4282300B0F82B3C010800CA
5636:105FD000A4243B1817E00068020020213C030800BD
5637:105FE0008C633B080083102B544000010080182173
5638:105FF0008F8800203C010800AC233B1000004821A2
5639:106000009104000D30830020506000018F490E186C
5640:106010008F8300100123382B10E00059000000008E
5641:106020003C0408008C843B1000895821006B502BE5
5642:10603000114000560090602B0069302300C02021E1
5643:106040003C010800AC263B1012000003241FFFFC9B
5644:106050001090008A32270003009FC8243C010800EA
5645:10606000AC393B103C010800A4203B2E8F84000873
5646:10607000120400078F83001CAF910004020020214E
5647:106080008C7100CCAF90000826300001AC7000CCC1
5648:106090003C0208008C423B108F8A000C2407001839
5649:1060A0000082202301422823AF84000810800002D0
5650:1060B000AF85000C240700108F8600183C010800F3
5651:1060C000A0273B2C2407004090CC0085318B00C0DA
5652:1060D000116700408F8D001014A0001500002021D2
5653:1060E000934A01098F420974314500FF00022602DC
5654:1060F00024A300013090007F3071007F1230007ABD
5655:106100002407FF80A0C300833C0908008D293B2899
5656:106110008F880020240D0002352C00083C01080067
5657:10612000A02D3B6D3C010800AC2C3B282404001042
5658:10613000910E000D31C6002010C00005008018210E
5659:10614000240800013C010800AC283B103483000106
5660:106150008FBF00188FB100148FB0001000601021A5
5661:1061600003E0000827BD00203C010800A4203B18E4
5662:1061700013E0FF9A020020210A000C1F00A020213A
5663:106180003C0408008C843B100090602B1180FFAE13
5664:10619000000000003C0F080095EF3B1801E470215F
5665:1061A00001C6682B11A000072C8200043C1F600070
5666:1061B0008FF954043338003F1700FFE524030042F1
5667:1061C0002C8200041040FFA0240300420A000C7D32
5668:1061D0008FBF0018152DFFC0000000008CDF007479
5669:1061E0003C0380002405FF8003E3C825ACD900747C
5670:1061F00090D80085240E000424040010330F003FC3
5671:1062000001E54025A0C800858F8800203C010800DA
5672:10621000A02E3B6D240300019106000D30C9002023
5673:1062200015200003000000003C0308008C633B10B5
5674:106230003C010800AC233B080A000C74000000007D
5675:106240008F87000C8C88008400E8282B14A00002A3
5676:1062500000E088218C91008424090001A3890000BA
5677:106260008F440E18022028210E000AD0022030216F
5678:10627000022080210A000C05AF82001000071823BD
5679:10628000306600033C010800A4263B2E12200005C6
5680:106290008F8C001C918B00BC316A000415400015E6
5681:1062A00024CD00043C0F080095EF3B2E01E4702143
5682:1062B00000AE302B50C0FF6E8F8400082C85000587
5683:1062C00014A0FFA32403004230980003170000022B
5684:1062D000009818232483FFFC3C010800AC233B10EA
5685:1062E0000A000C410000000000A758240A000C69B5
5686:1062F000016718263C010800A42D3B2E0A000CD192
5687:10630000000000003C010800AC203B100A000C7C9F
5688:10631000240300428F83000C14600007000010214A
5689:106320008F880020240500059106000030C400FF7E
5690:10633000108500030000000003E0000800000000DA
5691:10634000910A0018314900FF000939C214E0FFFA30
5692:106350008F8500183C04080094843B183C03080017
5693:106360008C633B303C1908008F393B103C0F080010
5694:1063700095EF3B2E0064C0218CAD005403197021B1
5695:1063800001CF6021018D58231960001D000000001D
5696:10639000910E001C8F8C0028974B0E1031CD00FF02
5697:1063A0008D850004016D30238D88000030CEFFFF05
5698:1063B000000E510000AAC821000038210107202149
5699:1063C000032A182B0083C021AD990004AD9800006A
5700:1063D000918F000A01CF6821A18D000A8F880028C3
5701:1063E000974B0E12A50B0008950A003825490001AD
5702:1063F000A50900389107000D34E60008A106000D3C
5703:1064000003E000080000000027BDFFE093870000C4
5704:106410008F8F00208FAD00143C0E7FFF8F89000806
5705:1064200035C8FFFFAFBF001CAFB0001801A818248B
5706:1064300091EA000D000717C03C1FBFFF00625825FE
5707:106440002D2E00018F90001437F9FFFF3C18080033
5708:106450008F183B303C0F080095EF3B2601796824EC
5709:10646000000E47803C07EFFF3C05F0FF01A8182510
5710:106470003149002034E2FFFF34ACFFFF0310582302
5711:1064800027A500102406000225EA00020062182455
5712:106490000080802115200002000040218F480E1C42
5713:1064A000A7AA0012056000372407000030FF00FF94
5714:1064B000001FCF008F8B001800793825AFA700147C
5715:1064C000916F00853C08080091083B2D3C18DFFFC8
5716:1064D00031EE00C0370AFFFF000E182B3C1F0800EA
5717:1064E00097FF3B2000EA6824A3A80011000317408F
5718:1064F00001A248258FB90010AFA900143C0A08007A
5719:10650000914A3B2FA7BF00168FA80014032CC0246C
5720:106510003C0B01003C0F0FFF030B18253147000314
5721:1065200035EEFFFF010C682400071600006EF8240A
5722:106530003C09700001A2C82503E95825AFB9001431
5723:10654000AFAB00100E000072A3A000158F8C0020CE
5724:10655000260200089186000D30C40020108000063D
5725:106560008FBF001C3C05080094A53B1C24B0FFFF16
5726:106570003C010800A4303B1C8FB0001803E0000869
5727:1065800027BD00208F9800100118502B5540FFC7E1
5728:10659000240700010A000D5430FF00FF9382000021
5729:1065A00027BDFFE0AFBF00181040000F0080502152
5730:1065B0008F880020240B00058F89000491070000BC
5731:1065C0008F84001C0100282130E3003F8F860028C3
5732:1065D000106B000800003821AFA900100E0004392C
5733:1065E000AFAA0014A38000008FBF001803E00008CA
5734:1065F00027BD00208D1900183C0F08008DEF3B10BF
5735:106600008F98000C3C027FFF8D080014345FFFFF61
5736:10661000033F682401F8702101AE6023018838210E
5737:10662000AFA900100E000439AFAA00140A000DA291
5738:10663000A38000008F8700203C05080094A53B2E16
5739:106640003C0208008C423B2890E6000D0005240027
5740:1066500030C300201060002C004440258F850018B6
5741:1066600000006021240B000190A300850000482158
5742:10667000240A00013C0F800035EE00708DC7000039
5743:10668000AF8700308F5801780700FFFE3C03800081
5744:10669000347900708F3800003C0508008CA5007428
5745:1066A0003C0D08008DAD00700307782300AF382142
5746:1066B0000000102100EF302B01A2202100861821BC
5747:1066C0003C010800AC2700743C010800AC230070BA
5748:1066D000AF4B01483C1908008F393B30A7490144B2
5749:1066E000A74A0146AF59014C3C0B0800916B3B2D6A
5750:1066F000A34B0152AF4801543C081000A74C01586D
5751:1067000003E00008AF4801788F4B0E1C3C0A0800DC
5752:106710008D4A3B1097490E16974D0E140145602186
5753:10672000312AFFFF0A000DC531A9FFFF8F8300202A
5754:106730009064000D3082002010400029000000000D
5755:106740000000482100005021000040213C0780004B
5756:1067500034EB00708D670000AF8700308F4C0178FC
5757:106760000580FFFE3C0D800035AC00708D8B000075
5758:106770003C0508008CA500743C0408008C84007063
5759:106780000167302300A678210000102101E6C82B04
5760:106790000082C021031970213C010800AC2F007455
5761:1067A0003C010800AC2E0070AF4901483C0D0800C8
5762:1067B0008DAD3B30A748014424090040A74A01465B
5763:1067C0003C081000240AFF91AF4D014CA34A01522E
5764:1067D000AF490154A740015803E00008AF480178D1
5765:1067E0008F490E1897460E1297450E1030CAFFFFBC
5766:1067F0000A000DFB30A8FFFF8F83002027BDFFF8A4
5767:106800009064000D308200201040003A000000002B
5768:10681000240B000100004821240A00013C088000EC
5769:10682000350700708CE30000AF8300308F4C017897
5770:106830000580FFFE3C0E80003C04080090843B6C09
5771:1068400035C700708CEC00003C0508008CA5007476
5772:10685000A3A400033C1908008F3900708FAD00001D
5773:106860000183302300A63821000010210322782163
5774:1068700000E6C02B01F8602101AE4025AFA8000062
5775:106880003C010800AC2700743C010800AC2C0070EF
5776:106890009346010A3C04080090843B6DA3A00002CB
5777:1068A000A3A600018FA300003C0580FF3099007F64
5778:1068B00034A2FFFF006278240019C60001F8702599
5779:1068C000240D3000AF4E014C27BD0008AF4D0154E0
5780:1068D000A7400158AF4B0148A7490144A74A0146C8
5781:1068E0003C091000240AFF80A34A015203E000087B
5782:1068F000AF4901788F4B0E1897460E1297450E1030
5783:1069000030CAFFFF0A000E2F30A9FFFF8F85001845
5784:106910002402008090A40085308300C0106200052E
5785:106920008F86001C8F8800048F870008ACC800C8C1
5786:10693000ACC700C403E00008000000003C0A0800E7
5787:10694000254A37CC3C090800252938983C0808001E
5788:1069500025082C4C3C07080024E739AC3C0608000D
5789:1069600024C6363C3C05080024A533B43C0408008A
5790:1069700024842FDC3C030800246336D43C02080046
5791:10698000244234A83C010800AC2A3C383C010800F1
5792:10699000AC293C343C010800AC283C303C010800E8
5793:1069A000AC273C3C3C010800AC263C4C3C010800B8
5794:1069B000AC253C443C010800AC243C403C010800B0
5795:1069C000AC233C503C010800AC223C4803E00008EA
5796:0469D00000000000C3
5797:00000001FF
5798/*
5799 * This file contains firmware data derived from proprietary unpublished
5800 * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
5801 *
5802 * Permission is hereby granted for the distribution of this firmware data
5803 * in hexadecimal or equivalent format, provided this copyright notice is
5804 * accompanying it.
5805 */
diff --git a/firmware/bnx2/bnx2-mips-09-4.6.17.fw.ihex b/firmware/bnx2/bnx2-mips-09-4.6.17.fw.ihex
new file mode 100644
index 000000000000..7667c663e50d
--- /dev/null
+++ b/firmware/bnx2/bnx2-mips-09-4.6.17.fw.ihex
@@ -0,0 +1,5816 @@
1:10000000080000F80800000000004AC8000000C80E
2:1000100000000000000000000000000008004AC8C6
3:100020000000003000004B90080000800800000035
4:10003000000053A800004BC0080055400000008499
5:1000400000009F68080053A80000016C00009FECAE
6:10005000080031D808000000000079080000A1580D
7:100060000000000000000000000000000800790807
8:100070000000012400011A60080004880800040040
9:10008000000013A400011B84000000000000000019
10:1000900000000000080017A40000000400012F2841
11:1000A000080000980800000000003AFC00012F2C16
12:1000B00000000000000000000000000008003AFC02
13:0800C0000000003000016A2875
14:0800C8000A00003E00000000E8
15:1000D000000000000000000D636F6D342E362E31DD
16:1000E00036000000040610020000000000000003BB
17:1000F00000000014000000320000000300000000B7
18:1001000000000000000000000000000000000000EF
19:1001100000000010000001360000EA60000000014D
20:1001200000000000000000000000000000000008C7
21:1001300000000000000000000000000000000000BF
22:1001400000000000000000000000000000000000AF
23:10015000000000000000000000000000000000009F
24:10016000000000020000000000000000000000008D
25:10017000000000000000000000000000000000007F
26:10018000000000000000000000000010000000005F
27:10019000000000000000000000000000000000005F
28:1001A000000000000000000000000000000000004F
29:1001B000000000000000000000000000000000003F
30:1001C0000000000010000003000000000000000D0F
31:1001D0000000000D3C02080024424B203C030800B4
32:1001E00024634C18AC4000000043202B1480FFFD1A
33:1001F000244200043C1D080037BD9FFC03A0F021F1
34:100200003C100800261000F83C1C0800279C4B20DE
35:100210000E000273000000000000000D27BDFFE883
36:100220003C028000AFB00010AFBF0014345001009A
37:10023000920200091040001A240300013C02080049
38:100240008C42002010400016000018210E000D7195
39:1002500000000000960300083C06080094C64BFE10
40:100260008E0400188F82002C9605000C00031C00E1
41:1002700000661825AC440000AC45000424040001CD
42:10028000AC400008AC40000CAC400010AC40001486
43:10029000AC4000180E000D98AC43001C0000182163
44:1002A0008FBF00148FB000100060102103E0000821
45:1002B00027BD001827BDFFE8AFBF00103C0280003B
46:1002C0009442010830437000240220001062000AAA
47:1002D00028642001548000128FBF001024024000C7
48:1002E00010620008240260001062000A8FBF001034
49:1002F0000A000097000010218FBF00100A0000556F
50:1003000027BD00180E000433000000000A0000960C
51:100310008FBF00100E000C81000000008FBF001086
52:100320000000102103E0000827BD00183C0208006F
53:100330008C42002027BDFFE810400028AFBF00100E
54:100340000E000D71000000003C05800094A2010821
55:1003500094A3010C8F86002C3042003E3063FFFFD7
56:100360000002140000431025ACC200008CA2010062
57:100370003C07080094E74BFE8FBF0010ACC200049E
58:1003800094A3011694A4010E3C02200000031C005B
59:100390003084FFFF00641825ACC3000800E2382554
60:1003A00094A2011094A3011224040001000214007D
61:1003B0003063FFFF00431025ACC2000C94A201146F
62:1003C00027BD00183042FFFFACC20010ACC00014C3
63:1003D000ACC000180A000D98ACC7001C8FBF0010FD
64:1003E00003E0000827BD00183C0680008CC202B85C
65:1003F0002403000104410008008028213C02080079
66:100400008C420060244200013C010800AC220060E4
67:1004100003E00008006010218C8300209482001605
68:10042000ACC302802442FFFCA4C202843C02080048
69:100430008C42005C8C84000494A3000E24420001D2
70:100440003C010800AC22005C3C021000A4C3028600
71:10045000ACC4028800001821ACC202B803E0000856
72:10046000006010213C0208008C42002027BDFFE8FC
73:100470001040002BAFBF00100E000D7100000000F7
74:100480003C05800094A2010894A3010C8F86002CE7
75:100490003042003E3063FFFF00021400004310258D
76:1004A000ACC200008CA201003C07080094E74BFEA0
77:1004B0008FBF0010ACC2000494A3011694A4010ED7
78:1004C0003C02200000031C003084FFFF006418255C
79:1004D000ACC3000800E2382594A2011094A30112D5
80:1004E00024040001000214003063FFFF00431025C4
81:1004F000ACC2000C94A2011427BD00183042FFFFCB
82:10050000ACC200108CA20118ACC2001490A2010B66
83:10051000304200FFACC200180A000D98ACC7001CA6
84:100520008FBF001003E0000827BD001827BDFFE0C3
85:10053000AFB000103C108000AFB20018AFBF001C7D
86:10054000AFB10014361201009243000B2402001ACE
87:10055000965100081462005B00002821322200013D
88:1005600010400018000000008E42000000022340EE
89:100570003C02003F3442FFFF0044102B10400004B7
90:100580003C030040964200140A00013B00832021F6
91:100590008E030100240201005462000696420014FA
92:1005A0003C028008944200043042000F0002250003
93:1005B0009642001400821025AE0200800A00016FEE
94:1005C000000000003C0208008C420020104000287F
95:1005D000000000000E000D710000000096020108EE
96:1005E0009603010C8F85002C3042003E3063FFFFE4
97:1005F0000002140000431025ACA200008E0201008E
98:100600003C06080094C64BFEACA2000496030116FB
99:100610009604010E3C02200000031C003084FFFF02
100:1006200000641825ACA3000800C230259602011012
101:100630009603011224040001000214003063FFFF3E
102:1006400000431025ACA2000C960201143042FFFFBB
103:10065000ACA200108E020118ACA200149202010B91
104:10066000304200FFACA200180E000D98ACA6001C92
105:100670003C0208008C420040244200013C0108007A
106:10068000AC2200403C0308008C630044322200028C
107:1006900032240004246300013C010800AC23004420
108:1006A000108000080002282B024020218FBF001C70
109:1006B0008FB200188FB100148FB000100A0000C86C
110:1006C00027BD00208FBF001C8FB200188FB100140F
111:1006D0008FB0001000A0102103E0000827BD00200B
112:1006E00027BDFFE03C058000AFB10014AFBF00188C
113:1006F000AFB0001034B101009223000B24020003BC
114:1007000014620043963000083202000110400016C7
115:100710003C02003F8E2300003442FFFF00032340D1
116:100720000044102B504000052402010096220014C2
117:100730003C0300400A0001A400832021546200060B
118:10074000962200143C028008944200043042000FBC
119:10075000000225009622001400821025ACA2008021
120:100760000A0001AF000000000E0000990000000028
121:100770003C0208008C420040244200013C01080079
122:10078000AC2200403C0208008C42004432030004CA
123:10079000244200013C010800AC2200441060000724
124:1007A00032020002022020218FBF00188FB10014F6
125:1007B0008FB000100A0000C827BD002010400015AF
126:1007C0008FBF00183C0480008C8301043C02602031
127:1007D000AC4300148C420004240301FE304203FFAA
128:1007E0001443000C8FBF00188C820100000219C254
129:1007F0002462FFFC2C420008104000032404000285
130:100800002462FFFD004420043C026000AC446914F3
131:100810008FBF00188FB100148FB00010000010219E
132:1008200003E0000827BD00203C0480008C83010009
133:1008300024020100506200033C0280080000000D09
134:100840003C02800894430004000010213063000F34
135:1008500000031D0003E00008AC8300803C02800818
136:10086000344200809042000003E00008AF800000A6
137:1008700003E000080000102127BDFFE83C028000D3
138:10088000AFBF0014AFB000108C430100AC43002098
139:100890008C430104AC4300A89050010B0E0001E50D
140:1008A000321000FF3C02080024424B580010188010
141:1008B0002E10001D16000005006210210E0001EA36
142:1008C000004018210A000205000000008C420000D0
143:1008D0000040F80900000000004018213C02080018
144:1008E0008C42003410600005244400013C0280006A
145:1008F0008C4301043C026020AC4300148FBF001401
146:100900008FB000103C0340003C02800027BD00185F
147:10091000AC4301383C010800AC24003403E000087B
148:100920000000000027BDFFE8AFBF0014AFB000100B
149:100930003C1080008E0201400E0001E5AE02002056
150:100940000E000399000000003C04080024840038D5
151:100950008C8200003C034000AE0301788FBF00147E
152:100960008FB000102442000127BD001803E00008EA
153:10097000AC82000027BDFFE8AFB00010AFBF00148D
154:100980003C1080008E0201800E0001E5AE020020C6
155:100990008E03018024020F00546200083C0280088C
156:1009A0008E0201883C0300E03042FFFF0043102527
157:1009B000AE0200800A00024A3C02800034420080FD
158:1009C0009042000024030050304200FF144300080E
159:1009D0003C0280000E000379000000001440000477
160:1009E0003C0280000E000967000000003C0280000D
161:1009F0003C034000AC4301B83C0208008C42003C80
162:100A00008FBF00148FB00010244200013C01080089
163:100A1000AC22003C03E0000827BD001803E00008FA
164:100A2000000010213C05800034A4010094820008DD
165:100A30003043000230420004104000030000000078
166:100A40000A0000C800000000106000052404000136
167:100A50003C0208008C4200840A00026F244200011C
168:100A60008CA301048F82000C104300080000202199
169:100A70008CA301043C0208008C420084AF83000C6C
170:100A8000244200013C010800AC22008403E000087D
171:100A90000080102127BDFFE83C036010AFBF0014A9
172:100AA000AFB000108C6550002402FF7F3C04800032
173:100AB00000A2282434A5380C24020037AC6550006D
174:100AC000AC82000824020C80AC8200243C060800A2
175:100AD00024C607A83C02080024424B582405001CE9
176:100AE00024A5FFFFAC46000004A1FFFD2442000442
177:100AF0003C020800244201EC3C010800AC224B609F
178:100B00003C020800244206183C010800AC224B6459
179:100B10003C02080024420D103C010800AC224BA00E
180:100B20003C020800244204643C0308002463095486
181:100B30003C0408002484095C3C05080024A52C948E
182:100B40003C010800AC224BC03C0208002442076074
183:100B50003C010800AC264BA83C010800AC254BB476
184:100B60003C010800AC234BBC3C010800AC244BC446
185:100B70003C010800AC224BC83C010800AC234B5C94
186:100B80003C010800AC204B683C010800AC204B6CD9
187:100B90003C010800AC204B703C010800AC204B74B9
188:100BA0003C010800AC204B783C010800AC204B7C99
189:100BB0003C010800AC204B803C010800AC244B8475
190:100BC0003C010800AC204B883C010800AC204B8C59
191:100BD0003C010800AC204B903C010800AC204B9439
192:100BE0003C010800AC204B983C010800AC264B9C13
193:100BF0003C010800AC264BA43C010800AC204BACE7
194:100C00003C010800AC254BB03C010800AC234BB8BC
195:100C10000E00055A000000003C02800034420070C3
196:100C20008C420000AF8200103C0308008C6300205F
197:100C30008F820004104300043C0580000E000D3735
198:100C4000AF8300043C05800034A900708D280000AB
199:100C50008F8400103C0708008CE700BC3C060800AD
200:100C60008CC600B8010420230000102100E43821C4
201:100C700000C2302100E4202B00C430213C010800D8
202:100C8000AC2700BC3C010800AC2600B88CB00000CA
203:100C9000320200071040FFE4AF8800108D260000EC
204:100CA0003C0508008CA500BC3C0408008C8400B8FE
205:100CB00000C8302300A628210000102100A6302BF8
206:100CC0000082202100862021320700013C0108001B
207:100CD000AC2500BC3C010800AC2400B810E00004C6
208:100CE000320200020E0001EC00000000320200029D
209:100CF00010400004320200040E0002170000000041
210:100D0000320200045040FFC53C0280000E00022B5E
211:100D1000000000000A0002D53C0280003C02900066
212:100D200034420001008220253C028000AC440020B7
213:100D30003C0380008C6200200440FFFE00000000A5
214:100D400003E00008000000003C0280003443000182
215:100D50000083202503E00008AC44002027BDFFE00D
216:100D6000AFB10014AFB0001000808821AFBF0018F1
217:100D70000E00031530B000FF8F83FFAC022020214E
218:100D80009062002502028025A07000258C7000185A
219:100D90003C0280000E000320020280241600000A9C
220:100DA0008FBF00183C0380008C6201F80440FFFEF6
221:100DB00024020002AC7101C0A06201C43C02100018
222:100DC000AC6201F88FBF00188FB100148FB0001013
223:100DD00003E0000827BD002027BDFFB8AFBF0044D7
224:100DE000AFB000403C0780008CE601048F82FFA872
225:100DF000AFA600288C450020AFA5002C8C44003CF9
226:100E0000AFA400308C430040AFA300348C42004CB0
227:100E1000AFA60010AFA50014AFA20020AFA200380B
228:100E20003C0208008C420020AFA40018AFA3001CB5
229:100E30008CF00100104000198FBF00440E000D71AE
230:100E4000000000008F83002C3C05080094A54BFE99
231:100E50003C024018AC70000000A228258FA20010B0
232:100E600024040001AC6200048FA20014AC620008EC
233:100E70008FA20018AC62000C8FA2001CAC620010A4
234:100E80008FA20020AC6200148FA20024AC62001874
235:100E90000E000D98AC65001C8FBF00448FB0004061
236:100EA0000000102103E0000827BD004827BDFFE82F
237:100EB000AFBF00103C038000946201843042020006
238:100EC00010400005000020210E000FE3000000008C
239:100ED0000A00038F240400018C6201880440000A88
240:100EE0008FBF00108C6201883C03FF000043102478
241:100EF0003C03040014430004240400018F82FFAC6F
242:100F0000904200088FBF00100080102103E000080D
243:100F100027BD00188F82FFB024050001A040001AF1
244:100F20003C0280000A0003258C44014027BDFFE0FD
245:100F3000AFB100148F91FFACAFBF001CAFB200186F
246:100F4000AFB000109222000024030020304200FFC6
247:100F50001043000C3C028000922200002403003069
248:100F6000304200FF104300073C0280009222000044
249:100F700024030050304200FF144300818FBF001C47
250:100F80003C02800090420148304200FF2443FFFFB2
251:100F90002C6200051040007A8FBF001C00031080F7
252:100FA0003C03080024634AD8004310218C4200000F
253:100FB00000400008000000003C1180008E24014029
254:100FC0000E0003158F92FFAC8E50000C8E22014450
255:100FD0001602000224020001AE42000C0E000320A3
256:100FE0008E2401408E220144145000068FBF001C45
257:100FF0008FB200188FB100148FB000100A000F518B
258:1010000027BD00208E42000C0A00042700000000CB
259:10101000962200103C0480008C8301443042FFFF84
260:10102000146200090000000024020001A622001042
261:101030008C820140AC8202003C021000AC8202387B
262:101040000A00042E8FBF001C962200100A000427FD
263:10105000000000009222000024030020304200FF24
264:101060001443000B3C128000962200123C038000C7
265:101070008C6301443042FFFF14620018000000003E
266:1010800024020001A62200120A0004008FBF001CE7
267:101090008E4401400E00031500000000962200124D
268:1010A0008E4301443050FFFF16030002240200016A
269:1010B000A62200120E0003208E4401408E420144FD
270:1010C000160200068FBF001C8FB200188FB10014EB
271:1010D0008FB000100A00039327BD00209622001253
272:1010E0000A00042700000000962200143C03800040
273:1010F0008C6301443042FFFF1462000900000000CD
274:1011000024020001A62200148FBF001C8FB2001819
275:101110008FB100148FB000100A00126827BD0020A4
276:10112000962200140A0004270000000096220016F0
277:101130003C0380008C6301443042FFFF14620008CE
278:1011400024020001A62200168FBF001C8FB20018D7
279:101150008FB100148FB000100A000B0B27BD0020C8
280:1011600096220016144000068FBF001C3C020800A7
281:101170008C420070244200013C010800AC22007047
282:101180008FB200188FB100148FB0001003E0000878
283:1011900027BD002027BDFFE03C028000AFB1001456
284:1011A000AFBF001CAFB20018AFB000103451010047
285:1011B000922300098C5001002402001F106200AA33
286:1011C0002862002010400018240200382862000A1B
287:1011D0001040000C2402000B286200081040002C74
288:1011E0000000000004600100286200021440002892
289:1011F00024020006106200268FBF001C0A00054A68
290:101200008FB20018106200602862000B144000F7D3
291:101210008FBF001C2402000E106200778FB20018EE
292:101220000A00054A00000000106200D3286200395D
293:101230001040000A2402008024020036106200E3FD
294:1012400028620037104000C524020035106200D823
295:101250008FBF001C0A00054A8FB200181062002DD3
296:101260002862008110400006240200C824020039D0
297:10127000106200C98FBF001C0A00054A8FB2001817
298:10128000106200A28FBF001C0A00054A8FB200182E
299:101290003C0208008C420020104000D48FBF001C8C
300:1012A0000E000D71000000003C028000344201007D
301:1012B0008C4400008F83002C944700083C050800F4
302:1012C00094A54BFEAC6400008C44000400073C0075
303:1012D00000E53825AC6400048C4400189446000CEA
304:1012E000AC6400088C45001C000634002404000196
305:1012F000AC65000C9042000A00C23025AC660010BC
306:10130000AC600014AC600018AC67001C0A00050C4F
307:101310008FBF001C3C0208008C420020104000B32C
308:101320008FBF001C0E000D71000000009624000805
309:101330003C03080094634BFE9625000C0004220237
310:101340009626000E8F82002C0004260000832025A4
311:1013500000052C003C03008000A6282500832025E2
312:10136000AC400000AC400004AC400008AC40000CB5
313:10137000AC450010AC400014AC400018AC44001C5C
314:101380000A00050B240400019622000C14400017EB
315:101390008F91FFAC922200053042001014400013E0
316:1013A000000000000E00031502002021922200051B
317:1013B00002002021344200100E000320A22200056A
318:1013C0009222000024030020304200FF10430086D8
319:1013D000020020218FBF001C8FB200188FB10014B3
320:1013E0008FB000100A00104C27BD00200000000D37
321:1013F0000A0005498FBF001C3C0208008C420020F7
322:101400001040007A8FBF001C0E000D71000000001C
323:101410008E2200048F83002C9624000C3C050800CB
324:1014200094A54BFEAC6200003C0280089442002C64
325:10143000000424003042FFFF008220253C02400EC1
326:1014400000A22825AC640004AC600008AC60000C6D
327:10145000AC600010AC600014AC600018AC65001CFF
328:101460000A00050B240400010E00031502002021D0
329:101470008F92FFB0020020210E000320A640000C36
330:10148000020020210E000325240500013C02080073
331:101490008C420020104000558FBF001C0E000D71C3
332:1014A000000000009622000C8F83002C8F84FFAC7C
333:1014B00000021400AC700000AC620004AC600008D4
334:1014C0008C8200383C05080094A54BFEAC62000CF1
335:1014D0008C86003C3C02401F00A22825AC66001010
336:1014E0008E42000424040001AC620014AC600018B9
337:1014F000AC65001C8FBF001C8FB200188FB10014A8
338:101500008FB000100A000D9827BD00208F82FFAC1D
339:101510002403002090420000304200FF10430033BB
340:101520008FBF001C0E000F37000000001040002F7E
341:101530008FBF001C3C0380008C6201F80440FFFE5A
342:1015400024020002AC7001C0A06201C43C02100081
343:10155000AC6201F80A0005498FBF001C020020217F
344:101560008FBF001C8FB200188FB100148FB0001015
345:101570000A000E8027BD00209625000C02002021C5
346:101580008FBF001C8FB200188FB100148FB00010F5
347:101590000A000EA527BD0020020020218FB20018EE
348:1015A0008FB100148FB000100A000ED027BD0020AC
349:1015B0009225000D020020218FB200188FB1001477
350:1015C0008FB000100A000F2127BD0020020020214B
351:1015D0008FBF001C8FB200188FB100148FB00010A5
352:1015E0000A000EF827BD00208FBF001C8FB2001824
353:1015F0008FB100148FB0001003E0000827BD002059
354:101600003C0380008C6202780440FFFE240200024A
355:10161000AC640240A06202443C02100003E00008F7
356:10162000AC620278000411C003E0000824420240CA
357:10163000A380001803E00008A38000193C03800089
358:101640008C6202780440FFFE8F82001CAC62024074
359:1016500024020002A06202443C02100003E00008E1
360:10166000AC62027803E000080000000090830030C4
361:1016700024020005008040213063003F0000482123
362:1016800014620005000050219082004C9483004EAB
363:10169000304900FF306AFFFFAD00000CAD000010C4
364:1016A000AD000024950200148D05001C8D04001867
365:1016B0003042FFFF0049102300021100000237C32F
366:1016C000004038210086202300A2102B0082202316
367:1016D00000A72823AD05001CAD040018A5090014BF
368:1016E000A5090020A50A001603E00008A50A0022AB
369:1016F00003E000080000000027BDFFD8AFB20018CB
370:101700003C128008AFB40020AFB3001CAFB100148E
371:10171000AFBF0024AFB00010365101009222000C80
372:101720003C140800929400F7304300FF24020001AB
373:1017300010620031008098212402000214620034FB
374:10174000365000800E001242000000009204004C4F
375:101750000E0005573084007F026210212403FF80B1
376:10176000004318243C048000AC8300949245000898
377:101770009204004C3042007F3C0380061485000731
378:10178000004380212402FFFFA22200112402FFFF58
379:10179000A62200120A0005BA2402FFFF96020020CA
380:1017A000A222001196020022A62200128E0200241C
381:1017B0003C048008AE2200143485008090A2004CC6
382:1017C00034830100A06200108CA2003CAC620018BF
383:1017D0008C820068AC6200E48C820064AC6200E041
384:1017E0008C82006CAC6200E824020001A0A20068B8
385:1017F0000A0005D63C0480080E00125B00000000C1
386:1018000036420080A04000680A0005D63C048008EB
387:10181000A2000068A20000690A0006123C028008CB
388:10182000348300808C62003834850100AC62006C27
389:1018300024020001A062006990A200C59083000804
390:10184000305100FF3072007F1232001B3C088008CC
391:101850000E00055702202021026210212403FF8080
392:10186000004318243C048000AC8300943042007F85
393:101870003C038006004380218E02000C1040000DC6
394:10188000020020210E000569000000002622000150
395:10189000305100FF9203003C023410260002102B4E
396:1018A000000210233063007F022288240A0005E032
397:1018B000A203003C3C088008350401008C8200D063
398:1018C00035070080ACE2003C8C8200D0AD02000005
399:1018D00090E5004C908600C590E3004C908400C5D4
400:1018E0002402FF8000A228243063007F308400FFA0
401:1018F00000A628250064182A1060000230A500FF09
402:1019000038A50080A0E5004CA10500093C02800834
403:101910009043000E344400803C058000A043000A40
404:101920008C8300183C027FFF3442FFFF00621824C2
405:10193000AC8300188CA201F80440FFFE00000000F8
406:10194000ACB301C08FBF00248FB400208FB3001C44
407:101950008FB200188FB100148FB000102402000263
408:10196000A0A201C427BD00283C02100003E000082B
409:10197000ACA201F890A2000027BDFFE0AFB20018B2
410:1019800024420001A0A200003C0308008C6300F484
411:10199000304200FFAFB10014AFBF001CAFB0001069
412:1019A00000A088211443000200809021A0A0000024
413:1019B0000E000557922400008F90001C2403FF8026
414:1019C00002021021004310243C038000AC6200247A
415:1019D0000E00055792240000020280213210007F81
416:1019E0003C02800A02028021AE5000008FBF001C22
417:1019F0008FB200188FB100148FB0001003E0000800
418:101A000027BD002094820006908300058C85000C81
419:101A10008C8600108C8700188C88001C8C84002019
420:101A20003C010800A4224BD23C010800A0234BD16A
421:101A30003C010800AC254BD83C010800AC264BDC2F
422:101A40003C010800AC274BE43C010800AC284BE803
423:101A50003C010800AC244BEC03E00008000000004F
424:101A60003C028008344201008C4400343C03800076
425:101A700034650400AC6400388C420038AF85003017
426:101A8000AC62003C3C020005AC620030000000008B
427:101A90000000000003E00008000000003C02000617
428:101AA000308400FF008220253C028000AC440030DE
429:101AB0000000000000000000000000003C03800067
430:101AC0008C620000304200101040FFFD34620400C0
431:101AD00003E00008AF82003094C200003C08080018
432:101AE000950800CA30E7FFFF00804821010210215D
433:101AF000A4C2000094C200003042FFFF00E2102B9D
434:101B000054400001A4C7000094A200003C03080058
435:101B10008C6300CC24420001A4A2000094A2000027
436:101B20003042FFFF144300073C0280080107102BDE
437:101B3000A4A000005440000101003821A4C7000007
438:101B40003C028008344601008CC3002894A20000A7
439:101B50003C0480003042FFFE000210C000621021F1
440:101B6000AC82003C8C82003C0062182318600004A8
441:101B7000000000008CC200240A0006AF24420001CD
442:101B80008CC20024AC8200383C0200503442001069
443:101B90003C038000AC620030000000000000000048
444:101BA000000000008C620000304200201040FFFD69
445:101BB0000000000094A200003C04800030420001BC
446:101BC000000210C0004410218C430400AD2300002B
447:101BD0008C420404AD2200043C02002003E0000813
448:101BE000AC82003027BDFFE0AFB20018AFB10014E7
449:101BF000AFB00010AFBF001C94C2000000C0802135
450:101C00003C120800965200C624420001A6020000C1
451:101C10009603000094E2000000E030211443000528
452:101C20008FB100300E000684024038210A0006E61B
453:101C3000000000008C8300048C82000424420040D9
454:101C400004610007AC8200048C820004044000049C
455:101C5000000000008C82000024420001AC820000E1
456:101C6000960200003042FFFF50520001A600000023
457:101C70009622000024420001A62200003C028008B7
458:101C800034420100962300009442003C14430004B7
459:101C90008FBF001C24020001A62200008FBF001C81
460:101CA0008FB200188FB100148FB0001003E000084D
461:101CB00027BD002027BDFFE03C028008AFBF001811
462:101CC000344201008C4800343C0380003469040035
463:101CD000AC6800388C42003830E700FFAF89003034
464:101CE000AC62003C3C020005AC6200300000000029
465:101CF00000000000000000000000000000000000E4
466:101D0000000000008C82000C8C82000C978300166F
467:101D1000AD2200008C82001000604021AD22000442
468:101D20008C820018AD2200088C82001CAD22000CB1
469:101D30008CA20014AD2200108C820020AD22001471
470:101D400090820005304200FF00021200AD22001810
471:101D50008CA20018AD22001C8CA2000CAD22002029
472:101D60008CA20010AD2200248CA2001CAD22002801
473:101D70008CA20020AD22002C3402FFFFAD260030E3
474:101D8000AD200034506200013408FFFFAD28003858
475:101D900050E000113C0280083C04800834840100BB
476:101DA000948200503042FFFFAD22003C94830044F7
477:101DB00094850044240200013063FFFF000318C231
478:101DC000006418219064005430A5000700A210049C
479:101DD0000A0007510044102534420100AD20003CA8
480:101DE00094430044944400443063FFFF000318C24E
481:101DF000006218213084000790650054240200011D
482:101E0000008210040002102700451024A062005434
483:101E10000000000000000000000000003C0200067E
484:101E2000344200403C038000AC62003000000000FF
485:101E300000000000000000008C6200003042001032
486:101E40001040FFFD3C06800834C20150346304009A
487:101E500034C7014A34C4013434C5014034C6014496
488:101E6000AFA200100E0006C7AF8300308FBF00186E
489:101E700003E0000827BD00208F8300143C05080004
490:101E80008CA500E88F82001C30633FFF000319809F
491:101E900000451021004310212403FF800043182433
492:101EA0003C058000ACA300283042007F3C03800C3E
493:101EB0000043302190C2000D000038213442001050
494:101EC000A0C2000D8F8900143C028008344201003A
495:101ED00094430044000913823048000324020001A7
496:101EE000A4C3000E1102000B2902000210400005DD
497:101EF000240200021100000C240300010A000798CC
498:101F00000000182111020006000000000A000798D6
499:101F1000000018218CC2002C0A00079824430001FD
500:101F20008CC20014244300018CC200180043102B03
501:101F3000144000033C0380080A0007A224070001A4
502:101F4000346301009462004C24420001A462004CFE
503:101F500000091382304300032C6200021040000984
504:101F600000802821146000040000000094C20034A6
505:101F70000A0007B23046FFFF8CC600380A0007B2DD
506:101F800000802821000030213C04080024844BCC30
507:101F90000A0006FB0000000027BDFF90AFB60068F6
508:101FA000AFB50064AFB40060AFB3005CAFB200582F
509:101FB000AFB10054AFBF006CAFB000508C900000C8
510:101FC0000080B0213C0208008C4200E896040032F8
511:101FD0008F83001C2414FF8030843FFF006218218F
512:101FE0000004218000641821007410243C13800038
513:101FF00000A0902190A50000AE620028920400325B
514:102000003C02800C3063007F00628821308400C075
515:10201000240200401482002D0000A8218E350038D3
516:102020008E2200181440000224020001AE22001883
517:102030009202003C304200201440000F00000000DB
518:102040000E00055700A020218F83001C006218217C
519:10205000306400783C02008000822025007418243F
520:10206000AE630800AE6408108E2200188E030008CC
521:1020700000431021AE2200188E22002C8E2300185F
522:10208000244200010062182B1060003D0000000097
523:102090009242000024420001A24200003C030800DA
524:1020A0008C6300F4304200FF50430001A240000066
525:1020B0000E000557924400008F90001C0202102170
526:1020C000005410240A0008B8AE62002492030032C3
527:1020D0002402FFC000431024304200FF14400005DA
528:1020E00024020001AE220018962200340A00082EB5
529:1020F0003055FFFF8E22001424420001AE2200184A
530:102100009202003000021600000216030441001C77
531:10211000000000009602003227A400100080282151
532:10212000A7A2001696020032000030212407000109
533:102130003042FFFFAF8200140E0006FBAFA0001C70
534:10214000960200328F83001C3C0408008C8400E857
535:1021500030423FFF00021180006418210062182104
536:1021600000741024AE62002C3063007F3C02800EAD
537:10217000006218219062000D3042007FA062000DC5
538:102180009222000D30420010504000789242000030
539:102190003C028008344401009482004C8EC300004D
540:1021A0003C130800967300C62442FFFFA482004C33
541:1021B000946200329623000E3054FFFF3070FFFF10
542:1021C0003C0308008C6300D000701807A7A30038F8
543:1021D0009482003E3063FFFF3042FFFF146200072D
544:1021E000000000008C8200303C038000244200305C
545:1021F000AC62003C0A0008568C82002C948200409D
546:102200003042FFFF5462000927A400408C8200384E
547:102210003C03800024420030AC62003C8C820034DD
548:10222000AC6200380A0008653C03800027A500382E
549:1022300027A60048026038210E000684A7A00048A7
550:102240008FA300403C02800024630030AC43003880
551:102250008FA30044AC43003C3C0380003C020005DB
552:10226000AC6200303C028008344401009482004299
553:10227000346304003042FFFF0202102B14400007B9
554:10228000AF8300309482004E9483004202021021FA
555:10229000004310230A00087B3043FFFF9483004E65
556:1022A0009482004202631821005010230062182318
557:1022B0003063FFFF3C028008344401009482003CFC
558:1022C0003042FFFF14430003000000000A00088BA7
559:1022D000240300019482003C3042FFFF0062102B77
560:1022E000144000058F8200309482003C006210236D
561:1022F0003043FFFF8F820030AC550000AC4000043B
562:10230000AC540008AC43000C3C0200063442001000
563:102310003C038000AC6200300000000000000000C0
564:10232000000000008C620000304200101040FFFDF1
565:102330003C04800834840100001018C20064182195
566:102340009065005432020007240600010046100484
567:1023500000451025A0620054948300429622000E8E
568:1023600050430001A386001892420000244200015D
569:10237000A24200003C0308008C6300F4304200FFDE
570:1023800050430001A24000000E0005579244000097
571:102390008F90001C2403FF800202102100431024B0
572:1023A0003C038000AC6200240E00055792440000FC
573:1023B000020280213210007F3C02800A020280214A
574:1023C000AED000008FBF006C8FB600688FB5006480
575:1023D0008FB400608FB3005C8FB200588FB100548F
576:1023E0008FB0005003E0000827BD007027BDFFD864
577:1023F000AFB3001CAFB20018AFB10014AFB0001003
578:10240000AFBF00200080982100E0802130B1FFFFA5
579:102410000E000D7130D200FF00000000000000002F
580:10242000000000008F82002CAC510000AC52000470
581:10243000AC530008AC40000CAC400010AC400014A1
582:10244000AC4000183C03080094634BFE0203802557
583:10245000AC50001C00000000000000000000000064
584:10246000240400018FBF00208FB3001C8FB200181E
585:102470008FB100148FB000100A000D9827BD0028FE
586:1024800030A5FFFF30C600FF24030C803C02800013
587:10249000AC43002400000000000000000000000029
588:1024A00000000000000000000A0008C90000000051
589:1024B0003C028008344301009462000E3C0808008E
590:1024C000950800C63046FFFF14C000043402FFFF29
591:1024D000946500DA0A00091F8F84001C10C20027CF
592:1024E000000000009462004E9464003C3045FFFF01
593:1024F00000A6102300A6182B3087FFFF10600004F1
594:102500003044FFFF00C5102300E210233044FFFFDA
595:102510000088102B1040000E00E810233C028008B9
596:10252000344401002403000134420080A443001617
597:102530002402FFFFA482000E948500DA8F84001C21
598:102540000000302130A5FFFF0A0008EE3C076020A4
599:102550000044102A104000093C02800834430080E7
600:102560009462001630420001104000043C028000DA
601:102570009442007E24420014A462001603E0000886
602:102580000000000027BDFFE03C028008AFBF001C38
603:10259000AFB0001834420100944300429442004C12
604:1025A000104000193068FFFF9383001824020001D7
605:1025B000146200298FBF001C3C06800834D0010043
606:1025C000000810C20050102190420054310300074F
607:1025D00034C70148304200FF00621007304200015A
608:1025E00034C9014E34C4012C34C5013E10400016DC
609:1025F00034C601420E0006C7AFA900109602004281
610:102600000A00093C3048FFFF3C02800834440100C6
611:1026100094830044948200421043000F8FBF001C3B
612:1026200094820044A482004294820050A482004E0E
613:102630008C820038AC82003094820040A482003E3C
614:102640009482004AA48200488FBF001C8FB00018FB
615:102650000A0008FA27BD00208FB0001803E0000828
616:1026600027BD002027BDFFA0AFB1004C3C1180006A
617:10267000AFBF0058AFB30054AFB20050AFB0004886
618:102680003626018890C200033044007FA3A40010C6
619:102690008E32018090C200003043007F240200038C
620:1026A0001062003BAF92001C28620004104000063C
621:1026B0002402000424020002106200098FBF0058A7
622:1026C0000A000B038FB300541062004B2402000574
623:1026D0001062014C8FBF00580A000B038FB30054E7
624:1026E000000411C0024210212404FF802442024051
625:1026F0000044102426430040AE2200243063007FB3
626:102700003C02800A006218219062003CAFA3003CAA
627:1027100000441025A062003C8FA3003C9062003C66
628:10272000304200401040016A8FBF00583C108008C2
629:10273000A3800018361001008E0200D08C63003494
630:1027400027A4003C27A50010004310210E0007B469
631:10275000AE0200D093A200103C038000A20200C58C
632:102760008C6202780440FFFE8F82001CAC62024043
633:1027700024020002A06202443C021000AC62027813
634:102780000E00092F000000000A000B028FBF005846
635:102790003C05800890C3000190A2000B1443014C3B
636:1027A0008FBF005834A400808C8200189082004CA7
637:1027B00090A200088C8300183C027FFF3442FFFF88
638:1027C000006218243C0208008C4200B4AC8300185C
639:1027D0003C038000244200013C010800AC2200B40C
640:1027E0008C6201F80440FFFE8F82001CAC6201C0C5
641:1027F0000A000ACA240200023C10800890C30001AB
642:102800009202000B144301328FBF005836050110AD
643:1028100027A400180E000E202406000327A4002879
644:10282000360501E00E000E20240600038FA20028CA
645:1028300036030100AE0200648FA2002CAE020068D5
646:102840008FA20030AE02006C93A40018906300C504
647:102850002402FF800082102400431025305000FF26
648:102860003084007F3202007F0082102A5440000131
649:102870003A1000800E0005570000000002421021AF
650:102880002403FF8000431024AE22009493A4001878
651:102890003C130800927300F70E0005573084007F48
652:1028A000024210213042007F3C0380060043402159
653:1028B0008FA3001C2402FFFF10620034AFA8004069
654:1028C00093A2001995030014304400FF3063FFFF0A
655:1028D0000064182B10600010000000009504001424
656:1028E0008D07001C8D0600183084FFFF0044202354
657:1028F0000004210000E438210000102100E4202B16
658:1029000000C2302100C43021AD07001CAD06001804
659:102910000A000A2393A20019950400148D07001CD5
660:102920008D0600183084FFFF008220230004210060
661:10293000000010210080182100C2302300E4202B69
662:1029400000C4302300E33823AD07001CAD06001897
663:1029500093A200198FA30040A462001497A2001A4A
664:10296000A46200168FA2001CAC6200108FA2001C93
665:10297000AC62000C93A20019A462002097A2001A76
666:10298000A46200228FA2001CAC6200243C048008D8
667:10299000348300808C6200388FA2002002008821DE
668:1029A000AC62003C8FA20020AC82000093A2001811
669:1029B000A062004C93A20018A0820009A0600068E9
670:1029C00093A200181051005293A400183230007FD7
671:1029D0000E00055702002021024210212407FF802B
672:1029E0003046007F3C03800000471024AC62009416
673:1029F0003C02800600C2302190C2003CAFA60040DD
674:102A00000000202100471025A0C2003C8FA80040F4
675:102A100095020002950300148D07001C3042FFFF51
676:102A20003063FFFF8D0600180043102300021100E1
677:102A300000E2382100E2102B00C4302100C2302116
678:102A4000AD07001CAD06001895020002A502001497
679:102A5000A50000168D020008AD0200108D020008CE
680:102A6000AD02000C95020002A5020020A500002284
681:102A70008D020008AD0200249102003C304200406B
682:102A80001040001A26220001A3B000383C10800834
683:102A9000A3800018361001008E0200D08D03003490
684:102AA00027A4004027A50038004310210E0007B4DA
685:102AB000AE0200D093A200383C038000A20200C501
686:102AC0008C6202780440FFFE8F82001CAC620240E0
687:102AD00024020002A06202443C021000AC620278B0
688:102AE0000E00092F00000000262200013043007F65
689:102AF00014730004004020212403FF8002231024CB
690:102B00000043202693A200180A000A3F309100FFDC
691:102B10008FA3001C2402FFFF1062000A309000FF08
692:102B200024820001248300013042007F14530005F9
693:102B3000307000FF2403FF80008310240043102620
694:102B4000305000FF3C0280089042000802008821BB
695:102B5000305000FF123000193222007F000211C0F5
696:102B600002421021244202402403FF800043182423
697:102B70003C048000AC8300943042007F3C0380061C
698:102B8000004310218C43000C004020211060000BFA
699:102B9000AFA200400E0005690000000026230001DE
700:102BA0002405FF803062007F145300020225202498
701:102BB000008518260A000AA3307100FF3C04800833
702:102BC000348400808C8300183C027FFF3442FFFF76
703:102BD00000621824AC8300183C0380008C6201F86A
704:102BE0000440FFFE00000000AC7201C0240200029D
705:102BF000A06201C43C021000AC6201F80A000B02A2
706:102C00008FBF00583C04800890C300019082000BE5
707:102C10001443002F8FBF00583490008092020008A8
708:102C200030420040104000200000000092020008E6
709:102C30000002160000021603044100050240202194
710:102C40000E000EA5240500930A000B028FBF00584A
711:102C50009202000924030018304200FF1443000DC3
712:102C600002402021240500390E000E3D00003021D5
713:102C70000E0003158F84001C8F82FFAC240300120A
714:102C8000A04300090E0003208F84001C0A000B02E1
715:102C90008FBF0058240500360E000E3D0000302185
716:102CA0000A000B028FBF00580E00031502402021BE
717:102CB000920200058F84001C344200200E00032085
718:102CC000A20200050E00104C8F84001C8FBF00581C
719:102CD0008FB300548FB200508FB1004C8FB00048BA
720:102CE00024030C803C02800027BD006003E0000844
721:102CF000AC43002427BDFFE83C028008AFB00010C1
722:102D0000AFBF0014344501003C1080008E0201402A
723:102D100094A3000E0000302100402021AF82001C4F
724:102D20003063FFFF3402FFFF106200063C076020A3
725:102D30002402FFFFA4A2000E94A500DA0E0008EE04
726:102D400030A5FFFF24020C80AE0200248FBF0014C8
727:102D50008FB0001003E0000827BD001827BDFFC09A
728:102D60003C0980003C058008AFB70034AFB20020BA
729:102D7000AFBF0038AFB60030AFB5002CAFB40028FD
730:102D8000AFB30024AFB1001CAFB000183532010062
731:102D900034A801008D2701008E4200148D0300D459
732:102DA0000000B821A38000180043102318400055EC
733:102DB000AF87001C8E4200142403FF8024E40040EF
734:102DC000AD0200D490A60008910500C53084007FB4
735:102DD00030D3007F30A200FF000211C000E21021BA
736:102DE00024420240A3A50010004310248D1400D0FB
737:102DF0008D1500D4AD22002493A300103C02800A5C
738:102E000000822021AFA40014107300330000B02111
739:102E10008FA3001427A4001427A500108C6200348F
740:102E20000282802102B010230440002B2411FF8075
741:102E30009062003C02221024304200FF1440001B2C
742:102E40000200A0219062003C34420040A062003C9D
743:102E500093A2001024420001304300FFA3A20010FF
744:102E60003C0208008C4200F450620001A3A0001054
745:102E70000E00055793A400108F90001C3C038000A7
746:102E80000202102100511024AC6200240E000557EC
747:102E900093A40010020280213210007F3C02800ABD
748:102EA000020280210A000B81AFB000140E0007B4AB
749:102EB000000000003C02800834420100AC5000D009
750:102EC00093A3001024160001A04300C593A2001094
751:102ED0001453FFD08FA300142402000116C200096E
752:102EE0003C0380008C6202780440FFFE8F82001C4D
753:102EF000AC62024024020002A06202443C021000C4
754:102F0000AC6202789242000B24030002304200FFC0
755:102F1000144300720000000096420008304300FF96
756:102F20002402008214620040240200843C028000DB
757:102F3000344901008D22000C952300060002160280
758:102F40003063FFFF3044003F240200271082000F4F
759:102F5000AF830014288200281040000824020031AA
760:102F6000240200211082000924020025108200079B
761:102F7000938200190A000BC00000000010820007B5
762:102F8000938200190A000BC0000000000E00076CBD
763:102F9000012020210A000C40000000003C038000BA
764:102FA0008C6202780440FFFE8F82001CAC620240FB
765:102FB00024020002A06202443C021000AC620278CB
766:102FC0000A000C4000000000952300069124000533
767:102FD0008D25000C8D2600108D2700188D28001CD3
768:102FE0008D290020244200013C010800A4234BD27B
769:102FF0003C010800A0244BD13C010800AC254BD873
770:103000003C010800AC264BDC3C010800AC274BE43B
771:103010003C010800AC284BE83C010800AC294BEC13
772:103020000A000C40A38200191462000A24020081E5
773:103030003C02800834420100944500DA92460005C3
774:103040008F84001C30A5FFFF30C600FF0A000C0172
775:103050003C0760211462005C000000009242000AFC
776:10306000304300FF30620020104000073062004013
777:103070003C02800834420100944500DA8F84001C31
778:103080000A000BFF24060040104000070003160052
779:103090003C02800834420100944500DA8F84001C11
780:1030A0000A000BFF240600410002160304410046FB
781:1030B0003C02800834420100944500DA8F84001CF1
782:1030C0002406004230A5FFFF3C0760190E0008EE01
783:1030D000000000000A000C40000000009242000BBB
784:1030E00024040016304200FF104400063C06800015
785:1030F0009242000B24030017304200FF14430032B9
786:103100000000000034C5010090A2000B304200FF17
787:103110001444000B000080218CA200208CA400200D
788:103120002403FF8000431024000211403084007FFC
789:10313000004410253C03200000431025ACC2083099
790:1031400094A20008000214000002140304420001CB
791:103150002410000194A20008304200805040001A60
792:103160000200B82194A2000830422000504000160E
793:103170000200B8218CA300183C021C2D344219ED2A
794:10318000106200110200B8213C0208008C4200D4F9
795:10319000104000053C028008240300043442010072
796:1031A000A04300EC3C02800834420100944500DA60
797:1031B0008F84001C2406000630A5FFFF0E0008EED9
798:1031C0003C0760210200B8210E00092F000000001A
799:1031D0009242000A30420008104000043C02800085
800:1031E0000E00121F000000003C02800024030C802F
801:1031F000AC4300248FBF003802E010218FB60030AE
802:103200008FB700348FB5002C8FB400288FB3002403
803:103210008FB200208FB1001C8FB0001803E00008AF
804:1032200027BD00402402FF80008220243C02900041
805:1032300034420007008220253C028000AC4400207C
806:103240003C0380008C6200200440FFFE0000000070
807:1032500003E00008000000003C0380002402FF801F
808:10326000008220243462000700822025AC64002004
809:103270008C6200200440FFFE0000000003E0000814
810:10328000000000003C0280082403000534420100D5
811:10329000A04300EC3C0280008C4201003C03800013
812:1032A000AF82001C8C6202780440FFFE8F82001CFB
813:1032B000AC62024024020002A06202443C02100000
814:1032C000AC62027803E000080000000027BDFFE8C0
815:1032D0003C068000AFBF001034C5010094A2000876
816:1032E000304400FF38830082388200842C63000160
817:1032F0002C42000100621825106000302402008377
818:1033000093820019504000398FBF00103C02080022
819:1033100090424BD88CC401003C07080094E74BD284
820:103320003046003F38C3003238C2003F2C630001F2
821:103330002C42000100621825AF84001CAF870014E6
822:10334000A38000191460000600A0202124020020A0
823:1033500014C200113402FFFF14E2000F000000004D
824:103360002402002014C20005000000008CA30014F9
825:103370002402FFFF1062000A000000003C04080065
826:1033800024844BCC000030210E0006FB24070001F2
827:103390000A000CB6000000000E00076C00000000E0
828:1033A0000E00092F0000000024030C803C02800066
829:1033B000AC4300240A000CEF8FBF001014820006FB
830:1033C0002482FF808CC301043C026020AC430014C3
831:1033D0000A000CEF8FBF0010304200FF2C420002A9
832:1033E00010400004240200228FBF00100A000B25A9
833:1033F00027BD0018148200038FBF00100A000C6F55
834:1034000027BD00183C0208008C4200201040001D1F
835:103410002402001890A3000914620003240200167D
836:103420000A000CDB240300081462000724020017C2
837:10343000240300123C02800834420080A0430009AB
838:103440000A000CE894A700085462000794A700083B
839:103450008F82FFAC2404FFFE904300050064182413
840:10346000A043000594A7000890A6001B8CA40000B0
841:1034700094A500068FBF001000073C000A0008C991
842:1034800027BD001803E0000827BD00183C05080010
843:1034900094A54C0A3C0308008C634C143C04800047
844:1034A00030A2FFFF000230C02402FFF000C210244F
845:1034B00000621821AC83003C3C0208008C424C1096
846:1034C0003C038000AC8200383C02005034420010C3
847:1034D000AC620030000000000000000000000000AE
848:1034E0008C620000304200201040FFFD30C2000816
849:1034F000104000093C0280008C6204088C63040CBC
850:103500003C010800AC224C003C010800AC234C04F8
851:103510000A000D1B3C0300208C4304008C42040471
852:103520003C010800AC234C003C010800AC224C04D8
853:103530003C0300203C028000AC4300303C0780008C
854:103540008CE20030004310241440FFFD0000000016
855:103550003C03080094634C083C02080094424C0C65
856:103560003C06080094C64C0E24A5000100621821F8
857:1035700030A4FFFF3C020040ACE200303C010800F8
858:10358000A4234C083C010800A4254C0A148600031F
859:10359000000000003C010800A4204C0A03E00008E1
860:1035A0000000000027BDFFE83C04080024844BF025
861:1035B0003C05800AAFBF00100E000E202406000A52
862:1035C0003C02080094424BF23C03080094634C0E0A
863:1035D0003042000F244200030043180424027FFFFE
864:1035E0000043102B10400002AF8300280000000DA4
865:1035F0000E000CF1000000003C02080094424BF465
866:103600003C03080094634BFA8FBF00103042000F58
867:10361000000215000062182527BD00183C0280003A
868:1036200003E00008AC4300A03C02800A944300067B
869:103630003C02080094424BFA3C010800A4234BF6DC
870:10364000004310238F8300283042FFFF0043102BDC
871:1036500003E000083842000127BDFFE8AFBF0010BB
872:103660003C02800A944200063C010800A4224BF66A
873:103670000E000D58000000005440FFFA3C02800A82
874:103680008FBF001003E0000827BD001827BDFFE82A
875:10369000AFBF00100E000D580000000010400003E6
876:1036A000000000000E000D64000000003C02080055
877:1036B0008C424C003C0380008FBF0010AC6200388D
878:1036C0003C0208008C424C043464040027BD0018FE
879:1036D000AC62003C3C020005AC620030AF84002CC0
880:1036E00003E00008AF8000248F8200243C03000622
881:1036F00000021140004310253C038000AC62003002
882:103700000000000000000000000000008C620000CB
883:10371000304200101040FFFD34620400AF82002CE4
884:1037200003E00008AF8000243C0608008CC64C046F
885:103730008F8500248F83002C3C02080094424BFAB2
886:1037400027BDFFE024A500012463002024420001DE
887:1037500024C70020AFB10014AFB00010AFBF0018F5
888:10376000AF850024AF83002C3C010800A4224BFA53
889:10377000309000FF3C010800AC274C0404C1000855
890:103780000000882104E00006000000003C02080060
891:103790008C424C00244200013C010800AC224C0049
892:1037A0003C04080094844C083C02080094424BFA04
893:1037B0002E030001004410262C440001008318242D
894:1037C000106000040010102B24020001AF820020C2
895:1037D0000010102B00821025144000068F8200205C
896:1037E000144000048F830024240200101462000F90
897:1037F000000000000E000D88241100013C030800A9
898:1038000094634BFA3C02080094424C081462000393
899:10381000000000000E000CF1000000001600000384
900:10382000000000000E000D71000000003C030800C5
901:1038300094634BFE3C02080094424BFC246300015D
902:103840003064FFFF3C010800A4234BFE14820003F8
903:10385000000000003C010800A4204BFE1200000BF9
904:10386000000000003C02080094424BF43C030800B6
905:1038700094634BFA00021500006218253C02800098
906:10388000AC4300A00A000DF7AF8000200E000D58D9
907:103890000000000010400004022010210E000D6402
908:1038A00000000000022010218FBF00188FB100140B
909:1038B0008FB0001003E0000827BD002003E00008DF
910:1038C000000000008F8200343C030006000211401B
911:1038D000004310253C038000AC6200300000000073
912:1038E00000000000000000008C6200003042001068
913:1038F0001040FFFD34620400AF82003003E0000896
914:10390000AF80003403E000080000102103E000084D
915:10391000000000003084FFFF30A5FFFF00001821E9
916:1039200010800007000000003082000110400002FB
917:1039300000042042006518210A000E1600052840E8
918:1039400003E000080060102110C0000624C6FFFF3D
919:103950008CA2000024A50004AC8200000A000E2006
920:103960002484000403E000080000000010A0000808
921:1039700024A3FFFFAC860000000000000000000050
922:103980002402FFFF2463FFFF1462FFFA2484000473
923:1039900003E00008000000003C0280083442008080
924:1039A00024030001AC43000CA4430010A443001204
925:1039B000A443001403E00008A443001627BDFFD869
926:1039C000248200802407FF803043007FAFB00010C6
927:1039D00000808021004720243C0208008C42002007
928:1039E0003C08800EAFB3001CAFB20018AFB100149A
929:1039F000AFBF00203C0980000068182130B100FFF3
930:103A000030D200FF1040002900009821260201005A
931:103A1000AD24002C004728243042007F004820219C
932:103A20009062000024030050304200FF1443000461
933:103A300000000000AD25002C948200DA3053FFFF17
934:103A40000E000D71000000003C03080094634BFE63
935:103A50008F82002C00112C0000A3282500122400C6
936:103A60003C0340003484000100A32825AC50000032
937:103A70008FBF0020AC4000048FB20018AC53000888
938:103A80008FB10014AC40000C8FB3001CAC4400108C
939:103A90008FB00010AC40001424040001AC400018AA
940:103AA00027BD00280A000D98AC45001C8FBF0020E0
941:103AB0008FB3001C8FB200188FB100148FB00010AC
942:103AC00003E0000827BD00283C06800034C2010046
943:103AD0009043000F240200101062000E28650011B0
944:103AE00010A0000724020012240200082405003A56
945:103AF000106200060000302103E000080000000012
946:103B0000240500351462FFFC000030210A000E3D40
947:103B1000000000008CC200748F83FFAC24420FA011
948:103B200003E00008AC62000C27BDFFE8AFBF001047
949:103B30000E000325240500013C0480088FBF0010FF
950:103B40002402000134830080A462001227BD001803
951:103B50002402000103E00008A080001A27BDFFE056
952:103B6000AFB20018AFB10014AFB00010AFBF001C6F
953:103B700030B2FFFF0E000315008088213C02800850
954:103B8000345000809202000924030004304200FFF8
955:103B90001443000C3C028008124000082402000A72
956:103BA0000E000E3400000000920200052403FFFE08
957:103BB00000431024A202000524020012A202000900
958:103BC0003C02800834420080022020210E000320A5
959:103BD000A040002716400003022020210E000E986E
960:103BE0000000000002202021324600FF8FBF001C91
961:103BF0008FB200188FB100148FB000102405003868
962:103C00000A000E3D27BD002027BDFFE0AFBF001C0E
963:103C1000AFB20018AFB10014AFB000100E00031522
964:103C2000008080210E000E34000000003C0280085D
965:103C30003445008090A2000924120018305100FF82
966:103C4000123200030200202124020012A0A2000967
967:103C500090A200052403FFFE004310240E00032061
968:103C6000A0A2000502002021240500201632000732
969:103C7000000030218FBF001C8FB200188FB10014DC
970:103C80008FB000100A00032527BD00208FBF001C45
971:103C90008FB200188FB100148FB0001024050039C6
972:103CA0000A000E3D27BD002027BDFFE83C02800032
973:103CB000AFB00010AFBF0014344201009442000CBA
974:103CC000240500360080802114400012304600FF99
975:103CD0000E000315000000003C0280083442008002
976:103CE00024030012A0430009904300053463001030
977:103CF0000E000E34A04300050E0003200200202118
978:103D0000020020210E000325240500200A000F15C3
979:103D1000000000000E000E3D000000000E00031524
980:103D2000020020213C0280089043001B2405FF9FD5
981:103D300002002021006518248FBF00148FB00010EE
982:103D4000A043001B0A00032027BD001827BDFFE089
983:103D5000AFBF0018AFB10014AFB0001030B100FF1A
984:103D60000E000315008080213C028008240300120D
985:103D7000344200800E000E34A04300090E000320E0
986:103D80000200202102002021022030218FBF0018D4
987:103D90008FB100148FB00010240500350A000E3DCD
988:103DA00027BD00203C0480089083000E9082000A0A
989:103DB0001443000B000028218F82FFAC2403005025
990:103DC0002405000190420000304200FF144300042B
991:103DD000000000009082000E24420001A082000E2C
992:103DE00003E0000800A010213C0380008C6201F871
993:103DF0000440FFFE24020002AC6401C0A06201C4C2
994:103E00003C02100003E00008AC6201F827BDFFE0AF
995:103E1000AFB200183C128008AFB10014AFBF001C55
996:103E2000AFB0001036510080922200092403000A2E
997:103E3000304200FF1443003A000000008E430004AB
998:103E40008E2200385062007E8FBF001C922200003C
999:103E500024030050304200FF144300253C02800040
1000:103E60008C4201408E43000436420100022028218A
1001:103E7000AC43001C9622005C8E2300383042FFFFCA
1002:103E80000002104000621821AE23001C8E43000483
1003:103E90008E2400389622005C006418233042FFFF15
1004:103EA00000031843000210400043102A104000068F
1005:103EB000000000008E4200048E23003800431023CF
1006:103EC0000A000F83000220439622005C3042FFFF6D
1007:103ED000000220403C02800834430100344200804C
1008:103EE000ACA4002CA040002424020001A062000C1D
1009:103EF0000E000F3700000000104000518FBF001C63
1010:103F00003C0280008C4401408FBF001C8FB200181F
1011:103F10008FB100148FB000100A000F4827BD002099
1012:103F20009222000924030010304200FF14430004D1
1013:103F30003C0280008C4401400A000FC5000028218B
1014:103F40009222000924030016304200FF14430006A9
1015:103F500024020014A22200093C0280008C4401408B
1016:103F60000A000FD88FBF001C8E2200388E23003C21
1017:103F700000431023044100328FBF001C922200270F
1018:103F800024420001A2220027922200273C030800BD
1019:103F90008C630048304200FF144300163C10800040
1020:103FA0009222000924030004304200FF1443000958
1021:103FB0003C0280008C4401408FBF001C8FB200186F
1022:103FC0008FB100148FB00010240500930A000EA5D5
1023:103FD00027BD00208C440140240500938FBF001CA6
1024:103FE0008FB200188FB100148FB000100A000F219B
1025:103FF00027BD00208E0401400E00031500000000C4
1026:104000008E4200042442FFFFAE4200048E22003C98
1027:104010002442FFFFAE22003C0E0003208E0401402C
1028:104020008E0401408FBF001C8FB200188FB10014A6
1029:104030008FB00010240500040A00032527BD0020CE
1030:104040008FB200188FB100148FB0001003E0000889
1031:1040500027BD00203C0680008CC201883C038008FC
1032:10406000346500809063000E00021402304400FFAB
1033:10407000306300FF1464000E3C02800890A200260A
1034:10408000304200FF104400098F82FFACA0A400263C
1035:104090002403005090420000304200FF1443000609
1036:1040A000000000000A00058C8CC401803C028008DE
1037:1040B00034420080A044002603E000080000000015
1038:1040C00027BDFFE030E700FFAFB20018AFBF001C14
1039:1040D000AFB10014AFB000100080902114E00006D2
1040:1040E00030C600FF000000000000000D00000000CE
1041:1040F0000A001037240001173C0380089062000E6C
1042:10410000304200FF144600233462008090420026B3
1043:10411000304200FF1446001F000000009062000FB4
1044:10412000304200FF1446001B000000009062000AAD
1045:10413000304200FF144600038F90FFAC0000000DDA
1046:104140008F90FFAC8F82FFB03C118000AE05003C29
1047:10415000AC450000A066000A0E0003158E24010085
1048:10416000A20000240E0003208E2401003C038000E6
1049:104170008C6201F80440FFFE24020002AC7201C010
1050:10418000A06201C43C021000AC6201F80A001038C1
1051:104190008FBF001C000000000000000D00000000A8
1052:1041A000240001408FBF001C8FB200188FB1001493
1053:1041B0008FB0001003E0000827BD00208F83FFAC04
1054:1041C0003C0280008C440100344201008C65003CBC
1055:1041D0009046001B0A000FFE240700013C028008E5
1056:1041E0009043000E9042000A00431026304200FF28
1057:1041F00003E000080002102B27BDFFE03C0280080E
1058:10420000AFB10014AFB00010AFBF00183450008041
1059:104210009202000524030030304200301443008431
1060:10422000008088213C0208008C4200201040008160
1061:104230008FBF00180E000D71000000008F86002C4B
1062:10424000ACD100009202000892030009304200FF46
1063:1042500000021200306300FF00431025ACC20004CE
1064:104260009202004D000216000002160304410005F0
1065:10427000000000003C0308008C6300480A00107630
1066:104280003C108008920200083042004014400003B5
1067:104290000000182192020027304300FF3C108008E4
1068:1042A000361100809222004D00031E003C050800DC
1069:1042B00094A54BFE304200FF000214000062182556
1070:1042C000ACC300088E2300303C02C00B00A228259E
1071:1042D000ACC3000C8E22003400002021ACC20010C0
1072:1042E0008E220038ACC200148E22003CACC20018F2
1073:1042F0000E000D98ACC5001C8E0200048F84002CAB
1074:104300003C058000AC8200008E220020AC820004BC
1075:104310008E22001CAC8200088E2200588CA30074F0
1076:1043200000431021AC82000C8E22002CAC820010C5
1077:104330008E2200408E23004400021400004310250A
1078:10434000AC8200149222004D24030080304200FF12
1079:1043500014430003000000000A0010B8AC800018ED
1080:104360008E23000C240200011062000E2402FFFFC5
1081:1043700092220008304200401440000A2402FFFF4D
1082:104380008E23000C8CA20074006218233C020800EB
1083:10439000006210241440000200002821006028213F
1084:1043A00000051043AC8200183C02080094424BFE0A
1085:1043B0003C03C00C00002021004310258F83002CFB
1086:1043C0000E000D98AC62001C3C0480083482010091
1087:1043D0008C4200008F83002C348400803C0608004F
1088:1043E00094C64BFEAC620000AC6000048C850048B3
1089:1043F0003C02400D00C23025AC650008AC60000CEA
1090:10440000AC600010908200058FBF00188FB10014BF
1091:1044100000021600AC6200148FB00010AC600018EF
1092:1044200024040001AC66001C0A000D9827BD002082
1093:104430008FBF00188FB100148FB0001003E0000888
1094:1044400027BD00203C0280009443007C3C02800891
1095:1044500034460100308400FF3065FFFF2402000570
1096:1044600024A34650A0C4000C5482000C3065FFFF0A
1097:1044700090C2000D2C4200071040000724A30A0040
1098:1044800090C3000D240200140062100400A2102149
1099:104490000A0010F53045FFFF3065FFFF3C02800841
1100:1044A0003442008003E00008A44500143C03800867
1101:1044B00034680080AD050038346701008CE2001CD0
1102:1044C000308400FF00A210231840000330C600FF14
1103:1044D00024A2FFFCACE2001C308200015040000826
1104:1044E0003C0380088D02003C00A21023044100120E
1105:1044F000240400058C62000410A2000F3C03800815
1106:104500008C62000414A20018000000003C020800A5
1107:104510008C4200D830420020104000093C02800844
1108:1045200034620080906300089042004C1443000401
1109:104530003C028008240400040A0010DF0000000090
1110:104540003443008034420100A040000C24020001EA
1111:10455000A462001410C000043C0280008C440100DE
1112:104560000A000F480000000003E0000800000000FF
1113:1045700027BDFFE800A61823AFBF00101860004E4B
1114:10458000308800FF3C02800834470080A0E000240F
1115:1045900034440100A0E000278C82001C00A21023FC
1116:1045A0000440002B000000008CE2003C94E3005C1F
1117:1045B0008CE4002C004530233063FFFF00C318213A
1118:1045C0000083202B1080000400E018218CE2002CD6
1119:1045D0000A00114800A2102194E2005C3042FFFF63
1120:1045E00000C2102100A21021AC62001C3C02800815
1121:1045F0003447008094E2005C8CE3001C3042FFFFF3
1122:104600000002104000A210210043102B10400003B4
1123:10461000000000000A0011598CE2001C94E2005CCA
1124:104620003042FFFF0002104000A21021ACE2001C4B
1125:104630003C028008344201008FBF0010010020219D
1126:1046400024060001A040000C0A0010F927BD001844
1127:104650008CE2001C004610230043102B5440000144
1128:10466000ACE5001C94E2005C3042FFFF0062102BBE
1129:10467000144000072402000294E2005C8CE3001C5A
1130:104680003042FFFF00621821ACE3001C240200024C
1131:10469000ACE500380E000F37A082000C1040001867
1132:1046A0008FBF00103C0280008C4401008FBF0010BF
1133:1046B0000A000F4827BD00183102001010400010FA
1134:1046C0008FBF00103C028008344500808CA3001C82
1135:1046D00094A2005C006618233042FFFF006218219C
1136:1046E0003C023FFF3444FFFF0083102B5440000185
1137:1046F0000080182100C31021ACA2001C8FBF001045
1138:1047000003E0000827BD001827BDFFE800C04021D6
1139:1047100000A63023AFBF001018C00026308A00FF6B
1140:104720003C028008344900808D24001C8D23002C1D
1141:10473000008820230064182B1060000F344701000C
1142:104740008CE2002000461021ACE200208CE2002028
1143:104750000044102B1440000B3C023FFF8CE2002071
1144:1047600000441023ACE200209522005C3042FFFFA1
1145:104770000A0011AE00822021ACE00020008620213A
1146:104780003C023FFF3443FFFF0064102B5440000104
1147:10479000006020213C0280083442008000851821FE
1148:1047A000AC43001CA0400024A04000270A0011FDDB
1149:1047B0008FBF001031420010104000408FBF00102A
1150:1047C0003C06800834C400808C82003C00481023E2
1151:1047D0005840003B014020219082002424420001E7
1152:1047E000A0820024908200243C0308008C630024F3
1153:1047F000304200FF0043102B544000348FBF0010A4
1154:1048000034C201008C42001C00A210231840002F6B
1155:104810008FBF00108CC300049482005C00681823D2
1156:104820003042FFFF00031843000210400043102AEB
1157:1048300010400005000000008CC200040048102356
1158:104840000A0011E3000210439482005C3042FFFF33
1159:10485000000210403C068008AC82002C34C5008069
1160:1048600094A2005C8CA4002C94A3005C3042FFFF57
1161:1048700000021040008220213063FFFF00832021CE
1162:1048800001041021ACA2001C8CC2000434C601003B
1163:10489000ACC2001C240200020E000F37A0C2000CA4
1164:1048A0001040000A8FBF00103C0280008C440100C1
1165:1048B0008FBF00100A000F4827BD001801402021BB
1166:1048C000240600010A0010F927BD001803E00008C3
1167:1048D00027BD00183C098008352A00808D42003C25
1168:1048E000308300FF352B01000046102330E700FF26
1169:1048F000184000060060202124020001A160000C85
1170:10490000A160000D0A001190A542001424020005C8
1171:10491000352901000000302114E20008A1400027E1
1172:104920009122000D2C4200061040000400000000FF
1173:104930009122000D24420001A122000D0A0010F96D
1174:10494000000000003C0380083C028000344201006B
1175:1049500034640080346301009045000A8C480014E0
1176:104960008C8900389062000C30AA00FF01281823BF
1177:10497000304700FF1C60000E2CE4000624020001FA
1178:1049800000E210041080000A30430003014020219F
1179:10499000010028210120302114600007304B000C59
1180:1049A000156000073042003014400007000000008E
1181:1049B00003E00008000000000A0011900000000061
1182:1049C0000A00112A000000000A0012030000000083
1183:1049D0003C0380083464010024020003A082000C20
1184:1049E0008C62000403E00008AC82001C3C058008D7
1185:1049F00034A300809062002734A501002406004300
1186:104A000024420001A0620027906300273C020800B6
1187:104A10008C420048306300FF146200043C076021B0
1188:104A200094A500DA0A0008EE30A5FFFF03E00008B5
1189:104A30000000000027BDFFE8AFBF00103C0280006F
1190:104A40000E0012498C4401803C028008344301006E
1191:104A5000A060000C8C4200048FBF001027BD00181E
1192:104A600003E00008AC62001C27BDFFE03C028008A8
1193:104A7000AFBF0018AFB10014AFB0001034450080D4
1194:104A8000344601003C0880008D09014090C3000CB1
1195:104A90008CA4003C8CA2003814820038306700FFE0
1196:104AA0009502007C90A30027146000093045FFFFA9
1197:104AB0002402000554E200083C04800890C2000D66
1198:104AC00024420001A0C2000D0A0012843C048008A8
1199:104AD000A0C0000D3C048008348201009042000C0C
1200:104AE00024030005304200FF1443000A24A205DC21
1201:104AF00034830080906200272C420007504000055C
1202:104B000024A20A009063002724020014006210040B
1203:104B100000A210213C108008361000803045FFFFB5
1204:104B2000012020210E001249A60500149602005C07
1205:104B30008E0300383C1180003042FFFF000210401D
1206:104B400000621821AE03001C0E0003158E240140E4
1207:104B50009202002534420040A20200250E000320EC
1208:104B60008E2401408E2401408FBF00188FB10014A5
1209:104B70008FB000100A000F4827BD00208FBF00181B
1210:104B80008FB100148FB0001003E0000827BD002093
1211:104B90008008010080080080800800008008024032
1212:104BA00008000EF008000F4808000F8C08001020C5
1213:104BB0000800106480080100800800808008000060
1214:104BC0000A00002000000000000000000000000DAE
1215:104BD0006370342E362E31370000000004061104B5
1216:104BE00000000000000000000000000000000000C5
1217:104BF0000000000038003C00000000000000000041
1218:104C00000000000000000000000000200000000084
1219:104C10000000000000000000000000000000000094
1220:104C20000000000000000000000000000000000084
1221:104C30000000000021003800000000010000002BEF
1222:104C40000000000010000003000000000000000D44
1223:104C50000000000D3C020800244255C43C0308003B
1224:104C6000246357F4AC4000000043202B1480FFFD68
1225:104C7000244200043C1D080037BD9FFC03A0F02126
1226:104C80003C100800261000803C1C0800279C55C4DE
1227:104C90000E00026A000000000000000D00A01821B4
1228:104CA00000801021008028213C0460003C07600047
1229:104CB0002406000810600006348420788C4200002E
1230:104CC000ACE220088C63000003E00008ACE3200C99
1231:104CD0000A000E1C00000000240300403C0260009B
1232:104CE00003E00008AC4320003C0760008F86000012
1233:104CF0008CE520740086102100A2182B1460000798
1234:104D0000000028218F8AFDEC24050001A144001336
1235:104D10008F89000001244021AF88000003E00008D3
1236:104D200000A010218F84FDEC8F8500009086001379
1237:104D300030C300FF00A31023AF82000003E000088F
1238:104D4000A08000138F84FDEC27BDFFE8AFB00010FA
1239:104D5000AFBF001490890011908700112402002831
1240:104D6000312800FF3906002830E300FF2485002C9D
1241:104D70002CD00001106200162484001C0E000037A5
1242:104D8000000000008F8FFDEC3C056000240202044F
1243:104D900095EE003E95ED003C000E5C0031ACFFFF4F
1244:104DA000016C5025ACAA201052000001240200041E
1245:104DB000ACA2200000000000000000000000000085
1246:104DC0008FBF00148FB0001003E0000827BD00184B
1247:104DD0000A00006F000028218F85FDEC27BDFFD859
1248:104DE000AFBF0020AFB3001CAFB20018AFB10014CA
1249:104DF000AFB000100080982190A4001124B0001CD6
1250:104E000024B1002C308300FF386200280E000059C6
1251:104E10002C5200010E000061000000000200202161
1252:104E20001240000202202821000028210E00003735
1253:104E3000000000008F8DFDEC3C0880003C05600008
1254:104E400095AC003E95AB003C02683025000C4C0050
1255:104E5000316AFFFF012A3825ACA720102402020284
1256:104E6000ACA6201452400001240200028FBF002093
1257:104E70008FB3001C8FB200188FB100148FB00010D8
1258:104E800027BD002803E00008ACA2200027BDFFE0FA
1259:104E9000AFB20018AFB10014AFB00010AFBF001C2C
1260:104EA0003C1160008E2320748F82000030D0FFFF01
1261:104EB00030F2FFFF1062000C2406008F0E00003756
1262:104EC000000000003C06801F0010440034C5FF00B5
1263:104ED0000112382524040002AE27201000003021E2
1264:104EE000AE252014AE2420008FBF001C8FB2001806
1265:104EF0008FB100148FB0001000C0102103E0000833
1266:104F000027BD002027BDFFE0AFB0001030D0FFFF6D
1267:104F1000AFBF0018AFB100140E00003730F1FFFF33
1268:104F200000102400009180253C036000AC7020102C
1269:104F30008FBF00188FB100148FB00010240200043E
1270:104F4000AC62200027BD002003E000080000102113
1271:104F500027BDFFE83C0C6018AFBF00108D985000D3
1272:104F60002419FF7F3C0880000319782435EE380CA3
1273:104F7000340D8071240A003124090C00AD8E5000DC
1274:104F80003C0B800AAD8D53BCAD0A0008AD0900246E
1275:104F90000E00048DAF8B002C0E00044B00000000AF
1276:104FA0000E000046000000003C0760008CE5080889
1277:104FB0002406FFF03C03570900A620243462F000C9
1278:104FC00010820048241F0001AF8000380E000BAE95
1279:104FD000000000003C0660168CC700003C0860140E
1280:104FE0008D0500A03C03FFFF00E320243C02535347
1281:104FF00000051FC21082003534C57C0094A201F266
1282:10500000A780005010400003A7800060384C1E1E8F
1283:10501000A78C005094A201F8104000048F8E003835
1284:10502000384D1E1EA78D00608F8E003811C0000401
1285:1050300097840060240F0020A78F005097840060A1
1286:105040002C980081530000012404008097850050B3
1287:105050002CB9040153200001240504003C03600026
1288:105060008C670438241F103C30E2FFFF105F000300
1289:105070003088FFFF5100000B24060050A38000621F
1290:10508000938900621120000B8FBF001027BD00180C
1291:10509000A7800060A7800050A780005803E00008A8
1292:1050A000A7800076A3860062938900621520FFF72F
1293:1050B0008FBF001027BD0018A7840060A78500508F
1294:1050C000A780005803E00008A780007600035880FE
1295:1050D000016650218D4900043C0660000A00010F62
1296:1050E000012628210A000103AF9F00383083FFFF0B
1297:1050F0008F88002C8F870028000321403C0580000A
1298:105100003C020050008248253C0660003C0A010039
1299:1051100034AC04008CCD08E001AA582411600005CD
1300:10512000000000008CCF08E024E7000101EA7025B0
1301:10513000ACCE08E08D19001001805821ACB90038C0
1302:105140008D180014ACB8003CACA900300000000081
1303:10515000000000000000000000000000000000004F
1304:105160000000000000000000000000003C03800080
1305:105170008C640000308200201040FFFD3C0F600076
1306:105180008DED08E03C0E010001AE18241460FFE133
1307:1051900000000000AF87002803E00008AF8B003C50
1308:1051A0008F85002C240BFFF03C06800094A7001A8A
1309:1051B0008CA9002430ECFFFF000C38C000EB502419
1310:1051C000012A4021ACC8003C8CA400248CC3003CC4
1311:1051D0000083102318400033000000008CAD002035
1312:1051E00025A200013C0F0050ACC2003835EE001083
1313:1051F0003C068000ACCE0030000000000000000043
1314:10520000000000000000000000000000000000009E
1315:1052100000000000000000003C0480008C990000A9
1316:10522000333800201300FFFD30E200081040001763
1317:105230003C0980008C880408ACA800108C83040C06
1318:10524000ACA300143C1900203C188000AF190030BA
1319:1052500094AE001894AF001C01CF3021A4A6001812
1320:1052600094AD001A25A70001A4A7001A94AB001A58
1321:1052700094AC001E118B00030000000003E0000846
1322:105280000000000003E00008A4A0001A8D2A04001A
1323:10529000ACAA00108D240404ACA400140A0001A2DE
1324:1052A0003C1900208CA200200A00018A3C0F00500B
1325:1052B0000A000178000000003C0308008C63002015
1326:1052C0008F82003427BDFFE810620008AFBF0010D6
1327:1052D0000E0001BCAF8300343C0308008C63002047
1328:1052E00024040001106400048F8C002C8FBF001078
1329:1052F00003E0000827BD00188FBF00103C058000A8
1330:10530000A580000A958B000A958A000427BD001825
1331:105310003167FFFF3149000F0009450000E83025E3
1332:1053200003E00008ACA600803C0208008C4200208C
1333:1053300027BDFFC8AFBF0034AFBE0030AFB7002CF1
1334:10534000AFB60028AFB50024AFB40020AFB3001C47
1335:10535000AFB20018AFB1001410400053AFB000104E
1336:105360008F84002C948600069483000A00C32823AF
1337:1053700030B6FFFF12C0004D8FBF00349489001873
1338:10538000948A000A012A40233102FFFF02C2382B0F
1339:1053900014E0000202C02021004020212C8C0005D6
1340:1053A000158000020080A021241400040E00014B8F
1341:1053B000028020218F87002C02809821AF8000304E
1342:1053C00094ED000A028088211280005131B2FFFF63
1343:1053D0003C1770003C1540003C1E60008F8F003C65
1344:1053E0008DEE000001D718245075005302202021B3
1345:1053F00002A3802B160000383C1820001078004AC9
1346:1054000000000000241000018F8300301460003C75
1347:10541000029158230230F8230250C82133F1FFFFD4
1348:105420001620FFEE3332FFFF8F87002C3C12002046
1349:105430003C118000AE32003094EA000A3C17800034
1350:10544000026A4821A4E9000A94E3000A94E80004EF
1351:105450003065FFFF3106000F0006150000A2F025A1
1352:10546000AEFE008094F4000A94F5001812B4003ADD
1353:105470000013C9408CF800148CEE00100319582159
1354:10548000000078210179682B01CF6021018D202156
1355:10549000ACEB0014ACE4001002D3382330F6FFFF6D
1356:1054A00016C0FFB68F84002C8FBF00348FBE003033
1357:1054B0008FB7002C8FB600288FB500248FB4002042
1358:1054C0008FB3001C8FB200188FB100148FB0001082
1359:1054D00003E0000827BD0038107E001B000000001C
1360:1054E0001477FFC9241000010E0014E00000000032
1361:1054F0008F8300301060FFC80230F82302915823D8
1362:105500008F87002C017020210A0002553093FFFF85
1363:105510008F8300301460FFC83C1200203C118000D3
1364:105520000A00021EAE3200300E0003CE02202021FF
1365:105530000A000212004080210E0007C60240282106
1366:105540000A000212004080210E000D7D0220202161
1367:105550000A000212004080210E00017800000000C5
1368:105560000A00023702D3382327BDFFD0AFB500248D
1369:10557000AFB40020AFB3001CAFB20018AFB100143D
1370:10558000AFB00010AFBF00280E0000E43C14800054
1371:105590003C0280083C0320003C010800AC20007065
1372:1055A00034550080347200032413000136900070DB
1373:1055B0002411FF800A0002858E0600003C1980003D
1374:1055C0008F3800003B0F000131E200011040002540
1375:1055D0008F8600848E0700003C0D08008DAD003CD6
1376:1055E0003C0A08008D4A003800E6702301AE4021D5
1377:1055F00000005821010E302B014B482101262021AB
1378:105600003C010800AC28003CAF8700843C01080046
1379:10561000AC2400380E0001BE000000003C0508006C
1380:105620008CA5007010A0FFE500A020213C0508001B
1381:105630008CA500683C0608008CC6006C0E00148324
1382:10564000000000003C010800AC2000703C19800004
1383:105650008F3800003B0F000131E200011440FFDDF4
1384:105660008F8600848E0C00008F8D00843C0708001C
1385:105670008CE7003C3C0608008CC60038018D58239E
1386:1056800000EB282100AB202B00C24821012410216F
1387:105690003C010800AC25003C3C0880003C010800AF
1388:1056A000AC2200388D030100241F0C00107F00265F
1389:1056B000000000008D180100240E0020AD1800200D
1390:1056C00092AF000031E300FF106E00232419005058
1391:1056D00010790026000000003C0480008C88010046
1392:1056E0001500000300000000566000143C04400058
1393:1056F0008C9901008C8F0100000098210331C02497
1394:105700000018694031EE007F01AE602501925825F6
1395:10571000AC8B08308C8701008C89010024EA0100E1
1396:1057200001513024000629403123007F00A31025B9
1397:105730000052F825AC9F08303C044000AE8401388C
1398:105740000A00027D000000000E0001DA00000000E7
1399:105750000A0002C73C0480008D0401000E00077F90
1400:10576000000000000A0002C73C0480008D04010014
1401:105770000E00139B000000000A0002C73C048000DA
1402:1057800000A4102B24030001104000090000302168
1403:105790000005284000A4102B04A0000300031840BB
1404:1057A0005440FFFC000528405060000A0004182BFC
1405:1057B0000085382B54E000040003184200C3302554
1406:1057C00000852023000318421460FFF900052842D9
1407:1057D0000004182B03E0000800C310213084FFFFF1
1408:1057E00030C600FF3C0780008CE201B80440FFFE99
1409:1057F00000064C00012430253C08200000C820256C
1410:105800003C031000ACE00180ACE50184ACE401880D
1411:1058100003E00008ACE301B83C0660008CC5201C26
1412:105820002402FFF030830200308601001060000E79
1413:1058300000A2282434A500013087300010E00005C4
1414:1058400030830C0034A500043C04600003E0000831
1415:10585000AC85201C1060FFFD3C04600034A50008EE
1416:1058600003E00008AC85201C54C0FFF334A50002FF
1417:105870000A00031F3087300027BDFFE8AFB00010DB
1418:10588000AFBF00143C076000240600021080001126
1419:1058900000A080218F83003C0E0003168C6400184A
1420:1058A0008F82003C00002021240600018C45000C62
1421:1058B0000E0003070000000016000002240200038F
1422:1058C000000010218FBF00148FB0001003E000080B
1423:1058D00027BD00188CE8201C2409FFF001092824AA
1424:1058E000ACE5201C8F87003C0A00033C8CE5000CD3
1425:1058F0003C02600E0080402134460100240900185B
1426:105900000000000000000000000000003C0A005001
1427:105910003C03800035470200AC6800383464040062
1428:10592000AC65003CAC6700308C6C0000318B002013
1429:105930001160FFFD2407FFFF2403007F8C8D000012
1430:105940002463FFFF24840004ACCD00001467FFFB38
1431:1059500024C6000400000000000000000000000059
1432:1059600024A402000085282B3C0300203C0E80006C
1433:105970002529FFFF01054021ADC300301520FFE0C0
1434:105980000080282103E00008000000008F82003C16
1435:1059900027BDFFD8AFB3001CAFBF0020AFB20018C7
1436:1059A000AFB10014AFB000109446000200809821FF
1437:1059B0008C5200182CC300818C4800048C470008CE
1438:1059C0008C51000C8C490010106000078C4A0014A8
1439:1059D0002CC400041480001330EB000730C5000312
1440:1059E00010A00010000000002410008B02002021F5
1441:1059F000022028210E00030724060003166000027F
1442:105A000024020003000010218FBF00208FB3001C70
1443:105A10008FB200188FB100148FB0001003E000089F
1444:105A200027BD00281560FFF12410008B3C0C80007E
1445:105A30003C030020241F0001AD830030AF9F0030E5
1446:105A40000000000000000000000000002419FFF02A
1447:105A500024D8000F031978243C1000D0AD880038FA
1448:105A600001F0702524CD00033C08600EAD87003C9A
1449:105A700035850400AD8E0030000D38823504003CC1
1450:105A80003C0380008C6B0000316200201040FFFD61
1451:105A90000000000010E0000824E3FFFF2407FFFFE0
1452:105AA0008CA800002463FFFF24A50004AC8800003C
1453:105AB0001467FFFB248400043C04600EAC860038AD
1454:105AC0000000000000000000000000003C07002073
1455:105AD0003C0680000120202101402821ACC7003075
1456:105AE0000E00034C000080210E000316024020210E
1457:105AF0000A00038C0200202127BDFFD8AFB2001896
1458:105B00003092FFFFAFB10014AFBF0020AFB3001C55
1459:105B1000AFB000101240002D000088210A0003E2FF
1460:105B20002413000350B300428CE5000C0000000D6C
1461:105B3000263900013331FFFF24F800200232382BD0
1462:105B400010E00022AF98003C8F8200301440001F0C
1463:105B50008F87003C3C0670003C0320008CE4000072
1464:105B60000086282414A300198F85004400044402F1
1465:105B70003C0980000089802414A0FFEA310600FF60
1466:105B8000240A000210CA003028CB0003116000175D
1467:105B9000000000002404000114C4FFE626390001BF
1468:105BA000020028210E00032E240400018F87003CF0
1469:105BB000AF820044263900013331FFFF24F8002072
1470:105BC0000232382B14E0FFE0AF98003C0220102195
1471:105BD0008FBF00208FB3001C8FB200188FB100144C
1472:105BE0008FB0001003E0000827BD002810D3001B71
1473:105BF000240C000414CCFFCF26390001308DFFFFA8
1474:105C0000000D19C03C0480008C8E01B805C0FFFE59
1475:105C10003C0F10003C102004AC830180AC80018458
1476:105C2000AC900188AC8F01B80A0003DD2639000171
1477:105C30000E000307240400841600FFBD8F87003C7C
1478:105C40000A0003DCAF800044020028210E00032E6E
1479:105C5000000020210A0003FC8F87003C0E00037324
1480:105C6000020020218F87003C0A0003FDAF82004420
1481:105C7000000449C23127003F000443423C02800037
1482:105C800000082040240316802CE60020AC43002CA2
1483:105C900024EAFFE02482000114C0000330A900FFC1
1484:105CA00000801021314700FF000260803C0D800021
1485:105CB000240A0001018D20213C0B000E00EA28047B
1486:105CC000008B302111200005000538278CCE000004
1487:105CD00001C5382503E00008ACC700008CD80000DF
1488:105CE0000307782403E00008ACCF000027BDFFE0E5
1489:105CF000AFB10014AFB00010AFBF00183C07600098
1490:105D00008CE408083402F0003C1160003083F0009D
1491:105D1000240501C03C04800E000030211062000602
1492:105D2000241000018CEA08083149F0003928E0000D
1493:105D30000008382B000780403C0D0200AE2D0814EF
1494:105D4000240C16803C0B80008E2744000E000E268B
1495:105D5000AD6C002C120000043C02169124050001D9
1496:105D6000120500103C023D6C345800E0AE38440887
1497:105D70003C1108008E31007C8FBF00183C0660008B
1498:105D800000118540360F16808FB100148FB00010BF
1499:105D90003C0E020027BD0020ACCF442003E00008E9
1500:105DA000ACCE08103C0218DA345800E0AE38440893
1501:105DB0003C1108008E31007C8FBF00183C0660004B
1502:105DC00000118540360F16808FB100148FB000107F
1503:105DD0003C0E020027BD0020ACCF442003E00008A9
1504:105DE000ACCE08100A00042C240500010A00042C83
1505:105DF0000000282124020400A782000CA7800004D0
1506:105E0000000020213C06080024C656582405FFFF48
1507:105E100024890001000440803124FFFF010618217D
1508:105E20002C87002014E0FFFAAC6500002404040075
1509:105E3000A784000EA7800006000020213C06080071
1510:105E400024C656D82405FFFF248D0001000460807D
1511:105E500031A4FFFF018658212C8A00201540FFFA4B
1512:105E6000AD650000A7800010A7800008A780000A89
1513:105E7000000020213C06080024C657582405FFFFD7
1514:105E8000249900010004C0803324FFFF0306782119
1515:105E90002C8E000415C0FFFAADE500003C05600043
1516:105EA0008CA73D002403E08F00E31024344601401A
1517:105EB00003E00008ACA63D002487007F000731C244
1518:105EC00024C5FFFF000518C2246400013082FFFFD3
1519:105ED000000238C0A78400183C010800AC2700303D
1520:105EE000AF80001400002821000020210000302194
1521:105EF0002489000100A728213124FFFF2CA81701C5
1522:105F0000110000032C8300801460FFF924C60001F7
1523:105F100000C02821AF86001410C0001DA786001203
1524:105F200024CAFFFF000A11423C0808002508575800
1525:105F30001040000A00002021004030212407FFFF0C
1526:105F4000248E00010004688031C4FFFF01A8602195
1527:105F50000086582B1560FFFAAD87000030A2001FA5
1528:105F60005040000800043080240300010043C804AE
1529:105F700000041080004878212738FFFF03E0000864
1530:105F8000ADF8000000C820212405FFFFAC8500000B
1531:105F900003E000080000000030A5FFFF30C6FFFF4F
1532:105FA00030A8001F0080602130E700FF0005294273
1533:105FB0000000502110C0001D24090001240B000125
1534:105FC00025180001010B2004330800FF0126782664
1535:105FD000390E00202DED00012DC2000101A218256F
1536:105FE0001060000D014450250005C880032C40219D
1537:105FF0000100182110E0000F000A20278D04000086
1538:10600000008A1825AD03000024AD000100004021E6
1539:106010000000502131A5FFFF252E000131C9FFFFEF
1540:1060200000C9102B1040FFE72518000103E000080D
1541:10603000000000008D0A0000014440240A000512FF
1542:10604000AC68000027BDFFE830A5FFFF30C6FFFFAA
1543:10605000AFB00010AFBF001430E7FFFF00005021C9
1544:106060003410FFFF0000602124AF001F00C0482152
1545:10607000241800012419002005E0001601E0102179
1546:106080000002F943019F682A0009702B01AE4024E9
1547:1060900011000017000C18800064102110E00005AA
1548:1060A0008C4B000000F84004000838230167582496
1549:1060B00000003821154000410000402155600016C5
1550:1060C0003169FFFF258B0001316CFFFF05E1FFEC1B
1551:1060D00001E0102124A2003E0002F943019F682A3A
1552:1060E0000009702B01AE40241500FFEB000C188056
1553:1060F000154600053402FFFF020028210E0004F6B9
1554:1061000000003821020010218FBF00148FB0001052
1555:1061100003E0000827BD00181520000301601821C6
1556:10612000000B1C0224080010306A00FF1540000517
1557:10613000306E000F250D000800031A0231A800FF81
1558:10614000306E000F15C00005307F000325100004DD
1559:1061500000031902320800FF307F000317E000053A
1560:10616000386900012502000200031882304800FF50
1561:10617000386900013123000110600004310300FF81
1562:10618000250A0001314800FF310300FF000C69407F
1563:1061900001A34021240A000110CAFFD53110FFFFDE
1564:1061A000246E000131C800FF1119FFC638C9000173
1565:1061B0002D1F002053E0001C258B0001240D000141
1566:1061C0000A000589240E002051460017258B000186
1567:1061D00025090001312800FF2D090020512000125F
1568:1061E000258B000125430001010D5004014B1024B3
1569:1061F000250900011440FFF4306AFFFF3127FFFF3B
1570:1062000010EE000C2582FFFF304CFFFF00005021F4
1571:106210003410FFFF312800FF2D0900205520FFF228
1572:1062200025430001258B0001014648260A0005434D
1573:10623000316CFFFF00003821000050210A00059555
1574:106240003410FFFF27BDFFD8AFB0001030F0FFFFC4
1575:10625000AFB10014001039423211FFE00007108086
1576:10626000AFB3001C00B1282330D3FFFFAFB200183A
1577:1062700030A5FFFF008090210260302100442021E2
1578:10628000AFBF00200E0005213207001F0222882127
1579:106290003403FFFF02402021020028210260302148
1580:1062A00000003821104300093231FFFF0220102185
1581:1062B0008FBF00208FB3001C8FB200188FB1001465
1582:1062C0008FB0001003E0000827BD00280E00052154
1583:1062D0000000000000408821022010218FBF002014
1584:1062E0008FB3001C8FB200188FB100148FB0001054
1585:1062F00003E0000827BD0028000424003C036000E0
1586:10630000AC603D0810A000023482100634821016E2
1587:1063100003E00008AC623D0427BDFFE0AFB0001011
1588:10632000309000FF2E020006AFBF0018104000089A
1589:10633000AFB10014001030803C030800246353B454
1590:1063400000C328218CA40000008000080000000089
1591:10635000000020218FBF00188FB100148FB00010F3
1592:106360000080102103E0000827BD00209791001253
1593:1063700016200051000020213C020800904200330A
1594:106380000A0005FC00000000978D000E15A00031EA
1595:10639000000020210A0005FC240200089787000C59
1596:1063A00014E0001A000018210060202124020001DE
1597:1063B0001080FFE98FBF0018000429C2004530217A
1598:1063C00000A6582B1160FFE43C0880003C07200029
1599:1063D000000569C001A76025AD0C00203C038008C2
1600:1063E0002402001F2442FFFFAC6000000441FFFDB7
1601:1063F0002463000424A5000100A6702B15C0FFF53E
1602:10640000000569C00A0005E68FBF001897870004E1
1603:106410003C04080024845658240504000E0005A1FD
1604:1064200024060001978B000C24440001308AFFFFF2
1605:106430002569FFFF2D480400004028211500004079
1606:10644000A789000C24AC3800000C19C00A0005FA1A
1607:10645000A7800004978700063C040800248456D8CF
1608:10646000240504000E0005A1240600019799000EE2
1609:10647000244400013098FFFF272FFFFF2F0E040058
1610:106480000040882115C0002CA78F000EA7800006B1
1611:106490003A020003262401003084FFFF0E0005CEDF
1612:1064A0002C4500010011F8C027F00100001021C0A8
1613:1064B0000A0005FC24020008978500169787000A49
1614:1064C0003C040800248457580E0005A1240600014E
1615:1064D000978700128F8900142445000130A8FFFF20
1616:1064E00024E3FFFF0109302B0040802114C0001875
1617:1064F000A7830012A780000A978500180E000E10CF
1618:1065000002002021244A05003144FFFF0E0005CE81
1619:10651000240500013C05080094A500320E000E1071
1620:1065200002002021244521003C0208009042003353
1621:106530000A0005FC000521C00A000634A7840006F5
1622:1065400024AC3800000C19C00A0005FAA784000426
1623:106550000A00064EA785000A308400FF27BDFFE829
1624:106560002C820006AFBF0014AFB000101040001521
1625:1065700000A03821000440803C030800246353CC71
1626:10658000010328218CA40000008000080000000006
1627:1065900024CC007F000751C2000C59C23170FFFFAC
1628:1065A0002547C40030E5FFFF2784000402003021A6
1629:1065B0000E0004F624070001978600100206202131
1630:1065C000A78400108FBF00148FB0001003E00008F4
1631:1065D00027BD00183C0508008CA50030000779C2D3
1632:1065E0000E0002F025E4DF003045FFFF3C04080008
1633:1065F00024845758240600010E0004F624070001E5
1634:10660000978E00128FBF00148FB0001025CD0001AF
1635:1066100027BD001803E00008A78D00120007C9C2BB
1636:106620002738FF00001878C231F0FFFF3C04080053
1637:10663000248456D802002821240600010E0004F606
1638:1066400024070001978D000E260E0100000E840025
1639:1066500025AC00013C0B6000A78C000EAD603D082E
1640:1066600036040006000030213C0760008CE23D0447
1641:10667000305F000617E0FFFD24C9000100061B0083
1642:10668000312600FF006440252CC50004ACE83D0421
1643:1066900014A0FFF68FBF00148FB0001003E00008B5
1644:1066A00027BD0018000751C22549C8002406000173
1645:1066B000240700013C040800248456580E0004F608
1646:1066C0003125FFFF9787000C8FBF00148FB000109B
1647:1066D00024E6000127BD001803E00008A786000C8F
1648:1066E0003084FFFF30A5FFFF3C0680008CC201B85C
1649:1066F0000440FFFE3C084080008838253C03100021
1650:10670000ACC00180ACC50184ACC7018803E00008BF
1651:10671000ACC301B83084FFFF3C0680008CC201B8D6
1652:106720000440FFFE3C0840388CA700000088282564
1653:106730003C031000ACC70180ACC5018803E0000831
1654:10674000ACC301B88F83005C8F8600541066000BC9
1655:10675000008040213C07080024E75768000328C058
1656:1067600000A710218C44000024630001108800055C
1657:106770003063000F5466FFFA000328C003E00008EE
1658:10678000000010213C07080024E7576C00A73021C7
1659:1067900003E000088CC200003C039000346200015A
1660:1067A000008220253C038000AC6400208C65002022
1661:1067B00004A0FFFE0000000003E00008000000004D
1662:1067C0003C028000344300010083202503E00008E0
1663:1067D000AC44002027BDFFE0AFB100143091FFFFB3
1664:1067E000AFB00010AFBF00181220001200A080212F
1665:1067F0008CA5000014A00011240400023C068000B7
1666:106800008CC201B80440FFFE3C074000022720254F
1667:106810008FBF00188FB100148FB000103C03100020
1668:1068200027BD0020ACC50180ACC4018803E000088E
1669:10683000ACC301B80A00070F8CA500000E00066665
1670:1068400024060200000028210A00070FAE00000005
1671:106850003087FFFF3C0680008CC201B80440FFFE79
1672:106860003C0A40068CA9000000EA4025ACC9018022
1673:106870008CA400043C031000ACC40184ACC80188A3
1674:1068800003E00008ACC301B88F83FDE827BDFFE833
1675:10689000AFBF0014AFB00010906700080080102157
1676:1068A0000080282130E600400000202110C00008B0
1677:1068B0008C5000000E0000860200202102002021E2
1678:1068C0008FBF00148FB000100A00048927BD001884
1679:1068D0000E000724000000000E00008602002021A8
1680:1068E000020020218FBF00148FB000100A0004891D
1681:1068F00027BD001827BDFFE0AFB000108F90FDE866
1682:10690000AFBF001CAFB20018AFB100149206000177
1683:10691000008088210E0006F630D2000492040005A3
1684:10692000001129C2A605000034830040A20300051F
1685:106930000E000700022020210E00048B02202021DF
1686:1069400024020001AE02000C02202821A602001041
1687:1069500024040002A602001224060200A60200146B
1688:106960000E000666A60200161640000F8FBF001C20
1689:10697000978C00583C0B08008D6B00782588FFFF32
1690:106980003109FFFF256A0001012A382B10E00006BB
1691:10699000A78800583C0F6006240E001635ED001045
1692:1069A000ADAE00508FBF001C8FB200188FB1001425
1693:1069B0008FB0001003E0000827BD002027BDFFE0D6
1694:1069C000AFBF0018AFB10014AFB000100E0006F654
1695:1069D000008088218F85FDE80220202190A30005FA
1696:1069E0000E000700307000FF2402003E1202000576
1697:1069F0008FBF00188FB100148FB0001003E00008A3
1698:106A000027BD00203C0580008CA401780480FFFE97
1699:106A1000240700073C061000ACB1014002202021F1
1700:106A2000A0A701448FBF00188FB100148FB00010D1
1701:106A3000ACA601780A00074D27BD002027BDFFE066
1702:106A4000AFB00010AFBF0018AFB100143C10800011
1703:106A50008E110020000000000E00048BAE04002008
1704:106A6000AE1100208FBF00188FB100148FB000103E
1705:106A700003E0000827BD00203084FFFF3C068000B3
1706:106A80008CC201B80440FFFE3C0840350088382520
1707:106A90003C031000ACC50180ACC00184ACC70188C8
1708:106AA00003E00008ACC301B83084FFFF3C0680005F
1709:106AB0008CC201B80440FFFE3C08403600883825EF
1710:106AC0003C031000ACC50180ACC00184ACC7018898
1711:106AD00003E00008ACC301B827BDFFD0AFB5002468
1712:106AE0003095FFFFAFB60028AFB40020AFBF002C39
1713:106AF000AFB3001CAFB20018AFB10014AFB00010BC
1714:106B000030B6FFFF12A000270000A0218F92003CAA
1715:106B10008E4300003C0680002402004000033E0239
1716:106B200000032C0230E4007F006698241482001DCC
1717:106B300030A500FF8F83004C2C68000A5100001024
1718:106B40008F860030000358803C0C0800258C53E8E9
1719:106B5000016C50218D490000012000080000000058
1720:106B600002D448213125FFFF0E0006C8240400840A
1721:106B7000166000028F92003CAF80004C8F86003080
1722:106B800026580020268F00010300902131F4FFFFDA
1723:106B900014C00004AF98003C0295282B14A0FFDC21
1724:106BA00000000000028010218FBF002C8FB600284B
1725:106BB0008FB500248FB400208FB3001C8FB2001853
1726:106BC0008FB100148FB0001003E0000827BD003023
1727:106BD0002407003414A70146000000009247000E6D
1728:106BE0008F99FDEC8F90FDE824181600A32700195B
1729:106BF000924A000D3C0880003C07800CA32A001834
1730:106C0000964400123C0F60003C117FFFA604005C1C
1731:106C1000965F00103622FFFF240A000533E5FFFFD0
1732:106C2000AE0500548E46001CAD1800288CE900000B
1733:106C30008DEE44480126682601CD3021AE0600388D
1734:106C40008E03003824CB00013C0E7F00AE03003CD5
1735:106C50008E0C003CAF2C0004AE0B00208E130020E5
1736:106C6000AE13001CA320001BAE02002CA32A0012AE
1737:106C70008E44001424130050AE0400348E1F0034E0
1738:106C8000AF3F00148E450018AE0500489258000C26
1739:106C9000A218004E920F000835E90020A209000852
1740:106CA0008E0D001801AE1824346C4000AE0C001894
1741:106CB000920B0000317200FF125302AD2413FF80CB
1742:106CC0003C040800248457E80E000732000000004E
1743:106CD00024030004240800013C0508008CA557E8A3
1744:106CE0003C048000A2030025A20800058C900178D6
1745:106CF0000600FFFE8F92003C240E00023C0D1000A7
1746:106D0000AC850140A08E0144AC8D01780A0007EFEC
1747:106D1000AF80004C2CAD003711A0FF998F8600305A
1748:106D2000000580803C1108002631541002117821A2
1749:106D30008DEE000001C000080000000024100004D7
1750:106D400014B0008E3C0780003C0C08008D8C57E886
1751:106D50008F86FDE8ACEC00208E4B00088F98FDEC90
1752:106D600024090050ACCB00308E430008ACC3005067
1753:106D70008E42000CACC200348E4A0010ACCA0038FF
1754:106D80008E440010ACC400548E5F0014ACDF003C95
1755:106D90008E590018AF1900048E4F001CACCF002094
1756:106DA00090D10000322500FF10A9027D00000000F4
1757:106DB0008CD100348CCF0030022F302304C000F37C
1758:106DC0002404008C126000F0240200030A0007EF84
1759:106DD000AF82004C2418000514B800683C0B8000FA
1760:106DE0003C0C08008D8C57E88F86FDE8AD6C0020C8
1761:106DF0008E4300048F9FFDEC24072000ACC3001CD1
1762:106E00009242000824120008A3E200198F8A003C75
1763:106E100091440009A3E400188F85003C90B9000A52
1764:106E2000332400FF1092001028880009150000BCD0
1765:106E3000240D0002240900201089000B3407800073
1766:106E4000289100211620000824074000240F00404C
1767:106E5000108F00053C0700012418008010980002E4
1768:106E60003C070002240740008CC400183C0AFF00C5
1769:106E7000008AF82403E7C825ACD9001890B2000BAB
1770:106E8000A0D200278F83003C9465000C10A0023133
1771:106E9000000000009467000C3C1F8000A4C7005C49
1772:106EA0009062000E2403FFBF24070004A0C2000864
1773:106EB0008F8A003C9144000FA0C400098F88003CD9
1774:106EC0008D1200108FF9007402592823ACC50058A8
1775:106ED0008D180014ACD8002C950F001831F1FFFF6D
1776:106EE000ACD100409509001A3130FFFFACD000440E
1777:106EF0008D0E001CACCE0048950D0002A4CD00788C
1778:106F0000910C000EA0CC000890CB00080163102467
1779:106F1000126001D7A0C200088F92003C0A0007EF60
1780:106F2000AF87004C2406000614A600143C0E800017
1781:106F30003C1008008E1057E88F8CFDE4ADD0002087
1782:106F40008E4D00188F86FDE88F8BFDECAD8D000017
1783:106F50008CC8003824040005AD8800048CC3003CB4
1784:106F600012600081AD6300000A0007EFAF84004C9F
1785:106F70002409000710A9004B240400063C05080062
1786:106F800024A557E80E000705240400818F92003CD9
1787:106F90000013102B0A0007EFAF82004C241F0023C0
1788:106FA00014BFFFF63C0C80003C0308008C6357E8DC
1789:106FB0008F8BFDECAD8300208F91FDE88E460004A1
1790:106FC0002564002026450014AE2600282406000370
1791:106FD0000E000E1C257000308F87003C020020211F
1792:106FE000240600030E000E1C24E500083C040800E3
1793:106FF000248457E80E0007320000000092220000AF
1794:1070000024040050304A00FF5544FFE18F92003CB9
1795:107010000E000E07000000000A0008F48F92003CEA
1796:107020002408003314A800323C0280003C11080000
1797:107030008E3157E88F89FDECAC5100208E4A000854
1798:10704000240F00288F8DFDE8AD2A00308E44000CFF
1799:1070500024060009AD2400348E5F0010AD3F0038D7
1800:107060008E590014AD3900208E450018AD2500243E
1801:107070008E58001CAD380028A12F00118E4E000440
1802:1070800012600031ADAE00288F92003C0A0007EF7D
1803:10709000AF86004C2411002214B1FFB8000000009C
1804:1070A000240400073C1808008F1857E83C0F8000A4
1805:1070B000ADF800205660FEB1AF84004C3C040800DF
1806:1070C000248457E80E000732241300508F99FDE8FE
1807:1070D00093320000324500FF10B3016C0000000045
1808:1070E0008F92003C000020210A0007EFAF84004C83
1809:1070F0003C05080024A557E80E0006D524040081AD
1810:107100000A0008F48F92003C02D498213265FFFFF8
1811:107110000E0006C8240400840A0007EF8F92003C8A
1812:10712000108DFF51240704002887000310E001AAF6
1813:1071300024100004240E0001548EFF4B240740004D
1814:107140000A0008AA240701003C05080024A557E806
1815:107150000E000724240400828F92003C000030219E
1816:107160000A0007EFAF86004C3C040800248457E86F
1817:107170008CC200380E0007328CC3003C8F92003C5A
1818:107180000A00094A00002021240400823C0508006E
1819:1071900024A557E80E000724000000008F92003C51
1820:1071A000000010210A0007EFAF82004C8E5000044F
1821:1071B0008F91FDE83C0A8000AD500020922200052E
1822:1071C000020028213046000214C001872404008AEE
1823:1071D0008F92FDEC020028212404008D924B001BAD
1824:1071E000316300201460018000000000922D00092E
1825:1071F000240C001231A800FF110C017B2404008133
1826:107200000E0006F6020020219245001B240E000409
1827:107210000200202134A90042A249001B0E000700F1
1828:10722000A22E00253C0480008C9101780620FFFEF0
1829:1072300024180002AC900140A09801448F92003CB9
1830:107240003C0F1000AC8F01780A0008F50013102BDA
1831:107250008E5000048F91FDE83C1F8000AFF00020AD
1832:1072600092390005020028213327000214E0001A99
1833:107270002404008A922600092412001230C400FF60
1834:10728000109201110000000092230009240A00045A
1835:10729000306200FF104A010C000000000E0006F6EC
1836:1072A000020020218F88FDEC240CFFFE020020212B
1837:1072B000910E001B35CD0020A10D001BA23200094C
1838:1072C000922B0005016C90240E000700A2320005ED
1839:1072D00002002821000020210E0007BA0000000053
1840:1072E0000A0008F48F92003C8E5100043C0280009A
1841:1072F0003C100800261057E8AC5100203C01080063
1842:10730000AC3157E89246000330C400041080016994
1843:107310008F84FDE824020006A0820009924D001B24
1844:107320002408FFC031AC003F01885825A08B00081D
1845:1073300092430003306A0001154001600000000024
1846:107340008E420008AE0200083C0208008C4257F052
1847:107350001040015F8F8EFDEC000281C28F85FDE839
1848:10736000A5D0000C8E5F000C240F0001240900142E
1849:10737000ADDF002C8E590010ADD9001C96470016C9
1850:10738000A5C7003C96580014A5D8003EACAF000C31
1851:10739000A4AF0010A4AF0012A4AF0014A4AF001655
1852:1073A00012600163A1C900119244000330920002EF
1853:1073B0002E5300018F92003C266200080A0007EF5E
1854:1073C000AF82004C8E4600043C0580003C048008DF
1855:1073D000ACA600208E4700089089000024110050C0
1856:1073E000312200FF105100BC240500883C048000BD
1857:1073F0008C8F01B805E0FFFE0013802B3C1840097C
1858:1074000000B81025AF90004C3C101000AC860180F5
1859:10741000AC870184AC820188AC9001B80A0007F007
1860:107420008F8600308E4500043C0680003C098008B1
1861:10743000ACC50020913F00002404005033F900FF48
1862:10744000132400B4240600883C0480008C8A01B810
1863:107450000540FFFE3C0E400E00CE68253C081000A3
1864:10746000AC850180AC800184AC8D0188AC8801B80A
1865:10747000912B0000240CFF8024040004016C1825CB
1866:10748000240600300E000666A12300000A0008F45E
1867:107490008F92003C8E5000048F91FDEC3C0F8000D9
1868:1074A000ADF000209225001B30A900101120007CB7
1869:1074B000240300813C0480008C8701B804E0FFFEB7
1870:1074C0003C1F401FAC900180007F10250013C82B8B
1871:1074D0003C101000AC800184AF99004CAC82018854
1872:1074E000AC9001B80A0007F08F8600308E44001C73
1873:1074F0000E0006E100000000104000FC00403821B2
1874:107500008F92003C240600893C0580008CAE01B8B7
1875:1075100005C0FFFE00000000ACA701808E50001CDB
1876:107520003C1140010013782B00D138253C1310008A
1877:10753000ACB00184AF8F004CACA70188ACB301B8EC
1878:107540000A0007F08F860030965900023C100800B0
1879:10755000261057E833380004130000A73C046000ED
1880:107560008E5F001C3C068000ACDF00203C01080060
1881:10757000AC3F57E8964F000231E7000114E000E706
1882:10758000000000008E420004AE0200083C1008001B
1883:107590008E1057F0120000DD3C0680008F85FDE85C
1884:1075A000241000018CBF00188F91FDEC8F89FDE441
1885:1075B00003E6C825ACB90018A0A00005ACB0000CCB
1886:1075C0003C1808008F1857F08F87003CA4B00010BB
1887:1075D000001879C2A4B00012A4B00014A4B0001620
1888:1075E000A62F000C8CEE00088F8D003C8F8C003C89
1889:1075F000AE2E002C8DA8000C24070002AE28001C23
1890:10760000918B0010A22B00118F83003C906A001117
1891:10761000A12A00088F82003C90440012A0A4004ED2
1892:107620008F92003C92460013A22600128F92003CDB
1893:10763000965F0014A63F003C96590016A639003EFE
1894:107640008E580018AE3800145660FD4CAF87004CC1
1895:107650003C05080024A557E80E000705000020217E
1896:107660008F92003C000038210A0007EFAF87004CE2
1897:107670003C05080024A557E80E00072424040082D6
1898:107680008F92003C0A0008D7000038210E000E0738
1899:10769000000000008F92003C0A00094A00002021EF
1900:1076A0000E0006F6020020219232001B020020216B
1901:1076B000365800100E000700A238001B8F92003CC5
1902:1076C0000A000A3D000018210E0007BA24040081B8
1903:1076D0000A0008F48F92003C9243000C306A0001CB
1904:1076E0001140000300000000964B000EA48B002CFC
1905:1076F0009248000C310C00021180FF3C0000282150
1906:10770000964E00128E4D0014A48E001A0A000A0B29
1907:10771000AC8D001C8F83005C8F8700541067FF4A7C
1908:10772000000030213C0808002508576C000320C0E9
1909:10773000008830218CD10000122500C8246200018D
1910:107740003043000F1467FFFA000320C00A000A222A
1911:10775000000030213C05080024A557E80E0007244E
1912:107760002404008B8F92003C0A0008D70013382BAA
1913:107770003C0C08008D8C57E824D9FFFE25910100B0
1914:10778000322B007F0167902102331024AD020028C4
1915:10779000AE4600D0AE4000D40A000840AE59001CEE
1916:1077A000ACC000543C0908008D2957E83C05800C0A
1917:1077B00034A80100ACE900288E500014AD1000D0B0
1918:1077C0008E4E0014AD0E00D48E4D001025A7FFFE86
1919:1077D0000A00087CAD07001C5490FDA3240740005C
1920:1077E0000A0008AA240710000E0007AE00000000DF
1921:1077F0000A0008F48F92003C8C83442C3C05DEADDB
1922:1078000034B2BEEF3C010800AC2057E81072004FC4
1923:10781000000000003C046C6234827970146200083D
1924:1078200024040002978A0058978300500200282100
1925:107830000143482B11200019240400922404000263
1926:107840000E0005D6240502003C0B8000AD6200202E
1927:107850003C010800AC2257E81040000D8F8E003C20
1928:10786000240C00282404000391CD001031A800FF4F
1929:10787000550C0001240400010E00004A0000000025
1930:1078800010400004240400830A000A6D8F92003C1B
1931:10789000240400833C05080024A557E80E000705D2
1932:1078A000000000008F92003C0013382B0A0007EF05
1933:1078B000AF87004C0A0009D6240200128E4400084B
1934:1078C0000E0006E1000000000A0009E2AE02000816
1935:1078D0003C05080024A557E80E0006D524040087BF
1936:1078E0008F92003C0A0009FF0013102B24040004AF
1937:1078F0000E0005D624050030144000170040382142
1938:107900008F92003C0A000A52240600833C050800BE
1939:1079100024A557E80A000B37240400878E4400048E
1940:107920000E0006E1000000000A000A73AE02000823
1941:107930003C05080024A557E80E0007242404008213
1942:107940008F92003C0A0009FF000010218C83442C18
1943:107950000A000B163C046C628F92003C3C088008C5
1944:107960003C0C8000240B0050240A0001AD82002052
1945:10797000A10B0000A10A000192490004A10900180E
1946:1079800092440005A1040019924300063C0408003B
1947:107990002484576CA103001A924200073C0308009C
1948:1079A00024635768A102001B92450008A105001C32
1949:1079B00092460009A106001D925F000AA11F001E49
1950:1079C0009259000BA119001F9258000CA118002019
1951:1079D0009251000DA11100219250000EA110002221
1952:1079E000924F000FA10F0023924E0010A10E002411
1953:1079F000924D0011A10D0025964C0014A50C0028F5
1954:107A0000964B00168F8A00548F98005CA50B002AB5
1955:107A100096490018000A10C025450001A509002C50
1956:107A20008E46001C0044C8210043F82130A5000FF9
1957:107A3000AFE60000AF27000010B80003AF85005488
1958:107A40000A000A520000302124AD000131A8000FC5
1959:107A5000000030210A000A52AF88005C3C07080091
1960:107A600024E7576800879021ACC000000000302157
1961:107A70000A000A22AE4000003C0482013C03600080
1962:107A800034820E02AC603D68AF80007C03E00008E9
1963:107A9000AC623D6C27BDFFE8AFB000103090FFFF37
1964:107AA000001018422C620041AFBF001414400002C5
1965:107AB00024040080240300403C010800AC30006036
1966:107AC0003C010800AC2300640E000E100060282169
1967:107AD000244802BF2409FF800109282400103980AE
1968:107AE000001030408FBF00148FB0001000A720217D
1969:107AF00000861821AF8300643C010800AC250058C3
1970:107B00003C010800AC24005C03E0000827BD00181D
1971:107B1000308300FF30C6FFFF30E400FF3C088000E8
1972:107B20008D0201B80440FFFE0003540001443825D3
1973:107B30003C09600000E920253C031000AD050180F0
1974:107B4000AD060184AD04018803E00008AD0301B86F
1975:107B50008F86003C3C096012352700108CCB000456
1976:107B60003C0C600E35850010316A00062D4800017E
1977:107B7000ACE800C48CC40004ACA431808CC2000802
1978:107B800094C30002ACA2318403E00008A783007410
1979:107B90008F85003C8F87FF408F86FF488CAE0004A6
1980:107BA0003C0F601235E80010ACEE00688CAD0008A8
1981:107BB000ACED006C8CAC0010ACCC004C8CAB000C71
1982:107BC000ACCB004894CA00543C0208008C420044EC
1983:107BD00025490001A4C9005494C400543083FFFF18
1984:107BE00010620017000000003C0208008C420040B8
1985:107BF000A4C200528CA30018ACE300308CA2001485
1986:107C0000ACE2002C8CB90018ACF900388CB8001428
1987:107C100024050001ACF800348D0600BC50C50019E5
1988:107C20008D0200B48D0200B8A4E2004894E400483C
1989:107C3000A4E4004A94E800DA03E000083102FFFF00
1990:107C40003C0208008C420024A4C00054A4C200528C
1991:107C50008CA30018ACE300308CA20014ACE2002C22
1992:107C60008CB90018ACF900388CB800142405000158
1993:107C7000ACF800348D0600BC54C5FFEB8D0200B893
1994:107C80008D0200B4A4E2004894E40048A4E4004A51
1995:107C900094E800DA03E000083102FFFF8F86003C21
1996:107CA0003C0480008CC900088CC80008000929C069
1997:107CB000000839C0AC87002090C300073062000480
1998:107CC0001040003AAF85007890CB0007316A000879
1999:107CD000114000398F87FF448CCD000C8CCE0014EE
2000:107CE00001AE602B11800032000000008CC2000C3D
2001:107CF000ACE200708CCB00188F85FF408F88FF4866
2002:107D0000ACEB00748CCA00102402FFF8ACAA00C8C7
2003:107D10008CC9000CAD0900608CC4001CACA400C070
2004:107D200090E3007C0062C824A0F9007C90D8000792
2005:107D3000330F000811E000040000000090ED007C0B
2006:107D400035AC0001A0EC007C90CF000731EE0001C3
2007:107D500011C000090000000090E4007C241800021B
2008:107D600034820002A0E2007C90A300EC307900FF96
2009:107D7000133800132408003490C90007312600028C
2010:107D800010C000040000000090EB007C356A000485
2011:107D9000A0EA007C90ED007D31AC003FA0EC007DBE
2012:107DA00094A700DA03E0000830E2FFFF8F87FF446A
2013:107DB0000A000C4C8CC200140A000C4DACE00070A0
2014:107DC0000A000C6EACA800CC8F8C003C27BDFFD8FD
2015:107DD000AFB3001CAFB20018AFB00010AFBF0020AF
2016:107DE000AFB10014918F00153C13600E3673001074
2017:107DF00031EB000FA38B00808D8F00048D8B00086A
2018:107E0000959F0012959900109584001A9598001E70
2019:107E1000958E001C33EDFFFF332AFFFF3089FFFFF3
2020:107E20003308FFFF31C7FFFF3C010800AC2D0024E1
2021:107E30003C010800AC2900443C010800AC2A004089
2022:107E4000AE683178AE67317C91850015959100164A
2023:107E50003C1260123652001030A200FF3230FFFF99
2024:107E6000AE623188AE5000B491830014959F001823
2025:107E7000240600010066C80433F8FFFFAE5900B8BD
2026:107E8000AE5800BC918E0014AF8F00683C086006AD
2027:107E900031CD00FFAE4D00C0918A00159584000ED3
2028:107EA0003C07600A314900FFAF8B006C3084FFFF54
2029:107EB000AE4900C8351100100E000BB534F00410A7
2030:107EC0003C0208008C4200603C0308008C630064A4
2031:107ED0003C0608008CC600583C0508008CA5005CD8
2032:107EE0008F8400648FBF0020AE23004CAE65319CB0
2033:107EF000AE030054AE4500DCAE6231A0AE6331A4E7
2034:107F0000AE663198AE2200488FB3001CAE0200501E
2035:107F10008FB10014AE4200E0AE4300E4AE4600D89C
2036:107F20008FB000108FB200180A0004BE27BD0028D1
2037:107F3000978500769783006027BDFFE8AFB00010FB
2038:107F400000A3102BAFBF0014240400058F90003C49
2039:107F500010400055240900020E0005D68F850064EC
2040:107F6000AF820078240400031040004F240900026F
2041:107F70003C0680000E00004AACC20020240700012D
2042:107F8000240820001040004D24040005978E007640
2043:107F90008F8AFF442409005025C50001A78500767B
2044:107FA000A14900003C0D08008DAD00642403800051
2045:107FB0008F84FF40000D6600AD4C0018A540000600
2046:107FC000954B000A8F85FF482402FF80016330240F
2047:107FD000A546000A915F000A0000482103E2C82577
2048:107FE000A159000AA0A00008A140004CA08000C533
2049:107FF00096180002978300743C020004A49800DAEB
2050:10800000960F00022418FFBF25EE2401A48E00AEB7
2051:108010008E0D0004ACAD00448E0C0008ACAC0040EA
2052:10802000A4A00050A4A000548E0B000C240C00301F
2053:10803000AC8B00288E060010AC860024A480003E85
2054:10804000A487004EA4870050A483003CAD42007476
2055:10805000AC8800C8ACA80060A08700EC909F00C46A
2056:1080600033F9007FA09900C4909000C402187824CE
2057:10807000A08F00C4914E007C35CD0001A14D007C45
2058:10808000938B0080AD480070AC8C00CCA08B00C6F8
2059:108090008F88006C8F870068AC8800B4AC8700B80C
2060:1080A000A5400078A540007A8FBF00148FB0001063
2061:1080B0000120102103E0000827BD00188F850078FB
2062:1080C0000E0006668F8600640A000D3A240900023D
2063:1080D00027BDFFE0AFB000108F90003CAFB100149F
2064:1080E000AFBF00188E0900040E00048B000921C0E8
2065:1080F0008E0800048F84FF408F82FF48000839C03B
2066:108100003C068000ACC70020948500DA9043001341
2067:108110001460001C30B1FFFF8F8CFF44918B00086E
2068:10812000316A00401540000B000000008E0D000475
2069:10813000022030218FBF00188FB100148FB00010C3
2070:108140002404002200003821000D29C00A000BD4AD
2071:1081500027BD00200E000061000000008E0D00040D
2072:10816000022030218FBF00188FB100148FB0001093
2073:108170002404002200003821000D29C00A000BD47D
2074:1081800027BD00200E000059000000008E0D0004E5
2075:10819000022030218FBF00188FB100148FB0001063
2076:1081A0002404002200003821000D29C00A000BD44D
2077:1081B00027BD002027BDFFE0AFB200183092FFFFBF
2078:1081C000AFB00010AFBF001CAFB100141240001ED2
2079:1081D000000080218F86003C8CC50000240300062F
2080:1081E00000053F020005140230E400071483001666
2081:1081F000304500FF2CA80006110000400005588003
2082:108200003C0C0800258C54EC016C50218D49000079
2083:1082100001200008000000008F8E007C240D00016A
2084:1082200011CD005024020002AF82007C260900011B
2085:108230003130FFFF24C800200212202B0100302122
2086:108240001480FFE5AF88003C020010218FBF001CA6
2087:108250008FB200188FB100148FB0001003E0000837
2088:1082600027BD00209387006254E0003400003021D5
2089:108270000E000C82000000008F86003C0A000D9A60
2090:10828000240200018F87007C2405000210E50031E4
2091:1082900024040013000028210000302124070001DD
2092:1082A0000E000BD4000000000A000D9B8F86003CDE
2093:1082B0008F83007C240200021462FFF62404001263
2094:1082C0000E000C37000000008F8500780040302140
2095:1082D000240400120E000BD4000038210A000D9B6C
2096:1082E0008F86003C8F83007C2411000310710029CD
2097:1082F000241F0002107FFFCE260900012404001075
2098:1083000000002821000030210A000DB824070001D8
2099:108310008F91007C240600021626FFF92404001029
2100:108320000E000CDC00000000144000238F98003C7D
2101:108330008F86003C0A000D9A2402000324040014D6
2102:108340000E000BD4000028218F86003C0A000D9AF5
2103:10835000240200020E000D44000000000A000D9BE4
2104:108360008F86003C0E000BE4000000002419000280
2105:1083700024040014000028210000302100003821CE
2106:10838000AF99007C0E000BD4000000000A000D9B8A
2107:108390008F86003C0E000BF4000000008F850078F3
2108:1083A000241900020040302124040010000038216C
2109:1083B0000A000DF1AF99007C004038212404001020
2110:1083C000970F0002000028210E000BD431E6FFFFBA
2111:1083D0008F86003C0A000D9BAF91007C8F84FF4488
2112:1083E0003C077FFF34E6FFFF8C8500182402000164
2113:1083F00000A61824AC83001803E00008A082000542
2114:108400003084FFFF30A5FFFF108000070000182117
2115:108410003082000110400002000420420065182153
2116:108420001480FFFB0005284003E0000800601021D5
2117:1084300010C00007000000008CA2000024C6FFFF4F
2118:1084400024A50004AC82000014C0FFFB24840004B7
2119:1084500003E000080000000010A0000824A3FFFFB4
2120:10846000AC86000000000000000000002402FFFFB6
2121:108470002463FFFF1462FFFA2484000403E0000871
2122:1084800000000000000411C003E000082442024084
2123:1084900027BDFFE8AFB0001000808021AFBF0014FF
2124:1084A0000E000E3100A0202100504821240AFF8038
2125:1084B0008FBF00148FB00010012A30243127007FB5
2126:1084C0003C08800A3C04210000E8102100C4282553
2127:1084D0003C03800027BD0018AC650024AF8200205B
2128:1084E000AC400000AC65002403E00008AC40004054
2129:1084F0003C0D08008DAD005800056180240AFF8006
2130:1085000001A45821016C4821012A30243127007F21
2131:108510003C08800C3C04210000E8102100C4282500
2132:108520003C038000AC650028AF82001C03E000081B
2133:10853000AC40002430A5FFFF3C0680008CC201B88F
2134:108540000440FFFE3C08601500A838253C031000DD
2135:10855000ACC40180ACC00184ACC7018803E0000852
2136:10856000ACC301B83C0D08008DAD0058000561801A
2137:10857000240AFF8001A45821016C4021010A4824EB
2138:10858000000931403107007F00C728253C04200046
2139:1085900000A418253C028000AC43083003E000082A
2140:1085A000AF80001C27BDFFE8AFB000100080802125
2141:1085B000AFBF00140E000E3100A020210050482152
2142:1085C000240BFF80012B5024000A39403128007F02
2143:1085D0003C0620008FBF00148FB0001000E8282553
2144:1085E00034C2000100A218253C04800027BD0018F9
2145:1085F000AC83083003E00008AF8000203C05800811
2146:108600008CA700603C0680080087102B14400011E6
2147:108610002C8340008CA800602D0340001060000FE8
2148:10862000240340008CC900600089282B14A000029C
2149:10863000008018218CC3006000035A42000B308078
2150:108640003C0A0800254A554000CA202103E00008E2
2151:108650008C8200001460FFF32403400000035A42A0
2152:10866000000B30803C0A0800254A554000CA2021F2
2153:1086700003E000088C8200003C05800890A60008FA
2154:108680009384009024C20001304200FF3043007FF9
2155:108690001064000C00023827A0A200083C048000EF
2156:1086A0008C85017804A0FFFE8F8A008824090002CF
2157:1086B0003C081000AC8A0140A089014403E0000896
2158:1086C000AC8801780A000EB630E2008027BDFFC8F2
2159:1086D0003C05800834A40080AFBF0034AFBE00303A
2160:1086E000AFB7002CAFB60028AFB50024AFB4002060
2161:1086F000AFB3001CAFB20018AFB10014AFB00010A0
2162:10870000948300789482007A104300CD2405FFFF03
2163:108710003C1E80080080B8210A000F923C168000A1
2164:10872000108A00C88FBF00348F8400883C0B08007B
2165:108730008D6B005C240AFF803C07800E01644021A1
2166:10874000010A4824AEC9002C96E6007A3102007F67
2167:108750000047182130C57FFF000580400203A82193
2168:1087600096BF00003C1908008F390058240FFF8085
2169:1087700033F53FFF032488210015C1800238902182
2170:10878000024F58243C0C0100016C5025324E007FF2
2171:108790003C0D800C01CD9021028028210E000E346A
2172:1087A000AECA00288E4800108E4900308F86002007
2173:1087B0002402000201093823AE470010A0C20000C5
2174:1087C00096E3005C8E4400308F9100200E000E8FE7
2175:1087D0003070FFFF00022B800205C8253C1F4200BD
2176:1087E000033FC025AE3800048E5100048F8700205F
2177:1087F0008E4F000024080008ACF1001CACEF0018FC
2178:10880000ACE0000CACE000109250000A2406000519
2179:108810002405C000320E00FFA4EE0014964D00089F
2180:1088200002E09821A4ED0016924C000A3C0D80084D
2181:10883000318B00FFA4EB00209644000835AC01000A
2182:10884000A4E40022ACE00024924A000B314900FF6E
2183:10885000A4E90002A0E800018E4200308F830020CE
2184:108860002408FFBFAC620008A06600308F8E002095
2185:108870002403FFDF95DF003203E5C8240335C0255C
2186:10888000A5D8003291D10032322F003F35F00040A0
2187:10889000A1D000328F890020AD2000348D8B00C024
2188:1088A000AD2B00389124003C3C0B7FFF308A007FC9
2189:1088B000A12A003C8F8600203564FFFF90C7003C52
2190:1088C00000E81024A0C2003C8F9900209325003CB2
2191:1088D00000A3F824A33F003C8E5800348F8C002066
2192:1088E000AD9800408E4F002C8E51003001F1802356
2193:1088F000AD900044918E004831CD007FA18D00489D
2194:108900008F8500208E4A00308CA900480144402405
2195:108910000136382400E83025ACA600489242000A0F
2196:10892000A0A2004C964300088F9F0020A7E3004EB2
2197:108930008E5000308E4400300E0002F08FC5006073
2198:1089400092F1007C0002C1400002C90003197821A5
2199:10895000322E00020040282111C00003020F8021A6
2200:108960000002208002048021926D007C31AC000462
2201:108970001180000200057080020E80218E440030BC
2202:108980008F87002024058000308B0003000B5023CC
2203:108990003149000302094021ACE800349664007AB2
2204:1089A0009662007A9670007A30467FFF24C30001F9
2205:1089B000307F7FFF0205C824033FC025A678007AD8
2206:1089C0009671007A3C1208008E520060322F7FFFB1
2207:1089D00011F20028000000008F8400880E000E694C
2208:1089E00002A028218F8400880E000E7902802821A1
2209:1089F0000E000EAE0000000096F3007896F4007AA8
2210:108A00001293000F000028213C0980083524010042
2211:108A100093C80008908700C53114007F30E400FF40
2212:108A20000284302B14C0FF3E268A0001938D0090F3
2213:108A3000268B0001008D6021158BFF3C8F84008800
2214:108A40008FBF00348FBE00308FB7002C8FB6002848
2215:108A50008FB500248FB400208FB3001C8FB2001894
2216:108A60008FB100148FB0001000A0102103E00008A7
2217:108A700027BD0038967F007A03E5C824A679007ADE
2218:108A80009278007A926E007A331100FF001179C259
2219:108A9000000F9027001269C031CC007F018D28257E
2220:108AA000A265007A0A000F878F8400883C0380004B
2221:108AB0003084FFFF30A5FFFFAC640018AC65001CDC
2222:108AC00003E000088C62001427BDFFA83C06800864
2223:108AD000AFBF0054AFBE0050AFB7004CAFB60048B8
2224:108AE000AFB50044AFB40040AFB3003CAFB2003804
2225:108AF000AFB10034AFB0003034C80100910500C5FB
2226:108B000090C700083084FFFF30A500FF30E2007FEF
2227:108B10000045182AAFA40010A7A000181060009C00
2228:108B2000AFA0001490CA00083149007F00A930238B
2229:108B300024D4FFFF0014882B8FB300100013902B58
2230:108B400002328024520000858FB400143C03800858
2231:108B500094790052947E00508FB60010033EC023DB
2232:108B60000018BC00001714030016FC0002C2A82A5B
2233:108B700016A00002001F2C030040282100143C0016
2234:108B80000007240300A4102A5440000100A0202163
2235:108B90002885000914A000020080B02124160008D6
2236:108BA0003C0C80088D860048001659808D88004C4A
2237:108BB0003C0380003169FFFF3C0A0010012A202598
2238:108BC00034700400AC660038AF90008CAC68003C98
2239:108BD000AC64003000000000000000000000000055
2240:108BE0000000000000000000000000000000000085
2241:108BF000000000008C6E000031CD002011A0FFFDB0
2242:108C00000016902A0251782411E000360000B821A5
2243:108C10003C1580003C118008922200088EA40100BF
2244:108C200000008821305E007F0E000E3403C0282132
2245:108C30008E1F00108EA4010033F93FFF032028216E
2246:108C40000E000E4CAFB9001C921800003302003F1A
2247:108C50002C5300085260000D000080212405000103
2248:108C6000004518043067005D14E000B18F92008C5D
2249:108C7000306400021480014D8F86008C30680080C3
2250:108C80005500004A96180012000080218EA40100B1
2251:108C90000E000E698FA5001C8EA401000E000E7937
2252:108CA00003C028211200004F3C07800826E4000181
2253:108CB0008F8C008C0004BC000291A0230017BC0321
2254:108CC00002F6302A0014882B259F00402412000150
2255:108CD00000D1F02403E08021AF9F008C17C0FFCDAE
2256:108CE000AFB200143C07800894E800508FB3001026
2257:108CF0003C05800002E810213C0D0020A4E2005059
2258:108D0000ACAD003094F5005094F600520277502339
2259:108D10003149FFFF12D50041AFA900108CF6004C7D
2260:108D2000001749808CF7004802C9F8210000202173
2261:108D300003E9302B02E4602101868021ACFF004C66
2262:108D4000ACF000488FB300100013902B0232802447
2263:108D50001600FF7F3C0380088FB400148FBF0054BF
2264:108D60008FBE00503A8200018FB7004C8FB600488A
2265:108D70008FB500448FB400408FB3003C8FB20038F1
2266:108D80008FB100348FB0003003E0000827BD0058D9
2267:108D900090CF0008938C009031EE007F00AE6823E6
2268:108DA000018D58210A000FDD2574FFFF8F84008894
2269:108DB00024100001A7B800180E000E5D97A500183A
2270:108DC0008EA401000E000E698FA5001C8EA4010068
2271:108DD0000E000E7903C028211600FFB526E400011D
2272:108DE0003C07800894E800508FB300103C058000D9
2273:108DF00002E810213C0D0020A4E20050ACAD003090
2274:108E000094F5005094F60052027750233149FFFF49
2275:108E10000014882B16D5FFC1AFA9001094FE005492
2276:108E20008CF0004433D8FFFE001878C0020F702188
2277:108E3000ACAE003C8CF900448CA3003C03235823C7
2278:108E4000196002EA000000008CF200402642000196
2279:108E5000ACA200383C05005034A700103C03800051
2280:108E6000AC670030000000000000000000000000BF
2281:108E700000000000000000000000000000000000F2
2282:108E8000000000008C7F000033E6002010C0FFFDD2
2283:108E90003C108008960D00543C1780003C0680086A
2284:108EA00031B30001001350C00157B0218EC9040036
2285:108EB0003C0708008CE700443C040020ACC9004893
2286:108EC0008ED50404240C0001ACD5004C10EC02D06B
2287:108ED000AEE40030961800523C0508008CA5004016
2288:108EE00000B87821A60F0052960E005425C3000149
2289:108EF000A6030054961900543324FFFF5487FF0F34
2290:108F00008FB3001030A5FFFF0E000FBBA60000546A
2291:108F10003C0508008CA50024961200520045382319
2292:108F20000247F023A61E00520A000FDF8FB3001085
2293:108F30008F93001C3C0700808E4400283C1FFFEFED
2294:108F400037F9FFFFAE6400008E420024A260000AE1
2295:108F50003C0FFF9FAE6200049245002C35EEFFFFF0
2296:108F60003C0C0040A265000C8E71000CA265000B49
2297:108F70003C0600FF0227C0250319682401AE5824CF
2298:108F8000016C5025AE6A000C8E490004AE600018DA
2299:108F900034D0FFFFAE6900148E48002C8F82008809
2300:108FA000A660000801102024AE6400108E51000855
2301:108FB00096470012AE7100208E58000C30E33FFF40
2302:108FC00000032980AE7800248E4C001400A2F82102
2303:108FD00030F90001AE6C00288E4B0018001F71C2E2
2304:108FE00000197B80AE6B002C8E49001C01CF6821DC
2305:108FF000A66D001CAE690030964A00028E46002025
2306:10900000A66A001EAE66003492430033307000043E
2307:1090100056000006924B00003C06800834D0010048
2308:109020008E0800C0AE680030924B00008F8A00208E
2309:10903000A14B0030924900333123000250600007F9
2310:10904000924400018F8C0020240FFF80918E00300D
2311:1090500001CF6825A18D0030924400018F8200204D
2312:109060002418FFBF240AFFDFA04400318F9900209D
2313:109070003C088008350400809331003C323F007F7B
2314:10908000A33F003C8F8D002091AF003C01F870247D
2315:10909000A1AE003C8F8700208E6C001490E3003C52
2316:1090A0002D8B0001000B4940006A302400C9802547
2317:1090B000A0F0003C964500128F870020A4E5003206
2318:1090C0008E450004909F007C30A20003000288239C
2319:1090D0003239000300B9102133F8000217000002F2
2320:1090E00024440034244400303C038008346600806B
2321:1090F00090C9007C00A980243208000415000002F9
2322:1091000024830004008018218F840020240800029A
2323:10911000ACE30034A08800009242003F8F9F002003
2324:109120003C188008370F0080A3E200018F910020D7
2325:109130009259003F8E440004A639000295EE005C6F
2326:109140000E000E8F31D0FFFF00026B80020D5825FC
2327:109150003C0C4200016C2825AE2500048E4A0038E4
2328:109160008F850020ACAA00188E470034ACA7001CE5
2329:10917000ACA0000CACA00010A4A00014A4A0001689
2330:10918000A4A00020A4A00022ACA000248E620014A1
2331:109190005040000124020001ACA200080E000EAEF7
2332:1091A000241100010A0010332410000190D30001A3
2333:1091B000327200201240018A241000013C0A80080B
2334:1091C0003547008090E3007C8F93001CAFA0002403
2335:1091D0003069000111200011AFB000203C0580086B
2336:1091E0008CCB00148CAC0060016C882B1620000323
2337:1091F000016028213C1080088E0500603C0F80082B
2338:1092000035E300808C6E007000AE682B15A0000264
2339:1092100000A020218C640070AFA400248F82FF4C3A
2340:109220008CC400148C5900700099C02B53000001AD
2341:109230008C4400708FA200240082F82313E0000306
2342:10924000AFBF002824040002AFA400208FB200208A
2343:109250000292402B1500015B000018218CC50038DC
2344:109260008E6B000C3C0C0080AE6500008CC9003495
2345:109270003C11FF9F016C5025AE69000490C8003F6F
2346:109280003623FFFF014310243C1200203C04FFEF73
2347:10929000A268000B00523825349FFFFF00FFC02456
2348:1092A0003C1900088F87008C03197825AE6F000CDD
2349:1092B0008CED0014AE6000188FB10024AE6D001468
2350:1092C0008CF000188FAE0028AE70001C8CE50008F2
2351:1092D000022E6021AE6500248CEB000CA6600038E5
2352:1092E000A660003AAE6C002CAE600028AE6B002089
2353:1092F0008CEA00148FA30028015148230123302356
2354:1093000010C00011AE66001090E9003D8E620004AE
2355:109310008E7F00000009910000527821000020217A
2356:1093200001F2C82B03E4C02103197021AE6F0004C1
2357:10933000AE6E000090ED003DA26D000A8F90008C93
2358:1093400096060006A66600088F98002024190002E1
2359:109350003C0F80088FA4002435EE0080A319000084
2360:1093600095CD005C8F9200200E000E8F31B0FFFF74
2361:1093700000022B80020560253C0642008F85008C90
2362:1093800001865825AE4B00048F8400208CB1003834
2363:10939000AC9100188CA30034AC83001CAC80000C92
2364:1093A000AC800010A4800014A4800016A4800020CB
2365:1093B000A4800022AC80002490AA003F8FA7002444
2366:1093C000A48A000210E0000C240900018FBF0028CD
2367:1093D00053E0018890A2003D90A2003E2448000185
2368:1093E000A08800018F8500208FA40024ACA4000871
2369:1093F0000A0012133C118008A08900018F8500200B
2370:1094000024020001ACA200083C1180083623008031
2371:10941000906A007C3147000214E000022406003408
2372:10942000240600308F8D008C3C0F800835EE0080C4
2373:1094300091AC000091C8007C8FB00024A0AC00303B
2374:109440008F91008C8F8200208FAA00249227000128
2375:1094500032120003240B0004A047003101721823CC
2376:109460008F84008C8F8B0020241FC00094980012E2
2377:109470009579003230690003330F3FFF033F7024BA
2378:1094800001CF6825A56D00329165003200CA3021F8
2379:1094900000C9302130B0003F360C0040A16C0032D2
2380:1094A0008FB2002431070004124000028F85002093
2381:1094B00000C730213C048008ACA600343488010089
2382:1094C0008D1900C08FBF0024240DFFBFACB9003838
2383:1094D00090AF003C2FF800012412FFDF31EE007F37
2384:1094E000A0AE003C8F8B0020001889409170003C9A
2385:1094F000020D6024A16C003C8F87002090E3003CAB
2386:109500000072502401511025A0E2003C8F88008C8D
2387:109510008F9900208D090020AF2900408D0600247E
2388:10952000AF2600448D040028AF2400488D1F002C76
2389:10953000AF3F004C0E000EAE000000008FB80020C0
2390:10954000240500025705009F8FA300203C1F8000C8
2391:109550003C1280088FE40100925800088F92FF4C63
2392:109560000E000E343305007F8F8E00208FAF002059
2393:109570008FA40028A1CF00009659005C8F91002095
2394:109580000E000E8F3330FFFF00025B80020B682558
2395:109590003C0842008F8B008C01A83025AE260004C9
2396:1095A0008D7000388F8600200000282100051100F2
2397:1095B000ACD000188D6C00343C047FFF3488FFFF72
2398:1095C000ACCC001C9171003E8CCA001C8CDF0018D2
2399:1095D0000011390000111F02014770210043482586
2400:1095E00001C7C02B03E9782101F8C821ACCE001CCB
2401:1095F000ACD90018ACC0000CACC00010916D003E9E
2402:109600008FAA002824070005A4CD0014957000043B
2403:109610002418C0000148C824A4D00016916C003E54
2404:1096200001402021A4CC002095650004A4C500229F
2405:10963000ACC000249163003FA4C300029171003DBF
2406:1096400026220001A0C200018F8900203C02800870
2407:1096500034460100AD2A0008A12700308F91002078
2408:109660008F9F008C2402FF80962F003297EE00120D
2409:10967000030F802431CD3FFF020D6025A62C003260
2410:10968000922500322418FFBF2410FFDF30AB003FCB
2411:1096900035630040A22300328F9F00202403FFFF88
2412:1096A000AFE000348CCA00C0AFEA003893E7003C5A
2413:1096B00030E9007FA3E9003C8F8D00203C09800049
2414:1096C00091AF003C01F87024A1AE003C8F8B0020CC
2415:1096D000916C003C01902824A165003C8F870020FC
2416:1096E000ACE300408FB100243C038008ACF100449F
2417:1096F00090EA004801423025A0E600488F90002003
2418:109700008F8E008C8E1F004803E9C0240319782532
2419:10971000AE0F004891CD003EA20D004C8F8C008C06
2420:109720008F8B002095850004A565004E0E0002F089
2421:109730008C650060924A007C004028218FA600289A
2422:109740000002114000058900005138213149000212
2423:109750001120000300C71821000520800064182193
2424:109760003C028008344A00809147007C30E90004C4
2425:10977000112000038FB9002800056080006C1821BB
2426:10978000240B00048F91002033300003017040232C
2427:10979000310D0003006D3021AE2600343C038008FB
2428:1097A000A66500383C0580008CA401009073000879
2429:1097B0000E000E793265007F0E000EAE0000000034
2430:1097C0008FA300200003782B000F80230290A02499
2431:1097D00000608021006088210A0010330010802B77
2432:1097E0008F91001C8CD8003824190003A620000893
2433:1097F000AE3800008CCF0034A220000A8F8E008C7F
2434:10980000AE2F00043C05008091CB003FA239000C34
2435:109810008E28000C3C0DFF9FA22B000B010510258C
2436:1098200035A3FFFF3C13FFEF8F8E008C00433824DD
2437:10983000366AFFFF00EA4824AE29000C8DC40014EC
2438:1098400095D800128F860088AE2400108DCC0014AD
2439:10985000AE200018AE200020AE2C0014AE20002454
2440:109860008DDF0018330C3FFF000C9180AE3F0028C5
2441:109870008DCF00080246C821330B0001AE2F003007
2442:109880008DC3000C8F930020001941C2000B2B8068
2443:1098900001056821240200023C0A8008A62D001C54
2444:1098A000A6200034AE23002C35470080A2620000C1
2445:1098B00094E9005C8F9900203C044200313FFFFF97
2446:1098C00003E43025AF2600048F98008C240E00019D
2447:1098D0002402C0008F12003824060034AF32001872
2448:1098E0008F0F00343C12800836580080AF2F001CC8
2449:1098F000AF20000CAF200010A7200014A7200016F6
2450:10990000A7200020A7200022AF200024A7300002BB
2451:10991000A32E00018F8D00208F8B008CADB000082E
2452:1099200091680000A1A800308F91008C8F830020E7
2453:1099300092250001A06500318F9F002097F300322F
2454:1099400002625024014C3825A7E7003293E9003227
2455:109950003124003FA3E40032930F007C31EE00027B
2456:1099600015C000028F840020240600303C0E8008C1
2457:10997000AC86003435D101008E3900C02403FFBF0E
2458:1099800002008821AC990038908B003C0010802B9D
2459:109990003165007FA085003C8F8D002091A8003CA0
2460:1099A00001031024A1A2003C8F87002090F3003C0B
2461:1099B000366A0020A0EA003C8F9F008C8F92002026
2462:1099C0008FE90020AE4900408FE40024AE440044FB
2463:1099D0008FEC0028AE4C00488FE6002C0E000EAE37
2464:1099E000AE46004C0A001033000000000A0010A42C
2465:1099F0008CE2004024480001A08800018F850020EF
2466:109A00008FA40024ACA400080A0012133C118008A3
2467:109A100094CB00523C0808008D080024010B102153
2468:109A2000A4C200520A000FDF8FB3001027BDFFE071
2469:109A30003C0D8008AFB20018AFB00010AFBF001CE3
2470:109A4000AFB1001435B200808E4C001835A801006B
2471:109A5000964B000695A70050910900EC000C5602A9
2472:109A6000016728233143007F312600FF24020003D1
2473:109A7000A3830090AF84008810C2001B30B0FFFFAA
2474:109A8000910600EC2412000530C200FF1052003392
2475:109A900000000000160000098FBF001C8FB20018E4
2476:109AA0008FB100148FB00010240D0C003C0C80000E
2477:109AB00027BD002003E00008AD8D00240E000FC27A
2478:109AC000020020218FBF001C8FB200188FB100143C
2479:109AD0008FB00010240D0C003C0C800027BD00202E
2480:109AE00003E00008AD8D0024965800789651007A66
2481:109AF000924E007D0238782631E8FFFF31C400C065
2482:109B0000148000092D11000116000037000000002C
2483:109B10005620FFE28FBF001C0E000EC300000000A5
2484:109B20000A0013B78FBF001C1620FFDA00000000E8
2485:109B30000E000EC3000000001440FFD88FBF001CB1
2486:109B40001600002200000000925F007D33E2003F1B
2487:109B5000A242007D0A0013B78FBF001C950900DAEE
2488:109B60008F86006400802821240400050E0006660C
2489:109B70003130FFFF978300763C0480002465FFFFAF
2490:109B8000A78500768C8A01B80540FFFE0000000022
2491:109B9000AC8001808FBF001CAC9001848FB2001894
2492:109BA0008FB100148FB000103C0760133C0B100005
2493:109BB000240D0C003C0C800027BD0020AC870188E0
2494:109BC000AC8B01B803E00008AD8D00240E000FC27D
2495:109BD000020020215040FFB18FBF001C925F007D2A
2496:109BE0000A0013E433E2003F0E000FC202002021FE
2497:109BF0001440FFAA8FBF001C1220000700000000C5
2498:109C00009259007D3330003F36020040A242007D71
2499:109C10000A0013B78FBF001C0E000EC30000000027
2500:109C20005040FF9E8FBF001C9259007D3330003F93
2501:109C30000A00141336020040000411C003E00008BB
2502:109C4000244202403C050006008510253C038000AC
2503:109C5000AC620030000000000000000000000000C6
2504:109C60003C0580008CA7000030E6001010C0FFFD0E
2505:109C7000000000008CAB003C8CAA003C0164482131
2506:109C8000012A402B110000043C0680008CAD0038F6
2507:109C900025AC0001ACAC00388CCF003C01E4702155
2508:109CA00003E00008ACCE003C27BDFFD0AFB20018E7
2509:109CB000AFB00010AFBF0028AFB50024AFB4002094
2510:109CC000AFB3001CAFB1001400A0902114A000128B
2511:109CD000008080218F8200240002188014600037E9
2512:109CE000240400100E001421000000008FBF002883
2513:109CF0008FB500248FB400208FB3001C8FB20018E2
2514:109D00008FB100148FB000100000102127BD00306B
2515:109D100003E00008AF80002410A0001E000088218E
2516:109D20003C138000241400200A0014603C15000538
2517:109D3000263100040232502B11400017024010213E
2518:109D40008F8800248E0700002404008000084880CB
2519:109D50000133182125060001AC6704002610000419
2520:109D600014D4FFF3AF8600240E001421000000007D
2521:109D7000AE75003000000000000000000000000090
2522:109D800000000000263100040232502B1540FFEC89
2523:109D9000AF800024024010218FBF00288FB500241F
2524:109DA0008FB400208FB3001C8FB200188FB1001445
2525:109DB0008FB0001003E0000827BD0030000320230F
2526:109DC0003085000F0A0014490065202127BDFFD807
2527:109DD0003C03800000A03821AC670038AFB100140C
2528:109DE000AC66003C008088213C060022AC66003056
2529:109DF000AFB00010AC7100283C10800C3C04800C0B
2530:109E000024050070AFBF0024AFB40020AFB3001C26
2531:109E10000E00143AAFB20018260400800E00143A67
2532:109E200024050080260401000E00143A240500F0E9
2533:109E30003C0208008C4200641040001300008021A6
2534:109E40003C1480002413FF803C12800C0E00141E72
2535:109E50000200202100514821312A007F0133402493
2536:109E60000152202124050050AE8800280E00143A2B
2537:109E7000261000013C0508008CA500640205202B7B
2538:109E80001480FFF2000000003C0608008CC6006051
2539:109E900010C00015000080213C1480002413FF80B6
2540:109EA0003C12800C3C1908008F3900580010C1800A
2541:109EB000240500400331782101F8682131AE007F8C
2542:109EC00001B3602401D22021AE8C00280E00143A88
2543:109ED000261000013C0608008CC600600206582BC4
2544:109EE0001560FFF0000000003C1008008E10005CC0
2545:109EF0002414FF803C1F800C0211982102749024CE
2546:109F00003262007F3C118000005F2021AE320028C9
2547:109F10000E00143A000628408FBF00248FB40020A2
2548:109F20008FB3001C8FB200188FB100148FB00010D7
2549:109F300000002021000028210A00143A27BD002833
2550:109F40008F83003C8C62000410400003000000007E
2551:109F500003E00008000000008C6400108C6500081D
2552:089F60000A0014838C66000C5A
2553:089F6800000000000000001BD6
2554:109F70000000000F0000000A0000000800000006BA
2555:109F800000000005000000050000000400000004BF
2556:109F900000000003000000030000000300000003B5
2557:109FA00000000003000000020000000200000002A8
2558:109FB0000000000200000002000000020000000299
2559:109FC0000000000200000002000000020000000289
2560:109FD0000000000200000002000000020000000279
2561:0C9FE00000000001000000010000000172
2562:049FEC0080080100E8
2563:109FF0008008008080080000080017900800179073
2564:10A00000080017C8080017C8080017DC080017ACBC
2565:10A0100008001A04080019D008001A5C08001A5C2D
2566:10A0200008001AE408001A148008024008002154AD
2567:10A0300008001FA00800217C0800221408002364E7
2568:10A04000080023B0080024D4080023DC08002460A2
2569:10A0500008002010080029880800292C08001FBCCF
2570:10A0600008001FBC08001FBC080025480800254840
2571:10A0700008001FBC08001FBC0800280408001FBC03
2572:10A0800008001FBC08001FBC08001FBC0800286493
2573:10A0900008001FBC08001FBC08001FBC08001FBC34
2574:10A0A00008001FBC08001FBC08001FBC08001FBC24
2575:10A0B00008001FBC08001FBC08001FBC08001FBC14
2576:10A0C00008001FBC08001FBC080023D008001FBCEC
2577:10A0D00008001FBC080028D408001FBC08001FBCD3
2578:10A0E00008001FBC08001FBC08001FBC08001FBCE4
2579:10A0F00008001FBC08001FBC08001FBC08001FBCD4
2580:10A1000008001FBC08001FBC08001FBC08001FBCC3
2581:10A1100008001FBC08001FBC08001FBC080027283F
2582:10A1200008001FBC08001FBC08002690080025EC92
2583:10A130000800375008003724080036F0080036C4FD
2584:10A14000080036A408003658800801008008008006
2585:08A15000800800008008008077
2586:08A158000A000C760000000073
2587:10A16000000000000000000D727870342E362E3191
2588:10A17000360000000406100300000000000000018B
2589:10A1800000000000000000000000000000000000CF
2590:10A1900000000000000000000000000000000000BF
2591:10A1A00000000000000000000000000000000000AF
2592:10A1B000000000000000000000000000000000009F
2593:10A1C000000000000000000000000000000000008F
2594:10A1D000000000000000000000000000000000007F
2595:10A1E000000000000000000000000000000000006F
2596:10A1F000000000000000000000000000000000005F
2597:10A20000000000000000000000000000000000004E
2598:10A21000000000000000000000000000000000003E
2599:10A22000000000000000000000000000000000002E
2600:10A23000000000000000000000000000000000001E
2601:10A24000000000000000000000000000000000000E
2602:10A2500000000000000000000000000000000000FE
2603:10A2600000000000000000000000000000000000EE
2604:10A2700000000000000000000000000000000000DE
2605:10A2800000000000000000000000000000000000CE
2606:10A2900000000000000000000000000000000000BE
2607:10A2A00000000000000000000000000000000000AE
2608:10A2B000000000000000000000000000000000009E
2609:10A2C000000000000000000000000000000000008E
2610:10A2D000000000000000000000000000000000007E
2611:10A2E000000000000000000000000000000000006E
2612:10A2F000000000000000000000000000000000005E
2613:10A30000000000000000000000000000000000004D
2614:10A31000000000000000000000000000000000003D
2615:10A32000000000000000000000000000000000002D
2616:10A33000000000000000000000000000000000001D
2617:10A34000000000000000000000000000000000000D
2618:10A3500000000000000000000000000000000000FD
2619:10A3600000000000000000000000000000000000ED
2620:10A3700000000000000000000000000000000000DD
2621:10A3800000000000000000000000000000000000CD
2622:10A3900000000000000000000000000000000000BD
2623:10A3A00000000000000000000000000000000000AD
2624:10A3B000000000000000000000000000000000009D
2625:10A3C000000000000000000000000000000000008D
2626:10A3D000000000000000000000000000000000007D
2627:10A3E000000000000000000000000000000000006D
2628:10A3F000000000000000000000000000000000005D
2629:10A40000000000000000000000000000000000004C
2630:10A41000000000000000000000000000000000003C
2631:10A42000000000000000000000000000000000002C
2632:10A43000000000000000000000000000000000001C
2633:10A44000000000000000000000000000000000000C
2634:10A4500000000000000000000000000000000000FC
2635:10A4600000000000000000000000000000000000EC
2636:10A4700000000000000000000000000000000000DC
2637:10A4800000000000000000000000000000000000CC
2638:10A4900000000000000000000000000000000000BC
2639:10A4A00000000000000000000000000000000000AC
2640:10A4B000000000000000000000000000000000009C
2641:10A4C000000000000000000000000000000000008C
2642:10A4D000000000000000000000000000000000007C
2643:10A4E000000000000000000000000000000000006C
2644:10A4F000000000000000000000000000000000005C
2645:10A50000000000000000000000000000000000004B
2646:10A51000000000000000000000000000000000003B
2647:10A52000000000000000000000000000000000002B
2648:10A53000000000000000000000000000000000001B
2649:10A54000000000000000000000000000000000000B
2650:10A5500000000000000000000000000000000000FB
2651:10A5600000000000000000000000000000000000EB
2652:10A5700000000000000000000000000000000000DB
2653:10A5800000000000000000000000000000000000CB
2654:10A5900000000000000000000000000000000000BB
2655:10A5A00000000000000000000000000000000000AB
2656:10A5B000000000000000000000000000000000009B
2657:10A5C000000000000000000000000000000000008B
2658:10A5D000000000000000000000000000000000007B
2659:10A5E000000000000000000000000000000000006B
2660:10A5F000000000000000000000000000000000005B
2661:10A60000000000000000000000000000000000004A
2662:10A61000000000000000000000000000000000003A
2663:10A62000000000000000000000000000000000002A
2664:10A63000000000000000000000000000000000001A
2665:10A64000000000000000000000000000000000000A
2666:10A6500000000000000000000000000000000000FA
2667:10A6600000000000000000000000000000000000EA
2668:10A6700000000000000000000000000000000000DA
2669:10A6800000000000000000000000000000000000CA
2670:10A6900000000000000000000000000000000000BA
2671:10A6A00000000000000000000000000000000000AA
2672:10A6B000000000000000000000000000000000009A
2673:10A6C000000000000000000000000000000000008A
2674:10A6D000000000000000000000000000000000007A
2675:10A6E000000000000000000000000000000000006A
2676:10A6F000000000000000000000000000000000005A
2677:10A700000000000000000000000000000000000049
2678:10A710000000000000000000000000000000000039
2679:10A720000000000000000000000000000000000029
2680:10A730000000000000000000000000000000000019
2681:10A740000000000000000000000000000000000009
2682:10A7500000000000000000000000000000000000F9
2683:10A7600000000000000000000000000000000000E9
2684:10A7700000000000000000000000000000000000D9
2685:10A7800000000000000000000000000000000000C9
2686:10A7900000000000000000000000000000000000B9
2687:10A7A00000000000000000000000000000000000A9
2688:10A7B0000000000000000000000000000000000099
2689:10A7C0000000000000000000000000000000000089
2690:10A7D0000000000000000000000000000000000079
2691:10A7E0000000000000000000000000000000000069
2692:10A7F0000000000000000000000000000000000059
2693:10A800000000000000000000000000000000000048
2694:10A810000000000000000000000000000000000038
2695:10A820000000000000000000000000000000000028
2696:10A830000000000000000000000000000000000018
2697:10A840000000000000000000000000000000000008
2698:10A8500000000000000000000000000000000000F8
2699:10A8600000000000000000000000000000000000E8
2700:10A8700000000000000000000000000000000000D8
2701:10A8800000000000000000000000000000000000C8
2702:10A8900000000000000000000000000000000000B8
2703:10A8A00000000000000000000000000000000000A8
2704:10A8B0000000000000000000000000000000000098
2705:10A8C0000000000000000000000000000000000088
2706:10A8D0000000000000000000000000000000000078
2707:10A8E0000000000000000000000000000000000068
2708:10A8F0000000000000000000000000000000000058
2709:10A900000000000000000000000000000000000047
2710:10A910000000000000000000000000000000000037
2711:10A920000000000000000000000000000000000027
2712:10A930000000000000000000000000000000000017
2713:10A940000000000000000000000000000000000007
2714:10A9500000000000000000000000000000000000F7
2715:10A9600000000000000000000000000000000000E7
2716:10A9700000000000000000000000000000000000D7
2717:10A9800000000000000000000000000000000000C7
2718:10A9900000000000000000000000000000000000B7
2719:10A9A00000000000000000000000000000000000A7
2720:10A9B0000000000000000000000000000000000097
2721:10A9C0000000000000000000000000000000000087
2722:10A9D0000000000000000000000000000000000077
2723:10A9E0000000000000000000000000000000000067
2724:10A9F0000000000000000000000000000000000057
2725:10AA00000000000000000000000000000000000046
2726:10AA10000000000000000000000000000000000036
2727:10AA20000000000000000000000000000000000026
2728:10AA30000000000000000000000000000000000016
2729:10AA40000000000000000000000000000000000006
2730:10AA500000000000000000000000000000000000F6
2731:10AA600000000000000000000000000000000000E6
2732:10AA700000000000000000000000000000000000D6
2733:10AA800000000000000000000000000000000000C6
2734:10AA900000000000000000000000000000000000B6
2735:10AAA00000000000000000000000000000000000A6
2736:10AAB0000000000000000000000000000000000096
2737:10AAC0000000000000000000000000000000000086
2738:10AAD0000000000000000000000000000000000076
2739:10AAE0000000000000000000000000000000000066
2740:10AAF0000000000000000000000000000000000056
2741:10AB00000000000000000000000000000000000045
2742:10AB10000000000000000000000000000000000035
2743:10AB20000000000000000000000000000000000025
2744:10AB30000000000000000000000000000000000015
2745:10AB40000000000000000000000000000000000005
2746:10AB500000000000000000000000000000000000F5
2747:10AB600000000000000000000000000000000000E5
2748:10AB700000000000000000000000000000000000D5
2749:10AB800000000000000000000000000000000000C5
2750:10AB900000000000000000000000000000000000B5
2751:10ABA00000000000000000000000000000000000A5
2752:10ABB0000000000000000000000000000000000095
2753:10ABC0000000000000000000000000000000000085
2754:10ABD0000000000000000000000000000000000075
2755:10ABE0000000000000000000000000000000000065
2756:10ABF0000000000000000000000000000000000055
2757:10AC00000000000000000000000000000000000044
2758:10AC10000000000000000000000000000000000034
2759:10AC20000000000000000000000000000000000024
2760:10AC30000000000000000000000000000000000014
2761:10AC40000000000000000000000000000000000004
2762:10AC500000000000000000000000000000000000F4
2763:10AC600000000000000000000000000000000000E4
2764:10AC700000000000000000000000000000000000D4
2765:10AC800000000000000000000000000000000000C4
2766:10AC900000000000000000000000000000000000B4
2767:10ACA00000000000000000000000000000000000A4
2768:10ACB0000000000000000000000000000000000094
2769:10ACC0000000000000000000000000000000000084
2770:10ACD0000000000000000000000000000000000074
2771:10ACE0000000000000000000000000000000000064
2772:10ACF0000000000000000000000000000000000054
2773:10AD00000000000000000000000000000000000043
2774:10AD10000000000000000000000000000000000033
2775:10AD20000000000000000000000000000000000023
2776:10AD30000000000000000000000000000000000013
2777:10AD40000000000000000000000000000000000003
2778:10AD500000000000000000000000000000000000F3
2779:10AD600000000000000000000000000000000000E3
2780:10AD700000000000000000000000000000000000D3
2781:10AD800000000000000000000000000000000000C3
2782:10AD900000000000000000000000000000000000B3
2783:10ADA00000000000000000000000000000000000A3
2784:10ADB0000000000000000000000000000000000093
2785:10ADC0000000000000000000000000000000000083
2786:10ADD0000000000000000000000000000000000073
2787:10ADE0000000000000000000000000000000000063
2788:10ADF0000000000000000000000000000000000053
2789:10AE00000000000000000000000000000000000042
2790:10AE10000000000000000000000000000000000032
2791:10AE20000000000000000000000000000000000022
2792:10AE30000000000000000000000000000000000012
2793:10AE40000000000000000000000000000000000002
2794:10AE500000000000000000000000000000000000F2
2795:10AE600000000000000000000000000000000000E2
2796:10AE700000000000000000000000000000000000D2
2797:10AE800000000000000000000000000000000000C2
2798:10AE900000000000000000000000000000000000B2
2799:10AEA00000000000000000000000000000000000A2
2800:10AEB0000000000000000000000000000000000092
2801:10AEC0000000000000000000000000000000000082
2802:10AED0000000000000000000000000000000000072
2803:10AEE0000000000000000000000000000000000062
2804:10AEF0000000000000000000000000000000000052
2805:10AF00000000000000000000000000000000000041
2806:10AF10000000000000000000000000000000000031
2807:10AF20000000000000000000000000000000000021
2808:10AF30000000000000000000000000000000000011
2809:10AF40000000000000000000000000000000000001
2810:10AF500000000000000000000000000000000000F1
2811:10AF600000000000000000000000000000000000E1
2812:10AF700000000000000000000000000000000000D1
2813:10AF800000000000000000000000000000000000C1
2814:10AF900000000000000000000000000000000000B1
2815:10AFA00000000000000000000000000000000000A1
2816:10AFB0000000000000000000000000000000000091
2817:10AFC0000000000000000000000000000000000081
2818:10AFD0000000000000000000000000000000000071
2819:10AFE0000000000000000000000000000000000061
2820:10AFF0000000000000000000000000000000000051
2821:10B000000000000000000000000000000000000040
2822:10B010000000000000000000000000000000000030
2823:10B020000000000000000000000000000000000020
2824:10B030000000000000000000000000000000000010
2825:10B040000000000000000000000000000000000000
2826:10B0500000000000000000000000000000000000F0
2827:10B0600000000000000000000000000000000000E0
2828:10B0700000000000000000000000000000000000D0
2829:10B0800000000000000000000000000000000000C0
2830:10B0900000000000000000000000000000000000B0
2831:10B0A00000000000000000000000000000000000A0
2832:10B0B0000000000000000000000000000000000090
2833:10B0C0000000000000000000000000000000000080
2834:10B0D0000000000000000000000000000000000070
2835:10B0E0000000000000000000000000000000000060
2836:10B0F0000000000000000000000000000000000050
2837:10B10000000000000000000000000000000000003F
2838:10B11000000000000000000000000000000000002F
2839:10B12000000000000000000000000000000000001F
2840:10B13000000000000000000000000000000000000F
2841:10B1400000000000000000000000000000000000FF
2842:10B1500000000000000000000000000000000000EF
2843:10B1600000000000000000000000000000000000DF
2844:10B1700000000000000000000000000000000000CF
2845:10B1800000000000000000000000000000000000BF
2846:10B1900000000000000000000000000000000000AF
2847:10B1A000000000000000000000000000000000009F
2848:10B1B000000000000000000000000000000000008F
2849:10B1C000000000000000000000000000000000007F
2850:10B1D000000000000000000000000000000000006F
2851:10B1E000000000000000000000000000000000005F
2852:10B1F000000000000000000000000000000000004F
2853:10B20000000000000000000000000000000000003E
2854:10B21000000000000000000000000000000000002E
2855:10B22000000000000000000000000000000000001E
2856:10B23000000000000000000000000000000000000E
2857:10B2400000000000000000000000000000000000FE
2858:10B2500000000000000000000000000000000000EE
2859:10B2600000000000000000000000000000000000DE
2860:10B2700000000000000000000000000000000000CE
2861:10B2800000000000000000000000000000000000BE
2862:10B2900000000000000000000000000000000000AE
2863:10B2A000000000000000000000000000000000009E
2864:10B2B000000000000000000000000000000000008E
2865:10B2C000000000000000000000000000000000007E
2866:10B2D000000000000000000000000000000000006E
2867:10B2E000000000000000000000000000000000005E
2868:10B2F000000000000000000000000000000000004E
2869:10B30000000000000000000000000000000000003D
2870:10B31000000000000000000000000000000000002D
2871:10B32000000000000000000000000000000000001D
2872:10B33000000000000000000000000000000000000D
2873:10B3400000000000000000000000000000000000FD
2874:10B3500000000000000000000000000000000000ED
2875:10B3600000000000000000000000000000000000DD
2876:10B3700000000000000000000000000000000000CD
2877:10B3800000000000000000000000000000000000BD
2878:10B3900000000000000000000000000000000000AD
2879:10B3A000000000000000000000000000000000009D
2880:10B3B000000000000000000000000000000000008D
2881:10B3C000000000000000000000000000000000007D
2882:10B3D000000000000000000000000000000000006D
2883:10B3E000000000000000000000000000000000005D
2884:10B3F000000000000000000000000000000000004D
2885:10B40000000000000000000000000000000000003C
2886:10B41000000000000000000000000000000000002C
2887:10B42000000000000000000000000000000000001C
2888:10B43000000000000000000000000000000000000C
2889:10B4400000000000000000000000000000000000FC
2890:10B4500000000000000000000000000000000000EC
2891:10B4600000000000000000000000000000000000DC
2892:10B4700000000000000000000000000000000000CC
2893:10B4800000000000000000000000000000000000BC
2894:10B4900000000000000000000000000000000000AC
2895:10B4A000000000000000000000000000000000009C
2896:10B4B000000000000000000000000000000000008C
2897:10B4C000000000000000000000000000000000007C
2898:10B4D000000000000000000000000000000000006C
2899:10B4E000000000000000000000000000000000005C
2900:10B4F000000000000000000000000000000000004C
2901:10B50000000000000000000000000000000000003B
2902:10B51000000000000000000000000000000000002B
2903:10B52000000000000000000000000000000000001B
2904:10B53000000000000000000000000000000000000B
2905:10B5400000000000000000000000000000000000FB
2906:10B5500000000000000000000000000000000000EB
2907:10B5600000000000000000000000000000000000DB
2908:10B5700000000000000000000000000000000000CB
2909:10B5800000000000000000000000000000000000BB
2910:10B5900000000000000000000000000000000000AB
2911:10B5A000000000000000000000000000000000009B
2912:10B5B000000000000000000000000000000000008B
2913:10B5C000000000000000000000000000000000007B
2914:10B5D000000000000000000000000000000000006B
2915:10B5E000000000000000000000000000000000005B
2916:10B5F000000000000000000000000000000000004B
2917:10B60000000000000000000000000000000000003A
2918:10B61000000000000000000000000000000000002A
2919:10B62000000000000000000000000000000000001A
2920:10B63000000000000000000000000000000000000A
2921:10B6400000000000000000000000000000000000FA
2922:10B6500000000000000000000000000000000000EA
2923:10B6600000000000000000000000000000000000DA
2924:10B6700000000000000000000000000000000000CA
2925:10B6800000000000000000000000000000000000BA
2926:10B6900000000000000000000000000000000000AA
2927:10B6A000000000000000000000000000000000009A
2928:10B6B000000000000000000000000000000000008A
2929:10B6C000000000000000000000000000000000007A
2930:10B6D000000000000000000000000000000000006A
2931:10B6E000000000000000000000000000000000005A
2932:10B6F000000000000000000000000000000000004A
2933:10B700000000000000000000000000000000000039
2934:10B710000000000000000000000000000000000029
2935:10B720000000000000000000000000000000000019
2936:10B730000000000000000000000000000000000009
2937:10B7400000000000000000000000000000000000F9
2938:10B7500000000000000000000000000000000000E9
2939:10B7600000000000000000000000000000000000D9
2940:10B7700000000000000000000000000000000000C9
2941:10B7800000000000000000000000000000000000B9
2942:10B7900000000000000000000000000000000000A9
2943:10B7A0000000000000000000000000000000000099
2944:10B7B0000000000000000000000000000000000089
2945:10B7C0000000000000000000000000000000000079
2946:10B7D0000000000000000000000000000000000069
2947:10B7E0000000000000000000000000000000000059
2948:10B7F0000000000000000000000000000000000049
2949:10B800000000000000000000000000000000000038
2950:10B810000000000000000000000000000000000028
2951:10B820000000000000000000000000000000000018
2952:10B830000000000000000000000000000000000008
2953:10B8400000000000000000000000000000000000F8
2954:10B8500000000000000000000000000000000000E8
2955:10B8600000000000000000000000000000000000D8
2956:10B8700000000000000000000000000000000000C8
2957:10B8800000000000000000000000000000000000B8
2958:10B8900000000000000000000000000000000000A8
2959:10B8A0000000000000000000000000000000000098
2960:10B8B0000000000000000000000000000000000088
2961:10B8C0000000000000000000000000000000000078
2962:10B8D0000000000000000000000000000000000068
2963:10B8E0000000000000000000000000000000000058
2964:10B8F0000000000000000000000000000000000048
2965:10B900000000000000000000000000000000000037
2966:10B910000000000000000000000000000000000027
2967:10B920000000000000000000000000000000000017
2968:10B930000000000000000000000000000000000007
2969:10B9400000000000000000000000000000000000F7
2970:10B9500000000000000000000000000000000000E7
2971:10B9600000000000000000000000000000000000D7
2972:10B9700000000000000000000000000000000000C7
2973:10B9800000000000000000000000000000000000B7
2974:10B9900000000000000000000000000000000000A7
2975:10B9A0000000000000000000000000000000000097
2976:10B9B0000000000000000000000000000000000087
2977:10B9C0000000000000000000000000000000000077
2978:10B9D0000000000000000000000000000000000067
2979:10B9E0000000000000000000000000000000000057
2980:10B9F0000000000000000000000000000000000047
2981:10BA00000000000000000000000000000000000036
2982:10BA10000000000000000000000000000000000026
2983:10BA20000000000000000000000000000000000016
2984:10BA30000000000000000000000000000000000006
2985:10BA400000000000000000000000000000000000F6
2986:10BA500000000000000000000000000000000000E6
2987:10BA600000000000000000000000000000000000D6
2988:10BA700000000000000000000000000000000000C6
2989:10BA800000000000000000000000000000000000B6
2990:10BA900000000000000000000000000000000000A6
2991:10BAA0000000000000000000000000000000000096
2992:10BAB0000000000000000000000000000000000086
2993:10BAC0000000000000000000000000000000000076
2994:10BAD0000000000000000000000000000000000066
2995:10BAE0000000000000000000000000000000000056
2996:10BAF0000000000000000000000000000000000046
2997:10BB00000000000000000000000000000000000035
2998:10BB10000000000000000000000000000000000025
2999:10BB20000000000000000000000000000000000015
3000:10BB30000000000000000000000000000000000005
3001:10BB400000000000000000000000000000000000F5
3002:10BB500000000000000000000000000000000000E5
3003:10BB600000000000000000000000000000000000D5
3004:10BB700000000000000000000000000000000000C5
3005:10BB800000000000000000000000000000000000B5
3006:10BB900000000000000000000000000000000000A5
3007:10BBA0000000000000000000000000000000000095
3008:10BBB0000000000000000000000000000000000085
3009:10BBC0000000000000000000000000000000000075
3010:10BBD0000000000000000000000000000000000065
3011:10BBE0000000000000000000000000000000000055
3012:10BBF0000000000000000000000000000000000045
3013:10BC00000000000000000000000000000000000034
3014:10BC10000000000000000000000000000000000024
3015:10BC20000000000000000000000000000000000014
3016:10BC30000000000000000000000000000000000004
3017:10BC400000000000000000000000000000000000F4
3018:10BC500000000000000000000000000000000000E4
3019:10BC600000000000000000000000000000000000D4
3020:10BC700000000000000000000000000000000000C4
3021:10BC800000000000000000000000000000000000B4
3022:10BC900000000000000000000000000000000000A4
3023:10BCA0000000000000000000000000000000000094
3024:10BCB0000000000000000000000000000000000084
3025:10BCC0000000000000000000000000000000000074
3026:10BCD0000000000000000000000000000000000064
3027:10BCE0000000000000000000000000000000000054
3028:10BCF0000000000000000000000000000000000044
3029:10BD00000000000000000000000000000000000033
3030:10BD10000000000000000000000000000000000023
3031:10BD20000000000000000000000000000000000013
3032:10BD30000000000000000000000000000000000003
3033:10BD400000000000000000000000000000000000F3
3034:10BD500000000000000000000000000000000000E3
3035:10BD600000000000000000000000000000000000D3
3036:10BD700000000000000000000000000000000000C3
3037:10BD800000000000000000000000000000000000B3
3038:10BD900000000000000000000000000000000000A3
3039:10BDA0000000000000000000000000000000000093
3040:10BDB0000000000000000000000000000000000083
3041:10BDC0000000000000000000000000000000000073
3042:10BDD0000000000000000000000000000000000063
3043:10BDE0000000000000000000000000000000000053
3044:10BDF0000000000000000000000000000000000043
3045:10BE00000000000000000000000000000000000032
3046:10BE10000000000000000000000000000000000022
3047:10BE20000000000000000000000000000000000012
3048:10BE30000000000000000000000000000000000002
3049:10BE400000000000000000000000000000000000F2
3050:10BE500000000000000000000000000000000000E2
3051:10BE600000000000000000000000000000000000D2
3052:10BE700000000000000000000000000000000000C2
3053:10BE800000000000000000000000000000000000B2
3054:10BE900000000000000000000000000000000000A2
3055:10BEA0000000000000000000000000000000000092
3056:10BEB0000000000000000000000000000000000082
3057:10BEC0000000000000000000000000000000000072
3058:10BED0000000000000000000000000000000000062
3059:10BEE0000000000000000000000000000000000052
3060:10BEF0000000000000000000000000000000000042
3061:10BF00000000000000000000000000000000000031
3062:10BF10000000000000000000000000000000000021
3063:10BF20000000000000000000000000000000000011
3064:10BF30000000000000000000000000000000000001
3065:10BF400000000000000000000000000000000000F1
3066:10BF500000000000000000000000000000000000E1
3067:10BF600000000000000000000000000000000000D1
3068:10BF700000000000000000000000000000000000C1
3069:10BF800000000000000000000000000000000000B1
3070:10BF900000000000000000000000000000000000A1
3071:10BFA0000000000000000000000000000000000091
3072:10BFB0000000000000000000000000000000000081
3073:10BFC0000000000000000000000000000000000071
3074:10BFD0000000000000000000000000000000000061
3075:10BFE0000000000000000000000000000000000051
3076:10BFF0000000000000000000000000000000000041
3077:10C000000000000000000000000000000000000030
3078:10C010000000000000000000000000000000000020
3079:10C020000000000000000000000000000000000010
3080:10C030000000000000000000000000000000000000
3081:10C0400000000000000000000000000000000000F0
3082:10C0500000000000000000000000000000000000E0
3083:10C0600000000000000000000000000000000000D0
3084:10C0700000000000000000000000000000000000C0
3085:10C0800000000000000000000000000000000000B0
3086:10C0900000000000000000000000000000000000A0
3087:10C0A0000000000000000000000000000000000090
3088:10C0B0000000000000000000000000000000000080
3089:10C0C0000000000000000000000000000000000070
3090:10C0D0000000000000000000000000000000000060
3091:10C0E0000000000000000000000000000000000050
3092:10C0F0000000000000000000000000000000000040
3093:10C10000000000000000000000000000000000002F
3094:10C11000000000000000000000000000000000001F
3095:10C12000000000000000000000000000000000000F
3096:10C1300000000000000000000000000000000000FF
3097:10C1400000000000000000000000000000000000EF
3098:10C1500000000000000000000000000000000000DF
3099:10C1600000000000000000000000000000000000CF
3100:10C1700000000000000000000000000000000000BF
3101:10C1800000000000000000000000000000000000AF
3102:10C19000000000000000000000000000000000009F
3103:10C1A000000000000000000000000000000000008F
3104:10C1B000000000000000000000000000000000007F
3105:10C1C000000000000000000000000000000000006F
3106:10C1D000000000000000000000000000000000005F
3107:10C1E000000000000000000000000000000000004F
3108:10C1F000000000000000000000000000000000003F
3109:10C20000000000000000000000000000000000002E
3110:10C21000000000000000000000000000000000001E
3111:10C22000000000000000000000000000000000000E
3112:10C2300000000000000000000000000000000000FE
3113:10C2400000000000000000000000000000000000EE
3114:10C2500000000000000000000000000000000000DE
3115:10C2600000000000000000000000000000000000CE
3116:10C2700000000000000000000000000000000000BE
3117:10C2800000000000000000000000000000000000AE
3118:10C29000000000000000000000000000000000009E
3119:10C2A000000000000000000000000000000000008E
3120:10C2B000000000000000000000000000000000007E
3121:10C2C000000000000000000000000000000000006E
3122:10C2D000000000000000000000000000000000005E
3123:10C2E000000000000000000000000000000000004E
3124:10C2F000000000000000000000000000000000003E
3125:10C30000000000000000000000000000000000002D
3126:10C31000000000000000000000000000000000001D
3127:10C32000000000000000000000000000000000000D
3128:10C3300000000000000000000000000000000000FD
3129:10C3400000000000000000000000000000000000ED
3130:10C3500000000000000000000000000000000000DD
3131:10C3600000000000000000000000000000000000CD
3132:10C3700000000000000000000000000000000000BD
3133:10C3800000000000000000000000000000000000AD
3134:10C39000000000000000000000000000000000009D
3135:10C3A000000000000000000000000000000000008D
3136:10C3B000000000000000000000000000000000007D
3137:10C3C000000000000000000000000000000000006D
3138:10C3D000000000000000000000000000000000005D
3139:10C3E000000000000000000000000000000000004D
3140:10C3F000000000000000000000000000000000003D
3141:10C40000000000000000000000000000000000002C
3142:10C41000000000000000000000000000000000001C
3143:10C42000000000000000000000000000000000000C
3144:10C4300000000000000000000000000000000000FC
3145:10C4400000000000000000000000000000000000EC
3146:10C4500000000000000000000000000000000000DC
3147:10C4600000000000000000000000000000000000CC
3148:10C4700000000000000000000000000000000000BC
3149:10C4800000000000000000000000000000000000AC
3150:10C49000000000000000000000000000000000009C
3151:10C4A000000000000000000000000000000000008C
3152:10C4B000000000000000000000000000000000007C
3153:10C4C000000000000000000000000000000000006C
3154:10C4D000000000000000000000000000000000005C
3155:10C4E000000000000000000000000000000000004C
3156:10C4F000000000000000000000000000000000003C
3157:10C50000000000000000000000000000000000002B
3158:10C51000000000000000000000000000000000001B
3159:10C52000000000000000000000000000000000000B
3160:10C5300000000000000000000000000000000000FB
3161:10C5400000000000000000000000000000000000EB
3162:10C5500000000000000000000000000000000000DB
3163:10C5600000000000000000000000000000000000CB
3164:10C5700000000000000000000000000000000000BB
3165:10C5800000000000000000000000000000000000AB
3166:10C59000000000000000000000000000000000009B
3167:10C5A000000000000000000000000000000000008B
3168:10C5B000000000000000000000000000000000007B
3169:10C5C000000000000000000000000000000000006B
3170:10C5D000000000000000000000000000000000005B
3171:10C5E000000000000000000000000000000000004B
3172:10C5F000000000000000000000000000000000003B
3173:10C60000000000000000000000000000000000002A
3174:10C61000000000000000000000000000000000001A
3175:10C62000000000000000000000000000000000000A
3176:10C6300000000000000000000000000000000000FA
3177:10C6400000000000000000000000000000000000EA
3178:10C6500000000000000000000000000000000000DA
3179:10C6600000000000000000000000000000000000CA
3180:10C6700000000000000000000000000000000000BA
3181:10C6800000000000000000000000000000000000AA
3182:10C69000000000000000000000000000000000009A
3183:10C6A000000000000000000000000000000000008A
3184:10C6B000000000000000000000000000000000007A
3185:10C6C000000000000000000000000000000000006A
3186:10C6D000000000000000000000000000000000005A
3187:10C6E000000000000000000000000000000000004A
3188:10C6F000000000000000000000000000000000003A
3189:10C700000000000000000000000000000000000029
3190:10C710000000000000000000000000000000000019
3191:10C720000000000000000000000000000000000009
3192:10C7300000000000000000000000000000000000F9
3193:10C7400000000000000000000000000000000000E9
3194:10C7500000000000000000000000000000000000D9
3195:10C7600000000000000000000000000000000000C9
3196:10C7700000000000000000000000000000000000B9
3197:10C7800000000000000000000000000000000000A9
3198:10C790000000000000000000000000000000000099
3199:10C7A0000000000000000000000000000000000089
3200:10C7B0000000000000000000000000000000000079
3201:10C7C0000000000000000000000000000000000069
3202:10C7D0000000000000000000000000000000000059
3203:10C7E0000000000000000000000000000000000049
3204:10C7F0000000000000000000000000000000000039
3205:10C800000000000000000000000000000000000028
3206:10C810000000000000000000000000000000000018
3207:10C820000000000000000000000000000000000008
3208:10C8300000000000000000000000000000000000F8
3209:10C8400000000000000000000000000000000000E8
3210:10C8500000000000000000000000000000000000D8
3211:10C8600000000000000000000000000000000000C8
3212:10C8700000000000000000000000000000000000B8
3213:10C8800000000000000000000000000000000000A8
3214:10C890000000000000000000000000000000000098
3215:10C8A0000000000000000000000000000000000088
3216:10C8B0000000000000000000000000000000000078
3217:10C8C0000000000000000000000000000000000068
3218:10C8D0000000000000000000000000000000000058
3219:10C8E0000000000000000000000000000000000048
3220:10C8F0000000000000000000000000000000000038
3221:10C900000000000000000000000000000000000027
3222:10C910000000000000000000000000000000000017
3223:10C920000000000000000000000000000000000007
3224:10C9300000000000000000000000000000000000F7
3225:10C9400000000000000000000000000000000000E7
3226:10C9500000000000000000000000000000000000D7
3227:10C9600000000000000000000000000000000000C7
3228:10C9700000000000000000000000000000000000B7
3229:10C9800000000000000000000000000000000000A7
3230:10C990000000000000000000000000000000000097
3231:10C9A0000000000000000000000000000000000087
3232:10C9B0000000000000000000000000000000000077
3233:10C9C0000000000000000000000000000000000067
3234:10C9D0000000000000000000000000000000000057
3235:10C9E0000000000000000000000000000000000047
3236:10C9F0000000000000000000000000000000000037
3237:10CA00000000000000000000000000000000000026
3238:10CA10000000000000000000000000000000000016
3239:10CA20000000000000000000000000000000000006
3240:10CA300000000000000000000000000000000000F6
3241:10CA400000000000000000000000000000000000E6
3242:10CA500000000000000000000000000000000000D6
3243:10CA600000000000000000000000000000000000C6
3244:10CA700000000000000000000000000000000000B6
3245:10CA800000000000000000000000000000000000A6
3246:10CA90000000000000000000000000000000000096
3247:10CAA0000000000000000000000000000000000086
3248:10CAB0000000000000000000000000000000000076
3249:10CAC0000000000000000000000000000000000066
3250:10CAD0000000000000000000000000000000000056
3251:10CAE0000000000000000000000000000000000046
3252:10CAF0000000000000000000000000000000000036
3253:10CB00000000000000000000000000000000000025
3254:10CB10000000000000000000000000000000000015
3255:10CB20000000000000000000000000000000000005
3256:10CB300000000000000000000000000000000000F5
3257:10CB400000000000000000000000000000000000E5
3258:10CB500000000000000000000000000000000000D5
3259:10CB600000000000000000000000000000000000C5
3260:10CB700000000000000000000000000000000000B5
3261:10CB800000000000000000000000000000000000A5
3262:10CB90000000000000000000000000000000000095
3263:10CBA0000000000000000000000000000000000085
3264:10CBB0000000000000000000000000000000000075
3265:10CBC0000000000000000000000000000000000065
3266:10CBD0000000000000000000000000000000000055
3267:10CBE0000000000000000000000000000000000045
3268:10CBF0000000000000000000000000000000000035
3269:10CC00000000000000000000000000000000000024
3270:10CC10000000000000000000000000000000000014
3271:10CC20000000000000000000000000000000000004
3272:10CC300000000000000000000000000000000000F4
3273:10CC400000000000000000000000000000000000E4
3274:10CC500000000000000000000000000000000000D4
3275:10CC600000000000000000000000000000000000C4
3276:10CC700000000000000000000000000000000000B4
3277:10CC800000000000000000000000000000000000A4
3278:10CC90000000000000000000000000000000000094
3279:10CCA0000000000000000000000000000000000084
3280:10CCB0000000000000000000000000000000000074
3281:10CCC0000000000000000000000000000000000064
3282:10CCD0000000000000000000000000000000000054
3283:10CCE0000000000000000000000000000000000044
3284:10CCF0000000000000000000000000000000000034
3285:10CD00000000000000000000000000000000000023
3286:10CD10000000000000000000000000000000000013
3287:10CD20000000000000000000000000000000000003
3288:10CD300000000000000000000000000000000000F3
3289:10CD400000000000000000000000000000000000E3
3290:10CD500000000000000000000000000000000000D3
3291:10CD600000000000000000000000000000000000C3
3292:10CD700000000000000000000000000000000000B3
3293:10CD800000000000000000000000000000000000A3
3294:10CD90000000000000000000000000000000000093
3295:10CDA0000000000000000000000000000000000083
3296:10CDB0000000000000000000000000000000000073
3297:10CDC0000000000000000000000000000000000063
3298:10CDD0000000000000000000000000000000000053
3299:10CDE0000000000000000000000000000000000043
3300:10CDF0000000000000000000000000000000000033
3301:10CE00000000000000000000000000000000000022
3302:10CE10000000000000000000000000000000000012
3303:10CE20000000000000000000000000000000000002
3304:10CE300000000000000000000000000000000000F2
3305:10CE400000000000000000000000000000000000E2
3306:10CE500000000000000000000000000000000000D2
3307:10CE600000000000000000000000000000000000C2
3308:10CE700000000000000000000000000000000000B2
3309:10CE800000000000000000000000000000000000A2
3310:10CE90000000000000000000000000000000000092
3311:10CEA0000000000000000000000000000000000082
3312:10CEB0000000000000000000000000000000000072
3313:10CEC0000000000000000000000000000000000062
3314:10CED0000000000000000000000000000000000052
3315:10CEE0000000000000000000000000000000000042
3316:10CEF0000000000000000000000000000000000032
3317:10CF00000000000000000000000000000000000021
3318:10CF10000000000000000000000000000000000011
3319:10CF20000000000000000000000000000000000001
3320:10CF300000000000000000000000000000000000F1
3321:10CF400000000000000000000000000000000000E1
3322:10CF500000000000000000000000000000000000D1
3323:10CF600000000000000000000000000000000000C1
3324:10CF700000000000000000000000000000000000B1
3325:10CF800000000000000000000000000000000000A1
3326:10CF90000000000000000000000000000000000091
3327:10CFA0000000000000000000000000000000000081
3328:10CFB0000000000000000000000000000000000071
3329:10CFC0000000000000000000000000000000000061
3330:10CFD0000000000000000000000000000000000051
3331:10CFE0000000000000000000000000000000000041
3332:10CFF0000000000000000000000000000000000031
3333:10D000000000000000000000000000000000000020
3334:10D010000000000000000000000000000000000010
3335:10D020000000000000000000000000000000000000
3336:10D0300000000000000000000000000000000000F0
3337:10D0400000000000000000000000000000000000E0
3338:10D0500000000000000000000000000000000000D0
3339:10D0600000000000000000000000000000000000C0
3340:10D0700000000000000000000000000000000000B0
3341:10D0800000000000000000000000000000000000A0
3342:10D090000000000000000000000000000000000090
3343:10D0A0000000000000000000000000000000000080
3344:10D0B0000000000000000000000000000000000070
3345:10D0C0000000000000000000000000000000000060
3346:10D0D0000000000000000000000000000000000050
3347:10D0E0000000000000000000000000000000000040
3348:10D0F0000000000000000000000000000000000030
3349:10D10000000000000000000000000000000000001F
3350:10D11000000000000000000000000000000000000F
3351:10D1200000000000000000000000000000000000FF
3352:10D1300000000000000000000000000000000000EF
3353:10D1400000000000000000000000000000000000DF
3354:10D1500000000000000000000000000000000000CF
3355:10D1600000000000000000000000000000000000BF
3356:10D1700000000000000000000000000000000000AF
3357:10D18000000000000000000000000000000000009F
3358:10D19000000000000000000000000000000000008F
3359:10D1A000000000000000000000000000000000007F
3360:10D1B000000000000000000000000000000000006F
3361:10D1C000000000000000000000000000000000005F
3362:10D1D000000000000000000000000000000000004F
3363:10D1E000000000000000000000000000000000003F
3364:10D1F000000000000000000000000000000000002F
3365:10D20000000000000000000000000000000000001E
3366:10D21000000000000000000000000000000000000E
3367:10D2200000000000000000000000000000000000FE
3368:10D2300000000000000000000000000000000000EE
3369:10D2400000000000000000000000000000000000DE
3370:10D2500000000000000000000000000000000000CE
3371:10D2600000000000000000000000000000000000BE
3372:10D2700000000000000000000000000000000000AE
3373:10D28000000000000000000000000000000000009E
3374:10D29000000000000000000000000000000000008E
3375:10D2A000000000000000000000000000000000007E
3376:10D2B000000000000000000000000000000000006E
3377:10D2C000000000000000000000000000000000005E
3378:10D2D000000000000000000000000000000000004E
3379:10D2E000000000000000000000000000000000003E
3380:10D2F000000000000000000000000000000000002E
3381:10D30000000000000000000000000000000000001D
3382:10D31000000000000000000000000000000000000D
3383:10D3200000000000000000000000000000000000FD
3384:10D330000000000010000003000000000000000DCD
3385:10D340000000000D3C02080024427A603C03080003
3386:10D3500024637AD8AC4000000043202B1480FFFDEA
3387:10D36000244200043C1D080037BD9FFC03A0F021AF
3388:10D370003C100800261031D83C1C0800279C7A601D
3389:10D380000E001253000000000000000D3C0280005F
3390:10D3900030A5FFFF30C600FF344301803C08800009
3391:10D3A0008D0901B80520FFFE00000000AC640000FC
3392:10D3B00024040002A4650008A066000AA064000B13
3393:10D3C000AC6700183C03100003E00008AD0301B88F
3394:10D3D0003C0560008CA24FF80440FFFE00000000F6
3395:10D3E000ACA44FC03C0310003C040200ACA44FC4EA
3396:10D3F00003E00008ACA34FF827BDFFE8AFBF00145F
3397:10D40000AFB000100E0012A5008080213C048008FF
3398:10D410003485008090A600052403FFFE0200202131
3399:10D4200000C310248FBF00148FB00010A0A200050D
3400:10D430000A0012AF27BD001827BDFFE8AFB00010EB
3401:10D44000AFBF00140E000ED6008080213C0680087D
3402:10D4500034C5008090A4000024020050308300FFF7
3403:10D46000106200073C098000020020218FBF0014D9
3404:10D470008FB00010AD2001800A000FC527BD001835
3405:10D48000240801003C078000020020218FBF001407
3406:10D490008FB00010ACE801800A000FC527BD00184E
3407:10D4A00027BDFF883C088008AFBE0070AFB600689B
3408:10D4B000AFB40060AFB00050AFBF0074AFB7006C46
3409:10D4C000AFB50064AFB3005CAFB20058AFB1005469
3410:10D4D000350500803C0780008CF1012890A40009EC
3411:10D4E000ACE0008490A60005309000FF0000A02171
3412:10D4F00000061827306200010000B02114400067C8
3413:10D500000000F02190A9000024050020312400FF34
3414:10D5100010850016240A0050108A008D00000000BB
3415:10D520003C0C08008D8C00DC258B00013C010800C0
3416:10D53000AC2B00DC0E00139B000000008FBF0074BA
3417:10D540008FBE00708FB7006C8FB600688FB5006417
3418:10D550008FB400608FB3005C8FB200588FB100545D
3419:10D560008FB0005003E0000827BD00780000000DD8
3420:10D570003C158000AFA0003096A201168EB90104C0
3421:10D580003C1F002036B20C00033FC0240018B82B0B
3422:10D5900000173140AFA600308EAE01043053FFFFBC
3423:10D5A0003C0F00400272382101CF682490F2000D38
3424:10D5B00011A0004834C4004032430020146000022F
3425:10D5C000348600800080302114C00094AFA6003063
3426:10D5D0003C0980083525008090A8000831060040ED
3427:10D5E00050C000063C088008240A0004120A00A368
3428:10D5F000240B0012120B00293C088008351501008D
3429:10D600003C17800096F3011A94EE000E92AF0008CA
3430:10D61000324C00043275FFFF01EE6804AFAD003CF0
3431:10D620008CF30004118000318CF700083503008072
3432:10D63000907800083307004014E000280000000044
3433:10D640008C72005002728823062000063C0680007F
3434:10D650008C7F0034027FC823072200848E8200085A
3435:10D660003C068000ACC00044240200018FBF00745F
3436:10D670008FBE00708FB7006C8FB600688FB50064E6
3437:10D680008FB400608FB3005C8FB200588FB100542C
3438:10D690008FB0005003E0000827BD00780E000CB8E2
3439:10D6A000000020218FBF00748FBE00708FB7006C08
3440:10D6B0008FB600688FB500648FB400608FB3005CD4
3441:10D6C0008FB200588FB100548FB0005003E00008B3
3442:10D6D00027BD00780A000D1800C020210E00146C30
3443:10D6E000026020211440FFDF3C0680003C038008DC
3444:10D6F000346300808C6400340264102304400018FA
3445:10D70000000000003C1408008E94310026900001B7
3446:10D710003C010800AC3031000E0012A5022020218F
3447:10D720003C048008349F008093FE002502202021C5
3448:10D7300037C90004A3E900250E0012AF0000000065
3449:10D740000E000C9E022020210A000D45240200013B
3450:10D750003C14080026947AC80A000D073C15800086
3451:10D760008C6800300268302318C00008240B000CBD
3452:10D770003C0908008D293100325200FC0000A8212C
3453:10D78000252500013C010800AC253100AFAB00307D
3454:10D790008C6A003001534023190000E002A8602A7F
3455:10D7A0001580FFDD0000000012A8002A02A87823DF
3456:10D7B0000268982131F5FFFF3247000210E0003483
3457:10D7C000325900103C13800836700080921E000809
3458:10D7D00033D6004052C000D38E82000802202021A0
3459:10D7E0000E0012A524120018A212000992170005BB
3460:10D7F0002418FFFE0220202102F8A8240E0012AFF8
3461:10D80000A215000524040039000028210E00144749
3462:10D81000240600180A000D45240200019296000C0F
3463:10D820003C048008349E00808FC700380016A30097
3464:10D830003690008130C600FF022020210E000C8DA2
3465:10D840003205F0813C068000ACC000440A000D4562
3466:10D85000240200013A4E000131CD000115A0FFAEB7
3467:10D86000026898210A000D97000000000040F809A6
3468:10D87000240400160A000D45240200010220202184
3469:10D880000E00152900E028210A000CFA8FBF007451
3470:10D890001320FF733C048008348900808D230038F6
3471:10D8A0008C82000402E2F8231FE0FF6E3C06800039
3472:10D8B00002E3302304C200010060B821AFA80018C1
3473:10D8C0003C198000AFB30010AFB5001497260120BB
3474:10D8D0008D2A00309524005C8FB8003C8FAD00305D
3475:10D8E0003087FFFF30DFFFFF03E87021372F400054
3476:10D8F0000307282B8E82000401CF602101A5582543
3477:10D90000AFA90048AFAC0020AFAA0028AFAB0030F1
3478:10D91000AFAA0024AFA0002CAFB700340040F80934
3479:10D9200027A400108FA8003031030002106000020D
3480:10D930008FA90048325200FE912300083069004050
3481:10D94000512000138FA400243C0280088C4800045E
3482:10D95000111700A4240A0014325800015300000CCF
3483:10D960008FA400242419000C121900C02A1F000DD6
3484:10D9700013E000BA2406000E2404000A5204000139
3485:10D98000241600088FA9002425240001AFA4002438
3486:10D990003C188008370500808FA700148CAF00303A
3487:10D9A000340CFFFF00877021ACAE0030AFAF003801
3488:10D9B00090AD004E8CAB00308FA8003C01AC100441
3489:10D9C00001625021ACAA00348FA6003002E8202169
3490:10D9D00030C300081060000BAFA400408CB90020D9
3491:10D9E0001324008F30C600FF9289000C8FA70034EB
3492:10D9F00000098300360400803085F0800E000C8D15
3493:10DA0000022020213C0A8008355000808E0300301F
3494:10DA10008FA800380068302318C00065262F0080CA
3495:10DA20003C0E08008DCE31982407FF8001E7682462
3496:10DA300031EC007F3C0680003C02800431CB0010BA
3497:10DA4000ACCD00901160003B0182282190B8006BA2
3498:10DA5000570000393C048008241F0001A0BF006B60
3499:10DA600094C5007A24B9000AA61900123C0A80085D
3500:10DA70003545008090A800083110004016000004D1
3501:10DA80003C038008324B00011560006B0000000071
3502:10DA9000346400808C8C00208FB200401192000909
3503:10DAA000346301008C6D0000026D102318400012D9
3504:10DAB0008FB80040241E0001AC980020AC73000019
3505:10DAC000AC77000416C0002D0000000017C000272E
3506:10DAD0000000000012A00005000018218FA50030F2
3507:10DAE00030B5000452A0FE9500601021240300010F
3508:10DAF0000A000CF9006010218C6E000015D3FFF1B4
3509:10DB0000000000008C67000402E7782305E1FFE9CC
3510:10DB10008FB800400A000E5B000000000A000D985C
3511:10DB2000000040210040F809240400170A000D45B8
3512:10DB3000240200013C04800834900080241E00016F
3513:10DB4000022020210E0012A5A61E00129209002517
3514:10DB500002202021241E0001352200010E0012AFF8
3515:10DB6000A20200250A000E463C0A80080E000C9E08
3516:10DB7000022020210A000E5F000000000E0012A506
3517:10DB8000022020213C198008373700800220202104
3518:10DB90000E0012AFA2F6000902C0302124040037A3
3519:10DBA0000E001447000028210A000E5D000000004E
3520:10DBB0008FA6001858C0FFAE3C0A80080E0012A5C0
3521:10DBC000022020219203002502202021241E000192
3522:10DBD000346200040E0012AFA20200250A000E46B5
3523:10DBE0003C0A8008120A00302A0B0015116000243C
3524:10DBF000240D0016240C000C560CFF58325800015E
3525:10DC00003C05800890AF001B2407FFBD2416000EC2
3526:10DC100001E77024A0AE001B0A000E01325800017B
3527:10DC20003C1F800097E5011A50A0FF6F34C600101A
3528:10DC30000A000E259289000C8CB300308E960008E5
3529:10DC4000240400182674000102C0F809ACB40030A6
3530:10DC50008FB100300A000CF9322200041606FF4A88
3531:10DC60008FA900240A000E0C241600102410000EA8
3532:10DC700052D0FF44241600100A000E0B2416001682
3533:10DC8000560DFF36325800013C05800890AF001B4E
3534:10DC90002407FFBD2416001001E77024A0AE001B6E
3535:10DCA0000A000E01325800010A000E00241600126C
3536:10DCB0003C0380008C6201B80440FFFE240408008D
3537:10DCC000AC6401B803E00008000000003C058008D7
3538:10DCD00094A200483084FFFF1040001924840012F1
3539:10DCE00094A900483C0380003128FFFF0104382A32
3540:10DCF00010E0001334660180946D01208F8C0004C5
3541:10DD0000240B001A31AAFFFF31834000A0CB000B87
3542:10DD1000106000102544FFFE94AF004831EEFFFF75
3543:10DD200001C4282B14A0000C8F98000CA4C400146C
3544:10DD30008F86000C34C2000103E00008AF82000CA3
3545:10DD40003C0780002404000334E2018003E0000863
3546:10DD5000A044000B8F98000C2419FFFE0319102417
3547:10DD600003E00008AF82000C27BDFFD8AFB400204D
3548:10DD7000AFB3001CAFB20018AFB10014AFBF0024A6
3549:10DD8000AFB000100080182130B3FFFF30D2FFFF8A
3550:10DD900030F4FFFF3C1180008E2201B80440FFFEEA
3551:10DDA00036300180AE030000024020210E000EDD5F
3552:10DDB000AE2300208F86000C8F8500048F83000027
3553:10DDC00030C48000A613000CA612000EA605001099
3554:10DDD000AE030028A61400081080000E3C0F80003F
3555:10DDE000962C0116318BFFFC256A00040151482155
3556:10DDF0008D2840003107FFFF14E000072414BFFF07
3557:10DE00003C0EFFFF35CD7FFF00CD3024AF86000CE8
3558:10DE10003C0F80002414BFFF35F1018000D498240A
3559:10DE2000A63300268DF20104AE32002C3C06100011
3560:10DE3000ADE601B88FBF00248FB400208FB3001C63
3561:10DE40008FB200188FB100148FB0001003E00008EB
3562:10DE500027BD002827BDFFD8AFB100143C118000BA
3563:10DE600000804021AFB40020AFB0001030D4FFFFDD
3564:10DE70003630018002802021AE080000AE2800204C
3565:10DE8000AFB3001CAFB2001830F3FFFFAFBF0024E8
3566:10DE90000E000EDD30B2FFFF8F85000C8F83000473
3567:10DEA0002406BFFF00A62024A612000CA614000E14
3568:10DEB000A6130008A6040026A60300103C021000CA
3569:10DEC000AE2201B88FBF00248FB400208FB3001C96
3570:10DED0008FB200188FB100148FB0001003E000085B
3571:10DEE00027BD00283C028000344501803C048000AE
3572:10DEF0008C8301B80460FFFE240720002406000282
3573:10DF0000A4A70008A0A6000BA4A000103C051000C8
3574:10DF1000AC8501B803E00008000000003C0580006B
3575:10DF200034A400708C8A000090A601128F84000433
3576:10DF300027BDFFF030C300FF0003188230820100CC
3577:10DF4000000038211040003924660003308740006B
3578:10DF500050E0003930882000000610800045C821BC
3579:10DF60008F2F40002478000400187080AFAF0000AD
3580:10DF700001C568218DAC4000AFAC000494AB011624
3581:10DF80003169FFFC012540218D054000AFA5000847
3582:10DF90008FA9000800003021000028213C0708005C
3583:10DFA00024E701000A000F9E2408000890420000A8
3584:10DFB00024A500012CAD000C0062C8210019C0800E
3585:10DFC000030778218DEE000011A0000600CE302658
3586:10DFD00003A5102114A8FFF500051A005520FFF431
3587:10DFE000904200003C048000348700703C0508002B
3588:10DFF0008CA531048CE300002CA80020110000093E
3589:10E00000006A3823000558803C0C0800258C310834
3590:10E01000016C482124AA0001AD2700003C01080042
3591:10E02000AC2A3104AF8600002407000100E0102173
3592:10E0300003E0000827BD00101100FFFC000038219C
3593:10E0400000066080018558218D6440002469000429
3594:10E0500000093880AFA4000000E518218C6640005C
3595:10E06000AFA000080A000F8EAFA600043C02080013
3596:10E070008C42003827BDFFD8AFB40020AFB20018E3
3597:10E08000AFBF0024AFB3001CAFB10014AFB000109D
3598:10E090003C14080026940038144000022452FFFF6C
3599:10E0A000000090218F85000430A340001060000F15
3600:10E0B00030A980003C06002000A620241080000B20
3601:10E0C0008F87000C2408BFFF00A8282434E3100029
3602:10E0D000AF85000430AF200015E0000A3C110004B9
3603:10E0E0002413FFBF0A000FEF0073102415200062F5
3604:10E0F0003C0B002030AF200011E0FFF98F83000CB3
3605:10E100003C11000400B180241200FFF62413FFBF6D
3606:10E110003462004030B801001300000FAF82000CE1
3607:10E120003C1F002000BFC824132000053C0A8000CB
3608:10E130003C03000400A31024104000C800000000AD
3609:10E140009549011E9548011C3126FFFF00083C003F
3610:10E1500000C72025AF8400003C0D800095AC010C69
3611:10E1600030AB1000116000083186FFFF30AE002098
3612:10E1700015C00006241100053C10100000B07824E2
3613:10E1800015E000733C1F0C002411000130A20100B7
3614:10E19000544000093C0C00018F83001454600006B9
3615:10E1A0003C0C00018F87000C30E440001080009A86
3616:10E1B0003C0A1F013C0C000100AC302414C0006C70
3617:10E1C0003C1080008F84000C3093400012600006E9
3618:10E1D0003C0310003C190F0000B9C0241300008B51
3619:10E1E0003C1F80003C03100000A310241040002CB2
3620:10E1F0003C0680003C0708008CE7003014E0007308
3621:10E200003088400030A6010010C000983C0E0F007E
3622:10E2100000AE68243C0C020011AC00948F93000007
3623:10E22000027280240214782191F4000426920004E2
3624:10E23000001221C03C0E800095C6010E3627000258
3625:10E2400024D400043286FFFF240500020E000F04D0
3626:10E25000000000008FBF00248FB400208FB3001C8B
3627:10E260008FB200188FB100148FB000100000102181
3628:10E2700003E0000827BD002800AB50241140FF9E9A
3629:10E2800030AF20008F8C000C3C0EFFFF35CD7FFFA0
3630:10E2900000AD2824358380000A000FDFAF8500041D
3631:10E2A0008CD04000320F010011E0003C30B801007A
3632:10E2B0003C1008008E1000241300001432330004B8
3633:10E2C0003C020F0000A2F8243C19020013F9000FD1
3634:10E2D0008F83000094C9010E022038210072582457
3635:10E2E0000174502191480004252400043086FFFF6A
3636:10E2F00025140004001421C0240500020E000F04A0
3637:10E300002412FFFE021280243231FFFB2407000199
3638:10E310001207006F3206000114C000903C0E80000E
3639:10E32000320F000411E000048F980004331008003D
3640:10E33000160000783C1F80005660FFC78FBF002486
3641:10E340000E000F63000000000A0010408FBF002481
3642:10E350003C190BFF00BFC0243733FFFF0278882B26
3643:10E360005220FF8A241100010A00100D241100051B
3644:10E370003C0E08008DCE00D8960F010E24040080BC
3645:10E3800025CD000131E6FFFF240500023C01080015
3646:10E39000AC2D00D80A00103D240700033C120800F1
3647:10E3A0008E520024324200011040FFAB8FBF002488
3648:10E3B00094C6010E362700020000202124D4000458
3649:10E3C0003286FFFF0A00103D240500021100FF8E77
3650:10E3D00030A601003C0B0F0000AB50243C090100AB
3651:10E3E000012A202B1480FF88000000003C058000DB
3652:10E3F00094A6010E362700022404008024D40004D1
3653:10E400003286FFFF0A00103D2405000297E3011643
3654:10E410000A0010243C03100000AA48243C08100005
3655:10E420001528FF653C0C000130CB02001560FF632E
3656:10E4300000AC30243C1480009692010E3627000276
3657:10E44000000020212645000430A6FFFF0E000F3FEC
3658:10E45000240500020A0010408FBF00240E000F7137
3659:10E46000000000000A0010008F850004000000007A
3660:10E470003C0608008CC600D0000516023050000F84
3661:10E4800038DF00012FF900012E03000C0323C02404
3662:10E490001700FF68001021C02608FFFC2D070004AC
3663:10E4A00014E000073C0E800038CA00022D4900012C
3664:10E4B000012320245080000E000532423C0E8000D3
3665:10E4C00095C6010E000020210A00103A36270002EE
3666:10E4D0003233000452600001363100023C0C8000EF
3667:10E4E0009586010E022038210A0010990000202193
3668:10E4F0000010182B00C358241560000F3C05800045
3669:10E50000001021C03C0E800095C6010E0A00103A92
3670:10E510003627000297F9010E022038212404010059
3671:10E52000273100043226FFFF0E000F0424050002ED
3672:10E530000A0010780000000094AD010E00002021B8
3673:10E540002405000225AC00043186FFFF0E000F04F5
3674:10E550003227FFFB0A0010EB001021C095C5010E09
3675:10E56000022038210000202124AD000431A6FFFF45
3676:10E570000E000F04240500020A0010723231FFFB66
3677:10E580003C0580008CA701482403000434A60180C8
3678:10E5900000072402308200FF104300103C0480007A
3679:10E5A0008C8901B80520FFFE000000008C8F014817
3680:10E5B000240D00023C0A1000000F7402A4CE0008D3
3681:10E5C000A0CD000B8C8C0148A4CC00108C8B014496
3682:10E5D000ACCB002403E00008AC8A01B88CA4014055
3683:10E5E0003C03800000C028218C6601B804C0FFFEF7
3684:10E5F0002408001CACA40000A0A8000B3C051000DF
3685:10E60000AC6501B803E000080000000027BDFFE88A
3686:10E61000AFB00010AFBF00143C10600C8E0D500066
3687:10E62000240EFF7F2406000301AE60243588380CD9
3688:10E630003C058000AE085000ACA600083C01080074
3689:10E64000AC2000200E001555000000003C086016AC
3690:10E650008D0A00003C0BFFFF3C0900103523805160
3691:10E660003C046000014B38243C025353AE03537CFE
3692:10E67000348420203C05080024A579082406000ADB
3693:10E6800010E2000935037C008C7F007C8C790078D7
3694:10E690008FB00010AF9F00108FBF001427BD00186F
3695:10E6A0000A0013B1AF9900088D0F00043C186000F8
3696:10E6B0008FB0001001F818218C7F007C8C790078D5
3697:10E6C000AF9F00108FBF001427BD00180A0013B1C0
3698:10E6D000AF9900083C0480008C8340003402FFFFA7
3699:10E6E0001062003A000000008C87400030E5010015
3700:10E6F00010A00021000000009487010E3C020800D9
3701:10E700008C4200EC9485010E3C0D08008DAD31CC9F
3702:10E7100030E3FFFF3C1808008F1800E83C090800B0
3703:10E720008D2931C80043602130ABFFFF0183782B76
3704:10E730000000C82101AB18210000502103197021ED
3705:10E74000006B302B012A402101CF2021010610212E
3706:10E750003C010800AC2C00EC3C010800AC2400E8B3
3707:10E760003C010800AC2331CC3C010800AC2231C88C
3708:10E7700003E00008000000008C8840008F8C000837
3709:10E78000110C00323C0D800095AB010E3C0A0800D4
3710:10E790008D4A00E43C0808008D0800E03169FFFF65
3711:10E7A000014928210000302100A9602B01063821F1
3712:10E7B00000EC10213C010800AC2500E43C010800FD
3713:10E7C000AC2200E003E00008000000009483010E8A
3714:10E7D0009482010E3C1908008F3900F43C090800AE
3715:10E7E0008D2931CC3C0E08008DCE00F03C0808008D
3716:10E7F0008D0831C83078FFFF304BFFFF03382821E8
3717:10E80000012B1821000078210000502100B8682B4E
3718:10E8100001CF6021006B302B010A3821018D2021AE
3719:10E8200000E610213C010800AC2500F43C01080082
3720:10E83000AC2400F03C010800AC2331CC3C010800C2
3721:10E84000AC2231C803E00008000000008C894004BD
3722:10E850008F8600101526FFCC3C0D80009483010E9E
3723:10E860003C1908008F3931BC3C0E08008DCE31B800
3724:10E870003078FFFF03385821000078210178202BE1
3725:10E8800001CF682101A450213C010800AC2B31BC10
3726:10E890003C010800AC2A31B803E000080000000089
3727:10E8A00027BDFFE83C058000AFBF0014AFB00010EB
3728:10E8B0008CB00128ACB000208CA301048CA4010012
3729:10E8C000AF8300040E000ED6AF84000C0E00115F63
3730:10E8D000000000003C0208008C4200C010400026EE
3731:10E8E0008F8400043C0708008CE700C424E6000184
3732:10E8F0003C010800AC2600C43C0280008C4401248A
3733:10E900003C1F6020AFE40014000000003C068000C3
3734:10E910003C034000ACC301380000000012000013AB
3735:10E920008FBF0014260F0140261900802404FF80A9
3736:10E9300001E4C0240324F824001F6940332E007F23
3737:10E940000018594031EC007F3C0A20003548000295
3738:10E9500001AE3825016C48250128802500E82825CE
3739:10E96000ACC50830ACD008308FBF00148FB0001099
3740:10E9700003E0000827BD00183C090010008940246E
3741:10E980001100000F8F83000C240DBFFF006D602469
3742:10E9900011800007240F87FF006F702415C000133B
3743:10E9A0003C1900600099C024130000100000000012
3744:10E9B0000E000CD2000000000A001221000000002E
3745:10E9C0003C0B08008D6B0020256A00013C0108000B
3746:10E9D000AC2A00200E000FC5000020211040FFCC03
3747:10E9E0003C0680000A0011E93C0280000E00128EF5
3748:10E9F000000000000A0012210000000027BDFFE80F
3749:10EA00003C028000AFBF00108C4601403C03700008
3750:10EA10003C054000AC4600208C4401480083202483
3751:10EA20001085001300A4102B1040000B3C072000A1
3752:10EA30003C08600010880017000000003C0A4000FD
3753:10EA40003C098000AD2A0178000000008FBF001053
3754:10EA500003E0000827BD00185487FFF93C0A400076
3755:10EA60000E00110A000000000A00123A3C0A4000A1
3756:10EA70000E0012B4000000003C0A40003C09800077
3757:10EA8000AD2A0178000000008FBF001003E00008ED
3758:10EA900027BD00180E001D6F000000000A00123A8A
3759:10EAA0003C0A400027BDFFE0AFB200183C128000D6
3760:10EAB000AFB10014AFBF001CAFB000100E00112D9D
3761:10EAC000365100708E260000AF8600188E28000098
3762:10EAD0003C0B08008D6B00FC3C0708008CE700F83D
3763:10EAE00001066023016C28210000482100AC302B76
3764:10EAF00000E91821006620213C010800AC2500FC3B
3765:10EB00003C010800AC2400F88E50000032020003E3
3766:10EB10001040FFEE010030218E2600003C05080069
3767:10EB20008CA500FC3C1F08008FFF00F800C81823CC
3768:10EB300000A378210000102101E3C82B03E2C021CB
3769:10EB400003197021320D00013C010800AC2F00FCBC
3770:10EB5000AF8800183C010800AC2E00F815A0000892
3771:10EB600000000000320800021100FFD60000000083
3772:10EB70000E001229000000000A00125B00000000D5
3773:10EB80000E0011D2000000000A00128432080002B8
3774:10EB90003C0380008C6401003082003E1440000879
3775:10EBA00000000000AC6000488C66010030C507C062
3776:10EBB00010A0000500000000AC60004CAC600050EC
3777:10EBC00003E0000824020001AC600054AC60004087
3778:10EBD0008C6801003107380010E0FFF900000000E8
3779:10EBE0002402000103E00008AC6000443C039000F4
3780:10EBF00034620001008220253C038000AC640020C8
3781:10EC00008C65002004A0FFFE0000000003E0000867
3782:10EC1000000000003C0280003443000100832025F6
3783:10EC200003E00008AC44002027BDFFD8AFB10014BA
3784:10EC30003C048000AFBF0020AFB3001CAFB200188F
3785:10EC4000AFB000108C9201408C9001482402000E5D
3786:10EC500000108C02322300FF1062005902042824A5
3787:10EC60002866000F10C00013286A0037240700062A
3788:10EC70001067008E286800075100002D2404000949
3789:10EC8000106000783C06800024090001106900B083
3790:10EC9000000000000000000D8FBF00208FB3001C9B
3791:10ECA0008FB200188FB100148FB0001003E000087D
3792:10ECB00027BD002811400059240D0038286B00356D
3793:10ECC000116000053C058000240C001F146CFFF14E
3794:10ECD000000000003C0580008CB801B80700FFFE72
3795:10ECE00034B90180AF320000241F00012412000259
3796:10ECF0003C021000AF200004A7310008A33F000A27
3797:10ED0000A332000BA7300010AF200024AF20002852
3798:10ED1000ACA201B88FBF00208FB3001C8FB20018C7
3799:10ED20008FB100148FB0001003E0000827BD002849
3800:10ED3000106400232405000B1465FFD63218FFFF72
3801:10ED4000170000203C0580008F93FED4927F0005C1
3802:10ED500033F900041720FFCF000000000E0012A5B9
3803:10ED6000024020219269000502402021352800043C
3804:10ED70000E0012AFA26800059267000530E20004A1
3805:10ED800014400002000000000000000D926B000023
3806:10ED900024060020316A00FF1546000A3C05800069
3807:10EDA0008CA401B80480FFFE34AD0180240E000560
3808:10EDB0003C0C1000ADB20000A1AE000BACAC01B831
3809:10EDC0003C0580008CA301B80460FFFE34AF0180D5
3810:10EDD00024130002ADE00000ADF20004A5F100082C
3811:10EDE000A1F3000AA1F3000BA5F00010ADE0002490
3812:10EDF0008CB101443C101000ADF10028ACB001B85A
3813:10EE00008FBF00208FB3001C8FB200188FB1001489
3814:10EE10008FB0001003E0000827BD0028106DFFAD83
3815:10EE2000240E0080146EFF9B000000003C05800053
3816:10EE30008CA301B80460FFFE34AF018024120002ED
3817:10EE4000A1F2000BA5F10008A5F000108CB301445D
3818:10EE50003C021000A5F30012ACA201B80A0012F0A7
3819:10EE60008FBF00208CC301B80460FFFE34D3018043
3820:10EE7000AE720000AE60000424120001A67100080A
3821:10EE800024110002A272000AA271000BA6700010E9
3822:10EE90008CD001443C0F1000AE700024AE600028FE
3823:10EEA000ACCF01B80A00132B8FBF00203C038000B9
3824:10EEB0008C6601B804C0FFFE346201803C06080085
3825:10EEC00090C67AB8AC52000010C000030000382190
3826:10EED0003C0708008CE77AC03C05800034AA01801A
3827:10EEE0002404000234CC0001AC470004A551000802
3828:10EEF000A14C000AA144000BA55000108CAB0144AA
3829:10EF00000000202101402821AD4B002410C0000347
3830:10EF10008FBF00203C0408008C847ABC8FB3001C97
3831:10EF20008FB200188FB100148FB000103C0E10008B
3832:10EF30003C0D800027BD0028ACA40028ADAE01B870
3833:10EF40003C010800A0207AB803E00008000000009F
3834:10EF500010A0000B3C0680008C980144241900028C
3835:10EF60003C010800A0397AB83C010800AC327AC0F4
3836:10EF70003C010800AC387ABC0A00132B8FBF00207C
3837:10EF80008CDF01B807E0FFFE34C7018024090002CE
3838:10EF9000ACE00000ACF20004A4F10008A0E9000A13
3839:10EFA000A0E9000BA4F00010ACE000248CC80144E0
3840:10EFB0003C021000ACE80028ACC201B80A00132BD8
3841:10EFC0008FBF002027BDFFE8AFBF00100E000ED698
3842:10EFD000000000003C0280008FBF001000002021D4
3843:10EFE000AC4001800A000FC527BD00183084FFFF28
3844:10EFF00030A5FFFF108000070000182130820001BB
3845:10F000001040000200042042006518211480FFFB1C
3846:10F010000005284003E000080060102110C0000730
3847:10F02000000000008CA2000024C6FFFF24A50004FD
3848:10F03000AC82000014C0FFFB2484000403E000083D
3849:10F040000000000010A0000824A3FFFFAC86000011
3850:10F0500000000000000000002402FFFF2463FFFF07
3851:10F060001462FFFA2484000403E00008000000009A
3852:10F0700027BDFFE0AFB20018AFB10014AFB0001071
3853:10F08000AFBF001C9486000C00A0902124900014B7
3854:10F0900000061B020003108000448821000030217C
3855:10F0A00000A020210E0013BB240500050211202B17
3856:10F0B0001080001200001021920300002C6500094E
3857:10F0C00050A0000992020001000348803C0A080099
3858:10F0D000254A793C012A40218D07000000E0000804
3859:10F0E0000000000092020001020280210211202B88
3860:10F0F0005480FFF292030000000010218FBF001C1B
3861:10F100008FB200188FB100148FB0001003E0000818
3862:10F1100027BD00200A0013D526100001920C000123
3863:10F12000240B000C158B0040023070232DCD000AFB
3864:10F1300015A0003D260800068E43000026020002AE
3865:10F1400034640100AE440000921F00029059000197
3866:10F15000904E0002904B0003001F7E000019C40077
3867:10F1600001F86025000E6A00018D5025014B4825ED
3868:10F17000AE490004920700069105000191040002C7
3869:10F180009119000300071E00000534000066F825F1
3870:10F190000004120003E2C025031978252610000A96
3871:10F1A0000A0013D5AE4F0008921F0001260400028A
3872:10F1B0002410000257F00001022020210A0013D57C
3873:10F1C00000808021920E0001240D000315CDFFCB9D
3874:10F1D000240200018E59000092180002261000033C
3875:10F1E000372F0008A25800100A0013D5AE4F0000B8
3876:10F1F000920500012406000414A6FFC024020001A9
3877:10F20000920C0002920B00038E490000000C520089
3878:10F21000014B40253527000426100004AE48000CA1
3879:10F220000A0013D5AE4700000A0013E924020001CA
3880:10F2300027BDFFE8AFBF0014AFB000100E0012A54D
3881:10F24000008080213C048008348300809065002584
3882:10F250000200202134A200200E0012AFA06200257F
3883:10F26000020020218FBF00148FB000100A000C9EF6
3884:10F2700027BD00183C03800027BDFFF834620180E1
3885:10F28000AFA20000308C00FF30AD00FF30CE00FF99
3886:10F290003C0B80008D6401B80480FFFE000000007C
3887:10F2A0008FA900008D6801288FAA00008FA7000099
3888:10F2B0008FA400002405000124020002A085000A9A
3889:10F2C0008FA30000359940003C051000A062000BA0
3890:10F2D0008FB800008FAC00008FA600008FAF000039
3891:10F2E00027BD0008AD280000AD400004AD8000241B
3892:10F2F000ACC00028A4F90008A70D0010A5EE00126C
3893:10F3000003E00008AD6501B83C06800827BDFFE8B2
3894:10F3100034C50080AFBF001090A70009240200127E
3895:10F3200030E300FF1062000B008030218CA80050F9
3896:10F3300000882023048000088FBF00108CAA0034AE
3897:10F34000240400390000282100CA482305200005B4
3898:10F35000240600128FBF00102402000103E0000801
3899:10F3600027BD00180E001447000000008FBF0010DA
3900:10F370002402000103E0000827BD001827BDFFC8D4
3901:10F38000AFB1002C00A08821AFB2003027A500103B
3902:10F390000080902102202021AFBF00340E0013C650
3903:10F3A000AFB00028144000813C0C8008918B001104
3904:10F3B000918A0012358600808CC80054316500FFA8
3905:10F3C000314900FF00A9282100A8382B14E0004F84
3906:10F3D0008FA3001094DF005C3066000410C000565C
3907:10F3E00033E4FFFF8FA2001C0082102B5440000565
3908:10F3F0002C8300803067000414E0007E240402188F
3909:10F400002C83008010600002008080212410008086
3910:10F410000E0012A5024020213C03800834660080C3
3911:10F4200024070001ACC7000C90C200080010604027
3912:10F4300034670100305F007FA0DF00088E390004D0
3913:10F4400027380001ACD80030A4D0005C8CCE003C42
3914:10F45000962F000E01CF6821ACCD00208CCB003C54
3915:10F46000016C5021ACCA001C8E290004ACE90000DC
3916:10F470008E250008ACE500048FA8001031040008B8
3917:10F480005480002F93A60020A0C0004E90C5004ECF
3918:10F490002408FFDF3C188008A0E5000890C400089D
3919:10F4A000370C00802409005000888024A0D0000878
3920:10F4B0008E390008AD9900388F0E00148D8F003002
3921:10F4C00001CF6821AD8D0034918B0000316A00FFBF
3922:10F4D00011490029264801000E0012AF02402021E8
3923:10F4E00024040038000028210E0014472406000AD6
3924:10F4F0008FBF00348FB200308FB1002C8FB0002846
3925:10F500002402000103E0000827BD003894D8005C05
3926:10F510008CD00054330EFFFF0205782301CF682BF7
3927:10F5200015A0FFAC8FA300108CD9005430660004E6
3928:10F5300014C0FFAC032520230A0014A52C82021856
3929:10F540003C188008370C0080A0E600088E390008BF
3930:10F5500024090050AD9900388F0E00148D8F0030B3
3931:10F5600001CF6821AD8D0034918B0000316A00FF1E
3932:10F570001549FFD9264801002406FF8001062824EA
3933:10F580003C048000AC8500288E2700083103007FF2
3934:10F590003C10800C0070F821AFE700D08E220008EC
3935:10F5A000AF9F00240A0014E0AFE200D48E230008CD
3936:10F5B0003C04800834820080AC4300540240202187
3937:10F5C0000E001436AC400030240400382405008DB1
3938:10F5D0000E001447240600128FBF00348FB2003093
3939:10F5E0008FB1002C8FB000282402000103E0000836
3940:10F5F00027BD00380A0014AA8FA4001C27BDFFE80D
3941:10F60000AFBF001090A6000D30C7001010E0000C36
3942:10F61000008040213C0280088C4400048CA3000838
3943:10F620001064000830C9000430C5000410A0001C9C
3944:10F630008FBF00102402000103E0000827BD00185E
3945:10F6400030C900041120001030CB001210E0FFF987
3946:10F650008FBF00103C0880088CA700088D060004AE
3947:10F6600014E6FFF524020001240400382405008D6F
3948:10F670000E001447240600128FBF00102402000160
3949:10F6800003E0000827BD0018240A0012156AFFE9EC
3950:10F690008FBF0010010020210A00148927BD001827
3951:10F6A000000020210A000CB827BD00183C05080006
3952:10F6B00024A555983C040800248473583C02080093
3953:10F6C000244255A0240300063C010800AC257AC85A
3954:10F6D0003C010800AC247ACC3C010800AC227AD072
3955:10F6E0003C010800A0237AD403E0000800000000D9
3956:10F6F00003E00008240200013C028000308800FF83
3957:10F70000344701803C0680008CC301B80460FFFED2
3958:10F71000000000008CC501282418FF803C0D800AE1
3959:10F7200024AF010001F8702431EC007FACCE00243E
3960:10F73000018D2021ACE50000948B00DA35096000D2
3961:10F7400024080002316AFFFFACEA00042402000131
3962:10F75000A4E90008A0E8000BACE000243C0710007E
3963:10F76000ACC701B8AF84002403E00008AF850054A3
3964:10F770008C9900048F8D00242409FFBF0325C0232A
3965:10F78000AC98000491AF00C42403FFEF31EE007F7A
3966:10F79000A1AE00C48C8C0020938B00308F86002497
3967:10F7A000358A0002AF8B0048A7800044AC8A002055
3968:10F7B000A4C000AC90C800C401093824A0C700C48C
3969:10F7C0008F840024AC8000DC908500C400A310244A
3970:10F7D00003E00008A08200C43C02800034450180A0
3971:10F7E0003C0480008C8301B80460FFFE8F890054C4
3972:10F7F0002407608324060002ACA900008C88012441
3973:10F80000ACA80004A4A70008A0A6000B3C051000AB
3974:10F8100003E00008AC8501B8938800308F89004868
3975:10F820008F82002430C600FF0109382330E900FF31
3976:10F830000122182130A500FF2468007810C00002C2
3977:10F84000012438210080382130E4000314800003B3
3978:10F8500030AA00031140000D312B000310A0000955
3979:10F860000000102190ED0000244E000131C200FF85
3980:10F870000045602BA10D000024E700011580FFF971
3981:10F880002508000103E00008000000001560FFF3F8
3982:10F890000000000010A0FFFB000010218CF8000009
3983:10F8A00024590004332200FF0045782BAD180000D6
3984:10F8B00024E7000415E0FFF92508000403E0000830
3985:10F8C0000000000093850030938800408F87004837
3986:10F8D000000432003103007F00E5102B30C47F00AC
3987:10F8E0001040000F006428258F8400243C0980000C
3988:10F8F0008C8A00DCAD2A00A43C03800000A35825BC
3989:10F90000AC6B00A08C6C00A00580FFFE0000000026
3990:10F910008C6D00ACAC8D00DC03E000088C6200A8AC
3991:10F920000A0015E88F840024938800413C0280007F
3992:10F9300000805021310300FEA383004130ABFFFF64
3993:10F9400030CC00FF30E7FFFF344801803C098000E5
3994:10F950008D2401B80480FFFE8F8D005424180016FA
3995:10F96000AD0D00008D2201248F8D0024AD02000416
3996:10F970008D590020A5070008240201B4A119000A2E
3997:10F98000A118000B952F01208D4E00088D47000413
3998:10F99000978300448D59002401CF302100C72821CE
3999:10F9A00000A320232418FFFFA504000CA50B000EC4
4000:10F9B000A5020010A50C0012AD190018AD18002406
4001:10F9C00095AF00D83C0B10002407FFF731EEFFFF86
4002:10F9D000AD0E00288DAC0074AD0C002CAD2B01B821
4003:10F9E0008D46002000C7282403E00008AD45002014
4004:10F9F0008F8800240080582130E7FFFF910900C65E
4005:10FA00003C02800030A5FFFF312400FF00041A00F3
4006:10FA10000067502530C600FF344701803C09800054
4007:10FA20008D2C01B80580FFFE8F820054240F001733
4008:10FA3000ACE200008D390124ACF900048D7800207F
4009:10FA4000A4EA0008241901B4A0F8000AA0EF000BF2
4010:10FA5000952301208D6E00088D6D0004978400446D
4011:10FA600001C35021014D602101841023A4E2000C48
4012:10FA7000A4E5000EA4F90010A4E60012ACE0001406
4013:10FA80008D780024240DFFFFACF800188D0F006C5A
4014:10FA9000ACEF001C8D0E00683C0F1000ACEE002097
4015:10FAA000ACED0024950A00AE240DFFF73146FFFFB0
4016:10FAB000ACE60028950C00709504007231837FFF3E
4017:10FAC0000003CA003082FFFF0322C021ACF8002CE3
4018:10FAD000AD2F01B8950E00728D6A002000AE302166
4019:10FAE000014D2824A506007203E00008AD65002042
4020:10FAF0003C028000344601803C0580008CA301B8A4
4021:10FB00000460FFFE24090018ACC40000A0C9000B6B
4022:10FB10008F8800243C041000950700AEA4C7001095
4023:10FB2000ACC0003003E00008ACA401B83C02800087
4024:10FB3000344501803C0480008C8301B80460FFFEE2
4025:10FB40008F8A002C240600199549001C3128FFFFDC
4026:10FB5000000839C0ACA70000A0A6000B3C051000AF
4027:10FB600003E00008AC8501B88F8700340080402195
4028:10FB700030C400FF3C0680008CC201B80440FFFE88
4029:10FB80008F8900549383005034996000ACA9000021
4030:10FB9000A0A300058CE20010240F00022403FFF74D
4031:10FBA000A4A20006A4B900088D180020A0B8000A7D
4032:10FBB000A0AF000B8CEE0000ACAE00108CED00048A
4033:10FBC000ACAD00148CEC001CACAC00248CEB002021
4034:10FBD000ACAB00288CEA002C3C071000ACAA002C2F
4035:10FBE0008D090024ACA90018ACC701B88D05002010
4036:10FBF00000A3202403E00008AD04002093850050FA
4037:10FC00002403000127BDFFE800A330042CA200203C
4038:10FC1000AFB00010AFBF001400C018211040001397
4039:10FC20002410FFFE3C0708008CE7319000E610240A
4040:10FC30003C0880003505018014400005240600843E
4041:10FC40008F890024240A00042410FFFFA12A00EC5D
4042:10FC50000E00168400000000020010218FBF001467
4043:10FC60008FB0001003E0000827BD00183C06080014
4044:10FC70008CC631940A0016B600C310248F87002C5E
4045:10FC800027BDFFE0AFB20018AFB10014AFB0001055
4046:10FC9000AFBF001C30D000FF90E6000D00A088210F
4047:10FCA0000080902130C5007FA0E5000D8F850024E5
4048:10FCB0008E2300188CA200C01062002E240A000EB1
4049:10FCC0000E0016A9A38A00502409FFFF1049002244
4050:10FCD0002404FFFF52000020000020218E26000097
4051:10FCE0003C0C001000CC5824156000393C0E000874
4052:10FCF00000CE682455A0003F024020213C1800029D
4053:10FD000000D880241200001F3C0A00048F87002CBA
4054:10FD10008CE200148CE300108CE500140043F823FF
4055:10FD200003E5C82B13200005024020218E24002C5F
4056:10FD30008CF10010109100310240202124020012A9
4057:10FD4000A38200500E0016A92412FFFF10520002D9
4058:10FD50002404FFFF000020218FBF001C8FB2001879
4059:10FD60008FB100148FB000100080102103E0000854
4060:10FD700027BD002090A800C4350400200A0016DF2B
4061:10FD8000A0A400C400CA48241520000B8F8B002CAF
4062:10FD90008F8D002C8DAC00101580000B02402021AF
4063:10FDA0008E2E002C51C0FFEC0000202102402021AB
4064:10FDB0000A0016FA240200178D66001050C0FFE6F4
4065:10FDC00000002021024020210A0016FA240200111E
4066:10FDD00002402021240200150E0016A9A382005023
4067:10FDE000240FFFFF104FFFDC2404FFFF0A0016E979
4068:10FDF0008E2600000A001720240200143C0800048C
4069:10FE000000C8382450E0FFD4000020210240202107
4070:10FE10000A0016FA240200138F86002427BDFFE093
4071:10FE2000AFB10014AFBF0018AFB0001090C300C452
4072:10FE300030A500FF306200201040000800808821BB
4073:10FE40008CCB00C02409FFDF256A0001ACCA00C0CA
4074:10FE500090C800C401093824A0C700C414A0004001
4075:10FE60003C0C80008F840024908700C42418FFBFBE
4076:10FE70002406FFEF30E3007FA08300C4979F004477
4077:10FE80008F8200488F8D002403E2C823A799004485
4078:10FE9000A5A000AC91AF00C401F87024A1AE00C4CD
4079:10FEA0008F8C0024A18000C78F8A0024A540007297
4080:10FEB000AD4000DC914500C400A65824A14B00C40D
4081:10FEC0008F9000208F8400489786004402042821E8
4082:10FED00010C0000FAF850020A38000403C078000C9
4083:10FEE0008E2C000894ED01208E2B0004018D5021F2
4084:10FEF000014B8021020620233086FFFF30C8000F0F
4085:10FF0000390900013131000116200009A3880040A1
4086:10FF1000938600308FBF00188FB100148FB000108F
4087:10FF200027BD0020AF85004C03E00008AF860048E5
4088:10FF300000C870238FBF0018938600308FB1001463
4089:10FF40008FB0001034EF0C00010F282127BD0020D6
4090:10FF5000ACEE0084AF85004C03E00008AF8600489B
4091:10FF600035900180020028210E00168424060082AC
4092:10FF70008F840024908600C430C5004050A0FFBA92
4093:10FF8000A38000508F8500343C0680008CCD01B8E2
4094:10FF900005A0FFFE8F890054240860822407000218
4095:10FFA000AE090000A6080008A207000B8CA30008F9
4096:10FFB0003C0E1000AE0300108CA2000CAE02001428
4097:10FFC0008CBF0014AE1F00188CB90018AE190024A5
4098:10FFD0008CB80024AE1800288CAF0028AE0F002C7F
4099:10FFE000ACCE01B80A001744A38000508F8A0024C9
4100:10FFF00027BDFFE0AFB10014AFB000108F880048FC
4101:020000040001F9
4102:10000000AFBF001893890028954200AC30D100FFA3
4103:100010000109182B0080802130AC00FF3047FFFF22
4104:100020000000582114600003310600FF0120302138
4105:1000300001095823978300440068202B1480001B7B
4106:100040000000000010680043240A0001118A0048E3
4107:1000500034E708803165FFFF0E00162602002021DC
4108:100060000E0016668F8400548F840024948D0070D7
4109:1000700025AC0001A48C0070948B00703C06080035
4110:100080008CC6318831677FFF10E6004F000000000A
4111:1000900002002021022028218FBF00188FB10014F8
4112:1000A0008FB000100A00173027BD0020914400C413
4113:1000B0002406FF8000868825A15100C4978400444F
4114:1000C0003088FFFF1100001C938900288F8E0024C8
4115:1000D0002419EFFF008BF82395D800AC0168682B3A
4116:1000E00033E900FF03197824A5CF00AC51A0002A02
4117:1000F000010058218E0500202408FFFB2403000185
4118:1001000000A81024AE0200201183002534E78000EF
4119:10011000020020213165FFFF0E001626012030214C
4120:10012000978B00448F870048A780004400EB802312
4121:10013000AF900048938900288F8C00248FBF00184F
4122:100140008FB100148FB0001027BD002003E000081D
4123:10015000A18900C78E0800202409FFFB34E7800036
4124:1001600001092824AE050020158AFFBA34E708806B
4125:10017000020020210E0015F43165FFFF020020214E
4126:10018000022028218FBF00188FB100148FB00010FB
4127:100190000A00173027BD00200A0017E70000482199
4128:1001A000020020213165FFFF0E0015F401203021EF
4129:1001B000978B00448F870048A780004400EB802382
4130:1001C0000A0017F7AF90004894890070240A800055
4131:1001D000012A4024A48800709085007090990070D6
4132:1001E00030A200FF000219C20003F827001FC1C09F
4133:1001F000332F007F01F87025A08E00700A0017CF02
4134:10020000020020218F88002424030001910A007835
4135:10021000910500C7250900783147003F24E6FFE03B
4136:1002200000C318042CC2002030670019A3850028E1
4137:100230001040001AAF8900343C0A8000354B0002A0
4138:10024000240500012406000114E00016006B1024B0
4139:10025000000028211440000F306300201060000FC0
4140:10026000240500018D0600748D1900742403FF809D
4141:1002700000C31024000279403338007F01F868255C
4142:100280003C0E100001AE6025AD4C083091280001F5
4143:10029000310600010A0017A50000000003E0000875
4144:1002A000000000008D0F00748D0D00742418FF8075
4145:1002B00001F87024000E414031AC007F010C502544
4146:1002C0003C0B1000014B38253C0980000A0017A5A3
4147:1002D000AD27083027BDFFD8AFB000108F90003495
4148:1002E000AFB40020AFB10014AFBF0024AFB3001C07
4149:1002F000AFB200188E0500103C0208008C4231B0ED
4150:100300008F86003830A73FFF00E2182B8CD20014F4
4151:10031000008088218CD30020106000070000A021FD
4152:1003200090CB000D240AFF80014B4824312800FFA8
4153:100330001500000C00056382022020212411000D0D
4154:10034000A39100508FBF00248FB400208FB3001CF6
4155:100350008FB200188FB100148FB000100A0016A9D8
4156:1003600027BD00283185000354A0FFF4022020217E
4157:1003700094CF001C8F8E00248E070028A5CF00D8B4
4158:100380008CCD0010024D302310E6005C2402001FCB
4159:100390000E0016A9A3820050241FFFFF105F004E1D
4160:1003A0002404FFFF8F83003C8F88002C0263982178
4161:1003B0008D090010012310238F83001CAD02001053
4162:1003C000AD1300208C67007400F3202B14800062B2
4163:1003D000022020218F8600388E0C00248CC500243A
4164:1003E0001185000702202021240E001C0E0016A9F2
4165:1003F000A38E0050240DFFFF104D00372404FFFF93
4166:100400008F84002C8C980024270F0001AC8F0024CF
4167:10041000127200448F99001C8F32007412530041F5
4168:100420003C0A00808E090000012A10241440003A82
4169:10043000000000008E0400142412FFFF109200063A
4170:10044000240B001B022020210E0016A9A38B0050B4
4171:10045000105200212404FFFF8E0300003C0C000119
4172:10046000006C282410A000133C0600800066A02425
4173:10047000168000090200282102202021240E001AE3
4174:100480000E0016A9A38E0050240DFFFF104D001280
4175:100490002404FFFF02002821022020210E0016C99B
4176:1004A000240600012410FFFF2404FFFF1050000A5F
4177:1004B000241400018F8F002C022020210280302183
4178:1004C00095F2003424050001265800010E0017A5FE
4179:1004D000A5F80034000020218FBF00248FB4002035
4180:1004E0008FB3001C8FB200188FB100148FB00010B2
4181:1004F0000080102103E0000827BD00288F83003C06
4182:1005000000E3C8210259C02B1300FFA88F88002CDC
4183:100510000A00188E24020018AC8000200A0018B8C7
4184:100520008E0400148E1F00003C07008003E798240F
4185:100530001660FFF92408001A022020210E0016A9D7
4186:10054000A38800502403FFFF1443FFBA2404FFFFD5
4187:100550000A0018E18FBF0024240B001D0E0016A90D
4188:10056000A38B0050240AFFFF144AFF9A2404FFFFC4
4189:100570000A0018E18FBF00248F85002427BDFFD813
4190:10058000AFB3001CAFB20018AFB10014AFB0001091
4191:10059000AFBF002090A700C48F9000342412FFFF4B
4192:1005A00034E2004092060000A0A200C48E030010B6
4193:1005B000008098211072000630D1003F2408000D01
4194:1005C0000E0016A9A3880050105200262406FFFF33
4195:1005D0008F8A00248E0900188D4400C01124000762
4196:1005E000240C000E026020210E0016A9A38C0050DE
4197:1005F000240BFFFF104B001B2406FFFF24040020E8
4198:10060000122400048F8D002491AF00C435EE002029
4199:10061000A1AE00C48F85003C10A0001A00000000AD
4200:100620001224004B8F9800248F92FED42406FFFDE5
4201:10063000971000709651000A1230000B8FBF0020F7
4202:100640003C1F08008FFF318C03E5C82B1720001ECC
4203:1006500002602021000028210E0017A524060001B9
4204:10066000000030218FBF00208FB3001C8FB2001814
4205:100670008FB100148FB0001000C0102103E00008FB
4206:1006800027BD00285224002A8E0300148F840024E2
4207:100690009489007025280001A48800709487007058
4208:1006A0003C0508008CA5318830E27FFF1045000E24
4209:1006B00000000000026020210E0017302405000118
4210:1006C0000A001943000030212402002DA3820050AB
4211:1006D0000E0016A92413FFFF1453FFE12406FFFFA9
4212:1006E0000A0019448FBF00209498007024198000DC
4213:1006F0002405000103199024A492007090910070C9
4214:10070000908D0070323000FF001079C2000F70270A
4215:10071000000E61C031AB007F016C5025A08A0070D3
4216:100720000E001730026020210A001943000030211A
4217:100730002406FFFF1466FFD68F8400240260202168
4218:100740000E001730240500010A0019430000302173
4219:10075000026020210A00195D2402000A8F8800240B
4220:1007600027BDFFE8AFB00010AFBF0014910A00C46E
4221:100770008F87003400808021354900408CE60010CE
4222:10078000A10900C43C0208008C4231B030C53FFFD3
4223:1007900000A2182B106000078F850038240DFF8001
4224:1007A00090AE000D01AE6024318B00FF1560000893
4225:1007B0000006C382020020212403000D8FBF001415
4226:1007C0008FB0001027BD00180A0016A9A38300509F
4227:1007D00033060003240F000254CFFFF7020020214C
4228:1007E00094A2001C8F85002424190023A4A200D801
4229:1007F0008CE8000000081E02307F003F13F900352E
4230:100800003C0A00838CE800188CA600C01106000882
4231:10081000000000002405000E0E0016A9A38500505C
4232:100820002407FFFF104700182404FFFF8F850024D2
4233:1008300090A900C435240020A0A400C48F8C002CF3
4234:10084000918E000D31CD007FA18D000D8F83003C76
4235:100850001060001C020020218F8400388C9800104A
4236:100860000303782B11E0000D241900180200202149
4237:10087000A39900500E0016A92410FFFF105000028B
4238:100880002404FFFF000020218FBF00148FB0001050
4239:100890000080102103E0000827BD00188C8600109E
4240:1008A0008F9F002C0200202100C31023AFE2001014
4241:1008B000240500010E0017A5240600010A0019CC2A
4242:1008C000000020210E001730240500010A0019CC79
4243:1008D00000002021010A5824156AFFD98F8C002CB2
4244:1008E000A0A600EC0A0019B9A386004227BDFFD8D4
4245:1008F000AFB000108F900034AFB20018AFBF00202F
4246:10090000AFB3001CAFB100148E1100103C030800FF
4247:100910008C6331B032253FFF00A3102B104000083C
4248:10092000008090218F8600382409FF8090CA000D36
4249:10093000012A4024310700FF14E0000B00116B82F4
4250:10094000024020212412000DA39200508FBF0020EE
4251:100950008FB3001C8FB200188FB100148FB000103D
4252:100960000A0016A927BD002831AC0003240B0001A2
4253:10097000558BFFF40240202190CF000D31EE00088E
4254:1009800011C000608F93003C16600009240200270C
4255:100990008E19000C8CD80020173800052402002086
4256:1009A0008E0200088CDF0024105F0040240200202B
4257:1009B0000E0016A9A38200502406FFFF1046003344
4258:1009C0002404FFFF8F99002C240AFFF73C13800EAC
4259:1009D0009329000D2404FF803C0D8000012AF82497
4260:1009E000A33F000D8F99001C3C0808008D0831AC16
4261:1009F0008F830054972700788F9F002C01031021CC
4262:100A000030E57FFF000530400046782131F8007F57
4263:100A10000313602101E47024ADAE002CA591000009
4264:100A20008FEB0028256A0001AFEA00288FE3002C35
4265:100A30008E09002C00694021AFE8002C8E07002CA5
4266:100A4000AFE700308E050014AFE5003497E6003ABA
4267:100A500024C20001A7E2003A973300783C10080056
4268:100A60008E1031B02663000130717FFF12300027F5
4269:100A7000006030218F8F001C0240202124050001DE
4270:100A80000E001730A5E60078000020218FBF00205F
4271:100A90008FB3001C8FB200188FB100148FB00010FC
4272:100AA0000080102103E0000827BD00288E050014F7
4273:100AB0002413FFFF10B3001D8F8300248E0800183D
4274:100AC0008C6700C0150700092402000E8E0A00245E
4275:100AD0008CC9002815490005240200218E07002832
4276:100AE0008CCB002C10EB00132402001F0E0016A963
4277:100AF000A38200501453FFB32404FFFF0A001A4ED0
4278:100B00008FBF00200A001A1624020024240E800041
4279:100B1000006E682431ACFFFF000C5BC2317100FF36
4280:100B2000001180270A001A47001033C00A001A6516
4281:100B3000240200258E05002C10A0FFEC24020023C7
4282:100B40008F8E001C8DCD007401A5602B1580FFE7F2
4283:100B5000240200268CCF001400A7C02101F8202B0E
4284:100B60001080FF998F99002C024020210A001A65FD
4285:100B70002402002227BDFFE0AFB000108F900034A8
4286:100B8000AFB10014AFBF00188E0500103C03080081
4287:100B90008C6331B00080882130A43FFF0083102B8C
4288:100BA000104000078F8600382409FF8090CA000D8E
4289:100BB000012A4024310700FF14E000098F8B003C1C
4290:100BC0002410000D02202021A39000508FBF001898
4291:100BD0008FB100148FB000100A0016A927BD0020A5
4292:100BE000116000080005C3828F8F00248F8EFED411
4293:100BF0002407FFFD95EC007095CD000A11AC00387C
4294:100C00008FBF00183305000314A00010000000007F
4295:100C10009219000213200041000000008E060024FB
4296:100C200050C0000F92040003022020212402000F74
4297:100C30000E0016A9A38200502408FFFF14480007E5
4298:100C40002407FFFF0A001AE28FBF001890C3000DAF
4299:100C50003064000810800037022020219204000335
4300:100C600024070002308900FF15270005308F00FFA0
4301:100C70008F8A003C11400031240C002C308F00FF83
4302:100C800039E500102CAD00012DEE000102002821F5
4303:100C900001CD30250E0016C9022020212410FFFFAF
4304:100CA0001050000E2407FFFF8F83003C10600017D8
4305:100CB000022020213C1908008F39318C0323C02BDE
4306:100CC0005700000C2411002D0220202100002821B3
4307:100CD0000E0017A524060001000038218FBF001860
4308:100CE0008FB100148FB0001000E0102103E0000865
4309:100CF00027BD00200E0016A9A39100501450FFF646
4310:100D00002407FFFF0A001AE28FBF00180E001730F9
4311:100D1000240500010A001AE1000038218CDF0024BC
4312:100D20008E020024545FFFC1022020210A001AC253
4313:100D3000920400030A001AB62402001002202021A7
4314:100D40000E0016A9A38C0050240BFFFF104BFFE3ED
4315:100D50002407FFFF0A001AC99204000330A500FF10
4316:100D60002406000124A9000100C9102B1040000C2A
4317:100D700000004021240A000100A61823308B000146
4318:100D800024C60001006A38040004204211600002F9
4319:100D900000C9182B010740251460FFF800A618238E
4320:100DA00003E000080100102127BDFFD8AFB00018F4
4321:100DB0008F900034AFB1001CAFBF00202403FFFFB1
4322:100DC0002411002FAFA30010920600002405000894
4323:100DD00026100001006620260E001B01308400FF53
4324:100DE00000021E003C021EDC34466F410A001B2933
4325:100DF0000000102110A000090080182124450001E6
4326:100E000030A2FFFF2C4500080461FFFA00032040D8
4327:100E10000086202614A0FFF9008018210E001B0177
4328:100E2000240500208FA300102629FFFF313100FF89
4329:100E300000034202240700FF1627FFE201021826E2
4330:100E400000035027AFAA0014AFAA00100000302101
4331:100E500027A8001027A7001400E6782391ED0003CF
4332:100E600024CE000100C8602131C600FF2CCB000455
4333:100E70001560FFF9A18D00008FA200108FBF002028
4334:100E80008FB1001C8FB0001803E0000827BD0028B8
4335:100E90009383003027BDFFE024020034AFB100147B
4336:100EA000AFB00010AFBF001CAFB2001800808821A7
4337:100EB0001062006200A080219204000414800045AA
4338:100EC0008F880024A38000288E0500048D0600C8AA
4339:100ED0003C0700FF34E3FFFF00A3282400C5102BCC
4340:100EE0001440004DAF85003C978A00448F8700482E
4341:100EF0000147102310A00032A78200448F98001CE5
4342:100F0000304CFFFF9312007C0012788231F1000117
4343:100F10000011708001C56821018D582B116000619E
4344:100F20008F8600248F8900208F84004C1089005EFA
4345:100F30003C023F018E1F00003C10250003E2C82444
4346:100F40001730007A8F8400348F8700348F86002416
4347:100F50008CE30000ACC300788CE50010ACC50088C1
4348:100F60008F8700488F85003C938D002830AE0003AA
4349:100F7000000E4023310A0003014D4021A3880028C0
4350:100F800094CB00AC01276021AF8C002035691000A4
4351:100F9000A4C900AC1620005101452021AF840048AF
4352:100FA000000020218FBF001C8FB200188FB10014E9
4353:100FB0008FB000100080102103E0000827BD002042
4354:100FC0008F840020AF800048008730210A001B92E8
4355:100FD000AF860020241F000CA39F00500E0016A90E
4356:100FE000022020212419FFFF1059FFEE2404FFFFE7
4357:100FF0008F880024A38000288E0500048D0600C879
4358:101000003C0700FF34E3FFFF00A3282400C5102B9A
4359:101010001040FFB5AF85003C0220202124090019B3
4360:10102000A38900500E0016A92411FFFF1051FFDD07
4361:101030002404FFFF0A001B648F85003C8F8400247A
4362:101040008F8700348CF20030908600C430C50010C9
4363:1010500014A000108F8300482C680005150000289C
4364:1010600000000000908A00C4246BFFFC314900108E
4365:1010700015200008316400FF8F8D004C8F8C0020FC
4366:1010800011AC0004388F000131EE000115C0002FB3
4367:10109000000000000E001B14000000000A001BEB03
4368:1010A000000000008F890020938D002830AE0003DF
4369:1010B000000E4023310A0003014D4021A38800287F
4370:1010C00094CB00AC01276021AF8C00203569100063
4371:1010D000A4C900AC1220FFB101452021251800044D
4372:1010E000A398002894CF00AC24920004AF9200484B
4373:1010F00035F12000A4D100AC0A001B930000202190
4374:101100008C8200DC1242FF6C022020212418000592
4375:10111000A39800500E0016A92412FFFF1452FF6678
4376:101120002404FFFF0A001B948FBF001C30E500FF62
4377:101130000E0015B0000030218F8600248F870048F4
4378:101140008F8900200A001B848F85003C0E0015DB70
4379:10115000000000000A001BEB000000009383004227
4380:1011600027BDFFE024020002AFB20018AFB10014A7
4381:10117000AFBF001C00808821AFB00010000090219C
4382:10118000106200552404FFFD978300448F850048BA
4383:101190003066FFFF00C5202B1480005B9387003072
4384:1011A0003C0880009504012010E500528F8A002041
4385:1011B0008F84004C30A500FF0E0015B024060001FE
4386:1011C0008F9F00543C0580003C19408027ED01783A
4387:1011D00031B00078240EFF800219582534AF090081
4388:1011E00031B8000701AE6024ACAC0800030F8021C9
4389:1011F000ACAB081002202021020028210E001B4E5B
4390:10120000AF9000342403FFFF104300332404FFFF9A
4391:101210008E0C00103C0708008CE731B092060000ED
4392:1012200031843FFF0087102B1040002330CD003F5A
4393:101230008F980054000471803C0408008C8431A80D
4394:101240002409FF809390004100984021010E202145
4395:1012500000897024000E51403C0980003099007FC5
4396:101260003C0F00808F8800243525094035E20001BD
4397:1012700001593825308B0078308600073C03100078
4398:101280003C1F800C00C5C0210162582500E3502599
4399:10129000033F782136050001AD2E0804AF980038D1
4400:1012A000AD2B0814AF8F002CAD2E0028AD040074B8
4401:1012B000AD2A0830A3850041938300422410000327
4402:1012C0005070002725A3FFE0240C0001106C001CC7
4403:1012D00024060023024020218FBF001C8FB200187B
4404:1012E0008FB100148FB000100080102103E00008BF
4405:1012F00027BD0020314900035520FFAE8F84004CEC
4406:101300000A001C278F90004C8F84004C306500FF32
4407:101310000E0015B024060001938B00302405003424
4408:1013200011650018978300448F8500483062FFFFE5
4409:1013300000A25823AF8B00480A001C5FA78000441E
4410:1013400011A6003700000000022020212411000B0C
4411:101350000E0016A9A39100500A001C5F00409021C6
4412:101360002C7200201240FFF80003F8803C070800B0
4413:1013700024E7796003E7C8218F2D000001A0000851
4414:10138000000000008F8500482CA200055440001D7D
4415:10139000A7800044978A00443148FFFF00A84823F3
4416:1013A0002D2F000511E00003314400FF24AEFFFCA7
4417:1013B00031C400FF8F90004C8F9800201218000459
4418:1013C00038990001332D000115A00029000000000C
4419:1013D0008F910024922500C434A30010A22300C4DE
4420:1013E000978300448F8500488F8400243062FFFF7C
4421:1013F00000A25823AC8000DCA78000440A001C5FD8
4422:10140000AF8B00483062FFFF00A258230A001C5F28
4423:10141000AF8B00482403FFFF11830005000000008C
4424:101420000E001981022020210A001C5F004090213B
4425:101430000E001908022020210A001C5F00409021A4
4426:101440000E0019E5022020210A001C5F00409021B7
4427:101450000E00185F022020210A001C5F004090212E
4428:101460000E001A87022020210A001C5F00409021F4
4429:101470000E0015DB00000000978300448F850048B4
4430:10148000306CFFFF00AC38232CFF000553E0FFA8B1
4431:101490003062FFFF8F860024A7800044ACC200DCCE
4432:1014A0003062FFFF00A258230A001C5FAF8B004888
4433:1014B00027BDFFD0AFB20018AFB00010AFBF0028FB
4434:1014C000AFB50024AFB40020AFB3001CAFB100141F
4435:1014D0003C0C80008D880128240FFF803C07800A87
4436:1014E00025100100250B0080020F68243205007FC3
4437:1014F000016F7024AD8E009000A72821AD8D0024CF
4438:1015000090A700EC3169007F3C0A8004012A182171
4439:10151000A38700429066007C00809021AF83001C6E
4440:1015200030C20002AF880054AF85002400A018210B
4441:10153000144000022404003424040030A38400304A
4442:101540008C6600CC30F100FF24040004AF86004814
4443:1015500012240004A38000508E5300041660001D66
4444:101560003C0880009387004130F200011240000FD8
4445:101570008FBF00288CB800748CA400742419FF80DD
4446:101580000319882400117140308F007F01CF60253E
4447:101590003C0D2000018D582530F500FE3C0A8000EE
4448:1015A000AD4B0830A39500418FBF00288FB50024B4
4449:1015B0008FB400208FB3001C8FB200188FB10014BD
4450:1015C0008FB000102402000127BD003003E00008A6
4451:1015D000ACA600CC8E590008951F01208E46001045
4452:1015E000033FC0213307FFFF30F5000F32B4000185
4453:1015F000AF8600201680003BA395004035060C0006
4454:1016000002A6102100F51823AD030084AF82004C20
4455:101610008E4900043128FFFF1100002BA7890044E8
4456:101620002410FF803C1580003C1420000A001D4D52
4457:101630002413FFFE90AE00C4020E682431AC00FFFC
4458:101640001580002A0240202193840041978600449F
4459:10165000308F000111E0000B026428248F890024E0
4460:101660008D2300748D280074A38500410070102420
4461:101670000002C940311F007F033FC02503148825A5
4462:10168000AEB1083010C000108F85002490A700C4B0
4463:1016900002075824316A00FF1540FFE6024020216E
4464:1016A0000E001C01979100441040FFE89384004114
4465:1016B0002405FFFD544500058E430020022028210B
4466:1016C0000E001586024020218E4300203070000459
4467:1016D0001600000A2414FFFB8F8500240A001D0356
4468:1016E0008F8600480A001D2EAF86004C0E00182B76
4469:1016F000000000000A001D3D9384004100749824FE
4470:101700000E0015A0AE5300208F8500240A001D0393
4471:101710008F86004827BDFFD8AFB3001CAFB10014BF
4472:10172000AFBF0020AFB20018AFB000103C02800085
4473:101730008C5201408C4B01483C048000000B8C0211
4474:10174000322300FF317300FF8C8501B804A0FFFE37
4475:1017500034900180AE1200008C8701442464FFF0B5
4476:10176000240600022C830013AE070004A611000813
4477:10177000A206000BAE1300241060004F8FBF0020A4
4478:10178000000448803C0A0800254A79E0012A4021EB
4479:101790008D04000000800008000000003C100800DC
4480:1017A0008E1031A831733FFF001389800212282167
4481:1017B000240CFF8000B12021264D01002647008027
4482:1017C0003C0F80003C03800431A8007F30E9007F9B
4483:1017D000308A007F3C0E800A3C02800C008CC024C2
4484:1017E00001AC302400ECC82401239821014280215F
4485:1017F000ADE60024010EF821ADF90090ADF8002807
4486:10180000AF90002CAF9F0024AF93001C0E00167504
4487:10181000016080213C0380008C6B01B80560FFFEF5
4488:101820008F87002C8F8600243465018090F9000D8D
4489:10183000ACB2000024C200780019C60000187E0374
4490:10184000000F9027001227C2A4B00006108000707D
4491:10185000240E6082A4AE0008A0A00005240F0002A0
4492:10186000A0AF000B0004C4008F8B001C3C192700A4
4493:1018700003199025ACB20010ACA00014ACA0002459
4494:10188000ACA00028ACA0002C8D7300382411FF8080
4495:10189000ACB3001890F0000D0230282430A400FFF3
4496:1018A000108000058FBF002090EC000D319F007F5D
4497:1018B000A0FF000D8FBF00208FB3001C8FB2001857
4498:1018C0008FB100148FB000103C0A10003C0D800056
4499:1018D00027BD002803E00008ADAA01B8265F01007B
4500:1018E0002405FF8033F8007F3C06800003E5782460
4501:1018F0003C19800A03192021ACCF0024908E00C42B
4502:1019000000AE682431AC00FF1180FFEAAF840024F0
4503:10191000248E007895CD00123C0C08008D8C31A8E7
4504:101920003C03800C31AB3FFF01924821000B5180FA
4505:10193000012A40213104007F010510240083382151
4506:10194000ACC200280E001675AF87002C3C03800047
4507:101950008C6501B804A0FFFE00000000AE1200007C
4508:101960008C720144AE120004A6110008241100027A
4509:10197000A211000BAE1300240A001DD88FBF002057
4510:101980003C1260008E452C083C03F0033462FFFFDC
4511:1019900000A2F824AE5F2C088E582C083C1901B028
4512:1019A00003199825AE532C080A001DD88FBF0020BC
4513:1019B000264D010031AF007F3C10800A240EFF80CD
4514:1019C00001F0282101AE60243C0B8000AD6C0024A6
4515:1019D0001660FFB8AF85002424110003A0B100EC0D
4516:1019E0000A001DD88FBF002026480100310A007F61
4517:1019F0003C0B800A2409FF80014B3021010920247F
4518:101A00003C078000ACE400240A001DD7AF86002408
4519:101A1000944D0012321F3FFF31AC3FFF159FFF8DE9
4520:101A2000240E608290C300C42409FF800123102487
4521:101A3000304A00FF1140FF87000000002407000427
4522:101A4000A0C700EC8F87002C240860842406000DBA
4523:101A5000A4A80008A0A600050A001DC2240F0002C9
4524:101A60005F865437E4AC62CC50103A453662198533
4525:101A7000BF14C0E81BC27A1E84F4B556094EA6FEF8
4526:101A80007DDA01E7C04D7481800801008008008084
4527:101A90008008000008004FBC08004FBC08005098A8
4528:101AA0000800506C0800505008004F8C08004F8C04
4529:101AB00008004F8C08004FC4080072BC080073086F
4530:101AC000080072C8080071F0080072C8080072F8B7
4531:101AD000080072C8080071F0080071F0080071F089
4532:101AE000080071F0080071F0080071F0080071F052
4533:101AF000080071F0080071F0080071F0080072E849
4534:101B0000080072D8080071F0080071F0080071F048
4535:101B1000080071F0080071F0080071F0080071F021
4536:101B2000080071F0080071F0080071F0080071F011
4537:101B3000080071F0080072D8080078900800775CFF
4538:101B4000080078580800775C080078280800764478
4539:101B50000800775C0800775C0800775C0800775C19
4540:101B60000800775C0800775C0800775C0800775C09
4541:101B70000800775C0800775C0800775C0800775CF9
4542:041B8000080077845E
4543:0C1B84000A000122000000000000000028
4544:101B90000000000D747061342E362E3135000000C7
4545:101BA00004060F010000000000000000000000001B
4546:101BB0000000000000000000000000000000000025
4547:101BC0000000000000000000000000000000000015
4548:101BD0000000000000000000000000000000000005
4549:101BE00000000000000000000000000000000000F5
4550:101BF00000000000000000000000000000000000E5
4551:101C000000000000000000000000000000000000D4
4552:101C100010000003000000000000000D0000000D97
4553:101C20003C020800244217C03C03080024632AB485
4554:101C3000AC4000000043202B1480FFFD2442000430
4555:101C40003C1D080037BD2FFC03A0F0213C1008000C
4556:101C5000261004883C1C0800279C17C00E00025E5A
4557:101C6000000000000000000D2402FF8027BDFFE0FF
4558:101C700000821024AFB00010AF420020AFBF0018A8
4559:101C8000AFB10014936500043084007F0344182131
4560:101C90003C0200080062182130A50020036080216A
4561:101CA0003C080111277B000814A000022466005C98
4562:101CB0002466005892020004974301049204000431
4563:101CC0003047000F3063FFFF308400400067282357
4564:101CD00010800009000048219202000530420004F3
4565:101CE000104000050000000010A0000300000000EC
4566:101CF00024A5FFFC240900049202000530420004E0
4567:101D0000104000120000000010A0001000000000B1
4568:101D10009602000200A72021010440252442FFFE74
4569:101D2000A7421016920300042402FF8000431024EF
4570:101D3000304200FF104000033C0204000A00017220
4571:101D4000010240258CC20000AF4210188F4201787A
4572:101D50000440FFFE2402000AA7420140960200024E
4573:101D6000240400093042000700021023304200071B
4574:101D7000A7420142960200022442FFFEA74201440C
4575:101D8000A740014697420104A74201488F4201083B
4576:101D9000304200205040000124040001920200045F
4577:101DA00030420010144000023483001000801821DB
4578:101DB000A743014A000000000000000000000000EE
4579:101DC00000000000AF48100000000000000000000C
4580:101DD00000000000000000008F4210000441FFFEE0
4581:101DE0003102FFFF104000070000000092020004D3
4582:101DF0003042004014400003000000008F421018E1
4583:101E0000ACC20000960200063042FFFF24420002EE
4584:101E10000002104300021040036288219622000055
4585:101E20001120000D3044FFFF00A710218F83003CDC
4586:101E30008F45101C00021082000210800043102108
4587:101E4000AC45000030A6FFFF0E0005B700052C02D0
4588:101E500000402021A6220000920300042402FF80FB
4589:101E600000431024304200FF1040001F000000001B
4590:101E700092020005304200021040001B00000000EA
4591:101E80009742100C2442FFFEA742101600000000EB
4592:101E90003C02040034420030AF4210000000000059
4593:101EA0000000000000000000000000008F42100051
4594:101EB0000441FFFE000000009742100C8F45101CEB
4595:101EC0003042FFFF244200300002108200021080E6
4596:101ED000005B1021AC45000030A6FFFF0E0005B7E7
4597:101EE00000052C02A62200009604000224840008AB
4598:101EF0000E0001E73084FFFF974401040E0001F556
4599:101F00003084FFFF8FBF00188FB100148FB0001016
4600:101F10003C02100027BD002003E00008AF4201781A
4601:101F20003084FFFF308200078F85002410400002BC
4602:101F3000248300073064FFF800A4102130421FFF03
4603:101F400003421821247B4000AF850028AF82002483
4604:101F500003E00008AF4200843084FFFF3082000FAE
4605:101F60008F85002C8F860034104000022483000FE0
4606:101F70003064FFF000A410210046182BAF8500301C
4607:101F80000046202314600002AF82002CAF84002C96
4608:101F90008F82002C34048000034218210064182131
4609:101FA000AF83003C03E00008AF4200808F82001442
4610:101FB000104000088F8200048F82FFE41440000567
4611:101FC0008F8200043C02FFBF3442FFFF00822024C6
4612:101FD0008F82000430430006240200021062000FCA
4613:101FE0003C0201012C620003504000052402000461
4614:101FF0001060000F3C0200010A00022E00000000E9
4615:1020000010620005240200061462000C3C0201115B
4616:102010000A000227008210253C02001100821025D0
4617:10202000AF421000240200010A00022EAF82000C11
4618:1020300000821025AF421000AF80000C00000000AD
4619:10204000000000000000000003E0000800000000A5
4620:102050008F82000C10400004000000008F4210002E
4621:102060000441FFFE0000000003E000080000000043
4622:102070008F820010000229C224A3FFF0000318423F
4623:102080002444F80000031140004310210002108096
4624:1020900000431021000210803C0308002463180054
4625:1020A0002C84030114800013004330218F84001816
4626:1020B00000A4102B1440000F0000302100A41023B6
4627:1020C00000021940006218210003188000621821E4
4628:1020D0008F82001C008210212442FFFF0045102B3C
4629:1020E00014400004000318803C02080024421A1423
4630:1020F0000062302103E0000800C0102127BDFFE08E
4631:10210000AFBF0018AFB10014AFB000103C046008BE
4632:102110008C8250002403FF7F3C06600000431024A3
4633:102120003442380CAC8250008CC24C1C3C1A8000EB
4634:10213000000216023042000F10400007AF82001C60
4635:102140008CC34C1C3C02001F3442FC00006218246B
4636:10215000000319C2AF8300188F420008275B4000BC
4637:1021600034420001AF420008AF8000243C02601CF2
4638:10217000AF400080AF4000848C4500088CC3080845
4639:1021800034028000034220212402FFF00062182460
4640:102190003C0200803C010800AC2204203C025709AC
4641:1021A000AF84003C14620004AF85003424020001B7
4642:1021B0000A00028EAF820014AF8000143C0280003F
4643:1021C000344400708C8300008F42000038420001CC
4644:1021D0003042000110400018AF83003800804021D9
4645:1021E000006030218D0700003C0508008CA5045CD0
4646:1021F0003C0408008C84045800E6302300001021C1
4647:1022000000A6282100A6302B008220210086202154
4648:102210003C010800AC25045C3C010800AC240458D7
4649:102220008F42000038420001304200011440FFEDAF
4650:1022300000E03021AF8700383C028000344200705B
4651:102240008C4700008F8600383C0508008CA5045C94
4652:102250003C0408008C84045800E638230000102158
4653:1022600000A72821008220218F82001400A7302B94
4654:10227000008620213C010800AC25045C3C010800DC
4655:10228000AC240458104000160000000097420104DE
4656:10229000104000058F830000146000072462FFFFD8
4657:1022A0000A0002D02C62000A2C6200105040000488
4658:1022B0008F83000024620001AF8200008F83000042
4659:1022C0002C62000A144000032C6200070A0002D7A7
4660:1022D000AF80FFE41040000224020001AF82FFE45F
4661:1022E0008F4301088F44010030622000AF83000457
4662:1022F00010400008AF8400103C0208008C42042CFF
4663:10230000244200013C010800AC22042C0A0005B361
4664:102310003C0240003065020014A0000324020F00BC
4665:102320001482026024020D0097420104104002C88A
4666:102330003C02400030624000144000AD8F82003CFF
4667:102340008C4400088F4201780440FFFE24020800FC
4668:10235000AF42017824020008A7420140A740014291
4669:10236000974201048F8400043051FFFF3082000146
4670:1023700010400007022080212623FFFE24020002D5
4671:102380003070FFFFA74201460A000304A74301483B
4672:10239000A74001463C0208008C42043C1440000D5A
4673:1023A0008F830010308200201440000224030009B3
4674:1023B00024030001006020218F8300102402090003
4675:1023C0005062000134840004A744014A0A00031F3C
4676:1023D0000000000024020F0014620005308200207B
4677:1023E000144000062403000D0A00031E2403000508
4678:1023F000144000022403000924030001A743014AFA
4679:102400003C0208008C4204203C0400480E00020AF2
4680:10241000004420250E000233000000008F82000CD3
4681:102420001040003E000000008F4210003C030020DE
4682:1024300000431024104000398F8200043042000213
4683:102440001040003600000000974210141440003382
4684:1024500000000000974210088F88003C3042FFFFC8
4685:1024600024420006000218820003388000E8302170
4686:10247000304300018CC400001060000430420003AF
4687:102480000000000D0A00036000E810215440001015
4688:102490003084FFFF3C05FFFF0085202400851826BF
4689:1024A0000003182B0004102B0043102410400005DB
4690:1024B00000000000000000000000000D000000000F
4691:1024C000240001CB8CC200000A00035F00452025D8
4692:1024D0003883FFFF0003182B0004102B0043102447
4693:1024E0001040000500000000000000000000000D8A
4694:1024F00000000000240001D48CC200003444FFFF1F
4695:1025000000E81021AC4400003C0208008C4204307A
4696:10251000244200013C010800AC2204308F6200001C
4697:102520008F84003CAF8200088C8300003402FFFFE0
4698:102530001462000F000010213C0508008CA5045413
4699:102540003C0408008C84045000B0282100B0302BDB
4700:1025500000822021008620213C010800AC25045483
4701:102560003C010800AC2404500A0005A9240400081A
4702:102570008C820000304201001040000F000010214A
4703:102580003C0508008CA5044C3C0408008C840448DD
4704:1025900000B0282100B0302B0082202100862021AD
4705:1025A0003C010800AC25044C3C010800AC24044864
4706:1025B0000A0005A9240400083C0508008CA5044471
4707:1025C0003C0408008C84044000B0282100B0302B6B
4708:1025D00000822021008620213C010800AC25044413
4709:1025E0003C010800AC2404400A0005A924040008AA
4710:1025F0008F6200088F62000000021602304300F074
4711:10260000240200301062000524020040106200E045
4712:102610008F8200200A0005B12442000114A00005A9
4713:1026200000000000000000000000000D000000009D
4714:10263000240001FE8F4201780440FFFE00000000EC
4715:102640000E00023B00000000144000050040802105
4716:10265000000000000000000D000000002400020542
4717:102660008E02000010400005000000000000000085
4718:102670000000000D00000000240002088F62000C22
4719:1026800004430003240200010A000457AE000000C6
4720:10269000AE0200008F82003C8C480008A2000007B8
4721:1026A0008F65000C8F64000430A3FFFF0004240238
4722:1026B00000852023308200FF0043102124420005C2
4723:1026C000000230832CC20081A605000A14400005D8
4724:1026D000A2040004000000000000000D0000000043
4725:1026E000240002208F85003C0E0005D5260400142E
4726:1026F0008F6200048F430108A60200083C0210000C
4727:1027000000621824106000080000000097420104D5
4728:10271000920300072442FFEC346300023045FFFFC0
4729:102720000A0003ECA2030007974201042442FFF0D1
4730:102730003045FFFF960600082CC2001354400005E8
4731:10274000920300079202000734420001A202000730
4732:102750009203000724020001106200052402000316
4733:102760001062000B8F82003C0A00040930C6FFFF94
4734:102770008F82003C3C04FFFF8C43000C0064182453
4735:1027800000651825AC43000C0A00040930C6FFFFA1
4736:102790003C04FFFF8C4300100064182400651825DA
4737:1027A000AC43001030C6FFFF24C2000200021083B9
4738:1027B000A20200058F83003C304200FF000210801F
4739:1027C000004328218CA800008CA2000024030004F0
4740:1027D0000002170214430012000000009742010497
4741:1027E0003C03FFFF010318243042FFFF0046102383
4742:1027F0002442FFFE00624025ACA8000092030005C1
4743:10280000306200FF0002108000501021904200143E
4744:102810003042000F004310210A00043EA2020006CD
4745:102820008CA40004974201049603000A3088FFFF3D
4746:102830003042FFFF004610232442FFD6000214005E
4747:1028400001024025ACA80004920200079204000592
4748:102850002463002800031883006418213442000414
4749:10286000A2030006A20200078F8200042403FFFBDC
4750:102870003442000200431024AF8200049203000699
4751:102880008F87003C00031880007010218C440020CA
4752:102890003C02FFF63442FFFF00824024006718210B
4753:1028A000AE04000CAC68000C920500063C03FF7FF0
4754:1028B0008E02000C0005288000B020213463FFFF49
4755:1028C000010330249488002600A728210043102407
4756:1028D000AE02000CAC860020AC880024ACA800102E
4757:1028E00024020010A742014024020002A740014236
4758:1028F000A7400144A7420146974201043C04000856
4759:102900002442FFFEA7420148240200010E00020AF1
4760:10291000A742014A9603000A9202000400431021D4
4761:102920002442000230420007000210233042000718
4762:102930000E000233AE0200108F6200003C0308005C
4763:102940008C63044424040010AF8200089742010401
4764:102950003042FFFF2442FFFE00403821000237C30F
4765:102960003C0208008C420440006718210067282BB5
4766:1029700000461021004510213C010800AC2304440E
4767:102980003C010800AC2204400A00053E00000000A3
4768:1029900014A0000500000000000000000000000D71
4769:1029A000000000002400029E8F4201780440FFFED8
4770:1029B000000000000E00023B000000001440000573
4771:1029C00000408021000000000000000D0000000019
4772:1029D000240002A58E020000544000069202000767
4773:1029E000000000000000000D00000000240002A80C
4774:1029F0009202000730420004104000058F8200045C
4775:102A00002403FFFB3442000200431024AF82000481
4776:102A10008F6200040443000892020007920200063D
4777:102A20008E03000CAE000000000210800050102148
4778:102A3000AC430020920200073042000454400009D9
4779:102A40009602000A920200053C0300010002108079
4780:102A5000005010218C46001800C33021AC460018ED
4781:102A60009602000A92060004277100080220202125
4782:102A700000C2302124C60005260500140E0005D52D
4783:102A800000063082920400068F6500043C027FFF3E
4784:102A900000042080009120218C8300043442FFFF39
4785:102AA00000A2282400651821AC83000492020007CC
4786:102AB0009204000592030004304200041040001408
4787:102AC00096070008308400FF000420800091202138
4788:102AD0008C860004974201049605000A306300FFCB
4789:102AE0003042FFFF004310210045102130E3FFFF7B
4790:102AF000004310232442FFD830C6FFFF0002140019
4791:102B000000C23025AC8600040A0004F292030007DC
4792:102B1000308500FF0005288000B128218CA400002A
4793:102B200097420104306300FF3042FFFF0043102151
4794:102B3000004710233C03FFFF008320243042FFFFA7
4795:102B400000822025ACA400009203000724020001AB
4796:102B50001062000600000000240200031062001151
4797:102B6000000000000A0005158E03001097420104C2
4798:102B7000920300049605000A8E24000C00431021E5
4799:102B8000004510212442FFF23C03FFFF0083202474
4800:102B90003042FFFF00822025AE24000C0A000515FC
4801:102BA0008E03001097420104920300049605000A68
4802:102BB0008E24001000431021004510212442FFEE16
4803:102BC0003C03FFFF008320243042FFFF00822025CA
4804:102BD000AE2400108E0300102402000AA742014018
4805:102BE000A74301429603000A920200043C040040FD
4806:102BF00000431021A7420144A74001469742010427
4807:102C0000A7420148240200010E00020AA742014A1D
4808:102C10000E000233000000008F62000092030004E7
4809:102C200000002021AF820008974201049606000AA6
4810:102C30003042FFFF00621821006028213C03080099
4811:102C40008C6304443C0208008C4204400065182157
4812:102C5000004410210065382B004710213C0108007A
4813:102C6000AC2304443C010800AC220440920400045C
4814:102C7000008620212484000A3084FFFF0E0001E733
4815:102C800000000000974401043084FFFF0E0001F5AE
4816:102C9000000000003C021000AF4201780A0005B0BD
4817:102CA0008F820020148200273062000697420104C0
4818:102CB000104000673C0240003062400010400005B8
4819:102CC00000000000000000000000000D00000000F7
4820:102CD000240003968F4201780440FFFE240208007E
4821:102CE000AF42017824020008A7420140A7400142F8
4822:102CF0008F82000497430104304200011040000716
4823:102D00003070FFFF2603FFFE24020002A7420146A7
4824:102D1000A74301480A0005682402000DA7400146A8
4825:102D20002402000DA742014A8F620000240400081B
4826:102D3000AF8200080E0001E7000000000A00054213
4827:102D400002002021104000423C024000936200003B
4828:102D5000304300F0240200101062000524020070CD
4829:102D600010620035000000000A0005B08F820020CC
4830:102D70008F620000974301043050FFFF3071FFFF66
4831:102D80008F4201780440FFFE320200070002102348
4832:102D9000304200072403000A2604FFFEA743014037
4833:102DA000A7420142A7440144A7400146A751014858
4834:102DB0008F42010830420020144000022403000921
4835:102DC00024030001A743014A0E00020A3C0400400C
4836:102DD0000E000233000000003C0708008CE70444AA
4837:102DE000021110212442FFFE3C0608008CC604405C
4838:102DF0000040182100E33821000010218F650000F9
4839:102E000000E3402B00C230212604000800C8302116
4840:102E10003084FFFFAF8500083C010800AC27044464
4841:102E20003C010800AC2604400E0001E70000000051
4842:102E30000A000542022020210E0001390000000096
4843:102E40008F82002024420001AF8200203C0240001B
4844:102E5000AF420138000000000A00028F3C028000EF
4845:102E60003084FFFF30C6FFFF00052C0000A6282598
4846:102E70003882FFFF004510210045282B0045102116
4847:102E800000021C023042FFFF0043102100021C021E
4848:102E90003042FFFF004310213842FFFF03E00008EB
4849:102EA0003042FFFF3084FFFF30A5FFFF00001821F4
4850:102EB0001080000700000000308200011040000276
4851:102EC00000042042006518210A0005CB00052840B7
4852:102ED00003E000080060102110C0000624C6FFFFB8
4853:102EE0008CA2000024A50004AC8200000A0005D5D5
4854:102EF0002484000403E000080000000010A0000883
4855:102F000024A3FFFFAC8600000000000000000000CA
4856:102F10002402FFFF2463FFFF1462FFFA24840004ED
4857:082F200003E0000800000000BE
4858:042F280000000001A4
4859:042F2C000A00002671
4860:102F300000000000000000000000000D74787034F4
4861:102F40002E362E3136000000040610000000000A64
4862:102F5000000001360000EA600000000000000000F0
4863:102F60000000000000000000000000000000000061
4864:102F70000000000000000000000000000000000051
4865:102F80000000000000000000000000000000001D24
4866:102F90000000000000000000000000000000000031
4867:102FA0000000000000000000000000000000000021
4868:102FB0000000000000000000000000000000000011
4869:102FC00000000000000000001000000300000000EE
4870:102FD0000000000D0000000D3C02080024423B6090
4871:102FE0003C03080024633E18AC4000000043202B43
4872:102FF0001480FFFD244200043C1D080037BD7FFC07
4873:1030000003A0F0213C100800261000983C1C08008A
4874:10301000279C3B600E0004AE000000000000000D85
4875:103020003C0580008F83003034A800708D070000BD
4876:10303000008330253C02900000C22025ACA4002073
4877:10304000AF8700243C0480008C8900200520FFFE0F
4878:1030500000000000348400708C8500003C180800DB
4879:103060008F18007C3C0D08008DAD007800A7C823A8
4880:1030700003195021000070210159602B01AE582125
4881:10308000016C38213C010800AC2A007C3C0108009E
4882:10309000AC27007803E00008000000000A00003DB3
4883:1030A000240400018F8500303C048000348300013B
4884:1030B00000A3102503E00008AC82002003E0000814
4885:1030C000000010213084FFFF30A5FFFF10800007B3
4886:1030D000000018213082000110400002000420424C
4887:1030E000006518211480FFFB0005284003E000085C
4888:1030F0000060102110C00007000000008CA200003A
4889:1031000024C6FFFF24A50004AC82000014C0FFFB0E
4890:103110002484000403E000080000000010A0000860
4891:1031200024A3FFFFAC8600000000000000000000A8
4892:103130002402FFFF2463FFFF1462FFFA24840004CB
4893:1031400003E000080000000090AA00318FAB0010DF
4894:103150008CAC00403C0300FF8D680004AD6C002087
4895:103160008CAD004400E060213462FFFFAD6D0024AF
4896:103170008CA700483C09FF000109C024AD67002866
4897:103180008CAE004C0182C82403197825AD6F000471
4898:10319000AD6E002C8CAD0038314A00FFAD6D001CC7
4899:1031A00094A900323128FFFFAD68001090A70030CD
4900:1031B000A5600002A1600004A167000090A3003296
4901:1031C000306200FF00021982106000052405000132
4902:1031D0001065000E0000000003E00008A16A000175
4903:1031E0008CD80028354A0080AD7800188CCF0014A8
4904:1031F000AD6F00148CCE0030AD6E00088CC4002C76
4905:10320000A16A000103E00008AD64000C8CCD001C35
4906:10321000AD6D00188CC90014AD6900148CC8002471
4907:10322000AD6800088CC70020AD67000C8CC200148C
4908:103230008C8300700043C82B13200007000000009F
4909:103240008CC20014144CFFE400000000354A0080DA
4910:1032500003E00008A16A00018C8200700A0000C629
4911:10326000000000009089003027BDFFF88FA8001CE7
4912:10327000A3A900008FA300003C0DFF8035A2FFFF33
4913:103280008CAC002C00625824AFAB0000A1000004FD
4914:1032900000C05821A7A000028D06000400A048210C
4915:1032A0000167C8218FA50000008050213C18FF7FD6
4916:1032B000032C20263C0E00FF2C8C0001370FFFFF53
4917:1032C00035CDFFFF3C02FF0000AFC82400EDC02455
4918:1032D00000C27824000C1DC00323682501F8702566
4919:1032E000AD0D0000AD0E00048D240024AFAD000034
4920:1032F000AD0400088D2C00202404FFFFAD0C000C51
4921:103300009547003230E6FFFFAD06001091450048BA
4922:1033100030A200FF000219C2506000018D24003469
4923:10332000AD0400148D4700388FAA001827BD00088F
4924:10333000AD0B0028AD0A0024AD07001CAD00002C29
4925:10334000AD00001803E00008AD00002027BDFFE03D
4926:10335000AFB20018AFB10014AFB00010AFBF001C87
4927:103360009098003000C088213C0D00FF330F007F93
4928:10337000A0CF0000908E003135ACFFFF3C0AFF006B
4929:10338000A0CE000194A6001EA22000048CAB001465
4930:103390008E29000400A08021016C2824012A4024E9
4931:1033A0000080902101052025A6260002AE240004FD
4932:1033B00026050020262400080E00007224060002C4
4933:1033C00092470030260500282624001400071E001E
4934:1033D0000003160324060004044000032403FFFF37
4935:1033E000965900323323FFFF0E000072AE23001007
4936:1033F000262400248FBF001C8FB200188FB1001448
4937:103400008FB0001024050003000030210A00007C6A
4938:1034100027BD002027BDFFD8AFB1001CAFB00018FA
4939:10342000AFBF002090A900302402000100E050212D
4940:103430003123003F00A040218FB000400080882150
4941:1034400000C04821106200148FA70038240B00052B
4942:1034500000A0202100C02821106B001302003021A1
4943:103460000E000108000000009225007C30A400023C
4944:103470001080000326030030AE0000302603003425
4945:103480008FBF00208FB1001C8FB00018006010218A
4946:1034900003E0000827BD00280E000087AFB0001031
4947:1034A0000A00014F000000008FA3003C0100202112
4948:1034B0000120282101403021AFA300100E0000CED2
4949:1034C000AFB000140A00014F000000008F820050CE
4950:1034D00024430001304200FFAF83005003E00008A6
4951:1034E000000000003C0580008CA30E108F84004477
4952:1034F000AC8300208CA20E1803E00008AC820024EC
4953:103500003C0580008CA30E148F840044AC83002003
4954:103510008CA20E1C03E00008AC82002493820038C9
4955:103520001040001B2483000F2404FFF000643824A3
4956:1035300010E00019978B002C9784004C9389002E83
4957:103540003C0A601C0A0001900164402301037021C1
4958:10355000006428231126000231C2FFFF30A2FFFFC2
4959:103560000047302B50C0000E00E448218D4D000C68
4960:1035700031A3FFFF00036400000C2C0304A1FFF340
4961:103580000000302130637FFF0A000188240600011B
4962:1035900003E00008000000009784004C00E448218C
4963:1035A0003123FFFF3168FFFF0068382B54E0FFF83C
4964:1035B000A783004C938A002E11400005240F0001C0
4965:1035C000006BC023A380002E03E00008A798004CE6
4966:1035D000006BC023A38F002E03E00008A798004CC7
4967:1035E00003E000080000000027BDFFE8AFB00010B6
4968:1035F0003084FFFF3C10800093A8002BAFBF001465
4969:10360000A6040144960A0E1630C600FF8FA90030AA
4970:10361000A60A0146AE050148A2060152A608015AB3
4971:10362000AE0701608FA3002CA609015801202021BC
4972:103630000E00017CAE0301543C021000AE02017882
4973:103640008FBF00148FB0001003E0000827BD0018E2
4974:103650003C038000346200708C4900008F87003C7E
4975:103660002484000727BDFFF83084FFF8AF890024C9
4976:103670003C088000950E008A31CDFFFFAFAD000001
4977:103680008FAC000001875823256AFFFF31461FFFDA
4978:1036900000C4282B14A0FFF7350D00708DAC00007E
4979:1036A0003C0508008CA500843C0A08008D4A008077
4980:1036B000018958230000102100ABC0210007C882F7
4981:1036C00001422021030B302B0019388035094000BE
4982:1036D0000086782100E9102127BD00083C01080080
4983:1036E000AC3800843C010800AC2F008003E00008E7
4984:1036F000000000008F82003C2486000730C5FFF8E0
4985:1037000000A2182130641FFF03E00008AF84003CD2
4986:103710003C0320FF27BDFFE83C0760003C08800019
4987:10372000240500103464FFFDACE53008AFBF001085
4988:10373000AD040E00000000000000000000000000CA
4989:1037400000000000000000003C0200FF345FFFFDAD
4990:10375000AD1F0E003C0B60048D7850002419FF7FD4
4991:103760003C0E00020319782435EC380C35CD0109E4
4992:10377000ACED4C1824060009AD6C50008CEA0438FE
4993:10378000AD060008AD0000148CE94C1C3145FFFF6C
4994:103790003C06570900091E0238A42F713062000F41
4995:1037A00034C80010AF820048104000072485C0B321
4996:1037B0008CEB4C1C3C0D001F35ACFC00016C502404
4997:1037C000000A49C2AF8900348CF90808241FF000B0
4998:1037D000033FC02403087026030678262DE8000165
4999:1037E0002DC600010106382550E00009A3800038ED
5000:1037F0003C09601C8D24000824030001A3830038C9
5001:1038000030827C00A780004CA380002EA782002C71
5002:10381000AF80005014A00003AF80003C3C05600066
5003:10382000ACA0442C0E000559000000008FBF001012
5004:103830000A000E9927BD001827BDFFC8AFB3002CA2
5005:10384000AFB20028AFBF0030AFB10024AFB000204E
5006:10385000936200080080982100A090211440003558
5007:10386000240400100E0001C9000000000E000168D1
5008:10387000004080210002C4003C1932000319882551
5009:10388000AE110000936F0009976E0012936A000A50
5010:1038900031EC00FF31CDFFFF018D5821000B4400BA
5011:1038A000314900FF01093825AE0700048F8500501B
5012:1038B0009784004000403021308320001460004D88
5013:1038C000AE050008AE00000C3C0580009784004067
5014:1038D0000662004F8E03000C3090000816000002B4
5015:1038E000264800062648000294A40E148CA50E1C3F
5016:1038F0008F670004936A00023084FFFF314900FFA4
5017:10390000AFA900108F720014AFA800180E0001AF0D
5018:10391000AFB200148FBF00308FB3002C8FB20028DD
5019:103920008FB100248FB00020240400100A0001F29F
5020:1039300027BD00389365000997710012936C000B46
5021:1039400030AD00FF01B13021318B00FF00CB802171
5022:103950002602000A3050FFFF0E0001C9020020219C
5023:103960000E000168004088219368000997640012E6
5024:103970000002FC00310900FF308AFFFF012A3821D4
5025:1039800024E3000203E3C0253C1941000319782514
5026:10399000AE2F00008F6E000C3C0D800095AC0E1415
5027:1039A00001D32825AE2500048DA50E1C8F670004C9
5028:1039B000936B00023184FFFF316600FFAFA6001059
5029:1039C0008F68001400403021AFB200180E0001AF24
5030:1039D000AFA80014020020218FBF00308FB3002C4D
5031:1039E0008FB200288FB100248FB000200A0001F2AE
5032:1039F00027BD0038976200123C0580009784004084
5033:103A0000305FFFFF0661FFB4AE1F000C8E03000C99
5034:103A10003C078000006798250A00026BAE13000C7B
5035:103A200027BDFFD8AFB40020AFBF0024AFB3001C48
5036:103A3000AFB20018AFB10014AFB00010936200082D
5037:103A4000144000940080A021AF60000C97850040D6
5038:103A500030A440001080009E24030016241040076C
5039:103A6000A363000AAF700014938F00428F6C0014A0
5040:103A700031EE0001000E6A40018D5825AF6B001435
5041:103A8000978A00408F6800143149001001093825D9
5042:103A9000AF6700149786004030C300081060009F95
5043:103AA000000000008F6600143C0310003C048000FE
5044:103AB00000C32825AF65001494820E0A3C1F8100C4
5045:103AC0002413000E3059FFFF033FC025AF780004D8
5046:103AD000A37300029372000A3406FFFC265100040F
5047:103AE000A371000A978800403107200010E0009180
5048:103AF000000000003C0B80009789004095680E0C88
5049:103B000097840040000918423107C0003065000367
5050:103B100000071303309F100000A2C025001FCA0336
5051:103B200003199825001390C0A772001297910040C6
5052:103B3000936F000A00118182320E003C01CF682190
5053:103B400025AC003CA36C0009956A0E0C31493FFF7F
5054:103B5000A7690010976D0012936C0009018D582120
5055:103B6000256A00023149000700094023310300079C
5056:103B7000A363000B93670009976400129765001018
5057:103B800030E200FF8F900028979800400044F82111
5058:103B900003E5C82103269821331200401240000596
5059:103BA0003266FFFF00D0702B3C11800011C0001660
5060:103BB000000090210206782B15E0002D0000202146
5061:103BC0003C1080008E120E143C058000AE120E10C8
5062:103BD0008E110E1CAE110E18AE060E008CB8000031
5063:103BE000331300081260FFFD0000000094B90E08B6
5064:103BF00000C0802100008821A79900408CA60E04F7
5065:103C000024120001AF860028977F001033F3FFFFD6
5066:103C10008E8900000130202310800058AE840000FF
5067:103C2000022020210E000243020028218E8C000079
5068:103C300015800005000000008F6D0014240EFFBFEA
5069:103C400001AEA024AF7400148F78000C03138821F8
5070:103C5000AF71000C936F000815E000030000000036
5071:103C60001640004000000000A3720008020020215E
5072:103C70008FBF00248FB400208FB3001C8FB20018B8
5073:103C80008FB100148FB000100080102103E00008F5
5074:103C900027BD00288F900028978200403C118000AB
5075:103CA000020098213045004014A0FFD90000902167
5076:103CB000976800108F8700283103FFFF1467FFEC1F
5077:103CC00000002021000088210A000339241200018D
5078:103CD0002403000E24104007A363000AAF700014F1
5079:103CE000938F00428F6C001431EE0001000E6A4089
5080:103CF000018D5825AF6B0014978A00408F6800141F
5081:103D00003149001001093825AF670014978600403B
5082:103D100030C300081460FF6300000000AF600004BF
5083:103D2000A3600002978800403107200014E0FF7173
5084:103D300000003021A760001297910040936F000AA5
5085:103D40003C0B800032301F000010718301CF6821CE
5086:103D500025AC0028A36C0009956A0E0C0A00030A22
5087:103D6000A76A00108F6600143C1FEFFF37F9FFFEB3
5088:103D700000D998240A00034FAF7300148F6B00140E
5089:103D8000356A00400E00016EAF6A00140A00033E5F
5090:103D9000022020218F8500448F8A003027BDFFC07C
5091:103DA0003C048000AFB70034AFB40028AFB1001CB2
5092:103DB000AFBF0038AFB60030AFB5002CAFB30024B2
5093:103DC000AFB20020AFB000188C8701048CA900248A
5094:103DD000AC8A00808CA8002000E988230000B8216C
5095:103DE000AC880E108CA600240000A021AC860E1812
5096:103DF0008C820E10AC820E148C830E18AC830E1CB9
5097:103E0000122000333C168000936B000811600054B0
5098:103E100000000000976E001031CDFFFF022D602BD7
5099:103E20001580004F0000000097700010320FFFFF58
5100:103E3000AECF0E003C0580008CB30000327200084B
5101:103E40001240FFFD0000000094B50E088CA50E0482
5102:103E500032B0FFFF32140001128000440000000065
5103:103E60000000000D3219A04024180040133800450E
5104:103E70003214A0001280003F00000000937300087D
5105:103E80001260000927A4001097620010305FFFFF46
5106:103E900000BFC82B53200005AFB10010320800400E
5107:103EA0001100003400000000AFB10010A7900040E6
5108:103EB000AF8500280E0002BD000000000040A021D8
5109:103EC000104000BE8FB100101620FFCF0000000090
5110:103ED0002E96000102D78825122000178FBF0038C8
5111:103EE0008F85003024170F0010B700713C0480004C
5112:103EF0008C8F017805E0FFFE24180F0050B8008F6A
5113:103F00003C0480008C990E14241402403C051000DF
5114:103F1000AC9901448C930E1CAC930148A0800152D3
5115:103F2000A480015AAC800160A4800158AC94015473
5116:103F3000AC8501788FBF00388FB700348FB6003062
5117:103F40008FB5002C8FB400288FB300248FB20020CF
5118:103F50008FB1001C8FB0001803E0000827BD00409F
5119:103F6000AED10E000A0003C33C05800014A0FFBEC2
5120:103F70003219A0400E0001750000A0210A0003EADA
5121:103F80002E9600013C0380008C7F017807E0FFFE45
5122:103F9000240208008F84003CAC6201783C0380005E
5123:103FA000946B008A316AFFFF0144382324E9FFFF44
5124:103FB00031281FFF2D06000814C0FFF9346C4000A3
5125:103FC00000A0A0210E000168008C90218F8300309A
5126:103FD00024040F000040A821023488233C068000FE
5127:103FE0001064000524050001938E004231C50001D4
5128:103FF00000056A4035A500010015FC003C020100E7
5129:1040000003E2C825AE5900008F93005032180036E5
5130:10401000320F0008AE53000411E0004100B89825AB
5131:1040200094C30E0A8F84003C3C0B8100306AFFFF72
5132:104030002492000832481FFF014B48253C0710001E
5133:10404000269200062410000EACC901600267982574
5134:10405000A4D0015AAF88003CA4D201581620000811
5135:104060003C1080008F8E003024050F0051C50002E7
5136:1040700024170001367300400E00016E3C108000D2
5137:104080008E180E1402402021AE1801448E0F0E1C13
5138:10409000AE0F0148A2150152AE1301540E00017C6F
5139:1040A0003C151000AE1501780A0003E7000000007F
5140:1040B000128000053C07800094F20E08324900404F
5141:1040C00011200042000000008C8A01780540FFFEAC
5142:1040D0000000000094950E103C1005002403200001
5143:1040E00032AEFFFF01D06825AC8D014C8C8C0E14D4
5144:1040F0003C0B1000AC8C01448C860E1CAC86014835
5145:10410000A0800152A480015AAC800160A4800158B3
5146:10411000AC830154AC8B01780A0003F13C048000AD
5147:104120008F8D003C26920002A4D2015825AC0008D5
5148:1041300031861FFF0A00044CAF86003CAC80014C66
5149:1041400012800019000000008C9F0E10AC9F0144EB
5150:104150008C830E183C08800024110040AC83014879
5151:104160008FBF0038A10001528FB70034A500015A5B
5152:104170008FB60030AD0001608FB5002CA50001584E
5153:104180008FB40028AD1101548FB300248FB20020EA
5154:104190008FB1001C8FB000183C04100027BD0040F8
5155:1041A00003E00008AD0401788C820E14AC82014457
5156:1041B0008C830E1C0A00048B3C0880000E000175E5
5157:1041C0002E9600010A0003EB02D7882500000000AC
5158:1041D0000000000D000000002400033A0A000467FC
5159:1041E0003C04800027BDFFD8AFB100143C11800013
5160:1041F000AFB00010AFB40020AFB3001CAFB20018D6
5161:10420000AFBF00243C13080026733C340E0001F9B4
5162:10421000363000703C14080026943CB40200902113
5163:104220008E0800008E2400003883000130620001F7
5164:10423000104000163C0A8000024048218D270000F3
5165:104240003C1F08008FFF006C3C0F08008DEF0068DA
5166:1042500000E8102303E260210000C0210182702BDE
5167:1042600001F8682101AE40213C010800AC2C006C33
5168:104270003C010800AC2800688D4B00003966000145
5169:1042800030C5000114A0FFED00E040218E1F0000AA
5170:104290003C1808008F18006C3C0D08008DAD0068BC
5171:1042A00003E8C823031938210000702100F9602BAE
5172:1042B00001AE4021010C58213C010800AC27006CE4
5173:1042C0003C010800AC2B00688E2801002406FF800A
5174:1042D0003C04800A2505024000A64824AE280020A0
5175:1042E000AE2900248E09000030A3007F0064502115
5176:1042F0003C078000AF8A0044AF880030AF890024BB
5177:104300008CE201780440FFFE000000008E1F0000D8
5178:104310003C1808008F1800743C0D08008DAD00702B
5179:1043200003E9C82303195821000070210179302BBB
5180:1043300001AE602101864821240508003C010800E7
5181:10434000AC2B00743C010800AC290070ACE501788E
5182:1043500090E40108A384004293830042306A000184
5183:104360001140000F240E0D002502F8002C47030118
5184:1043700010E0001C000819C22464FFF00004504241
5185:10438000000A41400E00039A0113D8213C0A400064
5186:104390003C088000AD0A01380A0004BD000000009E
5187:1043A000110E0026240F0F00110F002A3C02800876
5188:1043B0003447008090FF00002418005033F900FFBC
5189:1043C0001738FFF33C0A40000E0009A3000000006C
5190:1043D0003C0A40003C088000AD0A01380A0004BDD8
5191:1043E000000000008F8400340064282B14A0000B10
5192:1043F0008F86004800866021258BFFFF0163482BD4
5193:104400001520000600646823000D19400E00039A71
5194:104410000074D8210A0005193C0A40000000000081
5195:104420000000000D00000000240003AD0E00039A00
5196:10443000000000000A0005193C0A40003C1B08006F
5197:10444000277B3DB40E00039A000000000A00051906
5198:104450003C0A40003C1B0800277B3DD40E00039A19
5199:10446000000000000A0005193C0A40008F8200503D
5200:1044700024430001304200FFAF83005003E00008F6
5201:1044800000000000000411C003E0000824420240C4
5202:104490003C04080024843BCC2405001A0A00007C5C
5203:1044A0000000302127BDFFE0AFBF001CAFB20018F5
5204:1044B000AFB10014AFB000103C108000920B0109A6
5205:1044C0002412FF800E0005563164007F8F9100306A
5206:1044D0000051502101524024AE08002492030109EA
5207:1044E0000E0005563064007F24060080240700C0BB
5208:1044F00024040040AE000810AE040814AE060818EC
5209:10450000AE07081C920C01090051F82133F8007F16
5210:104510003C19800A031910213184007F0E000556D2
5211:10452000AF8200448E1101003C0C008035850001F3
5212:104530000222782101F24824AE0908048E0E0100FF
5213:10454000359800023609090001C2682131AB0078B4
5214:1045500001655025AE0A08208E0501008E08010075
5215:10456000360509800102182124640040009230249D
5216:10457000AE0608088E07010000E2F82127F9004086
5217:104580003332007802588825AE1108248E040100C9
5218:10459000952F000C8FBF001C8FB2001831EEFFFF6B
5219:1045A000000E69C0AE0D0800AE0C0828952B000C5B
5220:1045B0008FB10014316AFFFF000A41C0AE08002C21
5221:1045C0008CA300508FB000108CA2003C8D240004FE
5222:1045D0008CA6001C8CA7003827BD0020AF83006884
5223:1045E000AF820058AF840054AF86006003E000083B
5224:1045F000AF8700643C0A0800914A3BF13C0908007F
5225:1046000095293BEA3C051100000A3C0025280002E0
5226:1046100000E8302500C5182524820008AC8300007E
5227:1046200003E00008AC8000043C0880003507090066
5228:1046300090E60011240200280080502130C300FFC2
5229:1046400000A0602110620002340B86DD240B0800FC
5230:104650003C07800034E20A9A9459000034EF0A9C27
5231:1046600034ED0AA03338FFFFAD5800008DEE000096
5232:1046700034E80A8024040001AD4E00048DA9000036
5233:10468000AD4900089105001930A3000310640043F0
5234:104690002866000214C000B0240400021064008BDD
5235:1046A000240500031065009634E60AA43C090800BE
5236:1046B00095293BE0240208005162004D3C0E800029
5237:1046C0003C0E800035C5090090A6001290B9001973
5238:1046D00035CB09808D68002830C700FF000778803F
5239:1046E0003138FFFF332300FF01F8102100032500BC
5240:1046F0000088702500025C003C0D600001CD302573
5241:10470000356906FFAD490004AD4600008CA7002CBA
5242:1047100025490028AD4700088CB90030AD59000C80
5243:104720008CB80034AD5800108CAF0038AD4F001479
5244:104730008CA3001CAD4300188CA800203C03800013
5245:104740003462093CAD48001C8CA40024346F09007D
5246:10475000AD4400208CAD0028AD4D00248C590000E4
5247:10476000AD2C000425220014AD3900008C78010C1A
5248:10477000AD38000891E800123C04080090843BF03A
5249:10478000AD20001000082F0000046C0000AD602573
5250:10479000358AFFFF03E00008AD2A000C3C09080041
5251:1047A00095293BE03C0F080095EF3BEA34F90AA459
5252:1047B0003C0E080095CE3BDC972800003138FFFF07
5253:1047C00001F8682101AE382300082C0024E3FFF231
5254:1047D00000A3202524020800AD44000CAD400010C9
5255:1047E000AD4B00141562FFB6254A00183C0E800040
5256:1047F00035CD090091A2001191A700193C050800D0
5257:1048000094A53BE6304600FF35CB0A80956E002A22
5258:104810000006C88230F800FF9787005C00191E0070
5259:1048200000187C003128FFFF00A82021006F4825D8
5260:104830000124102501C730213C0B4000004BC82546
5261:104840000006C400AD590000AD58000491AF001837
5262:104850003C03000624E90001000F46000103702517
5263:10486000AD4E00088DA5002C3C0380003462093C4D
5264:10487000AD45000C8DAB001C31247FFF2549001491
5265:10488000AD4B00108C590000AD2C0004346F0900B2
5266:10489000AD3900008C78010CA784005C252200143F
5267:1048A000AD38000891E800123C04080090843BF009
5268:1048B000AD20001000082F0000046C0000AD602542
5269:1048C000358AFFFF03E00008AD2A000C34E20AA499
5270:1048D00094460000951900283C09080095293BE002
5271:1048E0000006C40000197C00370E810001EB68252A
5272:1048F000AD4E000CAD4D00100A0005E2254A001433
5273:104900003C09080095293BE03C18080097183BEA51
5274:104910003C0F080095EF3BDC94CE00003139FFFFDF
5275:10492000950D002803194021010F3823000E2400A3
5276:10493000000D2C0024E3FFEE00A33025348281001B
5277:10494000AD42000CAD460010AD400014AD4B001858
5278:104950000A0005E2254A001C1460FF5434E90AA449
5279:10496000952800003C09080095293BE000083C0020
5280:1049700000EB1825AD43000C0A0005E2254A0010A3
5281:1049800003E00008240207D027BDFFE0AFB2001803
5282:10499000AFB10014AFB00010AFBF001C0E00005C40
5283:1049A000008088218F8800588F8700543C0580083C
5284:1049B00034B20080011128213C10800024020080C4
5285:1049C000240300C000A72023AE0208183C0680087C
5286:1049D000AE03081C18800004AF850058ACC5000465
5287:1049E0008CC90004AF8900541220000936040980E4
5288:1049F0000E00069500000000924C00278E0B0074FC
5289:104A000001825004014B3021AE46000C360409806F
5290:104A10008C8E001C8F8F006001CF682319A00004CA
5291:104A20008FBF001C8C90001CAF9000608FBF001CDB
5292:104A30008FB200188FB100148FB000100A00005E12
5293:104A400027BD00208F8600688F8300588F82005416
5294:104A50003C05800834A40080AC860050AC83003C48
5295:104A600003E00008ACA200043C038000346700703F
5296:104A70008CE30000308700FF3C0408008C84005465
5297:104A800027BDFFF830AA00FF248200013C01080086
5298:104A9000AC22005430C800FFAF8300243C098000E2
5299:104AA0008D25017804A0FFFE352B00708D65000078
5300:104AB000A3A700033C1808008F1800748FB90000EA
5301:104AC0003C0D08008DAD007000A338233C047FFF2F
5302:104AD00000E078213482FFFF0307382100007021B5
5303:104AE0000322582401AE302100EF602B000847C09C
5304:104AF00000CC182101682825AFA500003C01080062
5305:104B0000AC2700743C010800AC2300709124010A1A
5306:104B1000A3A000023C0280FFA3A400018FB8000004
5307:104B2000314F007F3459FFFF03196824000F7600CE
5308:104B30003C0B002001AE6025356A20002408FF8070
5309:104B40003C06100027BD0008AD2C014CAD2A0154D5
5310:104B5000A5200158A128015203E00008AD260178E4
5311:104B60003C038000346200708C480000308A00FFF3
5312:104B700030A900FFAF8800243C0480008C850178B8
5313:104B800004A0FFFE348700708CEB00003C05080099
5314:104B90008CA500743C1908008F390070016820232F
5315:104BA00000A470210000102101C4C02B0322782131
5316:104BB0003C07800001F868213C010800AC2E00741D
5317:104BC00034E60A003C010800AC2D00708CCC0020BB
5318:104BD0000009582B34E80980ACEC01448CC900244E
5319:104BE000000B1540ACE90148A0EA01509104004CCB
5320:104BF000A0E4016D03E00008A4E0015827BDFFE830
5321:104C0000308400FFAFBF00100E00070D30A500FF7D
5322:104C10008F8300588FBF00103C0580003446004051
5323:104C20002404FF903C02100027BD0018ACA3014CE7
5324:104C3000A0A40152ACA6015403E00008ACA2017884
5325:104C400027BDFFE03C088008AFBF001CAFB20018D2
5326:104C5000AFB10014AFB00010351000808E06001800
5327:104C60003C078000309200FF00C72025AE040018EA
5328:104C70000E00005C30B100FF9203000534620008B2
5329:104C80000E00005EA2020005024020210E00073443
5330:104C900002202821024020218FBF001C8FB2001863
5331:104CA0008FB100148FB00010240500052406000108
5332:104CB0000A0006CF27BD00203C08800027BDFFE882
5333:104CC000AFB0001035050980AFBF001490A70009F0
5334:104CD000240200063506090030E300FF241000041A
5335:104CE000106200722408000294AE005C3C0D0204C5
5336:104CF00031CCFFFF018D5825AC8B000090AA000835
5337:104D000031490020112000080000000090BF004E33
5338:104D10003C1901033738030033EF00FF01F8282561
5339:104D200024100008AC85000490CC001190C900113B
5340:104D3000318A00FF000A5882312700FF256A0005EA
5341:104D4000000A108038E300281460002900824823FC
5342:104D500090CF00123C1980003722090031E500FF96
5343:104D60000005708001D06821000D340034C406FFB6
5344:104D7000AD240004904C001190580012373F098078
5345:104D80008FE400348F2F010C00105882330500FF90
5346:104D900000AB702100083400008F1823000E6F0054
5347:104DA00001A61025319F00FC3067FFFF03E9C021F9
5348:104DB0000047C825014B7821000F2880AF19000C4F
5349:104DC0000E00005C012580213C0A800824090004B3
5350:104DD000354800800E00005EA10900090200102184
5351:104DE0008FBF00148FB0001003E0000827BD00182B
5352:104DF00090CE001190CD00193C07080094E73BE6E7
5353:104E000031C600FF0006208231AC00FF00045E00C6
5354:104E1000000C1C00016310250047C8253C1F400002
5355:104E2000033FC0253C198000AD380000372209003F
5356:104E3000904C001190580012373F09808FE40034E5
5357:104E40008F2F010C00105882330500FF00AB70213A
5358:104E500000083400008F1823000E6F0001A61025F3
5359:104E6000319F00FC3067FFFF03E9C0210047C825E0
5360:104E7000014B7821000F2880AF19000C0E00005C58
5361:104E8000012580213C0A800824090004354800805F
5362:104E90000E00005EA1090009020010218FBF00145E
5363:104EA0008FB0001003E0000827BD00180A00076F4C
5364:104EB0002408001227BDFFD8AFB40020AFB3001CF8
5365:104EC000AFB20018AFB10014AFBF0024AFB00010F4
5366:104ED0003C06800090C3010B309200FF30B300FF0E
5367:104EE000306200300000A0211040007000008821D6
5368:104EF00034C409809088000800083E0000072E0393
5369:104F000004A00097240400048F8800583C01080086
5370:104F1000A0243BF03C0C8000AD8000483C038000A6
5371:104F2000906E010B31C5002010A000073C028000EC
5372:104F300034790980933800080018860000107E0339
5373:104F400005E2009C3C0280083450090034470A8086
5374:104F5000904D010B94EB002C92030011921F001254
5375:104F600090E50018307800FF33F900FF00197880D1
5376:104F700001F8702101D1502130B100FF01514821C9
5377:104F80002524000A31AC00403091FFFF000C302B8B
5378:104F900002202021A78B005C3C010800A42A3BE6EC
5379:104FA0003C010800A4293BE83C010800A4293BEA95
5380:104FB0003C010800A4203BE03C010800A4203BDCAD
5381:104FC0000E0001C9010680230E0005B20040202119
5382:104FD000004020210E0005BF020028211680005C41
5383:104FE000000000000E0001F2022020213C08080011
5384:104FF00091083BF031140003128000163C1F80081A
5385:105000008F8400583C0C800835860080248B00017A
5386:10501000ACCB003C3C0580088CAA00040160202138
5387:10502000014B482319200002AF8B00588CA40004C8
5388:105030000E000695ACA400043C0F80008DEE0074B9
5389:105040003C05800834AD0080004E8821ADB1000CD5
5390:105050003C1F800837F9008002402021026028218F
5391:10506000A320006B0E00070D3C1280008F980058A3
5392:1050700034500006AE58014C0E0005503C13100091
5393:10508000A24201528FBF0024AE5001548FB40020C1
5394:10509000AE5301788FB100148FB3001C8FB200188B
5395:1050A0008FB0001003E0000827BD002834C309803A
5396:1050B000906F0008000F7600000E6E0305A000330D
5397:1050C00034C209009059001B241F00103C01080045
5398:1050D000A03F3BF0333800021300FF908F88005848
5399:1050E0008F8300641468FF8E3C0380000E00005C18
5400:1050F000000000003C0980083525008090A40009CC
5401:1051000024070016308800FF1107000D0000000082
5402:1051100090A600093C0C0800918C3BF0240A000882
5403:1051200030C400FF358B00013C010800A02B3BF090
5404:10513000108A002F240D000A108D00282402000C74
5405:105140000E00005E000000000A0007FC8F88005877
5406:105150000E000763004020210A00082E0000000016
5407:105160003C0B8008356A00808D4800548CC9010CC6
5408:105170001120FF66AF880058240600143C01080087
5409:10518000A0263BF00A0007FB3C0C80009071000851
5410:10519000241400023C010800A0343BF0323000200F
5411:1051A0001200000B241400018F8800580A0007FC2D
5412:1051B00024110008345F00808FE70038AC470004FA
5413:1051C0008C430004AFE3003C0A0008073C02800067
5414:1051D0008F8800580A0007FC24110004A0A20009CF
5415:1051E0000E00005E000000000A0007FC8F880058D7
5416:1051F000240200140A0008ADA0A2000927BDFFE8A0
5417:10520000AFBF0014AFB000103C1080009202010943
5418:10521000240500010E00070D304400FF3C1F8008EC
5419:1052200093F8000E37E3008093F9000F906E00268C
5420:1052300093E9000A332F00FF00186600000F6C008E
5421:1052400031CB00FF018D5025000B3200014638257F
5422:10525000312800FF3445600000E820252402FF814A
5423:105260003C031000AE04014C8FBF0014AE05015486
5424:10527000A2020152AE0301788FB0001003E00008D3
5425:1052800027BD001827BDFFE8308400FFAFBF001026
5426:105290000E00070D30A500FF344600403C0480009E
5427:1052A0002405FF92AC860154A08501528F830058DB
5428:1052B0008FBF00103C02100027BD0018AC83014CCA
5429:1052C00003E00008AC82017827BDFFD8AFB2001818
5430:1052D000AFB10014AFB00010AFBF0020AFB3001CDF
5431:1052E0003C07800090E20109308600FF30B000FFEB
5432:1052F000000618C232040002307100011480000759
5433:10530000305200FF3C098008353300809268000568
5434:105310003105000810A0000C30CA00100240202106
5435:105320000E00074502202821240200018FBF002023
5436:105330008FB3001C8FB200188FB100148FB0001013
5437:1053400003E0000827BD00281540003034E50A00BE
5438:105350008CB900248CB800081338004700004021A5
5439:105360003C0E800835D30080926D0068240B00024B
5440:1053700031AC00FF118B00803C068000927F004C16
5441:1053800090C40109509F00043213007C1100006793
5442:10539000000000003213007C1660005A02402021F9
5443:1053A00016200008320C00013C07800034EB0A0094
5444:1053B0008D6500248CE8010414A8FFDC0000102196
5445:1053C000320C00011180000D024020213C108000B1
5446:1053D0008E0E010C8F8D006811CD000800000000BA
5447:1053E0000E0007E2022028218E0F010C3C188008D5
5448:1053F00037100080AE0F0050024020210E0007340D
5449:10540000022028210A000900240200013C070800AC
5450:105410008CE7006424E600013C010800AC2600642F
5451:105420001600000D00000000022028210E000734A5
5452:1054300002402021926F0068240D000231EE00FF2F
5453:1054400011CD0022024020210E0008B4000000000F
5454:105450000A000900240200010E00003D240400019E
5455:10546000926C0025020C58250E00005EA26B0025F0
5456:105470000A000940022028218E6300188CE40104F0
5457:105480008CBF002400031602149FFFB53045007F37
5458:105490009269004C264400013093007F1265004061
5459:1054A000312300FF1464FFAF3C0E80082648000142
5460:1054B0003111007F310200FF1225000B240800018A
5461:1054C000004090210A00090D241100012405000468
5462:1054D0000E0006CF240600010E0008B400000000F4
5463:1054E0000A000900240200012407FF800247282443
5464:1054F00000A79026324200FF004090210A00090DCB
5465:10550000241100010E0007E202202821320600309B
5466:1055100010C0FFA332100082024020210E00074578
5467:10552000022028210A000900240200018E630018CD
5468:105530000240202102202821006610250E0008D6F6
5469:10554000AE6200189264004C24050003240600019A
5470:105550000E0006CF308400FF0E00003D2404000141
5471:10556000926A0025020A48250E00005EA269002505
5472:105570000A000900240200018E7800183C198000FE
5473:105580000240202103197825022028210E0007342B
5474:10559000AE6F00189264004C0A00098824050004CC
5475:1055A0003246008038CA0080146AFF6E3C0E8008C4
5476:1055B0000A0009612648000127BDFFC0AFB00018EE
5477:1055C0003C108000AFBF0038AFB70034AFB600303A
5478:1055D000AFB5002CAFB40028AFB30024AFB20020A9
5479:1055E0000E00055EAFB1001C920401089205010B8C
5480:1055F000308400FF0E0008E730A500FF144000D6FD
5481:105600008FBF00383C09800835280080A100006B5E
5482:105610003607098090E60000240200503C1708007D
5483:1056200026F73DF430C300FF3C14080026943E04E6
5484:10563000106200033C1080000000B8210000A0218F
5485:10564000241F001036110A00361309808E1601043B
5486:105650008F8D00588E38002436190A808E720020F3
5487:105660003C010800A03F3BF0972C002C8EF5000079
5488:10567000932B0018024D702302D878233C010800B8
5489:10568000AC2F3BCC3C010800AC2E3BD03C010800C9
5490:10569000AC2D3BF4A78C005C02A0F809317200FF2E
5491:1056A000304A0002154000DA3045000110A000B475
5492:1056B00000000000360509008E2B002490BF001169
5493:1056C00090B9001290B6001133EF00FF333800FF9D
5494:1056D00032CD00FF0018708001CF8021024D602183
5495:1056E0000212A821258A00103C010800A4353BE8DD
5496:1056F0003C010800AC2B3BF83C010800A42A3BE429
5497:105700003C010800A4303BE60260B0213C1580005B
5498:105710008F9200588F8400608ED3002024110006E1
5499:1057200000923023027228233C010800AC313BEC8C
5500:1057300004C000AF0000982104A000AD00C5102BEC
5501:10574000104000AF000000003C010800AC263BD038
5502:105750008E9000000200F8090000000030430002B3
5503:105760001460006F004088213046000154C00011D1
5504:105770008E9200043C0808008D083BD43C09C00010
5505:105780003C04800001093825AEA70E008C8B000078
5506:10579000316A00081140FFFD00000000948D0E08E2
5507:1057A00024130001A78D00408C8C0E04AF8C0028C0
5508:1057B0008E9200040240F8090000000002228825B1
5509:1057C000322E000215C000A5000000003C180800A1
5510:1057D00097183BDC3C12080096523BE83C19080045
5511:1057E00097393BDE3C0708008CE73BD4031240218D
5512:1057F0003C0B08008D6B3BF83C0E080095CE3BF24D
5513:105800003C128000011978218E46010C00F86821B5
5514:1058100025EC000201AE482101675021AF860068E7
5515:105820003C010800AC2A3BF83C010800A4293BE0FD
5516:105830003C010800A4283BEA0E0001C93184FFFFA7
5517:105840000E000550004080213C010800A0223BF1E1
5518:105850008E8200080040F809020020218F85005840
5519:105860000E0005BF004020218E90000C0200F809B8
5520:10587000004020213C03080094633BEA3C020800FE
5521:1058800094423BDE00622021248500020E0001F2DA
5522:1058900030A4FFFF3C1908008F393BCC3C1F0800A7
5523:1058A0008FFF3BD4033FC0233C010800AC383BCC06
5524:1058B00017000006000000003C0508008CA53BEC2A
5525:1058C00034BF00403C010800AC3F3BEC126000429A
5526:1058D0008F8200448E430E108F930044AE630020ED
5527:1058E0008E440E18AE6400243C04080094843BE00F
5528:1058F0000E000697000000008F8600588E8A001068
5529:105900003C010800AC263BF40140F809000000000F
5530:105910003C0908008D293BCC1520FF7E8F92005852
5531:105920009796005C3C14800E323500100E0006C6BF
5532:10593000A696002C56A000458EEB000432270040AE
5533:1059400054E0001E8EF100088EEC000C0180F80976
5534:10595000000000008FBF00388FB700348FB60030D2
5535:105960008FB5002C8FB400288FB300248FB2002095
5536:105970008FB1001C8FB0001803E0000827BD004065
5537:10598000920901098F88003000093E0000E83025A7
5538:10599000AE0600808E2300208E240024AFA30010CA
5539:1059A000AE030E148FA20010AE020E10AE040E1C39
5540:1059B000AE040E180A0009E3360509000220F809B2
5541:1059C000000000008EEC000C0180F80900000000CF
5542:1059D0000A000A8B8FBF0038240800012410000140
5543:1059E000A4400020A44800220A000A6FAC50002402
5544:1059F0003C010800AC203BD00A000A0A8E9000004F
5545:105A00003C010800AC253BD00A000A0A8E90000039
5546:105A100092110109000028210E000734322400FFF2
5547:105A20008FBF00388FB700348FB600308FB5002C91
5548:105A30008FB400288FB300248FB200208FB1001CD8
5549:105A40008FB0001803E0000827BD00400160F8098E
5550:105A5000000000000A000A85322700405260FFB1B2
5551:105A60009796005C8EB60E148F940044AE9600207C
5552:105A70008EAF0E1CAE8F00240A000A7E9796005C43
5553:105A80008F8200000004218003E0000800821021C2
5554:105A90003C07800834E20080904300690080402188
5555:105AA000106000093C0401003C0708008CE73BF44F
5556:105AB0008F83001C00E320230480000893890008E2
5557:105AC00014E300030100202103E0000800801021FE
5558:105AD0003C04010003E00008008010211120000BAD
5559:105AE000006738233C0D800035AC0980918B007C29
5560:105AF000316A0002114000202409003400E9702BB3
5561:105B000015C0FFF10100202100E938232403FFFC28
5562:105B100000A3C82400E3C02400F9782B15E0FFEAB5
5563:105B20000308202130C400030004102314C0001413
5564:105B3000304900030000302100A9782101E67021DE
5565:105B400000EE682B11A0FFE03C0401002D3800019D
5566:105B50000006C82B010548210319382414E0FFDA98
5567:105B60002524FFFC2402FFFC00A218240068202149
5568:105B700003E00008008010210A000AF42409003024
5569:105B80003C0C80003586098090CB007C316A000493
5570:105B90001540FFE9240600040A000B030000302131
5571:105BA0003C0308008C63005C8F82000427BDFFE883
5572:105BB000AFBF001410620005AFB00010000329C091
5573:105BC00024A40280AF840000AF8300043C10800056
5574:105BD00036030A00946500320E000AD530A43FFF58
5575:105BE0008E0401003C180080370F00030082C8219A
5576:105BF0002402FF80032260243329007F000CF94037
5577:105C000003E94025332E00783C0D1000010D50258E
5578:105C100001CF5825AE0C002836080980AE0C080CC0
5579:105C2000AE0B082CAE0A0830910300693C06800CCC
5580:105C30000126382110600006AF8700208D09003C46
5581:105C40008D06006C0126382318E0007F000000005C
5582:105C50003C0C8008358B00803C0A8000A160006904
5583:105C6000355009808E0200383C06800034C50A0099
5584:105C700090AD003C31A8002011000019AF82001C3B
5585:105C8000240E00013C19800037300A00A38E000862
5586:105C9000AF8000108E0400248F85001024180008A7
5587:105CA000AF80000CAF8000143C010800A4383BDE3C
5588:105CB0003C010800A4203BF20E000AD9000030216C
5589:105CC000920F003C8FBF00148FB00010000F714284
5590:105CD000AF82001827BD001803E0000831C20001A0
5591:105CE00090B90032240F0001333800FF00182182E0
5592:105CF000108F003F241F0002109F006234C20AC0B0
5593:105D00003C03800034640A008C9900241720001D95
5594:105D10003466090090830030241F00053062003F84
5595:105D2000105F004C240500018F86000CA38500083D
5596:105D3000AF860014AF8600103C19800037300A008F
5597:105D40008E0400248F850010241800083C010800F0
5598:105D5000A4383BDE3C010800A4203BF20E000AD927
5599:105D600000000000920F003C8FBF00148FB00010A5
5600:105D7000000F7142AF82001827BD001803E0000831
5601:105D800031C200018C8800088C8D00248CCB00640B
5602:105D90003C19800037300A00AF8B0010A380000848
5603:105DA0008E0400248F86000C8F850010010D602367
5604:105DB00024180008AF8C00143C010800A4383BDE16
5605:105DC0003C010800A4203BF20E000AD900000000AC
5606:105DD000920F003C8FBF00148FB00010000F714273
5607:105DE000AF82001827BD001803E0000831C200018F
5608:105DF00090A7003030E3003F5064002834C50AC04B
5609:105E00008CAA00241540002234C809008CAB00483D
5610:105E10003C0C7FFF3585FFFF016510243C18800096
5611:105E2000AF82000C370509008F8E000C8CAF00602C
5612:105E300001CF682B15A0000201C020218CA40060B6
5613:105E40000A000B75AF84000C8D02006C0A000B5029
5614:105E50003C0680008C8900488F86000C3C0A7FFF3E
5615:105E60003550FFFF013038243C0480082405000130
5616:105E7000AF870014AC80006CA38500080A000B8378
5617:105E8000AF8600108C4400140A000B75AF84000C20
5618:105E90008D0200680A000BBD3C18800034C40980E4
5619:105EA0008C8600708CB0001400D0482B11200004A8
5620:105EB000000000008C8200700A000BBD3C188000BE
5621:105EC0008CA200140A000BBD3C1880008F850010C6
5622:105ED00027BDFFE0AFBF0018AFB1001414A0000849
5623:105EE000AFB000103C04800034870A0090E6003018
5624:105EF0002402000530C3003F106200B7348409005B
5625:105F00008F91000C00A080213C048000348E0A0098
5626:105F10008DCD00043C0608008CC63BD031A73FFF66
5627:105F200000E6602B5580000100E03021938F0008CF
5628:105F300011E0007600D0102B349909809338007C52
5629:105F400033040002108000772403003400C3F82BD0
5630:105F500017E000D600C3302300D0102B3C0108000E
5631:105F6000A4233BDC1440006D020018213C0408000F
5632:105F70008C843BCC0064282B54A0000100602021BD
5633:105F80003C05800034A90A009128003C3C0108002F
5634:105F9000AC243BD4310300201460000200004821EF
5635:105FA0008CA90E188F8800180128502B1140005F13
5636:105FB000000000003C0508008CA53BD400A960212E
5637:105FC000010C582B1160005C00B0682B01093823CC
5638:105FD00000E028213C010800AC273BD4120000035C
5639:105FE0002402FFFC10B0008C322A000300A2F82427
5640:105FF0003C010800A4203BF23C010800AC3F3BD42C
5641:1060000003E028218F840010120400063C0380085E
5642:106010008C6A006C02002021AF91000C2550000119
5643:10602000AC70006C8F8B001400858823AF9100103A
5644:1060300001652023AF8400141220000224070018F9
5645:10604000240700103C0E800835C6008090CD006803
5646:10605000240C00013C010800A0273BF031A700FF01
5647:1060600010EC0047000000001480001800002821F8
5648:106070003C0B800091650109357109808E23001861
5649:1060800030A500FF0003560224A300013146007F23
5650:106090003070007F1206007E240CFF803C0F8008C9
5651:1060A00035E90080A123004C3C0808008D083BEC3A
5652:1060B000240E00023C010800A02E3C31350D0008E2
5653:1060C0003C010800AC2D3BEC240500103C1F800077
5654:1060D00037E40A009099003C333800201300000593
5655:1060E00000A02021240200013C010800AC223BD486
5656:1060F00034A400018FBF00188FB100148FB00010BE
5657:106100000080102103E0000827BD00203C010800AA
5658:10611000A4203BDC1040FF95020018210A000C105F
5659:1061200000C018210A000C08240300303C050800B8
5660:106130008CA53BD400B0682B11A0FFA80000000084
5661:106140003C04080094843BDC0085782101E7702B37
5662:1061500011C000072CA200043C1F60008FF95404FA
5663:106160003338003F1700FFE3240400422CA2000450
5664:106170001040FF9A240400420A000C738FBF0018DD
5665:106180001528FFB9000000008CC200183C188000E0
5666:10619000241900020058F825ACDF001837040A0063
5667:1061A000A0D900689089003C240F000400A01021B1
5668:1061B000312800203C010800A02F3C3111000002D2
5669:1061C00024050010240200013C010800AC223BCC55
5670:1061D0000A000C693C1F80008F8800148C890060C5
5671:1061E0000109282B14A00002010088218C91006075
5672:1061F0003C0B80008D640E18240A00010220282127
5673:1062000002203021A38A00080E000AD90220802132
5674:106210000A000BF7AF820018000A182312200007AB
5675:10622000306400033C0D800035A7098090EC007CB1
5676:10623000318B000415600019248E00043C01080015
5677:10624000A4243BF23C18080097183BF203052021D8
5678:1062500000C4782B11E0FF6C8F8400102CA6000581
5679:1062600014C0FFA42404004230B900031720000228
5680:1062700000B9182324A3FFFC3C010800AC233BD445
5681:106280003C010800A4203BF20A000C3600602821E3
5682:1062900000AC38240A000C5C00EC18263C01080015
5683:1062A000A42E3BF20A000CC6000000003C010800CE
5684:1062B000AC203BD40A000C72240400428F830014EB
5685:1062C0003C0B8000356A0A001460000600001021B3
5686:1062D000914600302405000530C400FF10850003FE
5687:1062E0000000000003E000080000000091490048A1
5688:1062F000312800FF000839C214E0FFFA3C0480088E
5689:106300003C06080094C63BDC3C0308008C633BF46D
5690:106310003C0508008CA53BD43C18080097183BF2BC
5691:106320000066C8218C8E00040325782101F86821BD
5692:1063300001AE60231980001D000000009158004C40
5693:106340008F8D0020956E0E10330F00FF8DA9000475
5694:1063500001CF30238DAA000030CFFFFF000F610076
5695:10636000012C2821000038210147202100AC182BE6
5696:106370000083C821ADA50004ADB9000091B8000AA2
5697:1063800001F87021A1AE000A956C0E128F8A0020D0
5698:10639000A54C00089549003825280001A54800387B
5699:1063A0009147000D34EB0008A14B000D03E00008FD
5700:1063B0000000000027BDFFD8AFB00018938F000881
5701:1063C0008FB000143C087FFF8F8700103C0C8000CA
5702:1063D0003518FFFFAFBF0020AFB1001C35990A0090
5703:1063E00002181824932A003C000F5FC03C02BFFF34
5704:1063F0002CF000013449FFFF006BF8253C08080031
5705:106400008D083BF48F99001C3C18080097183BEA54
5706:1064100003E9582400107F803C07EFFF3C05F0FFA4
5707:10642000016F18253C1180003149002034E2FFFF44
5708:1064300034ADFFFF362E098027A500102406000288
5709:1064400001194023270A00020062182400808021DD
5710:1064500015200002000058218D8B0E1CA7AA0012E7
5711:106460000500003A2407000030EF00FF000F3F0056
5712:10647000006740253C028008AFA80014344B008020
5713:10648000916A00683C0F080091EF3BF13C09DFFF87
5714:10649000353FFFFF000A602B3C02080094423BE4BA
5715:1064A000A3AF0011011FC024000CCF400319182511
5716:1064B0008FA70010AFA300143C1F080093FF3BF30D
5717:1064C000A7A200168FA8001400ED48243C0B010081
5718:1064D0003C0A0FFF012BC82533F80003354CFFFFA2
5719:1064E000010D78243C027000032C382400181E0093
5720:1064F00000E2482501E35825AFAB0014AFA9001016
5721:1065000091DF007CA3BF00150E00007200000000A8
5722:10651000362D0A0091A6003C30C4002010800006F1
5723:10652000260200083C11080096313BE0262EFFFFB2
5724:106530003C010800A42E3BE08FBF00208FB1001C5F
5725:106540008FB0001803E0000827BD00288F8A0018CC
5726:10655000016A602B5580FFC4240700010A000D501A
5727:1065600030EF00FF938300083C02800027BDFFD876
5728:1065700034480A0000805021AFBF002034460AC0D2
5729:10658000010028211060000E34440980910700307A
5730:10659000240B00058F89000C30EC003F118B000BA1
5731:1065A00000003821AFA900103C0B80088D69006CF9
5732:1065B000AFAA00180E00013AAFA90014A38000088A
5733:1065C0008FBF002003E0000827BD00288D1F004872
5734:1065D0003C1808008F183BD48F9900143C027FFFB1
5735:1065E0008D0800443443FFFFAFA900103C0B800826
5736:1065F0008D69006C03E370240319782101CF6823AF
5737:1066000001A83821AFAA00180E00013AAFA9001462
5738:106610000A000DA5A38000083C05800034A60A00EE
5739:1066200090C7003C3C06080094C63BF23C020800C0
5740:106630008C423BEC30E30020000624001060003167
5741:10664000004448253C0880083505008090A3006878
5742:1066500000006821240C000100005021240B0001DF
5743:106660003C188000370F00708DE800003C07800068
5744:10667000AF8800248CF901780720FFFE34E5007014
5745:106680008CA200003C0308008C6300743C0F0800DF
5746:106690008DEF007000482023006428210000C021F5
5747:1066A00000A4302B01F8702101C640213C010800F4
5748:1066B000AC2500743C010800AC280070ACEC01482B
5749:1066C0003C0208008C423BF4A4EA0144A4EB0146DE
5750:1066D000ACE2014C3C04080090843BF13C03800890
5751:1066E000A0E40152ACE90154A4ED0158346D0080DE
5752:1066F00091AC004C3C091000A0EC016D03E00008D7
5753:10670000ACE901788CAC0E1C3C0B08008D6B3BD4C3
5754:1067100094AA0E1694AE0E1401666821314BFFFF49
5755:106720000A000DCD31CAFFFF3C04800034830A000B
5756:106730009065003C30A200201040002B00000000BB
5757:106740000000582100005021000048213C08800032
5758:10675000350400708C8800003C078000AF8800245E
5759:106760008CEC01780580FFFE34EE00708DCD0000CA
5760:106770003C0508008CA500743C0408008C84007063
5761:1067800001A8602300ACC02100001021030C302BB5
5762:106790000082C821032678213C010800AC3800742F
5763:1067A0003C010800AC2F0070ACEB01483C0E080027
5764:1067B0008DCE3BF4240DFF91240B0040A4E901444D
5765:1067C000A4EA0146ACEE014CA0ED0152ACEB015441
5766:1067D000A4E0015890EA01093C091000A0EA016D0B
5767:1067E00003E00008ACE901788C8B0E1894870E1238
5768:1067F00094860E1030EAFFFF0A000E0830C9FFFF32
5769:106800003C04800034830A009065003C30A20020E4
5770:106810001040003927BDFFF8240C00010000502172
5771:10682000240B00013C088000350400708C890000B6
5772:106830003C088000AF8900248D0D017805A0FFFE83
5773:10684000350E00708DC700003C0508008CA5007453
5774:106850003C0408008C84007000E9682300ADC0216E
5775:1068600000001021030D302B0082C821032678215F
5776:106870003C010800AC3800743C010800AC2F0070EB
5777:10688000910901093C0E080091CE3C313C0380FF88
5778:10689000A3A900038FAD000031C7007F3462FFFF62
5779:1068A00001A82025AFA400009106010AA3A00002C0
5780:1068B0000007CE00A3A600018FA50000240E300023
5781:1068C0003C09100000A2C02403197825AD0F014C2B
5782:1068D00027BD0008AD0E0154A5000158AD0C0148BC
5783:1068E000A50A0144240AFF80A50B0146A10A015212
5784:1068F00003E00008AD0901788C8C0E1894870E1205
5785:1069000094860E1030EBFFFF0A000E3E30CAFFFFE8
5786:1069100027BDFFE8AFB000103C108000AFBF0014EF
5787:1069200036180A00970F00320E000AD531E43FFFF7
5788:106930008E0E0100240DFF803C04200001C258216E
5789:10694000016D6024000C4940316A007F012A402516
5790:10695000010438253C048008AE07083034860080E6
5791:1069600090C500682403000230A200FF1043000419
5792:106970008F9F000C8F990010AC9F0068AC99006449
5793:106980008FBF00148FB0001003E0000827BD00186F
5794:106990003C0A0800254A37FC3C090800252938D460
5795:1069A0003C08080025082C743C07080024E739E45B
5796:1069B0003C06080024C636383C05080024A5339060
5797:1069C0003C04080024842FA03C030800246336EC18
5798:1069D0003C020800244234883C010800AC2A3DFCFB
5799:1069E0003C010800AC293DF83C010800AC283DF40E
5800:1069F0003C010800AC273E003C010800AC263E10DC
5801:106A00003C010800AC253E083C010800AC243E04D3
5802:106A10003C010800AC233E143C010800AC223E0CB3
5803:086A200003E000080000000083
5804:086A2800800009408000090014
5805:106A3000800801008008008080080000800E0000AF
5806:106A4000800800808008000080000A8080000A0022
5807:086A50008000098080000900AC
5808:00000001FF
5809/*
5810 * This file contains firmware data derived from proprietary unpublished
5811 * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
5812 *
5813 * Permission is hereby granted for the distribution of this firmware data
5814 * in hexadecimal or equivalent format, provided this copyright notice is
5815 * accompanying it.
5816 */
diff --git a/firmware/bnx2/bnx2-rv2p-06-4.6.16.fw.ihex b/firmware/bnx2/bnx2-rv2p-06-4.6.16.fw.ihex
new file mode 100644
index 000000000000..871de9e34212
--- /dev/null
+++ b/firmware/bnx2/bnx2-rv2p-06-4.6.16.fw.ihex
@@ -0,0 +1,441 @@
1:100000000000000000000CA00000005800000000EC
2:1000100000000000000000000000000000000000E0
3:1000200000000000000000000000000000000000D0
4:1000300000000DE000000CF80000000500000000CA
5:1000400000000000000000000000000000000000B0
6:080050000000000000000000A8
7:0800580000000010B18000025D
8:100060000000001F0103010000000008AC000001B7
9:1000700000000000050000000000000C2F800001BF
10:10008000000000002B000000000000002B8000009A
11:1000900000000010203F006300000010213F00031B
12:1000A0000000001020BF0032000000188000FFFD9B
13:1000B00000000010B1B8B00D0000000B2FDF0002EF
14:1000C0000000000003D80000000000002C380000F1
15:1000D0000000001091D400000000000806005555F3
16:1000E0000000001880000075000000188000010B5F
17:1000F00000000008020000020000000F42E0001CA7
18:100100000000001091840A11000000102C62000B06
19:10011000000000188000001E00000008020000021D
20:100120000000000F42E0001C0000001091840A183B
21:10013000000000082C8000B1000000082D0000091C
22:100140000000001091D40000000000082D8001077D
23:10015000000000188000006F0000001880000015EB
24:1001600000000008B1000001000000082C8000B071
25:10017000000000082D000008000000082D8000018C
26:1001800000000018800000690000000B2FDF000253
27:100190000000000C1F800002000000002C0700007F
28:1001A0000000001091DE00000000000005000000CB
29:1001B000000000188000FFDC0000000B2FDF0002B1
30:1001C0000000000C1F800000000000002C07000051
31:1001D0000000001091DE000000000000050000009B
32:1001E000000000188000FFD60000000C1F800002F5
33:1001F0000000000005000000000000188000FFD390
34:100200000000000C298000020000000C1F8000028A
35:10021000000000002ADF0000000000082A0000059E
36:100220000000000805005555000000188000FFCDB3
37:10023000000000080224003C000000180004000038
38:10024000000000188000001C000000188000001E44
39:100250000000001880000052000000188000009E7E
40:10026000000000188000009D0000001880000000C1
41:10027000000000188000000000000018800000004E
42:10028000000000188000000000000018800000003E
43:10029000000000188000000000000018800000002E
44:1002A000000000188000000000000018800000DF3F
45:1002B000000000188000000000000018800000000E
46:1002C0000000001880000015000000188000001BCE
47:1002D000000000188000000000000018800000B43A
48:1002E000000000188000002E00000018800000DFD1
49:1002F000000000188000010A00000018800000D5EE
50:10030000000000188000012E000000188000003B53
51:10031000000000188000000000000018800000713C
52:100320000000000C1F80000100000000050000001C
53:10033000000000188000FFAC0000001091D4000005
54:100340000000000C298000010000000C1F8000014B
55:10035000000000082A000002000000000500000064
56:10036000000000188000FFA60000001091D40000DB
57:100370000000000C298000010000000C1F8000011B
58:100380000000000029420000000000082A000002CE
59:100390000000000005000000000000188000FF9F22
60:1003A000000000188000FF9E00000010B1BCB00AE1
61:1003B0000000000B2FDF00020000000003D8000047
62:1003C000000000002C3C00000000001091D4000050
63:1003D00000000008060055550000001880000016B7
64:1003E00000000018800000AC000000102C6201BA70
65:1003F0000000001880000005000000082C8000B1FB
66:10040000000000082D0000090000001091D4000039
67:10041000000000082D8001070000000C298000006A
68:100420000000000C1F8000000000001091DE0000A2
69:10043000000000002ADF0000000000082A0000067B
70:100440000000000805005555000000188000FF89D5
71:100450000000001091D400000000000C2980000171
72:100460000000000C1F800001000000082A00000BA3
73:100470000000000005000000000000188000FF835D
74:1004800000000018000200000000000006820000CA
75:1004900000000010B18A000600000000860C140065
76:1004A00000000010B18C00040000000005000000F6
77:1004B000000000082A0000010000001091D4000094
78:1004C00000000018000D0000000000000502000000
79:1004D0000000001091DE000000000018000A00007B
80:1004E00000000010B1A0B0130000000B2FDF0002CD
81:1004F000000000002C200000000000082C800000FC
82:10050000000000082D0000000000001091D4000041
83:100510000000000806005555000000188000FFEE9E
84:10052000000000082D80011C00000010001F0000CA
85:100530000000001091DE00000000000F476000087E
86:100540000000000F060E0001000000000F58000020
87:10055000000000000A640000000000000AE500003E
88:10056000000000090B66FFFF000000000D610000A5
89:1005700000000018800000130000000F4760000812
90:100580000000000B2FDF0002000000082C8000009C
91:10059000000000082D0000000000001091D40000B1
92:1005A000000000082D80011C0000000F060E000155
93:1005B00000000010001F0000000000000F580000A5
94:1005C0000000001091DE0000000000000A6400003E
95:1005D000000000000AE50000000000090B66FFFFB4
96:1005E000000000000D610000000000000262000039
97:1005F0000000000B2FDF00020000000031040000AB
98:1006000000000000309A0000000000000C96180066
99:10061000000000090C99FFFF00000004CC99340091
100:1006200000000010B1963202000000080F800000A8
101:100630000000000C298000010000001000220002D0
102:100640000000000C295200010000000C295200009B
103:10065000000000080200000E000000080280001ADE
104:1006600000000010B1C40A020000000802000003EC
105:1006700000000008220000010000000C1F800001A3
106:10068000000000002ADF0000000000002A0008002F
107:100690000000000805005555000000188000FF3FCD
108:1006A0000000000B2FDF00020000001091D40000BA
109:1006B000000000082A000001000000002C200000BB
110:1006C000000000082C800000000000082D00000041
111:1006D000000000082D80011C0000001091D40000D3
112:1006E0000000001091DE0000000000082C800006D1
113:1006F000000000082D00000600000000308000000F
114:100700000000000031000000000000082D800006FD
115:100710000000000C298000010000000C1F80000177
116:100720000000001091DE0000000000002ADF000041
117:10073000000000082A000010000000000500000072
118:10074000000000188000FF2A0000001091A0B009EE
119:10075000000000082C8000B1000000082D000009F6
120:100760000000001091D40000000000082D80010757
121:10077000000000188000FFAB00000018800000108F
122:1007800000000008AC000001000000188000000B11
123:10079000000000000380B0000000000B2FDF00020B
124:1007A000000000002C0040000000001091D4000068
125:1007B0000000000806005555000000188000FF9A50
126:1007C00000000018800000300000001880000006C3
127:1007D0000000000B2FDF0002000000002C000E00C4
128:1007E000000000082A000007000000080500555519
129:1007F000000000188000FF140000000006820000C6
130:100800000000000C298000010000000C1F80000186
131:10081000000000100CE70007000000090562FFFF60
132:1008200000000010BA6C1405000000002ADF000070
133:100830000000000021000000000000082A00000560
134:100840000000001091D40000000000082C8000B0CF
135:10085000000000082D0000080000000C31620018A4
136:10086000000000082D800001000000188000FF8CAF
137:1008700000000018000D000000000010B1A0B00E34
138:100880000000000B2FDF00020000000003D8000072
139:10089000000000002C2000000000001091D4000097
140:1008A0000000001880000014000000102C620002FC
141:1008B000000000188000000B0000000B2FDF00027A
142:1008C000000000002C0700000000000C1F80000149
143:1008D0000000001091DE0000000000000500000094
144:1008E000000000188000FEF6000000082C8000B117
145:1008F000000000082D0000090000001091D4000045
146:10090000000000082D8001070000000C2980000174
147:100910000000000C1F8000010000001091DE0000AC
148:10092000000000002ADF0000000000082A00000A82
149:100930000000000005000000000000188000FEEB31
150:100940000000000005020000000000082C8000B03C
151:10095000000000082D000008000000082D80015054
152:10096000000000000000000000000010205F0000F8
153:10097000000000082C800000000000082D0000008E
154:10098000000000082D8001080000000000000000A9
155:100990000000001091DE000000000018000A0000B6
156:1009A0000000001091D40000000000080600AAAA70
157:1009B000000000188000FF5B0000000C298000018F
158:1009C0000000000C1F800001000000082A00000940
159:1009D000000000080500AAAA000000188000FED749
160:1009E0000000001091D400000000000806005555DA
161:1009F000000000188000FF530000001091A03C028E
162:100A000000000010B1E662070000000B2FDF0002BB
163:100A1000000000002C310000000000092CB1007F14
164:100A2000000000082CD90000000000082D00000084
165:100A3000000000082D80010D00000010B1A8000684
166:100A400000000010205F0000000000002C200000CB
167:100A5000000000002CA70000000000082D0000107E
168:100A6000000000082D800108000000188000FF4CE5
169:100A700000000010B1A6001000000010001F0000D0
170:100A80000000000F0F300007000000000A600000A7
171:100A9000000000000AE100000000000F4B620008A7
172:100AA000000000090B1600FF000000000D620000AE
173:100AB000000000090D1A00FF0000001007300003BD
174:100AC0000000000C0D1A00080000000C0B160008B6
175:100AD0000000000F4CE30018000000000C992C00EF
176:100AE00000000004CC993400000000080F800000D2
177:100AF0000000000C298000010000000033310000DC
178:100B00000000000822000016000000002ADF00009C
179:100B1000000000082A00000C00000010009F0000E8
180:100B2000000000000F2000000000000C1F800001EA
181:100B30000000000805005555000000188000FEABBD
182:100B40000000001091D40000000000080600AAAACE
183:100B5000000000188000FF270000000F4722000857
184:100B600000000009070E000F00000008070E000833
185:100B700000000008028000010000000702851C0040
186:100B800000000008828500010000000002854C0082
187:100B90000000000742851C0000000003C3AA5200A9
188:100BA0000000000003B10E00000000074B071C000E
189:100BB0000000000F0F3000070000000F0A9600032E
190:100BC000000000000A955C00000000004A005A0086
191:100BD000000000000C960A00000000090C99FFFFBD
192:100BE000000000080D00FFFF00000010B196320267
193:100BF000000000080F80000500000010B1A80008E8
194:100C000000000010205F00000000000B2FDF00023A
195:100C1000000000002C200000000000002CA70000B5
196:100C2000000000082D000010000000082D800108C1
197:100C3000000000188000FF130000000C2980000154
198:100C400000000010001F00000000000C1F800001C9
199:100C5000000000002ADF0000000000082A00000D4C
200:100C6000000000080500AAAA000000188000FE8508
201:100C70000000001091D40000000000080600555547
202:100C8000000000188000FF010000000C2980000116
203:100C90000000000C1F800001000000082A0000076F
204:100CA0000000000805005555000000188000FE7D7A
205:100CB00000000008030500040000000683040C0087
206:100CC00000000008028502000000000086050C00FC
207:100CD00000000001860C0E00000000080204000461
208:100CE00000000000020418000000000083871800C4
209:080CF0000000001800020000E2
210:080CF80000000010B1800004AF
211:100D00000000001F0103010000000008050000FFB3
212:100D10000000001800020000000000002A0000008F
213:100D200000000010B1D400000000000C2980000178
214:100D30000000000802540008000000180004000031
215:100D40000000001880000010000000188000001152
216:100D5000000000188000003A000000188000010424
217:100D6000000000188000010300000018800001024C
218:100D70000000001880000102000000188000000040
219:100D8000000000188000011400000018800000FE20
220:100D9000000000188000000C0000001880000118FE
221:100DA000000000188000016A000000188000006741
222:100DB00000000018800000DA00000018800000E742
223:100DC000000000002A000000000000188000FFEB77
224:100DD000000000002A0000000000000C2980000034
225:100DE0000000001020530000000000188000FFE702
226:100DF000000000002A000000000000188000FFE54D
227:100E000000000018000200000000000005020000C1
228:100E1000000000109196342100000010205F0000B7
229:100E2000000000002C1E0000000000082C800006BE
230:100E3000000000082D000006000000082D800102BF
231:100E400000000000000000000000001091DE000023
232:100E5000000000000D61000000000018000A000002
233:100E600000000000050200000000001091963416FA
234:100E700000000010205F00000000000009D8000002
235:100E8000000000002C1E0000000000082C8000B2B2
236:100E9000000000082D00000A000000082D8001025B
237:100EA00000000000000000000000001091DE0000C3
238:100EB000000000000D620000000000002C13000084
239:100EC00000000018000A00000000000005020000F9
240:100ED000000000109196340900000010205F00000F
241:100EE000000000002C1E0000000000082C800006FE
242:100EF000000000082D00006A000000082D8001029B
243:100F000000000000000000000000001091DE000062
244:100F1000000000000D7A000000000018000A000028
245:100F20000000001091DE000000000010001F000013
246:100F3000000000002F80AA00000000002A0000002E
247:100F4000000000000D6100000000000003620000CE
248:100F5000000000002C4000000000000002638C0034
249:100F600000000000264600000000000802040012F5
250:100F700000000010B9060827000000000F5800000C
251:100F8000000000000A640000000000000AE5000004
252:100F9000000000090B66FFFF000000000C000000CD
253:100FA000000000000B800000000000080CC60012CA
254:100FB000000000188000FFCB000000080F80000335
255:100FC000000000000000000000000010009F000072
256:100FD00000000008271100120000000066900000C9
257:100FE00000000008A31B001200000010B1980003CD
258:100FF00000000010001F0000000000080F80000427
259:101000000000000822000003000000082C80000CF3
260:10101000000000082D00000C00000010009F0000E0
261:1010200000000000259600000000000C2980000050
262:101030000000000006660000000000008661180045
263:10104000000000090260000F0000000F020400020F
264:1010500000000010B60C08030000000C1FBF0000C9
265:101060000000000C33660010000000003214000085
266:1010700000000000329500000000000573662C009F
267:101080000000000031E32E00000000082D80001059
268:1010900000000010205300000000001091DE00004E
269:1010A000000000188000FF900000000023000000F6
270:1010B0000000000925E6FFFF000000082200000BE9
271:1010C0000000000C695200000000000C29800000A4
272:1010D0000000001020530000000000188000FF896D
273:1010E0000000001091DE000000000010001F000052
274:1010F000000000002F80AA00000000002A0000006D
275:10110000000000002C400000000000082C8000407F
276:10111000000000082D000020000000082D80011CA8
277:1011200000000000000000000000001091DE000040
278:101130000000000F42EA001000000010004F000401
279:1011400000000010B746920000000008024900129B
280:1011500000000010B5840A00000000000D610000CE
281:1011600000000010BA66345A00000000036200005C
282:1011700000000010B8630C5800000008830500123E
283:1011800000000010004F00020000000003490000B2
284:101190000000000183068C000000000083C60C00E4
285:1011A00000000010B1870010000000000B6E00006E
286:1011B000000000188000FF6B0000000106691400A9
287:1011C00000000010918C000200000008B4E900014A
288:1011D00000000010B1E92C4C0000000086692C00D2
289:1011E00000000000020000000000000902EAFFFF0A
290:1011F00000000010000C00020000000002040A00C1
291:101200000000000F460C00010000000F02850001E5
292:1012100000000010918C01FC00000010B7040E4388
293:10122000000000002C400000000000000F40000003
294:10123000000000000D610000000000000A640000D2
295:10124000000000000AE50000000000090B66FFFF37
296:10125000000000000C000000000000000B800000F7
297:10126000000000080C860012000000080F80000338
298:101270000000000C2952000000000010009F000038
299:101280000000000827110012000000006690000016
300:1012900000000000264600000000000023060000B9
301:1012A00000000010B198000500000010001F0000B1
302:1012B000000000080F800004000000000000000093
303:1012C00000000010001F00000000000032140000A9
304:1012D00000000000329500000000000031E32E0005
305:1012E0000000000573662C00000000002596000039
306:1012F00000000010B18700160000000C29800000DB
307:101300000000000F0F6B0007000000000D690000D7
308:10131000000000000A6C0000000000000AED000060
309:10132000000000000B6E0000000000000B800000B9
310:10133000000000000C870000000000080F80000380
311:1013400000000010205300000000000C6952000152
312:1013500000000010001F00000000000022C58C00EB
313:1013600000000000231B0000000000002711000007
314:10137000000000002690000000000010B8170E03C7
315:101380000000000C29800000000000188000FFF61B
316:1013900000000010B1980002000000080F80000457
317:1013A000000000082200001A000000082C80000C39
318:1013B000000000082D00000C000000082D80001027
319:1013C00000000010001F0000000000000D6E000073
320:1013D00000000003E7CF34000000000C298000006B
321:1013E0000000001091DE000000000010B18700072F
322:1013F00000000000361400000000000036950000D8
323:101400000000000037160000000000082C8000508B
324:10141000000000082D000030000000082D80000CA6
325:101420000000001020530000000000188000FF1F83
326:10143000000000002646000000000000230000001D
327:101440000000000925E6FFFF000000000B6E000011
328:1014500000000003E7CF2C00000000082200001B62
329:101460000000000C695200000000000C2980000000
330:101470000000001020530000000000188000FF153D
331:10148000000000002FD50000000000002A0000002E
332:1014900000000010003F000B000000000666000086
333:1014A000000000008661180000000009026000F0E2
334:1014B00000000010B70C08070000000C7366001055
335:1014C000000000082C800018000000082D00001803
336:1014D000000000082D8000020000000C5FBF00002B
337:1014E0000000001091DE0000000000188000FF07DF
338:1014F000000000002FD50000000000002A000000BE
339:10150000000000002C4000000000000C29800000BA
340:101510000000001091DE0000000000082C80001A7E
341:10152000000000082D00001A000000003300000039
342:10153000000000082D800002000000003180000043
343:101540000000001091DE0000000000082C80000C5C
344:10155000000000082D00000C000000082D80000491
345:1015600000000010205300000000001091DE000079
346:10157000000000188000FEF6000000188000FEF554
347:10158000000000002A00000000000010001F000002
348:10159000000000000F008000000000080F8000071E
349:1015A0000000001880000014000000000502000088
350:1015B000000000082200000900000000286D000063
351:1015C00000000000290000000000000F6568001006
352:1015D00000000003F66C940000000010B972A00433
353:1015E0000000000C73E700190000000C2142000409
354:1015F000000000003BF600000000000C2980000005
355:101600000000001020530000000000082200000825
356:101610000000000C6142000400000018000A0000F5
357:10162000000000002A00000000000010001F000061
358:101630000000000F0F470007000000080F8000089F
359:101640000000000C29800000000000102053000062
360:10165000000000188000FEDA0000001091DE00009B
361:10166000000000002FD5000000000010001F000047
362:101670000000000033510000000000002A000000BC
363:1016800000000010B1C600230000000F0F5000073B
364:10169000000000000A600000000000000AE10000F5
365:1016A0000000000F4B620008000000090B1600FF4D
366:1016B0000000000F4C620010000000000D620000EE
367:1016C000000000090D1A00FF000000100750000381
368:1016D0000000000C0D1A00080000000C0B1600089A
369:1016E000000000000CC60000000000000B8000009D
370:1016F0000000000006980000000000080F800003B2
371:101700000000001006C200040000000C29000002C6
372:1017100000000010264200020000000C29520003C5
373:10172000000000082200000100000010009F0000DF
374:1017300000000000231B00000000000027111A0019
375:1017400000000000669000000000000C295200001C
376:1017500000000010B19732090000000C2980000041
377:101760000000000006980000000000102053000058
378:101770000000000C295200030000000022C58C006C
379:1017800000000010001F0000000000080F80000390
380:10179000000000188000FFF300000010B1C8001323
381:1017A00000000010B1C600030000000C29800000FA
382:1017B00000000010205300000000000C295200001F
383:1017C0000000000C295200030000001006C20002B5
384:1017D0000000000C295200020000000022C58C000D
385:1017E00000000000276500000000000026E4000063
386:1017F000000000082200001600000010B1C600031F
387:10180000000000002348000000000010B180000527
388:1018100000000000234800000000000C29800000A8
389:101820000000000F0F500007000000188000001299
390:1018300000000008220000160000000C29800000B3
391:10184000000000003014000000000000309500008F
392:101850000000001007500003000000090B1600FFF5
393:10186000000000090D1A00FF0000000F31160008EB
394:10187000000000003162340000000003F16230001B
395:1018800000000010205F0000000000002C5100004C
396:10189000000000092CD1007F000000082CD90000B6
397:1018A000000000082D000000000000082D80000C42
398:1018B00000000000000000000000001091DE0000A9
399:1018C0000000001005C2000300000000330000000B
400:1018D000000000080F8000070000001020530000E7
401:1018E00000000010009F0000000000188000FE872C
402:1018F000000000002FD50000000000002A000000BA
403:101900000000000F0F50000700000010B1C6002DAE
404:101910000000000F4742000800000009070E000FFA
405:1019200000000008070E000800000010001F000063
406:1019300000000008090000010000000709121C0057
407:1019400000000003CBCA9200000000000B97A20029
408:101950000000000742171C00000000000B040000FC
409:101960000000000F0A840003000000000A959C009C
410:10197000000000004A009A000000000882120001E6
411:10198000000000010C170800000000000C978C00FC
412:101990000000000002180000000000080D00FFFF1A
413:1019A000000000080F8000060000000C2900000065
414:1019B0000000001006C200040000000C29520002C2
415:1019C00000000010264200020000000C2952000313
416:1019D000000000082200000100000010009F00002D
417:1019E00000000010B197320C00000000231B000023
418:1019F00000000000271108000000000066900000B1
419:101A00000000000C29800000000000000218000007
420:101A100000000010205300000000000C29520003B9
421:101A20000000000022C5360000000010001F00006A
422:101A3000000000080F800006000000188000FFF47E
423:101A400000000000231B0000000000002711080018
424:101A5000000000006690000000000010B1C8000BFC
425:101A60000000000C2980000000000010205300003E
426:101A70000000000C295200000000000C2952000355
427:101A80000000001006C200020000000C29520002F3
428:101A90000000000022C58C00000000002765000047
429:101AA0000000000026E400000000000023480000C1
430:101AB00000000008220000170000000C2980000030
431:101AC00000000010001F0000000000102053000064
432:081AD000000000188000FE4A2E
433:00000001FF
434/*
435 * This file contains firmware data derived from proprietary unpublished
436 * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
437 *
438 * Permission is hereby granted for the distribution of this firmware data
439 * in hexadecimal or equivalent format, provided this copyright notice is
440 * accompanying it.
441 */
diff --git a/firmware/bnx2/bnx2-rv2p-09-4.6.15.fw.ihex b/firmware/bnx2/bnx2-rv2p-09-4.6.15.fw.ihex
new file mode 100644
index 000000000000..63995bbc8e27
--- /dev/null
+++ b/firmware/bnx2/bnx2-rv2p-09-4.6.15.fw.ihex
@@ -0,0 +1,490 @@
1:100000000000000000000D88000000580000000003
2:1000100000000000000000000000000000000000E0
3:1000200000000000000000000000000000000000D0
4:100030000000101800000DE00000000500000000A6
5:1000400000000000000000000000000000000000B0
6:080050000000000000000000A8
7:0800580000000010B18000025D
8:100060000000001F0303010000000008AC000001B5
9:1000700000000000050000000000000C2F800001BF
10:10008000000000002B000000000000002B8000009A
11:1000900000000010203F006C00000010213F000312
12:1000A0000000001020BF003B000000188000FFFD92
13:1000B00000000010B1B8B0150000000B2FDF0002E7
14:1000C0000000000003D80000000000002C380000F1
15:1000D000000000082C800000000000082D00000037
16:1000E0000000001091D400000000000806005555E3
17:1000F000000000188000008F000000082D80011C07
18:1001000000000008020000010000001091DE000065
19:100110000000000F42E0001C0000001091840A174C
20:1001200000000010086600160000000C2980000284
21:100130000000000C1F800002000000002ADF000009
22:10014000000000082A00000F0000000805005555B7
23:10015000000000188000FFE8000000080200000115
24:100160000000000F42E0001C0000001091840A19FA
25:10017000000000082C800006000000082D0000068A
26:100180000000001091D40000000000082D8001063E
27:1001900000000018800000830000001008660013B3
28:1001A000000000188000FFF100000008B10000010D
29:1001B000000000082C80010C000000082D00000841
30:1001C000000000082D800001000000188000007C65
31:1001D0000000000B2FDF00020000000C1F80000257
32:1001E000000000002C0700000000001091DE00005D
33:1001F0000000000005000000000000188000FFD390
34:100200000000000B2FDF00020000000C1F80000028
35:10021000000000002C0700000000001091DE00002C
36:100220000000000005000000000000188000FFCD65
37:100230000000000C1F80000200000000050000000C
38:10024000000000188000FFCA0000000C2980000296
39:100250000000000C1F800002000000002ADF0000E8
40:10026000000000082A0000050000000805005555A0
41:10027000000000188000FFC40000000802240045B0
42:100280000000001800040000000000188000001C9E
43:10029000000000188000001E0000001880000065AB
44:1002A00000000018800000AD00000018800000ACC5
45:1002B000000000188000000000000018800000000E
46:1002C00000000018800000000000001880000000FE
47:1002D00000000018800000000000001880000000EE
48:1002E00000000018800000000000001880000000DE
49:1002F00000000018800000F30000001880000000DB
50:1003000000000018800000000000001880000015A8
51:10031000000000188000001B000000188000000092
52:1003200000000018800000C3000000188000002EAC
53:1003300000000018800000F3000000188000011E7B
54:1003400000000018800000E9000000188000014251
55:10035000000000188000004E00000018800000001F
56:1003600000000018800000800000000C1F800001C9
57:100370000000000005000000000000188000FFA33E
58:100380000000001091D400000000000C2980000142
59:100390000000000C1F800001000000082A0000027D
60:1003A0000000000005000000000000188000FF9D14
61:1003B0000000001091D400000000000C2980000112
62:1003C0000000000C1F800001000000002942000016
63:1003D000000000082A0000020000000005000000E4
64:1003E000000000188000FF96000000188000FF95B4
65:1003F00000000010B1BCB00A0000000B2FDF0002AB
66:100400000000000003D80000000000002C3C0000A9
67:100410000000001091D400000000000806005555AF
68:10042000000000188000002900000018800000BBB8
69:10043000000000102C6201BA0000001880000005C6
70:10044000000000082C80010D000000082D000009AC
71:100450000000001091D40000000000082D8001076A
72:100460000000000C298000000000000C1F8000002C
73:100470000000001091DE0000000000002ADF0000F4
74:10048000000000082A00000600000008050055557D
75:10049000000000188000FF800000001091D40000D0
76:1004A0000000000C298000010000000C1F800001EA
77:1004B000000000082A00000B0000000005000000FA
78:1004C000000000188000FF7A000000000202000017
79:1004D00000000000029A000000000000060C2C0042
80:1004E00000000004C60C340000000010001F0000D3
81:1004F00000000010B196180C0000000806960004D9
82:1005000000000009068DFFFC00000004CD051A0064
83:1005100000000004CC9A18000000001020D7000052
84:100520000000000C2B56000000000000000000003E
85:1005300000000000000000000000001020D70000B4
86:10054000000000080F80000100000010B18001F4DD
87:1005500000000010001F00000000000C6B5600009F
88:1005600000000018000400000000000006820000E7
89:1005700000000010B18A000600000000860C140084
90:1005800000000010B18C0004000000000500000015
91:10059000000000082A0000010000001091D40000B3
92:1005A00000000018000D000000000000050200001F
93:1005B0000000001091DE000000000018000A00009A
94:1005C00000000010B1A0B0130000000B2FDF0002EC
95:1005D000000000002C200000000000082C8000001B
96:1005E000000000082D0000000000001091D4000061
97:1005F0000000000806005555000000188000FFEEBE
98:10060000000000082D80011C00000010001F0000E9
99:100610000000001091DE00000000000F476000089D
100:100620000000000F060E0001000000000F5800003F
101:10063000000000000A640000000000000AE500005D
102:10064000000000090B66FFFF000000000D610000C4
103:1006500000000018800000130000000F4760000831
104:100660000000000B2FDF0002000000082C800000BB
105:10067000000000082D0000000000001091D40000D0
106:10068000000000082D80011C0000000F060E000174
107:1006900000000010001F0000000000000F580000C4
108:1006A0000000001091DE0000000000000A6400005D
109:1006B000000000000AE50000000000090B66FFFFD3
110:1006C000000000000D610000000000000262000058
111:1006D0000000000B2FDF00020000000031040000CA
112:1006E00000000000309A0000000000188000FFBCED
113:1006F0000000000C29800001000000100022000210
114:100700000000000C295200010000000C29520000DA
115:10071000000000080200000E000000080280001A1D
116:1007200000000010B1C40A0200000008020000032B
117:1007300000000008220000010000000C1F800001E2
118:10074000000000002ADF0000000000002A0008006E
119:100750000000000805005555000000188000FF2724
120:100760000000000B2FDF00020000001091D40000F9
121:10077000000000082A000001000000002C200000FA
122:10078000000000082C800000000000082D00000080
123:10079000000000082D80011C0000001091D4000012
124:1007A0000000001091DE0000000000082C80000610
125:1007B000000000082D00000600000000308000004E
126:1007C0000000000031000000000000082D8000063D
127:1007D0000000000C298000010000000C1F800001B7
128:1007E0000000001091DE0000000000002ADF000081
129:1007F000000000082A0000100000000005000000B2
130:10080000000000188000FF120000001091A0B00945
131:10081000000000082C80010D000000082D000009D8
132:100820000000001091D40000000000082D80010796
133:10083000000000188000FFAF0000001880000010CA
134:1008400000000008AC000001000000188000000B50
135:10085000000000000380B0000000000B2FDF00024A
136:10086000000000002C0040000000001091D40000A7
137:100870000000000806005555000000188000FF9E8B
138:100880000000001880000030000000188000000602
139:100890000000000B2FDF0002000000002C000E0003
140:1008A000000000082A000007000000080500555558
141:1008B000000000188000FEFC00000000068200001E
142:1008C0000000000C298000010000000C1F800001C6
143:1008D000000000100CE70007000000090562FFFFA0
144:1008E00000000010BA6C1405000000002ADF0000B0
145:1008F0000000000021000000000000082A000005A0
146:100900000000001091D40000000000082C80010CB1
147:10091000000000082D0000080000000C31620018E3
148:10092000000000082D800001000000188000FF90EA
149:1009300000000018000D000000000010B1A0B00E73
150:100940000000000B2FDF00020000000003D80000B1
151:10095000000000002C2000000000001091D40000D6
152:100960000000001880000014000000102C6200023B
153:10097000000000188000000B0000000B2FDF0002B9
154:10098000000000002C0700000000000C1F80000188
155:100990000000001091DE00000000000005000000D3
156:1009A000000000188000FEDE000000082C80010D11
157:1009B000000000082D0000090000001091D4000084
158:1009C000000000082D8001070000000C29800001B4
159:1009D0000000000C1F8000010000001091DE0000EC
160:1009E000000000002ADF0000000000082A00000AC2
161:1009F0000000000005000000000000188000FED389
162:100A00000000000005020000000000082C80010C1E
163:100A1000000000082D000008000000082D800134AF
164:100A2000000000000000000000000010205F000037
165:100A3000000000082C800140000000082D00003C50
166:100A4000000000082D80011C0000000000000000D4
167:100A500000000010205F0000000000082C800080D3
168:100A6000000000082D000000000000082D80010893
169:100A700000000000000000000000001091DE0000F7
170:100A800000000018000A00000000001091D40000CF
171:100A9000000000080600AAAA000000188000FF5A03
172:100AA0000000000C298000010000000C1F800001E4
173:100AB000000000082A000009000000080500AAAA9A
174:100AC000000000188000FEBA0000001091D4000061
175:100AD0000000000806005555000000188000FF5275
176:100AE0000000001091A03C0200000010B1E6620777
177:100AF0000000000B2FDF0002000000002C3100007E
178:100B0000000000092CB1007F000000082CD9000073
179:100B1000000000082D000000000000082D80010DDD
180:100B200000000010B1A8000600000010205F0000C7
181:100B3000000000002C200000000000002CA7000096
182:100B4000000000082D000010000000082D800108A2
183:100B5000000000188000FF4B00000010B1A600103C
184:100B600000000010001F00000000000F0F30000701
185:100B7000000000000A600000000000000AE1000020
186:100B80000000000F4B620008000000090B1600FF78
187:100B9000000000000D620000000000090D1A00FFB7
188:100BA00000000010073000030000000C0D1A0008C0
189:100BB0000000000C0B1600080000000F4CE30018AA
190:100BC000000000000C992C0000000004CC993400B7
191:100BD000000000080F8000000000000C29800001C8
192:100BE0000000000033310000000000082200001661
193:100BF000000000002ADF0000000000082A00000CAE
194:100C000000000010009F0000000000000F20000006
195:100C10000000000C1F800001000000080500555571
196:100C2000000000188000FE8E0000001091D400002B
197:100C3000000000080600AAAA000000188000FF2695
198:100C40000000000F4722000800000009070E000FF7
199:100C500000000008070E00080000000802800001E4
200:100C60000000000702851C000000000882850001CA
201:100C70000000000002854C000000000742851C00B7
202:100C800000000003C3AA52000000000003B10E00E0
203:100C9000000000074B071C000000000F0F3000078A
204:100CA0000000000F0A960003000000000A955C0097
205:100CB000000000004A005A00000000000C960A00E4
206:100CC000000000090C99FFFF000000080D00FFFF65
207:100CD00000000010B1963202000000080F800005ED
208:100CE00000000010B1A8000800000010205F000004
209:100CF0000000000B2FDF0002000000002C2000008D
210:100D0000000000002CA70000000000082D000010CB
211:100D1000000000082D800108000000188000FF126C
212:100D20000000000C2980000100000010001F0000DE
213:100D30000000000C1F800001000000002ADF0000FE
214:100D4000000000082A00000D000000080500AAAA03
215:100D5000000000188000FE680000001091D4000020
216:100D60000000000806005555000000188000FF0034
217:100D70000000000C298000010000000C1F80000111
218:100D8000000000082A000007000000080500555573
219:100D9000000000188000FE60000000080305000449
220:100DA0000000000683040C00000000080285020019
221:100DB0000000000086050C0000000001860C0E00FB
222:100DC00000000008020400040000000002041800F3
223:100DD00000000000838718000000001800020000D7
224:100DE00000000010B18000040000001F0303010098
225:100DF00000000008050000FF0000001800020000CD
226:100E0000000000002A00000000000010B1D4000023
227:100E10000000000C298000010000000802540009B5
228:100E2000000000092952003F0000001800040000E3
229:100E30000000001880000010000000188000001161
230:100E4000000000188000004B000000188000013CEA
231:100E5000000000188000013B000000188000013AEB
232:100E6000000000188000013A000000188000000017
233:100E7000000000188000014D0000001880000136BD
234:100E8000000000188000000C0000001880000152D3
235:100E900000000018800001AC0000001880000080F5
236:100EA00000000018800001070000001880000115F4
237:100EB000000000002A000000000000188000FFEA87
238:100EC000000000002A0000000000000C2980000043
239:100ED0000000001020530000000000188000FFE612
240:100EE000000000002A000000000000188000FFE45D
241:100EF0000000000003820000000000188000FFDFF7
242:100F0000000000010C161400000000008C181400F2
243:100F10000000001091980003000000080C960002E9
244:100F200000000010B1800003000000080C960001D2
245:100F3000000000000C000000000000000D1900007F
246:100F400000000010205600000000000C2BD700010C
247:100F5000000000080F8000010000000000000000F9
248:100F600000000010001F00000000000C6BD7000103
249:100F700000000010011301F100000018000700003C
250:100F800000000000050200000000001091963421CE
251:100F900000000010205F0000000000002C1E000078
252:100FA000000000082C800006000000082D0000064C
253:100FB000000000082D800102000000000000000079
254:100FC0000000001091DE0000000000000D61000034
255:100FD00000000018000A00000000000005020000E8
256:100FE000000000109196341600000010205F0000F1
257:100FF0000000000009D80000000000002C1E0000C6
258:10100000000000082C80010E000000082D00000ADE
259:10101000000000082D800102000000000000000018
260:101020000000001091DE0000000000000D620000D2
261:10103000000000002C13000000000018000A00004F
262:101040000000000005020000000000109196340925
263:1010500000000010205F0000000000002C1E0000B7
264:10106000000000082C800006000000082D00006A27
265:10107000000000082D8001020000000000000000B8
266:101080000000001091DE0000000000000D7A00005A
267:1010900000000018000A00000000001091DE0000AF
268:1010A00000000010001F00000000000C6BD70001C2
269:1010B000000000002F80AA00000000002A000000AD
270:1010C000000000000D61000000000000036200004D
271:1010D000000000002C4000000000000002638C00B3
272:1010E0000000000026460000000000080204001274
273:1010F00000000010B906082E000000000F58000084
274:10110000000000000A640000000000000AE5000082
275:10111000000000090B66FFFF000000000C0000004B
276:10112000000000000B800000000000080CC6001248
277:10113000000000188000FFCA0000001020560000C8
278:101140000000000C2BD70001000000080F800003F6
279:10115000000000000000000000000010001F000060
280:101160000000000C6BD700010000000827110012DE
281:10117000000000006690000000000008A31B0012A1
282:1011800000000010B198000600000010001F0000D1
283:101190000000000C6BD7000100000010205600007A
284:1011A0000000000C2BD70001000000080F80000495
285:1011B0000000000822000003000000082C80000C42
286:1011C000000000082D00000C00000010001F0000AF
287:1011D0000000000C6BD70001000000002596000005
288:1011E0000000000C298000000000000006660000DE
289:1011F0000000000086611800000000090260000F76
290:101200000000000F0204000200000010B60C0803EA
291:101210000000000C1FBF00000000000C336600102F
292:1012200000000000321400000000000032950000B1
293:101230000000000573662C000000000031E32E0062
294:10124000000000082D800010000000102053000056
295:101250000000001091DE0000000000188000FF7602
296:1012600000000000230000000000000925E6FFFF49
297:10127000000000082200000B0000000C6952000072
298:101280000000000C29800000000000102053000026
299:10129000000000188000FF6F0000001091DE0000C9
300:1012A00000000010001F00000000000C6BD70001C0
301:1012B000000000002F80AA00000000002A000000AB
302:1012C000000000002C400000000000082C800040BE
303:1012D000000000082D000020000000082D80011CE7
304:1012E00000000000000000000000001091DE00007F
305:1012F0000000000F42EA001000000010004F000440
306:1013000000000010B74692000000000802490012D9
307:1013100000000010B5840A00000000000D6100000C
308:1013200000000010BA66346D000000000362000087
309:1013300000000010B8630C6B000000088305001269
310:1013400000000010004F00020000000003490000F0
311:101350000000000183068C000000000083C60C0022
312:1013600000000010B1870010000000000B6E0000AC
313:10137000000000188000FF50000000010669140002
314:1013800000000010918C000200000008B4E9000188
315:1013900000000010B1E92C5F0000000086692C00FD
316:1013A00000000000020000000000000902EAFFFF48
317:1013B00000000010000C00020000000002040A00FF
318:1013C0000000000F460C00010000000F0285000124
319:1013D00000000010918C01FC00000010B7040E56B4
320:1013E000000000002C400000000000000F40000042
321:1013F000000000000D610000000000000A64000011
322:10140000000000000AE50000000000090B66FFFF75
323:10141000000000000C000000000000000B80000035
324:10142000000000080C86001200000010205600008A
325:101430000000000C2BD70001000000080F80000303
326:101440000000000C2952000000000010001F0000E6
327:101450000000000C6BD700010000000827110012EB
328:10146000000000006690000000000000264600001A
329:10147000000000002306000000000010B1980009E1
330:1014800000000010001F00000000000C6BD70001DE
331:1014900000000010205600000000000C2BD70001B7
332:1014A000000000080F8000040000000000000000A1
333:1014B00000000010001F00000000000C6BD70001AE
334:1014C000000000003214000000000000329500000F
335:1014D0000000000031E32E000000000573662C00C0
336:1014E000000000002596000000000010B1870021D8
337:1014F0000000000C298000000000000F0F6B0007A7
338:10150000000000000D690000000000000A6C0000EF
339:10151000000000000AED0000000000000B6E00005B
340:10152000000000000B800000000000000C8700009D
341:10153000000000188000FF18000000010C161400C5
342:10154000000000008C181400000000080C96000138
343:101550000000001091980002000000080C990001A2
344:10156000000000000D190000000000000C00000049
345:1015700000000010205600000000000C2BD70001D6
346:10158000000000080F800001000000102053000040
347:101590000000000C6952000100000010001F000054
348:1015A0000000000C6BD700010000000022C58C0079
349:1015B00000000000231200000000000027110000BE
350:1015C000000000002690000000000010B8170E0375
351:1015D0000000000C29800000000000188000FFEBD4
352:1015E0000000000082970E0000000000A3120A0015
353:1015F000000000082200001A000000082C80000CE7
354:10160000000000082D00000C000000082D800010D4
355:1016100000000010001F00000000000C6BD700014C
356:10162000000000000D6E000000000003E7CF340052
357:101630000000000C298000000000001091DE000076
358:1016400000000010B1870007000000003614000001
359:101650000000000036950000000000003716000072
360:10166000000000082C800050000000082D00003011
361:10167000000000082D80000C000000102053000026
362:10168000000000188000FEF1000000002646000067
363:1016900000000000230000000000000925E6FFFF15
364:1016A000000000000B6E000000000003E7CF2C00DC
365:1016B000000000082200001B0000000C695200001E
366:1016C0000000000C298000000000001020530000E2
367:1016D000000000188000FEE7000000002FD5000089
368:1016E000000000002A00000000000010003F000C75
369:1016F000000000000666000000000000866118007F
370:1017000000000009026000F000000010B70C08089B
371:10171000000000002C4000000000000C7366001068
372:10172000000000082C800018000000082D000018A0
373:10173000000000082D8000020000000C5FBF0000C8
374:101740000000001091DE0000000000188000FED8AC
375:10175000000000002FD50000000000002A0000005B
376:10176000000000002C4000000000000C7366001018
377:10177000000000082C800018000000082D00001850
378:10178000000000082D8000020000000C5FBF000078
379:101790000000001091DE0000000000082C80000313
380:1017A000000000082D000003000000093060FFF079
381:1017B000000000082D8000010000000C29800000BE
382:1017C0000000001091DE0000000000082C80001ACC
383:1017D000000000082D00001A000000003300000087
384:1017E000000000082D800002000000003180000091
385:1017F0000000001091DE0000000000082C80000CAA
386:10180000000000082D00000C000000082D800004DE
387:1018100000000010205300000000001091DE0000C6
388:10182000000000188000FEBD000000188000FEBC13
389:10183000000000002A00000000000010001F00004F
390:101840000000000C6BD70001000000000F008000BA
391:10185000000000080F80000700000018800000153D
392:10186000000000000502000000000008220000093E
393:1018700000000000286D00000000000029000000AA
394:101880000000000F6568001000000003F66C940073
395:1018900000000010B972A0040000000C73E70019EA
396:1018A0000000000C21420004000000003BF6000094
397:1018B0000000000C298000000000001020530000F0
398:1018C00000000008220000080000000C6142000433
399:1018D00000000018000A0000000000002A000000BC
400:1018E00000000010001F00000000000C6BD700017A
401:1018F0000000000F0F470007000000080F800008DD
402:101900000000000C2980000000000010205300009F
403:10191000000000188000FE9F0000001091DE000013
404:10192000000000002FD5000000000010001F000084
405:101930000000000C6BD700010000000033510000D4
406:10194000000000002A00000000000010B1C60029BD
407:101950000000000F0F500007000000000A600000A8
408:10196000000000000AE100000000000F4B620008C8
409:10197000000000090B1600FF0000000F4C62001071
410:10198000000000000D620000000000090D1A00FFB9
411:1019900000000010075000030000000C0D1A0008A2
412:1019A0000000000C0B160008000000000CC6000030
413:1019B000000000000B8000000000000006980000FE
414:1019C00000000010205600000000000C2BD7000182
415:1019D000000000080F8000030000001006C2000491
416:1019E0000000000C29000002000000102642000246
417:1019F0000000000C29520003000000082200000132
418:101A000000000010001F00000000000C6BD7000158
419:101A100000000000231B00000000000027111A0036
420:101A200000000000669000000000000C2952000039
421:101A300000000010B197320C0000000C298000005B
422:101A40000000000006980000000000102053000075
423:101A50000000000C295200030000000022C58C0089
424:101A600000000010001F00000000000C6BD70001F8
425:101A700000000010205600000000000C2BD70001D1
426:101A8000000000080F800003000000188000FFEF36
427:101A900000000010B1C8001300000010B1C6000320
428:101AA0000000000C298000000000001020530000FE
429:101AB0000000000C295200000000000C2952000315
430:101AC0000000001006C200020000000C29520002B3
431:101AD0000000000022C58C00000000002765000007
432:101AE0000000000026E400000000000822000016AC
433:101AF00000000010B1C600030000000023480000F1
434:101B000000000010B1800005000000002348000024
435:101B10000000000C298000000000000F0F5000079B
436:101B200000000018800000120000000822000016CB
437:101B30000000000C298000000000000030140000AC
438:101B40000000000030950000000000100750000366
439:101B5000000000090B1600FF000000090D1A00FF2D
440:101B60000000000F31160008000000003162340050
441:101B700000000003F162300000000010205F000050
442:101B8000000000002C510000000000092CD1007F53
443:101B9000000000082CD90000000000082D00000003
444:101BA000000000082D80000C000000000000000074
445:101BB0000000001091DE00000000001005C20003CC
446:101BC0000000000033000000000000080F80000744
447:101BD000000000102053000000000010001F000053
448:101BE0000000000C6BD70001000000188000FE44CC
449:101BF000000000002FD50000000000002A000000B7
450:101C00000000000F0F50000700000010B1C60030A8
451:101C10000000000F4742000800000009070E000FF7
452:101C200000000008070E000800000010001F000060
453:101C30000000000C6BD70001000000080900000143
454:101C40000000000709121C0000000003CBCA92002C
455:101C5000000000000B97A2000000000742171C00C4
456:101C6000000000000B0400000000000F0A840003C5
457:101C7000000000000A959C00000000004A009A0045
458:101C80000000000882120001000000010C1708008B
459:101C9000000000000C978C000000000002180000FB
460:101CA000000000080D00FFFF000000080F80000684
461:101CB0000000000C290000000000001006C2000413
462:101CC0000000000C29520002000000102642000211
463:101CD0000000000C2952000300000008220000014F
464:101CE00000000010001F00000000000C6BD7000176
465:101CF00000000010B197320D00000000231B00000F
466:101D0000000000002711080000000000669000009D
467:101D10000000000C298000000000000002180000F4
468:101D200000000010205300000000000C29520003A6
469:101D30000000000022C5360000000010001F000057
470:101D40000000000C6BD70001000000080F800006A7
471:101D5000000000188000FFF200000000231B0000BC
472:101D6000000000002711080000000000669000003D
473:101D700000000010B1C8000B0000000C298000001A
474:101D800000000010205300000000000C2952000049
475:101D90000000000C295200030000001006C20002DF
476:101DA0000000000C295200020000000022C58C0037
477:101DB00000000000276500000000000026E400008D
478:101DC0000000000023480000000000082200001767
479:101DD0000000000C2980000000000010001F00001F
480:101DE0000000000C6BD70001000000102053000021
481:081DF000000000188000FE0352
482:00000001FF
483/*
484 * This file contains firmware data derived from proprietary unpublished
485 * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
486 *
487 * Permission is hereby granted for the distribution of this firmware data
488 * in hexadecimal or equivalent format, provided this copyright notice is
489 * accompanying it.
490 */
diff --git a/firmware/myricom/lanai.bin.ihex b/firmware/myricom/lanai.bin.ihex
new file mode 100644
index 000000000000..bf47f4c74940
--- /dev/null
+++ b/firmware/myricom/lanai.bin.ihex
@@ -0,0 +1,4771 @@
1:100000004FF8F20EFE00C290000007880008E001E1
2:10001000014C9793FFFCE000001400000001000079
3:1000200000009293FFFC02900008F7062A6C9713D9
4:10003000FFFCF7062C109713FFFC07880008E00070
5:1000400015489793FFFCF702053C9713FFFCF70256
6:1000500000039713FFFCF70629E09713FFFC0788BE
7:100060000008E000161C9793FFFCF7062B849713FB
8:10007000FFFCF7062C1C9713FFFC07880008E00024
9:1000800015489793FFFCF7020ABC9713FFFCF70291
10:1000900000029713FFFCF7062AF89713FFFC078866
11:1000A0000008E000161C9793FFFC8796FFFC8296E1
12:1000B000FFF802140000013C0000000000019293D0
13:1000C000FFFC02900008F7044A9C85160000203AC5
14:1000D0000001EE00010100000001F70475EC0000D2
15:1000E0000001203A0000E600010000000001F704D2
16:1000F00075F000000001203A0000E600012D00002C
17:100100000001F7042D38F6862C2806380001F60584
18:100110002D3877390002F482001220320044E600C4
19:1001200001E0B4BA6802E00001E0F0052D38F70400
20:100130003B64F5844F54F7057A10202E0000E6004A
21:100140000199972A002095AA001CF6064A9826AC29
22:10015000000177350001C738680077390002073899
23:10016000000CA4BA60020000000194AA0010C73875
24:100170006000873A000400000001972A0014F70489
25:100180004A9C0000000127380001C02E7200D700F1
26:100190000A01E00001D0F7057A1895AA001CF606BE
27:1001A0004A9806AC000177350001C73868007739F6
28:1001B00000020738000CA4BA60020000000194AAF3
29:1001C0000010C7386000873A0004F0057A18972AB3
30:1001D0000014F50579D807880008E00001F497932A
31:1001E000FFFC8796FFFC8296FFF802140004013C96
32:1001F0000000000000019293FFFC02900008221012
33:100200000038F7047A10F6843B6400000001C03A1D
34:100210006A00470C0001D7000A70203A0000E6008F
35:10022000024C00000001F70475EC00000001203AC8
36:100230000000E600024C00000001F70475F0000029
37:100240000001203A0000E6000285F4820000F70475
38:100250002D38F6862C2806380001F6052D3877391A
39:100260000002F302001220320044E6000274B33AA6
40:100270006802F0052D38F3062A6CF3052C10E00017
41:100280000528F0057A18F38479D8F6844AA0231457
42:1002900000209316FFC4841E00109696FFD4F70426
43:1002A0004A9C9416FFE0851E0014C0367200EC00D4
44:1002B000036C9516FFE477350001C738680077397D
45:1002C0000002F3064A98C6B8300006B4000CC58494
46:1002D00000008736000000000001C03A4200E6003E
47:1002E00002FCC62400008736000400000001C03A6A
48:1002F0005200E600030020320000F6020001203226
49:100300000000E600030D00000001F58200008636C3
50:1003100000008716FFE000000001C0327200E2001A
51:100320000348F5020000C0327200E6000350202AA4
52:10033000000086B600048716FFE400000001C03606
53:100340007200E2000351202A0000F5020001202A79
54:100350000000E6000361202E0000F5820001202E3F
55:100360000000E600037020260000F4820001202631
56:100370000000E60003A5F60200018716FFD4F3068D
57:100380004A9876B90001C6B4700076B50002C6B4CA
58:10039000300006B4001486B600009716FFD8E000BF
59:1003A00004189696FFDC2714002C9713FFFC831685
60:1003B000FFC4000000019313FFFCF3064A98931357
61:1003C000FFFC9396FFCC07880008E001256897930F
62:1003D000FFFC8396FFCC20220000E6000415F60205
63:1003E00000018716FFD4F3064A9876B90001C6B417
64:1003F000700076B50002C6B4300006B4001486B6AC
65:1004000000009716FFD89696FFDCF7054AA0E0009B
66:10041000041C20320000F602000020320000E6003A
67:10042000042CF4820001E0000484F482000086962B
68:10043000FFD80000000177350002C738680077391F
69:100440000002F68642C8A63A6802C73868007539C5
70:10045000001E7528FFE505B8000286AE00000738CB
71:1004600000049716FFECC63057C07630FFF09616A2
72:10047000FFF475AD001E75ACFFE5C6B45FC076B481
73:10048000FFF09696FFF020260000E6000525F30613
74:1004900029E08696FFF0F5820000C7346800C49C0E
75:1004A0007200C02E6A00EC0004F0C5240000C62CC7
76:1004B00000008716FFEC00000001A6B2700205AC38
77:1004C0000001C73070007739001E7738FFE5C6B4E9
78:1004D00077C076B4FFF0F6AB280005280002871637
79:1004E000FFF000000001C02E7200EC0004B10630E5
80:1004F0000002F3020003F30576F48716FFF0869EF0
81:100500000004C7387000C7384800C6B470008716AA
82:10051000FFF406B400209702FF6C9482FF5096828D
83:10052000FF58F30629E0F3052C108796FFFC82960E
84:10053000FFF802140000013C00000000000192934B
85:10054000FFFC02900008F7047A1800000001203A2E
86:100550000000E60005CD00000001F7047A10F684E3
87:100560003B6400000001C03A6A00470C0001203AD9
88:100570000000E60005CDF5864A98F60479D8F684A1
89:100580004F540000000196B2001C06B400017735FC
90:100590000001C7386800773900020738000CA53A17
91:1005A00058020000000195320010C7385800873A01
92:1005B0000004F0057A189732001407880008E0005C
93:1005C00001F49793FFFCE00005FC00000001F70434
94:1005D0002D38F6862C2806380001F6052D38773997
95:1005E0000002F502001220320044E60005F4B53A9C
96:1005F0006802F0052D38F5062A6CF5052C10879653
97:10060000FFFC8296FFF802140000013C000000008D
98:1006100000019293FFFC0290000885960000F70409
99:1006200075EC852E0020203A0000E60006CCF5058A
100:100630007A08F70475F000000001203A0000E60097
101:1006400006CC00000001F7047A08F6843B64000041
102:100650000001C03A6A00470C0001D7000A70203A36
103:100660000000E60006CC00000001872E001CF68486
104:100670004F54F7057A00C7347200203A0000EE00AC
105:10068000068DF5020001E0000690F50579F8F08589
106:1006900079F8F6847A00C7387000C6B47000F704A1
107:1006A00079F8F68579E8C7387000C6347000F70429
108:1006B0004A9C00000001C0367200EC0006CCF60532
109:1006C00079F020360000EC0006F800000001F70485
110:1006D0002D38F6862C2806380001F6052D38773996
111:1006E0000002F502001320320044E6000738B53A54
112:1006F0006802E0000738F0052D38F7044A9C000036
113:100700000001C0327200EE00071900000001F7047A
114:100710004A9CE0000728F70579F020320000EC0041
115:10072000072800000001F08579F0F58579E0078859
116:100730000008E000074C9793FFFC8796FFFC829629
117:10074000FFF802140004013C000000000001929335
118:10075000FFFC0290000822100038F70475EC00003E
119:100760000001203A0000E60007A400000001F704A1
120:1007700075F000000001203A0000E60007A4000028
121:100780000001F7047A08F6843B6400000001C03AD7
122:100790006A00470C0001D7000A70203A0000E6000A
123:1007A00007D5F4020000F7042D38F6862C28063809
124:1007B0000001F6052D3877390002F30200132032CC
125:1007C0000044E60007CCB33A6802F0052D38E0009B
126:1007D0000AA4F3062B84F68479E8F6064A9877355E
127:1007E0000001C738680077390002F68479E00738DD
128:1007F000000CA33A6002C3B4000093360010C7385F
129:100800006000873A0004231400209316FFC4973633
130:100810000014849E0010F6844AA09496FFE09696F9
131:10082000FFD4851E0014F7044A9C00000001C03666
132:100830007200EC0008EC9516FFE477350001C7382C
133:10084000680077390002C6B8600006B4000CC584A1
134:1008500000008736000000000001C03A4A00E600B0
135:10086000087CC62000008736000400000001C03A62
136:100870005200E600088020320000F602000120321B
137:100880000000E600088D00000001F58200008636B9
138:1008900000008716FFE000000001C0327200E20095
139:1008A00008C8F5020000C0327200E60008D0202A15
140:1008B000000086B600048716FFE400000001C03681
141:1008C0007200E20008D1202A0000F5020001202A6F
142:1008D0000000E60008E1202E0000F5820001202E35
143:1008E0000000E60008F020220000F40200012022AF
144:1008F0000000E6000925F60200018716FFD4F30682
145:100900004A9876B90001C6B4700076B50002C6B444
146:10091000300006B4001486B600009716FFD8E00039
147:1009200009989696FFDC2714002C9713FFFC83167A
148:10093000FFC4000000019313FFFCF3064A989313D1
149:10094000FFFC9396FFCC07880008E0012568979389
150:10095000FFFC8396FFCC20220000E6000995F602FA
151:1009600000018716FFD4F3064A9876B90001C6B491
152:10097000700076B50002C6B4300006B4001486B626
153:1009800000009716FFD89696FFDCF7054AA0E00016
154:10099000099C20320000F602000020320000E60030
155:1009A00009ACF4820001E0000A04F482000086969B
156:1009B000FFD80000000177350002C738680077399A
157:1009C0000002F68642C8A63A6802C7386800753940
158:1009D000001E7528FFE505B8000286AE0000073846
159:1009E00000049716FFECC63057C07630FFF096161D
160:1009F000FFF475AD001E75ACFFE5C6B45FC076B4FC
161:100A0000FFF09696FFF020260000E6000AA5F30608
162:100A10002AF88696FFF0F5820000C7346800C49C6F
163:100A20007200C02E6A00EC000A70C5240000C62CBB
164:100A300000008716FFEC00000001A6B2700205ACB2
165:100A40000001C73070007739001E7738FFE5C6B463
166:100A500077C076B4FFF0F6AB2800052800028716B1
167:100A6000FFF000000001C02E7200EC000A310630D9
168:100A70000002F3020002F30576F48716FFF0869E6B
169:100A80000004C7387000C7384800C6B47000871625
170:100A9000FFF406B400209702FF6C9482FF50968208
171:100AA000FF58F3062AF8F3052C1C8796FFFC829664
172:100AB000FFF802140000013C0000000000019293C6
173:100AC000FFFC02900008F68479E8F70479F800004A
174:100AD0000001C6B47000F7047A20F68579E807387B
175:100AE0000001F7057A20F70479F0F6047A20C03681
176:100AF0007200E6000B2CF6862C28F7042D38000037
177:100B0000000106380001F6052D3877390002F5821C
178:100B1000001320320044E6000B20B5BA6802F0054D
179:100B20002D38F5862B84E0000B38F5852C1C0788C2
180:100B30000008E000074C9793FFFC8796FFFC829625
181:100B4000FFF802140000013C000000000001929335
182:100B5000FFFC02900008F7062C109713FFFCF70625
183:100B600029E09713FFFC07880008E00014F497932E
184:100B7000FFFCF7062C109713FFFCF7062A6C97135F
185:100B8000FFFC07880008E00014F49793FFFCF706C9
186:100B90002C1C9713FFFCF7062AF89713FFFC078815
187:100BA0000008E00014F49793FFFCF7062C1C971341
188:100BB000FFFCF7062B849713FFFC07880008E00072
189:100BC00014F49793FFFC8796FFFC8296FFF80214BB
190:100BD0000000013C0000000000019293FFFC029025
191:100BE0000008F0052D38F0052D3C8796FFFC829615
192:100BF000FFF802140000013C000000000001929385
193:100C0000FFFC0290000822100018FF852EDCF7067A
194:100C10000C3EC77C7400203A0000E60014299716A9
195:100C2000FFF44738FFFBF6846F50CFB8000083967F
196:100C3000FFF4F702003FC39C6D80C71C7400203A8C
197:100C4000003FE20012609396FFF477390002F682CB
198:100C50000C5CA6B6700200000001C1340000000068
199:100C600012600000126000000D6800000D680000B6
200:100C70000D5C00000D5C00000D6800000D680000B8
201:100C80001250000012500000123C0000123C000004
202:100C90000DE000000DE00000123C0000123C0000DE
203:100CA0000DE800000DF400000E0000000E20000012
204:100CB0000E4000000E6000000E8000000EA000003C
205:100CC0000EC000000EC800000ED000001228000068
206:100CD0000ED800000EF400000F10000012280000D3
207:100CE0000F1800000F1800000F2400000F24000050
208:100CF0000F4400000F4400000F6400000F64000068
209:100D00000F8400000F8400000F8C00000F8C000087
210:100D10000F9400000F9400000FB000000FB000000F
211:100D20000FB800000FD800000FF80000102C0000D2
212:100D3000106000001094000010C8000010FC0000BB
213:100D400011300000114C0000116800001214000066
214:100D50001184000011B4000011E400001214F382A9
215:100D60000006E00012549393FFFCF60200052032C7
216:100D70000014E6000DB527000010203A0001E20043
217:100D80000DB5F7062DCCF6842ECC0000000175B50C
218:100D90000002B62E700206B40001F6852ECC860243
219:100DA000FF34F7062E4C2036001FE2000DB5B62E9C
220:100DB0007002F0052ECCF7042D5800000001873A90
221:100DC000000000000001873A0018000000010788B9
222:100DD0000008C13800009793FFFCE000126000009B
223:100DE0000001E0001240F3820006F382000BE000F5
224:100DF00012549393FFFCF3820007E0001254939384
225:100E0000FFFCF382000B9393FFFC07880008E000CF
226:100E100015849793FFFCF3820005E000125493932E
227:100E2000FFFCF38200079393FFFC07880008E000B3
228:100E300015849793FFFCF3820005E000125493930E
229:100E4000FFFCF382000B9393FFFC07880008E0008F
230:100E500015849793FFFCF3820006E00012549393ED
231:100E6000FFFCF38200079393FFFC07880008E00073
232:100E700015849793FFFCF3820006E00012549393CD
233:100E8000FFFCF382000B9393FFFC07880008E0004F
234:100E900015849793FFFCF3820005E00012549393AE
235:100EA000FFFCF38200079393FFFC07880008E00033
236:100EB00015849793FFFCF3820005E000125493938E
237:100EC000FFFCE0001240F382000BE0001240F382CE
238:100ED0000007E000122CF382000BF382000B9393C7
239:100EE000FFFC07880008E00015849793FFFCE000F2
240:100EF0001240F3820006F38200079393FFFC0788F9
241:100F00000008E00015849793FFFCE0001240F38294
242:100F10000006E000122CF382000BF3820014E000C4
243:100F200012549393FFFCF38200149393FFFC078801
244:100F30000008E00015849793FFFCF3820005E000B1
245:100F400012549393FFFCF38200149393FFFC0788E1
246:100F50000008E00015849793FFFCF3820006E00090
247:100F600012549393FFFCF38200149393FFFC0788C1
248:100F70000008E00015849793FFFCF3820005E00071
249:100F800012549393FFFCE0001240F3820014E0003F
250:100F9000122CF3820014F38200149393FFFC078851
251:100FA0000008E00015849793FFFCE0001240F382F4
252:100FB0000006E000122CF3820014F38200149393D5
253:100FC000FFFC07880008E00015849793FFFCF3827C
254:100FD000000BE00012549393FFFCF38200149393F0
255:100FE000FFFC07880008E00015849793FFFCF3825C
256:100FF0000007E00012549393FFFCF38200149393D4
257:10100000FFFC07880008E00015849793FFFCF3823B
258:10101000000B9393FFFC07880008E000158497936A
259:10102000FFFCF3820005E00012549393FFFCF3826F
260:1010300000149393FFFC07880008E0001584979341
261:10104000FFFCF38200079393FFFC07880008E00091
262:1010500015849793FFFCF3820005E00012549393EC
263:10106000FFFCF38200149393FFFC07880008E00064
264:1010700015849793FFFCF382000B9393FFFC078882
265:101080000008E00015849793FFFCF3820006E0005F
266:1010900012549393FFFCF38200149393FFFC078890
267:1010A0000008E00015849793FFFCF38200079393F8
268:1010B000FFFC07880008E00015849793FFFCF3828B
269:1010C0000006E00012549393FFFCF3820014939304
270:1010D000FFFC07880008E00015849793FFFCF3826B
271:1010E000000B9393FFFC07880008E000158497939A
272:1010F000FFFCF3820005E00012549393FFFCF3829F
273:1011000000149393FFFC07880008E0001584979370
274:10111000FFFCF38200079393FFFC07880008E000C0
275:1011200015849793FFFCF3820005E000125493931B
276:10113000FFFCF38200149393FFFC07880008E00093
277:1011400015849793FFFCE0001240F382000BF382BA
278:1011500000149393FFFC07880008E0001584979320
279:10116000FFFCE0001240F3820007F3820014939327
280:10117000FFFC07880008E00015849793FFFCE0005F
281:10118000122CF382000BF38200149393FFFC078868
282:101190000008E00015849793FFFCF382000B939303
283:1011A000FFFC07880008E00015849793FFFCE0002F
284:1011B0001240F3820006F38200149393FFFC078829
285:1011C0000008E00015849793FFFCF38200079393D7
286:1011D000FFFC07880008E00015849793FFFCE000FF
287:1011E0001240F3820006F38200149393FFFC0788F9
288:1011F0000008E00015849793FFFCE000122CF382B6
289:10120000000BF7043528F682000107380008E000DB
290:1012100013CCF7053544F38200149393FFFC078841
291:101220000008E00015849793FFFCF3820007939376
292:10123000FFFC07880008E00015849793FFFCF38209
293:1012400000059393FFFC07880008E000158497933E
294:10125000FFFC9013FFFC07880008E00015849793BB
295:10126000FFFC8396FFF400000001779C0014703EA1
296:10127000FFE1E600129DF7060400F7046F5C000032
297:10128000000107380001F7056F5CF7046F5CE000B0
298:101290000000000000018396FFF4F7060400C01E62
299:1012A0007400E600142900000001F7042ED0F68433
300:1012B00035240738000120360000E6001405F70544
301:1012C0002ED0F704E01400000001203A0000E600F0
302:1012D0001405F6820000F685E014F7042ED8C53414
303:1012E000000007380001F7052ED8202A0002EE0082
304:1012F00013CCF6820000F684352800000001873602
305:10130000000000000001203A0002E60013A005B42E
306:1013100000089593FFFC9516FFE89596FFE49696D6
307:10132000FFE007880008E00016649793FFFC85162D
308:10133000FFE88596FFE48696FFE020220000E600A5
309:101340001390F70200008636000C000000012032E6
310:10135000000FE20013750000000187360014000042
311:101360000001073800019736001487360014E000AA
312:101370001390F702000076B10002C6B46000773522
313:101380000005C7386A00C738600007380010C72C4E
314:101390007000203A0000E6001200F705352CF684B4
315:1013A0003528F7046F4C00000001C0367200E600DB
316:1013B00013C007341494F3846F44E00013C4F3851E
317:1013C0003528F7053528E00012E805280001203609
318:1013D0000000E6001429F6862C28F7042D38F005C5
319:1013E000352406380001F6052D3877390002F382DE
320:1013F000000D20320044E6001428B3BA6802E00071
321:101400001428F0052D38F704E01000000001203A00
322:101410000000E6001429F7020000F705E010078835
323:101420000008E00102989793FFFCF4842D38F7043C
324:101430002D3C00000001C03A4A00E6000C09F68687
325:101440002C2877390002A53A680200000001202A02
326:101450000014E600149127280015203A0001E2004C
327:101460001491F7062DCCF6842ECC8602FF3475B588
328:101470000002B52E700206B40001F6852ECCF706E8
329:101480002E4C2036001FE2001491B62E7002F0059B
330:101490002ECCF7062D4476A90002A7367002000074
331:1014A0000001873A000000000001C6B470008736D2
332:1014B00000049496FFEC07880008C1380000979359
333:1014C000FFFCF7042D3C8496FFEC07380001203A1E
334:1014D0000044E600142CF7052D3CE000142CF00528
335:1014E0002D3C8796FFFC8296FFF802140000013C19
336:1014F0000000000000019293FFFC02900008841697
337:101500000000F702000085960004203A0021EE005A
338:10151000153495A20000F606233807200084C6A0E3
339:101520000000963A000427380004C03A6A00EC0034
340:101530001520000000018796FFFC8296FFF8021438
341:101540000008013C0000000000019293FFFC0290A3
342:1015500000088696000087160004F6042D40973692
343:1015600000009736000407300001F7052D4096363D
344:1015700000088796FFFC8296FFF802140008013CE1
345:101580000000000000019293FFFC02900008851605
346:10159000000000000001202A0014E60015D92728C9
347:1015A0000015203A0001E20015D9F7062DCCF6848B
348:1015B0002ECC8602FF3475B50002B52E700206B43B
349:1015C0000001F6852ECCF7062E4C2036001FE200D7
350:1015D00015D9B62E7002F0052ECCF6862D4477294B
351:1015E0000002A6BA68020000000186B600000000F2
352:1015F0000001C7386800873A00040000000107882E
353:101600000008C13800009793FFFC8796FFFC829684
354:10161000FFF802140004013C000000000001929356
355:10162000FFFC029000088716000086960004F6066C
356:101630002D4476B5000285BA000000000001B5B661
357:101640006002C6B47000859600080000000195B6DF
358:1016500000048796FFFC8296FFF80214000C013C00
359:101660000000000000019293FFFC02900008861623
360:101670000000000000018732000400000001203A51
361:10168000000F86B20000C5380000EE0016B4C5B4E5
362:1016900000002036000FEE0016B400000001203AD2
363:1016A0000000EC0016B50000000120360000EC0040
364:1016B00016D0000000018732000C0000000107383E
365:1016C00000019732000C8732000CE00016D8F402BB
366:1016D0000000C02A5A00440C00018796FFFC829645
367:1016E000FFF802140004013C0000000000010000AB
368:1016F00000009293FFFC02900008F7062EE097137B
369:10170000FFFCF70632D49713FFFC07880008E000BF
370:1017100015489793FFFCF702182C9713FFFCF782EC
371:1017200000099793FFFCF7062EE09713FFFC07884C
372:101730000008E000161C9793FFFCF702345897133B
373:10174000FFFCF702000C9713FFFCF7062F6C9713B2
374:10175000FFFC07880008E000161C9793FFFCF702C7
375:101760003F949713FFFCF782000B9793FFFCF7065B
376:101770002FF89713FFFC07880008E000161C9793CA
377:10178000FFFCF7023B849713FFFCF782000B979353
378:10179000FFFCF70632289713FFFC07880008E000DB
379:1017A000161C9793FFFCF70226E49713FFFCF70241
380:1017B00000139713FFFCF70630849713FFFC07888C
381:1017C0000008E000161C9793FFFCF70226A0971371
382:1017D000FFFCF70200119713FFFCF7063110971377
383:1017E000FFFC07880008E000161C9793FFFCF70237
384:1017F000182C9713FFFCF78200099793FFFCF7065C
385:10180000319C9713FFFC07880008E000161C979393
386:10181000FFFCF0057A78F00532E88796FFFC8296A7
387:10182000FFF802140000013C000000000001929348
388:10183000FFFC0290000822100050F70471C800005D
389:101840000001203A0000E6001855F68671C4E00059
390:10185000186CF6020000F70471D40000000177391B
391:101860000002C7386800863A001800000001F6053B
392:1018700032C486B2000807018000C5B47400F58543
393:1018800032D087320018F6866F4477390002A73AC3
394:101890006802202E0000F70532C0073809D886B24A
395:1018A0000004F70532CCE6001941F68532C8F7048A
396:1018B0007198F6847A782738000120360000E60017
397:1018C0001910F7057198F70476FC00000001203A22
398:1018D0000000E60018E8F3020011F30632D4F30525
399:1018E00076FCE00018F8F7020001F30576F8F3063D
400:1018F00032D4F3057700F7020000203A0000E6003A
401:101900001914F3020001F3063110E000268CF305F0
402:1019100032D4F3020001F3057A78F3063084F3053C
403:1019200032D4F30432C4000000019313FFFC078893
404:101930000008E00006109793FFFCE000268C0000F2
405:101940000001F3020000202E0000E6001CB99316EF
406:10195000FFE4873200088696FFE4C3040000C03A23
407:101960003200E6001984203600008732000C0000A7
408:101970000001C03A3200E600198420360000F682E9
409:10198000000120360000E6001CB8F3020000F70456
410:1019900032C09316FFACF58432C4863A142803B8DB
411:1019A0001420042C000886BA142400000001C03260
412:1019B0006A00EC001A709616FFEC77310001C73808
413:1019C000600077390002C63838000630000C86B255
414:1019D0000000872E00088516FFACC0367200E600B6
415:1019E0001A00C484000086B20004872E000C000098
416:1019F0000001C0367200E6001A04202A0000F50239
417:101A00000001202A0000E6001A1100000001F48203
418:101A1000000086B200008722000000000001C036EE
419:101A20007200E2001A4CF5820000C0367200E60037
420:101A30001A54202E000086B2000487220004000001
421:101A40000001C0367200E2001A55202E0000F58217
422:101A50000001202E0000E6001A6520260000F48216
423:101A6000000120260000E6001A70F3020001931620
424:101A7000FFAC8316FFAC00000001201A0000E60056
425:101A80001AB1F60200018716FFEC0000000176B9DA
426:101A90000001C6B4700076B50002C6B4380006B4C2
427:101AA000001486B600009716FFF0E0001B1896960B
428:101AB000FFF4271400149713FFFC9413FFFC939377
429:101AC000FFFC9396FFBC07880008E0012568979308
430:101AD000FFFC8396FFBC20220000E6001B15F602E7
431:101AE00000018716FFEC0000000176B90001C6B4C2
432:101AF000700076B50002C6B4380006B4001486B68D
433:101B000000009716FFF09696FFF4971E0008E0007D
434:101B10001B1C20320000F602000020320000E6000C
435:101B20001CB8F3020000F60432C09316FFAC86B274
436:101B3000142803B014200430148C873214240000BD
437:101B40000001C0367200EC001C049696FFEC77355D
438:101B50000001C738680077390002C5B8380005AC05
439:101B6000000C86AE00008732148C8516FFACC036A0
440:101B70007200E6001B94C484000086AE0004873225
441:101B8000149000000001C0367200E6001B98202A65
442:101B90000000F5020001202A0000E6001BA500005D
443:101BA0000001F482000086AE0000872200000000E1
444:101BB0000001C0367200E2001BE0F6020000C036F1
445:101BC0007200E6001BE82032000086AE0004872287
446:101BD000000400000001C0367200E2001BE9203260
447:101BE0000000F602000120320000E6001BF920266A
448:101BF0000000F482000120260000E6001C04F3022D
449:101C000000019316FFAC8316FFAC00000001201A00
450:101C10000000E6001C45F60200018716FFEC0000FC
451:101C2000000176B90001C6B4700076B50002C6B4F2
452:101C3000380006B4001486B600009716FFF0E000E6
453:101C40001CAC9696FFF4271400149713FFFC941312
454:101C5000FFFC9393FFFC9396FFBC07880008E0010C
455:101C600025689793FFFC8396FFBC20220000E600C6
456:101C70001CA9F60200018716FFEC0000000176B9EE
457:101C80000001C6B4700076B50002C6B4380006B4D0
458:101C9000001486B600009716FFF09696FFF4971E84
459:101CA0000008E0001CB020320000F60200002032E4
460:101CB0000000E6001E15F3020001F68432C00000A9
461:101CC000000185B60EF486360EF8202E0010E200D4
462:101CD0001CDC20320010E2001CF9000000018736F5
463:101CE0000F00000000010738000197360F0087360B
464:101CF0000F00E0001D24F702000007300001C03A89
465:101D00005A00E6001D1DF682000020320010E60099
466:101D10001D20202E0000E6001D24C7340000F6829E
467:101D20000001C7340000203A0000E6001E14F30250
468:101D30000001F30432CC000000019316FFDC931382
469:101D4000FFFC07880008E00043689793FFFC20220F
470:101D50000000E6001DFCF30200008316FFDC00001B
471:101D60000001861A00000000000120320010E2008D
472:101D70001D9176B10002871A000C0000000107389F
473:101D80000001971A000C871A000CE0001DFCF302FA
474:101D90000000F302004C9313FFFCC6B460007735DB
475:101DA0000004C7386A008316FFDCC7386000C738F4
476:101DB0003000073800109713FFFCF3067A289313BE
477:101DC000FFFC9616FFB407880008E00126F89793F9
478:101DD000FFFC8616FFB4000000010630000120322F
479:101DE0000011E6001DEC00000001F6020000831661
480:101DF000FFDC00000001961A0000F30200019316B8
481:101E0000FFD48316FFD400000001201A0000E60072
482:101E10001E18F30200019316FFE48316FFE400008E
483:101E20000001201A0000E6001F35F6820CABF70413
484:101E300032B48316FFD407380001F70532B4F70433
485:101E400032B4201A0000E6001E7000000001F70402
486:101E500032C0F306E030C03A3200E6001E700000E7
487:101E60000001F70432E80000000107380001F7051F
488:101E700032E8F70471C400000001203A0000E600D7
489:101E80001EADF6862C28F7042D3800000001063818
490:101E90000001F6052D3877390002F302000A2032DE
491:101EA0000044E6001EACB33A6802F0052D38F70492
492:101EB00071D4F68471CC07380001C03A6A00E6009C
493:101EC0001EC8F70571D4F00571D4F68471D4F704F7
494:101ED00071D0F00571C4C0367200470C0001F68461
495:101EE00032D00000000120360000E60025D9F705B9
496:101EF00071C8F704719800000001203A0000E60064
497:101F0000257900000001F70475EC00000001203A7B
498:101F10000000E600257800000001F70475F00000DD
499:101F20000001203A0000E600257800000001E000F2
500:101F300025DCF306319CF00532E8F70432C0F604E4
501:101F40006F5496BA000420320000E6001F60F302CE
502:101F5000000CF3020001F3056F54E0001F68F70264
503:101F60000001F3056F58F7020000203A0000E60078
504:101F70001F7CF3062F6CE000268CF30532D4F58429
505:101F80007A7024940010202E0001E6002284F5854A
506:101F90007AA0F7020001F60432C8F7057A70F70458
507:101FA00032C4F68432C0F6057A2C9002FF8090028B
508:101FB000FF38F5847A28073800249582FF3C970281
509:101FC000FF409602FF448736141000000001C73816
510:101FD0006000973614108736141800000001073887
511:101FE00000019736141887361418F0056F50F7045F
512:101FF00032B89596FFECC7386000F70532B8F704A1
513:1020000032BCF3062FF807380001F70532BCF7049D
514:1020100032BCF30532D4F7060C3EC07E7400E600F5
515:10202000203400000001C07E7400E600202500007E
516:102030000001F7060C3EC77C7400203A0010E60051
517:10204000268C00000001F70432E4FF820010F584C2
518:102050006F5807380001202E0021E2002090F7057C
519:1020600032E4F7042D38F6862C2806380001F605F0
520:102070002D387739000220320044E6002084B5BABA
521:102080006802F0052D38F3020022E0002094F305E9
522:102090006F58F0056F54F58432C000000001902E97
523:1020A0000004872E000000000001203A0002E60034
524:1020B00021C0000000018702FF38032C0EF49316A4
525:1020C000FFCCF7057A689313FFFC9596FFB8078855
526:1020D0000008E00043A09793FFFC8596FFB82022FC
527:1020E0000000E600217C00000001862E0EF80000B2
528:1020F000000120320010E2002119F302004C872E6B
529:102100000F000000000107380001972E0F00872EF6
530:102110000F00E000217C000000019313FFFCF30698
531:102120007A289313FFFC76B10002C6B460007735BD
532:102130000004C7386A008316FFCCC7386000C73870
533:102140003000073800109713FFFC9596FFB89616DD
534:10215000FFB407880008E00126F89793FFFC861675
535:10216000FFB48596FFB80630000120320011E6006A
536:10217000217800000001F6020000962E0EF8F70408
537:1021800032C0F306E030C03A3200E60021C0000061
538:102190000001F704E0180000000177B8001E703E4F
539:1021A000FFE1E60021C1000000010F814000F704BB
540:1021B00079C80000000107380001F70579C8F70465
541:1021C00079C8F70471C400000001203A0000E6005D
542:1021D00021FDF6862C28F7042D3800000001063872
543:1021E0000001F6052D3877390002F302000A20328B
544:1021F0000044E60021FCB33A6802F0052D38F704EC
545:1022000071D4F68471CC07380001C03A6A00E60048
546:102210002218F70571D4F00571D4F68471D4F7044F
547:1022200071D0F00571C4C0367200470C0001F6840D
548:1022300032D00000000120360000E60025D9F70565
549:1022400071C8F704719800000001203A0000E60010
550:10225000257900000001F70475EC00000001203A28
551:102260000000E600257800000001F70475F000008A
552:102270000001203A0000E600257800000001E0009F
553:1022800025DCF306319CF0057A889002FF38F005D2
554:102290006F509002FF80F70432C4F3063228F30532
555:1022A00032D4F60432C8F6847A2CF50200000738DE
556:1022B0000024F7057A9820320000E60022D5F605C2
557:1022C0007A90C02A5A00E6002620C0326A00EE004A
558:1022D000262100000001F68432C00000000187368C
559:1022E000141000000001C7386000973614108736BC
560:1022F00014180000000107380001973614188736BB
561:102300001418F70432B800000001C7386000F70560
562:1023100032B8F70432BC0000000107380001F705AD
563:1023200032BCF70432BC20320000E6002345000036
564:102330000001F70432E0F5057A7007380001E0008B
565:102340002348F70532E0F5057A70F5846F580000F0
566:102350000001202E0021E200238CF6862C28F704B1
567:102360002D380000000106380001F6052D387739B8
568:10237000000220320044E6002380B5BA6802F0056E
569:102380002D38F3020022E0002390F3056F58F0058A
570:102390006F54F58432C000000001902E0004872E97
571:1023A000000000000001203A0002E60024BC00000A
572:1023B00000018702FF38032C0EF49316FFC4F705C3
573:1023C0007A689313FFFC9596FFB807880008E00031
574:1023D00043A09793FFFC8596FFB820220000E600FB
575:1023E000247800000001862E0EF800000001203243
576:1023F0000010E2002415F302004C872E0F000000AD
577:10240000000107380001972E0F00872E0F00E00013
578:102410002478000000019313FFFCF3067A2893133D
579:10242000FFFC76B10002C6B4600077350004C738FF
580:102430006A008316FFC4C7386000C7383000073809
581:1024400000109713FFFC9596FFB89616FFB4078807
582:102450000008E00126F89793FFFC8616FFB48596E6
583:10246000FFB80630000120320011E600247400009D
584:102470000001F6020000962E0EF8F70432C0F306B3
585:10248000E030C03A3200E60024BC00000001F7044E
586:10249000E0180000000177B8001E703EFFE1E60082
587:1024A00024BD000000010F814000F70479C800003E
588:1024B000000107380001F70579C8F70479C8F70467
589:1024C00071C400000001203A0000E60024F9F686FD
590:1024D0002C28F7042D380000000106380001F6050D
591:1024E0002D3877390002F302000A20320044E6005A
592:1024F00024F8B33A6802F0052D38F70471D4F68455
593:1025000071CC07380001C03A6A00E6002514F705CF
594:1025100071D4F00571D4F68471D4F70471D0F0054C
595:1025200071C4C0367200470C0001F68432D000003E
596:10253000000120360000E60025D9F70571C8F70430
597:10254000719800000001203A0000E60025790000A3
598:102550000001F70475EC00000001203A0000E600DD
599:10256000257800000001F70475F000000001203A12
600:102570000000E60025D100000001F58476F8000097
601:102580000001202E0021E20025C4F6862C28F70445
602:102590002D380000000106380001F6052D38773986
603:1025A000000220320044E60025B0B5BA6802F0050A
604:1025B0002D38F3020022F30576F8F3047700E000EB
605:1025C00025C8F30576FCF00576FCE00025D8F0057B
606:1025D0007A78E00025DCF306319CF3062EE0F30563
607:1025E00032D4F70471C800000001203A0000E60070
608:1025F000268CF6862C28F7042D38000000010638BA
609:102600000001F6052D3877390002F3020009203267
610:102610000044E600268CB33A6802E000268CF00500
611:102620002D38F7047A9000000001C03A6A00EE00ED
612:102630002641C5B40000C7385A00E0002648F70517
613:102640007A90C5B80000F0057A90F6847A88F7068B
614:102650007A2876350003A732700206B40001971677
615:10266000FFEC84A6FFFCF7067A2CF3047A98948298
616:10267000FF3C9302FF409582FF44B5B27002F7041D
617:102680007A98F6857A88C7385800F7057A98879639
618:10269000FFFC8296FFF802140000013C00000000DD
619:1026A00000019293FFFC02900008F7020001F70579
620:1026B0007A78F7063084F70532D4F70432C4000084
621:1026C00000019713FFFC07880008E00006109793AD
622:1026D000FFFC8796FFFC8296FFF802140000013C85
623:1026E0000000000000019293FFFC029000082210FD
624:1026F0000050F70432D0F3020000203A0000E60058
625:102700002A719316FFE4F68432C48616FFE48736F6
626:102710000008C3040000C03A3200E600273C203223
627:1027200000008736000C00000001C03A3200E600CD
628:10273000273C20320000F602000120320000E600B3
629:102740002A70F3020000F70432C09316FFACF58440
630:1027500032C4863A142803B81420042C000886BA20
631:10276000142400000001C0326A00EC0028289616EC
632:10277000FFEC77310001C738600077390002C638B6
633:1027800038000630000C86B20000872E000885163F
634:10279000FFACC0367200E60027B8C484000086B2E1
635:1027A0000004872E000C00000001C0367200E60015
636:1027B00027BC202A0000F5020001202A0000E600C4
637:1027C00027C900000001F482000086B200008722C1
638:1027D000000000000001C0367200E2002804F5820B
639:1027E0000000C0367200E600280C202E000086B2E1
640:1027F00000048722000400000001C0367200E200DD
641:10280000280D202E0000F5820001202E0000E60099
642:10281000281D20260000F482000120260000E6008A
643:102820002828F30200019316FFAC8316FFAC0000CA
644:102830000001201A0000E6002869F6020001871650
645:10284000FFEC0000000176B90001C6B4700076B557
646:102850000002C6B4380006B4001486B6000097160D
647:10286000FFF0E00028D09696FFF427140014971389
648:10287000FFFC9413FFFC9393FFFC9396FFBC078827
649:102880000008E00125689793FFFC8396FFBC202297
650:102890000000E60028CDF60200018716FFEC0000DC
651:1028A000000176B90001C6B4700076B50002C6B466
652:1028B000380006B4001486B600009716FFF096960E
653:1028C000FFF4971E0008E00028D420320000F60232
654:1028D000000020320000E6002A70F3020000F60437
655:1028E00032C09316FFAC86B2142803B01420043013
656:1028F000148C8732142400000001C0367200EC00F2
657:1029000029BC9696FFEC77350001C7386800773907
658:102910000002C5B8380005AC000C86AE0000873256
659:10292000148C8516FFACC0367200E600294CC484B6
660:10293000000086AE00048732149000000001C0360B
661:102940007200E6002950202A0000F5020001202A2A
662:102950000000E600295D00000001F482000086AE60
663:1029600000008722000000000001C0367200E20073
664:102970002998F6020000C0367200E60029A0203235
665:10298000000086AE00048722000400000001C0366B
666:102990007200E20029A120320000F602000120327C
667:1029A0000000E60029B120260000F4820001202664
668:1029B0000000E60029BCF30200019316FFAC831669
669:1029C000FFAC00000001201A0000E60029FDF6021D
670:1029D00000018716FFEC0000000176B90001C6B4C3
671:1029E000700076B50002C6B4380006B4001486B68E
672:1029F00000009716FFF0E0002A649696FFF4271473
673:102A000000149713FFFC9413FFFC9393FFFC939621
674:102A1000FFBC07880008E00125689793FFFC8396B8
675:102A2000FFBC20220000E6002A61F60200018716A2
676:102A3000FFEC0000000176B90001C6B4700076B565
677:102A40000002C6B4380006B4001486B6000097161B
678:102A5000FFF09696FFF4971E0008E0002A682032E7
679:102A60000000F602000020320000E6002BCDF30249
680:102A70000001F68432C00000000185B60EF48636EF
681:102A80000EF8202E0010E2002A9420320010E200FE
682:102A90002AB10000000187360F000000000107384E
683:102AA000000197360F0087360F00E0002ADCF7029E
684:102AB000000007300001C03A5A00E6002AD5F6822D
685:102AC000000020320010E6002AD8202E0000E60088
686:102AD0002ADCC7340000F6820001C7340000203A27
687:102AE0000000E6002BCCF3020001F30432CC00001E
688:102AF00000019316FFDC9313FFFC07880008E00039
689:102B000043689793FFFC20220000E6002BB4F302F9
690:102B100000008316FFDC00000001861A00000000A0
691:102B2000000120320010E2002B4976B10002871A22
692:102B3000000C0000000107380001971A000C871AEA
693:102B4000000CE0002BB4F3020000F302004C9313DE
694:102B5000FFFCC6B4600077350004C7386A008316EE
695:102B6000FFDCC7386000C738300007380010971303
696:102B7000FFFCF3067A289313FFFC9616FFB4078830
697:102B80000008E00126F89793FFFC8616FFB40000CA
698:102B900000010630000120320011E6002BA40000E5
699:102BA0000001F60200008316FFDC00000001961A07
700:102BB0000000F30200019316FFD48316FFD4000037
701:102BC0000001201A0000E6002BD0F302000193164A
702:102BD000FFE48316FFE400000001201A0000E60075
703:102BE0002CEDF6820CABF70432B48316FFD4073811
704:102BF0000001F70532B4F70432B4201A0000E600F1
705:102C00002C2800000001F70432C0F306E030C03A7F
706:102C10003200E6002C2800000001F70432E8000032
707:102C2000000107380001F70532E8F70471C400001D
708:102C30000001203A0000E6002C65F6862C28F704F7
709:102C40002D380000000106380001F6052D387739CF
710:102C50000002F302000A20320044E6002C64B33A7A
711:102C60006802F0052D38F70471D4F68471CC07386A
712:102C70000001C03A6A00E6002C80F70571D4F00527
713:102C800071D4F68471D4F70471D0F00571C4C036E4
714:102C90007200470C0001F68432D00000000120369B
715:102CA0000000E6003391F70571C8F7047198000041
716:102CB0000001203A0000E600333100000001F70473
717:102CC00075EC00000001203A0000E60033300000FF
718:102CD0000001F70475F000000001203A0000E60052
719:102CE000333000000001E0003394F306319CF0051E
720:102CF00032E8F70432C0F6046F5496BA000420326A
721:102D00000000E6002D18F302000CF3020001F305A9
722:102D10006F54E0002D20F7020001F3056F58F70211
723:102D20000000203A0000E6002D34F3062F6CE0008E
724:102D30003444F30532D4F5847A7024940010202EA4
725:102D40000001E600303CF5857AA0F7020001F604A8
726:102D500032C8F7057A70F70432C4F68432C0F6053B
727:102D60007A2C9002FF809002FF38F5847A28073889
728:102D700000249582FF3C9702FF409602FF4487366D
729:102D8000141000000001C738600097361410873611
730:102D90001418000000010738000197361418873610
731:102DA0001418F0056F50F70432B89596FFECC73849
732:102DB0006000F70532B8F70432BCF3062FF8073885
733:102DC0000001F70532BCF70432BCF30532D4F70634
734:102DD0000C3EC07E7400E6002DEC00000001C07EB9
735:102DE0007400E6002DDD00000001F7060C3EC77CF4
736:102DF0007400203A0010E600344400000001F7049B
737:102E000032E4FF820010F5846F5807380001202E4D
738:102E10000021E2002E48F70532E4F7042D38F6864B
739:102E20002C2806380001F6052D38773900022032AB
740:102E30000044E6002E3CB5BA6802F0052D38F302D6
741:102E40000022E0002E4CF3056F58F0056F54F58416
742:102E500032C000000001902E0004872E0000000008
743:102E60000001203A0002E6002F78000000018702EE
744:102E7000FF38032C0EF49316FFCCF7057A689313F2
745:102E8000FFFC9596FFB807880008E00043A09793E1
746:102E9000FFFC8596FFB820220000E6002F340000DA
747:102EA0000001862E0EF80000000120320010E20022
748:102EB0002ED1F302004C872E0F00000000010738CE
749:102EC0000001972E0F00872E0F00E0002F34000026
750:102ED00000019313FFFCF3067A289313FFFC76B1ED
751:102EE0000002C6B4600077350004C7386A00831654
752:102EF000FFCCC7386000C738300007380010971380
753:102F0000FFFC9596FFB89616FFB407880008E0010D
754:102F100026F89793FFFC8616FFB48596FFB8063017
755:102F2000000120320011E6002F3000000001F602FF
756:102F30000000962E0EF8F70432C0F306E030C03AD7
757:102F40003200E6002F7800000001F704E0180000CE
758:102F5000000177B8001E703EFFE1E6002F79000007
759:102F600000010F814000F70479C800000001073814
760:102F70000001F70579C8F70479C8F70471C40000A7
761:102F80000001203A0000E6002FB5F6862C28F70451
762:102F90002D380000000106380001F6052D3877397C
763:102FA0000002F302000A20320044E6002FB4B33AD4
764:102FB0006802F0052D38F70471D4F68471CC073817
765:102FC0000001C03A6A00E6002FD0F70571D4F00581
766:102FD00071D4F68471D4F70471D0F00571C4C03691
767:102FE0007200470C0001F68432D000000001203648
768:102FF0000000E6003391F70571C8F70471980000EE
769:103000000001203A0000E600333100000001F7041F
770:1030100075EC00000001203A0000E60033300000AB
771:103020000001F70475F000000001203A0000E600FE
772:10303000333000000001E0003394F306319CF005CA
773:103040007A889002FF38F0056F509002FF80F704F5
774:1030500032C4F3063228F30532D4F60432C8F684BB
775:103060007A2CF502000007380024F7057A98203200
776:103070000000E600308DF6057A90C02A5A00E6007E
777:1030800033D8C0326A00EE0033D900000001F68464
778:1030900032C0000000018736141000000001C7385C
779:1030A00060009736141087361418000000010738A6
780:1030B00000019736141887361418F70432B8000048
781:1030C0000001C7386000F70532B8F70432BC0000D1
782:1030D000000107380001F70532BCF70432BC20328A
783:1030E0000000E60030FD00000001F70432E0F505C5
784:1030F0007A7007380001E0003100F70532E0F5058D
785:103100007A70F5846F5800000001202E0021E20043
786:103110003144F6862C28F7042D38000000010638CB
787:103120000001F6052D387739000220320044E60010
788:103130003138B5BA6802F0052D38F3020022E000FC
789:103140003148F3056F58F0056F54F58432C0000024
790:103150000001902E0004872E000000000001203A9C
791:103160000002E6003274000000018702FF38032CE1
792:103170000EF49316FFC4F7057A689313FFFC959637
793:10318000FFB807880008E00043A09793FFFC8596EE
794:10319000FFB820220000E600323000000001862E39
795:1031A0000EF80000000120320010E20031CDF302E1
796:1031B000004C872E0F000000000107380001972EF9
797:1031C0000F00872E0F00E000323000000001931343
798:1031D000FFFCF3067A289313FFFC76B10002C6B415
799:1031E000600077350004C7386A008316FFC4C7380B
800:1031F0006000C7383000073800109713FFFC959621
801:10320000FFB89616FFB407880008E00126F89793E8
802:10321000FFFC8616FFB48596FFB806300001203209
803:103220000011E600322C00000001F6020000962E8C
804:103230000EF8F70432C0F306E030C03A3200E60080
805:10324000327400000001F704E0180000000177B8B4
806:10325000001E703EFFE1E6003275000000010F81A4
807:103260004000F70479C80000000107380001F705A5
808:1032700079C8F70479C8F70471C400000001203A46
809:103280000000E60032B1F6862C28F7042D38000045
810:10329000000106380001F6052D3877390002F302E7
811:1032A000000A20320044E60032B0B33A6802F0056A
812:1032B0002D38F70471D4F68471CC07380001C03A78
813:1032C0006A00E60032CCF70571D4F00571D4F684BB
814:1032D00071D4F70471D0F00571C4C0367200470C88
815:1032E0000001F68432D00000000120360000E60024
816:1032F0003391F70571C8F704719800000001203A76
817:103300000000E600333100000001F70475EC000016
818:103310000001203A0000E600333000000001F7040D
819:1033200075F000000001203A0000E600338900003B
820:103330000001F58476F800000001202E0021E20053
821:10334000337CF6862C28F7042D380000000106385F
822:103350000001F6052D387739000220320044E600DE
823:103360003368B5BA6802F0052D38F3020022F30580
824:1033700076F8F3047700E0003380F30576FCF0057F
825:1033800076FCE0003390F0057A78E0003394F306A1
826:10339000319CF3062EE0F30532D4F70471C8000027
827:1033A0000001203A0000E6003444F6862C28F70499
828:1033B0002D380000000106380001F6052D38773958
829:1033C0000002F302000920320044E6003444B33A1C
830:1033D0006802E0003444F0052D38F7047A900000CC
831:1033E0000001C03A6A00EE0033F9C5B40000C738E6
832:1033F0005A00E0003400F7057A90C5B80000F005E7
833:103400007A90F6847A88F7067A2876350003A73210
834:10341000700206B400019716FFEC84A6FFFCF706C5
835:103420007A2CF3047A989482FF3C9302FF409582B1
836:10343000FF44B5B27002F7047A98F6857A88C738E7
837:103440005800F7057A988796FFFC8296FFF80214D9
838:103450000000013C0000000000019293FFFC02907C
839:10346000000822100020F5847A7000000001202E50
840:103470000001E600376CF5857AA0F7020001F6043A
841:1034800032C8F7057A70F70432C4F68432C0F60504
842:103490007A2C9002FF809002FF38F5847A28073852
843:1034A00000249582FF3C9702FF409602FF44873636
844:1034B000141000000001C7386000973614108736DA
845:1034C00014180000000107380001973614188736D9
846:1034D0001418F0056F50F70432B89596FFF4C7380A
847:1034E0006000F70532B8F70432BCF4862FF80738CD
848:1034F0000001F70532BCF70432BCF48532D4F7067C
849:103500000C3EC07E7400E600351C00000001C07E49
850:103510007400E600350D00000001F7060C3EC77C84
851:103520007400203A0010E6003B7000000001F70430
852:1035300032E4FF820010F5846F5807380001202E16
853:103540000021E2003578F70532E4F7042D38F686DD
854:103550002C2806380001F6052D3877390002203274
855:103560000044E600356CB5BA6802F0052D38F482E7
856:103570000022E000357CF4856F58F0056F54F58427
857:1035800032C000000001902E0004872E00000000D1
858:103590000001203A0002E60036A800000001870280
859:1035A000FF3804AC0EF49496FFECF7057A68949318
860:1035B000FFFC9596FFDC07880008E00043A0979386
861:1035C000FFFC8596FFDC20220000E6003664000048
862:1035D0000001862E0EF80000000120320010E200EB
863:1035E0003601F482004C872E0F00000000010738DE
864:1035F0000001972E0F00872E0F00E00036640000B8
865:1036000000019493FFFCF4867A289493FFFC76B132
866:103610000002C6B4600077350004C7386A0084969B
867:10362000FFECC7386000C738480007380010971310
868:10363000FFFC9596FFDC9616FFD807880008E0018E
869:1036400026F89793FFFC8616FFD88596FFDC063098
870:10365000000120320011E600366000000001F60291
871:103660000000962E0EF8F70432C0F486E030C03A1F
872:103670004A00E60036A800000001F704E018000048
873:10368000000177B8001E703EFFE1E60036A9000099
874:1036900000010F814000F70479C8000000010738DD
875:1036A0000001F70579C8F70479C8F70471C4000070
876:1036B0000001203A0000E60036E5F6862C28F704E3
877:1036C0002D380000000106380001F6052D38773945
878:1036D0000002F482000A20320044E60036E4B4BA64
879:1036E0006802F0052D38F70471D4F68471CC0738E0
880:1036F0000001C03A6A00E6003700F70571D4F00512
881:1037000071D4F68471D4F70471D0F00571C4C03659
882:103710007200470C0001F68432D000000001203610
883:103720000000E6003AC1F70571C8F704719800007F
884:103730000001203A0000E6003A6100000001F704B1
885:1037400075EC00000001203A0000E6003A6000003D
886:103750000001F70475F000000001203A0000E600C7
887:103760003A6000000001E0003AC4F486319CF005A4
888:103770007A889002FF38F0056F509002FF80F704BE
889:1037800032C4F4863228F48532D4F60432C8F68482
890:103790007A2CF502000007380024F7057A982032C9
891:1037A0000000E60037BDF6057A90C02A5A00E60010
892:1037B0003B08C0326A00EE003B0900000001F684BD
893:1037C00032C0000000018736141000000001C73825
894:1037D000600097361410873614180000000107386F
895:1037E00000019736141887361418F70432B8000011
896:1037F0000001C7386000F70532B8F70432BC00009A
897:10380000000107380001F70532BCF70432BC203252
898:103810000000E600382D00000001F70432E0F50555
899:103820007A7007380001E0003830F70532E0F5051E
900:103830007A70F5846F5800000001202E0021E2000C
901:103840003874F6862C28F7042D380000000106385D
902:103850000001F6052D387739000220320044E600D9
903:103860003868B5BA6802F0052D38F4820022E0000D
904:103870003878F4856F58F0056F54F58432C0000035
905:103880000001902E0004872E000000000001203A65
906:103890000002E60039A4000000018702FF3804ACF2
907:1038A0000EF49496FFE4F7057A689493FFFC9596DE
908:1038B000FFDC07880008E00043A09793FFFC859693
909:1038C000FFDC20220000E600396000000001862EA7
910:1038D0000EF80000000120320010E20038FDF482F2
911:1038E000004C872E0F000000000107380001972EC2
912:1038F0000F00872E0F00E000396000000001949354
913:10390000FFFCF4867A289493FFFC76B10002C6B4DB
914:10391000600077350004C7386A008496FFE4C73832
915:103920006000C7384800073800109713FFFC9596D1
916:10393000FFDC9616FFD807880008E00126F8979369
917:10394000FFFC8616FFD88596FFDC0630000120328A
918:103950000011E600395C00000001F6020000962E1E
919:103960000EF8F70432C0F486E030C03A4A00E600B0
920:1039700039A400000001F704E0180000000177B846
921:10398000001E703EFFE1E60039A5000000010F8136
922:103990004000F70479C80000000107380001F7056E
923:1039A00079C8F70479C8F70471C400000001203A0F
924:1039B0000000E60039E1F6862C28F7042D380000D7
925:1039C000000106380001F6052D3877390002F4822F
926:1039D000000A20320044E60039E0B4BA6802F0057B
927:1039E0002D38F70471D4F68471CC07380001C03A41
928:1039F0006A00E60039FCF70571D4F00571D4F6844D
929:103A000071D4F70471D0F00571C4C0367200470C50
930:103A10000001F68432D00000000120360000E600EC
931:103A20003AC1F70571C8F704719800000001203A07
932:103A30000000E6003A6100000001F70475EC0000A8
933:103A40000001203A0000E6003A6000000001F7049F
934:103A500075F000000001203A0000E6003AB90000CD
935:103A60000001F58476F800000001202E0021E2001C
936:103A70003AACF6862C28F7042D38000000010638F1
937:103A80000001F6052D387739000220320044E600A7
938:103A90003A98B5BA6802F0052D38F4820022F48510
939:103AA00076F8F4847700E0003AB0F48576FCF0050F
940:103AB00076FCE0003AC0F0057A78E0003AC4F4867B
941:103AC000319CF4862EE0F48532D4F70471C80000EE
942:103AD0000001203A0000E6003B70F6862C28F7042F
943:103AE0002D380000000106380001F6052D38773921
944:103AF0000002F482000920320044E6003B70B4BAB0
945:103B00006802E0003B70F0052D38F7047A90000061
946:103B10000001C03A6A00EE003B29C5B40000C73876
947:103B20005A00E0003B30F7057A90C5B80000F00578
948:103B30007A90F7047A88F6867A2876390003A6B256
949:103B4000680207380001F7057A88F7047A98969694
950:103B5000FFF49682FF3CF4847A98F6867A2CC73874
951:103B600058009482FF409582FF44B5B26802F70581
952:103B70007A988796FFFC8296FFF802140000013CB9
953:103B80000000000000019293FFFC02900008221048
954:103B90000018F5047A88F7067A2CF5847A9076A9CD
955:103BA0000003A6B67002202E0000E6003BCD000008
956:103BB0000001F7047AA000000001C02A7200E600AC
957:103BC0003F18C02E6A00EE003F1900000001F68485
958:103BD00032C0F60432C88736141000000001C7381E
959:103BE000600097361410873614180000000107385B
960:103BF00000019736141887361418F70432B80000FD
961:103C00000001C7386000F70532B8F70432BC000085
962:103C1000000107380001F70532BCF70432BC202E42
963:103C20000000E6003C3DF6820000F70432E0F68535
964:103C30007A7007380001E0003C40F70532E0F505F6
965:103C40007A70F5846F5800000001202E0021E200F8
966:103C50003C84F6862C28F7042D3800000001063835
967:103C60000001F6052D387739000220320044E600C5
968:103C70003C78B5BA6802F0052D38F4820022E000E5
969:103C80003C88F4856F58F0056F54F58432C000000D
970:103C90000001902E0004872E000000000001203A51
971:103CA0000002E6003DB4000000018702FF3804ACCA
972:103CB0000EF49496FFECF7057A689493FFFC9596C2
973:103CC000FFE407880008E00043A09793FFFC859677
974:103CD000FFE420220000E6003D7000000001862E77
975:103CE0000EF80000000120320010E2003D0DF482C9
976:103CF000004C872E0F000000000107380001972EAE
977:103D00000F00872E0F00E0003D700000000194932B
978:103D1000FFFCF4867A289493FFFC76B10002C6B4C7
979:103D2000600077350004C7386A008496FFECC73816
980:103D30006000C7384800073800109713FFFC9596BD
981:103D4000FFE49616FFE007880008E00126F8979345
982:103D5000FFFC8616FFE08596FFE406300001203266
983:103D60000011E6003D6C00000001F6020000962EF6
984:103D70000EF8F70432C0F486E030C03A4A00E6009C
985:103D80003DB400000001F704E0180000000177B81E
986:103D9000001E703EFFE1E6003DB5000000010F810E
987:103DA0004000F70479C80000000107380001F7055A
988:103DB00079C8F70479C8F70471C400000001203AFB
989:103DC0000000E6003DF1F6862C28F7042D380000AF
990:103DD000000106380001F6052D3877390002F4821B
991:103DE000000A20320044E6003DF0B4BA6802F00553
992:103DF0002D38F70471D4F68471CC07380001C03A2D
993:103E00006A00E6003E0CF70571D4F00571D4F68423
994:103E100071D4F70471D0F00571C4C0367200470C3C
995:103E20000001F68432D00000000120360000E600D8
996:103E30003ED1F70571C8F704719800000001203ADF
997:103E40000000E6003E7100000001F70475EC000080
998:103E50000001203A0000E6003E7000000001F70477
999:103E600075F000000001203A0000E6003EC90000A5
1000:103E70000001F58476F800000001202E0021E20008
1001:103E80003EBCF6862C28F7042D38000000010638C9
1002:103E90000001F6052D387739000220320044E60093
1003:103EA0003EA8B5BA6802F0052D38F4820022F485E8
1004:103EB00076F8F4847700E0003EC0F48576FCF005E7
1005:103EC00076FCE0003ED0F0057A78E0003ED4F4863F
1006:103ED000319CF4862EE0F48532D4F70471C80000DA
1007:103EE0000001203A0000E6003F80F6862C28F70407
1008:103EF0002D380000000106380001F6052D3877390D
1009:103F00000002F482000920320044E6003F80B4BA87
1010:103F10006802E0003F80F0052D38F7047A90000039
1011:103F20000001C03A6A00EE003F39C5B40000C7384E
1012:103F30005A00E0003F40F7057A90C5B80000F00550
1013:103F40007A90F7047A88F6867A2876390003A6B242
1014:103F5000680207380001F7057A88F7047A98969680
1015:103F6000FFF49682FF3CF4847A98F6867A2CC73860
1016:103F700058009482FF409582FF44B5B26802F7056D
1017:103F80007A988796FFFC8296FFF802140000013CA5
1018:103F90000000000000019293FFFC02900008221034
1019:103FA0000010F5846F5800000001202E0021E2006F
1020:103FB0003FE4F6862C28F7042D380000000106386F
1021:103FC0000001F6052D387739000220320044E60062
1022:103FD0003FD8B5BA6802F0052D38F5020022E0009E
1023:103FE0003FE8F5056F58F0056F54F58432C00000C6
1024:103FF0000001902E0004872E000000000001203AEE
1025:104000000002E6004114000000018702FF38052C81
1026:104010000EF49516FFF4F7057A689513FFFC959654
1027:10402000FFEC07880008E00043A09793FFFC85960B
1028:10403000FFEC20220000E60040D000000001862EA8
1029:104040000EF80000000120320010E200406DF50281
1030:10405000004C872E0F000000000107380001972E4A
1031:104060000F00872E0F00E00040D0000000019513E4
1032:10407000FFFCF5067A289513FFFC76B10002C6B462
1033:10408000600077350004C7386A008516FFF4C7382A
1034:104090006000C7385000073800109713FFFC959652
1035:1040A000FFEC9616FFE807880008E00126F89793D2
1036:1040B000FFFC8616FFE88596FFEC063000012032F3
1037:1040C0000011E60040CC00000001F6020000962E30
1038:1040D0000EF8F70432C0F506E030C03A5200E600B0
1039:1040E000411400000001F704E0180000000177B857
1040:1040F000001E703EFFE1E6004115000000010F8147
1041:104100004000F70479C80000000107380001F705F6
1042:1041100079C8F70479C8F70471C400000001203A97
1043:104120000000E6004151F6862C28F7042D380000E7
1044:10413000000106380001F6052D3877390002F50236
1045:10414000000A20320044E6004150B53A6802F0050A
1046:104150002D38F70471D4F68471CC07380001C03AC9
1047:104160006A00E600416CF70571D4F00571D4F6845D
1048:1041700071D4F70471D0F00571C4C0367200470CD9
1049:104180000001F68432D00000000120360000E60075
1050:104190004231F70571C8F704719800000001203A18
1051:1041A0000000E60041D100000001F70475EC0000BA
1052:1041B0000001203A0000E60041D000000001F704B1
1053:1041C00075F000000001203A0000E60042290000DE
1054:1041D0000001F58476F800000001202E0021E200A5
1055:1041E000421CF6862C28F7042D3800000001063802
1056:1041F0000001F6052D387739000220320044E60030
1057:104200004208B5BA6802F0052D38F5020022F5051E
1058:1042100076F8F5047700E0004220F50576FCF0051D
1059:1042200076FCE0004230F0057A78E0004234F50692
1060:10423000319CF5062EE0F50532D4F70471C8000074
1061:104240000001203A0000E6004274F6862C28F704AC
1062:104250002D380000000106380001F6052D387739A9
1063:104260000002F502000920320044E6004274B53A2B
1064:104270006802F0052D388796FFFC8296FFF802143D
1065:104280000000013C0000000000019293FFFC02903E
1066:104290000008F70632D49713FFFCF7062EE09713B9
1067:1042A000FFFC07880008E00014F49793FFFCF70672
1068:1042B00032D49713FFFCF7062F6C9713FFFC078887
1069:1042C0000008E00014F49793FFFCF70632D497132C
1070:1042D000FFFCF7062FF89713FFFC07880008E000A3
1071:1042E00014F49793FFFCF70632D49713FFFCF706FC
1072:1042F00030849713FFFC07880008E00014F49793BC
1073:10430000FFFCF70632D49713FFFCF7063110971322
1074:10431000FFFC07880008E00014F49793FFFCF70601
1075:1043200032D49713FFFCF706319C9713FFFC0788E4
1076:104330000008E00014F49793FFFCF70632D49713BB
1077:10434000FFFCF70632289713FFFC07880008E000FF
1078:1043500014F49793FFFC8796FFFC8296FFF80214F3
1079:104360000000013C0000000000019293FFFC02905D
1080:104370000008871600000000000186BA0000873A96
1081:10438000000400000001C0367200440C0001879652
1082:10439000FFFC8296FFF802140004013C00000000BC
1083:1043A00000019293FFFC0290000885960000000037
1084:1043B0000001862E000086AE000420320010E200CC
1085:1043C00043D00000000120360010E20043ED073426
1086:1043D0000001872E000C0000000107380001972E15
1087:1043E000000C872E000CE0004414F4020000C03AD8
1088:1043F0006200E6004411F402000020360010E600DE
1089:1044000044140000000120320000E60044140000C3
1090:104410000001F40200018796FFFC8296FFF8021467
1091:104420000004013C0000000000019293FFFC029098
1092:104430000008F7020001F7053524F7046F44000077
1093:104440000001F7053528F70632F49713FFFCF7064D
1094:1044500035309713FFFC07880008E0001548979354
1095:10446000FFFCF70245049713FFFCF702000D9713BA
1096:10447000FFFCF70632F49713FFFC07880008E00002
1097:10448000161C9793FFFCF7024A049713FFFCF702F0
1098:10449000000F9713FFFCF70633809713FFFC078884
1099:1044A0000008E000161C9793FFFCF7024EEC9713F0
1100:1044B000FFFCF70200089713FFFCF706340C971374
1101:1044C000FFFC07880008E000161C9793FFFCF7022A
1102:1044D00057649713FFFCF70200079713FFFCF706DA
1103:1044E00034989713FFFC07880008E000161C979388
1104:1044F000FFFC8796FFFC8296FFF802140000013C47
1105:104500000000000000019293FFFC029000082210BE
1106:104510000014F70475F800000001203A0000E600DE
1107:10452000452DF68675F8E0004544F7020000F704D3
1108:1045300076040000000177390002C7386800873A26
1109:10454000001800000001203A0000E600455CF70575
1110:104550003548F4863380E00049F0F4853530F704BF
1111:104560006F5400000001203A0000E6004580F4820C
1112:104570000008F4820001F4856F54E0004588F702DA
1113:104580000001F4856F58F7020000203A0000E600B1
1114:1045900045A0F4820004F486340CE00049F0F48570
1115:1045A0003530F6843548F604352CF4B72800073446
1116:1045B0000002F4820001F4BB28008732008CF482F0
1117:1045C00000019736001887320090F4856F509736B7
1118:1045D000000484B200840000000194B6001084B28C
1119:1045E00000880000000194B6001484B6001000009A
1120:1045F000000194B6000884B600140000000194B6CF
1121:10460000000C84B2009800000001F4853554F48257
1122:1046100000019482FF80F5043554F4863498F485C3
1123:1046200035309502FF3885B2000006B4002495822B
1124:10463000FF3C9682FF4087320004F6853550970292
1125:10464000FF4486B20004F005354CF704354095165A
1126:10465000FFF49596FFF4C7386800F7053540F584F8
1127:10466000352886B20004872E141400000001C738D4
1128:104670006800972E14148732008000000001203A51
1129:104680000001EE0049F0F7060C3EC07E7400E60023
1130:1046900046A400000001C07E7400E60046950000BC
1131:1046A0000001F7060C3EC77C7400203A0010E600BB
1132:1046B00049F000000001FF8200108682FF38F704F5
1133:1046C0003558F5846F58F685355407380001202E8B
1134:1046D0000021E2004708F7053558F7042D38F68623
1135:1046E0002C2806380001F6052D38773900022032D3
1136:1046F0000044E60046FCB5BA6802F0052D38F482A5
1137:104700000022E000470CF4856F58F0056F54F684E2
1138:10471000352C0000000187360094C4840000C03AA4
1139:104720004A00E60047710000000186360094F684D6
1140:1047300035540000000176B4FFF0F7043554969626
1141:10474000FFF4473900009716FFF0C6B47000F70475
1142:10475000354877B4000F703EFFE107380024E600CB
1143:104760004769C638600006B40001C7046E00F7331D
1144:104770002800F6843544000000018736000400005C
1145:104780000001203A000FE20047BD073800018736DC
1146:10479000000C00000001073800019736000C873636
1147:1047A000000CE00047D000000001F7043528F68235
1148:1047B000000107380008E0004968F7053544203A51
1149:1047C0000010E60047CC00000001F7020000973619
1150:1047D0000004F704353CF684352807380001F70556
1151:1047E000353CF704353C8736141C000000010738BF
1152:1047F00000019736141CF704760486B6141CF604E0
1153:1048000075FC07380001F684760000000001C03A0C
1154:104810006A00E600481CF7057604F0057604F68485
1155:104820007604F7047608F00575FCC0367200470C74
1156:10483000000120320000E6004881F70575F8F70412
1157:104840007648F4867218C03A4A00470C0001203AB4
1158:104850000000E6004881F6862C28F7042D38000079
1159:10486000000106380001F6052D3877390002F48280
1160:10487000000E20320044E6004880B4BA6802F00519
1161:104880002D38F5020000202A0002EE004968F68269
1162:104890000000F68435280000000187360000000083
1163:1048A0000001203A0002E600493C05B40008959357
1164:1048B000FFFC9516FFEC9596FFE89696FFE40788B7
1165:1048C0000008E0005EDC9793FFFC8516FFEC859600
1166:1048D000FFE88696FFE420220000E600492CF7025C
1167:1048E00000008636000C000000012032000FE200BC
1168:1048F000491100000001873600140000000107384C
1169:1049000000019736001487360014E000492CF702A6
1170:10491000000076B10002C6B4600077350005C738E4
1171:104920006A00C738600007380010C72C7000203AB2
1172:104930000000E60047A8F705352CF6843528F70473
1173:104940006F4C00000001C0367200E600495C07347D
1174:104950001494F4846F44E0004960F4853528F70529
1175:104960003528E00048840528000120360000E600D4
1176:1049700049A1F6862C28F7042D38000000010638DE
1177:104980000001F6052D3877390002F482000D20323F
1178:104990000044E60049A8B4BA6802E00049A8F0055E
1179:1049A0002D38F4820001F4853524F6843528F70487
1180:1049B0006F44F48632F4C0367200E60049F0F485A4
1181:1049C0003530F704E0180000000177B8001F703E92
1182:1049D000FFE1E60049F1000000010F814000F7040B
1183:1049E00079C80000000107380001F70579C8F7040D
1184:1049F00079C88796FFFC8296FFF802140000013CFC
1185:104A00000000000000019293FFFC029000082210B9
1186:104A10000014F70475F800000001203A0000E600D9
1187:104A20004A2DF68675F8E0004A40F6820000F70449
1188:104A300076040000000177390002C738680086BAA2
1189:104A40000018F7046F5400000001203A0000E6004F
1190:104A50004A64F6853548F4820001F4856F54E0001D
1191:104A60004A70F7020001F4820008F4856F58F702DB
1192:104A70000000203A0000E6004A88F4820004F48630
1193:104A8000340CE0004ED8F4853530F6843548F60411
1194:104A9000352CF4B7280007340002F4820001F4BB7F
1195:104AA00028008732008CF482000197360018873284
1196:104AB0000090F4856F509736000484B200840000A3
1197:104AC000000194B6001084B200880000000194B682
1198:104AD000001484B600100000000194B6000884B6EB
1199:104AE00000140000000194B6000C84B2009800008D
1200:104AF0000001F4853554F48200019482FF80F504AE
1201:104B00003554F4863498F48535309502FF3885B2F3
1202:104B1000000006B400249582FF3C9682FF40873255
1203:104B20000004F68535509702FF4486B20004F00574
1204:104B3000354CF70435409516FFF49596FFF4C738C9
1205:104B40006800F7053540F584352886B20004872EC5
1206:104B5000141400000001C7386800972E141487321F
1207:104B6000008000000001203A0001EE004ED8F70658
1208:104B70000C3EC07E7400E6004B8C00000001C07E3D
1209:104B80007400E6004B7D00000001F7060C3EC77C78
1210:104B90007400203A0010E6004ED800000001FF82A9
1211:104BA00000108682FF38F7043558F5846F58F68573
1212:104BB000355407380001202E0021E2004BF0F705A4
1213:104BC0003558F7042D38F6862C2806380001F605EE
1214:104BD0002D387739000220320044E6004BE4B5BAA4
1215:104BE0006802F0052D38F4820022E0004BF4F485D1
1216:104BF0006F58F0056F54F684352C0000000187369D
1217:104C00000094C4840000C03A4A00E6004C590000F9
1218:104C1000000186360094F68435540000000176B415
1219:104C2000FFF0F70435549696FFF4473900009716C5
1220:104C3000FFF0C6B47000F704354877B4000F703E3B
1221:104C4000FFE107380024E6004C51C638600006B486
1222:104C50000001C7046E00F7332800F68435440000D5
1223:104C600000018736000400000001203A000FE20036
1224:104C70004CA5073800018736000C000000010738FA
1225:104C800000019736000C8736000CE0004CB800009D
1226:104C90000001F7043528F682000107380008E0001B
1227:104CA0004E50F7053544203A0010E6004CB40000A1
1228:104CB0000001F702000097360004F704353CF68443
1229:104CC000352807380001F705353CF704353C8736B1
1230:104CD000141C00000001073800019736141CF7046B
1231:104CE000760486B6141CF60475FC07380001F684B9
1232:104CF000760000000001C03A6A00E6004D04F705A6
1233:104D00007604F0057604F6847604F7047608F00558
1234:104D100075FCC0367200470C000120320000E6002E
1235:104D20004D69F70575F8F7047648F4867218C03AAD
1236:104D30004A00470C0001203A0000E6004D69F68663
1237:104D40002C28F7042D380000000106380001F60574
1238:104D50002D3877390002F482000E20320044E6003C
1239:104D60004D68B4BA6802F0052D38F5020000202A1B
1240:104D70000002EE004E50F6820000F6843528000056
1241:104D800000018736000000000001203A0002E60022
1242:104D90004E2405B400089593FFFC9516FFEC9596FC
1243:104DA000FFE89696FFE407880008E0005EDC979332
1244:104DB000FFFC8516FFEC8596FFE88696FFE420222F
1245:104DC0000000E6004E14F70200008636000C0000DA
1246:104DD00000012032000FE2004DF90000000187368B
1247:104DE00000140000000107380001973600148736D0
1248:104DF0000014E0004E14F702000076B10002C6B4C1
1249:104E0000600077350005C7386A00C738600007388A
1250:104E10000010C72C7000203A0000E6004C90F70507
1251:104E2000352CF6843528F7046F4C00000001C0369D
1252:104E30007200E6004E4407341494F4846F44E0009A
1253:104E40004E48F4853528F7053528E0004D6C0528D7
1254:104E5000000120360000E6004E89F6862C28F70473
1255:104E60002D380000000106380001F6052D3877398D
1256:104E70000002F482000D20320044E6004E90B4BAE5
1257:104E80006802E0004E90F0052D38F4820001F485B0
1258:104E90003524F6843528F7046F44F48632F4C0369E
1259:104EA0007200E6004ED8F4853530F704E0180000B3
1260:104EB000000177B8001F703EFFE1E6004ED9000008
1261:104EC00000010F814000F70479C800000001073895
1262:104ED0000001F70579C8F70479C88796FFFC829628
1263:104EE000FFF802140000013C000000000001929352
1264:104EF000FFFC0290000822100014F6843548F604E6
1265:104F0000352CF4820004F4B7280007340002F48240
1266:104F10000001F4BB28008732008CF4820001973630
1267:104F2000001887320090F4856F509736000484B2E1
1268:104F300000840000000194B6001084B200880000D4
1269:104F4000000194B6001484B600100000000194B66D
1270:104F5000000884B600140000000194B6000C84B26E
1271:104F6000009800000001F4853554F4820001948219
1272:104F7000FF80F5043554F4863498F4853530950275
1273:104F8000FF3885B2000006B400249582FF3C96826B
1274:104F9000FF4087320004F68535509702FF4486B201
1275:104FA0000004F005354CF70435409516FFF495964E
1276:104FB000FFF4C7386800F7053540F584352886B218
1277:104FC0000004872E141400000001C7386800972ED3
1278:104FD00014148732008000000001203A0001EE0026
1279:104FE000534CF7060C3EC07E7400E60050000000F3
1280:104FF0000001C07E7400E6004FF100000001F706DA
1281:105000000C3EC77C7400203A0010E600534C0000B0
1282:105010000001FF8200108682FF38F7043558F584BE
1283:105020006F58F685355407380001202E0021E20024
1284:105030005064F7053558F7042D38F6862C280638C5
1285:105040000001F6052D387739000220320044E600D1
1286:105050005058B5BA6802F0052D38F4820022E000FD
1287:105060005068F4856F58F0056F54F684352C0000B5
1288:10507000000187360094C4840000C03A4A00E6006C
1289:1050800050CD0000000186360094F68435540000AF
1290:10509000000176B4FFF0F70435549696FFF44739D3
1291:1050A00000009716FFF0C6B47000F704354877B4D7
1292:1050B000000F703EFFE107380024E60050C5C638F7
1293:1050C000600006B40001C7046E00F7332800F684C0
1294:1050D0003544000000018736000400000001203A3A
1295:1050E000000FE2005119073800018736000C00005C
1296:1050F0000001073800019736000C8736000CE000ED
1297:10510000512C00000001F7043528F6820001073811
1298:105110000008E00052C4F7053544203A0010E600CC
1299:10512000512800000001F702000097360004F70440
1300:10513000353CF684352807380001F705353CF7047F
1301:10514000353C8736141C00000001073800019736F3
1302:10515000141CF704760486B6141CF60475FC073894
1303:105160000001F684760000000001C03A6A00E60003
1304:105170005178F7057604F0057604F6847604F70492
1305:105180007608F00575FCC0367200470C000120322D
1306:105190000000E60051DDF70575F8F7047648F4865F
1307:1051A0007218C03A4A00470C0001203A0000E6009D
1308:1051B00051DDF6862C28F7042D3800000001063852
1309:1051C0000001F6052D3877390002F482000E2032F6
1310:1051D0000044E60051DCB4BA6802F0052D38F5024F
1311:1051E0000000202A0002EE0052C4F6820000F6847D
1312:1051F0003528000000018736000000000001203A39
1313:105200000002E600529805B400089593FFFC95163D
1314:10521000FFEC9596FFE89696FFE407880008E0000B
1315:105220005EDC9793FFFC8516FFEC8596FFE886967B
1316:10523000FFE420220000E6005288F70200008636D4
1317:10524000000C000000012032000FE200526D00004F
1318:10525000000187360014000000010738000197366E
1319:10526000001487360014E0005288F702000076B17F
1320:105270000002C6B4600077350005C7386A00C73839
1321:10528000600007380010C72C7000203A0000E600CC
1322:105290005104F705352CF6843528F7046F4C0000CF
1323:1052A0000001C0367200E60052B807341494F4844A
1324:1052B0006F44E00052BCF4853528F7053528E0003E
1325:1052C00051E00528000120360000E60052FDF68678
1326:1052D0002C28F7042D380000000106380001F605DF
1327:1052E0002D3877390002F482000D20320044E600A8
1328:1052F0005304B4BA6802E0005304F0052D38F48278
1329:105300000001F4853524F6843528F7046F44F486CB
1330:1053100032F4C0367200E600534CF4853530F704A1
1331:10532000E0180000000177B8001F703EFFE1E600C2
1332:10533000534D000000010F814000F70479C80000C0
1333:10534000000107380001F70579C8F70479C8879686
1334:10535000FFFC8296FFF802140000013C00000000F0
1335:1053600000019293FFFC0290000822100014F484C4
1336:105370003554F684354CF584352C9482FF3876B557
1337:105380000003A52E6802000000019502FF3CF38493
1338:105390003550C6AC68009382FF4087360004000099
1339:1053A00000019702FF4486360004F70435400000F0
1340:1053B0000001C7386000F7053540F604352886B689
1341:1053C0000004873214149496FFF4C73868009732AB
1342:1053D0001414872E008000000001203A0001EE0026
1343:1053E00057509516FFF4F7060C3EC07E7400E60099
1344:1053F000540400000001C07E7400E60053F5000074
1345:105400000001F7060C3EC77C7400203A0010E6004D
1346:10541000575000000001FF8200108682FF38F70419
1347:105420003558F5846F58F685355407380001202E1D
1348:105430000021E2005468F7053558F7042D38F68648
1349:105440002C2806380001F6052D3877390002203265
1350:105450000044E600545CB5BA6802F0052D38F382CA
1351:105460000022E000546CF3856F58F0056F54F68409
1352:10547000352C0000000187360094C3840000C03A38
1353:105480003A00E60054D10000000186360094F6840C
1354:1054900035540000000176B4FFF0F70435549696B9
1355:1054A000FFF4473900009716FFF0C6B47000F70408
1356:1054B000354877B4000F703EFFE107380024E6005E
1357:1054C00054C9C638600006B40001C7046E00F73343
1358:1054D0002800F684354400000001873600040000EF
1359:1054E0000001203A000FE200551D07380001873601
1360:1054F000000C00000001073800019736000C8736C9
1361:10550000000CE000553000000001F7043528F68259
1362:10551000000107380008E00056C8F7053544203A76
1363:105520000010E600552C00000001F702000097363D
1364:105530000004F704353CF684352807380001F705E8
1365:10554000353CF704353C8736141C00000001073851
1366:1055500000019736141CF704760486B6141CF60472
1367:1055600075FC07380001F684760000000001C03A9F
1368:105570006A00E600557CF7057604F0057604F684AB
1369:105580007604F7047608F00575FCC0367200470C07
1370:10559000000120320000E60055E1F70575F8F70438
1371:1055A0007648F3867218C03A3A00470C0001203A58
1372:1055B0000000E60055E1F6862C28F7042D3800009F
1373:1055C000000106380001F6052D3877390002F38214
1374:1055D000000E20320044E60055E0B3BA6802F00540
1375:1055E0002D38F5020000202A0002EE0056C8F6828F
1376:1055F0000000F68435280000000187360000000016
1377:105600000001203A0002E600569C05B4000895937C
1378:10561000FFFC9516FFEC9596FFE89696FFE4078849
1379:105620000008E0005EDC9793FFFC8516FFEC859692
1380:10563000FFE88696FFE420220000E600568CF70281
1381:1056400000008636000C000000012032000FE2004E
1382:105650005671000000018736001400000001073871
1383:1056600000019736001487360014E000568CF702CC
1384:10567000000076B10002C6B4600077350005C73877
1385:105680006A00C738600007380010C72C7000203A45
1386:105690000000E6005508F705352CF6843528F70498
1387:1056A0006F4C00000001C0367200E60056BC0734A3
1388:1056B0001494F3846F44E00056C0F3853528F70551
1389:1056C0003528E00055E40528000120360000E600FA
1390:1056D0005701F6862C28F7042D3800000001063803
1391:1056E0000001F6052D3877390002F382000D2032D3
1392:1056F0000044E6005708B3BA6802E0005708F00516
1393:105700002D38F3820001F3853524F6843528F7041B
1394:105710006F44F38632F4C0367200E6005750F385CA
1395:105720003530F704E0180000000177B8001F703E24
1396:10573000FFE1E6005751000000010F814000F7042F
1397:1057400079C80000000107380001F70579C8F7049F
1398:1057500079C88796FFFC8296FFF802140000013C8E
1399:105760000000000000019293FFFC0290000822104C
1400:1057700000148702FF38F384352CF7053554871E53
1401:105780000080F504354C27380001C02A7200E6007D
1402:105790005A4C00000001F5846F5800000001202ED3
1403:1057A0000021E20057D8F6862C28F7042D38000097
1404:1057B000000106380001F6052D3877390002203245
1405:1057C0000044E60057CCB5BA6802F0052D38F30264
1406:1057D0000022E00057DCF3056F58F0056F54F684A3
1407:1057E000352C0000000187360094C3040000C03A45
1408:1057F0003200E60058410000000186360094F6842D
1409:1058000035540000000176B4FFF0F7043554969645
1410:10581000FFF4473900009716FFF0C6B47000F70494
1411:10582000354877B4000F703EFFE107380024E600EA
1412:105830005839C638600006B40001C7046E00F7335B
1413:105840002800F6843544000000018736000400007B
1414:105850000001203A000FE200588D0738000187361A
1415:10586000000C00000001073800019736000C873655
1416:10587000000CE00058A000000001F7043528F68273
1417:10588000000107380008E0005A38F7053544203A8F
1418:105890000010E600589C00000001F7020000973657
1419:1058A0000004F704353CF684352807380001F70575
1420:1058B000353CF704353C8736141C000000010738DE
1421:1058C00000019736141CF704760486B6141CF604FF
1422:1058D00075FC07380001F684760000000001C03A2C
1423:1058E0006A00E60058ECF7057604F0057604F684C5
1424:1058F0007604F7047608F00575FCC0367200470C94
1425:10590000000120320000E6005951F70575F8F70450
1426:105910007648F3067218C03A3200470C0001203A6C
1427:105920000000E6005951F6862C28F7042D380000B7
1428:10593000000106380001F6052D3877390002F30220
1429:10594000000E20320044E6005950B33A6802F005D8
1430:105950002D38F5020000202A0002EE005A38F682A7
1431:105960000000F684352800000001873600000000A2
1432:105970000001203A0002E6005A0C05B40008959395
1433:10598000FFFC9516FFEC9596FFE89696FFE40788D6
1434:105990000008E0005EDC9793FFFC8516FFEC85961F
1435:1059A000FFE88696FFE420220000E60059FCF7029B
1436:1059B00000008636000C000000012032000FE200DB
1437:1059C00059E100000001873600140000000107388B
1438:1059D00000019736001487360014E00059FCF702E6
1439:1059E000000076B10002C6B4600077350005C73804
1440:1059F0006A00C738600007380010C72C7000203AD2
1441:105A00000000E6005878F705352CF6843528F704B1
1442:105A10006F4C00000001C0367200E6005A2C0734BB
1443:105A20001494F3046F44E0005A30F3053528F70569
1444:105A30003528E00059540528000120360000E60012
1445:105A40005DC4F3020001E0005DF000000001772971
1446:105A50000003C71C7000873A00040528000176A9DE
1447:105A60000003F4843554F60435509482FF38A41EA4
1448:105A70006802C63070009402FF3C9602FF40C69C4C
1449:105A8000680087360004000000019702FF4485B6D5
1450:105A90000004F704354000000001C7385800F7053E
1451:105AA000354085B60004F505354CF6843528F605F5
1452:105AB0003550873614149496FFF4C738580097363B
1453:105AC0001414871E008000000001203A0001EE003F
1454:105AD0005E3C9416FFF4F7060C3EC07E7400E600B0
1455:105AE0005AF400000001C07E7400E6005AE5000090
1456:105AF0000001F7060C3EC77C7400203A0010E60057
1457:105B00005E3C00000001FF8200108682FF38F7042F
1458:105B10003558F5846F58F685355407380001202E26
1459:105B20000021E2005B58F7053558F7042D38F6865A
1460:105B30002C2806380001F6052D387739000220326E
1461:105B40000044E6005B4CB5BA6802F0052D38F3025C
1462:105B50000022E0005B5CF3056F58F0056F54F6849B
1463:105B6000352C0000000187360094C3040000C03AC1
1464:105B70003200E6005BC10000000186360094F68426
1465:105B800035540000000176B4FFF0F70435549696C2
1466:105B9000FFF4473900009716FFF0C6B47000F70411
1467:105BA000354877B4000F703EFFE107380024E60067
1468:105BB0005BB9C638600006B40001C7046E00F73355
1469:105BC0002800F684354400000001873600040000F8
1470:105BD0000001203A000FE2005C0D07380001873613
1471:105BE000000C00000001073800019736000C8736D2
1472:105BF000000CE0005C2000000001F7043528F6826C
1473:105C0000000107380008E0005DB8F7053544203A88
1474:105C10000010E6005C1C00000001F702000097364F
1475:105C20000004F704353CF684352807380001F705F1
1476:105C3000353CF704353C8736141C0000000107385A
1477:105C400000019736141CF704760486B6141CF6047B
1478:105C500075FC07380001F684760000000001C03AA8
1479:105C60006A00E6005C6CF7057604F0057604F684BD
1480:105C70007604F7047608F00575FCC0367200470C10
1481:105C8000000120320000E6005CD1F70575F8F7044A
1482:105C90007648F3067218C03A3200470C0001203AE9
1483:105CA0000000E6005CD1F6862C28F7042D380000B1
1484:105CB000000106380001F6052D3877390002F3029D
1485:105CC000000E20320044E6005CD0B33A6802F005D2
1486:105CD0002D38F5020000202A0002EE005DB8F682A1
1487:105CE0000000F6843528000000018736000000001F
1488:105CF0000001203A0002E6005D8C05B4000895938F
1489:105D0000FFFC9516FFEC9596FFE89696FFE4078852
1490:105D10000008E0005EDC9793FFFC8516FFEC85969B
1491:105D2000FFE88696FFE420220000E6005D7CF70293
1492:105D300000008636000C000000012032000FE20057
1493:105D40005D61000000018736001400000001073883
1494:105D500000019736001487360014E0005D7CF702DE
1495:105D6000000076B10002C6B4600077350005C73880
1496:105D70006A00C738600007380010C72C7000203A4E
1497:105D80000000E6005BF8F705352CF6843528F704AB
1498:105D90006F4C00000001C0367200E6005DAC0734B5
1499:105DA0001494F3046F44E0005DB0F3053528F70563
1500:105DB0003528E0005CD40528000120360000E6000C
1501:105DC0005DF1F3020001F7042D38F6862C28063821
1502:105DD0000001F6052D3877390002F302000D20325C
1503:105DE0000044E6005DF4B33A6802E0005DF4F005BB
1504:105DF0002D38F3053524F6843528F7046F44F3066F
1505:105E000032F4C0367200E6005E3CF3053530F7042C
1506:105E1000E0180000000177B8001F703EFFE1E600C7
1507:105E20005E3D000000010F814000F70479C80000CA
1508:105E3000000107380001F70579C8F70479C887968B
1509:105E4000FFFC8296FFF802140000013C00000000F5
1510:105E500000019293FFFC02900008F706353097137B
1511:105E6000FFFCF70632F49713FFFC07880008E000F8
1512:105E700014F49793FFFCF70635309713FFFCF706F1
1513:105E800033809713FFFC07880008E00014F4979311
1514:105E9000FFFCF70635309713FFFCF706340C971319
1515:105EA000FFFC07880008E00014F49793FFFCF70656
1516:105EB00035309713FFFCF70634989713FFFC0788DB
1517:105EC0000008E00014F49793FFFC8796FFFC82968D
1518:105ED000FFF802140000013C000000000001929352
1519:105EE000FFFC0290000886160000000000018732C7
1520:105EF000000400000001203A000F86B20000C538FF
1521:105F00000000EE005F2CC5B400002036000FEE004C
1522:105F10005F2C00000001203A0000EC005F2D000023
1523:105F2000000120360000EC005F48000000018732CD
1524:105F3000000C00000001073800019732000C873286
1525:105F4000000CE0005F50F4020000C02A5A00440C2C
1526:105F500000018796FFFC8296FFF802140004013CC2
1527:105F6000000000000001000000009293FFFC02907E
1528:105F70000008F68635609693FFFCF68642309693CD
1529:105F8000FFFC07880008E00015489793FFFCF682A5
1530:105F900066F89693FFFCF78200179793FFFCF6864E
1531:105FA00035609693FFFC07880008E000161C979365
1532:105FB000FFFCF68269809693FFFCF78200189793A6
1533:105FC000FFFCF68635609693FFFC07880008E0002A
1534:105FD000161C9793FFFCF6826B509693FFFCF7829A
1535:105FE00000169793FFFCF68635609693FFFC0788B2
1536:105FF0000008E000161C9793FFFCF68261789693E8
1537:10600000FFFCF782001F9793FFFCF686356096939E
1538:10601000FFFC07880008E000161C9793FFFCF6823F
1539:10602000627C9693FFFCF78200209793FFFCF68634
1540:1060300035609693FFFC07880008E000161C9793D4
1541:10604000FFFCF68266F89693FFFCF78200179793A1
1542:10605000FFFCF68635EC9693FFFC07880008E0000D
1543:10606000161C9793FFFCF68269809693FFFCF782DB
1544:1060700000189793FFFCF68635EC9693FFFC078893
1545:106080000008E000161C9793FFFCF6826B50969375
1546:10609000FFFCF78200169793FFFCF68635EC96938B
1547:1060A000FFFC07880008E000161C9793FFFCF682AF
1548:1060B00061789693FFFCF782001F9793FFFCF686AA
1549:1060C00035EC9693FFFC07880008E000161C9793B8
1550:1060D000FFFCF682627C9693FFFCF7820020979388
1551:1060E000FFFCF68635EC9693FFFC07880008E0007D
1552:1060F000161C9793FFFCF704E02800000001203AEB
1553:106100000000E600611500000001F704E028E0004F
1554:10611000611877390002F70200F0F7054228F70608
1555:10612000408AF03B2800F706408CF03B2800F7023D
1556:106130000000F7057AC0F7057AB8F7057AB0F705D9
1557:106140007AC8F682C3509693FFFCF68200169693A7
1558:10615000FFFCF68642309693FFFC07880008E001BA
1559:106160001EC09793FFFC8796FFFC8296FFF80214EF
1560:106170000000013C0000000000019293FFFC02902F
1561:106180000008F6046F340000000120320000E60031
1562:1061900061ED76B1001E8732000076B4FFE5C738A6
1563:1061A0006FC07739FFF0203A0007E60061EC06B0D7
1564:1061B00000028736000076B5001E76B4FFE5C738CA
1565:1061C0006FC07739FFF0203A0001E60061ECF50678
1566:1061D00035ECF704423000000001C03A5200470C91
1567:1061E0000001203A0000E6006211F5820000F70489
1568:1061F00042A0F60642A276B1001E76B4FFE5C7388B
1569:106200006FC07739FFF007380001E0006268F733AC
1570:1062100028008732000400000001F705E00086B284
1571:106220000008203A0000E600623CF685E0042036D3
1572:106230000000E6006240202E0000F5820001202EC2
1573:106240000000E6006265F60642A2F70442A076B1BD
1574:10625000001E76B4FFE5C7386FC07739FFF0073806
1575:106260000001F7332800F00542288796FFFC82964C
1576:10627000FFF802140000013C0000000000019293AE
1577:10628000FFFC02900008F704423CF6846F340738A4
1578:10629000000120360000E60062B1F705423C873677
1579:1062A0000000F59E0002C03A5A00E60062BDF58685
1580:1062B00035ECF70442A0E00062DCF60642A2F704E7
1581:1062C000423000000001C03A5A00470C0001203A59
1582:1062D0000000E60062F9F60642A4F70442A476B193
1583:1062E000001E76B4FFE5C7386FC07739FFF0073876
1584:1062F0000001E000630CF73328009693FFFC078849
1585:106300000008E00063209793FFFCF0054228879681
1586:10631000FFFC8296FFF802140000013C0000000020
1587:1063200000019293FFFC02900008221000208316C7
1588:10633000000000000001871A001800000001203A48
1589:106340000000E600636CF7020000839A001C000066
1590:106350000001F3857AC0849A0014F7057AC8F485A1
1591:106360007AB0F7057AB88316000000000001869A1B
1592:106370000014F7047AB000000001C0367200E60095
1593:1063800063D0F6020000869A001CF7047AC0000071
1594:106390000001C0367200E60063D000000001869A5A
1595:1063A0000018F7047AB800000001C0367200E60059
1596:1063B00063D000000001869A0020F7047AC800002C
1597:1063C0000001C7386800203A0064EE0063D920322B
1598:1063D0000000F602000120320000E60064580000D0
1599:1063E00000018396000000000001871E00180000D5
1600:1063F0000001203A0000E600643CF7020000F705C7
1601:106400004080F7054084F6846E50F482FFFF831EBF
1602:10641000000CF4854F5493360010839E0010849630
1603:10642000000093B6001484A600080000000194B692
1604:106430001DDCF6820064F6854A98F7054A9C8316AF
1605:10644000000000000001871A002000000001203A2F
1606:106450000000EE00647CF3820000F70442A4F6061C
1607:1064600042A676B1001E76B4FFE5C7386FC0773913
1608:10647000FFF007380001E00066E4F7332800939648
1609:10648000FFF484160000F48642C89496FFECF302F1
1610:10649000000C9316FFE4839600008496FFF4871E99
1611:1064A000002000000001C0267200EC006648F38660
1612:1064B0004A9884A200248316FFE4C5040000B49A1D
1613:1064C0003802C7183800832200288396FFF4849688
1614:1064D000FFE4933A000493BA0008F604E000F306E0
1615:1064E0004A98A6A63002F5820000C0326A00E60093
1616:1064F0006510C6380000F684E0048732000400000E
1617:106500000001C0367200E6006514202E0000F582FE
1618:106510000001202E0000E600652100000001F502C8
1619:106520000000F684E0008732000000000001C03661
1620:106530007200E200655CF5820000C0367200E60081
1621:106540006564202E0000F684E00487320004000019
1622:106550000001C0367200E2006565202E0000F58261
1623:106560000001202E0000E6006575202A0000F502DB
1624:106570000001202A0000E6006588000000018396E3
1625:10658000FFF400000001F3854F548722002C76A110
1626:10659000001E76B4FFE505A0002E762D001E763095
1627:1065A000FFE5F48200009496FFDC8316FFEC2026C2
1628:1065B0000007C7386FC07738FFF0F71B2800872E19
1629:1065C000000006980002C73867C07738FFF0E20085
1630:1065D000661CF73728008516FFEC8596FFDC000067
1631:1065E0000001C72C400086BA0030062800040528A8
1632:1065F000000205AC00028396FFDC7739001E773875
1633:10660000FFE5039C00019396FFDC201E0007C6B443
1634:1066100077C076B4FFF0E20065E1F6B3280004200D
1635:10662000001C8496FFEC8316FFE48396FFF404A419
1636:1066300000149496FFEC0318000C9316FFE4039CDF
1637:106640000001E00064949396FFF48496000000003B
1638:1066500000018726002000000001F7054A9C85A65E
1639:106660000020F7047AB80000000107380001F705A0
1640:106670007AB8F7047AB8F6847AC886260018C6B4C1
1641:1066800058008726001C0000000127380001C03296
1642:106690007200470C0001203A0000E60066E5F6852E
1643:1066A0007AC883260008F7046E50F3053B6483A67E
1644:1066B0000008F682000093BA1DDC84A6000C831645
1645:1066C000000094BA0010831A0010F6857AC8933A35
1646:1066D0000014F7020001F7054084F6857AC0F685BC
1647:1066E0007AB8F6857AB08796FFFC8296FFF8021496
1648:1066F0000004013C0000000000019293FFFC0290A6
1649:10670000000822100008F3846F3400000001871E87
1650:106710000018F684E01C00000001C0367200EC0096
1651:106720006729F7020001F7020000203A0000E600A6
1652:1067300067E8F5820001F704E01C869E001800005F
1653:106740000001C03A6A00470C0001203A0000E60050
1654:1067500067E9C5840000869E0010F704E000F60299
1655:106760000000C0367200E6006788051C0010869E97
1656:106770000014F704E00400000001C0367200E600D7
1657:10678000678C20320000F602000120320000E60093
1658:10679000679900000001F582000086AA0000F70456
1659:1067A000E00000000001C0367200E20067D4F6028B
1660:1067B0000000C0367200E60067DC2032000086AAC6
1661:1067C0000004F704E00400000001C0367200E2009B
1662:1067D00067DD20320000F602000120320000E600F2
1663:1067E00067ED202E0000F5820001202E0000E6005B
1664:1067F0006810F606429CF704429C76B1001E76B4FF
1665:10680000FFE5C7386FC07739FFF007380001F7336D
1666:106810002800F70475F475ACFFE1203A0000E600AB
1667:1068200068459596FFF4F7044298F606429876B1CB
1668:10683000001E76B4FFE5C7386FC07739FFF0073820
1669:106840000001F7332800871E0020041C002076A1D9
1670:10685000001E76B4FFE5C7386FC07739FFF0203AE5
1671:106860000008EE0068C4F3061554F5020000059C0C
1672:106870000022C4AC0000F60200018722000076A1CD
1673:10688000001E76B4FFE5C7386FC07739FFF0C02A25
1674:106890007200EC0068C0C6A46000A726600276B54E
1675:1068A000001E76B4FFE505280001C7386FC07739B0
1676:1068B000FFE8F72F680005AC0001E00068780630BB
1677:1068C0000002F30615549313FFFCF704E0240000C4
1678:1068D00000019713FFFCF704E01C00000001971370
1679:1068E000FFFCF306E0009313FFFC9393FFFCF3021D
1680:1068F00000019313FFFC07880008E000EE64979303
1681:10690000FFFC20220000E6006928F606429EF704FC
1682:10691000429C76B1001E76B4FFE5C7386FC0773968
1683:10692000FFF007380001F73328008316FFF400005A
1684:106930000001201A0000E600696CF30635ECF7044C
1685:10694000423000000001C03A3200470C0001203AFA
1686:106950000000E600696DF0054228F3063560F30596
1687:10696000423007880008E000789C9793FFFC8796E8
1688:10697000FFFC8296FFF802140000013C00000000BA
1689:1069800000019293FFFC0290000822100004F5041D
1690:106990006F34F7044240862A001807380001F68455
1691:1069A000E01CF7054240C0366200EC0069B5F70212
1692:1069B0000001F7020000203A0000E6006A80F702BA
1693:1069C0000001F704E01C86AA001800000001C03A8C
1694:1069D0006A00470C0001203A0000E6006A7DC58489
1695:1069E000000086AA0010F704E000F6020000C0369E
1696:1069F0007200E6006A1404A8001086AA0014F704C6
1697:106A0000E00400000001C0367200E6006A1820327F
1698:106A10000000F602000120320000E6006A250000B6
1699:106A20000001F582000086A60000F704E0000000E7
1700:106A30000001C0367200E2006A60F6020000C03653
1701:106A40007200E6006A682032000086A60004F7049F
1702:106A5000E00400000001C0367200E2006A692032E2
1703:106A60000000F602000120320000E6006A81C72C17
1704:106A70000000F5820001E0006A80C72C0000C70416
1705:106A80000000203A0000EE006B3DF686408AF704D5
1706:106A9000408876B5001E76B4FFE5C7386FC07738FA
1707:106AA000FFF0203A0000E6006B3CF6820000F6851D
1708:106AB0004080F68540849693FFFC9693FFFCF70494
1709:106AC000E01C000000019713FFFCF386E0009393A5
1710:106AD000FFFC9513FFFCF38200029393FFFC969654
1711:106AE000FFF407880008E000EE649793FFFCF405CC
1712:106AF00040848696FFF4F7046E50F38635ECF685F5
1713:106B00004090F6854094873A1DDCF6854228F705CB
1714:106B10003B64F7044230F4054080C03A3A00470C29
1715:106B20000001203A0000E6006B3DF3863560F385F6
1716:106B3000423007880008E000789C9793FFFC879616
1717:106B4000FFFC8296FFF802140000013C00000000E8
1718:106B500000019293FFFC02900008F4864230949367
1719:106B6000FFFC07880008E00120E49793FFFC202247
1720:106B70000000E6006DD9F5820000F704408CF606AF
1721:106B8000408C7631001EF68442287630FFE506B44C
1722:106B90000001C73867C07738FFF0203A0000E600F0
1723:106BA0006BC8F6854228F7044088F686408A76B599
1724:106BB000001E76B4FFE5C7386FC07738FFF0203A83
1725:106BC0000000E6006D0D00000001F704408CF68621
1726:106BD000408C76B5001E76B4FFE5C7386FC07738B5
1727:106BE000FFF0203A0000E6006C35F606408AF70414
1728:106BF000408876B1001E76B4FFE5C7386FC077389D
1729:106C0000FFF0203A0000E6006C34F4863678F70492
1730:106C1000424400000001C03A4A00470C0001203AFB
1731:106C20000000E6006C35F4820001F4B32800E000B7
1732:106C30006D10F005422CF704408CF506408C76A9C7
1733:106C4000001E76B4FFE5C7386FC07738FFF0203AF2
1734:106C50000000E6006CC1F606408AF704408876B171
1735:106C6000001E76B4FFE5C7386FC07738FFF0203AD2
1736:106C70000000E6006CC100000001F704422C000097
1737:106C8000000107380001203A0009EE006D11F705F8
1738:106C9000422CF02B2800F0332800F5820001F70485
1739:106CA0004294F606429476B1001E76B4FFE5C738EA
1740:106CB0006FC07739FFF007380001E0006D10F7333F
1741:106CC0002800F704408CF686408C76B5001E76B41A
1742:106CD000FFE5C7386FC07738FFF0203A0000E600C4
1743:106CE0006D14202E0000F7044088F606408A76B125
1744:106CF000001E76B4FFE5C7386FC07738FFF0203A42
1745:106D00000000E6006D15202E0000F0332800F5820B
1746:106D10000001202E0000E6006DB5F48635ECF70486
1747:106D2000423000000001C03A4A00470C0001203AFE
1748:106D30000000E6006D5900000001F704E0280000A3
1749:106D40000001203A0000E6006D79F682003CF684EE
1750:106D5000E028E0006D7800000001F704E028000062
1751:106D60000001203A0000E6006D79F68200F0F70499
1752:106D7000E0280000000176B90002F7044228000074
1753:106D80000001C03A6A00EC006DB5F6862C28F704C5
1754:106D90002D38F005422806380001F6052D387739E0
1755:106DA0000002F482001920320044E6006DB4B4BA47
1756:106DB0006802F0052D38F482C3509493FFFCF482EE
1757:106DC00000169493FFFCF48642309493FFFC0788EE
1758:106DD0000008E0011EC09793FFFC8796FFFC829697
1759:106DE000FFF802140000013C000000000001929333
1760:106DF000FFFC0290000822100004F5863678959377
1761:106E0000FFFCF58642449593FFFC07880008E000EC
1762:106E100015489793FFFCF58274189593FFFCF58253
1763:106E200000199593FFFCF58636789593FFFC07884B
1764:106E30000008E000161C9793FFFCF58274AC959354
1765:106E4000FFFCF782001D9793FFFCF58637049593AE
1766:106E5000FFFC07880008E000161C9793FFFCF582F2
1767:106E600078009593FFFCF782001B9793FFFCF58653
1768:106E700037049593FFFC07880008E000161C9793E1
1769:106E8000FFFCF58278FC9593FFFCF782001A97933C
1770:106E9000FFFCF58637909593FFFC07880008E0001B
1771:106EA000161C9793FFFCF58280D89593FFFCF78220
1772:106EB000001B9793FFFCF58637909593FFFC07889E
1773:106EC0000008E000161C9793FFFCF58281749593EF
1774:106ED000FFFCF782001D9793FFFCF586381C959305
1775:106EE000FFFC07880008E000161C9793FFFCF58262
1776:106EF00087749593FFFCF782001B9793FFFCF58640
1777:106F0000381C9593FFFC07880008E000161C979337
1778:106F1000FFFCF58294F89593FFFCF782001B979392
1779:106F2000FFFCF58639349593FFFC07880008E000E4
1780:106F3000161C9793FFFCF5828A009593FFFCF7825D
1781:106F4000001C9793FFFCF58639349593FFFC078866
1782:106F50000008E000161C9793FFFCF5828E089593BD
1783:106F6000FFFCF782001A9793FFFCF586393495935E
1784:106F7000FFFC07880008E000161C9793FFFCF582D1
1785:106F8000969C9593FFFCF782001E9793FFFCF58675
1786:106F900038A89593FFFC07880008E000161C97931B
1787:106FA000FFFCF5829B2C9593FFFCF782001B9793C7
1788:106FB000FFFCF58638A89593FFFC07880008E000E1
1789:106FC000161C9793FFFCF582A2DC9593FFFCF782D9
1790:106FD000001E9793FFFCF5863AD89593FFFC07882F
1791:106FE0000008E000161C9793FFFCF5829E549593D1
1792:106FF000FFFCF782001B9793FFFCF5863AD8959328
1793:10700000FFFC07880008E000161C9793FFFCF58240
1794:10701000A3C09593FFFCF782001C9793FFFCF586B5
1795:1070200039C09593FFFC07880008E000161C979371
1796:10703000FFFCF582A7649593FFFCF782001E9793EF
1797:10704000FFFCF58639C09593FFFC07880008E00037
1798:10705000161C9793FFFCF582AA049593FFFCF78218
1799:10706000001B9793FFFCF58639C09593FFFC0788BA
1800:107070000008E000161C9793FFFCF582AEF895938C
1801:10708000FFFCF782001C9793FFFCF5863A4C959322
1802:10709000FFFC07880008E000161C9793FFFCF7062A
1803:1070A0004250F03B2800F7064088F03B2800F602EB
1804:1070B0000000F6054080F6054084F7063B70F63B7D
1805:1070C0002800F7063B72F0BB2800F582CA20F58540
1806:1070D0003B74F7063B78F03B2800F7063B7AF0BBA1
1807:1070E0002800F582B194F5853B7CF7063B80F03BA8
1808:1070F0002800F7063B82F0BB2800F582C754F585CF
1809:107100003B84F7063B88F03B2800F7063B8AF0BB40
1810:107110002800F582BEF8F5853B8CF7063B90F03BE6
1811:107120002800F7063B92F0BB2800F582C8F8F585E9
1812:107130003B94F7063B98F03B2800F7063B9AF0BBE0
1813:107140002800F582C5D8F5853B9CF7063BA0F03BAF
1814:107150002800F7063BA2F0BB2800F582C770F58532
1815:107160003BA4F7063BA8F03B2800F7063BAAF0BB80
1816:107170002800F582C1B4F5853BAC9616FFF407886C
1817:107180000008E000D5409793FFFCF6846E50861609
1818:10719000FFF40000000196361DDCF6053B6487967F
1819:1071A000FFFC8296FFF802140000013C0000000082
1820:1071B00000019293FFFC02900008221000302594F9
1821:1071C0000020F02F280026140038F03328009013F8
1822:1071D000FFFCF7044250F686425076B5001E76B4A6
1823:1071E000FFE5C7386FC07739FFF09713FFFC9613A0
1824:1071F000FFFC9593FFFC07880008E000F5F49793E7
1825:10720000FFFC20220000E600721DF5021770F70453
1826:1072100042540000000127380001F705425495133D
1827:10722000FFFCF502001B9513FFFCF5064244951385
1828:10723000FFFC07880008E0011EC09793FFFC8796BB
1829:10724000FFFC8296FFF802140000013C00000000E1
1830:1072500000019293FFFC02900008F704E0048616F8
1831:107260000000F68200FF7739FFF0C7386C00F73373
1832:107270002800F706E006873A000006B00002F7375C
1833:107280002800F6843B6407300004F6BB2800870220
1834:10729000FF3406300006F73328008796FFFC8296FD
1835:1072A000FFF802140004013C00000000000192936A
1836:1072B000FFFC029000082210003026140020F0335A
1837:1072C000280027140038F03B28009713FFFC909308
1838:1072D000FFFCF7044250F686425076B5001E76B4A5
1839:1072E000FFE5C7386FC07739FFF09713FFFC96139F
1840:1072F000FFFC07880008E000F3389793FFFC20228A
1841:107300000000E6007319F5821770F704425400007C
1842:10731000000127380001F70542549593FFFCF582E0
1843:10732000001B9593FFFCF58642449593FFFC07886C
1844:107330000008E0011EC09793FFFC8796FFFC829631
1845:10734000FFF802140000013C0000000000019293CD
1846:10735000FFFC029000082210004026140020961620
1847:10736000FFC4F03328009013FFFC9613FFFC261493
1848:1073700000389616FFBC9613FFFC07880008E00053
1849:10738000D0DC9793FFFC9013FFFCF7044250F68685
1850:10739000425076B5001E76B4FFE5C7386FC0773926
1851:1073A000FFF09713FFFC8616FFBC00000001961348
1852:1073B000FFFC8616FFC4000000019613FFFC07883F
1853:1073C0000008E000F5F49793FFFC20220000E6009F
1854:1073D00073E5F6021770F7044254000000012738E5
1855:1073E0000001F70542549613FFFCF602001B9613AA
1856:1073F000FFFCF60642449613FFFC07880008E001F4
1857:107400001EC09793FFFC8796FFFC8296FFF802143C
1858:107410000000013C0000000000019293FFFC02907C
1859:10742000000822100004F5820000F5854080959642
1860:10743000FFF407880008E000CB509793FFFC859687
1861:10744000FFF4F5020064F5053BB4F7044250F486FE
1862:10745000425076A5001E76B4FFE5F6044F5CF402B8
1863:107460000006F4054254F5853B6CF5853BB8953232
1864:10747000000095B20004C7386FC07739FFF00738B5
1865:107480000001F727280007880008E00071B09793F3
1866:10749000FFFCF4063704F40542448796FFFC82960D
1867:1074A000FFF802140000013C00000000000192936C
1868:1074B000FFFC0290000822100050F7044250F686AC
1869:1074C000425076B5001E76B4FFE5F6046F34C73837
1870:1074D0006FC086B2000C7739FFF0C0367200E6004C
1871:1074E00077ECC504000086B20010F704E000F30258
1872:1074F0000000C0367200E600751804B0001086B2B5
1873:107500000014F704E00400000001C0367200E60039
1874:10751000751C201A0000F3020001201A0000E6008A
1875:10752000752900000001F502000086A60000F7049E
1876:10753000E00000000001C0367200E2007564F6024F
1877:107540000000C0367200E600756C2032000086A68E
1878:107550000004F704E00400000001C0367200E200FD
1879:10756000756D20320000F602000120320000E600B6
1880:10757000757D202A0000F5020001202A0000E600A7
1881:1075800077EC0000000107880008E000CBCC97935F
1882:10759000FFFC26140020F033280004A00002F0278E
1883:1075A0002800F582000023940022F59F280003A004
1884:1075B000001A9396FFD42594002285AE000077AD83
1885:1075C000001E77BCFFE5C5AC7FC075ADFFF076311E
1886:1075D000001E7630FFE506A400022314001E751578
1887:1075E000001EF59F2800F384E0007528FFE593A2B4
1888:1075F000001CF584E0047399001E739CFFE59396CC
1889:10760000FFAC7395001E739CFFE59396FFCC23940B
1890:10761000004295A200208716FFE07595001E75AC0C
1891:10762000FFE59596FFB47595001E75ACFFE5959640
1892:10763000FFC4C73867C07738FFF0F7272800F48405
1893:107640004F58871A0000C4A04A0074A4FFFAC5A4CA
1894:107650000000F59F28008396FFAC2314001A7619CA
1895:10766000001E7630FFE58596FFB4C7383FC07738F7
1896:10767000FFF0F737280006B400028716FFE4839670
1897:10768000FFCCC73857C07738FFF0F7372800871A84
1898:10769000000006B40002C73867C07738FFF0F7373C
1899:1076A000280006B400028716FFE823140016761996
1900:1076B000001E7630FFE5C7385FC07738FFF0F73738
1901:1076C0002800871A000006B40002C73867C0773860
1902:1076D000FFF0F737280006B400028716FFEC2314EA
1903:1076E00000127619001E7630FFE5C7383FC07738A4
1904:1076F000FFF0F7372800871A000006B400028596CD
1905:10770000FFC4C73867C07738FFF0F73728008716FF
1906:10771000FFF006B40002C7385FC07738FFF0F737D4
1907:107720002800F3820002F3A3280004200018259407
1908:10773000002285AE000077AD001E77BCFFE5C5AC2A
1909:107740007FC075ADFFF08396FFD4F5A32800F49FAA
1910:1077500028002594004285AE000077AD001E77BC5E
1911:10776000FFE5C5AC7FC075ADFFF044AD000094935C
1912:10777000FFFCF786E0009793FFFCF3844F5C00006A
1913:1077800000019393FFFC07880008E00123409793D2
1914:10779000FFFC07880008E00078D89793FFFCF0050D
1915:1077A0004084F786E0009793FFFC07880008E0001C
1916:1077B000D5A09793FFFCF7046E50F4054084873AF8
1917:1077C0001DDC00000001F7053B64F5863678F58581
1918:1077D0004244F3863560F3854230F5864244959302
1919:1077E000FFFC07880008E0011F489793FFFC87967D
1920:1077F000FFFC8296FFF802140000013C000000002C
1921:1078000000019293FFFC02900008F5864244959394
1922:10781000FFFC07880008E00120E49793FFFC20228A
1923:107820000000E600788900000001F70442540000DF
1924:107830000001203A0000EE007851F6064250078819
1925:107840000008E00071B09793FFFCE000788800002A
1926:107850000001F704425076B1001E76B4FFE5F582D0
1927:107860000006F5854254C7386FC07739FFF00738F6
1928:107870000001F733280007880008E00072AC9793F6
1929:10788000FFFCF5863790F58542448796FFFC82968B
1930:10789000FFF802140000013C000000000001929378
1931:1078A000FFFC02900008F6063678F6054244F7021F
1932:1078B0000000F7054080F7054094F6846E50F70508
1933:1078C000409097361DDC8796FFFC8296FFF80214E5
1934:1078D0000000013C0000000000019293FFFC0290B8
1935:1078E0000008F7020001F70540808796FFFC8296AA
1936:1078F000FFF802140000013C000000000001929318
1937:10790000FFFC02900008221000A8F7044250F58600
1938:10791000425076AD001EF4846F3476B4FFE5949641
1939:10792000FFC4C7386FC086A6000C7739FFF0C03699
1940:107930007200E6007955F606429AF704429876B14D
1941:10794000001E76B4FFE5C7386FC07739FFF00738FF
1942:107950000001F7332800F704425076AD001E76B4DC
1943:10796000FFE58516FFC4C7386FC086AA000C7739BB
1944:10797000FFF0C0367200E60080A8F606429A872A19
1945:107980000010862A001C203A0000E60079A8F68242
1946:107990000000872A001400000001203A0000E600E1
1947:1079A00079AC20360000F682000120360000E600A7
1948:1079B0007A05249400209496FFBC8516FFC4F02716
1949:1079C0002800052800109516FFB49513FFFC0788C2
1950:1079D0000008E00072509793FFFC8496FFB400000B
1951:1079E00000019493FFFC8516FFBC00000001951375
1952:1079F000FFFC07880008E000F9349793FFFCE000E3
1953:107A000080C40000000120320000E600806C00000D
1954:107A1000000107880008E000CBCC9793FFFC259479
1955:107A20000020F02F280004A000029496FF5CF027AD
1956:107A30002800F48200002514005AF4AB2800072027
1957:107A4000001A2514005A852A000077A9001E77BC69
1958:107A5000FFE5C5287FC07529FFF075AD001E75AC28
1959:107A6000FFE52314001E7619001EF53B2800F48460
1960:107A7000E0007630FFE594A2001CF504E004849653
1961:107A8000FF5C952200208716FFE006A40002751512
1962:107A9000001E7528FFE59516FF547495001E74A40A
1963:107AA000FFE59496FF9C7515001E7528FFE5951659
1964:107AB000FF947495001E8516FF5C74A4FFE59496F0
1965:107AC000FF8C8496FF54C7385FC07738FFF0F72BE0
1966:107AD0002800871A00008516FF9CC73867C07738D2
1967:107AE000FFF0F737280006B400028716FFE42314DE
1968:107AF000001A7619001E7630FFE5C7384FC0773878
1969:107B0000FFF0F7372800871A000006B400028496B9
1970:107B1000FF94C73867C07738FFF0F737280006B4FE
1971:107B200000028716FFE8231400167619001E76302F
1972:107B3000FFE5C73857C07738FFF0F7372800871AB6
1973:107B4000000006B40002C73867C07738FFF0F73787
1974:107B5000280006B400028716FFEC231400127619E1
1975:107B6000001E7630FFE5C7384FC07738FFF0F73793
1976:107B70002800871A000006B400028516FF8CC7385B
1977:107B800067C07738FFF0F73728008716FFF006B494
1978:107B90000002C73857C07738FFF0F7372800F48263
1979:107BA0000002F4A328002514005A852A000077A9B2
1980:107BB000001E77BCFFE5C5287FC07529FFF00720B0
1981:107BC0000018F53B28009416FFAC07880008E00079
1982:107BD000CBCC9793FFFC261400382494005A84A63B
1983:107BE000000077A5001E77BCFFE5C4A47FC074A584
1984:107BF000FFF005A0000206AC000223940036751DBC
1985:107C0000001E7528FFE50720001AF4B3280076311E
1986:107C1000001E7630FFE59516FF547495001E74A47F
1987:107C2000FFE59496FF5C7515001E7528FFE5951617
1988:107C3000FF7C7495001E8516FFC474A4FFE594961E
1989:107C4000FF74852A00342494005A9516FF8484A674
1990:107C5000000077A5001E77BCFFE5C4A47FC074A513
1991:107C6000FFF02514005AF4AF2800852A000077A9F8
1992:107C7000001E77BCFFE5C5287FC07529FFF08496FC
1993:107C8000FFC4F53B280084A600108516FFC494A20B
1994:107C9000001C852A00147495001E74A4FFE59496B8
1995:107CA000FF6C952200208716FFC88516FF54C73841
1996:107CB00067C07738FFF0F72F2800871E00008496F2
1997:107CC000FF5CC73857C07738FFF0F737280006B495
1998:107CD00000028716FFCC23940032761D001E7630FA
1999:107CE000FFE58516FF7CC7384FC07738FFF0F737C0
2000:107CF0002800871E000006B40002C73867C0773826
2001:107D0000FFF0F737280006B400028716FFD023944F
2002:107D1000002E761D001E7630FFE5C73857C0773835
2003:107D2000FFF0F7372800871E000006B40002849693
2004:107D3000FF748516FF6CC73867C07738FFF0F737D8
2005:107D4000280006B400028716FFD42394002A761D6B
2006:107D5000001E7630FFE5C7384FC07738FFF0F737A1
2007:107D60002800871E000006B40002C73867C07738B5
2008:107D7000FFF0F73728008716FFD806B40002C7388F
2009:107D800057C07738FFF0F7372800F4820002F4A3D9
2010:107D90002800072000182514007A852A000077A9FA
2011:107DA000001E77BCFFE5C5287FC07529FFF08496CB
2012:107DB000FFC4F53B28008726000400000001203A9C
2013:107DC0000024F7044F58E6007EF99416FF54C720AC
2014:107DD0007200F6846E508626002C7738FFFA251440
2015:107DE000005A842A000077A9001E77BCFFE5C42052
2016:107DF0007FC07421FFF04739000086B61DDC77395B
2017:107E00000002C0326A00468C0001D6800A68203623
2018:107E10000000F6864098E6007EC0C3B86800C584BE
2019:107E2000000086A60024F704E000F6020000C03639
2020:107E30007200E6007E540324002486A60028F7047E
2021:107E4000E00400000001C0367200E6007E582032D7
2022:107E50000000F602000120320000E6007E6500000E
2023:107E60000001F5820000869A0000F704E00000009F
2024:107E70000001C0367200E2007EA0F6020000C036AB
2025:107E80007200E6007EA820320000869A0004F70403
2026:107E9000E00400000001C0367200E2007EA920323A
2027:107EA0000000F602000120320000E6007EB9202E1C
2028:107EB0000000F5820001202E0000E6007EC50000D3
2029:107EC0000001F4020001F7044F58F41F28008496C3
2030:107ED000FF548516FFC4F686409AC724720077388F
2031:107EE000FFFA862A00304739000077390002C73888
2032:107EF0006800E0007F4CF63B28008496FF54F606AD
2033:107F00004098C72472007738FFFAC6B8000046B51B
2034:107F1000000076B50002C6B46000F5020001F53736
2035:107F200028004739000077390002C73860002494E0
2036:107F3000005A84A6000077A5001E77BCFFE5C4A404
2037:107F40007FC074A5FFF007380002F4BB2800F704D7
2038:107F50004F588516FF548496FFACC6A8720076B4BD
2039:107F6000FFFA0624001AF6B32800C72472007738F7
2040:107F7000FFFA06A8001AF7372800473900009713C0
2041:107F8000FFFC0724001C9713FFFCF5044F5C000066
2042:107F900000019513FFFC07880008E0012340979338
2043:107FA000FFFCF7044F588496FF5400000001C724DB
2044:107FB00072007738FFFA473900009713FFFC072457
2045:107FC000001C9713FFFCF5044F5C000000019513A3
2046:107FD000FFFC07880008E00123409793FFFC078817
2047:107FE0000008E00078D89793FFFCF6846E500000FC
2048:107FF000000187361DDC00000001073800019736BC
2049:108000001DDC87361DDCF0054084F486E000949387
2050:10801000FFFC07880008E000D5A09793FFFCF4055B
2051:108020004084F7046E50F005425C873A1DDCF6860A
2052:108030002C28F7053B64F7042D38F5063A4CF50576
2053:10804000424406380001F6052D3877390002F482E3
2054:10805000001C20320044E6008060B4BA6802F005DB
2055:108060002D38F50635ECE000808CF50542302032E5
2056:108070000001E60080C40000000107880008E0005D
2057:10808000789C9793FFFCF4863560F4854230F506C2
2058:1080900042449513FFFC07880008E0011F489793AE
2059:1080A000FFFCE00080C400000001F704429876B1B4
2060:1080B000001E76B4FFE5C7386FC07739FFF0073888
2061:1080C0000001F73328008796FFFC8296FFF8021420
2062:1080D0000000013C0000000000019293FFFC0290B0
2063:1080E0000008F58642449593FFFC07880008E001EC
2064:1080F00020E49793FFFC20220000E600816100004D
2065:108100000001F704425400000001203A0000EE0094
2066:108110008129F606425007880008E00072AC979368
2067:10812000FFFCE000816000000001F704425076B1DE
2068:10813000001E76B4FFE5F5820006F5854254C73887
2069:108140006FC07739FFF007380001F7332800078840
2070:108150000008E000734C9793FFFCF586381CF5850A
2071:1081600042448796FFFC8296FFF802140000013C0F
2072:108170000000000000019293FFFC02900008221012
2073:108180000058F7044250F686425076B5001E76B489
2074:10819000FFE5F6046F34C7386FC086B2000C77393C
2075:1081A000FFF0C0367200E6008250F4820000C50481
2076:1081B000000086B20010F704E000C5A40000C0363D
2077:1081C0007200E60081E40430001086B20014F70467
2078:1081D000E00400000001C0367200E60081E8202EB5
2079:1081E0000000F5820001202E0000E60081F500006D
2080:1081F0000001F502000086A20000F704E000000084
2081:108200000001C0367200E2008230F6020000C03683
2082:108210007200E60082382032000086A20004F704D3
2083:10822000E00400000001C0367200E2008239203212
2084:108230000000F602000120320000E6008249202AF8
2085:108240000000F5020001202A0000E60082592026E5
2086:108250000000F482000120260000E6008760000094
2087:10826000000107880008E000CBCC9793FFFC0720B3
2088:108270000002F03B2800F7044F58F4053BB006A07D
2089:108280000014C72072007738FFFAF737280006A0DD
2090:108290000016F7372800F3020001F32328000788AF
2091:1082A0000008E000CBCC9793FFFC26140020F033AD
2092:1082B000280004A00002F0272800F3020000239405
2093:1082C000002AF31F28000720001A2394002A839E07
2094:1082D0000000779D001E77BCFFE5C39C7FC0739DA7
2095:1082E000FFF07631001E7630FFE506A4000275151A
2096:1082F000001EF3BB2800F304E0007528FFE593227D
2097:10830000001CF384E0042314001E9316FFA4759947
2098:10831000001E75ACFFE57315001E7318FFE593167C
2099:10832000FFCC8316FFA493A200208716FFE073956D
2100:10833000001E739CFFE59396FFAC7395001E739C23
2101:10834000FFE5C73867C07738FFF0F7272800871A9E
2102:1083500000009396FFC4C7385FC07738FFF0F73747
2103:10836000280006B400028716FFE42394001A9396AF
2104:10837000FFA4761D001E7630FFE5C73857C077385A
2105:10838000FFF0F7372800871E000006B40002C73848
2106:1083900067C07738FFF0F737280006B40002871669
2107:1083A000FFE8231400169316FFA47619001E839687
2108:1083B000FFAC7630FFE5C7383FC07738FFF0F737BE
2109:1083C0002800871A000006B40002C73867C0773853
2110:1083D000FFF0F737280006B400028716FFEC2314DD
2111:1083E00000129316FFA47619001E8396FFCC7630F8
2112:1083F000FFE5C7383FC07738FFF0F7372800871A06
2113:10840000000006B40002C73867C07738FFF0F737BE
2114:1084100028008716FFF08316FFC406B40002C73891
2115:1084200037C07738FFF0F7372800F3820002F3A354
2116:1084300028002314002A831A00007799001E77BCB5
2117:10844000FFE5C3187FC07319FFF007200018F33B46
2118:1084500028009416FFDC07880008E000CBCC979337
2119:10846000FFFC072000022394002A839E0000779DD2
2120:10847000001E77BCFFE5C39C7FC0739DFFF0248086
2121:1084800000070520000AF3BB280020260007EE00A5
2122:1084900084E00628000E86B200007731001E77388F
2123:1084A000FFE575B1001E75ACFFE50528000204A4C8
2124:1084B0000001C6B477C076B5FFF0F702FF00C6B47E
2125:1084C0007400F6B3280087320000F30200FFC738BB
2126:1084D0005FC07739FFF0C7383400E0008488F73395
2127:1084E000280005200026862A000076A9001EF584B3
2128:1084F0004F5876B4FFE58396FFDCF30200FF941635
2129:10850000FFBCC71C5A007738FFFAC6306FC07631FF
2130:10851000FFF047390000C7383400F682FF00C6304C
2131:108520006C00C7386000F6843B6CF72B2800C5A0B0
2132:108530005A0075ACFFFA8316FFDC07340001F7051B
2133:108540003B6C0720003AF6BB280007200036F03BC2
2134:108550002800F3820003F3A328000718001AF5BBD4
2135:10856000280007880008E000CBCC9793FFFC072089
2136:108570000002F03B2800248000070520000A202686
2137:108580000007EE0085D40628000E86B20000773181
2138:10859000001E7738FFE575B1001E75ACFFE50528B4
2139:1085A000000204A40001C6B477C076B5FFF0F7025C
2140:1085B000FF00C6B47400F6B3280087320000F382CF
2141:1085C00000FFC7385FC07739FFF0C7383C00E000D4
2142:1085D000857CF733280005A00026862E000076ADA6
2143:1085E000001E76B4FFE5C520000024000007F3025A
2144:1085F00000019316FFA4F7044F588396FFBC248014
2145:10860000000EC71C72007738FFFAC6306FC0763193
2146:10861000FFF047390000F68200FFC7386C00F68291
2147:10862000FF00C6306C00C7386000F6843B6CF72F43
2148:10863000280007340001F7053B6C0728003AF6BB19
2149:10864000280007280036F03B2800F3020003F32B34
2150:10865000280020220007EE008694C6284800063035
2151:1086600000268732000076B1001E76B4FFE504A430
2152:108670000002042000018396FFA4C7386FC0773939
2153:10868000FFF0F682FF00C7386C00C71C7000E000E6
2154:108690008650F73328000628002686B2000077317E
2155:1086A000001E7738FFE5C6B477C076B5FFF0F70255
2156:1086B000FF00C6B47400F6B328009513FFFCF30462
2157:1086C0003BB0000000019313FFFC9516FFB4078830
2158:1086D0000008E000D42C9793FFFC8516FFB4F0054A
2159:1086E000407C8396FFBC23000007F3054258F70443
2160:1086F0004250F606425076B1001E76B4FFE5F3060E
2161:108700003934F3054244F5054074F3854260F38241
2162:108710000006F3854254C7386FC07739FFF0F684FE
2163:108720002D3807380001F733280006340001F6051C
2164:108730002D38F7062C2876B50002F382001C203273
2165:108740000044E600874CB3B67002F0052D38F306FE
2166:1087500042449313FFFC07880008E0011F489793E9
2167:10876000FFFC8796FFFC8296FFF802140000013C94
2168:108770000000000000019293FFFC0290000822100C
2169:108780000048F38642449393FFFC07880008E00109
2170:1087900020E49793FFFC20220000E60089ED000012
2171:1087A0000001F704425400000001203A0000EE00EE
2172:1087B00087C90000000107880008E000734C979308
2173:1087C000FFFCE00089EC0000000107880008E000E1
2174:1087D000CBCC9793FFFC26140020F033280005A093
2175:1087E0000002F02F2800F382000024940022F3A757
2176:1087F000280004A0001A9496FFD423940022839E9C
2177:108800000000779D001E77BCFFE5C39C7FC0739D71
2178:10881000FFF07631001E7630FFE506AC000223142F
2179:10882000001E7519001EF3A72800F484E0007528C7
2180:10883000FFE594A2001CF384E0047495001E74A468
2181:10884000FFE59496FFB47495001E74A4FFE594961A
2182:10885000FFCC8496FFB493A200208716FFE07395A7
2183:10886000001E739CFFE59396FFBC7395001E739CDE
2184:10887000FFE59396FFC48396FFBCC73867C077387F
2185:10888000FFF0F72F2800F5844F58871A0000C5A085
2186:108890005A0075ACFFFAC73857C07738FFF0F73782
2187:1088A000280006B400028716FFE42314001A761984
2188:1088B000001E7630FFE545AD0000C7384FC0773861
2189:1088C000FFF0F7372800871A000006B400028496EC
2190:1088D000FFCCC73867C07738FFF0F737280006B4F9
2191:1088E00000028716FFE8231400167619001E763062
2192:1088F000FFE5C7383FC07738FFF0F7372800871A01
2193:10890000000006B40002C73867C07738FFF0F737B9
2194:10891000280006B400028716FFEC23140012761913
2195:10892000001E7630FFE5C7384FC07738FFF0F737C5
2196:108930002800871A000006B400028396FFC4C738D7
2197:1089400067C07738FFF0F73728008716FFF006B4C6
2198:108950000002C7383FC07738FFF0F7372800F482AD
2199:108960000002F4A328000420001823940022839E10
2200:108970000000779D001E77BCFFE5C39C7FC0739D00
2201:10898000FFF08496FFD4F3A32800F3820001F3A73D
2202:1089900028009593FFFCF486E0009493FFFCF38499
2203:1089A0004F5C000000019393FFFC07880008E00182
2204:1089B00023409793FFFC07880008E00078D897933E
2205:1089C000FFFCF4863678F4854244F0054084F68452
2206:1089D0004F5CF70200649736000090360004F702FF
2207:1089E0000001F7054084F38635ECF3854230879625
2208:1089F000FFFC8296FFF802140000013C000000001A
2209:108A000000019293FFFC0290000822100090F704EE
2210:108A10004260F502000005B80018F6044258000054
2211:108A2000000120320007EE008A70C7306000C738AE
2212:108A300058000738000E86BA00007739001E7738D4
2213:108A4000FFE5C6B477C076B5FFF0F70200FFC6B405
2214:108A50007400C0365200470C0001D7000A70203A5B
2215:108A60000000E6008A7107300001E0008A18F7056F
2216:108A70004258F40442580000000120220007EE0092
2217:108A80008D9424940036F604426025140038239413
2218:108A90000020063000028732000076B1001E76B456
2219:108AA000FFE50630000275B1001EC7386FC0773889
2220:108AB000FFF0F72B28008732000075ACFFE5C738C0
2221:108AC0005FC07738FFF0F727280024940034063081
2222:108AD00000028732000076B1001E76B4FFE5C73889
2223:108AE0006FC07738FFF0F727280024940032063053
2224:108AF00000028732000076B1001E76B4FFE5C73869
2225:108B00006FC07738FFF0F727280024940030063034
2226:108B100000028732000076B1001E76B4FFE5C73848
2227:108B20006FC07738FFF0F72728002494002E063016
2228:108B300000028732000076B1001E76B4FFE5C73828
2229:108B40006FC07738FFF0F72728002494002C0630F8
2230:108B500000028732000076B1001E76B4FFE5C73808
2231:108B60006FC07738FFF0F72728002494002A0630DA
2232:108B700000028732000076B1001E76B4FFE5C738E8
2233:108B80006FC07738FFF0F7272800063000028732E1
2234:108B90000000249400287631001E7630FFE5C738A7
2235:108BA00067C07738FFF0F72728009413FFFC951370
2236:108BB000FFFC9396FF7C9393FFFC07880008E0007E
2237:108BC000D0DC9793FFFCF60442602494007E2514C9
2238:108BD000008023940068063000028732000076B1DE
2239:108BE000001E76B4FFE50630000275B1001EC738DE
2240:108BF0006FC07738FFF0F72B28008732000075AC84
2241:108C0000FFE5C7385FC07738FFF0F72728002494C6
2242:108C1000007C063000028732000076B1001E76B478
2243:108C2000FFE5C7386FC07738FFF0F7272800249496
2244:108C3000007A063000028732000076B1001E76B45A
2245:108C4000FFE5C7386FC07738FFF0F7272800249476
2246:108C50000078063000028732000076B1001E76B43C
2247:108C6000FFE5C7386FC07738FFF0F7272800249456
2248:108C70000076063000028732000076B1001E76B41E
2249:108C8000FFE5C7386FC07738FFF0F7272800249436
2250:108C90000074063000028732000076B1001E76B400
2251:108CA000FFE5C7386FC07738FFF0F7272800249416
2252:108CB0000072063000028732000076B1001E76B4E2
2253:108CC000FFE5C7386FC07738FFF0F7272800063078
2254:108CD000000287320000249400707631001E763046
2255:108CE000FFE5C73867C07738FFF0F72728009513EE
2256:108CF000FFFC9396FF749393FFFC07880008E00045
2257:108D0000D2589793FFFC8396FF7400000001939361
2258:108D1000FFFCF704425823940050C70072009713D9
2259:108D2000FFFC9396FF6C9393FFFC07880008E0001C
2260:108D3000CF249793FFFC8396FF6CF6864250939363
2261:108D4000FFFCF384425876B5001E9393FFFCF704B2
2262:108D5000425076B4FFE5C7386FC07739FFF09713FC
2263:108D6000FFFC8396FF7C000000019393FFFC0788C3
2264:108D70000008E000F3389793FFFC20220000E60093
2265:108D80008D9500000001F7044258000000010738EB
2266:108D90000001F7054258F704425800000001203A4C
2267:108DA0000007EE008DD4F3821770F7042D38F68695
2268:108DB0002C2806380001F6052D3877390002F38299
2269:108DC000001C20320044E6008DF4B3BA6802E000D3
2270:108DD0008DF4F0052D389393FFFCF382001B9393E1
2271:108DE000FFFCF38642449393FFFC07880008E001F0
2272:108DF0001EC09793FFFC8796FFFC8296FFF8021433
2273:108E00000000013C0000000000019293FFFC029072
2274:108E1000000822100088F7044250F686425076B5CA
2275:108E2000001EF3846F3476B4FFE59396FFC4C73811
2276:108E30006FC0869E000C7739FFF0C0367200E600E6
2277:108E40008E65F60642A0F70442A076B1001E76B405
2278:108E5000FFE5C7386FC07739FFF007380001E00041
2279:108E600094E4F7332800F604426024940036851613
2280:108E7000FFC423940038063000028732000076B128
2281:108E8000001E76B4FFE5852A001C0630000275B18D
2282:108E9000001EC7386FC07738FFF09516FFBCF71F6C
2283:108EA00028008732000075ACFFE58516FFC4C7387F
2284:108EB0005FC07738FFF0F72728002494003406308D
2285:108EC00000028732000076B1001E76B4FFE5C73895
2286:108ED0006FC07738FFF0F72728002494003206305F
2287:108EE00000028732000076B1001E76B4FFE5C73875
2288:108EF0006FC07738FFF0F727280024940030063041
2289:108F000000028732000076B1001E76B4FFE5C73854
2290:108F10006FC07738FFF0F72728002494002E063022
2291:108F200000028732000076B1001E76B4FFE5C73834
2292:108F30006FC07738FFF0F72728002494002C063004
2293:108F400000028732000076B1001E76B4FFE5C73814
2294:108F50006FC07738FFF0F72728002494002A0630E6
2295:108F600000028732000076B1001E76B4FFE5C738F4
2296:108F70006FC07738FFF0F7272800063000028732ED
2297:108F80000000249400287631001E7630FFE5C738B3
2298:108F900067C07738FFF0F7272800872A00200000F5
2299:108FA00000019713FFFC9393FFFC271400209713F5
2300:108FB000FFFC07880008E000D0DC9793FFFC839655
2301:108FC000FFC400000001871E001000000001203ACD
2302:108FD0000000E6008FF0F6820000871E00140000FB
2303:108FE0000001203A0000E6008FF420360000F682EF
2304:108FF000000120360000E6009041000000018516C7
2305:10900000FFC400000001052800109516FFB4951359
2306:10901000FFFC07880008E00072509793FFFC8396DE
2307:10902000FFB4271400209393FFFC9713FFFC0788DD
2308:109030000008E000F9349793FFFCE00094E400009E
2309:1090400000018516FFBC00000001202A0000E60098
2310:1090500094BC0000000107880008E000CBCC979387
2311:10906000FFFCF502000023940062F51F28007595AF
2312:10907000001E75ACFFE50620000206B000022314B6
2313:10908000001E7399001E739CFFE59396FF7475157F
2314:10909000001E7528FFE59516FF7C7395001E739CD6
2315:1090A000FFE59396FF8C8516FFC47395001E93967B
2316:1090B000FF84852A0034239400629516FFACF033B8
2317:1090C00028000520001A9516FF94839E0000779DC6
2318:1090D000001E77BCFFE5C39C7FC0739DFFF07495B5
2319:1090E000001EF3AB28008516FFC474A4FFE5852A93
2320:1090F00000108396FFC49522001C839E00148516E1
2321:10910000FF8493A200208716FFE07528FFE59516DF
2322:10911000FF84F3844F588516FF74C7385FC07738D3
2323:10912000FFF0F7332800871A00009396FFA4C022AF
2324:109130003A008396FF7CC73857C07738FFF0F7377F
2325:10914000280006B400028716FFE42314001A7619DB
2326:10915000001E7630FFE5C7384FC07738FFF0F7378D
2327:109160002800871A000006B40002C73867C07738A5
2328:10917000FFF0F737280006B400028716FFE8231433
2329:1091800000167619001E7630FFE5C7383FC07738E5
2330:10919000FFF0F7372800871A000006B40002851692
2331:1091A000FF8C8396FF84C73867C07738FFF0F737A6
2332:1091B000280006B400028716FFEC2314001276196B
2333:1091C000001E7630FFE5C73857C07738FFF0F73715
2334:1091D0002800871A000006B40002C73867C0773835
2335:1091E000FFF0F73728008716FFF006B40002C738F3
2336:1091F0003FC07738FFF0F7372800F5020002F5236B
2337:10920000280023940052839E0000779D001E77BCA7
2338:10921000FFE5C39C7FC0739DFFF003200018E600AC
2339:109220009230F39B2800F7044270E000929CF6060F
2340:1092300042728516FFC40000000186AA00200000CB
2341:10924000000107340007203A000EE2009294C73470
2342:109250006800F5844260F38200FFC72C7000073875
2343:10926000002686BA00009716FF747739001E7738FB
2344:10927000FFE5C6B477C076B5FFF0C6B43C00203633
2345:109280000000470C0001D7000A70203A0000E600F9
2346:1092900092C900000001F7044274F606427476B1E8
2347:1092A000001E76B4FFE5C7386FC07739FFF0073886
2348:1092B0000001F733280007880008E000789C9793A6
2349:1092C000FFFCE00094E4000000018516FFA48396F3
2350:1092D000FF74C720520074B8FFFAC6240000871E2E
2351:1092E0000000769D001E76B4FFE5C5AC520075AC5B
2352:1092F000FFFA46310000F50200FFC6305400C738BF
2353:109300006FC07739FFF0F682FF00C7386C00C630B7
2354:109310007000F61F28008396FF948516FFC4F59F02
2355:109320002800872A000400000001203A0024E600FB
2356:109330009469F6864098F7046E50862A002CC6A4DD
2357:10934000000023940062849E0000779D001E77BC7D
2358:10935000FFE5C4A47FC074A5FFF046B50000873ABE
2359:109360001DDC76B50002C0327200470C0001D70048
2360:109370000A70203A0000F7064098E6009434C3349F
2361:109380007000C584000086AA0024F704E000F602FD
2362:109390000000C036720005280024E60093C495162C
2363:1093A000FF748396FFC400000001869E0028F70426
2364:1093B000E00400000001C0367200E60093C82032CD
2365:1093C0000000F602000120320000E60093D5000004
2366:1093D0000001F58200008516FF74F704E00086AAFC
2367:1093E000000000000001C0367200E2009414F60292
2368:1093F0000000C0367200E600941C2032000086AAED
2369:109400000004F704E00400000001C0367200E2002E
2370:10941000941D20320000F602000120320000E60018
2371:10942000942D202E0000F5820001202E0000E60081
2372:10943000943900000001F4820001F7044F58F49BB6
2373:1094400028008396FFC4F686409AC72072007738BA
2374:10945000FFFA861E00304739000077390002C7380E
2375:109460006800E00094E4F63B2800472500007739C7
2376:109470000002C7386800F5020001F53B28000738F4
2377:10948000000223940062839E0000779D001E77BC3B
2378:10949000FFE5C39C7FC0739DFFF025140062F3BB02
2379:1094A0002800852A000077A9001E77BCFFE5C528A3
2380:1094B0007FC07529FFF0E00094E4F51B2800839637
2381:1094C000FFBC00000001201E0001E60094E4000043
2382:1094D000000107880008E000789C9793FFFCF506E0
2383:1094E0003560F50542308796FFFC8296FFF802143E
2384:1094F0000000013C0000000000019293FFFC02907C
2385:109500000008F50642449513FFFC07880008E001B7
2386:1095100020E49793FFFC20220000E60096890000DB
2387:109520000001F68442540000000120360000EE00E5
2388:10953000958DF5864250F7044250762D001E763008
2389:10954000FFE526B40001F685425425000007F50525
2390:109550004258F6842D38C73867C07739FFF007388E
2391:109560000001F72F280006340001F6052D38F70614
2392:109570002C2876B50002F502001C20320044E600DB
2393:109580009688B5367002E0009688F0052D38F5040F
2394:109590004260000000019513FFFC07880008E0000E
2395:1095A000B2849793FFFCF6844F5800000001073403
2396:1095B0000040C0227200E60095ECF6064276F70401
2397:1095C000427476B1001E76B4FFE5C7386FC07739B4
2398:1095D000FFF007380001F733280007880008E00093
2399:1095E000789C9793FFFCE000968800000001F70448
2400:1095F000426000000001C0227200E60096240000D4
2401:1096000000019713FFFCF5043BB000000001951327
2402:10961000FFFC07880008E000D42C9793FFFCE000D3
2403:10962000964000000001C0226A00E600967100002A
2404:1096300000019713FFFC07880008E000CC609793B7
2405:10964000FFFCF704407C000000010738000197137D
2406:10965000FFFCF5044074000000019513FFFC07882F
2407:109660000008E000BEF89793FFFCE0009688000039
2408:109670000001F5044074000000019513FFFC078809
2409:109680000008E000C1B49793FFFC8796FFFC829628
2410:10969000FFF802140000013C00000000000192935A
2411:1096A000FFFC0290000822100070F6046F34F704EB
2412:1096B000426486B2000400000001C0367200E60079
2413:1096C0009B1806B0000287360000F404407C76B593
2414:1096D000001E76B4FFE5C7386FC07739FFF0C03A97
2415:1096E0004200E6009B1824940036F604407423944C
2416:1096F0000038063000028732000076B1001E76B4D2
2417:10970000FFE50630000275B1001EC7386FC077381C
2418:10971000FFF0F71F28008732000075ACFFE5C7385F
2419:109720005FC07738FFF0F727280024940034063014
2420:1097300000028732000076B1001E76B4FFE5C7381C
2421:109740006FC07738FFF0F7272800249400320630E6
2422:1097500000028732000076B1001E76B4FFE5C738FC
2423:109760006FC07738FFF0F7272800249400300630C8
2424:1097700000028732000076B1001E76B4FFE5C738DC
2425:109780006FC07738FFF0F72728002494002E0630AA
2426:1097900000028732000076B1001E76B4FFE5C738BC
2427:1097A0006FC07738FFF0F72728002494002C06308C
2428:1097B00000028732000076B1001E76B4FFE5C7389C
2429:1097C0006FC07738FFF0F72728002494002A06306E
2430:1097D00000028732000076B1001E76B4FFE5C7387C
2431:1097E0006FC07738FFF0F727280006300002873275
2432:1097F0000000249400287631001E7630FFE5C7383B
2433:1098000067C07738FFF0F72728009413FFFC939385
2434:10981000FFFC271400209713FFFC07880008E000D6
2435:10982000D0DC9793FFFC07880008E000CBCC97932F
2436:10983000FFFCF50440749416FFC407200002F03BBF
2437:10984000280024800007F40200FF8396FFC49516C9
2438:10985000FFBC031C000A20260007EE0098A806188B
2439:10986000000E86B200007731001E7738FFE575B133
2440:10987000001E75ACFFE503180002C6B477C076B5CC
2441:10988000FFF0F702FF00C6B47400F6B32800873279
2442:10989000000004A40001C7385FC07739FFF0C73863
2443:1098A0004400E0009854F73328008516FFC47495EF
2444:1098B000001E74A4FFE58396FFC42314001E7419D0
2445:1098C000001E7420FFE5052800269516FF8C85AA4A
2446:1098D000000076A9001E76B4FFE5039C0002939673
2447:1098E000FFB4061C00027395001E739CFFE593965F
2448:1098F000FFAC7395001E739CFFE59396FF9C8396C7
2449:10990000FFBC7515001E7528FFE59516FF947515AB
2450:10991000001E7528FFE59516FFA48516FFC4C5AC8B
2451:109920006FC075ADFFF0F5054260F5044F58F68243
2452:1099300000FFC71C52007738FFFA47390000C738CC
2453:109940006C00F682FF00C5AC6C00C73858008396E7
2454:10995000FF8CF5843B6C8516FFB4F71F2800871633
2455:10996000FFE006AC0001F6853B6C8396FFC4C73868
2456:109970004FC07738FFF0F72B2800F5044F58871AAF
2457:109980000000C01E5200C73847C07738FFF0F733D9
2458:109990002800063000028716FFE42314001A769987
2459:1099A000001E8396FF9476B4FFE5C7383FC0773832
2460:1099B000FFF0F7332800871A000006300002C7388E
2461:1099C0006FC07738FFF0F7332800063000028716A3
2462:1099D000FFE8231400167699001E76B4FFE585167D
2463:1099E000FFAC8396FFA4C73857C07738FFF0F73332
2464:1099F0002800871A0000063000028516FF9CC73831
2465:109A00006FC07738FFF0F733280006300002871662
2466:109A1000FFEC231400127699001E76B4FFE5C738D8
2467:109A20003FC07738FFF0F7332800871A0000063070
2468:109A300000028396FFC4C7386FC07738FFF0F73352
2469:109A400028008716FFF006300002C73857C0773865
2470:109A5000FFF0F7332800071C003AF5BB2800071C6D
2471:109A60000036F03B2800F5020003E6009AA4F51F3B
2472:109A70002800F7044278F606427876B1001E76B4E4
2473:109A8000FFE5C7386FC07739FFF007380001F733BB
2474:109A9000280007880008E000789C9793FFFCE0000E
2475:109AA0009B1800000001F38642449393FFFC078853
2476:109AB0000008E0011F489793FFFC25000007F5050B
2477:109AC0004258F7044250F606425076B1001E76B472
2478:109AD000FFE5F3820006F3854254F5063934F505B7
2479:109AE0004244C7386FC07739FFF0F6842D38073805
2480:109AF0000001F733280006340001F6052D38F7067B
2481:109B00002C2876B50002F382001C20320044E600C7
2482:109B10009B18B3B67002F0052D388796FFFC82962D
2483:109B2000FFF802140000013C0000000000019293C5
2484:109B3000FFFC0290000822100078F38642449393C1
2485:109B4000FFFC07880008E00120E49793FFFC202237
2486:109B50000000E6009E4100000001F70442540000AE
2487:109B60000001203A0000EE009D8524940036F604A2
2488:109B7000407425140038063000028732000076B1A8
2489:109B8000001E76B4FFE50630000275B1001EC7382E
2490:109B90006FC07738FFF0F72B28008732000075ACD4
2491:109BA000FFE5C7385FC07738FFF0F7272800249417
2492:109BB0000034063000028732000076B1001E76B411
2493:109BC000FFE5C7386FC07738FFF0F72728002494E7
2494:109BD0000032063000028732000076B1001E76B4F3
2495:109BE000FFE5C7386FC07738FFF0F72728002494C7
2496:109BF0000030063000028732000076B1001E76B4D5
2497:109C0000FFE5C7386FC07738FFF0F72728002494A6
2498:109C1000002E063000028732000076B1001E76B4B6
2499:109C2000FFE5C7386FC07738FFF0F7272800249486
2500:109C3000002C063000028732000076B1001E76B498
2501:109C4000FFE5C7386FC07738FFF0F7272800249466
2502:109C5000002A063000028732000076B1001E76B47A
2503:109C6000FFE5C7386FC07738FFF0F72728000630C8
2504:109C7000000287320000249400287631001E7630DE
2505:109C8000FFE5C73867C07738FFF0F7272800F3846F
2506:109C9000407C000000019393FFFC9513FFFC23948C
2507:109CA00000209396FF949393FFFC07880008E00040
2508:109CB000D0DC9793FFFC8396FF9400000001939300
2509:109CC000FFFC239400689396FF8C9393FFFC078816
2510:109CD0000008E000D2589793FFFC8396FF8C0000A9
2511:109CE00000019393FFFC9013FFFC23940050939684
2512:109CF000FF849393FFFC07880008E000CF2497932C
2513:109D0000FFFC8702FF3400000001F7054264F38482
2514:109D1000407C000000019393FFFC9713FFFC8396A7
2515:109D2000FF84000000019393FFFC8396FF940000E2
2516:109D300000019393FFFC07880008E000F7C89793A1
2517:109D4000FFFC20220000E6009D5DF3821770F704FF
2518:109D500042540000000127380001F7054254939354
2519:109D6000FFFCF382001B9393FFFCF3864244939322
2520:109D7000FFFC07880008E0011EC09793FFFCE0008D
2521:109D80009E4000000001F504407CF4844074C72824
2522:109D90005000C724700005B8002686AE0000772D5D
2523:109DA000001E7738FFE5C6B477C077B40008703E70
2524:109DB000FFE8470C0001D7000A70203A0000F704C2
2525:109DC0004F58E6009DFDF60200FFF7044278F606C4
2526:109DD000427A76B1001E76B4FFE5C7386FC0773996
2527:109DE000FFF007380001F733280007880008E0007B
2528:109DF000789C9793FFFCE0009E400000000186AE37
2529:109E00000000772D001E7738FFE5C6B477C076B521
2530:109E1000FFF0F7020001C7386400F602FF00C6B485
2531:109E20006400C7386800F72F28000728000197133F
2532:109E3000FFFC9493FFFC07880008E000BEF89793AE
2533:109E4000FFFC8796FFFC8296FFF802140000013C9D
2534:109E50000000000000019293FFFC02900008221015
2535:109E600000D8F38642449393FFFC07880008E00182
2536:109E700020E49793FFFC20220000E600A2C9000026
2537:109E80000001F704425400000001203A0000EE00F7
2538:109E9000A03524940036F6044074251400380630AA
2539:109EA00000028732000076B1001E76B4FFE506306E
2540:109EB000000275B1001EC7386FC07738FFF0F72B6E
2541:109EC00028008732000075ACFFE5C7385FC07738DF
2542:109ED000FFF0F72728002494003406300002873270
2543:109EE000000076B1001E76B4FFE5C7386FC0773842
2544:109EF000FFF0F72728002494003206300002873252
2545:109F0000000076B1001E76B4FFE5C7386FC0773821
2546:109F1000FFF0F72728002494003006300002873233
2547:109F2000000076B1001E76B4FFE5C7386FC0773801
2548:109F3000FFF0F72728002494002E06300002873215
2549:109F4000000076B1001E76B4FFE5C7386FC07738E1
2550:109F5000FFF0F72728002494002C063000028732F7
2551:109F6000000076B1001E76B4FFE5C7386FC07738C1
2552:109F7000FFF0F72728002494002A063000028732D9
2553:109F8000000076B1001E76B4FFE5C7386FC07738A1
2554:109F9000FFF0F727280006300002873200002494E3
2555:109FA00000287631001E7630FFE5C73867C0773865
2556:109FB000FFF0F7272800F384407C00000001939312
2557:109FC000FFFC9513FFFC239400209396FF4C939382
2558:109FD000FFFC07880008E000D0DC9793FFFC839625
2559:109FE000FF4C000000019393FFFC239400509396D4
2560:109FF000FF449393FFFC07880008E000D258979332
2561:10A00000FFFC8702FF3400000001F7054264F3847F
2562:10A01000407C000000019393FFFC9713FFFC8396A4
2563:10A02000FF44000000019393FFFC8396FF4CE00087
2564:10A03000A2809393FFFCF404407CF6044074F38206
2565:10A040000000C7204000C73070000738002686BADD
2566:10A0500000007739001E7738FFE5C6B477C077B4C3
2567:10A060000008703EFFE8470C0001D7000A70203A54
2568:10A070000000E600A0AD9396FF3CF70442A0F60670
2569:10A0800042A076B1001E76B4FFE5C7386FC07739BD
2570:10A09000FFF007380001F733280007880008E000C8
2571:10A0A000789C9793FFFCE000A2C8000000010630F6
2572:10A0B00000028732000076B1001E76B4FFE52494DA
2573:10A0C000007E25140080239400680630000275B1DC
2574:10A0D000001EC7386FC07738FFF0F72B2800873293
2575:10A0E000000075ACFFE5C7385FC07738FFF0F72791
2576:10A0F00028002494007C063000028732000076B1EC
2577:10A10000001E76B4FFE5C7386FC07738FFF0F72739
2578:10A1100028002494007A063000028732000076B1CD
2579:10A12000001E76B4FFE5C7386FC07738FFF0F72719
2580:10A13000280024940078063000028732000076B1AF
2581:10A14000001E76B4FFE5C7386FC07738FFF0F727F9
2582:10A15000280024940076063000028732000076B191
2583:10A16000001E76B4FFE5C7386FC07738FFF0F727D9
2584:10A17000280024940074063000028732000076B173
2585:10A18000001E76B4FFE5C7386FC07738FFF0F727B9
2586:10A19000280024940072063000028732000076B155
2587:10A1A000001E76B4FFE5C7386FC07738FFF0F72799
2588:10A1B00028000630000287320000249400707631B7
2589:10A1C000001E7630FFE5C73867C07738FFF0F72705
2590:10A1D00028009413FFFC9513FFFC9396FF34939390
2591:10A1E000FFFC07880008E000D0DC9793FFFC839613
2592:10A1F000FF34000000019393FFFC239400B093967A
2593:10A20000FF2C9393FFFC07880008E000D258979337
2594:10A21000FFFC8396FF2C000000019393FFFC8396C4
2595:10A22000FF3C000000019393FFFC23940098939659
2596:10A23000FF249393FFFC07880008E000CF24979346
2597:10A24000FFFCF3820006F38542548702FF34F38655
2598:10A2500038A8F3854244F7054264F384407C00004B
2599:10A2600000019393FFFC9713FFFC8396FF240000EB
2600:10A2700000019393FFFC8396FF3400000001939349
2601:10A28000FFFC07880008E000F7C89793FFFC202236
2602:10A290000000E600A2A9F3821770F7044254000000
2603:10A2A000000127380001F70542549393FFFCF38225
2604:10A2B000001B9393FFFCF38642449393FFFC0788B3
2605:10A2C0000008E0011EC09793FFFC8796FFFC829672
2606:10A2D000FFF802140000013C00000000000192930E
2607:10A2E000FFFC02900008F6046F34F704426486B263
2608:10A2F000000400000001C0367200E600A3AC06B006
2609:10A3000000028736000076B5001E76B4FFE5C73838
2610:10A310006FC0F684407C7739FFF0C03A6A00E600EF
2611:10A32000A3ACC7346800F5844074F6044F580000AD
2612:10A330000001C62C62007630FFFAC5AC700005AC97
2613:10A34000002686AE0000772D001E7738FFE54631E7
2614:10A350000000C6B477C076B5FFF0F70200FFC63044
2615:10A360007400F702FF00C6B47400C6306800F62F10
2616:10A370002800F50642449513FFFC07880008E00119
2617:10A380001F489793FFFCF704407C0000000107384A
2618:10A3900000019713FFFCF5044074000000019513C1
2619:10A3A000FFFC07880008E000BEF89793FFFC879643
2620:10A3B000FFFC8296FFF802140000013C0000000040
2621:10A3C00000019293FFFC0290000822100080F70425
2622:10A3D000425800000001203A0000E600A3F4203AB1
2623:10A3E0000007F5020001F5054258F7044258000045
2624:10A3F0000001203A0007EE00A6F02394001EF604A8
2625:10A40000426023140066F4844078063000028732EC
2626:10A41000000076B1001E76B4FFE504A400027425A6
2627:10A42000001E7420FFE5063000027531001E7528FD
2628:10A43000FFE59516FF7CC7386FC07738FFF025140D
2629:10A4400000209516FF94F72B280087320000851610
2630:10A45000FF7C05A40002C73857C07738FFF0F71F0C
2631:10A4600028002394001C063000028732000076B1D9
2632:10A47000001E76B4FFE525140050C7386FC077384A
2633:10A48000FFF0F71F28002394001A063000028732DD
2634:10A49000000076B1001E76B4FFE5C7386FC077388C
2635:10A4A000FFF0F71F280023940018063000028732BF
2636:10A4B000000076B1001E76B4FFE5C7386FC077386C
2637:10A4C000FFF0F71F280023940016063000028732A1
2638:10A4D000000076B1001E76B4FFE5C7386FC077384C
2639:10A4E000FFF0F71F28002394001406300002873283
2640:10A4F000000076B1001E76B4FFE5C7386FC077382C
2641:10A50000FFF0F71F28002394001206300002873264
2642:10A51000000076B1001E76B4FFE5C7386FC077380B
2643:10A52000FFF0F71F28002394001006300002873246
2644:10A53000000076AD001E7631001E7630FFE5C7388C
2645:10A5400067C07738FFF0F71F280087260000261421
2646:10A550000068C73847C07738FFF0F7332800872EE8
2647:10A56000000076B4FFE5C7386FC07738FFF0F71BFF
2648:10A5700028002314006405AC0002872E000076AD8D
2649:10A58000001E76B4FFE5C7386FC07738FFF0F71BC1
2650:10A5900028002314006205AC0002872E000076AD6F
2651:10A5A000001E76B4FFE5C7386FC07738FFF0F71BA1
2652:10A5B00028002314006005AC0002872E000076AD51
2653:10A5C000001E76B4FFE5C7386FC07738FFF0F71B81
2654:10A5D00028002314005E05AC0002872E000076AD33
2655:10A5E000001E76B4FFE5C7386FC07738FFF0F71B61
2656:10A5F00028002314005C05AC0002872E000076AD15
2657:10A60000001E76B4FFE5C7386FC07738FFF0F71B40
2658:10A6100028002314005A05AC0002872E000076ADF6
2659:10A62000001E76B4FFE5C7386FC07738FFF0F71B20
2660:10A63000280005AC0002872E00002314005875ADD9
2661:10A64000001E75ACFFE5C7385FC07738FFF0F71B19
2662:10A6500028009613FFFC9516FF8C9513FFFC0788C6
2663:10A660000008E000D2589793FFFC8516FF8C00008D
2664:10A6700000019513FFFCF5044258000000019513FA
2665:10A68000FFFC251400389516FF849513FFFC0788FE
2666:10A690000008E000CF249793FFFCF5044258000027
2667:10A6A00000019513FFFCF5044264000000019513BE
2668:10A6B000FFFC8516FF84000000019513FFFC851642
2669:10A6C000FF94000000019513FFFC07880008E000DC
2670:10A6D000F7C89793FFFC20220000E600A6F10000D7
2671:10A6E0000001F70442580000000107380001F70597
2672:10A6F0004258F704425800000001203A0007EE00DB
2673:10A70000A730F5021770F7042D38F6862C28063886
2674:10A710000001F6052D3877390002F502001C2032C1
2675:10A720000044E600A750B53A6802E000A750F005E3
2676:10A730002D389513FFFCF502001B9513FFFCF50661
2677:10A7400042449513FFFC07880008E0011EC0979360
2678:10A75000FFFC8796FFFC8296FFF802140000013C84
2679:10A760000000000000019293FFFC029000082210FC
2680:10A770000030F6046F34F704426486B2000400002F
2681:10A780000001C0367200E600A9F007300002863AE8
2682:10A790000000F5820000F684407C7739001E77388F
2683:10A7A000FFE5C63077C0F7044074C6B46800763160
2684:10A7B000FFF0C60062009616FFF4C738680007383D
2685:10A7C000002686BA00007739001E7738FFE5C6B448
2686:10A7D00077C077B40008703EFFE8470C0001D7004F
2687:10A7E0000A70203A0000E600A834F60200FF831643
2688:10A7F000FFF48396FFF4F7044078C6983800C73812
2689:10A8000068000738002686BA00007739001E7738BE
2690:10A81000FFE5C6B477C076B5FFF0C6B46400C036B5
2691:10A820005A00470C0001D7000A70203A0000E600E9
2692:10A83000A83D202E0000F5820001202E0000E60039
2693:10A84000A875F606427CF704427C76B1001E76B409
2694:10A85000FFE5C7386FC07739FFF007380001F733DD
2695:10A86000280007880008E000789C9793FFFCE00030
2696:10A87000A9F000000001F3044260000000019313FE
2697:10A88000FFFC07880008E000CC609793FFFCF4040D
2698:10A890004078F7044F58F5044074F384407CF30487
2699:10A8A000407CC62072007630FFFAC59C3000C5A8F7
2700:10A8B000580005AC002686AE000074AD001E74A4DE
2701:10A8C000FFE573AD001E739CFFE59396FFD4C5288A
2702:10A8D00072007528FFFA8316FFF48396FFF4463161
2703:10A8E000000045290000C7183800C420700004206B
2704:10A8F00000267321001EC6B44FC076B5FFF0F48267
2705:10A9000000FFC6304C00F382FF00C6B43C00C630E6
2706:10A910006800F62F2800872E00007318FFE59316B5
2707:10A92000FFCC8316FFD48396FFF4C5284C00C738AC
2708:10A9300037C07739FFF0769D001076B5FFF8C7383D
2709:10A940004C00C6B47000F6AF28008722000076A144
2710:10A95000001E8316FFCCF382FF0076B4FFE5C738F4
2711:10A9600037C07739FFF0C7383C00C5287000F523A1
2712:10A97000280087220000F304407CC7386FC0773975
2713:10A98000FFF0731900109316FFEC7399FFF8C738A6
2714:10A990004C00C71C70009716FFDC23140022831A9A
2715:10A9A00000007799001E77BCFFE5C3187FC07319BC
2716:10A9B000FFF0F3232800F38642449393FFFC0788BB
2717:10A9C0000008E0011F489793FFFCF704407C00005B
2718:10A9D0000001073800019713FFFCF30440740000E6
2719:10A9E00000019313FFFC07880008E000BEF897936E
2720:10A9F000FFFC8796FFFC8296FFF802140000013CE2
2721:10AA00000000000000019293FFFC02900008221059
2722:10AA10000098F30642449313FFFC07880008E00106
2723:10AA200020E49793FFFC20220000E600AEE5000042
2724:10AA30000001F704425400000001203A0000EE003B
2725:10AA4000AD8927380001F70542542394001EF6040F
2726:10AA50004260249400669496FF64F3044078249442
2727:10AA600000209496FF94063000028732000076B1F1
2728:10AA7000001E76B4FFE5031800029316FF747419E4
2729:10AA8000001E7420FFE505980002063000027531B3
2730:10AA9000001EC7386FC07738FFF0F72728008732CD
2731:10AAA00000007528FFE5C73857C07738FFF0F71F5B
2732:10AAB00028002394001C063000028732000076B183
2733:10AAC000001E76B4FFE58516FF64C7386FC077387F
2734:10AAD000FFF0F71F28002394001A06300002873287
2735:10AAE000000076B1001E76B4FFE5C7386FC0773836
2736:10AAF000FFF0F71F28002394001806300002873269
2737:10AB0000000076B1001E76B4FFE5C7386FC0773815
2738:10AB1000FFF0F71F2800239400160630000287324A
2739:10AB2000000076B1001E76B4FFE5C7386FC07738F5
2740:10AB3000FFF0F71F2800239400140630000287322C
2741:10AB4000000076B1001E76B4FFE5C7386FC07738D5
2742:10AB5000FFF0F71F2800239400120630000287320E
2743:10AB6000000076B1001E76B4FFE5C7386FC07738B5
2744:10AB7000FFF0F71F280023940010063000028732F0
2745:10AB8000000076AD001E7631001E7630FFE5C73836
2746:10AB900067C07738FFF0F71F2800871A00002614D7
2747:10ABA0000068C73847C07738FFF0F7332800872E92
2748:10ABB000000076B4FFE5C7386FC07738FFF0F72B99
2749:10ABC0002800231400649316FF6405AC0002872E4E
2750:10ABD000000076AD001E76B4FFE5C7386FC0773849
2751:10ABE000FFF0F71B2800249400629496FF6405ACE4
2752:10ABF0000002872E000076AD001E76B4FFE5C73850
2753:10AC00006FC07738FFF0F7272800251400609516ED
2754:10AC1000FF6405AC0002872E000076AD001E76B4FE
2755:10AC2000FFE5C7386FC07738FFF0F72B28002314F3
2756:10AC3000005E9316FF6405AC0002872E000076AD1F
2757:10AC4000001E76B4FFE5C7386FC07738FFF0F71BFA
2758:10AC500028002494005C9496FF6405AC0002872EC3
2759:10AC6000000076AD001E76B4FFE5C7386FC07738B8
2760:10AC7000FFF0F72728002514005A9516FF6405AC4D
2761:10AC80000002872E000076AD001E76B4FFE5249406
2762:10AC90000050C7386FC07738FFF0F72B2800231417
2763:10ACA000005805AC0002872E00009316FF6475ADB6
2764:10ACB000001E75ACFFE5C7385FC07738FFF0F71BA3
2765:10ACC00028009613FFFC9496FF8C9493FFFC078852
2766:10ACD0000008E000D2589793FFFC8516FF8C2314E0
2767:10ACE00000389513FFFC278000079793FFFC93160D
2768:10ACF000FF849313FFFC07880008E000CF2497939C
2769:10AD0000FFFC27800007F7854258278000079793AC
2770:10AD1000FFFCF4844264000000019493FFFC85165C
2771:10AD2000FF84000000019513FFFC8316FF940000D0
2772:10AD300000019313FFFC07880008E000F7C8979311
2773:10AD4000FFFC20220000E600AD5D00000001F704DA
2774:10AD500042580000000107380001F7054258F70487
2775:10AD60002D38F6862C2806380001F6052D3877395F
2776:10AD70000002F482001C20320044E600AEE4B4BAC3
2777:10AD80006802E000AEE4F0052D38F7044078F58461
2778:10AD90004F580738001686BA0000F4063B90773902
2779:10ADA000001E7738FFE5C6B477C076B4FFF076357D
2780:10ADB0000006A72E6002C52C600076A9001E76B49E
2781:10ADC000FFE5C7386FC07739FFF077390003C73820
2782:10ADD00040000738000286BA00007739001E773835
2783:10ADE000FFE5C6B477C073B7FFF0EE00AE55951619
2784:10ADF000FF64A72E600276A9001E76B4FFE5C7386F
2785:10AE00006FC07739FFF077390003C738400086BA42
2786:10AE10000004231400887739001E7738FFE5C6B494
2787:10AE200077C076B5FFF0A6AA6802771D0003C73881
2788:10AE3000680027380008853A000484BA0000000042
2789:10AE40000001951A0004949A00008596FF7CE000AA
2790:10AE5000AE78000000018496FF64A72E600276A5FC
2791:10AE6000001E76B4FFE5C7386FC07739FFF0773939
2792:10AE70000003C738400085BA00048516FF64F60653
2793:10AE80003B90872A000076A9001E76B4FFE5C738FC
2794:10AE90006FC07739FFF077390003A6BA6002201E31
2795:10AEA0000000C73860007739001E7738FFE5C6B468
2796:10AEB00077C0EE00AEC976B5FFF08316FF780000CC
2797:10AEC00000017719FFF0C6B868008496FF6400009F
2798:10AED0000001C72468009713FFFC07880008C12CF5
2799:10AEE00000009793FFFC8796FFFC8296FFF8021400
2800:10AEF0000000013C0000000000019293FFFC029062
2801:10AF0000000822100010F704408400000001203ADD
2802:10AF10000000E600AF3CF60642B8F70442B876B14E
2803:10AF2000001E76B4FFE5F3063678F3054244C738D1
2804:10AF30006FC07739FFF007380001F7332800F704B6
2805:10AF40004F5CF384425C833A0004C43800009316DB
2806:10AF5000FFEC771D0001C73838007739000204B8CC
2807:10AF6000000C8316FFEC00000001C01E3200EC0054
2808:10AF7000B070C5040000A6A24802F704E000F58204
2809:10AF80000000C0367200E600AFA8C620480086B2B6
2810:10AF90000004F704E00400000001C0367200E6007F
2811:10AFA000AFAC202E0000F5820001202E0000E6004C
2812:10AFB000AFB900000001F502000086B20000F704FE
2813:10AFC000E00000000001C0367200E200AFF4F5823C
2814:10AFD0000000C0367200E600AFFC202E000086B2F2
2815:10AFE0000004F704E00400000001C0367200E20033
2816:10AFF000AFFD202E0000F5820001202E0000E600AB
2817:10B00000B00D202A0000F5020001202A0000E60011
2818:10B01000B05900000001F7047AD000000001203A86
2819:10B020000000E600B064C7204800873A0008F60632
2820:10B03000409877390002A6BA6002C73860007739B5
2821:10B04000001E7738FFE5C6B477C076B5FFF020362E
2822:10B050000000E600B0640000000104A4000CE00061
2823:10B06000AF60039C00018316FFEC00000001C01ECE
2824:10B070003200EC00B104F3063678F6844F5C771D9D
2825:10B080000001C7383800773900020738000CC6B411
2826:10B09000700087360008F6844F5877390006C6B42A
2827:10B0A00070009693FFFC9396FFF407880008E00079
2828:10B0B000FA989793FFFC20220000F684426C839656
2829:10B0C000FFF4470C0001D7000A70C71C7000F70599
2830:10B0D000425C06B40001F7042D38F685426CF68612
2831:10B0E0002C2806380001F6052D3877390002F302C6
2832:10B0F000001C20320044E600B108B33A6802E000C8
2833:10B10000B108F0052D38F30542448796FFFC82967E
2834:10B11000FFF802140000013C0000000000019293BF
2835:10B12000FFFC02900008F4020000C5A00000F682B7
2836:10B130000770F7046E5020360000E600B16D063847
2837:10B14000001C8732000000000001C4207000C022F3
2838:10B150007200E400B15D0000000105AC000126B4FE
2839:10B16000000120360000E600B14006300004C42093
2840:10B170005800C0225A00E400B18100000001042000
2841:10B1800000018796FFFC8296FFF802140000013C44
2842:10B190000000000000019293FFFC02900008078865
2843:10B1A0000008E00078D89793FFFC07880008E000CB
2844:10B1B000B11C9793FFFCF704409400000001C022EB
2845:10B1C0007200E600B1EDF4054090F7046E50000007
2846:10B1D000000186BA1DDCF582000106B4000196BAB2
2847:10B1E0001DDC873A1DDCE000B1F0F5857AD0F00572
2848:10B1F0007AD0F5844090F0054084F5854094F5863A
2849:10B20000E0009593FFFC07880008E000D5A0979325
2850:10B21000FFFCF7046E50F405408485BA1DDC000085
2851:10B220000001F5853B64F584E000F005425C95BAC9
2852:10B230000010F584E004F6862C2895BA0014F70473
2853:10B240002D38F5863A4CF585424406380001F6055E
2854:10B250002D3877390002F582001C20320044E600C8
2855:10B26000B268B5BA6802F0052D38F58635ECF5857B
2856:10B2700042308796FFFC8296FFF802140008013CDA
2857:10B280000000000000019293FFFC029000082210D1
2858:10B2900000C8F30200009316FF94248000089496DF
2859:10B2A000FF84238000078316FF940000000193169B
2860:10B2B000FF54201E0007EE00B564C71C38008496BA
2861:10B2C000000000000001C72470000738002686BA7D
2862:10B2D0000000F5844F587739001E7738FFE5C6B473
2863:10B2E00077C076B5FFF0F70200FFC6B67400E6003F
2864:10B2F000B32D20360001E600B32D77350006A6BA3F
2865:10B300005802C73858007639001E7630FFE5C6B4BB
2866:10B3100067C076B5FFF020360002E600B331C6B84C
2867:10B320000000C72C0000E000B330C6B80000F6846F
2868:10B330004F58F7044F58C5340000C02A7200E60089
2869:10B34000B55D00000001F6843BBCF30200009316DB
2870:10B35000FF3C0428001CF7043BB800000001C03685
2871:10B360007200EC00B4409696FFAC77350001C73808
2872:10B37000680077390002F4863BB4C63848000630CE
2873:10B38000000CC30400009316FF3486B20000872A25
2874:10B39000001C8596FF3CC0367200E600B3C0202E2C
2875:10B3A000000086B20004872A002000000001C03699
2876:10B3B0007200E600B3C0202E0000F5820001202EAE
2877:10B3C0000000E600B3D100000001F4820000949672
2878:10B3D000FF3486B200008722000000000001C03662
2879:10B3E0007200E200B40CF5820000C0367200E60084
2880:10B3F000B414202E000086B200048722000400004E
2881:10B400000001C0367200E200B415202E0000F58263
2882:10B410000001202E0000E600B42500000001F30228
2883:10B4200000019316FF348496FF34000000012026AB
2884:10B430000000E600B44000000001F3020001931692
2885:10B44000FF3C8496FF3C0000000120260000E6003F
2886:10B45000B481F60200018716FFACF3063BB476B95F
2887:10B460000001C6B4700076B50002C6B4300006B460
2888:10B47000001486B600009716FFB0E000B4F496966C
2889:10B48000FFB4271400549713FFFC9413FFFCF486B9
2890:10B490003BB49493FFFC9396FF4C9516FF440788AA
2891:10B4A0000008E00125689793FFFC8396FF4C851602
2892:10B4B000FF4420220000E600B4F1F60200018716E6
2893:10B4C000FFACF3063BB476B90001C6B4700076B5A4
2894:10B4D0000002C6B4300006B4001486B60000971609
2895:10B4E000FFB09696FFB4F7053BBCE000B4F82032FD
2896:10B4F0000000F602000020320000E600B52D2714FF
2897:10B5000000088496FF5400000001C72470008316D1
2898:10B51000FFB404A400049496FF548496FF94933AD5
2899:10B52000FFC004A40001E000B5549496FF94831674
2900:10B53000FF5400000001C7187000F4844F5803182E
2901:10B5400000049316FF548316FF9494BAFFC00318A7
2902:10B5500000019316FF949516FF3C9396FF8CE00034
2903:10B56000B2B0039C00018496FF94000000012026E5
2904:10B570000000E600B584F3820001F4044F58E000B7
2905:10B58000BEE4000000018316FFB88496FF9400001B
2906:10B590000001C01E4A00EC00B5CC9316FF7C269437
2907:10B5A00000048736FFC08316FF7C00000001C03A0C
2908:10B5B0003200E600BB98039C00018496FF940000D3
2909:10B5C0000001C01E4A00EC00B5A106B40004F4045A
2910:10B5D0004F588316FF7C00000001C01A4200E600AD
2911:10B5E000BA2DF48200009496FF7423800007201E79
2912:10B5F0000007EE00B748C71C38008316FF7C000028
2913:10B600000001C71870000738002686BA0000F584CC
2914:10B610004F587739001E7738FFE5C6B477C076B546
2915:10B62000FFF0F70200FFC6B67400E600B6692036E8
2916:10B630000001E600B66977350006A6BA5802C73899
2917:10B6400058007639001E7630FFE5C6B467C076B57F
2918:10B65000FFF020360002E600B66DC6B80000C72C29
2919:10B660000000E000B66CC6B80000F6844F58F7043E
2920:10B670004F58C5340000C02A7200E600B741C584A7
2921:10B6800000008496FF7486AA001C8316FF3CF60215
2922:10B69000000004A400019496FF74871A001C04A8FB
2923:10B6A000001C9496FF34C0367200E600B6CC041835
2924:10B6B000001C86AA0020871A002000000001C03666
2925:10B6C0007200E600B6D020320000F60200012032FF
2926:10B6D0000000E600B6DD00000001F58200008316E0
2927:10B6E000FF3487220000869A000000000001C03667
2928:10B6F0007200E200B71CF6020000C0367200E600DD
2929:10B70000B72420320000869A00048722000400003B
2930:10B710000001C0367200E200B72520320000F602B8
2931:10B72000000120320000E600B735202E0000F5822F
2932:10B730000001202E0000E600B740000000019396B3
2933:10B74000FF84E000B5EC039C00018496FF7483162F
2934:10B75000FF9400000001C0263200E600BB982300E1
2935:10B7600000088496FF8400000001C0263200E60035
2936:10B77000BB99F6020000F684407CF7044074C6B41E
2937:10B780006800C73868000738002686BA0000773995
2938:10B79000001E7738FFE5C6B477C077B40008703E66
2939:10B7A000FFE8470C0001D7000A70203A0000E600CD
2940:10B7B000B804F58200FF8496FF848316FF8C000096
2941:10B7C0000001C72432008496FF7CC7387000C7246C
2942:10B7D00070000738002686BA00007739001E7738D7
2943:10B7E000FFE5C6B477C076B5FFF0C6B45C00C036DE
2944:10B7F0006200470C0001D7000A70203A0000E60002
2945:10B80000B80D20320000F602000120320000E600F0
2946:10B81000BB9823800007201E0007EE00B8C8C71C95
2947:10B8200038008316000000000001C71870000738B8
2948:10B83000002686BA0000F5844F587739001E773805
2949:10B84000FFE5C6B477C076B5FFF0F70200FFC6B6D5
2950:10B850007400E600B89120360001E600B891773513
2951:10B860000006A6BA5802C73858007639001E76304E
2952:10B87000FFE5C6B467C076B5FFF020360002E600EB
2953:10B88000B895C6B80000C72C0000E000B894C6B850
2954:10B890000000F6844F58F7044F58C5340000C02A02
2955:10B8A0007200E600B8C1000000019513FFFC9396FA
2956:10B8B000FF4C07880008E000CC609793FFFC83965C
2957:10B8C000FF4CE000B814039C00018496FF848316AB
2958:10B8D000FF8CF384407CF5044074C4A43200949639
2959:10B8E000FF348316FF34C59C3800C5A8580005AC4A
2960:10B8F000002686AE0000772D001E7738FFE5742DF8
2961:10B90000001E7420FFE5739D0010739DFFF8C4A412
2962:10B9100030009496FF3C8316FF7CC6B477C0C49871
2963:10B9200048009496FF3C04A400269496FF3C73259F
2964:10B93000001E7318FFE59316FF6C74A5001E949605
2965:10B94000FF6474A4FFE59496FF648316FF7CF4847F
2966:10B950004F5876B5FFF0C6184A007630FFFA4631E8
2967:10B960000000F30200FFC6303400F482FF00C6B4CA
2968:10B970004C00C6306800F62F2800872E0000831682
2969:10B98000FF34C73847C07739FFF07319001093169A
2970:10B99000FF347499FFF8F30200FFC7383400C7245E
2971:10B9A00070009716FF34249400CA84A6000077A57F
2972:10B9B000001E77BCFFE5C4A47FC074A5FFF083160A
2973:10B9C000FF3CF4AF2800F4844F58871A0000C528C4
2974:10B9D0004A007528FFFA8316FF6C45290000F4829F
2975:10B9E00000FFC5284C008496FF3CC73837C0773924
2976:10B9F000FFF0F302FF00C7383400C5287000F527B8
2977:10BA00002800872600008316FF648416FF7CC73851
2978:10BA100037C07739FFF0F48200FFC7384C00831637
2979:10BA2000FF3CC39C7000E000BEE4F39B2800F704D9
2980:10BA3000407CF6044074C7387000C7307000073887
2981:10BA4000002686BA00007739001E7738FFE5C6B4B5
2982:10BA500077C077B40008703EFFE8470C0001D700BC
2983:10BA60000A70203A0000E600BA7D25800007E00059
2984:10BA7000BEE404200040E000BAD8C42C0000C73067
2985:10BA80004200849600007538FFFA0624000A202E32
2986:10BA90000007EE00BAD40730000E86BA00007739EE
2987:10BAA000001E7738FFE5C6B477C076B5FFF0F70221
2988:10BAB00000FFC6B4740047290000C0367200470C6E
2989:10BAC0000001203A0000E600BA7406300002E000EF
2990:10BAD000BA8C05AC0001F402000807200007203AE8
2991:10BAE000000EE200BBA4C5A0400083160000F504D0
2992:10BAF000407CF48200FFF6044F58C598580005AC0E
2993:10BB0000002686AE0000772D001E7738FFE5C618A8
2994:10BB100062007630FFFA46310000C6304C00C6B4F1
2995:10BB200077C076B5FFF0772900107739FFF8C6B4F3
2996:10BB30004C00C7386800F72F2800F5844074C528EA
2997:10BB40005000C5AC500005AC002686AE0000772D35
2998:10BB5000001E7738FFE5752D001E7528FFE5C6B479
2999:10BB600077C076B5FFF0F702FF00C6B47400C630A8
3000:10BB70006800F62F2800872E000076A1001076B509
3001:10BB8000FFF8C73857C07739FFF0C7384C00C6B444
3002:10BB90007000E000BBF8F6AF2800F4044F58E00056
3003:10BBA000BEE404200040F6044F5883160000F7045A
3004:10BBB000407CF5844074C61862007630FFFAC738BE
3005:10BBC0007000C5AC700005AC002686AE0000772D75
3006:10BBD000001E7738FFE546310000C6B477C076B561
3007:10BBE000FFF0F70200FFC6307400F702FF00C6B492
3008:10BBF0007400C6306800F62F280023800007201E3E
3009:10BC00000007EE00BEE0C71C38008496000000006C
3010:10BC10000001C72470000738002686BA0000F584AA
3011:10BC20004F587739001E7738FFE5C6B477C076B530
3012:10BC3000FFF0F70200FFC6B67400E600BC792036BC
3013:10BC40000001E600BC7977350006A6BA5802C7386D
3014:10BC500058007639001E7630FFE5C6B467C076B569
3015:10BC6000FFF020360002E600BC7DC6B80000C72CFD
3016:10BC70000000E000BC7CC6B80000F6844F58F70412
3017:10BC80004F58C5340000C02A7200E600BED906A88D
3018:10BC9000001C83160000000000019313FFFC969324
3019:10BCA000FFFCF4863BB49493FFFC9396FF4C9516EF
3020:10BCB000FF449696FF4007880008E00123409793D1
3021:10BCC000FFFCF3044F5CF48200009496FF5C8696C0
3022:10BCD000FF408396FF4C8516FF449316FF34861A67
3023:10BCE00000089696FF3C871A000400000001C0324D
3024:10BCF0007200EC00BDB89616FF9C77310001C73882
3025:10BD0000600077390002C63830000630000C86B279
3026:10BD10000000872A001C8596FF5CC0367200E60092
3027:10BD2000BD40C404000086B20004872A0020000041
3028:10BD30000001C0367200E600BD44202E0000F582EE
3029:10BD40000001202E0000E600BD5100000001F402B9
3030:10BD500000008316FF3C86B20000871A0000000036
3031:10BD60000001C0367200E200BD90F5820000C036CE
3032:10BD70007200E600BD98202E000086B20004871AEB
3033:10BD8000000400000001C0367200E200BD99202EC0
3034:10BD90000000F5820001202E0000E600BDA920224F
3035:10BDA0000000F402000120220000E600BDB80000FF
3036:10BDB0000001F48200019496FF5C8316FF5C000092
3037:10BDC0000001201A0000E600BDF9F6020001871606
3038:10BDD000FF9C8496FF3476B90001C6B4700076B536
3039:10BDE0000002C6B4480006B4001486B600009716D8
3040:10BDF000FFA0E000BE709696FFA42714006497137E
3041:10BE0000FFFC8316FF3C000000019313FFFC8496A7
3042:10BE1000FF34000000019493FFFC9396FF4C9516AD
3043:10BE2000FF4407880008E00125689793FFFC83968C
3044:10BE3000FF4C8516FF4420220000E600BE71F6028A
3045:10BE400000008716FF9C8316FF3476B90001C6B444
3046:10BE5000700076B50002C6B4300006B4001486B691
3047:10BE600000009716FFA09696FFA4971A0008F60206
3048:10BE7000000120320000E600BE99F606429CF7045D
3049:10BE8000429C76B1001E76B4FFE5C7386FC07739A3
3050:10BE9000FFF007380001F7332800F7044F5800007F
3051:10BEA0000001C72872007738FFFA4739000097135E
3052:10BEB000FFFC0728001C9713FFFCF4844F5C000074
3053:10BEC00000019493FFFC9396FF4C07880008E00163
3054:10BED00023409793FFFC8396FF4CE000BBFC039C40
3055:10BEE0000001841600008796FFFC8296FFF802147A
3056:10BEF0000004013C0000000000019293FFFC02904E
3057:10BF0000000822100060851600008616000406A8AE
3058:10BF10000018C7306000C5B8680020320007EE0086
3059:10BF2000BF64072C000E86BA00007739001E7738F0
3060:10BF3000FFE5C6B477C076B5FFF0F70200FFC6B4E0
3061:10BF4000740020360000470C0001D7000A70203A28
3062:10BF50000000E600BF6105AC0002E000BF1806303B
3063:10BF6000000120320007EE00C04C06A80016F505BF
3064:10BF70004074F605407CF3020006F3054254961324
3065:10BF8000FFFC052800029516FFC49513FFFC2394BF
3066:10BF900000209396FFBC9393FFFC9616FFAC078896
3067:10BFA0000008E000D0DC9793FFFC8496FFC42314C4
3068:10BFB00000389493FFFC9316FFB49313FFFC07889B
3069:10BFC0000008E000D2589793FFFC8702FF348616E2
3070:10BFD000FFACF70542649613FFFC9713FFFC8396B2
3071:10BFE000FFB4000000019393FFFC8496FFBC0000A7
3072:10BFF00000019493FFFC07880008E000F7C89793BE
3073:10C00000FFFC20220000E600C01DF3063AD8F7042A
3074:10C0100042540000000127380001F7054254F3059F
3075:10C020004244F38217709393FFFCF482001B9493B5
3076:10C03000FFFCF30642449313FFFC07880008E0016D
3077:10C040001EC09793FFFCE000C1A0000000018736EE
3078:10C050000000F5844F58F4063B7076B5001E76B4A8
3079:10C06000FFE5C7386FC07738FFF076390006A72E96
3080:10C070006002C52C600076A9001E76B4FFE5C738C3
3081:10C080006FC07739FFF077390003C73840000738B1
3082:10C09000000286BA00007739001E7738FFE5C6B483
3083:10C0A00077C076B7FFF0EE00C1159696FF9CA72EDD
3084:10C0B000600276A9001E76B4FFE58396FF9CC73820
3085:10C0C0006FC07739FFF077390003C738400086BA70
3086:10C0D0000004249400607739001E7738FFE5C6B469
3087:10C0E00077C076B5FFF0A6AA6802771D0003C738AF
3088:10C0F00068002738000883BA0004833A0000000073
3089:10C10000000193A60004932600008596FFA4E0009A
3090:10C11000C13823000007A72E600276A9001E76B45E
3091:10C12000FFE5C7386FC07739FFF077390003C738AC
3092:10C13000400085BA0004230000079313FFFC872A00
3093:10C14000000076A9001E76B4FFE58396FF9CF606F4
3094:10C150003B70C7386FC07739FFF077390003A6BA54
3095:10C160006002201E0000C73860007739001E773853
3096:10C17000FFE5C6B477C0EE00C18D76B5FFF08496BA
3097:10C18000FFA0000000017725FFF0C6B86800C728AF
3098:10C1900068009713FFFC07880008C12C00009793E4
3099:10C1A000FFFC8796FFFC8296FFF802140008013C12
3100:10C1B0000000000000019293FFFC02900008221092
3101:10C1C000007025000007202A0007EE00C3B8C7282A
3102:10C1D00050008316000000000001C71870000738E7
3103:10C1E000002686BA0000F5844F587739001E77384C
3104:10C1F000FFE5C6B477C076B5FFF0F70200FFC6B61C
3105:10C200007400E600C23D20360001E600C23D7735ED
3106:10C210000006A6BA5802C73858007639001E763094
3107:10C22000FFE5C6B467C076B5FFF020360002E60031
3108:10C23000C24DC03A5A00E000C248C72C0000F704C3
3109:10C240004F58F5844F5800000001C03A5A00E600EC
3110:10C25000C3B1F4863B908396000000000001069C69
3111:10C2600000168736000076B5001E76B4FFE5C738A5
3112:10C270006FC07738FFF076390006A72E6002C52C14
3113:10C28000600076A9001E76B4FFE5C7386FC0773925
3114:10C29000FFF077390003C73848000738000286BA34
3115:10C2A00000007739001E7738FFE5C6B477C076B74F
3116:10C2B000FFF0EE00C3219696FF8CA72E600276A9B0
3117:10C2C000001E76B4FFE58316FF8CC7386FC0773940
3118:10C2D000FFF077390003C738480086BA0004249479
3119:10C2E00000707739001E7738FFE5C6B477C076B5A1
3120:10C2F000FFF0A6AA680277190003C738680027383C
3121:10C30000000883BA0004833A00000000000193A6ED
3122:10C310000004932600008616FF94E000C34400004A
3123:10C320000001A72E600276A9001E76B4FFE5F30691
3124:10C330003B90C7386FC07739FFF077390003C738B3
3125:10C340003000863A0004872A000076A9001E76B4E1
3126:10C35000FFE58396FF8CF4863B90C7386FC0773932
3127:10C36000FFF077390003A6BA4802201E0000C73844
3128:10C3700048007739001E7738FFE5C6B477C0EE0075
3129:10C38000C39576B5FFF08316FF9000000001771982
3130:10C39000FFF0C6B86800C72868009713FFFC07883D
3131:10C3A0000008C13000009793FFFCE000C5C4000006
3132:10C3B0000001E000C1C40528000183960000F4825A
3133:10C3C0000006F4854254F60442602514001E23142E
3134:10C3D00000209316FFACF3854078063000028732C8
3135:10C3E000000076B1001E76B4FFE50630000275B19C
3136:10C3F000001EC7386FC07738FFF0F71B2800873260
3137:10C40000000075ACFFE5C7385FC07738FFF0F72B49
3138:10C4100028002514001C063000028732000076B187
3139:10C42000001E76B4FFE5C7386FC07738FFF0F72BF2
3140:10C4300028002514001A063000028732000076B169
3141:10C44000001E76B4FFE5C7386FC07738FFF0F72BD2
3142:10C45000280025140018063000028732000076B14B
3143:10C46000001E76B4FFE5C7386FC07738FFF0F72BB2
3144:10C47000280025140016063000028732000076B12D
3145:10C48000001E76B4FFE5C7386FC07738FFF0F72B92
3146:10C49000280025140014063000028732000076B10F
3147:10C4A000001E76B4FFE5C7386FC07738FFF0F72B72
3148:10C4B000280025140012063000028732000076B1F1
3149:10C4C000001E76B4FFE5C7386FC07738FFF0F72B52
3150:10C4D0002800063000028732000025140010763153
3151:10C4E000001E7630FFE5C73867C07738FFF0F72BBE
3152:10C4F0002800071C00029713FFFC2394005093961A
3153:10C50000FFA49393FFFC07880008E000D25897939C
3154:10C51000FFFC8496FFA4231400389493FFFC27802B
3155:10C5200000079793FFFC9316FF9C9313FFFC07886B
3156:10C530000008E000CF249793FFFC8702FF34278098
3157:10C540000007F7854258F705426427800007979354
3158:10C55000FFFC9713FFFC8396FF9C00000001939360
3159:10C56000FFFC8496FFAC000000019493FFFC078859
3160:10C570000008E000F5F49793FFFC20220000E6009D
3161:10C58000C59500000001F70442580000000107387B
3162:10C590000001F7054258F7042D38F30639C0F305BA
3163:10C5A0004244F6862C2806380001F6052D387739E6
3164:10C5B0000002F382001C20320044E600C5C4B3BA76
3165:10C5C0006802F0052D388796FFFC8296FFF802146A
3166:10C5D0000004013C0000000000019293FFFC029067
3167:10C5E000000825000007F7044074F6844F58F6044D
3168:10C5F0004260C7386A0075B8FFFA0630000A202A80
3169:10C600000007EE00C6480730000E86BA00007739F2
3170:10C61000001E7738FFE5C6B477C076B5FFF0F702A5
3171:10C6200000FFC6B47400472D0000C0367200470CEE
3172:10C630000001203A0000E600C64CC3280000063086
3173:10C640000002E000C5FC05280001F3020008C5183F
3174:10C650003000F3844260F6044F58F704407CF484C1
3175:10C660004074C51C50000528002685AA00007429C6
3176:10C67000001E7420FFE5C61C62007630FFFAC6B8C3
3177:10C680007000C4A4680004A4002676A5001E76B439
3178:10C69000FFE5773900107739FFF846310000C5AC67
3179:10C6A00047C075ADFFF0F40200FFC5AC4400C738C9
3180:10C6B0005800F72B28008726000075A5001EC630FD
3181:10C6C000440075ACFFE5C7386FC07739FFF0F682DC
3182:10C6D000FF00C7386C00C6307000F6272800872698
3183:10C6E00000007699001076B5FFF8C7385FC077393B
3184:10C6F000FFF0C7384400C6B47000F6A72800939333
3185:10C70000FFFCF3843BB0000000019393FFFC07881B
3186:10C710000008E000D42C9793FFFCF704407C000055
3187:10C720000001073800019713FFFCF38440740000F8
3188:10C7300000019393FFFC07880008E000BEF8979380
3189:10C74000FFFC8796FFFC8296FFF802140004013C70
3190:10C750000000000000019293FFFC02900008879601
3191:10C76000FFFC8296FFF802140008013C0000000064
3192:10C7700000019293FFFC029000088796FFFC8296CE
3193:10C78000FFF802140004013C000000000001929335
3194:10C79000FFFC029000088796FFFC8296FFF80214C7
3195:10C7A0000000013C0000000000019293FFFC029099
3196:10C7B0000008F70642309713FFFCF7063560971321
3197:10C7C000FFFC07880008E00014F49793FFFCF706CD
3198:10C7D00042309713FFFCF70635EC9713FFFC0788F0
3199:10C7E0000008E00014F49793FFFCF7064244971307
3200:10C7F000FFFCF70636789713FFFC07880008E00077
3201:10C8000014F49793FFFCF70642449713FFFCF706D6
3202:10C8100037049713FFFC07880008E00014F497938F
3203:10C82000FFFCF70642449713FFFCF7063790971377
3204:10C83000FFFC07880008E00014F49793FFFCF7065C
3205:10C8400042449713FFFCF706381C9713FFFC078838
3206:10C850000008E00014F49793FFFCF7064244971396
3207:10C86000FFFCF70638A89713FFFC07880008E000D4
3208:10C8700014F49793FFFCF70642449713FFFCF70666
3209:10C8800039349713FFFC07880008E00014F49793ED
3210:10C89000FFFCF70642449713FFFCF70639C09713D5
3211:10C8A000FFFC07880008E00014F49793FFFCF706EC
3212:10C8B00042449713FFFCF7063A4C9713FFFC078896
3213:10C8C0000008E00014F49793FFFCF7064244971326
3214:10C8D000FFFCF7063AD89713FFFC07880008E00032
3215:10C8E00014F49793FFFC8796FFFC8296FFF80214DE
3216:10C8F0000000013C0000000000019293FFFC029048
3217:10C90000000885960000F5063B90872E000076AD66
3218:10C91000001E76B4FFE5C7386FC07739FFF077396E
3219:10C920000003C73850000738000286BA0000773984
3220:10C93000001E7738FFE5C6B477C07637FFF0EE000B
3221:10C94000C99500000001872E000076AD001E76B468
3222:10C95000FFE5C7386FC07739FFF077390003C73874
3223:10C96000500086BA00047739001E7738FFE5C6B458
3224:10C9700077C076B5FFF0A6AE680277310003C738FE
3225:10C9800068002738000884BA0004843A0000E000F8
3226:10C99000C9B4C5240000872E000076AD001E76B411
3227:10C9A000FFE5C7386FC07739FFF077390003C73824
3228:10C9B0005000853A0004872E000076AD001E76B444
3229:10C9C000FFE520320000F6063B90C7386FC077398C
3230:10C9D000FFF077390003A6BA6002C73860007739E4
3231:10C9E000001E7738FFE5C6B477C0EE00C9F976B50A
3232:10C9F000FFF07721FFF0C6B86800C72C68009713D6
3233:10CA0000FFFC07880008C12800009793FFFC879669
3234:10CA1000FFFC8296FFF802140004013C00000000B5
3235:10CA200000019293FFFC0290000885960000F50635
3236:10CA30003B70872E000076AD001E76B4FFE5C73848
3237:10CA40006FC07739FFF077390003C73850000738D7
3238:10CA5000000286BA00007739001E7738FFE5C6B4B9
3239:10CA600077C07637FFF0EE00CABD00000001872EC8
3240:10CA7000000076AD001E76B4FFE5C7386FC0773989
3241:10CA8000FFF077390003C738500086BA00047739C1
3242:10CA9000001E7738FFE5C6B477C076B5FFF0A6AEC6
3243:10CAA000680277310003C73868002738000884BA65
3244:10CAB0000004843A0000E000CADCC5240000872E90
3245:10CAC000000076AD001E76B4FFE5C7386FC0773939
3246:10CAD000FFF077390003C7385000853A0004839689
3247:10CAE000000476AD001E76B4FFE52032000093937B
3248:10CAF000FFFC872E0000F6063B70C7386FC0773901
3249:10CB0000FFF077390003A6BA6002C73860007739B2
3250:10CB1000001E7738FFE5C6B477C0EE00CB2976B5A6
3251:10CB2000FFF07721FFF0C6B86800C72C68009713A4
3252:10CB3000FFFC07880008C12800009793FFFC879638
3253:10CB4000FFFC8296FFF802140008013C0000000080
3254:10CB500000019293FFFC02900008F5044F58F58203
3255:10CB6000000206280080202E0062EE00CB900730E5
3256:10CB70000040F0332800C6B8520076B4FFFA063001
3257:10CB80000014F6B32800C6380000E000CB6405AC02
3258:10CB90000001F7044F580000000106B818D4F482D1
3259:10CBA0000001F4B72800073818C0F03B2800F7064A
3260:10CBB00042C0F4820002F4BB28008796FFFC8296F4
3261:10CBC000FFF802140000013C0000000000019293F5
3262:10CBD000FFFC02900008F68442C0F60642C077319E
3263:10CBE000001E7738FFE575B1001EC6B477C076B475
3264:10CBF000FFF0F7044F5876B50006C4386800872266
3265:10CC0000001476A1001E76B4FFE5C7386FC07738F0
3266:10CC1000FFF0F7332800F70442C075ACFFE5C738D2
3267:10CC20005FC07738FFF0203A0001E600CC4CF606F2
3268:10CC30004290F704429076B1001E76B4FFE5C73803
3269:10CC40006FC07739FFF007380001F7332800879667
3270:10CC5000FFFC8296FFF802140000013C0000000077
3271:10CC600000019293FFFC0290000822100004851638
3272:10CC70000000000000019513FFFC9516FFF40788E3
3273:10CC80000008E000CD009793FFFC8516FFF42022FA
3274:10CC90000000E600CCBCF58642C0F7044290F606E0
3275:10CCA000429276B1001E76B4FFE5C7386FC077397F
3276:10CCB000FFF007380001E000CCECF7332800F02B40
3277:10CCC0002800F68442C0772D001E7738FFE506283D
3278:10CCD0000014C6B477C076B4FFF0F7044F58F6B32B
3279:10CCE0002800C72872007738FFFAF72F28008796A8
3280:10CCF000FFFC8296FFF802140004013C00000000D3
3281:10CD000000019293FFFC0290000886960000F70451
3282:10CD10004F58F4020000C6B472007734FFFA273887
3283:10CD20000002203A0061F702003FE200CD40C6B4A5
3284:10CD3000740020360000E600CD4000000001F4023F
3285:10CD400000018796FFFC8296FFF802140004013C64
3286:10CD50000000000000019293FFFC0290000886167C
3287:10CD600000008716000885960004C5307000C032A8
3288:10CD70005200E600CDA10000000186B2000077312C
3289:10CD8000001E7738FFE5C6B477C076B5FFE8F6AF8A
3290:10CD9000680006300001C0325200E600CD7805ACD4
3291:10CDA00000018796FFFC8296FFF80214000C013CFC
3292:10CDB000000000000001000000009293FFFC0290C0
3293:10CDC000000884960000841600048596000886A654
3294:10CDD00000007725001E7738FFE5C6B477C07535AB
3295:10CDE000FFF0202A0010E200CE0DF606428EF5027A
3296:10CDF0000010F704428C76B1001E76B4FFE5C73808
3297:10CE00006FC07739FFF007380001F7332800202E74
3298:10CE10000001E600CE70202A0000EE00CE7107244B
3299:10CE2000000225280001A5BA50028622000076A142
3300:10CE3000001E76B4FFE5C73850007739001E7738FA
3301:10CE4000FFE5C5AC77C0C6306FC07631FFF075AD79
3302:10CE5000FFE8F68200FFF702F15475AD0002A72E3D
3303:10CE60007002C6306C00C6307580F623280024207E
3304:10CE7000000225A80001F302F24603A40002C4AC9C
3305:10CE80003800252C0001202E0000EC00CF110000FE
3306:10CE90000001E600CEA0C71C5000E000CEB4F602B0
3307:10CEA0000000A69E50027739001E7738FFE5C6B411
3308:10CEB00077C07635FFE886A600007725001E773814
3309:10CEC000FFE52528000225AC0002C6B477C076B580
3310:10CED000FFE877310004C738620077390001C738AE
3311:10CEE0003000C6B46800C6B4700006B4000E8736C1
3312:10CEF000000024A4000276B5001E76B4FFE5C73812
3313:10CF00006FC07738FFF0F7232800E000CE8424209C
3314:10CF100000028796FFFC8296FFF80214000C013C89
3315:10CF20000000000000019293FFFC029000088616AA
3316:10CF3000000883160004839600008732000076B153
3317:10CF4000001E76B4FFE5059C0002749D001E74A4CB
3318:10CF5000FFE5741D001E063000027531001EC73843
3319:10CF60006FC07738FFF0F71F280087320000752860
3320:10CF7000FFE5C73857C07738FFF0F72F280005AC1A
3321:10CF80000002063000028732000076B1001E76B43F
3322:10CF9000FFE5C7386FC07738FFF0F72F280005ACE2
3323:10CFA0000002063000028732000076B1001E76B41F
3324:10CFB000FFE5C7386FC07738FFF0F72F280005ACC2
3325:10CFC0000002063000028732000076B1001E76B4FF
3326:10CFD000FFE5C7386FC07738FFF0F72F280005ACA2
3327:10CFE0000002063000028732000076B1001E76B4DF
3328:10CFF000FFE5C7386FC07738FFF0F72F280005AC82
3329:10D000000002063000028732000076B1001E76B4BE
3330:10D01000FFE5C7386FC07738FFF0F72F280005AC61
3331:10D020000002063000028732000076B1001E76B49E
3332:10D03000FFE5C7386FC07738FFF0F72F28000630BC
3333:10D0400000028732000005AC00027631001E763007
3334:10D05000FFE5C73867C07738FFF0F72F2800871E35
3335:10D0600000007420FFE5C7384FC07739FFF007385C
3336:10D070000001F71F2800871E0000049C0002C7382B
3337:10D0800047C07739FFF025380001202A0000EE0064
3338:10D09000D0BD26280001A7266002C6A4600076B590
3339:10D0A000001E76B4FFE5C5A45000C5300000C738A7
3340:10D0B0006FC07739FFE8E000D088F72F6800071CC1
3341:10D0C0000002F33B6800C41C00008796FFFC8296B8
3342:10D0D000FFF80214000C013C0000000000019293D4
3343:10D0E000FFFC0290000886160004841600008732B8
3344:10D0F000000076B1001E76B4FFE505A0000274A121
3345:10D10000001E74A4FFE5063000027531001EC7380A
3346:10D110006FC07738FFF0F7232800873200007528AA
3347:10D12000FFE5C73857C07738FFF0F72F280005AC68
3348:10D130000002063000028732000076B1001E76B48D
3349:10D14000FFE5C7386FC07738FFF0F72F280005AC30
3350:10D150000002063000028732000076B1001E76B46D
3351:10D16000FFE5C7386FC07738FFF0F72F280005AC10
3352:10D170000002063000028732000076B1001E76B44D
3353:10D18000FFE5C7386FC07738FFF0F72F280005ACF0
3354:10D190000002063000028732000076B1001E76B42D
3355:10D1A000FFE5C7386FC07738FFF0F72F280005ACD0
3356:10D1B0000002063000028732000076B1001E76B40D
3357:10D1C000FFE5C7386FC07738FFF0F72F280005ACB0
3358:10D1D0000002063000028732000076B1001E76B4ED
3359:10D1E000FFE5C7386FC07738FFF0F72F280005AC90
3360:10D1F0000002063000028732000006A000027631ED
3361:10D20000001E7630FFE5C73867C07738FFF0F72F8C
3362:10D210002800872200007621001E85960008C73866
3363:10D220004FC07739FFF0C6B47000F5B768008722A9
3364:10D2300000007630FFE5C73867C07739FFF0073860
3365:10D240000001F72328008796FFFC8296FFF802145E
3366:10D25000000C013C0000000000019293FFFC0290D2
3367:10D2600000082210002027140020F03B280084969C
3368:10D270000004F502000086A600007625001E763028
3369:10D28000FFE504240002C6B467C076B4FFF0F6BB25
3370:10D2900028008726000076A5001E76B4FFE5C73873
3371:10D2A0006FC07739FFF0C02A7200EC00D2F876A583
3372:10D2B000001E8726000076B4FFE5062800012594AD
3373:10D2C000001EC5AC5000C5300000C7386FC07739AC
3374:10D2D000FFF0C7385200A6A27002C720700077394D
3375:10D2E000001E7738FFE5C6B477C076B5FFE8C68084
3376:10D2F0006A00E000D290F6AF68008716FFE076156E
3377:10D30000001E7630FFE5839600002314001E7599F9
3378:10D31000001E75ACFFE57515001E7528FFE57495B8
3379:10D32000001E74A4FFE57415001E7420FFE5069C22
3380:10D3300000027395001E9396FFDCC73867C0839682
3381:10D3400000007738FFF0F71F28008396FFDC871A6C
3382:10D350000000739CFFE59396FFDCC7385FC0773809
3383:10D36000FFF0F737280006B400028716FFE4231405
3384:10D37000001A7619001E7630FFE5C73857C0773897
3385:10D38000FFF0F7372800871A000006B40002C738FC
3386:10D3900067C07738FFF0F737280006B40002871619
3387:10D3A000FFE8231400167619001E7630FFE5C73813
3388:10D3B0004FC07738FFF0F7372800871A000006B40F
3389:10D3C0000002C73867C07738FFF0F737280006B487
3390:10D3D00000028716FFEC231400127619001E763027
3391:10D3E000FFE5C73847C07738FFF0F7372800871ABE
3392:10D3F000000006B4000284160000C73867C0773802
3393:10D40000FFF0F73728008716FFF006B40002C73890
3394:10D410003FC07738FFF0F73728008796FFFC8296E9
3395:10D42000FFF802140008013C000000000001929384
3396:10D43000FFFC029000088616000084160004F684A3
3397:10D440004F5887320014033000147519001E7528D8
3398:10D45000FFE5C3A06A00739CFFFA04A0001475A541
3399:10D46000001EC6306A007630FFFAC73857C07738DA
3400:10D47000FFF0F7272800F39B280007200016F63B53
3401:10D4800028008722001475ACFFE5C7385FC07738E5
3402:10D49000FFF077390006C6B4700006B40016F3B783
3403:10D4A00028008796FFFC8296FFF802140008013CD2
3404:10D4B0000000000000019293FFFC02900008861615
3405:10D4C0000000F5844F5805300016872A000076A921
3406:10D4D000001E76B4FFE5C7386FC07738FFF07739A4
3407:10D4E0000006C42C7000C0226200E600D52906A008
3408:10D4F000001687360000C6305A007630FFFA76B53F
3409:10D50000001E76B4FFE5C7386FC07738FFF0773973
3410:10D51000000676B8FFFAF6AB2800C72C7000073873
3411:10D520000014E000D52CF63B2800C42C00008796A0
3412:10D53000FFFC8296FFF802140004013C000000008A
3413:10D5400000019293FFFC02900008F7064F844738D1
3414:10D55000FFFCF7056F30F686505C46B4FFFCF6859D
3415:10D560006E50F7066E7C4738FFFCF7056E540734A3
3416:10D57000191CF7054F5CF70200649736191CF70277
3417:10D5800000009736192006B4001CF6854F58879680
3418:10D59000FFFC8296FFF802140000013C000000002E
3419:10D5A00000019293FFFC0290000822100090F30209
3420:10D5B000FFFFF3054F54F38200009396FFAC231452
3421:10D5C00000209316FF9C239400389396FF948316B3
3422:10D5D000FFACF7044F5CF382000C9396FF74931634
3423:10D5E000FF8C873A0004000000019716FFA4831601
3424:10D5F000FFAC8396FFA400000001C01A3A00EC00C3
3425:10D60000DB78F30204BCF7044F5C8316FF74000060
3426:10D610000001C7383000873A0008F6844F58773940
3427:10D620000006C4B470009493FFFC9496FF7C0788B6
3428:10D630000008E000CD009793FFFC8496FF7C202239
3429:10D640000000E600D654C5040000F7044288E0005C
3430:10D65000D87CF6064288F6044F5C83960000831659
3431:10D66000FF74869E0000A7323002F5820000C036AB
3432:10D670007200E600D694C6303000869E00048732E1
3433:10D68000000400000001C0367200E600D698202E8B
3434:10D690000000F5820001202E0000E600D6A5000063
3435:10D6A0000001F50200008396000087320000869E8C
3436:10D6B000000000000001C0367200E200D6E4F582EE
3437:10D6C0000000C0367200E600D6EC202E0000869ED8
3438:10D6D00000048732000400000001C0367200E2003E
3439:10D6E000D6ED202E0000F5820001202E0000E6007D
3440:10D6F000D6FD202A0000F5020001202A0000E600E5
3441:10D70000D72804A400028316FFACF70642C883960C
3442:10D71000FF8CF3054F54C71C7000F03B28000738FE
3443:10D720000002E000DB50F03B28009496FF6C872657
3444:10D73000000076A5001E76B4FFE58316FF6C839685
3445:10D74000FF9C2494001E0618000275B1001E75ACE3
3446:10D75000FFE5C7386FC07738FFF0F71F2800873222
3447:10D760000000751D001E7528FFE5C7385FC07738BB
3448:10D77000FFF0F72728002494001C063000028732AF
3449:10D78000000076B1001E76B4FFE5C7386FC0773869
3450:10D79000FFF0F72728002494001A06300002873291
3451:10D7A000000076B1001E76B4FFE5C7386FC0773849
3452:10D7B000FFF0F72728002494001806300002873273
3453:10D7C000000076B1001E76B4FFE5C7386FC0773829
3454:10D7D000FFF0F72728002494001606300002873255
3455:10D7E000000076B1001E76B4FFE5C7386FC0773809
3456:10D7F000FFF0F72728002494001406300002873237
3457:10D80000000076B1001E76B4FFE5C7386FC07738E8
3458:10D81000FFF0F72728002494001206300002873218
3459:10D82000000076B1001E76B4FFE5C7386FC07738C8
3460:10D83000FFF0F7272800063000028732000024940A
3461:10D8400000107631001E7630FFE5C73867C07738A4
3462:10D85000FFF0F72728008716FFE0F682FFFCC738A5
3463:10D8600057C07739FFF007380003C4B86C00202692
3464:10D870000010E200D89DF606428AF704428876B18D
3465:10D88000001E76B4FFE5F4020000C7386FC0773998
3466:10D89000FFF007380001E000DBA0F7332800831613
3467:10D8A000FF6C251400368396FF94871A0000769942
3468:10D8B000001E76B4FFE50618000275B1001EC738D9
3469:10D8C0006FC07738FFF0F71F28008732000075AC73
3470:10D8D000FFE5C7385FC07738FFF0F72B2800251425
3471:10D8E0000034063000028732000076B1001E76B4A4
3472:10D8F000FFE5C7386FC07738FFF0F72B28002514F5
3473:10D900000032063000028732000076B1001E76B485
3474:10D91000FFE5C7386FC07738FFF0F72B28002514D4
3475:10D920000030063000028732000076B1001E76B467
3476:10D93000FFE5C7386FC07738FFF0F72B28002514B4
3477:10D94000002E063000028732000076B1001E76B449
3478:10D95000FFE5C7386FC07738FFF0F72B2800251494
3479:10D96000002C063000028732000076B1001E76B42B
3480:10D97000FFE5C7386FC07738FFF0F72B2800251474
3481:10D98000002A063000028732000076B1001E76B40D
3482:10D99000FFE5C7386FC07738FFF0F72B2800251454
3483:10D9A0000028063000028732000026A4000274A47A
3484:10D9B000FFFF7631001E7630FFE5C73867C0773845
3485:10D9C000FFF0F72B28009013FFFC8316FF8CF7065F
3486:10D9D00042CCC7187000C73868009713FFFC9393B8
3487:10D9E000FFFC9496FF7C07880008E000CDB8979371
3488:10D9F000FFFC8396FF6C2414004E25140050831600
3489:10DA0000FF8C8496FF7C871E0000769D001E76B4F6
3490:10DA1000FFE5061C000275B1001E75ACFFE5C738B6
3491:10DA20006FC07738FFF0F72B280087320000752988
3492:10DA3000001E7528FFE5C7385FC07738FFF0F72371
3493:10DA400028002414004C063000028732000076B112
3494:10DA5000001E76B4FFE5C7386FC07738FFF0F723B4
3495:10DA600028002414004A063000028732000076B1F4
3496:10DA7000001E76B4FFE5C7386FC07738FFF0F72394
3497:10DA8000280024140048063000028732000076B1D6
3498:10DA9000001E76B4FFE5C7386FC07738FFF0F72374
3499:10DAA000280024140046063000028732000076B1B8
3500:10DAB000001E76B4FFE5C7386FC07738FFF0F72354
3501:10DAC000280024140044063000028732000076B19A
3502:10DAD000001E76B4FFE5C7386FC07738FFF0F72334
3503:10DAE000280024140042063000028732000076B17C
3504:10DAF000001E76B4FFE5C7386FC07738FFF0F72314
3505:10DB000028000630000287320000241400407631DD
3506:10DB1000001E7630FFE5C73867C07738FFF0F7237F
3507:10DB200028008696FFB0F60642C8C6186000F702C5
3508:10DB30000003C6B457C076B5FFF0C6B47400F70250
3509:10DB40000004C7386A00F733280006300002F4B337
3510:10DB500028008396FF8C8316FF74039C0014939611
3511:10DB6000FF8C0318000C8396FFAC9316FF74039C84
3512:10DB70000001E000D5EC9396FFAC9313FFFCF38417
3513:10DB80004F5C000000019393FFFCF3064A98931347
3514:10DB9000FFFC07880008E00126F89793FFFCF402D9
3515:10DBA00000018796FFFC8296FFF802140004013CF6
3516:10DBB0000000000000019293FFFC02900008221078
3517:10DBC00001A0F5020000F3846E50F602001C202A2A
3518:10DBD0000063EE00DC08C59C6000A69E6002772D05
3519:10DBE000001E7738FFE5C6B477C076B5FFF0203663
3520:10DBF0000003E600DBFC072C0036F03B2800063073
3521:10DC00000040E000DBCC05280001F5844F5C0000FB
3522:10DC1000000186AE0008F4020000872E0004000018
3523:10DC20000001C0367200EC00DCF09696FFEC773510
3524:10DC30000001C738680077390002C638580006303E
3525:10DC4000000CC38400008316000086B20000871A0F
3526:10DC5000000000000001C0367200E600DC7CC52038
3527:10DC6000000086B20004871A000400000001C036DC
3528:10DC70007200E600DC80202A0000F5020001202A64
3529:10DC80000000E600DC8D00000001F38200008496B5
3530:10DC9000000086B200008726000000000001C036A8
3531:10DCA0007200E200DCCCF5020000C0367200E60033
3532:10DCB000DCD4202A000086B200048726000400007D
3533:10DCC0000001C0367200E200DCD5202A0000F50217
3534:10DCD0000001202A0000E600DCE5201E0000F3829F
3535:10DCE0000001201E0000E600DCF420220000F40207
3536:10DCF000000120220000E600DD29F602000187165F
3537:10DD0000FFEC0000000176B90001C6B4700076B5E2
3538:10DD10000002C6B4580006B4001486B60000971678
3539:10DD2000FFF0E000DD989696FFF427140014971397
3540:10DD3000FFFC83160000000000019313FFFC959385
3541:10DD4000FFFC9596FE7007880008E0012568979310
3542:10DD5000FFFC8596FE7020220000E600DD95F602AD
3543:10DD600000018716FFEC0000000176B90001C6B47F
3544:10DD7000700076B50002C6B4580006B4001486B62A
3545:10DD800000009716FFF09696FFF4972E0008E0002B
3546:10DD9000DD9C20320000F602000020320000E60088
3547:10DDA000DDB0F4820000F704427CE000E09CF6065F
3548:10DDB000427E9496FF448716FFF4F6044F58773955
3549:10DDC0000006C73070009716FF5406B8001A873651
3550:10DDD00000008316FF5476B5001E76B4FFE5C73801
3551:10DDE0006FC09313FFFC7738FFF077390006C63019
3552:10DDF00070009616FF4C07880008E000CD0097934E
3553:10DE0000FFFC20220000E600DE35F30200018496CC
3554:10DE1000FF4C000000019493FFFC07880008E0001D
3555:10DE2000CD009793FFFC20220000E600DE380000C2
3556:10DE30000001F30200019316FF448496FF440000A2
3557:10DE4000000120260000E600DE59F60642A4F70491
3558:10DE500042A4E000E0A076B1001E8316FF4C8616B7
3559:10DE6000FF4C871A00007699001E76B4FFE5C7388C
3560:10DE70006FC07739FFF0203A0002E600DE8500002F
3561:10DE80000001F6044F58F5844F5800000001C032DD
3562:10DE90005A00E600E025000000018496FF4C0000D7
3563:10DEA000000106A4001A873600008316FF5476B5D9
3564:10DEB000001E76B4FFE5C7386FC07738FFF07739BA
3565:10DEC0000006C72C7000C03A3200E600DEDDF60620
3566:10DED0004280F7044280E000E0A076B1001E2614E4
3567:10DEE0000030F03328008716FFD07631001E7630E0
3568:10DEF000FFE58496FF4C2314002E9316FE6475995B
3569:10DF0000001E75ACFFE57515001E7528FFE573153D
3570:10DF1000001E7318FFE59316FF348316FE64042475
3571:10DF2000000206A000027495001E74A4FFE59496FA
3572:10DF3000FF3C7495001EC73867C07738FFF0F723A1
3573:10DF40002800871A000074A4FFE59496FF2CC738B8
3574:10DF50005FC07738FFF0F737280006B40002871655
3575:10DF6000FFD42494002A9496FE647625001E763011
3576:10DF7000FFE5C73857C07738FFF0F7372800872606
3577:10DF8000000006B40002C73867C07738FFF0F737E3
3578:10DF9000280006B400028716FFD823140026931623
3579:10DFA000FE647619001E8496FF3C7630FFE5C73884
3580:10DFB0004FC07738FFF0F7372800871A000006B403
3581:10DFC00000028496FF34C73867C07738FFF0F73710
3582:10DFD000280006B400028716FFDC231400229316E3
3583:10DFE000FE647619001E7630FFE5C7384FC07738DB
3584:10DFF000FFF0F7372800871A000006B40002C73880
3585:10E0000067C07738FFF0F73728008716FFE08316E0
3586:10E01000FF2C06B40002C73837C07738FFF0E000A5
3587:10E02000EAA0F737280007880008E000CBCC9793D8
3588:10E03000FFFC06A00002F7044F58F037280006A0A6
3589:10E0400000149416FF24C72072007738FFFAF737C0
3590:10E05000280006A00016F7372800F4820001F4A378
3591:10E0600028009413FFFC07880008E000CD00979378
3592:10E07000FFFC20220000E600E0BC26940048F704E4
3593:10E080004280E000E09CF60642828696FEF4E000C4
3594:10E09000E29400000001F7044284F606428476B15F
3595:10E0A000001E76B4FFE5F4020000C7386FC0773970
3596:10E0B000FFF007380001E000EAA4F73328008316D8
3597:10E0C000FF4C7515001E7528FFE59316FF1C0718F9
3598:10E0D0000036F4820001F4BB2800F03728008716D0
3599:10E0E000FFB876B5001E76B4FFE5041800020620DE
3600:10E0F0000002231400469316FF147599001E75AC98
3601:10E10000FFE57495001E74A4FFE59496FF0C73154B
3602:10E11000001E7318FFE59316FF047495001E74A487
3603:10E12000FFE59496FEFC230000079316FEF4849608
3604:10E13000FF1C8316FF1404A4000A9496FE7CC738C3
3605:10E140006FC07738FFF0F7232800F6844F58849685
3606:10E15000FF54871A0000C6A46A007434FFFAC73857
3607:10E160005FC07738FFF0F7332800063000028716CB
3608:10E17000FFBC231400429316FF147699001E76B458
3609:10E18000FFE5C73857C07738FFF0F7332800871A04
3610:10E19000000006300002C7386FC07738FFF0F73351
3611:10E1A0002800063000028716FFC02494003E949693
3612:10E1B000FF1476A5001E8316FF0C76B4FFE5C73862
3613:10E1C00037C07738FFF0F733280087260000063085
3614:10E1D0000002C7386FC07738FFF0F73328000630E9
3615:10E1E00000028716FFC42494003A9496FF1476A583
3616:10E1F000001E8316FF0476B4FFE5C73837C07738B2
3617:10E20000FFF0F73328008726000006300002C738E9
3618:10E210006FC07738FFF0F73328008716FFC8849661
3619:10E22000FEFC06300002C7384FC07738FFF0F733E6
3620:10E2300028008316FEF400000001201A0007EE00FB
3621:10E24000E294F68200088496FE7C00000001072418
3622:10E25000000E86BA00007739001E7738FFE5C6B495
3623:10E2600077C076B5FFF0F70200FFC6B4740047210F
3624:10E270000000C0367200470C0001203A0000E600A2
3625:10E28000E08804A400029496FE7C03180001E000DC
3626:10E29000E2309316FEF48316FF1C000000010718FD
3627:10E2A0000038F6BB28009313FFFC8496FF2400007F
3628:10E2B00000019493FFFC07880008E000D42C97939A
3629:10E2C000FFFC231400789316FEBC849600002314F0
3630:10E2D00000A886A60004872600009316FE9CC6B4FC
3631:10E2E00070009696FEECF7020001C7347400971692
3632:10E2F000FEE48496FF24000000019493FFFC07884D
3633:10E300000008E000D4B49793FFFCF7044F580000D6
3634:10E310000001C0227200E600EAA19416FF1C86A24A
3635:10E3200000387721001E7738FFE5F30200009316CE
3636:10E33000FED4C6B477C076B5FFF09696FEDC849620
3637:10E34000FED4000000012026000EEE00E2F0F302F1
3638:10E35000000F9313FFFC8316FEEC00000001C718AA
3639:10E3600048009713FFFC07880008E00127E897930F
3640:10E37000FFFCC3A000008496FEE4000000012026FC
3641:10E380000000E600E38D239C0007C3803A00C71C11
3642:10E3900038008316FF1CF48200FFF6044F58C7189C
3643:10E3A00070000738002686BA00009716FEC4773939
3644:10E3B000001E7738FFE5C6B477C076B5FFF0C6B467
3645:10E3C0004C0076B50006C330680007300040C01A24
3646:10E3D0007200E600E40D9316FECC9313FFFC9396B7
3647:10E3E000FE749616FE6C9696FE6807880008E0009C
3648:10E3F000CD009793FFFC8396FE748616FE6C86967E
3649:10E40000FE6820220000E600E09500000001F5848F
3650:10E410004F588496FECC072C0040C0267200E600C0
3651:10E42000EA8D00000001A732680276A5001E76B4CE
3652:10E43000FFE58616FECCC7386FC07739FFF0203A6B
3653:10E440000002E600E451C0325A00C62C0000C0327F
3654:10E450005A00E600E6E5251400768316FF1C849634
3655:10E46000FEBC061800028732000076B1001E76B4AA
3656:10E47000FFE58316FEDC0630000275B1001EC738CA
3657:10E480006FC07738FFF0F72728008732000075AC9F
3658:10E49000FFE5C7385FC07738FFF0F72B2800251459
3659:10E4A0000074063000028732000076B1001E76B498
3660:10E4B000FFE5C7386FC07738FFF0F72B2800251429
3661:10E4C0000072063000028732000076B1001E76B47A
3662:10E4D000FFE5C7386FC07738FFF0F72B2800251409
3663:10E4E0000070063000028732000076B1001E76B45C
3664:10E4F000FFE5C7386FC07738FFF0F72B28002514E9
3665:10E50000006E063000028732000076B1001E76B43D
3666:10E51000FFE5C7386FC07738FFF0F72B28002514C8
3667:10E52000006C063000028732000076B1001E76B41F
3668:10E53000FFE5C7386FC07738FFF0F72B28002514A8
3669:10E54000006A063000028732000076B1001E76B401
3670:10E55000FFE5C7386FC07738FFF0F72B280006308B
3671:10E56000000287320000251400687631001E7630E4
3672:10E57000FFE5C73867C07738FFF0F72B2800C71CC6
3673:10E5800032009713FFFC9493FFFC2614006096134F
3674:10E59000FFFC9616FE6C07880008E000D0DC97931D
3675:10E5A000FFFC8716FFA08616FE6C8496FECC231413
3676:10E5B000005E9316FE5C7599001E75ACFFE5741540
3677:10E5C000001E7420FFE57315001E7318FFE59316F7
3678:10E5D000FEAC8316FE5C7631001E7630FFE5052426
3679:10E5E000000206A800027495001E74A4FFE594962C
3680:10E5F000FEB47495001EC73867C07738FFF0F72B5C
3681:10E600002800871A000074A4FFE59496FEA4C7387A
3682:10E610005FC07738FFF0F737280006B4000287168E
3683:10E62000FFA42494005A9496FE5C7625001E83165F
3684:10E63000FEB47630FFE5C73837C07738FFF0F737DC
3685:10E6400028008726000006B40002C73867C0773864
3686:10E65000FFF0F737280006B400028716FFA82494BD
3687:10E6600000569496FE5C7625001E7630FFE5C7388E
3688:10E6700047C07738FFF0F73728008726000006B438
3689:10E680000002C73867C07738FFF0F737280006B4B4
3690:10E6900000028716FFAC231400529316FE5C761915
3691:10E6A000001E8496FEAC7630FFE5C7384FC0773841
3692:10E6B000FFF0F7372800871A000006B40002C738B9
3693:10E6C00067C07738FFF0F73728008716FFB083164A
3694:10E6D000FEA406B40002C73837C07738FFF0E00068
3695:10E6E000EA8CF73728008496FECC0000000104A4D1
3696:10E6F00000369496FE5C8726000076A5001E76B450
3697:10E70000FFE5C7386FC07739FFF0203A0000470CAB
3698:10E710000001203A0000E600EA8D000000018316A7
3699:10E72000FECC8496FF1C0618003A85B20000072430
3700:10E73000003A86BA00007631001E7630FFE5773960
3701:10E74000001E7738FFE5C5AC67C0C6B477C075ADAD
3702:10E75000FFF076B5FFF0C02E6A00EC00E764F5022A
3703:10E760000002F50200018316FF1C000000010718DB
3704:10E77000003686BA00007739001E7738FFE5C6B448
3705:10E7800077C076B5FFF020360002E600E79C000077
3706:10E790000001202A0001E600EA8D000000018496B5
3707:10E7A000FE5C8316FF1CF52728000618000287323E
3708:10E7B000000076B1001E76B4FFE5251400A684960D
3709:10E7C000FE9C8316FEDC0630000275B1001EC738C1
3710:10E7D0006FC07738FFF0F72728008732000075AC4C
3711:10E7E000FFE5C7385FC07738FFF0F72B2800251406
3712:10E7F00000A4063000028732000076B1001E76B415
3713:10E80000FFE5C7386FC07738FFF0F72B28002514D5
3714:10E8100000A2063000028732000076B1001E76B4F6
3715:10E82000FFE5C7386FC07738FFF0F72B28002514B5
3716:10E8300000A0063000028732000076B1001E76B4D8
3717:10E84000FFE5C7386FC07738FFF0F72B2800251495
3718:10E85000009E063000028732000076B1001E76B4BA
3719:10E86000FFE5C7386FC07738FFF0F72B2800251475
3720:10E87000009C063000028732000076B1001E76B49C
3721:10E88000FFE5C7386FC07738FFF0F72B2800251455
3722:10E89000009A063000028732000076B1001E76B47E
3723:10E8A000FFE5C7386FC07738FFF0F72B2800063038
3724:10E8B000000287320000251400987631001E763061
3725:10E8C000FFE5C73867C07738FFF0F72B2800C71C73
3726:10E8D00032009713FFFC9493FFFC261400909613CC
3727:10E8E000FFFC9616FE6C07880008E000D0DC9793CA
3728:10E8F000FFFC8716FF708616FE6C8496FECC239470
3729:10E90000008E759D001E75ACFFE57315001E731813
3730:10E91000FFE59316FE947415001E7420FFE5731531
3731:10E92000001E7318FFE59316FE848316FE9476315D
3732:10E93000001E7630FFE50524000206A8000274954B
3733:10E94000001E74A4FFE59496FE8CC73867C0773824
3734:10E95000FFF0F72B28008496FEC4871E0000752563
3735:10E96000001EC7385FC07738FFF0F737280006B4BD
3736:10E9700000028716FF742394008A761D001E7630ED
3737:10E98000FFE58496FE8C7528FFE5C73837C07738D9
3738:10E99000FFF0F7372800871E000006B40002831638
3739:10E9A000FE84C73867C07738FFF0F737280006B411
3740:10E9B00000028716FF7823940086761D001E7630AD
3741:10E9C000FFE5C73847C07738FFF0F7372800871EC4
3742:10E9D000000006B40002C73867C07738FFF0F73789
3743:10E9E000280006B400028716FF7C23940082761D5F
3744:10E9F000001E7630FFE5C7384FC07738FFF0F73795
3745:10EA00002800871E000006B400028496FEC4C738A2
3746:10EA100067C07738FFF0F73728008716FF8006B405
3747:10EA20000002C73837C07738FFF0F737280087264D
3748:10EA30000000F30200FFC73857C07738FFE8C6B8B8
3749:10EA40003400F7020080C73474007739001077393A
3750:10EA5000FFF0203A0000E600EA6127000100C6B49A
3751:10EA600075808496FECC0000000107240038F6BBB8
3752:10EA700028009493FFFC8316FF24000000019313E9
3753:10EA8000FFFC07880008E000D42C9793FFFC8496D5
3754:10EA9000FED40000000104A40001E000E33C9496D1
3755:10EAA000FED4F40200018796FFFC8296FFF8021460
3756:10EAB0000004013C0000000000019293FFFC029062
3757:10EAC0000008861600088696000CF502FFFC859665
3758:10EAD000000484160010F484E0000730000294B2B1
3759:10EAE0000010F484E00406B4000394B20014F4842B
3760:10EAF000E01CC6B4540094B20018F4820005F4B3CC
3761:10EB00002800F4820001F4BB280027340008973263
3762:10EB1000000486160000072C0003C7385400C6B84E
3763:10EB200068009693FFFCC63072009613FFFCF70254
3764:10EB30000003C5AC7400F7020004C7385A009713ED
3765:10EB4000FFFC07880008C12000009793FFFC879610
3766:10EB5000FFFC8296FFF802140014013C0000000044
3767:10EB600000019293FFFC0290000822100018871603
3768:10EB700000040000000183BA000084960000939610
3769:10EB8000FFF0F3846E54873A00049396FFEC9716D7
3770:10EB9000FFF49013FFFC271C00029713FFFC0724CF
3771:10EBA00000209713FFFC9496FFE407880008E0001C
3772:10EBB000CDB89793FFFC8496FFE4839600088726E0
3773:10EBC00000188516FFECC03A3A00EE00EC7CF582A6
3774:10EBD0000001872600188396000800000001C01E6F
3775:10EBE0007200E600EC7CC584000086A60010871643
3776:10EBF000FFF0F6020000C0367200E600EC1C0424B0
3777:10EC0000001086A600148716FFF400000001C0362D
3778:10EC10007200E600EC2020320000F60200012032F3
3779:10EC20000000E600EC2D00000001F582000086A245
3780:10EC300000008716FFF000000001C0367200E200FD
3781:10EC4000EC68F6020000C0367200E600EC7020327C
3782:10EC5000000086A200048716FFF400000001C03601
3783:10EC60007200E200EC7120320000F6020001203256
3784:10EC70000000E600EC81202E0000F5820001202E2D
3785:10EC80000000E600ECACF7020001F704429CF60637
3786:10EC9000429C76B1001E76B4FFE5C7386FC0773965
3787:10ECA000FFF007380001F7332800F7020001972A28
3788:10ECB000000883A6000C772CFFE193AA000C972A8A
3789:10ECC000001C83A6001CF7046E5093AA002083BA90
3790:10ECD0001DDCF682000093AA002C8396000CC5B4BC
3791:10ECE000000093AA003083BA0010C634000093AA33
3792:10ECF0000024873A001400000001972A00282036DB
3793:10ED0000001FEE00ED1CC73050000738003495BAE4
3794:10ED1000000006300004E000ECFC06B4000183961D
3795:10ED2000001076A5001E9393FFFCF38200B493932A
3796:10ED3000FFFC9513FFFC8726002076B4FFE5C7385B
3797:10ED40006FC07739FFF09713FFFC8396FFEC00004C
3798:10ED500000019393FFFC07880008E000EAB897934E
3799:10ED6000FFFC8796FFFC8296FFF802140014013C1A
3800:10ED70000000000000019293FFFC029000082210A6
3801:10ED800000188716000400000001863A0000000009
3802:10ED900000019616FFF0873A000400000001971664
3803:10EDA000FFF4F6021DE09613FFFC8616000000003B
3804:10EDB00000019613FFFCF6046E500000000196134C
3805:10EDC000FFFC261400109616FFEC07880008E001EF
3806:10EDD00026F89793FFFCF6846E50F6020000873603
3807:10EDE0001DD89616FFE476B5001E76B4FFE5C73849
3808:10EDF0006FC07738FFF0F68642C0F73728008616D6
3809:10EE0000FFEC000000019613FFFC07880008E000FB
3810:10EE1000DBB49793FFFC20220000E600EE4D0000DB
3811:10EE200000018616FFEC000000019613FFFC078826
3812:10EE30000008E000D5A09793FFFC20220000E60028
3813:10EE4000EE4D00000001F60200019616FFE4841664
3814:10EE5000FFE48796FFFC8296FFF802140008013C4D
3815:10EE60000000000000019293FFFC029000088696CB
3816:10EE70000004861600008736000885960008203AB0
3817:10EE80000000E600EE99203A0003E600EEE9F40205
3818:10EE90000000E000EF0C0000000177B0001F703EA2
3819:10EEA000FFE1E600EF0DF4020000851600140000FB
3820:10EEB00000019513FFFC851600100000000195135A
3821:10EEC000FFFC8516000C000000019513FFFC9593D4
3822:10EED000FFFC9693FFFC07880008E000EB60979327
3823:10EEE000FFFCE000EF0C0000000177B0001E703E58
3824:10EEF000FFE1E600EF0D000000019593FFFC969303
3825:10EF0000FFFC07880008E000ED749793FFFC8796EC
3826:10EF1000FFFC8296FFF802140018013C000000007C
3827:10EF200000019293FFFC0290000822100018F48266
3828:10EF3000000086960000F6044AA023940010843650
3829:10EF400000009616FFE4F7044A9C9416FFF08536FD
3830:10EF50000004C0327200EC00F0149516FFF4773113
3831:10EF60000001C738600077390002F3064A98C6B836
3832:10EF7000300006B4000CC584000087360000000095
3833:10EF80000001C03A4200E600EFA4C6240000873624
3834:10EF9000000400000001C03A5200E600EFA8203251
3835:10EFA0000000F602000120320000E600EFB500008C
3836:10EFB0000001F5820000863600008716FFF0000091
3837:10EFC0000001C0327200E200EFF0F5020000C03232
3838:10EFD0007200E600EFF8202A000086B600048716CB
3839:10EFE000FFF400000001C0367200E200EFF9202AB1
3840:10EFF0000000F5020001202A0000E600F009202EA2
3841:10F000000000F5820001202E0000E600F018202606
3842:10F010000000F482000120260000E600F04DF60218
3843:10F0200000018716FFE4F3064A9876B90001C6B4DA
3844:10F03000700076B50002C6B4300006B4001486B67F
3845:10F0400000009716FFE8E000F0B09696FFEC27145A
3846:10F05000001C9713FFFC9393FFFCF3064A9893134D
3847:10F06000FFFC07880008E00125689793FFFC202239
3848:10F070000000E600F0ADF60200018716FFE4F3069B
3849:10F080004A9876B90001C6B4700076B50002C6B4DD
3850:10F09000300006B4001486B600009716FFE8969676
3851:10F0A000FFECF7054AA0E000F0B420320000F602C1
3852:10F0B000000020320000E600F121F4020001871672
3853:10F0C000FFE8F60642C876B90002C6B4700076B50D
3854:10F0D0000002A736600283160004C6B460007635CD
3855:10F0E000001E7630FFE50534000275A9001EC73802
3856:10F0F00067C07738FFF0971A0000872A000075ACC8
3857:10F10000FFE583160008C7385FC07738FFF0971A0D
3858:10F1100000008316000C06B40004E000F124969A67
3859:10F120000000F40200008796FFFC8296FFF80214AC
3860:10F130000010013C0000000000010000B9000000C8
3861:10F14000BA000000BB000000BC000000BD000000D1
3862:10F15000BE000000BF000000800000008100000031
3863:10F160008200000083000000840000008500000091
3864:10F17000860000008700B9B9B9BAB9BBB9BCB9BD3E
3865:10F18000B9BEB9BFB980B981B982B983B984B9852B
3866:10F19000B986B987BAB9BABABABBBABCBABDBABE2F
3867:10F1A000BABFBA80BA81BA82BA83BA84BA85BA863B
3868:10F1B000BA87BBB9BBBABBBBBBBCBBBDBBBEBBBFCD
3869:10F1C000BB80BB81BB82BB83BB84BB85BB86BB874B
3870:10F1D000BCB9BCBABCBBBCBCBCBDBCBEBCBFBC80AB
3871:10F1E000BC81BC82BC83BC84BC85BC86BC87BDB9E9
3872:10F1F000BDBABDBBBDBCBDBDBDBEBDBFBD80BD81BB
3873:10F20000BD82BD83BD84BD85BD86BD87BEB9BEBA86
3874:10F21000BEBBBEBCBEBDBEBEBEBFBE80BE81BE82CA
3875:10F22000BE83BE84BE85BE86BE87BFB9BFBABFBB24
3876:10F23000BFBCBFBDBFBEBFBFBF80BF81BF82BF83DA
3877:10F24000BF84BF85BF86BF8780B980BA80BB80BCC2
3878:10F2500080BD80BE80BF80808081808280838084EA
3879:10F2600080858086808781B981BA81BB81BC81BD60
3880:10F2700081BE81BF818081818182818381848185FA
3881:10F280008186818782B982BA82BB82BC82BD82BEFE
3882:10F2900082BF82808281828282838284828582860A
3883:10F2A000828783B983BA83BB83BC83BD83BE83BF9C
3884:10F2B000838083818382838383848385838683871A
3885:10F2C00084B984BA84BB84BC84BD84BE84BF84807A
3886:10F2D000848184828483848484858486848785B9B8
3887:10F2E00085BA85BB85BC85BD85BE85BF858085818A
3888:10F2F00085828583858485858586858786B986BA56
3889:10F3000086BB86BC86BD86BE86BF86808681868299
3890:10F310008683868486858686868787B987BA87BBF3
3891:10F3200087BC87BD87BE87BF8780878187828783A9
3892:10F33000878487858786878700009293FFFC0290E9
3893:10F34000000822100018F70475EC00000001203AB4
3894:10F350000000E600F37DF6064296F704429476B18B
3895:10F36000001E76B4FFE5F4020000C7386FC077399D
3896:10F37000FFF007380001E000F5E0F7332800F384E0
3897:10F380006F309013FFFC271C00029713FFFC8316BD
3898:10F390000000000000019313FFFC9396FFEC078828
3899:10F3A0000008E000CDB89793FFFC8396FFECF702CE
3900:10F3B0000000971E00088316000400000001931E41
3901:10F3C000000C83160008049C0022931E001C831668
3902:10F3D000000C9396FFF4871A00007699001E76B40D
3903:10F3E000FFE50618000275B1001E75ACFFE5C738D1
3904:10F3F0006FC07738FFF0069C0020F737280087326F
3905:10F4000000009696FFE47535001EC7385FC0773858
3906:10F41000FFF0F7272800049C002406300002873202
3907:10F42000000076B1001E76B4FFE5C7386FC07738AC
3908:10F43000FFF0F7272800049C0026063000028732E0
3909:10F44000000076B1001E76B4FFE5C7386FC077388C
3910:10F45000FFF0F7272800049C0028063000028732BE
3911:10F46000000076B1001E76B4FFE5C7386FC077386C
3912:10F47000FFF0F7272800049C002A0630000287329C
3913:10F48000000076B1001E76B4FFE5C7386FC077384C
3914:10F49000FFF0F7272800049C002C0630000287327A
3915:10F4A000000076B1001E76B4FFE5C7386FC077382C
3916:10F4B000FFF0F7272800049C002E06300002873258
3917:10F4C000000076B1001E76B4FFE5C7386FC077380C
3918:10F4D000FFF0F72728000630000287320000049C66
3919:10F4E00000307631001E7630FFE5C73867C07738C8
3920:10F4F000FFF0F7272800871E00207528FFE5C73892
3921:10F5000057C07739FFF0203A0008EE00F598F3066F
3922:10F5100014D88316FFE4871E00207699001E76B467
3923:10F52000FFE5C7386FC07739FFF025B80001C4ACDC
3924:10F53000580004240001202E0000EC00F595F5028F
3925:10F5400000008316FFE40000000106180002A73245
3926:10F550005802C6B0580076B5001E76B4FFE5C7382D
3927:10F560006FC07739FFE8C6B0400077B80018703E2A
3928:10F57000FFE1E600F57DF7376800F502FFFFC730D1
3929:10F580004800F53B680024A4000224200002E000AB
3930:10F59000F53425AC0001F30614D89313FFFCF302F5
3931:10F5A00000349313FFFC8316FFF400000001931353
3932:10F5B000FFFC8316000000000001871A0000769906
3933:10F5C000001E76B4FFE5C7386FC07739FFF0971398
3934:10F5D000FFFC9393FFFC07880008E000EAB89793CC
3935:10F5E000FFFC8796FFFC8296FFF802140010013C96
3936:10F5F0000000000000019293FFFC0290000822101E
3937:10F600000010F70475EC00000001203A0000E6004D
3938:10F61000F639F6064296F704429476B1001E76B4A7
3939:10F62000FFE5F4020000C7386FC07739FFF00738F4
3940:10F630000001E000F748F7332800F5046F300000C0
3941:10F6400000019516FFF49013FFFC27280002971382
3942:10F65000FFFC85960004000000019593FFFC0788DD
3943:10F660000008E000CDB89793FFFC85160004F60271
3944:10F67000000086AA00007729001E7738FFE5C6B48F
3945:10F6800077C076B5FFF0F7020001C0367400E600DF
3946:10F69000F6999696FFECC63800009613FFFC859607
3947:10F6A000FFEC8516FFF4472CFFFE07380002C72841
3948:10F6B00072009713FFFC85960000000000019593EF
3949:10F6C000FFFC07880008E000CDB89793FFFC851683
3950:10F6D000FFF4F7020002972A000885960008000050
3951:10F6E000000195AA000C8596000C0000000195AA67
3952:10F6F000001CF50614D89513FFFCF58200209593A5
3953:10F70000FFFC8516FFF4000000019513FFFC8596B1
3954:10F7100000008516FFEC872E000076AD001E76B443
3955:10F72000FFE5C7386FC07739FFF0C738500097132F
3956:10F73000FFFC8596FFF4000000019593FFFC07880D
3957:10F740000008E000EAB89793FFFC8796FFFC8296DA
3958:10F75000FFF802140010013C000000000001929329
3959:10F76000FFFC0290000885960000851600048716AD
3960:10F770000008F602FFFC06A80003C6B464000738C0
3961:10F780000003C7386400C73470009713FFFCC5AC92
3962:10F790006A009593FFFCF7020003C5287400F70286
3963:10F7A0000004C73852009713FFFC07880008E001E7
3964:10F7B00014D89793FFFC8796FFFC8296FFF80214FB
3965:10F7C0000010013C0000000000019293FFFC029039
3966:10F7D000000822100010F70475EC00000001203A28
3967:10F7E0000000E600F80DF6064296F704429476B162
3968:10F7F000001E76B4FFE5F4020000C7386FC0773909
3969:10F80000FFF007380001E000F920F7332800F50485
3970:10F810006F30000000019516FFF49013FFFC2728BD
3971:10F8200000029713FFFC85960004000000019593E9
3972:10F83000FFFC07880008E000CDB89793FFFC851611
3973:10F840000004F602000086AA00007729001E77381F
3974:10F85000FFE5C6B477C076B5FFF0F7020001C03609
3975:10F860007400E600F86D9696FFECC638000096131B
3976:10F87000FFFC8596FFEC8516FFF4472CFFFE07384A
3977:10F880000002C72872009713FFFC85960000000055
3978:10F8900000019593FFFC07880008E000CDB897931E
3979:10F8A000FFFC8516FFF4F5820006F5AB280085966F
3980:10F8B00000080728000295AA00040514000E852AF6
3981:10F8C000000077A9001E77BCFFE5C5287FC0752919
3982:10F8D000FFF0F53B2800F58614D89593FFFCF50260
3983:10F8E00000089513FFFC859600008516FFEC872E17
3984:10F8F000000076AD001E76B4FFE5C7386FC07739DB
3985:10F90000FFF0C73850009713FFFC8596FFF4000006
3986:10F9100000019593FFFC07880008E000F75C9793CF
3987:10F92000FFFC8796FFFC8296FFF802140010013C52
3988:10F930000000000000019293FFFC029000082210DA
3989:10F940000008F70475EC83960004203A0000E600F6
3990:10F95000FA64F6064296F5046F309013FFFC2728F0
3991:10F9600000029713FFFC83160000000000019313B0
3992:10F97000FFFC9396FFF49516FFF007880008E0005F
3993:10F98000CDB89793FFFC8516FFF0F302000783962E
3994:10F99000FFF4F32B280007280002F3020001F33BD9
3995:10F9A0002800871E0000769D001E76B4FFE5059CAA
3996:10F9B0000002762D001E7630FFE5749D001E74A4B3
3997:10F9C000FFE5041C000683160000C7386FC07738B7
3998:10F9D000FFF006A80004F7372800872E000006A8CD
3999:10F9E000000675A1001EC73867C07738FFF0F737EB
4000:10F9F0002800871E000475ACFFE506A800087619EC
4001:10FA0000001EC7384FC07738FFF0F737280087222D
4002:10FA1000000006A8000AC7385FC07738FFF0F73744
4003:10FA20002800F30614D89313FFFCF302000C931381
4004:10FA3000FFFC8316000000000001871A00007630EA
4005:10FA4000FFE5C73867C07739FFF09713FFFC9513C0
4006:10FA5000FFFC07880008E000F75C9793FFFCE000DC
4007:10FA6000FA8400000001F704429476B1001E76B4D7
4008:10FA7000FFE5F4020000C7386FC07739FFF00738A0
4009:10FA80000001F73328008796FFFC8296FFF80214E6
4010:10FA90000008013C0000000000019293FFFC02906E
4011:10FAA000000822100048F70475EC85960000203A03
4012:10FAB0000000E600FD98F606429605AC0002872E8F
4013:10FAC000000076AD001E76B4FFE52414001E062C5F
4014:10FAD00000027531001E249400207528FFE5F38490
4015:10FAE0006E50C7386FC07738FFF0F727280087328D
4016:10FAF00000009396FFC4C73857C07738FFF0F7234C
4017:10FB000028002414001C063000028732000076B161
4018:10FB1000001E76B4FFE5C7386FC07738FFF0F723D3
4019:10FB200028002414001A063000028732000076B143
4020:10FB3000001E76B4FFE5C7386FC07738FFF0F723B3
4021:10FB4000280024140018063000028732000076B125
4022:10FB5000001E76B4FFE5C7386FC07738FFF0F72393
4023:10FB6000280024140016063000028732000076B107
4024:10FB7000001E76B4FFE5C7386FC07738FFF0F72373
4025:10FB8000280024140014063000028732000076B1E9
4026:10FB9000001E76B4FFE5C7386FC07738FFF0F72353
4027:10FBA000280024140012063000028732000076B1CB
4028:10FBB000001E76B4FFE5C7386FC07738FFF0F72333
4029:10FBC000280006300002873200002414001076312D
4030:10FBD000001E7630FFE5C73867C07738FFF0F7239F
4031:10FBE00028009013FFFC271C00029713FFFC94933E
4032:10FBF000FFFC9596FFBC07880008E000CDB89793FE
4033:10FC0000FFFC8596FFBC231400362494003873A5AE
4034:10FC1000001E739CFFE5F40442C0F68642C076B530
4035:10FC2000001E76B4FFE5872E0000762D001E76308C
4036:10FC3000FFE5C4206FC07420FFF005AC0002752DF5
4037:10FC4000001E7528FFE5C73867C07738FFF0F72733
4038:10FC50002800872E0000F6046E50C73857C077384A
4039:10FC6000FFF0F71B28002314003405AC0002872E98
4040:10FC7000000076AD001E76B4FFE5C7386FC0773858
4041:10FC8000FFF0F71B28002314003205AC0002872E7A
4042:10FC9000000076AD001E76B4FFE5C7386FC0773838
4043:10FCA000FFF0F71B28002314003005AC0002872E5C
4044:10FCB000000076AD001E76B4FFE5C7386FC0773818
4045:10FCC000FFF0F71B28002314002E05AC0002872E3E
4046:10FCD000000076AD001E76B4FFE5C7386FC07738F8
4047:10FCE000FFF0F71B28002314002C05AC0002872E20
4048:10FCF000000076AD001E76B4FFE5C7386FC07738D8
4049:10FD0000FFF0F71B28002314002A05AC0002872E01
4050:10FD1000000076AD001E76B4FFE5C7386FC07738B7
4051:10FD2000FFF0F71B280005AC0002872E000023140B
4052:10FD3000002875AD001E75ACFFE5C7385FC0773889
4053:10FD4000FFF0F71B28008716FFC8F6820003C738AC
4054:10FD50003FC096B2000806B01DD8F4372800F386DD
4055:10FD600014D89393FFFCF3821DE09393FFFC96134A
4056:10FD7000FFFC7739FFF09713FFFC8396FFC4000068
4057:10FD800000019393FFFC07880008E000EAB897930E
4058:10FD9000FFFCE000FDB800000001F704429476B1DA
4059:10FDA000001E76B4FFE5F4020000C7386FC0773953
4060:10FDB000FFF007380001F73328008796FFFC829692
4061:10FDC000FFF802140004013C0000000000019293BF
4062:10FDD000FFFC029000088616000000000001873238
4063:10FDE000000076B1001E76B4FFE5C7386FC07739E2
4064:10FDF000FFF0203A0006E600FE21F582001EF7041F
4065:10FE000042A8F60642A876B1001E76B4FFE5C738D0
4066:10FE10006FC07739FFF007380001E000FE34F73398
4067:10FE20002800F6056F349593FFFC07880008E00072
4068:10FE300015849793FFFC8796FFFC8296FFF80214C7
4069:10FE40000004013C0000000000019293FFFC0290BE
4070:10FE5000000886160000859600048732000076B1FF
4071:10FE6000001E76B4FFE5C7386FC07739FFF0203A3F
4072:10FE70000007E600FE9DF4020000F70442A8F60623
4073:10FE800042AA76B1001E76B4FFE5C7386FC0773955
4074:10FE9000FFF007380001E000FF1CF73328000730AF
4075:10FEA000000286BA00007739001E7738FFE5C6B435
4076:10FEB00077C076B5FFF020360001E600FED5F605E6
4077:10FEC0006F3420360002E600FEE5F5020020E00077
4078:10FED000FEFCF60642AC202E000CE600FF1CF402ED
4079:10FEE0000000F502001F9513FFFC07880008E000E2
4080:10FEF00015849793FFFCE000FF1CF4020001F70457
4081:10FF000042AC76B1001E76B4FFE5C7386FC07739D2
4082:10FF1000FFF007380001F7332800F402000187964C
4083:10FF2000FFFC8296FFF802140008013C000000006C
4084:10FF300000019293FFFC02900008869600000000EA
4085:10FF4000000187360004F6020000073800089736E3
4086:10FF500000048736000800000001203A0000EC0091
4087:10FF6000FF7DF6856F348736000800000001203AD7
4088:10FF70000003EE00FF8020320000F6020001203274
4089:10FF80000000E600FFBDF60642AEF7046F34000045
4090:10FF90000001873A0008F682FFEC77390002A73AA1
4091:10FFA0006802000000019713FFFC07880008E000CA
4092:10FFB00015849793FFFCE000FFD800000001F704D0
4093:10FFC00042AC76B1001E76B4FFE5C7386FC0773912
4094:10FFD000FFF007380001F73328008796FFFC829670
4095:10FFE000FFF802140004013C0000000000010000C2
4096:10FFF00000170000001A0000001D0000001800009B
4097:020000021000EC
4098:10000000000056657273696F6E537472696E673A59
4099:10001000206D63702D6C34763320332E303863209E
4100:1000200044656320313120313939362031333A305B
4101:10003000363A313600009293FFFC02900008F70434
4102:10004000E00CFF0200009702FF84F7060C3ECFFC95
4103:100050007580F60200029602FF8C9002FF88F7047A
4104:10006000E02000000001203A0000E6010074F68262
4105:100070000000F68200039682FF988796FFFC829626
4106:10008000FFF802140000013C000000000001929300
4107:10009000FFFC029000082210000CF5021494F505F4
4108:1000A0007B00F50EF014F5057B08F706E000F686F8
4109:1000B0007B68C7386A00F7057AF0F502004CF682D3
4110:1000C000000020360002EE010124F5057AF8C5B4DF
4111:1000D0000000C6340000F706E030C72C7000F506BB
4112:1000E0006F44B73250029013FFFC9713FFFC9596B4
4113:1000F000FFF49616FFF09696FFEC07880008E001E3
4114:10010000031C9793FFFC8596FFF48616FFF08696F6
4115:10011000FFEC05AC149406B4000120360002EE0199
4116:1001200000D506300004F5020022F5056F58F005F1
4117:100130006F54F0056F50F0052D408796FFFC8296B6
4118:10014000FFF802140000013C00000000000192933F
4119:10015000FFFC0290000807880008E00129589793E7
4120:10016000FFFCF7020003F705E008F7047AD8F6026F
4121:1001700000019602FF94203A0000E6010191F70683
4122:100180007AE807880008E00103DC9793FFFCF70694
4123:100190007AE8F6020005F63B2800F7067AE0868248
4124:1001A000FF44F602000320360000E60101C9F63BD9
4125:1001B0002800F7046F648682FF4407380001203668
4126:1001C0000000E60101B0F7056F6407880008E00150
4127:1001D00000349793FFFC07880008E001008C979398
4128:1001E000FFFC07880008E00044289793FFFC07887D
4129:1001F0000008E00016F09793FFFC07880008E00174
4130:100200000C609793FFFC07880008E00104089793AF
4131:10021000FFFC07880008E00000209793FFFC078898
4132:100220000008E0000BD89793FFFC07880008E00166
4133:100230001D689793FFFC07880008E0011E50979304
4134:10024000FFFC07880008E0005F689793FFFC0788C1
4135:100250000008E0006DEC9793FFFC07880008E001C0
4136:1002600021D09793FFFC07880008E001222C979388
4137:10027000FFFC9002FF9407880008E0000BFC9793B6
4138:10028000FFFCF40200008796FFFC8296FFF8021440
4139:100290000000013C0000000000019293FFFC02906E
4140:1002A000000822100008F6020000C5B0000020324D
4141:1002B0000002EE010308F5066F44A6AE50020000EE
4142:1002C00000018736000000000001203A0001E6012D
4143:1002D00002FCF50200029513FFFC9693FFFC959635
4144:1002E000FFF49616FFF007880008E001031C9793BF
4145:1002F000FFFC8616FFF08596FFF40000000105ACB8
4146:100300000004E00102AC063000018796FFFC8296F3
4147:10031000FFF802140000013C00000000000192936D
4148:10032000FFFC0290000887160000F6020000F6822B
4149:100330000008963A0008963A000C963A09D8963A80
4150:1003400009DC963A0EF4963A0EF896BA1420963ACC
4151:10035000142490BA148C8696000490BA149096BA1D
4152:100360000000963A00048796FFFC8296FFF802147C
4153:100370000008013C0000000000019293FFFC029085
4154:100380000008859600008716000886160004773856
4155:10039000FFFFC5307000C0325200E40103C9000005
4156:1003A0000001872E000076AD001E76B4FFE5C73849
4157:1003B0006FC07738FFF0F733280006300002C032F4
4158:1003C0005200E40103A005AC00028796FFFC829670
4159:1003D000FFF80214000C013C0000000000019293A1
4160:1003E000FFFC02900008F7020001E00103E8F705B6
4161:1003F0007AD88796FFFC8296FFF802140000013C31
4162:10040000000000000001000000009293FFFC029039
4163:100410000008F502000AF50571CCF00571D4F0056D
4164:1004200071D0F00571C4F5020001F682000020369B
4165:10043000000AEC010464F50571C8F58A1E00F60691
4166:1004400071C4472CFFFC973200180630000406B434
4167:100450000001F70471CC00000001C0367200EC010D
4168:10046000044105AC214CF0057198F5066F689513B1
4169:10047000FFFCF5067B189513FFFC07880008E000D9
4170:1004800015489793FFFCF50605D49513FFFCF782FA
4171:1004900000059793FFFCF5066F689513FFFC07882E
4172:1004A0000008E000161C9793FFFCF5060B709513EF
4173:1004B000FFFCF78200069793FFFCF5066F68951323
4174:1004C000FFFC07880008E000161C9793FFFCF50668
4175:1004D0000BA09513FFFCF78200059793FFFCF50630
4176:1004E00070809513FFFC07880008E000161C9793A6
4177:1004F000FFFCF5060B709513FFFCF782000697933F
4178:10050000FFFCF50670809513FFFC07880008E000EB
4179:10051000161C9793FFFCF50605589513FFFCF50292
4180:10052000000A9513FFFCF506710C9513FFFC078874
4181:100530000008E000161C9793FFFC07880008E00104
4182:1005400005589793FFFC8796FFFC8296FFF80214EC
4183:100550000000013C0000000000019293FFFC0290AB
4184:100560000008F70471C400000001203A0000E60111
4185:10057000057DF68671C4E0010594F7020000F704DA
4186:1005800071D00000000177390002C7386800873A4F
4187:10059000001800000001203A0000E60105ACF70554
4188:1005A0007B10F606710CE00105C0F6057B18F60617
4189:1005B0006F68F6057B189702FF48073821289702D5
4190:1005C000FF4C8796FFFC8296FFF802140000013C66
4191:1005D0000000000000019293FFFC0290000822102E
4192:1005E00000108682FF48F4866F68F4857B18F50456
4193:1005F0007B1026B4000285B60000872A0000762909
4194:10060000001E7630FFE576B5001E76B4FFE5C5AC7A
4195:100610006FC0C73867C07739FFF077B80010703EF9
4196:10062000FFE1E601064575ACFFF0F70471AC000090
4197:10063000000107380001F70571ACF70471ACE00167
4198:1006400008C4F7020001772CFFF8203A0000E60109
4199:10065000067176A9001EF70471A800000001073892
4200:100660000001F70571A8F70471A8E00108C4F702BA
4201:100670000001872A000076B4FFE5C7386FC07739DC
4202:10068000FFF027380004203A0003E20108A400002C
4203:10069000000177390002F68606A4A6B670020000B3
4204:1006A0000001C1340000000106B40001077C000114
4205:1006B00007EC00010844872A0004C4840000C03A03
4206:1006C0004A00E60106D8000000018702FF4800004A
4207:1006D0000001C7385200972A0004872A000400004E
4208:1006E0000001203A2100EE01073CF602000086AA34
4209:1006F00000048702FF4800000001C7385200273875
4210:100700000028C0367200E601073C0000000177FCBB
4211:10071000001D703EFFE1E601073C0000000177FC90
4212:100720000017703EFFE1E601073D0000000177FC85
4213:100730000016703EFFE1E601074420320000F60299
4214:10074000000120320000E601088800000001872A2D
4215:10075000001800000001203A0002EE0108C100006C
4216:100760000001F70471A40000000107380001F7053B
4217:1007700071A4F70471A4E00108C4F7020001872AFC
4218:10078000000400000001203A2100EE0107E0F6021B
4219:10079000000086AA00048702FF4800000001C73855
4220:1007A00052002738000CC0367200E60107E0000056
4221:1007B000000177FC001D703EFFE1E60107E000004C
4222:1007C000000177FC0017703EFFE1E60107E1000041
4223:1007D000000177FC0016703EFFE1E6010880203240
4224:1007E0000000F6020001E0010880203200008702CC
4225:1007F000FF4800000001C738520027380004203AA3
4226:100800000008E6010838F682000077FC001D703E03
4227:10081000FFE1E60108380000000177FC0017703E98
4228:10082000FFE1E60108390000000177FC0016703E88
4229:10083000FFE1E601088020360000F6820001E001B9
4230:10084000088020360000F702000077FC001D703E93
4231:10085000FFE1E60108780000000177FC0017703E18
4232:10086000FFE1E60108790000000177FC0016703E08
4233:10087000FFE1E6010880203A0000F7020001203A7B
4234:100880000000E60108C100000001F70471A00000AB
4235:10089000000107380001F70571A0F70471A0E0011D
4236:1008A00008C4F7020001F704719C0000000107383A
4237:1008B0000001F705719CF704719CE00108C4F70280
4238:1008C0000001F7020000203A0000E601096800007C
4239:1008D0000001F6847B10000000018736000076B529
4240:1008E000001E76B4FFE5C7386FC07739FFF02738B0
4241:1008F0000004203A0003E2010B5077390002F6862B
4242:10090000090CA6B6700200000001C134000000010D
4243:10091000091C00010AE000010AAC00010B14F704F5
4244:1009200071D0F60471CC06B80001C0366200E60151
4245:100930000938C7340000F7020000F58471D40000C4
4246:100940000001C03A5A00470C0001203A0000E601BD
4247:10095000098500000001F70471B0000000010738AC
4248:100960000001F70571B0F70471B0F70471B400002D
4249:10097000000107380001F70571B4F70471B4E00114
4250:100980000B5000000001F48471C8F68571D0949674
4251:10099000FFF4F4847B10C0366200E60109A494964B
4252:1009A000FFECF00571D0F70471D0F00571C88496A2
4253:1009B000FFECC03A5A00470C0001F70571C48726C6
4254:1009C000000800000001703AFFE1E60109E10000C3
4255:1009D0000001F70471980000000107380001F705D5
4256:1009E00071988496FFF40000000120260000E601C3
4257:1009F0000A710000000107880008E001055897937C
4258:100A0000FFFCF602000920320014E6010A4D27001F
4259:100A1000000C203A0001E2010A4DF7062DCCF684C5
4260:100A20002ECC0000000175B50002B62E700206B48F
4261:100A30000001F6852ECC8602FF34F7062E4C2036B8
4262:100A4000001FE2010A4DB62E7002F0052ECCF7040D
4263:100A50002D6800000001873A000000000001873A7D
4264:100A600000280000000107880008C13800009793A3
4265:100A7000FFFCF70471BC8496FFEC07380001F70512
4266:100A800071BCF70471BC86A600048496FFF4F704D9
4267:100A900071B820260000C7386800F70571B8E60174
4268:100AA0000B5100000001E0010B5C00000001F704A5
4269:100AB00071C00000000107380001F70571C0F7049C
4270:100AC00071C0F4847B10000000019493FFFC078840
4271:100AD0000008E000FDCC9793FFFCE0010B50000004
4272:100AE0000001F70471C00000000107380001F7059C
4273:100AF00071C0F70471C0F4847B100000000194936E
4274:100B0000FFFC07880008E000FF309793FFFCE0013E
4275:100B10000B5000000001F70471C00000000107380D
4276:100B20000001F70571C0F70471C0F6847B108702DD
4277:100B3000FF4800000001C7386A00273800049713F7
4278:100B4000FFFC9693FFFC07880008E000FE4897939F
4279:100B5000FFFC07880008E00105589793FFFC879683
4280:100B6000FFFC8296FFF802140000013C0000000028
4281:100B700000019293FFFC02900008F7067080F705D1
4282:100B80007B1807880008E00105589793FFFC8796BB
4283:100B9000FFFC8296FFF802140000013C00000000F8
4284:100BA00000019293FFFC02900008F7066F68F705BA
4285:100BB0007B1807880008E00105589793FFFC87968B
4286:100BC000FFFC8296FFF802140000013C00000000C8
4287:100BD00000019293FFFC02900008F7067B18971320
4288:100BE000FFFCF7066F689713FFFC07880008E0001A
4289:100BF00014F49793FFFCF7067B189713FFFCF70696
4290:100C00006FF49713FFFC07880008E00014F4979333
4291:100C1000FFFCF7067B189713FFFCF706708097130D
4292:100C2000FFFC07880008E00014F49793FFFCF70628
4293:100C30007B189713FFFCF706710C9713FFFC0788CE
4294:100C40000008E00014F49793FFFC8796FFFC82965F
4295:100C5000FFF802140000013C000000000001000049
4296:100C600000009293FFFC02900008F5020004F505D5
4297:100C70007600F0057608F0057604F00575F8F502C3
4298:100C80000001F682000020360004EC010CBCF505E2
4299:100C900075FCF58E6AF8F60675F8472CFFFC97325E
4300:100CA00000180630000406B40001F70476000000C6
4301:100CB0000001C0367200EC010C9905AC214CF50620
4302:100CC00072189513FFFCF50676489513FFFC07880C
4303:100CD0000008E00015489793FFFCF5060DF4951306
4304:100CE000FFFCF782000E9793FFFCF5067218951330
4305:100CF000FFFC07880008E000161C9793FFFCF50630
4306:100D00000DF49513FFFCF782000E9793FFFCF50698
4307:100D100072A49513FFFC07880008E000161C979347
4308:100D2000FFFCF506132C9513FFFCF7820001979347
4309:100D3000FFFCF50673309513FFFC07880008E00000
4310:100D4000161C9793FFFCF50616C89513FFFCF78257
4311:100D500000019793FFFCF50673BC9513FFFC078811
4312:100D60000008E000161C9793FFFCF5061800951389
4313:100D7000FFFCF78200109793FFFCF506744895136B
4314:100D8000FFFC07880008E000161C9793FFFCF5069F
4315:100D900016409513FFFCF78200109793FFFCF506B1
4316:100DA00074D49513FFFC07880008E000161C979385
4317:100DB000FFFCF506132C9513FFFCF50200129513AA
4318:100DC000FFFCF50675609513FFFC07880008E0003E
4319:100DD000161C9793FFFCF00575F0F00575ECF00517
4320:100DE00075F48796FFFC8296FFF802140000013C20
4321:100DF0000000000000019293FFFC02900008221006
4322:100E00000038F70475EC00000001203A0000E6010C
4323:100E10000E2800000001F70475F000000001203AE0
4324:100E20000000E6010E3D0000000107880008E00117
4325:100E300015D09793FFFCE001131800000001F704A0
4326:100E400075FC00000001203A0000E6010E59F6860C
4327:100E500075F8E0010E6CF6820000F70476080000D9
4328:100E6000000177390002C738680086BA0018F70415
4329:100E700076FC00000001203A0000E6010E90F685A5
4330:100E80007660F3067648F30576FCE0010EA4F702DF
4331:100E90000001F3020010F30576F8F3067648F30537
4332:100EA0007700F7020000203A0000E6011315F30670
4333:100EB0007448F70475EC00000001203A0000E601D8
4334:100EC0000ED800000001F70475F000000001203A80
4335:100ED0000000E6010EED0000000107880008E001B7
4336:100EE00016409793FFFCE001131800000001F68400
4337:100EF0007660000000018736000800000001703AAB
4338:100F0000FFE1E6010F21F48200009693FFFC0788C1
4339:100F10000008E00000BC9793FFFCE0011314F30607
4340:100F20007560C3B40000841E0010F6844AA0231428
4341:100F300000209316FFC49416FFE09696FFD4851EFA
4342:100F40000014F7044A9C00000001C0367200EC0156
4343:100F5000100C9516FFE477350001C7386800773923
4344:100F60000002F3064A98C6B8300006B4000CC584E7
4345:100F700000008736000000000001C03A4200E60190
4346:100F80000F9CC62400008736000400000001C03A10
4347:100F90005200E6010FA020320000F60200012032CC
4348:100FA0000000E6010FAD00000001F582000086366A
4349:100FB00000008716FFE000000001C0327200E2016D
4350:100FC0000FE8F5020000C0327200E6010FF0202A9F
4351:100FD000000086B600048716FFE400000001C0365A
4352:100FE0007200E2010FF1202A0000F5020001202A20
4353:100FF0000000E6011001202E0000F5820001202EE5
4354:101000000000E601101020260000F48200012026D6
4355:101010000000E6011045F60200018716FFD4F30632
4356:101020004A9876B90001C6B4700076B50002C6B41D
4357:10103000300006B4001486B600009716FFD8E00111
4358:1010400010B89696FFDC2714002C9713FFFC83162C
4359:10105000FFC4000000019313FFFCF3064A989313AA
4360:10106000FFFC9396FFCC07880008E0012568979362
4361:10107000FFFC8396FFCC20220000E60110B5F602AB
4362:1010800000018716FFD4F3064A9876B90001C6B46A
4363:10109000700076B50002C6B4300006B4001486B6FF
4364:1010A00000009716FFD89696FFDCF7054AA0E001EE
4365:1010B00010BC20320000F602000020320000E601E1
4366:1010C00010CCF4820001E0011124F4820000869625
4367:1010D000FFD80000000177350002C7386800773973
4368:1010E0000002F68642C8A63A6802C7386800753919
4369:1010F000001E7528FFE505B8000286AE000007381F
4370:1011000000049716FFECC63057C07630FFF09616F5
4371:10111000FFF475AD001E75ACFFE5C6B45FC076B4D4
4372:10112000FFF09696FFF020260000E6011138F582C8
4373:101130000000E00111CCF60200008696FFF00000EE
4374:101140000001C7346800C49C7200C02E6A00EC0124
4375:101150001198C5240000C62C00008716FFEC000083
4376:101160000001A6B2700205AC0001C73070007739EB
4377:10117000001E7738FFE5C6B477C076B4FFF0F6AB53
4378:101180002800052800028716FFF000000001C02E8D
4379:101190007200EC01115906300002F3020001F30560
4380:1011A00076F4F60200018716FFF0869E0004C73829
4381:1011B0007000C7384800C6B470008716FFF406B444
4382:1011C00000209702FF6C9482FF509682FF582032D5
4383:1011D0000000E601131000000001F704765CF584BE
4384:1011E00076F807380001F705765CF704765C202E68
4385:1011F0000021E2011230F6862C28F7042D38000079
4386:10120000000106380001F6052D387739000220323A
4387:101210000044E601121CB5BA6802F0052D38F3024D
4388:101220000022F30576F8F3047700E0011234F305A9
4389:1012300076FCF00576FCF70475F800000001203A12
4390:101240000000E6011271F6862C28F7042D38000004
4391:10125000000106380001F6052D3877390002F30247
4392:10126000000F20320044E6011270B33A6802F00524
4393:101270002D38F7047608F684760007380001C03A66
4394:101280006A00E601128CF7057608F0057608F68408
4395:101290007608F7047604F00575F8F60675F8C0369A
4396:1012A0007200470C0001203A0000E60112B9F70570
4397:1012B00075FCE00112C8F702000077350002C7385C
4398:1012C0006000873A001800000001203A0000E601A3
4399:1012D0001309F7057660F7042D38F30672A4F305B9
4400:1012E0007648F6862C2806380001F6052D38773921
4401:1012F0000002F302000E20320044E6011318B33A54
4402:101300006802E0011318F0052D38E0011314F3060C
4403:101310007218F3067330F30576488796FFFC8296C1
4404:10132000FFF802140000013C00000000000192934D
4405:10133000FFFC02900008F70476600000000186BA06
4406:101340000004F704765400000001C7386800F70570
4407:101350007654F70476580000000107380001F705BD
4408:101360007658F70475F8F6847658203A0000E601BE
4409:10137000139DF6862C28F7042D380000000106384E
4410:101380000001F6052D3877390002F502000F2032F2
4411:101390000044E601139CB53A6802F0052D38F704C5
4412:1013A0007608F684760007380001C03A6A00E60144
4413:1013B00013B8F7057608F0057608F7047608F68482
4414:1013C0007604F00575F8F58476F8C03A6A00470CA3
4415:1013D0000001202E0021E2011414F70575FCF7042A
4416:1013E0002D38F6862C2806380001F6052D38773979
4417:1013F000000220320044E6011400B5BA6802F0058C
4418:101400002D38F5020022F50576F8F5047700E001A5
4419:101410001418F50576FCF00576FCF70475ECF50676
4420:101420007218203A0000E6011440F5057648F704EA
4421:1014300075F000000001203A0000E601145500009C
4422:10144000000107880008E00115D09793FFFCE00138
4423:1014500014C400000001F70475FC00000001203AEC
4424:101460000000E6011471F68675F8E0011488F702B1
4425:101470000000F70476080000000177390002C73841
4426:101480006800873A001800000001203A0000E601D9
4427:1014900014C5F7057660F7042D38F6862C28063833
4428:1014A0000001F6052D3877390002F502000E2032D2
4429:1014B0000044E60114BCB53A6802F0052D38F50683
4430:1014C00072A4F50576488796FFFC8296FFF8021411
4431:1014D0000000013C0000000000019293FFFC02901C
4432:1014E0000008F70475EC00000001203A0000E60156
4433:1014F0001540F40200008696000400000001F68505
4434:1015000075EC8696000800000001F6857B3886960B
4435:101510000000F7047648F6857B30F6867218C03AEC
4436:101520006A00470C0001203A0000E6011541F40270
4437:10153000000107880008E00115D09793FFFCF40232
4438:1015400000018796FFFC8296FFF80214000C013C14
4439:101550000000000000019293FFFC02900008F704D5
4440:1015600075F400000001203A0000E60115BCF40209
4441:1015700000008696000400000001F68575F086964E
4442:10158000000800000001F6857B4886960000F704FD
4443:101590007648F6857B40F6867218C03A6A00470C9A
4444:1015A0000001203A0000E60115BDF40200010788A1
4445:1015B0000008E00115D09793FFFCF4020001879624
4446:1015C000FFFC8296FFF80214000C013C00000000B2
4447:1015D00000019293FFFC02900008F70476FC0000E3
4448:1015E0000001203A0000E60115FCF6820010F686A4
4449:1015F0007648F68576FCE001160CF7020001F685C8
4450:1016000076F8F6867648F6857700F7020000203AED
4451:101610000000E6011620F68674D4E001162CF6854B
4452:10162000764807880008E00116409793FFFC8796EC
4453:10163000FFFC8296FFF802140000013C000000004D
4454:1016400000019293FFFC02900008F60475F0000080
4455:10165000000120320000E6011685F7020001F705BF
4456:1016600075F4F6847B48F70576F4F7047B40C6B042
4457:10167000680026B400049702FF6C9602FF50E00158
4458:1016800016A800000001F70475ECF6847B38F5829B
4459:101690000001F58576F4F6047B30C6B8680026B400
4460:1016A00000049602FF6C9702FF509682FF58F58661
4461:1016B00073BCF58576488796FFFC8296FFF8021486
4462:1016C0000000013C0000000000019293FFFC02902A
4463:1016D0000008F7047B280000000107380001F70527
4464:1016E0007B28F70475F4F6847B28203A0000E60195
4465:1016F000172100000001F00575F4F70475EC0000F7
4466:101700000001203A0000E6011725F00575F0078872
4467:101710000008E00116409793FFFCE00117EC000081
4468:101720000001F00575ECF70475FC00000001203A9B
4469:101730000000E6011741F68675F8E0011758F70238
4470:101740000000F70476080000000177390002C7386E
4471:101750006800873A001800000001203A0000E60106
4472:101760001795F7057660F7042D38F6862C2806388D
4473:101770000001F6052D3877390002F502000E2032FF
4474:101780000044E601178CB53A6802F0052D38E001F7
4475:101790001798F50672A4F5067218F5057648F584D3
4476:1017A00076F800000001202E0021E20117E8F686FD
4477:1017B0002C28F7042D380000000106380001F6053A
4478:1017C0002D387739000220320044E60117D4B5BA2B
4479:1017D0006802F0052D38F5020022F50576F8F504CB
4480:1017E0007700E00117ECF50576FCF00576FC8796AE
4481:1017F000FFFC8296FFF802140000013C000000008C
4482:1018000000019293FFFC0290000822100038F704B8
4483:1018100075EC00000001203A0000E60118340000D9
4484:101820000001F70475F000000001203A0000E60115
4485:1018300018490000000107880008E001164097934E
4486:10184000FFFCE0011C7400000001F68476600000DB
4487:1018500000018736000800000001703AFFE1E60150
4488:10186000187DF48200009693FFFC07880008E000D2
4489:1018700000BC9793FFFCE0011C70F3067560C3B4D5
4490:101880000000841E0010F6844AA023140020931642
4491:10189000FFC49416FFE09696FFD4851E0014F7044B
4492:1018A0004A9C00000001C0367200EC0119689516D0
4493:1018B000FFE477350001C738680077390002F30686
4494:1018C0004A98C6B8300006B4000CC58400008736BC
4495:1018D000000000000001C03A4200E60118F8C624EA
4496:1018E00000008736000400000001C03A5200E60103
4497:1018F00018FC20320000F602000120320000E60150
4498:10190000190900000001F5820000863600008716E4
4499:10191000FFE000000001C0327200E2011944F5024C
4500:101920000000C0327200E601194C202A000086B681
4501:1019300000048716FFE400000001C0367200E201D7
4502:10194000194D202A0000F5020001202A0000E601BE
4503:10195000195D202E0000F5820001202E0000E60116
4504:10196000196C20260000F482000120260000E60108
4505:1019700019A1F60200018716FFD4F3064A9876B93A
4506:101980000001C6B4700076B50002C6B4300006B4DB
4507:10199000001486B600009716FFD8E0011A14969638
4508:1019A000FFDC2714002C9713FFFC8316FFC40000F4
4509:1019B00000019313FFFCF3064A989313FFFC9396E0
4510:1019C000FFCC07880008E00125689793FFFC839609
4511:1019D000FFCC20220000E6011A11F6020001871652
4512:1019E000FFD4F3064A9876B90001C6B4700076B504
4513:1019F0000002C6B4300006B4001486B60000971684
4514:101A0000FFD89696FFDCF7054AA0E0011A182032AD
4515:101A10000000F602000020320000E6011A28F482DD
4516:101A20000001E0011A80F48200008696FFD80000D1
4517:101A3000000177350002C738680077390002F68662
4518:101A400042C8A63A6802C73868007539001E752872
4519:101A5000FFE505B8000286AE0000073800049716BF
4520:101A6000FFECC63057C07630FFF09616FFF475AD28
4521:101A7000001E75ACFFE5C6B45FC076B4FFF0969665
4522:101A8000FFF020260000E6011A94F5820000E00134
4523:101A90001B28F60200008696FFF000000001C73404
4524:101AA0006800C49C7200C02E6A00EC011AF4C524C0
4525:101AB0000000C62C00008716FFEC00000001A6B253
4526:101AC000700205AC0001C73070007739001E77380E
4527:101AD000FFE5C6B477C076B4FFF0F6AB2800052862
4528:101AE00000028716FFF000000001C02E7200EC011A
4529:101AF0001AB506300002F3020001F30576F4F6028F
4530:101B000000018716FFF0869E0004C7387000C738B2
4531:101B10004800C6B470008716FFF406B40020970290
4532:101B2000FF6C9482FF509682FF5820320000E6013D
4533:101B30001C6C00000001F704765CF58476F8073829
4534:101B40000001F705765CF704765C202E0021E201A7
4535:101B50001B8CF6862C28F7042D380000000106386F
4536:101B60000001F6052D387739000220320044E601E5
4537:101B70001B78B5BA6802F0052D38F3020022F30590
4538:101B800076F8F3047700E0011B90F30576FCF0058E
4539:101B900076FCF70475F800000001203A0000E60129
4540:101BA0001BCDF6862C28F7042D38000000010638DE
4541:101BB0000001F6052D3877390002F302000F2032BC
4542:101BC0000044E6011BCCB33A6802F0052D38F70457
4543:101BD0007608F684760007380001C03A6A00E6010C
4544:101BE0001BE8F7057608F0057608F6847608F70412
4545:101BF0007604F00575F8F60675F8C0367200470CE5
4546:101C00000001203A0000E6011C15F70575FCE00113
4547:101C10001C24F702000077350002C7386000873ABD
4548:101C2000001800000001203A0000E6011C65F705DD
4549:101C30007660F7042D38F30672A4F3057648F6862D
4550:101C40002C2806380001F6052D3877390002F302FA
4551:101C5000000E20320044E6011C74B33A6802E00131
4552:101C60001C74F0052D38E0011C70F3067218F306A1
4553:101C70007330F30576488796FFFC8296FFF80214CE
4554:101C80000000013C0000000000019293FFFC029064
4555:101C90000008F70676489713FFFCF70672189713AB
4556:101CA000FFFC07880008E00014F49793FFFCF70698
4557:101CB00076489713FFFCF70672A49713FFFC07887A
4558:101CC0000008E00014F49793FFFCF706764897139A
4559:101CD000FFFCF70673309713FFFC07880008E0004D
4560:101CE00014F49793FFFCF70676489713FFFCF7066A
4561:101CF00073BC9713FFFC07880008E00014F4979367
4562:101D0000FFFCF70676489713FFFCF7067448971315
4563:101D1000FFFC07880008E00014F49793FFFCF70627
4564:101D200076489713FFFCF70674D49713FFFC0788D7
4565:101D30000008E00014F49793FFFCF7067648971329
4566:101D4000FFFCF70675609713FFFC07880008E000AA
4567:101D500014F49793FFFC8796FFFC8296FFF8021419
4568:101D60000000013C0000000000019293FFFC029083
4569:101D70000008F68676689693FFFCF68677049693BD
4570:101D8000FFFC07880008E00015489793FFFCF686E3
4571:101D90001DD49693FFFC9013FFFCF686766896930D
4572:101DA000FFFC07880008E000161C9793FFFCF70271
4573:101DB0000022F70576F4F70576F8F00576FCF005D5
4574:101DC00077008796FFFC8296FFF802140000013C22
4575:101DD0000000000000019293FFFC02900008F7044D
4576:101DE00076F400000001203A0022E6011E01000006
4577:101DF00000019713FFFC07880008E0001584979303
4578:101E0000FFFC8796FFFC8296FFF802140000013C5D
4579:101E10000000000000019293FFFC02900008F7060A
4580:101E200077049713FFFCF70676689713FFFC078883
4581:101E30000008E00014F49793FFFC8796FFFC82965D
4582:101E4000FFF802140000013C000000000001000047
4583:101E500000009293FFFC02900008F686781096939B
4584:101E6000FFFCF68678A49693FFFC07880008E00044
4585:101E700015489793FFFCF6861FBC9693FFFCF682ED
4586:101E800000149693FFFCF68678109693FFFC078863
4587:101E90000008E000161C9793FFFCF005789C900268
4588:101EA000FF34F7027FFFF70578A09702FF3087968F
4589:101EB000FFFC8296FFF802140000013C00000000C5
4590:101EC00000019293FFFC02900008F604789C8716AC
4591:101ED000000084960008F5867710873A0008F68699
4592:101EE000218C7539000477390002A73A6802203244
4593:101EF0000000C6A8580084160004C63075809436C9
4594:101F00000004B4AA580287360008F605789C073802
4595:101F10000001E6011F2D973600088702FF30000000
4596:101F20000001C03A4A00EE011F3500000001F485AF
4597:101F300078A09482FF308796FFFC8296FFF8021407
4598:101F4000000C013C0000000000019293FFFC029095
4599:101F500000088596000000000001872E0008F68624
4600:101F6000218C77390002A73A6802F604789CC704EE
4601:101F7000760086AE0008C6307400F7067710F605C6
4602:101F8000789C76B50004C6B470008736000820320D
4603:101F9000000007380001E6011FA897360008F70285
4604:101FA0007FFFF70578A09702FF308796FFFC8296A7
4605:101FB000FFF802140004013C0000000000019293AD
4606:101FC000FFFC0290000822100008F704789C000033
4607:101FD0000001203A0000E60120D1F6027FFF9616AC
4608:101FE000FFF4F6842D40F606771026B4000177350D
4609:101FF0000004C4B86000C338000074350002F6065F
4610:102000007710C0266200EC0120C1F606218CF38413
4611:10201000789CA722600200000001C01E7400E60147
4612:1020200020B10000000186A60000F70478A000009F
4613:102030000001C6B4720020360000EE01209896A67A
4614:102040000000F7042D38F6067710C5186000F686F4
4615:102050002C28862A000405B80001F5852D3877392B
4616:102060000002202E0044E6012070B63A6802F00516
4617:102070002D38862A000800000001962A000CF6067A
4618:10208000218CA722600200000001C7047600C71C53
4619:102090007400E00120B0F705789C8616FFF400007C
4620:1020A0000001C0366200EC0120B0000000019696ED
4621:1020B000FFF424A4001023180010E0011FFC2420CA
4622:1020C00000048616FFF400000001F60578A09602D1
4623:1020D000FF308796FFFC8296FFF802140000013C57
4624:1020E0000000000000019293FFFC02900008871698
4625:1020F000000000000001873A0008F6867710773963
4626:102100000004C738680086BA000C873A000800004F
4627:102110000001C0367200440C00018796FFFC8296D5
4628:10212000FFF802140004013C00000000000192933B
4629:10213000FFFC02900008F702000F203A0000EC01BB
4630:10214000215DF68677189036000027380001C60416
4631:102150000000C03A6200E601214406B40010F60611
4632:1021600078A49613FFFCF60678109613FFFC0788F8
4633:102170000008E00014F49793FFFC8796FFFC82961A
4634:10218000FFF802140000013C000000000001000004
4635:102190000001000000020000000400000008000030
4636:1021A000001000000020000000400000008000003F
4637:1021B0000100000002000000040000000800000010
4638:1021C000100000002000000040000000800000001F
4639:1021D00000009293FFFC02900008F70678B0971376
4640:1021E000FFFCF70679CC9713FFFC07880008E00096
4641:1021F00015489793FFFCF706222C9713FFFCF70274
4642:1022000000159713FFFCF70678B09713FFFC0788BB
4643:102210000008E000161C9793FFFC8796FFFC82964F
4644:10222000FFF802140000013C00000000000192933E
4645:10223000FFFC02900008F6846F440000000187361E
4646:10224000000000000001203A0002E6012270F602C0
4647:10225000000087360EF486B60EF800000001C03A82
4648:102260006A00470C0001203A0000E6012278203283
4649:102270000000F602000120320000E6012294000076
4650:102280000001F70432E800000001203A0000E601F6
4651:1022900022B1F58203E80F814000F70479C80000FD
4652:1022A000000107380001F70579C8F70479C8F582FD
4653:1022B00003E89593FFFCF58200159593FFFCF586E6
4654:1022C00079CC9593FFFC07880008E0011EC0979326
4655:1022D000FFFC8796FFFC8296FFF802140000013C89
4656:1022E0000000000000019293FFFC02900008F70636
4657:1022F00079CC9713FFFCF70678B09713FFFC07889B
4658:102300000008E00014F49793FFFCF70679CC9713CC
4659:10231000FFFCF706793C9713FFFC07880008E000F4
4660:1023200014F49793FFFC8796FFFC8296FFF8021443
4661:102330000000013C000000000001C13C0000021050
4662:1023400000049293FFFC029000082210000C859676
4663:1023500000000000000186AE0004000000012036ED
4664:102360000000E60123842714000C872E00040000DF
4665:10237000000107380001972E0004872E0004E001B9
4666:1023800024349696FFF49713FFFC85160004000092
4667:1023900000019513FFFC9593FFFC9596FFEC0788D1
4668:1023A0000008E00125689793FFFC8596FFEC20224A
4669:1023B0000000E60124340000000186AE0004861609
4670:1023C000FFF400000001C0366200EE0124217735E1
4671:1023D0000001C738680077390002C6B85800773165
4672:1023E0000001C738600077390002C73858008536C9
4673:1023F0000000000000019536000C85360004000046
4674:102400000001953600108536000800000001953661
4675:10241000001426B4000CC0367200EE0123EC00005C
4676:102420000001872E00040000000107380001972EEC
4677:102430000004872E00048696FFF485160004773585
4678:102440000001C738680077390002C72C7000852A60
4679:10245000000000000001953A000C85160004000001
4680:102460000001852A000400000001953A001085163D
4681:102470000008F4020001953A001496AE0008879611
4682:10248000FFFC8296FFF80214000C013C00000000E3
4683:1024900000019293FFFC029000082210000C859628
4684:1024A000000000000001842E000400000001202232
4685:1024B0000000E60125552714000C9713FFFC851634
4686:1024C0000004000000019513FFFC9593FFFC959616
4687:1024D000FFEC07880008E00125689793FFFC8596CC
4688:1024E000FFEC20220000E6012555000000018616C1
4689:1024F000FFF40000000120320000EE012545773195
4690:102500000001C6AC0000C738600077390002C73848
4691:10251000580085360018000000019536000C8536FD
4692:10252000001C0000000195360010853600200000D8
4693:1025300000019536001406B4000CC0367200EC01A0
4694:10254000251100000001872E0004F4020001273845
4695:102550000001972E00048796FFFC8296FFF8021474
4696:102560000008013C0000000000019293FFFC029073
4697:102570000008221000088396000483160000C5009E
4698:102580000000841A0004C4A800009416FFF4C026BA
4699:102590004200E60126D1000000018316FFF400008E
4700:1025A0000001C02A3200E60126D1C7204A00951654
4701:1025B000FFF476B8FFE1C73868007739FFFFC5241C
4702:1025C000700077290001C738500077390002831660
4703:1025D0000000869E0000C5B8300005AC000C872EB8
4704:1025E0000000C6000000C0367200E601261020324E
4705:1025F0000000869E0004872E000400000001C03603
4706:102600007200E601261020320000F602000120329E
4707:102610000000E601262500000001C7000000E001DF
4708:102620002678203A0000869E0000872E00000000D9
4709:102630000001C0367200E201265C00000001E601E4
4710:10264000266420320000869E0004872E00040000CD
4711:102650000001C0367200E201266520320000F60259
4712:102660000001203200004704FFFFE6012679203AEE
4713:102670000000F7020001203A0000E60126B1203AEE
4714:102680000000EE0126A0203A00014304FFFFC03AFB
4715:102690003200E60126C9C0264200E0012590000074
4716:1026A0000001E60126C1C0264200E001259000009D
4717:1026B000000183160008F4020001E00126E0951AEB
4718:1026C0000000E001258CC4A80000E001258CC4288E
4719:1026D00000008316000800000001941A0000C400E6
4720:1026E00000008796FFFC8296FFF80214000C013C64
4721:1026F000000000000001000000009293FFFC029027
4722:102700000008859600048416000084960008F702ED
4723:102710000003C6A04D80C6B67400E6012771C6202E
4724:10272000000020360002E60127A0C5204800C7208F
4725:10273000480027380002C0227200E201279CC538F9
4726:102740000000872E000076AD001E76B4FFE5C73886
4727:102750006FC07738FFF0F733280006300002C03230
4728:102760005200E201274105AC0002E00127A0C5208C
4729:102770004800C720480027380004C0227200E20148
4730:1027800027A0C520480083AD00040000000193B1DC
4731:102790000004C0327200E201278500000001C5205C
4732:1027A0004800C0325200E40127D50000000186AE87
4733:1027B0000000772D001E7738FFE5C6B477C076B5E8
4734:1027C000FFE8F6B3680006300001C0325200E401B1
4735:1027D00027AC05AC00018796FFFC8296FFF8021437
4736:1027E000000C013C0000000000019293FFFC0290ED
4737:1027F0000008841600008696000400000001C7222D
4738:102800006D80E601281020360000E0012874C438ED
4739:102810000000F7020001EE012841F602000076B543
4740:10282000000120360000EE01281C77390001E0018C
4741:10283000284420220000742100017738FFFF063071
4742:10284000000120220000EE012834203A0000E601B9
4743:10285000287100000001C0226A00E4012864000021
4744:102860000001C4206A00773AFFFFE601285476B4DD
4745:10287000FFFFD42007628796FFFC8296FFF80214C0
4746:102880000008013C0000000000019293FFFC029050
4747:10289000000822100004E00128CCF70629DC86BAE3
4748:1028A00000000000000120360000E60128C90000F9
4749:1028B00000019716FFF407880008C13400009793C1
4750:1028C000FFFC8716FFF40000000127380004F6061D
4751:1028D00029E0C03A6200E401289D000000018796CB
4752:1028E000FFFC8296FFF802140000013C000000008B
4753:1028F00000019293FFFC0290000822100004E00106
4754:102900002934F706299886BA000000000001203615
4755:102910000000E6012931000000019716FFF4078846
4756:102920000008C13400009793FFFC8716FFF40000F5
4757:10293000000107380004F60629E0C03A6200E4010D
4758:102940002904000000018796FFFC8296FFF802141C
4759:102950000000013C0000000000019293FFFC029087
4760:102960000008F7047B5000000001203A0000E60157
4761:102970002984F6820001F6857B5007880008E00173
4762:1029800028F09793FFFC8796FFFC8296FFF80214CD
4763:102990000000013C00000000000100000B4C0000A2
4764:1029A0000000000042880000000000005E500000AF
4765:1029B00000000000C7A80000000000010BD00000CC
4766:1029C000000000011C880000000000011E1400002F
4767:1029D00000000001212C00000000000122E40000A2
4768:0229E0000000F5
4769:00000001FF
4770/* This is the Myrinet MCP code for LANai4.x */
4771/* Generated by cat $MYRI_HOME/lib/lanai/mcp4.dat > myri_code4.h */
diff --git a/firmware/qlogic/1040.bin.ihex b/firmware/qlogic/1040.bin.ihex
new file mode 100644
index 000000000000..d1213307f713
--- /dev/null
+++ b/firmware/qlogic/1040.bin.ihex
@@ -0,0 +1,2111 @@
1:1000000007410600001078003A1000005841000037
2:100010004320504F525947495448312039392035EF
3:100020004C51474F43494320524F4F50415249543E
4:100030004E4F49205053303130324920542F462002
5:100040007269776D726120655620726569736E6F93
6:1000500030202E3735362020432073756F74656D40
7:1000600020726F4E202E303050206F727564746392
8:100070004E202E6F2020313024200120FD0404204A
9:1000800082A005004800451038004B10780047104A
10:1000900028004B10B920121278004D10B9202222EE
11:1000A000C120080071201000C3700400C920FF782F
12:1000B00089208611C7705349CB702050CF70202003
13:1000C000D3700700003FD670C1200800192000003F
14:1000D0000920FFFE00210B20A5A5ECA1FF7F642DC8
15:1000E0006B200A0ADCADFF3F542B5B2050501421DB
16:1000F00086A2A5A54000BF1086A30F004000851072
17:100100006A2C5A2AC120000019200F0078006510BF
18:100110006A2C5A2AC12008000920FF7F482144295F
19:100120004B200A0ABCA9FF3F34273B205050142122
20:1001300086A20A0A4000A9104A283A26C1200400D3
21:100140000920FF3F34210B205050142186A250502B
22:100150004000AA1078008E114A283A26C09888A13B
23:1001600000102C210B20A5A5142186A2A5A54000D6
24:10017000BC100A258AA10010C1987800C1100A2578
25:100180007800C1106A2C5A2A30218AA14000282107
26:10019000A2A10052248424842484248424842484DA
27:1001A00092A1007909200000012031007810261D5D
28:1001B000182279200052A02F082411200000A92025
29:1001C0004000A4420981C000DC10F27E2885E67D53
30:1001D000EA7CEE7B8378000031203000CF7801018B
31:1001E0000B7802000F7802004F780300692040521C
32:1001F0000120FD04042082A00500480004113800FD
33:100200000011780008111B683C0078000A11A80052
34:1002100008111B683C001B682800076807000B6872
35:10022000FA000F68080013680500236800002768BB
36:100230000600176808002B6800001F681900692075
37:10024000805411202000092010000B680C080F6852
38:100250001900036800FD076818001A6A002DE8A05D
39:10026000080090A204000981C000221169200055F5
40:1002700009200200A9200001376800000B68400037
41:10028000F07B86A3FFFEC0004811176800011F68BD
42:10029000640078004C11176864001F680200E8AD24
43:1002A000100070005211780039110981C000371117
44:1002B0007810A72278103D497810B5197810334E80
45:1002C000003285A00D009020C370000090006C11DA
46:1002D000C07086A00200C0006C11781084127810E3
47:1002E0009611CC7805A0C0007A1178104F1D10002F
48:1002F000801168008011781086211000801168003C
49:1003000080117810B91AE0006C117810BA4C78009E
50:100310006C118E119011AC24AC24BE49BE49AC24A2
51:10032000AC2478008E11780090117800921178003A
52:1003300094116800011261200000186084A001007F
53:10034000C0000112147805A0C000A711100002120D
54:100350007800011209205B52042105A0C00001129F
55:10036000092064520B200000147986A14200C000CD
56:10037000CC1116780920625264210B20000018600D
57:10038000C6701460CA701C618CA100FF206084A03C
58:10039000FF0005A1CE7078109A197800FF1114782B
59:1003A00086A01800C000D3117810781617780000C6
60:1003B00009206252042165A04000EF117E0C9C6070
61:1003C00060207810171A7F0C9F60000078104E177D
62:1003D00009200C000760030178107619C000FB119A
63:1003E00078109A19092062520B20000009205C52F3
64:1003F00004210B20000005A04000FF110120054052
65:1004000078008612780084127C00C3700000C770E8
66:100410000000CB700000CF700000C070BCA0C0FF17
67:10042000C00052123820790012128412E512A9126B
68:10043000FE120D131313A012661717139812AD12A4
69:10044000AF12B112B3126B179812291365139016DD
70:100450006017B512AF15CB15E7151216681576158E
71:100460008A159E15E913981297139D13A213A713CB
72:10047000AD13B213B713BC13C113C513DA13E613CC
73:100480009812981298129812F513FE130D14511425
74:100490005B146214A814B714C614D8144815581560
75:1004A00098129812981298125D15BCA0A0FFC00077
76:1004B0009812382084A01F0079005B12A417A71798
77:1004C000B7179812981231194E199812981298125B
78:1004D00052195A199812981298129812DB12F412A3
79:1004E0001F135B1386168217961798124718601908
80:1004F0000D1917191B19291998129812CA72C67169
81:100500000120064078008612CE73CA72C67101209F
82:100510000040C27068008712612000001B6001006B
83:1005200091200050E0008F12E000911268009112BB
84:10053000912080407C00C370014078008712C37016
85:1005400006407800871299204100A1204100A9208F
86:100550000500A35378008412C470C37004007A00AD
87:100560007800841278008412780084127800841253
88:1005700091200080C3700000C7705349CB70205099
89:10058000CF702020D3700700003FD6707920000084
90:100590001B78010031203000592000102920570419
91:1005A0005120700461207204B920FFFFC1200000B7
92:1005B0009120005091208040780055047810C41B91
93:1005C000C0009C12D875DC74DA75DE747800E8120D
94:1005D000292000002025D071C873CC72C470781017
95:1005E000FE1A40008412C370024078008412781012
96:1005F000C41BC0009C12D875DC74DA75DE747800F8
97:100600000113292000002025D071C873CC72C4705A
98:1006100078105E1B40008412C37002407800841280
99:10062000C471C87014210A2078008212C471142188
100:1006300078008212C7700700CB704100CF700600AF
101:10064000780084127810C41BC0009C12D875DC7628
102:10065000DA75DE7678002C13292000003025C4706E
103:10066000C872CC73D074C670CA72CE73D27405A02F
104:10067000400055130AA440003C13C80046130180F3
105:10068000927884A000FC40004A13CC7885A0010039
106:10069000CE7801200540780086129A7A9E7BA27D52
107:1006A000A67E967CCC7884A0FCFFCE787800591387
108:1006B000CC7885A00100CE78780084127810C41B15
109:1006C000C0009C12D875DC76DA75DE767800681387
110:1006D000292000003025C470C872CC73D474C67051
111:1006E000CA72CE73D67405A0400091130AA44000CC
112:1006F0007813C80082130180AE7884A000FC40000B
113:100700008613CC7885A00001CE78012005407800C2
114:100710008612B67ABA7BBE7DC27EB27CCC7884A0CB
115:10072000FFFCCE7878009513CC7885A00001CE78B8
116:1007300078008412092061520C21EC7A7800821230
117:10074000092041520C2178008312092042520C21C9
118:1007500078008312612040520C611062780082128E
119:10076000092045520C2178008312092046520C21A1
120:1007700078008312092048520C2178008312092046
121:1007800049520C217800831208790C7A7800821281
122:10079000C471078184A00F00038003800380E8A058
123:1007A0008054006A046884A008004000D713086BD6
124:1007B0007800D8130C6B78008112C4777810C519B3
125:1007C000912000801C6B146A91200180082778001A
126:1007D00081124C7978008312C4777810C519912062
127:1007E00000800869186A106B9120018078008112DE
128:1007F000C47182A11000C8007C1278107F23780099
129:100800008112C47182A11000C8007C1211204152D3
130:1008100004227E001221781038237F017800831291
131:10082000C47119200001042382A0060048001B1493
132:1008300011204914A920080078001F141120411428
133:10084000A9200800042206A140002A14108270008A
134:10085000281478001F1478007C12042382A006005C
135:100860004800331492A249147800351492A241141E
136:100870007E0211204252042212217F017E00781054
137:1008800044237F0178008312E803FA00F401EE02AA
138:100890006400190032004B00E803FA00F401EE0294
139:1008A0000400010002000300612040520C6110624C
140:1008B000C4700E60C87012607800821261204052CD
141:1008C0001461C47016607800831261204052C471B4
142:1008D000112004001F6019001920121286A128009F
143:1008E00040008314112005001F6019001920121206
144:1008F00086A1320040008314112006001F600C0006
145:100900001920222286A13C00C0007C1218607E00C3
146:100910001A61007884A00100C0009E140120FD042B
147:10092000042082A005004800961438009A1478002C
148:100930009E1428009A1478009E1419202222780010
149:10094000A01419201212B823781055237810334EB2
150:100950007F0178008312C47184A1CFFFC0007C1294
151:1009600011204852042212217E00781077237F0143
152:1009700078008312C47182A11000C8007C1211207B
153:10098000495204227E001221781066237F017800EC
154:100990008312C471C87284A1FDFFC0007B1284A2BF
155:1009A000FDFFC0007B12002108790A7800220C7A32
156:1009B0000E7878008212C471078184A00F00038032
157:1009C00003800380E8A0805419200000C872BCD2C4
158:1009D0004000E9149DA31000B4D24000EE149DA382
159:1009E000080000687E0026A240001115026A84A457
160:1009F00000204000FA149DA3100084A400104000C1
161:100A000000159DA3080084A40040400011150F812B
162:100A100084A2004040000D1578109923780011152C
163:100A200078108B2378001115CC72086806A240005C
164:100A30004015A4A2FF0061204052186186A1280041
165:100A40004000271586A1320040002D1586A13C00EC
166:100A50004000331582A4640048003D157800371526
167:100A600082A4500048003D157800371582A4430049
168:100A700048003D15C471C6717F02CA7278007D12AC
169:100A80000A6A9DA30A00046805A306687F020C6B2E
170:100A9000C47178008112C4777810C5199120008044
171:100AA000146A1C6B91200180C8701668CC701E6897
172:100AB000082778008112C4704C794E787800831230
173:100AC000C471C872CC7382A11000C8007C12781067
174:100AD000A72378008112C4777810C519912000806F
175:100AE000086A95A202000A6A91200180082778000E
176:100AF0008212C4777810C51991200080086A94A2E8
177:100B0000F9FF0A6A046805A04000851578106F2275
178:100B100091200180082778008212C4777810C519C7
179:100B200091200080086A95A204000A6A046805A062
180:100B30004000991578106F229120018008277800D5
181:100B40008212C47741200100492005005120200075
182:100B5000912000807810D219912001800827086A1E
183:100B600078008212C477C872CC73C677CA72CE730B
184:100B70007810521AC000C715186805A04000C715A4
185:100B800008277810B723C000C715177815009120E3
186:100B900001807C009120018078008412C477C677A0
187:100BA0004120210049200500512020009120008093
188:100BB0007810D219612040526F6003008267936001
189:100BC0000F00736000001778160078106F229120D4
190:100BD00001807C00C877CA77C477C677BCA700FFBE
191:100BE00091200080612040526F600200736000001D
192:100BF000826793600F001778170078106F2291209A
193:100C00000180412021004920040051201000912042
194:100C100000807810D219C8703668388784A71F0002
195:100C2000C0000616912001807C00CC7884A00300CF
196:100C3000C000361639200000412021004920040060
197:100C4000512008007810C5199120008008680DA86F
198:100C50000A6991200180388784A71F00C0001F16F1
199:100C6000BCA700FF3F8738873F8784A7000FC000DD
200:100C70001F169120008069200001306884A0400088
201:100C800040005F164B680400A9201400486884A047
202:100C9000040040004C1670004C16780043164B6858
203:100CA0000900A9201400486884A0010040005916DA
204:100CB0007000591678005016A920FA0070005F16CF
205:100CC00078005B1679200052177818006120405296
206:100CD0006F6001007360000093600F00CC7885A006
207:100CE0000200CE78086884A0FDFF0A681B684800EF
208:100CF000912001807C00CC7884A0FDFFCE7884A078
209:100D00000100C000821678109C1AC471C6714A791D
210:100D10007C007810C41BC0009C12D875DC74DA7596
211:100D2000DE7478009316292000002025C471C87352
212:100D3000CC72C671CA73CE727920005291200080A5
213:100D4000781080199120018040004A17A9200500E1
214:100D5000A120185291200080A141912001800920FA
215:100D6000200078107B194000B61678109A19780088
216:100D70004A17046084A000FF07800980400019170B
217:100D80007E0C682C912000807810801991200180C1
218:100D90004000EA16002C9E680981C000BE169F60C4
219:100DA00000007F0C7E0C18721C7320742475682C54
220:100DB0009C6865A0400018170920200078107B1956
221:100DC000C0000117046084A0FF0086A00200C000DC
222:100DD000EA16002D02607800D0167F0C7E0C9C6015
223:100DE00060207810171A7F0C9F60000078104E1753
224:100DF00009200C00086085A000020A6078107619AE
225:100E000078109A1978004A177F0C7E0C9C6060203D
226:100E10007810171A7F0C9F60000078104E17092079
227:100E20000C00076003011B6003007810761978102E
228:100E30009A1978004A177F0CC474C873CC72146076
229:100E400091200080177812007E0E712040526F7042
230:100E500005007370000076737A727E7482708770FA
231:100E60000000002C8A708F7000002EA030251C61BD
232:100E7000A26184A1600040003C177810D3487F0E27
233:100E80009665A6659A66AA66AF600000B36000002A
234:100E900078106F22912001807C00C370054078009B
235:100EA0008712A920050099201852912000800A532A
236:100EB00091200180002110A299A30000A1A40000AC
237:100EC000A9A500007C00C471C770000006797800F5
238:100ED0008412C471C671682178006D1769200010F2
239:100EE0000C6916A0042D10A2688D0981C0006F172F
240:100EF00085A20000C0007D17C370004078007F17F6
241:100F0000C3700340CA7078008712112067520C2208
242:100F1000C470038048008F177810513C84A1FF7F74
243:100F2000780093177810443C85A100801220780047
244:100F30008312C47178103B3C006101206752042089
245:100F400084A000800DA10462086378008112E47916
246:100F500078008312C471C6719821A1204200A92093
247:100F60000400A353A02199204200A9200400A35308
248:100F700078008412C470682079200052912000808B
249:100F8000781080199120018040004318076001000B
250:100F90000B6000002B6000001B600600106A8CA232
251:100FA0000F0084A2F000038003800380038005A16A
252:100FB000166084A200084000DE171B600A0078005B
253:100FC000E41784A200104000E4171B600C0084A208
254:100FD00000034000ED172B600100048004800480B2
255:100FE00085A001001E60236000002760000084A22D
256:100FF00000044000FA172B600000A920060080AC16
257:101000000B00A02080AD05009820A35384A200030C
258:10101000C0000F1846604A604E60526096609A6049
259:10102000780019180068466004684A60086E4E66C9
260:101030000C6D526596659A66146091200080177851
261:101040004200082C612040526F6005007360000070
262:10105000776000007B6000007F60000082608A6132
263:1010600084A200048E60912001807E0E71202000F9
264:1010700007700A0007700200037000007F0E9120C5
265:10108000008078106F22912001807C00C3700540A1
266:10109000780087127E0C7E0D7E0E7E0F91200080E0
267:1010A000712040527920000161201000A0706DA0D5
268:1010B00040000319046A94A2FF0086A207004000C2
269:1010C000621886A20F00C00003191C6984A1C00029
270:1010D0004000031984A18000C000D318246884A0B4
271:1010E00000FF85A019002668B071FF8140008918B3
272:1010F0007E0D69202000076810000869086806A1B5
273:10110000C0007A180C690C6806A1C0007F1884A181
274:10111000FF00C0007F187F0DB87884A01F80C0003A
275:101120008918487885A00C004A78B071FF8140008A
276:10113000AC18B37000007E0D69202000076818000D
277:10114000046884A00800C0009D18076808000468AF
278:1011500084A00800C000A418076802007F0DC461C5
279:10116000C862CC63C661CA62CE637E0E7120005233
280:1011700066726A7380AE19007F0E487884A00C00F6
281:10118000C000BA187810E147A3780000587884A00E
282:10119000FFED5A78B47080A0DA001A787F0F7F0EC6
283:1011A0007F0D7F0C9120018078008412246884A038
284:1011B00000FF85A019002668B87884A01F80C000B1
285:1011C000D918487885A00C004A78487884A00C008B
286:1011D000C000E218B071FF8140000119B370000037
287:1011E0007E0D6920200007681800046884A00800AC
288:1011F000C000F21807680800046884A00800C00056
289:10120000F918076802007F0D7800CB187F0F7F0E5A
290:101210007F0D7F0C9120018001200540780086120F
291:101220008079C671C47182A10300C8007C128279E2
292:10123000780084128079C671780084127479C6713E
293:10124000C47176797879CA71C8717A797C79CE71EE
294:10125000CC717E79780084127479C6717879CA71FC
295:101260007C79CE71780084120079C671C4710279DC
296:101270000120FD04042082A0050048004019380028
297:10128000421978004C19A8004C198CA10100C0002B
298:101290004A19B920222278004C19B920121278007C
299:1012A00084120079C67178008412092074520421D6
300:1012B000C670C4700A207800841209207452042178
301:1012C000C67078008412C471078184A00F00038067
302:1012D00003800380E8A08054146AB4D240007119DE
303:1012E0001120010078007319112000000C6B7800A8
304:1012F000811280AC01007810801B7C0080AC010062
305:101300007810201B7C00507865A040008819042CC0
306:101310005278632000007C007E0F792000525078C4
307:101320006DA040009819042D5278036800000768EA
308:1013300000000B6800007F0F7C00912000807E0F72
309:101340007920005250786220002C05A0C000A71917
310:1013500078108C2452787F0F912001807C007E0FC2
311:101360007920005250786A20002D52787F0F7C003F
312:1013700011200079527AEC7B19834000C21980A2B7
313:101380003100122010207800B919132000007C00D1
314:1013900084A7000F0B8084A71F00038003800380B5
315:1013A000038005A1E8A000557C007810C51900292C
316:1013B0002A68002A2E68086884A0EFFF0DA80A6931
317:1013C000092052520C21046805A04000041A16A1FD
318:1013D000C000EF196020006006687E010B2000004D
319:1013E0007800F219092000007E01046865A0400021
320:1013F000011A006006687810311A7810CB1C10684A
321:1014000001801268C000F2197F01026906697C0040
322:1014100065A04000161A08209C6005A04000131A21
323:1014200062209F60000065A07800091A5078527908
324:1014300062207C0065A04000301A08209C6005A056
325:101440004000251A62209F60000065A078001B1AEA
326:101450007E0F7920005291200080507852797F0FC2
327:101460006220912001807C00076003018F600000F2
328:10147000A9201C0080AC0500A02001200000A44091
329:1014800028681A602C6822607C007E0E7120405211
330:101490004C708CA00002C000501A88A080520A2D07
331:1014A00000804E7006A07F0E7C007810C519912038
332:1014B000008004681E7865A040009B1A7800631ABB
333:1014C000002C1E78006065A040009B1A0C6006A3EB
334:1014D000C0005D1A106006A2C0005D1A282C012011
335:1014E0005252042006ACC000741A7800991A04689D
336:1014F00006ACC000811A006065A00668C0008B1AA7
337:101500000368000078008B1A00641C786020026475
338:1015100086A40000C0008B1A002C02686025781099
339:10152000311A1B600500236020007810CB1C106866
340:10153000018050108C24126885A0FFFF7C003920A8
341:101540000000412021004920040051200800912082
342:1015500000807810D219388784A71F00C000A61A0F
343:10156000BCA700FF3F8738873F8784A7000FC000D4
344:10157000A61A912001807C0061200000186084A0E0
345:101580000100C000CA1A91200080E078E3780000D2
346:101590009120018005A0C000CB1A7C008CA0F0FF38
347:1015A0004000D11A78108C247900D31AE31AE61A75
348:1015B000EC1AF01AE41AF41AFA1AE41AE41A951C4E
349:1015C000B91CBD1CE41AE41AE41AE41A7C00781071
350:1015D0008C2478109C1A012001807800C31C012003
351:1015E00003807800C31C012004807800C31C78109D
352:1015F0009C1A012006807800C31C01200780780017
353:10160000C31C3020382182A721004800061B092076
354:10161000200000267810201BC0001F1BBAA7200046
355:1016200048001E1B40001E1B0827B0A6200090A2E9
356:10163000400099A30000A1A40000A9A50000780023
357:10164000001B06A07C00FF8140005B1B992030003E
358:10165000A0200C7084A0FF004000321B0770040023
359:10166000047084A00400C0002D1BA8211770000086
360:101670000B8112711A721E73227426750C7885A064
361:1016800001000270077001000120FD04042082A007
362:101690000500C8004F1B09202200042184A000403F
363:1016A000C000411B08700B80C800411B077002007E
364:1016B0008CA0E001C0005B1BA55306A003700000D6
365:1016C0007C003020382182A721004800661B0920B9
366:1016D000200000267810801BC0007F1BBAA72000C6
367:1016E00048007E1B40007E1B0827B0A6200090A269
368:1016F000400099A30000A1A40000A9A50000780063
369:10170000601B06A07C00FF814000C11B9820A12027
370:1017100030000C7084A0FF004000921B0770040092
371:10172000047084A00400C0008D1BA8211770000065
372:101730000B8112711A721E73227426750C7885A0A3
373:1017400000000270A653077001000120FD04042070
374:1017500082A00500C800B01B09202200042184A03B
375:101760000040C000A21B107084A000F04000B91B14
376:10177000077008007800BD1B08710381C800A21B18
377:101780000770020084A1E001037000007C000120CA
378:10179000FD04042082A00400C800CD1B7800D01BEB
379:1017A00006A07800D21B85A001007C007E0E71206F
380:1017B0000052082D5870026805A0C000DD1B5E7144
381:1017C0005A717F0E7C00082C5878026005A0C0007A
382:1017D000E71B5E795A797C009120008014617810B3
383:1017E0008021006984A10001C000352084A100028D
384:1017F000C00031201C6805A0C0003D20036000002F
385:10180000082C5C7865A0C000051C5A797800061C7D
386:1018100002615E799120018078108C227C007E0E1E
387:101820007120005258706DA040001A1C00685A7058
388:1018300005A0C000191C5E70FF8D7F0E7C007E0D20
389:101840007E0C7E0F7920005280AF16006020006071
390:1018500005A04000431C6820146806A3C000331C88
391:10186000286884A0FF0006A44000361C602D780084
392:10187000241C006805A00260C000421C80AF160056
393:1018800006AC4000411C002C5E78002D7F0F7F0CC1
394:101890007F0D05A07C007E0D7E0C7E0F792000520E
395:1018A00080AF16006020006005A040006B1C68201F
396:1018B000146884A0FF0006A340005E1C602D780021
397:1018C000501C006805A00260C0006A1C80AF1600B2
398:1018D00006AC4000691C002C5E78002D7F0F7F0C49
399:1018E0007F0D05A07C007E0D7E0C7E0F79200052BE
400:1018F00080AF1600602000606DA04000901C14684E
401:1019000006A34000831C602D7800781C006805A0A9
402:101910000260C0008F1C80AF160006AC40008E1C19
403:10192000002C5E78002D7F0F7F0C7F0D05A07C00C2
404:101930009120008069204052006886A0000040008D
405:10194000A31C91200180E37809007C008068BCA082
406:1019500000FF412021004920040051201000781090
407:10196000D219388784A71F00C000AC1C91200180C9
408:1019700001200A807800C31C01200C807800C31C61
409:1019800078109C1A01200D807800C31CC270612061
410:1019900000001B600100912080407C000460082C46
411:1019A00063200000847800808678887805A08A7992
412:1019B0004000DA1C022C7800DB1C8E797C00076862
413:1019C00003017E0C61200052082D6B200000846012
414:1019D00000808660886005A08A614000EF1C022DAF
415:1019E0007800F01C8E617F0C7C007810031D400095
416:1019F000021D7E0C9C6065A04000FD1C7810171A2B
417:101A00007F0C9F60000078109A197C008C7865A08C
418:101A10004000151D91200080847801808678042C78
419:101A20008E7805A0C000131D8A7800809120018067
420:101A30007C00A920100006A0048086808E81C8004A
421:101A40001F1D00A27000231D78001A1D86808E8144
422:101A50007C007E15A920100005A04000491D1AA198
423:101A6000C800491D13828D8148003A1D1AA1C80083
424:101A70003B1D7000411D78002F1D1AA10823108204
425:101A80007000411D78002F1D7E00003284A0FFF7FA
426:101A900080207F007F157C007E00003285A000083A
427:101AA0007800451D9479D07006A14000BD1D91209D
428:101AB000008071202000047005A0C000BD1D0870CA
429:101AC000087206A2C000BD1D86A20800C000BD1D90
430:101AD00071201000781080194000BD1D9C7A987B01
431:101AE000A47CA07D84A100FF40008B1D312000005C
432:101AF0000B81B5860B81B5860B81B5860B81B586CA
433:101B00000B81B5860B81B586002110A2002619A392
434:101B1000A1A40000A9A500007800951D07810480FC
435:101B2000048010A299A30000A1A40000A9A50000B0
436:101B30000920200078107B19912001804000B41DFD
437:101B400078109A19A8780080AA7886A00200C000B0
438:101B5000BD1D91200080E3780200AB780000CC78B6
439:101B600085A00300CE78912001807800BD1DAB7860
440:101B7000000078104921046084A00F007900C21D84
441:101B800071201000912001807C00D21DF41D1A1ECE
442:101B9000D21D371EE11DC91FE41FD21DEE1D141EEC
443:101BA0007F1EEE1E571F691FE01F39200004DC78DE
444:101BB00005A7DE78086005A70A60781064209C609D
445:101BC000DA78781031217C00DC7884A000014000B4
446:101BD000E81D7800D21D1C6085A080001E60780082
447:101BE000FB1D7810C41BC000D21D78106321DC7867
448:101BF00084A000014000FB1D7800D21DDF780000AA
449:101C00000460078084A0FF00D27801809F600000FC
450:101C10004000111E781064204000111EDC7885A061
451:101C20000001DE787800131E781088207C00781080
452:101C3000C41BC000D21D78105F21DC788CA0000E80
453:101C4000C000231E84A00001C000251E7800D21D04
454:101C500078106420C000361E04618CA1FF0086A1AC
455:101C600007004000212086A10F00400021207810AD
456:101C700088207C00DC7884A0000140003E1E7800B3
457:101C8000D21DDF780000146711200100A920010097
458:101C9000186084A0FF0005A04000611E1120010013
459:101CA000BCA700FFA92020008EA001004000611EFB
460:101CB0003920000011200200A92000018EA002009E
461:101CC0004000611E78007C1E7810C51991200080AC
462:101CD0002B6800002F680000086884A0DEFF0A68F7
463:101CE000E8AD1000912001807000751E7800631E21
464:101CF000118240007C1EA92000017800631E78102C
465:101D00009A197C0001206752042084A000804000C2
466:101D10004920146178108021006984A101004000ED
467:101D2000A01E286084A0FF00C0004120006884A09D
468:101D3000010040004920036800000B6800000768AC
469:101D4000000078005120112001002060F4D04000F4
470:101D5000A81E95A20200C4D04000AD1E95A20800A6
471:101D6000CCD04000B21E95A200041C6084A00200EA
472:101D70004000B91E95A204002C608CA0FF0082A137
473:101D8000020048004D2082A11B00C8004D204000E9
474:101D90004D200E692C6007808CA0FF0082A10200FC
475:101DA00048004D2082A11B00C8004D2040004D205E
476:101DB0001269306005A0C000DC1E01201E000080FA
477:101DC0001668286084A0FF0040004920066828604B
478:101DD000078084A0FF00400049200A68026A78005A
479:101DE000512001204052042086A00700C000531F4C
480:101DF00001206752042084A0008040004920146123
481:101E0000781080210120525204201020FF824000CF
482:101E10000E1F80A00500042084A0FF0006A1C000C2
483:101E2000531F91200080046A086B186484A4030087
484:101E300040002D1F28618CA1FF000180C000231FDE
485:101E4000002110A24800531F78002D1F0180C00000
486:101E5000531F002112A24800531FFF824000531F4E
487:101E600084A40C004000471F28610F818CA1FF0053
488:101E700082A00400C0003F1F002118A34800531F88
489:101E80007800471F82A00400C000531F00211AA33E
490:101E90004800531F306005A040004D1F00801668A9
491:101EA000066A0A6B91200180780051209120018000
492:101EB00078004D2014617810802191200080086BFB
493:101EC00018834800651F0A6B91200180780060200C
494:101ED0009120018078004D202460078084A0FF00BD
495:101EE0004000871F86A08000C000C71FA9200800EF
496:101EF0006920107691200080006884A0FFFC0268B1
497:101F0000E8AD08007000831F7800791F91200180E0
498:101F100078005120286015A04000C71F1461781078
499:101F200080217E0C7E0DE8AD0700912000800068C6
500:101F30000DA04000C31F06A240009E1F682178002C
501:101F4000941F602100600268682C7810AC197F0D26
502:101F500018680DA04000BB1F602000621A6A1C6A4E
503:101F600002621E6878108919A02D9821A9203100DD
504:101F7000A353602D7810CB1C7800BE1F086800802A
505:101F80000A68912001807F0C7800602091200180F8
506:101F90007F0D7F0C78004920146178108021006843
507:101FA00084A001004000392091200080046A108242
508:101FB0004800DC1F066A9120018078006020912093
509:101FC000018078004D207810C41BC000D21D146120
510:101FD00078108021BE60BB600000006984A1080009
511:101FE0004000F31F206085A00001226084A1010051
512:101FF0004000492084A10001C000352084A10002D6
513:10200000C00031201C6805A0C0003D20046084A0F1
514:10201000FF0086A00F00C0000C2078106321DF783D
515:1020200000000460078084A0FF00D27801809F60D8
516:102030000000400021207810642040002120DC783E
517:1020400085A00001DE787C00D7780000DB780000F6
518:10205000246084A000FF26607810AC3A40004F1D39
519:102060007810E91B78004F1D0920170078005320D5
520:1020700009200E0078005320092007007800532023
521:10208000092035007800532009203E0078005320B5
522:10209000092004007800532009200600780053200E
523:1020A000092016007800532009200100246084A034
524:1020B00000FF05A12660912000807810CB1C9120A4
525:1020C000018078004F1D78109A1978004F1DD47840
526:1020D0006DA0C0006F20002CD678DA789F600000D9
527:1020E00078007B20002C9E689F600000D678002D31
528:1020F0000260D87806ADC0007B200260D0780180F5
529:10210000D278C0008720DC7884A0FFFEDE78D87803
530:10211000602006A07C002EA030251C61A26184A155
531:10212000FFE11E6084A16000400097207E0E7810C1
532:10213000D3487F0E9665A6659A66AA66AF600000D2
533:10214000B360000014677810C51991200080A0606A
534:1021500084A00080C000BE20086884A00100400068
535:10216000BE20912001807810311A912000807810D3
536:10217000CB1C91200180D7780000DB78000078002C
537:102180003021246096A00100C000C5200080266098
538:10219000106A14689120018002A24800D4204000F7
539:1021A000D420392000027810312178003021082C09
540:1021B00091200080A06084A0008040000121006880
541:1021C00065A040000621046A7E0E71204052007016
542:1021D00084A001004000FB20487006A2C000FB2044
543:1021E000046B1C2360210263002305A0C000F620BD
544:1021F0000269602202617F0E78000D216021026277
545:1022000006697F0E78000D21006865A04000062158
546:1022100002610269C0000A210669602103600000B2
547:102220006021A06084A0008040001721086884A07D
548:10223000FCFF0A681068008012689120018008681D
549:102240008CA040004000262186A040000A6878103B
550:10225000421A9120008078106F2291200180DB7853
551:102260000000D77800007C00086005A70A60912074
552:1022700000807810CB1C91200180D87865A04000A8
553:1022800044219C60DA789F60000078003421D77880
554:102290000000DB7800007C009079947800800AA12F
555:1022A000C800502106A09678D270047805A040009E
556:1022B0005E2101800678C0005E2168005E219120C9
557:1022C00080407C00392077217800652139207D21EC
558:1022D000042705A04000762100AC6820086B0C6C38
559:1022E0001069146A0A690E6A126B166C38877800D6
560:1022F00065217C00030009000F0015001B00000091
561:1023000015001B0000007E0C78103B3C682C7F0CF5
562:102310007C001000F7216800F72129200000CB780D
563:1023200000008C7865A04000F0210920745204213F
564:1023300084A001004000BE21046086A00301C0000B
565:10234000BE21186005A0C000BE21146005A0C00019
566:10235000BE217E0D69200000186884A00100C00025
567:10236000BD210C60C6701060CA70C37020801B68ED
568:102370000100912080407F0D7810F21C7800F5213B
569:102380007F0D7810F8214000F021046294A2FF0034
570:1023900096A203004000D021046296A21001C00062
571:1023A000DE21CB780100046294A200FF1782118223
572:1023B0004000DE21FF85C000F021108202A2C8008B
573:1023C000F0217E05781007227F054000EB21E078A0
574:1023D00086A003004000F0217800DE212885C8781F
575:1023E00005A040008E21FF854000F721912080400C
576:1023F000B078D6707C00AC7BB079D47002A1C000FC
577:102400000122002305A07C004800052202A37C00D5
578:1024100002807C000120FD04042082A00500C80089
579:1024200021229120008071202000047005A0C000AE
580:1024300056220870087206A2C000562286A2080022
581:10244000C00056227120100078105B220920200065
582:10245000046086A00301C0003022286005A0C000EF
583:10246000302209200C007810761940004922C478E7
584:102470000080C67886A00200C0005622912000800D
585:10248000E3780300C7780000CC7885A00003CE78FD
586:102490009120018078005622C77800007810F21C45
587:1024A000AC79B07800800AA1C800542206A0B278A6
588:1024B00006A071201000912001807C00078104801B
589:1024C0000480B87AB47BC07CBC7D10A299A30000C4
590:1024D000A1A40000A9A500007C0009205B52912066
591:1024E00000800A207E0F7E0E71204052007086A070
592:1024F0000000C000892209201252042105A0C0005A
593:10250000892279200001307884A0C000C00089228F
594:10251000180089221B784B007F0E7F0F7C007E0FF6
595:102520007E0E7120405291200080007086A0000035
596:10253000C000A22279200001307884A0C000C00031
597:10254000A2221800A2221B784D00912001807F0E4C
598:102550007F0F7C007E129120002371204052792051
599:1025600000014B780F009800B52238787800AE2231
600:10257000A9204000007882A004004800BE22A920C3
601:1025800060009B780000AF780000AF78000070001A
602:10259000C8227800C022007882A004004800D72218
603:1025A000B77093001920F04F781013232F7001801B
604:1025B0007800E322B77000001920704E78101323C2
605:1025C0001920AF4E781013232F7000800370000085
606:1025D00078102024047084A00F007E010920FD04DF
607:1025E0000C218AA105004800F8223800FE2285A0AF
608:1025F0008062780000232800FE2285A08062780097
609:10260000002385A0C0627F0106780F7804B243786A
610:10261000D800537880000B7808004770080053708A
611:102620007F524F7000007F1200207C007E137E14CA
612:102630007E157E04A1202B01042305A09A7840007A
613:1026400033231883242318839823A82484A400FF09
614:1026500040002B2382A40001A92000012020A653C2
615:1026600005A0C00022231833780019237F047F15AA
616:102670007F147F137C008CA10F0011200101042224
617:1026800084A0F0FF05A11220781020247C001120E6
618:102690000101A92009000B8170004D237800482317
619:1026A0008CA1000E042284A0FFF105A112207C0061
620:1026B00009200101A9200500138270005E23780023
621:1026C000592394A2E000042184A01FFF05A20A2040
622:1026D0007C0011200101A9200C000B8170006F23E8
623:1026E00078006A238CA100F0042284A0FF0F05A1CA
624:1026F00012207C0011200201042284A0CFFF05A13A
625:1027000012207C000381038080A020007E0C6120C9
626:1027100000019A60AC62AC637F0C7C000381038093
627:1027200080A022007E0C612000019A60A46084A039
628:10273000DFFFAE607F0C7C000381038080A022005D
629:102740007E0C612000019A60A46085A02000AE602C
630:102750007F0C7C000381038080A020007E0C612020
631:1027600000019A60A460AE621020A460AE631820DD
632:102770007F0C7C00912000807E0C7E0E186805A0E6
633:102780004000FE2361200076781006244000E823F4
634:10279000A9200000612000757E0C781006244000FE
635:1027A000D6237F0C608C7000D4237800C923780076
636:1027B000FE237F0082A000757120405286708271D6
637:1027C000012004006E7093700F0073700000781089
638:1027D0006A227800FA23C06005A0C000FE237120A1
639:1027E00040528271002C8A70012006006E70937036
640:1027F0000F007370000078106A220120000078003A
641:102800000024012001009120018005A07F0E7F0C93
642:102810007C00042C05A040001D2460200C6006A351
643:10282000C0001A24106006A2C0001A24146006A179
644:10283000C0001A2406A078001F2400607800072436
645:1028400085A001007C00112041520C228CA10F00B8
646:1028500011203B01042284A00001400036242120E5
647:1028600004FF22210B810B810B810B818DA1000FB5
648:1028700004217C007E0EE4688CA0200040008A24A5
649:1028800084A00600C0008A241460078084A00F0082
650:10289000038003800380F0A08054047084A00A00A9
651:1028A000C0008A24087194A100FF40008A248CA1F2
652:1028B000FF0001200C0006A140007124012012003D
653:1028C00006A1400075240120140006A140007924CF
654:1028D0000120190006A140007D240120320006A13C
655:1028E0004000812478008524092012007800872484
656:1028F0000920140078008724092019007800872413
657:10290000092020007800872409203F0078008724D0
658:1029100011200000002105A20A707F0E7C006800D3
659:102920008C2491200080712000007E00187084A00B
660:102930000100C00093247F0071201000CA707F0046
661:10294000C670C3700280DB704107DF700600712023
662:1029500000001B700100912080407800AA247E10A6
663:102960007E007E12912000233C7F587E307C387D93
664:10297000C277C674CA76CE7594A53F009CA40300A6
665:1029800084A40F007900C124D324D324D3240D2898
666:10299000093AD12402250C25D124D124D124D124D3
667:1029A000D124D124D124D12478108C24078584A06B
668:1029B0001F007900D82416250D28C729C42AEC2A1F
669:1029C0008C2D37309A30FB3080313832D6320225A8
670:1029D000E9280C30F824AC3DCC3D8F3F9B3F744040
671:1029E000F824F82449414D41AA3DF824FA3EF82440
672:1029F0005E3C0C25F82478108C241800B1247F123A
673:102A0000912001807F007F107C001920494F7810B1
674:102A100013232F7001001B784F007800FA2419202F
675:102A2000AF4E781013232F7000801B78CD007800F4
676:102A3000FA24427209200F520B20000084A50100E5
677:102A4000C000723C4000332578108C2403700000D5
678:102A50004B70000043700000377000007810E039C0
679:102A60001800B12409200F520B200000687005A047
680:102A7000C000FE256C7084A0070079003C25352637
681:102A8000442550256D258F25DC25B5254425781056
682:102A9000C839092048007810D82EC0004E25037090
683:102AA00004007800FA247810C839C0006B258070C3
684:102AB000078082789B781000AB780C009B786000D0
685:102AC000AB7801005B7804000920DD007810CC2E83
686:102AD000C0006B250370040093700F007800FA2487
687:102AE0007810C839C0008D258071078182789B7865
688:102AF00010008CA11F008DA1C000AA79AB78060040
689:102B00009B786000AB7802005B7804000920DD0050
690:102B10007810CC2EC0008D250370040093700F0038
691:102B20007800FA247810C839C000B3258071078175
692:102B300082789B7810008CA11F008DA1C000AA791B
693:102B4000AB7820008471AA79AB780D009B78600087
694:102B5000AB7804005B7804000920DD007810CC2EEF
695:102B6000C000B3250370040093700F007800FA24AE
696:102B70007810C839C000DA258071078182789B7887
697:102B800010008CA11F008DA1C000AA79AB780600AF
698:102B90009B786000AB7802005B7804000920DD00C0
699:102BA0007810CC2EC000DA2588708B700000682069
700:102BB0004A700370020093700F007800FA247810B6
701:102BC000C839C000FA2488706820146F7810BD38A6
702:102BD000502C78107A3A9B781000146884A01F005B
703:102BE00085A08000AA781C6E412001008C7084A012
704:102BF0000004012004004000FC25012006007800AC
705:102C00001D277810C839C000FA249B78100068701E
706:102C10006820146F7810BD38502C78107A3A08600C
707:102C200085A010000A60246805A040001C2682A030
708:102C3000060048001A2678001C2627680500146B39
709:102C40009CA31F009DA3C000587084A0008040007A
710:102C50002A2684A6010040002C269CA3BFFFAA7B45
711:102C600031202000412001000120030078001D27B1
712:102C70001800B1244C7485A4000040004F2680A0A9
713:102C800080523020507108812AA148004626092030
714:102C9000805264210465FF85C00060262184C00045
715:102CA00040265271037000004B700000407005A078
716:102CB0004000723C7800FA244C76B0A680525071E5
717:102CC000002678004B265271682558254A75502CED
718:102CD000346085A00000C0005D2608673A7784A7AD
719:102CE0003F034000962684A72100C0005D2684A7EC
720:102CF000020040007F2684A7040040005D26BCA798
721:102D0000FBFF0A6784A70800C0005D2684A71000A7
722:102D1000C0005D2684A70002C0005D2684A70001D4
723:102D200040009626186005A0C0005D26BCA7FFFEE7
724:102D30000A67236800001C6E84A60E00186140001C
725:102D4000A6261C6002A14800A9264000A9267800FA
726:102D50005926FF81C0005926C368000084A780005F
727:102D6000C000B1260C702260BCA77FFF0A677810F4
728:102D70007A3A1800B1249B78100046A07810C83920
729:102D8000C000FA24146B9CA31F009DA3C0005870C0
730:102D900084A000804000CD2684A601004000CF26FC
731:102DA0009CA3BFFF84A610004000D5269DA3200051
732:102DB000AA7B408884A60E00C000E026BDA71000B4
733:102DC0000A6778001B2758718CA100084000CB349B
734:102DD0001120200084A60800C000F126108284A6DD
735:102DE0000200C000F1261082AA7A40887810E039EB
736:102DF000146A0C6108818CA1FF00E0A10075642CAD
737:102E0000FF8C40001227146006A2C000FC26B860A8
738:102E10000180BA60C000F7267E0C602A086085A099
739:102E200000010A607F0C780035267810C839C00090
740:102E3000FA24602A0E61AA794088327101200100CB
741:102E40007E005C7184A118004000382784A1100026
742:102E500040002B277810D036C0005B2784A10800E3
743:102E600040003827A06984A10006C00038277810E8
744:102E7000BB3578005B27A06984A1000840004F277C
745:102E80007E0C7E026029006085A000200260046143
746:102E90008DA1100006617F027F0C7810D036C00033
747:102EA0005B27A06984A100024000572778100C36E8
748:102EB00078005B2784A10004C0003427A06984A1A6
749:102EC00000104000662714698CA100FF0F81781064
750:102ED0008B237F0002708CA6E00084A66000400077
751:102EE000742786A06000C00074278DA10040FF8871
752:102EF000400079278DA104005A79B6699B7860005B
753:102F00000028AA789B78610018688DA0008084A0B2
754:102F1000FF7F1A698CA680004000982797700000F8
755:102F20008AA00D00500096278AA00C0096710120FF
756:102F30000C000C809A71AA7808800C814000D13472
757:102F40008CA1F800C000D1347E157E137E14A12020
758:102F50002B019B7800000080AC8080AD0B00982096
759:102F6000A6537F147F137F15146807808278946DB1
760:102F7000D67DDE7D986ED27EDA7E7810C839C000AC
761:102F8000CF272C7003804800C8271920AF4E781037
762:102F900013232F700080307884A0C000C000CF279A
763:102FA0009800D727086084A0EFFF0A607810E03906
764:102FB00078002325007284A2070086A00100C000CB
765:102FC000E4271B784F007810E0397800F527B46AC1
766:102FD00095A200205A7A1B784F007810E0390072D1
767:102FE000002505A64000F52784A2070079100328D4
768:102FF00080AD0900367084A2070086A00100C000E1
769:10300000FA24186000801A607800FA240B284B4BD1
770:103010004B4B3A4B4B4B0B283A4B0B2878108C24DC
771:103020007810C8397E0F79200052CC787F0F84A0A9
772:103030000100400031286C7086A00100C0002028EB
773:103040006E707800C4286C7086A00500C0002F2820
774:10305000887068201B68040017680000206885A03D
775:10306000080022686F700000112004006C7186A1B6
776:1030700001004000522886A10700C0004228092014
777:1030800038520B20050078005228092013520421E1
778:10309000092012520A20092038520B2001006F70BB
779:1030A000000073700100780054286F7000007810E1
780:1030B00087487E15A9201000392000007810B0370D
781:1030C000B8A700017000632878005B287F150070A6
782:1030D0007900672895287C287C286F2895289528D2
783:1030E0009528952821205A52042405A040009528AF
784:1030F00006ADC0007C280068222078008C2820685B
785:1031000084A00100C0008828146F7810BD387810A2
786:10311000A23478008C2860706020006802601A6A0F
787:1031200017680000206885A0080022687810DC1C61
788:10313000212000767810D12821205A527810D128E9
789:103140007E15A9200000212000757810D128208448
790:103150007000A9287800A2286120005521200200D3
791:10316000A920000118601061FF814000B82802A169
792:103170005000B82812601B600000E0AC1000700026
793:10318000C0287800AF282184C000AD287F159C702E
794:1031900084A000804000CB287810CE3A0370000055
795:1031A0004B7000007800FA247E04042405A040003F
796:1031B000E528682000687E001A6A17680000206809
797:1031C00085A0080022687810DC1C7F007800D328D6
798:1031D0007F04232000007C0082A203005000EF281F
799:1031E00078108C2400237900F228F5286829852995
800:1031F00082A202004000FB2878108C246C706F7053
801:10320000000093700000790002290A290A290C297C
802:103210004029D7340A2940290A2978108C2480773C
803:103220007810B0378077BCA7000F7810BD381860D1
804:1032300005A0400037292120007609200400112034
805:1032400010007810A029400037297E15A920000021
806:10325000212000757E040920040011201000781040
807:10326000A0297F0440003629208470003629780088
808:1032700027297F15388784A71F00C00012297800EE
809:1032800023257800232580777810BD38186005A0A5
810:103290004000662921200076092005001120200029
811:1032A0007810A029400066297E15A9200000212061
812:1032B00000757E0409200500112020007810A02947
813:1032C0007F04400065292084700065297800562914
814:1032D0007F1578002325002279006B296E2970293B
815:1032E000702978108C24092012006C7086A00200CE
816:1032F0004000792909200E00186884A00080400051
817:103300007F291A696F7000007370010078005639C8
818:103310000022790088298D2970298B2978108C2426
819:1033200078108748007086A00100C00067347810CC
820:10333000B834086084A0EFFF0A6078105A34400067
821:10334000673478003526042405A04000C32968208E
822:10335000042D7E00146806A74000AF29202D7F00B1
823:103360007800A1297F0022201A69176800002068D0
824:1033700005A222687810DC1C1060018012600860D1
825:1033800084A0EFFF0A607810B8347C0085A00100AB
826:103390007800C22900237900CA29CF29CD29682ABB
827:1033A00078108C24EC7884A00100C000E329007020
828:1033B00086A00400C000DB297800062A7810B83403
829:1033C000086084A0EFFF0A6078006734E47805A005
830:1033D000D000062A1800FA24082084A03000C0007B
831:1033E000F2291B784F007800FA24EC7884A00300BF
832:1033F0004000EE29002184A007007900FC293F2A23
833:103400004A2A302A042ABB39BB39042A592A78109F
834:103410008C24007086A00400C000202A6C7086A056
835:103420000200C000162A11200200192000007800B6
836:10343000E9286C7086A006004000102A6C7086A0F7
837:1034400004004000102AE47984A1300040002A2AB8
838:10345000EC7884A00300C0002C2A78000C300120F6
839:1034600003007800A02D186884A000804000372A4F
840:103470001B681D0078108F372B7808301B7856009A
841:103480007800FA24186884A000804000462A1B684F
842:103490001D0078108F3778008639186884A0008066
843:1034A0004000512A1B681D0078108F372B78083098
844:1034B0001B78CA007800FA24186884A000804000B5
845:1034C000602A1B681D0078108F372B7808301B7816
846:1034D0008F007800FA2484A50F00C000852A0070B0
847:1034E00079006F2A2325792A772A6734673467346D
848:1034F0006734772A78108C247810B834086084A058
849:10350000EFFF0A6078105A3440006734780035269F
850:10351000E47805A0D000062A1800062A082084A016
851:103520003000C000942A1B784F007800FA24EC7811
852:1035300084A003004000902A002184A107007900A4
853:103540009E2AB02AB42AA82AA62ABB39BB39A62AA1
854:10355000B13978108C24781097372B7808301B7885
855:1035600056007800FA24781097377800863978105A
856:1035700097372B7808301B78CA007800FA24781027
857:1035800097372B7808301B788F007800FA240023B7
858:103590007900C72ACC2ACA2ACE2A78108C2478002F
859:1035A00080311B680800A3780000E47984A1300012
860:1035B00040008031EC7884A003004000803184A179
861:1035C00007007900E02AE82AB42A302A5639BB39A4
862:1035D000BB39E82AB13978106A397800FA2482A216
863:1035E00005005000F22A78108C2400237900F52A77
864:1035F000F82A4D2D5B2D00227900FB2A152B022B7A
865:10360000152B002B322D78108C249B781800A8786D
866:1036100084A0FF0082A0200048006B378AA004002D
867:10362000C8006B377900112B6B376B376B37193745
868:103630009B781800A87984A180004000262B780090
869:103640006B37007005A0C0001C2B1120040078000F
870:10365000E93284A1FF008AA01000C8006B3779000E
871:103660002E2B402B3E2B582B5C2B172C6B376B379C
872:10367000192C6B376B372E2D2E2D6B376B376B3725
873:10368000302D78108C2484A6001040004D2B012092
874:103690000005008000803A781B788D007800FA24BD
875:1036A000186884A000804000562B1B681D0078001D
876:1036B000442B780056391B681D0078007B37206941
877:1036C000226984A60018C0009D2B206884A00100F8
878:1036D000C000A52B186886A00800C0006E2B1B68D0
879:1036E000000084A600044000132C84A68000400043
880:1036F000992B97700000186884A03F008AA00D00E5
881:103700005000992B8AA00C00967101200C000C80AF
882:103710009A719B786100AA787E157E137E14A12091
883:103720002B019B7800000080AC8080AD0B009820BE
884:10373000A6537F147F137F151B7858007800FA2456
885:1037400084A600104000A52B1B7865007800FA24A1
886:1037500084A6600040000F2C84A6000840000F2CB7
887:1037600084A60080C000B32B7800CB2BB4A6FF7FCB
888:103770005A7EB66EDC7AD879D0781B80C800BE2B12
889:10378000008084A03F0008A191A20000986B002156
890:1037900002A3B268946B002203A3AE6884A6004023
891:1037A0004000D32BB4A6FFBF5A7EB66E007086A031
892:1037B0000300C000E02B78103D4978103A4B1B788D
893:1037C00064007800FA2406A07810414CB06AAC6915
894:1037D000986C946B002205A14000EF2B002222A4DC
895:1037E00000211BA3AA6CD27CDA7CA66BD67BDE7B85
896:1037F000002305A4C000012CB5A600405A7EB66E79
897:103800001B7864007800FA241B786400002215A15C
898:10381000C0000B2C78104B4B7800FA247810964B94
899:103820007800FA241B7865007800FA241B78580089
900:103830007800FA2478108C2478007A2C206984A1EE
901:1038400000014000312C8CA1FFFE22697E0C5470D7
902:103850006020006084A0FFEF0260046084A0F5FF98
903:1038600006607F0C7800692C84A100024000692C5E
904:103870008CA1FFFD22697E0C54706020006084A042
905:10388000FFDF0260046084A0EFFF06600820482C80
906:103890007F0C84A108004000692C7810B93878109A
907:1038A000BB35FF884000692C9B7860000028AA780F
908:1038B000587EB5A604005A7E84A60004C000632C7E
909:1038C0002B7808301B7856007800FA242B780830C3
910:1038D0001B7865007800FA24587E84A60004C00096
911:1038E000722C1B7858007800FA241B786500780049
912:1038F000FA24780073377800733719200000907924
913:103900008CA10700C000882C206884A00001400022
914:10391000782C092008009B781000A87894A0FF005C
915:1039200086A20100C000BF2C0023A87C00A41820A0
916:1039300002A14000B72C48009C2C7800B92C80A331
917:10394000020002A1C800B72C20698CA1FFFC2269EB
918:103950007E0C54706020006084A0EFEF0260046071
919:1039600084A0E5FF06607F0C587EB4A6FBFF5A7E5C
920:1039700078006A2C78001B2CA824A87AF000B92CB7
921:1039800078008A2C84A2F00086A02000C0001F2DA1
922:1039900018831883002302A14000CF2C4800CF2CAD
923:1039A00078001C2D86A223004000782C1C6884A07F
924:1039B000F1FF1E68587E84A6F1FF85A0100030201C
925:1039C0005A7E086085A010000A607E0C547060204A
926:1039D00004600820482C7F0C84A110004000F32CC8
927:1039E0007810B9387810D0367800022D7E0C5470DB
928:1039F000602004600820482C7F0C84A1080040004F
929:103A0000692C7810B9387810BB35FF884000692CD4
930:103A10009B7860000028AA78B5A604005A7E84A688
931:103A20000004C000162D2B7808301B785600780053
932:103A3000FA242B7808301B7865007800FA24A87ADD
933:103A400078008A2C1883002302A14000282D48000A
934:103A5000282D78008A2C84A28000C0007B37780053
935:103A6000733778007B3778006B379B781800A8781D
936:103A700084A0FF008EA0010040003D2D78108C2412
937:103A8000A87A94A2FF00A87884A0FF008AA004006E
938:103A9000C8006B377900492D6B3708356B376536B1
939:103AA00082A20000C000532D78108C2478108F372C
940:103AB0002B7808301B7865007800FA2482A2030076
941:103AC000C000612D78108C2484A40080C000842D57
942:103AD0006C7005A040006B2D78108C24146F8277D9
943:103AE000BCA7000F7810BD38086085A021000A60CF
944:103AF000388784A71F00C0006F2D781093376F7030
945:103B00000200092038520B2009007800862D781019
946:103B10009F372B7808301B7865007800FA2482A242
947:103B200004005000922D78108C2400237900952DEC
948:103B3000982D812EB42E86A2030040009E2D781071
949:103B40008C24012000007E00C06805A04000A72D45
950:103B500003700300A06884A000204000B02D08601E
951:103B600085A002000A607F003E70007084A00700FC
952:103B70007900B72D2325C12DC12DB62FF22F232576
953:103B8000F22FBF2D78108C2484A60010C000C92D00
954:103B90007810874840005B2E68788CA0FF004000BA
955:103BA000112E86A10800C000E02D7810B8340860FE
956:103BB00084A0EFFF0A6078105A344000112E78106C
957:103BC00087487800F82D86A12800C000112E7810B3
958:103BD0008748086084A0EFFF0A60186005A04000D5
959:103BE000F82D01801A6005A04000F82D018005A085
960:103BF0004000F82D1E60206884A0010040002325AD
961:103C0000206884A0FEFF226860707E0C602000683F
962:103C100002607F0C0460026805A0002DC0000E2E1B
963:103C200002600660780023257E017810E52E7F0172
964:103C300084A600DF1E682B680000146FFF8140001F
965:103C40005B2E86A10200C0005B2E84A60008C00087
966:103C50002E2E84A6600040002E2ED878DC7A2E68A6
967:103C6000326A206884A00008C0005B2E178794A2E7
968:103C70000F0013821382138290A2805490A200003E
969:103C80001C2284A30001C000442E78004A2E10821A
970:103C9000042285A018001220118284A30004400091
971:103CA000572EA06884A00001C000572E7810692FFD
972:103CB00078002325086085A002000A60166918684C
973:103CC00084A000804000632E3C701A688CA600DF40
974:103CD0001E697810A9347810B834C000702E0860BE
975:103CE00084A0EFFF0A60206884A00100C000792E44
976:103CF0007810A23478007D2E607060200068026029
977:103D00007810DC1C7800232582A204004800872E4E
978:103D100078108C24002279008A2E852E8E2E9B2EE0
979:103D20008E2E007086A005004000972E78108F37E9
980:103D30002B7808301B7865007800FA24907807808B
981:103D4000018084A0070080A018009A78A8798CA12F
982:103D5000FF0086A103004000B02E86A100004000B5
983:103D6000B02E78006B371B7865007800FA24206845
984:103D700085A004002268FF82C000BF2E78108F3714
985:103D80007800C62E11824000C42E78108C24781042
986:103D90009F372B7808301B7865007800FA242C7048
987:103DA00003804800D62E1920AF4E781013232F70B1
988:103DB00000807810E039307884A0C000C000E22E86
989:103DC0001800E22E1A7906A07C0085A001007C0074
990:103DD00084A66000C000EF2E2F680000336800004A
991:103DE0007800682F84A60008C000112FB46884A052
992:103DF000004835A684A60008C000112F9869946A6F
993:103E00002E69326A3C7005A0C000092F002205A16E
994:103E10004000102F3F701500007086A00600400083
995:103E2000102F781087487C0084A620004000332F94
996:103E300084A6004040001F2F2F6800003368000058
997:103E40007800092FB46884A0004835A684A60040F5
998:103E5000C000192F3C7005A0C0002D2F3F70150029
999:103E6000D879DC7A2E69326A7800092F84A600405E
1000:103E700040003D2F2F680000336800007800092FB4
1001:103E8000B46884A0004835A684A60040C000372F3F
1002:103E90003C7005A0C0004B2F3F701500D879DC7A2C
1003:103EA000D078FB80C800522F008084A03F0008A17A
1004:103EB00091A200002E69326A002105A2C0005F2F86
1005:103EC0007800092F007086A006004000682F781047
1006:103ED000414C7800092F7C00086085A000020A6030
1007:103EE00084A300024000752F086085A002000A60CC
1008:103EF0001B6806008F68000093680000306A2C6918
1009:103F00003E6A42692F68030033680000376820006A
1010:103F1000976800009B682000B3680000AF6800004D
1011:103F200000707900902F23259A2FA32F982F982F78
1012:103F3000982F982F982F78108C24206884A0010047
1013:103F4000C000A32F7810A2347800A92F6070502CE5
1014:103F5000602000680260602A21205A52042405A0D3
1015:103F60004000B22F20207800AB2F222D6B200000C4
1016:103F70007C007810A9347810B834086084A0FFFD64
1017:103F80000A602B6800009B780E00146F176802000F
1018:103F90007810894C84A600084000CF2F1C698DA1A1
1019:103FA00000201E69186884A000804000DF2F687818
1020:103FB0008CA0FF004000DD2F1B681E007800DF2F63
1021:103FC0001B68000021205A52042406AD4000E62F51
1022:103FD000607400682220C36800003C6A4069326A4D
1023:103FE0002E697810DC1C780023257810E52E2B68CC
1024:103FF000000001200E00146F7810E6398CA0FF003D
1025:104000001669186884A00080400005303C701A686A
1026:104010008CA600DF1E696F700000780023250070F9
1027:1040200005A0C00012307800232506A0781087482C
1028:10403000176800001B6814008CA600DF1E692B683F
1029:104040000000206885A0FF002268007079002530FC
1030:1040500023252F302F3031303130313031302D3079
1031:1040600078108C247810B834086084A0EFFF0A60C0
1032:1040700078007234002379003A303D303F30983078
1033:1040800078108C2484A60080C0007D3000707900F8
1034:1040900046302325503050306C30503079306C3001
1035:1040A0004E3078108C2484A6600086A06000C0008A
1036:1040B0006830B4A6DFFFB4A6FFBFB5A600205A7EC5
1037:1040C000B66E1C6884A0DFFF1E68781087487810E1
1038:1040D0004B4B7800563984A6002040005A301868AF
1039:1040E00084A00080400079301B68150084A6004041
1040:1040F000400079301B68070078106A397800FA248C
1041:10410000B4A6FF7F5A7EDC7AD879D078D2791B802A
1042:10411000C8008830008084A03F0008A191A2000060
1043:10412000986B002102A3B268946B002203A3AE68CF
1044:104130001B7865007C0078108C24002379009D306A
1045:10414000A030A230EB3078108C2484A60080C00010
1046:10415000DA3000707900A9302325B330B330CF3086
1047:10416000B330D630CF30B13078108C2484A66000C4
1048:1041700086A06000C000CB30B4A6BFFFB4A6FFBFCE
1049:10418000B5A600205A7EB66E1C6884A0BFFF1E68CC
1050:104190007810874878104B4B7800563984A6002059
1051:1041A0004000BD30186884A000804000D6301B68F5
1052:1041B00007001B78CA007800FA24B4A6FF7F5A7E55
1053:1041C000DC7AD879986B002102A3B268946B002244
1054:1041D00003A3AE68D2791B7865007C00206885A0B7
1055:1041E0000400226878102139B5A6000878108F37AE
1056:1041F0002B7808301B7865007800FA2400237900BA
1057:10420000FE3001310331053178108C2478007B3782
1058:1042100084A60004C0002E31E47984A1200040006F
1059:104220001531EC7884A00300400015312B7809305B
1060:104230009B786000AB78000084A6FBFF5A78E47995
1061:1042400084A1200040002631EC7884A00300C00047
1062:104250002A31012014007800A02D84A107007900E4
1063:104260006631907A94A207009B786000A879FF815C
1064:10427000400064319B781000A87B84A30100C0003B
1065:104280005531A87BA87B86A30100C00048310920D6
1066:10429000F7FF78004E3186A30300C0005531092096
1067:1042A000EFFF7E0C54706020046004A106607F0C58
1068:1042B0009B786000AB78000084A6FBFF5A782B78CF
1069:1042C000093020698CA1FFFD8CA1FFFE22697800D6
1070:1042D00056393F2A4A2A703178316E316E3156395B
1071:1042E000563978108C2420698CA1FFFD8CA1FFFE2B
1072:1042F00022697800603920698CA1FFFD8CA1FFFE46
1073:10430000226978005639E47984A1300040008A316E
1074:10431000EC7884A00300C000B131007086A00400D6
1075:10432000C000A4316C7086A00200C0009A31112038
1076:104330000200192000007800E9286C7086A00600B1
1077:10434000400094316C7086A00400400094310070ED
1078:1043500086A000004000FA24186885A000801A6832
1079:10436000012014007800A02D84A107007900B53148
1080:1043700056395639BD315639BB39BB39563956399C
1081:1043800084A680004000EC319471FF814000EC3144
1082:1043900082A10D00D000CD31977000007800D2319D
1083:1043A00082A10C00967009200C009B786100AA790C
1084:1043B0007E157E137E149870148110A29A7280A0CC
1085:1043C0000B0000AD9820A1202B019B7800000881F4
1086:1043D000AC81A6537F147F137F157800603984A6C3
1087:1043E0000004C0002D32206884A001004000603924
1088:1043F0008CA6600084A660004000013286A06000A8
1089:10440000C00001328DA100408CA1FBFF5A79B66932
1090:104410009B786000AB7800009B786100186885A0ED
1091:1044200000801A68AA7808800C814000D1348CA1E1
1092:10443000F800C000D1347E157E137E14A1202B011C
1093:104440009B7800000080AC8080AD0B009820A653C4
1094:104450007F147F137F151468078082787800603995
1095:10446000186884A00080400034321B6808001B7864
1096:10447000C0007800FA24002379003B324032D43265
1097:104480003E3278108C24007084A0070079004532F9
1098:1044900023254F3284325A324D3223254D324D324C
1099:1044A00078108C241C6884A00020400068320860CA
1100:1044B00085A002000A6078006832C06805A0C000CC
1101:1044C000843220698DA101002269C368010000685F
1102:1044D0006A7078007E3220698DA10100226900682F
1103:1044E000066005A0C000723202601C6884A00E0045
1104:1044F00040007E321470BA68307188A1007578006F
1105:10450000803209200076042102680A2D6271B66E9D
1106:1045100084A660004000D23284A60008C000983211
1107:1045200084A6FF7FB6689468A6689868AA68781021
1108:1045300087487800D23284A620004000AD32C0689F
1109:1045400005A04000A4327810894C7800A73206A05C
1110:104550007810414CD879DC7AAA69A66A7800B3321F
1111:104560007810CA38AA69A66A7810414C84A60080DF
1112:104570004000D23284A6FF7FB668DC7AD87984A660
1113:104580002000C000CA32D0781B80C800C53200802D
1114:1045900084A03F0008A191A20000986B002102A313
1115:1045A000B268946B002203A3AE68780023257800DC
1116:1045B0007B373770000082A206005000DE32781090
1117:1045C0008C24007084A00700C0108C3A002379006E
1118:1045D000E632E9321233263300227900EC3210330E
1119:1045E0007B37F232103342338433037005000120ED
1120:1045F000107768204A707E15A92031000320000042
1121:104600000080700002337800FB327F1580AD090016
1122:10461000367017680000B76800072368000827682D
1123:10462000030078006B3778108C240370050001209C
1124:10463000107768204A7080AD09003670002279003A
1125:104640001E337B3724332433423324337B377810B3
1126:104650008C24037005000120107768204A7080AD1B
1127:10466000090036700022790032333A333833383358
1128:104670003A3338333A3378108C2478109F372B78BC
1129:1046800008301B7865007800FA2403700200807AF5
1130:1046900094A2000F9B781800A87C84A41F0015A288
1131:1046A00069200076042D082D6271682005A0400065
1132:1046B0005D33146806A240007933006878005033F7
1133:1046C000037005000120107768204A7036707E154F
1134:1046D000A920310003200000008070006E337800B4
1135:1046E00067337F1580AD09003670166AB76800071A
1136:1046F0002368000827680300B46E5A7E206884A0EF
1137:10470000000C4000D333781097377800D333037010
1138:104710000200807A94A2000F9B781800A87C84A4E1
1139:104720001F0015A2A879A8798CA1FF00E8A1007547
1140:10473000042D082D6271682005A04000A333146881
1141:1047400006A24000BE33006878009633037005006F
1142:104750000120107768204A707E15A92031000320BF
1143:10476000000000807000B3337800AC337F1580AD5B
1144:1047700009003670166AB7680007236800082768C2
1145:104780000300B46E5A7E206884A0000C4000D3332E
1146:1047900084A000084000CD3378109B377800D333D5
1147:1047A000781097378B7000007800D3337E02078231
1148:1047B00084A00F0003800380038080A080546020C9
1149:1047C000567000605A7004605E7084A660004000FD
1150:1047D0002B34986B946CAC69B06805A1C0000D34A3
1151:1047E000D27BDA7BD67CDE7CB4A6FFB75A7E84A669
1152:1047F000600086A0600040002B34C06805A0400027
1153:104800000634037003002B68000078103A4B7800E0
1154:10481000083478104B4BB5A600205A7E78002B3414
1155:10482000B0681AA3002123A4002405A340002B3460
1156:10483000D27BDA7BD67CDE7CB068B4A6FFBF5A7E22
1157:104840007E00C06805A07F0040002934037003008B
1158:1048500078103A4B78002B347810964B7F077810FD
1159:10486000BD380920650084A6040040004C34E4787B
1160:1048700084A0300040004434EC7884A00300400061
1161:1048800044342B7808300920650078004C347E0FC2
1162:1048900079200052781087487F0F400023251A792D
1163:1048A000002D4A70078284A00F00038003800380DC
1164:1048B00080A0805448207800FA24206005A04000A1
1165:1048C000663401802260086085A008000A601070CC
1166:1048D00026607C0006A078108748176800001B68D7
1167:1048E0000100236840001F680001007084A00700D9
1168:1048F000790077342325813481349E348934873498
1169:1049000089347F3478108C247810A9347810A2343C
1170:104910007810DC1C780023256C706F700000937099
1171:104920000000790090349A349A349834983498344A
1172:104930009A3498349A34790002296F700000780014
1173:1049400023251B6800007800B62F006805A0C00072
1174:10495000A734026006607C00106005A04000B234FD
1175:104960000180D000B23478108C241260086084A0DA
1176:10497000EFFF0A607C00186005A04000BE34018093
1177:104980001A607C007810E0391B6818007800F53454
1178:104990007810E0391B6819007800F5347810E03998
1179:1049A0001B681A007800F5347810E0391B680300A2
1180:1049B0007800F53480777810BD3884718CA1FF00C1
1181:1049C000E8A10075042D082D682005A0C000E7347B
1182:1049D000780023251468807206A24000EF34006836
1183:1049E0007800E03400680A201B6805008B70000026
1184:1049F0007810A934206884A00100C000FE3478102B
1185:104A0000A2347810B8341F680000236820007810A2
1186:104A1000DC1C7800232582A20300C0006B37A87D30
1187:104A2000ACA5FF00A87CA4A4FF0020698DA1800094
1188:104A3000226984A1000140006C358CA1FFFE22692F
1189:104A4000A4A4FF004000563582A40C00480029357C
1190:104A50004000293521200C002B852B8578102E381D
1191:104A6000400033357810273678005F357810E93705
1192:104A70007E0C6029046084A0F5FF06607810523631
1193:104A80007F0C20698DA100012269587EB5A6040023
1194:104A90005A7E84A60004C00050352B7808301B785D
1195:104AA00056007800FA242B7808301B7865007800CF
1196:104AB000FA247E0C6029046084A0F5FF066078105B
1197:104AC00052367F0C587E84A60004C00068351B78DF
1198:104AD00058007800FA241B7865007800FA247E0CD0
1199:104AE0005470602000618CA100104000AC35086259
1200:104AF000178294A2FF0082A20C004800803540007B
1201:104B0000803511200C00002402A2C8008535202227
1202:104B1000086294A2FF00187086A02800C000953596
1203:104B200082A21900C8009B351120190078009B351E
1204:104B300082A20C00C8009B3511200C00002202A5A7
1205:104B4000C800A03528227810ED372B852B857810EA
1206:104B50002E384000AC35781027367800B035781004
1207:104B6000E93778105236587885A004005A787F0CBF
1208:104B70002B7808301B7865007800FA247E0C6029B9
1209:104B80000060E4D0C000D535B4D0C000CF3510608F
1210:104B900084A00F00C000CF3504618CA1F5FF066131
1211:104BA0007F0C7C0011203200192000007800FC35B9
1212:104BB000A06884A00002C000CF35086294A2FF0064
1213:104BC000187086A02800C000EA3582A21900C8002B
1214:104BD000F035112019007800F03582A20C00C800D1
1215:104BE000F03511200C0008631F839CA3FF0082A3F3
1216:104BF0000C004800FC354000FC3519200C00AB7857
1217:104C00000100AB780300AB780100AA7AAA7BC0A8A8
1218:104C10000500206885A0000122687F0C7C007E0CC6
1219:104C200060298CA1F5FF06611120320019200000D7
1220:104C300078001736AB780100AB780300AB78010041
1221:104C4000AA7AAA7BC0A80500206885A00001226876
1222:104C50007F0C7C007E0C5471602178102E367F0C06
1223:104C60007C00082084A0F0FF25A4867C18609A7838
1224:104C7000AE7C1264A47884A0F8FF8CA1070005A183
1225:104C8000A67816608A78A4A40F0027840482048082
1226:104C900084A0FF0005A40E60EC788CD0C0005136D3
1227:104CA000046084A0F5FF06607C007E0C54706020D8
1228:104CB000781059367F0C7C0018609A78A47884A00C
1229:104CC000F0FFA6781260847884A0F0FF86787C00DC
1230:104CD00082A20200C0006B37A87A20698DA18000F3
1231:104CE000226984A100024000AE368CA1FFFD22693A
1232:104CF00094A2FF0082A20200C8006B377810F93638
1233:104D00007810523680A901000C207810B93878103C
1234:104D1000BB35FF884000A1369B7860000028AA7848
1235:104D2000587EB5A604005A7E84A60004C0009B36B7
1236:104D30002B7808301B7856007800FA242B7808303E
1237:104D40001B7865007800FA24587E84A60004C00011
1238:104D5000AA361B7858007800FA241B786500780082
1239:104D6000FA2482A20200C800B63684A201004000E4
1240:104D7000C036547188A100000C218CA10020C00015
1241:104D8000C036112000007810DB377810F936781023
1242:104D90005236587885A004005A782B7808301B7852
1243:104DA00065007800FA247E0C7E02602900601120E4
1244:104DB0000100ECD0C000E936BCD0C000E73614607A
1245:104DC00084A04000C000E7368CA1EFFF066106A07A
1246:104DD0007800F63611200000AB780100AB780200B5
1247:104DE000AB780300AA7AC0A80400206885A000025E
1248:104DF00022687F027F0C7C007E0C5470602078104B
1249:104E000000377F0C7C00FF824000053711204000F6
1250:104E1000186080A002009A78A47884A0BFFF05A241
1251:104E2000A6788A781660EC788CD0C00018370460B9
1252:104E300084A0EFFF06607C007E00007086A0030067
1253:104E4000400022377F00780025377F0078006737E1
1254:104E500084A6200040006737887884A04000400086
1255:104E60006737B87B84A33F001B83C80035370080B9
1256:104E700005A040004B371B83C8003E37018040002F
1257:104E8000633784A6004040004B37B8781B80C800C9
1258:104E90004737008084A03F00C0006337B4A6FFBF3F
1259:104EA0005A7ED879DC7A0120010008A1C800573762
1260:104EB00091A20000D279DA79D67ADE7A7810414C64
1261:104EC0001B7864007810C64A7800FA241B786400C6
1262:104ED0007800FA241B7865007800FA247810A3374C
1263:104EE0002B7808301B7865007800FA2478108F370B
1264:104EF0002B7808301B7865007800FA2427680200B8
1265:104F000078109737E47884A0300040002325EC78AF
1266:104F100084A00300400023252B7808301B7865000F
1267:104F20007800FA24012005007800A53701200C0044
1268:104F30007800A537012006007800A53701200D0074
1269:104F40007800A537012009007800A5370120070067
1270:104F50009B781000AA789B786000AB780100B5A61A
1271:104F600004005A7E7C007E073F87BCA70F003B876A
1272:104F70003B870387E0A08054B8A720009A7FA479DC
1273:104F800084A10F004000C93784A1F0FFA678126009
1274:104F9000046085A008000660388738879A7FA47966
1275:104FA00084A140004000D93784A1BFFFA6781660D5
1276:104FB000046085A0100006607F077C009B781000CD
1277:104FC000AB780100AB780200AB780300AA7A9B783B
1278:104FD0006000AB7804007C00212000002920320012
1279:104FE0009B781000AB780100AB780300AB78010030
1280:104FF000AA7DAA7C9B786000AB7805007C007E15BA
1281:10500000078084A0FF000380038080A020009A789E
1282:10501000A4798CA1F0FF01204652042082A0280030
1283:10502000400017382120A03819201400A9200C00B6
1284:1050300078001D382120AC3819201900A9200D0056
1285:1050400011206400042484A0F0FF06A140002C3845
1286:105050002084002310A270002C3878001F387F15A0
1287:105060007C007E15092046520C2182A132004800A6
1288:105070004238400046380920923819201100A920F2
1289:105080000E00112032007800583882A1280040001C
1290:1050900050380920A03819201400A9200C00112034
1291:1050A0006400780058380920AC3819201900A9206C
1292:1050B0000D0011206400002202A54000683848005D
1293:1050C00068380881002310A27000653878005838CD
1294:1050D0007F1506A07C007F1582A56400C800773884
1295:1050E000087885A070000A78447085A0700046702A
1296:1050F00078007738EC7884A0000340007F380421E2
1297:105100007800903804219EA00211C0009038012040
1298:10511000FD04042082A0050048008F380120011200
1299:1051200078009038042105A07C0002110230023280
1300:105130000342034404540456056605680678067A5B
1301:10514000070C070C070E0232024202520262027280
1302:10515000056605760578057A057C057E057F0222C1
1303:105160000232024202520454046404740476047845
1304:10517000047A047C047E047F9B78100046A07C00A7
1305:1051800084A7000F0B8084A71F0003800380038087
1306:10519000038005A1E0A000557C00D879DC7AD078A6
1307:1051A0001B80C800D138008084A03F0008A191A2D4
1308:1051B00000007C007E0F79200001092040529120E0
1309:1051C000008004217900E1381739EB38EB38EB38EF
1310:1051D000EB38EB38EB381B3978108C244B78040013
1311:1051E000487884A00400C000ED384B780800487867
1312:1051F00084A00800C000F438B46885A00040B668F8
1313:10520000587885A000405A78307884A08000C0008B
1314:105210001739180017391C6884A02000C000153900
1315:105220007E0E7120405278106A397F0E780017394F
1316:105230001B78CA00912001807F0F7C00B3700000B2
1317:105240007810443B780017397E0C1468078084A0DE
1318:105250000F00038003800380E0A08054046084A0DA
1319:105260000A00C0005439086194A100FF400054397D
1320:105270008CA1FF000120190006A140004339012044
1321:10528000320006A14000473978004B390920200040
1322:1052900078004D3909203F0078004D391120000079
1323:1052A000002105A20A60046085A0020006607F0C50
1324:1052B0007C001B7865007800FA242B7808301B7876
1325:1052C00065007800FA241B7858007800FA242B78BF
1326:1052D00008301B7856007800FA24092020520C214F
1327:1052E00086A1000040007E3986A10100400081397E
1328:1052F000092038520B200B006F7001001B7848000A
1329:105300007C001B78C4007C00092038520B200A0066
1330:105310007C00092020520C2186A100004000A13908
1331:1053200086A1010040009B39092038520B200B0058
1332:105330006F7001001B7848007800FA240920385269
1333:105340000B200A007800FA242B7808301B78C40060
1334:105350007800FA241B78CA007800FA242B780830E9
1335:105360001B78CA007800FA241B788F007800FA2492
1336:105370002B7808301B788F007800FA24186884A0F6
1337:1053800000804000C2391B681D006F7001001B784F
1338:1053900048007800FA247E00307884A0C000C00065
1339:1053A000DE39087884A0FCFF0A78050005000500B6
1340:1053B0000500EC7884A021004000DE3944700A78B2
1341:1053C00005A07F007C00447085A0020046700A782A
1342:1053D0007C007E00307884A04000C000E73998004F
1343:1053E000F2397F009A78AC787C00087884A0FDFFC1
1344:1053F0000A780500050005000500EC7884A021006E
1345:105400004000013A9800FF397F009A78AC787E001E
1346:1054100044700A787F007C00EC7884A00200C00011
1347:10542000714884A77D00C000153A002778108C24AD
1348:1054300084A70100C0000C3084A770004000253A0A
1349:105440007E0C602D682F78103724782D682C7F0C07
1350:1054500084A708004000323A4B780800EC7884A01A
1351:105460000300400023257800563984A7040040003B
1352:10547000653AB87884A001404000653A4B7808004E
1353:10548000EC7884A0030040002325E47884A0070082
1354:1054900086A00100C000653AC07885A00048302091
1355:1054A0005A7E1B78CA007800FA244B7808001868E6
1356:1054B00084A000804000613A1B68150084A600406B
1357:1054C0004000613A1B68070078106A397800FA24B6
1358:1054D0001B680300587884A0003F1E682F680000F6
1359:1054E000336800004B780800EC7884A0030040008B
1360:1054F000062A1800FA2478007337146B078384A0F7
1361:105500000F0003800380038080A080546020482027
1362:10551000567000605A7004605E70602A7C007900EA
1363:105520008E3A963A973A963A993A963A963A963AFF
1364:105530009E3A7C007810B8347810874838700A603A
1365:105540007C00A07005A04000AB3A68207810D31B07
1366:105550007810FE4778100548A37000007C007E0E8E
1367:105560009120008071204052007086A00700C0008A
1368:10557000C23A1061BC7006A1C000C23A7F0E78101A
1369:10558000E01B7810C83A06A07C00912001807F0EB5
1370:1055900085A001007C007E0F7E0E712040527800B5
1371:1055A00097225B780000AF700E00092000017E0199
1372:1055B000A0706DA04000DD3AA37000007800E33ACF
1373:1055C000B370000078100C1C4000E93AAC702668FB
1374:1055D0007810C63B7800DD3A7F017E157E0C7E0D8B
1375:1055E000A920080061201076006005A102601C60FF
1376:1055F0006DA04000013B00681E607810AC19086087
1377:1056000000800A607800F43A18606DA040000B3BFF
1378:1056100000681A607810AC197800013BE0AC080013
1379:105620007000113B7800F13A9C7084A0008040002B
1380:10563000183B7810443C7F0D7F0C7F157C007E1258
1381:1056400091200023046884A00F007900243B343BA0
1382:10565000343B343B343B343B343B363B3C3B343BC8
1383:10566000343B343B343B343B3E3B343B363B78109D
1384:105670008C247810D3457810AC197800423B276809
1385:105680000B007810D3457810C63B7F127C007E1249
1386:10569000912000239800603B307884A0C000C000B7
1387:1056A000603B7E0D78101248002D2E680920040002
1388:1056B00001200000276884007810C7477810C63B97
1389:1056C0007F0D7800943B487985A100404A78980086
1390:1056D000693B4A7978004E3B287886A03418C00090
1391:1056E000723B85A104007800793B287886A01418C5
1392:1056F000C000663B85A10C004A789B780E00AB7811
1393:105700000200587884A0FF0085A000045A78B47085
1394:1057100080A091001A78276884022C683668306867
1395:105720003A6809200400012000007810C7477F1262
1396:105730007C007E0D146B7810701C4000A33B682029
1397:10574000276802007810C63B7800983B7F0D7C00EC
1398:105750007E0D146B286CA4A4FF0078101C1C400064
1399:10576000B33B6820276802007810C63B7F0D7C00A1
1400:105770007E0D146B9CA3FF007810481C4000C43BB6
1401:105780006820276802007810C63B7800B93B7F0D7F
1402:105790007C007E0C146978103B3C04698CA1FF00EE
1403:1057A00086A106004000E13B86A10D004000003CC0
1404:1057B00086A11700C000DD3B7810AC197800DF3BF4
1405:1057C0007810DE1C7F0C7C00046001804800FE3BEA
1406:1057D00006600920000084A60100C000EE3B8DA1F8
1407:1057E000008084A604004000F43B8DA102001E69E5
1408:1057F0002368000004710F81186805A11A687800F9
1409:10580000DD3B78108C24186005A0C0000F3C0860B8
1410:10581000018048000F3C0A601C600268002D1E6079
1411:105820007800253C88AC0600042105A04000183C07
1412:1058300008207800113C02680A2D086001804800A9
1413:10584000DF3B0A601860682000681A607800093C35
1414:105850007E157E137E147E0C7E0D78108919C00093
1415:10586000303C78108C24A02D7F13A9203100A35345
1416:105870007F0C7F147F137F157800DD3B84A11F0010
1417:1058800003800380038080A0107660207C001920B4
1418:105890005152042385A001001A201920020104237B
1419:1058A00085A001001A207C0019205152042384A0F5
1420:1058B000FEFF1A2019200201042384A0FEFF1A20F3
1421:1058C0007C0090798CA1F8FF9279B47080A0D80008
1422:1058D0001A787800FA24A370000003700000437067
1423:1058E0000100377000001800B12478100C1C400033
1424:1058F000993C09200F520B200000BC686020006119
1425:1059000084A1000340008D3C27680E0084A00002A3
1426:105910004000893C276817007810C63B7800683C37
1427:10592000007086A00700C0000D3D002DA27080AD64
1428:105930000F0036707800A03C407086A00100400047
1429:1059400033257800FA24312000001C6984A102006C
1430:105950004000A93CB5A6040084A1C00003800380D8
1431:10596000078080A0A63D042035A6206884A00004FE
1432:105970004000C13C9B781800AB7803009B78810005
1433:10598000AB780100B5A60050206884A000804000DC
1434:10599000CF3CB5A600049B780E0024680780AA7847
1435:1059A0007800EF3C1C68FCD0C000DD3CB5A60008C8
1436:1059B0002068C4D04000EF3CB5A600407800EF3C22
1437:1059C0002068C4D04000E53CB5A600407800EF3C1C
1438:1059D0009B781800AB7802009B788100AB780100BF
1439:1059E000B5A6001084A600024000093D2C68D278BC
1440:1059F0003068D67884A600014000073D2C6884A05A
1441:105A000001004000073D887884A040004000073D29
1442:105A1000B5A600807810F6475A7EB66E78003548F5
1443:105A20007810C839C000A03D2C70048048001B3D90
1444:105A30001920494F781013232F70010041200100D5
1445:105A4000312000109B781800146884A01F0085A0E6
1446:105A50008000AA781C6984A102004000343DB5A6EC
1447:105A60000400AB7820002868AA78C0A802001C684F
1448:105A7000F4D040003D3D502C78107A3A781002471F
1449:105A8000206884A0008040004B3DB5A600049B78B0
1450:105A90000E0024680780AA787800523D1C6884A014
1451:105AA0000080C000523DB5A60008206884A0000117
1452:105AB0004000593DB5A600401C6884A0C00003808A
1453:105AC0000380078080A0A63D042035A684A600019F
1454:105AD0004000733D2C6884A001004000733D88782D
1455:105AE00084A040004000733DB5A600809B787E00F6
1456:105AF000AE7EB66E14680780AA7882781028AA7ADB
1457:105B0000307884A0C000C000A03D1800A03DB47053
1458:105B100080A0DD001A787810E03984A600024000E9
1459:105B2000943D2C68D2783068D6787810F647002DEE
1460:105B3000A2704A701068BE700370070080AD0F003D
1461:105B400036707800FA247810D31B7810E03978008A
1462:105B5000FA24000000030002000078108C240023C7
1463:105B60007900AF3DB23DB23DB43D78108C24781041
1464:105B70000548246984A1FF0086A00A004000C63DB4
1465:105B800084A100FF85A00A0026687810D31B780046
1466:105B9000683C01200A00781097477800683C82A290
1467:105BA00005005000D23D78108C24007084A00700BE
1468:105BB000C0108C3A78108919C000F43D6920FFFFAD
1469:105BC00084A604004000E53D012000287800E73D60
1470:105BD00001200008B47188A191009B780E00078015
1471:105BE000AA78312000045A7E1A797800FA240768CE
1472:105BF00006010B6800009F6800002768000086A36C
1473:105C00000200C000153E86A20200C000153EA0782A
1474:105C100005A0C000153E84A40080C000153EE478B5
1475:105C200084A008004000153EB5A608001920000019
1476:105C300078101742002DA2704A7003700700377069
1477:105C40000000246884A080004000273E7810CD42E8
1478:105C50007800FA24002379002A3E2D3EAE3EC73E4E
1479:105C600000227900303E353E453E6B3E773E9A3EFF
1480:105C70002920010026A0112000007810F3437900AC
1481:105C80003E3E433EFA24683C433E433E78108C241B
1482:105C900090798CA10700C0004C3E0920080011201B
1483:105CA000010084A604004000543E1120030020227D
1484:105CB0002AA1112001007810F34379005C3E613E77
1485:105CC000FA24683C693E633E78003B48AB70673E0F
1486:105CD0007800FA247800613E78108C2484A61000A5
1487:105CE0004000753E78109C424000753E7800FA24D2
1488:105CF00078000D43006084A002004000943EB47020
1489:105D000080A0CD001A787E0D78101248002D2E68E4
1490:105D1000276800007810C63B7F0D7810AC1903701F
1491:105D20000000377000004B7000007800683C84A6CB
1492:105D30000400C0009A3E78003B48006084A0040044
1493:105D4000C000AC3E006084A001004000AC3EAB70DF
1494:105D5000AC3E0120070078108F477800414878005A
1495:105D60003B4800227900B13EB63EB83EB63EB63E54
1496:105D7000B63E78108C24A770BC3E78004748E47883
1497:105D800084A00800C000B83E78108147AB70C53EC3
1498:105D900078003B4800227900CA3ECF3ED13ED13E3A
1499:105DA000CF3ECF3E78108C24E47884A008004000D9
1500:105DB000E63EA770DA3E78004748112004007810CC
1501:105DC000ED437900E03EE63EFA24683CE63EF03ED4
1502:105DD000F43EAB70EE3E0120030078108F47780050
1503:105DE000414878003B48AB70E63E7800FA24AB703F
1504:105DF000F83E7800FA247800EE3E82A203005000BC
1505:105E0000003F78108C2486A30200C000193F86A2B0
1506:105E10000200C0001F3FA07805A0C0001F3F84A45F
1507:105E20000080C0001F3FE47884A008004000193FB4
1508:105E3000B5A608001920000084A6080040001F3FF6
1509:105E4000781079421068BE70037007000023790053
1510:105E5000263F293F563F5E3F002279002C3F313FCD
1511:105E60002F3F4A3F78108C249079ACA1070026A0E0
1512:105E7000112001007810F34379003B3F403FFA24A2
1513:105E8000683C483F423F78003B48AB70463F780053
1514:105E9000FA247800403F78108C2484A6100040003B
1515:105EA000543F78109C424000543F7800FA24780018
1516:105EB0000D4300227900593F5C3F5C3F5C3F781006
1517:105EC0008C2400227900613F643F663F663F781072
1518:105ED0008C24E47884A0080040007B3FA7706F3FCB
1519:105EE00078004748112004007810ED437900753F91
1520:105EF0007B3FFA24683C7B3F853F893FAB70833F03
1521:105F00000120030078108F477800414878003B4813
1522:105F1000AB707B3F7800FA24AB708D3F7800FA2499
1523:105F20007800833F00237900923F973F993F953F48
1524:105F300078108C24A4707A00A4707A0082A20200E7
1525:105F40005000A13F78108C2484A600024000AB3F93
1526:105F50007810FE477810D543781005480023790063
1527:105F6000AE3FB13FD93F3F4086ADFFFF4000683CA8
1528:105F700086A201004000BB3F78108C2484A600025A
1529:105F80004000C33F7810FE4778100548012001000B
1530:105F900078109747B87884A001C04000D53F487872
1531:105FA00085A008004A78487884A00800C000D03F47
1532:105FB000037000007800683C00227900DC3FDE3F7F
1533:105FC0000F40A770E23F7800474811200D0078107D
1534:105FD000ED437900E83FEF3FFA24683CF73FFF3F8D
1535:105FE00005400740B4A6FF00B5A60004B66E5A7E71
1536:105FF00078003548B4A6FF00B5A60004B66E5A7EF8
1537:1060000078003548AB7003407800FA247800EF3F01
1538:1060100078108C24AB700B407800FA2478104D482F
1539:106020007800FA24A7701340780047481120120026
1540:106030007810ED43790019401F40FA24683C2B404A
1541:1060400033403940B4A6FF00B5A60004B66E5A7EB0
1542:10605000B47080A0AA001A787800FA24B4A6FF00D1
1543:10606000B5A60004B66E5A7E78003548AB7037404E
1544:106070007800FA2478001F40AB703D407800FA2485
1545:1060800078002B4086A201004000454078108C2407
1546:10609000A770494078004748112015007810ED435B
1547:1060A00079004F405440FA24683C62406E40B4A6E8
1548:1060B000FF00B5A60004B66E5A7E3B780113B4709B
1549:1060C00080A0B5001A787800FA24B4A6FF00B5A61F
1550:1060D0000004B66E5A7EB47080A0AA001A787800C8
1551:1060E000FA24AB7072407800FA247800544082A2FF
1552:1060F000030050007A4078108C24002379007D4002
1553:106100008040B740144186A20100400086407810CC
1554:106110008C24046884A0FF0086A00600C000934081
1555:106120007810C63B037000007800683C3B680000B4
1556:106130003768000084A600024000A1407810FE47A6
1557:106140007810D54378100548012001007810974752
1558:10615000B87884A001C04000B340487885A008000A
1559:106160004A78487884A00800C000AE400370000060
1560:106170007800683C00227900BA40BC40EF40A7702C
1561:10618000C0407800474811200D007810ED43790099
1562:10619000C640CD40FA24683CD540DD40E340E540B0
1563:1061A000B4A6FF00B5A60008B66E5A7E7800354842
1564:1061B000B4A6FF00B5A60008B66E5A7E7800354832
1565:1061C000AB70E1407800FA247800CD4078108C2440
1566:1061D000AB70EB40781005487800FA2478104D48F1
1567:1061E0007800FA24A770F340780047481120050092
1568:1061F0007810ED437900F940FE40FA24683C0641EE
1569:106200000E41B4A6FF00B5A60008B66E5A7E78000F
1570:106210003548B4A6FF00B5A60008B66E5A7E7800D1
1571:106220003548AB7012417800FA247800FE4086A20F
1572:10623000010040001A4178108C24A7701E4178009C
1573:106240004748112006007810ED4379002441294188
1574:10625000FA24683C2F413941B5A60008B66E5A7E33
1575:1062600078003548B4A6FF00B5A60008B66EB5A6FE
1576:1062700000405A7E78003548AB703D417800FA24E2
1577:106280007800294100237900424147414541454179
1578:1062900078108C2478108C240023A87105A07A0132
1579:1062A0001068BE7082A203005000554178108C2403
1580:1062B0000023790058415B4169418B4184A600026B
1581:1062C000400063417810FE47781005480120010026
1582:1062D000781097477800FA2496A202004000724195
1583:1062E000FF824000724178108C24A77076417800BC
1584:1062F0004748112018007810ED4379007C41814116
1585:10630000FA24683C83418541780035487800354857
1586:10631000AB7089417800FA2478008141002279002D
1587:106320008E419041A941A7709441780047481120BF
1588:1063300017007810ED4379009A419F41FA24683C98
1589:10634000A141A3417800354878003548AB70A7419A
1590:106350007800FA2478009F4184A40080C0000542A0
1591:1063600084A600014000B5417810FE477810D5435F
1592:10637000D878D278DC78D678B4A6FFEF5A7EA770AA
1593:10638000C0417800474811200D007810ED43790096
1594:10639000C641CD41FA24683CCD41F341F941FB416E
1595:1063A000D878DC7905A1C000DF41B87884A01F004F
1596:1063B000C000DF41B3700000587884A0FFFD5A7818
1597:1063C0007800354884A600014000F141487885A056
1598:1063D00008004A787810BC472C68D2783068D678A4
1599:1063E000B37000007810F64778003548AB70F7417D
1600:1063F0007800FA247800CD4178108C24AB700142EB
1601:10640000781005487800FA2478104D487800FA246E
1602:1064100078100548AB700F420120030078108F47B9
1603:10642000780041487810F6472C68D2783068D678E2
1604:1064300078003548B8701268BE700080BA701B686A
1605:10644000000084A6080040003A427E157E137E14A8
1606:106450009078048004800480048084A00F001A686F
1607:10646000AC809B78000080AF2B00982080AD0B00A3
1608:10647000A020A5537F147F137F15C4A6000F84A608
1609:106480000200C00049422C690D810D810D8184A15B
1610:106490000700082078005C429B781000AC7984A14A
1611:1064A000200040005C427E01092005000120003DE3
1612:1064B0007810C747246885A03B0026687F0184A127
1613:1064C0001F0005A8166878103B3CBE6884A604002F
1614:1064D00040006D428CA100FFA87884A0FF0005A1B8
1615:1064E0002A68B4A6FF00006084A00800400077423C
1616:1064F000B5A60040B66E7C007E157E137E1418692A
1617:106500009078048004800480048084A00F007E00C2
1618:1065100000A11A687F000080048040009842A820F3
1619:10652000048180A00B0000ADA0209B78000080AF0C
1620:106530002B009820A5537F147F137F157C002C68B7
1621:1065400084A02000C000A4420C627800A542106222
1622:10655000186B002302A24000C542182082A30E003F
1623:106560004800B5424000B54219200E007800B942FB
1624:10657000587884A0EFFF5A783B78011B937800008D
1625:10658000A27BB47080A08E001A7885A001007C00E8
1626:10659000587884A0EFFF5A789378000006A07C001A
1627:1065A00004698CA1FF0096A107004000DA4296A181
1628:1065B0000F004000DA4207681701146978103B3C6D
1629:1065C00000610481C800F5421C6005A04000E9425A
1630:1065D000012000087800F7427E0D24687E007810C4
1631:1065E00012487F002668002D2E687810C63B7F0D6C
1632:1065F0000120000224698CA1FF000DA126690780FB
1633:106600009B780E00AA78206885A00080226831203F
1634:106610000004B66E5A7EB47188A191001A797C008C
1635:10662000C4A6000F84A60200C00021432C690D817E
1636:106630000D810D8184A10700082005A81668781037
1637:106640003B3CBE6878002443146978103B3C0061F1
1638:106650000481C800824384A10003400030430768DE
1639:10666000170178004E43046005A0C0005743076837
1640:1066700017011C6005A0C00044437E0D781012482D
1641:1066800027683400002D2E687810C63B7F0D84A645
1642:10669000040040004E43312000040120002878000F
1643:1066A00052433120000401200008B47188A19100F8
1644:1066B0007800B043186005A0C00044431C6005A0EA
1645:1066C000C00044439F68000027683D0084A6010085
1646:1066D0004000BE4394D6C0007B430061D4D140004B
1647:1066E0007B432C698CA1FF004000BE4386A10300C0
1648:1066F0004000BE4386A112004000BE43B5A600087C
1649:10670000B47188A1AE007800B94307681701312041
1650:1067100000042C698CA1FF0086A11200C0009343E5
1651:106720000120CB43092001007800A44386A1030087
1652:10673000C0009D430120CC43092012007800A443EF
1653:1067400001200002B47188A191007800B043781054
1654:10675000E147A37800001C6885A040001E68B47162
1655:1067600088A1DA0006A0266807809B780E00AA7828
1656:10677000206885A000802268B66E5A7E1A7978005B
1657:10678000FA24B66E7810C63B1068BE70037007001E
1658:10679000A37000004B7000007800FA242300700002
1659:1067A00005000000000A00000000250000000000B5
1660:1067B0003B6800003768000084A600024000EC43FC
1661:1067C000B8788CA01F0084A000804000E5430881B9
1662:1067D000D87800A13668DC7881A000003A687C0097
1663:1067E00090790F81ACA507002120000080A4100043
1664:1067F0009A78A8798CA1FF0084A18000C0001B4476
1665:1068000082A12000C800394482A11200C80081473B
1666:106810000021791009447C008147EB45814781477D
1667:10682000464449448344B944ED44F0448147814798
1668:10683000A44414454E4581478147744584A12000F6
1669:10684000C000A8458CA11F00146884A01F0006A1E9
1670:1068500040003644B47080A0CD001A7801201400A6
1671:106860007810974778100548037000000120020057
1672:106870007C00012000007C0082A12400C800814728
1673:1068800084A10300791009447C0081478147814736
1674:106890008147781081477C00002279004C4477457D
1675:1068A0007745704470447044704470447044704440
1676:1068B00070446E4470446544704470447044704445
1677:1068C000704478447B4477457B4470447044704402
1678:1068D0007E0C7E07146F7810B0377F077F0C78002E
1679:1068E000704478108E462768B30209200B000120FF
1680:1068F00000487800AB45781073477C002768930008
1681:1069000009200B000120004878009345582D0468A9
1682:1069100084A0FF0086A00600C0008D440768170110
1683:106920002768020078101248276836003269002D67
1684:106930002E687E0D7810963B7810D345682B781022
1685:10694000C63B7F0D7810C63B012002007C0078100A
1686:10695000D3450120170078109747A3700000092045
1687:1069600038520B200600AF70170009200002781083
1688:10697000D43A012001007C0000227900BC44774514
1689:10698000A845A845A845DD44BA45E544BA45BA45F9
1690:10699000BD45BD45C245C245D544D544A845A845D9
1691:1069A000BA45A845E5447745E544E544E544E54472
1692:1069B0002768840009200B00012000437800CC45A3
1693:1069C00027680D0009200B00012000437800AB452B
1694:1069D0002768930009200B000120004378009345AD
1695:1069E000012000007C0000227900F34477450C452B
1696:1069F0000C450C450C45BA45BA45BA45BA45BA45A9
1697:106A0000BA45BA45BA450C450C450C450C45BA4546
1698:106A10000C450C45BA45BA45BA45BA45774527688D
1699:106A2000930009200B00012000437800934584A6C1
1700:106A30000400C0002845046884A0FF0086A006006A
1701:106A4000C00081477810D345076817017810C63B0E
1702:106A5000012002007C00006084A004004000814707
1703:106A6000582D046884A0FF0086A00600C0003745AA
1704:106A70000768170127680200781012482768360057
1705:106A80003269002D2E687E0D7810A53B7810D34515
1706:106A9000682B7810C63B7F0D7810C63B01200200A2
1707:106AA0007C00006084A0040040008147046A94A236
1708:106AB000FF0086A20600C0005C4507681701276832
1709:106AC0000200582D78101248276836003269002DD0
1710:106AD0002E687E0D7810B53B7810D345682B781062
1711:106AE000C63B7F0D7810C63B012002007C00781069
1712:106AF00081477C00B47080A0CD001A78012001008D
1713:106B000078109747781005480370000001200200B4
1714:106B10007C007810C7477810FE477810D54378106E
1715:106B2000CD4278100548012001007C007810C7474D
1716:106B30007810FE477810D543B47080A0CD001A7845
1717:106B40000120130078109747781005480370000063
1718:106B5000012002007C00781081477C007810C74734
1719:106B60007810FE477810D5437810CD42781005484C
1720:106B700078104D48012001007C00012003007C00BA
1721:106B800078108E46012000007C007E0C7E07146F7A
1722:106B90007810B0377F077F0C012000007C00781050
1723:106BA000C74778108147012006007C0004698CA14A
1724:106BB000FF0086A107004000DE4586A10F00C0004F
1725:106BC000E2457810FE477810D543B47080A0CD0020
1726:106BD0001A7878100548037000007C00A87A94A207
1727:106BE000FF00A87884A0FF008AA00400C8008147A5
1728:106BF0007910F8457C008147FC458147954682A283
1729:106C0000030040000346781081477C00A87DACA5B6
1730:106C1000FF00A87CA4A4FF00B86984A10001400083
1731:106C200042468CA1FFFEBA69A07805A0C00042468A
1732:106C3000A4A4FF004000364682A40C0040001F467A
1733:106C4000C80029462B852B8578102E384000294610
1734:106C5000781027367800384678106047781052361A
1735:106C6000B8698DA10001BA69B5A600105A7E7800F6
1736:106C70003B4678105236B4A6FFEF5A7EB47080A01F
1737:106C800091001A78012001007C007E0C7810824669
1738:106C90000062E4D2400073460862178294A2FF00AB
1739:106CA00082A20C00480055464000554611200C00B9
1740:106CB000002402A2C8005A462022086294A2FF00C3
1741:106CC0001C7002A2C80062461C72002202A5C80005
1742:106CD00067462822781064472B852B8578102E383C
1743:106CE0004000734678102E3678007746781060475B
1744:106CF00078105936B5A600105A7EB47080A0B9003D
1745:106D00001A78012004007F0C7C007E001468078044
1746:106D100084A00F00038003800380E0A080547F00E4
1747:106D20007C007E0C78108246781059367F0C7C00EF
1748:106D300082A20200C0008147A87A94A2FF00B8692D
1749:106D400084A100024000CC468CA1FFFDBA69A07866
1750:106D500005A0C000CC4682A20200C8006B377810A4
1751:106D60002A477810F9367810523684A60001400080
1752:106D7000C2462C6884A001004000C246FCC6887848
1753:106D800084A040004000C246FDC6B5A600105A7E51
1754:106D9000B47080A091001A78012001007C007E0C64
1755:106DA0007810824684A2FEFF4000D74611200100E1
1756:106DB0007800DB4684A201004000E1460061ECD18E
1757:106DC000C000E1461120000078101C477810003701
1758:106DD0007810593684A600014000F7462C6884A03C
1759:106DE00001004000F746FCC6887884A040004000BF
1760:106DF000F746FDC6B5A600105A7EB47080A0B90053
1761:106E00001A78012004007F0C7C007E0C6029006051
1762:106E10001120010084A00020C0000D4711200000B7
1763:106E2000AB780100AB780200AB780300AA7AC0A867
1764:106E30000400B86885A00002BA687F0C7C009B78CB
1765:106E40001800AB780100AB780200AB780300AA7A97
1766:106E50009B788100AB7804007C007E0C547060202D
1767:106E6000006084A00010C000384729203200212093
1768:106E70000000780058470865ACA5FF00187086A090
1769:106E80002800C000484782A51900C8004E472920A5
1770:106E9000190078004E4782A50C00C8004E472920F3
1771:106EA0000C0008642784A4A4FF0082A40C004800FE
1772:106EB000584721200C0078106447B86885A000016D
1773:106EC000BA687F0C7C0021200000292032009B78CA
1774:106ED0001800AB780100AB780300AB780100AA7D05
1775:106EE000AA7C9B788100AB7805007C000120030020
1776:106EF00078108F47B5A600105A7EB47080A0B900F4
1777:106F00001A78012005007C000120070078108F47C7
1778:106F1000B5A600105A7EB47080A0B9001A7801207E
1779:106F200004007C009B781800AA789B788100AB78DD
1780:106F300001007C0004698CA1FF0096A107004000BD
1781:106F4000A54796A10F004000A5477810AC197C001A
1782:106F5000246994A13F00C000AE478CA1C0FF05A1E9
1783:106F600026687810C63B1C6984A100014000BB471D
1784:106F7000146978103B3C0462108206627C002C6924
1785:106F800034682E6812A13069386832681BA100A2EB
1786:106F900001A37C007E0CE0AD180003607000066168
1787:106FA0000B6000000F60000A136000001760000013
1788:106FB00007801A601F600000236000007F0C2468B7
1789:106FC00085A0800026687C007E157E137E149820A4
1790:106FD00080AF2D00A020AC814000EC47A65384A1D7
1791:106FE00001004000F2470433BE787F147F137F1501
1792:106FF0007C00B07005A0C0108C24B37000807800B5
1793:107000004B4BB071FF81400004487810414C7C002C
1794:10701000B071FF8140001148487885A008004A7887
1795:10702000B3700000781087487C007E0C7E0D7810CD
1796:107030008919C0001A4878108C247F0C7E157E13A5
1797:107040007E14A02D982CA9203100A3537F147F1308
1798:107050007F1507680D010B680000047007801A682F
1799:10706000236800001F6800009F6800007F0C7C0000
1800:10707000B47080A091001A787800FA24B47080A0CF
1801:1070800081001A787800FA24B47080A0B9001A78C8
1802:107090007800FA24B47080A0C3001A787800FA242B
1803:1070A00004698CA1FF0096A1070040005A4896A1F0
1804:1070B0000F0040005A4807681701246884A0FF00A9
1805:1070C00085A00002266807809B780E00AA782068B9
1806:1070D00085A00080226831200004B66E5A7EB4710B
1807:1070E00088A191001A797C0078100548487885A01D
1808:1070F0000C004A78B47080A0CD001A7809200B00EB
1809:10710000012000447810C7470120130078109747EA
1810:107110007800683C7E129120002249208748007048
1811:10712000047205A20C7215A2087084A0F7FF05A2D4
1812:107130004000994878009E48037000007F120020AC
1813:107140007C00007084A00100C000CC48087103815D
1814:10715000C800AB487810CE497800A3480C708CA0CA
1815:10716000FF004000CC4804700480C800C34814707D
1816:1071700005A0C000BF48107005A04000C34802A190
1817:10718000C800A348077010007800CC48FF8A400070
1818:10719000CC487810184CC000C6484000A34878106E
1819:1071A0005749037000007F1200207C007E010461BB
1820:1071B0008CA1FF0086A107004000DF488EA10F00D0
1821:1071C000C000E24840607800E34828647F01FF8403
1822:1071D00040000D49702C0470BCA00F00B8A71D49D9
1823:1071E0003C27FB87C000FB484800F54878108C24FA
1824:1071F0009C6075A040000D497800E848042768AEFF
1825:10720000086830A60C6829A5218440000D493887FC
1826:10721000042705A0C000FC489C7075A0C000E84889
1827:107220007C000000050009000D0011001500190088
1828:107230001D000000030009000F0015001B000000E6
1829:10724000000012490F4900000000008000001249B0
1830:1072500000001A49174900000000000000001A4908
1831:107260000000154915490000000000800000154984
1832:1072700000001B491B4900000000000000001B49E2
1833:107280007E12912000227920005271201000077098
1834:107290000A000770020003700000712020000770D0
1835:1072A0000A000770020003700000492000007F12EE
1836:1072B00000207C00492057491920000004700480F8
1837:1072C000C800AA49077012000871087006A1C00022
1838:1072D000614984A1E00140006C4978108C240120B0
1839:1072E000FD04042082A00500C800774984A1004065
1840:1072F000C00061499CA10C3086A304204000854950
1841:1073000086A308004000904986A30C20C000614974
1842:1073100000720482480090490C7384A3FF0040006F
1843:10732000904978108C2407701200007084A001002E
1844:10733000C000AA49087084A0E001C000AA491073E7
1845:10734000147005A34000AA490C7184A10003C00079
1846:10735000AA4984A1FF00C0005749077012000770B6
1847:107360000800047084A00800C000AE490770120035
1848:10737000087103814800B3490370000049200000F0
1849:107380007C007E107E007E127E1591200022087106
1850:107390007810CE497F157F12912001807F007F10E9
1851:1073A0007C00047200750C7384A30003C000F549CF
1852:1073B00084A1E001C000194A087184A1E001C00065
1853:1073C000194A0120FD04042082A00500C800E949F3
1854:1073D00084A10040C000D94984A107007900ED498B
1855:1073E000F749094AF549094AF549554AF549534AC1
1856:1073F00078108C24047084A0100085A00200067010
1857:10740000FF8AC000044A492000007800084A78102A
1858:10741000184CC000044A7C00047084A0100085A0B1
1859:1074200002000670FF8AC000144A7800184A7810DB
1860:10743000184CC000144A7C00077012000871E0006C
1861:107440001C4A91200060E000204A912000600770F3
1862:10745000120007700800047084A00800C000284AC9
1863:10746000077012000871038148002D4A0370000064
1864:10747000007005A0C000414A047005A0C000414A48
1865:107480000C7005A04000434A7800244A49200000BF
1866:107490007810D738186884A0008040004E4A1B68D6
1867:1074A00002007C0078108C2478108C247810B14A6B
1868:1074B000107214710C709CA0FF00002800A311A290
1869:1074C00089A100007810B14A0427582C60AC0863E9
1870:1074D000002222A30C6300211BA3002405A340006B
1871:1074E000784AC800784A128410820A8389A1000071
1872:1074F000602B78005F4A602B078A7E00046084A0BE
1873:1075000008004000844ABAA717497800864ABAA7FB
1874:107510000F497F003DA7002C86688A6F926C8E6BA6
1875:1075200007701200781057497C003887042705A09F
1876:10753000C000A54A9C6005A04000AE4A60200460DF
1877:1075400084A00F0080A01D493C20FB8740108C24A4
1878:10755000518A4000AD4A087084A0030086A0030051
1879:107560007C00512000007C00508A3987042704A049
1880:10757000C000C54A006064A0C000BC4A602D046021
1881:1075800084A00F0080A02D493C20FB8740108C2454
1882:107590007C007E127E0D912000227F0D8468602089
1883:1075A00088688C6B906C5780D4AAFF0084A0FF0081
1884:1075B0007E00046884A008007F004000E04AB8A074
1885:1075C00017497800E24AB8A00F49087EB5A60C001A
1886:1075D00004698CA1FF0086A107004000F04A8EA13B
1887:1075E0000F00C000F94A1C6884A040004000004B16
1888:1075F000B5A601007800004B1C6884A04000400044
1889:10760000004BB5A6010007700400047084A00400BC
1890:10761000C000024B002405A3C0000D4B7800334B83
1891:10762000582C0427046160AC006000A41A70046048
1892:1076300001A31E7084A108004000234B106081A0AC
1893:1076400000002270146081A00000267008620024EF
1894:1076500002A212700C62002303A216700276077059
1895:107660000100602B7810924A7800354B7810184C46
1896:10767000C000334B7F1200207C007E127E0D9120D3
1897:1076800000227F0D07700400047084A00400C00075
1898:10769000414B037008007F1200207C007E127E0D9B
1899:1076A000912000227F0D49204B4B0770040004708D
1900:1076B00084A00400C000544B087EB5A60C000469E9
1901:1076C0008CA1FF0086A107004000674B8EA10F0030
1902:1076D000C000724B1C6884A0400040006E4BB5A6F1
1903:1076E00001004068502078007B4B1C6884A020007B
1904:1076F000C000794BB5A6010028685020602D0460B9
1905:10770000BCA00F00B8A71D493C27FB87C0008F4BCA
1906:107710004800894B78108C249C6865A04000934BEE
1907:1077200078007C4B7810184CC0008F4B7F120020E3
1908:107730007C007E127E007E017E0D912000227F0D56
1909:107740007F037F04087EB5A60C0004698CA1FF00AE
1910:1077500086A107004000AD4B8EA10F00C000B64BC4
1911:107760001C6884A040004000BD4BB5A60100780015
1912:10777000BD4B1C6884A040004000BD4BB5A6010075
1913:107780004920964B7E0104698CA1FF0086A1070069
1914:107790004000CB4B8EA10F00C000CE4B406878005C
1915:1077A000CF4B28687F0155A04000154C702D602EEE
1916:1077B0000470BCA00F00B8A71D493C27FB87C00080
1917:1077C000E94B4800E24B78108C249C7075A0602037
1918:1077D0004000154C7800D54B042768AE086822A4F9
1919:1077E0000C681BA34800024C518AC000F64B78106D
1920:1077F0008C243887042705A0C000EA4B9C7075A034
1921:1078000060204000154C7800D54B228420841A83D8
1922:1078100099A300000869002422A10C6900231BA180
1923:10782000C800114C78108C24712020007800004B87
1924:107830007F1200207C00087084A0030086A0030053
1925:107840004000404C042708AC04211A700881042130
1926:107850001E700881042112700881042116700460D2
1927:1078600084A008004000374C088104212270088160
1928:10787000042126700276047084A0100085A0010007
1929:1078800006707810924A7C007E127E007E0D912058
1930:1078900000224920414C7F0D7F08087184A103001C
1931:1078A000C0006B4C7E0104698CA1FF0086A107001B
1932:1078B00040005B4C8EA10F00C0005E4C4068780019
1933:1078C0005F4C28687F0105A04000794C78009E48F5
1934:1078D00020006B4C7810554A7800794CA000724C0F
1935:1078E00008717810CE4978004A4C07701000A0004B
1936:1078F000744C08717810CE49087086A00800C0004A
1937:107900004A4C007005A0C0004A4C0370000049209A
1938:1079100000007F1200207C007E127E147E137E15F4
1939:107920007E0C7E0D912000227F0D4920894C80AD78
1940:107930001100A020992031000C7084A0FF002A685B
1941:107940000770080007700200037001004000A84C97
1942:107950000080AC80A55307700400047084A004006C
1943:10796000C000AA4C7F0C49200000037000007F1566
1944:107970007F137F147F1200207C00912000609120F3
1945:107980000080CC7805A04000D14C9479D07006A13D
1946:10799000C000D14C047805A04000D14C077800000D
1947:1079A0006800D14C91208040207801802278C0006E
1948:1079B0002C4D2478227869204052006884A007006A
1949:1079C0004000EF4C86A002004000EF4C34680DA050
1950:1079D0004000EF4C042105A04000EF4C01800A203C
1951:1079E0004000D44D487805A04000FD4C01804A7805
1952:1079F000C000FD4C0920020144680A2078106F2263
1953:107A0000906805A04000094D01809268C000094DB2
1954:107A10006F6800007368010061200055A920000113
1955:107A200009200200346005A040001F4D018036602F
1956:107A3000C0001F4D106005A040001F4D7E01781052
1957:107A40006F227F01E0AC10007000254D78000F4DD3
1958:107A5000098140002C4DA920000178000F4D7810BD
1959:107A6000394D78105E4D0920515204210920020140
1960:107A70000A20912001807C00347801803678C00093
1961:107A80005D4D3878367891200080447805A0C0009C
1962:107A9000484D012001010180467880A000754020FA
1963:107AA000042065A040005D4D246005A04000594DB4
1964:107AB0000180266040008D4D0060402C78004E4DC6
1965:107AC0007C00287801802A78C0008C4D2C782A7898
1966:107AD000307805A0C0006B4D012000020180327893
1967:107AE000038003800380038090A0005598A20200C9
1968:107AF000042384A0080040008C4D90A209000422B9
1969:107B000005A04000844D01801220C0008C4D04234C
1970:107B100084A0F7FF85A080001A2078106F227C00D7
1971:107B200069204052006805A04000974D486806ACA7
1972:107B30004000D44D1B600600B46084A0003F1E606E
1973:107B4000206084A0FF0085A06000226000604220C9
1974:107B50001467826F7810C519186805A04000AF4DF2
1975:107B600001801A68086884A0EFFF0A681068018025
1976:107B7000D000B94D78108C2412682F60000033605B
1977:107B80000000682C7810DC1C69204052447984A1E4
1978:107B90000001012006006E68C000CF4D86690120FB
1979:107BA00004006E6878106A22912001807C006920B0
1980:107BB000000109204052042184A007004000304EFB
1981:107BC00086A00700C000EA4D7E0D092052526C21AC
1982:107BD00078101C3B7F0D7800304E092052526421F2
1983:107BE000781037241B600600586884A0003F1E6090
1984:107BF000206084A0FF0085A0480022602F60000064
1985:107C000033600000306884A040004000244E4B6880
1986:107C10000400A9201400486884A004004000114E0C
1987:107C20007000114E7800084E4B680900A92014001E
1988:107C3000486884A0010040001E4E70001E4E78006F
1989:107C4000154EA920FA007000244E7800204E0868D6
1990:107C500084A0FDFF0A681B68480009205B520B20C6
1991:107C600007004C784A78912001807C0079200052EE
1992:107C700078105E4E7810424E7810504E33780000E7
1993:107C8000477800004B7800007C0019200300112089
1994:107C90004652042286A03C0040004D4E19200200AE
1995:107CA0002A7B2E7B7C0019203900112046520422A9
1996:107CB00086A03C0040005B4E19202700367B3A7BB3
1997:107CC0007C001920713911204652042286A03C0004
1998:107CD0004000694E19202626227B267B3F78000033
1999:107CE00043780A007C0020002B00000020000000E8
2000:107CF0002000000020000000200000002000000004
2001:107D000020000000200000002000000020000000F3
2002:107D100020000000200000002000000020000000E3
2003:107D200020000000200000002000000014001400CB
2004:107D300049981400140014001400140014001400D6
2005:107D400080000F00000001020406080C20212240E0
2006:107D500080F818000B3001A2140000A2140000A249
2007:107D6000140200006C0002001400CD989E009300E5
2008:107D700002A2388806383988C32064088598C1284B
2009:107D8000AE9C03A20C30462861816A840083561899
2010:107D90003A886598F228919C58980C30E128919C7B
2011:107DA000022806A2C3642E2807A2A064E06DA06783
2012:107DB000C06F14183B882478C16864783E8879982D
2013:107DC000768577866B20C128AE9C44200321A220B3
2014:107DD0008120659809A201298D98140005A200A3AD
2015:107DE00072189A873C88E21F01C60AA26E850407B2
2016:107DF000919C140004A200A30930E21964F86E8576
2017:107E00003F88E608919881F88C9801C81400C1F861
2018:107E10001600B285F080329502FBE21D1400328517
2019:107E200041F21400E21DA884A0D7E61F140008A2A6
2020:107E300043600880C11D1600008360812A8441F0E0
2021:107E40000830A884D6114270DD201100D520228888
2022:107E50001600008047281110C098008000A002285A
2023:107E60001110C69865983E281110CA980BA21700E9
2024:107E70000C3000A3E21D81DB14001002D79814001F
2025:107E8000E0263A8702FBF219E21F14000DA2063821
2026:107E90001002B39C040700006C0002004F9814000D
2027:107EA0009E00A0001700FF600C30208711A2D09C1C
2028:107EB0007287378801217A98D210E278D39C59983A
2029:107EC00084D9E2F0A1F0CD981400318866D13088D1
2030:107ED0000F80019420B502C820887A9801237A98EF
2031:107EE000D210E478D39C21882088599823F142F15C
2032:107EF00001F1C698D210F670328803820C879ED9A1
2033:107F000001601400456814021BA2D09C0120C59892
2034:107F10000182521884D163D1348801808D98273032
2035:107F2000A884561A3388140018A28169BC9C26695B
2036:107F30000269341A9998141A2170140000A341613F
2037:107F40006469108092852680B984E4692380E116F3
2038:107F50000180F110466913A2621413A20080E11699
2039:107F6000B598696914A2C2610280E1140480E11627
2040:107F700001010A302788140017A2BC9C140000A33A
2041:107F800081812A84A884E61C2C88160012A2D09C29
2042:107F9000D210E4700400078024941ACCD39CC598B6
2043:107FA00027880A3013000080A4841600C2111E2105
2044:107FB0000E871DA214008E8716001CA23510919802
2045:107FC00010A200A0108092853B8544D02280073803
2046:107FD000BB84EA9821800738B9840C307E812B87D6
2047:107FE00072879198000020002B0000002000000004
2048:107FF0002000000020000000200000002000000001
2049:1080000020000000200000002000000020000000F0
2050:1080100020000000200000002000000020000000E0
2051:1080200020000000200000002000000014001400C8
2052:10803000499814001400E298CD981400140014001C
2053:1080400080003701000001020406080C20212240B4
2054:1080500080F818000B3001A2140000A2140000A246
2055:10806000140202A2388806383988C32064082FA871
2056:10807000C128AE9C03A20C30462861816A8400832B
2057:1080800056183A8804A8F228919CF4A80C30E128EC
2058:10809000919C022806A2C3642E2807A2A064E06D6A
2059:1080A000A067C06F14183B882478C16864783E8844
2060:1080B00002A8768577866B20C128AE9C44200321D8
2061:1080C000A2208120E4A809A2012909A8140005A280
2062:1080D00000A372189A873C88E21F01C60AA26E8527
2063:1080E0000407919C140004A200A30930E21964F86B
2064:1080F0006E853F88E608F7A881F8F0A801C814004B
2065:10810000C1F81600B285F080329502FBE21D140022
2066:10811000328541F21400E21DA884A0D7E61F1400A6
2067:1081200008A243600880C11D1600008360812A8474
2068:1081300041F00830A884D6114270DD201100D5200E
2069:1081400022881600008047281110FCA8008000A09B
2070:1081500002281110FDA89BA83E281110FDA80BA213
2071:1081600017000C3000A3E21D81DB1400100201A8EF
2072:108170001400E0263A8702FBF219E21F14000DA258
2073:1081800006381002B39C04071700FF600C302087EC
2074:1081900011A2639D72873788012121A8D210E2784D
2075:1081A000669DFCA884D9E2F0A1F06CA81400318887
2076:1081B00066D130880F80019420B502C820880FA8AE
2077:1081C00001230DA8D210E478669D21882088E6A8B6
2078:1081D00023F142F101F14FA8D210F67032880382E8
2079:1081E0000C879ED901601400456814021BA2639D90
2080:1081F000012040A80182521884D163D134880180C3
2081:1082000001A82730A884561A3388140018A281695F
2082:108210004F9D26690269341A01A8141A21701400AE
2083:1082200000A341616469108092852680B984E46965
2084:108230002380E1160180F110466913A2621413A293
2085:108240000080E11607A8696914A2C2610280E114E6
2086:108250000480E11601010A302788140017A24F9DFF
2087:10826000140000A381812A84A884E61C2C881600AF
2088:1082700012A2639DD210E4700400078024941ACCEB
2089:10828000669DF8A827880A3013000080A484160091
2090:10829000C2111E210E871DA214008E8716001CA27B
2091:1082A0003510B4A810A207380C307E812B87728756
2092:0682B000ADA800000C0D5A
2093:00000001FF
2094/**************************************************************************
2095 * QLOGIC LINUX SOFTWARE
2096 *
2097 * Copyright (C) 2004 QLogic Corporation
2098 * (www.qlogic.com)
2099 *
2100 *************************************************************************/
2101
2102/************************************************************************
2103 * *
2104 * --- ISP1040 Initiator/Target Firmware --- *
2105 * 32 LUN Support *
2106 * *
2107 ************************************************************************/
2108
2109/*
2110 * Firmware Version 7.65.06 (14:38 Jan 07, 2002)
2111 */
diff --git a/firmware/qlogic/12160.bin.ihex b/firmware/qlogic/12160.bin.ihex
new file mode 100644
index 000000000000..dc800ecdaf3a
--- /dev/null
+++ b/firmware/qlogic/12160.bin.ihex
@@ -0,0 +1,1771 @@
1:100000000A042A000010040841100000C93600004C
2:100010004320504F525947495448312039392C31E7
3:1000200039313239312C39392C3339313439512085
4:100030004F4C494720434F435052524F54414F4930
5:10004000004E492050533231363146207269776D67
6:10005000726120655620726569736E6F31202E3093
7:1000600034302020432073756F74656D20726F4E9D
8:10007000202E303050206F72756474634E202E6FC6
9:100080002020303020200024C920FF907120000261
10:10009000A070A2700120FF010420FCD0201171206B
11:1000A0000001A070A270C1202000892021127120BF
12:1000B0001000C3700400C7705349CB702050CF703C
13:1000C0002020D3700A000120FD040420D6700920EE
14:1000D000FFFE30212821A2A1004724842484248407
15:1000E00024842484248492A100910920000001200A
16:1000F00032000C08051E182279200047A02F082482
17:1001000011200000A9204000A4420981D81D092027
18:1001100000FF003402A118021001A820A4421B789D
19:1001200064001478CDC0D5C0167871200002D600C6
20:10013000692040470C085C460120FF010420FCD0E8
21:10014000301169208047712000010C085C4614784A
22:10015000D4C01678DE00CA7EC27CC67B67780000F9
23:1001600000788DC0027831203000AF78010123780B
24:1001700002002778020009200200692040471B681E
25:100180000300236807002768FA002B6808002F681F
26:10019000280037680600336808003B6800000981C2
27:1001A0000005CF680A00BF68C04779200047D368C0
28:1001B0002D76C368C04CC768C04BCB68C08CA7689D
29:1001C000448FAB68498FAF68448FB368448FA3688E
30:1001D00001000120FF010420FCD0C81169208047E4
31:1001E0007008CF680A00BF68C049D3683978C3680F
32:1001F000C06CC768404CCB68D08DA768498FAB688E
33:100200004E8FAF68498FB368498FA3680100E6003D
34:100210006920C04B71200002EC70E4D0192009184D
35:1002200021200900201119200C1821200C000C0895
36:10023000751D0120FF010420FCD088116920404C6D
37:1002400071200001EC70E4D0192009182120090068
38:10025000201119200C1821200C000C08751DEE002F
39:10026000112002006920C04C09200200A9200001D1
40:10027000376800000B684000C87B86A3FFFE28118A
41:10028000176800011F6864002000176864001F6879
42:100290000200E8AD1000041F35110981381D01204E
43:1002A000FF010420FCD02811118218016920C06CC4
44:1002B000D8080C08F6220C083D400C088C1B0C08D2
45:1002C000154691200022792000477120500091208E
46:1002D00000247920004771202000912000267920F9
47:1002E00000027120404791200028792000017120F0
48:1002F00080479120002079200047712010000032B3
49:1003000085A03D30902071201000C37000000410C3
50:100310008C11C07086A0020010110C08BA1339208D
51:1003200000000C08AB12AC7805A08011040E9A11E5
52:100330006C7865A010010C08A1200C08261E040E84
53:10034000AF116C7865A010010C08A120040EAF114C
54:10035000092047471120874704210C2205A11001DD
55:100360000C089B1C71204047A07005A0E8014C744C
56:1003700085A40000C8017920000291200080D0727D
57:100380008CA23D3090210C084C27912000809120B8
58:100390003D30040ED111792000476C7865A0200112
59:1003A000712010000C08A120041DD91179200047EC
60:1003B000712010000C08294471208047A07005A00E
61:1003C00088014C7025A070017920000191200080E7
62:1003D000D0728CA23D3090210C084C2791200080D7
63:1003E00091203D307920004771201000040EFA1151
64:1003F0006C7865A010010C08A120041D8E110C085A
65:10040000294404088E11003C84A0070002000C124D
66:100410000C120E120E1213121312181218120C08CC
67:100420007525912000240C08D5400500912000225C
68:100430000C08D5400500912000220C08D5409120E1
69:1004400000240C08D540050041124112421242120C
70:100450004D124D124D124D1256125612611261126A
71:100460004D124D124D124D12701270127012701208
72:10047000701270127012701270127012701270126C
73:100480007012701270127012F80C0600060126012C
74:10049000912000280C0892252E010E010E000D005F
75:1004A0000600060126010C0800122E010E010E00A6
76:1004B0000D00060006012601912000260C08922559
77:1004C0002E010E010E000D000600060126019120EE
78:1004D00000260C089225912000280C0892252E0158
79:1004E0000E010E000D00060006012601D600E600F2
80:1004F000F600792000477120000269204047003D46
81:100500008CD03001EC7084A0001CE2780C085C46B2
82:10051000003D84D050016920804771200001EC70BB
83:1005200084A0001CE6780C085C460C082625FE001A
84:10053000EE00DE002E010E010E000D0008700B8093
85:100540004012077002008CA0E00120119CD008012D
86:1005500087089708C37002400408BD13040E1E13D9
87:1005600061200000186084D004191E13287805A0AB
88:10057000201104001F1304081E13FCD030010600D4
89:100580000C08291B0E005001280006000C081E1B39
90:100590000E002001012007400408BC131079FCD094
91:1005A0002811612040479CC1FCC720006120804782
92:1005B0009DC1FDC7606005A004191E1312797E60FD
93:1005C0002878FCC086A018002011C6000C08261947
94:1005D000CE002B780000786065A0E001C6009C602A
95:1005E0000C08F31BCE009F6000000C08601A092065
96:1005F00018008760030110780600FF841011FF8542
97:100600001001C5C012780C08341B0E001278981126
98:100610000C087F1B10789CD01811612040472000E7
99:10062000612080479CC012787B600000D060C4D0FD
100:100630003001C4C0D260012005400408BC13040886
101:10064000BA13050006A0C270C670CA70CE70DA7008
102:10065000C0703DA08AA04000041A6C130200BA13B7
103:100660000814D6133C1470147014CE13781A7A142C
104:10067000C813DA13DB13DC13DD137C1AC8138714D9
105:10068000DB144119721ADE13C817FE1730187618DA
106:1006900085179217A517B717BF15C8130D1518158D
107:1006A000261534154B1559155C156E157C158615D8
108:1006B000A515B115C813C813C813C813CC15DD157B
109:1006C000F7152B165416661669169316CC16DE16F9
110:1006D00053176317C813C813C813C813751700211D
111:1006E0008AA04000041AC8130200C813C813C81314
112:1006F000C813C8139E1AA41AC813C813C813A81A7B
113:10070000E81AC813C813C813C81303146B1482144F
114:10071000D6143C19C813C8130B19C813EC1A901A35
115:100720009A1AC813C813C813C813C813C813C81318
116:10073000C813C813C813C813C813C813C813C813E1
117:10074000C813C813C813C813C813C813C813C813D1
118:10075000C813C813C813C813C813C813C813C813C1
119:10076000C813C813C813C813C813CA72C6710120AE
120:1007700006402800CE73CA72C67101200040C270C4
121:10078000040EBD13612000001B6001009120005089
122:10079000912080400500C3700140900CC37006405A
123:1007A000780C99204100A1204100A9200500A35305
124:1007B000200CC470C37004000708F808F008E808AB
125:1007C000E00891200080C3700400C7705349CB70CB
126:1007D0002050CF702020D3700A0001200400D67072
127:1007E000792000001B7801003120300059200010D2
128:1007F00029201A045120450461204704C12020000B
129:10080000912000509120804004081804D875DC74B1
130:10081000DA75DE741800292000002025D071C87216
131:10082000CC73C470A02099203000037001000770C1
132:1008300006001A731E722274267521204000FF8163
133:100840000409BA1382A140001012202106A008203A
134:100850000384127007700400077001000870FCD058
135:10086000E80D0770020084A0E0012001C37002407F
136:100870000408BD13A824A553100C0408BA1329209A
137:1008800000002025D071C872CC73C4709820A120BC
138:10089000300003700000077006001A731E72227485
139:1008A00026752120400007700600FF810409BA1355
140:1008B00082A140001012202106A00820038412709B
141:1008C000A824A653077001000870FCD0E80D84A08E
142:1008D000E001480DC37002400408BD13D875DC74F4
143:1008E000DA75DE747808C471C87014219EA70400FC
144:1008F00008110A20CA720408B913C7700A00CB7025
145:100900000400CF702A000408BA13D875DC76DA75B3
146:10091000DE761800292000003025C470C872CC7320
147:10092000D074C670CA72CE73D27405A0E8050AA44A
148:10093000080140120180727884A000FC3801AC7874
149:1009400085C0AE78012005400408BC137E7B7A7A0E
150:10095000867E827D767C8CA400FF700107840480F3
151:1009600004800C810C810F8118A191A20000B1A616
152:10097000000081A50000500007840480048018A3B3
153:1009800091A20000B1A6000081A500001A731E729A
154:100990002276267005A61801107AC5C2127AAC78A4
155:1009A00084A0FCFFAE781800AC7885C0AE7804084F
156:1009B000BA13D875DC76DA75DE76180029200000C7
157:1009C0003025C470C872CC73D474C670CA72CE732A
158:1009D000D67405A000050AA41001041ABC130180F6
159:1009E000927884A000FC3801AC78C5C0AE780120B4
160:1009F00005400408BC139A7A9E7BA27DA67E002641
161:100A000005A51801107AC5C2127A967CAC7884A02C
162:100A1000FFFCAE781800AC78C5C0AE780408BA13F5
163:100A2000092000006C7865A0180108810060D80CCE
164:100A3000C47A0408B813092048470C210120FF019B
165:100A40000420FCD00419B91311208847142204088B
166:100A5000B813092049470C210120FF010420FCD0D4
167:100A60000419B9131120894714220408B81361200E
168:100A7000404728612C621482148214820120FF01F5
169:100A80000420FCD04811612080472863DA732C636E
170:100A90001C831C831C83DE730408B81309204C4795
171:100AA0000C210120FF010420FCD00419B9131120EE
172:100AB0008C4714220408B81318790408B9130920C4
173:100AC00002020C218CA1300F0120FF010420FCD078
174:100AD0000419B91311200201142294A2300F040842
175:100AE000B81309204D470C210120FF010420FCD040
176:100AF0000419B91311208D4714220408B813207962
177:100B00000120FF010420FCD00419B913247A040841
178:100B1000B8131120404CC471FCD110111120C04BEE
179:100B2000078184A00F0003800380038068A2006A0D
180:100B3000086B1C6CDA74FCD1181121203B021000E8
181:100B400021203B012424A4A4001CDE740408B71354
182:100B5000C4770C089A1B912000801C6B146A9120AA
183:100B6000018008270408B71361204047186101205D
184:100B7000FF010420FCD00419B913612080471862DA
185:100B80000408B813C4770C089A1B912000800869E8
186:100B9000186A106BDA77912001800408B713C471CA
187:100BA000102194A20F0082A21000041AB3130C08A3
188:100BB000B42384A30040100195A220000408B713B9
189:100BC000C4710021BCC082A01000041AB313BCD1B0
190:100BD00020111120484704222000112088470422B8
191:100BE000BDC006000021BCC012200C0858231E0006
192:100BF0000408B913C471212049470424C670192080
193:100C000000003000C871212089470424CA70FDC348
194:100C100011202316A9200800042206A13801108201
195:100C2000041F0916C471C8720408B21392A22316D5
196:100C3000260022211E000C086A230120FF01042047
197:100C4000FCD01011FCD3F0090408BA13E803FA0031
198:100C5000F401EE020400010002000300612040479D
199:100C600028612C62148214821482C4702A60C870B5
200:100C70000380038003802E600120FF010420FCD04C
201:100C8000A011260016006120804728612C62148282
202:100C900014821482D8702A60DC7003800380038081
203:100CA0002E60DA71DE721E002E000408B813612077
204:100CB00040473061C47032600120FF010420FCD045
205:100CC0000419B913612080473062C870326004088B
206:100CD000B81318790408B913C47184A1CFF048017E
207:100CE0000120FF010420FCD00419B313C8720408CA
208:100CF000B213192000000C08A62336000120FF01C2
209:100D00000420FCD018011E000408B913C87184A186
210:100D1000CFF028010E001021C4710408B213FDC3E6
211:100D20000C08A62310231E000408B813C47182A166
212:100D3000100048020120FF010420FCD00419B31365
213:100D4000C8720408B21311204D4704220600048122
214:100D5000081208811221192000000C089323012099
215:100D6000FF010420FCD018011E000408B913C8714B
216:100D700082A11000280206001021C4710408B213D9
217:100D800011208D47042206000481081208811221D7
218:100D9000FDC30C0893232E001E000408B813C47171
219:100DA000C87284A1FDFF0419B21384A2FDFF0419C7
220:100DB000B2130021207922780022247A26780408B0
221:100DC000B8131120404CC471FCD110111120C04B3C
222:100DD000078184A00F0003800380038068A2C8728B
223:100DE000CC73D874C6710068CA70CE73DA7491205F
224:100DF0000080026AACD2181121200000900084A467
225:100E0000FF0082A00200041A4F173F84BCA7FF0016
226:100E1000400186A7020004194F1784A4FF000409AB
227:100E20004F1761200002FCD1100161200001292030
228:100E30000900312062003F84BCA7FF003001078316
229:100E400084A0FF0010113DA738114120190084A390
230:100E5000FF0082A01A001002A4A4FF00078384A050
231:100E6000FF00880142A8F00286A0100020119CA378
232:100E7000FF009DA3000FBCA3FF00002502A7900266
233:100E8000002602A7781239203A00046805A70668F0
234:100E90000A6B0C6BCE731C68DA701E6C912001809B
235:100EA0000408BA13912001800408B413C4770C0815
236:100EB0009A1B91200080146A1C6B91200180C870DD
237:100EC0001668CC701E6808270408B713C470612028
238:100ED000404718611A600120FF010420FCD004196A
239:100EE000B913C8706120804718621A600408B813EB
240:100EF000C471C872CC7382A11000041AB3130C0819
241:100F0000D82384A30040100195A220000408B71341
242:100F1000C4770C089A1B91200080086A8DC20A6A67
243:100F20009120018008270408B813C4770C089A1B85
244:100F300091200080086A94A2F9FF0A6A046805A05B
245:100F400010010C08D5229120018008270408B8134D
246:100F5000C4770C089A1B91200080086A95C20A6A1F
247:100F6000046805A010010C08D522912001800827F3
248:100F70000408B813C477412001004920050051201E
249:100F80002000912000800C08B21B912001800827CE
250:100F9000086A0408B813C477FCD728010C08291B79
251:100FA00038010408BC130C081E1B10010408BC13F4
252:100FB000C873CC72C677CA73CE720C082A1CE811AB
253:100FC000186805A0A001082776000C08F7237E000A
254:100FD000701101201500FCD718116120404718003E
255:100FE000FDC0612080472A78912001800500912072
256:100FF0000180012005400408BC13912001800408F1
257:10100000BA13C477FCD728010C08291B380104083F
258:10101000BC130C081E1B10010408BC13C67741202A
259:1010200021004920050051202000912000800C085B
260:10103000B21B09201600FCD7181161204047180088
261:1010400061208047FDC1636003007B600000726720
262:101050007F600F002A79D061C4C1D2610C08D5220B
263:10106000912001800500C877CA77C477C677FCD77E
264:1010700028010C08291B38010408BC130C081E1B8E
265:1010800010010408BC13BCA700FF912000800920B8
266:101090001700FCD7181161204047180061208047D5
267:1010A000FDC17B6000006360020072677F600F001B
268:1010B0002A79D061C4C1D2610C08D5229120018067
269:1010C000412021004920050051201000912000807E
270:1010D000C87005A01801D060FDC0D2600C08B21B1A
271:1010E000C8703668388784A71F00C01D9120018012
272:1010F000050019200000C87284D228010C08291BA1
273:1011000038010408BC130C081E1B10010408BC1392
274:10111000C872CA72AC7884A0030018153920000088
275:1011200084D20801FDC7412021004920040051203C
276:1011300008000C089A1B912000800868D4C00DA8F4
277:101140000A693768000091200180388784A71F0052
278:10115000801DBCA700FF3F8738873F8784A7000F0B
279:10116000401D91200080C8726920000184D21011B6
280:1011700069200002086884A0FDFF0A683068B4D0C6
281:10118000B0014B680400A9201400486894D01001F5
282:10119000041FC2184B680900A9201400486884D0B5
283:1011A0001001041FCB18A920FA00041FD2187920BF
284:1011B000004709201800C87284D2181161204047E6
285:1011C000180061208047FDC17B6000002A796360C0
286:1011D00001007F600F00A3600000A460AE60B260F9
287:1011E000D060B4D06001B4C0D260C600B46065A065
288:1011F0000860D4C00A60186001801A60CE00D06018
289:1012000084A0FF7ED260AC788DC0AE78FF830801E9
290:1012100005001B685400912001800500CC730C0868
291:101220007818EC69486A85A100184A6885A14000D1
292:10123000EE68CC7321200400A920FF09041F1B19AC
293:101240002184D01D1983B01DEE694A6A9120018066
294:101250000500FCD71811692040471000692080471D
295:10126000C471C6711669FF811011A3680100AC78C2
296:101270008CC0AE7884D010110C087A1C0500D8758B
297:10128000DC74DA75DE7410002EA02025C471C873DA
298:10129000CC72C671CA73CE7279200047DE7DDA7CCB
299:1012A000D67BD27A0C08771B04095C1AA9200500AA
300:1012B000A120144791200080A141912001800920A4
301:1012C00040000C08411D20010C087F1B04085C1A1B
302:1012D00004608CA0FF008EA10900201106000C08FC
303:1012E00086200E0084A000FF078009800409F11900
304:1012F000C600682C0C08771BA805002C9E68098185
305:10130000C01D9F600000CE00C600DC7DD87CD47B71
306:10131000D07A90A2400099A30000A1A40000A9A542
307:101320000000DE7DDA7CD67BD27A682C9C6865A0D2
308:101330000409F019092040000C08411DA0150460A3
309:1013400084A0FF0086A002005001046084A0FF007A
310:1013500086A00A00381116000C0883201E00002DFC
311:1013600002609808CE00C6009C600C08F31BCE00FB
312:101370009F6000000C08601A092018000860CDC0AA
313:101380000A600460866010780600FF841011FF85F3
314:101390001001C5C012780C08341B0E0012780C081E
315:1013A0007F1B04085C1ACE00C6009C600C08F31B6F
316:1013B000CE009F6000000C08601A092018008760AA
317:1013C00003011B60030010780600FF841011FF85E5
318:1013D0001001C5C012780C08341B0E0012780C08DE
319:1013E0007F1B04085C1ACE001461FCD120010C089C
320:1013F000291BF00118000C081E1BD0010C08601AF4
321:1014000009201800876003011B6021001078060086
322:10141000FF841011FF851001C5C012780C08341B21
323:101420000E0012780C087F1B012007400408BC1333
324:1014300004618CA1FF0086A1050018111C60BDC0CD
325:101440001E60C474C873CC72146091200080E600E2
326:1014500009201200FCD0181171204047180071209B
327:101460008047FDC12A7963700500D071C4C1D27173
328:1014700066736A726E74727077700000002C7A70F6
329:101480002EA030251C6184A1600010010C08E93FEA
330:10149000EE009665A6659A66AA66AF600000B36026
331:1014A0000000146723600000246096A00100101162
332:1014B000008026600C08D522912001800500C370B1
333:1014C00005400408BD13A920050099201447912068
334:1014D00000800A5391200180002110A299A30000EE
335:1014E000A1A40000A9A500000500C471C7700000F8
336:1014F0001E790408BA13C471C671682110006920EE
337:1015000000100C6916A0042D10A2688D0981D81D49
338:1015100085A200001811C37000401000C370034082
339:10152000CA700408BD136479C671C47182A1030036
340:10153000041AB31366790408BA136479C6710408EF
341:10154000BA130079C671C47102790408BA1300791C
342:10155000C6710408BA13C470112000008CA00D00DD
343:1015600060010C81300210820C810C81100210820B
344:101570000C81FF810419B41310820E7A8CD23805C5
345:101580001079CDC11279092021001920030084D2DD
346:10159000C00108811920410011204E8F122319200B
347:1015A00042001082122319204300108212231920B6
348:1015B000460010821223192047001082122319209E
349:1015C00006001120538F12211120738F12230479EA
350:1015D00006780408B9130478C6700408BA13C471F5
351:1015E000FCD118111120C04B10001120404C078174
352:1015F00084A00F0003800380038068A211200000F4
353:101600001468FCD0100195A20002B4D0100195A27C
354:1016100001000C6B0068DA700408B7131478F4D07A
355:10162000300101200740DB70000005A04800FCD01D
356:10163000300101200740DB70010005A0080006A072
357:1016400005001478F4D0300101200740DB70000061
358:1016500005A0080006A005001478FCD03001012088
359:101660000740DB70010005A0080006A0050012710C
360:101670001A721E731078C4D010012274267580ACC3
361:10168000010008810C81A9819880A120300003709D
362:1016900000008460A220A65307700100747984A121
363:1016A00000FF40010F810C810C81048004800780C1
364:1016B00000A118000781048004807C7908A1787A51
365:1016C00006A011A2107DC4D52001847B19A3807CC3
366:1016D00021A40870FCD0E80D03700100077006001B
367:1016E0001A711E72107DC4D510012273267484A055
368:1016F000E0010500487865A02001042C4A786320A9
369:1017000000000500F6007920004748786220002C90
370:1017100005A010110C0875254A78FE00050011205F
371:1017200000914A7AC47B1983280180A232001220DA
372:101730001020C80C13200000050016002600FCD75E
373:1017400018111120C04C10001120C06C84A7000F8C
374:101750000B8084A71F002001038003800380038087
375:1017600005A168A22E001E000500390C00292A6878
376:10177000002A2E68086884A0EFF90DA80A69E6001F
377:10178000FCD728110920524771204047200009202A
378:101790009247712080470C21046805A0480116A1DA
379:1017A000381160200060066816000B200000180049
380:1017B000092000001600046865A078010060066832
381:1017C00021040C08B21D1068087909810A7901808A
382:1017D0001268881D1079A5C112791E000269066978
383:1017E000002D60200C08BF26EE00050065A06001FA
384:1017F00008209C6005A0280162209F60000065A071
385:10180000C00C48784A7962200500076003018F60A8
386:101810000000A9201C0080AC0500A02001200000D1
387:10182000A44028681A602C6822600500E600FCD7F6
388:101830002811712040473120C04720007120804787
389:101840003120C0494C708CA00002281108A60A2D36
390:1018500000804E7006A0EE000500F600FCD71811BF
391:10186000792040471000792080470C089A1B91206E
392:10187000008004680A7865A0F0053000002C0A7822
393:101880006020006065A0B805106006A3B81D0C605C
394:1018900006A2A01D282C487806AC0811480404684C
395:1018A00006AC401100606020066805A018110368AE
396:1018B00000004800006408786020026486A40000EC
397:1018C0001011002C026860250C08021C1B6005002A
398:1018D00023602000FE000C08B21DF6000879098183
399:1018E0000A7910680180126818111078A5C0127862
400:1018F0000120FFFF05A0FE0005007600002739202B
401:101900000000FCD00801FDC741202100492004004F
402:1019100051200800912000800C08B21B388784A752
403:101920001F00D01DBCA700FF3F8738873F8784A7D3
404:10193000000F901D912001807E0005006C78092029
405:10194000748F0C210DA1180165A00408A12061204D
406:101950000000186084D0B81110788CD030018CC091
407:101960001278FCC76920404728008DC01278692092
408:101970008047FDC7912000801C681F6800009120EF
409:10198000018005A0081105008CA0F0FF10010C08D3
410:1019900075250200D71CDA1CE01CE41CD81CE81CCE
411:1019A000D81CD81CD81CEE1C181D1B1D201D291D61
412:1019B000D81CD81C05000C0875250C087A1C0120C1
413:1019C00001800408321D012003800408321D01201B
414:1019D00004800408321D0C087A1C012006800408CB
415:1019E000321D11200A8091200080FCD71811692037
416:1019F00040471000692080473820006886A000001A
417:101A000020011E6F91200180050026007068BCA097
418:101A100000FF4120210049200400512010000C0843
419:101A2000B21B388784A71F00D01D912001800E00B3
420:101A30007069C671D00001200C80B8000C087A1CB7
421:101A400001200D809000FCD71001E4780800E078B8
422:101A5000C67001200E804800FCD71001EC78080009
423:101A6000E878C67001200F800000C270FCD7181102
424:101A7000DB7000001000DB700100612000001B60C3
425:101A8000010091208040050080AC0100FF81180515
426:101A900099203000A0200C7084A0FF07000118706E
427:101AA00006001C70060020700600247006001271EB
428:101AB000AC811A721E7322742675037001000770C0
429:101AC000010008700B80E81E077002008CA0E00186
430:101AD0001011A55306A003700000077004000E004B
431:101AE00026700E0022700E001E700E001A70050087
432:101AF00011202000092010000A6B0E6C1F680102E3
433:101B0000036820FD076838001A6A002DE8A0080065
434:101B100090A204000981801D0500EC70DCD0201526
435:101B2000292001001478CCD06011EC70E4D0192089
436:101B30000A0C21200A00201119200C0C21200C0075
437:101B40007000EC70E4D0281119200C1821200C0032
438:101B500030001920091821200900ADA500020A6BE8
439:101B60000E6C1E6D07683800050004608660082C46
440:101B700063200000687805A06A791001022C080033
441:101B80006E790500C6006120004787680301082DB3
442:101B90006B200000686005A06A611001022D08003A
443:101BA0006E61CE00050091200080042C6E7805A0A7
444:101BB00008116A78912001809C6005A08801C60008
445:101BC000602008209C6005A0380162209F60000012
446:101BD00065A09C6005A0C81D48784A796220CE00A7
447:101BE000487862209F60000085AC000010110C084E
448:101BF00075254A780500A920100006A0048086807B
449:101C00008E81081200A2041FFC1D86808E810500B3
450:101C10005601A920100005A0B8011AA1A81213822C
451:101C20008D8128021AA12012041F0C1E28001AA15F
452:101C300008231082041F0C1E0600003284A0FFEF50
453:101C400080200E005E0105000600003285A0001015
454:101C5000B80C747DD07006A50409DA1E10785020E7
455:101C60000C08771B0409DA1E46A070790025008055
456:101C700012A10920400008123000D07206A21801FB
457:101C8000408809208000C600127107700100992069
458:101C90003000A920200080AC0100A02061200000BD
459:101CA000FF8810010C08771B0870FCD0E80D077046
460:101CB0000200912001808CA0E0013815A553FF8C13
461:101CC0002011FF880409C71E5000002C8E78A9201F
462:101CD000200080AC0100A020A5530408C71E46A028
463:101CE00018721C73C4DA10012074247592A240008B
464:101CF0009BA30000A3A40000ABA500001A721E73F2
465:101D0000C4DA18012274267506A0077004000409BD
466:101D1000C71EFF8C10010C087F1BCE000C087F1B18
467:101D200046A0887800808A7886A00200C0017C7A6C
468:101D3000787BC4DA1001847C807D7479078104800B
469:101D4000048010A299A30000A1A40000A9A500008E
470:101D50001A721E73C4DA8805227426757004146022
471:101D6000FCD018116920404710006920804791205D
472:101D700000801F680200FF88200146A08C78602048
473:101D8000700C8B780000AC7885A00300AE789120B1
474:101D900001809800CE008B7800000C085C20046065
475:101DA00084A00F005900FF8830018C786020046007
476:101DB00084A00F0019000408261E05000200EC1E76
477:101DC000071F201FEC1E2D1FFD1EEC1EEC1EEC1E1F
478:101DD000051F1E1FEC1EEC1EEC1EEC1EEC1E392017
479:101DE0000004BC7805A7BE78086005A70A600C0847
480:101DF000691F9C60BA789F6000000C0848200500AD
481:101E0000BC78C4D00801580C1C60BDC01E603000F6
482:101E10000C088620BC78C4D00801080CBF780000EC
483:101E20000460078084A0FF00B278018038010C08AC
484:101E3000691F2001BC78C5C0BE7810000408841F4B
485:101E400005000C088320BC788CA0000E1011C4D0B3
486:101E5000081128080C08691F10110408841F0500C8
487:101E6000BC78C4D010010408EC1EBF7800001467D1
488:101E700011200100A822186084A0FF0005A088019D
489:101E8000BCA700FFA92020008EA001005001BCA724
490:101E9000008011200200A92000018EA0020008018C
491:101EA000C0000C089A1B002D912000802B680000B8
492:101EB0002F680000086884A0DEFF0A68E8AD100003
493:101EC00091200180041F511F11821801A9200001D7
494:101ED000580C0C087F1B05009F600000B4786DA0B3
495:101EE000002CB6781011BA7838009E68002D026078
496:101EF000B87806AD08110260B0780180B278301170
497:101F0000BC78C4C0BE78B878602006A00500E600A2
498:101F10002EA03025BA7DB67DAE65B2651C60A2608C
499:101F2000482084A9FFE11E6084A9600060010C08BC
500:101F3000E93FFF864011FF853011392000080C0869
501:101F40004820040846209665A6659A66AA66146726
502:101F500071208047FCD710117120404784A7000FE3
503:101F60000B8084A71F00200103800380038003806F
504:101F700005A1C07168A10027078084A00F0003801D
505:101F800003800380C47100A1C26091200080147896
506:101F9000C4D03801FCD71811F4D040111000FCD087
507:101FA0002811086E84D6F001FCD9E011912001803F
508:101FB0000C08021C912000800C08B21D91200180A9
509:101FC0001478C4D004094620FCD72011F4D0301175
510:101FD00004084620FCD01011040846201B60210094
511:101FE00004084620246096A001001011008026609D
512:101FF000106A146802A268026001912001803920F1
513:1020000000029C60BA789F6000000C084820040819
514:102010004620082CFCD9F001006865A0D801046AAC
515:10202000007084A002006801487006A25011046B81
516:1020300060210423026005A0081102696022026188
517:102040009800002D60200C08BF26086E60210262F7
518:10205000066950000068026965A01001026108006D
519:1020600006696021036000006021FCD91801B4A654
520:10207000FCFF0A6E1068087D28850A7D00801268C2
521:1020800091200180B4D62801B6A640000A6E0C0843
522:10209000131CEE000500086005A70A60912000806F
523:1020A0000C08B21D91200180B87865A028019C60C1
524:1020B000BA789F600000780CB678BA78050070791D
525:1020C0007478182884D31801008012A1200200809F
526:1020D00012A1781284C37C7A1A72787A1E72C4DADA
527:1020E0002001847A2272807A267206A084D30801A5
528:1020F00000807678D2701C7805A0380101801E78A7
529:102100002011040E82209120804005003920982063
530:10211000100039209E20042705A0600100AC682033
531:102120000869106812690A680C69146816690E68F3
532:102130003887880C0500030009000F0015001B00FC
533:10214000000015001B000000412000000C78020078
534:102150004A222522A92019213920748F3427107D85
535:10216000C000846086A00301041903211461186073
536:1021700005A12001FF86D81104080321038680A051
537:10218000558F0C6202220080106202220C08D01DC2
538:1021900030868EA60F00040984216C7865A0081D86
539:1021A000087802A62012ACD510113A26050082A6A6
540:1021B0000300041A8421912000806920000018681F
541:1021C00084D0F8111120558F0422C6701082042289
542:1021D000CA7084D6301110820422DA701082042270
543:1021E000DE7085A62080C2701B68010091208040AF
544:1021F000107884A0CFFF1278912001803B2000004E
545:1022000005001078ADC01278040884213A260C0825
546:10221000502204196C226C7865A00419AE2091201C
547:102220000080107884A0CFFFFF860801ADC012782F
548:102230009120018004086C223920748F3427107D8E
549:10224000A000846086A0030104196E211461186047
550:1022500005A12001FF86B81104086E2180A6558FC4
551:102260000C6202220C08D01D30868EA61E000409C6
552:1022700084216C7865A0281D087802A62012ACD5B0
553:1022800010113A26050082A60600041A8421912026
554:10229000008069200000186884D0F8111120558F43
555:1022A00009204E8FA8261C2104221A2008811082A2
556:1022B000041F502185A63080C2701B680100912048
557:1022C0008040107884A0CFFF12789120018006A072
558:1022D0000920758F0A203A2005001078ADC01278C9
559:1022E000B0003A260C08502204196C226C7865A0C4
560:1022F00004191E2191200080107884A0CFFFFF8652
561:102300000801ADC012789120018004086C22912050
562:102310000080077004009479D47002A1280268013B
563:10232000907B02A350111000028038113A261078D9
564:10233000ADC0127891200180050084A100FF40010A
565:102340000F810C810C8104800480078000A118009B
566:102350000781048004809C7A10A21A72987A06A0E1
567:1023600011A21E72C4D43001A47A11A22272A07AE2
568:1023700011A22672A1203000037000000920548FA2
569:102380000A2609819821042184D008013386B0A649
570:102390000200A826A65303861270077001009079E8
571:1023A000947800800AA1081206A02820747984A1DC
572:1023B00000FF40010F810C810C81048004800780A4
573:1023C00000A118000781048004807C7908A1787A34
574:1023D00006A011A2C4D42001847B19A3807C21A46F
575:1023E0000870FCD0E80D84A0E001D001107D312000
576:1023F000548F3426A8780080AA788CD038110770C2
577:102400000600047094D0E81D04088621692047471F
578:102410006B200300AC7885A00003AE7806A04800CE
579:102420003020D67591208040967D107DACA5CFFFE1
580:10243000127D91200180AA78077006003A26037069
581:1024400001001A711E72C4D5100122732674050092
582:10245000846086A00301D8111461186005A1B81129
583:1024600069200000186884D090110C60C67010605C
584:10247000CA70C37020801B680100912080400C0846
585:10248000D01D040E43226C7865A0101D0500590074
586:1024900030156C7865A0E0191004290000156C78DF
587:1024A00065A0D81DE000846086A003016811186053
588:1024B000FCC01A6086A0040038110478A4D0200162
589:1024C0000C08D01D06A005007900181185A0010098
590:1024D0000500B900101141200100107D0500FF88A2
591:1024E0001001912080400500907B9479D47002A166
592:1024F000181185A300000500100202A30500028048
593:10250000050084A100FF40010F810C810C81048033
594:102510000480078000A118000781048004809C7A51
595:10252000987BA47CA07D10A206A019A321A429A5B4
596:1025300009201800286005A01001092040000C089F
597:10254000341BD001A8780080AA788CD010151460B4
598:10255000FCD0181169204047100069208047912065
599:1025600000801F680300AB780000AC7885A00003F2
600:10257000AE78912001806800AB7800000C08D01D77
601:102580009079947800800AA1081206A09678D670F7
602:1025900006A071201000912001800500FCD71811C1
603:1025A00009205847100009209847912000800A20F0
604:1025B000F6000920804779200001FCD7201109206E
605:1025C000404779200002042186A000008011FCD73A
606:1025D000181109204547100009208547042105A04E
607:1025E0003011307884A0C00010111B785200FE001A
608:1025F000050009200200692000470120FF01042096
609:10260000FCD004194B237120804779200001212040
610:10261000BF494B780F000120FF010420FCD01801B6
611:102620001920373E3000A1202B011920373E84D1DC
612:102630001001A1202B02042305A040019A781883E1
613:10264000AC2318839823A6531833A80C9B7800005A
614:102650009B782000A9201000AF780000AF782020E0
615:10266000041F29230370000016008CD109200000EC
616:102670000801BDC10C086C241E00207084A00F004E
617:1026800085A0006306780F7800904378D8005378CF
618:1026900090000B78082F52744F70000009814001A0
619:1026A00071204047792000022120BF4704080623FB
620:1026B0000C0826250500160011200101BCD11011BF
621:1026C000112001028CA10F00042284A0F0FF05A1BB
622:1026D00012201E000C086C24050011200101FCD3FF
623:1026E000101111200102A92009000B81041F72237F
624:1026F0008CA1000E042284A0FFF105A11220050088
625:102700001920020009200101A92005001382041FDD
626:10271000832394A2E000042184A01FFF05A20A20C5
627:102720001983180109200102780C0500112001010C
628:10273000FCD3101111200102A9200C000B81041FF1
629:102740009B238CA100F0042284A0FF0F05A112207E
630:10275000050011200201FCD31011112002020422F5
631:102760009CA0300F84A0CFF005A112200500C60068
632:1027700061200001BCD1101161200002BCC10381A5
633:10278000038080A020009A60AC62AC63CE0005009C
634:10279000C60061200001BCD1101161200002BCC143
635:1027A0000381038080A022009A60A46084A0DFFFE0
636:1027B000AE60CE000500C60061200001BCD1101142
637:1027C00061200002BCC10381038080A020009A60C8
638:1027D000A4608CA220001801ACC29DA30040ECC3F1
639:1027E000B4D30811EDC3AE621020A460AE6318200C
640:1027F000CE00050091200080C600E600186805A004
641:1028000004095024FCD118016120D08E10006120F1
642:10281000C08D0C0858246005A9200101FCD11801C5
643:102820006120D08D10006120C08CC6000C08582497
644:102830002801CE00608C041F1224A8040E00FCD1D5
645:10284000280182A0D08D71208047200082A0C08CFA
646:102850007120404776707271382101200400627047
647:102860007F700F00D071C4C1D2710C08CB22C000A0
648:10287000FCD1181171204047100071208047206062
649:10288000DDC0226072713821002C7A7001200600B0
650:1028900062707F700F00D071C4C1D2710C08CB225E
651:1028A000012000001000012001009120018005A0FE
652:1028B000EE00CE000500042C05A070016020106021
653:1028C00006A340110C6006A22811146006A1101185
654:1028D00006A020000060800C85A001000500F60025
655:1028E000E60016007920804771200001BCD120113C
656:1028F000792040477120000220798CA10F00EC70F4
657:10290000C4D010111E0060000B810B810B810B8164
658:102910000E008DA10008BCD010118DA1000F042164
659:10292000EE00FE000500012001470420ACD0381164
660:10293000E468ACD0200184A006000811090005005D
661:102940001460E600360018207120404CFCD01011B5
662:102950007120C04B078084A00F0003800380038098
663:1029600070AE047084A00A0004192325087194A194
664:1029700000FF040923258CA1FF001C7084A000FF28
665:10298000C001047085A03A0006700120090002A170
666:10299000D81601200A0002A1D01601200C0002A1C5
667:1029A000C8161C7084A0FF001E70047084A0DFFF96
668:1029B000067001200A0006A1A80101200C0006A152
669:1029C000A0010120120006A198010120140006A117
670:1029D00090010120190006A188010120320006A102
671:1029E0008001D80009200C00D00009201200B80096
672:1029F00009201400A00009201900880009202000E7
673:102A0000700009203F00580009200A0040000920FA
674:102A10000C002800092019001000112000000021DE
675:102A200005A20A70047085A00A0006707120004794
676:102A30000470BCD05801FCD32011EA7371204047C8
677:102A40001800EE73712080471F700D003E00EE00ED
678:102A500005000120FF010420FCD0D0110120FD045D
679:102A6000042082A00500A01271200002EC718CA14C
680:102A7000001C0F810C810C8179200001EC7884A06E
681:102A8000001C07800480048005A18AA007000802BA
682:102A90000500020074255B2574255B254E256825FD
683:102AA0004E25087084A0FFC385A000300A70087806
684:102AB00084A0FFC385A000300A780500087084A0B8
685:102AC000FFC385A000200A70087884A0FFC385A0FA
686:102AD00000200A780500087084A0FFC385A0000CC0
687:102AE0000A70087884A0FFC385A0000C0A7805004E
688:102AF000040E7525912000807120000006001870DA
689:102B000084D0E81D0E0071201000CA700E00C6703F
690:102B1000C3700280DB70040ADF702A00712000009D
691:102B20001B70010091208040F80C3C7F587E307C67
692:102B3000387DA0788A708E75927496769A7794A56F
693:102B40003F00F4D43801BCD7281184A77D000419B4
694:102B50009C3C71089CA40F0082A304002003A6A340
695:102B6000070030191824078584A00F0002006C2B81
696:102B7000572C952CFB2E7932D03276330534D9344C
697:102B8000AB35C725C4259E29852A4D32C4250C089E
698:102B90007525050006A0380008788DC00A7806A0C3
699:102BA00002704A704270CE705C7005A0041918273C
700:102BB000607084A007000200E12552265A26632691
701:102BC0006C26FE26752652263078BCD0101DD0719A
702:102BD000BCD1F819B4D104192F26A07086A0010029
703:102BE000C009147005A0A819B0706DA0006865A098
704:102BF00055A09B7880000C6BAA7B086845A0106DDF
705:102C000004686DA05DA086A801001801BC69AA7DBA
706:102C1000AA79C0684DA01C6E0120100004084B2842
707:102C20005C7005A00419C625C600D600B0706DA062
708:102C3000006865A055A09B7880000C6BAA7B086893
709:102C400045A0106D04686DA05DA086A80100180164
710:102C5000BC69AA7DAA79C0684DA01C6E0120200025
711:102C600004084B280C085B3C0419C6251B78680037
712:102C7000B8706DA0B4685A789468D678DE78986891
713:102C8000D278DA7808788DC00A78BC683E70B4C112
714:102C9000D271B47065A0C068567003700200002D38
715:102CA0004A7080AD0900427005000C085B3C2011A1
716:102CB0001B7854000370040005000C085B3C2811CD
717:102CC00011200C0019040370040005000C085B3C83
718:102CD000281111200600D1000370040005000C0823
719:102CE0005B3C281111200D008900037004000500D1
720:102CF0000C085B3C501111200600410078707B707D
721:102D0000000068204A700370040005007071FCC167
722:102D1000078182789B78800086A20C002011AA7A15
723:102D20000120010098008CA11F008DA1C000AA798C
724:102D300086A20D002001AA7A012002003800AB789B
725:102D400020007471AA79AA7A012004009B7860009F
726:102D5000AA785B7804001B7813010C086E3C7F7026
727:102D60000F00D070B4D06801B4C0D270C600B47087
728:102D700065A0086084A0EFFB0A60186001801A60FB
729:102D8000CE000500147005A03811D070B4D0280111
730:102D9000B47006AC1011290C05001600A07186A1B4
731:102DA00001002805D600260000211120010012A2F2
732:102DB000B0706820006806AC20011182B001C90023
733:102DC000C80CC60000211120010012A2B0706820BA
734:102DD00000686020086084A0EFFB0A601182100187
735:102DE0004100B00CA3700100CE002E00DE001E00DA
736:102DF0000500E8AD0500A87006AD1011A4706820AC
737:102E000005000C085B3C0419C625787068207077B3
738:102E10000C08953B502C0C08F63C9B7880001468FD
739:102E200084A01F00BDC0AA781C6E412001000120B3
740:102E30000400040850280C085B3C0419C6259B7844
741:102E400080005C706820146FD070B4D06801B4C08A
742:102E5000D270C600B47065A0086084A0EFFB0A6061
743:102E6000186001801A60CE000C08953B502C0C08AD
744:102E7000F63C246805A0300182A00600080210007C
745:102E800027680500146884A01F00BDC0AA783120FF
746:102E900020004120010001200300040850288DC2B9
747:102EA000D272BC7200A215A0507108812AA108023A
748:102EB000BC7164210465FF85701152712184A81DC5
749:102EC000D0708CD02801CC7005A01011CF700A00F2
750:102ED00005000022900CD0708CC0D270CF70000022
751:102EE000346005A0B01D086784A73F07D001D4D780
752:102EF000801D84A72100681D84A70200300184A7DB
753:102F00000400380DBCA7FBFF0A6784A71802081D40
754:102F100084A700013001186005A0D819BCA7FFFEE6
755:102F20000A676825236800001C6E84A60E001863DB
756:102F300028011C6002A3200218015808FF834819C9
757:102F4000582D502C5271BCD72011287022603A6045
758:102F50001000BCC70A67C06865A04DA00061602A68
759:102F600041200100146B9CA31F009DA3C000FCD155
760:102F7000100184D610019CA3BFFFA4D610019DA30D
761:102F8000200084A60E0004190228A5C70A67002C99
762:102F9000C668A07786A701007811D070B4D0601100
763:102FA000007082A0020040123078BCD028119B78BB
764:102FB0008000AA7B040849283987A2775027AC777C
765:102FC000B0A70500A87006A60811A476AE763A2C24
766:102FD00038873A2D38873A2838873A2338873A2570
767:102FE0003078BCD050019120008091203D30D070CD
768:102FF00084A03D30912000809020D5AA00002001BF
769:1030000021840022041951270500DCD10409F1377D
770:10301000292020009CD6201128858CD608112885CF
771:103020004088146F0C6108818CA1FF00C87060A1FA
772:10303000642CFF8C8801146006A7D01DB860018045
773:10304000BA60881D602A086085A000010A6000221D
774:103050002184041951270500602A0E61BE69002CE5
775:10306000C66840880860D5C00A60A07786A70100BE
776:103070000419D927D070B4D00419D927007082A0C0
777:103080000200041AD9273078BCD00419D9279B78BC
778:103090008000AA7BAA7DAA790120020006001860A0
779:1030A00000801A600800060060290461602A0C088C
780:1030B000093D901584A11800800184A11000180119
781:1030C0000C089A39481584A108003801A06984A128
782:1030D000000618110C08B838F800A06984A1001E79
783:1030E000280584A100087801C6006029006085A039
784:1030F0000020026004618DA110000661CE000C0862
785:103100009A395011A06984A1000218010C08FD38F9
786:10311000180084A10004F019A06984A100103001F6
787:1031200014698CA100FF0F810C08C5232E008CA60A
788:10313000E00084A66000280186A0600010118DA127
789:1031400000408DA10401B6699B7860000028AA7830
790:103150001868FDC01A68BCD66801FCC08370000006
791:103160008AA00D0028038AA00C00827101200C00A7
792:103170000C808671AA781835403328340080AC80E2
793:1031800080AF2B00A0209B78000080AD0B00982022
794:10319000A653A8239828A02586A220000815D07041
795:1031A000B5C0D270002CB670002DBA701468FCC087
796:1031B0000780827886A2020004092129A07000807D
797:1031C000A270B07498A40500A87006A30811A47397
798:1031D000B27386A210000409C625DE00CE000500E9
799:1031E000007005A0E01986A20200041938290C0815
800:1031F0005B3CA8191468FCC007808278912000808D
801:103200001B786800B4685A789468D678DE78986835
802:10321000D278DA789120018008788DC00A7826016A
803:10322000D600C600D07084A0002E9020CE00DE0014
804:103230002E0100295670BC683E7003700200002DFC
805:103240004A7080AD090042703078BCD040019120B6
806:103250003D30D07084A03D30912000809020A0703F
807:1032600005A0081105002184E80D4C72BC7000A275
808:1032700015A00408512786A2100060150C085B3CBD
809:103280000419CC281468FCC0078082781B78680079
810:10329000B4685A789468D678DE789868D278DA7804
811:1032A00008788DC00A78A0700080A270B07490A4D5
812:1032B0000500A87006A20811A472B2720029567007
813:1032C000BC683E7003700200002D4A7080AD09009A
814:1032D00042700500B46B9DA300205A7B1468FCC0AB
815:1032E00007808278946BD67BDE7B986ED27EDA7E06
816:1032F0001B78680000295670027208788DC00A7821
817:10330000002305A67001D07084A0002E86A00026A0
818:1033100018110920000010000920010084A20F00EC
819:10332000330080AD09004270002D4A7005009C29D1
820:1033300008420842F64108429C299C299C290C0815
821:103340007525087884A0FDFF0A78F60079200047EB
822:10335000AC78FE0084D0C001607186A10100040930
823:10336000612A86A10700700186A1050058117870B6
824:1033700068201B68040017680000206884A0FF0014
825:103380009DC0226863700000A3700000A470AE703E
826:10339000B2700C08AE26560111200400607186A19F
827:1033A0000100580186A1070018111F7005001000C8
828:1033B0001F700100D070C5C0D27001200A470420E0
829:1033C00084A0FF0086A0180030011870167005A0B8
830:1033D0001011A370010066000C084E3FA9201000D8
831:1033E000392000000C088B3AB8A70001041FEF2910
832:1033F0006E00007002002C2A0A2A0A2A022A2C2AAD
833:103400002C2A2C2A002A0C0875255C7005A038058A
834:1034100006AD181100685E708000206884D04811E5
835:10342000146F0C08953B0860D4C00A600C08C737BD
836:103430002000587060200068026084A6005F1E684B
837:103440001868FCD008011A6A176800002B68000091
838:10345000206884A0FF009DC022680C08BF1D1120B9
839:103460000400C874A0A40001B104A0AE1700990420
840:10347000A9200101C87479042084041F382AC0706F
841:10348000602021200200A92000011061FF81980125
842:10349000186016000600112002470C2202A112201B
843:1034A0000E001E0002A138031260281111200447EB
844:1034B0000422A5C012201B600000E0AC1000041F15
845:1034C000422A2184001D5E01637000000370000029
846:1034D0004B70000005004600042405A0A8016820E8
847:1034E000006806001A6A176800002B680000B468BC
848:1034F00084A0005F1E68206884A0FF009DC0226831
849:103500000C08BF1D0E00480C4E00232000000500D3
850:1035100082A2030010030C087525002302008F2AE5
851:103520000C2B1A2B82A2020010010C08752560706A
852:10353000637000007F7000002200D077C5C7D2778B
853:103540000200A62AA62AA82AE02AFB37A62AE02AF1
854:10355000A62A0C08752570770C088B3A7077BCA7E3
855:10356000008F0C08953B186005A02805FCD71811A2
856:103570002120C08D10002120D08E092005001120AF
857:1035800010000C08342BB8015601A9200101FCD70A
858:1035900018112120C08C10002120D08D4600092058
859:1035A0000500112010000C08342B4E001801208457
860:1035B000041FCB2A5E01388784A71F0090190408D6
861:1035C000C9250408C92570770C08953B186005A02B
862:1035D0002005FCD718112120C08D10002120D08E8D
863:1035E00009200500112020000C08342BB0015601E1
864:1035F000A9200101FCD718112120C08C1000212026
865:10360000D08D4600092005001120200081044E00C5
866:1036100018012084041FFE2A5E010408C925002227
867:103620000200112B132B132B0C087525637000005F
868:10363000D070C5C0D2700408C92500220200212B19
869:10364000132B1F2B0C0875250C084E3F007086A00D
870:103650000200041980370C08E137086084A0EFFBF2
871:103660000A600C087237040980370408C92504244D
872:1036700005A090056820042D0600146806A718010F
873:10368000202D0E00A80C0E0022201A6917680000D9
874:103690002B680000B46884A0005F1E68206884A0C6
875:1036A000FF0005A222680C08BF1D212002471C2430
876:1036B0001983222310600180126028112120044701
877:1036C0000424A5C02220086084A0EFF90A600C0839
878:1036D000CA260C08E137050085A00100E00C002394
879:1036E0000200732B712BEE2B0C087525E47805A0D6
880:1036F000B01708328CA1000818010401C62510007B
881:103700000403C625082084A03000101104084D329F
882:10371000EC7884A00300D00D8478FCD0181184A12B
883:103720000700900084A1070086A004001811012062
884:103730000000500084A1070086A00500180184A1A4
885:1037400007001000012001000200D12BDA2BC72B4B
886:10375000AA2B4F3C4F3CAA2BE42B0C08752500707C
887:1037600086A004009011607086A002003011112024
888:103770000200192000000408852A607086A0060057
889:10378000B00D607086A00400900DE4790120030064
890:1037900004083B2F1868FCD010011B681D000C08A2
891:1037A000613A1B786E0005001868FCD010011B6898
892:1037B0001D000C08613A04082D3C1868FCD010016B
893:1037C0001B681D000C08613A1B78FA000500186898
894:1037D000FCD010011B681D000C08613A1B78CB005F
895:1037E000050084A50F00C01100700200C925FB2B45
896:1037F000FD2B803780378037FB2BFB2B0C08752582
897:103800000C08E137086084A0EFFB0A600C087237EF
898:10381000040980370408C925E47805A0041BAC2BF3
899:1038200008328CA1000818010401AC2B100004031D
900:10383000AC2B082084A0300018111B78680005000C
901:10384000EC7884A00300C80D8478FCD0181184A102
902:103850000700900084A1070086A004001811012031
903:103860000000500084A1070086A00500180184A173
904:1038700007001000012001000200492C4D2C442CAF
905:10388000422C4F3C4F3C422C493C0C0875250C08FF
906:10389000673A1B786E0005000C08673A04082D3C57
907:1038A0000C08673A1B78FA0005000C08673A1B7889
908:1038B000CB000500002302005E2C5C2C602C0C0861
909:1038C0007525040805341B681600A3780000E47908
910:1038D00084A1300004090534EC7884A003000409B5
911:1038E000053484A10001980D8478FCD0181184A1BE
912:1038F0000700900084A1070086A004001811012091
913:103900000000500084A1070086A00500180184A1D2
914:1039100007001000012001000200922C4D2CC72B43
915:103920000B3C4F3C4F3C0B3C493C0C08173C050002
916:1039300082A2050010030C0875259878402000230A
917:103940000200A12CCB2ED52E00220200BD2CAA2CC9
918:10395000BD2CA82CAD2E0C0875259B781800A878D6
919:10396000102084A0FF0082A02000040A303A8AA020
920:103970000400041A303A0200303A303A303AE4395E
921:103980009B781800A87984A1800048010408303A87
922:10399000007005A0D81D112004000408B73584A1CB
923:1039A000FF008AA01000041A303A0200E52CE32C34
924:1039B000F72CFB2CA92D303A303AAB2D303A303A67
925:1039C000A92EA92E303A303A303AAB2E0C08752584
926:1039D000E4D6400101200003008000803A781B7883
927:1039E000C70005001868FCD018011B681D00900C6A
928:1039F00004080B3C1B681D0004085B3A206922691F
929:103A000084A6001804194C2D206884D00419542D64
930:103A1000186886A0080010111B680000D4D668053D
931:103A2000BCD6580583700000186884A03F008AA0A7
932:103A30000D0018078AA00C00827101200C000C8078
933:103A400086719B786100AA785601360146011600FE
934:103A500008328CA100061801A1202B021000A12021
935:103A60002B011E009B7800000080AC8080AD0B0015
936:103A70009820A6534E013E015E01386005A050110A
937:103A80001C6884A00E0004095B3A0C086D3A2B7880
938:103A90000830100001803A601B7871000500E4D600
939:103AA00030011B78830005001B788300050084A685
940:103AB0006000D00DDCD6C00DFCD6A001FCC65A7E3D
941:103AC000B66EDC7AD879D078078084A07F0008A110
942:103AD00091A20000986B002102A3B268946B0022AF
943:103AE00003A3AE68F4D61801F4C65A7EB66E007011
944:103AF00086A00300481106000C084E3F0C0808423F
945:103B00000E001B788000050006A00C08E842B06A91
946:103B1000AC69986C946B002205A12001002222A4BC
947:103B200000211BA3AA6CD27CDA7CA66BD67BDE7B41
948:103B3000002305A43011F5C65A7EB66E1B788000AE
949:103B400005001B788000002215A118110C080842FE
950:103B500005000C08354205000C08752504083F2EA9
951:103B6000C6005470602020698CA1FFEC22690060BF
952:103B700084A0DFCF02600C08173906A0402038204F
953:103B80000C08BF390408332EC60054706020482C3E
954:103B9000A87A94A2FF0086A20400D8112069E4D17B
955:103BA000701139200000412000003120000006A0E3
956:103BB00010200C081A390C08BF390408332E8CA1C8
957:103BC000FFEC226904618CA1DDFF06610060ACC0DE
958:103BD000026086A20300D001046184A110004805A0
959:103BE0000C08913B0C089A39FF881805CE009B7889
960:103BF00060000028AA78587E95C65A7ED4D618113F
961:103C00001B786E0005001B78820005002069CCD16E
962:103C100030018CA1FFFD22690060ECC002603920F8
963:103C20000000412000003120000006A010200C08F8
964:103C3000BF3986A201005801046184A10800B001C7
965:103C40000C08913B0C08B838FF888019780020696F
966:103C5000C4D130018CA1FFFE22690060E4C0026083
967:103C60003120000006A010200C081A39CE00587E22
968:103C7000D4D618111B78710005001B78830005004D
969:103C80000408573A08289B78800019208000A878FB
970:103C900094A0FF0086A20100B811002302A186A013
971:103CA00001000409AD2DA87CA4A4FF0080A402009B
972:103CB00000A3182002A1040AC12D0409C12DA824C3
973:103CC000A87A041F5D2E180C84A2F00082A02000A8
974:103CD000B806002282A021009816A87A18831883BB
975:103CE000002102A3A00A86A2230050091C6884A018
976:103CF000F1FF1E68587E84A6F1FFA5C030205A7ED1
977:103D00000860A5C00A60A07805A00409342EA82088
978:103D100098799B786000AA78112080009A79A87819
979:103D200098799A7AAA78987A041F8B2E95C65A7E2B
980:103D3000D4D618111B786E0005001B788200050090
981:103D40001883002102A3040A442E84A280000419CF
982:103D50005B3AA07805A0C80804085B3A0408303A2A
983:103D600054704DA09B781800A87884A0FF008EA006
984:103D7000010010010C087525A87A94A2FF004B7869
985:103D80000800A87884A0FF008AA00500041A303A31
986:103D90000200303A2F38303A4A39593D82A20000A9
987:103DA00010110C0875250C08613A1B78820005007B
988:103DB00082A2030010110C087525FCD4D01160708C
989:103DC00005A010010C087525146F7277BCA7008F31
990:103DD0000C08953B086085A021000A60388784A7FD
991:103DE0001F00B01D0C08643A637002001F700900C8
992:103DF00010000C08703A1B788200050082A20400B3
993:103E000010030C08752500230200052F9B30D730C6
994:103E100086A2030098050072D87CDC7DD07FD0712B
995:103E2000B4D12805BCD11815012001470420C4D005
996:103E3000F011687884A0FF00D01182A20200B812AD
997:103E4000D6003B7800831B785900B8706DA0B46829
998:103E50005A789468D678DE789868D278DA78B4C1DF
999:103E6000D27103703000DE000120000058003B7862
1000:103E700000131B7857000120000020000072D87C3E
1001:103E8000DC7DD07F4670A068ECD0180108608DC042
1002:103E90000A6084A20F0002007C30562F532FA731F6
1003:103EA0003232C925512F512F0C0875250860D4C016
1004:103EB0000A60E4D62001447086A01400E8110C08C2
1005:103EC0004E3F092000001868FCD00801447086A00D
1006:103ED00014006801186886A0080004193E3058785C
1007:103EE0009CD004093E302068ACD004093E301B68E9
1008:103EF000140009200200A80468788CA0FF0088053F
1009:103F000086A1080058110860A4C00A600C08723726
1010:103F100040050C08E1370C084E3F600086A12800E0
1011:103F20000015186005A0780D0180680D0180580DFE
1012:103F30001E60480C206884D00409C92584C022680A
1013:103F40000C08BF265870C600602000680260CE00D2
1014:103F50000460026805A0002D0811026006600408D4
1015:103F6000C9251600FF81F015007086A03000D0052D
1016:103F7000D071BCD1B815B4D1E8115C7005A0901512
1017:103F8000A07086A001007005037000004600560076
1018:103F900076006600C600D6000C08F125DE00CE00D3
1019:103FA0006E007E005E004E00D071B4D1D811037057
1020:103FB0004000C0000C085B3CA8111B786800D600CC
1021:103FC000B8706DA0B4685A789468D678DE7898682E
1022:103FD000D278DA78B4C1D2710370300008788DC01D
1023:103FE0000A78DE000C08FF301E00FF8104093E3015
1024:103FF00084A600DF1E682B680000146F86A10200F3
1025:1040000004193F30186886A0140030110820E4D647
1026:10401000180168788CA0FF000C087A3A0C08CA26B0
1027:104020002068DCD07815178794A20F0013821382C2
1028:10403000138284B20006180190A2C04B100090A217
1029:10404000404C90A200001C22C4D370012068E4D030
1030:10405000280184A0FFEF2268ACC31223108204223F
1031:1040600085A0380012201182D4D33801A068C4D0B2
1032:1040700020110C0867310408C92508608DC00A604A
1033:1040800008002A6916691868FCD0100144701A6883
1034:104090008CA600DF1E691064FF84680109200247B6
1035:1040A000042101800A202184126428112120044760
1036:1040B0000424A5C02220186005A0180101801A6000
1037:1040C00018110860A4C00A60206884D0301100680C
1038:1040D00005A008110260066020005870602000688A
1039:1040E00002606120004787680301082D6B200000F3
1040:1040F000686005A06A611001022D08006E610072FF
1041:1041000086A23000580186A240000419C925037018
1042:10411000020048706820C468602005000370020037
1043:10412000B8706DA0BC683E70B47065A0C068567071
1044:10413000002D4A7080AD09004270050082A2040083
1045:1041400010020C08752500220200A630B530C130DF
1046:10415000B53086A50013600186A50083901D03700D
1047:104160000000186001801A60086084A0EFFB0A60FC
1048:10417000007086A0050028010C08613A1B788200B7
1049:1041800005001B788300050090780780018084A0DB
1050:10419000070080A018009A78A8798CA1FF0086A15A
1051:1041A0000300280186A1000010010408303A1B78A2
1052:1041B00083000500206895C02268FF8218110C0852
1053:1041C000613A3000118210010C0875250C08703A14
1054:1041D0001B78820005000C086E3C307884A0C0007B
1055:1041E0007011160008328CA100081E00180104018D
1056:1041F000FC3010000403FC301A7906A0050085A0ED
1057:104200000100050084A6600030112F6800003368AB
1058:10421000000004086631DCD69811B468DCD0801147
1059:104220009869946A2E69326A447005A030110022A0
1060:1042300005A104094E3F4770150004084E3F0500D4
1061:10424000ACD6F001F4D630012F68000033680000CE
1062:1042500004084E3FB46884A0004035A6F4D6A01DE3
1063:10426000447005A0101147701500DCD62811B46801
1064:10427000DCD01001A86CA46D2E6C326D04084E3F8A
1065:10428000F4D630012F6800003368000004084E3F68
1066:10429000B46884A0004835A6F4D6A01D447005A0DB
1067:1042A000101147701500082410250027078084A0EE
1068:1042B0007F0008A191A200002E69326A002105A2A8
1069:1042C000101104084E3F007086A00600100104087B
1070:1042D0004E3F050046690860CDC0CCD308018DC0B3
1071:1042E0000A6018683A681B6806008F6800009368C7
1072:1042F0000000306A2C693E6A42692F680300336807
1073:10430000000037682000976800009B68200000705C
1074:104310000200C925963190318E318E318E318E3129
1075:104320008E310C087525206884D018110C08C73709
1076:1043300030005870502C602000680260602AA0AEE7
1077:104340001700042405A010012020D80C222D6B207A
1078:10435000000005000C08CD370C08E1370860CCC020
1079:104360000A602B6800009B780E00146F38691A6988
1080:10437000446916690920000086AE404710010920F3
1081:1043800001000C081F43DCD6C8011C69EDC11E6981
1082:10439000286882A00E009002486884A00F0086A0C2
1083:1043A0000B0060115C6886A04700401101200147A6
1084:1043B0000420ACD0181100270C089E241868FCD0EB
1085:1043C00040011B68000068788CA0FF0010011B688A
1086:1043D0001E00A0AE1700006822203C6A4069326AC5
1087:1043E0002E69C06860200060A4D0800541202100B3
1088:1043F0004920050051202000D600F6005601460154
1089:10440000792000470C08B21B4E015E01FE00C87007
1090:10441000102009200101260004226DA0400114682B
1091:1044200006A710010068C80C2068D5C022682E00BD
1092:1044300010820981801DDE00637003007B70000024
1093:1044400072777F700F00D071C4C1D271186886A0D6
1094:1044500002003811176800002B6800001C68ECC0CF
1095:104460001E680C08BF1D0408C925D87CDC7DD07FE0
1096:104470000C08FF302B6800009B780E00146F0C08AE
1097:10448000723C8CA0FF0016691868FCD010014470C3
1098:104490001A688CA600DF1E69637000000408C92535
1099:1044A000007005A010110408C92506A00C084E3F95
1100:1044B0002069ACD110111B6814008CA600DF1E69A6
1101:1044C0002B680000206884A0FF00226800700200B2
1102:1044D000C9256F326F327232723272326D326D3282
1103:1044E0000C087525186804083B2F0860A4C00A60F2
1104:1044F0001768000004089537002302007E328032DE
1105:10450000CE320C087525FCD604195B2D00700DA069
1106:104510000200C92590329032BA329032CB328E32BC
1107:104520008E320C08752584A66000380586A06000D0
1108:104530001015ACC6F4C6EDC65A7EB66E1C68ACC08B
1109:104540001E6886A1020048010C084E3FAC69B068A5
1110:1045500015A118010C08354210000C0808421B7800
1111:104560008300D071B4D10419C625A07086A00100C3
1112:1045700004190D260500ECD6F0091868FCD070016E
1113:10458000F4D630111B6815001B7883000408C6257B
1114:104590001B6807002F680000336800000C08173CF8
1115:1045A00005000C08752500230200D732F93251337B
1116:1045B0000C08752500700200E132E332EA32E13284
1117:1045C000E132E132E132E1320C087525AC69B068C4
1118:1045D00015A118010C08354210000C0808421C688F
1119:1045E000B4C01E68D070B4D00419C625A07086A0CF
1120:1045F000010004190D260500FCD604194133007092
1121:104600000DA00200C9250F33093339330F333E3370
1122:10461000073307330C0875259468D678DE789868D8
1123:10462000D278DA7884A66000380586A0600010157C
1124:10463000B4A6BFBFEDC65A7EB66E86A10200480181
1125:104640000C084E3FAC69B06815A118010C08354242
1126:1046500010000C0808421B7883001C68B4C01E6858
1127:10466000D071B4D10419C625A07086A00100041928
1128:104670000D260500ECD6F0091868FCD010011B6867
1129:1046800007001B78FB000500FCC65A7EDC7AD8794F
1130:10469000986B002102A3B268946B002203A3AE685A
1131:1046A000D2791B7883000500DCD630012B780930E5
1132:1046B0001B7883000408C6258478ACC08678E4782B
1133:1046C00084A00800501184A400020801F5C6DDC6CC
1134:1046D0005A7E1B7883000408C625206895C022688E
1135:1046E0000C08023CDDC60C08613A1B788200040805
1136:1046F000C625002302007B337D337F330C087525EC
1137:1047000004085B3A987DD4D6A815E479ACD1300181
1138:10471000EC7884A0030010012B7809309B786000AE
1139:10472000AB78000084A6FBFF5A789A7DE479ACD17F
1140:104730002001EC7884A0030020110120140004085B
1141:104740003B2F8478FCD0181184A10700900084A12D
1142:10475000070086A00400181101200000500084A169
1143:10476000070086A00500180184A1070010000120A1
1144:104770000100C204907A94A207009B786000A87997
1145:10478000FF8168059B788000A87B84A30100D0117D
1146:10479000A87BA87B86A3040018110920DFFF58001E
1147:1047A00086A3010018110920F7FF280086A3030043
1148:1047B00048110920EFFFC60054706020046004A176
1149:1047C0000660CE009B786000AB78000084A6FBFFFB
1150:1047D0005A782B78093020698CA1FFEC22699A7DE8
1151:1047E00004080B3CD12BDA2BF933FF33F733F733C3
1152:1047F0000B3C0B3C0C08752520698CA1FFFC226941
1153:104800000408113C20698CA1FFFC226904080B3CC0
1154:10481000E47984A130002001EC7884A003007015B5
1155:10482000007086A004009011607086A00200301114
1156:1048300011200200192000000408852A607086A05B
1157:104840000600B00D607086A00400900D007086A078
1158:1048500000000409C625206984A120042801D4C1D0
1159:104860002269186804083B2F18688EA002002001F6
1160:10487000FDC01A680120140004083B2F8478FCD086
1161:10488000181184A10700900084A1070086A00400ED
1162:10489000181101200000500084A1070086A0050027
1163:1048A000180184A1070010000120010002000B3C48
1164:1048B0000B3C5C340B3C4F3C4F3C0B3C0B3CBCD6A4
1165:1048C00070058071FF81580582A10D001813837057
1166:1048D0000000280082A10C00827009200C009B7847
1167:1048E0006100AA795601360146018470148110A234
1168:1048F000867280A00B0000AD982084B200061801DB
1169:10490000A1202B021000A1202B019B780000088120
1170:10491000AC81A6534E013E015E010408113CD4D681
1171:104920000419CF34206884D00409113C8CA660009F
1172:1049300084A66000200186A060000811F5C194C122
1173:104940005A79B6699B786000AB7800009B7861006B
1174:104950001868FDC01A68AA7808800C810409F63727
1175:104960008CA1F8000419F6375601360146011600ED
1176:10497000A1202B0108328CA100061001A1202B02DE
1177:104980001E009B7800000080AC8080AD0B0098205A
1178:10499000A6534E013E015E011468FCC00780827878
1179:1049A0000408113C1868FCD010011B6808000C08B2
1180:1049B000613A1B78ED00050000230200E0349D35CC
1181:1049C000DE340C087525D87CDC7DD07FFF8228156D
1182:1049D000007286A203000409092FD071BCD1F8111E
1183:1049E000B4D1E801012001470420C4D0C011D60091
1184:1049F0003B7800881B785900B8706DA0B468A5C0DA
1185:104A00005A789468D678DE789868D278DA78B4C123
1186:104A1000D27103703000DE003000007220003B785D
1187:104A200000181B78570084A20F0002008835453516
1188:104A30001D35382F1B3588351B351B350C08752562
1189:104A40001C68ECD0180108608DC00A60206985C11F
1190:104A500022690068066005A0081102600860D4C0E1
1191:104A60000A601C6884A00E002011C87188A1000192
1192:104A700028003070BA683C71C87008A1042102682F
1193:104A80000A2D5A71DCD62011FCC6B66E0408883592
1194:104A9000B66E84A66000201184A6FF7FB668D80495
1195:104AA000DCD6501184A6FF7FB6689468A668986823
1196:104AB000AA680C084E3F7804ACD6400106A00C084A
1197:104AC0004E3F08241025AA69A66A6800082410250C
1198:104AD0000027078084A07F0008A191A20000AA6996
1199:104AE000A66A0C084E3FFCD6B00184A6FF7FB668CC
1200:104AF00010250824ACD638110027078084A07F0039
1201:104B000008A191A20000986B002102A3B268946BE7
1202:104B1000002203A3AE68007086A030000419C925E6
1203:104B200003700200B8706DA0BC683E70B47065A0E0
1204:104B3000C0685670002D4A7080AD090042700500B3
1205:104B400086A50088481103700000186001801A6073
1206:104B5000086084A0EFFB0A6004085B3A4370000021
1207:104B600082A2060010030C08752500230200B73549
1208:104B7000C835D23500220200BF355B3AC135BF359A
1209:104B8000033651360C087525807A94A2000F0C0864
1210:104B9000A5360408303AC10002005B3AD035D03562
1211:104BA0000336D0355B3A0C08752571000200DC3500
1212:104BB000DA35DA35DC35DA35DC350C0875250C08E4
1213:104BC000703A1B7882000500007086A00200501128
1214:104BD0000C08E13710000C084E3F086084A0EFFB82
1215:104BE0000A602000007086A00300A80D0370050075
1216:104BF0000120E08E8EAE404710010120128F682008
1217:104C00004A7080AD0900427000220500007086A045
1218:104C100002005811D070B5C0D270002CB670002DB3
1219:104C2000BA7038000C084E3F2000007086A00300C8
1220:104C3000C80D03700100807A94A2000F9B781800C1
1221:104C4000A87C84A41F0015A26920C08D84B2000630
1222:104C50001811FDC26920D08E042D082D5A716DA047
1223:104C60002801146806A220010068B80C0C08A536BB
1224:104C7000B46E5A7E206984A1000C0409CB366070A2
1225:104C800086A006002811707006A2101162707A705A
1226:104C90001B680500ADC11B680500ADC1D4C1226908
1227:104CA0000C08673A0408CB36007286A2020058113D
1228:104CB000D070B5C0D270002CB670002DBA70300024
1229:104CC0000C084E3F180086A20300D00D03700100AF
1230:104CD000807A94A2000F9B781800A87C84A41F00FF
1231:104CE00015A286AE40470801FDC2A879A8798CA11B
1232:104CF000FF001821C87068A1042D082D5A716DA0FD
1233:104D00002801146806A218010068B80C0904B46EE2
1234:104D1000206984A1000C0409CB36DCD078016070D6
1235:104D200086A004004011707006A22811747006A3BA
1236:104D3000101162707A700C086D3A80041B680500CF
1237:104D4000ADC1D4C122690C08673A7B700000300401
1238:104D50000370050084B2000618010120E08E1000E7
1239:104D60000120128F68204A705601A92032000320CA
1240:104D700000000080041FB4365E0184B200061001FA
1241:104D8000FCC20800FDC2166A80AD09004270B76817
1242:104D9000000723680008276803000500ECC6ACA6DE
1243:104DA000600004091237986B946CAC69B06805A177
1244:104DB000E011D27BDA7BD67CDE7C86A56000C8055C
1245:104DC000F4D60811EDC6B4A6FFB75A7E09208300B9
1246:104DD0009CD62801092082001920000020231A797E
1247:104DE000ECD688050C0808427004B0681AA30021AC
1248:104DF00023A4002405A3F801D27BDA7BD67CDE7CD9
1249:104E0000B068F4D60811EDC6F4C65A7E11208300AE
1250:104E10009CD62801112082001920000020231A7A34
1251:104E2000ECD688010C0835427000192000002023C0
1252:104E30001000B4A6FFB75A7E092083009CD610014B
1253:104E4000092082001A79C0685670002D4A70C46823
1254:104E50006020D071012001470420C4D0C815D4704F
1255:104E60002DA0B801BCD14805807A94A2000FD8705B
1256:104E700006A21801E07804A55815D670BCC1D271FD
1257:104E80003804312001002C85180233861082D80C9A
1258:104E90000500E07D94A500FF3001112008002F855A
1259:104EA000810C37860800690C1782807884A0000F77
1260:104EB00006A27001DA72D6765800807A94A2000FAA
1261:104EC000D87036A2C00DE07834A5A80DBDC1D2714E
1262:104ED000B4D10419C625002305A40409C625A07071
1263:104EE00086A0010004190D260500206005A05001D0
1264:104EF00001802260086085A008000A600F70000130
1265:104F00002C702660050006A00C084E3F007086A09D
1266:104F100002002001607086A0050050112B6800007F
1267:104F2000176800001B680100236840001F6800012B
1268:104F3000007084A00F000200C925A637A337C3372D
1269:104F4000AF37C925A137A1370C08752549041104CD
1270:104F50002800310458706020006802600C08BF1DF2
1271:104F60000408C9256070637000007F7000000200B3
1272:104F7000BF37BF37BD37BD37BD37BF37BD37BF3789
1273:104F800004089A2A637000000408C9251B68000001
1274:104F90000408A731006805A008110260066005003A
1275:104FA0001064FF84680109200247042101800A205F
1276:104FB000218412642811212004470424A5C0222042
1277:104FC0000860A4C00A600500186005A010010180F7
1278:104FD0001A6005000C086E3C1B68180090040C0851
1279:104FE0006E3C1B68190068040C086E3C1B681A00B4
1280:104FF00040040C086E3C1B680300180470770C0812
1281:10500000953B74718CA1FF00103294A20006180128
1282:10501000E8A1C08C1000E8A1D08D042D082D6820D7
1283:1050200005A018117A700408C9251468707206A2C8
1284:1050300010010068980C00680A201B6805007B704E
1285:1050400000000C08CD37206884D010110C08C73739
1286:105050000C08E1371F680000236820000C08BF1D02
1287:105060000408C92582A203000419353AA87DACA51D
1288:10507000FF00A87EB4A6FF002069BDC12269C4D18B
1289:10508000B005C4C12269B4A6FF00300582A618008D
1290:10509000180210013120180086A610000811308671
1291:1050A0002B852B85412000000C08EE3A18010C08D6
1292:1050B0001A39A0000C08BA3A0C0817392069C5C182
1293:1050C0002269587E95C65A7ED4D618111B786E0078
1294:1050D00005001B78820005000C081739587ED4D6CD
1295:1050E00018111B78710005001B7883000500C600AD
1296:1050F000547060200061E4D198050862178294A280
1297:10510000FF0082A2180018021001112018000026CA
1298:1051100002A20812302286A610000811308608620A
1299:1051200094A2FF00EC78E4D0300182A20A00401281
1300:1051300011200A00280082A20C00101211200C007D
1301:10514000002202A5081228220C08BE3A2B852B85C6
1302:10515000412000000C08EE3A18010C081A39200012
1303:105160000C08BA3A0C081739587895C05A78CE000E
1304:105170001B7882000500C60060290060E4D0881119
1305:10518000B4D05011106084A00F00301104618CA1C4
1306:10519000F5FF0661CE000500112032001920000045
1307:1051A000F000A068CCD0C01D086294A2FF00EC788B
1308:1051B000E4D0300182A20B00181211200A0028004E
1309:1051C00082A20C00101211200C0008631F839CA304
1310:1051D000FF0082A318001802100119201800AB78F4
1311:1051E0000100AB780300AB780100AA7AAA7BC0A8C3
1312:1051F00005002068C5C022680C087A3ACE00050078
1313:10520000C600602904618CA1F5FF066111203200FF
1314:10521000192000000000AB780100AB780300AB78E8
1315:105220000100AA7AAA7BC0A805002068C5C0226830
1316:10523000CE00050006A030201020C6005471602169
1317:105240001820082084A0E0FF35A6867E18609A7892
1318:10525000AE7E1266A47884A070778CA10F0005A1A1
1319:10526000292005472C25CCD54001A4D3100185A0C9
1320:105270000008FCD3100185A08080A67816608A788B
1321:10528000B4A61F0037860482048005A60E60046061
1322:1052900084A0D5FF0660CE00050082A2020004199A
1323:1052A0003F3AA87A2069BDC12269CCD16805CCC13A
1324:1052B000226994A2FF0082A20200041A303A0C086C
1325:1052C000C1390C08173980A901000C200C08913B4A
1326:1052D0000C08B838FF8878019B7860000028AA780D
1327:1052E000587E95C65A7ED4D618111B786E000500DC
1328:1052F0001B7882000500587ED4D618111B787100E7
1329:1053000005001B788300050082A20200181284A207
1330:1053100001004001547188A100000C21ECD1101152
1331:10532000112000000C08AC3A79040C0817395878A1
1332:1053300095C05A781B7882000500C60026006029B7
1333:10534000006011200100ECD05811BCD0381114605D
1334:10535000B4D02011A4C1066106A08800112000006D
1335:10536000AB780100AB780200AB780300AA7AC0A842
1336:1053700004000C087A3A206885A0000222682E00FA
1337:10538000CE000500078815A7C6000920000054704C
1338:105390006020FF82100109204000186080A00200F8
1339:1053A0009A78A47884A09FFF05A1ECC0B4D008111E
1340:1053B000EDC00061F4D1100185A02000A678166030
1341:1053C0008A78046084A0EFFF0660CE000500060026
1342:1053D000007086A0030010010E0010000E0098045B
1343:1053E000ACD68805887884A040006805B87B078320
1344:1053F00084A07F001815078284A0FF000409573A93
1345:105400009AA00400041A573AF4D6D011D879DC7A5D
1346:1054100008A191A20000D279DA79D67ADE7A0C0856
1347:10542000E8421B78800084B20006180101200000C9
1348:105430001000012001000C089A4105000C08752598
1349:105440001B78800005001B788300050039200000D0
1350:10545000412000003120000006A010200C081A395D
1351:105460000C08BF39587E0C08733A1B78820005007F
1352:10547000D10C2068C4C02268C600547060200C089B
1353:105480004439B000810C2068CCC02268C60054703A
1354:1054900060200C08DE396000310C206884A0FFEC2D
1355:1054A0002268C60054706020046084A0C5FF0660B6
1356:1054B000CE00050049001B78820005002768020025
1357:1054C00049001B78820005000120050088000120AA
1358:1054D0000C0070002068D5C0226801200600400042
1359:1054E00001200D0028000120090010000120070004
1360:1054F0009B787E00AA789DC65A7ED070B4D0680191
1361:10550000B4C0D270C600B47065A0086084A0EFFB80
1362:105510000A60186001801A60CE00050076003F879F
1363:10552000BCA70F003B873B870387E0A0C04B8EAE34
1364:1055300040471001E0A0404CB8A720009A7FA47912
1365:1055400084A1E07FAE781260A47984A13F77A67829
1366:105550001660046085A0380006607E0005009B7818
1367:105560008000AB780100AB780200AB780300AA7A28
1368:105570009B786000AB7804000008312000002920EF
1369:1055800032009B788000AB780100AB780300AB78E9
1370:105590000100AA7DAA7E9B786000AB780500040814
1371:1055A0007A3A5601078084A0FF000380038080A020
1372:1055B00020009A78A4798CA1E0FF21207A3B192061
1373:1055C0001100A9200E0011203200042484A0E0FF65
1374:1055D00006A128012084002310A2041FE23A5E01E4
1375:1055E000050056010408303B2120883BA920090012
1376:1055F0001120290082A5280050052084A99511209A
1377:10560000330082A5330018062084A99519200A00CA
1378:1056100011206500002202A5D0022084002310A2E0
1379:10562000041F073B5E01880021207A3B19201100EE
1380:10563000A9200E0011203300002202A54002208480
1381:10564000002310A2041F193B5E0106A00500118271
1382:105650005E0182A564002012087885A070000A7897
1383:10566000042405A0050086A80200E8012120663B6D
1384:10567000A9200D001120280082A52800480D2084B3
1385:105680001920190011203300002202A5000E2084E9
1386:10569000002310A2041F413B5E011120840182A55A
1387:1056A0008501B00A90082120753BA9200300112034
1388:1056B000240086A52400600920841120280086A5E6
1389:1056C0002800300920841920190011203300040813
1390:1056D000193B21100222033404460558066A077C50
1391:1056E000104612461258125A146A146C146E177E21
1392:1056F000219002B004E210E210E2091202300232FC
1393:105700000342034404540456056605680678067A85
1394:10571000070C070C070EE1100A330558055A066AF4
1395:10572000066C077C077E000E9B78800046A0050073
1396:1057300084A7000F0B8084A71F00038003800380D1
1397:10574000038005A1FCD71801E0A0C06C1000E0A008
1398:10575000C04C0500E600F60084D038017920000135
1399:105760000920804771208047300009204047792078
1400:1057700000027120404791200080042184A00F0086
1401:105780000200C83BC83BC83BC83BC83BC83BC63B04
1402:10579000C63B0C087525B469F5C18CA19FFFB6699D
1403:1057A00005A08005587884A09FFF85A000605A78E6
1404:1057B000287886A0141830154B780400487884A007
1405:1057C0000400E01D4B780800487884A00800E01D24
1406:1057D0003078BCD0B81184B2000818010401FF3B36
1407:1057E00010000403FF3BE47984A130005801EC78F9
1408:1057F00084A0030038011C68ACD01011D90010003F
1409:105800001B78FB00FE00EE0005000120014704208C
1410:10581000ACD0181114680C089E2405001B78830076
1411:1058200005001B78820005001B78710005001B78BD
1412:105830006E000500092019470C2186A100005001C7
1413:1058400086A1010050011F700B00637001001B78DE
1414:10585000540005001B78F30005001F700A000500C6
1415:10586000092019470C2186A10000680186A10100CA
1416:1058700038011F700B00637001001B785400050095
1417:105880001F700A0005001B78F20005001B78FB0062
1418:1058900005001B78FA0005001B78CC0005001B787A
1419:1058A000CB0005001868FCD010011B681D001F709C
1420:1058B0000B00637001001B7854000500307884A051
1421:1058C000C000701108788CC00A7800E000E000E0A9
1422:1058D00000E0EC7884A02100180108788DC00A78D7
1423:1058E000050008788DC00A780500307884A0400053
1424:1058F000E01D84B2000818010411803C100004135C
1425:10590000803CAC780500087884A0FDFF0A7800E0B0
1426:1059100000E000E000E0EC7884A02100400184B2C7
1427:105920000008180104118F3C10000413923CAC785D
1428:105930000600087885A002000A780E00050084A7FA
1429:10594000010004194D3284A770004001C600602D8B
1430:10595000682F0C089024782D682CCE0084A70800AE
1431:1059600048014B780800EC7884A0030004094D320C
1432:1059700004080B3C84A70400C801B87884A0008008
1433:10598000A8014B780800EC7884A0030004094D328C
1434:10599000E47884A0070086A001004011C07885A6A5
1435:1059A000004830205A7E1B78FB00050084A7800049
1436:1059B00040018478FCD028010C08573A1B6822006B
1437:1059C00005001B680300587884A0005F1E682F68DC
1438:1059D0000000336800004B780800EC7884A00300D6
1439:1059E0000409AC2B84B2000810010401C62504038D
1440:1059F000C625146B078384A00F00038003800380F7
1441:105A0000FCD3180180A0404C100080A0C04B602047
1442:105A100048205670602A0500C60060290060ACD09E
1443:105A20000409573DA068ACD1201184A0000E0409E0
1444:105A3000553D086117818CA1FF001C632F83DCD0CA
1445:105A400010019DA30100CCD0C81184A5FF0038012E
1446:105A5000EC78E4D010011382B8002920000082A164
1447:105A60000C009012EC78E4D0181109200C006000B2
1448:105A700082A10B00481209200A00300009203200E0
1449:105A80001120000029200000AB780100AB7806004F
1450:105A9000AB780400AA79AB780000AA7AAA7BAA7D29
1451:105AA000C0A80800206885A0001022680C087A3A77
1452:105AB00085A00100CE00050082A206000419493A23
1453:105AC000A87DAC7E3786ACA5FF00B4A6FF00AC7FF6
1454:105AD0004787BCA7FF00C4A8FF002069BDC1226999
1455:105AE000E4D10409CB3D8CA1FFEC226982A702001E
1456:105AF000041A233AB4A6FF000409C83D82A6310067
1457:105B0000041A233A82A50900040A233A82A8030052
1458:105B1000041A233A86A80200D00186A800000419BE
1459:105B2000233A01200C00EC79E4D1100101200A0095
1460:105B300002A590120C08233AC6006029046085A0D3
1461:105B40001A0006600060ACC00260CE00050086A7A7
1462:105B500000000409233A348682A618002802200196
1463:105B6000312018000408193E86A61000081130865E
1464:105B70002B852B850C08EE3A0409233A0C081A39B8
1465:105B80000C08BF39587ED4D618111B787100050057
1466:105B90001B78830005000C081739900C86A80200BA
1467:105BA00008113486547188A100000C21ACD104097D
1468:105BB000233AECD120113920000041200000E4D12B
1469:105BC0002011312000004120000082A70200C812ED
1470:105BD0001C6284A2FF0006A710013920000005A660
1471:105BE000900108611F819CA3FF00680102A30812B5
1472:105BF0003023078805A786A00102600186A800005F
1473:105C0000680139200000412000003120000006A07A
1474:105C10001020700084A200FF0811402084A1FF0022
1475:105C200002A5080128212B852B850C08EE3A580D7A
1476:105C30000C081A390C08BF399B788000AB7801003A
1477:105C4000AB780600AB780400AA7DAB780000AA7E92
1478:105C5000AA7F0028AA789B786000AB7808002068AB
1479:105C6000E5C022680C087A3A587895C05A781B78B3
1480:105C7000820005002000200000002000000020001D
1481:105C80000000200000002000000020000000200094
1482:105C90000000200000002000000020000000200084
1483:105CA0000000200000002000000020000000200074
1484:105CB0000000200000002000620009001400140011
1485:105CC00055984D9814001199FF98140014009000F5
1486:105CD000E70000010204082080F8180017000F8474
1487:105CE000C1D8140016000AA214000B300CA2140034
1488:105CF00000251300002510001000100010001000F7
1489:105D00001000100010001000100010001000100013
1490:105D1000100000A206383988C420640850A8083052
1491:105D2000C128189D01A20C30472861816A84008037
1492:105D3000A48456183A8808A8E228CE9CF3A86408E0
1493:105D40003EA80C3001A80830E128CE9CA22863713F
1494:105D500031A8212018A805A20C87DED8A064E06D28
1495:105D6000C06FA467806C120205A23D882B881418AE
1496:105D70003B882770F28537A732A503F076857786B2
1497:105D800013A83E8811A88228627114A80A2804A2C8
1498:105D9000C064E06DA067C06F14183B8823707685DF
1499:105DA000778602A861783E886A20C128189D422023
1500:105DB0000121CAA802290EA20BA807A2140003A25F
1501:105DC0000080A48572189A873C88E21F01F608A219
1502:105DD0006E852171140004070830CE9C140002A2C5
1503:105DE0000080A4850930A884E21944F86E853F88B4
1504:105DF000E608F5A861F8EBA801F8140081F8160090
1505:105E0000B285F0803295A2FAE21D1400328521F2AB
1506:105E10001400E21DA884E0D6E61F140008300080BC
1507:105E200049281110FCA80830008000A08120022819
1508:105E30001110FCA889A80830A1203C281110FCA84A
1509:105E400009A217000C300080A485E21DC1DA1400FD
1510:105E5000100201A81400E0263A87A3FAF219E026FE
1511:105E6000F21814000BA214000DA206381002229D95
1512:105E7000040706A265687E812A84C11D2388160056
1513:105E800042600880FAA860812A84808121F008306D
1514:105E9000A884D7114270DD201100D5202288160079
1515:105EA00000002601D07084A0004C04809020047271
1516:105EB00008709CC005A2A0110C72FF822801FF8A05
1517:105EC0007811007284D260110478CCD010010C08D3
1518:105ED0005B4307700800037008002E0100200500D6
1519:105EE000007084A0030002709CC684D088050871ED
1520:105EF00000E0087006A1D81D84A103000409CA3F70
1521:105F000084A1E0010419CA3FF4D1881D84A10030A6
1522:105F100086A00010600D112080010C7111823001EB
1523:105F20000870F4D0201D0C7006A1C00D077012007F
1524:105F3000087100E0087006A1D81D84A1030068055F
1525:105F400094D1B00DF4D148050770020080082804F0
1526:105F50000871FCD130010C08D640FF8A0409543F77
1527:105F6000B80C0C708CA0FF07E801047084D0780195
1528:105F7000147005A048111070107306A3E01D0023D3
1529:105F800005A0280102A1201E077010003000FF8A22
1530:105F900048010C089A42E81DD8090C085C402E0103
1531:105FA00000200500047208719CC10381181207705B
1532:105FB0000200C00C05A2881D0770080003700800CD
1533:105FC0000600012001470420CCD010010C085B43DF
1534:105FD0000E002E01002005002864FF840805702CA7
1535:105FE0000470BCA00F00B8A71D403C27FB874811D8
1536:105FF00010020C0875259C6075A09001880C392052
1537:106000001240042768AE086830A60C6829A52184D0
1538:1060100038013887042705A0A81D9C7075A0001DB5
1539:1060200005000000050009000D0011001500190011
1540:106030001D000000030009000F0015001B000000F8
1541:10604000000012400F4000000000008000001240DD
1542:1060500000001A40174000000000000000001A4035
1543:1060600000001540154000000000008000001540B1
1544:1060700000001B401B4000000000000000001B400F
1545:10608000792000477120100007700A000770020095
1546:1060900003700100092002007120500007700A00FF
1547:1060A00007700200037000000120FF010420FCD0F3
1548:1060B00028110981180171202000800C050004704E
1549:1060C0000480041AB2400871087006A1E01D84A182
1550:1060D000E00120010C080E410408D24007701200B4
1551:1060E000192000000871087006A1E01D84A1E001DC
1552:1060F00020010C080E410408D2409CA10C3086A35C
1553:106100000420900186A30800C001047084D04811C7
1554:106110000871087006A1E01D84A1030010010408A5
1555:106120000E4186A30C20F0190072048230020C7319
1556:1061300084A3FF0710010C0875250871087006A1DB
1557:10614000E01D84A1E00118010C080E4170040770E5
1558:106150001200007084D048111073147005A3280138
1559:106160000C7184A1FF0704195C400871087006A136
1560:10617000E01D84A1E00118010C080E41B000077079
1561:1061800012000770080004709CD0E81D08710870A8
1562:1061900006A1E01D84A1E00118010C080E412800B1
1563:1061A0000770120008710381880E03700800050053
1564:1061B000087184A1E001A815087184A1E001881587
1565:1061C00084A107000200EA40F840E840F840E840B7
1566:1061D0004841E84046410C087525047084A0100031
1567:1061E0008DC00670FF8A18114920000005000C08B8
1568:1061F0009A42E81D0500047084A010008DC006704E
1569:10620000047084D040110871087006A1E01D84A1BB
1570:10621000030008013000FF8A18010C089A42E81DAB
1571:106220000500077012000871041D114191200060E3
1572:10623000041D1541912000600770120007700800CE
1573:1062400004709CD0E81D077012000871FCD1D81DA5
1574:1062500003700000007005A03011047005A0181133
1575:106260000C7005A00801400C4920000084B2000217
1576:106270001801012000001000012001000C08A73BBC
1577:106280001B6802005120000005000C0875250C0851
1578:1062900075250C088741107214710C709CA0FF07C3
1579:1062A000002800A311A289A10000A1040427582CF2
1580:1062B00060AC0863002222A30C6300211BA300240E
1581:1062C00005A340013812128410820A8389A10000BC
1582:1062D000602B580C602B078A060004609CD01801C4
1583:1062E000BAA717401000BAA70F400E003DA7002C18
1584:1062F00086688A6F926C8E6B0871087006A1E01D2B
1585:1063000084A1E00110010C080E41077012000C0876
1586:106310005C400500508A3987042704A0681100609A
1587:1063200064A00811602D046084A00F0080A02D409F
1588:106330003C20FB870C09752505002601D600D0708E
1589:1063400084A0004C04809020DE008468602088686F
1590:106350008C6B906C5780D4AAFF0084A0FF000600CD
1591:10636000046884A008000E001801B8A017401000AF
1592:10637000B8A00F4084B200021001207E0800247EE5
1593:10638000B5A60C001C68B4D0080185C6002405A37E
1594:106390005005582C0427046160AC006000A448201C
1595:1063A000CCA9040018010C08A34300041A7004606F
1596:1063B00001A31E709CD14001106081A000002270DA
1597:1063C000146081A0000026700862002402A21270EE
1598:1063D0000C62002303A21670027607700100602B86
1599:1063E0000C08C54210000C089A42E81D2E0100203E
1600:1063F00005002601D600D07084A0004C04809020B7
1601:10640000DE0007700400047094D0E81D03700800DB
1602:106410002E01002005002601D600D07084A0004C7B
1603:1064200004809020DE00207E84B200020811247EC9
1604:10643000B5A60C001C68ACD0181185C6037000000E
1605:1064400028685020602D0460BCA00F00B8A71D4034
1606:106450003C27FB87381110020C0875259C6865A045
1607:106460002001880C0C089A42E81D2E01002005002E
1608:10647000260106001600D600D07084A0004C0480CF
1609:106480009020207E84B200020811247EDE003E00AF
1610:106490004E00B5A60C001C68B4D0280185C6037058
1611:1064A00000000770040049203542286855A0D60036
1612:1064B00004099642702D602E0470BCA00F00B8A78E
1613:1064C0001D403C27FB87401110020C0875259C706D
1614:1064D00075A060207005800C042768AE086822A4AF
1615:1064E0000C681BA36802518A10110C0875253887A7
1616:1064F000042705A0901D9C7075A06020D001E008C5
1617:10650000228420841A8399A300000869002422A110
1618:106510000C6900231BA110120C08752584B200021F
1619:10652000180171205000100071202000DE000408C6
1620:10653000C341DE002E01002005000870060084A083
1621:10654000E0010E00100106A0050084A0030086A053
1622:10655000030008110500042778AC0078082F94D0B8
1623:106560000419A6431A7004781E70087812700C780B
1624:10657000167004609CD02001107822701478267068
1625:106580000276047084A0100085C006707920004750
1626:10659000518AE8013887042705A068119C6005A08E
1627:1065A000B8016020046084A00F0080A01D403C2042
1628:1065B000FB870C0975250870060084A0E0010E0019
1629:1065C000100106A0280084A0030086A00300050097
1630:1065D00051200000050026010600D600D07084A0DE
1631:1065E000004C04809020DE008E00087184A103001E
1632:1065F0002811286805A0780104086D3F0871FCD1B6
1633:1066000018010C08D640880C077010000871FCD1E6
1634:10661000E80D0C08D640087086A00800301D0070F8
1635:1066200005A0181D0370000049200000060001208D
1636:1066300001470420CCD010010C085B430E002E0152
1637:10664000002005002601460136015601C600D6008D
1638:10665000D07084A0004C04809020DE0049201F43AD
1639:1066600080AD1100A02084B20002180199203200F0
1640:106670001000992031000C7084A0FF072A68077071
1641:106680000800077002000370010018010080AC8050
1642:10669000A5530C7084A0FF0730010770040004703C
1643:1066A00084A00400E01DCE0049200000037000001B
1644:1066B0005E013E014E012E01002005001468FCD051
1645:1066C00004099E43007084D0E005247EB5A6040032
1646:1066D00007700400047084A00400E01D1871160007
1647:1066E0001C71160020711600247116001B7000002A
1648:1066F0001F70FF3F2370000027700000137004001C
1649:10670000177000000276077001000120FFFF0920CA
1650:1067100031000A200A200871087006A1E01DFCD192
1651:10672000D00D2E0026722E0022722E001E722E0018
1652:106730001A7207700200087086A008001001040891
1653:106740000E41077004000370000005004920C3419A
1654:106750006800087084A00300100106A0050006A0D0
1655:1067600020201820582C602149200000588B0061FF
1656:10677000002108A41A71046001A31E700600042BF6
1657:1067800084A008005001106081A000002270060063
1658:10679000146081A000002670060084A1070011206B
1659:1067A00008002AA20862002412A226000C624022DD
1660:1067B000002343A82E00FF887011002502A20801C3
1661:1067C0005012202241200000042B9CD010010E000A
1662:1067D0000E000E005004127517700000027686A994
1663:1067E000C3411811077001002800047084A0100034
1664:1067F00085C00670002500A11A70042B84A0080033
1665:1068000010010E004E001E0089A100001E710C2B0D
1666:106810008CA108003001A1A40000227481A0000016
1667:106820002670002522A2C3A8000012742028167426
1668:10683000027686A9C3411811077001002800047070
1669:1068400084A0100085C00670598B602B792000470A
1670:106850000C08C54206A00500912000809120006030
1671:10686000AC7805A068117479D07006A148111C7825
1672:1068700005A030011F780000040E3D4491208040A7
1673:1068800069208047FDC7006884A00F009811D06878
1674:10689000B4D08001BCD07011F60079200001FCD783
1675:1068A000101179200002307884A0C00010110C086B
1676:1068B000D522FE00FCD7200169204047FCC7180CF8
1677:1068C0003078018032780419C744347832786120F6
1678:1068D000C06C69208047FDC7CC6805A028010180F5
1679:1068E000CE6810110C083946006884A00F006801BA
1680:1068F00086A00100500140680DA03801042105A0C8
1681:10690000200101800A200409D645146805A0A801C9
1682:10691000018016689011A3680100F600FCD71811D9
1683:10692000792000021000792000010C086E3CFE0066
1684:10693000606805A010010C08D5227C6805A0400104
1685:1069400001807E68281163680000D068C5C0D268E5
1686:10695000D068FCD0B001FCC0D268A920000234602D
1687:1069600005A0580101803660D068FDC0D2682811AA
1688:10697000106005A010010C08D522E0AC1000041F27
1689:10698000AC44FCD738016120C04C69204047FCC7AB
1690:10699000040869445904387801803A78A0113C7899
1691:1069A0003A786120C04C69204047FCC70C6805A0BC
1692:1069B00010010C084345FCD730116120C06C6920E0
1693:1069C0008047FDC7980C1078CCD06801ACD020115E
1694:1069D000A4D04801ADC0127891200180040EEF448C
1695:1069E0000C08A1200500912001800500407801805D
1696:1069F0004278041942454478427869204047FCC7F0
1697:106A000079200002D46805A03801E07D04A520119A
1698:106A1000D668D068BCC0D26879200047106805A04D
1699:106A200010110120010101801268FCD7180180A01B
1700:106A3000D08D100080A0C08C4020042065A0E00113
1701:106A4000246005A0B001018026609811006805A0AF
1702:106A50003001486806AC18110C08D645680060681B
1703:106A600005A018012760010020000C0884450428B7
1704:106A7000280C0060402C100CFCD73811692080478E
1705:106A8000FDC7792000010408FF440500092000002B
1706:106A9000A920000208609CD05805246005A01801B8
1707:106AA00001802660180408609CC084D01011ACD00E
1708:106AB000C0010A60046005A0D801D600C600160017
1709:106AC00068201060018012600C08C737002D682C08
1710:106AD00060200C08021C0C08B21D1E00CE00DE0057
1711:106AE0003800BDC00A608DA1010010008DA1000119
1712:106AF000E0AC1000041F474584A1010030018CA1C7
1713:106B0000FEFF0E690C08D52208000E690500002C56
1714:106B10007A681467726F176000002B6000001B60BA
1715:106B20000600B46084A0005F1E60206084A0FF00A7
1716:106B300085A0600022600060422069208047FCD769
1717:106B4000101169204047586806AC101100285A6897
1718:106B50000C089A1B186805A0100101801A680868C3
1719:106B6000A4C00A681068087909810A7901801013A5
1720:106B70000C087525126818111079A5C112792F60BB
1721:106B8000000033600000682C0C08BF1DFCD71811F2
1722:106B900069204047100069208047106984A10001E6
1723:106BA0000120060018117669012004000C08CB2290
1724:106BB0000500D60048696021FCD718116920000241
1725:106BC0001000692000010C0890241B600600586822
1726:106BD00084A0005F1E60206084A0FF0085A04800A4
1727:106BE00022602F60000033600000086884A0FDFF71
1728:106BF0000A683068B4D0B0014B680400A9201400C2
1729:106C0000486894D01001041FFD454B680900A92075
1730:106C10001400486884D01001041F0646A920FA0019
1731:106C2000041F0D461B685400DE0063680700050062
1732:106C300079200047E1008900A900092002006920AD
1733:106C400080470F6800001368000017680000098182
1734:106C5000180169204047A80C05001920A3003A7BC1
1735:106C60003E7B050019203300427B467B050019203E
1736:106C7000DD32327B367B05004C6A85A20000F001D4
1737:106C80005069BC6B00A3C60064210463FF83381104
1738:106C90001182480108811AA1B80EBC69A80CCF68FE
1739:106CA0000A00CE0005004C69BC6A64220860B5C0C9
1740:106CB0000A6010820981C81D4E69CE0005001600C9
1741:106CC000041D5D4691200060041D61469120006016
1742:106CD000EC70DCD01811D4D09001A0008EAE000171
1743:106CE00038011478F5C0C5C01678D4D0801560047A
1744:106CF0001478FDC0C5C01678D4D048152804E4D057
1745:106D00000409C446041D7F469120006009200C0040
1746:106D1000041D8546912000600981D01DE47084A087
1747:106D2000FF0186A0FF011011EC70C0088EAE0001BB
1748:106D300028011478F4C0FCD0301120001478FCC075
1749:106D4000F4D00811C4C0167804788CD00005C600B1
1750:106D500061200000186084D0B81186AE0002E60001
1751:106D6000712010002001DB700100E4781800DB7056
1752:106D70000000E078C670C3700E801B600100912097
1753:106D80008040EE00CE001800CE001F680C001E00F0
1754:086D9000A070A2700500260CA2
1755:00000001FF
1756/*****************************************************************************
1757 * QLOGIC LINUX SOFTWARE
1758 *
1759 * QLogic ISP12160 device driver for Linux 2.2.x and 2.4.x
1760 * Copyright (C) 2002 Qlogic Corporation (www.qlogic.com)
1761 *
1762 *****************************************************************************/
1763
1764/************************************************************************
1765 * --- ISP12160A Initiator Firmware --- *
1766 * 32 LUN Support *
1767 ************************************************************************/
1768
1769/*
1770 * Firmware Version 10.04.42 (15:44 Apr 18, 2003)
1771 */
diff --git a/firmware/qlogic/1280.bin.ihex b/firmware/qlogic/1280.bin.ihex
new file mode 100644
index 000000000000..612c2633f8cd
--- /dev/null
+++ b/firmware/qlogic/1280.bin.ihex
@@ -0,0 +1,2008 @@
1:10000000080F0B0000107800411000002E3E000089
2:100010004320504F525947495448312039392C31E7
3:1000200039313239312C39392C3339313439512085
4:100030004F4C494720434F435052524F54414F4930
5:10004000004E492050533231303446207269776D6A
6:10005000726120655620726569736E6F30202E388C
7:1000600035312020432073756F74656D20726F4E9B
8:10007000202E303050206F72756474634E202E6FC6
9:100080002020303020200024C920FF980120FC04CB
10:10009000042086A08010C000541071200001A070C0
11:1000A000A270C12010008920741378006D10012007
12:1000B000FC04042086A08012C00069107120000298
13:1000C000A070A27071200001A070A270C120100069
14:1000D0008920F81378006D10C120200089201C139E
15:1000E00071201000C3700400C7705349CB702050BA
16:1000F000CF702020D37008000120FE04D670C120EC
17:100100002100192000000920FFFE00210B20A5A5D9
18:10011000ECA1FF7F642D6B200A0ADCADFF3F542B5E
19:100120005B205050142186A2A5A54000A41086A3F0
20:100130000F004000A0106A2C5A2AC120200019206C
21:100140000F00780080106A2C5A2A7800A2106A2CBE
22:100150005A2A30212821A2A1004F248424842484F7
23:1001600024842484248492A1009909200000012081
24:1001700032007810C12018227920004FA02F0824C7
25:1001800011200000A9204000A4420981C000BF1036
26:10019000092000FF003402A14800CF104000CF101A
27:1001A000A820A4420120FC04042086A08010C000E6
28:1001B000E510712000017E0D6920404F7810B04D90
29:1001C0007F0D1078EDC012781B78640078000A115A
30:1001D0000120FC04042086A08012C00005111478C0
31:1001E000EDC0D5C016781B786400712000027E0D2A
32:1001F0006920404F7810B04D6920804F7120000178
33:100200007810B04D1478D4C016787F0D78000A119C
34:100210001478E5C016781B783C00CA7EC27CC67B89
35:100220006778000000788DC0027831203000AF7808
36:1002300001012378020027780200092002006920CA
37:10024000404F1B680300236807002768FA002B68EB
38:1002500008002F682800376800003B6806003368F4
39:1002600008003F680000098140005E11D3680A0061
40:10027000C368C04F7920004F1478E4D0C000441107
41:10028000ECD0C0004811D768297378004A11D768AC
42:100290000D7378004A11D7682D73C768C054CB68B6
43:1002A000C053CF68C094AB684497AF684997B368B0
44:1002B0004497B7684497A76801006920804F780089
45:1002C0001E11D3680A00C368C0511478E4D0C0007E
46:1002D0006A11D768397478006C11D7681974C768C7
47:1002E000C074CB684054CF68D095AB684997AF686D
48:1002F0004E97B3684997B7684997A7680100107887
49:10030000ECD0C000C2111478E4D0C000B4117E0E4D
50:100310006920C05371200002EC70E4D0C000951138
51:1003200019200C0C21200C007810502078009B1113
52:1003300019200A0C21200A0078105020692040540E
53:1003400071200001EC70E4D0C000AB1119200C0C3E
54:1003500021200C00781050207800B11119200A0CCF
55:1003600021200A00781050207F0E7800DB11192020
56:100370000C0C21200C006920C053781050206920FB
57:100380004054781050207800DB116920C0537E0E55
58:1003900071200001EC70E4D0C000D41119200C0CC5
59:1003A00021200C00781050207F0E7800DB111920DE
60:1003B0000A0C21200A00781050207F0E1120020024
61:1003C0006920C05409200200A920000137680000FC
62:1003D0000B684000C87B86A3FFFEC000F2111768BF
63:1003E00000011F6864007800F611176864001F6838
64:1003F0000200E8AD1000F000E3110981C000E11136
65:100400001182400004126920C0747800DF11781056
66:10041000A2267810124778101B1E7810424D9120AA
67:1004200000217920004F1078ECD040001812712084
68:10043000200078001A1271205000912000227920AB
69:10044000004F71202000912000237920004F107868
70:10045000ECD040002C127920000178002E12792077
71:1004600000027120404F912000247920000171206A
72:10047000804F912000207920004F71201000003221
73:1004800085A03D30902071201000C37000009000C6
74:100490004D12C07086A00200C0004D127810C11528
75:1004A000392000001078ECD0C000CF1278108E14E4
76:1004B000AC7805A0C0006B12680061126C7865A072
77:1004C000400061127810DC237810E8206800781270
78:1004D0006C7865A040006B127810DC2368007812FD
79:1004E0000920474F1120874F04210C2205A140000D
80:1004F00078127810511F7120404FA47005A0400061
81:100500009D12507485A4000040009D1279200002C5
82:1005100091200080D4728CA23D3090217810B12BB4
83:100520009120008091203D3068009D127920004F7D
84:100530006C7865A040009D12712010007810DC23BB
85:10054000E000A5127920004F712010007810164BA2
86:100550007120804FA47005A04000BD12507025A0EE
87:100560004000BD127920000191200080D4728CA23D
88:100570003D3090217810B12B9120008091203D30AA
89:100580007920004F712010006800C9126C7865A0B6
90:100590004000C9127810DC23E00053127810164B8B
91:1005A0007800531278108E14AC7805A0C000E712C2
92:1005B0006800DD126C7865A04000DD127810DC2345
93:1005C0007810E8206800F1126C7865A04000E7120E
94:1005D0007810DC236800F1120920474F042105A0A0
95:1005E0004000F1127810511F7120404FA47005A0F7
96:1005F00040000C13507485A4000040000C137920B7
97:10060000000191200080D4728CA23D30902178109E
98:10061000B12B9120008091203D307920004F712036
99:100620001000680016136C7865A04000161378104F
100:10063000DC23E000CF127810164B7800CF123C1369
101:100640003C133E133E134B134B134B134B135613D8
102:100650005613631363134B134B134B134B133C137E
103:100660003C133E133E134B134B134B134B135613B8
104:100670005613631363134B134B134B134B13780035
105:100680003C137E007E107E12912000247810D12928
106:100690007F127F107F00912001807C007E007E1001
107:1006A0007E127810C8137F127F107F009120018086
108:1006B0007C007E007E107E12912000237810D129CC
109:1006C0007F127F107F00912001807C007E007E10D1
110:1006D0007E12912000237810D129912000247810D7
111:1006E000D1297F127F107F00912001807C0094131C
112:1006F000941396139613A313A313A313A313AE1368
113:10070000AE1396139613A313A313A313A313AF133C
114:10071000AF13AF13AF13AF13AF13AF13AF13AF13C9
115:10072000AF13AF13AF13AF13AF13AF13AF13780003
116:1007300094137E007E107E12912000237810D12920
117:100740007F127F107F00912001807C007E007E1050
118:100750007E127810D5137F127F107F0091200180C8
119:100760007C007C007E107E127E0D7E0E7E0F7E0051
120:10077000712000016920404F7920004FEC7084A067
121:10078000001CE2787810B04D7F007F0F7F0E7F0D48
122:100790007F127F107C00003C84A007007900CD13FD
123:1007A000DE13DE13E013E013E513E513EA13EA1397
124:1007B000003C84A003007900DA13DE13DE13F31388
125:1007C000F3137810B229912000227810EC477C00B6
126:1007D000912000217810EC477C00912000217810B6
127:1007E000EC47912000227810EC477C0091200021FA
128:1007F0007810EC477C00181418141A141A142714D3
129:10080000271427142714321432143F143F142714CA
130:100810002714271427145014501450145014501433
131:1008200050145014501450145014501450145014A8
132:10083000501450145014780018147E007E107E124C
133:10084000912000247810D1297F127F107F00912001
134:1008500001807C007E007E107E127810C8137F120B
135:100860007F107F00912001807C007E007E107E1230
136:10087000912000237810D1297F127F107F009120D2
137:1008800001807C007E007E107E1291200023781073
138:10089000D129912000247810D1297F127F107F0068
139:1008A000912001807C007E007E107E127E0D7E0EE7
140:1008B0007E0F7920004F712000026920404F003DDB
141:1008C0008CD040006614EC7084A0001CE278781094
142:1008D000B04D003D84D0400074146920804F7120D9
143:1008E0000001EC7084A0001CE6787810B04D7F0FFA
144:1008F0007F0E7F0D7F127F107F007C0008700B80C1
145:10090000C8008914077002008CA0E001C0008A149E
146:100910009CD0400089147A087A09C370024078009C
147:10092000C41568001A1561200000186084D0C0004A
148:100930001A15287805A0C0009E1410001B15780019
149:100940001A151079F4D14000A4147800B914147960
150:10095000ECD14000BD14FCD04000B3147E007810F0
151:10096000AE1D7F004000BD147800B9147E007810E1
152:10097000A11D7F004000BD14012007407800C31571
153:100980001079FCD0C000C7146120404F9CC1FCC747
154:100990007800CB146120804F9DC1FDC7646005A025
155:1009A000C0001A15127982602878FCC086A0180051
156:1009B000C000DB147E0C7810851B7F0C2B780000A8
157:1009C0007C6065A0400000157E0C9C607810901E35
158:1009D0007F0C9F6000007810D51C092018008760EC
159:1009E000030110787E00FF84C000F614FF854000EC
160:1009F000F814C5C012787810BB1D7F001278C000B3
161:100A0000141578100D1E10789CD0C00008156120B8
162:100A1000404F78000C156120804F9CC012787F6099
163:100A20000000D460DCD040001815DCC0D660012086
164:100A300005407800C3157800C1157C001078F4D00B
165:100A400040002315012007407800C31506A0C2709E
166:100A5000C670CA70CE70DA70C0703DA08AA0400027
167:100A6000C80031157900381500218AA04000C8005F
168:100A7000CF1579007815C1151716E0154F16871692
169:100A80008716D715ED1C9216CF15E415E615E81557
170:100A9000EA15F21CCF15A016FD16A51BE71CEC15D8
171:100AA000EA192C1A671AB81AA519B219C619D91950
172:100AB000EB17CF15341741174D1759176F177B17C1
173:100AC0007E178A1796179E17D317DF17CF15CF15E6
174:100AD000CF15CF15F8170A1826185C188418941823
175:100AE0009718C818F9180B1974198419CF15CF1550
176:100AF000CF15CF159419CF15CF15CF15CF15CF150D
177:100B0000171D1D1DCF15CF15CF15211D661DCF1526
178:100B1000CF15CF15CF15111681169A16F7169F1BF4
179:100B2000CF15CF15681BCF156A1D091D131DCF15D5
180:100B3000CF15CF15CF15CF15CF15CF15CF15CF1595
181:100B4000CF15CF15CF15CF15CF15CF15CF15CF1585
182:100B5000CF15CF15CF15CF15CF15CF15CF15CF1575
183:100B6000CF15CF15CF15CF15CF15CF15CF15CF1565
184:100B7000CF15CF15CF15CA72C67101200640780077
185:100B8000C315CE73CA72C67101200040C2706800DE
186:100B9000C415612000001B600100912000509120CD
187:100BA00080407C00C37001407800C415C3700640CB
188:100BB0007800C41599204100A1204100A92005001A
189:100BC000A3537800C115C470C37004007A00780084
190:100BD000C1157800C1157800C1157800C1159120A4
191:100BE0000080C3700400C7705349CB702050CF7091
192:100BF0002020D370080001200F00D670792000005B
193:100C00001B780100312030005920001029201A04DF
194:100C10005120450461204704C1202000912000504C
195:100C20009120804078001804D875DC74DA75DE7481
196:100C300078001A16292000002025D071C872CC73C4
197:100C4000C470A020992030000370010007700600D6
198:100C50001A731E722274267521204000FF81400005
199:100C6000C11582A14000C8003416202106A008202A
200:100C70000384127007700400077001000870FCD034
201:100C800040003B160770020084A0E00140004916B6
202:100C9000C37002407800C415A824A55378002B1611
203:100CA0007800C115292000002025D071C872CC73AE
204:100CB000C4709820A1203000037000000770060067
205:100CC0001A731E72227426752120400007700600D8
206:100CD000FF814000C11582A14000C8006E1620218E
207:100CE00006A0082003841270A824A65307700100F0
208:100CF0000870FCD04000751684A0E0014000631627
209:100D0000C37002407800C415D875DC74DA75DE74DF
210:100D100078005216C471C87014219EA70400C00048
211:100D20008F160A20CA727800C015C7700800CB70F1
212:100D30000F00CF700B007800C115D875DC76DA751E
213:100D4000DE767800A316292000003025C470C87212
214:100D5000CC73D074C670CA72CE73D27405A0400032
215:100D6000F2160AA44000B316C800BC1601807278BF
216:100D700084A000FC4000C016AC7885C0AE7801208D
217:100D800005407800C3157E7B7A7A867E827D767CEC
218:100D90008CA400FF4000D8160784048004800C81D6
219:100DA0000C810F8118A191A20000B1A6000081A5BD
220:100DB00000007800E21607840480048018A391A242
221:100DC0000000B1A6000081A500001A731E722276F1
222:100DD000267005A64000EC16107AC5C2127AAC78CF
223:100DE00084A0FCFFAE787800F516AC7885C0AE78AC
224:100DF0007800C115D875DC76DA75DE7678000017D4
225:100E0000292000003025C470C872CC73D474C67019
226:100E1000CA72CE73D67405A040002F170AA44000F2
227:100E20001017C80019170180927884A000FC4000B8
228:100E30001D17AC78C5C0AE78012005407800C315F9
229:100E40009A7A9E7BA27DA67E002605A540002817E3
230:100E5000107AC5C2127A967CAC7884A0FFFCAE787A
231:100E600078003217AC78C5C0AE787800C11509207B
232:100E700000006C7865A040003E1708810060780093
233:100E80003717C47A7800BF150920484F0C21107815
234:100E9000ECD0C000C0151120884F14227800BF1577
235:100EA0000920494F0C211078ECD0C000C01511204A
236:100EB000894F14227800BF156120404F28612C62B1
237:100EC0001482148214821078ECD0C0006D17612057
238:100ED000804F2863DA732C631C831C831C83DE73AE
239:100EE0007800BF1509204C4F0C211078ECD0C000C1
240:100EF000C01511208C4F14227800BF151879780086
241:100F0000C01509204D4F0C211078ECD0C000C01541
242:100F100011208D4F14227800BF1509204E4F0C214F
243:100F20001078ECD0C000C01511208E4F142278002C
244:100F3000BF1520791078ECD0C000C015247A780055
245:100F4000BF15C471FCD1C000A6171120C053780092
246:100F5000A81711204054078184A00F00038003804C
247:100F6000038068A2006A04689CD04000B717086B31
248:100F70007800B8170C6BFCD1C000BF1721203B02D2
249:100F80007800C11721203B0124241479E4D14000CA
250:100F9000CD17C4D4C000CC17D5C47800CD17DDC49C
251:100FA000A4A4001CDE74C4717800BE15C477781048
252:100FB0002B1E912000801C6B146A91200180082751
253:100FC0007800BE156120404F18611078ECD0C00049
254:100FD000C0156120804F18627800BF15C477781063
255:100FE0002B1E912000800869186A106BDA77912017
256:100FF00001807800BE15C471102194A20F0082A256
257:101000001000C800B9157810C62784A3004040001E
258:10101000081895A220007800BE15C4710021BCC03C
259:1010200082A01000C800B915BCD1C0001918112049
260:10103000484F042278001D181120884F0422BDC09B
261:101040007E000021BCC01220781023277F01780089
262:10105000C015C4712120494F0424C6701920000016
263:1010600078003518C8712120894F0424CA70FDC347
264:1010700011205418A9200800042206A14000441899
265:101080001082F0003918C471C8727800B81592A2A5
266:1010900054187E0222217F01781044271078ECD06A
267:1010A000C0005218FCD340002F187800C115E80387
268:1010B000FA00F401EE0204000100020003006120C6
269:1010C000404F28612C62148214821482C4702A60FA
270:1010D000C8700380038003802E601078ECD0C000BD
271:1010E00082187E027E016120804F28612C6214826A
272:1010F00014821482D8702A60DC700380038003801D
273:101100002E60DA71DE727F017F027800BF156120E8
274:10111000404F3061C47032601078ECD0C000C01510
275:101120006120804F3062C87032607800BF15187936
276:101130007800C015C47184A1CFFF4000A3181078B7
277:10114000ECD0C000B915C8727800B81511204D4F09
278:10115000042212217E00192000007810AB2710789D
279:10116000ECD04000B3187F017800C015C87184A18D
280:10117000CFFF4000BC181021C4717800B8151120B1
281:101180008D4F042212217E00FDC37810AB277F0211
282:101190007F017800BF15C47182A110004800D418E7
283:1011A0001078ECD0C000B915C8727800B8151120BD
284:1011B0004E4F04227E00122119200000781089274A
285:1011C0001078ECD04000E4187F017800C015C87199
286:1011D00082A110004800ED181021C4717800B815E4
287:1011E00011208E4F04227E001221FDC37810892722
288:1011F0007F027F017800BF15C471C87284A1FDFF12
289:10120000C000B81584A2FDFFC000B81500212079E8
290:1012100022780022247A26787800BF15C471FCD188
291:10122000C00013191120C053780015191120405423
292:10123000078184A00F0003800380038068A2192027
293:101240000000C872BCD2400024199DA31000B4D283
294:10125000400029199DA308009120008000687E00AD
295:1012600026A240004819026AECD440003519A5C3F3
296:10127000E4D4400039199DC3F4D4400048190F81CB
297:10128000F4D24000441978100828780048197810E2
298:10129000E62778004819CC72086806A240006A194F
299:1012A000A4A2FF001478E4D0C0005B1982A4280037
300:1012B000480067194000671978005F1982A443004D
301:1012C00048006719C471C6717F02CA7291200180FB
302:1012D0007800BA150A6A9DA30A00046805A3066887
303:1012E0007F020C6BC471912001807800BE15C47719
304:1012F00078102B1E91200080146A1C6B91200180B5
305:10130000C8701668CC701E6808277800BE15C470B7
306:101310006120404F18611A601078ECD0C000C015F1
307:10132000C8706120804F18621A607800BF15C471C0
308:10133000C872CC7382A11000C800B91578102A2891
309:1013400084A300404000A31995A220007800BE1598
310:10135000C47778102B1E91200080086A8DC20A6A1B
311:101360009120018008277800BF15C47778102B1EC4
312:1013700091200080086A94A2F9FF0A6A046805A017
313:101380004000C11978106F2691200180082778004D
314:10139000BF15C47778102B1E91200080086A95C273
315:1013A0000A6A046805A04000D41978106F269120BD
316:1013B000018008277800BF15C4774120010049202B
317:1013C000050051202000912000807810461E9120B9
318:1013D00001800827086A7800BF15C4771478E4D024
319:1013E000C000FE19FCD74000F8197810AE1D40006F
320:1013F000FE197800C3157810A11D4000FE19780071
321:10140000C315C873CC72C677CA73CE727810CD1E5E
322:10141000C000281A186805A04000221A08277E0775
323:1014200078105A287F07C000221A01201500FCD727
324:10143000C0001B1A6120404F78001E1AFDC06120B9
325:10144000804F2A78912001807C009120018001202A
326:1014500005407800C315912001807800C115C4773C
327:101460001478E4D0C000401AFCD740003A1A781033
328:10147000AE1D4000401A7800C3157810A11D400031
329:10148000401A7800C315C677412021004920050085
330:1014900051202000912000807810461E092016005F
331:1014A000FCD7C000541A6120404F7800571A6120C1
332:1014B000804FFDC1676003007F6000007667836036
333:1014C0000F002A79D461DCC1D66178106F26912093
334:1014D00001807C00C877CA77C477C6771478E4D0D7
335:1014E000C0007E1AFCD74000781A7810AE1D40006C
336:1014F0007E1A7800C3157810A11D40007E1A78006E
337:10150000C315BCA700FF9120008009201700FCD75D
338:10151000C0008B1A6120404F78008E1A6120804FE6
339:10152000FDC17F60000067600200766783600F0086
340:101530002A79D461DCC1D66178106F2691200180B0
341:1015400041202100492005005120100091200080F9
342:10155000C87005A04000AC1AD460FDC0D6607810F9
343:10156000461EC8703668388784A71F00C000AC1AB2
344:10157000912001807C00192000001478E4D0C00084
345:10158000CE1AC87284D24000C81A7810AE1D40002E
346:10159000CE1A7800C3157810A11D4000CE1A78002D
347:1015A000C315C872CA72AC7884A00300C000F91ACF
348:1015B0003920000084D24000DB1AFDC74120210001
349:1015C000492004005120080078102B1E9120008033
350:1015D0000868D4C00DA80A6991200180388784A7C3
351:1015E0001F00C000E11ABCA700FF3F8738873F8774
352:1015F00084A7000FC000E11A91200080C87284D235
353:10160000C0000B1B1078ECD04000071B69200001C4
354:1016100078000D1B6920000278000D1B6920000175
355:10162000086884A0FDFF0A683068B4D040002D1B14
356:101630004B680400A9201400486894D040001F1B88
357:10164000F000191B4B680900A9201400486884D0D9
358:101650004000291BF000231BA920FA00F0002B1BDF
359:101660007920004F09201800C87284D2C000391BAD
360:101670006120404F78003C1B6120804FFDC17F609E
361:1016800000002A796760010083600F00A7600000F6
362:10169000A860B260B660D460B4D04000581BB4C03B
363:1016A000D6607E0CB86065A00860D4C00A6018607F
364:1016B00001801A607F0CD46084A0FF77D660AC787C
365:1016C0008DC0AE78FF834000631B7C001B68470021
366:1016D000912001807C00CC737810BA1AEC69486ABA
367:1016E00085A100184A6885A14000EE68CC732120CE
368:1016F0000400A920FF09F000781B2184C000761B9C
369:101700001983C000741BEE694A6A912001807C0035
370:10171000FCD7C0008C1B6920404F78008E1B6920CD
371:10172000804FC471C6711669FF81C000961BA768FF
372:101730000100AC788CC0AE7884D0C0009E1B7810BD
373:101740002D1F7C00D875DC74DA75DE747800A71B59
374:101750002EA02025C471C873CC72C671CA73CE7214
375:101760007920004FDE7DDA7CD67BD27A7810041E99
376:101770004000D11CA9200500A120144F9120008019
377:10178000A1419120018009204000781018204000DC
378:10179000CA1B78100D1E7800D11C04608CA0FF00BD
379:1017A0008EA10900C000D51B7E007810BF237F00EA
380:1017B00084A000FF078009804000611C7E0C682C1B
381:1017C0007810041E40001B1C002C9E680981C0007C
382:1017D000DC1B9F6000007F0C7E0CDC7DD87CD47B02
383:1017E000D07A90A2400099A30000A1A40000A9A56E
384:1017F0000000DE7DDA7CD67BD27A682C9C6865A0FE
385:101800004000601C0920400078101820C0003E1CD9
386:10181000046084A0FF0086A00200C0001B1C0460BE
387:1018200084A0FF0086A00A00C000171C7E0178106B
388:10183000BB237F01002D02607800EA1B7F0C7E0C29
389:101840009C607810901E7F0C9F6000007810D51C63
390:10185000092018000860CDC00A6004608660107816
391:101860007E00FF84C000341CFF854000361CC5C0CC
392:1018700012787810BB1D7F00127878100D1E78004A
393:10188000D11C7F0C7E0C9C607810901E7F0C9F609A
394:1018900000007810D51C09201800876003011B6028
395:1018A000030010787E00FF84C000561CFF854000B6
396:1018B000581CC5C012787810BB1D7F0012787810B4
397:1018C0000D1E7800D11C7F0C1478E4D0C0008F1C52
398:1018D0001461FCD140006F1C7810AE1D40008F1CBD
399:1018E0007800731C7810A11D40008F1C7810D51C47
400:1018F00009201800876003011B60210010787E001A
401:10190000FF84C000831CFF854000851CC5C0127881
402:101910007810BB1D7F00127878100D1E0120074043
403:101920007800C315C474C873CC7214609120008011
404:101930007E0E09201200FCD0C0009F1C7120404F79
405:101940007800A21C7120804FFDC12A7967700500C4
406:10195000D471DCC1D6716A736E72727476707B70EA
407:101960000000002C7E702EA030251C6184A1600038
408:101970004000B91C7810B6467F0E9665A6659A663B
409:10198000AA66AF600000B360000014672360000027
410:10199000246096A00100C000CC1C00802660781056
411:1019A0006F26912001807C00C37005407800C4152B
412:1019B000A92005009920144F912000800A539120FE
413:1019C0000180002110A299A30000A1A40000A9A5F4
414:1019D00000007C00C471C77000001E797800C1153A
415:1019E000C471C67168217800F41C692000100C696C
416:1019F00016A0042D10A2688D0981C000F61C85A2D6
417:101A00000000C000041DC37000407800061DC370B4
418:101A10000340CA707800C4156479C671C47182A18C
419:101A20000300C800B91566797800C1156479C671DC
420:101A30007800C1150079C671C47102797800C115AA
421:101A40000079C6717800C115C470112000008CA007
422:101A50000D004000361D0C814800321D10820C81A3
423:101A60000C814800321D10820C81FF81C000BA1524
424:101A700010820E7A8CD24000621D1079CDC112798D
425:101A8000092021001920030084D240005C1D088138
426:101A90001920410011204E97122319204200108274
427:101AA00012231920430010821223192046001082AD
428:101AB000122319204700108212231920060011203A
429:101AC0005397122111207397122304790678780016
430:101AD000C0150478C6707800C115C471FCD1C0006F
431:101AE000721D1120C0537800741D112040540781CD
432:101AF00084A00F0003800380038068A2146AB4D21C
433:101B00004000831D112001007800851D1120000078
434:101B10000C6B0068DA707800BE151478F4D04000C1
435:101B2000951D01200740DB70000005A07800A01D76
436:101B3000FCD040009F1D01200740DB70010005A084
437:101B40007800A01D06A07C001478F4D04000AC1DE5
438:101B500001200740DB70000005A07800AD1D06A045
439:101B60007C001478FCD04000B91D01200740DB70D8
440:101B7000010005A07800BA1D06A07C0012711A723F
441:101B80001E731078C4D04000C41D2274267580AC2A
442:101B9000010008810C81A9819880A1203000037088
443:101BA00000008460A220A65307700100747984A10C
444:101BB00000FF4000E11D0F810C810C810480048036
445:101BC000078000A17800E41D0781048004807C79EF
446:101BD00008A1787A06A011A2107DC4D54000F11D9D
447:101BE000847B19A3807C21A40870FCD04000F11DE7
448:101BF00003700100077006001A711E72107DC4D5B3
449:101C00004000011E2273267484A0E0017C00487805
450:101C100065A040000C1E042C4A78632000007C0064
451:101C20007E0F7920004F48786220002C05A0C0006C
452:101C3000181E7810B2294A787F0F7C001120009975
453:101C40004A7AC47B19834000281E80A232001220E9
454:101C5000102078001F1E132000007C007E017E02F1
455:101C6000FCD7C000341E1120C0547800361E11204D
456:101C7000C07484A7000F0B8084A71F004000411E82
457:101C8000038003800380038005A168A27F027F0197
458:101C90007C0078102B1E00292A68002A2E6808680C
459:101CA00084A0EFF90DA80A697E0EFCD7C0005B1E68
460:101CB0000920534F7120404F78005F1E0920934F39
461:101CC0007120804F0C21046805A040006F1E16A1F2
462:101CD000C0006F1E6020006006687E010B200000BF
463:101CE0007800721E092000007E01046865A0400093
464:101CF000871E006006687810A21E781064201068A5
465:101D0000087909810A7901801268C000721E107971
466:101D1000A5C112797F0102690669002D6020781043
467:101D2000132B7F0E7C0065A04000A11E08209C6044
468:101D300005A040009E1E62209F60000065A0780004
469:101D4000941E48784A7962207C00076003018F6006
470:101D50000000A9201C0080AC0500A020012000008C
471:101D6000A44028681A602C6822607C007E0EFCD794
472:101D7000C000BD1E7120404F3120C04F7800C11EF1
473:101D80007120804F3120C05150708CA00002C000E3
474:101D9000CB1E08A60A2D0080527006A07F0E7C0084
475:101DA0007E0FFCD7C000D51E7920404F7800D71E8B
476:101DB0007920804F78102B1E9120008004680A78CB
477:101DC00065A040002B1F7800E91E002C0A786020D7
478:101DD000006065A040002B1F106006A3C000E21E3B
479:101DE0000C6006A2C000E21E282C4C7806ACC00095
480:101DF000F81E7800281F046806ACC000061F0060AB
481:101E00006020066805A0C000061F03680000780077
482:101E1000101F006408786020026486A40000C000DF
483:101E2000101F002C026860257F0F7810A21E7E0F05
484:101E30001B600500236020007F0F781064207E0F58
485:101E4000087909810A79106801801268C000281F8A
486:101E50001078A5C012780120FFFF05A07F0F7C003D
487:101E60007E07002739200000FCD04000351FFDC749
488:101E700041202100492004005120080091200080C9
489:101E80007810461E388784A71F00C0003D1FBCA7DE
490:101E900000FF3F8738873F8784A7000FC0003D1FA2
491:101EA000912001807F077C006C78092074970C21B9
492:101EB0000DA140005B1F65A07800DC2361200000BD
493:101EC000186084D0C0007B1F10788CD040006C1F3D
494:101ED0008CC01278FCC76920404F7800711F8DC0FC
495:101EE00012786920804FFDC7912000801C681F6810
496:101EF00000009120018005A0C0007C1F7C008CA008
497:101F0000F0FF4000821F7810B2297900841F941FCF
498:101F1000971F9D1FA11F951FA51F951F951F951FFB
499:101F2000AB1FDC1FE01FE61FFB1F951F951F7C00EA
500:101F30007810B22978102D1F012001807800072029
501:101F4000012003807800072001200480780007200A
502:101F500078102D1F01200680780007209120008036
503:101F60007E07FCD7C000B71F6920404F3920090009
504:101F70007800BB1F6920804F39200900006886A0C7
505:101F800000004000C51F7F001E6F912001807C0073
506:101F900074687F07BCA000FF412021004920040095
507:101FA000512010007810461E388784A71F00C000FB
508:101FB000CF1F9120018001200A8078000720012096
509:101FC0000C807800072078102D1F01200D807800EC
510:101FD00007201478E4D0C000F91FECD04000F31FB4
511:101FE000FCD74000F31FE4787800F41FE078C67057
512:101FF00001200E80780007207800951FFCD7400054
513:102000000120EC7878000220E878C67001200F806B
514:1020100078000720C270FCD7C0000F20DB700000E2
515:1020200078001120DB700100612000001B600100BE
516:10203000912080407C0080AC0100FF814000432063
517:1020400099203000A0200C7084A0FF0340002520C0
518:1020500018707E001C707E0020707E0024707E0050
519:102060001271AC811A721E732274267503700100FE
520:102070000770010008700B80C8003720077002004D
521:102080008CA0E001C0004320A55306A0037000000F
522:10209000077004007F0026707F0022707F001E7092
523:1020A0007F001A707C0011202000092010000A6BAC
524:1020B0000E6C036800FD076818001A6A002DE8A07E
525:1020C000080090A204000981C00054207C00046034
526:1020D0008660082C63200000687805A06A794000BB
527:1020E0007120022C780072206E797C007E0C6120B9
528:1020F000004F87680301082D6B200000686005A071
529:102100006A6140008320022D780084206E617F0C7C
530:102110007C0091200080042C6E7805A0C0008E20E9
531:102120006A78912001809C6005A04000A7207E0C69
532:10213000602008209C6005A04000A32062209F60D2
533:10214000000065A09C6005A0C0009B2048784A79EB
534:1021500062207F0C487862209F60000085AC000000
535:10216000C000B1207810B2294A787C00A920100064
536:1021700006A0048086808E81C800BC2000A2F000EA
537:10218000B72086808E817C007E15A920100005A0D6
538:102190004000E2201AA1C800E22013828D8148008D
539:1021A000D5201AA1C800D620F000CA207800DA2075
540:1021B0001AA108231082F000CA207E00003284A0F9
541:1021C000FFF780207F007F157C007E00003285A015
542:1021D00000087800DE20747DD07006A54000CE2176
543:1021E0001078502000788CD040000A21ECDA4000B2
544:1021F0000A217E0E9120008071202000047005A02D
545:10220000C000072108707F0E86A0080040000A2148
546:102210007800CE217F0E7800CE217810041E400079
547:10222000CE2146A070790025008012A1092040002F
548:10223000C800192178002021D07206A24000202178
549:102240004088092080007E0C1271077001009920DF
550:102250003000A920200080AC0100A02061200000F7
551:10226000FF88400032217810041E0870FCD0400026
552:10227000322107700200912001808CA0E001C00093
553:102280006921A553FF8CC0004721FF884000B82179
554:1022900078005121002C8E78A920200080AC01000C
555:1022A000A020A5537800B82146A018721C73C4DA88
556:1022B000400059212074247592A240009BA3000085
557:1022C000A3A40000ABA500001A721E73C4DA40007C
558:1022D00069212274267506A0077004004000B82109
559:1022E000FF8C4000722178100D1E7F0C78100D1E9F
560:1022F00046A0887800808A7886A002004000982155
561:102300007C7A787BC4DA40008421847C807D747977
562:1023100007810480048010A299A30000A1A40000FA
563:10232000A9A500001A721E73C4DA4000CE212274DF
564:1023300026757800CE211460FCD0C000A021692051
565:10234000404F7800A2216920804F912000801F68B3
566:102350000200FF884000AE2146A08C786020780003
567:1023600098218B780000AC7885A00300AE7891208E
568:1023700001807800CE217F0C8B78000078108D23AF
569:10238000046084A00F007810CF21FF884000CC218A
570:102390008C786020046084A00F007810CF21780032
571:1023A000E8207C007900D121E121FF211D22E121DB
572:1023B0002E22F221E121E121E121FD211B22E12157
573:1023C000E121E121E121E12139200004BC7805A7C8
574:1023D000BE78086005A70A60781071229C60BA7800
575:1023E0009F600000781077237C00BC78C4D0400048
576:1023F000F8217800E1211C60BDC01E607800052234
577:102400007810BF23BC78C4D0400005227800E121B9
578:10241000BF7800000460078084A0FF00B2780180CC
579:10242000400018227810712240001822BC78C5C0E4
580:10243000BE7878001A22780090227C007810BB23A6
581:10244000BC788CA0000EC0002522C4D0C00027227A
582:102450007800E12178107122C0002D2278009022AE
583:102460007C00BC78C4D0400034227800E121BF78E1
584:102470000000146711200100A822186084A0FF004A
585:1024800005A040005422BCA700FFA92020008EA078
586:10249000010040005422BCA7008011200200A920A6
587:1024A00000018EA002004000542278006E227810B5
588:1024B0002B1E002D912000802B6800002F6800004B
589:1024C000086884A0DEFF0A68E8AD10009120018052
590:1024D000F0005722118240006E22A92000017800EE
591:1024E000572278100D1E7C009F600000B4786DA00C
592:1024F000002CB678C0007C22BA78780084229E68CE
593:10250000002D0260B87806ADC00084220260B07869
594:102510000180B278C0008F22BC78C4C0BE78B87881
595:10252000602006A07C007E0E2EA03025BA7DB67DF0
596:10253000AE65B2651C60A260482084A9FFE11E6000
597:1025400084A960004000A3227810B6469665A6656F
598:102550009A66AA6614677120804FFCD7C000AF222C
599:102560007120404F84A7000F0B8084A71F004000FC
600:10257000BA22038003800380038005A1C47168A18F
601:102580000027078084A00F00038003800380C871A8
602:1025900000A1C260912000801478C4D04000DF22E6
603:1025A000ECD04000DB22FCD7C000D822F4D0C00021
604:1025B000E6227800DF22FCD0C000E6221078F4D0BA
605:1025C000C000E622086E84D640001023FCD9C0006B
606:1025D0001023912001807810A21E91200080781095
607:1025E0006420912001801478E4D0C0007523147811
608:1025F000C4D040007523ECD040000823FCD7C000B5
609:102600000323F4D0C0000C2378007523FCD0C00055
610:102610000C23780075231078F4D0400075231B60DC
611:10262000210078007523246096A00100C0001723C4
612:1026300000802660106A146802A248002A23400025
613:102640002A2391200180392000029C60BA789F6083
614:1026500000007810772378007523082CFCD94000FF
615:102660005223006865A040005223046A007084A0D1
616:102670000200400048234C7006A2C0004823046BAF
617:1026800060210423026005A0C00044230269602287
618:10269000026178005E23002D60207810132B086EF5
619:1026A00060210262066978005E230068026965A005
620:1026B00040005A23026178005B23066960210360B1
621:1026C00000006021FCD940006523B4A6FCFF0A6E1F
622:1026D0001068087D28850A7D00801268912001809D
623:1026E000B4D640007523B6A640000A6E7810B31E1B
624:1026F0007F0E7C00086005A70A609120008078109A
625:10270000642091200180B87865A040008A239C60F5
626:10271000BA789F60000078007723B678BA787C009A
627:1027200070797478182884D340009723008012A110
628:1027300048009C23008012A1C800AC2384C37C7A8B
629:102740001A72787A1E72C4DA4000A723847A227241
630:10275000807A267206A084D34000AC23008076786D
631:10276000D2701C7805A04000BA2301801E78C000FA
632:10277000BA236800BA23912080407C003920D323FB
633:102780007800C1233920D923042705A04000D22393
634:1027900000AC68200869106812690A680C6914683E
635:1027A00016690E6838877800C1237C000300090091
636:1027B0000F0015001B00000015001B000000412049
637:1027C00000000C787900E123B3258625E5235E24FB
638:1027D000392074973427107D78000524846086A002
639:1027E0000301C00047241461186005A14000FA23CA
640:1027F000FF86C000162478004724038680A05597E2
641:102800000C6202220080106202227810862030863C
642:102810008EA60F004000D2246C7865A0C000EB2388
643:10282000087802A6C8001624ACD5C00016243A26A3
644:102830007C0082A60300C800D22491200080692079
645:102840000000186884D0C00042241120559704224B
646:10285000C67010820422CA7084D6C000322410824E
647:102860000422DA7010820422DE7085A62080C270F5
648:102870001B68010091208040107884A0CFFF12785F
649:10288000912001803B2000007C001078ADC01278C0
650:102890007800D2243A267810BD25C000E0256C7857
651:1028A00065A0C000EB2391200080107884A0CFFFAA
652:1028B000FF8640005924ADC0127891200180780035
653:1028C000E025392074973427107D78007A248460BD
654:1028D00086A00301C000BB241461186005A140005C
655:1028E0007324FF86C0008B247800BB2480A65597F4
656:1028F0000C6202227810862030868EA61E004000D0
657:10290000D2246C7865A0C0006424087802A6C800B0
658:102910008B24ACD5C0008B243A267C0082A606000E
659:10292000C800D2249120008069200000186884D05B
660:10293000C000B6241120559709204E97A8261C21C7
661:1029400004221A2008811082F0009C2485A6308081
662:10295000C2701B68010091208040107884A0CFFFD6
663:1029600012789120018006A0092075970A203A204C
664:102970007C001078ADC012787800D2243A26781006
665:10298000BD25C000E0256C7865A0C00064249120BE
666:102990000080107884A0CFFFFF864000CD24ADC01A
667:1029A0001278912001807800E02591200080077046
668:1029B00004009479D47002A14800E3244000ED247F
669:1029C000907B02A3C000ED247800E6240280C000C2
670:1029D000ED243A261078ADC01278912001807C0059
671:1029E00084A100FF4000FA240F810C810C81048037
672:1029F0000480078000A17800FD2407810480048002
673:102A00009C7A10A21A72987A06A011A21E72C4D4DF
674:102A100040000D25A47A11A22272A07A11A226727A
675:102A2000A120300003700000092054970A26098174
676:102A30009821042184D040001B253386B0A60200D3
677:102A4000A826A65303861270077001009079947827
678:102A500000800AA1C8002A2506A02820747984A134
679:102A600000FF400039250F810C810C810480048017
680:102A7000078000A178003C250781048004807C79D0
681:102A800008A1787A06A011A2C4D440004825847B0E
682:102A900019A3807C21A40870FCD04000482584A0A4
683:102AA000E00140006D25107D312054973426A87830
684:102AB0000080AA788CD0C0006225077006000470E0
685:102AC00094D0C0005C257800D4246920474F6B2047
686:102AD0000300AC7885A00003AE7806A078007625C8
687:102AE0003020D67591208040967D107DACA5CFFF1B
688:102AF000127D91200180AA78077006003A260370A3
689:102B000001001A711E72C4D54000852522732674F7
690:102B10007C00846086A00301C000A92514611860B0
691:102B200005A1C000A92569200000186884D0C00054
692:102B3000A9250C60C6701060CA70C37020801B6825
693:102B4000010091208040781086206800A8256C78CC
694:102B500065A0C00086257C007810BD25C000E0255A
695:102B60006C7865A0C00086257800E0257810BD252A
696:102B7000C000E0256C7865A0C000B3257800E02592
697:102B8000846086A00301C000D1251860FCC01A60D3
698:102B900086A00400C000D1250478A4D04000D1252F
699:102BA0007810862006A07C007810E625C000D82585
700:102BB00085A001007C007810F525C000DE254120AD
701:102BC0000100107D7C00FF884000E52591208040B9
702:102BD0007C00907B9479D47002A1C000EF2585A37E
703:102BE00000007C004800F32502A37C0002807C00EA
704:102BF0001078ECD040000D267E0E912000807120D0
705:102C00002000047005A0C0000A2608707F0E86A070
706:102C1000080040000D2678005E267F0E78005E26B4
707:102C200084A100FF40001A260F810C810C810480D2
708:102C30000480078000A178001D260781048004809D
709:102C40009C7A987BA47CA07D10A206A019A321A445
710:102C500029A509201800286005A040002E2609207B
711:102C600040007810BB1D40005026A8780080AA784C
712:102C70008CD0C0005E261460FCD0C00040266920C5
713:102C8000404F780042266920804F912000801F68C5
714:102C90000300AB780000AC7885A00003AE789120EB
715:102CA000018078005E26AB7800007810862090794D
716:102CB000947800800AA1C8005B2606A09678D6709A
717:102CC00006A071201000912001807C00FCD7C0007C
718:102CD0006A260920594F78006C260920994F9120C7
719:102CE00000800A207E0FFCD7C00083260920404FB9
720:102CF0000120044F0420ECD040007F267920000101
721:102D00007800872679200002780087260920804FE6
722:102D100079200001042186A00000C000A026FCD775
723:102D2000C00093260920454F780095260920854F3D
724:102D3000042105A0C000A026307884A0C000C000F7
725:102D4000A0261B7845007F0F7C0009200200692027
726:102D5000004F1068ECD0C0000F277120804F792001
727:102D600000012120BF514B780F001920A74484D1C6
728:102D70004000C3261068ECD04000BF26A1202B01E4
729:102D80007800C526A1202B027800C526A1202B01A2
730:102D9000042305A04000D2269A781883AC23188318
731:102DA0009823A65318337800C5269B782000A920C5
732:102DB00010001468E4D04000E226AF780000AF783D
733:102DC0002090F000DA267800E826AF780000AF788F
734:102DD0002080F000E226037000007E018CD10920E3
735:102DE00000004000F126BDC17810E2287F0120706C
736:102DF00084A00F007E001468E4D07F00C00001278B
737:102E000085A040637800032785A0C06206780F780C
738:102E100000924378D800537880000B7808005674ED
739:102E2000537000000981400022277120404F106834
740:102E3000ECD040001C277920000178001E27792063
741:102E400000022120BF4F7800B0267C007E01BCD15B
742:102E5000C00037277E000120044F0420ECD07F0003
743:102E60004000332711200101780039271120010289
744:102E700078003927112001018CA10F00042284A0C1
745:102E8000F0FF05A112207F017810E2287C00FCD31E
746:102E9000C00057277E000120044F0420ECD07F00A3
747:102EA0004000532711200101780059271120010209
748:102EB0007800592711200101A92009000B81F00099
749:102EC0005B278CA1000E042284A0FFF105A1122033
750:102ED0007C00192002000120044F0420ECD04000A7
751:102EE0007327198309200101780075270920010142
752:102EF000A92005001382F000772794A2E0000421A6
753:102F000084A01FFF05A20A201983400088270920FA
754:102F10000102780075277C00FCD3C0009C277E004E
755:102F20000120044F0420ECD07F004000982711209E
756:102F3000010178009E271120010278009E271120B0
757:102F40000101A9200C000B81F000A0278CA100F04A
758:102F5000042284A0FF0F05A112207C00FCD3C00036
759:102F6000BE277E000120044F0420ECD07F004000EB
760:102F7000BA27112002017800C02711200202780030
761:102F8000C02711200201042284A0CFFF05A1122036
762:102F90007C007E0CBCD1C000DA277E000120044FEB
763:102FA0000420ECD07F004000D6276120000178008B
764:102FB000DC27612000027800DC2761200001BCC111
765:102FC0000381038080A020009A60AC62AC637F0C18
766:102FD0007C007E0CBCD1C000FA277E000120044F8B
767:102FE0000420ECD07F004000F6276120000178002B
768:102FF000FC27612000027800FC2761200001BCC191
769:103000000381038080A022009A60A46084A0DFFF77
770:10301000AE607F0C7C007E0CBCD1C0001C287E0002
771:103020000120044F0420ECD07F00400018286120CC
772:10303000000178001E286120000278001E2861200F
773:103040000001BCC10381038080A022009A60A460BB
774:1030500085A02000AE607F0C7C007E0CBCD1C0003F
775:103060003E287E000120044F0420ECD07F00400069
776:103070003A28612000017800402861200002780091
777:10308000402861200001BCC10381038080A0200092
778:103090009A60A4608CA2200040004E28ACC29DA380
779:1030A0000040FCC3B4D3C0005328FDC3AE6210205F
780:1030B000A460AE6318207F0C7C00912000807E0C01
781:1030C0007E0E186805A04000C028FCD14000692889
782:1030D0006120D09678006B286120C0957810C828B0
783:1030E0004000A228A9200101FCD1400078286120DD
784:1030F000D09578007A286120C0947E0C7810C8287A
785:10310000400085287F0C608CF0007A287800C02869
786:103110007F00FCD140008F2882A0D0957120804F85
787:103120007800932882A0C0947120404F7A70767105
788:10313000382101200400667083700F00D471DCC157
789:10314000D671781063267800BC28FCD1C000A9286D
790:103150007120404F7800AB287120804F2060DDC087
791:10316000226076713821002C7E7001200600667086
792:1031700083700F00D471DCC1D671781063260120F2
793:1031800000007800C228012001009120018005A0E4
794:103190007F0E7F0C7C00042C05A04000DF286020FF
795:1031A000106006A3C000DC280C6006A2C000DC286A
796:1031B000146006A1C000DC2806A07800E1280060A9
797:1031C0007800C92885A001007C007E0F7E0E7E015C
798:1031D000BCD1C000FA287920404F7E000120044F66
799:1031E0000420ECD07F004000F62871200001780018
800:1031F000FE28712000027800FE287920804F71207F
801:10320000000120798CA10F00EC70C4D0C000082907
802:103210007F01780023290B810B810B810B817F00BB
803:10322000BCD0C00020297E000120044F0420ECD037
804:103230007F0040001C298DA1000F780022298DA15C
805:10324000000F780022298DA1000804217F0E7F0F36
806:103250007C007E0E0120014F0420ACD0C000A329C9
807:10326000E468ACD04000A32984A00600C000A329D4
808:103270001460FCD0C0003D297120C05378003F2964
809:1032800071204054078084A00F00038003800380D6
810:1032900070AE047084A00A00C000A329087194A134
811:1032A00000FF4000A3298CA1FF0001200A0006A115
812:1032B0004000722901200C0006A14000762901205F
813:1032C000120006A140007A290120140006A1400046
814:1032D0007E290120190006A1400082290120320028
815:1032E00006A14000862978008A2909200C00780070
816:1032F0008C290920120078008C29092014007800FC
817:103300008C290920190078008C29092020007800D8
818:103310008C2909203F0078008C2911200000002111
819:1033200005A20A707120004F0470BCD04000A32990
820:103330001460FCD0C0009E29EA707120404F7800D4
821:10334000A129EE707120804F1F700D007F0E7C0050
822:103350000120054F0420E4D0C000B129047884A0E6
823:103360001FFF85A0406306787C006800B229912089
824:103370000080712000007E00187084D0C000B92940
825:103380007F0071201000CA707F00C670C370028079
826:10339000DB700F08DF700B00712000001B70010054
827:1033A000912080407800CF293C7F587E307C387D4A
828:1033B000A0788E70927596749A769E7794A53F0049
829:1033C000F4D44000E62984A77D00C0001D44781095
830:1033D000B2299CA40F0082A304005000F129A6A3E7
831:1033E0000700C000B2291824078584A00F007900C7
832:1033F000F629713062318D31FF33E8376238173981
833:10340000A839963A853B092A062A422E652FB937F4
834:10341000062A7810B2297C0006A07800132A0878C2
835:103420008DC00A7806A002704E704670D27060702F
836:1034300005A0C000792B647084A0070079001D2AC4
837:10344000252A982AA12AAC2AB72A5F2BC22A982AB1
838:103450003078BCD0C000082AD471BCD1C000082A82
839:10346000B4D1C000752AA47086A001004000082ACB
840:10347000B4706DA0006865A055A09B7810000C6B1F
841:10348000AA7B086845A0106D04686DA05DA086A8A1
842:10349000010040004B2ABC69AA7DAA79C0684DA0F2
843:1034A0001C6E012010007800D32C607005A0C000B5
844:1034B000082A7E0C7E0DB4706DA0006865A055A032
845:1034C0009B7810000C6BAA7B086845A0106D0468FF
846:1034D0006DA05DA086A8010040006E2ABC69AA7D8F
847:1034E000AA79C0684DA01C6E012020007800D32C62
848:1034F0007810B043C000082A1B785B00BC706DA038
849:10350000B4685A789468D678DE789868D278DA7891
850:1035100008788DC00A78BC684270B4C1D671B870A2
851:1035200065A0C0685A7003700200002D4E7080AD17
852:10353000090046707C007810B043C000A02A1B78B8
853:103540004700037004007C007810B043C000AB2A31
854:1035500011200C007810D22A037004007C0078102F
855:10356000B043C000B62A112006007810D22A03709A
856:1035700004007C007810B043C000C12A11200D0067
857:103580007810D22A037004007C007810B043C00089
858:10359000D12A112006007810D22A7C707F7000009A
859:1035A00068204E70037001007C007471FCC10781BB
860:1035B00082789B78100086A20C00C000E12AAA7ACB
861:1035C000012001007800F62A8CA11F008DA1C00007
862:1035D000AA7986A20D004000EF2AAA7A01200200F3
863:1035E0007800F62AAB7820007871AA79AA7A0120AF
864:1035F00004009B786000AA785B7804001B781601B1
865:103600007810D34383700F00D470B4D04000122BD5
866:10361000B4C0D6707E0CB87065A0086084A0EFFBC3
867:103620000A60186001801A607F0C7C00147005A08D
868:10363000C000212BD470B4D04000222BB87006AC4F
869:10364000C000222B7810012B7C007E01A47186A182
870:1036500001004000542B7E0D7E020021112001004C
871:1036600012A2B4706820006806AC40003B2B1182A7
872:103670004000522B7810562B7800302B7E0C002106
873:103680001120010012A2B470682000686020086058
874:1036900084A0EFFB0A60118240004F2B7810562B5C
875:1036A0007800422BA77001007F0C7F027F0D7F0105
876:1036B0007C00E8AD0500AC7006ADC0005E2BA870C4
877:1036C00068207C007810B043C000082A7C70682015
878:1036D000747778104E42502C781092449B781000EA
879:1036E000146884A01F00BDC0AA781C6E4120010090
880:1036F000012004007800D92C7810B043C000082ABB
881:103700009B78100060706820146FD470B4D04000B3
882:10371000932BB4C0D6707E0CB87065A0086084A0EE
883:10372000EFFB0A60186001801A607F0C78104E422F
884:10373000502C78109244246805A04000A42B82A04D
885:1037400006004800A22B7800A42B27680500146807
886:1037500084A01F00BDC0AA783120200041200100B4
887:10376000012003007800D92C8DC2D672C07200A24D
888:1037700015A0547108812AA14800BC2BC071642196
889:103780000465FF85C000D32B56712184C000B72B80
890:10379000D4708CD04000CF2BD07005A0C000CF2BB0
891:1037A000D3700A007C0000227800C12BD4708CC03A
892:1037B000D670D3700000346005A0C000D02B08671D
893:1037C00084A73F074000022CD4D7C000D02B84A789
894:1037D0002100C000D02B84A702004000F32B84A757
895:1037E00004004000D02BBCA7FBFF0A6784A7180287
896:1037F000C000D02B84A700014000022C186005A057
897:10380000C000D02BBCA7FFFE0A6768252368000014
898:103810001C6E84A60E0018634000132C1C6002A3CB
899:103820004800162C4000162C7800D02BFF83C000D7
900:10383000D02B582D502C5671BCD7C0001F2C28708F
901:1038400022603A60BCC70A67C06865A04DA00061ED
902:10385000602A41200100146B9CA31F009DA3C0009F
903:10386000FCD14000332C84D64000352C9CA3BFFFF4
904:10387000A4D640003A2C9DA3200084A60E00C000D0
905:10388000852CA5C70A67002CC668A47786A7010007
906:10389000C000592CD470B4D0C000592C007082A044
907:1038A0000200C800592C3078BCD0C000592C9B783D
908:1038B0001000AA7B7800D12C3987A6775027B077E3
909:1038C000B0A70500AC7006A6C000642CA876B2763E
910:1038D0003A2C38873A2D38873A2838873A23388760
911:1038E0003A253078BCD040007C2C9120008091207B
912:1038F0003D30D47084A03D30912000809020D5AA26
913:1039000000004000842C21840022C000B62B7C00E3
914:10391000DCD14000493E292020009CD6C000922CDA
915:1039200028858CD6C000922C28854088146F0C61A5
916:1039300008818CA1FF00CC7060A1642CFF8C40003A
917:10394000B12C146006A7C0009A2CB8600180BA6040
918:10395000C000952C602A086085A000010A60002242
919:103960002184C000B62B7C00602A0E61BE69002C49
920:10397000C66840880860D5C00A60A47786A70100A1
921:10398000C000592CD470B4D0C000592C007082A053
922:103990000200C800592C3078BCD0C000592C9B784C
923:1039A0001000AA7BAA7DAA79012002007E0018607F
924:1039B00000801A607800DA2C7E0060290461602A99
925:1039C00084A118004000F62C84A110004000E92CCE
926:1039D00078105E40C0001B2D84A108004000F62C2A
927:1039E000A06984A10006C000F62C78103E3F780044
928:1039F0001B2DA06984A1001E4000262D84A1000873
929:103A000040000F2D7E0C6029006085A00020026020
930:103A100004618DA1100006617F0C78105E40C0002B
931:103A20001B2DA06984A100024000172D7810A13F32
932:103A300078001B2D84A10004C000F22CA06984A191
933:103A400000104000262D14698CA100FF0F81781012
934:103A5000E6277F028CA6E00084A660004000332D9C
935:103A600086A06000C000332D8DA100408DA104010F
936:103A7000B6699B7860000028AA781868FDC01A68AB
937:103A8000BCD640004E2DFCC0877000008AA00D00FF
938:103A900050004C2D8AA00C00867101200C000C8077
939:103AA0008A71AA781835403328340080AC8080AF02
940:103AB0002B00A0209B78000080AD0B009820A6531F
941:103AC000A8239828A02586A22000C000862DD470A7
942:103AD000B5C0D670002CBA70002DBE701468FCC042
943:103AE0000780827886A202004000BC2DA47000806E
944:103AF000A670B47498A40500AC7006A3C0007E2D17
945:103B0000A873B67386A210004000082A7F0D7F0CB0
946:103B10007C00007005A0C000642D86A20200C000D9
947:103B2000D62D7810B043C000642D1468FCC0078007
948:103B30008278912000801B785B00B4685A78946882
949:103B4000D678DE789868D278DA7891200180087883
950:103B50008DC00A787E127E0D7E0CD47084A0002762
951:103B600090207F0C7F0D7F1200295A70BC68427034
952:103B700003700200002D4E7080AD09004670307851
953:103B8000BCD04000C82D91203D30D47084A03D3081
954:103B9000912000809020A47005A0C000CD2D7C0055
955:103BA00021844000CC2D5072C07000A215A0780076
956:103BB000B62B86A21000C000072E7810B043C000BC
957:103BC000642D1468FCC0078082781B785B00B468A1
958:103BD0005A789468D678DE789868D278DA78087857
959:103BE0008DC00A78A4700080A670B47490A40500FB
960:103BF000AC7006A2C000FA2DA872B67200295A70E5
961:103C0000BC68427003700200002D4E7080AD090048
962:103C100046707C00B46B9DA300205A7B1468FCC0E6
963:103C200007808278946BD67BDE7B986ED27EDA7EBC
964:103C30001B785B0000295A70027208788DC00A78E0
965:103C4000002305A64000322ED47084A0002786A051
966:103C50000023C0002C2E0920000078002E2E092001
967:103C6000010084A20F007910382E80AD0900467043
968:103C7000002D4E707C00402E3F493F492C493F4962
969:103C8000402E402E402E7810B229087884A0FDFFE7
970:103C90000A787810A5297E0F7920004FAC787F0F25
971:103CA00084D040006A2E647086A00100C000582EA7
972:103CB00066707800412F647086A00500C000682EF1
973:103CC0007C7068201B68040017680000206884A0CE
974:103CD000FF009DC0226867700000A7700000A870F8
975:103CE000B270B6707810012B7E151120040064713B
976:103CF00086A1010040008A2E86A10700C000812E07
977:103D00001F70050078008A2E1F7001006770000088
978:103D1000D470DDC0D67078008C2E67700000012052
979:103D20000A4F042084A0FF0086A0180040009C2EAB
980:103D30001870167005A0C0009C2EA77001007E06AA
981:103D40007810D645A920100039200000781048418D
982:103D5000B8A70001F000A32E7F0600707900AD2EF9
983:103D6000E72EC22EC22EB72EE72EE72EE72EB52E57
984:103D70007810B229607005A04000E72E06ADC000A3
985:103D8000C22E006862707800D42E206884D0C000F3
986:103D9000D02E146F78104E420860D4C00A6078109C
987:103DA000193E7800D42E5C7060200068026084A602
988:103DB000005F1E681868FCD04000DC2E1A6A176885
989:103DC00000002B680000206884A0FF009DC02268CE
990:103DD0007810732084B200044000EF2E2120D0968A
991:103DE0007800F12E2120C0957810462F84B200046F
992:103DF0004000FB2E2120984F7800FD2E2120584FA7
993:103E00007810462FA920010184B200044000092F38
994:103E10002120D09578000B2F2120C0947810462FB8
995:103E20002084F0000B2F84B200034000182F612083
996:103E3000C05478001A2F6120C07421200200A920EC
997:103E400000011061FF814000372F18607E017E0065
998:103E50001120024F0C2202A112207F007F0102A13B
999:103E60005000372F1260C000372F1120044F04225A
1000:103E7000A5C012201B600000E0AC1000F0001E2F57
1001:103E80002184C0001C2F7F15037000004F700000BC
1002:103E90007C007E04042405A04000612F6820006897
1003:103EA0007E001A6A176800002B680000B46884A0BE
1004:103EB000005F1E68206884A0FF009DC02268781003
1005:103EC00073207F007800482F7F04232000007C00AF
1006:103ED00082A2030050006B2F7810B22900237900D2
1007:103EE0006E2F712FFC2F193082A202004000772F15
1008:103EF0007810B22964706770000083700000790048
1009:103F00007E2F862F862F882FC82F553E862FC82FAD
1010:103F1000862F7810B2297477781048417477BCA73F
1011:103F2000008F78104E42186005A04000BF2FFCD7CC
1012:103F3000C0009B2F2120C09578009D2F2120D09676
1013:103F40000920050011201000781034304000BF2FE8
1014:103F50007E15A9200101FCD7C000AF2F2120C094FD
1015:103F60007800B12F2120D0957E0409200500112072
1016:103F70001000781034307F044000BE2F2084F00001
1017:103F8000B12F7F15388784A71F00C0008E2F7800BF
1018:103F90000C2A78000C2A747778104E42186005A01D
1019:103FA0004000FA2FFCD7C000D62F2120C095780002
1020:103FB000D82F2120D096092005001120200078104C
1021:103FC00034304000FA2F7E15A9200101FCD7C00033
1022:103FD000EA2F2120C0947800EC2F2120D0957E0478
1023:103FE0000920050011202000781034307F044000A3
1024:103FF000F92F2084F000EC2F7F1578000C2A002286
1025:104000007900FF2F0230043004307810B2290920E3
1026:104010001200647086A0020040000D3009200E00DE
1027:104020001868FCD0400012301A6967700000D47024
1028:10403000DDC0D67078005D43002279001C3021304D
1029:1040400004301F307810B2297810D645007086A051
1030:104050000200C000C73D7810363E086084A0EFFB28
1031:104060000A607810B83D4000C73D78000C2A04244F
1032:1040700005A040006D306820042D7E00146806A75E
1033:1040800040004330202D7F00780035307F00222013
1034:104090001A69176800002B680000B46884A0005FEC
1035:1040A0001E68206884A0FF0005A222687810732093
1036:1040B0002120024F1C2419832223106001801260EA
1037:1040C000C00064302120044F0424A5C022200860D1
1038:1040D00084A0EFF90A607810222B7810363E7C001D
1039:1040E00085A0010078006C300023790074307930AD
1040:1040F0007730F9307810B229E47805A0D000AF30DD
1041:1041000008327E000120044F0420ECD07F004000E4
1042:104110008A308CA1000378008C308CA10004400010
1043:1041200092301800082A780094302800082A0820C5
1044:1041300084A03000C0009B307800B937EC7884A0B0
1045:10414000030040009930002184A007007900A530C9
1046:10415000D930E330CE30AD30A543A543AD30EE309D
1047:104160007810B229007086A00400C000C9306470C5
1048:1041700086A00200C000BF301120020019200000FC
1049:104180007800652F647086A006004000B930647026
1050:1041900086A004004000B930E479012003007800D3
1051:1041A00043341868FCD04000D4301B681D007810E0
1052:1041B00018411B7864007C001868FCD04000DF3098
1053:1041C0001B681D0078101841780081431868FCD0E6
1054:1041D0004000E9301B681D00781018411B78F8007A
1055:1041E0007C001868FCD04000F4301B681D0078107B
1056:1041F00018411B78C8007C0084A50F00C00018314E
1057:104200007810A5290070790002310C2A0A310C318E
1058:10421000C73DC73DC73D0A310A317810B229781031
1059:10422000363E086084A0EFFB0A607810B83D40007D
1060:10423000C73D78000C2AE47805A0D000AF300832E2
1061:104240007E000120044F0420ECD07F004000293183
1062:104250008CA1000378002B318CA100044000313187
1063:104260001800AF30780033312800AF30082084A028
1064:104270003000C0003B311B785B007C00EC7884A0F0
1065:10428000030040003831002184A107007900453146
1066:10429000543158314F314D31A543A5434D319F43E2
1067:1042A0007810B229781020411B7864007C007810C7
1068:1042B000204178008143781020411B78F8007C0071
1069:1042C000781020411B78C8007C00002379006531FC
1070:1042D0006A3168316C317810B2297800A8391B68CE
1071:1042E0001600A3780000E47984A130004000A839CA
1072:1042F000EC7884A003004000A83984A100014000AC
1073:10430000703184A10700790082318A315831CE3072
1074:104310005D43A543A5435D439F43781069437C00FB
1075:1043200082A20500500093317810B2290023790051
1076:1043300096319931C933D433002279009C31B6319A
1077:10434000A331B631A131AC337810B2299B78180073
1078:10435000A87884A0FF0082A02000480007418AA01E
1079:104360000400C80007417900B23107410741074105
1080:10437000B1409B781800A87984A180004000C73123
1081:1043800078000741007005A0C000BD311120040075
1082:104390007800933B84A1FF008AA01000C800074169
1083:1043A0007900CF31E131DF31F631FA31CD320741D9
1084:1043B0000741CF3207410741A833A83307410741DE
1085:1043C0000741AA337810B229E4D64000EC3101202D
1086:1043D0000003008000803A781B78C3007C001868D6
1087:1043E000FCD04000F4311B681D007800E4317800F7
1088:1043F0005D431B681D00780011412069226984A675
1089:104400000018C0005F32206884D0C0006532186890
1090:1044100086A00800C0000B321B680000D4D6400004
1091:10442000CA32BCD640004B3287700000186884A0A6
1092:104430003F008AA00D0050004B328AA00C0086710C
1093:1044400001200C000C808A719B786100AA787E158F
1094:104450007E137E147E0108328CA1000340003D32A1
1095:104460007E000120044F0420ECD07F004000393250
1096:10447000A1202B0178003F32A1202B0278003F328F
1097:10448000A1202B017F019B7800000080AC8080ADD3
1098:104490000B009820A6537F147F137F15386005A06A
1099:1044A000C0005A321C6884A00E00400011417810F0
1100:1044B00027412B78083078005C3201803A601B7805
1101:1044C00067007C00E4D6400065321B7879007C00F0
1102:1044D00084A660004000C732DCD64000C732FCD65C
1103:1044E000C000713278008832FCC65A7EB66EDC7A23
1104:1044F000D879D0781B80C8007B32008084A03F0030
1105:1045000008A191A20000986B002102A3B268946BED
1106:10451000002203A3AE68F4D640008E32F4C65A7E61
1107:10452000B66E007086A00300C0009C327E0078103A
1108:10453000D64578103F497F001B7876007C0006A0A6
1109:104540007810444AB06AAC69986C946B002205A15B
1110:104550004000AB32002222A400211BA3AA6CD27C13
1111:10456000DA7CA66BD67BDE7B002305A4C000BB32C1
1112:10457000F5C65A7EB66E1B7876007C001B787600F6
1113:10458000002215A1C000C43278103F497C00781089
1114:1045900077497C001B7879007C001B7867007C00E1
1115:1045A0007810B22978001B332069C4D14000E4326E
1116:1045B000C4C122697E0C587060200060E4C00260B3
1117:1045C000046084A0F5FF06607F0C78000F33CCD127
1118:1045D00040000F33CCC122697E0C5870602000600F
1119:1045E000ECC002600460A4C006600820482C7F0C68
1120:1045F0009CD140000F3378104A4278103E3FFF882C
1121:1046000040000F339B7860000028AA78587E95C63A
1122:104610005A7ED4D6C0000C331B7864007C001B7813
1123:1046200078007C00587ED4D6C00016331B78670013
1124:104630007C001B7879007C0078000C411920000078
1125:1046400090798CA10700C0002933206884A0000164
1126:1046500040001933092008009B781000A87894A026
1127:10466000FF0086A20100C00045330023A87C00A4FF
1128:10467000182002A140003D3348003D3378003F330D
1129:104680007800D132A824A87AF0003F3378002B3389
1130:1046900084A2F00086A02000C000993318831883FC
1131:1046A000002302A14000553348005533780096336B
1132:1046B00086A22300400019331C6884A0F1FF1E6805
1133:1046C000587E84A6F1FFA5C030205A7E0860A5C0A0
1134:1046D0000A607E0C5870602004600820482C7F0C13
1135:1046E000A4D14000763378104A4278105E407800BA
1136:1046F00084337E0C5870602004600820482C7F0CA6
1137:104700009CD140000F3378104A4278103E3FFF881A
1138:1047100040000F339B7860000028AA7895C65A7E27
1139:10472000D4D6C00093331B7864007C001B787800DB
1140:104730007C00A87A78002B331883002302A1400064
1141:10474000A2334800A23378002B3384A28000C0003B
1142:10475000114178000C4178001141780007415870F0
1143:104760004DA09B781800A87884A0FF008EA00100BF
1144:104770004000B9337810B229A87A94A2FF00A87833
1145:1047800084A0FF008AA00400C80007417900C53357
1146:1047900007418F3E0741064082A20000C000CF3390
1147:1047A0007810B229781018411B7878007C0082A21A
1148:1047B0000300C000DA337810B229FCD4C000FA3309
1149:1047C000647005A04000E3337810B229146F767747
1150:1047D000BCA7008F78104E42086085A021000A60B7
1151:1047E000388784A71F00C000E73378101C4167702A
1152:1047F00002001F7009007800FC3378102B411B78F1
1153:1048000078007C0082A20400500005347810B229A0
1154:104810000023790008340B34CB350E3686A2030012
1155:10482000400043340072D87CDC7DD07FD471BCD191
1156:10483000C0003B34B4D140003B34687884A0FF0012
1157:10484000C0003B3482A20200C8003B347E0D3B789E
1158:1048500000831B784C00BC706DA0B4685A789468D3
1159:10486000D678DE789868D278DA78B4C1D6710370D9
1160:1048700030007F0D01200000780047343B780013A2
1161:104880001B784A0001200000780047340072D87C71
1162:10489000DC7DD07F4A70A068ECD040004F340860C7
1163:1048A0008DC00A6084A20F0079005334AB356034A8
1164:1048B0005D3411379D370C2A5B345B347810B22994
1165:1048C0000860D4C00A60E4D640006834487086A00E
1166:1048D0001400C00088347810D645092000001868FC
1167:1048E000FCD040007134487086A01400400082342F
1168:1048F000186886A00800C000633558789CD0400036
1169:1049000063352068ACD0400063351B681400092073
1170:1049100002007800C73468788CA0FF004000C734DC
1171:1049200086A10800C0009E340860A4C00A60781008
1172:10493000B83D4000C7347810363E7810D645780030
1173:10494000AF3486A12800C000C734186005A040001D
1174:1049500091340180400091340180400091341E6008
1175:1049600078009134206884D040000C2A84C02268EA
1176:104970007810132B5C707E0C6020006802607F0C46
1177:104980000460026805A0002DC000C4340260066007
1178:1049900078000C2A7E01FF81C0001135007086A0CE
1179:1049A000300040001135D471BCD1C0001135B4D1F4
1180:1049B000C000F834607005A0C0001135A47086A056
1181:1049C000010040001135037000007E047E057E0763
1182:1049D0007E067E0C7E0D7810352A7F0D7F0C7F06BB
1183:1049E0007F077F057F04D471B4D1C00011350370F7
1184:1049F0004000780011357810B043C00011351B78A5
1185:104A00005B007E0DBC706DA0B4685A789468D6784F
1186:104A1000DE789868D278DA78B4C1D6710370300045
1187:104A200008788DC00A787F0D781048367F01FF81A5
1188:104A30004000633584A600DF1E682B680000146FF9
1189:104A400086A10200C0006435186886A01400C0006A
1190:104A50002D350820E4D640002D3568788CA0FF0065
1191:104A60007810012B7810222B2068DCD0C000643530
1192:104A7000178794A20F0013821382138284B200035B
1193:104A80004000433590A2C0537800453590A2405471
1194:104A900090A200001C22C4D3C0004D3578005335CD
1195:104AA0001082042285A0180012201182D4D3400065
1196:104AB0005E35A068C4D0C0005E357810C23678007C
1197:104AC0000C2A08608DC00A60780064352A6916696E
1198:104AD0001868FCD040006B3548701A688CA600DF5F
1199:104AE0001E691064FF84400080350920024F0421B4
1200:104AF00001800A2021841264C00080352120044FE7
1201:104B00000424A5C02220186005A04000883501803B
1202:104B10001A60C0008B350860A4C00A60206884D089
1203:104B2000C0009735006805A0C0009435026006609B
1204:104B300078009B355C706020006802606120004F47
1205:104B400087680301082D6B200000686005A06A617A
1206:104B50004000AA35022D7800AB356E61007286A246
1207:104B600030004000BB3586A24000C0000C2A037014
1208:104B700002004C706820C46860207C000370020052
1209:104B8000BC706DA0BC684270B87065A0C0685A70F7
1210:104B9000002D4E7080AD090046707C0082A204009A
1211:104BA0004800D1357810B22900227900D435D835A3
1212:104BB000E935F635E93586A500134000E93586A5C7
1213:104BC0000083C000CF3503700000186001801A60B8
1214:104BD000086084A0EFFB0A60007086A0050040001A
1215:104BE000F335781018411B7878007C001B78790029
1216:104BF0007C0090780780018084A0070080A01800C6
1217:104C00009A78A8798CA1FF0086A1030040000B369A
1218:104C100086A1000040000B36780007411B78790020
1219:104C20007C00206895C02268FF82C000183678108A
1220:104C3000184178001F36118240001D367810B229C5
1221:104C400078102B411B7878007C007810D3433078A3
1222:104C500084A0C000C00045367E0108327E000120DD
1223:104C6000044F0420ECD07F00400037368CA10003B5
1224:104C7000780039368CA100047F01400040361800CE
1225:104C8000453678004236280045361A7906A07C0061
1226:104C900085A001007C0084A66000C00052362F6809
1227:104CA0000000336800007800C136DCD6C0006A36E8
1228:104CB000B468DCD0C0006A369869946A2E69326A9A
1229:104CC000487005A0C0006736002205A14000D64507
1230:104CD0004B7015007800D6457C00ACD6400090366D
1231:104CE000F4D6400076362F68000033680000780064
1232:104CF000D645B46884A0004035A6F4D6C00070360E
1233:104D0000487005A0C00083364B701500DCD6C0008B
1234:104D10008C36B468DCD040008C36A86CA46D2E6C48
1235:104D2000326D7800D645F4D6400099362F680000E1
1236:104D3000336800007800D645B46884A0004835A6E2
1237:104D4000F4D6C0009336487005A0C000A6364B705C
1238:104D50001500082410250027FB80C800AD36008010
1239:104D600084A03F0008A191A200002E69326A0021B0
1240:104D700005A2C000BA367800D645007086A00600AD
1241:104D80004000C1367800D6457C0046690860CDC039
1242:104D9000CCD34000C9368DC00A6018683A681B68D9
1243:104DA00006008F68000093680000306A2C693E6A34
1244:104DB00042692F6803003368000037682000976855
1245:104DC00000009B68200000707900E3360C2AF5365D
1246:104DD000ED36EB36EB36EB36EB36EB367810B229A8
1247:104DE000206884D0C000F5367810193E7800FB3674
1248:104DF0005C70502C602000680260602A08328CA130
1249:104E00000003400004372120584F78000637212046
1250:104E1000984F042405A040000D3720207800063765
1251:104E2000222D6B2000007C007810203E7810363E4A
1252:104E30000860CCC00A602B6800009B780E00146FDD
1253:104E400038691A694469166908328CA10003400068
1254:104E50002A370920000078002C370920010078103B
1255:104E6000814ADCD6400034371C69EDC11E691868E0
1256:104E7000FCD04000433768788CA0FF0040004137E9
1257:104E80001B681E00780043371B68000084B20003D3
1258:104E9000C0004B372120984F78004D372120584FC4
1259:104EA000006822203C6A4069326A2E69C06860202E
1260:104EB0000060A4D040008D3741202100492005002A
1261:104EC000512020007E0D7E0F7E157E147920004F2C
1262:104ED0007810461E7F147F157F0FCC70102009209C
1263:104EE00001017E0204226DA040007D37146806A7F0
1264:104EF00040007A370068780070372068D5C0226893
1265:104F00007F0210820981C0006E377F0D6770030039
1266:104F10007F700000767783700F00D471DCC1D6718A
1267:104F2000186886A00200C0009937176800002B6837
1268:104F300000001C68ECC01E687810732078000C2AF2
1269:104F4000D87CDC7DD07F781048362B6800009B78B9
1270:104F50000E00146F7810D7438CA0FF0016691868F4
1271:104F6000FCD04000B23748701A688CA600DF1E697A
1272:104F70006770000078000C2A007005A0C000BF37E1
1273:104F800078000C2A06A07810D6452069ACD1C00064
1274:104F9000C8371B6814008CA600DF1E692B68000050
1275:104FA000206884A0FF00226800707900D4370C2AA2
1276:104FB000DE37DE37E137E137E137DC37DC377810D1
1277:104FC000B2291868780043340860A4C00A601768E2
1278:104FD00000007800DE3D00237900EB37EE37F03734
1279:104FE00060387810B229FCD6C000473800700DA098
1280:104FF0007900F7370C2A0138013831380138443844
1281:10500000FF37FF377810B22984A66000400031389E
1282:1050100086A06000C0002E38ACC6F4C6EDC65A7E2D
1283:10502000B66E1C68ACC01E6886A102004000203825
1284:105030007810D645AC69B06815A1400020387810CA
1285:1050400077497800223878103F491B787900D4716D
1286:10505000B4D1C000082AA47086A00100C000522A62
1287:105060007C00ECD640000B381868FCD04000443877
1288:10507000F4D6C0003E381B6815001B787900780014
1289:10508000082A1B6807002F680000336800007810AA
1290:1050900069437C00FCC65A7EDC7AD879D0781B80C4
1291:1050A000C8005038008084A03F0008A191A20000F1
1292:1050B000986B002102A3B268946B002203A3AE6830
1293:1050C0001B7879007C007810B229002379006538BC
1294:1050D0006A388F38EF387810B229007079006D384F
1295:1050E000753877388038753875387538753875384B
1296:1050F0007810B229AC69B06815A1400080387810EA
1297:1051000077497800823878103F491C68B4C01E681F
1298:10511000D470B4D0C000082AA47086A00100C000DA
1299:10512000522A7C00FCD6C000DF3800700DA0790048
1300:1051300096380C2AA638A038D638A638DC389E38DF
1301:105140009E387810B2299468D678DE789868D2783C
1302:10515000DA7884A660004000D63886A06000C000DF
1303:10516000D338B4A6BFBFEDC65A7EB66E86A1020084
1304:105170004000C2387810D645AC69B06815A140002F
1305:10518000C238781077497800C43878103F491B78C6
1306:1051900079001C68B4C01E68D471B4D1C000082A5C
1307:1051A000A47086A00100C000522A7C00ECD640000A
1308:1051B000B0381868FCD04000DC381B6807001B784A
1309:1051C000F9007C00FCC65A7EDC7AD879986B002105
1310:1051D00002A3B268946B002203A3AE68D2791B7855
1311:1051E00079007C00DCD64000F8382B7809301B7839
1312:1051F00079007800082A8478ACC08678E47884A0A6
1313:105200000800C0000B3984A4000240000539F5C62F
1314:10521000DDC65A7E1B7879007800082A206895C080
1315:1052200022687810E242DDC6781018411B787800B9
1316:105230007800082A002379001A391D391F392139CD
1317:105240007810B22978001141D4D6C0005C39E479D5
1318:10525000ACD140002F39EC7884A0030040002F39F6
1319:105260002B7809309B786000AB78000084A6FBFFA8
1320:105270005A78E479ACD140003F39EC7884A003003F
1321:10528000C00058390120044F0420E4D0C000543934
1322:105290002068C4D0400054397E0C587060200460EF
1323:1052A0009DC00660086084A0FF000A607F0C01209A
1324:1052B00014007800433484A1070079009239907A71
1325:1052C00094A207009B786000A879FF814000903984
1326:1052D0009B781000A87B84A30100C0008339A87BC1
1327:1052E000A87B86A30100C00076390920F7FF78006B
1328:1052F0007C3986A30300C00083390920EFFF7E0CB0
1329:1053000058706020046004A106607F0C9B786000E8
1330:10531000AB78000084A6FBFF5A782B78093020690F
1331:105320008CA1FFFC226978005D43D930E3309C39C1
1332:10533000A2399A399A395D435D437810B2292069C0
1333:105340008CA1FFFC22697800634320698CA1FFFCDB
1334:10535000226978005D43E47984A130004000B239CD
1335:10536000EC7884A00300C000E639007086A0040039
1336:10537000C000CC39647086A00200C000C239112080
1337:105380000200192000007800652F647086A00600D6
1338:105390004000BC39647086A004004000BC39007035
1339:1053A00086A000004000082A206984A12004400053
1340:1053B000DB39D4C1226918687800433418688EA09C
1341:1053C00002004000E439FDC01A6801201400780092
1342:1053D000433484A107007900EA395D435D43F23923
1343:1053E0005D43A543A5435D435D43BCD64000343ACD
1344:1053F0008471FF814000343A82A10D00D000013A4F
1345:10540000877000007800063A82A10C00867009209F
1346:105410000C009B786100AA797E157E137E1488703B
1347:10542000148110A28A7280A00B0000AD982084B273
1348:1054300000034000283A7E000120044F0420ECD0F5
1349:105440007F004000243AA1202B0178002A3AA120B5
1350:105450002B0278002A3AA1202B019B7800000881BA
1351:10546000AC81A6537F147F137F1578006343D4D695
1352:10547000C000883A206884D0400063438CA6600056
1353:1054800084A660004000463A86A06000C000463A0C
1354:10549000F5C194C15A79B6699B786000AB78000079
1355:1054A0009B7861001868FDC01A68AA7808800C8192
1356:1054B00040004F3E8CA1F800C0004F3E7E157E1389
1357:1054C0007E147E0108328CA100034000743A7E00F5
1358:1054D0000120044F0420ECD07F004000703AA1204E
1359:1054E0002B017800763AA1202B027800763AA12091
1360:1054F0002B017F019B7800000080AC8080AD0B0009
1361:105500009820A6537F147F137F151468FCC0078072
1362:105510008278780063431868FCD040008E3A1B689C
1363:1055200008002068ADC02268781020411B78EA008E
1364:105530007C0000237900993A9E3A763B9C3A781099
1365:10554000B229D87CDC7DD07FFF82C000C73A0072D0
1366:1055500086A2030040001034D471BCD1C000CA3A06
1367:10556000B4D14000CA3A7E0D3B7800881B784C00CD
1368:10557000BC706DA0B468A5C05A789468D678DE78FF
1369:105580009868D278DA78B4C1D671037030007F0D94
1370:105590007800CE3A00727800CE3A3B7800181B783B
1371:1055A0004A0084A20F007900D23A613B103BDC3AFA
1372:1055B0003F34DA3A613BDA3ADA3A7810B2291C68B9
1373:1055C000ECD04000E33A08608DC00A60206985C1D4
1374:1055D00022690068066005A0C000EC3A026008601D
1375:1055E000D4C00A601C6884A00E00C000003B84B2D6
1376:1055F00000034000FC3A0920C0957800053B0920D3
1377:10560000D0967800053B3070BA684071CC7008A124
1378:10561000042102680A2D5E71DCD6C000103BFCC676
1379:10562000B66E7800613BB66E84A66000C0001A3B7F
1380:1056300084A6FF7FB6687800613BDCD6C000283BBB
1381:1056400084A6FF7FB6689468A6689868AA687810F0
1382:10565000D6457800613BACD64000343B06A07810BC
1383:10566000D64508241025AA69A66A7800443B082478
1384:10567000102500271B80C8003B3B008084A03F0012
1385:1056800008A191A20000AA69A66A7810D645FCD6A6
1386:105690004000613B84A6FF7FB66810250824ACD685
1387:1056A000C000593B00271B80C800543B008084A0E9
1388:1056B0003F0008A191A20000986B002102A3B268EC
1389:1056C000946B002203A3AE68007086A03000C00077
1390:1056D0000C2A03700200BC706DA0BC684270B870E8
1391:1056E00065A0C0685A70002D4E7080AD09004670EC
1392:1056F0007C0086A50088C000833B03700000186012
1393:1057000001801A60086084A0EFFB0A6078001141F4
1394:105710004770000082A2060050008D3B7810B2292D
1395:1057200000237900903B933BA53BB13B00227900DD
1396:10573000963B9C3B11419E3B9C3BEB3B403C781095
1397:10574000B229807A94A2000F7810CA3C78000741F1
1398:105750007810C23B7900A93B1141AF3BAF3BEB3B1B
1399:10576000AF3B11417810B2297810C23B7900B53BAC
1400:10577000BD3BBB3BBB3BBD3BBB3BBD3B7810B229FC
1401:1057800078102B411B7878007C00007086A0020006
1402:10579000C000D33B7810363E7800CD3B7810D6451C
1403:1057A000086084A0EFFB0A607800D83B007086A0F8
1404:1057B00003004000CB3B0370050084B200034000AF
1405:1057C000E23B0120E0967800E43B0120129768203C
1406:1057D0004E7080AD0900467000227C00007086A0EB
1407:1057E0000200C000FD3BD470B5C0D670002CBA706A
1408:1057F000002DBE707800023C7810D6457800023C3F
1409:10580000007086A003004000F93B03700100807A1D
1410:1058100094A2000F9B781800A87C84A41F0015A2F6
1411:105820006920C09584B20003C000163CFDC2692007
1412:10583000D096042D082D5E716DA04000233C1468A5
1413:1058400006A24000253C00687800173C7810CA3C4E
1414:10585000B46E5A7E206984A1000C4000F43C647050
1415:1058600086A00600C000373C747006A2C000373C1A
1416:1058700066707E701B680500ADC1D4C122697810C6
1417:1058800020417800F43C007286A20200C000523C25
1418:10589000D470B5C0D670002CBA70002DBE707800E0
1419:1058A000563C7810D6457800563C86A2030040004E
1420:1058B0004E3C03700100807A94A2000F9B78180080
1421:1058C000A87C84A41F0015A284B20003C000663C1B
1422:1058D000FDC2A879A8798CA1FF001821CC7068A11D
1423:1058E000042D082D5E716DA040007A3C146806A25C
1424:1058F0004000A33C006878006E3C0370050084B251
1425:1059000000034000843C0120E0967800863C0120A2
1426:10591000129768204E707E15A920320003200000E7
1427:105920000080F0008B3C7F1584B200034000983C5F
1428:10593000FCC27800993CFDC2166A80AD0900467031
1429:10594000B76800072368000827680300B46E206961
1430:1059500084A1000C4000F43CDCD04000BF3C6470EB
1431:1059600086A00400C000BB3C747006A2C000BB3C13
1432:10597000787006A3C000BB3C66707E70781027412B
1433:105980007800F43C1B680500ADC1D4C122697810D1
1434:1059900020417F7000007800F43C0370050084B261
1435:1059A00000034000D43C0120E0967800D63C012062
1436:1059B000129768204E707E15A92032000320000047
1437:1059C0000080F000DB3C7F1584B200034000E83C1F
1438:1059D000FCC27800E93CFDC2166A80AD0900467041
1439:1059E000B768000723680008276803007C00ECC63E
1440:1059F000ACA660004000463D986B946CAC69B06802
1441:105A000005A1C000213DD27BDA7BD67CDE7C86A559
1442:105A1000600040004B3DF4D6C0000C3DEDC6B4A67E
1443:105A2000FFB75A7E092079009CD64000193D092015
1444:105A300078001920000020231A79ECD64000563D4A
1445:105A400078103F497800563DB0681AA3002123A47E
1446:105A5000002405A340004D3DD27BDA7BD67CDE7C62
1447:105A6000B068F4D6C000323DEDC6F4C65A7E1120AF
1448:105A700079009CD640003E3D11207800192000009E
1449:105A800020231A7AECD64000563D781077497800EA
1450:105A9000563D19200000202378004D3DB4A6FFB7E5
1451:105AA0005A7E092079009CD64000553D0920780097
1452:105AB0001A79C0685A70002D4E70C4686020D47185
1453:105AC0000120014F0420C4D0C000AB3DD8702DA0F0
1454:105AD0004000843DBCD140009E3D807A94A2000FDE
1455:105AE000DC7006A24000753DE07804A5C000AB3D27
1456:105AF000DA70BCC1D6717800AB3D312001002C8535
1457:105B00004800833D3386108278007C3D7C00E07D38
1458:105B100094A500FF4000913D112008002F857810CA
1459:105B20007A3D37867800933D78107A3D17828078E9
1460:105B300084A0000F06A24000AB3DDE72DA7678004A
1461:105B4000AB3D807A94A2000FDC7036A240009B3DF2
1462:105B5000E07834A540009B3DBDC1D671B4D1C000F2
1463:105B6000082A002305A44000082AA47086A001008A
1464:105B7000C000522A7C00206005A04000C63D018084
1465:105B80002260086085A008000A600F7000012C7078
1466:105B900026607C0006A07810D645007086A0020022
1467:105BA0004000D43D647086A00500C000DE3D2B6837
1468:105BB0000000176800001B680100236840001F6890
1469:105BC0000001007084A00F007900E33D0C2AF33D32
1470:105BD000ED3D153EFD3D0C2AEB3DEB3D7810B22925
1471:105BE0007810203E7810193E7800F93D7810203E5C
1472:105BF0005C706020006802607810732078000C2AC6
1473:105C0000647067700000837000007900043E113EEC
1474:105C1000113E0C3E0C3E0C3E113E0C3E113ED47724
1475:105C2000DDC7D67779007E2F6770000078000C2AD8
1476:105C30001B68000078001137006805A0C0001E3EF8
1477:105C4000026006607C001064FF844000323E092040
1478:105C5000024F042101800A2021841264C000323ED8
1479:105C60002120044F0424A5C022200860A4C00A609B
1480:105C70007C00186005A040003C3E01801A607C005A
1481:105C80007810D3431B68180078007D3E7810D3430A
1482:105C90001B68190078007D3E7810D3431B681A00FA
1483:105CA00078007D3E7810D3431B68030078007D3E6A
1484:105CB000747778104E4278718CA1FF00103294A254
1485:105CC00000034000643EE8A1C0947800663EE8A16D
1486:105CD000D095042D082D682005A0C0006F3E7E7071
1487:105CE00078000C2A1468747206A24000773E00689F
1488:105CF0007800673E00680A201B6805007F7000007E
1489:105D00007810203E206884D0C000853E7810193E6F
1490:105D10007810363E1F68000023682000781073203A
1491:105D200078000C2A82A20300C0000741A87DACA520
1492:105D3000FF005A7EA87EB4A6FF002069BDC122697B
1493:105D4000C4D14000EA3EC4C12269B4A6FF004000AD
1494:105D5000D73E82A60C004800AE3E4000AE3E312049
1495:105D60000C00002586A00A004000B53E2B852B853F
1496:105D70007810E0414000BD3E7810BC3F7800E03E26
1497:105D800078109B417E0C6029046084A0F5FF0660BA
1498:105D90007810F23F7F0C2069C5C12269587E95C6F4
1499:105DA0005A7ED4D6C000D43E1B7864007C001B7899
1500:105DB00078007C007E0C6029046084A0F5FF0660FA
1501:105DC0007810F23F7F0C587ED4D6C000E73E1B7897
1502:105DD00067007C001B7879007C007E0C5870602086
1503:105DE0000061E4D14000333F0862178294A2FF00B3
1504:105DF00082A20C004800FD3E4000FD3E11200C0038
1505:105E0000002602A2C800023F3022086294A2FF00CE
1506:105E10000120054F0420E4D0C000173FEC78E4D007
1507:105E20004000173F82A20A00C8001D3F11200A004F
1508:105E300078001D3F82A20C00C8001D3F11200C00FD
1509:105E4000002202A5C800223F282278109F41002589
1510:105E500086A00A0040002B3F2B852B857810E0415F
1511:105E60004000333F7810BC3F7800373F78109B41AB
1512:105E70007810F23F587895C05A787F0C1B787800DC
1513:105E80007C007E0C60290060E4D0C000583FB4D094
1514:105E9000C000523F106084A00F00C000523F046158
1515:105EA0008CA1F5FF06617F0C7C00112032001920C7
1516:105EB00000007800833FA068CCD0C000523F086249
1517:105EC00094A2FF000120054F0420E4D0C000713FE0
1518:105ED000EC78E4D04000713F82A20B00C800713F13
1519:105EE00011200A007800773F82A20C00C800773F9B
1520:105EF00011200C0008631F839CA3FF0082A30C00E9
1521:105F00004800833F4000833F19200C00AB7801001C
1522:105F1000AB780300AB780100AA7AAA7BC0A8050081
1523:105F20002068C5C02268D470B4D040009F3FB4C080
1524:105F3000D670B87065A0086084A0EFFB0A60186096
1525:105F400001801A607F0C7C007E0C602904618CA1AA
1526:105F5000F5FF066111203200192000007800AD3FE6
1527:105F6000AB780100AB780300AB780100AA7AAA7B7A
1528:105F7000C0A805002068C5C022687F0C7C007E0C8C
1529:105F80005871602118208CA020004000C53FACC093
1530:105F9000082084A0F0FF35A6867E18609A78AE7E31
1531:105FA0001266A47884A0F0FF8CA10F0005A1F4C0B4
1532:105FB0009CA320004000DB3F85A00040FCC0B4D083
1533:105FC000C000E03FFDC0A67816608A78B4A60F0036
1534:105FD00037860482048084A0FF0005A60E6004605A
1535:105FE00084A0F5FF06607F0C7C007E0C587060205A
1536:105FF00018609A78A47884A0F0FFA678126084785C
1537:1060000084A0F0FF86780C6084A0FF000E607F0CF7
1538:106010007C0082A20200C0000741A87A2069BDC1AD
1539:106020002269CCD140004140CCC1226994A2FF003A
1540:1060300082A20200C8000741781094407810F23F15
1541:1060400080A901000C2078104A4278103E3FFF885A
1542:10605000400037409B7860000028AA78587E95C69B
1543:106060005A7ED4D6C00034401B7864007C001B7874
1544:1060700078007C00587ED4D6C0003E401B78670074
1545:106080007C001B7879007C0082A20200C800494095
1546:1060900084A2010040005240587188A100000C21E8
1547:1060A000ECD1C00052401120000078107C417810E3
1548:1060B00094407810F23F587895C05A781B78780051
1549:1060C0007C007E0C7E026029006011200100ECD073
1550:1060D000C0007540BCD0C00073401460B4D0C00094
1551:1060E0007340A4C1066106A0780091401120000011
1552:1060F000AB780100AB780200AB780300AA7AC0A8A5
1553:106100000400D470B4D040008D40B4C0D670B870D4
1554:1061100065A0086084A0EFFB0A60186001801A6027
1555:10612000206885A0000222687F027F0C7C007E0C24
1556:1061300058706020FF8240009C4011204000186091
1557:1061400080A002009A78A47884A0BFFF05A2FCC0BA
1558:10615000B4D0C000A940FDC0A67816608A7804605B
1559:10616000A4C006607F0C7C007E00007086A0030047
1560:106170004000BA407F007800BD407F0078000441B5
1561:10618000ACD640000441887884A04000400004411F
1562:10619000B87B84A33F001B83C800CC40008005A0CF
1563:1061A0004000E1401B83C800D54001804000014110
1564:1061B000F4D64000E140B8781B80C800DD40008084
1565:1061C00084A03F00C0000141F4C65A7ED879DC7A31
1566:1061D0000120010008A1C800EC4091A20000D27982
1567:1061E000DA79D67ADE7A7810444A1B78760084B25F
1568:1061F00000034000FC40012000007800FE40012028
1569:1062000001007810CE487C001B7876007C001B785B
1570:1062100079007C0078102F411B7878007C00781082
1571:1062200018411B7878007C00276802007810204114
1572:106230001B7878007C0001200500780031410120A6
1573:106240000C00780031412068D5C02268012006008A
1574:106250007800314101200D00780031410120090012
1575:1062600078003141012007009B787E00AA789DC606
1576:106270005A7ED470B4D040004741B4C0D6707E0C72
1577:10628000B87065A0086084A0EFFB0A601860018008
1578:106290001A607F0C7C007E073F87BCA70F003B87FE
1579:1062A0003B8703877E018CB2000340005841E0A089
1580:1062B000C05378005A41E0A040547F01B8A72000A5
1581:1062C0009A7FA47984A10F0040006A4184A1F0FF65
1582:1062D000A678126004609DC00660388738879A7F70
1583:1062E000A47984A1400040007A4184A1BFFFFDC091
1584:1062F000A67816600460A5C006607F077C009B78C6
1585:106300001000AB780100AB780200AB780300AA7AEA
1586:106310009B786000AB780400D470B4D040009A4100
1587:10632000B4C0D6707E0CB87065A0086084A0EFFB86
1588:106330000A60186001801A607F0C7C003120000028
1589:10634000292032009B781000AB780100AB78030065
1590:10635000AB780100AA7DAA7E9B786000AB7805002F
1591:10636000D470B4D04000BE41B4C0D6707E0CB870BA
1592:1063700065A0086084A0EFFB0A60186001801A60C5
1593:106380007F0C7C007E15078084A0FF0003800380C3
1594:1063900080A020009A78A4798CA1F0FF21203342BC
1595:1063A00019201100A9200E0011203200042484A01D
1596:1063B000F0FF06A14000DE412084002310A2F0007F
1597:1063C000D3417F157C007E150120054F0420E4D0C9
1598:1063D000C000114221204142A920090011202800BB
1599:1063E00082A5190040002742480027422084A99531
1600:1063F0001120320082A53200400027424800274287
1601:106400002084A99519200A0011206400002202A509
1602:1064100040002742480027422084002310A2F000B9
1603:1064200003427F15780025422120334219201100B4
1604:10643000A9200E0011203200002202A540002742B0
1605:10644000480027422084002310A2F00019427F1543
1606:1064500006A07C007F1582A56400C8003042087841
1607:1064600085A070000A78042405A07C00091202307F
1608:106470000232034203440454045605660568067854
1609:10648000067A070C070C070EE1100A330558055A67
1610:10649000066A066C077C077E000E9B78100046A0FB
1611:1064A0007C0084A7000F0B8084A71F00038003805B
1612:1064B0000380038005A1FCD740005F42E0A0C074C8
1613:1064C00078006142E0A0C0547C007E0E7E0F84D034
1614:1064D00040006F42792000010920804F7120804FD9
1615:1064E00078007F420920404F7120404F0120044F27
1616:1064F0000420ECD040007D427920000178007F42EA
1617:106500007920000291200080042184A00F007900EE
1618:1065100086429042904290429042904290428E42F7
1619:106520008E427810B229B469F5C18CA19FFFB6697B
1620:1065300005A04000DF42587884A09FFF85A000603E
1621:106540005A78287886A01418C000DF424B780400DF
1622:10655000487884A00400C000A5424B780800487821
1623:1065600084A00800C000AC423078BCD0C000DF423C
1624:106570007E000120044F0420ECD07F004000C14287
1625:1065800084B200037800C34284B200044000C942D0
1626:106590001800DF427800CB422800DF42E47984A172
1627:1065A00030004000DF42EC7884A003004000DF426E
1628:1065B0001C68ACD0C000DD42781069437800DF422F
1629:1065C0001B78F9007F0F7F0E7C007E0C0120014FAD
1630:1065D0000420ACD0C0005B431468078084A00F0087
1631:1065E0000380038003808CB200034000F842E0A0E7
1632:1065F000C0537800FA42E0A04054046084A00A002E
1633:10660000C0005B43086194A100FF40005B438CA184
1634:10661000FF0001200A0006A14000264301200C00D3
1635:1066200006A140002A430120120006A140002E438B
1636:106630000120140006A1400032430120190006A1E8
1637:10664000400036430120320006A140003A43780062
1638:106650003E4309200C0078004043092012007800D6
1639:1066600040430920140078004043092019007800B5
1640:106670004043092020007800404309203F00780073
1641:10668000404311200000002105A20A60046085A09B
1642:10669000020006606120004F0460BCD040005B43F4
1643:1066A0001468FCD0C0005643EA606120404F780077
1644:1066B0005943EE606120804F1F600F807F0C7C008B
1645:1066C0001B7879007C001B7878007C001B786700C1
1646:1066D0007C001B7864007C000920194F0C2186A1E6
1647:1066E000000040007B4386A1010040007E431F70F4
1648:1066F0000B00677001001B7847007C001B78F000DE
1649:106700007C001F700A007C000920194F0C2186A113
1650:1067100000004000964386A10100400093431F7093
1651:106720000B00677001001B7847007C001F700A0097
1652:106730007C001B78EF007C001B78F9007C001B7844
1653:10674000F8007C001B78C9007C001B78C8007C0026
1654:106750001868FCD04000AB431B681D006770010047
1655:106760001B7847007C00307884A0C000C000D24372
1656:1067700008788CC00A780500050005000500EC7853
1657:1067800084A02100C000CF430120054F0420E4D0A5
1658:10679000C000CD43047884A01FFF85A0E0000678E8
1659:1067A00006A07C0008788DC00A787C0008788DC02F
1660:1067B0000A787C00307884A04000C000D7430120D4
1661:1067C000044F0420ECD04000E64384B2000378007C
1662:1067D000E84384B200044000EE439800F24378009E
1663:1067E000F043A800F243AC787C00087884A0FDFF59
1664:1067F0000A780500050005000500EC7884A021005A
1665:10680000400015447E000120044F0420ECD07F009E
1666:1068100040000B4484B2000378000D4484B20004AD
1667:106820004000134498000F4478001544A800134416
1668:10683000AC787E00087885A002000A787F007C0092
1669:1068400084A70100C000B93784A7700040002D4420
1670:106850007E0C602D682F78102629782D682C7F0CEF
1671:1068600084A7080040003A444B780800EC7884A0E4
1672:1068700003004000B93778005D4384A7040040005E
1673:106880006944B87884A00140400069444B7808000E
1674:10689000EC7884A003004000B937E47884A00700B6
1675:1068A00086A00100C0006944C07885A60048302059
1676:1068B0005A7E1B78F9007C004B7808001868FCD0E1
1677:1068C000400066441B681500F4D6400066441B680F
1678:1068D0000700781069437C001B680300587884A087
1679:1068E000003F1E682F680000336800004B780800E6
1680:1068F000EC7884A003004000AF307E000120044FFC
1681:106900000420ECD07F004000864484B2000378006D
1682:10691000884484B2000440008E441800082A78009D
1683:1069200090442800082A78000C41146B078384A047
1684:106930000F00038003800380FCD34000A04480A0AC
1685:1069400040547800A24480A0C053602048205A7070
1686:10695000602A7C00200020000000200000002000B1
1687:1069600000002000000020000000200000002000A7
1688:106970000000200000002000000020000000200097
1689:106980000000200000002000000020000000200087
1690:106990000000200000002000620009001400140024
1691:1069A0004898140014001499FD98140014008000F5
1692:1069B000FF0000010204082080F818000AA2140059
1693:1069C0000B300CA21400002513000025100010004D
1694:1069D0001000100010001000100010001000100037
1695:1069E000100010001000100000A2063802715F8035
1696:1069F00081943988C420640856A80830C1281B9D9A
1697:106A000001A20C30472861816A840080A484561852
1698:106A10003A8808A8E228CB9CF3A8640844A80C3064
1699:106A200001A80830E128CB9C21201DA805A20C87D5
1700:106A3000DED8A064E06DC06FA463806C120205A272
1701:106A40003D8842792080A1A42B8814183B88DF80E0
1702:106A5000A1942770F28537A732A503F07685778653
1703:106A600016A83E8814A8012012A804A2C064E06DF4
1704:106A7000A067C06F42792080A1A41418DF80A19480
1705:106A80003B8823707685778602A861783E886B20E4
1706:106A9000C1281B9D44200321A2208120C3A807A256
1707:106AA00004090EA209A803A20080A48572189A877F
1708:106AB0003C88E21F01F608A26E856F8661711400A2
1709:106AC00004070830CB9C140002A20080A485093082
1710:106AD000A884E21944F86E853F88E608F5A861F8B5
1711:106AE000EAA801F8140081F81600B285F08032950A
1712:106AF000A2FAE21D1400328521F21400E21DA884DE
1713:106B0000E0D6E61F1400083000804A281110FCA8C7
1714:106B10000830339D008000A002281110FDA8399D87
1715:106B2000BDA80830339D3B281110FDA809A20271B1
1716:106B30005F80819417000C3009A20080A485E21DBB
1717:106B400009A2C1DA1400100201A81400E0263A8755
1718:106B5000A3FAF219E026F21814000BA214000DA2F9
1719:106B600006381002259D040706A265687E812A84E6
1720:106B7000C11D2388160042600880FAA80080A48402
1721:106B800060812A8421F00830A884D6114270DD206B
1722:106B90001100D420228816004479218420A032A537
1723:106BA000A184160044792184DFA03295A1841600C7
1724:106BB00000007E12D47084A00046048090200472ED
1725:106BC00008709CC005A2C00002460C72FF82400003
1726:106BD000ED45FF8AC0000246007284D2C000024622
1727:106BE0000478CCD04000F3457810CC4A23700000E4
1728:106BF00027700000007084D04000FD45077004003D
1729:106C0000037008007F1200207C00007084A0030045
1730:106C100002709CC684D040005B4608710500087075
1731:106C200006A1C0000A4684A1030040008C4684A14E
1732:106C3000E001C0008C46F4D1C0000A4684A10030B7
1733:106C400086A0001040000A460120054F0420E4D031
1734:106C500040003746112080010C71118240004546EA
1735:106C60000870F4D0C0000A460C7006A140002A4605
1736:106C700078002746112080010C71118240004546A2
1737:106C80000870F4D0C0000A460C7006A140003A46D5
1738:106C90000770120008710500087006A1C000474681
1739:106CA00084A1030040008C4694D140004746F4D1B3
1740:106CB00040008C460770020078000A460871FCD13B
1741:106CC000400066467810ED47FF8A4000DC457800BA
1742:106CD0005B460C708CA0FF0340009146047084D08A
1743:106CE00040008346147005A0C0007F4610701073EA
1744:106CF00006A3C0007346002305A04000834602A1FE
1745:106D0000C8005B460770100078008C46FF8A400080
1746:106D100091467810F249C000864640005B467810E4
1747:106D200038477F1200207C00047208719CC10381E7
1748:106D3000C800A04607700200780091460370080062
1749:106D40007F1200207C0005A2C0008C46237000004A
1750:106D500027700000037008007E000120014F04200E
1751:106D6000CCD04000B2467810CC4A7F007F12002081
1752:106D70007C002864FF844000E246702C0470BCA0B4
1753:106D80000F00B8A7F2463C27FB87C000D04648005A
1754:106D9000C8467810B2299C6075A04000E246780091
1755:106DA000BB463920E746042768AE086830A60C6861
1756:106DB00029A521844000E2463887042705A0C000A9
1757:106DC000D1469C7075A0C000BB467C000000050049
1758:106DD00009000D001100150019001D00000003003E
1759:106DE00009000F0015001B0000000000E746E44604
1760:106DF0000000000000800000E7460000EF46EC467F
1761:106E00000000000000000000EF460000EA46EA46ED
1762:106E10000000000000800000EA460000F046F04656
1763:106E20000000000000000000F0467920004F7120B3
1764:106E3000100007700A00077002000370010010784C
1765:106E4000ECD0400026470920010071202000780086
1766:106E50002A47092002007120500007700A000770BD
1767:106E600002000370000009814000374771202000B4
1768:106E700078002A477C0004700480C800C14708716C
1769:106E8000087006A1C0003C4784A1E00140004947CA
1770:106E9000781030487800E947077012001920000088
1771:106EA0000871087006A1C0004D4784A1E0014000B0
1772:106EB0005A47781030487800E9471078ECD0400005
1773:106EC00074470120FD04042086A00300C000784719
1774:106ED00084A1004040007C4782A30300C8007C4797
1775:106EE00084A1040040004D47188378004D47147872
1776:106EF000ECD0C0007C4784A10040C0004D479CA15D
1777:106F00000C3086A304204000994786A30800400067
1778:106F1000A447047084D0C00095470871087006A18A
1779:106F2000C0008A4784A1030040009547780030489C
1780:106F300086A30C20C0004D47007204824800A4477D
1781:106F40000C7384A3FF034000A4477810B229087192
1782:106F5000087006A1C000A44784A1E0014000B14729
1783:106F6000781030487800E94707701200007084D02C
1784:106F7000C000C1471073147005A34000C1470C71D5
1785:106F800084A1FF03C00038470871087006A1C00043
1786:106F9000C14784A1E0014000CE4778103048780016
1787:106FA000E947077012000770080004709CD0C00009
1788:106FB000D2470871087006A1C000D64784A1E0013D
1789:106FC0004000E347781030487800E9470770120026
1790:106FD000087103814800D647037008007C000871DF
1791:106FE00084A1E001C0003048087184A1E001C00024
1792:106FF000304884A107007900FA4704481448024841
1793:10700000144802487248024870487810B229047047
1794:1070100084A010008DC00670FF8AC0000F48492070
1795:1070200000007C007810F249C0000F487C0004701A
1796:1070300084A010008DC00670047084D0C000284861
1797:107040000871087006A1C0001D4884A1030040001B
1798:10705000284878003048FF8A40002F487810F249CD
1799:10706000C0002B487C00077012000871E000334814
1800:1070700091200060E0003748912000600770120006
1801:107080000770080004709CD0C0003F4807701200D1
1802:107090000871FCD1C000434803700000007005A0D7
1803:1070A000C0005748047005A0C00057480C7005A0E8
1804:1070B0004000594878003B484920000084B2000154
1805:1070C000400063480120000078006548012001006D
1806:1070D000781062421B680200512000007C0078108A
1807:1070E000B2297810B2297810B948107214710C7056
1808:1070F0009CA0FF03002800A311A289A10000781022
1809:10710000B9480427582C60AC0863002222A30C6302
1810:1071100000211BA3002405A340009548C800954802
1811:10712000128410820A8389A10000602B78007C48B9
1812:10713000602B078A7E0004609CD04000A048BAA75C
1813:10714000EC467800A248BAA7E4467F003DA7002C91
1814:1071500086688A6F926C8E6B0871087006A1C000F9
1815:10716000A94884A1E0014000B44878103048077075
1816:107170001200781038477C00508A3987042704A011
1817:10718000C000CD48006064A0C000C448602D046009
1818:1071900084A00F0080A002473C20FB874010B2294A
1819:1071A0007C007E127E0DD47084A000460480902066
1820:1071B0007F0D8468602088688C6B906C5780D4AA9F
1821:1071C000FF0084A0FF007E00046884A008007F0008
1822:1071D0004000EB48B8A0EC467800ED48B8A0E44683
1823:1071E00084B200014000F448207E7800F548247EF7
1824:1071F000B5A60C001C68B4D04000FC4885C600242D
1825:1072000005A340002549582C0427046160AC0060A8
1826:1072100000A41A70046001A31E709CD1400015499F
1827:10722000106081A000002270146081A00000267010
1828:107230000862002402A212700C62002303A21670DE
1829:10724000027607700100602B78101C4A78002749ED
1830:107250007810F249C00025497F1200207C007E1280
1831:107260007E0DD47084A00046048090207F0D0770AE
1832:107270000400047094D0C0003649037008007F12E7
1833:1072800000207C007E127E0DD47084A00046048015
1834:107290007E0090207F007F0D207E84B20001C00020
1835:1072A0004F49247EB5A60C001C68ACD0C0005A49DA
1836:1072B00085C6037000000770040028685020602D08
1837:1072C0000460BCA00F00B8A7F2463C27FB87C000B3
1838:1072D000704948006A497810B2299C6865A040004E
1839:1072E000744978005D497810F249C00070497F12F6
1840:1072F00000207C007E127E007E017E0DD47084A072
1841:10730000004604807E0090207F00207E84B2000131
1842:10731000C0008849247E7F0D7F037F04B5A60C0042
1843:107320001C68B4D04000964985C603700000077001
1844:10733000040049207749286855A07E0D4000EE4999
1845:10734000702D602E0470BCA00F00B8A7F2463C2739
1846:10735000FB87C000B3494800AC497810B2299C7043
1847:1073600075A060204000EE4978009F49042768AE70
1848:10737000086822A40C681BA34800CC49518AC000AD
1849:10738000C0497810B2293887042705A0C000B44945
1850:107390009C7075A060204000EE4978009F492284CF
1851:1073A00020841A8399A300000869002422A10C6993
1852:1073B00000231BA1C800DB497810B22984B2000168
1853:1073C0004000E9490120044F0420ECD0C000E94905
1854:1073D000712050007800EB49712020007F0D78006B
1855:1073E000FC487F0D7F1200207C0008707E0084A086
1856:1073F000E0017F004000FB4906A07C0084A0030060
1857:1074000086A00300C000024A7C00042778AC007804
1858:107410001A7004781E70087812700C781670046068
1859:107420009CD04000144A107822701478267002769E
1860:10743000047084A0100085C006707920004F388742
1861:10744000518A4000404A042705A0C000324A9C608F
1862:1074500005A04000414A6020046084A00F0080A085
1863:10746000F2463C20FB874010B22908707E0084A0C1
1864:10747000E0017F0040003C4A06A07800414A84A019
1865:10748000030086A003007C00512000007C007E12D7
1866:107490007E007E0DD47084A00046048090207F0D75
1867:1074A0007F08087184A10300C000594A286805A01C
1868:1074B0004000694A780002460871FCD14000614AE8
1869:1074C0007810ED4778004E4A077010000871FCD123
1870:1074D0004000634A7810ED47087086A00800C0009D
1871:1074E0004E4A007005A0C0004E4A037000004920BB
1872:1074F00000007E000478CCD040007D4A7810CC4A51
1873:107500007F007F1200207C007E127E147E137E1589
1874:107510007E0C7E0DD47084A00046048090207F0DE8
1875:107520004920814A80AD1100A02084B200014000B2
1876:10753000A44A0120044F0420ECD04000A04A992026
1877:1075400031007800A64A992032007800A64A992096
1878:1075500031000C7084A0FF032A68077008000770D0
1879:107560000200037001004000B54A0080AC80A553C2
1880:107570000C7084A0FF034000C14A0770040004702F
1881:1075800084A00400C000BC4A7F0C492000000370A6
1882:1075900000007F157F137F147F1200207C00146889
1883:1075A000FCD04000114B007084D04000114B247E71
1884:1075B000B5A6040007700400047084A00400C00095
1885:1075C000D94A18717E011C717E0120717E012471DF
1886:1075D0007E010EA01A711F70FF3F22712671137079
1887:1075E000040016710276077001000120FFFF0920D8
1888:1075F00031000A200A200871087006A1C000F84A6C
1889:10760000FCD14000F84A7F0226727F0222727F027C
1890:107610001E727F021A7207700200087086A00800AE
1891:107620004000114B780030480770040003700000E0
1892:107630007C009120008091200060AC7805A0C00003
1893:107640002D4B7479D07006A1C0002D4B1C7805A07D
1894:1076500040002D4B1F78000068002D4B912080408A
1895:10766000307801803278C000B54B347832781078A9
1896:10767000ECD0C000AE4B6120C0746920804FFDC7C4
1897:10768000D06805A04000474B0180D268C000474B3E
1898:107690007810834D006884A00F0040005C4B86A0EA
1899:1076A000010040005C4B44680DA040005C4B04218D
1900:1076B00005A040005C4B01800A204000F64C146895
1901:1076C00005A04000814B01801668C000814BA7686F
1902:1076D00001007E0FFCD7C000764B1078ECD0400044
1903:1076E000724B792000017800784B792000027800F5
1904:1076F000784B792000017810D3437F0F646805A090
1905:107700004000814B78106F26806805A040008E4BAA
1906:1077100001808268C0008E4B67680000D468DDC0BD
1907:10772000D668D468FCD04000AB4BFCC0D668A9201A
1908:107730000002346005A04000A74B01803660D46889
1909:10774000FDC0D668C000A74B106005A04000A74B45
1910:1077500078106F26E0AC1000F000964BFCD740008C
1911:10776000B54B6120C0546920404FFCC778003D4BA9
1912:107770007810F14B387801803A78C000D74B3C78CC
1913:107780003A786120C0546920404FFCC70C6805A0BE
1914:107790004000C94B78105B4CFCD7C000D74B107829
1915:1077A000ECD0C000D74B6120C0746920804FFDC76A
1916:1077B0007800C34B1478E4D0C000DB4B1078CCD0F9
1917:1077C0004000EE4BACD0C000E74BA4D04000EE4BE5
1918:1077D000ADC01278912001806800ED4B7810DC2359
1919:1077E0007C00912001807C00407801804278C000BC
1920:1077F0005A4C447842786920404FFCC71078792071
1921:107800000002ECD04000034C79200001D86805A0AC
1922:1078100040000F4CE07D04A5C0000F4CDA68D4682E
1923:10782000BCC0D6687920004F106805A0C000174C76
1924:107830000120010101801268FCD74000204C80A08B
1925:10784000D0957800224C80A0C0944020042065A0F0
1926:1078500040004C4C246005A04000484C018026604C
1927:10786000C000484C006805A040003B4C4C6806AC8A
1928:10787000C0003B4C7810F64C78004C4C646805A076
1929:107880004000434C276001007800484C7810A94C18
1930:1078900004287800244C0060402C7800244CFCD74D
1931:1078A000C0005A4C1078ECD0C0005A4C6920804F70
1932:1078B000FDC7792000017800034C7C0009200000FE
1933:1078C000A920000208609CD04000954C246005A0CF
1934:1078D00040006B4C018026607800934C08609CC08F
1935:1078E00084D0C000734CACD040008D4C0A60046062
1936:1078F00005A04000954C7E0D7E0C7E016820106036
1937:10790000018012607810193E002D682C60207810DC
1938:10791000A21E781064207F017F0C7F0D7800954CAB
1939:10792000BDC00A608DA101007800954C8DA10001B9
1940:10793000E0AC1000F0005F4C84A101004000A44CBA
1941:107940008CA1FEFF0E6978106F267800A54C0E6999
1942:107950007C00C000A54C6C78002C7E681467766FA4
1943:10796000176000002B6000001B600600B46084A05C
1944:10797000003F1E60206084A0FF0085A060002260A0
1945:107980000060422078102B1E186805A04000C74CEC
1946:1079900001801A680868A4C00A681068087909811B
1947:1079A0000A790180D000D34C7810B2291268C00047
1948:1079B000D94C1079A5C112792F6000003360000006
1949:1079C000682C78107320FCD7C000E74C6920404F2A
1950:1079D0007800E94C6920804F106984A100010120E2
1951:1079E0000600C000F34C7A69012004007810632679
1952:1079F0007C007E0D4C696021FCD7C000084D1078DA
1953:107A0000ECD04000044D6920000178000A4D692047
1954:107A1000000278000A4D69200001781026291B60B9
1955:107A20000600586884A0003F1E60206084A0FF000C
1956:107A300085A0480022602F600000336000000868C5
1957:107A400084A0FDFF0A683068B4D040003C4D4B680C
1958:107A50000400A9201400486894D040002E4DF00086
1959:107A6000284D4B680900A9201400486884D04000C4
1960:107A7000384DF000324DA920FA00F0003A4D1B6855
1961:107A800047007F0D676807007C007920004F781061
1962:107A9000764D78105C4D7810694D09200200692000
1963:107AA000804F0F680000136800001768000009810C
1964:107AB00040005B4D6920404F78004E4D7C001078AF
1965:107AC000ECD04000644D1920CC007800664D1920A0
1966:107AD0007B003A7B3E7B7C001478E4D0C000714D83
1967:107AE000192040007800734D19202600427B467B08
1968:107AF0007C001478E4D0C0007E4D1920943F7800BB
1969:107B0000804D19202426327B367B7C00506A85A26A
1970:107B100000004000AF4D5469C06B00A37E0C64218F
1971:107B20000463FF83C0009B4D118240009F4D08817C
1972:107B30001AA148008C4DC06978008C4DD3680A00AA
1973:107B40007F0C7C005069C06A64222B6000002F60AB
1974:107B500000000860B5C00A6010820981C000A14D14
1975:107B600052697F0C7C00E000B04D91200060E00085
1976:107B7000B44D91200060EC70DCD0C000C14DD4D079
1977:107B80004000EA4D7800ED4D08201078ECD0400020
1978:107B9000D44DC4D1C0000E4E1478C5C016781078EC
1979:107BA000F5C01278ECD040000A4E7800064E8EAE3A
1980:107BB00000014000E14D1478F5C0C5C01678D4D05E
1981:107BC000C0000A4E7800064E1478FDC0C5C0167875
1982:107BD000D4D0C0000A4E7800064EE4D040000C4ECF
1983:107BE000E000ED4D9120006009200C00E000F34D15
1984:107BF000912000600981C000F34DE47084A0FF0172
1985:107C000086A0FF01C000044EEC707800C14D7810D2
1986:107C10000F4E04788CD040000C4E1F680C00A070F2
1987:107C2000A2707C001079ECD14000194E1478C4C0C9
1988:107C3000F4C1127978002B4E8EAE00014000254E23
1989:107C40001478F4C0FCD0C0002B4EC4C078002B4E7A
1990:107C50001478FCC0F4D0C0002B4EC4C016787C0051
1991:027C6000E3142B
1992:00000001FF
1993/*****************************************************************************
1994 * QLOGIC LINUX SOFTWARE
1995 *
1996 * QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x
1997 * Copyright (C) 2001 Qlogic Corporation (www.qlogic.com)
1998 *
1999 *****************************************************************************/
2000
2001/************************************************************************
2002 * --- ISP1240/1080/1280 Initiator Firmware --- *
2003 * 32 LUN Support *
2004 ************************************************************************/
2005
2006/*
2007 * Firmware Version 8.15.11 (10:20 Jan 02, 2002)
2008 */
diff --git a/firmware/qlogic/isp1000.bin.ihex b/firmware/qlogic/isp1000.bin.ihex
new file mode 100644
index 000000000000..a5c242cda220
--- /dev/null
+++ b/firmware/qlogic/isp1000.bin.ihex
@@ -0,0 +1,1158 @@
1:1000000078003010000019240000FF124320504FE8
2:10001000525947495448312039392C313931323914
3:10002000312C39392C333931343951204F4C49472F
4:1000300020434F435052524F54414F49004E4920A4
5:1000400050533031303046207269776D72612065CF
6:100050005620726569736E6F30202E313133202047
7:10006000B9201212C120080071201000C3700400D2
8:10007000C920FF3F8920C810C7705349CB7020505A
9:10008000CF702020D3700100003FD67031203000A7
10:100090007920003563780000A02F09202703112064
11:1000A0000000A9204000A4420981C00051109B78A3
12:1000B00001010B7802000F7802004F78B80B69201D
13:1000C0004035A8006A101B683C0009201313B821B2
14:1000D00078006C101B682800076807000B68FA009E
15:1000E0000F680800136805001F68000023680600F9
16:1000F00017680800276800006920003611202000DA
17:10010000092010000B68190C0F681900036800DD46
18:1001100007681A001A6A002DE8A0080090A20400DF
19:100120000981C000821069208036A92080003768CC
20:1001300000000B684000176800011F686400E8AD0C
21:1001400010007000A510780097107810381A7810F9
22:100150003A2F781081167810BA33003285A00D003E
23:100160009020C37000009000BC10C07086A00200F8
24:10017000C000BC107810BA117810EC107810171865
25:100180007810A81978107D3278107D177800BC108F
26:10019000D010D210C31BC31B982F982FC31BC31B97
27:1001A0007800D0107800D2107800D4107800D610E3
28:1001B00008700C80C800E710077002008CA00C00CB
29:1001C000C000E81004800480C800E7107A087A09AB
30:1001D000C37002407800BD11147805A0C000F4106F
31:1001E0001000301178002F1109206835042105A076
32:1001F000C0002F11147886A00100C00001117810F2
33:1002000036151778000009206F35042165A04000DD
34:100210001D1109206A351C2108811421088104213F
35:1002200010A299A3000009201C008360030178102C
36:100230001116C00029117810781609206F350B208F
37:1002400000000920693504210B20000005A04000B2
38:100250002D11012005407800BC117800BA117C00F6
39:1002600061200000186084A00100400038117C006B
40:10027000C3700000C7700000CB700000CF7000009A
41:10028000C070BCA0C0FFC0008811382079004811A0
42:10029000BA110512D311051256125612CA11901531
43:1002A0006112C611D711D911DB11DD119515C611D7
44:1002B0006712831244158A15DF116B148D14A7146D
45:1002C000D0142414321446145A14EF12C6119F127B
46:1002D000A612AB12B012B612BB12C012C512CA12CD
47:1002E000CE12E312C611C611C611C611C611FB12F9
48:1002F00004131313391343134A1370137F138E130C
49:10030000A0130914C611C611C611C611C6111914BD
50:10031000BCA0A0FFC000C611382084A01F00790037
51:100320009111C611C611C611C611C611C611C6114A
52:10033000C611C611C611C611C611C611C611C61105
53:10034000C611C611C611C611C611C611C611C611F5
54:10035000C611C611C611ED15F715FB150916C61104
55:10036000C611CA72C671012006407800BC11CE7356
56:10037000CA72C67101200040C270612000001B607B
57:10038000010091200050912080407C00C37001400A
58:100390007800BD1199204100A1204100A92005004D
59:1003A000A3537800BA11C470C37004007A007800B7
60:1003B000BA117800BA117800BA117800BA119120F8
61:1003C0000080C3700000C7705349CB702050CF70BD
62:1003D0002020D3700100003FD670792000001B78E8
63:1003E00001003120300059200010292057045120ED
64:1003F000700461207204B920FFFFC1200000912029
65:1004000000509120804078005504D071C872CC73A0
66:10041000C470A020982031203000FF814000BA1124
67:10042000077004001A731E72512012004920341202
68:100430004120BA110370020086A70100C0002612F5
69:100440004920421241204E12037003001770000031
70:100450000B811271C8002E12177001000770010085
71:1004600086A70100400042120C7084A07F00048027
72:100470000920200002A142094A09A820A026A6536B
73:100480007800D8100C7084A07F0040004212AC802D
74:10049000480042129826A5537800D8100C7084A00A
75:1004A0007F00AC809826A5537800BA11C471C8703B
76:1004B00014219EA70400C0005E120A20CA727800B0
77:1004C000B911C7700100CB701F007800BA11C47059
78:1004D000C872CC73D074C670CA72CE73D27405A0C1
79:1004E00040007D12018072787A7A7E7B767C9878E3
80:1004F00084A0FCFF9A7878008112987885A001008A
81:100500009A787800BA11C470C872CC73D474C6706B
82:10051000CA72CE73D67405A0400099120180867805
83:100520008E7A927B8A7C987884A0FFFC9A787800F7
84:100530009D12987885A000019A787800BA11092058
85:1005400059350C21112010047800B81109204135CB
86:100550000C217800B911092042350C217800B9111D
87:10056000612040350C6110627800B81109204535D2
88:100570000C217800B911092046350C217800B911F9
89:10058000092047350C217800B911092048350C2184
90:100590007800B91108790C7A7800B811C471078114
91:1005A00084A00F00038003800380E8A00036006A67
92:1005B000046884A008004000E012086B7800E11293
93:1005C0000C6B7800B711C4777810921691200080D8
94:1005D0001C6B146A9120018008277800B711C4773A
95:1005E00078109216912000800869186A106B91208B
96:1005F00001807800B711C47182A11000C800B21147
97:100600007810BC1A7800B711C47182A11000C8001C
98:10061000B2111120413504227E0012217810751A82
99:100620007F017800B911C47111203113A92008008D
100:10063000042206A1400023131082700021137800C9
101:1006400018137800B21192A231137E0211204235A4
102:10065000042212217F017E007810811A7F01780028
103:10066000B911E803FA00F401EE0264001900320047
104:100670004B00612040350C611062C4700E60C87080
105:1006800012607800B811612040351461C4701660A2
106:100690007800B911C471112004001920121286A12A
107:1006A000280040006313112005001920121286A1B2
108:1006B000320040006313112006001920131386A195
109:1006C0003C00C000B2116120403518607E001A6104
110:1006D000B8237810921A7810BA337F017800B911D4
111:1006E000C47184A1CFFFC000B2111120473504228C
112:1006F00012217E007810B41A7F017800B911C471FC
113:1007000082A11000C800B2111120483504227E00D9
114:1007100012217810A31A7F017800B911C471C87230
115:1007200084A1FDFFC000B11184A2FDFFC000B11182
116:10073000002108790A7800220C7A0E787800B81126
117:10074000C471078184A00F00038003800380E8A0A8
118:10075000003619200000C87200687E0026A2400002
119:10076000CF13026A84A400204000B8139DA3100098
120:1007700084A400104000BE139DA3080084A4004080
121:100780004000CF130F8184A200404000CB137810AB
122:10079000D61A7800CF137810C81A7800CF13CC720D
123:1007A000FF8240000114086806A240000114A4A2C0
124:1007B000FF0061204035186186A128004000E81341
125:1007C00086A132004000EE1386A13C004000F413E5
126:1007D00082A464004800FE137800F81382A450003D
127:1007E0004800FE137800F81382A443004800FE136B
128:1007F000C471C6717F02CA727800B3110A6A9DA3E0
129:100800000A00046805A306687F020C6BC4717800B7
130:10081000B711C4777810921691200080146A1C6B6F
131:1008200091200180C8701668CC701E680827780077
132:10083000B711C471C872CC7382A11000C800B21184
133:100840007810E41A7800B711C477781092169120C6
134:100850000080086A95A202000A6A91200180082798
135:100860007800B811C4777810921691200080086A39
136:1008700094A2F9FF0A6A046805A0400041147810A8
137:10088000191A9120018008277800B811C4777810D0
138:10089000921691200080086A95A204000A6A0468F2
139:1008A00005A0400055147810191A912001800827DE
140:1008B0007800B811C477412001004920050051207B
141:1008C00020009120008078109F1691200180082739
142:1008D000086A7800B811C477C872CC73C677CA7238
143:1008E000CE7378101817C0008914186805A040004E
144:1008F000831408277810F41AC00083141778FFFFB8
145:10090000912001807C009120018001200540780029
146:10091000BC11912001807800BA11C477C6774120BC
147:1009200021004920050051202000912000807810EE
148:100930009F1661204035A3600300B667A7600000E2
149:100940001778FFFF912001807810191A7C00C87772
150:10095000CA77C477C677BCA700FF912000806120CA
151:100960004035A3600200A7600000B6671778FFFF5C
152:100970007810191A9120018041202100492004009B
153:10098000512010009120008078109F16C8703668A2
154:10099000388784A70700C000C414912001807C0020
155:1009A000987884A00300C000F4143920000041208E
156:1009B000210049200400512008007810921691204F
157:1009C000008008680DA80A6991200180388784A7F3
158:1009D0000700C000DD14BCA700FF3F8738873F87B2
159:1009E00084A7000FC000DD14912000806920000161
160:1009F000306884A0400040001D154B680400A92009
161:100A00001400486884A0040040000A1570000A150C
162:100A1000780001154B680900A9201400486884A0DB
163:100A20000100400017157000171578000E15A92059
164:100A3000FA0070001D157800191579200035177817
165:100A4000010061204035A3600100A7600000C36081
166:100A50000F00987885A002009A78086884A0FDFFAE
167:100A60000A681B684600912001807C00987884A069
168:100A7000FDFF9A7884A00100C0004015781060172F
169:100A8000C471C6714A797C00C474C873CC72C674D0
170:100A9000CA73CE72792000350920400078106F1695
171:100AA0004000861578103F1640005A1578107816C9
172:100AB000780086151060912001801778FFFF0920CB
173:100AC00068350B20050008810B20000008810A23EF
174:100AD00008810A2208810A2408810A2008810B2043
175:100AE000000008810A2C2EA030257E0E7810132FCE
176:100AF0007F0E9265A2659666A666AB600000AF6049
177:100B00000000912001807810191A7C00C370054004
178:100B10007800BD11C471C770000006797800BA1161
179:100B2000C471C671682178009715692000100C699E
180:100B300016A0042D10A2688D0981C000991585A208
181:100B40000000C000A715C37000407800A915C3704D
182:100B50000340CA707800BD11C471C872CC73002103
183:100B600084A1FCFFC000C61100217900B715CE1585
184:100B7000E315E515E715C3700340CE71D272D67345
185:100B80007800CA15C3700040CF700000D370000019
186:100B9000D7700000C677CA717800BA113120E91504
187:100BA000242630861224042246A4C000BB1584A447
188:100BB000FFFFC000D0153120E9151082198384A3EE
189:100BC000FFFFC000D0157800C2157800C21578006C
190:100BD000C2155555AAAAFFFF00006079C671C471FD
191:100BE00082A10300C800B21162797800BA1160795D
192:100BF000C6717800BA115479C671C47156795879A2
193:100C0000CA71C8715A795C79CE71CC715E797800FD
194:100C1000BA115479C6715879CA715C79CE7178006D
195:100C2000BA110C7084A07F0040001D1607700400EC
196:100C3000047084A00400C000181617700000127120
197:100C40001A721E7308810C81A981988CA120300032
198:100C50008060A220A6530C7885A000000270077067
199:100C6000010008710481C80031160770020084A1D8
200:100C70000C000C7184A10003037000007C000C7058
201:100C800084A07F0040004B1607700400047084A00D
202:100C90000400C00046161770000012711A721E730D
203:100CA000992030000881AC810C7885A00100027089
204:100CB0000770010008700C80C8005A160770020007
205:100CC0008CA00C00C0006C160C7184A10003C00045
206:100CD0006C16A02CA55306A0037000007C00507871
207:100CE00065A040007716042C5278632000007C0039
208:100CF0007E0F7920003550786220002C52787F0FCB
209:100D00007C0011200040527A192010041983400001
210:100D10008F1680A22F001220102078008616132034
211:100D200000007C0084A7000F0C8084A707000380CC
212:100D300003800380038005A1E8A080367C00781042
213:100D4000921600292A68002A2E68086884A0EFFFFE
214:100D50000DA80A6909204F350C21046805A0400040
215:100D6000BC1616A1C000BC166020006006687E019B
216:100D70000B2000007800BF16092000007E010468E7
217:100D800065A04000CE16006006687810DF16781067
218:100D9000CB17106801801268C000BF167F0102697E
219:100DA00006697C0065A04000DE1698609B6000002C
220:100DB00008207810781600217800D2167C00036095
221:100DC0000301A9201C0080AC0400A0200120000029
222:100DD000A440286816602C681E607C007E0E71207E
223:100DE000403540708CA08000C000FC1688A0803583
224:100DF0000A2D0080427006A07F0E7C007E0E7120BE
225:100E00004035092080354072218211824800161732
226:100E10000421088106ADC000051719811E21088133
227:100E200018831182C8000E17427406A07F0E7C0042
228:100E3000781092169120008004681E7865A040000A
229:100E40005F1778002917002C1E78006065A040000D
230:100E50005F170C6006A3C0002317086006A2C0003D
231:100E60002317282C01204F35042006AC40005F17C3
232:100E7000046806ACC000461700606020066805A044
233:100E8000C0004617036800007800501700641C7803
234:100E90006020026486A40000C0005017002C026885
235:100EA00060257810DF16176005001F60200078109D
236:100EB000CB171068018012680120FFFF05A07C009D
237:100EC0003920000041202100492004005120080061
238:100ED0009120008078109F16388784A70700C000F3
239:100EE0006A17BCA700FF3F8738873F8784A7000F9A
240:100EF000C0006A17912001807C006120000018600A
241:100F000084A00100C0008A17AC78AF78000005A06B
242:100F1000C0008B177C008CA0F0FF40009117781068
243:100F2000A51B79009317A317A517AB17AF17A31726
244:100F3000B317A317A317A317A317B917BD17A317A1
245:100F4000A317A317A3177810A51B7810601701200B
246:100F500001807800C317012003807800C3170120A7
247:100F600004807800C317781060170120068078008D
248:100F7000C31701200C807800C31778106017012078
249:100F80000D807800C317C270612000001B60010053
250:100F9000912080407C00042C8260082C632000009B
251:100FA000647800806678687805A06A794000DB176D
252:100FB000022C7800DC176E797C007E0C61200035F5
253:100FC00083680301082D6B20000064600080666068
254:100FD000686005A06A614000F017022D7800F117E3
255:100FE0006E617F0C7C0078100418400003187E0CA2
256:100FF000986065A04000FE177810D2167F0C9B60A9
257:101000000000781078167C006C7865A040001618F7
258:1010100091200080647801806678042C6E7805A0A9
259:10102000C00014186A780080912001807C009878B4
260:1010300005A0C00065187479D07005000500D07255
261:1010400006A2C0001C18002206A1C00033180478B4
262:1010500005A0400065180778000068006518912019
263:1010600080407800651878106F16400065187C7A0B
264:10107000787B07810480048010A299A300000920D6
265:10108000400078103F1640005C1878107816807881
266:101090000080827886A00200C00065189120008040
267:1010A000AF78020083780000987885A003009A78D2
268:1010B00091200180780065188378000078109219DB
269:1010C000006084A00700790066187C006E187D1807
270:1010D0009D186E18AF186E186E186E18392000041F
271:1010E000A87805A7AA78046005A706607810ED180F
272:1010F0001860A67878107A197C00A87884A000017E
273:101100004000841878006E18AB78000000600780FB
274:1011100084A0FF009E7801809B60000040009A1828
275:101120007810ED1840009A18A87885A00001AA78D8
276:1011300078009C18781011197C00A8788CA0000EFB
277:10114000C000A61884A00001C000A81878006E187E
278:101150007810ED18C000AE18781011197C00A8782E
279:1011600084A000014000B61878006E18AB7800002B
280:101170001067A9200100146084A0FF0005A04000B2
281:10118000D318BCA700FFA92008008EA001004000D2
282:10119000D31839200000A92080008EA00200400052
283:1011A000D3187800EA1878109216002D912000804C
284:1011B0002B6800002F680000086884A0DEFF0A6822
285:1011C000002D80A010006820912001807000EA1896
286:1011D0007800D618781078167C00A0786DA0C00032
287:1011E000F818002CA278A6789B60000078000419FB
288:1011F000002C9A689B600000A278002D0260A47801
289:1012000006ADC000041902609C7801809E78C00081
290:101210001019A87884A00000AA78A478602006A0FD
291:101220007C002EA03025186184A160009E614000E2
292:101230001D197E0E7810132F7F0E9265A26596669B
293:10124000A666AB600000AF600000106778109216D1
294:1012500091200080086884A0010040003F1991207F
295:1012600001807810DF16912000807810CB17912034
296:101270000180A3780000A778000078007919206029
297:1012800096A00100C000461900802260106A146810
298:101290009120018002A248005519400055193920BB
299:1012A000000278107A1978007919082C91200080B2
300:1012B000006865A040005D1902610269C000611903
301:1012C00006696021036000001068008012689120A8
302:1012D000018008688CA040004000731986A040007F
303:1012E0000A687810EE167810191AA7780000A3780B
304:1012F00000007C00046005A7066091200080781043
305:10130000CB1791200180A47865A040008D199860CA
306:10131000A6789B60000078007D19A3780000A7786C
307:1013200000007C007079747800800AA1C8009919C7
308:1013300006A07678D270047805A04000A719018035
309:101340000678C000A7196800A719912080407C008A
310:101350006800C219292000006C7865A04000BD1902
311:101360007810C3194000BD197E057810D9197F0582
312:10137000C000BD1928857800AC19FF854000C2194E
313:10138000912080407C00847B8879D4720500050020
314:10139000D47006A2C000C519002202A1C000D31952
315:1013A000002305A07C004800D71902A37C0002801E
316:1013B0007C0078100B1A09201C00246005A0400056
317:1013C000E31909204000781011164000FC199478A8
318:1013D0000080967886A00200C0000A1A9120008042
319:1013E000AF78030097780000987885A000039A787A
320:1013F0009120018078000A1A977800007810F3177E
321:101400008479887800800AA1C800071A06A08A7823
322:10141000D67006A07C00078104800480907A8C7BC3
323:1014200010A299A300007C0009206835912000805B
324:101430000A207E0F7920000109204035912000808C
325:10144000042186A00000C000341A092012350421AE
326:1014500005A0C000341A307884A0C000C000341A3F
327:101460001800341A1B784400912001807F0F7C0003
328:101470007E1291200023712040357920000119202F
329:10148000D82DA1202B01042305A04000501A9A78E2
330:101490001883AC2318839823A65318337800431A73
331:1014A0009B782000A9201000AF780000AF782002C0
332:1014B00070005C1A7800541A0370000078105B1BEF
333:1014C000047084A00F0085A0806206780F780092D7
334:1014D0004378D800537880000B78380047707F3508
335:1014E000437000007F1200207C008CA10F001120AF
336:1014F0000101042284A0F0FF05A1122078105B1BDB
337:101500007C0011200101A92009000B8170008A1ABA
338:101510007800851A8CA1000E042284A0FFF105A199
339:1015200012207C0009200101A9200500138270000F
340:101530009B1A7800961A94A2E000042184A01FFF51
341:1015400005A20A207C0011200101A9200C000B81BA
342:101550007000AC1A7800A71A8CA100F0042284A0B5
343:10156000FF0F05A112207C0011200201042284A09B
344:10157000CFFF05A112207C000381038080A0200002
345:101580007E0C612000019A60AC62AC637F0C7C0031
346:101590000381038080A022007E0C612000019A60FC
347:1015A000A46084A0DFFFAE607F0C7C000381038019
348:1015B00080A022007E0C612000019A60A46085A0BA
349:1015C0002000AE607F0C7C000381038080A020009F
350:1015D0007E0C612000019A60A460AE621020A460BD
351:1015E000AE6318207F0C7C00912000807E0C7E0E64
352:1015F000186805A04000391B6120803F7810411B0E
353:101600004000271BA92000006120803E7E0C78103E
354:10161000411B4000131B7F0C608C7000111B780075
355:10162000061B7800391B7F0082A0803E7120403568
356:10163000BA701C6085A000081E60B671A76000002B
357:1016400001200400A2707810141A7800351B712054
358:1016500040351C6085A000081E60B671A7600000C0
359:1016600001200600A2707810141A012000007800F2
360:101670003B1B012001009120018005A07F0E7F0C03
361:101680007C00042C05A04000581B60200C6006A3C1
362:10169000C000551B086006A2C000551B106006A1C3
363:1016A000C000551B06A078005A1B00607800421B42
364:1016B00085A001007C00112041350C228CA10F0077
365:1016C00011203B01042284A0000140006A1B21205C
366:1016D00080FF22217C007E0EE4688CA02000400068
367:1016E000A31B84A00600C000A31B1060078084A079
368:1016F0000F00038003800380F0A00036047084A0F4
369:101700000A00C000A31B087194A100FF4000A31BA6
370:101710008CA1FF000120190006A14000961B0120AA
371:10172000320006A140009A1B78009E1B0920200071
372:101730007800A01B09203F007800A01B11200000AA
373:10174000002105A20A707F0E7C006800A51B7E00A8
374:1017500071200000187084A00100C000AA1B7F0047
375:10176000082E71201000CA707F00C670C3700280FE
376:10177000712000001B700100912080407F007020CC
377:101780007F007800C11B7E107E007E129120002316
378:101790003C7F587E307C387D94A53F0084A4004077
379:1017A0004000D81B84A77C00C0009C2D7810A51B8E
380:1017B0009CA40F0082A304005000E01B7810A51B1E
381:1017C000078584A00F007900E51BEA1F9A20C0203E
382:1017D000E6226B25B325EA256526BF2644270B1C88
383:1017E000F51B531E1D1F4A25F51B7810A51B18005D
384:1017F000C81B7F12912001807F007F107C00037046
385:1018000000003F700000307005A04000091C3370DC
386:1018100000001800C81B5C7005A0C000B61CA070BA
387:1018200084A007007900141CD61C1C1C2A1C4B1C0D
388:10183000711C9D1C9B1C1C1C087884A0FDFF0A7851
389:101840000920460078101224C000281C03700400F0
390:101850007800F71B78105E2DC000491CB47007801B
391:101860009B787E00AA789B781000AB780C009B7860
392:101870006000AB7801005B7804000920F700781065
393:101880001024C000491C03700400C3700F003370A3
394:1018900070357800F71B78105E2DC0006F1CB47196
395:1018A00007819B787E00AA789B7810008CA10700A6
396:1018B0008DA1C000AA79AB7806009B786000AB7858
397:1018C00002005B7804000920F70078101024C000A3
398:1018D0006F1C03700400C3700F0033707035780004
399:1018E000F71B78105E2DC000991CB47107819B789E
400:1018F0007E00AA789B7810008CA107008DA1C00003
401:10190000AA79AB782000B871AA79AB780D009B78E2
402:101910006000AB7804005B7804000920F7007810C1
403:101920001024C000991C03700400C3700F003370B2
404:1019300070357800F71B78004B1C78105E2DC000C6
405:10194000F71BBC7068209B781000106F7810A12CDA
406:10195000502C106884A0070085A08000AA78186E1B
407:1019600041200100012004007800DE1D78105E2D6A
408:10197000C000F71B9B7810005C706820106F781017
409:10198000A12C502C086085A010000A60106884A06B
410:10199000070085A08000AA783120200041200100A6
411:1019A0007810C52D012003007800C91D1800C81B40
412:1019B000407485A400004000F01C80A080353020D9
413:1019C000447108812AA14800E71C09208035642160
414:1019D0000465FF85C000FD1C2184C000E11C467128
415:1019E000037000003F7000007800F71B4076B0A63F
416:1019F0008035447100267800EC1C46716825582516
417:101A00003E75502C346085A00000C000FA1C0867A9
418:101A1000367784A73F0140002F1D84A72100C00016
419:101A2000FA1C84A7020040001C1D84A7040040008B
420:101A3000FA1CBCA7FBFF0A6784A70800C000FA1CB9
421:101A400084A71000C000FA1C84A7000140002F1DCD
422:101A5000186005A0C000FA1CBCA7FFFE0A671F683B
423:101A60000000186E84A60E00186140003F1D1C6027
424:101A700002A14800421D4000421D7800F61CFF8173
425:101A8000C000F61C84A78000C000481D0C702260B6
426:101A9000BCA77FFF0A67106B078384A00F00038039
427:101AA0000380038080A00036602048204A700060D8
428:101AB0004E7004605270602A1800C81B9B7810009A
429:101AC00046A078105E2DC000F71B106B9CA307008A
430:101AD0009DA3C0004C7084A000804000731D84A6AC
431:101AE00001004000751D9CA3BFFF84A610004000AC
432:101AF0007B1D9DA32000AA7B408884A60E00C00009
433:101B0000861DBDA710000A677800C71D4C718CA107
434:101B100000084000022911202100048004804800B0
435:101B20009D1D11202200048048009D1D11202000D1
436:101B3000048048009D1D4000C71DAA7A4088781087
437:101B4000772D106A0C6108818CA1FF00E0A1803E16
438:101B5000642CFF8C4000BE1D106006A2C000A81DB2
439:101B6000B4600180B660C000A31D7E0C602A0860CE
440:101B700085A000010A607F0C7800D61C78105E2DCD
441:101B8000C000F71B602A0E61AA7940882E710120DF
442:101B900001007E00507184A118004000DD1D84A169
443:101BA00010004000D71D7810CC2AC000DD1D84A194
444:101BB00008004000DD1D7810E6297F0002708CA629
445:101BC0006000FF884000E61D8DA104005A79B269CB
446:101BD0009B7860000028AA789B786100146885A033
447:101BE00000801668AA787E157E137E14A1202C0131
448:101BF0009B7800000080AC8080AD0A009820A6533E
449:101C00007F147F137F15106807809B787E00AA7869
450:101C1000906DD67DDE7D946ED27EDA7E307884A0A3
451:101C2000C000C000151E98001D1E086084A0EFFFB4
452:101C30000A607810772D7800FF1B007284A20700DD
453:101C400086A00100C0002A1E1B7849007810772D5D
454:101C500078003B1EB06A95A200205A7A1B78490092
455:101C60007810772D0072002505A640003B1E84A247
456:101C700007007910491E80AD0800327084A2070069
457:101C800086A00100C000471E186000801A6078001E
458:101C9000F71B511EF030F030DF30F030511E511E76
459:101CA000511E7810A51B087884A0FDFF0A787E0FCE
460:101CB0007920003598787F0F84A001004000791EBC
461:101CC000A07086A00100C000681EA2707800011FED
462:101CD000A07086A00500C000771EBC706820176841
463:101CE0000400136800001C6885A008001E68A3702B
464:101CF00000007E1511200400A07186A101004000A3
465:101D00009B1E86A10700C0008B1E09202B350B20CF
466:101D1000050078009B1E0920133504210920123587
467:101D20000A2009202B350B200100A3700000A770AA
468:101D3000010078009D1EA37000007810C72EA92016
469:101D40001000392000007810A62BB8A70001700001
470:101D5000AB1E7800A31E007020207900AF1EDD1E90
471:101D6000C61EC61EB91EDD1EDD1EB71EB71E7810AC
472:101D7000A51B21205735042405A04000C61E06AD32
473:101D8000C000C61E006822207800D61E1C6884A0F1
474:101D90000100C000D21E106F7810A12C7810D92835
475:101DA0007800D61E5470602000680260166A1C68B5
476:101DB00085A008001E687810DD172120803F78106C
477:101DC000071F212057357810071FA9200000212068
478:101DD000803E7810071F20847000F01E7800E91EF6
479:101DE000A9208000612080361860106102A1126075
480:101DF0001B600000E0AC10007000001F7800F41EB3
481:101E00007F15037000003F7000007800F71B7E0410
482:101E1000042405A04000191F682000687E00166A8F
483:101E20001C6885A008001E687810DD177F00780008
484:101E3000091F7F04232000007C0082A203005000C1
485:101E4000231F7810A51B00237900261F291F9C1F24
486:101E5000AA1F82A2020040002F1F7810A51BA070AD
487:101E6000A3700000C37000007900361F3E1F3E1FA4
488:101E7000401F741F08293E1F741F3E1F7810A51BAA
489:101E8000B4777810A62BB477BCA7000F7810A12CDC
490:101E9000186005A040006B1F2120803F092004002E
491:101EA000112010007810C51F40006B1F7E15A9205F
492:101EB00000002120803E7E04092004001120100033
493:101EC0007810C51F7F0440006A1F208470006A1FBD
494:101ED00078005B1F7F15388784A70700C000461F66
495:101EE0007800FF1B7800FF1BB4777810A12C1860D6
496:101EF00005A040009A1F2120803F092005001120E5
497:101F000020007810C51F40009A1F7E15A9200000F0
498:101F10002120803E7E040920050011202000781039
499:101F2000C51F7F044000991F20847000991F78000E
500:101F30008A1F7F157800FF1B002279009F1FA21FB8
501:101F4000A41FA41F7810A51BA3700000A770010098
502:101F50007800F71B00227900AD1FB21FA41FB01F2D
503:101F60007810A51B78101F24007086A00100C00007
504:101F7000AF287810EF28086084A0EFFF0A6078107F
505:101F8000A2284000AF287800D61C042405A04000F9
506:101F9000E61F6820042D7E00106806A74000D41FAD
507:101FA000202D7F007800C61F7F00222016691C6844
508:101FB00005A21E687810DD171060018012600860AD
509:101FC00084A0EFFF0A607810EF287C0085A0010054
510:101FD0007800E51F00237900ED1FF21FF01F352068
511:101FE0007810A51BE47805A0D00015201800152056
512:101FF000082084A03000C00001201B784900780030
513:10200000F71BEC7884A003004000FD1F002184A092
514:10201000070079000B20232029201D201320582D94
515:10202000582D13202F207810A51B007005A040000C
516:10203000FF1B012003007800FA227810892B1B78FF
517:1020400055007800F71B7810892B1B78DC0078008E
518:10205000F71B7810892B1B78E3007800F71B7810AA
519:10206000892B1B789D007800F71B84A50F00C0000A
520:102070005F2078101F24007079003E2046205320F6
521:102080004620AF284820AF28462046207810A51BC0
522:10209000A071A370000086A10400C0005120780048
523:1020A00008297800AF287810EF28086084A0EFFF97
524:1020B0000A607810A2284000AF287800D61CE47887
525:1020C00005A0D000152018001520082084A030009D
526:1020D000C0006E201B7849007800F71BEC7884A0C4
527:1020E000030040006A20002184A1070079007820C5
528:1020F00088208E2082208020582D582D8020502D21
529:102100007810A51B7810912B1B7855007800F71BD1
530:102110007810912B1B78DC007800F71B7810912B3E
531:102120001B78E3007800F71B7810912B1B789D003B
532:102130007800F71B002379009D20A220A020A42076
533:102140007810A51B7800652617680800A3780000A2
534:10215000E47984A1300040006526EC7884A0030077
535:102160004000652684A107007900B620232029209D
536:102170001D20302D582D582DBE20502D7810A51B18
537:1021800082A205005000C6207810A51B002379000C
538:10219000C920CC20CE22DA2200227900CF20D42000
539:1021A000D620E920D420B3227810A51B9B781800F4
540:1021B000A87884A0FF0082A0200048006A2B8AA093
541:1021C0000400C8006A2B7900E5206A2B6A2B6A2B71
542:1021D0000C2B9B781800A87984A180004000FE2079
543:1021E00084A118004000FA2078006A2B007005A036
544:1021F000C000F420112003007800522784A1FF00C2
545:102200008AA01000C8006A2B790006211821162127
546:102210002E213021C2216A2B6A2BC4216A2B6A2B02
547:10222000AF22AF226A2B6A2B6A2BB1227810A51B32
548:1022300084A60010400025210120000300800080BA
549:102240003A781B789A007800F71B146884A0008005
550:1022500040002C21176803007800302D7810A51B52
551:102260001C691E6984A60018C0004A211C6884A04D
552:102270000100C0005221146886A00800C00042215D
553:102280001768000084A600044000BE211B78580097
554:102290007800F71B84A60010400052211B785800DC
555:1022A0007800F71B84A660004000BA2184A60008CD
556:1022B0004000BA2184A60080C000602178007A2105
557:1022C000B4A6FF7F5A7EB26E9B787400AC7AAC796C
558:1022D000AC781B80C8006D21008084A03F0008A15D
559:1022E00091A20000946B002102A3AE68906B0022C3
560:1022F00003A3AA6884A6004040008221B4A6FFBFC1
561:102300005A7EB26E007086A00300C0008F21781044
562:102310003A2F7810DF301B7867007800F71B06A093
563:1023200078109431AC6AA869946C906B002205A176
564:1023300040009E21002222A400211BA3D27CD67B38
565:10234000002305A4C000AC21B5A600405A7EB26EA1
566:102350001B7867007800F71B1B786700002215A127
567:10236000C000B6217810F0307800F71B78101D31CE
568:102370007800F71B1B786A007800F71B1B78580061
569:102380007800F71B7810A51B780021221C6984A116
570:1023900000014000DC218CA1FFFE1E697E0C48700C
571:1023A0006020006084A0FFEF0260046084A0F5FF5D
572:1023B00006607F0C7800102284A1000240001022E9
573:1023C0008CA1FFFD1E697E0C48706020006084A017
574:1023D000FFDF0260046084A0EFFF06600820482C45
575:1023E0007F0C84A108004000102278109D2C7810EA
576:1023F000E629FF88400010229B7860000028AA7818
577:10240000587EB5A604005A7E84A60004C0000C22A3
578:102410001B7855007800F71B1B7869007800F71BC4
579:10242000587E84A60004C00019221B78580078004A
580:10243000F71B1B786A007800F71B7800702B780078
581:10244000702B1920000090798CA1070040001F22FA
582:102450009B781000A87894A0FF0086A20100C0001D
583:1024600044220023A87C00A4182002A140003C22A2
584:1024700048003C2278003E227800C621A824A87A91
585:10248000F0003E2278002A2284A2F00086A02000DC
586:10249000C000A02218831883002302A14000542208
587:1024A0004800542278009D2286A2230040001F226B
588:1024B000186884A0F1FF1A68587E84A6F1FF85A0F1
589:1024C000100030205A7E086085A010000A607E0C43
590:1024D0004870602004600820482C7F0C84A1100004
591:1024E0004000782278109D2C7810CC2A7800872222
592:1024F0007E0C4870602004600820482C7F0C84A16A
593:1025000008004000102278109D2C7810E629FF88E2
594:10251000400010229B7860000028AA78B5A604002D
595:102520005A7E84A60004C00099221B7855007800CA
596:10253000F71B1B7869007800F71BA87A78002A221D
597:102540001883002302A14000A9224800A922780094
598:102550002A2284A28000C000762B7800702B78009D
599:10256000762B78006A2B9B781800A87884A0FF004F
600:102570008EA001004000BE227810A51BA87A94A26C
601:10258000FF00A87884A0FF008AA00400C8006A2B7E
602:102590007900CA226A2B39296A2B672A82A2000095
603:1025A000C000D4227810A51B7810892B1B786900F5
604:1025B0007800F71B82A20300C000E0227810A51B60
605:1025C0007810992B1B7869007800F71B82A2040011
606:1025D0005000EC227810A51B00237900EF22F22294
607:1025E000C923FA2386A203004000F8227810A51B15
608:1025F000012000003A70007084A0070079000023D9
609:1026000008230A230A2308253025D2240823082377
610:102610007810A51B84A60010C00012237810C72EC6
611:102620004000A32368788CA0FF0040005A2386A1B5
612:102630000800C00029237810EF28086084A0EFFF6D
613:102640000A607810A22840005A237810C72E78001C
614:10265000412386A12800C0005A237810C72E0860A5
615:1026600084A0EFFF0A60186005A0400041230180AC
616:102670001A6005A040004123018005A040004123CD
617:102680001E601C6884A001004000FF1B1C6884A021
618:10269000FEFF1E6854707E0C6020006802607F0C94
619:1026A0000460026805A0002DC00057230260066088
620:1026B0007800FF1B7E0178101F247F0184A600DFB5
621:1026C0001A6827680000106FFF814000A32386A1CD
622:1026D0000200C0009B2384A60008C000772384A6C4
623:1026E000600040007723D878DC7A2E682A6A178742
624:1026F00094A20F0013821382138290A2003690A23C
625:1027000000001C2284A30001C000882378008E23CF
626:102710001082042285A018001220118284A30004D4
627:1027200040009B239C6884A00001C0009B2378107C
628:1027300091247800FF1B86A118004000A32386A1E6
629:1027400014004000FF1B1269146884A00080400040
630:10275000AB23387016688CA600DF1A697810E02861
631:102760007810EF28C000B823086084A0EFFF0A604B
632:102770001C6884A00100C000C1237810D92878000B
633:10278000C52354706020006802607810DD1778005F
634:10279000FF1B82A204004800CF237810A51B002253
635:1027A0007900D223D623D823E523D8237810A51B7C
636:1027B000007086A005004000E1237810892B1B786B
637:1027C00069001B786A007800F71B90780780018009
638:1027D00084A0070080A018009A78A8798CA1FF0037
639:1027E00086A103004000F62378006A2B1B786A005C
640:1027F0007800F71B1C6885A004001E68FF82C000DB
641:1028000005247810892B78000C24118240000A24BA
642:102810007810A51B7810992B1B7869007800F71B9E
643:102820007810772D307884A0C000C0001C241800D8
644:102830001C241A7906A07C0085A001007C0084A6D7
645:102840006000C00029242F6800002B680000780079
646:10285000902484A60008C0003824B06884A00048F2
647:1028600035A684A60008C00038247810C72E7C0046
648:1028700084A6200040006224D0780380C80046244B
649:1028800006A078109431D4787810F93184A60040ED
650:10289000400050242F6800002B6800007800352489
651:1028A000B06884A0004835A684A60040C0004A2431
652:1028B000387005A0C0005C24D879DC7A2E692A6AB9
653:1028C0007800352484A6004040006C242F68000066
654:1028D0002B68000078003524B06884A0004835A635
655:1028E00084A60040C0006624387005A0C0007A2489
656:1028F0003B700700D879DC7AD078F380C800812457
657:10290000008084A03F0008A191A200002E692A6ADD
658:10291000002105A2C0008E2478003524781094315F
659:102920007C0084A3000240009924086085A0020076
660:102930000A6017680600286A2C693A6A3E692B68A3
661:1029400000032F6800003368002093680000976838
662:10295000200000707900AC24B424B624BF24B42431
663:10296000B424B424B424B4247810A51B1C6884A017
664:102970000100C000BF247810D9287800C524547005
665:10298000502C602000680260602A21205735042402
666:1029900005A04000CE2420207800C724222D6B20E3
667:1029A00000007C00B4777810A62BBCA7000F78102D
668:1029B000A12C186005A0400001257E0D0120903F4C
669:1029C00068207F0D2120803F092004001120100085
670:1029D0007810C51F400001257E15A9200000212088
671:1029E000803E7E0409200400112010007810C51FCD
672:1029F0007F04400000252084700000257800F12429
673:102A00007F15388784A70700C000D7247800FF1BF4
674:102A10007810E0287810EF28276800009B780E00D7
675:102A2000106F136802007810CA3184A600084000B5
676:102A30001D2518698DA100201A69146884A00080E2
677:102A40004000242517680000212057350068222007
678:102A5000386A3C692A6A2E697810DD177800FF1BF6
679:102A600078101F24276800009B780E00106F7810E4
680:102A70007C2D8CA0FF001269146884A000804000A7
681:102A80004325387016688CA600DF1A69A370000011
682:102A90007800FF1B06A07810C72E13680000176887
683:102AA00001008CA600DF1A69276800000070790019
684:102AB00059256125632563256525652565256125DE
685:102AC00061257810A51B7810EF28086084A0EFFF1F
686:102AD0000A607800BA28002379006E2571257325D5
687:102AE000B1257810A51B0070790076257E258025FC
688:102AF00080258B25802592257E257E257810A51B97
689:102B000084A60020C0008B25B5A600205A7E781030
690:102B1000F0307800302D146884A0008040009225A9
691:102B200017680700092018350C2186A10000400015
692:102B3000A72586A101004000AB2509202B350B20DD
693:102B40000B00A37001001B7846007800F71B1B7870
694:102B5000DD007800F71B09202B350B200A007800D8
695:102B6000F71B7810A51B00237900B625B925BB25D6
696:102B7000DE257810A51B00707900BE25C625C82566
697:102B8000C825D325C825DA25C625C6257810A51B56
698:102B900084A60020C000D325B5A600205A7E781058
699:102BA000F0307800302D146884A000804000DA25D1
700:102BB000176807001B78E4007800F71B1C6885A0E5
701:102BC00004001E68B5A600087810892B1B786900E0
702:102BD0007800F71B00237900ED25F025F225F42578
703:102BE0007810A51B7810A51B84A60004C00013262E
704:102BF0002B7809309B786000AB78000084A6FBFF3F
705:102C00005A78E47984A1200040000B26EC7884A057
706:102C10000300C0000F26012014007800FA2284A1CE
707:102C2000070079004B26907A94A207009B786000F9
708:102C3000A879FF81400049269B781000A87B84A3D7
709:102C40000100C0003A26A87BA87B86A30100C00033
710:102C50002D260920F7FF7800332686A30300C00045
711:102C60003A260920EFFF7E0C48706020046004A122
712:102C700006607F0C9B786000AB78000084A6FBFFA9
713:102C80005A782B7809301C698CA1FFFD8CA1FFFEBE
714:102C90001E697800302D2320292055265D265326D5
715:102CA00053265326302D7810A51B1C698CA1FFFDDF
716:102CB0008CA1FFFE1E697800382D1C698CA1FFFDD8
717:102CC0008CA1FFFE1E697800302DE47984A13000CC
718:102CD00040006F26EC7884A00300C00077261468BB
719:102CE00085A000801668012014007800FA2284A1D3
720:102CF000070079007B26302D302D8326302D582D6E
721:102D0000582D302D302D84A60004C000B4261C6838
722:102D100084A001004000382D8CA660208CA1FBFF10
723:102D20005A79B2699B786000AB7800009B786100AB
724:102D3000146885A000801668AA787E157E137E141C
725:102D4000A1202C019B7800000080AC8080AD0A009F
726:102D50009820A6537F147F137F15106807809B78F7
727:102D60007E00AA787800382D146884A00080400086
728:102D7000BB26176808001B78D8007800F71B0023D3
729:102D80007900C226C7264227C5267810A51B0070E9
730:102D900084A007007900CC26D426D626F226D42695
731:102DA000D426D224D426D4267810A51B1C698DA144
732:102DB00001001E690068066005A0C000E0260260F0
733:102DC000186884A00E004000EC261470B6682C71C0
734:102DD00088A1803E7800EE260920803F0421026809
735:102DE0000A2D5671B26E84A660004000402784A66A
736:102DF0000008C000042784A6FF7FB268906894682A
737:102E00007810C72E7800402784A62000400016279F
738:102E100006A078109431D0780380C8001227D478A7
739:102E20007810F931D879DC7A78001A277810AE2C2E
740:102E30007810943184A600804000402784A6FF7F4C
741:102E4000B2689B78740078107C2D102078107C2D4F
742:102E5000082084A62000C000382778107C2D1B8015
743:102E6000C8003327008084A03F0008A191A2000081
744:102E7000946B002102A3AE68906B002203A3AA68A2
745:102E80007800FF1B7800762B3370000082A20500CB
746:102E900050004C277810A51B002379004F2752279C
747:102EA0005C277F270022790055275A27762B5A273F
748:102EB000A827F9277810A51B007086A00100C00084
749:102EC00069277810EF287810C72E34700A607800D0
750:102ED0006E27007086A00300400063270370050082
751:102EE0000120903F68203E703270002279007827E0
752:102EF000762B7D27A8277D27762B7810A51B0070C1
753:102F000086A00100C0008C277810EF287810C72E0B
754:102F100034700A6078009127007086A0030040009A
755:102F20008627037005000120903F68203E703270B4
756:102F3000002279009B27A227A027A227A027A2274B
757:102F40007810A51B7810992B1B7869007800F71B67
758:102F5000007086A00100C000B5277810EF28781017
759:102F6000C72E34700A607800BA27007086A003006C
760:102F70004000AF2703700200807A94A2000F9B7874
761:102F80001800A87C84A4070015A26920803F042DA6
762:102F9000082D5671682005A04000D527106806A2AC
763:102FA0004000EE2700687800C82703700500012064
764:102FB000903F68203E7032707E15A9202F000320BC
765:102FC000000000807000E6277800DF277F15126A76
766:102FD000B36800071F68000823680300B06E5A7EBC
767:102FE0001C6884A0000C40004F287810912B7800BA
768:102FF0004F28007086A00100C00006287810EF2836
769:103000007810C72E34700A6078000B28007086A0F4
770:1030100003004000002803700200807A94A2000F91
771:103020009B781800A87C84A4070015A2A879A87929
772:103030008CA1FF00E8A1803E042D082D5671682068
773:1030400005A040002A28106806A240004328006816
774:1030500078001D28037005000120903F68203E7015
775:1030600032707E15A9202F00032000000080700020
776:103070003B28780034287F15126AB36800071F6860
777:10308000000823680300B06E5A7E1C6884A0000C00
778:1030900040004F2878108D2B587E78004F287E02F4
779:1030A000078284A00F0003800380038080A0003685
780:1030B00060204A7000604E700460527084A6600008
781:1030C00040008628946B906CA869AC6805A1C0008C
782:1030D0007428D27BDA7BD67CDE7CB4A6FFB75A7E1E
783:1030E0007810F03078008628AC681AA3002123A459
784:1030F000002405A340008628D27BDA7BD67CDE7CC8
785:10310000AC68B4A6FFBF5A7E78101D317F077810D7
786:10311000A12C09206A0084A60800400091280920FB
787:103120006900B5A600205A7E1A79002D3E700782EC
788:1031300084A00F0003800380038080A00036482015
789:103140007800F71B206005A04000AE2801802260B7
790:10315000086085A008000A60107026607C0006A048
791:103160007810C72E13680000176801001F68400020
792:103170001B680001007084A007007900BF28C728E1
793:10318000C928C928D528D128C728C728C728781012
794:10319000A51B7810E0287810D9287810DD17780062
795:1031A000FF1BA37000007800FF1B17680000780069
796:1031B0000825006805A0C000DE28026006607C00CB
797:1031C000106005A04000E9280180D000E9287810AF
798:1031D000A51B1260086084A0EFFF0A607C001860E5
799:1031E00005A04000F52801801A607C007810772D3A
800:1031F00017681800780026297810772D17681900AD
801:10320000780026297810772D17681A00780026296B
802:10321000B4777810A12CB8718CA1FF00E8A1803E92
803:10322000042D082D682005A0C00018297800FF1B78
804:103230001068B47206A240002029006878001129A5
805:1032400000680A2017680500BF7000007810E028A9
806:103250001C6884A00100C0002F297810D92878109C
807:10326000EF281B6800001F6820007810DD17780029
808:10327000FF1B82A20300C0006A2BA87DACA5FF0043
809:10328000A87EB4A6FF001C698DA180001E6984A1E0
810:103290000001400099298CA1FFFE1E69B4A6FF0021
811:1032A0004000832982A60F0048005A2940005A296D
812:1032B00031200F002B852B857810242C40006429A9
813:1032C0007810332A78008C297810DF2B7E0C602947
814:1032D000046084A0F5FF06607810572A7F0C1C69F3
815:1032E0008DA100011E69587EB5A604005A7E84A6F1
816:1032F0000004C0007F291B7855007800F71B1B785D
817:1033000069007800F71B7E0C6029046084A0F5FF3B
818:1033100006607810572A7F0C587E84A60004C000EF
819:1033200095291B7858007800F71B1B786A007800F5
820:10333000F71B7E0C4870602000618CA100104000DB
821:10334000D9290862178294A2FF0082A20F004800C8
822:10335000AD294000AD2911200F00002602A2C800AF
823:10336000B2293022086294A2FF00187086A02800BB
824:10337000C000C22982A21900C800C8291120190062
825:103380007800C82982A20C00C800C82911200C00AE
826:10339000002202A5C800CD2928227810E32B2B8516
827:1033A0002B857810242C4000D9297810332A7800F6
828:1033B000DD297810DF2B7810572A587885A0040073
829:1033C0005A787F0C1B7869007800F71B7E0C602907
830:1033D000006084A00010C000012A106084A00F00CB
831:1033E000C000FB298CA10200C000FB298CA1F5FFC5
832:1033F00006617F0C7C00112032001920000078004B
833:10340000232A086294A2FF00187086A02800C0003A
834:10341000112A82A21900C800172A11201900780069
835:10342000172A82A20C00C800172A11200C0008637A
836:103430001F839CA3FF0082A30F004800232A4000A3
837:10344000232A19200F00AB780100AB780300AB787A
838:103450000100AA7AAA7BC0A805001C6885A000010B
839:103460001E687F0C7C007E0C48716021082084A0BF
840:10347000F0FF35A6867E18609A78AE7E1266A47834
841:1034800084A0F8FF8CA1070005A1A67816608A78B1
842:10349000B4A60F0037860482048084A0FF0005A62E
843:1034A0000E60046084A0F5FF06607F0C7C007E0C3B
844:1034B0004870602018609A78A47884A0F0FFA678FD
845:1034C0001260847884A0F0FF86787F0C7C0082A252
846:1034D0000200C0006A2BA87A1C698DA180001E69B9
847:1034E00084A100024000AC2A8CA1FFFD1E6994A2B9
848:1034F000FF0082A20200C8006A2B7810F32A78101D
849:10350000572A80A901000C2078109D2C7810E629FC
850:10351000FF8840009F2A9B7860000028AA78587E88
851:10352000B5A604005A7E84A60004C0009B2A1B781E
852:1035300055007800F71B1B7869007800F71B587E50
853:1035400084A60004C000A82A1B7858007800F71B46
854:103550001B786A007800F71B82A20200C800B42A18
855:1035600084A201004000BE2A487188A100000C21FD
856:103570008CA10020C000BE2A112000007810D12BA1
857:103580007810F32A7810572A587885A004005A78C2
858:103590001B7869007800F71B7E0C7E0260290060B2
859:1035A0001120010084A00020C000E32A146084A040
860:1035B0004000C000E12A8CA1EFFF066106A0780060
861:1035C000F02A11200000AB780100AB780200AB7844
862:1035D0000300AA7AC0A804001C6885A000021E6827
863:1035E0007F027F0C7C007E0C48706020FF824000D0
864:1035F000FB2A11204000186080A002009A78A4786D
865:1036000084A0BFFF05A2A67816608A78046084A013
866:10361000EFFF06607F0C7C007E00007086A0030038
867:103620004000152B7F007800182B7F007800662B58
868:1036300084A620004000662B887884A040004000CB
869:10364000662BA87801804000252BB87B84A33F001F
870:103650001B83C8002C2B008005A040004D2B1B8332
871:10366000C800352B01804000622B06A078109431F1
872:10367000B4787810F9317800662B84A600404000B9
873:103680004D2BB8781B80C800462B008084A03F00DB
874:10369000C000622BB4A6FFBF5A7ED879DC7A012025
875:1036A000010008A1C800562B91A20000D279DA7956
876:1036B000D67ADE7A781094311B78670078105E3005
877:1036C0007800F71B1B7867007800F71B1B786A00EF
878:1036D0007800F71B78109D2B1B7869007800F71B8A
879:1036E0007810892B1B7869007800F71B236802008B
880:1036F0007810912B1C698DA120001E69146884A08C
881:1037000000804000852B176805001B786900780051
882:10371000F71B0120050078009F2B01200C0078008A
883:103720009F2B0120060078009F2B01200D007800C0
884:103730009F2B0120090078009F2B012007009B7818
885:103740007F00AA78B5A608005A7E7C007E073F87D6
886:10375000BCA70F003B873B870387E0A00036B8A7D4
887:1037600020009A7FA47984A10F004000BF2B84A180
888:10377000F0FFA6781260046085A008000660388714
889:1037800038879A7FA47984A140004000CF2B84A180
890:10379000BFFFA6781660046085A0100006607F0752
891:1037A0007C009B781000AB780100AB780200AB780E
892:1037B0000300AA7A9B786000AB7804007C0031207B
893:1037C0000000292032009B781000AB780100AB7814
894:1037D0000300AB780100AA7DAA7E9B786000AB78DD
895:1037E00005007C007E15078084A0FF000380038015
896:1037F00080A020009A78A4798CA1F0FF01204635A2
897:10380000042082A0280040000D2C2120842C1920A7
898:103810001400A9200C007800132C2120902C1920D2
899:103820001900A9200D0011206400042484A0F0FFD9
900:1038300006A14000222C2084002310A27000222C1C
901:103840007800152C7F157C007E151120463514223A
902:1038500082A232004800382C40003C2C2120762CDB
903:1038600019201100A9200E001120320078004C2CE4
904:1038700082A228004000442C2120842C192014000E
905:10388000A9200C0078004A2C2120902C1920190026
906:10389000A9200D0011206400002202A540005C2C2C
907:1038A00048005C2C2084002310A27000592C780062
908:1038B0004C2C7F1506A07C007F1582A56400C800F3
909:1038C000652C087885A070000A78EC7884A0000345
910:1038D0004000732C04249EA00112C000732C012010
911:1038E00001217800742C042405A07C000112023010
912:1038F0000232034203440454045605660568067800
913:10390000067A070A070C070E0232024202520262CE
914:103910000272056605760578057A057C057E057FC9
915:1039200002220232024202520454046404740476F5
916:103930000478047A047C047E047F9B78100046A0FF
917:103940007C0084A7000F0C8084A7070003800380FD
918:103950000380038005A1E0A080367C00D879DC7A62
919:10396000D0781B80C800B52C008084A03F0008A13F
920:1039700091A200007C007E0F7920000109204035D3
921:103980009120008004217900C52CF72CCF2CCF2C5E
922:10399000CF2CCF2CCF2CCD2CCD2C7810A51B4B7839
923:1039A0000400487884A00400C000D12C4B780800A3
924:1039B000487884A00800C000D82CB06885A00040DA
925:1039C000B268587885A000405A78307884A080008A
926:1039D000C000F72C1800F72C186884A02000C00045
927:1039E000F52C1B78DD007800F72C1B78E400912083
928:1039F00001807F0F7C007E0C1068078084A00F0080
929:103A0000038003800380E0A00036046084A00A00E5
930:103A1000C0002E2D086194A100FF40002E2D8CA126
931:103A2000FF000120190006A140001D2D01203200D9
932:103A300006A14000212D7800252D092020007800C6
933:103A4000272D09203F007800272D1120000000219C
934:103A500005A20A60046085A0020006607F0C7C005D
935:103A60001B786A007800F71B1B7869007800F71B49
936:103A70001B7858007800F71B1B7855007800F71B5F
937:103A80001B78DD007800F71B1B78DC007800F71B43
938:103A90001B78E4007800F71B1B78E3007800F71B25
939:103AA0001B789E007800F71B1B789D007800F71BA1
940:103AB000A37001001B7846007800F71B7E00307869
941:103AC00084A0C000C000752D087884A0FDFF0A788E
942:103AD0000500050005000500EC7884A021004000E9
943:103AE000752D087885A002000A787F007C00087890
944:103AF00085A002000A787C00307884A04000C000D5
945:103B00007C2D9800852DAC787C00087884A0FDFF82
946:103B10000A780500050005000500EC7884A0210066
947:103B20004000942D9800922DAC787E00087885A0F6
948:103B300002000A787F007C0084A770004000A82D56
949:103B40007E0C602D682F78106B1B782D682C7F0CF5
950:103B500017680300587884A0003F1A682F68000097
951:103B60002B6800004B780800E47805A0D0001520F1
952:103B700084A0200040001520EC7884A003004000C1
953:103B80001520180015207800702B7E0C1068078017
954:103B900084A00F0003800380038080A00036602093
955:103BA00048204A7000604E70046052707F0C7C00A8
956:103BB0002000200000002000000020000000200065
957:103BC0000000200000002000000020000000200075
958:103BD0000000200000002000000020000000200065
959:103BE0000000200000002000000020000000200055
960:103BF000000020006200090014001400479814001F
961:103C00001400F598E798140014008000BF0000012C
962:103C10000204082080F80AA214000B300CA2140041
963:103C200000A238887E812A84A08406383988C22878
964:103C3000C39C05A864083BA80830C128C39C01A206
965:103C40000C30472861816A840080A48456183A8821
966:103C500008A8E228A09CF3A8640829A80C3001A8B1
967:103C60000830E128A09C0D2804A2C064A067C06FA2
968:103C700014183B882370768577860FA86E783E8867
969:103C80000CA82B2805A2A064A067C06F14183B885D
970:103C900023707685778601A83E886920C128C39C59
971:103CA00044200321A2208120DCA807A2140003A243
972:103CB0000080A884A48572189A843C88E21F01F6CB
973:103CC00008A26E856F8604070830A09C140002A22B
974:103CD0000080A4850930A884E21948F87481EB8635
975:103CE000EB852E87A9873F88E608F1A861F8E8A848
976:103CF00001F8140081F81600B285F0803295A2FA1E
977:103D0000E21D1400328521F21400E21DA884E0D6E1
978:103D1000E61F140006A265687F812A84C11D2388DE
979:103D2000160042600880FAA80080A48460812A847A
980:103D300021F00830A884C61DD720228816000080F4
981:103D400048281110FCA80830008000A0022811109B
982:103D5000FDA887A808303D281110FDA809A217006A
983:103D60000C300080A485E21DC1DA1400E0263A87F9
984:103D7000A2FAF219E21F14000BA214000DA27E8118
985:103D80002A84A08406381002CD9C040700007E120D
986:103D9000912000224920C72E0070047205A20C72E7
987:103DA00015A2087084A0FDFF05A24000D92E78005E
988:103DB000DE2E037000007F1200207C00007084A0C3
989:103DC0000100C0000C2F08710481C800EB2E781090
990:103DD000A82F7800E32E0C708CA07F0040000C2FE1
991:103DE00004700480C800032F147005A0C000FF2ECB
992:103DF000107005A04000032F02A1C800E32E077039
993:103E0000100078000C2FFF8A40000C2F78106B31C7
994:103E1000C000062F4000E32E7810562F03700000DC
995:103E20007F1200207C002464FF844000302F702C1F
996:103E30003920352F042768AE0C6830A6086829A5FC
997:103E400021844000302F3887042705A0C0001B2F95
998:103E5000987075A04000302F3920322F78001A2F2B
999:103E60007C000000040008000C0010001400180082
1000:103E70001C0000007E129120002279200035712064
1001:103E8000100007700A000770020003700000712024
1002:103E9000200007700A00077002000370000049202C
1003:103EA0000000B37800007F1200207C004920562FCC
1004:103EB00004700480C800822F077012000871087017
1005:103EC00006A1C0005E2F84A1300040006B2F86A0A9
1006:103ED0003000C0005E2F007084A00100C000822F5F
1007:103EE000087084A00C00C000802F0C7184A1000316
1008:103EF000C000802F84A17F00C000562F7800822F41
1009:103F0000176803000770120007700800047084A08F
1010:103F10000800C000862F0770120008710481480055
1011:103F20008B2FB378000003700000492000007C0054
1012:103F30007E107E007E127E1591200022087178107E
1013:103F4000A82F7F157F12912001807F007F107C00B9
1014:103F50000472182108710C7084A00003C000EA2FBD
1015:103F600084A10C00C000EA2F1382138213821382F3
1016:103F700084A200010DA10B810B810F8184A1070098
1017:103F80007900C22FCC2FDC2FEA2FDC2FFE2FFE2F43
1018:103F9000EA2FFC2F7810A51B07700200FF8AC000D3
1019:103FA000D52F492000007800D92F78106B31C00040
1020:103FB000D52FB37800007C0007700200FF8AC00094
1021:103FC000E32F7800E72F78106B31C000E32FB37830
1022:103FD00000007C00077002007810562F7810BB2C70
1023:103FE000146884A000804000F72F176802007C004E
1024:103FF0007810A51B7810A51B781050301072147122
1025:104000000C709CA07F00002800A311A289A10000D1
1026:10401000B07805A040001030B3780000780033304D
1027:10402000781050300427582C60AC0C63002222A377
1028:10403000086300211BA3002405A340002930C80009
1029:104040002930128410820A8389A10000602B780035
1030:104050001030602B078ABAA7322F3DA7002C826848
1031:10406000866F8E6C8A6B077012007810562F7C005A
1032:104070003887042705A0C0004430986005A04000A0
1033:104080004D3060203920322F518A40004C3008706A
1034:1040900084A0C00086A0C0007C00512000007C00ED
1035:1040A000508A3987042704A0C0005D303920382F9A
1036:1040B000006064A0C0005D30602D7C007E127E0D2B
1037:1040C000912000227F0D806860208468886B8C6C52
1038:1040D0005780D4AAFF0084A0FF00B8A0322F087E2A
1039:1040E000B5A60C00186884A0400040007930B5A641
1040:1040F00001007E0F7920000158787F0F84A04000D6
1041:104100004000883084A60100C0008830B5A60100B8
1042:1041100007700400047084A00400C0008A3000709E
1043:1041200005A0400095307810A51B002405A3C00011
1044:104130009B307800D830582C042760AC046000A471
1045:104140007E001A70006001A31E700920FD04042186
1046:1041500086A0FD047F00C000C83084A0010040009C
1047:10416000C83084A60100C000C83013700100177069
1048:104170000000027607700100B3780100A0A40100DE
1049:1041800099A30000046000A41A70006001A31E70CF
1050:104190000C62002402A212700862002303A21670AF
1051:1041A000027607700100602B781038307800DA3022
1052:1041B00078106B31C000D8307F1200207C007E1256
1053:1041C0007E0D912000227F0D07700400047084A0F2
1054:1041D0000400C000E630037008007F1200207C005D
1055:1041E0007E127E0D912000227F0D4920F030077055
1056:1041F0000400047084A00400C000F930007005A021
1057:10420000400004317810A51B087EB5A60C00186884
1058:1042100084A0400040000E31B5A60100246805A02E
1059:1042200040001A3150203920352F602D78106B3125
1060:10423000C00016317F1200207C007E127E007E01BD
1061:104240007E0D912000227F0D7F037F04087EB5A69E
1062:104250000C00186884A0400040003031B5A6010071
1063:1042600049201D31246855A040006831702D602E12
1064:104270003920352F042768AE0C6822A408681BA3D8
1065:1042800048005531518AC00047317810A51B388746
1066:10429000042705A0C0003B31987075A06020400045
1067:1042A00068313920322F78003A31228420841A83F1
1068:1042B00099A300000C69002422A1086900231BA116
1069:1042C000C80064317810A51B712020007800883068
1070:1042D0007F1200207C00087084A0C00086A0C0006F
1071:1042E00040009331042708AC04211E70088104218A
1072:1042F0001A700881042116700881042112707E0F43
1073:104300007920000158787F0F84A0400040008E3152
1074:1043100084A60100C0008E31B5A6010002760770A8
1075:104320000100781038307C007E127E007E0D9120D6
1076:104330000022492094317F0D7F08087184A1C000BC
1077:10434000C000AA31246805A04000BA317800DE2EF2
1078:104350007800BA3108710481C800B2317810A82FF2
1079:1043600078009D310770100008710481C800B431D5
1080:104370007810A82F087086A00200C0009D31007040
1081:1043800005A0C0009D3103700000492000007F128D
1082:1043900000207C007E127E147E137E157E0D9120FF
1083:1043A00000227F0D4920CA3180AD1000A020992045
1084:1043B00031000C7084A07F00266807700800077029
1085:1043C0000200037001004000E8310080AC80A5537A
1086:1043D00007700400047084A00400C000EA31492082
1087:1043E0000000037000007F157F137F147F120020F0
1088:1043F0007C007E127E007E0D912000227F0D4920E0
1089:10440000F931806860208468886B8C6C5780D4AAEE
1090:10441000FF0084A0FF00B8A0322F087EB5A60400DC
1091:1044200007700400047084A00400C0001232582CED
1092:10443000042760AC046000A41A70006001A31E7021
1093:1044400013700100177000000276077001007F00F2
1094:104450000780092031000A20A0002C320871077063
1095:1044600002000C81C8002C320C81480039327800DF
1096:10447000EA2FA0A4010099A300008A6B8E6C07703C
1097:10448000040049200000037000007F1200207C001F
1098:10449000A920100006A0048086808E81C8005132B9
1099:1044A00000A2F0004C3286808E817C007E15A9200F
1100:1044B000100005A0400077321AA1C800773213829D
1101:1044C0008D8148006A321AA1C8006B32F0005F3259
1102:1044D00078006F321AA108231082F0005F327E004C
1103:1044E000003284A0FFF780207F007F157C007E00D3
1104:1044F000003285A0000878007332E000BF329120BE
1105:104500000060207801802278C000B93224782278B7
1106:104510009120008069204035006884A00700400099
1107:10452000A13286A002004000A13230680DA04000F8
1108:10453000A132042105A04000A13201800A204000E0
1109:104540006F3361208036A9208000346005A04000D0
1110:10455000B33201803660C000B332106005A0400065
1111:10456000B3327810191AE0AC10007000B93278003C
1112:10457000A5327810D4327810C2327810F9329120F6
1113:1045800001807C003C7801803E78C000D3324078C6
1114:104590003E78487805A04000D33201804A78C000B8
1115:1045A000D3327810191A7C00347801803678C00034
1116:1045B000F8323878367891200080447805A0C00021
1117:1045C000E332012001010180467880A0803E402036
1118:1045D000042065A04000F832206005A04000F432BD
1119:1045E00001802260400028330060402C7800E932CE
1120:1045F0007C00287801802A78C00027332C782A781C
1121:10460000307805A0C0000633012080000180327898
1122:10461000038003800380038090A0803698A202006C
1123:10462000042384A008004000273390A2090004223C
1124:1046300005A040001F3301801220C000273304234F
1125:1046400084A0F7FF85A080001A207810191A7C003A
1126:1046500069204035006805A0400032333C6806AC54
1127:1046600040006F3317600600B06084A0003F1A60FE
1128:104670001C6084A0FF0085A060001E6000604220D6
1129:104680001067B66F78109216186805A040004A337C
1130:1046900001801A68086884A0EFFF0A68106801802A
1131:1046A000D00054337810A51B12682F6000002B60D7
1132:1046B0000000682C7810DD176920403501200600C5
1133:1046C000A268447984A10001C0006A33BA6901205C
1134:1046D0000400A2687810141A912001807C0009203F
1135:1046E0004F3564216920000178106B1B17600600AC
1136:1046F000586884A0003F1A601C6084A0FF0085A059
1137:1047000048001E602F6000002B600000306884A00D
1138:1047100040004000AB334B680400A92014004868F7
1139:1047200084A00400400098337000983378008F33E1
1140:104730004B680900A9201400486884A001004000CB
1141:10474000A5337000A53378009C33A920FA007000CF
1142:10475000AB337800A733086884A0FDFF0A681B68A4
1143:104760004600092068350B2007004C784A789120D4
1144:1047700001807C0079200035781003347810CB3329
1145:104780007810E0337810F533337800004778000074
1146:104790004B7800007C0019200A00112046350422C5
1147:1047A00086A032004000DD3319200C00042286A0D0
1148:1047B0003C004000DD33192008002A7B2E7B7C0062
1149:1047C0001920300011204635042286A03200400016
1150:1047D000F23319203900042286A03C004000F23355
1151:1047E00019202700367B3A7B7C0019200D00112010
1152:1047F0004635042286A03C004000003419200A00FF
1153:104800003E7B427B7C001920AF2F112046350422CD
1154:1048100086A032004000153419207139042286A088
1155:104820003C004000153419202626227B267B7C0084
1156:02483000A7924D
1157:00000001FF
1158/* Version 1.31.00 ISP1000 Initiator RISC firmware */
diff --git a/fs/Kconfig b/fs/Kconfig
index 86b203fc3c56..9f7270f36b2a 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -175,9 +175,34 @@ source "fs/qnx4/Kconfig"
175source "fs/romfs/Kconfig" 175source "fs/romfs/Kconfig"
176source "fs/sysv/Kconfig" 176source "fs/sysv/Kconfig"
177source "fs/ufs/Kconfig" 177source "fs/ufs/Kconfig"
178
179source "fs/exofs/Kconfig" 178source "fs/exofs/Kconfig"
180 179
180config NILFS2_FS
181 tristate "NILFS2 file system support (EXPERIMENTAL)"
182 depends on BLOCK && EXPERIMENTAL
183 select CRC32
184 help
185 NILFS2 is a log-structured file system (LFS) supporting continuous
186 snapshotting. In addition to versioning capability of the entire
187 file system, users can even restore files mistakenly overwritten or
188 destroyed just a few seconds ago. Since this file system can keep
189 consistency like conventional LFS, it achieves quick recovery after
190 system crashes.
191
192 NILFS2 creates a number of checkpoints every few seconds or per
193 synchronous write basis (unless there is no change). Users can
194 select significant versions among continuously created checkpoints,
195 and can change them into snapshots which will be preserved for long
196 periods until they are changed back to checkpoints. Each
197 snapshot is mountable as a read-only file system concurrently with
198 its writable mount, and this feature is convenient for online backup.
199
200 Some features including atime, extended attributes, and POSIX ACLs,
201 are not supported yet.
202
203 To compile this file system support as a module, choose M here: the
204 module will be called nilfs2. If unsure, say N.
205
181endif # MISC_FILESYSTEMS 206endif # MISC_FILESYSTEMS
182 207
183menuconfig NETWORK_FILESYSTEMS 208menuconfig NETWORK_FILESYSTEMS
diff --git a/fs/Makefile b/fs/Makefile
index 70b2aed87133..af6d04700d9c 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -114,6 +114,7 @@ obj-$(CONFIG_JFS_FS) += jfs/
114obj-$(CONFIG_XFS_FS) += xfs/ 114obj-$(CONFIG_XFS_FS) += xfs/
115obj-$(CONFIG_9P_FS) += 9p/ 115obj-$(CONFIG_9P_FS) += 9p/
116obj-$(CONFIG_AFS_FS) += afs/ 116obj-$(CONFIG_AFS_FS) += afs/
117obj-$(CONFIG_NILFS2_FS) += nilfs2/
117obj-$(CONFIG_BEFS_FS) += befs/ 118obj-$(CONFIG_BEFS_FS) += befs/
118obj-$(CONFIG_HOSTFS) += hostfs/ 119obj-$(CONFIG_HOSTFS) += hostfs/
119obj-$(CONFIG_HPPFS) += hppfs/ 120obj-$(CONFIG_HPPFS) += hppfs/
diff --git a/fs/befs/debug.c b/fs/befs/debug.c
index b8e304a0661e..622e73775c83 100644
--- a/fs/befs/debug.c
+++ b/fs/befs/debug.c
@@ -17,6 +17,7 @@
17#include <linux/spinlock.h> 17#include <linux/spinlock.h>
18#include <linux/kernel.h> 18#include <linux/kernel.h>
19#include <linux/fs.h> 19#include <linux/fs.h>
20#include <linux/slab.h>
20 21
21#endif /* __KERNEL__ */ 22#endif /* __KERNEL__ */
22 23
diff --git a/fs/buffer.c b/fs/buffer.c
index 5d55a896ff78..6e35762b6169 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -737,7 +737,7 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)
737{ 737{
738 struct buffer_head *bh; 738 struct buffer_head *bh;
739 struct list_head tmp; 739 struct list_head tmp;
740 struct address_space *mapping; 740 struct address_space *mapping, *prev_mapping = NULL;
741 int err = 0, err2; 741 int err = 0, err2;
742 742
743 INIT_LIST_HEAD(&tmp); 743 INIT_LIST_HEAD(&tmp);
@@ -762,7 +762,18 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)
762 * contents - it is a noop if I/O is still in 762 * contents - it is a noop if I/O is still in
763 * flight on potentially older contents. 763 * flight on potentially older contents.
764 */ 764 */
765 ll_rw_block(SWRITE_SYNC, 1, &bh); 765 ll_rw_block(SWRITE_SYNC_PLUG, 1, &bh);
766
767 /*
768 * Kick off IO for the previous mapping. Note
769 * that we will not run the very last mapping,
770 * wait_on_buffer() will do that for us
771 * through sync_buffer().
772 */
773 if (prev_mapping && prev_mapping != mapping)
774 blk_run_address_space(prev_mapping);
775 prev_mapping = mapping;
776
766 brelse(bh); 777 brelse(bh);
767 spin_lock(lock); 778 spin_lock(lock);
768 } 779 }
@@ -2957,12 +2968,13 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhs[])
2957 for (i = 0; i < nr; i++) { 2968 for (i = 0; i < nr; i++) {
2958 struct buffer_head *bh = bhs[i]; 2969 struct buffer_head *bh = bhs[i];
2959 2970
2960 if (rw == SWRITE || rw == SWRITE_SYNC) 2971 if (rw == SWRITE || rw == SWRITE_SYNC || rw == SWRITE_SYNC_PLUG)
2961 lock_buffer(bh); 2972 lock_buffer(bh);
2962 else if (!trylock_buffer(bh)) 2973 else if (!trylock_buffer(bh))
2963 continue; 2974 continue;
2964 2975
2965 if (rw == WRITE || rw == SWRITE || rw == SWRITE_SYNC) { 2976 if (rw == WRITE || rw == SWRITE || rw == SWRITE_SYNC ||
2977 rw == SWRITE_SYNC_PLUG) {
2966 if (test_clear_buffer_dirty(bh)) { 2978 if (test_clear_buffer_dirty(bh)) {
2967 bh->b_end_io = end_buffer_write_sync; 2979 bh->b_end_io = end_buffer_write_sync;
2968 get_bh(bh); 2980 get_bh(bh);
@@ -2998,7 +3010,7 @@ int sync_dirty_buffer(struct buffer_head *bh)
2998 if (test_clear_buffer_dirty(bh)) { 3010 if (test_clear_buffer_dirty(bh)) {
2999 get_bh(bh); 3011 get_bh(bh);
3000 bh->b_end_io = end_buffer_write_sync; 3012 bh->b_end_io = end_buffer_write_sync;
3001 ret = submit_bh(WRITE, bh); 3013 ret = submit_bh(WRITE_SYNC, bh);
3002 wait_on_buffer(bh); 3014 wait_on_buffer(bh);
3003 if (buffer_eopnotsupp(bh)) { 3015 if (buffer_eopnotsupp(bh)) {
3004 clear_buffer_eopnotsupp(bh); 3016 clear_buffer_eopnotsupp(bh);
diff --git a/fs/direct-io.c b/fs/direct-io.c
index b6d43908ff7a..da258e7249cc 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -1126,7 +1126,7 @@ __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
1126 int acquire_i_mutex = 0; 1126 int acquire_i_mutex = 0;
1127 1127
1128 if (rw & WRITE) 1128 if (rw & WRITE)
1129 rw = WRITE_SYNC; 1129 rw = WRITE_ODIRECT;
1130 1130
1131 if (bdev) 1131 if (bdev)
1132 bdev_blkbits = blksize_bits(bdev_hardsect_size(bdev)); 1132 bdev_blkbits = blksize_bits(bdev_hardsect_size(bdev));
diff --git a/fs/ext3/Kconfig b/fs/ext3/Kconfig
index 8e0cfe44b0fc..fb3c1a21b135 100644
--- a/fs/ext3/Kconfig
+++ b/fs/ext3/Kconfig
@@ -28,6 +28,25 @@ config EXT3_FS
28 To compile this file system support as a module, choose M here: the 28 To compile this file system support as a module, choose M here: the
29 module will be called ext3. 29 module will be called ext3.
30 30
31config EXT3_DEFAULTS_TO_ORDERED
32 bool "Default to 'data=ordered' in ext3 (legacy option)"
33 depends on EXT3_FS
34 help
35 If a filesystem does not explicitly specify a data ordering
36 mode, and the journal capability allowed it, ext3 used to
37 historically default to 'data=ordered'.
38
39 That was a rather unfortunate choice, because it leads to all
40 kinds of latency problems, and the 'data=writeback' mode is more
41 appropriate these days.
42
43 You should probably always answer 'n' here, and if you really
44 want to use 'data=ordered' mode, set it in the filesystem itself
45 with 'tune2fs -o journal_data_ordered'.
46
47 But if you really want to enable the legacy default, you can do
48 so by answering 'y' to this question.
49
31config EXT3_FS_XATTR 50config EXT3_FS_XATTR
32 bool "Ext3 extended attributes" 51 bool "Ext3 extended attributes"
33 depends on EXT3_FS 52 depends on EXT3_FS
diff --git a/fs/ext3/super.c b/fs/ext3/super.c
index 9e5b8e387e1e..599dbfe504c3 100644
--- a/fs/ext3/super.c
+++ b/fs/ext3/super.c
@@ -44,6 +44,12 @@
44#include "acl.h" 44#include "acl.h"
45#include "namei.h" 45#include "namei.h"
46 46
47#ifdef CONFIG_EXT3_DEFAULTS_TO_ORDERED
48 #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_ORDERED_DATA
49#else
50 #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_WRITEBACK_DATA
51#endif
52
47static int ext3_load_journal(struct super_block *, struct ext3_super_block *, 53static int ext3_load_journal(struct super_block *, struct ext3_super_block *,
48 unsigned long journal_devnum); 54 unsigned long journal_devnum);
49static int ext3_create_journal(struct super_block *, struct ext3_super_block *, 55static int ext3_create_journal(struct super_block *, struct ext3_super_block *,
@@ -1919,7 +1925,7 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent)
1919 cope, else JOURNAL_DATA */ 1925 cope, else JOURNAL_DATA */
1920 if (journal_check_available_features 1926 if (journal_check_available_features
1921 (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) 1927 (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE))
1922 set_opt(sbi->s_mount_opt, ORDERED_DATA); 1928 set_opt(sbi->s_mount_opt, DEFAULT_DATA_MODE);
1923 else 1929 else
1924 set_opt(sbi->s_mount_opt, JOURNAL_DATA); 1930 set_opt(sbi->s_mount_opt, JOURNAL_DATA);
1925 break; 1931 break;
diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c
index f8077b9c8981..a8e8513a78a9 100644
--- a/fs/jbd/commit.c
+++ b/fs/jbd/commit.c
@@ -351,8 +351,13 @@ void journal_commit_transaction(journal_t *journal)
351 spin_lock(&journal->j_state_lock); 351 spin_lock(&journal->j_state_lock);
352 commit_transaction->t_state = T_LOCKED; 352 commit_transaction->t_state = T_LOCKED;
353 353
354 /*
355 * Use plugged writes here, since we want to submit several before
356 * we unplug the device. We don't do explicit unplugging in here,
357 * instead we rely on sync_buffer() doing the unplug for us.
358 */
354 if (commit_transaction->t_synchronous_commit) 359 if (commit_transaction->t_synchronous_commit)
355 write_op = WRITE_SYNC; 360 write_op = WRITE_SYNC_PLUG;
356 spin_lock(&commit_transaction->t_handle_lock); 361 spin_lock(&commit_transaction->t_handle_lock);
357 while (commit_transaction->t_updates) { 362 while (commit_transaction->t_updates) {
358 DEFINE_WAIT(wait); 363 DEFINE_WAIT(wait);
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 4ea72377c7a2..073c8c3df7cd 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -138,7 +138,7 @@ static int journal_submit_commit_record(journal_t *journal,
138 set_buffer_ordered(bh); 138 set_buffer_ordered(bh);
139 barrier_done = 1; 139 barrier_done = 1;
140 } 140 }
141 ret = submit_bh(WRITE_SYNC, bh); 141 ret = submit_bh(WRITE_SYNC_PLUG, bh);
142 if (barrier_done) 142 if (barrier_done)
143 clear_buffer_ordered(bh); 143 clear_buffer_ordered(bh);
144 144
@@ -159,7 +159,7 @@ static int journal_submit_commit_record(journal_t *journal,
159 lock_buffer(bh); 159 lock_buffer(bh);
160 set_buffer_uptodate(bh); 160 set_buffer_uptodate(bh);
161 clear_buffer_dirty(bh); 161 clear_buffer_dirty(bh);
162 ret = submit_bh(WRITE_SYNC, bh); 162 ret = submit_bh(WRITE_SYNC_PLUG, bh);
163 } 163 }
164 *cbh = bh; 164 *cbh = bh;
165 return ret; 165 return ret;
@@ -190,7 +190,7 @@ retry:
190 set_buffer_uptodate(bh); 190 set_buffer_uptodate(bh);
191 bh->b_end_io = journal_end_buffer_io_sync; 191 bh->b_end_io = journal_end_buffer_io_sync;
192 192
193 ret = submit_bh(WRITE_SYNC, bh); 193 ret = submit_bh(WRITE_SYNC_PLUG, bh);
194 if (ret) { 194 if (ret) {
195 unlock_buffer(bh); 195 unlock_buffer(bh);
196 return ret; 196 return ret;
@@ -402,8 +402,13 @@ void jbd2_journal_commit_transaction(journal_t *journal)
402 spin_lock(&journal->j_state_lock); 402 spin_lock(&journal->j_state_lock);
403 commit_transaction->t_state = T_LOCKED; 403 commit_transaction->t_state = T_LOCKED;
404 404
405 /*
406 * Use plugged writes here, since we want to submit several before
407 * we unplug the device. We don't do explicit unplugging in here,
408 * instead we rely on sync_buffer() doing the unplug for us.
409 */
405 if (commit_transaction->t_synchronous_commit) 410 if (commit_transaction->t_synchronous_commit)
406 write_op = WRITE_SYNC; 411 write_op = WRITE_SYNC_PLUG;
407 stats.u.run.rs_wait = commit_transaction->t_max_wait; 412 stats.u.run.rs_wait = commit_transaction->t_max_wait;
408 stats.u.run.rs_locked = jiffies; 413 stats.u.run.rs_locked = jiffies;
409 stats.u.run.rs_running = jbd2_time_diff(commit_transaction->t_start, 414 stats.u.run.rs_running = jbd2_time_diff(commit_transaction->t_start,
diff --git a/fs/jffs2/acl.c b/fs/jffs2/acl.c
index 77ccf8cb0823..043740dde20c 100644
--- a/fs/jffs2/acl.c
+++ b/fs/jffs2/acl.c
@@ -38,12 +38,12 @@ static int jffs2_acl_count(size_t size)
38 size_t s; 38 size_t s;
39 39
40 size -= sizeof(struct jffs2_acl_header); 40 size -= sizeof(struct jffs2_acl_header);
41 s = size - 4 * sizeof(struct jffs2_acl_entry_short); 41 if (size < 4 * sizeof(struct jffs2_acl_entry_short)) {
42 if (s < 0) {
43 if (size % sizeof(struct jffs2_acl_entry_short)) 42 if (size % sizeof(struct jffs2_acl_entry_short))
44 return -1; 43 return -1;
45 return size / sizeof(struct jffs2_acl_entry_short); 44 return size / sizeof(struct jffs2_acl_entry_short);
46 } else { 45 } else {
46 s = size - 4 * sizeof(struct jffs2_acl_entry_short);
47 if (s % sizeof(struct jffs2_acl_entry)) 47 if (s % sizeof(struct jffs2_acl_entry))
48 return -1; 48 return -1;
49 return s / sizeof(struct jffs2_acl_entry) + 4; 49 return s / sizeof(struct jffs2_acl_entry) + 4;
diff --git a/fs/jffs2/malloc.c b/fs/jffs2/malloc.c
index f9211252b5f1..9eff2bdae8a7 100644
--- a/fs/jffs2/malloc.c
+++ b/fs/jffs2/malloc.c
@@ -284,10 +284,9 @@ void jffs2_free_inode_cache(struct jffs2_inode_cache *x)
284struct jffs2_xattr_datum *jffs2_alloc_xattr_datum(void) 284struct jffs2_xattr_datum *jffs2_alloc_xattr_datum(void)
285{ 285{
286 struct jffs2_xattr_datum *xd; 286 struct jffs2_xattr_datum *xd;
287 xd = kmem_cache_alloc(xattr_datum_cache, GFP_KERNEL); 287 xd = kmem_cache_zalloc(xattr_datum_cache, GFP_KERNEL);
288 dbg_memalloc("%p\n", xd); 288 dbg_memalloc("%p\n", xd);
289 289
290 memset(xd, 0, sizeof(struct jffs2_xattr_datum));
291 xd->class = RAWNODE_CLASS_XATTR_DATUM; 290 xd->class = RAWNODE_CLASS_XATTR_DATUM;
292 xd->node = (void *)xd; 291 xd->node = (void *)xd;
293 INIT_LIST_HEAD(&xd->xindex); 292 INIT_LIST_HEAD(&xd->xindex);
@@ -303,10 +302,9 @@ void jffs2_free_xattr_datum(struct jffs2_xattr_datum *xd)
303struct jffs2_xattr_ref *jffs2_alloc_xattr_ref(void) 302struct jffs2_xattr_ref *jffs2_alloc_xattr_ref(void)
304{ 303{
305 struct jffs2_xattr_ref *ref; 304 struct jffs2_xattr_ref *ref;
306 ref = kmem_cache_alloc(xattr_ref_cache, GFP_KERNEL); 305 ref = kmem_cache_zalloc(xattr_ref_cache, GFP_KERNEL);
307 dbg_memalloc("%p\n", ref); 306 dbg_memalloc("%p\n", ref);
308 307
309 memset(ref, 0, sizeof(struct jffs2_xattr_ref));
310 ref->class = RAWNODE_CLASS_XATTR_REF; 308 ref->class = RAWNODE_CLASS_XATTR_REF;
311 ref->node = (void *)ref; 309 ref->node = (void *)ref;
312 return ref; 310 return ref;
diff --git a/fs/libfs.c b/fs/libfs.c
index 4910a36f516e..cd223190c4e9 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -575,6 +575,21 @@ ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
575 * possibly a read which collects the result - which is stored in a 575 * possibly a read which collects the result - which is stored in a
576 * file-local buffer. 576 * file-local buffer.
577 */ 577 */
578
579void simple_transaction_set(struct file *file, size_t n)
580{
581 struct simple_transaction_argresp *ar = file->private_data;
582
583 BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
584
585 /*
586 * The barrier ensures that ar->size will really remain zero until
587 * ar->data is ready for reading.
588 */
589 smp_mb();
590 ar->size = n;
591}
592
578char *simple_transaction_get(struct file *file, const char __user *buf, size_t size) 593char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
579{ 594{
580 struct simple_transaction_argresp *ar; 595 struct simple_transaction_argresp *ar;
@@ -820,6 +835,7 @@ EXPORT_SYMBOL(simple_sync_file);
820EXPORT_SYMBOL(simple_unlink); 835EXPORT_SYMBOL(simple_unlink);
821EXPORT_SYMBOL(simple_read_from_buffer); 836EXPORT_SYMBOL(simple_read_from_buffer);
822EXPORT_SYMBOL(memory_read_from_buffer); 837EXPORT_SYMBOL(memory_read_from_buffer);
838EXPORT_SYMBOL(simple_transaction_set);
823EXPORT_SYMBOL(simple_transaction_get); 839EXPORT_SYMBOL(simple_transaction_get);
824EXPORT_SYMBOL(simple_transaction_read); 840EXPORT_SYMBOL(simple_transaction_read);
825EXPORT_SYMBOL(simple_transaction_release); 841EXPORT_SYMBOL(simple_transaction_release);
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index 763b78a6e9de..83ee34203bd7 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -426,8 +426,15 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
426 ret = nlm_granted; 426 ret = nlm_granted;
427 goto out; 427 goto out;
428 case -EAGAIN: 428 case -EAGAIN:
429 /*
430 * If this is a blocking request for an
431 * already pending lock request then we need
432 * to put it back on lockd's block list
433 */
434 if (wait)
435 break;
429 ret = nlm_lck_denied; 436 ret = nlm_lck_denied;
430 break; 437 goto out;
431 case FILE_LOCK_DEFERRED: 438 case FILE_LOCK_DEFERRED:
432 if (wait) 439 if (wait)
433 break; 440 break;
@@ -443,10 +450,6 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
443 goto out; 450 goto out;
444 } 451 }
445 452
446 ret = nlm_lck_denied;
447 if (!wait)
448 goto out;
449
450 ret = nlm_lck_blocked; 453 ret = nlm_lck_blocked;
451 454
452 /* Append to list of blocked */ 455 /* Append to list of blocked */
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 82eaadbff408..6717200923fe 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -1228,7 +1228,6 @@ static int nfs_parse_mount_options(char *raw,
1228 goto out_nomem; 1228 goto out_nomem;
1229 token = match_token(string, 1229 token = match_token(string,
1230 nfs_xprt_protocol_tokens, args); 1230 nfs_xprt_protocol_tokens, args);
1231 kfree(string);
1232 1231
1233 switch (token) { 1232 switch (token) {
1234 case Opt_xprt_udp: 1233 case Opt_xprt_udp:
@@ -1258,6 +1257,7 @@ static int nfs_parse_mount_options(char *raw,
1258 goto out_nomem; 1257 goto out_nomem;
1259 token = match_token(string, 1258 token = match_token(string,
1260 nfs_xprt_protocol_tokens, args); 1259 nfs_xprt_protocol_tokens, args);
1260 kfree(string);
1261 1261
1262 switch (token) { 1262 switch (token) {
1263 case Opt_xprt_udp: 1263 case Opt_xprt_udp:
diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
index 44d7d04dab95..503b9da159a3 100644
--- a/fs/nfsd/Kconfig
+++ b/fs/nfsd/Kconfig
@@ -1,6 +1,7 @@
1config NFSD 1config NFSD
2 tristate "NFS server support" 2 tristate "NFS server support"
3 depends on INET 3 depends on INET
4 depends on FILE_LOCKING
4 select LOCKD 5 select LOCKD
5 select SUNRPC 6 select SUNRPC
6 select EXPORTFS 7 select EXPORTFS
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
index 9dbd2eb91281..7c9fe838f038 100644
--- a/fs/nfsd/nfs3proc.c
+++ b/fs/nfsd/nfs3proc.c
@@ -18,6 +18,7 @@
18#include <linux/unistd.h> 18#include <linux/unistd.h>
19#include <linux/slab.h> 19#include <linux/slab.h>
20#include <linux/major.h> 20#include <linux/major.h>
21#include <linux/magic.h>
21 22
22#include <linux/sunrpc/svc.h> 23#include <linux/sunrpc/svc.h>
23#include <linux/nfsd/nfsd.h> 24#include <linux/nfsd/nfsd.h>
@@ -202,6 +203,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp,
202 struct nfsd3_writeres *resp) 203 struct nfsd3_writeres *resp)
203{ 204{
204 __be32 nfserr; 205 __be32 nfserr;
206 unsigned long cnt = argp->len;
205 207
206 dprintk("nfsd: WRITE(3) %s %d bytes at %ld%s\n", 208 dprintk("nfsd: WRITE(3) %s %d bytes at %ld%s\n",
207 SVCFH_fmt(&argp->fh), 209 SVCFH_fmt(&argp->fh),
@@ -214,9 +216,9 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp,
214 nfserr = nfsd_write(rqstp, &resp->fh, NULL, 216 nfserr = nfsd_write(rqstp, &resp->fh, NULL,
215 argp->offset, 217 argp->offset,
216 rqstp->rq_vec, argp->vlen, 218 rqstp->rq_vec, argp->vlen,
217 argp->len, 219 &cnt,
218 &resp->committed); 220 &resp->committed);
219 resp->count = argp->count; 221 resp->count = cnt;
220 RETURN_STATUS(nfserr); 222 RETURN_STATUS(nfserr);
221} 223}
222 224
@@ -569,7 +571,7 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
569 struct super_block *sb = argp->fh.fh_dentry->d_inode->i_sb; 571 struct super_block *sb = argp->fh.fh_dentry->d_inode->i_sb;
570 572
571 /* Note that we don't care for remote fs's here */ 573 /* Note that we don't care for remote fs's here */
572 if (sb->s_magic == 0x4d44 /* MSDOS_SUPER_MAGIC */) { 574 if (sb->s_magic == MSDOS_SUPER_MAGIC) {
573 resp->f_properties = NFS3_FSF_BILLYBOY; 575 resp->f_properties = NFS3_FSF_BILLYBOY;
574 } 576 }
575 resp->f_maxfilesize = sb->s_maxbytes; 577 resp->f_maxfilesize = sb->s_maxbytes;
@@ -610,7 +612,7 @@ nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
610 resp->p_link_max = EXT2_LINK_MAX; 612 resp->p_link_max = EXT2_LINK_MAX;
611 resp->p_name_max = EXT2_NAME_LEN; 613 resp->p_name_max = EXT2_NAME_LEN;
612 break; 614 break;
613 case 0x4d44: /* MSDOS_SUPER_MAGIC */ 615 case MSDOS_SUPER_MAGIC:
614 resp->p_case_insensitive = 1; 616 resp->p_case_insensitive = 1;
615 resp->p_case_preserving = 0; 617 resp->p_case_preserving = 0;
616 break; 618 break;
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index c464181b5994..290289bd44f7 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -218,7 +218,7 @@ static int
218encode_cb_recall(struct xdr_stream *xdr, struct nfs4_cb_recall *cb_rec) 218encode_cb_recall(struct xdr_stream *xdr, struct nfs4_cb_recall *cb_rec)
219{ 219{
220 __be32 *p; 220 __be32 *p;
221 int len = cb_rec->cbr_fhlen; 221 int len = cb_rec->cbr_fh.fh_size;
222 222
223 RESERVE_SPACE(12+sizeof(cb_rec->cbr_stateid) + len); 223 RESERVE_SPACE(12+sizeof(cb_rec->cbr_stateid) + len);
224 WRITE32(OP_CB_RECALL); 224 WRITE32(OP_CB_RECALL);
@@ -226,7 +226,7 @@ encode_cb_recall(struct xdr_stream *xdr, struct nfs4_cb_recall *cb_rec)
226 WRITEMEM(&cb_rec->cbr_stateid.si_opaque, sizeof(stateid_opaque_t)); 226 WRITEMEM(&cb_rec->cbr_stateid.si_opaque, sizeof(stateid_opaque_t));
227 WRITE32(cb_rec->cbr_trunc); 227 WRITE32(cb_rec->cbr_trunc);
228 WRITE32(len); 228 WRITE32(len);
229 WRITEMEM(cb_rec->cbr_fhval, len); 229 WRITEMEM(&cb_rec->cbr_fh.fh_base, len);
230 return 0; 230 return 0;
231} 231}
232 232
@@ -361,9 +361,8 @@ static struct rpc_program cb_program = {
361/* Reference counting, callback cleanup, etc., all look racy as heck. 361/* Reference counting, callback cleanup, etc., all look racy as heck.
362 * And why is cb_set an atomic? */ 362 * And why is cb_set an atomic? */
363 363
364static int do_probe_callback(void *data) 364static struct rpc_clnt *setup_callback_client(struct nfs4_client *clp)
365{ 365{
366 struct nfs4_client *clp = data;
367 struct sockaddr_in addr; 366 struct sockaddr_in addr;
368 struct nfs4_callback *cb = &clp->cl_callback; 367 struct nfs4_callback *cb = &clp->cl_callback;
369 struct rpc_timeout timeparms = { 368 struct rpc_timeout timeparms = {
@@ -384,17 +383,10 @@ static int do_probe_callback(void *data)
384 .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), 383 .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
385 .client_name = clp->cl_principal, 384 .client_name = clp->cl_principal,
386 }; 385 };
387 struct rpc_message msg = {
388 .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
389 .rpc_argp = clp,
390 };
391 struct rpc_clnt *client; 386 struct rpc_clnt *client;
392 int status;
393 387
394 if (!clp->cl_principal && (clp->cl_flavor >= RPC_AUTH_GSS_KRB5)) { 388 if (!clp->cl_principal && (clp->cl_flavor >= RPC_AUTH_GSS_KRB5))
395 status = nfserr_cb_path_down; 389 return ERR_PTR(-EINVAL);
396 goto out_err;
397 }
398 390
399 /* Initialize address */ 391 /* Initialize address */
400 memset(&addr, 0, sizeof(addr)); 392 memset(&addr, 0, sizeof(addr));
@@ -404,9 +396,29 @@ static int do_probe_callback(void *data)
404 396
405 /* Create RPC client */ 397 /* Create RPC client */
406 client = rpc_create(&args); 398 client = rpc_create(&args);
399 if (IS_ERR(client))
400 dprintk("NFSD: couldn't create callback client: %ld\n",
401 PTR_ERR(client));
402 return client;
403
404}
405
406static int do_probe_callback(void *data)
407{
408 struct nfs4_client *clp = data;
409 struct nfs4_callback *cb = &clp->cl_callback;
410 struct rpc_message msg = {
411 .rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
412 .rpc_argp = clp,
413 };
414 struct rpc_clnt *client;
415 int status;
416
417 client = setup_callback_client(clp);
407 if (IS_ERR(client)) { 418 if (IS_ERR(client)) {
408 dprintk("NFSD: couldn't create callback client\n");
409 status = PTR_ERR(client); 419 status = PTR_ERR(client);
420 dprintk("NFSD: couldn't create callback client: %d\n",
421 status);
410 goto out_err; 422 goto out_err;
411 } 423 }
412 424
@@ -422,10 +434,10 @@ static int do_probe_callback(void *data)
422out_release_client: 434out_release_client:
423 rpc_shutdown_client(client); 435 rpc_shutdown_client(client);
424out_err: 436out_err:
425 dprintk("NFSD: warning: no callback path to client %.*s\n", 437 dprintk("NFSD: warning: no callback path to client %.*s: error %d\n",
426 (int)clp->cl_name.len, clp->cl_name.data); 438 (int)clp->cl_name.len, clp->cl_name.data, status);
427 put_nfs4_client(clp); 439 put_nfs4_client(clp);
428 return status; 440 return 0;
429} 441}
430 442
431/* 443/*
@@ -451,7 +463,6 @@ nfsd4_probe_callback(struct nfs4_client *clp)
451 463
452/* 464/*
453 * called with dp->dl_count inc'ed. 465 * called with dp->dl_count inc'ed.
454 * nfs4_lock_state() may or may not have been called.
455 */ 466 */
456void 467void
457nfsd4_cb_recall(struct nfs4_delegation *dp) 468nfsd4_cb_recall(struct nfs4_delegation *dp)
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index 9fa60a3ad48c..b2883e9c6381 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -93,6 +93,21 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
93 open->op_truncate = 0; 93 open->op_truncate = 0;
94 94
95 if (open->op_create) { 95 if (open->op_create) {
96 /* FIXME: check session persistence and pnfs flags.
97 * The nfsv4.1 spec requires the following semantics:
98 *
99 * Persistent | pNFS | Server REQUIRED | Client Allowed
100 * Reply Cache | server | |
101 * -------------+--------+-----------------+--------------------
102 * no | no | EXCLUSIVE4_1 | EXCLUSIVE4_1
103 * | | | (SHOULD)
104 * | | and EXCLUSIVE4 | or EXCLUSIVE4
105 * | | | (SHOULD NOT)
106 * no | yes | EXCLUSIVE4_1 | EXCLUSIVE4_1
107 * yes | no | GUARDED4 | GUARDED4
108 * yes | yes | GUARDED4 | GUARDED4
109 */
110
96 /* 111 /*
97 * Note: create modes (UNCHECKED,GUARDED...) are the same 112 * Note: create modes (UNCHECKED,GUARDED...) are the same
98 * in NFSv4 as in v3. 113 * in NFSv4 as in v3.
@@ -103,11 +118,13 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
103 (u32 *)open->op_verf.data, 118 (u32 *)open->op_verf.data,
104 &open->op_truncate, &created); 119 &open->op_truncate, &created);
105 120
106 /* If we ever decide to use different attrs to store the 121 /*
107 * verifier in nfsd_create_v3, then we'll need to change this 122 * Following rfc 3530 14.2.16, use the returned bitmask
123 * to indicate which attributes we used to store the
124 * verifier:
108 */ 125 */
109 if (open->op_createmode == NFS4_CREATE_EXCLUSIVE && status == 0) 126 if (open->op_createmode == NFS4_CREATE_EXCLUSIVE && status == 0)
110 open->op_bmval[1] |= (FATTR4_WORD1_TIME_ACCESS | 127 open->op_bmval[1] = (FATTR4_WORD1_TIME_ACCESS |
111 FATTR4_WORD1_TIME_MODIFY); 128 FATTR4_WORD1_TIME_MODIFY);
112 } else { 129 } else {
113 status = nfsd_lookup(rqstp, current_fh, 130 status = nfsd_lookup(rqstp, current_fh,
@@ -118,13 +135,11 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
118 goto out; 135 goto out;
119 136
120 set_change_info(&open->op_cinfo, current_fh); 137 set_change_info(&open->op_cinfo, current_fh);
121
122 /* set reply cache */
123 fh_dup2(current_fh, &resfh); 138 fh_dup2(current_fh, &resfh);
124 open->op_stateowner->so_replay.rp_openfh_len = resfh.fh_handle.fh_size;
125 memcpy(open->op_stateowner->so_replay.rp_openfh,
126 &resfh.fh_handle.fh_base, resfh.fh_handle.fh_size);
127 139
140 /* set reply cache */
141 fh_copy_shallow(&open->op_stateowner->so_replay.rp_openfh,
142 &resfh.fh_handle);
128 if (!created) 143 if (!created)
129 status = do_open_permission(rqstp, current_fh, open, 144 status = do_open_permission(rqstp, current_fh, open,
130 NFSD_MAY_NOP); 145 NFSD_MAY_NOP);
@@ -150,10 +165,8 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_
150 memset(&open->op_cinfo, 0, sizeof(struct nfsd4_change_info)); 165 memset(&open->op_cinfo, 0, sizeof(struct nfsd4_change_info));
151 166
152 /* set replay cache */ 167 /* set replay cache */
153 open->op_stateowner->so_replay.rp_openfh_len = current_fh->fh_handle.fh_size; 168 fh_copy_shallow(&open->op_stateowner->so_replay.rp_openfh,
154 memcpy(open->op_stateowner->so_replay.rp_openfh, 169 &current_fh->fh_handle);
155 &current_fh->fh_handle.fh_base,
156 current_fh->fh_handle.fh_size);
157 170
158 open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) && 171 open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) &&
159 (open->op_iattr.ia_size == 0); 172 (open->op_iattr.ia_size == 0);
@@ -164,12 +177,23 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_
164 return status; 177 return status;
165} 178}
166 179
180static void
181copy_clientid(clientid_t *clid, struct nfsd4_session *session)
182{
183 struct nfsd4_sessionid *sid =
184 (struct nfsd4_sessionid *)session->se_sessionid.data;
185
186 clid->cl_boot = sid->clientid.cl_boot;
187 clid->cl_id = sid->clientid.cl_id;
188}
167 189
168static __be32 190static __be32
169nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 191nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
170 struct nfsd4_open *open) 192 struct nfsd4_open *open)
171{ 193{
172 __be32 status; 194 __be32 status;
195 struct nfsd4_compoundres *resp;
196
173 dprintk("NFSD: nfsd4_open filename %.*s op_stateowner %p\n", 197 dprintk("NFSD: nfsd4_open filename %.*s op_stateowner %p\n",
174 (int)open->op_fname.len, open->op_fname.data, 198 (int)open->op_fname.len, open->op_fname.data,
175 open->op_stateowner); 199 open->op_stateowner);
@@ -178,16 +202,19 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
178 if (open->op_create && open->op_claim_type != NFS4_OPEN_CLAIM_NULL) 202 if (open->op_create && open->op_claim_type != NFS4_OPEN_CLAIM_NULL)
179 return nfserr_inval; 203 return nfserr_inval;
180 204
205 if (nfsd4_has_session(cstate))
206 copy_clientid(&open->op_clientid, cstate->session);
207
181 nfs4_lock_state(); 208 nfs4_lock_state();
182 209
183 /* check seqid for replay. set nfs4_owner */ 210 /* check seqid for replay. set nfs4_owner */
184 status = nfsd4_process_open1(open); 211 resp = rqstp->rq_resp;
212 status = nfsd4_process_open1(&resp->cstate, open);
185 if (status == nfserr_replay_me) { 213 if (status == nfserr_replay_me) {
186 struct nfs4_replay *rp = &open->op_stateowner->so_replay; 214 struct nfs4_replay *rp = &open->op_stateowner->so_replay;
187 fh_put(&cstate->current_fh); 215 fh_put(&cstate->current_fh);
188 cstate->current_fh.fh_handle.fh_size = rp->rp_openfh_len; 216 fh_copy_shallow(&cstate->current_fh.fh_handle,
189 memcpy(&cstate->current_fh.fh_handle.fh_base, rp->rp_openfh, 217 &rp->rp_openfh);
190 rp->rp_openfh_len);
191 status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP); 218 status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP);
192 if (status) 219 if (status)
193 dprintk("nfsd4_open: replay failed" 220 dprintk("nfsd4_open: replay failed"
@@ -209,10 +236,6 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
209 236
210 switch (open->op_claim_type) { 237 switch (open->op_claim_type) {
211 case NFS4_OPEN_CLAIM_DELEGATE_CUR: 238 case NFS4_OPEN_CLAIM_DELEGATE_CUR:
212 status = nfserr_inval;
213 if (open->op_create)
214 goto out;
215 /* fall through */
216 case NFS4_OPEN_CLAIM_NULL: 239 case NFS4_OPEN_CLAIM_NULL:
217 /* 240 /*
218 * (1) set CURRENT_FH to the file being opened, 241 * (1) set CURRENT_FH to the file being opened,
@@ -455,8 +478,9 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
455 if (getattr->ga_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1) 478 if (getattr->ga_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1)
456 return nfserr_inval; 479 return nfserr_inval;
457 480
458 getattr->ga_bmval[0] &= NFSD_SUPPORTED_ATTRS_WORD0; 481 getattr->ga_bmval[0] &= nfsd_suppattrs0(cstate->minorversion);
459 getattr->ga_bmval[1] &= NFSD_SUPPORTED_ATTRS_WORD1; 482 getattr->ga_bmval[1] &= nfsd_suppattrs1(cstate->minorversion);
483 getattr->ga_bmval[2] &= nfsd_suppattrs2(cstate->minorversion);
460 484
461 getattr->ga_fhp = &cstate->current_fh; 485 getattr->ga_fhp = &cstate->current_fh;
462 return nfs_ok; 486 return nfs_ok;
@@ -520,9 +544,8 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
520 544
521 nfs4_lock_state(); 545 nfs4_lock_state();
522 /* check stateid */ 546 /* check stateid */
523 if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh, 547 if ((status = nfs4_preprocess_stateid_op(cstate, &read->rd_stateid,
524 &read->rd_stateid, 548 RD_STATE, &read->rd_filp))) {
525 CHECK_FH | RD_STATE, &read->rd_filp))) {
526 dprintk("NFSD: nfsd4_read: couldn't process stateid!\n"); 549 dprintk("NFSD: nfsd4_read: couldn't process stateid!\n");
527 goto out; 550 goto out;
528 } 551 }
@@ -548,8 +571,9 @@ nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
548 if (readdir->rd_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1) 571 if (readdir->rd_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1)
549 return nfserr_inval; 572 return nfserr_inval;
550 573
551 readdir->rd_bmval[0] &= NFSD_SUPPORTED_ATTRS_WORD0; 574 readdir->rd_bmval[0] &= nfsd_suppattrs0(cstate->minorversion);
552 readdir->rd_bmval[1] &= NFSD_SUPPORTED_ATTRS_WORD1; 575 readdir->rd_bmval[1] &= nfsd_suppattrs1(cstate->minorversion);
576 readdir->rd_bmval[2] &= nfsd_suppattrs2(cstate->minorversion);
553 577
554 if ((cookie > ~(u32)0) || (cookie == 1) || (cookie == 2) || 578 if ((cookie > ~(u32)0) || (cookie == 1) || (cookie == 2) ||
555 (cookie == 0 && memcmp(readdir->rd_verf.data, zeroverf.data, NFS4_VERIFIER_SIZE))) 579 (cookie == 0 && memcmp(readdir->rd_verf.data, zeroverf.data, NFS4_VERIFIER_SIZE)))
@@ -653,8 +677,8 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
653 677
654 if (setattr->sa_iattr.ia_valid & ATTR_SIZE) { 678 if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
655 nfs4_lock_state(); 679 nfs4_lock_state();
656 status = nfs4_preprocess_stateid_op(&cstate->current_fh, 680 status = nfs4_preprocess_stateid_op(cstate,
657 &setattr->sa_stateid, CHECK_FH | WR_STATE, NULL); 681 &setattr->sa_stateid, WR_STATE, NULL);
658 nfs4_unlock_state(); 682 nfs4_unlock_state();
659 if (status) { 683 if (status) {
660 dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n"); 684 dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n");
@@ -685,6 +709,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
685 struct file *filp = NULL; 709 struct file *filp = NULL;
686 u32 *p; 710 u32 *p;
687 __be32 status = nfs_ok; 711 __be32 status = nfs_ok;
712 unsigned long cnt;
688 713
689 /* no need to check permission - this will be done in nfsd_write() */ 714 /* no need to check permission - this will be done in nfsd_write() */
690 715
@@ -692,8 +717,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
692 return nfserr_inval; 717 return nfserr_inval;
693 718
694 nfs4_lock_state(); 719 nfs4_lock_state();
695 status = nfs4_preprocess_stateid_op(&cstate->current_fh, stateid, 720 status = nfs4_preprocess_stateid_op(cstate, stateid, WR_STATE, &filp);
696 CHECK_FH | WR_STATE, &filp);
697 if (filp) 721 if (filp)
698 get_file(filp); 722 get_file(filp);
699 nfs4_unlock_state(); 723 nfs4_unlock_state();
@@ -703,7 +727,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
703 return status; 727 return status;
704 } 728 }
705 729
706 write->wr_bytes_written = write->wr_buflen; 730 cnt = write->wr_buflen;
707 write->wr_how_written = write->wr_stable_how; 731 write->wr_how_written = write->wr_stable_how;
708 p = (u32 *)write->wr_verifier.data; 732 p = (u32 *)write->wr_verifier.data;
709 *p++ = nfssvc_boot.tv_sec; 733 *p++ = nfssvc_boot.tv_sec;
@@ -711,10 +735,12 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
711 735
712 status = nfsd_write(rqstp, &cstate->current_fh, filp, 736 status = nfsd_write(rqstp, &cstate->current_fh, filp,
713 write->wr_offset, rqstp->rq_vec, write->wr_vlen, 737 write->wr_offset, rqstp->rq_vec, write->wr_vlen,
714 write->wr_buflen, &write->wr_how_written); 738 &cnt, &write->wr_how_written);
715 if (filp) 739 if (filp)
716 fput(filp); 740 fput(filp);
717 741
742 write->wr_bytes_written = cnt;
743
718 if (status == nfserr_symlink) 744 if (status == nfserr_symlink)
719 status = nfserr_inval; 745 status = nfserr_inval;
720 return status; 746 return status;
@@ -737,8 +763,9 @@ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
737 if (status) 763 if (status)
738 return status; 764 return status;
739 765
740 if ((verify->ve_bmval[0] & ~NFSD_SUPPORTED_ATTRS_WORD0) 766 if ((verify->ve_bmval[0] & ~nfsd_suppattrs0(cstate->minorversion))
741 || (verify->ve_bmval[1] & ~NFSD_SUPPORTED_ATTRS_WORD1)) 767 || (verify->ve_bmval[1] & ~nfsd_suppattrs1(cstate->minorversion))
768 || (verify->ve_bmval[2] & ~nfsd_suppattrs2(cstate->minorversion)))
742 return nfserr_attrnotsupp; 769 return nfserr_attrnotsupp;
743 if ((verify->ve_bmval[0] & FATTR4_WORD0_RDATTR_ERROR) 770 if ((verify->ve_bmval[0] & FATTR4_WORD0_RDATTR_ERROR)
744 || (verify->ve_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1)) 771 || (verify->ve_bmval[1] & NFSD_WRITEONLY_ATTRS_WORD1))
@@ -766,7 +793,8 @@ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
766 if (status) 793 if (status)
767 goto out_kfree; 794 goto out_kfree;
768 795
769 p = buf + 3; 796 /* skip bitmap */
797 p = buf + 1 + ntohl(buf[0]);
770 status = nfserr_not_same; 798 status = nfserr_not_same;
771 if (ntohl(*p++) != verify->ve_attrlen) 799 if (ntohl(*p++) != verify->ve_attrlen)
772 goto out_kfree; 800 goto out_kfree;
@@ -813,39 +841,17 @@ static inline void nfsd4_increment_op_stats(u32 opnum)
813 nfsdstats.nfs4_opcount[opnum]++; 841 nfsdstats.nfs4_opcount[opnum]++;
814} 842}
815 843
816static void cstate_free(struct nfsd4_compound_state *cstate)
817{
818 if (cstate == NULL)
819 return;
820 fh_put(&cstate->current_fh);
821 fh_put(&cstate->save_fh);
822 BUG_ON(cstate->replay_owner);
823 kfree(cstate);
824}
825
826static struct nfsd4_compound_state *cstate_alloc(void)
827{
828 struct nfsd4_compound_state *cstate;
829
830 cstate = kmalloc(sizeof(struct nfsd4_compound_state), GFP_KERNEL);
831 if (cstate == NULL)
832 return NULL;
833 fh_init(&cstate->current_fh, NFS4_FHSIZE);
834 fh_init(&cstate->save_fh, NFS4_FHSIZE);
835 cstate->replay_owner = NULL;
836 return cstate;
837}
838
839typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, 844typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *,
840 void *); 845 void *);
846enum nfsd4_op_flags {
847 ALLOWED_WITHOUT_FH = 1 << 0, /* No current filehandle required */
848 ALLOWED_ON_ABSENT_FS = 2 << 0, /* ops processed on absent fs */
849 ALLOWED_AS_FIRST_OP = 3 << 0, /* ops reqired first in compound */
850};
841 851
842struct nfsd4_operation { 852struct nfsd4_operation {
843 nfsd4op_func op_func; 853 nfsd4op_func op_func;
844 u32 op_flags; 854 u32 op_flags;
845/* Most ops require a valid current filehandle; a few don't: */
846#define ALLOWED_WITHOUT_FH 1
847/* GETATTR and ops not listed as returning NFS4ERR_MOVED: */
848#define ALLOWED_ON_ABSENT_FS 2
849 char *op_name; 855 char *op_name;
850}; 856};
851 857
@@ -854,6 +860,51 @@ static struct nfsd4_operation nfsd4_ops[];
854static const char *nfsd4_op_name(unsigned opnum); 860static const char *nfsd4_op_name(unsigned opnum);
855 861
856/* 862/*
863 * This is a replay of a compound for which no cache entry pages
864 * were used. Encode the sequence operation, and if cachethis is FALSE
865 * encode the uncache rep error on the next operation.
866 */
867static __be32
868nfsd4_enc_uncached_replay(struct nfsd4_compoundargs *args,
869 struct nfsd4_compoundres *resp)
870{
871 struct nfsd4_op *op;
872
873 dprintk("--> %s resp->opcnt %d ce_cachethis %u \n", __func__,
874 resp->opcnt, resp->cstate.slot->sl_cache_entry.ce_cachethis);
875
876 /* Encode the replayed sequence operation */
877 BUG_ON(resp->opcnt != 1);
878 op = &args->ops[resp->opcnt - 1];
879 nfsd4_encode_operation(resp, op);
880
881 /*return nfserr_retry_uncached_rep in next operation. */
882 if (resp->cstate.slot->sl_cache_entry.ce_cachethis == 0) {
883 op = &args->ops[resp->opcnt++];
884 op->status = nfserr_retry_uncached_rep;
885 nfsd4_encode_operation(resp, op);
886 }
887 return op->status;
888}
889
890/*
891 * Enforce NFSv4.1 COMPOUND ordering rules.
892 *
893 * TODO:
894 * - enforce NFS4ERR_NOT_ONLY_OP,
895 * - DESTROY_SESSION MUST be the final operation in the COMPOUND request.
896 */
897static bool nfs41_op_ordering_ok(struct nfsd4_compoundargs *args)
898{
899 if (args->minorversion && args->opcnt > 0) {
900 struct nfsd4_op *op = &args->ops[0];
901 return (op->status == nfserr_op_illegal) ||
902 (nfsd4_ops[op->opnum].op_flags & ALLOWED_AS_FIRST_OP);
903 }
904 return true;
905}
906
907/*
857 * COMPOUND call. 908 * COMPOUND call.
858 */ 909 */
859static __be32 910static __be32
@@ -863,12 +914,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
863{ 914{
864 struct nfsd4_op *op; 915 struct nfsd4_op *op;
865 struct nfsd4_operation *opdesc; 916 struct nfsd4_operation *opdesc;
866 struct nfsd4_compound_state *cstate = NULL; 917 struct nfsd4_compound_state *cstate = &resp->cstate;
867 int slack_bytes; 918 int slack_bytes;
868 __be32 status; 919 __be32 status;
869 920
870 resp->xbuf = &rqstp->rq_res; 921 resp->xbuf = &rqstp->rq_res;
871 resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; 922 resp->p = rqstp->rq_res.head[0].iov_base +
923 rqstp->rq_res.head[0].iov_len;
872 resp->tagp = resp->p; 924 resp->tagp = resp->p;
873 /* reserve space for: taglen, tag, and opcnt */ 925 /* reserve space for: taglen, tag, and opcnt */
874 resp->p += 2 + XDR_QUADLEN(args->taglen); 926 resp->p += 2 + XDR_QUADLEN(args->taglen);
@@ -877,18 +929,25 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
877 resp->tag = args->tag; 929 resp->tag = args->tag;
878 resp->opcnt = 0; 930 resp->opcnt = 0;
879 resp->rqstp = rqstp; 931 resp->rqstp = rqstp;
932 resp->cstate.minorversion = args->minorversion;
933 resp->cstate.replay_owner = NULL;
934 fh_init(&resp->cstate.current_fh, NFS4_FHSIZE);
935 fh_init(&resp->cstate.save_fh, NFS4_FHSIZE);
936 /* Use the deferral mechanism only for NFSv4.0 compounds */
937 rqstp->rq_usedeferral = (args->minorversion == 0);
880 938
881 /* 939 /*
882 * According to RFC3010, this takes precedence over all other errors. 940 * According to RFC3010, this takes precedence over all other errors.
883 */ 941 */
884 status = nfserr_minor_vers_mismatch; 942 status = nfserr_minor_vers_mismatch;
885 if (args->minorversion > NFSD_SUPPORTED_MINOR_VERSION) 943 if (args->minorversion > nfsd_supported_minorversion)
886 goto out; 944 goto out;
887 945
888 status = nfserr_resource; 946 if (!nfs41_op_ordering_ok(args)) {
889 cstate = cstate_alloc(); 947 op = &args->ops[0];
890 if (cstate == NULL) 948 op->status = nfserr_sequence_pos;
891 goto out; 949 goto encode_op;
950 }
892 951
893 status = nfs_ok; 952 status = nfs_ok;
894 while (!status && resp->opcnt < args->opcnt) { 953 while (!status && resp->opcnt < args->opcnt) {
@@ -897,7 +956,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
897 dprintk("nfsv4 compound op #%d/%d: %d (%s)\n", 956 dprintk("nfsv4 compound op #%d/%d: %d (%s)\n",
898 resp->opcnt, args->opcnt, op->opnum, 957 resp->opcnt, args->opcnt, op->opnum,
899 nfsd4_op_name(op->opnum)); 958 nfsd4_op_name(op->opnum));
900
901 /* 959 /*
902 * The XDR decode routines may have pre-set op->status; 960 * The XDR decode routines may have pre-set op->status;
903 * for example, if there is a miscellaneous XDR error 961 * for example, if there is a miscellaneous XDR error
@@ -938,6 +996,15 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
938 BUG_ON(op->status == nfs_ok); 996 BUG_ON(op->status == nfs_ok);
939 997
940encode_op: 998encode_op:
999 /* Only from SEQUENCE or CREATE_SESSION */
1000 if (resp->cstate.status == nfserr_replay_cache) {
1001 dprintk("%s NFS4.1 replay from cache\n", __func__);
1002 if (nfsd4_not_cached(resp))
1003 status = nfsd4_enc_uncached_replay(args, resp);
1004 else
1005 status = op->status;
1006 goto out;
1007 }
941 if (op->status == nfserr_replay_me) { 1008 if (op->status == nfserr_replay_me) {
942 op->replay = &cstate->replay_owner->so_replay; 1009 op->replay = &cstate->replay_owner->so_replay;
943 nfsd4_encode_replay(resp, op); 1010 nfsd4_encode_replay(resp, op);
@@ -961,15 +1028,24 @@ encode_op:
961 1028
962 nfsd4_increment_op_stats(op->opnum); 1029 nfsd4_increment_op_stats(op->opnum);
963 } 1030 }
1031 if (!rqstp->rq_usedeferral && status == nfserr_dropit) {
1032 dprintk("%s Dropit - send NFS4ERR_DELAY\n", __func__);
1033 status = nfserr_jukebox;
1034 }
964 1035
965 cstate_free(cstate); 1036 resp->cstate.status = status;
1037 fh_put(&resp->cstate.current_fh);
1038 fh_put(&resp->cstate.save_fh);
1039 BUG_ON(resp->cstate.replay_owner);
966out: 1040out:
967 nfsd4_release_compoundargs(args); 1041 nfsd4_release_compoundargs(args);
1042 /* Reset deferral mechanism for RPC deferrals */
1043 rqstp->rq_usedeferral = 1;
968 dprintk("nfsv4 compound returned %d\n", ntohl(status)); 1044 dprintk("nfsv4 compound returned %d\n", ntohl(status));
969 return status; 1045 return status;
970} 1046}
971 1047
972static struct nfsd4_operation nfsd4_ops[OP_RELEASE_LOCKOWNER+1] = { 1048static struct nfsd4_operation nfsd4_ops[] = {
973 [OP_ACCESS] = { 1049 [OP_ACCESS] = {
974 .op_func = (nfsd4op_func)nfsd4_access, 1050 .op_func = (nfsd4op_func)nfsd4_access,
975 .op_name = "OP_ACCESS", 1051 .op_name = "OP_ACCESS",
@@ -1045,7 +1121,7 @@ static struct nfsd4_operation nfsd4_ops[OP_RELEASE_LOCKOWNER+1] = {
1045 .op_name = "OP_PUTFH", 1121 .op_name = "OP_PUTFH",
1046 }, 1122 },
1047 [OP_PUTPUBFH] = { 1123 [OP_PUTPUBFH] = {
1048 /* unsupported, just for future reference: */ 1124 .op_func = (nfsd4op_func)nfsd4_putrootfh,
1049 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS, 1125 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS,
1050 .op_name = "OP_PUTPUBFH", 1126 .op_name = "OP_PUTPUBFH",
1051 }, 1127 },
@@ -1119,6 +1195,28 @@ static struct nfsd4_operation nfsd4_ops[OP_RELEASE_LOCKOWNER+1] = {
1119 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS, 1195 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS,
1120 .op_name = "OP_RELEASE_LOCKOWNER", 1196 .op_name = "OP_RELEASE_LOCKOWNER",
1121 }, 1197 },
1198
1199 /* NFSv4.1 operations */
1200 [OP_EXCHANGE_ID] = {
1201 .op_func = (nfsd4op_func)nfsd4_exchange_id,
1202 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
1203 .op_name = "OP_EXCHANGE_ID",
1204 },
1205 [OP_CREATE_SESSION] = {
1206 .op_func = (nfsd4op_func)nfsd4_create_session,
1207 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
1208 .op_name = "OP_CREATE_SESSION",
1209 },
1210 [OP_DESTROY_SESSION] = {
1211 .op_func = (nfsd4op_func)nfsd4_destroy_session,
1212 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
1213 .op_name = "OP_DESTROY_SESSION",
1214 },
1215 [OP_SEQUENCE] = {
1216 .op_func = (nfsd4op_func)nfsd4_sequence,
1217 .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
1218 .op_name = "OP_SEQUENCE",
1219 },
1122}; 1220};
1123 1221
1124static const char *nfsd4_op_name(unsigned opnum) 1222static const char *nfsd4_op_name(unsigned opnum)
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
index 74f7b67567fd..3444c0052a87 100644
--- a/fs/nfsd/nfs4recover.c
+++ b/fs/nfsd/nfs4recover.c
@@ -182,36 +182,26 @@ out_unlock:
182 182
183typedef int (recdir_func)(struct dentry *, struct dentry *); 183typedef int (recdir_func)(struct dentry *, struct dentry *);
184 184
185struct dentry_list { 185struct name_list {
186 struct dentry *dentry; 186 char name[HEXDIR_LEN];
187 struct list_head list; 187 struct list_head list;
188}; 188};
189 189
190struct dentry_list_arg {
191 struct list_head dentries;
192 struct dentry *parent;
193};
194
195static int 190static int
196nfsd4_build_dentrylist(void *arg, const char *name, int namlen, 191nfsd4_build_namelist(void *arg, const char *name, int namlen,
197 loff_t offset, u64 ino, unsigned int d_type) 192 loff_t offset, u64 ino, unsigned int d_type)
198{ 193{
199 struct dentry_list_arg *dla = arg; 194 struct list_head *names = arg;
200 struct list_head *dentries = &dla->dentries; 195 struct name_list *entry;
201 struct dentry *parent = dla->parent;
202 struct dentry *dentry;
203 struct dentry_list *child;
204 196
205 if (name && isdotent(name, namlen)) 197 if (namlen != HEXDIR_LEN - 1)
206 return 0; 198 return 0;
207 dentry = lookup_one_len(name, parent, namlen); 199 entry = kmalloc(sizeof(struct name_list), GFP_KERNEL);
208 if (IS_ERR(dentry)) 200 if (entry == NULL)
209 return PTR_ERR(dentry);
210 child = kmalloc(sizeof(*child), GFP_KERNEL);
211 if (child == NULL)
212 return -ENOMEM; 201 return -ENOMEM;
213 child->dentry = dentry; 202 memcpy(entry->name, name, HEXDIR_LEN - 1);
214 list_add(&child->list, dentries); 203 entry->name[HEXDIR_LEN - 1] = '\0';
204 list_add(&entry->list, names);
215 return 0; 205 return 0;
216} 206}
217 207
@@ -220,11 +210,9 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f)
220{ 210{
221 const struct cred *original_cred; 211 const struct cred *original_cred;
222 struct file *filp; 212 struct file *filp;
223 struct dentry_list_arg dla = { 213 LIST_HEAD(names);
224 .parent = dir, 214 struct name_list *entry;
225 }; 215 struct dentry *dentry;
226 struct list_head *dentries = &dla.dentries;
227 struct dentry_list *child;
228 int status; 216 int status;
229 217
230 if (!rec_dir_init) 218 if (!rec_dir_init)
@@ -233,31 +221,34 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f)
233 status = nfs4_save_creds(&original_cred); 221 status = nfs4_save_creds(&original_cred);
234 if (status < 0) 222 if (status < 0)
235 return status; 223 return status;
236 INIT_LIST_HEAD(dentries);
237 224
238 filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY, 225 filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY,
239 current_cred()); 226 current_cred());
240 status = PTR_ERR(filp); 227 status = PTR_ERR(filp);
241 if (IS_ERR(filp)) 228 if (IS_ERR(filp))
242 goto out; 229 goto out;
243 INIT_LIST_HEAD(dentries); 230 status = vfs_readdir(filp, nfsd4_build_namelist, &names);
244 status = vfs_readdir(filp, nfsd4_build_dentrylist, &dla);
245 fput(filp); 231 fput(filp);
246 while (!list_empty(dentries)) { 232 while (!list_empty(&names)) {
247 child = list_entry(dentries->next, struct dentry_list, list); 233 entry = list_entry(names.next, struct name_list, list);
248 status = f(dir, child->dentry); 234
235 dentry = lookup_one_len(entry->name, dir, HEXDIR_LEN-1);
236 if (IS_ERR(dentry)) {
237 status = PTR_ERR(dentry);
238 goto out;
239 }
240 status = f(dir, dentry);
241 dput(dentry);
249 if (status) 242 if (status)
250 goto out; 243 goto out;
251 list_del(&child->list); 244 list_del(&entry->list);
252 dput(child->dentry); 245 kfree(entry);
253 kfree(child);
254 } 246 }
255out: 247out:
256 while (!list_empty(dentries)) { 248 while (!list_empty(&names)) {
257 child = list_entry(dentries->next, struct dentry_list, list); 249 entry = list_entry(names.next, struct name_list, list);
258 list_del(&child->list); 250 list_del(&entry->list);
259 dput(child->dentry); 251 kfree(entry);
260 kfree(child);
261 } 252 }
262 nfs4_reset_creds(original_cred); 253 nfs4_reset_creds(original_cred);
263 return status; 254 return status;
@@ -353,7 +344,8 @@ purge_old(struct dentry *parent, struct dentry *child)
353{ 344{
354 int status; 345 int status;
355 346
356 if (nfs4_has_reclaimed_state(child->d_name.name)) 347 /* note: we currently use this path only for minorversion 0 */
348 if (nfs4_has_reclaimed_state(child->d_name.name, false))
357 return 0; 349 return 0;
358 350
359 status = nfsd4_clear_clid_dir(parent, child); 351 status = nfsd4_clear_clid_dir(parent, child);
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index b6f60f48e94b..c65a27b76a9d 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -68,6 +68,7 @@ static u32 current_delegid = 1;
68static u32 nfs4_init; 68static u32 nfs4_init;
69static stateid_t zerostateid; /* bits all 0 */ 69static stateid_t zerostateid; /* bits all 0 */
70static stateid_t onestateid; /* bits all 1 */ 70static stateid_t onestateid; /* bits all 1 */
71static u64 current_sessionid = 1;
71 72
72#define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid, sizeof(stateid_t))) 73#define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid, sizeof(stateid_t)))
73#define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid, sizeof(stateid_t))) 74#define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid, sizeof(stateid_t)))
@@ -75,18 +76,21 @@ static stateid_t onestateid; /* bits all 1 */
75/* forward declarations */ 76/* forward declarations */
76static struct nfs4_stateid * find_stateid(stateid_t *stid, int flags); 77static struct nfs4_stateid * find_stateid(stateid_t *stid, int flags);
77static struct nfs4_delegation * find_delegation_stateid(struct inode *ino, stateid_t *stid); 78static struct nfs4_delegation * find_delegation_stateid(struct inode *ino, stateid_t *stid);
78static void release_stateid_lockowners(struct nfs4_stateid *open_stp);
79static char user_recovery_dirname[PATH_MAX] = "/var/lib/nfs/v4recovery"; 79static char user_recovery_dirname[PATH_MAX] = "/var/lib/nfs/v4recovery";
80static void nfs4_set_recdir(char *recdir); 80static void nfs4_set_recdir(char *recdir);
81 81
82/* Locking: 82/* Locking: */
83 * 83
84 * client_mutex: 84/* Currently used for almost all code touching nfsv4 state: */
85 * protects clientid_hashtbl[], clientstr_hashtbl[],
86 * unconfstr_hashtbl[], uncofid_hashtbl[].
87 */
88static DEFINE_MUTEX(client_mutex); 85static DEFINE_MUTEX(client_mutex);
89 86
87/*
88 * Currently used for the del_recall_lru and file hash table. In an
89 * effort to decrease the scope of the client_mutex, this spinlock may
90 * eventually cover more:
91 */
92static DEFINE_SPINLOCK(recall_lock);
93
90static struct kmem_cache *stateowner_slab = NULL; 94static struct kmem_cache *stateowner_slab = NULL;
91static struct kmem_cache *file_slab = NULL; 95static struct kmem_cache *file_slab = NULL;
92static struct kmem_cache *stateid_slab = NULL; 96static struct kmem_cache *stateid_slab = NULL;
@@ -117,37 +121,23 @@ opaque_hashval(const void *ptr, int nbytes)
117 return x; 121 return x;
118} 122}
119 123
120/* forward declarations */
121static void release_stateowner(struct nfs4_stateowner *sop);
122static void release_stateid(struct nfs4_stateid *stp, int flags);
123
124/*
125 * Delegation state
126 */
127
128/* recall_lock protects the del_recall_lru */
129static DEFINE_SPINLOCK(recall_lock);
130static struct list_head del_recall_lru; 124static struct list_head del_recall_lru;
131 125
132static void
133free_nfs4_file(struct kref *kref)
134{
135 struct nfs4_file *fp = container_of(kref, struct nfs4_file, fi_ref);
136 list_del(&fp->fi_hash);
137 iput(fp->fi_inode);
138 kmem_cache_free(file_slab, fp);
139}
140
141static inline void 126static inline void
142put_nfs4_file(struct nfs4_file *fi) 127put_nfs4_file(struct nfs4_file *fi)
143{ 128{
144 kref_put(&fi->fi_ref, free_nfs4_file); 129 if (atomic_dec_and_lock(&fi->fi_ref, &recall_lock)) {
130 list_del(&fi->fi_hash);
131 spin_unlock(&recall_lock);
132 iput(fi->fi_inode);
133 kmem_cache_free(file_slab, fi);
134 }
145} 135}
146 136
147static inline void 137static inline void
148get_nfs4_file(struct nfs4_file *fi) 138get_nfs4_file(struct nfs4_file *fi)
149{ 139{
150 kref_get(&fi->fi_ref); 140 atomic_inc(&fi->fi_ref);
151} 141}
152 142
153static int num_delegations; 143static int num_delegations;
@@ -220,9 +210,7 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
220 dp->dl_stateid.si_stateownerid = current_delegid++; 210 dp->dl_stateid.si_stateownerid = current_delegid++;
221 dp->dl_stateid.si_fileid = 0; 211 dp->dl_stateid.si_fileid = 0;
222 dp->dl_stateid.si_generation = 0; 212 dp->dl_stateid.si_generation = 0;
223 dp->dl_fhlen = current_fh->fh_handle.fh_size; 213 fh_copy_shallow(&dp->dl_fh, &current_fh->fh_handle);
224 memcpy(dp->dl_fhval, &current_fh->fh_handle.fh_base,
225 current_fh->fh_handle.fh_size);
226 dp->dl_time = 0; 214 dp->dl_time = 0;
227 atomic_set(&dp->dl_count, 1); 215 atomic_set(&dp->dl_count, 1);
228 list_add(&dp->dl_perfile, &fp->fi_delegations); 216 list_add(&dp->dl_perfile, &fp->fi_delegations);
@@ -311,6 +299,291 @@ static struct list_head unconf_id_hashtbl[CLIENT_HASH_SIZE];
311static struct list_head client_lru; 299static struct list_head client_lru;
312static struct list_head close_lru; 300static struct list_head close_lru;
313 301
302static void unhash_generic_stateid(struct nfs4_stateid *stp)
303{
304 list_del(&stp->st_hash);
305 list_del(&stp->st_perfile);
306 list_del(&stp->st_perstateowner);
307}
308
309static void free_generic_stateid(struct nfs4_stateid *stp)
310{
311 put_nfs4_file(stp->st_file);
312 kmem_cache_free(stateid_slab, stp);
313}
314
315static void release_lock_stateid(struct nfs4_stateid *stp)
316{
317 unhash_generic_stateid(stp);
318 locks_remove_posix(stp->st_vfs_file, (fl_owner_t)stp->st_stateowner);
319 free_generic_stateid(stp);
320}
321
322static void unhash_lockowner(struct nfs4_stateowner *sop)
323{
324 struct nfs4_stateid *stp;
325
326 list_del(&sop->so_idhash);
327 list_del(&sop->so_strhash);
328 list_del(&sop->so_perstateid);
329 while (!list_empty(&sop->so_stateids)) {
330 stp = list_first_entry(&sop->so_stateids,
331 struct nfs4_stateid, st_perstateowner);
332 release_lock_stateid(stp);
333 }
334}
335
336static void release_lockowner(struct nfs4_stateowner *sop)
337{
338 unhash_lockowner(sop);
339 nfs4_put_stateowner(sop);
340}
341
342static void
343release_stateid_lockowners(struct nfs4_stateid *open_stp)
344{
345 struct nfs4_stateowner *lock_sop;
346
347 while (!list_empty(&open_stp->st_lockowners)) {
348 lock_sop = list_entry(open_stp->st_lockowners.next,
349 struct nfs4_stateowner, so_perstateid);
350 /* list_del(&open_stp->st_lockowners); */
351 BUG_ON(lock_sop->so_is_open_owner);
352 release_lockowner(lock_sop);
353 }
354}
355
356static void release_open_stateid(struct nfs4_stateid *stp)
357{
358 unhash_generic_stateid(stp);
359 release_stateid_lockowners(stp);
360 nfsd_close(stp->st_vfs_file);
361 free_generic_stateid(stp);
362}
363
364static void unhash_openowner(struct nfs4_stateowner *sop)
365{
366 struct nfs4_stateid *stp;
367
368 list_del(&sop->so_idhash);
369 list_del(&sop->so_strhash);
370 list_del(&sop->so_perclient);
371 list_del(&sop->so_perstateid); /* XXX: necessary? */
372 while (!list_empty(&sop->so_stateids)) {
373 stp = list_first_entry(&sop->so_stateids,
374 struct nfs4_stateid, st_perstateowner);
375 release_open_stateid(stp);
376 }
377}
378
379static void release_openowner(struct nfs4_stateowner *sop)
380{
381 unhash_openowner(sop);
382 list_del(&sop->so_close_lru);
383 nfs4_put_stateowner(sop);
384}
385
386static DEFINE_SPINLOCK(sessionid_lock);
387#define SESSION_HASH_SIZE 512
388static struct list_head sessionid_hashtbl[SESSION_HASH_SIZE];
389
390static inline int
391hash_sessionid(struct nfs4_sessionid *sessionid)
392{
393 struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)sessionid;
394
395 return sid->sequence % SESSION_HASH_SIZE;
396}
397
398static inline void
399dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid)
400{
401 u32 *ptr = (u32 *)(&sessionid->data[0]);
402 dprintk("%s: %u:%u:%u:%u\n", fn, ptr[0], ptr[1], ptr[2], ptr[3]);
403}
404
405static void
406gen_sessionid(struct nfsd4_session *ses)
407{
408 struct nfs4_client *clp = ses->se_client;
409 struct nfsd4_sessionid *sid;
410
411 sid = (struct nfsd4_sessionid *)ses->se_sessionid.data;
412 sid->clientid = clp->cl_clientid;
413 sid->sequence = current_sessionid++;
414 sid->reserved = 0;
415}
416
417/*
418 * Give the client the number of slots it requests bound by
419 * NFSD_MAX_SLOTS_PER_SESSION and by sv_drc_max_pages.
420 *
421 * If we run out of pages (sv_drc_pages_used == sv_drc_max_pages) we
422 * should (up to a point) re-negotiate active sessions and reduce their
423 * slot usage to make rooom for new connections. For now we just fail the
424 * create session.
425 */
426static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan)
427{
428 int status = 0, np = fchan->maxreqs * NFSD_PAGES_PER_SLOT;
429
430 spin_lock(&nfsd_serv->sv_lock);
431 if (np + nfsd_serv->sv_drc_pages_used > nfsd_serv->sv_drc_max_pages)
432 np = nfsd_serv->sv_drc_max_pages - nfsd_serv->sv_drc_pages_used;
433 nfsd_serv->sv_drc_pages_used += np;
434 spin_unlock(&nfsd_serv->sv_lock);
435
436 if (np <= 0) {
437 status = nfserr_resource;
438 fchan->maxreqs = 0;
439 } else
440 fchan->maxreqs = np / NFSD_PAGES_PER_SLOT;
441
442 return status;
443}
444
445/*
446 * fchan holds the client values on input, and the server values on output
447 */
448static int init_forechannel_attrs(struct svc_rqst *rqstp,
449 struct nfsd4_session *session,
450 struct nfsd4_channel_attrs *fchan)
451{
452 int status = 0;
453 __u32 maxcount = svc_max_payload(rqstp);
454
455 /* headerpadsz set to zero in encode routine */
456
457 /* Use the client's max request and max response size if possible */
458 if (fchan->maxreq_sz > maxcount)
459 fchan->maxreq_sz = maxcount;
460 session->se_fmaxreq_sz = fchan->maxreq_sz;
461
462 if (fchan->maxresp_sz > maxcount)
463 fchan->maxresp_sz = maxcount;
464 session->se_fmaxresp_sz = fchan->maxresp_sz;
465
466 /* Set the max response cached size our default which is
467 * a multiple of PAGE_SIZE and small */
468 session->se_fmaxresp_cached = NFSD_PAGES_PER_SLOT * PAGE_SIZE;
469 fchan->maxresp_cached = session->se_fmaxresp_cached;
470
471 /* Use the client's maxops if possible */
472 if (fchan->maxops > NFSD_MAX_OPS_PER_COMPOUND)
473 fchan->maxops = NFSD_MAX_OPS_PER_COMPOUND;
474 session->se_fmaxops = fchan->maxops;
475
476 /* try to use the client requested number of slots */
477 if (fchan->maxreqs > NFSD_MAX_SLOTS_PER_SESSION)
478 fchan->maxreqs = NFSD_MAX_SLOTS_PER_SESSION;
479
480 /* FIXME: Error means no more DRC pages so the server should
481 * recover pages from existing sessions. For now fail session
482 * creation.
483 */
484 status = set_forechannel_maxreqs(fchan);
485
486 session->se_fnumslots = fchan->maxreqs;
487 return status;
488}
489
490static int
491alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp,
492 struct nfsd4_create_session *cses)
493{
494 struct nfsd4_session *new, tmp;
495 int idx, status = nfserr_resource, slotsize;
496
497 memset(&tmp, 0, sizeof(tmp));
498
499 /* FIXME: For now, we just accept the client back channel attributes. */
500 status = init_forechannel_attrs(rqstp, &tmp, &cses->fore_channel);
501 if (status)
502 goto out;
503
504 /* allocate struct nfsd4_session and slot table in one piece */
505 slotsize = tmp.se_fnumslots * sizeof(struct nfsd4_slot);
506 new = kzalloc(sizeof(*new) + slotsize, GFP_KERNEL);
507 if (!new)
508 goto out;
509
510 memcpy(new, &tmp, sizeof(*new));
511
512 new->se_client = clp;
513 gen_sessionid(new);
514 idx = hash_sessionid(&new->se_sessionid);
515 memcpy(clp->cl_sessionid.data, new->se_sessionid.data,
516 NFS4_MAX_SESSIONID_LEN);
517
518 new->se_flags = cses->flags;
519 kref_init(&new->se_ref);
520 spin_lock(&sessionid_lock);
521 list_add(&new->se_hash, &sessionid_hashtbl[idx]);
522 list_add(&new->se_perclnt, &clp->cl_sessions);
523 spin_unlock(&sessionid_lock);
524
525 status = nfs_ok;
526out:
527 return status;
528}
529
530/* caller must hold sessionid_lock */
531static struct nfsd4_session *
532find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid)
533{
534 struct nfsd4_session *elem;
535 int idx;
536
537 dump_sessionid(__func__, sessionid);
538 idx = hash_sessionid(sessionid);
539 dprintk("%s: idx is %d\n", __func__, idx);
540 /* Search in the appropriate list */
541 list_for_each_entry(elem, &sessionid_hashtbl[idx], se_hash) {
542 dump_sessionid("list traversal", &elem->se_sessionid);
543 if (!memcmp(elem->se_sessionid.data, sessionid->data,
544 NFS4_MAX_SESSIONID_LEN)) {
545 return elem;
546 }
547 }
548
549 dprintk("%s: session not found\n", __func__);
550 return NULL;
551}
552
553/* caller must hold sessionid_lock */
554static void
555unhash_session(struct nfsd4_session *ses)
556{
557 list_del(&ses->se_hash);
558 list_del(&ses->se_perclnt);
559}
560
561static void
562release_session(struct nfsd4_session *ses)
563{
564 spin_lock(&sessionid_lock);
565 unhash_session(ses);
566 spin_unlock(&sessionid_lock);
567 nfsd4_put_session(ses);
568}
569
570static void nfsd4_release_respages(struct page **respages, short resused);
571
572void
573free_session(struct kref *kref)
574{
575 struct nfsd4_session *ses;
576 int i;
577
578 ses = container_of(kref, struct nfsd4_session, se_ref);
579 for (i = 0; i < ses->se_fnumslots; i++) {
580 struct nfsd4_cache_entry *e = &ses->se_slots[i].sl_cache_entry;
581 nfsd4_release_respages(e->ce_respages, e->ce_resused);
582 }
583 kfree(ses->se_slots);
584 kfree(ses);
585}
586
314static inline void 587static inline void
315renew_client(struct nfs4_client *clp) 588renew_client(struct nfs4_client *clp)
316{ 589{
@@ -330,8 +603,8 @@ STALE_CLIENTID(clientid_t *clid)
330{ 603{
331 if (clid->cl_boot == boot_time) 604 if (clid->cl_boot == boot_time)
332 return 0; 605 return 0;
333 dprintk("NFSD stale clientid (%08x/%08x)\n", 606 dprintk("NFSD stale clientid (%08x/%08x) boot_time %08lx\n",
334 clid->cl_boot, clid->cl_id); 607 clid->cl_boot, clid->cl_id, boot_time);
335 return 1; 608 return 1;
336} 609}
337 610
@@ -376,6 +649,8 @@ static inline void
376free_client(struct nfs4_client *clp) 649free_client(struct nfs4_client *clp)
377{ 650{
378 shutdown_callback_client(clp); 651 shutdown_callback_client(clp);
652 nfsd4_release_respages(clp->cl_slot.sl_cache_entry.ce_respages,
653 clp->cl_slot.sl_cache_entry.ce_resused);
379 if (clp->cl_cred.cr_group_info) 654 if (clp->cl_cred.cr_group_info)
380 put_group_info(clp->cl_cred.cr_group_info); 655 put_group_info(clp->cl_cred.cr_group_info);
381 kfree(clp->cl_principal); 656 kfree(clp->cl_principal);
@@ -420,7 +695,13 @@ expire_client(struct nfs4_client *clp)
420 list_del(&clp->cl_lru); 695 list_del(&clp->cl_lru);
421 while (!list_empty(&clp->cl_openowners)) { 696 while (!list_empty(&clp->cl_openowners)) {
422 sop = list_entry(clp->cl_openowners.next, struct nfs4_stateowner, so_perclient); 697 sop = list_entry(clp->cl_openowners.next, struct nfs4_stateowner, so_perclient);
423 release_stateowner(sop); 698 release_openowner(sop);
699 }
700 while (!list_empty(&clp->cl_sessions)) {
701 struct nfsd4_session *ses;
702 ses = list_entry(clp->cl_sessions.next, struct nfsd4_session,
703 se_perclnt);
704 release_session(ses);
424 } 705 }
425 put_nfs4_client(clp); 706 put_nfs4_client(clp);
426} 707}
@@ -439,6 +720,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name, char *recdir)
439 INIT_LIST_HEAD(&clp->cl_strhash); 720 INIT_LIST_HEAD(&clp->cl_strhash);
440 INIT_LIST_HEAD(&clp->cl_openowners); 721 INIT_LIST_HEAD(&clp->cl_openowners);
441 INIT_LIST_HEAD(&clp->cl_delegations); 722 INIT_LIST_HEAD(&clp->cl_delegations);
723 INIT_LIST_HEAD(&clp->cl_sessions);
442 INIT_LIST_HEAD(&clp->cl_lru); 724 INIT_LIST_HEAD(&clp->cl_lru);
443 return clp; 725 return clp;
444} 726}
@@ -568,25 +850,45 @@ find_unconfirmed_client(clientid_t *clid)
568 return NULL; 850 return NULL;
569} 851}
570 852
853/*
854 * Return 1 iff clp's clientid establishment method matches the use_exchange_id
855 * parameter. Matching is based on the fact the at least one of the
856 * EXCHGID4_FLAG_USE_{NON_PNFS,PNFS_MDS,PNFS_DS} flags must be set for v4.1
857 *
858 * FIXME: we need to unify the clientid namespaces for nfsv4.x
859 * and correctly deal with client upgrade/downgrade in EXCHANGE_ID
860 * and SET_CLIENTID{,_CONFIRM}
861 */
862static inline int
863match_clientid_establishment(struct nfs4_client *clp, bool use_exchange_id)
864{
865 bool has_exchange_flags = (clp->cl_exchange_flags != 0);
866 return use_exchange_id == has_exchange_flags;
867}
868
571static struct nfs4_client * 869static struct nfs4_client *
572find_confirmed_client_by_str(const char *dname, unsigned int hashval) 870find_confirmed_client_by_str(const char *dname, unsigned int hashval,
871 bool use_exchange_id)
573{ 872{
574 struct nfs4_client *clp; 873 struct nfs4_client *clp;
575 874
576 list_for_each_entry(clp, &conf_str_hashtbl[hashval], cl_strhash) { 875 list_for_each_entry(clp, &conf_str_hashtbl[hashval], cl_strhash) {
577 if (same_name(clp->cl_recdir, dname)) 876 if (same_name(clp->cl_recdir, dname) &&
877 match_clientid_establishment(clp, use_exchange_id))
578 return clp; 878 return clp;
579 } 879 }
580 return NULL; 880 return NULL;
581} 881}
582 882
583static struct nfs4_client * 883static struct nfs4_client *
584find_unconfirmed_client_by_str(const char *dname, unsigned int hashval) 884find_unconfirmed_client_by_str(const char *dname, unsigned int hashval,
885 bool use_exchange_id)
585{ 886{
586 struct nfs4_client *clp; 887 struct nfs4_client *clp;
587 888
588 list_for_each_entry(clp, &unconf_str_hashtbl[hashval], cl_strhash) { 889 list_for_each_entry(clp, &unconf_str_hashtbl[hashval], cl_strhash) {
589 if (same_name(clp->cl_recdir, dname)) 890 if (same_name(clp->cl_recdir, dname) &&
891 match_clientid_establishment(clp, use_exchange_id))
590 return clp; 892 return clp;
591 } 893 }
592 return NULL; 894 return NULL;
@@ -685,6 +987,534 @@ out_err:
685 return; 987 return;
686} 988}
687 989
990void
991nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
992{
993 struct nfsd4_compoundres *resp = rqstp->rq_resp;
994
995 resp->cstate.statp = statp;
996}
997
998/*
999 * Dereference the result pages.
1000 */
1001static void
1002nfsd4_release_respages(struct page **respages, short resused)
1003{
1004 int i;
1005
1006 dprintk("--> %s\n", __func__);
1007 for (i = 0; i < resused; i++) {
1008 if (!respages[i])
1009 continue;
1010 put_page(respages[i]);
1011 respages[i] = NULL;
1012 }
1013}
1014
1015static void
1016nfsd4_copy_pages(struct page **topages, struct page **frompages, short count)
1017{
1018 int i;
1019
1020 for (i = 0; i < count; i++) {
1021 topages[i] = frompages[i];
1022 if (!topages[i])
1023 continue;
1024 get_page(topages[i]);
1025 }
1026}
1027
1028/*
1029 * Cache the reply pages up to NFSD_PAGES_PER_SLOT + 1, clearing the previous
1030 * pages. We add a page to NFSD_PAGES_PER_SLOT for the case where the total
1031 * length of the XDR response is less than se_fmaxresp_cached
1032 * (NFSD_PAGES_PER_SLOT * PAGE_SIZE) but the xdr_buf pages is used for a
1033 * of the reply (e.g. readdir).
1034 *
1035 * Store the base and length of the rq_req.head[0] page
1036 * of the NFSv4.1 data, just past the rpc header.
1037 */
1038void
1039nfsd4_store_cache_entry(struct nfsd4_compoundres *resp)
1040{
1041 struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry;
1042 struct svc_rqst *rqstp = resp->rqstp;
1043 struct nfsd4_compoundargs *args = rqstp->rq_argp;
1044 struct nfsd4_op *op = &args->ops[resp->opcnt];
1045 struct kvec *resv = &rqstp->rq_res.head[0];
1046
1047 dprintk("--> %s entry %p\n", __func__, entry);
1048
1049 /* Don't cache a failed OP_SEQUENCE. */
1050 if (resp->opcnt == 1 && op->opnum == OP_SEQUENCE && resp->cstate.status)
1051 return;
1052
1053 nfsd4_release_respages(entry->ce_respages, entry->ce_resused);
1054 entry->ce_opcnt = resp->opcnt;
1055 entry->ce_status = resp->cstate.status;
1056
1057 /*
1058 * Don't need a page to cache just the sequence operation - the slot
1059 * does this for us!
1060 */
1061
1062 if (nfsd4_not_cached(resp)) {
1063 entry->ce_resused = 0;
1064 entry->ce_rpchdrlen = 0;
1065 dprintk("%s Just cache SEQUENCE. ce_cachethis %d\n", __func__,
1066 resp->cstate.slot->sl_cache_entry.ce_cachethis);
1067 return;
1068 }
1069 entry->ce_resused = rqstp->rq_resused;
1070 if (entry->ce_resused > NFSD_PAGES_PER_SLOT + 1)
1071 entry->ce_resused = NFSD_PAGES_PER_SLOT + 1;
1072 nfsd4_copy_pages(entry->ce_respages, rqstp->rq_respages,
1073 entry->ce_resused);
1074 entry->ce_datav.iov_base = resp->cstate.statp;
1075 entry->ce_datav.iov_len = resv->iov_len - ((char *)resp->cstate.statp -
1076 (char *)page_address(rqstp->rq_respages[0]));
1077 /* Current request rpc header length*/
1078 entry->ce_rpchdrlen = (char *)resp->cstate.statp -
1079 (char *)page_address(rqstp->rq_respages[0]);
1080}
1081
1082/*
1083 * We keep the rpc header, but take the nfs reply from the replycache.
1084 */
1085static int
1086nfsd41_copy_replay_data(struct nfsd4_compoundres *resp,
1087 struct nfsd4_cache_entry *entry)
1088{
1089 struct svc_rqst *rqstp = resp->rqstp;
1090 struct kvec *resv = &resp->rqstp->rq_res.head[0];
1091 int len;
1092
1093 /* Current request rpc header length*/
1094 len = (char *)resp->cstate.statp -
1095 (char *)page_address(rqstp->rq_respages[0]);
1096 if (entry->ce_datav.iov_len + len > PAGE_SIZE) {
1097 dprintk("%s v41 cached reply too large (%Zd).\n", __func__,
1098 entry->ce_datav.iov_len);
1099 return 0;
1100 }
1101 /* copy the cached reply nfsd data past the current rpc header */
1102 memcpy((char *)resv->iov_base + len, entry->ce_datav.iov_base,
1103 entry->ce_datav.iov_len);
1104 resv->iov_len = len + entry->ce_datav.iov_len;
1105 return 1;
1106}
1107
1108/*
1109 * Keep the first page of the replay. Copy the NFSv4.1 data from the first
1110 * cached page. Replace any futher replay pages from the cache.
1111 */
1112__be32
1113nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
1114 struct nfsd4_sequence *seq)
1115{
1116 struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry;
1117 __be32 status;
1118
1119 dprintk("--> %s entry %p\n", __func__, entry);
1120
1121 /*
1122 * If this is just the sequence operation, we did not keep
1123 * a page in the cache entry because we can just use the
1124 * slot info stored in struct nfsd4_sequence that was checked
1125 * against the slot in nfsd4_sequence().
1126 *
1127 * This occurs when seq->cachethis is FALSE, or when the client
1128 * session inactivity timer fires and a solo sequence operation
1129 * is sent (lease renewal).
1130 */
1131 if (seq && nfsd4_not_cached(resp)) {
1132 seq->maxslots = resp->cstate.session->se_fnumslots;
1133 return nfs_ok;
1134 }
1135
1136 if (!nfsd41_copy_replay_data(resp, entry)) {
1137 /*
1138 * Not enough room to use the replay rpc header, send the
1139 * cached header. Release all the allocated result pages.
1140 */
1141 svc_free_res_pages(resp->rqstp);
1142 nfsd4_copy_pages(resp->rqstp->rq_respages, entry->ce_respages,
1143 entry->ce_resused);
1144 } else {
1145 /* Release all but the first allocated result page */
1146
1147 resp->rqstp->rq_resused--;
1148 svc_free_res_pages(resp->rqstp);
1149
1150 nfsd4_copy_pages(&resp->rqstp->rq_respages[1],
1151 &entry->ce_respages[1],
1152 entry->ce_resused - 1);
1153 }
1154
1155 resp->rqstp->rq_resused = entry->ce_resused;
1156 resp->opcnt = entry->ce_opcnt;
1157 resp->cstate.iovlen = entry->ce_datav.iov_len + entry->ce_rpchdrlen;
1158 status = entry->ce_status;
1159
1160 return status;
1161}
1162
1163/*
1164 * Set the exchange_id flags returned by the server.
1165 */
1166static void
1167nfsd4_set_ex_flags(struct nfs4_client *new, struct nfsd4_exchange_id *clid)
1168{
1169 /* pNFS is not supported */
1170 new->cl_exchange_flags |= EXCHGID4_FLAG_USE_NON_PNFS;
1171
1172 /* Referrals are supported, Migration is not. */
1173 new->cl_exchange_flags |= EXCHGID4_FLAG_SUPP_MOVED_REFER;
1174
1175 /* set the wire flags to return to client. */
1176 clid->flags = new->cl_exchange_flags;
1177}
1178
1179__be32
1180nfsd4_exchange_id(struct svc_rqst *rqstp,
1181 struct nfsd4_compound_state *cstate,
1182 struct nfsd4_exchange_id *exid)
1183{
1184 struct nfs4_client *unconf, *conf, *new;
1185 int status;
1186 unsigned int strhashval;
1187 char dname[HEXDIR_LEN];
1188 nfs4_verifier verf = exid->verifier;
1189 u32 ip_addr = svc_addr_in(rqstp)->sin_addr.s_addr;
1190
1191 dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p "
1192 " ip_addr=%u flags %x, spa_how %d\n",
1193 __func__, rqstp, exid, exid->clname.len, exid->clname.data,
1194 ip_addr, exid->flags, exid->spa_how);
1195
1196 if (!check_name(exid->clname) || (exid->flags & ~EXCHGID4_FLAG_MASK_A))
1197 return nfserr_inval;
1198
1199 /* Currently only support SP4_NONE */
1200 switch (exid->spa_how) {
1201 case SP4_NONE:
1202 break;
1203 case SP4_SSV:
1204 return nfserr_encr_alg_unsupp;
1205 default:
1206 BUG(); /* checked by xdr code */
1207 case SP4_MACH_CRED:
1208 return nfserr_serverfault; /* no excuse :-/ */
1209 }
1210
1211 status = nfs4_make_rec_clidname(dname, &exid->clname);
1212
1213 if (status)
1214 goto error;
1215
1216 strhashval = clientstr_hashval(dname);
1217
1218 nfs4_lock_state();
1219 status = nfs_ok;
1220
1221 conf = find_confirmed_client_by_str(dname, strhashval, true);
1222 if (conf) {
1223 if (!same_verf(&verf, &conf->cl_verifier)) {
1224 /* 18.35.4 case 8 */
1225 if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) {
1226 status = nfserr_not_same;
1227 goto out;
1228 }
1229 /* Client reboot: destroy old state */
1230 expire_client(conf);
1231 goto out_new;
1232 }
1233 if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) {
1234 /* 18.35.4 case 9 */
1235 if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) {
1236 status = nfserr_perm;
1237 goto out;
1238 }
1239 expire_client(conf);
1240 goto out_new;
1241 }
1242 if (ip_addr != conf->cl_addr &&
1243 !(exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A)) {
1244 /* Client collision. 18.35.4 case 3 */
1245 status = nfserr_clid_inuse;
1246 goto out;
1247 }
1248 /*
1249 * Set bit when the owner id and verifier map to an already
1250 * confirmed client id (18.35.3).
1251 */
1252 exid->flags |= EXCHGID4_FLAG_CONFIRMED_R;
1253
1254 /*
1255 * Falling into 18.35.4 case 2, possible router replay.
1256 * Leave confirmed record intact and return same result.
1257 */
1258 copy_verf(conf, &verf);
1259 new = conf;
1260 goto out_copy;
1261 } else {
1262 /* 18.35.4 case 7 */
1263 if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) {
1264 status = nfserr_noent;
1265 goto out;
1266 }
1267 }
1268
1269 unconf = find_unconfirmed_client_by_str(dname, strhashval, true);
1270 if (unconf) {
1271 /*
1272 * Possible retry or client restart. Per 18.35.4 case 4,
1273 * a new unconfirmed record should be generated regardless
1274 * of whether any properties have changed.
1275 */
1276 expire_client(unconf);
1277 }
1278
1279out_new:
1280 /* Normal case */
1281 new = create_client(exid->clname, dname);
1282 if (new == NULL) {
1283 status = nfserr_resource;
1284 goto out;
1285 }
1286
1287 copy_verf(new, &verf);
1288 copy_cred(&new->cl_cred, &rqstp->rq_cred);
1289 new->cl_addr = ip_addr;
1290 gen_clid(new);
1291 gen_confirm(new);
1292 add_to_unconfirmed(new, strhashval);
1293out_copy:
1294 exid->clientid.cl_boot = new->cl_clientid.cl_boot;
1295 exid->clientid.cl_id = new->cl_clientid.cl_id;
1296
1297 new->cl_slot.sl_seqid = 0;
1298 exid->seqid = 1;
1299 nfsd4_set_ex_flags(new, exid);
1300
1301 dprintk("nfsd4_exchange_id seqid %d flags %x\n",
1302 new->cl_slot.sl_seqid, new->cl_exchange_flags);
1303 status = nfs_ok;
1304
1305out:
1306 nfs4_unlock_state();
1307error:
1308 dprintk("nfsd4_exchange_id returns %d\n", ntohl(status));
1309 return status;
1310}
1311
1312static int
1313check_slot_seqid(u32 seqid, struct nfsd4_slot *slot)
1314{
1315 dprintk("%s enter. seqid %d slot->sl_seqid %d\n", __func__, seqid,
1316 slot->sl_seqid);
1317
1318 /* The slot is in use, and no response has been sent. */
1319 if (slot->sl_inuse) {
1320 if (seqid == slot->sl_seqid)
1321 return nfserr_jukebox;
1322 else
1323 return nfserr_seq_misordered;
1324 }
1325 /* Normal */
1326 if (likely(seqid == slot->sl_seqid + 1))
1327 return nfs_ok;
1328 /* Replay */
1329 if (seqid == slot->sl_seqid)
1330 return nfserr_replay_cache;
1331 /* Wraparound */
1332 if (seqid == 1 && (slot->sl_seqid + 1) == 0)
1333 return nfs_ok;
1334 /* Misordered replay or misordered new request */
1335 return nfserr_seq_misordered;
1336}
1337
1338__be32
1339nfsd4_create_session(struct svc_rqst *rqstp,
1340 struct nfsd4_compound_state *cstate,
1341 struct nfsd4_create_session *cr_ses)
1342{
1343 u32 ip_addr = svc_addr_in(rqstp)->sin_addr.s_addr;
1344 struct nfsd4_compoundres *resp = rqstp->rq_resp;
1345 struct nfs4_client *conf, *unconf;
1346 struct nfsd4_slot *slot = NULL;
1347 int status = 0;
1348
1349 nfs4_lock_state();
1350 unconf = find_unconfirmed_client(&cr_ses->clientid);
1351 conf = find_confirmed_client(&cr_ses->clientid);
1352
1353 if (conf) {
1354 slot = &conf->cl_slot;
1355 status = check_slot_seqid(cr_ses->seqid, slot);
1356 if (status == nfserr_replay_cache) {
1357 dprintk("Got a create_session replay! seqid= %d\n",
1358 slot->sl_seqid);
1359 cstate->slot = slot;
1360 cstate->status = status;
1361 /* Return the cached reply status */
1362 status = nfsd4_replay_cache_entry(resp, NULL);
1363 goto out;
1364 } else if (cr_ses->seqid != conf->cl_slot.sl_seqid + 1) {
1365 status = nfserr_seq_misordered;
1366 dprintk("Sequence misordered!\n");
1367 dprintk("Expected seqid= %d but got seqid= %d\n",
1368 slot->sl_seqid, cr_ses->seqid);
1369 goto out;
1370 }
1371 conf->cl_slot.sl_seqid++;
1372 } else if (unconf) {
1373 if (!same_creds(&unconf->cl_cred, &rqstp->rq_cred) ||
1374 (ip_addr != unconf->cl_addr)) {
1375 status = nfserr_clid_inuse;
1376 goto out;
1377 }
1378
1379 slot = &unconf->cl_slot;
1380 status = check_slot_seqid(cr_ses->seqid, slot);
1381 if (status) {
1382 /* an unconfirmed replay returns misordered */
1383 status = nfserr_seq_misordered;
1384 goto out;
1385 }
1386
1387 slot->sl_seqid++; /* from 0 to 1 */
1388 move_to_confirmed(unconf);
1389
1390 /*
1391 * We do not support RDMA or persistent sessions
1392 */
1393 cr_ses->flags &= ~SESSION4_PERSIST;
1394 cr_ses->flags &= ~SESSION4_RDMA;
1395
1396 conf = unconf;
1397 } else {
1398 status = nfserr_stale_clientid;
1399 goto out;
1400 }
1401
1402 status = alloc_init_session(rqstp, conf, cr_ses);
1403 if (status)
1404 goto out;
1405
1406 memcpy(cr_ses->sessionid.data, conf->cl_sessionid.data,
1407 NFS4_MAX_SESSIONID_LEN);
1408 cr_ses->seqid = slot->sl_seqid;
1409
1410 slot->sl_inuse = true;
1411 cstate->slot = slot;
1412 /* Ensure a page is used for the cache */
1413 slot->sl_cache_entry.ce_cachethis = 1;
1414out:
1415 nfs4_unlock_state();
1416 dprintk("%s returns %d\n", __func__, ntohl(status));
1417 return status;
1418}
1419
1420__be32
1421nfsd4_destroy_session(struct svc_rqst *r,
1422 struct nfsd4_compound_state *cstate,
1423 struct nfsd4_destroy_session *sessionid)
1424{
1425 struct nfsd4_session *ses;
1426 u32 status = nfserr_badsession;
1427
1428 /* Notes:
1429 * - The confirmed nfs4_client->cl_sessionid holds destroyed sessinid
1430 * - Should we return nfserr_back_chan_busy if waiting for
1431 * callbacks on to-be-destroyed session?
1432 * - Do we need to clear any callback info from previous session?
1433 */
1434
1435 dump_sessionid(__func__, &sessionid->sessionid);
1436 spin_lock(&sessionid_lock);
1437 ses = find_in_sessionid_hashtbl(&sessionid->sessionid);
1438 if (!ses) {
1439 spin_unlock(&sessionid_lock);
1440 goto out;
1441 }
1442
1443 unhash_session(ses);
1444 spin_unlock(&sessionid_lock);
1445
1446 /* wait for callbacks */
1447 shutdown_callback_client(ses->se_client);
1448 nfsd4_put_session(ses);
1449 status = nfs_ok;
1450out:
1451 dprintk("%s returns %d\n", __func__, ntohl(status));
1452 return status;
1453}
1454
1455__be32
1456nfsd4_sequence(struct svc_rqst *rqstp,
1457 struct nfsd4_compound_state *cstate,
1458 struct nfsd4_sequence *seq)
1459{
1460 struct nfsd4_compoundres *resp = rqstp->rq_resp;
1461 struct nfsd4_session *session;
1462 struct nfsd4_slot *slot;
1463 int status;
1464
1465 if (resp->opcnt != 1)
1466 return nfserr_sequence_pos;
1467
1468 spin_lock(&sessionid_lock);
1469 status = nfserr_badsession;
1470 session = find_in_sessionid_hashtbl(&seq->sessionid);
1471 if (!session)
1472 goto out;
1473
1474 status = nfserr_badslot;
1475 if (seq->slotid >= session->se_fnumslots)
1476 goto out;
1477
1478 slot = &session->se_slots[seq->slotid];
1479 dprintk("%s: slotid %d\n", __func__, seq->slotid);
1480
1481 status = check_slot_seqid(seq->seqid, slot);
1482 if (status == nfserr_replay_cache) {
1483 cstate->slot = slot;
1484 cstate->session = session;
1485 /* Return the cached reply status and set cstate->status
1486 * for nfsd4_svc_encode_compoundres processing */
1487 status = nfsd4_replay_cache_entry(resp, seq);
1488 cstate->status = nfserr_replay_cache;
1489 goto replay_cache;
1490 }
1491 if (status)
1492 goto out;
1493
1494 /* Success! bump slot seqid */
1495 slot->sl_inuse = true;
1496 slot->sl_seqid = seq->seqid;
1497 slot->sl_cache_entry.ce_cachethis = seq->cachethis;
1498 /* Always set the cache entry cachethis for solo sequence */
1499 if (nfsd4_is_solo_sequence(resp))
1500 slot->sl_cache_entry.ce_cachethis = 1;
1501
1502 cstate->slot = slot;
1503 cstate->session = session;
1504
1505replay_cache:
1506 /* Renew the clientid on success and on replay.
1507 * Hold a session reference until done processing the compound:
1508 * nfsd4_put_session called only if the cstate slot is set.
1509 */
1510 renew_client(session->se_client);
1511 nfsd4_get_session(session);
1512out:
1513 spin_unlock(&sessionid_lock);
1514 dprintk("%s: return %d\n", __func__, ntohl(status));
1515 return status;
1516}
1517
688__be32 1518__be32
689nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 1519nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
690 struct nfsd4_setclientid *setclid) 1520 struct nfsd4_setclientid *setclid)
@@ -716,14 +1546,13 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
716 strhashval = clientstr_hashval(dname); 1546 strhashval = clientstr_hashval(dname);
717 1547
718 nfs4_lock_state(); 1548 nfs4_lock_state();
719 conf = find_confirmed_client_by_str(dname, strhashval); 1549 conf = find_confirmed_client_by_str(dname, strhashval, false);
720 if (conf) { 1550 if (conf) {
721 /* RFC 3530 14.2.33 CASE 0: */ 1551 /* RFC 3530 14.2.33 CASE 0: */
722 status = nfserr_clid_inuse; 1552 status = nfserr_clid_inuse;
723 if (!same_creds(&conf->cl_cred, &rqstp->rq_cred) 1553 if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) {
724 || conf->cl_addr != sin->sin_addr.s_addr) { 1554 dprintk("NFSD: setclientid: string in use by client"
725 dprintk("NFSD: setclientid: string in use by clientat %pI4\n", 1555 " at %pI4\n", &conf->cl_addr);
726 &conf->cl_addr);
727 goto out; 1556 goto out;
728 } 1557 }
729 } 1558 }
@@ -732,7 +1561,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
732 * has a description of SETCLIENTID request processing consisting 1561 * has a description of SETCLIENTID request processing consisting
733 * of 5 bullet points, labeled as CASE0 - CASE4 below. 1562 * of 5 bullet points, labeled as CASE0 - CASE4 below.
734 */ 1563 */
735 unconf = find_unconfirmed_client_by_str(dname, strhashval); 1564 unconf = find_unconfirmed_client_by_str(dname, strhashval, false);
736 status = nfserr_resource; 1565 status = nfserr_resource;
737 if (!conf) { 1566 if (!conf) {
738 /* 1567 /*
@@ -887,7 +1716,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
887 unsigned int hash = 1716 unsigned int hash =
888 clientstr_hashval(unconf->cl_recdir); 1717 clientstr_hashval(unconf->cl_recdir);
889 conf = find_confirmed_client_by_str(unconf->cl_recdir, 1718 conf = find_confirmed_client_by_str(unconf->cl_recdir,
890 hash); 1719 hash, false);
891 if (conf) { 1720 if (conf) {
892 nfsd4_remove_clid_dir(conf); 1721 nfsd4_remove_clid_dir(conf);
893 expire_client(conf); 1722 expire_client(conf);
@@ -923,11 +1752,13 @@ alloc_init_file(struct inode *ino)
923 1752
924 fp = kmem_cache_alloc(file_slab, GFP_KERNEL); 1753 fp = kmem_cache_alloc(file_slab, GFP_KERNEL);
925 if (fp) { 1754 if (fp) {
926 kref_init(&fp->fi_ref); 1755 atomic_set(&fp->fi_ref, 1);
927 INIT_LIST_HEAD(&fp->fi_hash); 1756 INIT_LIST_HEAD(&fp->fi_hash);
928 INIT_LIST_HEAD(&fp->fi_stateids); 1757 INIT_LIST_HEAD(&fp->fi_stateids);
929 INIT_LIST_HEAD(&fp->fi_delegations); 1758 INIT_LIST_HEAD(&fp->fi_delegations);
1759 spin_lock(&recall_lock);
930 list_add(&fp->fi_hash, &file_hashtbl[hashval]); 1760 list_add(&fp->fi_hash, &file_hashtbl[hashval]);
1761 spin_unlock(&recall_lock);
931 fp->fi_inode = igrab(ino); 1762 fp->fi_inode = igrab(ino);
932 fp->fi_id = current_fileid++; 1763 fp->fi_id = current_fileid++;
933 fp->fi_had_conflict = false; 1764 fp->fi_had_conflict = false;
@@ -1037,48 +1868,6 @@ alloc_init_open_stateowner(unsigned int strhashval, struct nfs4_client *clp, str
1037 return sop; 1868 return sop;
1038} 1869}
1039 1870
1040static void
1041release_stateid_lockowners(struct nfs4_stateid *open_stp)
1042{
1043 struct nfs4_stateowner *lock_sop;
1044
1045 while (!list_empty(&open_stp->st_lockowners)) {
1046 lock_sop = list_entry(open_stp->st_lockowners.next,
1047 struct nfs4_stateowner, so_perstateid);
1048 /* list_del(&open_stp->st_lockowners); */
1049 BUG_ON(lock_sop->so_is_open_owner);
1050 release_stateowner(lock_sop);
1051 }
1052}
1053
1054static void
1055unhash_stateowner(struct nfs4_stateowner *sop)
1056{
1057 struct nfs4_stateid *stp;
1058
1059 list_del(&sop->so_idhash);
1060 list_del(&sop->so_strhash);
1061 if (sop->so_is_open_owner)
1062 list_del(&sop->so_perclient);
1063 list_del(&sop->so_perstateid);
1064 while (!list_empty(&sop->so_stateids)) {
1065 stp = list_entry(sop->so_stateids.next,
1066 struct nfs4_stateid, st_perstateowner);
1067 if (sop->so_is_open_owner)
1068 release_stateid(stp, OPEN_STATE);
1069 else
1070 release_stateid(stp, LOCK_STATE);
1071 }
1072}
1073
1074static void
1075release_stateowner(struct nfs4_stateowner *sop)
1076{
1077 unhash_stateowner(sop);
1078 list_del(&sop->so_close_lru);
1079 nfs4_put_stateowner(sop);
1080}
1081
1082static inline void 1871static inline void
1083init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) { 1872init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) {
1084 struct nfs4_stateowner *sop = open->op_stateowner; 1873 struct nfs4_stateowner *sop = open->op_stateowner;
@@ -1100,30 +1889,13 @@ init_stateid(struct nfs4_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *
1100 stp->st_stateid.si_generation = 0; 1889 stp->st_stateid.si_generation = 0;
1101 stp->st_access_bmap = 0; 1890 stp->st_access_bmap = 0;
1102 stp->st_deny_bmap = 0; 1891 stp->st_deny_bmap = 0;
1103 __set_bit(open->op_share_access, &stp->st_access_bmap); 1892 __set_bit(open->op_share_access & ~NFS4_SHARE_WANT_MASK,
1893 &stp->st_access_bmap);
1104 __set_bit(open->op_share_deny, &stp->st_deny_bmap); 1894 __set_bit(open->op_share_deny, &stp->st_deny_bmap);
1105 stp->st_openstp = NULL; 1895 stp->st_openstp = NULL;
1106} 1896}
1107 1897
1108static void 1898static void
1109release_stateid(struct nfs4_stateid *stp, int flags)
1110{
1111 struct file *filp = stp->st_vfs_file;
1112
1113 list_del(&stp->st_hash);
1114 list_del(&stp->st_perfile);
1115 list_del(&stp->st_perstateowner);
1116 if (flags & OPEN_STATE) {
1117 release_stateid_lockowners(stp);
1118 stp->st_vfs_file = NULL;
1119 nfsd_close(filp);
1120 } else if (flags & LOCK_STATE)
1121 locks_remove_posix(filp, (fl_owner_t) stp->st_stateowner);
1122 put_nfs4_file(stp->st_file);
1123 kmem_cache_free(stateid_slab, stp);
1124}
1125
1126static void
1127move_to_close_lru(struct nfs4_stateowner *sop) 1899move_to_close_lru(struct nfs4_stateowner *sop)
1128{ 1900{
1129 dprintk("NFSD: move_to_close_lru nfs4_stateowner %p\n", sop); 1901 dprintk("NFSD: move_to_close_lru nfs4_stateowner %p\n", sop);
@@ -1160,20 +1932,33 @@ find_file(struct inode *ino)
1160 unsigned int hashval = file_hashval(ino); 1932 unsigned int hashval = file_hashval(ino);
1161 struct nfs4_file *fp; 1933 struct nfs4_file *fp;
1162 1934
1935 spin_lock(&recall_lock);
1163 list_for_each_entry(fp, &file_hashtbl[hashval], fi_hash) { 1936 list_for_each_entry(fp, &file_hashtbl[hashval], fi_hash) {
1164 if (fp->fi_inode == ino) { 1937 if (fp->fi_inode == ino) {
1165 get_nfs4_file(fp); 1938 get_nfs4_file(fp);
1939 spin_unlock(&recall_lock);
1166 return fp; 1940 return fp;
1167 } 1941 }
1168 } 1942 }
1943 spin_unlock(&recall_lock);
1169 return NULL; 1944 return NULL;
1170} 1945}
1171 1946
1172static inline int access_valid(u32 x) 1947static inline int access_valid(u32 x, u32 minorversion)
1173{ 1948{
1174 if (x < NFS4_SHARE_ACCESS_READ) 1949 if ((x & NFS4_SHARE_ACCESS_MASK) < NFS4_SHARE_ACCESS_READ)
1175 return 0; 1950 return 0;
1176 if (x > NFS4_SHARE_ACCESS_BOTH) 1951 if ((x & NFS4_SHARE_ACCESS_MASK) > NFS4_SHARE_ACCESS_BOTH)
1952 return 0;
1953 x &= ~NFS4_SHARE_ACCESS_MASK;
1954 if (minorversion && x) {
1955 if ((x & NFS4_SHARE_WANT_MASK) > NFS4_SHARE_WANT_CANCEL)
1956 return 0;
1957 if ((x & NFS4_SHARE_WHEN_MASK) > NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED)
1958 return 0;
1959 x &= ~(NFS4_SHARE_WANT_MASK | NFS4_SHARE_WHEN_MASK);
1960 }
1961 if (x)
1177 return 0; 1962 return 0;
1178 return 1; 1963 return 1;
1179} 1964}
@@ -1409,7 +2194,8 @@ static struct lock_manager_operations nfsd_lease_mng_ops = {
1409 2194
1410 2195
1411__be32 2196__be32
1412nfsd4_process_open1(struct nfsd4_open *open) 2197nfsd4_process_open1(struct nfsd4_compound_state *cstate,
2198 struct nfsd4_open *open)
1413{ 2199{
1414 clientid_t *clientid = &open->op_clientid; 2200 clientid_t *clientid = &open->op_clientid;
1415 struct nfs4_client *clp = NULL; 2201 struct nfs4_client *clp = NULL;
@@ -1432,10 +2218,13 @@ nfsd4_process_open1(struct nfsd4_open *open)
1432 return nfserr_expired; 2218 return nfserr_expired;
1433 goto renew; 2219 goto renew;
1434 } 2220 }
2221 /* When sessions are used, skip open sequenceid processing */
2222 if (nfsd4_has_session(cstate))
2223 goto renew;
1435 if (!sop->so_confirmed) { 2224 if (!sop->so_confirmed) {
1436 /* Replace unconfirmed owners without checking for replay. */ 2225 /* Replace unconfirmed owners without checking for replay. */
1437 clp = sop->so_client; 2226 clp = sop->so_client;
1438 release_stateowner(sop); 2227 release_openowner(sop);
1439 open->op_stateowner = NULL; 2228 open->op_stateowner = NULL;
1440 goto renew; 2229 goto renew;
1441 } 2230 }
@@ -1709,6 +2498,7 @@ out:
1709__be32 2498__be32
1710nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) 2499nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open)
1711{ 2500{
2501 struct nfsd4_compoundres *resp = rqstp->rq_resp;
1712 struct nfs4_file *fp = NULL; 2502 struct nfs4_file *fp = NULL;
1713 struct inode *ino = current_fh->fh_dentry->d_inode; 2503 struct inode *ino = current_fh->fh_dentry->d_inode;
1714 struct nfs4_stateid *stp = NULL; 2504 struct nfs4_stateid *stp = NULL;
@@ -1716,7 +2506,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
1716 __be32 status; 2506 __be32 status;
1717 2507
1718 status = nfserr_inval; 2508 status = nfserr_inval;
1719 if (!access_valid(open->op_share_access) 2509 if (!access_valid(open->op_share_access, resp->cstate.minorversion)
1720 || !deny_valid(open->op_share_deny)) 2510 || !deny_valid(open->op_share_deny))
1721 goto out; 2511 goto out;
1722 /* 2512 /*
@@ -1764,12 +2554,17 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
1764 init_stateid(stp, fp, open); 2554 init_stateid(stp, fp, open);
1765 status = nfsd4_truncate(rqstp, current_fh, open); 2555 status = nfsd4_truncate(rqstp, current_fh, open);
1766 if (status) { 2556 if (status) {
1767 release_stateid(stp, OPEN_STATE); 2557 release_open_stateid(stp);
1768 goto out; 2558 goto out;
1769 } 2559 }
2560 if (nfsd4_has_session(&resp->cstate))
2561 update_stateid(&stp->st_stateid);
1770 } 2562 }
1771 memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t)); 2563 memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t));
1772 2564
2565 if (nfsd4_has_session(&resp->cstate))
2566 open->op_stateowner->so_confirmed = 1;
2567
1773 /* 2568 /*
1774 * Attempt to hand out a delegation. No error return, because the 2569 * Attempt to hand out a delegation. No error return, because the
1775 * OPEN succeeds even if we fail. 2570 * OPEN succeeds even if we fail.
@@ -1790,7 +2585,8 @@ out:
1790 * To finish the open response, we just need to set the rflags. 2585 * To finish the open response, we just need to set the rflags.
1791 */ 2586 */
1792 open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX; 2587 open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX;
1793 if (!open->op_stateowner->so_confirmed) 2588 if (!open->op_stateowner->so_confirmed &&
2589 !nfsd4_has_session(&resp->cstate))
1794 open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; 2590 open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM;
1795 2591
1796 return status; 2592 return status;
@@ -1898,7 +2694,7 @@ nfs4_laundromat(void)
1898 } 2694 }
1899 dprintk("NFSD: purging unused open stateowner (so_id %d)\n", 2695 dprintk("NFSD: purging unused open stateowner (so_id %d)\n",
1900 sop->so_id); 2696 sop->so_id);
1901 release_stateowner(sop); 2697 release_openowner(sop);
1902 } 2698 }
1903 if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT) 2699 if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT)
1904 clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT; 2700 clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT;
@@ -1983,10 +2779,7 @@ out:
1983static inline __be32 2779static inline __be32
1984check_special_stateids(svc_fh *current_fh, stateid_t *stateid, int flags) 2780check_special_stateids(svc_fh *current_fh, stateid_t *stateid, int flags)
1985{ 2781{
1986 /* Trying to call delegreturn with a special stateid? Yuch: */ 2782 if (ONE_STATEID(stateid) && (flags & RD_STATE))
1987 if (!(flags & (RD_STATE | WR_STATE)))
1988 return nfserr_bad_stateid;
1989 else if (ONE_STATEID(stateid) && (flags & RD_STATE))
1990 return nfs_ok; 2783 return nfs_ok;
1991 else if (locks_in_grace()) { 2784 else if (locks_in_grace()) {
1992 /* Answer in remaining cases depends on existance of 2785 /* Answer in remaining cases depends on existance of
@@ -2005,14 +2798,20 @@ check_special_stateids(svc_fh *current_fh, stateid_t *stateid, int flags)
2005 * that are not able to provide mandatory locking. 2798 * that are not able to provide mandatory locking.
2006 */ 2799 */
2007static inline int 2800static inline int
2008io_during_grace_disallowed(struct inode *inode, int flags) 2801grace_disallows_io(struct inode *inode)
2009{ 2802{
2010 return locks_in_grace() && (flags & (RD_STATE | WR_STATE)) 2803 return locks_in_grace() && mandatory_lock(inode);
2011 && mandatory_lock(inode);
2012} 2804}
2013 2805
2014static int check_stateid_generation(stateid_t *in, stateid_t *ref) 2806static int check_stateid_generation(stateid_t *in, stateid_t *ref, int flags)
2015{ 2807{
2808 /*
2809 * When sessions are used the stateid generation number is ignored
2810 * when it is zero.
2811 */
2812 if ((flags & HAS_SESSION) && in->si_generation == 0)
2813 goto out;
2814
2016 /* If the client sends us a stateid from the future, it's buggy: */ 2815 /* If the client sends us a stateid from the future, it's buggy: */
2017 if (in->si_generation > ref->si_generation) 2816 if (in->si_generation > ref->si_generation)
2018 return nfserr_bad_stateid; 2817 return nfserr_bad_stateid;
@@ -2028,74 +2827,77 @@ static int check_stateid_generation(stateid_t *in, stateid_t *ref)
2028 */ 2827 */
2029 if (in->si_generation < ref->si_generation) 2828 if (in->si_generation < ref->si_generation)
2030 return nfserr_old_stateid; 2829 return nfserr_old_stateid;
2830out:
2031 return nfs_ok; 2831 return nfs_ok;
2032} 2832}
2033 2833
2834static int is_delegation_stateid(stateid_t *stateid)
2835{
2836 return stateid->si_fileid == 0;
2837}
2838
2034/* 2839/*
2035* Checks for stateid operations 2840* Checks for stateid operations
2036*/ 2841*/
2037__be32 2842__be32
2038nfs4_preprocess_stateid_op(struct svc_fh *current_fh, stateid_t *stateid, int flags, struct file **filpp) 2843nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
2844 stateid_t *stateid, int flags, struct file **filpp)
2039{ 2845{
2040 struct nfs4_stateid *stp = NULL; 2846 struct nfs4_stateid *stp = NULL;
2041 struct nfs4_delegation *dp = NULL; 2847 struct nfs4_delegation *dp = NULL;
2042 stateid_t *stidp; 2848 struct svc_fh *current_fh = &cstate->current_fh;
2043 struct inode *ino = current_fh->fh_dentry->d_inode; 2849 struct inode *ino = current_fh->fh_dentry->d_inode;
2044 __be32 status; 2850 __be32 status;
2045 2851
2046 dprintk("NFSD: preprocess_stateid_op: stateid = (%08x/%08x/%08x/%08x)\n",
2047 stateid->si_boot, stateid->si_stateownerid,
2048 stateid->si_fileid, stateid->si_generation);
2049 if (filpp) 2852 if (filpp)
2050 *filpp = NULL; 2853 *filpp = NULL;
2051 2854
2052 if (io_during_grace_disallowed(ino, flags)) 2855 if (grace_disallows_io(ino))
2053 return nfserr_grace; 2856 return nfserr_grace;
2054 2857
2858 if (nfsd4_has_session(cstate))
2859 flags |= HAS_SESSION;
2860
2055 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) 2861 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
2056 return check_special_stateids(current_fh, stateid, flags); 2862 return check_special_stateids(current_fh, stateid, flags);
2057 2863
2058 /* STALE STATEID */
2059 status = nfserr_stale_stateid; 2864 status = nfserr_stale_stateid;
2060 if (STALE_STATEID(stateid)) 2865 if (STALE_STATEID(stateid))
2061 goto out; 2866 goto out;
2062 2867
2063 /* BAD STATEID */
2064 status = nfserr_bad_stateid; 2868 status = nfserr_bad_stateid;
2065 if (!stateid->si_fileid) { /* delegation stateid */ 2869 if (is_delegation_stateid(stateid)) {
2066 if(!(dp = find_delegation_stateid(ino, stateid))) { 2870 dp = find_delegation_stateid(ino, stateid);
2067 dprintk("NFSD: delegation stateid not found\n"); 2871 if (!dp)
2068 goto out; 2872 goto out;
2069 } 2873 status = check_stateid_generation(stateid, &dp->dl_stateid,
2070 stidp = &dp->dl_stateid; 2874 flags);
2875 if (status)
2876 goto out;
2877 status = nfs4_check_delegmode(dp, flags);
2878 if (status)
2879 goto out;
2880 renew_client(dp->dl_client);
2881 if (filpp)
2882 *filpp = dp->dl_vfs_file;
2071 } else { /* open or lock stateid */ 2883 } else { /* open or lock stateid */
2072 if (!(stp = find_stateid(stateid, flags))) { 2884 stp = find_stateid(stateid, flags);
2073 dprintk("NFSD: open or lock stateid not found\n"); 2885 if (!stp)
2074 goto out; 2886 goto out;
2075 } 2887 if (nfs4_check_fh(current_fh, stp))
2076 if ((flags & CHECK_FH) && nfs4_check_fh(current_fh, stp))
2077 goto out; 2888 goto out;
2078 if (!stp->st_stateowner->so_confirmed) 2889 if (!stp->st_stateowner->so_confirmed)
2079 goto out; 2890 goto out;
2080 stidp = &stp->st_stateid; 2891 status = check_stateid_generation(stateid, &stp->st_stateid,
2081 } 2892 flags);
2082 status = check_stateid_generation(stateid, stidp); 2893 if (status)
2083 if (status) 2894 goto out;
2084 goto out; 2895 status = nfs4_check_openmode(stp, flags);
2085 if (stp) { 2896 if (status)
2086 if ((status = nfs4_check_openmode(stp,flags)))
2087 goto out; 2897 goto out;
2088 renew_client(stp->st_stateowner->so_client); 2898 renew_client(stp->st_stateowner->so_client);
2089 if (filpp) 2899 if (filpp)
2090 *filpp = stp->st_vfs_file; 2900 *filpp = stp->st_vfs_file;
2091 } else {
2092 if ((status = nfs4_check_delegmode(dp, flags)))
2093 goto out;
2094 renew_client(dp->dl_client);
2095 if (flags & DELEG_RET)
2096 unhash_delegation(dp);
2097 if (filpp)
2098 *filpp = dp->dl_vfs_file;
2099 } 2901 }
2100 status = nfs_ok; 2902 status = nfs_ok;
2101out: 2903out:
@@ -2113,10 +2915,14 @@ setlkflg (int type)
2113 * Checks for sequence id mutating operations. 2915 * Checks for sequence id mutating operations.
2114 */ 2916 */
2115static __be32 2917static __be32
2116nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *stateid, int flags, struct nfs4_stateowner **sopp, struct nfs4_stateid **stpp, struct nfsd4_lock *lock) 2918nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
2919 stateid_t *stateid, int flags,
2920 struct nfs4_stateowner **sopp,
2921 struct nfs4_stateid **stpp, struct nfsd4_lock *lock)
2117{ 2922{
2118 struct nfs4_stateid *stp; 2923 struct nfs4_stateid *stp;
2119 struct nfs4_stateowner *sop; 2924 struct nfs4_stateowner *sop;
2925 struct svc_fh *current_fh = &cstate->current_fh;
2120 __be32 status; 2926 __be32 status;
2121 2927
2122 dprintk("NFSD: preprocess_seqid_op: seqid=%d " 2928 dprintk("NFSD: preprocess_seqid_op: seqid=%d "
@@ -2134,6 +2940,10 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei
2134 2940
2135 if (STALE_STATEID(stateid)) 2941 if (STALE_STATEID(stateid))
2136 return nfserr_stale_stateid; 2942 return nfserr_stale_stateid;
2943
2944 if (nfsd4_has_session(cstate))
2945 flags |= HAS_SESSION;
2946
2137 /* 2947 /*
2138 * We return BAD_STATEID if filehandle doesn't match stateid, 2948 * We return BAD_STATEID if filehandle doesn't match stateid,
2139 * the confirmed flag is incorrecly set, or the generation 2949 * the confirmed flag is incorrecly set, or the generation
@@ -2166,8 +2976,9 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei
2166 if (lock->lk_is_new) { 2976 if (lock->lk_is_new) {
2167 if (!sop->so_is_open_owner) 2977 if (!sop->so_is_open_owner)
2168 return nfserr_bad_stateid; 2978 return nfserr_bad_stateid;
2169 if (!same_clid(&clp->cl_clientid, lockclid)) 2979 if (!(flags & HAS_SESSION) &&
2170 return nfserr_bad_stateid; 2980 !same_clid(&clp->cl_clientid, lockclid))
2981 return nfserr_bad_stateid;
2171 /* stp is the open stateid */ 2982 /* stp is the open stateid */
2172 status = nfs4_check_openmode(stp, lkflg); 2983 status = nfs4_check_openmode(stp, lkflg);
2173 if (status) 2984 if (status)
@@ -2190,7 +3001,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei
2190 * For the moment, we ignore the possibility of 3001 * For the moment, we ignore the possibility of
2191 * generation number wraparound. 3002 * generation number wraparound.
2192 */ 3003 */
2193 if (seqid != sop->so_seqid) 3004 if (!(flags & HAS_SESSION) && seqid != sop->so_seqid)
2194 goto check_replay; 3005 goto check_replay;
2195 3006
2196 if (sop->so_confirmed && flags & CONFIRM) { 3007 if (sop->so_confirmed && flags & CONFIRM) {
@@ -2203,7 +3014,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei
2203 " confirmed yet!\n"); 3014 " confirmed yet!\n");
2204 return nfserr_bad_stateid; 3015 return nfserr_bad_stateid;
2205 } 3016 }
2206 status = check_stateid_generation(stateid, &stp->st_stateid); 3017 status = check_stateid_generation(stateid, &stp->st_stateid, flags);
2207 if (status) 3018 if (status)
2208 return status; 3019 return status;
2209 renew_client(sop->so_client); 3020 renew_client(sop->so_client);
@@ -2239,7 +3050,7 @@ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2239 3050
2240 nfs4_lock_state(); 3051 nfs4_lock_state();
2241 3052
2242 if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, 3053 if ((status = nfs4_preprocess_seqid_op(cstate,
2243 oc->oc_seqid, &oc->oc_req_stateid, 3054 oc->oc_seqid, &oc->oc_req_stateid,
2244 CONFIRM | OPEN_STATE, 3055 CONFIRM | OPEN_STATE,
2245 &oc->oc_stateowner, &stp, NULL))) 3056 &oc->oc_stateowner, &stp, NULL)))
@@ -2304,12 +3115,12 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
2304 (int)cstate->current_fh.fh_dentry->d_name.len, 3115 (int)cstate->current_fh.fh_dentry->d_name.len,
2305 cstate->current_fh.fh_dentry->d_name.name); 3116 cstate->current_fh.fh_dentry->d_name.name);
2306 3117
2307 if (!access_valid(od->od_share_access) 3118 if (!access_valid(od->od_share_access, cstate->minorversion)
2308 || !deny_valid(od->od_share_deny)) 3119 || !deny_valid(od->od_share_deny))
2309 return nfserr_inval; 3120 return nfserr_inval;
2310 3121
2311 nfs4_lock_state(); 3122 nfs4_lock_state();
2312 if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, 3123 if ((status = nfs4_preprocess_seqid_op(cstate,
2313 od->od_seqid, 3124 od->od_seqid,
2314 &od->od_stateid, 3125 &od->od_stateid,
2315 OPEN_STATE, 3126 OPEN_STATE,
@@ -2362,7 +3173,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2362 3173
2363 nfs4_lock_state(); 3174 nfs4_lock_state();
2364 /* check close_lru for replay */ 3175 /* check close_lru for replay */
2365 if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, 3176 if ((status = nfs4_preprocess_seqid_op(cstate,
2366 close->cl_seqid, 3177 close->cl_seqid,
2367 &close->cl_stateid, 3178 &close->cl_stateid,
2368 OPEN_STATE | CLOSE_STATE, 3179 OPEN_STATE | CLOSE_STATE,
@@ -2373,7 +3184,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2373 memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t)); 3184 memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t));
2374 3185
2375 /* release_stateid() calls nfsd_close() if needed */ 3186 /* release_stateid() calls nfsd_close() if needed */
2376 release_stateid(stp, OPEN_STATE); 3187 release_open_stateid(stp);
2377 3188
2378 /* place unused nfs4_stateowners on so_close_lru list to be 3189 /* place unused nfs4_stateowners on so_close_lru list to be
2379 * released by the laundromat service after the lease period 3190 * released by the laundromat service after the lease period
@@ -2394,16 +3205,40 @@ __be32
2394nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 3205nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2395 struct nfsd4_delegreturn *dr) 3206 struct nfsd4_delegreturn *dr)
2396{ 3207{
3208 struct nfs4_delegation *dp;
3209 stateid_t *stateid = &dr->dr_stateid;
3210 struct inode *inode;
2397 __be32 status; 3211 __be32 status;
3212 int flags = 0;
2398 3213
2399 if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) 3214 if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0)))
2400 goto out; 3215 return status;
3216 inode = cstate->current_fh.fh_dentry->d_inode;
2401 3217
3218 if (nfsd4_has_session(cstate))
3219 flags |= HAS_SESSION;
2402 nfs4_lock_state(); 3220 nfs4_lock_state();
2403 status = nfs4_preprocess_stateid_op(&cstate->current_fh, 3221 status = nfserr_bad_stateid;
2404 &dr->dr_stateid, DELEG_RET, NULL); 3222 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
2405 nfs4_unlock_state(); 3223 goto out;
3224 status = nfserr_stale_stateid;
3225 if (STALE_STATEID(stateid))
3226 goto out;
3227 status = nfserr_bad_stateid;
3228 if (!is_delegation_stateid(stateid))
3229 goto out;
3230 dp = find_delegation_stateid(inode, stateid);
3231 if (!dp)
3232 goto out;
3233 status = check_stateid_generation(stateid, &dp->dl_stateid, flags);
3234 if (status)
3235 goto out;
3236 renew_client(dp->dl_client);
3237
3238 unhash_delegation(dp);
2406out: 3239out:
3240 nfs4_unlock_state();
3241
2407 return status; 3242 return status;
2408} 3243}
2409 3244
@@ -2684,11 +3519,12 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2684 struct nfs4_file *fp; 3519 struct nfs4_file *fp;
2685 3520
2686 status = nfserr_stale_clientid; 3521 status = nfserr_stale_clientid;
2687 if (STALE_CLIENTID(&lock->lk_new_clientid)) 3522 if (!nfsd4_has_session(cstate) &&
3523 STALE_CLIENTID(&lock->lk_new_clientid))
2688 goto out; 3524 goto out;
2689 3525
2690 /* validate and update open stateid and open seqid */ 3526 /* validate and update open stateid and open seqid */
2691 status = nfs4_preprocess_seqid_op(&cstate->current_fh, 3527 status = nfs4_preprocess_seqid_op(cstate,
2692 lock->lk_new_open_seqid, 3528 lock->lk_new_open_seqid,
2693 &lock->lk_new_open_stateid, 3529 &lock->lk_new_open_stateid,
2694 OPEN_STATE, 3530 OPEN_STATE,
@@ -2715,7 +3551,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2715 goto out; 3551 goto out;
2716 } else { 3552 } else {
2717 /* lock (lock owner + lock stateid) already exists */ 3553 /* lock (lock owner + lock stateid) already exists */
2718 status = nfs4_preprocess_seqid_op(&cstate->current_fh, 3554 status = nfs4_preprocess_seqid_op(cstate,
2719 lock->lk_old_lock_seqid, 3555 lock->lk_old_lock_seqid,
2720 &lock->lk_old_lock_stateid, 3556 &lock->lk_old_lock_stateid,
2721 LOCK_STATE, 3557 LOCK_STATE,
@@ -2788,7 +3624,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2788 } 3624 }
2789out: 3625out:
2790 if (status && lock->lk_is_new && lock_sop) 3626 if (status && lock->lk_is_new && lock_sop)
2791 release_stateowner(lock_sop); 3627 release_lockowner(lock_sop);
2792 if (lock->lk_replay_owner) { 3628 if (lock->lk_replay_owner) {
2793 nfs4_get_stateowner(lock->lk_replay_owner); 3629 nfs4_get_stateowner(lock->lk_replay_owner);
2794 cstate->replay_owner = lock->lk_replay_owner; 3630 cstate->replay_owner = lock->lk_replay_owner;
@@ -2838,7 +3674,7 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2838 nfs4_lock_state(); 3674 nfs4_lock_state();
2839 3675
2840 status = nfserr_stale_clientid; 3676 status = nfserr_stale_clientid;
2841 if (STALE_CLIENTID(&lockt->lt_clientid)) 3677 if (!nfsd4_has_session(cstate) && STALE_CLIENTID(&lockt->lt_clientid))
2842 goto out; 3678 goto out;
2843 3679
2844 if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) { 3680 if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) {
@@ -2911,7 +3747,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2911 3747
2912 nfs4_lock_state(); 3748 nfs4_lock_state();
2913 3749
2914 if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh, 3750 if ((status = nfs4_preprocess_seqid_op(cstate,
2915 locku->lu_seqid, 3751 locku->lu_seqid,
2916 &locku->lu_stateid, 3752 &locku->lu_stateid,
2917 LOCK_STATE, 3753 LOCK_STATE,
@@ -3037,7 +3873,7 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,
3037 /* unhash_stateowner deletes so_perclient only 3873 /* unhash_stateowner deletes so_perclient only
3038 * for openowners. */ 3874 * for openowners. */
3039 list_del(&sop->so_perclient); 3875 list_del(&sop->so_perclient);
3040 release_stateowner(sop); 3876 release_lockowner(sop);
3041 } 3877 }
3042out: 3878out:
3043 nfs4_unlock_state(); 3879 nfs4_unlock_state();
@@ -3051,12 +3887,12 @@ alloc_reclaim(void)
3051} 3887}
3052 3888
3053int 3889int
3054nfs4_has_reclaimed_state(const char *name) 3890nfs4_has_reclaimed_state(const char *name, bool use_exchange_id)
3055{ 3891{
3056 unsigned int strhashval = clientstr_hashval(name); 3892 unsigned int strhashval = clientstr_hashval(name);
3057 struct nfs4_client *clp; 3893 struct nfs4_client *clp;
3058 3894
3059 clp = find_confirmed_client_by_str(name, strhashval); 3895 clp = find_confirmed_client_by_str(name, strhashval, use_exchange_id);
3060 return clp ? 1 : 0; 3896 return clp ? 1 : 0;
3061} 3897}
3062 3898
@@ -3153,6 +3989,8 @@ nfs4_state_init(void)
3153 INIT_LIST_HEAD(&unconf_str_hashtbl[i]); 3989 INIT_LIST_HEAD(&unconf_str_hashtbl[i]);
3154 INIT_LIST_HEAD(&unconf_id_hashtbl[i]); 3990 INIT_LIST_HEAD(&unconf_id_hashtbl[i]);
3155 } 3991 }
3992 for (i = 0; i < SESSION_HASH_SIZE; i++)
3993 INIT_LIST_HEAD(&sessionid_hashtbl[i]);
3156 for (i = 0; i < FILE_HASH_SIZE; i++) { 3994 for (i = 0; i < FILE_HASH_SIZE; i++) {
3157 INIT_LIST_HEAD(&file_hashtbl[i]); 3995 INIT_LIST_HEAD(&file_hashtbl[i]);
3158 } 3996 }
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 9250067943d8..b820c311931c 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -45,6 +45,7 @@
45#include <linux/fs.h> 45#include <linux/fs.h>
46#include <linux/namei.h> 46#include <linux/namei.h>
47#include <linux/vfs.h> 47#include <linux/vfs.h>
48#include <linux/utsname.h>
48#include <linux/sunrpc/xdr.h> 49#include <linux/sunrpc/xdr.h>
49#include <linux/sunrpc/svc.h> 50#include <linux/sunrpc/svc.h>
50#include <linux/sunrpc/clnt.h> 51#include <linux/sunrpc/clnt.h>
@@ -188,6 +189,11 @@ static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes)
188 return p; 189 return p;
189} 190}
190 191
192static int zero_clientid(clientid_t *clid)
193{
194 return (clid->cl_boot == 0) && (clid->cl_id == 0);
195}
196
191static int 197static int
192defer_free(struct nfsd4_compoundargs *argp, 198defer_free(struct nfsd4_compoundargs *argp,
193 void (*release)(const void *), void *p) 199 void (*release)(const void *), void *p)
@@ -230,6 +236,7 @@ nfsd4_decode_bitmap(struct nfsd4_compoundargs *argp, u32 *bmval)
230 236
231 bmval[0] = 0; 237 bmval[0] = 0;
232 bmval[1] = 0; 238 bmval[1] = 0;
239 bmval[2] = 0;
233 240
234 READ_BUF(4); 241 READ_BUF(4);
235 READ32(bmlen); 242 READ32(bmlen);
@@ -241,13 +248,27 @@ nfsd4_decode_bitmap(struct nfsd4_compoundargs *argp, u32 *bmval)
241 READ32(bmval[0]); 248 READ32(bmval[0]);
242 if (bmlen > 1) 249 if (bmlen > 1)
243 READ32(bmval[1]); 250 READ32(bmval[1]);
251 if (bmlen > 2)
252 READ32(bmval[2]);
244 253
245 DECODE_TAIL; 254 DECODE_TAIL;
246} 255}
247 256
257static u32 nfsd_attrmask[] = {
258 NFSD_WRITEABLE_ATTRS_WORD0,
259 NFSD_WRITEABLE_ATTRS_WORD1,
260 NFSD_WRITEABLE_ATTRS_WORD2
261};
262
263static u32 nfsd41_ex_attrmask[] = {
264 NFSD_SUPPATTR_EXCLCREAT_WORD0,
265 NFSD_SUPPATTR_EXCLCREAT_WORD1,
266 NFSD_SUPPATTR_EXCLCREAT_WORD2
267};
268
248static __be32 269static __be32
249nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *iattr, 270nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, u32 *writable,
250 struct nfs4_acl **acl) 271 struct iattr *iattr, struct nfs4_acl **acl)
251{ 272{
252 int expected_len, len = 0; 273 int expected_len, len = 0;
253 u32 dummy32; 274 u32 dummy32;
@@ -263,9 +284,12 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *ia
263 * According to spec, unsupported attributes return ERR_ATTRNOTSUPP; 284 * According to spec, unsupported attributes return ERR_ATTRNOTSUPP;
264 * read-only attributes return ERR_INVAL. 285 * read-only attributes return ERR_INVAL.
265 */ 286 */
266 if ((bmval[0] & ~NFSD_SUPPORTED_ATTRS_WORD0) || (bmval[1] & ~NFSD_SUPPORTED_ATTRS_WORD1)) 287 if ((bmval[0] & ~nfsd_suppattrs0(argp->minorversion)) ||
288 (bmval[1] & ~nfsd_suppattrs1(argp->minorversion)) ||
289 (bmval[2] & ~nfsd_suppattrs2(argp->minorversion)))
267 return nfserr_attrnotsupp; 290 return nfserr_attrnotsupp;
268 if ((bmval[0] & ~NFSD_WRITEABLE_ATTRS_WORD0) || (bmval[1] & ~NFSD_WRITEABLE_ATTRS_WORD1)) 291 if ((bmval[0] & ~writable[0]) || (bmval[1] & ~writable[1]) ||
292 (bmval[2] & ~writable[2]))
269 return nfserr_inval; 293 return nfserr_inval;
270 294
271 READ_BUF(4); 295 READ_BUF(4);
@@ -400,6 +424,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *ia
400 goto xdr_error; 424 goto xdr_error;
401 } 425 }
402 } 426 }
427 BUG_ON(bmval[2]); /* no such writeable attr supported yet */
403 if (len != expected_len) 428 if (len != expected_len)
404 goto xdr_error; 429 goto xdr_error;
405 430
@@ -493,7 +518,9 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create
493 if ((status = check_filename(create->cr_name, create->cr_namelen, nfserr_inval))) 518 if ((status = check_filename(create->cr_name, create->cr_namelen, nfserr_inval)))
494 return status; 519 return status;
495 520
496 if ((status = nfsd4_decode_fattr(argp, create->cr_bmval, &create->cr_iattr, &create->cr_acl))) 521 status = nfsd4_decode_fattr(argp, create->cr_bmval, nfsd_attrmask,
522 &create->cr_iattr, &create->cr_acl);
523 if (status)
497 goto out; 524 goto out;
498 525
499 DECODE_TAIL; 526 DECODE_TAIL;
@@ -583,6 +610,8 @@ nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt)
583 READ_BUF(lockt->lt_owner.len); 610 READ_BUF(lockt->lt_owner.len);
584 READMEM(lockt->lt_owner.data, lockt->lt_owner.len); 611 READMEM(lockt->lt_owner.data, lockt->lt_owner.len);
585 612
613 if (argp->minorversion && !zero_clientid(&lockt->lt_clientid))
614 return nfserr_inval;
586 DECODE_TAIL; 615 DECODE_TAIL;
587} 616}
588 617
@@ -652,13 +681,26 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
652 switch (open->op_createmode) { 681 switch (open->op_createmode) {
653 case NFS4_CREATE_UNCHECKED: 682 case NFS4_CREATE_UNCHECKED:
654 case NFS4_CREATE_GUARDED: 683 case NFS4_CREATE_GUARDED:
655 if ((status = nfsd4_decode_fattr(argp, open->op_bmval, &open->op_iattr, &open->op_acl))) 684 status = nfsd4_decode_fattr(argp, open->op_bmval,
685 nfsd_attrmask, &open->op_iattr, &open->op_acl);
686 if (status)
656 goto out; 687 goto out;
657 break; 688 break;
658 case NFS4_CREATE_EXCLUSIVE: 689 case NFS4_CREATE_EXCLUSIVE:
659 READ_BUF(8); 690 READ_BUF(8);
660 COPYMEM(open->op_verf.data, 8); 691 COPYMEM(open->op_verf.data, 8);
661 break; 692 break;
693 case NFS4_CREATE_EXCLUSIVE4_1:
694 if (argp->minorversion < 1)
695 goto xdr_error;
696 READ_BUF(8);
697 COPYMEM(open->op_verf.data, 8);
698 status = nfsd4_decode_fattr(argp, open->op_bmval,
699 nfsd41_ex_attrmask, &open->op_iattr,
700 &open->op_acl);
701 if (status)
702 goto out;
703 break;
662 default: 704 default:
663 goto xdr_error; 705 goto xdr_error;
664 } 706 }
@@ -851,7 +893,7 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta
851 status = nfsd4_decode_stateid(argp, &setattr->sa_stateid); 893 status = nfsd4_decode_stateid(argp, &setattr->sa_stateid);
852 if (status) 894 if (status)
853 return status; 895 return status;
854 return nfsd4_decode_fattr(argp, setattr->sa_bmval, 896 return nfsd4_decode_fattr(argp, setattr->sa_bmval, nfsd_attrmask,
855 &setattr->sa_iattr, &setattr->sa_acl); 897 &setattr->sa_iattr, &setattr->sa_acl);
856} 898}
857 899
@@ -993,6 +1035,241 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel
993 READ_BUF(rlockowner->rl_owner.len); 1035 READ_BUF(rlockowner->rl_owner.len);
994 READMEM(rlockowner->rl_owner.data, rlockowner->rl_owner.len); 1036 READMEM(rlockowner->rl_owner.data, rlockowner->rl_owner.len);
995 1037
1038 if (argp->minorversion && !zero_clientid(&rlockowner->rl_clientid))
1039 return nfserr_inval;
1040 DECODE_TAIL;
1041}
1042
1043static __be32
1044nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp,
1045 struct nfsd4_exchange_id *exid)
1046{
1047 int dummy;
1048 DECODE_HEAD;
1049
1050 READ_BUF(NFS4_VERIFIER_SIZE);
1051 COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE);
1052
1053 READ_BUF(4);
1054 READ32(exid->clname.len);
1055
1056 READ_BUF(exid->clname.len);
1057 SAVEMEM(exid->clname.data, exid->clname.len);
1058
1059 READ_BUF(4);
1060 READ32(exid->flags);
1061
1062 /* Ignore state_protect4_a */
1063 READ_BUF(4);
1064 READ32(exid->spa_how);
1065 switch (exid->spa_how) {
1066 case SP4_NONE:
1067 break;
1068 case SP4_MACH_CRED:
1069 /* spo_must_enforce */
1070 READ_BUF(4);
1071 READ32(dummy);
1072 READ_BUF(dummy * 4);
1073 p += dummy;
1074
1075 /* spo_must_allow */
1076 READ_BUF(4);
1077 READ32(dummy);
1078 READ_BUF(dummy * 4);
1079 p += dummy;
1080 break;
1081 case SP4_SSV:
1082 /* ssp_ops */
1083 READ_BUF(4);
1084 READ32(dummy);
1085 READ_BUF(dummy * 4);
1086 p += dummy;
1087
1088 READ_BUF(4);
1089 READ32(dummy);
1090 READ_BUF(dummy * 4);
1091 p += dummy;
1092
1093 /* ssp_hash_algs<> */
1094 READ_BUF(4);
1095 READ32(dummy);
1096 READ_BUF(dummy);
1097 p += XDR_QUADLEN(dummy);
1098
1099 /* ssp_encr_algs<> */
1100 READ_BUF(4);
1101 READ32(dummy);
1102 READ_BUF(dummy);
1103 p += XDR_QUADLEN(dummy);
1104
1105 /* ssp_window and ssp_num_gss_handles */
1106 READ_BUF(8);
1107 READ32(dummy);
1108 READ32(dummy);
1109 break;
1110 default:
1111 goto xdr_error;
1112 }
1113
1114 /* Ignore Implementation ID */
1115 READ_BUF(4); /* nfs_impl_id4 array length */
1116 READ32(dummy);
1117
1118 if (dummy > 1)
1119 goto xdr_error;
1120
1121 if (dummy == 1) {
1122 /* nii_domain */
1123 READ_BUF(4);
1124 READ32(dummy);
1125 READ_BUF(dummy);
1126 p += XDR_QUADLEN(dummy);
1127
1128 /* nii_name */
1129 READ_BUF(4);
1130 READ32(dummy);
1131 READ_BUF(dummy);
1132 p += XDR_QUADLEN(dummy);
1133
1134 /* nii_date */
1135 READ_BUF(12);
1136 p += 3;
1137 }
1138 DECODE_TAIL;
1139}
1140
1141static __be32
1142nfsd4_decode_create_session(struct nfsd4_compoundargs *argp,
1143 struct nfsd4_create_session *sess)
1144{
1145 DECODE_HEAD;
1146
1147 u32 dummy;
1148 char *machine_name;
1149 int i;
1150 int nr_secflavs;
1151
1152 READ_BUF(16);
1153 COPYMEM(&sess->clientid, 8);
1154 READ32(sess->seqid);
1155 READ32(sess->flags);
1156
1157 /* Fore channel attrs */
1158 READ_BUF(28);
1159 READ32(dummy); /* headerpadsz is always 0 */
1160 READ32(sess->fore_channel.maxreq_sz);
1161 READ32(sess->fore_channel.maxresp_sz);
1162 READ32(sess->fore_channel.maxresp_cached);
1163 READ32(sess->fore_channel.maxops);
1164 READ32(sess->fore_channel.maxreqs);
1165 READ32(sess->fore_channel.nr_rdma_attrs);
1166 if (sess->fore_channel.nr_rdma_attrs == 1) {
1167 READ_BUF(4);
1168 READ32(sess->fore_channel.rdma_attrs);
1169 } else if (sess->fore_channel.nr_rdma_attrs > 1) {
1170 dprintk("Too many fore channel attr bitmaps!\n");
1171 goto xdr_error;
1172 }
1173
1174 /* Back channel attrs */
1175 READ_BUF(28);
1176 READ32(dummy); /* headerpadsz is always 0 */
1177 READ32(sess->back_channel.maxreq_sz);
1178 READ32(sess->back_channel.maxresp_sz);
1179 READ32(sess->back_channel.maxresp_cached);
1180 READ32(sess->back_channel.maxops);
1181 READ32(sess->back_channel.maxreqs);
1182 READ32(sess->back_channel.nr_rdma_attrs);
1183 if (sess->back_channel.nr_rdma_attrs == 1) {
1184 READ_BUF(4);
1185 READ32(sess->back_channel.rdma_attrs);
1186 } else if (sess->back_channel.nr_rdma_attrs > 1) {
1187 dprintk("Too many back channel attr bitmaps!\n");
1188 goto xdr_error;
1189 }
1190
1191 READ_BUF(8);
1192 READ32(sess->callback_prog);
1193
1194 /* callback_sec_params4 */
1195 READ32(nr_secflavs);
1196 for (i = 0; i < nr_secflavs; ++i) {
1197 READ_BUF(4);
1198 READ32(dummy);
1199 switch (dummy) {
1200 case RPC_AUTH_NULL:
1201 /* Nothing to read */
1202 break;
1203 case RPC_AUTH_UNIX:
1204 READ_BUF(8);
1205 /* stamp */
1206 READ32(dummy);
1207
1208 /* machine name */
1209 READ32(dummy);
1210 READ_BUF(dummy);
1211 SAVEMEM(machine_name, dummy);
1212
1213 /* uid, gid */
1214 READ_BUF(8);
1215 READ32(sess->uid);
1216 READ32(sess->gid);
1217
1218 /* more gids */
1219 READ_BUF(4);
1220 READ32(dummy);
1221 READ_BUF(dummy * 4);
1222 for (i = 0; i < dummy; ++i)
1223 READ32(dummy);
1224 break;
1225 case RPC_AUTH_GSS:
1226 dprintk("RPC_AUTH_GSS callback secflavor "
1227 "not supported!\n");
1228 READ_BUF(8);
1229 /* gcbp_service */
1230 READ32(dummy);
1231 /* gcbp_handle_from_server */
1232 READ32(dummy);
1233 READ_BUF(dummy);
1234 p += XDR_QUADLEN(dummy);
1235 /* gcbp_handle_from_client */
1236 READ_BUF(4);
1237 READ32(dummy);
1238 READ_BUF(dummy);
1239 p += XDR_QUADLEN(dummy);
1240 break;
1241 default:
1242 dprintk("Illegal callback secflavor\n");
1243 return nfserr_inval;
1244 }
1245 }
1246 DECODE_TAIL;
1247}
1248
1249static __be32
1250nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp,
1251 struct nfsd4_destroy_session *destroy_session)
1252{
1253 DECODE_HEAD;
1254 READ_BUF(NFS4_MAX_SESSIONID_LEN);
1255 COPYMEM(destroy_session->sessionid.data, NFS4_MAX_SESSIONID_LEN);
1256
1257 DECODE_TAIL;
1258}
1259
1260static __be32
1261nfsd4_decode_sequence(struct nfsd4_compoundargs *argp,
1262 struct nfsd4_sequence *seq)
1263{
1264 DECODE_HEAD;
1265
1266 READ_BUF(NFS4_MAX_SESSIONID_LEN + 16);
1267 COPYMEM(seq->sessionid.data, NFS4_MAX_SESSIONID_LEN);
1268 READ32(seq->seqid);
1269 READ32(seq->slotid);
1270 READ32(seq->maxslots);
1271 READ32(seq->cachethis);
1272
996 DECODE_TAIL; 1273 DECODE_TAIL;
997} 1274}
998 1275
@@ -1005,7 +1282,7 @@ nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p)
1005static __be32 1282static __be32
1006nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) 1283nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
1007{ 1284{
1008 return nfserr_opnotsupp; 1285 return nfserr_notsupp;
1009} 1286}
1010 1287
1011typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *); 1288typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *);
@@ -1031,7 +1308,7 @@ static nfsd4_dec nfsd4_dec_ops[] = {
1031 [OP_OPEN_CONFIRM] = (nfsd4_dec)nfsd4_decode_open_confirm, 1308 [OP_OPEN_CONFIRM] = (nfsd4_dec)nfsd4_decode_open_confirm,
1032 [OP_OPEN_DOWNGRADE] = (nfsd4_dec)nfsd4_decode_open_downgrade, 1309 [OP_OPEN_DOWNGRADE] = (nfsd4_dec)nfsd4_decode_open_downgrade,
1033 [OP_PUTFH] = (nfsd4_dec)nfsd4_decode_putfh, 1310 [OP_PUTFH] = (nfsd4_dec)nfsd4_decode_putfh,
1034 [OP_PUTPUBFH] = (nfsd4_dec)nfsd4_decode_notsupp, 1311 [OP_PUTPUBFH] = (nfsd4_dec)nfsd4_decode_noop,
1035 [OP_PUTROOTFH] = (nfsd4_dec)nfsd4_decode_noop, 1312 [OP_PUTROOTFH] = (nfsd4_dec)nfsd4_decode_noop,
1036 [OP_READ] = (nfsd4_dec)nfsd4_decode_read, 1313 [OP_READ] = (nfsd4_dec)nfsd4_decode_read,
1037 [OP_READDIR] = (nfsd4_dec)nfsd4_decode_readdir, 1314 [OP_READDIR] = (nfsd4_dec)nfsd4_decode_readdir,
@@ -1050,6 +1327,67 @@ static nfsd4_dec nfsd4_dec_ops[] = {
1050 [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner, 1327 [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner,
1051}; 1328};
1052 1329
1330static nfsd4_dec nfsd41_dec_ops[] = {
1331 [OP_ACCESS] (nfsd4_dec)nfsd4_decode_access,
1332 [OP_CLOSE] (nfsd4_dec)nfsd4_decode_close,
1333 [OP_COMMIT] (nfsd4_dec)nfsd4_decode_commit,
1334 [OP_CREATE] (nfsd4_dec)nfsd4_decode_create,
1335 [OP_DELEGPURGE] (nfsd4_dec)nfsd4_decode_notsupp,
1336 [OP_DELEGRETURN] (nfsd4_dec)nfsd4_decode_delegreturn,
1337 [OP_GETATTR] (nfsd4_dec)nfsd4_decode_getattr,
1338 [OP_GETFH] (nfsd4_dec)nfsd4_decode_noop,
1339 [OP_LINK] (nfsd4_dec)nfsd4_decode_link,
1340 [OP_LOCK] (nfsd4_dec)nfsd4_decode_lock,
1341 [OP_LOCKT] (nfsd4_dec)nfsd4_decode_lockt,
1342 [OP_LOCKU] (nfsd4_dec)nfsd4_decode_locku,
1343 [OP_LOOKUP] (nfsd4_dec)nfsd4_decode_lookup,
1344 [OP_LOOKUPP] (nfsd4_dec)nfsd4_decode_noop,
1345 [OP_NVERIFY] (nfsd4_dec)nfsd4_decode_verify,
1346 [OP_OPEN] (nfsd4_dec)nfsd4_decode_open,
1347 [OP_OPENATTR] (nfsd4_dec)nfsd4_decode_notsupp,
1348 [OP_OPEN_CONFIRM] (nfsd4_dec)nfsd4_decode_notsupp,
1349 [OP_OPEN_DOWNGRADE] (nfsd4_dec)nfsd4_decode_open_downgrade,
1350 [OP_PUTFH] (nfsd4_dec)nfsd4_decode_putfh,
1351 [OP_PUTPUBFH] (nfsd4_dec)nfsd4_decode_notsupp,
1352 [OP_PUTROOTFH] (nfsd4_dec)nfsd4_decode_noop,
1353 [OP_READ] (nfsd4_dec)nfsd4_decode_read,
1354 [OP_READDIR] (nfsd4_dec)nfsd4_decode_readdir,
1355 [OP_READLINK] (nfsd4_dec)nfsd4_decode_noop,
1356 [OP_REMOVE] (nfsd4_dec)nfsd4_decode_remove,
1357 [OP_RENAME] (nfsd4_dec)nfsd4_decode_rename,
1358 [OP_RENEW] (nfsd4_dec)nfsd4_decode_notsupp,
1359 [OP_RESTOREFH] (nfsd4_dec)nfsd4_decode_noop,
1360 [OP_SAVEFH] (nfsd4_dec)nfsd4_decode_noop,
1361 [OP_SECINFO] (nfsd4_dec)nfsd4_decode_secinfo,
1362 [OP_SETATTR] (nfsd4_dec)nfsd4_decode_setattr,
1363 [OP_SETCLIENTID] (nfsd4_dec)nfsd4_decode_notsupp,
1364 [OP_SETCLIENTID_CONFIRM](nfsd4_dec)nfsd4_decode_notsupp,
1365 [OP_VERIFY] (nfsd4_dec)nfsd4_decode_verify,
1366 [OP_WRITE] (nfsd4_dec)nfsd4_decode_write,
1367 [OP_RELEASE_LOCKOWNER] (nfsd4_dec)nfsd4_decode_notsupp,
1368
1369 /* new operations for NFSv4.1 */
1370 [OP_BACKCHANNEL_CTL] (nfsd4_dec)nfsd4_decode_notsupp,
1371 [OP_BIND_CONN_TO_SESSION](nfsd4_dec)nfsd4_decode_notsupp,
1372 [OP_EXCHANGE_ID] (nfsd4_dec)nfsd4_decode_exchange_id,
1373 [OP_CREATE_SESSION] (nfsd4_dec)nfsd4_decode_create_session,
1374 [OP_DESTROY_SESSION] (nfsd4_dec)nfsd4_decode_destroy_session,
1375 [OP_FREE_STATEID] (nfsd4_dec)nfsd4_decode_notsupp,
1376 [OP_GET_DIR_DELEGATION] (nfsd4_dec)nfsd4_decode_notsupp,
1377 [OP_GETDEVICEINFO] (nfsd4_dec)nfsd4_decode_notsupp,
1378 [OP_GETDEVICELIST] (nfsd4_dec)nfsd4_decode_notsupp,
1379 [OP_LAYOUTCOMMIT] (nfsd4_dec)nfsd4_decode_notsupp,
1380 [OP_LAYOUTGET] (nfsd4_dec)nfsd4_decode_notsupp,
1381 [OP_LAYOUTRETURN] (nfsd4_dec)nfsd4_decode_notsupp,
1382 [OP_SECINFO_NO_NAME] (nfsd4_dec)nfsd4_decode_notsupp,
1383 [OP_SEQUENCE] (nfsd4_dec)nfsd4_decode_sequence,
1384 [OP_SET_SSV] (nfsd4_dec)nfsd4_decode_notsupp,
1385 [OP_TEST_STATEID] (nfsd4_dec)nfsd4_decode_notsupp,
1386 [OP_WANT_DELEGATION] (nfsd4_dec)nfsd4_decode_notsupp,
1387 [OP_DESTROY_CLIENTID] (nfsd4_dec)nfsd4_decode_notsupp,
1388 [OP_RECLAIM_COMPLETE] (nfsd4_dec)nfsd4_decode_notsupp,
1389};
1390
1053struct nfsd4_minorversion_ops { 1391struct nfsd4_minorversion_ops {
1054 nfsd4_dec *decoders; 1392 nfsd4_dec *decoders;
1055 int nops; 1393 int nops;
@@ -1057,6 +1395,7 @@ struct nfsd4_minorversion_ops {
1057 1395
1058static struct nfsd4_minorversion_ops nfsd4_minorversion[] = { 1396static struct nfsd4_minorversion_ops nfsd4_minorversion[] = {
1059 [0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) }, 1397 [0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) },
1398 [1] = { nfsd41_dec_ops, ARRAY_SIZE(nfsd41_dec_ops) },
1060}; 1399};
1061 1400
1062static __be32 1401static __be32
@@ -1412,6 +1751,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
1412{ 1751{
1413 u32 bmval0 = bmval[0]; 1752 u32 bmval0 = bmval[0];
1414 u32 bmval1 = bmval[1]; 1753 u32 bmval1 = bmval[1];
1754 u32 bmval2 = bmval[2];
1415 struct kstat stat; 1755 struct kstat stat;
1416 struct svc_fh tempfh; 1756 struct svc_fh tempfh;
1417 struct kstatfs statfs; 1757 struct kstatfs statfs;
@@ -1425,12 +1765,16 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
1425 int err; 1765 int err;
1426 int aclsupport = 0; 1766 int aclsupport = 0;
1427 struct nfs4_acl *acl = NULL; 1767 struct nfs4_acl *acl = NULL;
1768 struct nfsd4_compoundres *resp = rqstp->rq_resp;
1769 u32 minorversion = resp->cstate.minorversion;
1428 1770
1429 BUG_ON(bmval1 & NFSD_WRITEONLY_ATTRS_WORD1); 1771 BUG_ON(bmval1 & NFSD_WRITEONLY_ATTRS_WORD1);
1430 BUG_ON(bmval0 & ~NFSD_SUPPORTED_ATTRS_WORD0); 1772 BUG_ON(bmval0 & ~nfsd_suppattrs0(minorversion));
1431 BUG_ON(bmval1 & ~NFSD_SUPPORTED_ATTRS_WORD1); 1773 BUG_ON(bmval1 & ~nfsd_suppattrs1(minorversion));
1774 BUG_ON(bmval2 & ~nfsd_suppattrs2(minorversion));
1432 1775
1433 if (exp->ex_fslocs.migrated) { 1776 if (exp->ex_fslocs.migrated) {
1777 BUG_ON(bmval[2]);
1434 status = fattr_handle_absent_fs(&bmval0, &bmval1, &rdattr_err); 1778 status = fattr_handle_absent_fs(&bmval0, &bmval1, &rdattr_err);
1435 if (status) 1779 if (status)
1436 goto out; 1780 goto out;
@@ -1476,22 +1820,42 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
1476 if ((buflen -= 16) < 0) 1820 if ((buflen -= 16) < 0)
1477 goto out_resource; 1821 goto out_resource;
1478 1822
1479 WRITE32(2); 1823 if (unlikely(bmval2)) {
1480 WRITE32(bmval0); 1824 WRITE32(3);
1481 WRITE32(bmval1); 1825 WRITE32(bmval0);
1826 WRITE32(bmval1);
1827 WRITE32(bmval2);
1828 } else if (likely(bmval1)) {
1829 WRITE32(2);
1830 WRITE32(bmval0);
1831 WRITE32(bmval1);
1832 } else {
1833 WRITE32(1);
1834 WRITE32(bmval0);
1835 }
1482 attrlenp = p++; /* to be backfilled later */ 1836 attrlenp = p++; /* to be backfilled later */
1483 1837
1484 if (bmval0 & FATTR4_WORD0_SUPPORTED_ATTRS) { 1838 if (bmval0 & FATTR4_WORD0_SUPPORTED_ATTRS) {
1485 u32 word0 = NFSD_SUPPORTED_ATTRS_WORD0; 1839 u32 word0 = nfsd_suppattrs0(minorversion);
1840 u32 word1 = nfsd_suppattrs1(minorversion);
1841 u32 word2 = nfsd_suppattrs2(minorversion);
1842
1486 if ((buflen -= 12) < 0) 1843 if ((buflen -= 12) < 0)
1487 goto out_resource; 1844 goto out_resource;
1488 if (!aclsupport) 1845 if (!aclsupport)
1489 word0 &= ~FATTR4_WORD0_ACL; 1846 word0 &= ~FATTR4_WORD0_ACL;
1490 if (!exp->ex_fslocs.locations) 1847 if (!exp->ex_fslocs.locations)
1491 word0 &= ~FATTR4_WORD0_FS_LOCATIONS; 1848 word0 &= ~FATTR4_WORD0_FS_LOCATIONS;
1492 WRITE32(2); 1849 if (!word2) {
1493 WRITE32(word0); 1850 WRITE32(2);
1494 WRITE32(NFSD_SUPPORTED_ATTRS_WORD1); 1851 WRITE32(word0);
1852 WRITE32(word1);
1853 } else {
1854 WRITE32(3);
1855 WRITE32(word0);
1856 WRITE32(word1);
1857 WRITE32(word2);
1858 }
1495 } 1859 }
1496 if (bmval0 & FATTR4_WORD0_TYPE) { 1860 if (bmval0 & FATTR4_WORD0_TYPE) {
1497 if ((buflen -= 4) < 0) 1861 if ((buflen -= 4) < 0)
@@ -1801,6 +2165,13 @@ out_acl:
1801 } 2165 }
1802 WRITE64(stat.ino); 2166 WRITE64(stat.ino);
1803 } 2167 }
2168 if (bmval2 & FATTR4_WORD2_SUPPATTR_EXCLCREAT) {
2169 WRITE32(3);
2170 WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD0);
2171 WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD1);
2172 WRITE32(NFSD_SUPPATTR_EXCLCREAT_WORD2);
2173 }
2174
1804 *attrlenp = htonl((char *)p - (char *)attrlenp - 4); 2175 *attrlenp = htonl((char *)p - (char *)attrlenp - 4);
1805 *countp = p - buffer; 2176 *countp = p - buffer;
1806 status = nfs_ok; 2177 status = nfs_ok;
@@ -2572,6 +2943,143 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w
2572} 2943}
2573 2944
2574static __be32 2945static __be32
2946nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr,
2947 struct nfsd4_exchange_id *exid)
2948{
2949 ENCODE_HEAD;
2950 char *major_id;
2951 char *server_scope;
2952 int major_id_sz;
2953 int server_scope_sz;
2954 uint64_t minor_id = 0;
2955
2956 if (nfserr)
2957 return nfserr;
2958
2959 major_id = utsname()->nodename;
2960 major_id_sz = strlen(major_id);
2961 server_scope = utsname()->nodename;
2962 server_scope_sz = strlen(server_scope);
2963
2964 RESERVE_SPACE(
2965 8 /* eir_clientid */ +
2966 4 /* eir_sequenceid */ +
2967 4 /* eir_flags */ +
2968 4 /* spr_how (SP4_NONE) */ +
2969 8 /* so_minor_id */ +
2970 4 /* so_major_id.len */ +
2971 (XDR_QUADLEN(major_id_sz) * 4) +
2972 4 /* eir_server_scope.len */ +
2973 (XDR_QUADLEN(server_scope_sz) * 4) +
2974 4 /* eir_server_impl_id.count (0) */);
2975
2976 WRITEMEM(&exid->clientid, 8);
2977 WRITE32(exid->seqid);
2978 WRITE32(exid->flags);
2979
2980 /* state_protect4_r. Currently only support SP4_NONE */
2981 BUG_ON(exid->spa_how != SP4_NONE);
2982 WRITE32(exid->spa_how);
2983
2984 /* The server_owner struct */
2985 WRITE64(minor_id); /* Minor id */
2986 /* major id */
2987 WRITE32(major_id_sz);
2988 WRITEMEM(major_id, major_id_sz);
2989
2990 /* Server scope */
2991 WRITE32(server_scope_sz);
2992 WRITEMEM(server_scope, server_scope_sz);
2993
2994 /* Implementation id */
2995 WRITE32(0); /* zero length nfs_impl_id4 array */
2996 ADJUST_ARGS();
2997 return 0;
2998}
2999
3000static __be32
3001nfsd4_encode_create_session(struct nfsd4_compoundres *resp, int nfserr,
3002 struct nfsd4_create_session *sess)
3003{
3004 ENCODE_HEAD;
3005
3006 if (nfserr)
3007 return nfserr;
3008
3009 RESERVE_SPACE(24);
3010 WRITEMEM(sess->sessionid.data, NFS4_MAX_SESSIONID_LEN);
3011 WRITE32(sess->seqid);
3012 WRITE32(sess->flags);
3013 ADJUST_ARGS();
3014
3015 RESERVE_SPACE(28);
3016 WRITE32(0); /* headerpadsz */
3017 WRITE32(sess->fore_channel.maxreq_sz);
3018 WRITE32(sess->fore_channel.maxresp_sz);
3019 WRITE32(sess->fore_channel.maxresp_cached);
3020 WRITE32(sess->fore_channel.maxops);
3021 WRITE32(sess->fore_channel.maxreqs);
3022 WRITE32(sess->fore_channel.nr_rdma_attrs);
3023 ADJUST_ARGS();
3024
3025 if (sess->fore_channel.nr_rdma_attrs) {
3026 RESERVE_SPACE(4);
3027 WRITE32(sess->fore_channel.rdma_attrs);
3028 ADJUST_ARGS();
3029 }
3030
3031 RESERVE_SPACE(28);
3032 WRITE32(0); /* headerpadsz */
3033 WRITE32(sess->back_channel.maxreq_sz);
3034 WRITE32(sess->back_channel.maxresp_sz);
3035 WRITE32(sess->back_channel.maxresp_cached);
3036 WRITE32(sess->back_channel.maxops);
3037 WRITE32(sess->back_channel.maxreqs);
3038 WRITE32(sess->back_channel.nr_rdma_attrs);
3039 ADJUST_ARGS();
3040
3041 if (sess->back_channel.nr_rdma_attrs) {
3042 RESERVE_SPACE(4);
3043 WRITE32(sess->back_channel.rdma_attrs);
3044 ADJUST_ARGS();
3045 }
3046 return 0;
3047}
3048
3049static __be32
3050nfsd4_encode_destroy_session(struct nfsd4_compoundres *resp, int nfserr,
3051 struct nfsd4_destroy_session *destroy_session)
3052{
3053 return nfserr;
3054}
3055
3056__be32
3057nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr,
3058 struct nfsd4_sequence *seq)
3059{
3060 ENCODE_HEAD;
3061
3062 if (nfserr)
3063 return nfserr;
3064
3065 RESERVE_SPACE(NFS4_MAX_SESSIONID_LEN + 20);
3066 WRITEMEM(seq->sessionid.data, NFS4_MAX_SESSIONID_LEN);
3067 WRITE32(seq->seqid);
3068 WRITE32(seq->slotid);
3069 WRITE32(seq->maxslots);
3070 /*
3071 * FIXME: for now:
3072 * target_maxslots = maxslots
3073 * status_flags = 0
3074 */
3075 WRITE32(seq->maxslots);
3076 WRITE32(0);
3077
3078 ADJUST_ARGS();
3079 return 0;
3080}
3081
3082static __be32
2575nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) 3083nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p)
2576{ 3084{
2577 return nfserr; 3085 return nfserr;
@@ -2579,6 +3087,11 @@ nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p)
2579 3087
2580typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); 3088typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *);
2581 3089
3090/*
3091 * Note: nfsd4_enc_ops vector is shared for v4.0 and v4.1
3092 * since we don't need to filter out obsolete ops as this is
3093 * done in the decoding phase.
3094 */
2582static nfsd4_enc nfsd4_enc_ops[] = { 3095static nfsd4_enc nfsd4_enc_ops[] = {
2583 [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access, 3096 [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access,
2584 [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close, 3097 [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close,
@@ -2617,8 +3130,77 @@ static nfsd4_enc nfsd4_enc_ops[] = {
2617 [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop, 3130 [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop,
2618 [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write, 3131 [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write,
2619 [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop, 3132 [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop,
3133
3134 /* NFSv4.1 operations */
3135 [OP_BACKCHANNEL_CTL] = (nfsd4_enc)nfsd4_encode_noop,
3136 [OP_BIND_CONN_TO_SESSION] = (nfsd4_enc)nfsd4_encode_noop,
3137 [OP_EXCHANGE_ID] = (nfsd4_enc)nfsd4_encode_exchange_id,
3138 [OP_CREATE_SESSION] = (nfsd4_enc)nfsd4_encode_create_session,
3139 [OP_DESTROY_SESSION] = (nfsd4_enc)nfsd4_encode_destroy_session,
3140 [OP_FREE_STATEID] = (nfsd4_enc)nfsd4_encode_noop,
3141 [OP_GET_DIR_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop,
3142 [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_noop,
3143 [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop,
3144 [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop,
3145 [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop,
3146 [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop,
3147 [OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_noop,
3148 [OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence,
3149 [OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop,
3150 [OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_noop,
3151 [OP_WANT_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop,
3152 [OP_DESTROY_CLIENTID] = (nfsd4_enc)nfsd4_encode_noop,
3153 [OP_RECLAIM_COMPLETE] = (nfsd4_enc)nfsd4_encode_noop,
2620}; 3154};
2621 3155
3156/*
3157 * Calculate the total amount of memory that the compound response has taken
3158 * after encoding the current operation.
3159 *
3160 * pad: add on 8 bytes for the next operation's op_code and status so that
3161 * there is room to cache a failure on the next operation.
3162 *
3163 * Compare this length to the session se_fmaxresp_cached.
3164 *
3165 * Our se_fmaxresp_cached will always be a multiple of PAGE_SIZE, and so
3166 * will be at least a page and will therefore hold the xdr_buf head.
3167 */
3168static int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp)
3169{
3170 int status = 0;
3171 struct xdr_buf *xb = &resp->rqstp->rq_res;
3172 struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
3173 struct nfsd4_session *session = NULL;
3174 struct nfsd4_slot *slot = resp->cstate.slot;
3175 u32 length, tlen = 0, pad = 8;
3176
3177 if (!nfsd4_has_session(&resp->cstate))
3178 return status;
3179
3180 session = resp->cstate.session;
3181 if (session == NULL || slot->sl_cache_entry.ce_cachethis == 0)
3182 return status;
3183
3184 if (resp->opcnt >= args->opcnt)
3185 pad = 0; /* this is the last operation */
3186
3187 if (xb->page_len == 0) {
3188 length = (char *)resp->p - (char *)xb->head[0].iov_base + pad;
3189 } else {
3190 if (xb->tail[0].iov_base && xb->tail[0].iov_len > 0)
3191 tlen = (char *)resp->p - (char *)xb->tail[0].iov_base;
3192
3193 length = xb->head[0].iov_len + xb->page_len + tlen + pad;
3194 }
3195 dprintk("%s length %u, xb->page_len %u tlen %u pad %u\n", __func__,
3196 length, xb->page_len, tlen, pad);
3197
3198 if (length <= session->se_fmaxresp_cached)
3199 return status;
3200 else
3201 return nfserr_rep_too_big_to_cache;
3202}
3203
2622void 3204void
2623nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op) 3205nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
2624{ 3206{
@@ -2635,6 +3217,9 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
2635 BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) || 3217 BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) ||
2636 !nfsd4_enc_ops[op->opnum]); 3218 !nfsd4_enc_ops[op->opnum]);
2637 op->status = nfsd4_enc_ops[op->opnum](resp, op->status, &op->u); 3219 op->status = nfsd4_enc_ops[op->opnum](resp, op->status, &op->u);
3220 /* nfsd4_check_drc_limit guarantees enough room for error status */
3221 if (!op->status && nfsd4_check_drc_limit(resp))
3222 op->status = nfserr_rep_too_big_to_cache;
2638status: 3223status:
2639 /* 3224 /*
2640 * Note: We write the status directly, instead of using WRITE32(), 3225 * Note: We write the status directly, instead of using WRITE32(),
@@ -2735,6 +3320,18 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
2735 iov = &rqstp->rq_res.head[0]; 3320 iov = &rqstp->rq_res.head[0];
2736 iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base; 3321 iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base;
2737 BUG_ON(iov->iov_len > PAGE_SIZE); 3322 BUG_ON(iov->iov_len > PAGE_SIZE);
3323 if (nfsd4_has_session(&resp->cstate)) {
3324 if (resp->cstate.status == nfserr_replay_cache &&
3325 !nfsd4_not_cached(resp)) {
3326 iov->iov_len = resp->cstate.iovlen;
3327 } else {
3328 nfsd4_store_cache_entry(resp);
3329 dprintk("%s: SET SLOT STATE TO AVAILABLE\n", __func__);
3330 resp->cstate.slot->sl_inuse = 0;
3331 }
3332 if (resp->cstate.session)
3333 nfsd4_put_session(resp->cstate.session);
3334 }
2738 return 1; 3335 return 1;
2739} 3336}
2740 3337
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index a4ed8644d69c..af16849d243a 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -60,6 +60,7 @@ enum {
60 NFSD_FO_UnlockFS, 60 NFSD_FO_UnlockFS,
61 NFSD_Threads, 61 NFSD_Threads,
62 NFSD_Pool_Threads, 62 NFSD_Pool_Threads,
63 NFSD_Pool_Stats,
63 NFSD_Versions, 64 NFSD_Versions,
64 NFSD_Ports, 65 NFSD_Ports,
65 NFSD_MaxBlkSize, 66 NFSD_MaxBlkSize,
@@ -172,6 +173,16 @@ static const struct file_operations exports_operations = {
172 .owner = THIS_MODULE, 173 .owner = THIS_MODULE,
173}; 174};
174 175
176extern int nfsd_pool_stats_open(struct inode *inode, struct file *file);
177
178static struct file_operations pool_stats_operations = {
179 .open = nfsd_pool_stats_open,
180 .read = seq_read,
181 .llseek = seq_lseek,
182 .release = seq_release,
183 .owner = THIS_MODULE,
184};
185
175/*----------------------------------------------------------------------------*/ 186/*----------------------------------------------------------------------------*/
176/* 187/*
177 * payload - write methods 188 * payload - write methods
@@ -781,8 +792,9 @@ out_free:
781static ssize_t __write_versions(struct file *file, char *buf, size_t size) 792static ssize_t __write_versions(struct file *file, char *buf, size_t size)
782{ 793{
783 char *mesg = buf; 794 char *mesg = buf;
784 char *vers, sign; 795 char *vers, *minorp, sign;
785 int len, num; 796 int len, num;
797 unsigned minor;
786 ssize_t tlen = 0; 798 ssize_t tlen = 0;
787 char *sep; 799 char *sep;
788 800
@@ -803,9 +815,20 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
803 do { 815 do {
804 sign = *vers; 816 sign = *vers;
805 if (sign == '+' || sign == '-') 817 if (sign == '+' || sign == '-')
806 num = simple_strtol((vers+1), NULL, 0); 818 num = simple_strtol((vers+1), &minorp, 0);
807 else 819 else
808 num = simple_strtol(vers, NULL, 0); 820 num = simple_strtol(vers, &minorp, 0);
821 if (*minorp == '.') {
822 if (num < 4)
823 return -EINVAL;
824 minor = simple_strtoul(minorp+1, NULL, 0);
825 if (minor == 0)
826 return -EINVAL;
827 if (nfsd_minorversion(minor, sign == '-' ?
828 NFSD_CLEAR : NFSD_SET) < 0)
829 return -EINVAL;
830 goto next;
831 }
809 switch(num) { 832 switch(num) {
810 case 2: 833 case 2:
811 case 3: 834 case 3:
@@ -815,6 +838,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
815 default: 838 default:
816 return -EINVAL; 839 return -EINVAL;
817 } 840 }
841 next:
818 vers += len + 1; 842 vers += len + 1;
819 tlen += len; 843 tlen += len;
820 } while ((len = qword_get(&mesg, vers, size)) > 0); 844 } while ((len = qword_get(&mesg, vers, size)) > 0);
@@ -833,6 +857,13 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
833 num); 857 num);
834 sep = " "; 858 sep = " ";
835 } 859 }
860 if (nfsd_vers(4, NFSD_AVAIL))
861 for (minor = 1; minor <= NFSD_SUPPORTED_MINOR_VERSION; minor++)
862 len += sprintf(buf+len, " %c4.%u",
863 (nfsd_vers(4, NFSD_TEST) &&
864 nfsd_minorversion(minor, NFSD_TEST)) ?
865 '+' : '-',
866 minor);
836 len += sprintf(buf+len, "\n"); 867 len += sprintf(buf+len, "\n");
837 return len; 868 return len;
838} 869}
@@ -1248,6 +1279,7 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
1248 [NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR}, 1279 [NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR},
1249 [NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR}, 1280 [NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR},
1250 [NFSD_Pool_Threads] = {"pool_threads", &transaction_ops, S_IWUSR|S_IRUSR}, 1281 [NFSD_Pool_Threads] = {"pool_threads", &transaction_ops, S_IWUSR|S_IRUSR},
1282 [NFSD_Pool_Stats] = {"pool_stats", &pool_stats_operations, S_IRUGO},
1251 [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR}, 1283 [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR},
1252 [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO}, 1284 [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO},
1253 [NFSD_MaxBlkSize] = {"max_block_size", &transaction_ops, S_IWUSR|S_IRUGO}, 1285 [NFSD_MaxBlkSize] = {"max_block_size", &transaction_ops, S_IWUSR|S_IRUGO},
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
index 6f7f26351227..e298e260b5f1 100644
--- a/fs/nfsd/nfsproc.c
+++ b/fs/nfsd/nfsproc.c
@@ -180,6 +180,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp,
180{ 180{
181 __be32 nfserr; 181 __be32 nfserr;
182 int stable = 1; 182 int stable = 1;
183 unsigned long cnt = argp->len;
183 184
184 dprintk("nfsd: WRITE %s %d bytes at %d\n", 185 dprintk("nfsd: WRITE %s %d bytes at %d\n",
185 SVCFH_fmt(&argp->fh), 186 SVCFH_fmt(&argp->fh),
@@ -188,7 +189,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp,
188 nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL, 189 nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL,
189 argp->offset, 190 argp->offset,
190 rqstp->rq_vec, argp->vlen, 191 rqstp->rq_vec, argp->vlen,
191 argp->len, 192 &cnt,
192 &stable); 193 &stable);
193 return nfsd_return_attrs(nfserr, resp); 194 return nfsd_return_attrs(nfserr, resp);
194} 195}
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 7c09852be713..cbba4a935786 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -22,6 +22,7 @@
22#include <linux/freezer.h> 22#include <linux/freezer.h>
23#include <linux/fs_struct.h> 23#include <linux/fs_struct.h>
24#include <linux/kthread.h> 24#include <linux/kthread.h>
25#include <linux/swap.h>
25 26
26#include <linux/sunrpc/types.h> 27#include <linux/sunrpc/types.h>
27#include <linux/sunrpc/stats.h> 28#include <linux/sunrpc/stats.h>
@@ -40,9 +41,6 @@
40extern struct svc_program nfsd_program; 41extern struct svc_program nfsd_program;
41static int nfsd(void *vrqstp); 42static int nfsd(void *vrqstp);
42struct timeval nfssvc_boot; 43struct timeval nfssvc_boot;
43static atomic_t nfsd_busy;
44static unsigned long nfsd_last_call;
45static DEFINE_SPINLOCK(nfsd_call_lock);
46 44
47/* 45/*
48 * nfsd_mutex protects nfsd_serv -- both the pointer itself and the members 46 * nfsd_mutex protects nfsd_serv -- both the pointer itself and the members
@@ -123,6 +121,8 @@ struct svc_program nfsd_program = {
123 121
124}; 122};
125 123
124u32 nfsd_supported_minorversion;
125
126int nfsd_vers(int vers, enum vers_op change) 126int nfsd_vers(int vers, enum vers_op change)
127{ 127{
128 if (vers < NFSD_MINVERS || vers >= NFSD_NRVERS) 128 if (vers < NFSD_MINVERS || vers >= NFSD_NRVERS)
@@ -149,6 +149,28 @@ int nfsd_vers(int vers, enum vers_op change)
149 } 149 }
150 return 0; 150 return 0;
151} 151}
152
153int nfsd_minorversion(u32 minorversion, enum vers_op change)
154{
155 if (minorversion > NFSD_SUPPORTED_MINOR_VERSION)
156 return -1;
157 switch(change) {
158 case NFSD_SET:
159 nfsd_supported_minorversion = minorversion;
160 break;
161 case NFSD_CLEAR:
162 if (minorversion == 0)
163 return -1;
164 nfsd_supported_minorversion = minorversion - 1;
165 break;
166 case NFSD_TEST:
167 return minorversion <= nfsd_supported_minorversion;
168 case NFSD_AVAIL:
169 return minorversion <= NFSD_SUPPORTED_MINOR_VERSION;
170 }
171 return 0;
172}
173
152/* 174/*
153 * Maximum number of nfsd processes 175 * Maximum number of nfsd processes
154 */ 176 */
@@ -200,6 +222,28 @@ void nfsd_reset_versions(void)
200 } 222 }
201} 223}
202 224
225/*
226 * Each session guarantees a negotiated per slot memory cache for replies
227 * which in turn consumes memory beyond the v2/v3/v4.0 server. A dedicated
228 * NFSv4.1 server might want to use more memory for a DRC than a machine
229 * with mutiple services.
230 *
231 * Impose a hard limit on the number of pages for the DRC which varies
232 * according to the machines free pages. This is of course only a default.
233 *
234 * For now this is a #defined shift which could be under admin control
235 * in the future.
236 */
237static void set_max_drc(void)
238{
239 /* The percent of nr_free_buffer_pages used by the V4.1 server DRC */
240 #define NFSD_DRC_SIZE_SHIFT 7
241 nfsd_serv->sv_drc_max_pages = nr_free_buffer_pages()
242 >> NFSD_DRC_SIZE_SHIFT;
243 nfsd_serv->sv_drc_pages_used = 0;
244 dprintk("%s svc_drc_max_pages %u\n", __func__,
245 nfsd_serv->sv_drc_max_pages);
246}
203 247
204int nfsd_create_serv(void) 248int nfsd_create_serv(void)
205{ 249{
@@ -227,11 +271,12 @@ int nfsd_create_serv(void)
227 nfsd_max_blksize /= 2; 271 nfsd_max_blksize /= 2;
228 } 272 }
229 273
230 atomic_set(&nfsd_busy, 0);
231 nfsd_serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize, 274 nfsd_serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize,
232 nfsd_last_thread, nfsd, THIS_MODULE); 275 nfsd_last_thread, nfsd, THIS_MODULE);
233 if (nfsd_serv == NULL) 276 if (nfsd_serv == NULL)
234 err = -ENOMEM; 277 err = -ENOMEM;
278 else
279 set_max_drc();
235 280
236 do_gettimeofday(&nfssvc_boot); /* record boot time */ 281 do_gettimeofday(&nfssvc_boot); /* record boot time */
237 return err; 282 return err;
@@ -375,26 +420,6 @@ nfsd_svc(unsigned short port, int nrservs)
375 return error; 420 return error;
376} 421}
377 422
378static inline void
379update_thread_usage(int busy_threads)
380{
381 unsigned long prev_call;
382 unsigned long diff;
383 int decile;
384
385 spin_lock(&nfsd_call_lock);
386 prev_call = nfsd_last_call;
387 nfsd_last_call = jiffies;
388 decile = busy_threads*10/nfsdstats.th_cnt;
389 if (decile>0 && decile <= 10) {
390 diff = nfsd_last_call - prev_call;
391 if ( (nfsdstats.th_usage[decile-1] += diff) >= NFSD_USAGE_WRAP)
392 nfsdstats.th_usage[decile-1] -= NFSD_USAGE_WRAP;
393 if (decile == 10)
394 nfsdstats.th_fullcnt++;
395 }
396 spin_unlock(&nfsd_call_lock);
397}
398 423
399/* 424/*
400 * This is the NFS server kernel thread 425 * This is the NFS server kernel thread
@@ -460,8 +485,6 @@ nfsd(void *vrqstp)
460 continue; 485 continue;
461 } 486 }
462 487
463 update_thread_usage(atomic_read(&nfsd_busy));
464 atomic_inc(&nfsd_busy);
465 488
466 /* Lock the export hash tables for reading. */ 489 /* Lock the export hash tables for reading. */
467 exp_readlock(); 490 exp_readlock();
@@ -470,8 +493,6 @@ nfsd(void *vrqstp)
470 493
471 /* Unlock export hash tables */ 494 /* Unlock export hash tables */
472 exp_readunlock(); 495 exp_readunlock();
473 update_thread_usage(atomic_read(&nfsd_busy));
474 atomic_dec(&nfsd_busy);
475 } 496 }
476 497
477 /* Clear signals before calling svc_exit_thread() */ 498 /* Clear signals before calling svc_exit_thread() */
@@ -539,6 +560,10 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
539 + rqstp->rq_res.head[0].iov_len; 560 + rqstp->rq_res.head[0].iov_len;
540 rqstp->rq_res.head[0].iov_len += sizeof(__be32); 561 rqstp->rq_res.head[0].iov_len += sizeof(__be32);
541 562
563 /* NFSv4.1 DRC requires statp */
564 if (rqstp->rq_vers == 4)
565 nfsd4_set_statp(rqstp, statp);
566
542 /* Now call the procedure handler, and encode NFS status. */ 567 /* Now call the procedure handler, and encode NFS status. */
543 nfserr = proc->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp); 568 nfserr = proc->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp);
544 nfserr = map_new_errors(rqstp->rq_vers, nfserr); 569 nfserr = map_new_errors(rqstp->rq_vers, nfserr);
@@ -570,3 +595,10 @@ nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp)
570 nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1); 595 nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1);
571 return 1; 596 return 1;
572} 597}
598
599int nfsd_pool_stats_open(struct inode *inode, struct file *file)
600{
601 if (nfsd_serv == NULL)
602 return -ENODEV;
603 return svc_pool_stats_open(nfsd_serv, file);
604}
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 78376b6c0236..ab93fcfef254 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -366,8 +366,9 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
366 } 366 }
367 367
368 /* Revoke setuid/setgid on chown */ 368 /* Revoke setuid/setgid on chown */
369 if (((iap->ia_valid & ATTR_UID) && iap->ia_uid != inode->i_uid) || 369 if (!S_ISDIR(inode->i_mode) &&
370 ((iap->ia_valid & ATTR_GID) && iap->ia_gid != inode->i_gid)) { 370 (((iap->ia_valid & ATTR_UID) && iap->ia_uid != inode->i_uid) ||
371 ((iap->ia_valid & ATTR_GID) && iap->ia_gid != inode->i_gid))) {
371 iap->ia_valid |= ATTR_KILL_PRIV; 372 iap->ia_valid |= ATTR_KILL_PRIV;
372 if (iap->ia_valid & ATTR_MODE) { 373 if (iap->ia_valid & ATTR_MODE) {
373 /* we're setting mode too, just clear the s*id bits */ 374 /* we're setting mode too, just clear the s*id bits */
@@ -960,7 +961,7 @@ static void kill_suid(struct dentry *dentry)
960static __be32 961static __be32
961nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, 962nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
962 loff_t offset, struct kvec *vec, int vlen, 963 loff_t offset, struct kvec *vec, int vlen,
963 unsigned long cnt, int *stablep) 964 unsigned long *cnt, int *stablep)
964{ 965{
965 struct svc_export *exp; 966 struct svc_export *exp;
966 struct dentry *dentry; 967 struct dentry *dentry;
@@ -974,7 +975,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
974 err = nfserr_perm; 975 err = nfserr_perm;
975 976
976 if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && 977 if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) &&
977 (!lock_may_write(file->f_path.dentry->d_inode, offset, cnt))) 978 (!lock_may_write(file->f_path.dentry->d_inode, offset, *cnt)))
978 goto out; 979 goto out;
979#endif 980#endif
980 981
@@ -1009,7 +1010,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
1009 host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset); 1010 host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset);
1010 set_fs(oldfs); 1011 set_fs(oldfs);
1011 if (host_err >= 0) { 1012 if (host_err >= 0) {
1012 nfsdstats.io_write += cnt; 1013 nfsdstats.io_write += host_err;
1013 fsnotify_modify(file->f_path.dentry); 1014 fsnotify_modify(file->f_path.dentry);
1014 } 1015 }
1015 1016
@@ -1054,9 +1055,10 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
1054 } 1055 }
1055 1056
1056 dprintk("nfsd: write complete host_err=%d\n", host_err); 1057 dprintk("nfsd: write complete host_err=%d\n", host_err);
1057 if (host_err >= 0) 1058 if (host_err >= 0) {
1058 err = 0; 1059 err = 0;
1059 else 1060 *cnt = host_err;
1061 } else
1060 err = nfserrno(host_err); 1062 err = nfserrno(host_err);
1061out: 1063out:
1062 return err; 1064 return err;
@@ -1098,7 +1100,7 @@ out:
1098 */ 1100 */
1099__be32 1101__be32
1100nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, 1102nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
1101 loff_t offset, struct kvec *vec, int vlen, unsigned long cnt, 1103 loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt,
1102 int *stablep) 1104 int *stablep)
1103{ 1105{
1104 __be32 err = 0; 1106 __be32 err = 0;
@@ -1179,6 +1181,21 @@ nfsd_create_setattr(struct svc_rqst *rqstp, struct svc_fh *resfhp,
1179 return 0; 1181 return 0;
1180} 1182}
1181 1183
1184/* HPUX client sometimes creates a file in mode 000, and sets size to 0.
1185 * setting size to 0 may fail for some specific file systems by the permission
1186 * checking which requires WRITE permission but the mode is 000.
1187 * we ignore the resizing(to 0) on the just new created file, since the size is
1188 * 0 after file created.
1189 *
1190 * call this only after vfs_create() is called.
1191 * */
1192static void
1193nfsd_check_ignore_resizing(struct iattr *iap)
1194{
1195 if ((iap->ia_valid & ATTR_SIZE) && (iap->ia_size == 0))
1196 iap->ia_valid &= ~ATTR_SIZE;
1197}
1198
1182/* 1199/*
1183 * Create a file (regular, directory, device, fifo); UNIX sockets 1200 * Create a file (regular, directory, device, fifo); UNIX sockets
1184 * not yet implemented. 1201 * not yet implemented.
@@ -1274,6 +1291,8 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
1274 switch (type) { 1291 switch (type) {
1275 case S_IFREG: 1292 case S_IFREG:
1276 host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); 1293 host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL);
1294 if (!host_err)
1295 nfsd_check_ignore_resizing(iap);
1277 break; 1296 break;
1278 case S_IFDIR: 1297 case S_IFDIR:
1279 host_err = vfs_mkdir(dirp, dchild, iap->ia_mode); 1298 host_err = vfs_mkdir(dirp, dchild, iap->ia_mode);
@@ -1427,6 +1446,8 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp,
1427 /* setattr will sync the child (or not) */ 1446 /* setattr will sync the child (or not) */
1428 } 1447 }
1429 1448
1449 nfsd_check_ignore_resizing(iap);
1450
1430 if (createmode == NFS3_CREATE_EXCLUSIVE) { 1451 if (createmode == NFS3_CREATE_EXCLUSIVE) {
1431 /* Cram the verifier into atime/mtime */ 1452 /* Cram the verifier into atime/mtime */
1432 iap->ia_valid = ATTR_MTIME|ATTR_ATIME 1453 iap->ia_valid = ATTR_MTIME|ATTR_ATIME
diff --git a/fs/nilfs2/Makefile b/fs/nilfs2/Makefile
new file mode 100644
index 000000000000..df3e62c1ddc5
--- /dev/null
+++ b/fs/nilfs2/Makefile
@@ -0,0 +1,5 @@
1obj-$(CONFIG_NILFS2_FS) += nilfs2.o
2nilfs2-y := inode.o file.o dir.o super.o namei.o page.o mdt.o \
3 btnode.o bmap.o btree.o direct.o dat.o recovery.o \
4 the_nilfs.o segbuf.o segment.o cpfile.o sufile.o \
5 ifile.o alloc.o gcinode.o ioctl.o gcdat.o
diff --git a/fs/nilfs2/alloc.c b/fs/nilfs2/alloc.c
new file mode 100644
index 000000000000..d69e6ae59251
--- /dev/null
+++ b/fs/nilfs2/alloc.c
@@ -0,0 +1,504 @@
1/*
2 * alloc.c - NILFS dat/inode allocator
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Original code was written by Koji Sato <koji@osrg.net>.
21 * Two allocators were unified by Ryusuke Konishi <ryusuke@osrg.net>,
22 * Amagai Yoshiji <amagai@osrg.net>.
23 */
24
25#include <linux/types.h>
26#include <linux/buffer_head.h>
27#include <linux/fs.h>
28#include <linux/bitops.h>
29#include "mdt.h"
30#include "alloc.h"
31
32
33static inline unsigned long
34nilfs_palloc_groups_per_desc_block(const struct inode *inode)
35{
36 return (1UL << inode->i_blkbits) /
37 sizeof(struct nilfs_palloc_group_desc);
38}
39
40static inline unsigned long
41nilfs_palloc_groups_count(const struct inode *inode)
42{
43 return 1UL << (BITS_PER_LONG - (inode->i_blkbits + 3 /* log2(8) */));
44}
45
46int nilfs_palloc_init_blockgroup(struct inode *inode, unsigned entry_size)
47{
48 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
49
50 mi->mi_bgl = kmalloc(sizeof(*mi->mi_bgl), GFP_NOFS);
51 if (!mi->mi_bgl)
52 return -ENOMEM;
53
54 bgl_lock_init(mi->mi_bgl);
55
56 nilfs_mdt_set_entry_size(inode, entry_size, 0);
57
58 mi->mi_blocks_per_group =
59 DIV_ROUND_UP(nilfs_palloc_entries_per_group(inode),
60 mi->mi_entries_per_block) + 1;
61 /* Number of blocks in a group including entry blocks and
62 a bitmap block */
63 mi->mi_blocks_per_desc_block =
64 nilfs_palloc_groups_per_desc_block(inode) *
65 mi->mi_blocks_per_group + 1;
66 /* Number of blocks per descriptor including the
67 descriptor block */
68 return 0;
69}
70
71static unsigned long nilfs_palloc_group(const struct inode *inode, __u64 nr,
72 unsigned long *offset)
73{
74 __u64 group = nr;
75
76 *offset = do_div(group, nilfs_palloc_entries_per_group(inode));
77 return group;
78}
79
80static unsigned long
81nilfs_palloc_desc_blkoff(const struct inode *inode, unsigned long group)
82{
83 unsigned long desc_block =
84 group / nilfs_palloc_groups_per_desc_block(inode);
85 return desc_block * NILFS_MDT(inode)->mi_blocks_per_desc_block;
86}
87
88static unsigned long
89nilfs_palloc_bitmap_blkoff(const struct inode *inode, unsigned long group)
90{
91 unsigned long desc_offset =
92 group % nilfs_palloc_groups_per_desc_block(inode);
93 return nilfs_palloc_desc_blkoff(inode, group) + 1 +
94 desc_offset * NILFS_MDT(inode)->mi_blocks_per_group;
95}
96
97static unsigned long
98nilfs_palloc_group_desc_nfrees(struct inode *inode, unsigned long group,
99 const struct nilfs_palloc_group_desc *desc)
100{
101 unsigned long nfree;
102
103 spin_lock(nilfs_mdt_bgl_lock(inode, group));
104 nfree = le32_to_cpu(desc->pg_nfrees);
105 spin_unlock(nilfs_mdt_bgl_lock(inode, group));
106 return nfree;
107}
108
109static void
110nilfs_palloc_group_desc_add_entries(struct inode *inode,
111 unsigned long group,
112 struct nilfs_palloc_group_desc *desc,
113 u32 n)
114{
115 spin_lock(nilfs_mdt_bgl_lock(inode, group));
116 le32_add_cpu(&desc->pg_nfrees, n);
117 spin_unlock(nilfs_mdt_bgl_lock(inode, group));
118}
119
120static unsigned long
121nilfs_palloc_entry_blkoff(const struct inode *inode, __u64 nr)
122{
123 unsigned long group, group_offset;
124
125 group = nilfs_palloc_group(inode, nr, &group_offset);
126
127 return nilfs_palloc_bitmap_blkoff(inode, group) + 1 +
128 group_offset / NILFS_MDT(inode)->mi_entries_per_block;
129}
130
131static void nilfs_palloc_desc_block_init(struct inode *inode,
132 struct buffer_head *bh, void *kaddr)
133{
134 struct nilfs_palloc_group_desc *desc = kaddr + bh_offset(bh);
135 unsigned long n = nilfs_palloc_groups_per_desc_block(inode);
136 __le32 nfrees;
137
138 nfrees = cpu_to_le32(nilfs_palloc_entries_per_group(inode));
139 while (n-- > 0) {
140 desc->pg_nfrees = nfrees;
141 desc++;
142 }
143}
144
145static int nilfs_palloc_get_desc_block(struct inode *inode,
146 unsigned long group,
147 int create, struct buffer_head **bhp)
148{
149 return nilfs_mdt_get_block(inode,
150 nilfs_palloc_desc_blkoff(inode, group),
151 create, nilfs_palloc_desc_block_init, bhp);
152}
153
154static int nilfs_palloc_get_bitmap_block(struct inode *inode,
155 unsigned long group,
156 int create, struct buffer_head **bhp)
157{
158 return nilfs_mdt_get_block(inode,
159 nilfs_palloc_bitmap_blkoff(inode, group),
160 create, NULL, bhp);
161}
162
163int nilfs_palloc_get_entry_block(struct inode *inode, __u64 nr,
164 int create, struct buffer_head **bhp)
165{
166 return nilfs_mdt_get_block(inode, nilfs_palloc_entry_blkoff(inode, nr),
167 create, NULL, bhp);
168}
169
170static struct nilfs_palloc_group_desc *
171nilfs_palloc_block_get_group_desc(const struct inode *inode,
172 unsigned long group,
173 const struct buffer_head *bh, void *kaddr)
174{
175 return (struct nilfs_palloc_group_desc *)(kaddr + bh_offset(bh)) +
176 group % nilfs_palloc_groups_per_desc_block(inode);
177}
178
179static unsigned char *
180nilfs_palloc_block_get_bitmap(const struct inode *inode,
181 const struct buffer_head *bh, void *kaddr)
182{
183 return (unsigned char *)(kaddr + bh_offset(bh));
184}
185
186void *nilfs_palloc_block_get_entry(const struct inode *inode, __u64 nr,
187 const struct buffer_head *bh, void *kaddr)
188{
189 unsigned long entry_offset, group_offset;
190
191 nilfs_palloc_group(inode, nr, &group_offset);
192 entry_offset = group_offset % NILFS_MDT(inode)->mi_entries_per_block;
193
194 return kaddr + bh_offset(bh) +
195 entry_offset * NILFS_MDT(inode)->mi_entry_size;
196}
197
198static int nilfs_palloc_find_available_slot(struct inode *inode,
199 unsigned long group,
200 unsigned long target,
201 unsigned char *bitmap,
202 int bsize) /* size in bits */
203{
204 int curr, pos, end, i;
205
206 if (target > 0) {
207 end = (target + BITS_PER_LONG - 1) & ~(BITS_PER_LONG - 1);
208 if (end > bsize)
209 end = bsize;
210 pos = nilfs_find_next_zero_bit(bitmap, end, target);
211 if (pos < end &&
212 !nilfs_set_bit_atomic(
213 nilfs_mdt_bgl_lock(inode, group), pos, bitmap))
214 return pos;
215 } else
216 end = 0;
217
218 for (i = 0, curr = end;
219 i < bsize;
220 i += BITS_PER_LONG, curr += BITS_PER_LONG) {
221 /* wrap around */
222 if (curr >= bsize)
223 curr = 0;
224 while (*((unsigned long *)bitmap + curr / BITS_PER_LONG)
225 != ~0UL) {
226 end = curr + BITS_PER_LONG;
227 if (end > bsize)
228 end = bsize;
229 pos = nilfs_find_next_zero_bit(bitmap, end, curr);
230 if ((pos < end) &&
231 !nilfs_set_bit_atomic(
232 nilfs_mdt_bgl_lock(inode, group), pos,
233 bitmap))
234 return pos;
235 }
236 }
237 return -ENOSPC;
238}
239
240static unsigned long
241nilfs_palloc_rest_groups_in_desc_block(const struct inode *inode,
242 unsigned long curr, unsigned long max)
243{
244 return min_t(unsigned long,
245 nilfs_palloc_groups_per_desc_block(inode) -
246 curr % nilfs_palloc_groups_per_desc_block(inode),
247 max - curr + 1);
248}
249
250int nilfs_palloc_prepare_alloc_entry(struct inode *inode,
251 struct nilfs_palloc_req *req)
252{
253 struct buffer_head *desc_bh, *bitmap_bh;
254 struct nilfs_palloc_group_desc *desc;
255 unsigned char *bitmap;
256 void *desc_kaddr, *bitmap_kaddr;
257 unsigned long group, maxgroup, ngroups;
258 unsigned long group_offset, maxgroup_offset;
259 unsigned long n, entries_per_group, groups_per_desc_block;
260 unsigned long i, j;
261 int pos, ret;
262
263 ngroups = nilfs_palloc_groups_count(inode);
264 maxgroup = ngroups - 1;
265 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset);
266 entries_per_group = nilfs_palloc_entries_per_group(inode);
267 groups_per_desc_block = nilfs_palloc_groups_per_desc_block(inode);
268
269 for (i = 0; i < ngroups; i += n) {
270 if (group >= ngroups) {
271 /* wrap around */
272 group = 0;
273 maxgroup = nilfs_palloc_group(inode, req->pr_entry_nr,
274 &maxgroup_offset) - 1;
275 }
276 ret = nilfs_palloc_get_desc_block(inode, group, 1, &desc_bh);
277 if (ret < 0)
278 return ret;
279 desc_kaddr = kmap(desc_bh->b_page);
280 desc = nilfs_palloc_block_get_group_desc(
281 inode, group, desc_bh, desc_kaddr);
282 n = nilfs_palloc_rest_groups_in_desc_block(inode, group,
283 maxgroup);
284 for (j = 0; j < n; j++, desc++, group++) {
285 if (nilfs_palloc_group_desc_nfrees(inode, group, desc)
286 > 0) {
287 ret = nilfs_palloc_get_bitmap_block(
288 inode, group, 1, &bitmap_bh);
289 if (ret < 0)
290 goto out_desc;
291 bitmap_kaddr = kmap(bitmap_bh->b_page);
292 bitmap = nilfs_palloc_block_get_bitmap(
293 inode, bitmap_bh, bitmap_kaddr);
294 pos = nilfs_palloc_find_available_slot(
295 inode, group, group_offset, bitmap,
296 entries_per_group);
297 if (pos >= 0) {
298 /* found a free entry */
299 nilfs_palloc_group_desc_add_entries(
300 inode, group, desc, -1);
301 req->pr_entry_nr =
302 entries_per_group * group + pos;
303 kunmap(desc_bh->b_page);
304 kunmap(bitmap_bh->b_page);
305
306 req->pr_desc_bh = desc_bh;
307 req->pr_bitmap_bh = bitmap_bh;
308 return 0;
309 }
310 kunmap(bitmap_bh->b_page);
311 brelse(bitmap_bh);
312 }
313
314 group_offset = 0;
315 }
316
317 kunmap(desc_bh->b_page);
318 brelse(desc_bh);
319 }
320
321 /* no entries left */
322 return -ENOSPC;
323
324 out_desc:
325 kunmap(desc_bh->b_page);
326 brelse(desc_bh);
327 return ret;
328}
329
330void nilfs_palloc_commit_alloc_entry(struct inode *inode,
331 struct nilfs_palloc_req *req)
332{
333 nilfs_mdt_mark_buffer_dirty(req->pr_bitmap_bh);
334 nilfs_mdt_mark_buffer_dirty(req->pr_desc_bh);
335 nilfs_mdt_mark_dirty(inode);
336
337 brelse(req->pr_bitmap_bh);
338 brelse(req->pr_desc_bh);
339}
340
341void nilfs_palloc_commit_free_entry(struct inode *inode,
342 struct nilfs_palloc_req *req)
343{
344 struct nilfs_palloc_group_desc *desc;
345 unsigned long group, group_offset;
346 unsigned char *bitmap;
347 void *desc_kaddr, *bitmap_kaddr;
348
349 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset);
350 desc_kaddr = kmap(req->pr_desc_bh->b_page);
351 desc = nilfs_palloc_block_get_group_desc(inode, group,
352 req->pr_desc_bh, desc_kaddr);
353 bitmap_kaddr = kmap(req->pr_bitmap_bh->b_page);
354 bitmap = nilfs_palloc_block_get_bitmap(inode, req->pr_bitmap_bh,
355 bitmap_kaddr);
356
357 if (!nilfs_clear_bit_atomic(nilfs_mdt_bgl_lock(inode, group),
358 group_offset, bitmap))
359 printk(KERN_WARNING "%s: entry number %llu already freed\n",
360 __func__, (unsigned long long)req->pr_entry_nr);
361
362 nilfs_palloc_group_desc_add_entries(inode, group, desc, 1);
363
364 kunmap(req->pr_bitmap_bh->b_page);
365 kunmap(req->pr_desc_bh->b_page);
366
367 nilfs_mdt_mark_buffer_dirty(req->pr_desc_bh);
368 nilfs_mdt_mark_buffer_dirty(req->pr_bitmap_bh);
369 nilfs_mdt_mark_dirty(inode);
370
371 brelse(req->pr_bitmap_bh);
372 brelse(req->pr_desc_bh);
373}
374
375void nilfs_palloc_abort_alloc_entry(struct inode *inode,
376 struct nilfs_palloc_req *req)
377{
378 struct nilfs_palloc_group_desc *desc;
379 void *desc_kaddr, *bitmap_kaddr;
380 unsigned char *bitmap;
381 unsigned long group, group_offset;
382
383 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset);
384 desc_kaddr = kmap(req->pr_desc_bh->b_page);
385 desc = nilfs_palloc_block_get_group_desc(inode, group,
386 req->pr_desc_bh, desc_kaddr);
387 bitmap_kaddr = kmap(req->pr_bitmap_bh->b_page);
388 bitmap = nilfs_palloc_block_get_bitmap(inode, req->pr_bitmap_bh,
389 bitmap_kaddr);
390 if (!nilfs_clear_bit_atomic(nilfs_mdt_bgl_lock(inode, group),
391 group_offset, bitmap))
392 printk(KERN_WARNING "%s: entry numer %llu already freed\n",
393 __func__, (unsigned long long)req->pr_entry_nr);
394
395 nilfs_palloc_group_desc_add_entries(inode, group, desc, 1);
396
397 kunmap(req->pr_bitmap_bh->b_page);
398 kunmap(req->pr_desc_bh->b_page);
399
400 brelse(req->pr_bitmap_bh);
401 brelse(req->pr_desc_bh);
402
403 req->pr_entry_nr = 0;
404 req->pr_bitmap_bh = NULL;
405 req->pr_desc_bh = NULL;
406}
407
408int nilfs_palloc_prepare_free_entry(struct inode *inode,
409 struct nilfs_palloc_req *req)
410{
411 struct buffer_head *desc_bh, *bitmap_bh;
412 unsigned long group, group_offset;
413 int ret;
414
415 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset);
416 ret = nilfs_palloc_get_desc_block(inode, group, 1, &desc_bh);
417 if (ret < 0)
418 return ret;
419 ret = nilfs_palloc_get_bitmap_block(inode, group, 1, &bitmap_bh);
420 if (ret < 0) {
421 brelse(desc_bh);
422 return ret;
423 }
424
425 req->pr_desc_bh = desc_bh;
426 req->pr_bitmap_bh = bitmap_bh;
427 return 0;
428}
429
430void nilfs_palloc_abort_free_entry(struct inode *inode,
431 struct nilfs_palloc_req *req)
432{
433 brelse(req->pr_bitmap_bh);
434 brelse(req->pr_desc_bh);
435
436 req->pr_entry_nr = 0;
437 req->pr_bitmap_bh = NULL;
438 req->pr_desc_bh = NULL;
439}
440
441static int
442nilfs_palloc_group_is_in(struct inode *inode, unsigned long group, __u64 nr)
443{
444 __u64 first, last;
445
446 first = group * nilfs_palloc_entries_per_group(inode);
447 last = first + nilfs_palloc_entries_per_group(inode) - 1;
448 return (nr >= first) && (nr <= last);
449}
450
451int nilfs_palloc_freev(struct inode *inode, __u64 *entry_nrs, size_t nitems)
452{
453 struct buffer_head *desc_bh, *bitmap_bh;
454 struct nilfs_palloc_group_desc *desc;
455 unsigned char *bitmap;
456 void *desc_kaddr, *bitmap_kaddr;
457 unsigned long group, group_offset;
458 int i, j, n, ret;
459
460 for (i = 0; i < nitems; i += n) {
461 group = nilfs_palloc_group(inode, entry_nrs[i], &group_offset);
462 ret = nilfs_palloc_get_desc_block(inode, group, 0, &desc_bh);
463 if (ret < 0)
464 return ret;
465 ret = nilfs_palloc_get_bitmap_block(inode, group, 0,
466 &bitmap_bh);
467 if (ret < 0) {
468 brelse(desc_bh);
469 return ret;
470 }
471 desc_kaddr = kmap(desc_bh->b_page);
472 desc = nilfs_palloc_block_get_group_desc(
473 inode, group, desc_bh, desc_kaddr);
474 bitmap_kaddr = kmap(bitmap_bh->b_page);
475 bitmap = nilfs_palloc_block_get_bitmap(
476 inode, bitmap_bh, bitmap_kaddr);
477 for (j = i, n = 0;
478 (j < nitems) && nilfs_palloc_group_is_in(inode, group,
479 entry_nrs[j]);
480 j++, n++) {
481 nilfs_palloc_group(inode, entry_nrs[j], &group_offset);
482 if (!nilfs_clear_bit_atomic(
483 nilfs_mdt_bgl_lock(inode, group),
484 group_offset, bitmap)) {
485 printk(KERN_WARNING
486 "%s: entry number %llu already freed\n",
487 __func__,
488 (unsigned long long)entry_nrs[j]);
489 }
490 }
491 nilfs_palloc_group_desc_add_entries(inode, group, desc, n);
492
493 kunmap(bitmap_bh->b_page);
494 kunmap(desc_bh->b_page);
495
496 nilfs_mdt_mark_buffer_dirty(desc_bh);
497 nilfs_mdt_mark_buffer_dirty(bitmap_bh);
498 nilfs_mdt_mark_dirty(inode);
499
500 brelse(bitmap_bh);
501 brelse(desc_bh);
502 }
503 return 0;
504}
diff --git a/fs/nilfs2/alloc.h b/fs/nilfs2/alloc.h
new file mode 100644
index 000000000000..4ace5475c2c7
--- /dev/null
+++ b/fs/nilfs2/alloc.h
@@ -0,0 +1,72 @@
1/*
2 * alloc.h - persistent object (dat entry/disk inode) allocator/deallocator
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Original code was written by Koji Sato <koji@osrg.net>.
21 * Two allocators were unified by Ryusuke Konishi <ryusuke@osrg.net>,
22 * Amagai Yoshiji <amagai@osrg.net>.
23 */
24
25#ifndef _NILFS_ALLOC_H
26#define _NILFS_ALLOC_H
27
28#include <linux/types.h>
29#include <linux/buffer_head.h>
30#include <linux/fs.h>
31
32static inline unsigned long
33nilfs_palloc_entries_per_group(const struct inode *inode)
34{
35 return 1UL << (inode->i_blkbits + 3 /* log2(8 = CHAR_BITS) */);
36}
37
38int nilfs_palloc_init_blockgroup(struct inode *, unsigned);
39int nilfs_palloc_get_entry_block(struct inode *, __u64, int,
40 struct buffer_head **);
41void *nilfs_palloc_block_get_entry(const struct inode *, __u64,
42 const struct buffer_head *, void *);
43
44/**
45 * nilfs_palloc_req - persistent alloctor request and reply
46 * @pr_entry_nr: entry number (vblocknr or inode number)
47 * @pr_desc_bh: buffer head of the buffer containing block group descriptors
48 * @pr_bitmap_bh: buffer head of the buffer containing a block group bitmap
49 * @pr_entry_bh: buffer head of the buffer containing translation entries
50 */
51struct nilfs_palloc_req {
52 __u64 pr_entry_nr;
53 struct buffer_head *pr_desc_bh;
54 struct buffer_head *pr_bitmap_bh;
55 struct buffer_head *pr_entry_bh;
56};
57
58int nilfs_palloc_prepare_alloc_entry(struct inode *,
59 struct nilfs_palloc_req *);
60void nilfs_palloc_commit_alloc_entry(struct inode *,
61 struct nilfs_palloc_req *);
62void nilfs_palloc_abort_alloc_entry(struct inode *, struct nilfs_palloc_req *);
63void nilfs_palloc_commit_free_entry(struct inode *, struct nilfs_palloc_req *);
64int nilfs_palloc_prepare_free_entry(struct inode *, struct nilfs_palloc_req *);
65void nilfs_palloc_abort_free_entry(struct inode *, struct nilfs_palloc_req *);
66int nilfs_palloc_freev(struct inode *, __u64 *, size_t);
67
68#define nilfs_set_bit_atomic ext2_set_bit_atomic
69#define nilfs_clear_bit_atomic ext2_clear_bit_atomic
70#define nilfs_find_next_zero_bit ext2_find_next_zero_bit
71
72#endif /* _NILFS_ALLOC_H */
diff --git a/fs/nilfs2/bmap.c b/fs/nilfs2/bmap.c
new file mode 100644
index 000000000000..24638e059bf3
--- /dev/null
+++ b/fs/nilfs2/bmap.c
@@ -0,0 +1,783 @@
1/*
2 * bmap.c - NILFS block mapping.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/fs.h>
24#include <linux/string.h>
25#include <linux/errno.h>
26#include "nilfs.h"
27#include "bmap.h"
28#include "sb.h"
29#include "btnode.h"
30#include "mdt.h"
31#include "dat.h"
32#include "alloc.h"
33
34int nilfs_bmap_lookup_at_level(struct nilfs_bmap *bmap, __u64 key, int level,
35 __u64 *ptrp)
36{
37 __u64 ptr;
38 int ret;
39
40 down_read(&bmap->b_sem);
41 ret = bmap->b_ops->bop_lookup(bmap, key, level, ptrp);
42 if (ret < 0)
43 goto out;
44 if (bmap->b_pops->bpop_translate != NULL) {
45 ret = bmap->b_pops->bpop_translate(bmap, *ptrp, &ptr);
46 if (ret < 0)
47 goto out;
48 *ptrp = ptr;
49 }
50
51 out:
52 up_read(&bmap->b_sem);
53 return ret;
54}
55
56
57/**
58 * nilfs_bmap_lookup - find a record
59 * @bmap: bmap
60 * @key: key
61 * @recp: pointer to record
62 *
63 * Description: nilfs_bmap_lookup() finds a record whose key matches @key in
64 * @bmap.
65 *
66 * Return Value: On success, 0 is returned and the record associated with @key
67 * is stored in the place pointed by @recp. On error, one of the following
68 * negative error codes is returned.
69 *
70 * %-EIO - I/O error.
71 *
72 * %-ENOMEM - Insufficient amount of memory available.
73 *
74 * %-ENOENT - A record associated with @key does not exist.
75 */
76int nilfs_bmap_lookup(struct nilfs_bmap *bmap,
77 unsigned long key,
78 unsigned long *recp)
79{
80 __u64 ptr;
81 int ret;
82
83 /* XXX: use macro for level 1 */
84 ret = nilfs_bmap_lookup_at_level(bmap, key, 1, &ptr);
85 if (recp != NULL)
86 *recp = ptr;
87 return ret;
88}
89
90static int nilfs_bmap_do_insert(struct nilfs_bmap *bmap, __u64 key, __u64 ptr)
91{
92 __u64 keys[NILFS_BMAP_SMALL_HIGH + 1];
93 __u64 ptrs[NILFS_BMAP_SMALL_HIGH + 1];
94 int ret, n;
95
96 if (bmap->b_ops->bop_check_insert != NULL) {
97 ret = bmap->b_ops->bop_check_insert(bmap, key);
98 if (ret > 0) {
99 n = bmap->b_ops->bop_gather_data(
100 bmap, keys, ptrs, NILFS_BMAP_SMALL_HIGH + 1);
101 if (n < 0)
102 return n;
103 ret = nilfs_btree_convert_and_insert(
104 bmap, key, ptr, keys, ptrs, n,
105 NILFS_BMAP_LARGE_LOW, NILFS_BMAP_LARGE_HIGH);
106 if (ret == 0)
107 bmap->b_u.u_flags |= NILFS_BMAP_LARGE;
108
109 return ret;
110 } else if (ret < 0)
111 return ret;
112 }
113
114 return bmap->b_ops->bop_insert(bmap, key, ptr);
115}
116
117/**
118 * nilfs_bmap_insert - insert a new key-record pair into a bmap
119 * @bmap: bmap
120 * @key: key
121 * @rec: record
122 *
123 * Description: nilfs_bmap_insert() inserts the new key-record pair specified
124 * by @key and @rec into @bmap.
125 *
126 * Return Value: On success, 0 is returned. On error, one of the following
127 * negative error codes is returned.
128 *
129 * %-EIO - I/O error.
130 *
131 * %-ENOMEM - Insufficient amount of memory available.
132 *
133 * %-EEXIST - A record associated with @key already exist.
134 */
135int nilfs_bmap_insert(struct nilfs_bmap *bmap,
136 unsigned long key,
137 unsigned long rec)
138{
139 int ret;
140
141 down_write(&bmap->b_sem);
142 ret = nilfs_bmap_do_insert(bmap, key, rec);
143 up_write(&bmap->b_sem);
144 return ret;
145}
146
147static int nilfs_bmap_do_delete(struct nilfs_bmap *bmap, __u64 key)
148{
149 __u64 keys[NILFS_BMAP_LARGE_LOW + 1];
150 __u64 ptrs[NILFS_BMAP_LARGE_LOW + 1];
151 int ret, n;
152
153 if (bmap->b_ops->bop_check_delete != NULL) {
154 ret = bmap->b_ops->bop_check_delete(bmap, key);
155 if (ret > 0) {
156 n = bmap->b_ops->bop_gather_data(
157 bmap, keys, ptrs, NILFS_BMAP_LARGE_LOW + 1);
158 if (n < 0)
159 return n;
160 ret = nilfs_direct_delete_and_convert(
161 bmap, key, keys, ptrs, n,
162 NILFS_BMAP_SMALL_LOW, NILFS_BMAP_SMALL_HIGH);
163 if (ret == 0)
164 bmap->b_u.u_flags &= ~NILFS_BMAP_LARGE;
165
166 return ret;
167 } else if (ret < 0)
168 return ret;
169 }
170
171 return bmap->b_ops->bop_delete(bmap, key);
172}
173
174int nilfs_bmap_last_key(struct nilfs_bmap *bmap, unsigned long *key)
175{
176 __u64 lastkey;
177 int ret;
178
179 down_read(&bmap->b_sem);
180 ret = bmap->b_ops->bop_last_key(bmap, &lastkey);
181 if (!ret)
182 *key = lastkey;
183 up_read(&bmap->b_sem);
184 return ret;
185}
186
187/**
188 * nilfs_bmap_delete - delete a key-record pair from a bmap
189 * @bmap: bmap
190 * @key: key
191 *
192 * Description: nilfs_bmap_delete() deletes the key-record pair specified by
193 * @key from @bmap.
194 *
195 * Return Value: On success, 0 is returned. On error, one of the following
196 * negative error codes is returned.
197 *
198 * %-EIO - I/O error.
199 *
200 * %-ENOMEM - Insufficient amount of memory available.
201 *
202 * %-ENOENT - A record associated with @key does not exist.
203 */
204int nilfs_bmap_delete(struct nilfs_bmap *bmap, unsigned long key)
205{
206 int ret;
207
208 down_write(&bmap->b_sem);
209 ret = nilfs_bmap_do_delete(bmap, key);
210 up_write(&bmap->b_sem);
211 return ret;
212}
213
214static int nilfs_bmap_do_truncate(struct nilfs_bmap *bmap, unsigned long key)
215{
216 __u64 lastkey;
217 int ret;
218
219 ret = bmap->b_ops->bop_last_key(bmap, &lastkey);
220 if (ret < 0) {
221 if (ret == -ENOENT)
222 ret = 0;
223 return ret;
224 }
225
226 while (key <= lastkey) {
227 ret = nilfs_bmap_do_delete(bmap, lastkey);
228 if (ret < 0)
229 return ret;
230 ret = bmap->b_ops->bop_last_key(bmap, &lastkey);
231 if (ret < 0) {
232 if (ret == -ENOENT)
233 ret = 0;
234 return ret;
235 }
236 }
237 return 0;
238}
239
240/**
241 * nilfs_bmap_truncate - truncate a bmap to a specified key
242 * @bmap: bmap
243 * @key: key
244 *
245 * Description: nilfs_bmap_truncate() removes key-record pairs whose keys are
246 * greater than or equal to @key from @bmap.
247 *
248 * Return Value: On success, 0 is returned. On error, one of the following
249 * negative error codes is returned.
250 *
251 * %-EIO - I/O error.
252 *
253 * %-ENOMEM - Insufficient amount of memory available.
254 */
255int nilfs_bmap_truncate(struct nilfs_bmap *bmap, unsigned long key)
256{
257 int ret;
258
259 down_write(&bmap->b_sem);
260 ret = nilfs_bmap_do_truncate(bmap, key);
261 up_write(&bmap->b_sem);
262 return ret;
263}
264
265/**
266 * nilfs_bmap_clear - free resources a bmap holds
267 * @bmap: bmap
268 *
269 * Description: nilfs_bmap_clear() frees resources associated with @bmap.
270 */
271void nilfs_bmap_clear(struct nilfs_bmap *bmap)
272{
273 down_write(&bmap->b_sem);
274 if (bmap->b_ops->bop_clear != NULL)
275 bmap->b_ops->bop_clear(bmap);
276 up_write(&bmap->b_sem);
277}
278
279/**
280 * nilfs_bmap_propagate - propagate dirty state
281 * @bmap: bmap
282 * @bh: buffer head
283 *
284 * Description: nilfs_bmap_propagate() marks the buffers that directly or
285 * indirectly refer to the block specified by @bh dirty.
286 *
287 * Return Value: On success, 0 is returned. On error, one of the following
288 * negative error codes is returned.
289 *
290 * %-EIO - I/O error.
291 *
292 * %-ENOMEM - Insufficient amount of memory available.
293 */
294int nilfs_bmap_propagate(struct nilfs_bmap *bmap, struct buffer_head *bh)
295{
296 int ret;
297
298 down_write(&bmap->b_sem);
299 ret = bmap->b_ops->bop_propagate(bmap, bh);
300 up_write(&bmap->b_sem);
301 return ret;
302}
303
304/**
305 * nilfs_bmap_lookup_dirty_buffers -
306 * @bmap: bmap
307 * @listp: pointer to buffer head list
308 */
309void nilfs_bmap_lookup_dirty_buffers(struct nilfs_bmap *bmap,
310 struct list_head *listp)
311{
312 if (bmap->b_ops->bop_lookup_dirty_buffers != NULL)
313 bmap->b_ops->bop_lookup_dirty_buffers(bmap, listp);
314}
315
316/**
317 * nilfs_bmap_assign - assign a new block number to a block
318 * @bmap: bmap
319 * @bhp: pointer to buffer head
320 * @blocknr: block number
321 * @binfo: block information
322 *
323 * Description: nilfs_bmap_assign() assigns the block number @blocknr to the
324 * buffer specified by @bh.
325 *
326 * Return Value: On success, 0 is returned and the buffer head of a newly
327 * create buffer and the block information associated with the buffer are
328 * stored in the place pointed by @bh and @binfo, respectively. On error, one
329 * of the following negative error codes is returned.
330 *
331 * %-EIO - I/O error.
332 *
333 * %-ENOMEM - Insufficient amount of memory available.
334 */
335int nilfs_bmap_assign(struct nilfs_bmap *bmap,
336 struct buffer_head **bh,
337 unsigned long blocknr,
338 union nilfs_binfo *binfo)
339{
340 int ret;
341
342 down_write(&bmap->b_sem);
343 ret = bmap->b_ops->bop_assign(bmap, bh, blocknr, binfo);
344 up_write(&bmap->b_sem);
345 return ret;
346}
347
348/**
349 * nilfs_bmap_mark - mark block dirty
350 * @bmap: bmap
351 * @key: key
352 * @level: level
353 *
354 * Description: nilfs_bmap_mark() marks the block specified by @key and @level
355 * as dirty.
356 *
357 * Return Value: On success, 0 is returned. On error, one of the following
358 * negative error codes is returned.
359 *
360 * %-EIO - I/O error.
361 *
362 * %-ENOMEM - Insufficient amount of memory available.
363 */
364int nilfs_bmap_mark(struct nilfs_bmap *bmap, __u64 key, int level)
365{
366 int ret;
367
368 if (bmap->b_ops->bop_mark == NULL)
369 return 0;
370
371 down_write(&bmap->b_sem);
372 ret = bmap->b_ops->bop_mark(bmap, key, level);
373 up_write(&bmap->b_sem);
374 return ret;
375}
376
377/**
378 * nilfs_bmap_test_and_clear_dirty - test and clear a bmap dirty state
379 * @bmap: bmap
380 *
381 * Description: nilfs_test_and_clear() is the atomic operation to test and
382 * clear the dirty state of @bmap.
383 *
384 * Return Value: 1 is returned if @bmap is dirty, or 0 if clear.
385 */
386int nilfs_bmap_test_and_clear_dirty(struct nilfs_bmap *bmap)
387{
388 int ret;
389
390 down_write(&bmap->b_sem);
391 ret = nilfs_bmap_dirty(bmap);
392 nilfs_bmap_clear_dirty(bmap);
393 up_write(&bmap->b_sem);
394 return ret;
395}
396
397
398/*
399 * Internal use only
400 */
401
402void nilfs_bmap_add_blocks(const struct nilfs_bmap *bmap, int n)
403{
404 inode_add_bytes(bmap->b_inode, (1 << bmap->b_inode->i_blkbits) * n);
405 if (NILFS_MDT(bmap->b_inode))
406 nilfs_mdt_mark_dirty(bmap->b_inode);
407 else
408 mark_inode_dirty(bmap->b_inode);
409}
410
411void nilfs_bmap_sub_blocks(const struct nilfs_bmap *bmap, int n)
412{
413 inode_sub_bytes(bmap->b_inode, (1 << bmap->b_inode->i_blkbits) * n);
414 if (NILFS_MDT(bmap->b_inode))
415 nilfs_mdt_mark_dirty(bmap->b_inode);
416 else
417 mark_inode_dirty(bmap->b_inode);
418}
419
420int nilfs_bmap_get_block(const struct nilfs_bmap *bmap, __u64 ptr,
421 struct buffer_head **bhp)
422{
423 return nilfs_btnode_get(&NILFS_BMAP_I(bmap)->i_btnode_cache,
424 ptr, 0, bhp, 0);
425}
426
427void nilfs_bmap_put_block(const struct nilfs_bmap *bmap,
428 struct buffer_head *bh)
429{
430 brelse(bh);
431}
432
433int nilfs_bmap_get_new_block(const struct nilfs_bmap *bmap, __u64 ptr,
434 struct buffer_head **bhp)
435{
436 int ret;
437
438 ret = nilfs_btnode_get(&NILFS_BMAP_I(bmap)->i_btnode_cache,
439 ptr, 0, bhp, 1);
440 if (ret < 0)
441 return ret;
442 set_buffer_nilfs_volatile(*bhp);
443 return 0;
444}
445
446void nilfs_bmap_delete_block(const struct nilfs_bmap *bmap,
447 struct buffer_head *bh)
448{
449 nilfs_btnode_delete(bh);
450}
451
452__u64 nilfs_bmap_data_get_key(const struct nilfs_bmap *bmap,
453 const struct buffer_head *bh)
454{
455 struct buffer_head *pbh;
456 __u64 key;
457
458 key = page_index(bh->b_page) << (PAGE_CACHE_SHIFT -
459 bmap->b_inode->i_blkbits);
460 for (pbh = page_buffers(bh->b_page); pbh != bh;
461 pbh = pbh->b_this_page, key++);
462
463 return key;
464}
465
466__u64 nilfs_bmap_find_target_seq(const struct nilfs_bmap *bmap, __u64 key)
467{
468 __s64 diff;
469
470 diff = key - bmap->b_last_allocated_key;
471 if ((nilfs_bmap_keydiff_abs(diff) < NILFS_INODE_BMAP_SIZE) &&
472 (bmap->b_last_allocated_ptr != NILFS_BMAP_INVALID_PTR) &&
473 (bmap->b_last_allocated_ptr + diff > 0))
474 return bmap->b_last_allocated_ptr + diff;
475 else
476 return NILFS_BMAP_INVALID_PTR;
477}
478
479static struct inode *nilfs_bmap_get_dat(const struct nilfs_bmap *bmap)
480{
481 return nilfs_dat_inode(NILFS_I_NILFS(bmap->b_inode));
482}
483
484#define NILFS_BMAP_GROUP_DIV 8
485__u64 nilfs_bmap_find_target_in_group(const struct nilfs_bmap *bmap)
486{
487 struct inode *dat = nilfs_bmap_get_dat(bmap);
488 unsigned long entries_per_group = nilfs_palloc_entries_per_group(dat);
489 unsigned long group = bmap->b_inode->i_ino / entries_per_group;
490
491 return group * entries_per_group +
492 (bmap->b_inode->i_ino % NILFS_BMAP_GROUP_DIV) *
493 (entries_per_group / NILFS_BMAP_GROUP_DIV);
494}
495
496static int nilfs_bmap_prepare_alloc_v(struct nilfs_bmap *bmap,
497 union nilfs_bmap_ptr_req *req)
498{
499 return nilfs_dat_prepare_alloc(nilfs_bmap_get_dat(bmap), &req->bpr_req);
500}
501
502static void nilfs_bmap_commit_alloc_v(struct nilfs_bmap *bmap,
503 union nilfs_bmap_ptr_req *req)
504{
505 nilfs_dat_commit_alloc(nilfs_bmap_get_dat(bmap), &req->bpr_req);
506}
507
508static void nilfs_bmap_abort_alloc_v(struct nilfs_bmap *bmap,
509 union nilfs_bmap_ptr_req *req)
510{
511 nilfs_dat_abort_alloc(nilfs_bmap_get_dat(bmap), &req->bpr_req);
512}
513
514static int nilfs_bmap_prepare_start_v(struct nilfs_bmap *bmap,
515 union nilfs_bmap_ptr_req *req)
516{
517 return nilfs_dat_prepare_start(nilfs_bmap_get_dat(bmap), &req->bpr_req);
518}
519
520static void nilfs_bmap_commit_start_v(struct nilfs_bmap *bmap,
521 union nilfs_bmap_ptr_req *req,
522 sector_t blocknr)
523{
524 nilfs_dat_commit_start(nilfs_bmap_get_dat(bmap), &req->bpr_req,
525 blocknr);
526}
527
528static void nilfs_bmap_abort_start_v(struct nilfs_bmap *bmap,
529 union nilfs_bmap_ptr_req *req)
530{
531 nilfs_dat_abort_start(nilfs_bmap_get_dat(bmap), &req->bpr_req);
532}
533
534static int nilfs_bmap_prepare_end_v(struct nilfs_bmap *bmap,
535 union nilfs_bmap_ptr_req *req)
536{
537 return nilfs_dat_prepare_end(nilfs_bmap_get_dat(bmap), &req->bpr_req);
538}
539
540static void nilfs_bmap_commit_end_v(struct nilfs_bmap *bmap,
541 union nilfs_bmap_ptr_req *req)
542{
543 nilfs_dat_commit_end(nilfs_bmap_get_dat(bmap), &req->bpr_req, 0);
544}
545
546static void nilfs_bmap_commit_end_vmdt(struct nilfs_bmap *bmap,
547 union nilfs_bmap_ptr_req *req)
548{
549 nilfs_dat_commit_end(nilfs_bmap_get_dat(bmap), &req->bpr_req, 1);
550}
551
552static void nilfs_bmap_abort_end_v(struct nilfs_bmap *bmap,
553 union nilfs_bmap_ptr_req *req)
554{
555 nilfs_dat_abort_end(nilfs_bmap_get_dat(bmap), &req->bpr_req);
556}
557
558int nilfs_bmap_move_v(const struct nilfs_bmap *bmap, __u64 vblocknr,
559 sector_t blocknr)
560{
561 return nilfs_dat_move(nilfs_bmap_get_dat(bmap), vblocknr, blocknr);
562}
563
564int nilfs_bmap_mark_dirty(const struct nilfs_bmap *bmap, __u64 vblocknr)
565{
566 return nilfs_dat_mark_dirty(nilfs_bmap_get_dat(bmap), vblocknr);
567}
568
569int nilfs_bmap_prepare_update(struct nilfs_bmap *bmap,
570 union nilfs_bmap_ptr_req *oldreq,
571 union nilfs_bmap_ptr_req *newreq)
572{
573 int ret;
574
575 ret = bmap->b_pops->bpop_prepare_end_ptr(bmap, oldreq);
576 if (ret < 0)
577 return ret;
578 ret = bmap->b_pops->bpop_prepare_alloc_ptr(bmap, newreq);
579 if (ret < 0)
580 bmap->b_pops->bpop_abort_end_ptr(bmap, oldreq);
581
582 return ret;
583}
584
585void nilfs_bmap_commit_update(struct nilfs_bmap *bmap,
586 union nilfs_bmap_ptr_req *oldreq,
587 union nilfs_bmap_ptr_req *newreq)
588{
589 bmap->b_pops->bpop_commit_end_ptr(bmap, oldreq);
590 bmap->b_pops->bpop_commit_alloc_ptr(bmap, newreq);
591}
592
593void nilfs_bmap_abort_update(struct nilfs_bmap *bmap,
594 union nilfs_bmap_ptr_req *oldreq,
595 union nilfs_bmap_ptr_req *newreq)
596{
597 bmap->b_pops->bpop_abort_end_ptr(bmap, oldreq);
598 bmap->b_pops->bpop_abort_alloc_ptr(bmap, newreq);
599}
600
601static int nilfs_bmap_translate_v(const struct nilfs_bmap *bmap, __u64 ptr,
602 __u64 *ptrp)
603{
604 sector_t blocknr;
605 int ret;
606
607 ret = nilfs_dat_translate(nilfs_bmap_get_dat(bmap), ptr, &blocknr);
608 if (ret < 0)
609 return ret;
610 if (ptrp != NULL)
611 *ptrp = blocknr;
612 return 0;
613}
614
615static int nilfs_bmap_prepare_alloc_p(struct nilfs_bmap *bmap,
616 union nilfs_bmap_ptr_req *req)
617{
618 /* ignore target ptr */
619 req->bpr_ptr = bmap->b_last_allocated_ptr++;
620 return 0;
621}
622
623static void nilfs_bmap_commit_alloc_p(struct nilfs_bmap *bmap,
624 union nilfs_bmap_ptr_req *req)
625{
626 /* do nothing */
627}
628
629static void nilfs_bmap_abort_alloc_p(struct nilfs_bmap *bmap,
630 union nilfs_bmap_ptr_req *req)
631{
632 bmap->b_last_allocated_ptr--;
633}
634
635static const struct nilfs_bmap_ptr_operations nilfs_bmap_ptr_ops_v = {
636 .bpop_prepare_alloc_ptr = nilfs_bmap_prepare_alloc_v,
637 .bpop_commit_alloc_ptr = nilfs_bmap_commit_alloc_v,
638 .bpop_abort_alloc_ptr = nilfs_bmap_abort_alloc_v,
639 .bpop_prepare_start_ptr = nilfs_bmap_prepare_start_v,
640 .bpop_commit_start_ptr = nilfs_bmap_commit_start_v,
641 .bpop_abort_start_ptr = nilfs_bmap_abort_start_v,
642 .bpop_prepare_end_ptr = nilfs_bmap_prepare_end_v,
643 .bpop_commit_end_ptr = nilfs_bmap_commit_end_v,
644 .bpop_abort_end_ptr = nilfs_bmap_abort_end_v,
645
646 .bpop_translate = nilfs_bmap_translate_v,
647};
648
649static const struct nilfs_bmap_ptr_operations nilfs_bmap_ptr_ops_vmdt = {
650 .bpop_prepare_alloc_ptr = nilfs_bmap_prepare_alloc_v,
651 .bpop_commit_alloc_ptr = nilfs_bmap_commit_alloc_v,
652 .bpop_abort_alloc_ptr = nilfs_bmap_abort_alloc_v,
653 .bpop_prepare_start_ptr = nilfs_bmap_prepare_start_v,
654 .bpop_commit_start_ptr = nilfs_bmap_commit_start_v,
655 .bpop_abort_start_ptr = nilfs_bmap_abort_start_v,
656 .bpop_prepare_end_ptr = nilfs_bmap_prepare_end_v,
657 .bpop_commit_end_ptr = nilfs_bmap_commit_end_vmdt,
658 .bpop_abort_end_ptr = nilfs_bmap_abort_end_v,
659
660 .bpop_translate = nilfs_bmap_translate_v,
661};
662
663static const struct nilfs_bmap_ptr_operations nilfs_bmap_ptr_ops_p = {
664 .bpop_prepare_alloc_ptr = nilfs_bmap_prepare_alloc_p,
665 .bpop_commit_alloc_ptr = nilfs_bmap_commit_alloc_p,
666 .bpop_abort_alloc_ptr = nilfs_bmap_abort_alloc_p,
667 .bpop_prepare_start_ptr = NULL,
668 .bpop_commit_start_ptr = NULL,
669 .bpop_abort_start_ptr = NULL,
670 .bpop_prepare_end_ptr = NULL,
671 .bpop_commit_end_ptr = NULL,
672 .bpop_abort_end_ptr = NULL,
673
674 .bpop_translate = NULL,
675};
676
677static const struct nilfs_bmap_ptr_operations nilfs_bmap_ptr_ops_gc = {
678 .bpop_prepare_alloc_ptr = NULL,
679 .bpop_commit_alloc_ptr = NULL,
680 .bpop_abort_alloc_ptr = NULL,
681 .bpop_prepare_start_ptr = NULL,
682 .bpop_commit_start_ptr = NULL,
683 .bpop_abort_start_ptr = NULL,
684 .bpop_prepare_end_ptr = NULL,
685 .bpop_commit_end_ptr = NULL,
686 .bpop_abort_end_ptr = NULL,
687
688 .bpop_translate = NULL,
689};
690
691/**
692 * nilfs_bmap_read - read a bmap from an inode
693 * @bmap: bmap
694 * @raw_inode: on-disk inode
695 *
696 * Description: nilfs_bmap_read() initializes the bmap @bmap.
697 *
698 * Return Value: On success, 0 is returned. On error, the following negative
699 * error code is returned.
700 *
701 * %-ENOMEM - Insufficient amount of memory available.
702 */
703int nilfs_bmap_read(struct nilfs_bmap *bmap, struct nilfs_inode *raw_inode)
704{
705 if (raw_inode == NULL)
706 memset(bmap->b_u.u_data, 0, NILFS_BMAP_SIZE);
707 else
708 memcpy(bmap->b_u.u_data, raw_inode->i_bmap, NILFS_BMAP_SIZE);
709
710 init_rwsem(&bmap->b_sem);
711 bmap->b_state = 0;
712 bmap->b_inode = &NILFS_BMAP_I(bmap)->vfs_inode;
713 switch (bmap->b_inode->i_ino) {
714 case NILFS_DAT_INO:
715 bmap->b_pops = &nilfs_bmap_ptr_ops_p;
716 bmap->b_last_allocated_key = 0; /* XXX: use macro */
717 bmap->b_last_allocated_ptr = NILFS_BMAP_NEW_PTR_INIT;
718 break;
719 case NILFS_CPFILE_INO:
720 case NILFS_SUFILE_INO:
721 bmap->b_pops = &nilfs_bmap_ptr_ops_vmdt;
722 bmap->b_last_allocated_key = 0; /* XXX: use macro */
723 bmap->b_last_allocated_ptr = NILFS_BMAP_INVALID_PTR;
724 break;
725 default:
726 bmap->b_pops = &nilfs_bmap_ptr_ops_v;
727 bmap->b_last_allocated_key = 0; /* XXX: use macro */
728 bmap->b_last_allocated_ptr = NILFS_BMAP_INVALID_PTR;
729 break;
730 }
731
732 return (bmap->b_u.u_flags & NILFS_BMAP_LARGE) ?
733 nilfs_btree_init(bmap,
734 NILFS_BMAP_LARGE_LOW,
735 NILFS_BMAP_LARGE_HIGH) :
736 nilfs_direct_init(bmap,
737 NILFS_BMAP_SMALL_LOW,
738 NILFS_BMAP_SMALL_HIGH);
739}
740
741/**
742 * nilfs_bmap_write - write back a bmap to an inode
743 * @bmap: bmap
744 * @raw_inode: on-disk inode
745 *
746 * Description: nilfs_bmap_write() stores @bmap in @raw_inode.
747 */
748void nilfs_bmap_write(struct nilfs_bmap *bmap, struct nilfs_inode *raw_inode)
749{
750 down_write(&bmap->b_sem);
751 memcpy(raw_inode->i_bmap, bmap->b_u.u_data,
752 NILFS_INODE_BMAP_SIZE * sizeof(__le64));
753 if (bmap->b_inode->i_ino == NILFS_DAT_INO)
754 bmap->b_last_allocated_ptr = NILFS_BMAP_NEW_PTR_INIT;
755
756 up_write(&bmap->b_sem);
757}
758
759void nilfs_bmap_init_gc(struct nilfs_bmap *bmap)
760{
761 memset(&bmap->b_u, 0, NILFS_BMAP_SIZE);
762 init_rwsem(&bmap->b_sem);
763 bmap->b_inode = &NILFS_BMAP_I(bmap)->vfs_inode;
764 bmap->b_pops = &nilfs_bmap_ptr_ops_gc;
765 bmap->b_last_allocated_key = 0;
766 bmap->b_last_allocated_ptr = NILFS_BMAP_INVALID_PTR;
767 bmap->b_state = 0;
768 nilfs_btree_init_gc(bmap);
769}
770
771void nilfs_bmap_init_gcdat(struct nilfs_bmap *gcbmap, struct nilfs_bmap *bmap)
772{
773 memcpy(gcbmap, bmap, sizeof(union nilfs_bmap_union));
774 init_rwsem(&gcbmap->b_sem);
775 gcbmap->b_inode = &NILFS_BMAP_I(gcbmap)->vfs_inode;
776}
777
778void nilfs_bmap_commit_gcdat(struct nilfs_bmap *gcbmap, struct nilfs_bmap *bmap)
779{
780 memcpy(bmap, gcbmap, sizeof(union nilfs_bmap_union));
781 init_rwsem(&bmap->b_sem);
782 bmap->b_inode = &NILFS_BMAP_I(bmap)->vfs_inode;
783}
diff --git a/fs/nilfs2/bmap.h b/fs/nilfs2/bmap.h
new file mode 100644
index 000000000000..4f2708abb1ba
--- /dev/null
+++ b/fs/nilfs2/bmap.h
@@ -0,0 +1,244 @@
1/*
2 * bmap.h - NILFS block mapping.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_BMAP_H
24#define _NILFS_BMAP_H
25
26#include <linux/types.h>
27#include <linux/fs.h>
28#include <linux/buffer_head.h>
29#include <linux/nilfs2_fs.h>
30#include "alloc.h"
31
32#define NILFS_BMAP_INVALID_PTR 0
33
34#define nilfs_bmap_dkey_to_key(dkey) le64_to_cpu(dkey)
35#define nilfs_bmap_key_to_dkey(key) cpu_to_le64(key)
36#define nilfs_bmap_dptr_to_ptr(dptr) le64_to_cpu(dptr)
37#define nilfs_bmap_ptr_to_dptr(ptr) cpu_to_le64(ptr)
38
39#define nilfs_bmap_keydiff_abs(diff) ((diff) < 0 ? -(diff) : (diff))
40
41
42struct nilfs_bmap;
43
44/**
45 * union nilfs_bmap_ptr_req - request for bmap ptr
46 * @bpr_ptr: bmap pointer
47 * @bpr_req: request for persistent allocator
48 */
49union nilfs_bmap_ptr_req {
50 __u64 bpr_ptr;
51 struct nilfs_palloc_req bpr_req;
52};
53
54/**
55 * struct nilfs_bmap_stats - bmap statistics
56 * @bs_nblocks: number of blocks created or deleted
57 */
58struct nilfs_bmap_stats {
59 unsigned int bs_nblocks;
60};
61
62/**
63 * struct nilfs_bmap_operations - bmap operation table
64 */
65struct nilfs_bmap_operations {
66 int (*bop_lookup)(const struct nilfs_bmap *, __u64, int, __u64 *);
67 int (*bop_insert)(struct nilfs_bmap *, __u64, __u64);
68 int (*bop_delete)(struct nilfs_bmap *, __u64);
69 void (*bop_clear)(struct nilfs_bmap *);
70
71 int (*bop_propagate)(const struct nilfs_bmap *, struct buffer_head *);
72 void (*bop_lookup_dirty_buffers)(struct nilfs_bmap *,
73 struct list_head *);
74
75 int (*bop_assign)(struct nilfs_bmap *,
76 struct buffer_head **,
77 sector_t,
78 union nilfs_binfo *);
79 int (*bop_mark)(struct nilfs_bmap *, __u64, int);
80
81 /* The following functions are internal use only. */
82 int (*bop_last_key)(const struct nilfs_bmap *, __u64 *);
83 int (*bop_check_insert)(const struct nilfs_bmap *, __u64);
84 int (*bop_check_delete)(struct nilfs_bmap *, __u64);
85 int (*bop_gather_data)(struct nilfs_bmap *, __u64 *, __u64 *, int);
86};
87
88
89/**
90 * struct nilfs_bmap_ptr_operations - bmap ptr operation table
91 */
92struct nilfs_bmap_ptr_operations {
93 int (*bpop_prepare_alloc_ptr)(struct nilfs_bmap *,
94 union nilfs_bmap_ptr_req *);
95 void (*bpop_commit_alloc_ptr)(struct nilfs_bmap *,
96 union nilfs_bmap_ptr_req *);
97 void (*bpop_abort_alloc_ptr)(struct nilfs_bmap *,
98 union nilfs_bmap_ptr_req *);
99 int (*bpop_prepare_start_ptr)(struct nilfs_bmap *,
100 union nilfs_bmap_ptr_req *);
101 void (*bpop_commit_start_ptr)(struct nilfs_bmap *,
102 union nilfs_bmap_ptr_req *,
103 sector_t);
104 void (*bpop_abort_start_ptr)(struct nilfs_bmap *,
105 union nilfs_bmap_ptr_req *);
106 int (*bpop_prepare_end_ptr)(struct nilfs_bmap *,
107 union nilfs_bmap_ptr_req *);
108 void (*bpop_commit_end_ptr)(struct nilfs_bmap *,
109 union nilfs_bmap_ptr_req *);
110 void (*bpop_abort_end_ptr)(struct nilfs_bmap *,
111 union nilfs_bmap_ptr_req *);
112
113 int (*bpop_translate)(const struct nilfs_bmap *, __u64, __u64 *);
114};
115
116
117#define NILFS_BMAP_SIZE (NILFS_INODE_BMAP_SIZE * sizeof(__le64))
118#define NILFS_BMAP_KEY_BIT (sizeof(unsigned long) * 8 /* CHAR_BIT */)
119#define NILFS_BMAP_NEW_PTR_INIT \
120 (1UL << (sizeof(unsigned long) * 8 /* CHAR_BIT */ - 1))
121
122static inline int nilfs_bmap_is_new_ptr(unsigned long ptr)
123{
124 return !!(ptr & NILFS_BMAP_NEW_PTR_INIT);
125}
126
127
128/**
129 * struct nilfs_bmap - bmap structure
130 * @b_u: raw data
131 * @b_sem: semaphore
132 * @b_inode: owner of bmap
133 * @b_ops: bmap operation table
134 * @b_pops: bmap ptr operation table
135 * @b_low: low watermark of conversion
136 * @b_high: high watermark of conversion
137 * @b_last_allocated_key: last allocated key for data block
138 * @b_last_allocated_ptr: last allocated ptr for data block
139 * @b_state: state
140 */
141struct nilfs_bmap {
142 union {
143 __u8 u_flags;
144 __le64 u_data[NILFS_BMAP_SIZE / sizeof(__le64)];
145 } b_u;
146 struct rw_semaphore b_sem;
147 struct inode *b_inode;
148 const struct nilfs_bmap_operations *b_ops;
149 const struct nilfs_bmap_ptr_operations *b_pops;
150 __u64 b_low;
151 __u64 b_high;
152 __u64 b_last_allocated_key;
153 __u64 b_last_allocated_ptr;
154 int b_state;
155};
156
157/* state */
158#define NILFS_BMAP_DIRTY 0x00000001
159
160
161int nilfs_bmap_test_and_clear_dirty(struct nilfs_bmap *);
162int nilfs_bmap_read(struct nilfs_bmap *, struct nilfs_inode *);
163void nilfs_bmap_write(struct nilfs_bmap *, struct nilfs_inode *);
164int nilfs_bmap_lookup(struct nilfs_bmap *, unsigned long, unsigned long *);
165int nilfs_bmap_insert(struct nilfs_bmap *, unsigned long, unsigned long);
166int nilfs_bmap_delete(struct nilfs_bmap *, unsigned long);
167int nilfs_bmap_last_key(struct nilfs_bmap *, unsigned long *);
168int nilfs_bmap_truncate(struct nilfs_bmap *, unsigned long);
169void nilfs_bmap_clear(struct nilfs_bmap *);
170int nilfs_bmap_propagate(struct nilfs_bmap *, struct buffer_head *);
171void nilfs_bmap_lookup_dirty_buffers(struct nilfs_bmap *, struct list_head *);
172int nilfs_bmap_assign(struct nilfs_bmap *, struct buffer_head **,
173 unsigned long, union nilfs_binfo *);
174int nilfs_bmap_lookup_at_level(struct nilfs_bmap *, __u64, int, __u64 *);
175int nilfs_bmap_mark(struct nilfs_bmap *, __u64, int);
176
177void nilfs_bmap_init_gc(struct nilfs_bmap *);
178void nilfs_bmap_init_gcdat(struct nilfs_bmap *, struct nilfs_bmap *);
179void nilfs_bmap_commit_gcdat(struct nilfs_bmap *, struct nilfs_bmap *);
180
181
182/*
183 * Internal use only
184 */
185
186int nilfs_bmap_move_v(const struct nilfs_bmap *, __u64, sector_t);
187int nilfs_bmap_mark_dirty(const struct nilfs_bmap *, __u64);
188
189
190__u64 nilfs_bmap_data_get_key(const struct nilfs_bmap *,
191 const struct buffer_head *);
192
193__u64 nilfs_bmap_find_target_seq(const struct nilfs_bmap *, __u64);
194__u64 nilfs_bmap_find_target_in_group(const struct nilfs_bmap *);
195
196int nilfs_bmap_prepare_update(struct nilfs_bmap *,
197 union nilfs_bmap_ptr_req *,
198 union nilfs_bmap_ptr_req *);
199void nilfs_bmap_commit_update(struct nilfs_bmap *,
200 union nilfs_bmap_ptr_req *,
201 union nilfs_bmap_ptr_req *);
202void nilfs_bmap_abort_update(struct nilfs_bmap *,
203 union nilfs_bmap_ptr_req *,
204 union nilfs_bmap_ptr_req *);
205
206void nilfs_bmap_add_blocks(const struct nilfs_bmap *, int);
207void nilfs_bmap_sub_blocks(const struct nilfs_bmap *, int);
208
209
210int nilfs_bmap_get_block(const struct nilfs_bmap *, __u64,
211 struct buffer_head **);
212void nilfs_bmap_put_block(const struct nilfs_bmap *, struct buffer_head *);
213int nilfs_bmap_get_new_block(const struct nilfs_bmap *, __u64,
214 struct buffer_head **);
215void nilfs_bmap_delete_block(const struct nilfs_bmap *, struct buffer_head *);
216
217
218/* Assume that bmap semaphore is locked. */
219static inline int nilfs_bmap_dirty(const struct nilfs_bmap *bmap)
220{
221 return !!(bmap->b_state & NILFS_BMAP_DIRTY);
222}
223
224/* Assume that bmap semaphore is locked. */
225static inline void nilfs_bmap_set_dirty(struct nilfs_bmap *bmap)
226{
227 bmap->b_state |= NILFS_BMAP_DIRTY;
228}
229
230/* Assume that bmap semaphore is locked. */
231static inline void nilfs_bmap_clear_dirty(struct nilfs_bmap *bmap)
232{
233 bmap->b_state &= ~NILFS_BMAP_DIRTY;
234}
235
236
237#define NILFS_BMAP_LARGE 0x1
238
239#define NILFS_BMAP_SMALL_LOW NILFS_DIRECT_KEY_MIN
240#define NILFS_BMAP_SMALL_HIGH NILFS_DIRECT_KEY_MAX
241#define NILFS_BMAP_LARGE_LOW NILFS_BTREE_ROOT_NCHILDREN_MAX
242#define NILFS_BMAP_LARGE_HIGH NILFS_BTREE_KEY_MAX
243
244#endif /* _NILFS_BMAP_H */
diff --git a/fs/nilfs2/bmap_union.h b/fs/nilfs2/bmap_union.h
new file mode 100644
index 000000000000..d41509bff47b
--- /dev/null
+++ b/fs/nilfs2/bmap_union.h
@@ -0,0 +1,42 @@
1/*
2 * bmap_union.h - NILFS block mapping.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_BMAP_UNION_H
24#define _NILFS_BMAP_UNION_H
25
26#include "bmap.h"
27#include "direct.h"
28#include "btree.h"
29
30/**
31 * nilfs_bmap_union -
32 * @bi_bmap: bmap structure
33 * @bi_btree: direct map structure
34 * @bi_direct: B-tree structure
35 */
36union nilfs_bmap_union {
37 struct nilfs_bmap bi_bmap;
38 struct nilfs_direct bi_direct;
39 struct nilfs_btree bi_btree;
40};
41
42#endif /* _NILFS_BMAP_UNION_H */
diff --git a/fs/nilfs2/btnode.c b/fs/nilfs2/btnode.c
new file mode 100644
index 000000000000..4cc07b2c30e0
--- /dev/null
+++ b/fs/nilfs2/btnode.c
@@ -0,0 +1,316 @@
1/*
2 * btnode.c - NILFS B-tree node cache
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * This file was originally written by Seiji Kihara <kihara@osrg.net>
21 * and fully revised by Ryusuke Konishi <ryusuke@osrg.net> for
22 * stabilization and simplification.
23 *
24 */
25
26#include <linux/types.h>
27#include <linux/buffer_head.h>
28#include <linux/mm.h>
29#include <linux/backing-dev.h>
30#include "nilfs.h"
31#include "mdt.h"
32#include "dat.h"
33#include "page.h"
34#include "btnode.h"
35
36
37void nilfs_btnode_cache_init_once(struct address_space *btnc)
38{
39 INIT_RADIX_TREE(&btnc->page_tree, GFP_ATOMIC);
40 spin_lock_init(&btnc->tree_lock);
41 INIT_LIST_HEAD(&btnc->private_list);
42 spin_lock_init(&btnc->private_lock);
43
44 spin_lock_init(&btnc->i_mmap_lock);
45 INIT_RAW_PRIO_TREE_ROOT(&btnc->i_mmap);
46 INIT_LIST_HEAD(&btnc->i_mmap_nonlinear);
47}
48
49static struct address_space_operations def_btnode_aops;
50
51void nilfs_btnode_cache_init(struct address_space *btnc)
52{
53 btnc->host = NULL; /* can safely set to host inode ? */
54 btnc->flags = 0;
55 mapping_set_gfp_mask(btnc, GFP_NOFS);
56 btnc->assoc_mapping = NULL;
57 btnc->backing_dev_info = &default_backing_dev_info;
58 btnc->a_ops = &def_btnode_aops;
59}
60
61void nilfs_btnode_cache_clear(struct address_space *btnc)
62{
63 invalidate_mapping_pages(btnc, 0, -1);
64 truncate_inode_pages(btnc, 0);
65}
66
67int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr,
68 sector_t pblocknr, struct buffer_head **pbh,
69 int newblk)
70{
71 struct buffer_head *bh;
72 struct inode *inode = NILFS_BTNC_I(btnc);
73 int err;
74
75 bh = nilfs_grab_buffer(inode, btnc, blocknr, 1 << BH_NILFS_Node);
76 if (unlikely(!bh))
77 return -ENOMEM;
78
79 err = -EEXIST; /* internal code */
80 if (newblk) {
81 if (unlikely(buffer_mapped(bh) || buffer_uptodate(bh) ||
82 buffer_dirty(bh))) {
83 brelse(bh);
84 BUG();
85 }
86 bh->b_bdev = NILFS_I_NILFS(inode)->ns_bdev;
87 bh->b_blocknr = blocknr;
88 set_buffer_mapped(bh);
89 set_buffer_uptodate(bh);
90 goto found;
91 }
92
93 if (buffer_uptodate(bh) || buffer_dirty(bh))
94 goto found;
95
96 if (pblocknr == 0) {
97 pblocknr = blocknr;
98 if (inode->i_ino != NILFS_DAT_INO) {
99 struct inode *dat =
100 nilfs_dat_inode(NILFS_I_NILFS(inode));
101
102 /* blocknr is a virtual block number */
103 err = nilfs_dat_translate(dat, blocknr, &pblocknr);
104 if (unlikely(err)) {
105 brelse(bh);
106 goto out_locked;
107 }
108 }
109 }
110 lock_buffer(bh);
111 if (buffer_uptodate(bh)) {
112 unlock_buffer(bh);
113 err = -EEXIST; /* internal code */
114 goto found;
115 }
116 set_buffer_mapped(bh);
117 bh->b_bdev = NILFS_I_NILFS(inode)->ns_bdev;
118 bh->b_blocknr = pblocknr; /* set block address for read */
119 bh->b_end_io = end_buffer_read_sync;
120 get_bh(bh);
121 submit_bh(READ, bh);
122 bh->b_blocknr = blocknr; /* set back to the given block address */
123 err = 0;
124found:
125 *pbh = bh;
126
127out_locked:
128 unlock_page(bh->b_page);
129 page_cache_release(bh->b_page);
130 return err;
131}
132
133int nilfs_btnode_get(struct address_space *btnc, __u64 blocknr,
134 sector_t pblocknr, struct buffer_head **pbh, int newblk)
135{
136 struct buffer_head *bh;
137 int err;
138
139 err = nilfs_btnode_submit_block(btnc, blocknr, pblocknr, pbh, newblk);
140 if (err == -EEXIST) /* internal code (cache hit) */
141 return 0;
142 if (unlikely(err))
143 return err;
144
145 bh = *pbh;
146 wait_on_buffer(bh);
147 if (!buffer_uptodate(bh)) {
148 brelse(bh);
149 return -EIO;
150 }
151 return 0;
152}
153
154/**
155 * nilfs_btnode_delete - delete B-tree node buffer
156 * @bh: buffer to be deleted
157 *
158 * nilfs_btnode_delete() invalidates the specified buffer and delete the page
159 * including the buffer if the page gets unbusy.
160 */
161void nilfs_btnode_delete(struct buffer_head *bh)
162{
163 struct address_space *mapping;
164 struct page *page = bh->b_page;
165 pgoff_t index = page_index(page);
166 int still_dirty;
167
168 page_cache_get(page);
169 lock_page(page);
170 wait_on_page_writeback(page);
171
172 nilfs_forget_buffer(bh);
173 still_dirty = PageDirty(page);
174 mapping = page->mapping;
175 unlock_page(page);
176 page_cache_release(page);
177
178 if (!still_dirty && mapping)
179 invalidate_inode_pages2_range(mapping, index, index);
180}
181
182/**
183 * nilfs_btnode_prepare_change_key
184 * prepare to move contents of the block for old key to one of new key.
185 * the old buffer will not be removed, but might be reused for new buffer.
186 * it might return -ENOMEM because of memory allocation errors,
187 * and might return -EIO because of disk read errors.
188 */
189int nilfs_btnode_prepare_change_key(struct address_space *btnc,
190 struct nilfs_btnode_chkey_ctxt *ctxt)
191{
192 struct buffer_head *obh, *nbh;
193 struct inode *inode = NILFS_BTNC_I(btnc);
194 __u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;
195 int err;
196
197 if (oldkey == newkey)
198 return 0;
199
200 obh = ctxt->bh;
201 ctxt->newbh = NULL;
202
203 if (inode->i_blkbits == PAGE_CACHE_SHIFT) {
204 lock_page(obh->b_page);
205 /*
206 * We cannot call radix_tree_preload for the kernels older
207 * than 2.6.23, because it is not exported for modules.
208 */
209 err = radix_tree_preload(GFP_NOFS & ~__GFP_HIGHMEM);
210 if (err)
211 goto failed_unlock;
212 /* BUG_ON(oldkey != obh->b_page->index); */
213 if (unlikely(oldkey != obh->b_page->index))
214 NILFS_PAGE_BUG(obh->b_page,
215 "invalid oldkey %lld (newkey=%lld)",
216 (unsigned long long)oldkey,
217 (unsigned long long)newkey);
218
219retry:
220 spin_lock_irq(&btnc->tree_lock);
221 err = radix_tree_insert(&btnc->page_tree, newkey, obh->b_page);
222 spin_unlock_irq(&btnc->tree_lock);
223 /*
224 * Note: page->index will not change to newkey until
225 * nilfs_btnode_commit_change_key() will be called.
226 * To protect the page in intermediate state, the page lock
227 * is held.
228 */
229 radix_tree_preload_end();
230 if (!err)
231 return 0;
232 else if (err != -EEXIST)
233 goto failed_unlock;
234
235 err = invalidate_inode_pages2_range(btnc, newkey, newkey);
236 if (!err)
237 goto retry;
238 /* fallback to copy mode */
239 unlock_page(obh->b_page);
240 }
241
242 err = nilfs_btnode_get(btnc, newkey, 0, &nbh, 1);
243 if (likely(!err)) {
244 BUG_ON(nbh == obh);
245 ctxt->newbh = nbh;
246 }
247 return err;
248
249 failed_unlock:
250 unlock_page(obh->b_page);
251 return err;
252}
253
254/**
255 * nilfs_btnode_commit_change_key
256 * commit the change_key operation prepared by prepare_change_key().
257 */
258void nilfs_btnode_commit_change_key(struct address_space *btnc,
259 struct nilfs_btnode_chkey_ctxt *ctxt)
260{
261 struct buffer_head *obh = ctxt->bh, *nbh = ctxt->newbh;
262 __u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;
263 struct page *opage;
264
265 if (oldkey == newkey)
266 return;
267
268 if (nbh == NULL) { /* blocksize == pagesize */
269 opage = obh->b_page;
270 if (unlikely(oldkey != opage->index))
271 NILFS_PAGE_BUG(opage,
272 "invalid oldkey %lld (newkey=%lld)",
273 (unsigned long long)oldkey,
274 (unsigned long long)newkey);
275 if (!test_set_buffer_dirty(obh) && TestSetPageDirty(opage))
276 BUG();
277
278 spin_lock_irq(&btnc->tree_lock);
279 radix_tree_delete(&btnc->page_tree, oldkey);
280 radix_tree_tag_set(&btnc->page_tree, newkey,
281 PAGECACHE_TAG_DIRTY);
282 spin_unlock_irq(&btnc->tree_lock);
283
284 opage->index = obh->b_blocknr = newkey;
285 unlock_page(opage);
286 } else {
287 nilfs_copy_buffer(nbh, obh);
288 nilfs_btnode_mark_dirty(nbh);
289
290 nbh->b_blocknr = newkey;
291 ctxt->bh = nbh;
292 nilfs_btnode_delete(obh); /* will decrement bh->b_count */
293 }
294}
295
296/**
297 * nilfs_btnode_abort_change_key
298 * abort the change_key operation prepared by prepare_change_key().
299 */
300void nilfs_btnode_abort_change_key(struct address_space *btnc,
301 struct nilfs_btnode_chkey_ctxt *ctxt)
302{
303 struct buffer_head *nbh = ctxt->newbh;
304 __u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;
305
306 if (oldkey == newkey)
307 return;
308
309 if (nbh == NULL) { /* blocksize == pagesize */
310 spin_lock_irq(&btnc->tree_lock);
311 radix_tree_delete(&btnc->page_tree, newkey);
312 spin_unlock_irq(&btnc->tree_lock);
313 unlock_page(ctxt->bh->b_page);
314 } else
315 brelse(nbh);
316}
diff --git a/fs/nilfs2/btnode.h b/fs/nilfs2/btnode.h
new file mode 100644
index 000000000000..35faa86444a7
--- /dev/null
+++ b/fs/nilfs2/btnode.h
@@ -0,0 +1,58 @@
1/*
2 * btnode.h - NILFS B-tree node cache
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Seiji Kihara <kihara@osrg.net>
21 * Revised by Ryusuke Konishi <ryusuke@osrg.net>
22 */
23
24#ifndef _NILFS_BTNODE_H
25#define _NILFS_BTNODE_H
26
27#include <linux/types.h>
28#include <linux/buffer_head.h>
29#include <linux/fs.h>
30#include <linux/backing-dev.h>
31
32
33struct nilfs_btnode_chkey_ctxt {
34 __u64 oldkey;
35 __u64 newkey;
36 struct buffer_head *bh;
37 struct buffer_head *newbh;
38};
39
40void nilfs_btnode_cache_init_once(struct address_space *);
41void nilfs_btnode_cache_init(struct address_space *);
42void nilfs_btnode_cache_clear(struct address_space *);
43int nilfs_btnode_submit_block(struct address_space *, __u64, sector_t,
44 struct buffer_head **, int);
45int nilfs_btnode_get(struct address_space *, __u64, sector_t,
46 struct buffer_head **, int);
47void nilfs_btnode_delete(struct buffer_head *);
48int nilfs_btnode_prepare_change_key(struct address_space *,
49 struct nilfs_btnode_chkey_ctxt *);
50void nilfs_btnode_commit_change_key(struct address_space *,
51 struct nilfs_btnode_chkey_ctxt *);
52void nilfs_btnode_abort_change_key(struct address_space *,
53 struct nilfs_btnode_chkey_ctxt *);
54
55#define nilfs_btnode_mark_dirty(bh) nilfs_mark_buffer_dirty(bh)
56
57
58#endif /* _NILFS_BTNODE_H */
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c
new file mode 100644
index 000000000000..6b37a2767293
--- /dev/null
+++ b/fs/nilfs2/btree.c
@@ -0,0 +1,2269 @@
1/*
2 * btree.c - NILFS B-tree.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/slab.h>
24#include <linux/string.h>
25#include <linux/errno.h>
26#include <linux/pagevec.h>
27#include "nilfs.h"
28#include "page.h"
29#include "btnode.h"
30#include "btree.h"
31#include "alloc.h"
32
33/**
34 * struct nilfs_btree_path - A path on which B-tree operations are executed
35 * @bp_bh: buffer head of node block
36 * @bp_sib_bh: buffer head of sibling node block
37 * @bp_index: index of child node
38 * @bp_oldreq: ptr end request for old ptr
39 * @bp_newreq: ptr alloc request for new ptr
40 * @bp_op: rebalance operation
41 */
42struct nilfs_btree_path {
43 struct buffer_head *bp_bh;
44 struct buffer_head *bp_sib_bh;
45 int bp_index;
46 union nilfs_bmap_ptr_req bp_oldreq;
47 union nilfs_bmap_ptr_req bp_newreq;
48 struct nilfs_btnode_chkey_ctxt bp_ctxt;
49 void (*bp_op)(struct nilfs_btree *, struct nilfs_btree_path *,
50 int, __u64 *, __u64 *);
51};
52
53/*
54 * B-tree path operations
55 */
56
57static struct kmem_cache *nilfs_btree_path_cache;
58
59int __init nilfs_btree_path_cache_init(void)
60{
61 nilfs_btree_path_cache =
62 kmem_cache_create("nilfs2_btree_path_cache",
63 sizeof(struct nilfs_btree_path) *
64 NILFS_BTREE_LEVEL_MAX, 0, 0, NULL);
65 return (nilfs_btree_path_cache != NULL) ? 0 : -ENOMEM;
66}
67
68void nilfs_btree_path_cache_destroy(void)
69{
70 kmem_cache_destroy(nilfs_btree_path_cache);
71}
72
73static inline struct nilfs_btree_path *
74nilfs_btree_alloc_path(const struct nilfs_btree *btree)
75{
76 return (struct nilfs_btree_path *)
77 kmem_cache_alloc(nilfs_btree_path_cache, GFP_NOFS);
78}
79
80static inline void nilfs_btree_free_path(const struct nilfs_btree *btree,
81 struct nilfs_btree_path *path)
82{
83 kmem_cache_free(nilfs_btree_path_cache, path);
84}
85
86static void nilfs_btree_init_path(const struct nilfs_btree *btree,
87 struct nilfs_btree_path *path)
88{
89 int level;
90
91 for (level = NILFS_BTREE_LEVEL_DATA;
92 level < NILFS_BTREE_LEVEL_MAX;
93 level++) {
94 path[level].bp_bh = NULL;
95 path[level].bp_sib_bh = NULL;
96 path[level].bp_index = 0;
97 path[level].bp_oldreq.bpr_ptr = NILFS_BMAP_INVALID_PTR;
98 path[level].bp_newreq.bpr_ptr = NILFS_BMAP_INVALID_PTR;
99 path[level].bp_op = NULL;
100 }
101}
102
103static void nilfs_btree_clear_path(const struct nilfs_btree *btree,
104 struct nilfs_btree_path *path)
105{
106 int level;
107
108 for (level = NILFS_BTREE_LEVEL_DATA;
109 level < NILFS_BTREE_LEVEL_MAX;
110 level++) {
111 if (path[level].bp_bh != NULL) {
112 nilfs_bmap_put_block(&btree->bt_bmap,
113 path[level].bp_bh);
114 path[level].bp_bh = NULL;
115 }
116 /* sib_bh is released or deleted by prepare or commit
117 * operations. */
118 path[level].bp_sib_bh = NULL;
119 path[level].bp_index = 0;
120 path[level].bp_oldreq.bpr_ptr = NILFS_BMAP_INVALID_PTR;
121 path[level].bp_newreq.bpr_ptr = NILFS_BMAP_INVALID_PTR;
122 path[level].bp_op = NULL;
123 }
124}
125
126
127/*
128 * B-tree node operations
129 */
130
131static inline int
132nilfs_btree_node_get_flags(const struct nilfs_btree *btree,
133 const struct nilfs_btree_node *node)
134{
135 return node->bn_flags;
136}
137
138static inline void
139nilfs_btree_node_set_flags(struct nilfs_btree *btree,
140 struct nilfs_btree_node *node,
141 int flags)
142{
143 node->bn_flags = flags;
144}
145
146static inline int nilfs_btree_node_root(const struct nilfs_btree *btree,
147 const struct nilfs_btree_node *node)
148{
149 return nilfs_btree_node_get_flags(btree, node) & NILFS_BTREE_NODE_ROOT;
150}
151
152static inline int
153nilfs_btree_node_get_level(const struct nilfs_btree *btree,
154 const struct nilfs_btree_node *node)
155{
156 return node->bn_level;
157}
158
159static inline void
160nilfs_btree_node_set_level(struct nilfs_btree *btree,
161 struct nilfs_btree_node *node,
162 int level)
163{
164 node->bn_level = level;
165}
166
167static inline int
168nilfs_btree_node_get_nchildren(const struct nilfs_btree *btree,
169 const struct nilfs_btree_node *node)
170{
171 return le16_to_cpu(node->bn_nchildren);
172}
173
174static inline void
175nilfs_btree_node_set_nchildren(struct nilfs_btree *btree,
176 struct nilfs_btree_node *node,
177 int nchildren)
178{
179 node->bn_nchildren = cpu_to_le16(nchildren);
180}
181
182static inline int
183nilfs_btree_node_size(const struct nilfs_btree *btree)
184{
185 return 1 << btree->bt_bmap.b_inode->i_blkbits;
186}
187
188static inline int
189nilfs_btree_node_nchildren_min(const struct nilfs_btree *btree,
190 const struct nilfs_btree_node *node)
191{
192 return nilfs_btree_node_root(btree, node) ?
193 NILFS_BTREE_ROOT_NCHILDREN_MIN :
194 NILFS_BTREE_NODE_NCHILDREN_MIN(nilfs_btree_node_size(btree));
195}
196
197static inline int
198nilfs_btree_node_nchildren_max(const struct nilfs_btree *btree,
199 const struct nilfs_btree_node *node)
200{
201 return nilfs_btree_node_root(btree, node) ?
202 NILFS_BTREE_ROOT_NCHILDREN_MAX :
203 NILFS_BTREE_NODE_NCHILDREN_MAX(nilfs_btree_node_size(btree));
204}
205
206static inline __le64 *
207nilfs_btree_node_dkeys(const struct nilfs_btree *btree,
208 const struct nilfs_btree_node *node)
209{
210 return (__le64 *)((char *)(node + 1) +
211 (nilfs_btree_node_root(btree, node) ?
212 0 : NILFS_BTREE_NODE_EXTRA_PAD_SIZE));
213}
214
215static inline __le64 *
216nilfs_btree_node_dptrs(const struct nilfs_btree *btree,
217 const struct nilfs_btree_node *node)
218{
219 return (__le64 *)(nilfs_btree_node_dkeys(btree, node) +
220 nilfs_btree_node_nchildren_max(btree, node));
221}
222
223static inline __u64
224nilfs_btree_node_get_key(const struct nilfs_btree *btree,
225 const struct nilfs_btree_node *node, int index)
226{
227 return nilfs_bmap_dkey_to_key(*(nilfs_btree_node_dkeys(btree, node) +
228 index));
229}
230
231static inline void
232nilfs_btree_node_set_key(struct nilfs_btree *btree,
233 struct nilfs_btree_node *node, int index, __u64 key)
234{
235 *(nilfs_btree_node_dkeys(btree, node) + index) =
236 nilfs_bmap_key_to_dkey(key);
237}
238
239static inline __u64
240nilfs_btree_node_get_ptr(const struct nilfs_btree *btree,
241 const struct nilfs_btree_node *node,
242 int index)
243{
244 return nilfs_bmap_dptr_to_ptr(*(nilfs_btree_node_dptrs(btree, node) +
245 index));
246}
247
248static inline void
249nilfs_btree_node_set_ptr(struct nilfs_btree *btree,
250 struct nilfs_btree_node *node,
251 int index,
252 __u64 ptr)
253{
254 *(nilfs_btree_node_dptrs(btree, node) + index) =
255 nilfs_bmap_ptr_to_dptr(ptr);
256}
257
258static void nilfs_btree_node_init(struct nilfs_btree *btree,
259 struct nilfs_btree_node *node,
260 int flags, int level, int nchildren,
261 const __u64 *keys, const __u64 *ptrs)
262{
263 __le64 *dkeys;
264 __le64 *dptrs;
265 int i;
266
267 nilfs_btree_node_set_flags(btree, node, flags);
268 nilfs_btree_node_set_level(btree, node, level);
269 nilfs_btree_node_set_nchildren(btree, node, nchildren);
270
271 dkeys = nilfs_btree_node_dkeys(btree, node);
272 dptrs = nilfs_btree_node_dptrs(btree, node);
273 for (i = 0; i < nchildren; i++) {
274 dkeys[i] = nilfs_bmap_key_to_dkey(keys[i]);
275 dptrs[i] = nilfs_bmap_ptr_to_dptr(ptrs[i]);
276 }
277}
278
279/* Assume the buffer heads corresponding to left and right are locked. */
280static void nilfs_btree_node_move_left(struct nilfs_btree *btree,
281 struct nilfs_btree_node *left,
282 struct nilfs_btree_node *right,
283 int n)
284{
285 __le64 *ldkeys, *rdkeys;
286 __le64 *ldptrs, *rdptrs;
287 int lnchildren, rnchildren;
288
289 ldkeys = nilfs_btree_node_dkeys(btree, left);
290 ldptrs = nilfs_btree_node_dptrs(btree, left);
291 lnchildren = nilfs_btree_node_get_nchildren(btree, left);
292
293 rdkeys = nilfs_btree_node_dkeys(btree, right);
294 rdptrs = nilfs_btree_node_dptrs(btree, right);
295 rnchildren = nilfs_btree_node_get_nchildren(btree, right);
296
297 memcpy(ldkeys + lnchildren, rdkeys, n * sizeof(*rdkeys));
298 memcpy(ldptrs + lnchildren, rdptrs, n * sizeof(*rdptrs));
299 memmove(rdkeys, rdkeys + n, (rnchildren - n) * sizeof(*rdkeys));
300 memmove(rdptrs, rdptrs + n, (rnchildren - n) * sizeof(*rdptrs));
301
302 lnchildren += n;
303 rnchildren -= n;
304 nilfs_btree_node_set_nchildren(btree, left, lnchildren);
305 nilfs_btree_node_set_nchildren(btree, right, rnchildren);
306}
307
308/* Assume that the buffer heads corresponding to left and right are locked. */
309static void nilfs_btree_node_move_right(struct nilfs_btree *btree,
310 struct nilfs_btree_node *left,
311 struct nilfs_btree_node *right,
312 int n)
313{
314 __le64 *ldkeys, *rdkeys;
315 __le64 *ldptrs, *rdptrs;
316 int lnchildren, rnchildren;
317
318 ldkeys = nilfs_btree_node_dkeys(btree, left);
319 ldptrs = nilfs_btree_node_dptrs(btree, left);
320 lnchildren = nilfs_btree_node_get_nchildren(btree, left);
321
322 rdkeys = nilfs_btree_node_dkeys(btree, right);
323 rdptrs = nilfs_btree_node_dptrs(btree, right);
324 rnchildren = nilfs_btree_node_get_nchildren(btree, right);
325
326 memmove(rdkeys + n, rdkeys, rnchildren * sizeof(*rdkeys));
327 memmove(rdptrs + n, rdptrs, rnchildren * sizeof(*rdptrs));
328 memcpy(rdkeys, ldkeys + lnchildren - n, n * sizeof(*rdkeys));
329 memcpy(rdptrs, ldptrs + lnchildren - n, n * sizeof(*rdptrs));
330
331 lnchildren -= n;
332 rnchildren += n;
333 nilfs_btree_node_set_nchildren(btree, left, lnchildren);
334 nilfs_btree_node_set_nchildren(btree, right, rnchildren);
335}
336
337/* Assume that the buffer head corresponding to node is locked. */
338static void nilfs_btree_node_insert(struct nilfs_btree *btree,
339 struct nilfs_btree_node *node,
340 __u64 key, __u64 ptr, int index)
341{
342 __le64 *dkeys;
343 __le64 *dptrs;
344 int nchildren;
345
346 dkeys = nilfs_btree_node_dkeys(btree, node);
347 dptrs = nilfs_btree_node_dptrs(btree, node);
348 nchildren = nilfs_btree_node_get_nchildren(btree, node);
349 if (index < nchildren) {
350 memmove(dkeys + index + 1, dkeys + index,
351 (nchildren - index) * sizeof(*dkeys));
352 memmove(dptrs + index + 1, dptrs + index,
353 (nchildren - index) * sizeof(*dptrs));
354 }
355 dkeys[index] = nilfs_bmap_key_to_dkey(key);
356 dptrs[index] = nilfs_bmap_ptr_to_dptr(ptr);
357 nchildren++;
358 nilfs_btree_node_set_nchildren(btree, node, nchildren);
359}
360
361/* Assume that the buffer head corresponding to node is locked. */
362static void nilfs_btree_node_delete(struct nilfs_btree *btree,
363 struct nilfs_btree_node *node,
364 __u64 *keyp, __u64 *ptrp, int index)
365{
366 __u64 key;
367 __u64 ptr;
368 __le64 *dkeys;
369 __le64 *dptrs;
370 int nchildren;
371
372 dkeys = nilfs_btree_node_dkeys(btree, node);
373 dptrs = nilfs_btree_node_dptrs(btree, node);
374 key = nilfs_bmap_dkey_to_key(dkeys[index]);
375 ptr = nilfs_bmap_dptr_to_ptr(dptrs[index]);
376 nchildren = nilfs_btree_node_get_nchildren(btree, node);
377 if (keyp != NULL)
378 *keyp = key;
379 if (ptrp != NULL)
380 *ptrp = ptr;
381
382 if (index < nchildren - 1) {
383 memmove(dkeys + index, dkeys + index + 1,
384 (nchildren - index - 1) * sizeof(*dkeys));
385 memmove(dptrs + index, dptrs + index + 1,
386 (nchildren - index - 1) * sizeof(*dptrs));
387 }
388 nchildren--;
389 nilfs_btree_node_set_nchildren(btree, node, nchildren);
390}
391
392static int nilfs_btree_node_lookup(const struct nilfs_btree *btree,
393 const struct nilfs_btree_node *node,
394 __u64 key, int *indexp)
395{
396 __u64 nkey;
397 int index, low, high, s;
398
399 /* binary search */
400 low = 0;
401 high = nilfs_btree_node_get_nchildren(btree, node) - 1;
402 index = 0;
403 s = 0;
404 while (low <= high) {
405 index = (low + high) / 2;
406 nkey = nilfs_btree_node_get_key(btree, node, index);
407 if (nkey == key) {
408 s = 0;
409 goto out;
410 } else if (nkey < key) {
411 low = index + 1;
412 s = -1;
413 } else {
414 high = index - 1;
415 s = 1;
416 }
417 }
418
419 /* adjust index */
420 if (nilfs_btree_node_get_level(btree, node) >
421 NILFS_BTREE_LEVEL_NODE_MIN) {
422 if ((s > 0) && (index > 0))
423 index--;
424 } else if (s < 0)
425 index++;
426
427 out:
428 *indexp = index;
429
430 return s == 0;
431}
432
433static inline struct nilfs_btree_node *
434nilfs_btree_get_root(const struct nilfs_btree *btree)
435{
436 return (struct nilfs_btree_node *)btree->bt_bmap.b_u.u_data;
437}
438
439static inline struct nilfs_btree_node *
440nilfs_btree_get_nonroot_node(const struct nilfs_btree *btree,
441 const struct nilfs_btree_path *path,
442 int level)
443{
444 return (struct nilfs_btree_node *)path[level].bp_bh->b_data;
445}
446
447static inline struct nilfs_btree_node *
448nilfs_btree_get_sib_node(const struct nilfs_btree *btree,
449 const struct nilfs_btree_path *path,
450 int level)
451{
452 return (struct nilfs_btree_node *)path[level].bp_sib_bh->b_data;
453}
454
455static inline int nilfs_btree_height(const struct nilfs_btree *btree)
456{
457 return nilfs_btree_node_get_level(btree, nilfs_btree_get_root(btree))
458 + 1;
459}
460
461static inline struct nilfs_btree_node *
462nilfs_btree_get_node(const struct nilfs_btree *btree,
463 const struct nilfs_btree_path *path,
464 int level)
465{
466 return (level == nilfs_btree_height(btree) - 1) ?
467 nilfs_btree_get_root(btree) :
468 nilfs_btree_get_nonroot_node(btree, path, level);
469}
470
471static int nilfs_btree_do_lookup(const struct nilfs_btree *btree,
472 struct nilfs_btree_path *path,
473 __u64 key, __u64 *ptrp, int minlevel)
474{
475 struct nilfs_btree_node *node;
476 __u64 ptr;
477 int level, index, found, ret;
478
479 node = nilfs_btree_get_root(btree);
480 level = nilfs_btree_node_get_level(btree, node);
481 if ((level < minlevel) ||
482 (nilfs_btree_node_get_nchildren(btree, node) <= 0))
483 return -ENOENT;
484
485 found = nilfs_btree_node_lookup(btree, node, key, &index);
486 ptr = nilfs_btree_node_get_ptr(btree, node, index);
487 path[level].bp_bh = NULL;
488 path[level].bp_index = index;
489
490 for (level--; level >= minlevel; level--) {
491 ret = nilfs_bmap_get_block(&btree->bt_bmap, ptr,
492 &path[level].bp_bh);
493 if (ret < 0)
494 return ret;
495 node = nilfs_btree_get_nonroot_node(btree, path, level);
496 BUG_ON(level != nilfs_btree_node_get_level(btree, node));
497 if (!found)
498 found = nilfs_btree_node_lookup(btree, node, key,
499 &index);
500 else
501 index = 0;
502 if (index < nilfs_btree_node_nchildren_max(btree, node))
503 ptr = nilfs_btree_node_get_ptr(btree, node, index);
504 else {
505 WARN_ON(found || level != NILFS_BTREE_LEVEL_NODE_MIN);
506 /* insert */
507 ptr = NILFS_BMAP_INVALID_PTR;
508 }
509 path[level].bp_index = index;
510 }
511 if (!found)
512 return -ENOENT;
513
514 if (ptrp != NULL)
515 *ptrp = ptr;
516
517 return 0;
518}
519
520static int nilfs_btree_do_lookup_last(const struct nilfs_btree *btree,
521 struct nilfs_btree_path *path,
522 __u64 *keyp, __u64 *ptrp)
523{
524 struct nilfs_btree_node *node;
525 __u64 ptr;
526 int index, level, ret;
527
528 node = nilfs_btree_get_root(btree);
529 index = nilfs_btree_node_get_nchildren(btree, node) - 1;
530 if (index < 0)
531 return -ENOENT;
532 level = nilfs_btree_node_get_level(btree, node);
533 ptr = nilfs_btree_node_get_ptr(btree, node, index);
534 path[level].bp_bh = NULL;
535 path[level].bp_index = index;
536
537 for (level--; level > 0; level--) {
538 ret = nilfs_bmap_get_block(&btree->bt_bmap, ptr,
539 &path[level].bp_bh);
540 if (ret < 0)
541 return ret;
542 node = nilfs_btree_get_nonroot_node(btree, path, level);
543 BUG_ON(level != nilfs_btree_node_get_level(btree, node));
544 index = nilfs_btree_node_get_nchildren(btree, node) - 1;
545 ptr = nilfs_btree_node_get_ptr(btree, node, index);
546 path[level].bp_index = index;
547 }
548
549 if (keyp != NULL)
550 *keyp = nilfs_btree_node_get_key(btree, node, index);
551 if (ptrp != NULL)
552 *ptrp = ptr;
553
554 return 0;
555}
556
557static int nilfs_btree_lookup(const struct nilfs_bmap *bmap,
558 __u64 key, int level, __u64 *ptrp)
559{
560 struct nilfs_btree *btree;
561 struct nilfs_btree_path *path;
562 __u64 ptr;
563 int ret;
564
565 btree = (struct nilfs_btree *)bmap;
566 path = nilfs_btree_alloc_path(btree);
567 if (path == NULL)
568 return -ENOMEM;
569 nilfs_btree_init_path(btree, path);
570
571 ret = nilfs_btree_do_lookup(btree, path, key, &ptr, level);
572
573 if (ptrp != NULL)
574 *ptrp = ptr;
575
576 nilfs_btree_clear_path(btree, path);
577 nilfs_btree_free_path(btree, path);
578
579 return ret;
580}
581
582static void nilfs_btree_promote_key(struct nilfs_btree *btree,
583 struct nilfs_btree_path *path,
584 int level, __u64 key)
585{
586 if (level < nilfs_btree_height(btree) - 1) {
587 do {
588 lock_buffer(path[level].bp_bh);
589 nilfs_btree_node_set_key(
590 btree,
591 nilfs_btree_get_nonroot_node(
592 btree, path, level),
593 path[level].bp_index, key);
594 if (!buffer_dirty(path[level].bp_bh))
595 nilfs_btnode_mark_dirty(path[level].bp_bh);
596 unlock_buffer(path[level].bp_bh);
597 } while ((path[level].bp_index == 0) &&
598 (++level < nilfs_btree_height(btree) - 1));
599 }
600
601 /* root */
602 if (level == nilfs_btree_height(btree) - 1) {
603 nilfs_btree_node_set_key(btree,
604 nilfs_btree_get_root(btree),
605 path[level].bp_index, key);
606 }
607}
608
609static void nilfs_btree_do_insert(struct nilfs_btree *btree,
610 struct nilfs_btree_path *path,
611 int level, __u64 *keyp, __u64 *ptrp)
612{
613 struct nilfs_btree_node *node;
614
615 if (level < nilfs_btree_height(btree) - 1) {
616 lock_buffer(path[level].bp_bh);
617 node = nilfs_btree_get_nonroot_node(btree, path, level);
618 nilfs_btree_node_insert(btree, node, *keyp, *ptrp,
619 path[level].bp_index);
620 if (!buffer_dirty(path[level].bp_bh))
621 nilfs_btnode_mark_dirty(path[level].bp_bh);
622 unlock_buffer(path[level].bp_bh);
623
624 if (path[level].bp_index == 0)
625 nilfs_btree_promote_key(btree, path, level + 1,
626 nilfs_btree_node_get_key(
627 btree, node, 0));
628 } else {
629 node = nilfs_btree_get_root(btree);
630 nilfs_btree_node_insert(btree, node, *keyp, *ptrp,
631 path[level].bp_index);
632 }
633}
634
635static void nilfs_btree_carry_left(struct nilfs_btree *btree,
636 struct nilfs_btree_path *path,
637 int level, __u64 *keyp, __u64 *ptrp)
638{
639 struct nilfs_btree_node *node, *left;
640 int nchildren, lnchildren, n, move;
641
642 lock_buffer(path[level].bp_bh);
643 lock_buffer(path[level].bp_sib_bh);
644
645 node = nilfs_btree_get_nonroot_node(btree, path, level);
646 left = nilfs_btree_get_sib_node(btree, path, level);
647 nchildren = nilfs_btree_node_get_nchildren(btree, node);
648 lnchildren = nilfs_btree_node_get_nchildren(btree, left);
649 move = 0;
650
651 n = (nchildren + lnchildren + 1) / 2 - lnchildren;
652 if (n > path[level].bp_index) {
653 /* move insert point */
654 n--;
655 move = 1;
656 }
657
658 nilfs_btree_node_move_left(btree, left, node, n);
659
660 if (!buffer_dirty(path[level].bp_bh))
661 nilfs_btnode_mark_dirty(path[level].bp_bh);
662 if (!buffer_dirty(path[level].bp_sib_bh))
663 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
664
665 unlock_buffer(path[level].bp_bh);
666 unlock_buffer(path[level].bp_sib_bh);
667
668 nilfs_btree_promote_key(btree, path, level + 1,
669 nilfs_btree_node_get_key(btree, node, 0));
670
671 if (move) {
672 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_bh);
673 path[level].bp_bh = path[level].bp_sib_bh;
674 path[level].bp_sib_bh = NULL;
675 path[level].bp_index += lnchildren;
676 path[level + 1].bp_index--;
677 } else {
678 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_sib_bh);
679 path[level].bp_sib_bh = NULL;
680 path[level].bp_index -= n;
681 }
682
683 nilfs_btree_do_insert(btree, path, level, keyp, ptrp);
684}
685
686static void nilfs_btree_carry_right(struct nilfs_btree *btree,
687 struct nilfs_btree_path *path,
688 int level, __u64 *keyp, __u64 *ptrp)
689{
690 struct nilfs_btree_node *node, *right;
691 int nchildren, rnchildren, n, move;
692
693 lock_buffer(path[level].bp_bh);
694 lock_buffer(path[level].bp_sib_bh);
695
696 node = nilfs_btree_get_nonroot_node(btree, path, level);
697 right = nilfs_btree_get_sib_node(btree, path, level);
698 nchildren = nilfs_btree_node_get_nchildren(btree, node);
699 rnchildren = nilfs_btree_node_get_nchildren(btree, right);
700 move = 0;
701
702 n = (nchildren + rnchildren + 1) / 2 - rnchildren;
703 if (n > nchildren - path[level].bp_index) {
704 /* move insert point */
705 n--;
706 move = 1;
707 }
708
709 nilfs_btree_node_move_right(btree, node, right, n);
710
711 if (!buffer_dirty(path[level].bp_bh))
712 nilfs_btnode_mark_dirty(path[level].bp_bh);
713 if (!buffer_dirty(path[level].bp_sib_bh))
714 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
715
716 unlock_buffer(path[level].bp_bh);
717 unlock_buffer(path[level].bp_sib_bh);
718
719 path[level + 1].bp_index++;
720 nilfs_btree_promote_key(btree, path, level + 1,
721 nilfs_btree_node_get_key(btree, right, 0));
722 path[level + 1].bp_index--;
723
724 if (move) {
725 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_bh);
726 path[level].bp_bh = path[level].bp_sib_bh;
727 path[level].bp_sib_bh = NULL;
728 path[level].bp_index -=
729 nilfs_btree_node_get_nchildren(btree, node);
730 path[level + 1].bp_index++;
731 } else {
732 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_sib_bh);
733 path[level].bp_sib_bh = NULL;
734 }
735
736 nilfs_btree_do_insert(btree, path, level, keyp, ptrp);
737}
738
739static void nilfs_btree_split(struct nilfs_btree *btree,
740 struct nilfs_btree_path *path,
741 int level, __u64 *keyp, __u64 *ptrp)
742{
743 struct nilfs_btree_node *node, *right;
744 __u64 newkey;
745 __u64 newptr;
746 int nchildren, n, move;
747
748 lock_buffer(path[level].bp_bh);
749 lock_buffer(path[level].bp_sib_bh);
750
751 node = nilfs_btree_get_nonroot_node(btree, path, level);
752 right = nilfs_btree_get_sib_node(btree, path, level);
753 nchildren = nilfs_btree_node_get_nchildren(btree, node);
754 move = 0;
755
756 n = (nchildren + 1) / 2;
757 if (n > nchildren - path[level].bp_index) {
758 n--;
759 move = 1;
760 }
761
762 nilfs_btree_node_move_right(btree, node, right, n);
763
764 if (!buffer_dirty(path[level].bp_bh))
765 nilfs_btnode_mark_dirty(path[level].bp_bh);
766 if (!buffer_dirty(path[level].bp_sib_bh))
767 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
768
769 unlock_buffer(path[level].bp_bh);
770 unlock_buffer(path[level].bp_sib_bh);
771
772 newkey = nilfs_btree_node_get_key(btree, right, 0);
773 newptr = path[level].bp_newreq.bpr_ptr;
774
775 if (move) {
776 path[level].bp_index -=
777 nilfs_btree_node_get_nchildren(btree, node);
778 nilfs_btree_node_insert(btree, right, *keyp, *ptrp,
779 path[level].bp_index);
780
781 *keyp = nilfs_btree_node_get_key(btree, right, 0);
782 *ptrp = path[level].bp_newreq.bpr_ptr;
783
784 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_bh);
785 path[level].bp_bh = path[level].bp_sib_bh;
786 path[level].bp_sib_bh = NULL;
787 } else {
788 nilfs_btree_do_insert(btree, path, level, keyp, ptrp);
789
790 *keyp = nilfs_btree_node_get_key(btree, right, 0);
791 *ptrp = path[level].bp_newreq.bpr_ptr;
792
793 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_sib_bh);
794 path[level].bp_sib_bh = NULL;
795 }
796
797 path[level + 1].bp_index++;
798}
799
800static void nilfs_btree_grow(struct nilfs_btree *btree,
801 struct nilfs_btree_path *path,
802 int level, __u64 *keyp, __u64 *ptrp)
803{
804 struct nilfs_btree_node *root, *child;
805 int n;
806
807 lock_buffer(path[level].bp_sib_bh);
808
809 root = nilfs_btree_get_root(btree);
810 child = nilfs_btree_get_sib_node(btree, path, level);
811
812 n = nilfs_btree_node_get_nchildren(btree, root);
813
814 nilfs_btree_node_move_right(btree, root, child, n);
815 nilfs_btree_node_set_level(btree, root, level + 1);
816
817 if (!buffer_dirty(path[level].bp_sib_bh))
818 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
819
820 unlock_buffer(path[level].bp_sib_bh);
821
822 path[level].bp_bh = path[level].bp_sib_bh;
823 path[level].bp_sib_bh = NULL;
824
825 nilfs_btree_do_insert(btree, path, level, keyp, ptrp);
826
827 *keyp = nilfs_btree_node_get_key(btree, child, 0);
828 *ptrp = path[level].bp_newreq.bpr_ptr;
829}
830
831static __u64 nilfs_btree_find_near(const struct nilfs_btree *btree,
832 const struct nilfs_btree_path *path)
833{
834 struct nilfs_btree_node *node;
835 int level;
836
837 if (path == NULL)
838 return NILFS_BMAP_INVALID_PTR;
839
840 /* left sibling */
841 level = NILFS_BTREE_LEVEL_NODE_MIN;
842 if (path[level].bp_index > 0) {
843 node = nilfs_btree_get_node(btree, path, level);
844 return nilfs_btree_node_get_ptr(btree, node,
845 path[level].bp_index - 1);
846 }
847
848 /* parent */
849 level = NILFS_BTREE_LEVEL_NODE_MIN + 1;
850 if (level <= nilfs_btree_height(btree) - 1) {
851 node = nilfs_btree_get_node(btree, path, level);
852 return nilfs_btree_node_get_ptr(btree, node,
853 path[level].bp_index);
854 }
855
856 return NILFS_BMAP_INVALID_PTR;
857}
858
859static __u64 nilfs_btree_find_target_v(const struct nilfs_btree *btree,
860 const struct nilfs_btree_path *path,
861 __u64 key)
862{
863 __u64 ptr;
864
865 ptr = nilfs_bmap_find_target_seq(&btree->bt_bmap, key);
866 if (ptr != NILFS_BMAP_INVALID_PTR)
867 /* sequential access */
868 return ptr;
869 else {
870 ptr = nilfs_btree_find_near(btree, path);
871 if (ptr != NILFS_BMAP_INVALID_PTR)
872 /* near */
873 return ptr;
874 }
875 /* block group */
876 return nilfs_bmap_find_target_in_group(&btree->bt_bmap);
877}
878
879static void nilfs_btree_set_target_v(struct nilfs_btree *btree, __u64 key,
880 __u64 ptr)
881{
882 btree->bt_bmap.b_last_allocated_key = key;
883 btree->bt_bmap.b_last_allocated_ptr = ptr;
884}
885
886static int nilfs_btree_prepare_insert(struct nilfs_btree *btree,
887 struct nilfs_btree_path *path,
888 int *levelp, __u64 key, __u64 ptr,
889 struct nilfs_bmap_stats *stats)
890{
891 struct buffer_head *bh;
892 struct nilfs_btree_node *node, *parent, *sib;
893 __u64 sibptr;
894 int pindex, level, ret;
895
896 stats->bs_nblocks = 0;
897 level = NILFS_BTREE_LEVEL_DATA;
898
899 /* allocate a new ptr for data block */
900 if (btree->bt_ops->btop_find_target != NULL)
901 path[level].bp_newreq.bpr_ptr =
902 btree->bt_ops->btop_find_target(btree, path, key);
903
904 ret = btree->bt_bmap.b_pops->bpop_prepare_alloc_ptr(
905 &btree->bt_bmap, &path[level].bp_newreq);
906 if (ret < 0)
907 goto err_out_data;
908
909 for (level = NILFS_BTREE_LEVEL_NODE_MIN;
910 level < nilfs_btree_height(btree) - 1;
911 level++) {
912 node = nilfs_btree_get_nonroot_node(btree, path, level);
913 if (nilfs_btree_node_get_nchildren(btree, node) <
914 nilfs_btree_node_nchildren_max(btree, node)) {
915 path[level].bp_op = nilfs_btree_do_insert;
916 stats->bs_nblocks++;
917 goto out;
918 }
919
920 parent = nilfs_btree_get_node(btree, path, level + 1);
921 pindex = path[level + 1].bp_index;
922
923 /* left sibling */
924 if (pindex > 0) {
925 sibptr = nilfs_btree_node_get_ptr(btree, parent,
926 pindex - 1);
927 ret = nilfs_bmap_get_block(&btree->bt_bmap, sibptr,
928 &bh);
929 if (ret < 0)
930 goto err_out_child_node;
931 sib = (struct nilfs_btree_node *)bh->b_data;
932 if (nilfs_btree_node_get_nchildren(btree, sib) <
933 nilfs_btree_node_nchildren_max(btree, sib)) {
934 path[level].bp_sib_bh = bh;
935 path[level].bp_op = nilfs_btree_carry_left;
936 stats->bs_nblocks++;
937 goto out;
938 } else
939 nilfs_bmap_put_block(&btree->bt_bmap, bh);
940 }
941
942 /* right sibling */
943 if (pindex <
944 nilfs_btree_node_get_nchildren(btree, parent) - 1) {
945 sibptr = nilfs_btree_node_get_ptr(btree, parent,
946 pindex + 1);
947 ret = nilfs_bmap_get_block(&btree->bt_bmap, sibptr,
948 &bh);
949 if (ret < 0)
950 goto err_out_child_node;
951 sib = (struct nilfs_btree_node *)bh->b_data;
952 if (nilfs_btree_node_get_nchildren(btree, sib) <
953 nilfs_btree_node_nchildren_max(btree, sib)) {
954 path[level].bp_sib_bh = bh;
955 path[level].bp_op = nilfs_btree_carry_right;
956 stats->bs_nblocks++;
957 goto out;
958 } else
959 nilfs_bmap_put_block(&btree->bt_bmap, bh);
960 }
961
962 /* split */
963 path[level].bp_newreq.bpr_ptr =
964 path[level - 1].bp_newreq.bpr_ptr + 1;
965 ret = btree->bt_bmap.b_pops->bpop_prepare_alloc_ptr(
966 &btree->bt_bmap, &path[level].bp_newreq);
967 if (ret < 0)
968 goto err_out_child_node;
969 ret = nilfs_bmap_get_new_block(&btree->bt_bmap,
970 path[level].bp_newreq.bpr_ptr,
971 &bh);
972 if (ret < 0)
973 goto err_out_curr_node;
974
975 stats->bs_nblocks++;
976
977 lock_buffer(bh);
978 nilfs_btree_node_init(btree,
979 (struct nilfs_btree_node *)bh->b_data,
980 0, level, 0, NULL, NULL);
981 unlock_buffer(bh);
982 path[level].bp_sib_bh = bh;
983 path[level].bp_op = nilfs_btree_split;
984 }
985
986 /* root */
987 node = nilfs_btree_get_root(btree);
988 if (nilfs_btree_node_get_nchildren(btree, node) <
989 nilfs_btree_node_nchildren_max(btree, node)) {
990 path[level].bp_op = nilfs_btree_do_insert;
991 stats->bs_nblocks++;
992 goto out;
993 }
994
995 /* grow */
996 path[level].bp_newreq.bpr_ptr = path[level - 1].bp_newreq.bpr_ptr + 1;
997 ret = btree->bt_bmap.b_pops->bpop_prepare_alloc_ptr(
998 &btree->bt_bmap, &path[level].bp_newreq);
999 if (ret < 0)
1000 goto err_out_child_node;
1001 ret = nilfs_bmap_get_new_block(&btree->bt_bmap,
1002 path[level].bp_newreq.bpr_ptr, &bh);
1003 if (ret < 0)
1004 goto err_out_curr_node;
1005
1006 lock_buffer(bh);
1007 nilfs_btree_node_init(btree, (struct nilfs_btree_node *)bh->b_data,
1008 0, level, 0, NULL, NULL);
1009 unlock_buffer(bh);
1010 path[level].bp_sib_bh = bh;
1011 path[level].bp_op = nilfs_btree_grow;
1012
1013 level++;
1014 path[level].bp_op = nilfs_btree_do_insert;
1015
1016 /* a newly-created node block and a data block are added */
1017 stats->bs_nblocks += 2;
1018
1019 /* success */
1020 out:
1021 *levelp = level;
1022 return ret;
1023
1024 /* error */
1025 err_out_curr_node:
1026 btree->bt_bmap.b_pops->bpop_abort_alloc_ptr(&btree->bt_bmap,
1027 &path[level].bp_newreq);
1028 err_out_child_node:
1029 for (level--; level > NILFS_BTREE_LEVEL_DATA; level--) {
1030 nilfs_bmap_delete_block(&btree->bt_bmap, path[level].bp_sib_bh);
1031 btree->bt_bmap.b_pops->bpop_abort_alloc_ptr(
1032 &btree->bt_bmap, &path[level].bp_newreq);
1033
1034 }
1035
1036 btree->bt_bmap.b_pops->bpop_abort_alloc_ptr(&btree->bt_bmap,
1037 &path[level].bp_newreq);
1038 err_out_data:
1039 *levelp = level;
1040 stats->bs_nblocks = 0;
1041 return ret;
1042}
1043
1044static void nilfs_btree_commit_insert(struct nilfs_btree *btree,
1045 struct nilfs_btree_path *path,
1046 int maxlevel, __u64 key, __u64 ptr)
1047{
1048 int level;
1049
1050 set_buffer_nilfs_volatile((struct buffer_head *)((unsigned long)ptr));
1051 ptr = path[NILFS_BTREE_LEVEL_DATA].bp_newreq.bpr_ptr;
1052 if (btree->bt_ops->btop_set_target != NULL)
1053 btree->bt_ops->btop_set_target(btree, key, ptr);
1054
1055 for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) {
1056 if (btree->bt_bmap.b_pops->bpop_commit_alloc_ptr != NULL) {
1057 btree->bt_bmap.b_pops->bpop_commit_alloc_ptr(
1058 &btree->bt_bmap, &path[level - 1].bp_newreq);
1059 }
1060 path[level].bp_op(btree, path, level, &key, &ptr);
1061 }
1062
1063 if (!nilfs_bmap_dirty(&btree->bt_bmap))
1064 nilfs_bmap_set_dirty(&btree->bt_bmap);
1065}
1066
1067static int nilfs_btree_insert(struct nilfs_bmap *bmap, __u64 key, __u64 ptr)
1068{
1069 struct nilfs_btree *btree;
1070 struct nilfs_btree_path *path;
1071 struct nilfs_bmap_stats stats;
1072 int level, ret;
1073
1074 btree = (struct nilfs_btree *)bmap;
1075 path = nilfs_btree_alloc_path(btree);
1076 if (path == NULL)
1077 return -ENOMEM;
1078 nilfs_btree_init_path(btree, path);
1079
1080 ret = nilfs_btree_do_lookup(btree, path, key, NULL,
1081 NILFS_BTREE_LEVEL_NODE_MIN);
1082 if (ret != -ENOENT) {
1083 if (ret == 0)
1084 ret = -EEXIST;
1085 goto out;
1086 }
1087
1088 ret = nilfs_btree_prepare_insert(btree, path, &level, key, ptr, &stats);
1089 if (ret < 0)
1090 goto out;
1091 nilfs_btree_commit_insert(btree, path, level, key, ptr);
1092 nilfs_bmap_add_blocks(bmap, stats.bs_nblocks);
1093
1094 out:
1095 nilfs_btree_clear_path(btree, path);
1096 nilfs_btree_free_path(btree, path);
1097 return ret;
1098}
1099
1100static void nilfs_btree_do_delete(struct nilfs_btree *btree,
1101 struct nilfs_btree_path *path,
1102 int level, __u64 *keyp, __u64 *ptrp)
1103{
1104 struct nilfs_btree_node *node;
1105
1106 if (level < nilfs_btree_height(btree) - 1) {
1107 lock_buffer(path[level].bp_bh);
1108 node = nilfs_btree_get_nonroot_node(btree, path, level);
1109 nilfs_btree_node_delete(btree, node, keyp, ptrp,
1110 path[level].bp_index);
1111 if (!buffer_dirty(path[level].bp_bh))
1112 nilfs_btnode_mark_dirty(path[level].bp_bh);
1113 unlock_buffer(path[level].bp_bh);
1114 if (path[level].bp_index == 0)
1115 nilfs_btree_promote_key(btree, path, level + 1,
1116 nilfs_btree_node_get_key(btree, node, 0));
1117 } else {
1118 node = nilfs_btree_get_root(btree);
1119 nilfs_btree_node_delete(btree, node, keyp, ptrp,
1120 path[level].bp_index);
1121 }
1122}
1123
1124static void nilfs_btree_borrow_left(struct nilfs_btree *btree,
1125 struct nilfs_btree_path *path,
1126 int level, __u64 *keyp, __u64 *ptrp)
1127{
1128 struct nilfs_btree_node *node, *left;
1129 int nchildren, lnchildren, n;
1130
1131 nilfs_btree_do_delete(btree, path, level, keyp, ptrp);
1132
1133 lock_buffer(path[level].bp_bh);
1134 lock_buffer(path[level].bp_sib_bh);
1135
1136 node = nilfs_btree_get_nonroot_node(btree, path, level);
1137 left = nilfs_btree_get_sib_node(btree, path, level);
1138 nchildren = nilfs_btree_node_get_nchildren(btree, node);
1139 lnchildren = nilfs_btree_node_get_nchildren(btree, left);
1140
1141 n = (nchildren + lnchildren) / 2 - nchildren;
1142
1143 nilfs_btree_node_move_right(btree, left, node, n);
1144
1145 if (!buffer_dirty(path[level].bp_bh))
1146 nilfs_btnode_mark_dirty(path[level].bp_bh);
1147 if (!buffer_dirty(path[level].bp_sib_bh))
1148 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
1149
1150 unlock_buffer(path[level].bp_bh);
1151 unlock_buffer(path[level].bp_sib_bh);
1152
1153 nilfs_btree_promote_key(btree, path, level + 1,
1154 nilfs_btree_node_get_key(btree, node, 0));
1155
1156 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_sib_bh);
1157 path[level].bp_sib_bh = NULL;
1158 path[level].bp_index += n;
1159}
1160
1161static void nilfs_btree_borrow_right(struct nilfs_btree *btree,
1162 struct nilfs_btree_path *path,
1163 int level, __u64 *keyp, __u64 *ptrp)
1164{
1165 struct nilfs_btree_node *node, *right;
1166 int nchildren, rnchildren, n;
1167
1168 nilfs_btree_do_delete(btree, path, level, keyp, ptrp);
1169
1170 lock_buffer(path[level].bp_bh);
1171 lock_buffer(path[level].bp_sib_bh);
1172
1173 node = nilfs_btree_get_nonroot_node(btree, path, level);
1174 right = nilfs_btree_get_sib_node(btree, path, level);
1175 nchildren = nilfs_btree_node_get_nchildren(btree, node);
1176 rnchildren = nilfs_btree_node_get_nchildren(btree, right);
1177
1178 n = (nchildren + rnchildren) / 2 - nchildren;
1179
1180 nilfs_btree_node_move_left(btree, node, right, n);
1181
1182 if (!buffer_dirty(path[level].bp_bh))
1183 nilfs_btnode_mark_dirty(path[level].bp_bh);
1184 if (!buffer_dirty(path[level].bp_sib_bh))
1185 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
1186
1187 unlock_buffer(path[level].bp_bh);
1188 unlock_buffer(path[level].bp_sib_bh);
1189
1190 path[level + 1].bp_index++;
1191 nilfs_btree_promote_key(btree, path, level + 1,
1192 nilfs_btree_node_get_key(btree, right, 0));
1193 path[level + 1].bp_index--;
1194
1195 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_sib_bh);
1196 path[level].bp_sib_bh = NULL;
1197}
1198
1199static void nilfs_btree_concat_left(struct nilfs_btree *btree,
1200 struct nilfs_btree_path *path,
1201 int level, __u64 *keyp, __u64 *ptrp)
1202{
1203 struct nilfs_btree_node *node, *left;
1204 int n;
1205
1206 nilfs_btree_do_delete(btree, path, level, keyp, ptrp);
1207
1208 lock_buffer(path[level].bp_bh);
1209 lock_buffer(path[level].bp_sib_bh);
1210
1211 node = nilfs_btree_get_nonroot_node(btree, path, level);
1212 left = nilfs_btree_get_sib_node(btree, path, level);
1213
1214 n = nilfs_btree_node_get_nchildren(btree, node);
1215
1216 nilfs_btree_node_move_left(btree, left, node, n);
1217
1218 if (!buffer_dirty(path[level].bp_sib_bh))
1219 nilfs_btnode_mark_dirty(path[level].bp_sib_bh);
1220
1221 unlock_buffer(path[level].bp_bh);
1222 unlock_buffer(path[level].bp_sib_bh);
1223
1224 nilfs_bmap_delete_block(&btree->bt_bmap, path[level].bp_bh);
1225 path[level].bp_bh = path[level].bp_sib_bh;
1226 path[level].bp_sib_bh = NULL;
1227 path[level].bp_index += nilfs_btree_node_get_nchildren(btree, left);
1228}
1229
1230static void nilfs_btree_concat_right(struct nilfs_btree *btree,
1231 struct nilfs_btree_path *path,
1232 int level, __u64 *keyp, __u64 *ptrp)
1233{
1234 struct nilfs_btree_node *node, *right;
1235 int n;
1236
1237 nilfs_btree_do_delete(btree, path, level, keyp, ptrp);
1238
1239 lock_buffer(path[level].bp_bh);
1240 lock_buffer(path[level].bp_sib_bh);
1241
1242 node = nilfs_btree_get_nonroot_node(btree, path, level);
1243 right = nilfs_btree_get_sib_node(btree, path, level);
1244
1245 n = nilfs_btree_node_get_nchildren(btree, right);
1246
1247 nilfs_btree_node_move_left(btree, node, right, n);
1248
1249 if (!buffer_dirty(path[level].bp_bh))
1250 nilfs_btnode_mark_dirty(path[level].bp_bh);
1251
1252 unlock_buffer(path[level].bp_bh);
1253 unlock_buffer(path[level].bp_sib_bh);
1254
1255 nilfs_bmap_delete_block(&btree->bt_bmap, path[level].bp_sib_bh);
1256 path[level].bp_sib_bh = NULL;
1257 path[level + 1].bp_index++;
1258}
1259
1260static void nilfs_btree_shrink(struct nilfs_btree *btree,
1261 struct nilfs_btree_path *path,
1262 int level, __u64 *keyp, __u64 *ptrp)
1263{
1264 struct nilfs_btree_node *root, *child;
1265 int n;
1266
1267 nilfs_btree_do_delete(btree, path, level, keyp, ptrp);
1268
1269 lock_buffer(path[level].bp_bh);
1270 root = nilfs_btree_get_root(btree);
1271 child = nilfs_btree_get_nonroot_node(btree, path, level);
1272
1273 nilfs_btree_node_delete(btree, root, NULL, NULL, 0);
1274 nilfs_btree_node_set_level(btree, root, level);
1275 n = nilfs_btree_node_get_nchildren(btree, child);
1276 nilfs_btree_node_move_left(btree, root, child, n);
1277 unlock_buffer(path[level].bp_bh);
1278
1279 nilfs_bmap_delete_block(&btree->bt_bmap, path[level].bp_bh);
1280 path[level].bp_bh = NULL;
1281}
1282
1283
1284static int nilfs_btree_prepare_delete(struct nilfs_btree *btree,
1285 struct nilfs_btree_path *path,
1286 int *levelp,
1287 struct nilfs_bmap_stats *stats)
1288{
1289 struct buffer_head *bh;
1290 struct nilfs_btree_node *node, *parent, *sib;
1291 __u64 sibptr;
1292 int pindex, level, ret;
1293
1294 ret = 0;
1295 stats->bs_nblocks = 0;
1296 for (level = NILFS_BTREE_LEVEL_NODE_MIN;
1297 level < nilfs_btree_height(btree) - 1;
1298 level++) {
1299 node = nilfs_btree_get_nonroot_node(btree, path, level);
1300 path[level].bp_oldreq.bpr_ptr =
1301 nilfs_btree_node_get_ptr(btree, node,
1302 path[level].bp_index);
1303 if (btree->bt_bmap.b_pops->bpop_prepare_end_ptr != NULL) {
1304 ret = btree->bt_bmap.b_pops->bpop_prepare_end_ptr(
1305 &btree->bt_bmap, &path[level].bp_oldreq);
1306 if (ret < 0)
1307 goto err_out_child_node;
1308 }
1309
1310 if (nilfs_btree_node_get_nchildren(btree, node) >
1311 nilfs_btree_node_nchildren_min(btree, node)) {
1312 path[level].bp_op = nilfs_btree_do_delete;
1313 stats->bs_nblocks++;
1314 goto out;
1315 }
1316
1317 parent = nilfs_btree_get_node(btree, path, level + 1);
1318 pindex = path[level + 1].bp_index;
1319
1320 if (pindex > 0) {
1321 /* left sibling */
1322 sibptr = nilfs_btree_node_get_ptr(btree, parent,
1323 pindex - 1);
1324 ret = nilfs_bmap_get_block(&btree->bt_bmap, sibptr,
1325 &bh);
1326 if (ret < 0)
1327 goto err_out_curr_node;
1328 sib = (struct nilfs_btree_node *)bh->b_data;
1329 if (nilfs_btree_node_get_nchildren(btree, sib) >
1330 nilfs_btree_node_nchildren_min(btree, sib)) {
1331 path[level].bp_sib_bh = bh;
1332 path[level].bp_op = nilfs_btree_borrow_left;
1333 stats->bs_nblocks++;
1334 goto out;
1335 } else {
1336 path[level].bp_sib_bh = bh;
1337 path[level].bp_op = nilfs_btree_concat_left;
1338 stats->bs_nblocks++;
1339 /* continue; */
1340 }
1341 } else if (pindex <
1342 nilfs_btree_node_get_nchildren(btree, parent) - 1) {
1343 /* right sibling */
1344 sibptr = nilfs_btree_node_get_ptr(btree, parent,
1345 pindex + 1);
1346 ret = nilfs_bmap_get_block(&btree->bt_bmap, sibptr,
1347 &bh);
1348 if (ret < 0)
1349 goto err_out_curr_node;
1350 sib = (struct nilfs_btree_node *)bh->b_data;
1351 if (nilfs_btree_node_get_nchildren(btree, sib) >
1352 nilfs_btree_node_nchildren_min(btree, sib)) {
1353 path[level].bp_sib_bh = bh;
1354 path[level].bp_op = nilfs_btree_borrow_right;
1355 stats->bs_nblocks++;
1356 goto out;
1357 } else {
1358 path[level].bp_sib_bh = bh;
1359 path[level].bp_op = nilfs_btree_concat_right;
1360 stats->bs_nblocks++;
1361 /* continue; */
1362 }
1363 } else {
1364 /* no siblings */
1365 /* the only child of the root node */
1366 WARN_ON(level != nilfs_btree_height(btree) - 2);
1367 if (nilfs_btree_node_get_nchildren(btree, node) - 1 <=
1368 NILFS_BTREE_ROOT_NCHILDREN_MAX) {
1369 path[level].bp_op = nilfs_btree_shrink;
1370 stats->bs_nblocks += 2;
1371 } else {
1372 path[level].bp_op = nilfs_btree_do_delete;
1373 stats->bs_nblocks++;
1374 }
1375
1376 goto out;
1377
1378 }
1379 }
1380
1381 node = nilfs_btree_get_root(btree);
1382 path[level].bp_oldreq.bpr_ptr =
1383 nilfs_btree_node_get_ptr(btree, node, path[level].bp_index);
1384 if (btree->bt_bmap.b_pops->bpop_prepare_end_ptr != NULL) {
1385 ret = btree->bt_bmap.b_pops->bpop_prepare_end_ptr(
1386 &btree->bt_bmap, &path[level].bp_oldreq);
1387 if (ret < 0)
1388 goto err_out_child_node;
1389 }
1390 /* child of the root node is deleted */
1391 path[level].bp_op = nilfs_btree_do_delete;
1392 stats->bs_nblocks++;
1393
1394 /* success */
1395 out:
1396 *levelp = level;
1397 return ret;
1398
1399 /* error */
1400 err_out_curr_node:
1401 if (btree->bt_bmap.b_pops->bpop_abort_end_ptr != NULL)
1402 btree->bt_bmap.b_pops->bpop_abort_end_ptr(
1403 &btree->bt_bmap, &path[level].bp_oldreq);
1404 err_out_child_node:
1405 for (level--; level >= NILFS_BTREE_LEVEL_NODE_MIN; level--) {
1406 nilfs_bmap_put_block(&btree->bt_bmap, path[level].bp_sib_bh);
1407 if (btree->bt_bmap.b_pops->bpop_abort_end_ptr != NULL)
1408 btree->bt_bmap.b_pops->bpop_abort_end_ptr(
1409 &btree->bt_bmap, &path[level].bp_oldreq);
1410 }
1411 *levelp = level;
1412 stats->bs_nblocks = 0;
1413 return ret;
1414}
1415
1416static void nilfs_btree_commit_delete(struct nilfs_btree *btree,
1417 struct nilfs_btree_path *path,
1418 int maxlevel)
1419{
1420 int level;
1421
1422 for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) {
1423 if (btree->bt_bmap.b_pops->bpop_commit_end_ptr != NULL)
1424 btree->bt_bmap.b_pops->bpop_commit_end_ptr(
1425 &btree->bt_bmap, &path[level].bp_oldreq);
1426 path[level].bp_op(btree, path, level, NULL, NULL);
1427 }
1428
1429 if (!nilfs_bmap_dirty(&btree->bt_bmap))
1430 nilfs_bmap_set_dirty(&btree->bt_bmap);
1431}
1432
1433static int nilfs_btree_delete(struct nilfs_bmap *bmap, __u64 key)
1434
1435{
1436 struct nilfs_btree *btree;
1437 struct nilfs_btree_path *path;
1438 struct nilfs_bmap_stats stats;
1439 int level, ret;
1440
1441 btree = (struct nilfs_btree *)bmap;
1442 path = nilfs_btree_alloc_path(btree);
1443 if (path == NULL)
1444 return -ENOMEM;
1445 nilfs_btree_init_path(btree, path);
1446 ret = nilfs_btree_do_lookup(btree, path, key, NULL,
1447 NILFS_BTREE_LEVEL_NODE_MIN);
1448 if (ret < 0)
1449 goto out;
1450
1451 ret = nilfs_btree_prepare_delete(btree, path, &level, &stats);
1452 if (ret < 0)
1453 goto out;
1454 nilfs_btree_commit_delete(btree, path, level);
1455 nilfs_bmap_sub_blocks(bmap, stats.bs_nblocks);
1456
1457out:
1458 nilfs_btree_clear_path(btree, path);
1459 nilfs_btree_free_path(btree, path);
1460 return ret;
1461}
1462
1463static int nilfs_btree_last_key(const struct nilfs_bmap *bmap, __u64 *keyp)
1464{
1465 struct nilfs_btree *btree;
1466 struct nilfs_btree_path *path;
1467 int ret;
1468
1469 btree = (struct nilfs_btree *)bmap;
1470 path = nilfs_btree_alloc_path(btree);
1471 if (path == NULL)
1472 return -ENOMEM;
1473 nilfs_btree_init_path(btree, path);
1474
1475 ret = nilfs_btree_do_lookup_last(btree, path, keyp, NULL);
1476
1477 nilfs_btree_clear_path(btree, path);
1478 nilfs_btree_free_path(btree, path);
1479
1480 return ret;
1481}
1482
1483static int nilfs_btree_check_delete(struct nilfs_bmap *bmap, __u64 key)
1484{
1485 struct buffer_head *bh;
1486 struct nilfs_btree *btree;
1487 struct nilfs_btree_node *root, *node;
1488 __u64 maxkey, nextmaxkey;
1489 __u64 ptr;
1490 int nchildren, ret;
1491
1492 btree = (struct nilfs_btree *)bmap;
1493 root = nilfs_btree_get_root(btree);
1494 switch (nilfs_btree_height(btree)) {
1495 case 2:
1496 bh = NULL;
1497 node = root;
1498 break;
1499 case 3:
1500 nchildren = nilfs_btree_node_get_nchildren(btree, root);
1501 if (nchildren > 1)
1502 return 0;
1503 ptr = nilfs_btree_node_get_ptr(btree, root, nchildren - 1);
1504 ret = nilfs_bmap_get_block(bmap, ptr, &bh);
1505 if (ret < 0)
1506 return ret;
1507 node = (struct nilfs_btree_node *)bh->b_data;
1508 break;
1509 default:
1510 return 0;
1511 }
1512
1513 nchildren = nilfs_btree_node_get_nchildren(btree, node);
1514 maxkey = nilfs_btree_node_get_key(btree, node, nchildren - 1);
1515 nextmaxkey = (nchildren > 1) ?
1516 nilfs_btree_node_get_key(btree, node, nchildren - 2) : 0;
1517 if (bh != NULL)
1518 nilfs_bmap_put_block(bmap, bh);
1519
1520 return (maxkey == key) && (nextmaxkey < bmap->b_low);
1521}
1522
1523static int nilfs_btree_gather_data(struct nilfs_bmap *bmap,
1524 __u64 *keys, __u64 *ptrs, int nitems)
1525{
1526 struct buffer_head *bh;
1527 struct nilfs_btree *btree;
1528 struct nilfs_btree_node *node, *root;
1529 __le64 *dkeys;
1530 __le64 *dptrs;
1531 __u64 ptr;
1532 int nchildren, i, ret;
1533
1534 btree = (struct nilfs_btree *)bmap;
1535 root = nilfs_btree_get_root(btree);
1536 switch (nilfs_btree_height(btree)) {
1537 case 2:
1538 bh = NULL;
1539 node = root;
1540 break;
1541 case 3:
1542 nchildren = nilfs_btree_node_get_nchildren(btree, root);
1543 WARN_ON(nchildren > 1);
1544 ptr = nilfs_btree_node_get_ptr(btree, root, nchildren - 1);
1545 ret = nilfs_bmap_get_block(bmap, ptr, &bh);
1546 if (ret < 0)
1547 return ret;
1548 node = (struct nilfs_btree_node *)bh->b_data;
1549 break;
1550 default:
1551 node = NULL;
1552 return -EINVAL;
1553 }
1554
1555 nchildren = nilfs_btree_node_get_nchildren(btree, node);
1556 if (nchildren < nitems)
1557 nitems = nchildren;
1558 dkeys = nilfs_btree_node_dkeys(btree, node);
1559 dptrs = nilfs_btree_node_dptrs(btree, node);
1560 for (i = 0; i < nitems; i++) {
1561 keys[i] = nilfs_bmap_dkey_to_key(dkeys[i]);
1562 ptrs[i] = nilfs_bmap_dptr_to_ptr(dptrs[i]);
1563 }
1564
1565 if (bh != NULL)
1566 nilfs_bmap_put_block(bmap, bh);
1567
1568 return nitems;
1569}
1570
1571static int
1572nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *bmap, __u64 key,
1573 union nilfs_bmap_ptr_req *dreq,
1574 union nilfs_bmap_ptr_req *nreq,
1575 struct buffer_head **bhp,
1576 struct nilfs_bmap_stats *stats)
1577{
1578 struct buffer_head *bh;
1579 struct nilfs_btree *btree;
1580 int ret;
1581
1582 btree = (struct nilfs_btree *)bmap;
1583 stats->bs_nblocks = 0;
1584
1585 /* for data */
1586 /* cannot find near ptr */
1587 if (btree->bt_ops->btop_find_target != NULL)
1588 dreq->bpr_ptr
1589 = btree->bt_ops->btop_find_target(btree, NULL, key);
1590 ret = bmap->b_pops->bpop_prepare_alloc_ptr(bmap, dreq);
1591 if (ret < 0)
1592 return ret;
1593
1594 *bhp = NULL;
1595 stats->bs_nblocks++;
1596 if (nreq != NULL) {
1597 nreq->bpr_ptr = dreq->bpr_ptr + 1;
1598 ret = bmap->b_pops->bpop_prepare_alloc_ptr(bmap, nreq);
1599 if (ret < 0)
1600 goto err_out_dreq;
1601
1602 ret = nilfs_bmap_get_new_block(bmap, nreq->bpr_ptr, &bh);
1603 if (ret < 0)
1604 goto err_out_nreq;
1605
1606 *bhp = bh;
1607 stats->bs_nblocks++;
1608 }
1609
1610 /* success */
1611 return 0;
1612
1613 /* error */
1614 err_out_nreq:
1615 bmap->b_pops->bpop_abort_alloc_ptr(bmap, nreq);
1616 err_out_dreq:
1617 bmap->b_pops->bpop_abort_alloc_ptr(bmap, dreq);
1618 stats->bs_nblocks = 0;
1619 return ret;
1620
1621}
1622
1623static void
1624nilfs_btree_commit_convert_and_insert(struct nilfs_bmap *bmap,
1625 __u64 key, __u64 ptr,
1626 const __u64 *keys, const __u64 *ptrs,
1627 int n, __u64 low, __u64 high,
1628 union nilfs_bmap_ptr_req *dreq,
1629 union nilfs_bmap_ptr_req *nreq,
1630 struct buffer_head *bh)
1631{
1632 struct nilfs_btree *btree;
1633 struct nilfs_btree_node *node;
1634 __u64 tmpptr;
1635
1636 /* free resources */
1637 if (bmap->b_ops->bop_clear != NULL)
1638 bmap->b_ops->bop_clear(bmap);
1639
1640 /* ptr must be a pointer to a buffer head. */
1641 set_buffer_nilfs_volatile((struct buffer_head *)((unsigned long)ptr));
1642
1643 /* convert and insert */
1644 btree = (struct nilfs_btree *)bmap;
1645 nilfs_btree_init(bmap, low, high);
1646 if (nreq != NULL) {
1647 if (bmap->b_pops->bpop_commit_alloc_ptr != NULL) {
1648 bmap->b_pops->bpop_commit_alloc_ptr(bmap, dreq);
1649 bmap->b_pops->bpop_commit_alloc_ptr(bmap, nreq);
1650 }
1651
1652 /* create child node at level 1 */
1653 lock_buffer(bh);
1654 node = (struct nilfs_btree_node *)bh->b_data;
1655 nilfs_btree_node_init(btree, node, 0, 1, n, keys, ptrs);
1656 nilfs_btree_node_insert(btree, node,
1657 key, dreq->bpr_ptr, n);
1658 if (!buffer_dirty(bh))
1659 nilfs_btnode_mark_dirty(bh);
1660 if (!nilfs_bmap_dirty(bmap))
1661 nilfs_bmap_set_dirty(bmap);
1662
1663 unlock_buffer(bh);
1664 nilfs_bmap_put_block(bmap, bh);
1665
1666 /* create root node at level 2 */
1667 node = nilfs_btree_get_root(btree);
1668 tmpptr = nreq->bpr_ptr;
1669 nilfs_btree_node_init(btree, node, NILFS_BTREE_NODE_ROOT,
1670 2, 1, &keys[0], &tmpptr);
1671 } else {
1672 if (bmap->b_pops->bpop_commit_alloc_ptr != NULL)
1673 bmap->b_pops->bpop_commit_alloc_ptr(bmap, dreq);
1674
1675 /* create root node at level 1 */
1676 node = nilfs_btree_get_root(btree);
1677 nilfs_btree_node_init(btree, node, NILFS_BTREE_NODE_ROOT,
1678 1, n, keys, ptrs);
1679 nilfs_btree_node_insert(btree, node,
1680 key, dreq->bpr_ptr, n);
1681 if (!nilfs_bmap_dirty(bmap))
1682 nilfs_bmap_set_dirty(bmap);
1683 }
1684
1685 if (btree->bt_ops->btop_set_target != NULL)
1686 btree->bt_ops->btop_set_target(btree, key, dreq->bpr_ptr);
1687}
1688
1689/**
1690 * nilfs_btree_convert_and_insert -
1691 * @bmap:
1692 * @key:
1693 * @ptr:
1694 * @keys:
1695 * @ptrs:
1696 * @n:
1697 * @low:
1698 * @high:
1699 */
1700int nilfs_btree_convert_and_insert(struct nilfs_bmap *bmap,
1701 __u64 key, __u64 ptr,
1702 const __u64 *keys, const __u64 *ptrs,
1703 int n, __u64 low, __u64 high)
1704{
1705 struct buffer_head *bh;
1706 union nilfs_bmap_ptr_req dreq, nreq, *di, *ni;
1707 struct nilfs_bmap_stats stats;
1708 int ret;
1709
1710 if (n + 1 <= NILFS_BTREE_ROOT_NCHILDREN_MAX) {
1711 di = &dreq;
1712 ni = NULL;
1713 } else if ((n + 1) <= NILFS_BTREE_NODE_NCHILDREN_MAX(
1714 1 << bmap->b_inode->i_blkbits)) {
1715 di = &dreq;
1716 ni = &nreq;
1717 } else {
1718 di = NULL;
1719 ni = NULL;
1720 BUG();
1721 }
1722
1723 ret = nilfs_btree_prepare_convert_and_insert(bmap, key, di, ni, &bh,
1724 &stats);
1725 if (ret < 0)
1726 return ret;
1727 nilfs_btree_commit_convert_and_insert(bmap, key, ptr, keys, ptrs, n,
1728 low, high, di, ni, bh);
1729 nilfs_bmap_add_blocks(bmap, stats.bs_nblocks);
1730 return 0;
1731}
1732
1733static int nilfs_btree_propagate_p(struct nilfs_btree *btree,
1734 struct nilfs_btree_path *path,
1735 int level,
1736 struct buffer_head *bh)
1737{
1738 while ((++level < nilfs_btree_height(btree) - 1) &&
1739 !buffer_dirty(path[level].bp_bh))
1740 nilfs_btnode_mark_dirty(path[level].bp_bh);
1741
1742 return 0;
1743}
1744
1745static int nilfs_btree_prepare_update_v(struct nilfs_btree *btree,
1746 struct nilfs_btree_path *path,
1747 int level)
1748{
1749 struct nilfs_btree_node *parent;
1750 int ret;
1751
1752 parent = nilfs_btree_get_node(btree, path, level + 1);
1753 path[level].bp_oldreq.bpr_ptr =
1754 nilfs_btree_node_get_ptr(btree, parent,
1755 path[level + 1].bp_index);
1756 path[level].bp_newreq.bpr_ptr = path[level].bp_oldreq.bpr_ptr + 1;
1757 ret = nilfs_bmap_prepare_update(&btree->bt_bmap,
1758 &path[level].bp_oldreq,
1759 &path[level].bp_newreq);
1760 if (ret < 0)
1761 return ret;
1762
1763 if (buffer_nilfs_node(path[level].bp_bh)) {
1764 path[level].bp_ctxt.oldkey = path[level].bp_oldreq.bpr_ptr;
1765 path[level].bp_ctxt.newkey = path[level].bp_newreq.bpr_ptr;
1766 path[level].bp_ctxt.bh = path[level].bp_bh;
1767 ret = nilfs_btnode_prepare_change_key(
1768 &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache,
1769 &path[level].bp_ctxt);
1770 if (ret < 0) {
1771 nilfs_bmap_abort_update(&btree->bt_bmap,
1772 &path[level].bp_oldreq,
1773 &path[level].bp_newreq);
1774 return ret;
1775 }
1776 }
1777
1778 return 0;
1779}
1780
1781static void nilfs_btree_commit_update_v(struct nilfs_btree *btree,
1782 struct nilfs_btree_path *path,
1783 int level)
1784{
1785 struct nilfs_btree_node *parent;
1786
1787 nilfs_bmap_commit_update(&btree->bt_bmap,
1788 &path[level].bp_oldreq,
1789 &path[level].bp_newreq);
1790
1791 if (buffer_nilfs_node(path[level].bp_bh)) {
1792 nilfs_btnode_commit_change_key(
1793 &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache,
1794 &path[level].bp_ctxt);
1795 path[level].bp_bh = path[level].bp_ctxt.bh;
1796 }
1797 set_buffer_nilfs_volatile(path[level].bp_bh);
1798
1799 parent = nilfs_btree_get_node(btree, path, level + 1);
1800 nilfs_btree_node_set_ptr(btree, parent, path[level + 1].bp_index,
1801 path[level].bp_newreq.bpr_ptr);
1802}
1803
1804static void nilfs_btree_abort_update_v(struct nilfs_btree *btree,
1805 struct nilfs_btree_path *path,
1806 int level)
1807{
1808 nilfs_bmap_abort_update(&btree->bt_bmap,
1809 &path[level].bp_oldreq,
1810 &path[level].bp_newreq);
1811 if (buffer_nilfs_node(path[level].bp_bh))
1812 nilfs_btnode_abort_change_key(
1813 &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache,
1814 &path[level].bp_ctxt);
1815}
1816
1817static int nilfs_btree_prepare_propagate_v(struct nilfs_btree *btree,
1818 struct nilfs_btree_path *path,
1819 int minlevel,
1820 int *maxlevelp)
1821{
1822 int level, ret;
1823
1824 level = minlevel;
1825 if (!buffer_nilfs_volatile(path[level].bp_bh)) {
1826 ret = nilfs_btree_prepare_update_v(btree, path, level);
1827 if (ret < 0)
1828 return ret;
1829 }
1830 while ((++level < nilfs_btree_height(btree) - 1) &&
1831 !buffer_dirty(path[level].bp_bh)) {
1832
1833 WARN_ON(buffer_nilfs_volatile(path[level].bp_bh));
1834 ret = nilfs_btree_prepare_update_v(btree, path, level);
1835 if (ret < 0)
1836 goto out;
1837 }
1838
1839 /* success */
1840 *maxlevelp = level - 1;
1841 return 0;
1842
1843 /* error */
1844 out:
1845 while (--level > minlevel)
1846 nilfs_btree_abort_update_v(btree, path, level);
1847 if (!buffer_nilfs_volatile(path[level].bp_bh))
1848 nilfs_btree_abort_update_v(btree, path, level);
1849 return ret;
1850}
1851
1852static void nilfs_btree_commit_propagate_v(struct nilfs_btree *btree,
1853 struct nilfs_btree_path *path,
1854 int minlevel,
1855 int maxlevel,
1856 struct buffer_head *bh)
1857{
1858 int level;
1859
1860 if (!buffer_nilfs_volatile(path[minlevel].bp_bh))
1861 nilfs_btree_commit_update_v(btree, path, minlevel);
1862
1863 for (level = minlevel + 1; level <= maxlevel; level++)
1864 nilfs_btree_commit_update_v(btree, path, level);
1865}
1866
1867static int nilfs_btree_propagate_v(struct nilfs_btree *btree,
1868 struct nilfs_btree_path *path,
1869 int level,
1870 struct buffer_head *bh)
1871{
1872 int maxlevel, ret;
1873 struct nilfs_btree_node *parent;
1874 __u64 ptr;
1875
1876 get_bh(bh);
1877 path[level].bp_bh = bh;
1878 ret = nilfs_btree_prepare_propagate_v(btree, path, level, &maxlevel);
1879 if (ret < 0)
1880 goto out;
1881
1882 if (buffer_nilfs_volatile(path[level].bp_bh)) {
1883 parent = nilfs_btree_get_node(btree, path, level + 1);
1884 ptr = nilfs_btree_node_get_ptr(btree, parent,
1885 path[level + 1].bp_index);
1886 ret = nilfs_bmap_mark_dirty(&btree->bt_bmap, ptr);
1887 if (ret < 0)
1888 goto out;
1889 }
1890
1891 nilfs_btree_commit_propagate_v(btree, path, level, maxlevel, bh);
1892
1893 out:
1894 brelse(path[level].bp_bh);
1895 path[level].bp_bh = NULL;
1896 return ret;
1897}
1898
1899static int nilfs_btree_propagate(const struct nilfs_bmap *bmap,
1900 struct buffer_head *bh)
1901{
1902 struct nilfs_btree *btree;
1903 struct nilfs_btree_path *path;
1904 struct nilfs_btree_node *node;
1905 __u64 key;
1906 int level, ret;
1907
1908 WARN_ON(!buffer_dirty(bh));
1909
1910 btree = (struct nilfs_btree *)bmap;
1911 path = nilfs_btree_alloc_path(btree);
1912 if (path == NULL)
1913 return -ENOMEM;
1914 nilfs_btree_init_path(btree, path);
1915
1916 if (buffer_nilfs_node(bh)) {
1917 node = (struct nilfs_btree_node *)bh->b_data;
1918 key = nilfs_btree_node_get_key(btree, node, 0);
1919 level = nilfs_btree_node_get_level(btree, node);
1920 } else {
1921 key = nilfs_bmap_data_get_key(bmap, bh);
1922 level = NILFS_BTREE_LEVEL_DATA;
1923 }
1924
1925 ret = nilfs_btree_do_lookup(btree, path, key, NULL, level + 1);
1926 if (ret < 0) {
1927 if (unlikely(ret == -ENOENT))
1928 printk(KERN_CRIT "%s: key = %llu, level == %d\n",
1929 __func__, (unsigned long long)key, level);
1930 goto out;
1931 }
1932
1933 ret = btree->bt_ops->btop_propagate(btree, path, level, bh);
1934
1935 out:
1936 nilfs_btree_clear_path(btree, path);
1937 nilfs_btree_free_path(btree, path);
1938
1939 return ret;
1940}
1941
1942static int nilfs_btree_propagate_gc(const struct nilfs_bmap *bmap,
1943 struct buffer_head *bh)
1944{
1945 return nilfs_bmap_mark_dirty(bmap, bh->b_blocknr);
1946}
1947
1948static void nilfs_btree_add_dirty_buffer(struct nilfs_btree *btree,
1949 struct list_head *lists,
1950 struct buffer_head *bh)
1951{
1952 struct list_head *head;
1953 struct buffer_head *cbh;
1954 struct nilfs_btree_node *node, *cnode;
1955 __u64 key, ckey;
1956 int level;
1957
1958 get_bh(bh);
1959 node = (struct nilfs_btree_node *)bh->b_data;
1960 key = nilfs_btree_node_get_key(btree, node, 0);
1961 level = nilfs_btree_node_get_level(btree, node);
1962 list_for_each(head, &lists[level]) {
1963 cbh = list_entry(head, struct buffer_head, b_assoc_buffers);
1964 cnode = (struct nilfs_btree_node *)cbh->b_data;
1965 ckey = nilfs_btree_node_get_key(btree, cnode, 0);
1966 if (key < ckey)
1967 break;
1968 }
1969 list_add_tail(&bh->b_assoc_buffers, head);
1970}
1971
1972static void nilfs_btree_lookup_dirty_buffers(struct nilfs_bmap *bmap,
1973 struct list_head *listp)
1974{
1975 struct nilfs_btree *btree = (struct nilfs_btree *)bmap;
1976 struct address_space *btcache = &NILFS_BMAP_I(bmap)->i_btnode_cache;
1977 struct list_head lists[NILFS_BTREE_LEVEL_MAX];
1978 struct pagevec pvec;
1979 struct buffer_head *bh, *head;
1980 pgoff_t index = 0;
1981 int level, i;
1982
1983 for (level = NILFS_BTREE_LEVEL_NODE_MIN;
1984 level < NILFS_BTREE_LEVEL_MAX;
1985 level++)
1986 INIT_LIST_HEAD(&lists[level]);
1987
1988 pagevec_init(&pvec, 0);
1989
1990 while (pagevec_lookup_tag(&pvec, btcache, &index, PAGECACHE_TAG_DIRTY,
1991 PAGEVEC_SIZE)) {
1992 for (i = 0; i < pagevec_count(&pvec); i++) {
1993 bh = head = page_buffers(pvec.pages[i]);
1994 do {
1995 if (buffer_dirty(bh))
1996 nilfs_btree_add_dirty_buffer(btree,
1997 lists, bh);
1998 } while ((bh = bh->b_this_page) != head);
1999 }
2000 pagevec_release(&pvec);
2001 cond_resched();
2002 }
2003
2004 for (level = NILFS_BTREE_LEVEL_NODE_MIN;
2005 level < NILFS_BTREE_LEVEL_MAX;
2006 level++)
2007 list_splice(&lists[level], listp->prev);
2008}
2009
2010static int nilfs_btree_assign_p(struct nilfs_btree *btree,
2011 struct nilfs_btree_path *path,
2012 int level,
2013 struct buffer_head **bh,
2014 sector_t blocknr,
2015 union nilfs_binfo *binfo)
2016{
2017 struct nilfs_btree_node *parent;
2018 __u64 key;
2019 __u64 ptr;
2020 int ret;
2021
2022 parent = nilfs_btree_get_node(btree, path, level + 1);
2023 ptr = nilfs_btree_node_get_ptr(btree, parent,
2024 path[level + 1].bp_index);
2025 if (buffer_nilfs_node(*bh)) {
2026 path[level].bp_ctxt.oldkey = ptr;
2027 path[level].bp_ctxt.newkey = blocknr;
2028 path[level].bp_ctxt.bh = *bh;
2029 ret = nilfs_btnode_prepare_change_key(
2030 &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache,
2031 &path[level].bp_ctxt);
2032 if (ret < 0)
2033 return ret;
2034 nilfs_btnode_commit_change_key(
2035 &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache,
2036 &path[level].bp_ctxt);
2037 *bh = path[level].bp_ctxt.bh;
2038 }
2039
2040 nilfs_btree_node_set_ptr(btree, parent,
2041 path[level + 1].bp_index, blocknr);
2042
2043 key = nilfs_btree_node_get_key(btree, parent,
2044 path[level + 1].bp_index);
2045 /* on-disk format */
2046 binfo->bi_dat.bi_blkoff = nilfs_bmap_key_to_dkey(key);
2047 binfo->bi_dat.bi_level = level;
2048
2049 return 0;
2050}
2051
2052static int nilfs_btree_assign_v(struct nilfs_btree *btree,
2053 struct nilfs_btree_path *path,
2054 int level,
2055 struct buffer_head **bh,
2056 sector_t blocknr,
2057 union nilfs_binfo *binfo)
2058{
2059 struct nilfs_btree_node *parent;
2060 __u64 key;
2061 __u64 ptr;
2062 union nilfs_bmap_ptr_req req;
2063 int ret;
2064
2065 parent = nilfs_btree_get_node(btree, path, level + 1);
2066 ptr = nilfs_btree_node_get_ptr(btree, parent,
2067 path[level + 1].bp_index);
2068 req.bpr_ptr = ptr;
2069 ret = btree->bt_bmap.b_pops->bpop_prepare_start_ptr(&btree->bt_bmap,
2070 &req);
2071 if (ret < 0)
2072 return ret;
2073 btree->bt_bmap.b_pops->bpop_commit_start_ptr(&btree->bt_bmap,
2074 &req, blocknr);
2075
2076 key = nilfs_btree_node_get_key(btree, parent,
2077 path[level + 1].bp_index);
2078 /* on-disk format */
2079 binfo->bi_v.bi_vblocknr = nilfs_bmap_ptr_to_dptr(ptr);
2080 binfo->bi_v.bi_blkoff = nilfs_bmap_key_to_dkey(key);
2081
2082 return 0;
2083}
2084
2085static int nilfs_btree_assign(struct nilfs_bmap *bmap,
2086 struct buffer_head **bh,
2087 sector_t blocknr,
2088 union nilfs_binfo *binfo)
2089{
2090 struct nilfs_btree *btree;
2091 struct nilfs_btree_path *path;
2092 struct nilfs_btree_node *node;
2093 __u64 key;
2094 int level, ret;
2095
2096 btree = (struct nilfs_btree *)bmap;
2097 path = nilfs_btree_alloc_path(btree);
2098 if (path == NULL)
2099 return -ENOMEM;
2100 nilfs_btree_init_path(btree, path);
2101
2102 if (buffer_nilfs_node(*bh)) {
2103 node = (struct nilfs_btree_node *)(*bh)->b_data;
2104 key = nilfs_btree_node_get_key(btree, node, 0);
2105 level = nilfs_btree_node_get_level(btree, node);
2106 } else {
2107 key = nilfs_bmap_data_get_key(bmap, *bh);
2108 level = NILFS_BTREE_LEVEL_DATA;
2109 }
2110
2111 ret = nilfs_btree_do_lookup(btree, path, key, NULL, level + 1);
2112 if (ret < 0) {
2113 WARN_ON(ret == -ENOENT);
2114 goto out;
2115 }
2116
2117 ret = btree->bt_ops->btop_assign(btree, path, level, bh,
2118 blocknr, binfo);
2119
2120 out:
2121 nilfs_btree_clear_path(btree, path);
2122 nilfs_btree_free_path(btree, path);
2123
2124 return ret;
2125}
2126
2127static int nilfs_btree_assign_gc(struct nilfs_bmap *bmap,
2128 struct buffer_head **bh,
2129 sector_t blocknr,
2130 union nilfs_binfo *binfo)
2131{
2132 struct nilfs_btree *btree;
2133 struct nilfs_btree_node *node;
2134 __u64 key;
2135 int ret;
2136
2137 btree = (struct nilfs_btree *)bmap;
2138 ret = nilfs_bmap_move_v(bmap, (*bh)->b_blocknr, blocknr);
2139 if (ret < 0)
2140 return ret;
2141
2142 if (buffer_nilfs_node(*bh)) {
2143 node = (struct nilfs_btree_node *)(*bh)->b_data;
2144 key = nilfs_btree_node_get_key(btree, node, 0);
2145 } else
2146 key = nilfs_bmap_data_get_key(bmap, *bh);
2147
2148 /* on-disk format */
2149 binfo->bi_v.bi_vblocknr = cpu_to_le64((*bh)->b_blocknr);
2150 binfo->bi_v.bi_blkoff = nilfs_bmap_key_to_dkey(key);
2151
2152 return 0;
2153}
2154
2155static int nilfs_btree_mark(struct nilfs_bmap *bmap, __u64 key, int level)
2156{
2157 struct buffer_head *bh;
2158 struct nilfs_btree *btree;
2159 struct nilfs_btree_path *path;
2160 __u64 ptr;
2161 int ret;
2162
2163 btree = (struct nilfs_btree *)bmap;
2164 path = nilfs_btree_alloc_path(btree);
2165 if (path == NULL)
2166 return -ENOMEM;
2167 nilfs_btree_init_path(btree, path);
2168
2169 ret = nilfs_btree_do_lookup(btree, path, key, &ptr, level + 1);
2170 if (ret < 0) {
2171 WARN_ON(ret == -ENOENT);
2172 goto out;
2173 }
2174 ret = nilfs_bmap_get_block(&btree->bt_bmap, ptr, &bh);
2175 if (ret < 0) {
2176 WARN_ON(ret == -ENOENT);
2177 goto out;
2178 }
2179
2180 if (!buffer_dirty(bh))
2181 nilfs_btnode_mark_dirty(bh);
2182 nilfs_bmap_put_block(&btree->bt_bmap, bh);
2183 if (!nilfs_bmap_dirty(&btree->bt_bmap))
2184 nilfs_bmap_set_dirty(&btree->bt_bmap);
2185
2186 out:
2187 nilfs_btree_clear_path(btree, path);
2188 nilfs_btree_free_path(btree, path);
2189 return ret;
2190}
2191
2192static const struct nilfs_bmap_operations nilfs_btree_ops = {
2193 .bop_lookup = nilfs_btree_lookup,
2194 .bop_insert = nilfs_btree_insert,
2195 .bop_delete = nilfs_btree_delete,
2196 .bop_clear = NULL,
2197
2198 .bop_propagate = nilfs_btree_propagate,
2199
2200 .bop_lookup_dirty_buffers = nilfs_btree_lookup_dirty_buffers,
2201
2202 .bop_assign = nilfs_btree_assign,
2203 .bop_mark = nilfs_btree_mark,
2204
2205 .bop_last_key = nilfs_btree_last_key,
2206 .bop_check_insert = NULL,
2207 .bop_check_delete = nilfs_btree_check_delete,
2208 .bop_gather_data = nilfs_btree_gather_data,
2209};
2210
2211static const struct nilfs_bmap_operations nilfs_btree_ops_gc = {
2212 .bop_lookup = NULL,
2213 .bop_insert = NULL,
2214 .bop_delete = NULL,
2215 .bop_clear = NULL,
2216
2217 .bop_propagate = nilfs_btree_propagate_gc,
2218
2219 .bop_lookup_dirty_buffers = nilfs_btree_lookup_dirty_buffers,
2220
2221 .bop_assign = nilfs_btree_assign_gc,
2222 .bop_mark = NULL,
2223
2224 .bop_last_key = NULL,
2225 .bop_check_insert = NULL,
2226 .bop_check_delete = NULL,
2227 .bop_gather_data = NULL,
2228};
2229
2230static const struct nilfs_btree_operations nilfs_btree_ops_v = {
2231 .btop_find_target = nilfs_btree_find_target_v,
2232 .btop_set_target = nilfs_btree_set_target_v,
2233 .btop_propagate = nilfs_btree_propagate_v,
2234 .btop_assign = nilfs_btree_assign_v,
2235};
2236
2237static const struct nilfs_btree_operations nilfs_btree_ops_p = {
2238 .btop_find_target = NULL,
2239 .btop_set_target = NULL,
2240 .btop_propagate = nilfs_btree_propagate_p,
2241 .btop_assign = nilfs_btree_assign_p,
2242};
2243
2244int nilfs_btree_init(struct nilfs_bmap *bmap, __u64 low, __u64 high)
2245{
2246 struct nilfs_btree *btree;
2247
2248 btree = (struct nilfs_btree *)bmap;
2249 bmap->b_ops = &nilfs_btree_ops;
2250 bmap->b_low = low;
2251 bmap->b_high = high;
2252 switch (bmap->b_inode->i_ino) {
2253 case NILFS_DAT_INO:
2254 btree->bt_ops = &nilfs_btree_ops_p;
2255 break;
2256 default:
2257 btree->bt_ops = &nilfs_btree_ops_v;
2258 break;
2259 }
2260
2261 return 0;
2262}
2263
2264void nilfs_btree_init_gc(struct nilfs_bmap *bmap)
2265{
2266 bmap->b_low = NILFS_BMAP_LARGE_LOW;
2267 bmap->b_high = NILFS_BMAP_LARGE_HIGH;
2268 bmap->b_ops = &nilfs_btree_ops_gc;
2269}
diff --git a/fs/nilfs2/btree.h b/fs/nilfs2/btree.h
new file mode 100644
index 000000000000..4766deb52fb1
--- /dev/null
+++ b/fs/nilfs2/btree.h
@@ -0,0 +1,117 @@
1/*
2 * btree.h - NILFS B-tree.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_BTREE_H
24#define _NILFS_BTREE_H
25
26#include <linux/types.h>
27#include <linux/buffer_head.h>
28#include <linux/list.h>
29#include <linux/nilfs2_fs.h>
30#include "btnode.h"
31#include "bmap.h"
32
33struct nilfs_btree;
34struct nilfs_btree_path;
35
36/**
37 * struct nilfs_btree_operations - B-tree operation table
38 */
39struct nilfs_btree_operations {
40 __u64 (*btop_find_target)(const struct nilfs_btree *,
41 const struct nilfs_btree_path *, __u64);
42 void (*btop_set_target)(struct nilfs_btree *, __u64, __u64);
43
44 struct the_nilfs *(*btop_get_nilfs)(struct nilfs_btree *);
45
46 int (*btop_propagate)(struct nilfs_btree *,
47 struct nilfs_btree_path *,
48 int,
49 struct buffer_head *);
50 int (*btop_assign)(struct nilfs_btree *,
51 struct nilfs_btree_path *,
52 int,
53 struct buffer_head **,
54 sector_t,
55 union nilfs_binfo *);
56};
57
58/**
59 * struct nilfs_btree_node - B-tree node
60 * @bn_flags: flags
61 * @bn_level: level
62 * @bn_nchildren: number of children
63 * @bn_pad: padding
64 */
65struct nilfs_btree_node {
66 __u8 bn_flags;
67 __u8 bn_level;
68 __le16 bn_nchildren;
69 __le32 bn_pad;
70};
71
72/* flags */
73#define NILFS_BTREE_NODE_ROOT 0x01
74
75/* level */
76#define NILFS_BTREE_LEVEL_DATA 0
77#define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1)
78#define NILFS_BTREE_LEVEL_MAX 14
79
80/**
81 * struct nilfs_btree - B-tree structure
82 * @bt_bmap: bmap base structure
83 * @bt_ops: B-tree operation table
84 */
85struct nilfs_btree {
86 struct nilfs_bmap bt_bmap;
87
88 /* B-tree-specific members */
89 const struct nilfs_btree_operations *bt_ops;
90};
91
92
93#define NILFS_BTREE_ROOT_SIZE NILFS_BMAP_SIZE
94#define NILFS_BTREE_ROOT_NCHILDREN_MAX \
95 ((NILFS_BTREE_ROOT_SIZE - sizeof(struct nilfs_btree_node)) / \
96 (sizeof(__le64 /* dkey */) + sizeof(__le64 /* dptr */)))
97#define NILFS_BTREE_ROOT_NCHILDREN_MIN 0
98#define NILFS_BTREE_NODE_EXTRA_PAD_SIZE (sizeof(__le64))
99#define NILFS_BTREE_NODE_NCHILDREN_MAX(nodesize) \
100 (((nodesize) - sizeof(struct nilfs_btree_node) - \
101 NILFS_BTREE_NODE_EXTRA_PAD_SIZE) / \
102 (sizeof(__le64 /* dkey */) + sizeof(__le64 /* dptr */)))
103#define NILFS_BTREE_NODE_NCHILDREN_MIN(nodesize) \
104 ((NILFS_BTREE_NODE_NCHILDREN_MAX(nodesize) - 1) / 2 + 1)
105#define NILFS_BTREE_KEY_MIN ((__u64)0)
106#define NILFS_BTREE_KEY_MAX (~(__u64)0)
107
108
109int nilfs_btree_path_cache_init(void);
110void nilfs_btree_path_cache_destroy(void);
111int nilfs_btree_init(struct nilfs_bmap *, __u64, __u64);
112int nilfs_btree_convert_and_insert(struct nilfs_bmap *, __u64, __u64,
113 const __u64 *, const __u64 *,
114 int, __u64, __u64);
115void nilfs_btree_init_gc(struct nilfs_bmap *);
116
117#endif /* _NILFS_BTREE_H */
diff --git a/fs/nilfs2/cpfile.c b/fs/nilfs2/cpfile.c
new file mode 100644
index 000000000000..e90b60dfced9
--- /dev/null
+++ b/fs/nilfs2/cpfile.c
@@ -0,0 +1,925 @@
1/*
2 * cpfile.c - NILFS checkpoint file.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/kernel.h>
24#include <linux/fs.h>
25#include <linux/string.h>
26#include <linux/buffer_head.h>
27#include <linux/errno.h>
28#include <linux/nilfs2_fs.h>
29#include "mdt.h"
30#include "cpfile.h"
31
32
33static inline unsigned long
34nilfs_cpfile_checkpoints_per_block(const struct inode *cpfile)
35{
36 return NILFS_MDT(cpfile)->mi_entries_per_block;
37}
38
39/* block number from the beginning of the file */
40static unsigned long
41nilfs_cpfile_get_blkoff(const struct inode *cpfile, __u64 cno)
42{
43 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1;
44 do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile));
45 return (unsigned long)tcno;
46}
47
48/* offset in block */
49static unsigned long
50nilfs_cpfile_get_offset(const struct inode *cpfile, __u64 cno)
51{
52 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1;
53 return do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile));
54}
55
56static unsigned long
57nilfs_cpfile_checkpoints_in_block(const struct inode *cpfile,
58 __u64 curr,
59 __u64 max)
60{
61 return min_t(__u64,
62 nilfs_cpfile_checkpoints_per_block(cpfile) -
63 nilfs_cpfile_get_offset(cpfile, curr),
64 max - curr);
65}
66
67static inline int nilfs_cpfile_is_in_first(const struct inode *cpfile,
68 __u64 cno)
69{
70 return nilfs_cpfile_get_blkoff(cpfile, cno) == 0;
71}
72
73static unsigned int
74nilfs_cpfile_block_add_valid_checkpoints(const struct inode *cpfile,
75 struct buffer_head *bh,
76 void *kaddr,
77 unsigned int n)
78{
79 struct nilfs_checkpoint *cp = kaddr + bh_offset(bh);
80 unsigned int count;
81
82 count = le32_to_cpu(cp->cp_checkpoints_count) + n;
83 cp->cp_checkpoints_count = cpu_to_le32(count);
84 return count;
85}
86
87static unsigned int
88nilfs_cpfile_block_sub_valid_checkpoints(const struct inode *cpfile,
89 struct buffer_head *bh,
90 void *kaddr,
91 unsigned int n)
92{
93 struct nilfs_checkpoint *cp = kaddr + bh_offset(bh);
94 unsigned int count;
95
96 WARN_ON(le32_to_cpu(cp->cp_checkpoints_count) < n);
97 count = le32_to_cpu(cp->cp_checkpoints_count) - n;
98 cp->cp_checkpoints_count = cpu_to_le32(count);
99 return count;
100}
101
102static inline struct nilfs_cpfile_header *
103nilfs_cpfile_block_get_header(const struct inode *cpfile,
104 struct buffer_head *bh,
105 void *kaddr)
106{
107 return kaddr + bh_offset(bh);
108}
109
110static struct nilfs_checkpoint *
111nilfs_cpfile_block_get_checkpoint(const struct inode *cpfile, __u64 cno,
112 struct buffer_head *bh,
113 void *kaddr)
114{
115 return kaddr + bh_offset(bh) + nilfs_cpfile_get_offset(cpfile, cno) *
116 NILFS_MDT(cpfile)->mi_entry_size;
117}
118
119static void nilfs_cpfile_block_init(struct inode *cpfile,
120 struct buffer_head *bh,
121 void *kaddr)
122{
123 struct nilfs_checkpoint *cp = kaddr + bh_offset(bh);
124 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size;
125 int n = nilfs_cpfile_checkpoints_per_block(cpfile);
126
127 while (n-- > 0) {
128 nilfs_checkpoint_set_invalid(cp);
129 cp = (void *)cp + cpsz;
130 }
131}
132
133static inline int nilfs_cpfile_get_header_block(struct inode *cpfile,
134 struct buffer_head **bhp)
135{
136 return nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp);
137}
138
139static inline int nilfs_cpfile_get_checkpoint_block(struct inode *cpfile,
140 __u64 cno,
141 int create,
142 struct buffer_head **bhp)
143{
144 return nilfs_mdt_get_block(cpfile,
145 nilfs_cpfile_get_blkoff(cpfile, cno),
146 create, nilfs_cpfile_block_init, bhp);
147}
148
149static inline int nilfs_cpfile_delete_checkpoint_block(struct inode *cpfile,
150 __u64 cno)
151{
152 return nilfs_mdt_delete_block(cpfile,
153 nilfs_cpfile_get_blkoff(cpfile, cno));
154}
155
156/**
157 * nilfs_cpfile_get_checkpoint - get a checkpoint
158 * @cpfile: inode of checkpoint file
159 * @cno: checkpoint number
160 * @create: create flag
161 * @cpp: pointer to a checkpoint
162 * @bhp: pointer to a buffer head
163 *
164 * Description: nilfs_cpfile_get_checkpoint() acquires the checkpoint
165 * specified by @cno. A new checkpoint will be created if @cno is the current
166 * checkpoint number and @create is nonzero.
167 *
168 * Return Value: On success, 0 is returned, and the checkpoint and the
169 * buffer head of the buffer on which the checkpoint is located are stored in
170 * the place pointed by @cpp and @bhp, respectively. On error, one of the
171 * following negative error codes is returned.
172 *
173 * %-EIO - I/O error.
174 *
175 * %-ENOMEM - Insufficient amount of memory available.
176 *
177 * %-ENOENT - No such checkpoint.
178 *
179 * %-EINVAL - invalid checkpoint.
180 */
181int nilfs_cpfile_get_checkpoint(struct inode *cpfile,
182 __u64 cno,
183 int create,
184 struct nilfs_checkpoint **cpp,
185 struct buffer_head **bhp)
186{
187 struct buffer_head *header_bh, *cp_bh;
188 struct nilfs_cpfile_header *header;
189 struct nilfs_checkpoint *cp;
190 void *kaddr;
191 int ret;
192
193 if (unlikely(cno < 1 || cno > nilfs_mdt_cno(cpfile) ||
194 (cno < nilfs_mdt_cno(cpfile) && create)))
195 return -EINVAL;
196
197 down_write(&NILFS_MDT(cpfile)->mi_sem);
198
199 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
200 if (ret < 0)
201 goto out_sem;
202 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, create, &cp_bh);
203 if (ret < 0)
204 goto out_header;
205 kaddr = kmap(cp_bh->b_page);
206 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
207 if (nilfs_checkpoint_invalid(cp)) {
208 if (!create) {
209 kunmap(cp_bh->b_page);
210 brelse(cp_bh);
211 ret = -ENOENT;
212 goto out_header;
213 }
214 /* a newly-created checkpoint */
215 nilfs_checkpoint_clear_invalid(cp);
216 if (!nilfs_cpfile_is_in_first(cpfile, cno))
217 nilfs_cpfile_block_add_valid_checkpoints(cpfile, cp_bh,
218 kaddr, 1);
219 nilfs_mdt_mark_buffer_dirty(cp_bh);
220
221 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
222 header = nilfs_cpfile_block_get_header(cpfile, header_bh,
223 kaddr);
224 le64_add_cpu(&header->ch_ncheckpoints, 1);
225 kunmap_atomic(kaddr, KM_USER0);
226 nilfs_mdt_mark_buffer_dirty(header_bh);
227 nilfs_mdt_mark_dirty(cpfile);
228 }
229
230 if (cpp != NULL)
231 *cpp = cp;
232 *bhp = cp_bh;
233
234 out_header:
235 brelse(header_bh);
236
237 out_sem:
238 up_write(&NILFS_MDT(cpfile)->mi_sem);
239 return ret;
240}
241
242/**
243 * nilfs_cpfile_put_checkpoint - put a checkpoint
244 * @cpfile: inode of checkpoint file
245 * @cno: checkpoint number
246 * @bh: buffer head
247 *
248 * Description: nilfs_cpfile_put_checkpoint() releases the checkpoint
249 * specified by @cno. @bh must be the buffer head which has been returned by
250 * a previous call to nilfs_cpfile_get_checkpoint() with @cno.
251 */
252void nilfs_cpfile_put_checkpoint(struct inode *cpfile, __u64 cno,
253 struct buffer_head *bh)
254{
255 kunmap(bh->b_page);
256 brelse(bh);
257}
258
259/**
260 * nilfs_cpfile_delete_checkpoints - delete checkpoints
261 * @cpfile: inode of checkpoint file
262 * @start: start checkpoint number
263 * @end: end checkpoint numer
264 *
265 * Description: nilfs_cpfile_delete_checkpoints() deletes the checkpoints in
266 * the period from @start to @end, excluding @end itself. The checkpoints
267 * which have been already deleted are ignored.
268 *
269 * Return Value: On success, 0 is returned. On error, one of the following
270 * negative error codes is returned.
271 *
272 * %-EIO - I/O error.
273 *
274 * %-ENOMEM - Insufficient amount of memory available.
275 *
276 * %-EINVAL - invalid checkpoints.
277 */
278int nilfs_cpfile_delete_checkpoints(struct inode *cpfile,
279 __u64 start,
280 __u64 end)
281{
282 struct buffer_head *header_bh, *cp_bh;
283 struct nilfs_cpfile_header *header;
284 struct nilfs_checkpoint *cp;
285 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size;
286 __u64 cno;
287 void *kaddr;
288 unsigned long tnicps;
289 int ret, ncps, nicps, count, i;
290
291 if (unlikely(start == 0 || start > end)) {
292 printk(KERN_ERR "%s: invalid range of checkpoint numbers: "
293 "[%llu, %llu)\n", __func__,
294 (unsigned long long)start, (unsigned long long)end);
295 return -EINVAL;
296 }
297
298 /* cannot delete the latest checkpoint */
299 if (start == nilfs_mdt_cno(cpfile) - 1)
300 return -EPERM;
301
302 down_write(&NILFS_MDT(cpfile)->mi_sem);
303
304 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
305 if (ret < 0)
306 goto out_sem;
307 tnicps = 0;
308
309 for (cno = start; cno < end; cno += ncps) {
310 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end);
311 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh);
312 if (ret < 0) {
313 if (ret != -ENOENT)
314 goto out_sem;
315 /* skip hole */
316 ret = 0;
317 continue;
318 }
319
320 kaddr = kmap_atomic(cp_bh->b_page, KM_USER0);
321 cp = nilfs_cpfile_block_get_checkpoint(
322 cpfile, cno, cp_bh, kaddr);
323 nicps = 0;
324 for (i = 0; i < ncps; i++, cp = (void *)cp + cpsz) {
325 WARN_ON(nilfs_checkpoint_snapshot(cp));
326 if (!nilfs_checkpoint_invalid(cp)) {
327 nilfs_checkpoint_set_invalid(cp);
328 nicps++;
329 }
330 }
331 if (nicps > 0) {
332 tnicps += nicps;
333 nilfs_mdt_mark_buffer_dirty(cp_bh);
334 nilfs_mdt_mark_dirty(cpfile);
335 if (!nilfs_cpfile_is_in_first(cpfile, cno) &&
336 (count = nilfs_cpfile_block_sub_valid_checkpoints(
337 cpfile, cp_bh, kaddr, nicps)) == 0) {
338 /* make hole */
339 kunmap_atomic(kaddr, KM_USER0);
340 brelse(cp_bh);
341 ret = nilfs_cpfile_delete_checkpoint_block(
342 cpfile, cno);
343 if (ret == 0)
344 continue;
345 printk(KERN_ERR "%s: cannot delete block\n",
346 __func__);
347 goto out_sem;
348 }
349 }
350
351 kunmap_atomic(kaddr, KM_USER0);
352 brelse(cp_bh);
353 }
354
355 if (tnicps > 0) {
356 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
357 header = nilfs_cpfile_block_get_header(cpfile, header_bh,
358 kaddr);
359 le64_add_cpu(&header->ch_ncheckpoints, -(u64)tnicps);
360 nilfs_mdt_mark_buffer_dirty(header_bh);
361 nilfs_mdt_mark_dirty(cpfile);
362 kunmap_atomic(kaddr, KM_USER0);
363 }
364 brelse(header_bh);
365
366 out_sem:
367 up_write(&NILFS_MDT(cpfile)->mi_sem);
368 return ret;
369}
370
371static void nilfs_cpfile_checkpoint_to_cpinfo(struct inode *cpfile,
372 struct nilfs_checkpoint *cp,
373 struct nilfs_cpinfo *ci)
374{
375 ci->ci_flags = le32_to_cpu(cp->cp_flags);
376 ci->ci_cno = le64_to_cpu(cp->cp_cno);
377 ci->ci_create = le64_to_cpu(cp->cp_create);
378 ci->ci_nblk_inc = le64_to_cpu(cp->cp_nblk_inc);
379 ci->ci_inodes_count = le64_to_cpu(cp->cp_inodes_count);
380 ci->ci_blocks_count = le64_to_cpu(cp->cp_blocks_count);
381 ci->ci_next = le64_to_cpu(cp->cp_snapshot_list.ssl_next);
382}
383
384static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 *cnop,
385 struct nilfs_cpinfo *ci, size_t nci)
386{
387 struct nilfs_checkpoint *cp;
388 struct buffer_head *bh;
389 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size;
390 __u64 cur_cno = nilfs_mdt_cno(cpfile), cno = *cnop;
391 void *kaddr;
392 int n, ret;
393 int ncps, i;
394
395 if (cno == 0)
396 return -ENOENT; /* checkpoint number 0 is invalid */
397 down_read(&NILFS_MDT(cpfile)->mi_sem);
398
399 for (n = 0; cno < cur_cno && n < nci; cno += ncps) {
400 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, cur_cno);
401 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh);
402 if (ret < 0) {
403 if (ret != -ENOENT)
404 goto out;
405 continue; /* skip hole */
406 }
407
408 kaddr = kmap_atomic(bh->b_page, KM_USER0);
409 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr);
410 for (i = 0; i < ncps && n < nci; i++, cp = (void *)cp + cpsz) {
411 if (!nilfs_checkpoint_invalid(cp))
412 nilfs_cpfile_checkpoint_to_cpinfo(
413 cpfile, cp, &ci[n++]);
414 }
415 kunmap_atomic(kaddr, KM_USER0);
416 brelse(bh);
417 }
418
419 ret = n;
420 if (n > 0)
421 *cnop = ci[n - 1].ci_cno + 1;
422
423 out:
424 up_read(&NILFS_MDT(cpfile)->mi_sem);
425 return ret;
426}
427
428static ssize_t nilfs_cpfile_do_get_ssinfo(struct inode *cpfile, __u64 *cnop,
429 struct nilfs_cpinfo *ci, size_t nci)
430{
431 struct buffer_head *bh;
432 struct nilfs_cpfile_header *header;
433 struct nilfs_checkpoint *cp;
434 __u64 curr = *cnop, next;
435 unsigned long curr_blkoff, next_blkoff;
436 void *kaddr;
437 int n = 0, ret;
438
439 down_read(&NILFS_MDT(cpfile)->mi_sem);
440
441 if (curr == 0) {
442 ret = nilfs_cpfile_get_header_block(cpfile, &bh);
443 if (ret < 0)
444 goto out;
445 kaddr = kmap_atomic(bh->b_page, KM_USER0);
446 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr);
447 curr = le64_to_cpu(header->ch_snapshot_list.ssl_next);
448 kunmap_atomic(kaddr, KM_USER0);
449 brelse(bh);
450 if (curr == 0) {
451 ret = 0;
452 goto out;
453 }
454 } else if (unlikely(curr == ~(__u64)0)) {
455 ret = 0;
456 goto out;
457 }
458
459 curr_blkoff = nilfs_cpfile_get_blkoff(cpfile, curr);
460 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, 0, &bh);
461 if (unlikely(ret < 0)) {
462 if (ret == -ENOENT)
463 ret = 0; /* No snapshots (started from a hole block) */
464 goto out;
465 }
466 kaddr = kmap_atomic(bh->b_page, KM_USER0);
467 while (n < nci) {
468 cp = nilfs_cpfile_block_get_checkpoint(cpfile, curr, bh, kaddr);
469 curr = ~(__u64)0; /* Terminator */
470 if (unlikely(nilfs_checkpoint_invalid(cp) ||
471 !nilfs_checkpoint_snapshot(cp)))
472 break;
473 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, &ci[n++]);
474 next = le64_to_cpu(cp->cp_snapshot_list.ssl_next);
475 if (next == 0)
476 break; /* reach end of the snapshot list */
477
478 next_blkoff = nilfs_cpfile_get_blkoff(cpfile, next);
479 if (curr_blkoff != next_blkoff) {
480 kunmap_atomic(kaddr, KM_USER0);
481 brelse(bh);
482 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next,
483 0, &bh);
484 if (unlikely(ret < 0)) {
485 WARN_ON(ret == -ENOENT);
486 goto out;
487 }
488 kaddr = kmap_atomic(bh->b_page, KM_USER0);
489 }
490 curr = next;
491 curr_blkoff = next_blkoff;
492 }
493 kunmap_atomic(kaddr, KM_USER0);
494 brelse(bh);
495 *cnop = curr;
496 ret = n;
497
498 out:
499 up_read(&NILFS_MDT(cpfile)->mi_sem);
500 return ret;
501}
502
503/**
504 * nilfs_cpfile_get_cpinfo -
505 * @cpfile:
506 * @cno:
507 * @ci:
508 * @nci:
509 */
510
511ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode,
512 struct nilfs_cpinfo *ci, size_t nci)
513{
514 switch (mode) {
515 case NILFS_CHECKPOINT:
516 return nilfs_cpfile_do_get_cpinfo(cpfile, cnop, ci, nci);
517 case NILFS_SNAPSHOT:
518 return nilfs_cpfile_do_get_ssinfo(cpfile, cnop, ci, nci);
519 default:
520 return -EINVAL;
521 }
522}
523
524/**
525 * nilfs_cpfile_delete_checkpoint -
526 * @cpfile:
527 * @cno:
528 */
529int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno)
530{
531 struct nilfs_cpinfo ci;
532 __u64 tcno = cno;
533 ssize_t nci;
534 int ret;
535
536 nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, 1);
537 if (nci < 0)
538 return nci;
539 else if (nci == 0 || ci.ci_cno != cno)
540 return -ENOENT;
541
542 /* cannot delete the latest checkpoint nor snapshots */
543 ret = nilfs_cpinfo_snapshot(&ci);
544 if (ret < 0)
545 return ret;
546 else if (ret > 0 || cno == nilfs_mdt_cno(cpfile) - 1)
547 return -EPERM;
548
549 return nilfs_cpfile_delete_checkpoints(cpfile, cno, cno + 1);
550}
551
552static struct nilfs_snapshot_list *
553nilfs_cpfile_block_get_snapshot_list(const struct inode *cpfile,
554 __u64 cno,
555 struct buffer_head *bh,
556 void *kaddr)
557{
558 struct nilfs_cpfile_header *header;
559 struct nilfs_checkpoint *cp;
560 struct nilfs_snapshot_list *list;
561
562 if (cno != 0) {
563 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr);
564 list = &cp->cp_snapshot_list;
565 } else {
566 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr);
567 list = &header->ch_snapshot_list;
568 }
569 return list;
570}
571
572static int nilfs_cpfile_set_snapshot(struct inode *cpfile, __u64 cno)
573{
574 struct buffer_head *header_bh, *curr_bh, *prev_bh, *cp_bh;
575 struct nilfs_cpfile_header *header;
576 struct nilfs_checkpoint *cp;
577 struct nilfs_snapshot_list *list;
578 __u64 curr, prev;
579 unsigned long curr_blkoff, prev_blkoff;
580 void *kaddr;
581 int ret;
582
583 if (cno == 0)
584 return -ENOENT; /* checkpoint number 0 is invalid */
585 down_write(&NILFS_MDT(cpfile)->mi_sem);
586
587 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh);
588 if (ret < 0)
589 goto out_sem;
590 kaddr = kmap_atomic(cp_bh->b_page, KM_USER0);
591 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
592 if (nilfs_checkpoint_invalid(cp)) {
593 ret = -ENOENT;
594 kunmap_atomic(kaddr, KM_USER0);
595 goto out_cp;
596 }
597 if (nilfs_checkpoint_snapshot(cp)) {
598 ret = 0;
599 kunmap_atomic(kaddr, KM_USER0);
600 goto out_cp;
601 }
602 kunmap_atomic(kaddr, KM_USER0);
603
604 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
605 if (ret < 0)
606 goto out_cp;
607 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
608 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr);
609 list = &header->ch_snapshot_list;
610 curr_bh = header_bh;
611 get_bh(curr_bh);
612 curr = 0;
613 curr_blkoff = 0;
614 prev = le64_to_cpu(list->ssl_prev);
615 while (prev > cno) {
616 prev_blkoff = nilfs_cpfile_get_blkoff(cpfile, prev);
617 curr = prev;
618 if (curr_blkoff != prev_blkoff) {
619 kunmap_atomic(kaddr, KM_USER0);
620 brelse(curr_bh);
621 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr,
622 0, &curr_bh);
623 if (ret < 0)
624 goto out_header;
625 kaddr = kmap_atomic(curr_bh->b_page, KM_USER0);
626 }
627 curr_blkoff = prev_blkoff;
628 cp = nilfs_cpfile_block_get_checkpoint(
629 cpfile, curr, curr_bh, kaddr);
630 list = &cp->cp_snapshot_list;
631 prev = le64_to_cpu(list->ssl_prev);
632 }
633 kunmap_atomic(kaddr, KM_USER0);
634
635 if (prev != 0) {
636 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0,
637 &prev_bh);
638 if (ret < 0)
639 goto out_curr;
640 } else {
641 prev_bh = header_bh;
642 get_bh(prev_bh);
643 }
644
645 kaddr = kmap_atomic(curr_bh->b_page, KM_USER0);
646 list = nilfs_cpfile_block_get_snapshot_list(
647 cpfile, curr, curr_bh, kaddr);
648 list->ssl_prev = cpu_to_le64(cno);
649 kunmap_atomic(kaddr, KM_USER0);
650
651 kaddr = kmap_atomic(cp_bh->b_page, KM_USER0);
652 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
653 cp->cp_snapshot_list.ssl_next = cpu_to_le64(curr);
654 cp->cp_snapshot_list.ssl_prev = cpu_to_le64(prev);
655 nilfs_checkpoint_set_snapshot(cp);
656 kunmap_atomic(kaddr, KM_USER0);
657
658 kaddr = kmap_atomic(prev_bh->b_page, KM_USER0);
659 list = nilfs_cpfile_block_get_snapshot_list(
660 cpfile, prev, prev_bh, kaddr);
661 list->ssl_next = cpu_to_le64(cno);
662 kunmap_atomic(kaddr, KM_USER0);
663
664 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
665 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr);
666 le64_add_cpu(&header->ch_nsnapshots, 1);
667 kunmap_atomic(kaddr, KM_USER0);
668
669 nilfs_mdt_mark_buffer_dirty(prev_bh);
670 nilfs_mdt_mark_buffer_dirty(curr_bh);
671 nilfs_mdt_mark_buffer_dirty(cp_bh);
672 nilfs_mdt_mark_buffer_dirty(header_bh);
673 nilfs_mdt_mark_dirty(cpfile);
674
675 brelse(prev_bh);
676
677 out_curr:
678 brelse(curr_bh);
679
680 out_header:
681 brelse(header_bh);
682
683 out_cp:
684 brelse(cp_bh);
685
686 out_sem:
687 up_write(&NILFS_MDT(cpfile)->mi_sem);
688 return ret;
689}
690
691static int nilfs_cpfile_clear_snapshot(struct inode *cpfile, __u64 cno)
692{
693 struct buffer_head *header_bh, *next_bh, *prev_bh, *cp_bh;
694 struct nilfs_cpfile_header *header;
695 struct nilfs_checkpoint *cp;
696 struct nilfs_snapshot_list *list;
697 __u64 next, prev;
698 void *kaddr;
699 int ret;
700
701 if (cno == 0)
702 return -ENOENT; /* checkpoint number 0 is invalid */
703 down_write(&NILFS_MDT(cpfile)->mi_sem);
704
705 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh);
706 if (ret < 0)
707 goto out_sem;
708 kaddr = kmap_atomic(cp_bh->b_page, KM_USER0);
709 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
710 if (nilfs_checkpoint_invalid(cp)) {
711 ret = -ENOENT;
712 kunmap_atomic(kaddr, KM_USER0);
713 goto out_cp;
714 }
715 if (!nilfs_checkpoint_snapshot(cp)) {
716 ret = 0;
717 kunmap_atomic(kaddr, KM_USER0);
718 goto out_cp;
719 }
720
721 list = &cp->cp_snapshot_list;
722 next = le64_to_cpu(list->ssl_next);
723 prev = le64_to_cpu(list->ssl_prev);
724 kunmap_atomic(kaddr, KM_USER0);
725
726 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
727 if (ret < 0)
728 goto out_cp;
729 if (next != 0) {
730 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, 0,
731 &next_bh);
732 if (ret < 0)
733 goto out_header;
734 } else {
735 next_bh = header_bh;
736 get_bh(next_bh);
737 }
738 if (prev != 0) {
739 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0,
740 &prev_bh);
741 if (ret < 0)
742 goto out_next;
743 } else {
744 prev_bh = header_bh;
745 get_bh(prev_bh);
746 }
747
748 kaddr = kmap_atomic(next_bh->b_page, KM_USER0);
749 list = nilfs_cpfile_block_get_snapshot_list(
750 cpfile, next, next_bh, kaddr);
751 list->ssl_prev = cpu_to_le64(prev);
752 kunmap_atomic(kaddr, KM_USER0);
753
754 kaddr = kmap_atomic(prev_bh->b_page, KM_USER0);
755 list = nilfs_cpfile_block_get_snapshot_list(
756 cpfile, prev, prev_bh, kaddr);
757 list->ssl_next = cpu_to_le64(next);
758 kunmap_atomic(kaddr, KM_USER0);
759
760 kaddr = kmap_atomic(cp_bh->b_page, KM_USER0);
761 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
762 cp->cp_snapshot_list.ssl_next = cpu_to_le64(0);
763 cp->cp_snapshot_list.ssl_prev = cpu_to_le64(0);
764 nilfs_checkpoint_clear_snapshot(cp);
765 kunmap_atomic(kaddr, KM_USER0);
766
767 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
768 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr);
769 le64_add_cpu(&header->ch_nsnapshots, -1);
770 kunmap_atomic(kaddr, KM_USER0);
771
772 nilfs_mdt_mark_buffer_dirty(next_bh);
773 nilfs_mdt_mark_buffer_dirty(prev_bh);
774 nilfs_mdt_mark_buffer_dirty(cp_bh);
775 nilfs_mdt_mark_buffer_dirty(header_bh);
776 nilfs_mdt_mark_dirty(cpfile);
777
778 brelse(prev_bh);
779
780 out_next:
781 brelse(next_bh);
782
783 out_header:
784 brelse(header_bh);
785
786 out_cp:
787 brelse(cp_bh);
788
789 out_sem:
790 up_write(&NILFS_MDT(cpfile)->mi_sem);
791 return ret;
792}
793
794/**
795 * nilfs_cpfile_is_snapshot -
796 * @cpfile: inode of checkpoint file
797 * @cno: checkpoint number
798 *
799 * Description:
800 *
801 * Return Value: On success, 1 is returned if the checkpoint specified by
802 * @cno is a snapshot, or 0 if not. On error, one of the following negative
803 * error codes is returned.
804 *
805 * %-EIO - I/O error.
806 *
807 * %-ENOMEM - Insufficient amount of memory available.
808 *
809 * %-ENOENT - No such checkpoint.
810 */
811int nilfs_cpfile_is_snapshot(struct inode *cpfile, __u64 cno)
812{
813 struct buffer_head *bh;
814 struct nilfs_checkpoint *cp;
815 void *kaddr;
816 int ret;
817
818 if (cno == 0)
819 return -ENOENT; /* checkpoint number 0 is invalid */
820 down_read(&NILFS_MDT(cpfile)->mi_sem);
821
822 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh);
823 if (ret < 0)
824 goto out;
825 kaddr = kmap_atomic(bh->b_page, KM_USER0);
826 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr);
827 ret = nilfs_checkpoint_snapshot(cp);
828 kunmap_atomic(kaddr, KM_USER0);
829 brelse(bh);
830
831 out:
832 up_read(&NILFS_MDT(cpfile)->mi_sem);
833 return ret;
834}
835
836/**
837 * nilfs_cpfile_change_cpmode - change checkpoint mode
838 * @cpfile: inode of checkpoint file
839 * @cno: checkpoint number
840 * @status: mode of checkpoint
841 *
842 * Description: nilfs_change_cpmode() changes the mode of the checkpoint
843 * specified by @cno. The mode @mode is NILFS_CHECKPOINT or NILFS_SNAPSHOT.
844 *
845 * Return Value: On success, 0 is returned. On error, one of the following
846 * negative error codes is returned.
847 *
848 * %-EIO - I/O error.
849 *
850 * %-ENOMEM - Insufficient amount of memory available.
851 *
852 * %-ENOENT - No such checkpoint.
853 */
854int nilfs_cpfile_change_cpmode(struct inode *cpfile, __u64 cno, int mode)
855{
856 struct the_nilfs *nilfs;
857 int ret;
858
859 nilfs = NILFS_MDT(cpfile)->mi_nilfs;
860
861 switch (mode) {
862 case NILFS_CHECKPOINT:
863 /*
864 * Check for protecting existing snapshot mounts:
865 * bd_mount_sem is used to make this operation atomic and
866 * exclusive with a new mount job. Though it doesn't cover
867 * umount, it's enough for the purpose.
868 */
869 down(&nilfs->ns_bdev->bd_mount_sem);
870 if (nilfs_checkpoint_is_mounted(nilfs, cno, 1)) {
871 /* Current implementation does not have to protect
872 plain read-only mounts since they are exclusive
873 with a read/write mount and are protected from the
874 cleaner. */
875 ret = -EBUSY;
876 } else
877 ret = nilfs_cpfile_clear_snapshot(cpfile, cno);
878 up(&nilfs->ns_bdev->bd_mount_sem);
879 return ret;
880 case NILFS_SNAPSHOT:
881 return nilfs_cpfile_set_snapshot(cpfile, cno);
882 default:
883 return -EINVAL;
884 }
885}
886
887/**
888 * nilfs_cpfile_get_stat - get checkpoint statistics
889 * @cpfile: inode of checkpoint file
890 * @stat: pointer to a structure of checkpoint statistics
891 *
892 * Description: nilfs_cpfile_get_stat() returns information about checkpoints.
893 *
894 * Return Value: On success, 0 is returned, and checkpoints information is
895 * stored in the place pointed by @stat. On error, one of the following
896 * negative error codes is returned.
897 *
898 * %-EIO - I/O error.
899 *
900 * %-ENOMEM - Insufficient amount of memory available.
901 */
902int nilfs_cpfile_get_stat(struct inode *cpfile, struct nilfs_cpstat *cpstat)
903{
904 struct buffer_head *bh;
905 struct nilfs_cpfile_header *header;
906 void *kaddr;
907 int ret;
908
909 down_read(&NILFS_MDT(cpfile)->mi_sem);
910
911 ret = nilfs_cpfile_get_header_block(cpfile, &bh);
912 if (ret < 0)
913 goto out_sem;
914 kaddr = kmap_atomic(bh->b_page, KM_USER0);
915 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr);
916 cpstat->cs_cno = nilfs_mdt_cno(cpfile);
917 cpstat->cs_ncps = le64_to_cpu(header->ch_ncheckpoints);
918 cpstat->cs_nsss = le64_to_cpu(header->ch_nsnapshots);
919 kunmap_atomic(kaddr, KM_USER0);
920 brelse(bh);
921
922 out_sem:
923 up_read(&NILFS_MDT(cpfile)->mi_sem);
924 return ret;
925}
diff --git a/fs/nilfs2/cpfile.h b/fs/nilfs2/cpfile.h
new file mode 100644
index 000000000000..1a8a1008c342
--- /dev/null
+++ b/fs/nilfs2/cpfile.h
@@ -0,0 +1,45 @@
1/*
2 * cpfile.h - NILFS checkpoint file.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_CPFILE_H
24#define _NILFS_CPFILE_H
25
26#include <linux/fs.h>
27#include <linux/buffer_head.h>
28#include <linux/nilfs2_fs.h>
29
30#define NILFS_CPFILE_GFP NILFS_MDT_GFP
31
32
33int nilfs_cpfile_get_checkpoint(struct inode *, __u64, int,
34 struct nilfs_checkpoint **,
35 struct buffer_head **);
36void nilfs_cpfile_put_checkpoint(struct inode *, __u64, struct buffer_head *);
37int nilfs_cpfile_delete_checkpoints(struct inode *, __u64, __u64);
38int nilfs_cpfile_delete_checkpoint(struct inode *, __u64);
39int nilfs_cpfile_change_cpmode(struct inode *, __u64, int);
40int nilfs_cpfile_is_snapshot(struct inode *, __u64);
41int nilfs_cpfile_get_stat(struct inode *, struct nilfs_cpstat *);
42ssize_t nilfs_cpfile_get_cpinfo(struct inode *, __u64 *, int,
43 struct nilfs_cpinfo *, size_t);
44
45#endif /* _NILFS_CPFILE_H */
diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c
new file mode 100644
index 000000000000..bb8a5818e7f1
--- /dev/null
+++ b/fs/nilfs2/dat.c
@@ -0,0 +1,430 @@
1/*
2 * dat.c - NILFS disk address translation.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/types.h>
24#include <linux/buffer_head.h>
25#include <linux/string.h>
26#include <linux/errno.h>
27#include "nilfs.h"
28#include "mdt.h"
29#include "alloc.h"
30#include "dat.h"
31
32
33#define NILFS_CNO_MIN ((__u64)1)
34#define NILFS_CNO_MAX (~(__u64)0)
35
36static int nilfs_dat_prepare_entry(struct inode *dat,
37 struct nilfs_palloc_req *req, int create)
38{
39 return nilfs_palloc_get_entry_block(dat, req->pr_entry_nr,
40 create, &req->pr_entry_bh);
41}
42
43static void nilfs_dat_commit_entry(struct inode *dat,
44 struct nilfs_palloc_req *req)
45{
46 nilfs_mdt_mark_buffer_dirty(req->pr_entry_bh);
47 nilfs_mdt_mark_dirty(dat);
48 brelse(req->pr_entry_bh);
49}
50
51static void nilfs_dat_abort_entry(struct inode *dat,
52 struct nilfs_palloc_req *req)
53{
54 brelse(req->pr_entry_bh);
55}
56
57int nilfs_dat_prepare_alloc(struct inode *dat, struct nilfs_palloc_req *req)
58{
59 int ret;
60
61 ret = nilfs_palloc_prepare_alloc_entry(dat, req);
62 if (ret < 0)
63 return ret;
64
65 ret = nilfs_dat_prepare_entry(dat, req, 1);
66 if (ret < 0)
67 nilfs_palloc_abort_alloc_entry(dat, req);
68
69 return ret;
70}
71
72void nilfs_dat_commit_alloc(struct inode *dat, struct nilfs_palloc_req *req)
73{
74 struct nilfs_dat_entry *entry;
75 void *kaddr;
76
77 kaddr = kmap_atomic(req->pr_entry_bh->b_page, KM_USER0);
78 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
79 req->pr_entry_bh, kaddr);
80 entry->de_start = cpu_to_le64(NILFS_CNO_MIN);
81 entry->de_end = cpu_to_le64(NILFS_CNO_MAX);
82 entry->de_blocknr = cpu_to_le64(0);
83 kunmap_atomic(kaddr, KM_USER0);
84
85 nilfs_palloc_commit_alloc_entry(dat, req);
86 nilfs_dat_commit_entry(dat, req);
87}
88
89void nilfs_dat_abort_alloc(struct inode *dat, struct nilfs_palloc_req *req)
90{
91 nilfs_dat_abort_entry(dat, req);
92 nilfs_palloc_abort_alloc_entry(dat, req);
93}
94
95int nilfs_dat_prepare_free(struct inode *dat, struct nilfs_palloc_req *req)
96{
97 int ret;
98
99 ret = nilfs_palloc_prepare_free_entry(dat, req);
100 if (ret < 0)
101 return ret;
102 ret = nilfs_dat_prepare_entry(dat, req, 0);
103 if (ret < 0) {
104 nilfs_palloc_abort_free_entry(dat, req);
105 return ret;
106 }
107 return 0;
108}
109
110void nilfs_dat_commit_free(struct inode *dat, struct nilfs_palloc_req *req)
111{
112 struct nilfs_dat_entry *entry;
113 void *kaddr;
114
115 kaddr = kmap_atomic(req->pr_entry_bh->b_page, KM_USER0);
116 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
117 req->pr_entry_bh, kaddr);
118 entry->de_start = cpu_to_le64(NILFS_CNO_MIN);
119 entry->de_end = cpu_to_le64(NILFS_CNO_MIN);
120 entry->de_blocknr = cpu_to_le64(0);
121 kunmap_atomic(kaddr, KM_USER0);
122
123 nilfs_dat_commit_entry(dat, req);
124 nilfs_palloc_commit_free_entry(dat, req);
125}
126
127void nilfs_dat_abort_free(struct inode *dat, struct nilfs_palloc_req *req)
128{
129 nilfs_dat_abort_entry(dat, req);
130 nilfs_palloc_abort_free_entry(dat, req);
131}
132
133int nilfs_dat_prepare_start(struct inode *dat, struct nilfs_palloc_req *req)
134{
135 int ret;
136
137 ret = nilfs_dat_prepare_entry(dat, req, 0);
138 WARN_ON(ret == -ENOENT);
139 return ret;
140}
141
142void nilfs_dat_commit_start(struct inode *dat, struct nilfs_palloc_req *req,
143 sector_t blocknr)
144{
145 struct nilfs_dat_entry *entry;
146 void *kaddr;
147
148 kaddr = kmap_atomic(req->pr_entry_bh->b_page, KM_USER0);
149 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
150 req->pr_entry_bh, kaddr);
151 entry->de_start = cpu_to_le64(nilfs_mdt_cno(dat));
152 if (entry->de_blocknr != cpu_to_le64(0) ||
153 entry->de_end != cpu_to_le64(NILFS_CNO_MAX)) {
154 printk(KERN_CRIT
155 "%s: vbn = %llu, start = %llu, end = %llu, pbn = %llu\n",
156 __func__, (unsigned long long)req->pr_entry_nr,
157 (unsigned long long)le64_to_cpu(entry->de_start),
158 (unsigned long long)le64_to_cpu(entry->de_end),
159 (unsigned long long)le64_to_cpu(entry->de_blocknr));
160 }
161 entry->de_blocknr = cpu_to_le64(blocknr);
162 kunmap_atomic(kaddr, KM_USER0);
163
164 nilfs_dat_commit_entry(dat, req);
165}
166
167void nilfs_dat_abort_start(struct inode *dat, struct nilfs_palloc_req *req)
168{
169 nilfs_dat_abort_entry(dat, req);
170}
171
172int nilfs_dat_prepare_end(struct inode *dat, struct nilfs_palloc_req *req)
173{
174 struct nilfs_dat_entry *entry;
175 __u64 start;
176 sector_t blocknr;
177 void *kaddr;
178 int ret;
179
180 ret = nilfs_dat_prepare_entry(dat, req, 0);
181 if (ret < 0) {
182 WARN_ON(ret == -ENOENT);
183 return ret;
184 }
185
186 kaddr = kmap_atomic(req->pr_entry_bh->b_page, KM_USER0);
187 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
188 req->pr_entry_bh, kaddr);
189 start = le64_to_cpu(entry->de_start);
190 blocknr = le64_to_cpu(entry->de_blocknr);
191 kunmap_atomic(kaddr, KM_USER0);
192
193 if (blocknr == 0) {
194 ret = nilfs_palloc_prepare_free_entry(dat, req);
195 if (ret < 0) {
196 nilfs_dat_abort_entry(dat, req);
197 return ret;
198 }
199 }
200
201 return 0;
202}
203
204void nilfs_dat_commit_end(struct inode *dat, struct nilfs_palloc_req *req,
205 int dead)
206{
207 struct nilfs_dat_entry *entry;
208 __u64 start, end;
209 sector_t blocknr;
210 void *kaddr;
211
212 kaddr = kmap_atomic(req->pr_entry_bh->b_page, KM_USER0);
213 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
214 req->pr_entry_bh, kaddr);
215 end = start = le64_to_cpu(entry->de_start);
216 if (!dead) {
217 end = nilfs_mdt_cno(dat);
218 WARN_ON(start > end);
219 }
220 entry->de_end = cpu_to_le64(end);
221 blocknr = le64_to_cpu(entry->de_blocknr);
222 kunmap_atomic(kaddr, KM_USER0);
223
224 if (blocknr == 0)
225 nilfs_dat_commit_free(dat, req);
226 else
227 nilfs_dat_commit_entry(dat, req);
228}
229
230void nilfs_dat_abort_end(struct inode *dat, struct nilfs_palloc_req *req)
231{
232 struct nilfs_dat_entry *entry;
233 __u64 start;
234 sector_t blocknr;
235 void *kaddr;
236
237 kaddr = kmap_atomic(req->pr_entry_bh->b_page, KM_USER0);
238 entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
239 req->pr_entry_bh, kaddr);
240 start = le64_to_cpu(entry->de_start);
241 blocknr = le64_to_cpu(entry->de_blocknr);
242 kunmap_atomic(kaddr, KM_USER0);
243
244 if (start == nilfs_mdt_cno(dat) && blocknr == 0)
245 nilfs_palloc_abort_free_entry(dat, req);
246 nilfs_dat_abort_entry(dat, req);
247}
248
249/**
250 * nilfs_dat_mark_dirty -
251 * @dat: DAT file inode
252 * @vblocknr: virtual block number
253 *
254 * Description:
255 *
256 * Return Value: On success, 0 is returned. On error, one of the following
257 * negative error codes is returned.
258 *
259 * %-EIO - I/O error.
260 *
261 * %-ENOMEM - Insufficient amount of memory available.
262 */
263int nilfs_dat_mark_dirty(struct inode *dat, __u64 vblocknr)
264{
265 struct nilfs_palloc_req req;
266 int ret;
267
268 req.pr_entry_nr = vblocknr;
269 ret = nilfs_dat_prepare_entry(dat, &req, 0);
270 if (ret == 0)
271 nilfs_dat_commit_entry(dat, &req);
272 return ret;
273}
274
275/**
276 * nilfs_dat_freev - free virtual block numbers
277 * @dat: DAT file inode
278 * @vblocknrs: array of virtual block numbers
279 * @nitems: number of virtual block numbers
280 *
281 * Description: nilfs_dat_freev() frees the virtual block numbers specified by
282 * @vblocknrs and @nitems.
283 *
284 * Return Value: On success, 0 is returned. On error, one of the following
285 * nagative error codes is returned.
286 *
287 * %-EIO - I/O error.
288 *
289 * %-ENOMEM - Insufficient amount of memory available.
290 *
291 * %-ENOENT - The virtual block number have not been allocated.
292 */
293int nilfs_dat_freev(struct inode *dat, __u64 *vblocknrs, size_t nitems)
294{
295 return nilfs_palloc_freev(dat, vblocknrs, nitems);
296}
297
298/**
299 * nilfs_dat_move - change a block number
300 * @dat: DAT file inode
301 * @vblocknr: virtual block number
302 * @blocknr: block number
303 *
304 * Description: nilfs_dat_move() changes the block number associated with
305 * @vblocknr to @blocknr.
306 *
307 * Return Value: On success, 0 is returned. On error, one of the following
308 * negative error codes is returned.
309 *
310 * %-EIO - I/O error.
311 *
312 * %-ENOMEM - Insufficient amount of memory available.
313 */
314int nilfs_dat_move(struct inode *dat, __u64 vblocknr, sector_t blocknr)
315{
316 struct buffer_head *entry_bh;
317 struct nilfs_dat_entry *entry;
318 void *kaddr;
319 int ret;
320
321 ret = nilfs_palloc_get_entry_block(dat, vblocknr, 0, &entry_bh);
322 if (ret < 0)
323 return ret;
324 kaddr = kmap_atomic(entry_bh->b_page, KM_USER0);
325 entry = nilfs_palloc_block_get_entry(dat, vblocknr, entry_bh, kaddr);
326 if (unlikely(entry->de_blocknr == cpu_to_le64(0))) {
327 printk(KERN_CRIT "%s: vbn = %llu, [%llu, %llu)\n", __func__,
328 (unsigned long long)vblocknr,
329 (unsigned long long)le64_to_cpu(entry->de_start),
330 (unsigned long long)le64_to_cpu(entry->de_end));
331 kunmap_atomic(kaddr, KM_USER0);
332 brelse(entry_bh);
333 return -EINVAL;
334 }
335 WARN_ON(blocknr == 0);
336 entry->de_blocknr = cpu_to_le64(blocknr);
337 kunmap_atomic(kaddr, KM_USER0);
338
339 nilfs_mdt_mark_buffer_dirty(entry_bh);
340 nilfs_mdt_mark_dirty(dat);
341
342 brelse(entry_bh);
343
344 return 0;
345}
346
347/**
348 * nilfs_dat_translate - translate a virtual block number to a block number
349 * @dat: DAT file inode
350 * @vblocknr: virtual block number
351 * @blocknrp: pointer to a block number
352 *
353 * Description: nilfs_dat_translate() maps the virtual block number @vblocknr
354 * to the corresponding block number.
355 *
356 * Return Value: On success, 0 is returned and the block number associated
357 * with @vblocknr is stored in the place pointed by @blocknrp. On error, one
358 * of the following negative error codes is returned.
359 *
360 * %-EIO - I/O error.
361 *
362 * %-ENOMEM - Insufficient amount of memory available.
363 *
364 * %-ENOENT - A block number associated with @vblocknr does not exist.
365 */
366int nilfs_dat_translate(struct inode *dat, __u64 vblocknr, sector_t *blocknrp)
367{
368 struct buffer_head *entry_bh;
369 struct nilfs_dat_entry *entry;
370 sector_t blocknr;
371 void *kaddr;
372 int ret;
373
374 ret = nilfs_palloc_get_entry_block(dat, vblocknr, 0, &entry_bh);
375 if (ret < 0)
376 return ret;
377
378 kaddr = kmap_atomic(entry_bh->b_page, KM_USER0);
379 entry = nilfs_palloc_block_get_entry(dat, vblocknr, entry_bh, kaddr);
380 blocknr = le64_to_cpu(entry->de_blocknr);
381 if (blocknr == 0) {
382 ret = -ENOENT;
383 goto out;
384 }
385 if (blocknrp != NULL)
386 *blocknrp = blocknr;
387
388 out:
389 kunmap_atomic(kaddr, KM_USER0);
390 brelse(entry_bh);
391 return ret;
392}
393
394ssize_t nilfs_dat_get_vinfo(struct inode *dat, struct nilfs_vinfo *vinfo,
395 size_t nvi)
396{
397 struct buffer_head *entry_bh;
398 struct nilfs_dat_entry *entry;
399 __u64 first, last;
400 void *kaddr;
401 unsigned long entries_per_block = NILFS_MDT(dat)->mi_entries_per_block;
402 int i, j, n, ret;
403
404 for (i = 0; i < nvi; i += n) {
405 ret = nilfs_palloc_get_entry_block(dat, vinfo[i].vi_vblocknr,
406 0, &entry_bh);
407 if (ret < 0)
408 return ret;
409 kaddr = kmap_atomic(entry_bh->b_page, KM_USER0);
410 /* last virtual block number in this block */
411 first = vinfo[i].vi_vblocknr;
412 do_div(first, entries_per_block);
413 first *= entries_per_block;
414 last = first + entries_per_block - 1;
415 for (j = i, n = 0;
416 j < nvi && vinfo[j].vi_vblocknr >= first &&
417 vinfo[j].vi_vblocknr <= last;
418 j++, n++) {
419 entry = nilfs_palloc_block_get_entry(
420 dat, vinfo[j].vi_vblocknr, entry_bh, kaddr);
421 vinfo[j].vi_start = le64_to_cpu(entry->de_start);
422 vinfo[j].vi_end = le64_to_cpu(entry->de_end);
423 vinfo[j].vi_blocknr = le64_to_cpu(entry->de_blocknr);
424 }
425 kunmap_atomic(kaddr, KM_USER0);
426 brelse(entry_bh);
427 }
428
429 return nvi;
430}
diff --git a/fs/nilfs2/dat.h b/fs/nilfs2/dat.h
new file mode 100644
index 000000000000..d9560654a4b7
--- /dev/null
+++ b/fs/nilfs2/dat.h
@@ -0,0 +1,52 @@
1/*
2 * dat.h - NILFS disk address translation.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_DAT_H
24#define _NILFS_DAT_H
25
26#include <linux/types.h>
27#include <linux/buffer_head.h>
28#include <linux/fs.h>
29
30#define NILFS_DAT_GFP NILFS_MDT_GFP
31
32struct nilfs_palloc_req;
33
34int nilfs_dat_translate(struct inode *, __u64, sector_t *);
35
36int nilfs_dat_prepare_alloc(struct inode *, struct nilfs_palloc_req *);
37void nilfs_dat_commit_alloc(struct inode *, struct nilfs_palloc_req *);
38void nilfs_dat_abort_alloc(struct inode *, struct nilfs_palloc_req *);
39int nilfs_dat_prepare_start(struct inode *, struct nilfs_palloc_req *);
40void nilfs_dat_commit_start(struct inode *, struct nilfs_palloc_req *,
41 sector_t);
42void nilfs_dat_abort_start(struct inode *, struct nilfs_palloc_req *);
43int nilfs_dat_prepare_end(struct inode *, struct nilfs_palloc_req *);
44void nilfs_dat_commit_end(struct inode *, struct nilfs_palloc_req *, int);
45void nilfs_dat_abort_end(struct inode *, struct nilfs_palloc_req *);
46
47int nilfs_dat_mark_dirty(struct inode *, __u64);
48int nilfs_dat_freev(struct inode *, __u64 *, size_t);
49int nilfs_dat_move(struct inode *, __u64, sector_t);
50ssize_t nilfs_dat_get_vinfo(struct inode *, struct nilfs_vinfo *, size_t);
51
52#endif /* _NILFS_DAT_H */
diff --git a/fs/nilfs2/dir.c b/fs/nilfs2/dir.c
new file mode 100644
index 000000000000..54100acc1102
--- /dev/null
+++ b/fs/nilfs2/dir.c
@@ -0,0 +1,711 @@
1/*
2 * dir.c - NILFS directory entry operations
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Modified for NILFS by Amagai Yoshiji <amagai@osrg.net>
21 */
22/*
23 * linux/fs/ext2/dir.c
24 *
25 * Copyright (C) 1992, 1993, 1994, 1995
26 * Remy Card (card@masi.ibp.fr)
27 * Laboratoire MASI - Institut Blaise Pascal
28 * Universite Pierre et Marie Curie (Paris VI)
29 *
30 * from
31 *
32 * linux/fs/minix/dir.c
33 *
34 * Copyright (C) 1991, 1992 Linus Torvalds
35 *
36 * ext2 directory handling functions
37 *
38 * Big-endian to little-endian byte-swapping/bitmaps by
39 * David S. Miller (davem@caip.rutgers.edu), 1995
40 *
41 * All code that works with directory layout had been switched to pagecache
42 * and moved here. AV
43 */
44
45#include <linux/pagemap.h>
46#include <linux/smp_lock.h>
47#include "nilfs.h"
48#include "page.h"
49
50/*
51 * nilfs uses block-sized chunks. Arguably, sector-sized ones would be
52 * more robust, but we have what we have
53 */
54static inline unsigned nilfs_chunk_size(struct inode *inode)
55{
56 return inode->i_sb->s_blocksize;
57}
58
59static inline void nilfs_put_page(struct page *page)
60{
61 kunmap(page);
62 page_cache_release(page);
63}
64
65static inline unsigned long dir_pages(struct inode *inode)
66{
67 return (inode->i_size+PAGE_CACHE_SIZE-1)>>PAGE_CACHE_SHIFT;
68}
69
70/*
71 * Return the offset into page `page_nr' of the last valid
72 * byte in that page, plus one.
73 */
74static unsigned nilfs_last_byte(struct inode *inode, unsigned long page_nr)
75{
76 unsigned last_byte = inode->i_size;
77
78 last_byte -= page_nr << PAGE_CACHE_SHIFT;
79 if (last_byte > PAGE_CACHE_SIZE)
80 last_byte = PAGE_CACHE_SIZE;
81 return last_byte;
82}
83
84static int nilfs_prepare_chunk_uninterruptible(struct page *page,
85 struct address_space *mapping,
86 unsigned from, unsigned to)
87{
88 loff_t pos = page_offset(page) + from;
89 return block_write_begin(NULL, mapping, pos, to - from,
90 AOP_FLAG_UNINTERRUPTIBLE, &page,
91 NULL, nilfs_get_block);
92}
93
94static int nilfs_prepare_chunk(struct page *page,
95 struct address_space *mapping,
96 unsigned from, unsigned to)
97{
98 loff_t pos = page_offset(page) + from;
99 return block_write_begin(NULL, mapping, pos, to - from, 0, &page,
100 NULL, nilfs_get_block);
101}
102
103static int nilfs_commit_chunk(struct page *page,
104 struct address_space *mapping,
105 unsigned from, unsigned to)
106{
107 struct inode *dir = mapping->host;
108 struct nilfs_sb_info *sbi = NILFS_SB(dir->i_sb);
109 loff_t pos = page_offset(page) + from;
110 unsigned len = to - from;
111 unsigned nr_dirty, copied;
112 int err;
113
114 nr_dirty = nilfs_page_count_clean_buffers(page, from, to);
115 copied = block_write_end(NULL, mapping, pos, len, len, page, NULL);
116 if (pos + copied > dir->i_size) {
117 i_size_write(dir, pos + copied);
118 mark_inode_dirty(dir);
119 }
120 if (IS_DIRSYNC(dir))
121 nilfs_set_transaction_flag(NILFS_TI_SYNC);
122 err = nilfs_set_file_dirty(sbi, dir, nr_dirty);
123 unlock_page(page);
124 return err;
125}
126
127static void nilfs_check_page(struct page *page)
128{
129 struct inode *dir = page->mapping->host;
130 struct super_block *sb = dir->i_sb;
131 unsigned chunk_size = nilfs_chunk_size(dir);
132 char *kaddr = page_address(page);
133 unsigned offs, rec_len;
134 unsigned limit = PAGE_CACHE_SIZE;
135 struct nilfs_dir_entry *p;
136 char *error;
137
138 if ((dir->i_size >> PAGE_CACHE_SHIFT) == page->index) {
139 limit = dir->i_size & ~PAGE_CACHE_MASK;
140 if (limit & (chunk_size - 1))
141 goto Ebadsize;
142 if (!limit)
143 goto out;
144 }
145 for (offs = 0; offs <= limit - NILFS_DIR_REC_LEN(1); offs += rec_len) {
146 p = (struct nilfs_dir_entry *)(kaddr + offs);
147 rec_len = le16_to_cpu(p->rec_len);
148
149 if (rec_len < NILFS_DIR_REC_LEN(1))
150 goto Eshort;
151 if (rec_len & 3)
152 goto Ealign;
153 if (rec_len < NILFS_DIR_REC_LEN(p->name_len))
154 goto Enamelen;
155 if (((offs + rec_len - 1) ^ offs) & ~(chunk_size-1))
156 goto Espan;
157 }
158 if (offs != limit)
159 goto Eend;
160out:
161 SetPageChecked(page);
162 return;
163
164 /* Too bad, we had an error */
165
166Ebadsize:
167 nilfs_error(sb, "nilfs_check_page",
168 "size of directory #%lu is not a multiple of chunk size",
169 dir->i_ino
170 );
171 goto fail;
172Eshort:
173 error = "rec_len is smaller than minimal";
174 goto bad_entry;
175Ealign:
176 error = "unaligned directory entry";
177 goto bad_entry;
178Enamelen:
179 error = "rec_len is too small for name_len";
180 goto bad_entry;
181Espan:
182 error = "directory entry across blocks";
183bad_entry:
184 nilfs_error(sb, "nilfs_check_page", "bad entry in directory #%lu: %s - "
185 "offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
186 dir->i_ino, error, (page->index<<PAGE_CACHE_SHIFT)+offs,
187 (unsigned long) le64_to_cpu(p->inode),
188 rec_len, p->name_len);
189 goto fail;
190Eend:
191 p = (struct nilfs_dir_entry *)(kaddr + offs);
192 nilfs_error(sb, "nilfs_check_page",
193 "entry in directory #%lu spans the page boundary"
194 "offset=%lu, inode=%lu",
195 dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
196 (unsigned long) le64_to_cpu(p->inode));
197fail:
198 SetPageChecked(page);
199 SetPageError(page);
200}
201
202static struct page *nilfs_get_page(struct inode *dir, unsigned long n)
203{
204 struct address_space *mapping = dir->i_mapping;
205 struct page *page = read_cache_page(mapping, n,
206 (filler_t *)mapping->a_ops->readpage, NULL);
207 if (!IS_ERR(page)) {
208 wait_on_page_locked(page);
209 kmap(page);
210 if (!PageUptodate(page))
211 goto fail;
212 if (!PageChecked(page))
213 nilfs_check_page(page);
214 if (PageError(page))
215 goto fail;
216 }
217 return page;
218
219fail:
220 nilfs_put_page(page);
221 return ERR_PTR(-EIO);
222}
223
224/*
225 * NOTE! unlike strncmp, nilfs_match returns 1 for success, 0 for failure.
226 *
227 * len <= NILFS_NAME_LEN and de != NULL are guaranteed by caller.
228 */
229static int
230nilfs_match(int len, const char * const name, struct nilfs_dir_entry *de)
231{
232 if (len != de->name_len)
233 return 0;
234 if (!de->inode)
235 return 0;
236 return !memcmp(name, de->name, len);
237}
238
239/*
240 * p is at least 6 bytes before the end of page
241 */
242static struct nilfs_dir_entry *nilfs_next_entry(struct nilfs_dir_entry *p)
243{
244 return (struct nilfs_dir_entry *)((char *)p + le16_to_cpu(p->rec_len));
245}
246
247static unsigned char
248nilfs_filetype_table[NILFS_FT_MAX] = {
249 [NILFS_FT_UNKNOWN] = DT_UNKNOWN,
250 [NILFS_FT_REG_FILE] = DT_REG,
251 [NILFS_FT_DIR] = DT_DIR,
252 [NILFS_FT_CHRDEV] = DT_CHR,
253 [NILFS_FT_BLKDEV] = DT_BLK,
254 [NILFS_FT_FIFO] = DT_FIFO,
255 [NILFS_FT_SOCK] = DT_SOCK,
256 [NILFS_FT_SYMLINK] = DT_LNK,
257};
258
259#define S_SHIFT 12
260static unsigned char
261nilfs_type_by_mode[S_IFMT >> S_SHIFT] = {
262 [S_IFREG >> S_SHIFT] = NILFS_FT_REG_FILE,
263 [S_IFDIR >> S_SHIFT] = NILFS_FT_DIR,
264 [S_IFCHR >> S_SHIFT] = NILFS_FT_CHRDEV,
265 [S_IFBLK >> S_SHIFT] = NILFS_FT_BLKDEV,
266 [S_IFIFO >> S_SHIFT] = NILFS_FT_FIFO,
267 [S_IFSOCK >> S_SHIFT] = NILFS_FT_SOCK,
268 [S_IFLNK >> S_SHIFT] = NILFS_FT_SYMLINK,
269};
270
271static void nilfs_set_de_type(struct nilfs_dir_entry *de, struct inode *inode)
272{
273 mode_t mode = inode->i_mode;
274
275 de->file_type = nilfs_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
276}
277
278static int nilfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
279{
280 loff_t pos = filp->f_pos;
281 struct inode *inode = filp->f_dentry->d_inode;
282 struct super_block *sb = inode->i_sb;
283 unsigned int offset = pos & ~PAGE_CACHE_MASK;
284 unsigned long n = pos >> PAGE_CACHE_SHIFT;
285 unsigned long npages = dir_pages(inode);
286/* unsigned chunk_mask = ~(nilfs_chunk_size(inode)-1); */
287 unsigned char *types = NULL;
288 int ret;
289
290 if (pos > inode->i_size - NILFS_DIR_REC_LEN(1))
291 goto success;
292
293 types = nilfs_filetype_table;
294
295 for ( ; n < npages; n++, offset = 0) {
296 char *kaddr, *limit;
297 struct nilfs_dir_entry *de;
298 struct page *page = nilfs_get_page(inode, n);
299
300 if (IS_ERR(page)) {
301 nilfs_error(sb, __func__, "bad page in #%lu",
302 inode->i_ino);
303 filp->f_pos += PAGE_CACHE_SIZE - offset;
304 ret = -EIO;
305 goto done;
306 }
307 kaddr = page_address(page);
308 de = (struct nilfs_dir_entry *)(kaddr + offset);
309 limit = kaddr + nilfs_last_byte(inode, n) -
310 NILFS_DIR_REC_LEN(1);
311 for ( ; (char *)de <= limit; de = nilfs_next_entry(de)) {
312 if (de->rec_len == 0) {
313 nilfs_error(sb, __func__,
314 "zero-length directory entry");
315 ret = -EIO;
316 nilfs_put_page(page);
317 goto done;
318 }
319 if (de->inode) {
320 int over;
321 unsigned char d_type = DT_UNKNOWN;
322
323 if (types && de->file_type < NILFS_FT_MAX)
324 d_type = types[de->file_type];
325
326 offset = (char *)de - kaddr;
327 over = filldir(dirent, de->name, de->name_len,
328 (n<<PAGE_CACHE_SHIFT) | offset,
329 le64_to_cpu(de->inode), d_type);
330 if (over) {
331 nilfs_put_page(page);
332 goto success;
333 }
334 }
335 filp->f_pos += le16_to_cpu(de->rec_len);
336 }
337 nilfs_put_page(page);
338 }
339
340success:
341 ret = 0;
342done:
343 return ret;
344}
345
346/*
347 * nilfs_find_entry()
348 *
349 * finds an entry in the specified directory with the wanted name. It
350 * returns the page in which the entry was found, and the entry itself
351 * (as a parameter - res_dir). Page is returned mapped and unlocked.
352 * Entry is guaranteed to be valid.
353 */
354struct nilfs_dir_entry *
355nilfs_find_entry(struct inode *dir, struct dentry *dentry,
356 struct page **res_page)
357{
358 const char *name = dentry->d_name.name;
359 int namelen = dentry->d_name.len;
360 unsigned reclen = NILFS_DIR_REC_LEN(namelen);
361 unsigned long start, n;
362 unsigned long npages = dir_pages(dir);
363 struct page *page = NULL;
364 struct nilfs_inode_info *ei = NILFS_I(dir);
365 struct nilfs_dir_entry *de;
366
367 if (npages == 0)
368 goto out;
369
370 /* OFFSET_CACHE */
371 *res_page = NULL;
372
373 start = ei->i_dir_start_lookup;
374 if (start >= npages)
375 start = 0;
376 n = start;
377 do {
378 char *kaddr;
379 page = nilfs_get_page(dir, n);
380 if (!IS_ERR(page)) {
381 kaddr = page_address(page);
382 de = (struct nilfs_dir_entry *)kaddr;
383 kaddr += nilfs_last_byte(dir, n) - reclen;
384 while ((char *) de <= kaddr) {
385 if (de->rec_len == 0) {
386 nilfs_error(dir->i_sb, __func__,
387 "zero-length directory entry");
388 nilfs_put_page(page);
389 goto out;
390 }
391 if (nilfs_match(namelen, name, de))
392 goto found;
393 de = nilfs_next_entry(de);
394 }
395 nilfs_put_page(page);
396 }
397 if (++n >= npages)
398 n = 0;
399 /* next page is past the blocks we've got */
400 if (unlikely(n > (dir->i_blocks >> (PAGE_CACHE_SHIFT - 9)))) {
401 nilfs_error(dir->i_sb, __func__,
402 "dir %lu size %lld exceeds block cout %llu",
403 dir->i_ino, dir->i_size,
404 (unsigned long long)dir->i_blocks);
405 goto out;
406 }
407 } while (n != start);
408out:
409 return NULL;
410
411found:
412 *res_page = page;
413 ei->i_dir_start_lookup = n;
414 return de;
415}
416
417struct nilfs_dir_entry *nilfs_dotdot(struct inode *dir, struct page **p)
418{
419 struct page *page = nilfs_get_page(dir, 0);
420 struct nilfs_dir_entry *de = NULL;
421
422 if (!IS_ERR(page)) {
423 de = nilfs_next_entry(
424 (struct nilfs_dir_entry *)page_address(page));
425 *p = page;
426 }
427 return de;
428}
429
430ino_t nilfs_inode_by_name(struct inode *dir, struct dentry *dentry)
431{
432 ino_t res = 0;
433 struct nilfs_dir_entry *de;
434 struct page *page;
435
436 de = nilfs_find_entry(dir, dentry, &page);
437 if (de) {
438 res = le64_to_cpu(de->inode);
439 kunmap(page);
440 page_cache_release(page);
441 }
442 return res;
443}
444
445/* Releases the page */
446void nilfs_set_link(struct inode *dir, struct nilfs_dir_entry *de,
447 struct page *page, struct inode *inode)
448{
449 unsigned from = (char *) de - (char *) page_address(page);
450 unsigned to = from + le16_to_cpu(de->rec_len);
451 struct address_space *mapping = page->mapping;
452 int err;
453
454 lock_page(page);
455 err = nilfs_prepare_chunk_uninterruptible(page, mapping, from, to);
456 BUG_ON(err);
457 de->inode = cpu_to_le64(inode->i_ino);
458 nilfs_set_de_type(de, inode);
459 err = nilfs_commit_chunk(page, mapping, from, to);
460 nilfs_put_page(page);
461 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
462/* NILFS_I(dir)->i_flags &= ~NILFS_BTREE_FL; */
463 mark_inode_dirty(dir);
464}
465
466/*
467 * Parent is locked.
468 */
469int nilfs_add_link(struct dentry *dentry, struct inode *inode)
470{
471 struct inode *dir = dentry->d_parent->d_inode;
472 const char *name = dentry->d_name.name;
473 int namelen = dentry->d_name.len;
474 unsigned chunk_size = nilfs_chunk_size(dir);
475 unsigned reclen = NILFS_DIR_REC_LEN(namelen);
476 unsigned short rec_len, name_len;
477 struct page *page = NULL;
478 struct nilfs_dir_entry *de;
479 unsigned long npages = dir_pages(dir);
480 unsigned long n;
481 char *kaddr;
482 unsigned from, to;
483 int err;
484
485 /*
486 * We take care of directory expansion in the same loop.
487 * This code plays outside i_size, so it locks the page
488 * to protect that region.
489 */
490 for (n = 0; n <= npages; n++) {
491 char *dir_end;
492
493 page = nilfs_get_page(dir, n);
494 err = PTR_ERR(page);
495 if (IS_ERR(page))
496 goto out;
497 lock_page(page);
498 kaddr = page_address(page);
499 dir_end = kaddr + nilfs_last_byte(dir, n);
500 de = (struct nilfs_dir_entry *)kaddr;
501 kaddr += PAGE_CACHE_SIZE - reclen;
502 while ((char *)de <= kaddr) {
503 if ((char *)de == dir_end) {
504 /* We hit i_size */
505 name_len = 0;
506 rec_len = chunk_size;
507 de->rec_len = cpu_to_le16(chunk_size);
508 de->inode = 0;
509 goto got_it;
510 }
511 if (de->rec_len == 0) {
512 nilfs_error(dir->i_sb, __func__,
513 "zero-length directory entry");
514 err = -EIO;
515 goto out_unlock;
516 }
517 err = -EEXIST;
518 if (nilfs_match(namelen, name, de))
519 goto out_unlock;
520 name_len = NILFS_DIR_REC_LEN(de->name_len);
521 rec_len = le16_to_cpu(de->rec_len);
522 if (!de->inode && rec_len >= reclen)
523 goto got_it;
524 if (rec_len >= name_len + reclen)
525 goto got_it;
526 de = (struct nilfs_dir_entry *)((char *)de + rec_len);
527 }
528 unlock_page(page);
529 nilfs_put_page(page);
530 }
531 BUG();
532 return -EINVAL;
533
534got_it:
535 from = (char *)de - (char *)page_address(page);
536 to = from + rec_len;
537 err = nilfs_prepare_chunk(page, page->mapping, from, to);
538 if (err)
539 goto out_unlock;
540 if (de->inode) {
541 struct nilfs_dir_entry *de1;
542
543 de1 = (struct nilfs_dir_entry *)((char *)de + name_len);
544 de1->rec_len = cpu_to_le16(rec_len - name_len);
545 de->rec_len = cpu_to_le16(name_len);
546 de = de1;
547 }
548 de->name_len = namelen;
549 memcpy(de->name, name, namelen);
550 de->inode = cpu_to_le64(inode->i_ino);
551 nilfs_set_de_type(de, inode);
552 err = nilfs_commit_chunk(page, page->mapping, from, to);
553 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
554/* NILFS_I(dir)->i_flags &= ~NILFS_BTREE_FL; */
555 mark_inode_dirty(dir);
556 /* OFFSET_CACHE */
557out_put:
558 nilfs_put_page(page);
559out:
560 return err;
561out_unlock:
562 unlock_page(page);
563 goto out_put;
564}
565
566/*
567 * nilfs_delete_entry deletes a directory entry by merging it with the
568 * previous entry. Page is up-to-date. Releases the page.
569 */
570int nilfs_delete_entry(struct nilfs_dir_entry *dir, struct page *page)
571{
572 struct address_space *mapping = page->mapping;
573 struct inode *inode = mapping->host;
574 char *kaddr = page_address(page);
575 unsigned from = ((char *)dir - kaddr) & ~(nilfs_chunk_size(inode) - 1);
576 unsigned to = ((char *)dir - kaddr) + le16_to_cpu(dir->rec_len);
577 struct nilfs_dir_entry *pde = NULL;
578 struct nilfs_dir_entry *de = (struct nilfs_dir_entry *)(kaddr + from);
579 int err;
580
581 while ((char *)de < (char *)dir) {
582 if (de->rec_len == 0) {
583 nilfs_error(inode->i_sb, __func__,
584 "zero-length directory entry");
585 err = -EIO;
586 goto out;
587 }
588 pde = de;
589 de = nilfs_next_entry(de);
590 }
591 if (pde)
592 from = (char *)pde - (char *)page_address(page);
593 lock_page(page);
594 err = nilfs_prepare_chunk(page, mapping, from, to);
595 BUG_ON(err);
596 if (pde)
597 pde->rec_len = cpu_to_le16(to - from);
598 dir->inode = 0;
599 err = nilfs_commit_chunk(page, mapping, from, to);
600 inode->i_ctime = inode->i_mtime = CURRENT_TIME;
601/* NILFS_I(inode)->i_flags &= ~NILFS_BTREE_FL; */
602 mark_inode_dirty(inode);
603out:
604 nilfs_put_page(page);
605 return err;
606}
607
608/*
609 * Set the first fragment of directory.
610 */
611int nilfs_make_empty(struct inode *inode, struct inode *parent)
612{
613 struct address_space *mapping = inode->i_mapping;
614 struct page *page = grab_cache_page(mapping, 0);
615 unsigned chunk_size = nilfs_chunk_size(inode);
616 struct nilfs_dir_entry *de;
617 int err;
618 void *kaddr;
619
620 if (!page)
621 return -ENOMEM;
622
623 err = nilfs_prepare_chunk(page, mapping, 0, chunk_size);
624 if (unlikely(err)) {
625 unlock_page(page);
626 goto fail;
627 }
628 kaddr = kmap_atomic(page, KM_USER0);
629 memset(kaddr, 0, chunk_size);
630 de = (struct nilfs_dir_entry *)kaddr;
631 de->name_len = 1;
632 de->rec_len = cpu_to_le16(NILFS_DIR_REC_LEN(1));
633 memcpy(de->name, ".\0\0", 4);
634 de->inode = cpu_to_le64(inode->i_ino);
635 nilfs_set_de_type(de, inode);
636
637 de = (struct nilfs_dir_entry *)(kaddr + NILFS_DIR_REC_LEN(1));
638 de->name_len = 2;
639 de->rec_len = cpu_to_le16(chunk_size - NILFS_DIR_REC_LEN(1));
640 de->inode = cpu_to_le64(parent->i_ino);
641 memcpy(de->name, "..\0", 4);
642 nilfs_set_de_type(de, inode);
643 kunmap_atomic(kaddr, KM_USER0);
644 err = nilfs_commit_chunk(page, mapping, 0, chunk_size);
645fail:
646 page_cache_release(page);
647 return err;
648}
649
650/*
651 * routine to check that the specified directory is empty (for rmdir)
652 */
653int nilfs_empty_dir(struct inode *inode)
654{
655 struct page *page = NULL;
656 unsigned long i, npages = dir_pages(inode);
657
658 for (i = 0; i < npages; i++) {
659 char *kaddr;
660 struct nilfs_dir_entry *de;
661
662 page = nilfs_get_page(inode, i);
663 if (IS_ERR(page))
664 continue;
665
666 kaddr = page_address(page);
667 de = (struct nilfs_dir_entry *)kaddr;
668 kaddr += nilfs_last_byte(inode, i) - NILFS_DIR_REC_LEN(1);
669
670 while ((char *)de <= kaddr) {
671 if (de->rec_len == 0) {
672 nilfs_error(inode->i_sb, __func__,
673 "zero-length directory entry "
674 "(kaddr=%p, de=%p)\n", kaddr, de);
675 goto not_empty;
676 }
677 if (de->inode != 0) {
678 /* check for . and .. */
679 if (de->name[0] != '.')
680 goto not_empty;
681 if (de->name_len > 2)
682 goto not_empty;
683 if (de->name_len < 2) {
684 if (de->inode !=
685 cpu_to_le64(inode->i_ino))
686 goto not_empty;
687 } else if (de->name[1] != '.')
688 goto not_empty;
689 }
690 de = nilfs_next_entry(de);
691 }
692 nilfs_put_page(page);
693 }
694 return 1;
695
696not_empty:
697 nilfs_put_page(page);
698 return 0;
699}
700
701struct file_operations nilfs_dir_operations = {
702 .llseek = generic_file_llseek,
703 .read = generic_read_dir,
704 .readdir = nilfs_readdir,
705 .unlocked_ioctl = nilfs_ioctl,
706#ifdef CONFIG_COMPAT
707 .compat_ioctl = nilfs_ioctl,
708#endif /* CONFIG_COMPAT */
709 .fsync = nilfs_sync_file,
710
711};
diff --git a/fs/nilfs2/direct.c b/fs/nilfs2/direct.c
new file mode 100644
index 000000000000..c6379e482781
--- /dev/null
+++ b/fs/nilfs2/direct.c
@@ -0,0 +1,436 @@
1/*
2 * direct.c - NILFS direct block pointer.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/errno.h>
24#include "nilfs.h"
25#include "page.h"
26#include "direct.h"
27#include "alloc.h"
28
29static inline __le64 *nilfs_direct_dptrs(const struct nilfs_direct *direct)
30{
31 return (__le64 *)
32 ((struct nilfs_direct_node *)direct->d_bmap.b_u.u_data + 1);
33}
34
35static inline __u64
36nilfs_direct_get_ptr(const struct nilfs_direct *direct, __u64 key)
37{
38 return nilfs_bmap_dptr_to_ptr(*(nilfs_direct_dptrs(direct) + key));
39}
40
41static inline void nilfs_direct_set_ptr(struct nilfs_direct *direct,
42 __u64 key, __u64 ptr)
43{
44 *(nilfs_direct_dptrs(direct) + key) = nilfs_bmap_ptr_to_dptr(ptr);
45}
46
47static int nilfs_direct_lookup(const struct nilfs_bmap *bmap,
48 __u64 key, int level, __u64 *ptrp)
49{
50 struct nilfs_direct *direct;
51 __u64 ptr;
52
53 direct = (struct nilfs_direct *)bmap;
54 if ((key > NILFS_DIRECT_KEY_MAX) ||
55 (level != 1) || /* XXX: use macro for level 1 */
56 ((ptr = nilfs_direct_get_ptr(direct, key)) ==
57 NILFS_BMAP_INVALID_PTR))
58 return -ENOENT;
59
60 if (ptrp != NULL)
61 *ptrp = ptr;
62 return 0;
63}
64
65static __u64
66nilfs_direct_find_target_v(const struct nilfs_direct *direct, __u64 key)
67{
68 __u64 ptr;
69
70 ptr = nilfs_bmap_find_target_seq(&direct->d_bmap, key);
71 if (ptr != NILFS_BMAP_INVALID_PTR)
72 /* sequential access */
73 return ptr;
74 else
75 /* block group */
76 return nilfs_bmap_find_target_in_group(&direct->d_bmap);
77}
78
79static void nilfs_direct_set_target_v(struct nilfs_direct *direct,
80 __u64 key, __u64 ptr)
81{
82 direct->d_bmap.b_last_allocated_key = key;
83 direct->d_bmap.b_last_allocated_ptr = ptr;
84}
85
86static int nilfs_direct_prepare_insert(struct nilfs_direct *direct,
87 __u64 key,
88 union nilfs_bmap_ptr_req *req,
89 struct nilfs_bmap_stats *stats)
90{
91 int ret;
92
93 if (direct->d_ops->dop_find_target != NULL)
94 req->bpr_ptr = direct->d_ops->dop_find_target(direct, key);
95 ret = direct->d_bmap.b_pops->bpop_prepare_alloc_ptr(&direct->d_bmap,
96 req);
97 if (ret < 0)
98 return ret;
99
100 stats->bs_nblocks = 1;
101 return 0;
102}
103
104static void nilfs_direct_commit_insert(struct nilfs_direct *direct,
105 union nilfs_bmap_ptr_req *req,
106 __u64 key, __u64 ptr)
107{
108 struct buffer_head *bh;
109
110 /* ptr must be a pointer to a buffer head. */
111 bh = (struct buffer_head *)((unsigned long)ptr);
112 set_buffer_nilfs_volatile(bh);
113
114 if (direct->d_bmap.b_pops->bpop_commit_alloc_ptr != NULL)
115 direct->d_bmap.b_pops->bpop_commit_alloc_ptr(
116 &direct->d_bmap, req);
117 nilfs_direct_set_ptr(direct, key, req->bpr_ptr);
118
119 if (!nilfs_bmap_dirty(&direct->d_bmap))
120 nilfs_bmap_set_dirty(&direct->d_bmap);
121
122 if (direct->d_ops->dop_set_target != NULL)
123 direct->d_ops->dop_set_target(direct, key, req->bpr_ptr);
124}
125
126static int nilfs_direct_insert(struct nilfs_bmap *bmap, __u64 key, __u64 ptr)
127{
128 struct nilfs_direct *direct;
129 union nilfs_bmap_ptr_req req;
130 struct nilfs_bmap_stats stats;
131 int ret;
132
133 direct = (struct nilfs_direct *)bmap;
134 if (key > NILFS_DIRECT_KEY_MAX)
135 return -ENOENT;
136 if (nilfs_direct_get_ptr(direct, key) != NILFS_BMAP_INVALID_PTR)
137 return -EEXIST;
138
139 ret = nilfs_direct_prepare_insert(direct, key, &req, &stats);
140 if (ret < 0)
141 return ret;
142 nilfs_direct_commit_insert(direct, &req, key, ptr);
143 nilfs_bmap_add_blocks(bmap, stats.bs_nblocks);
144
145 return 0;
146}
147
148static int nilfs_direct_prepare_delete(struct nilfs_direct *direct,
149 union nilfs_bmap_ptr_req *req,
150 __u64 key,
151 struct nilfs_bmap_stats *stats)
152{
153 int ret;
154
155 if (direct->d_bmap.b_pops->bpop_prepare_end_ptr != NULL) {
156 req->bpr_ptr = nilfs_direct_get_ptr(direct, key);
157 ret = direct->d_bmap.b_pops->bpop_prepare_end_ptr(
158 &direct->d_bmap, req);
159 if (ret < 0)
160 return ret;
161 }
162
163 stats->bs_nblocks = 1;
164 return 0;
165}
166
167static void nilfs_direct_commit_delete(struct nilfs_direct *direct,
168 union nilfs_bmap_ptr_req *req,
169 __u64 key)
170{
171 if (direct->d_bmap.b_pops->bpop_commit_end_ptr != NULL)
172 direct->d_bmap.b_pops->bpop_commit_end_ptr(
173 &direct->d_bmap, req);
174 nilfs_direct_set_ptr(direct, key, NILFS_BMAP_INVALID_PTR);
175}
176
177static int nilfs_direct_delete(struct nilfs_bmap *bmap, __u64 key)
178{
179 struct nilfs_direct *direct;
180 union nilfs_bmap_ptr_req req;
181 struct nilfs_bmap_stats stats;
182 int ret;
183
184 direct = (struct nilfs_direct *)bmap;
185 if ((key > NILFS_DIRECT_KEY_MAX) ||
186 nilfs_direct_get_ptr(direct, key) == NILFS_BMAP_INVALID_PTR)
187 return -ENOENT;
188
189 ret = nilfs_direct_prepare_delete(direct, &req, key, &stats);
190 if (ret < 0)
191 return ret;
192 nilfs_direct_commit_delete(direct, &req, key);
193 nilfs_bmap_sub_blocks(bmap, stats.bs_nblocks);
194
195 return 0;
196}
197
198static int nilfs_direct_last_key(const struct nilfs_bmap *bmap, __u64 *keyp)
199{
200 struct nilfs_direct *direct;
201 __u64 key, lastkey;
202
203 direct = (struct nilfs_direct *)bmap;
204 lastkey = NILFS_DIRECT_KEY_MAX + 1;
205 for (key = NILFS_DIRECT_KEY_MIN; key <= NILFS_DIRECT_KEY_MAX; key++)
206 if (nilfs_direct_get_ptr(direct, key) !=
207 NILFS_BMAP_INVALID_PTR)
208 lastkey = key;
209
210 if (lastkey == NILFS_DIRECT_KEY_MAX + 1)
211 return -ENOENT;
212
213 *keyp = lastkey;
214
215 return 0;
216}
217
218static int nilfs_direct_check_insert(const struct nilfs_bmap *bmap, __u64 key)
219{
220 return key > NILFS_DIRECT_KEY_MAX;
221}
222
223static int nilfs_direct_gather_data(struct nilfs_bmap *bmap,
224 __u64 *keys, __u64 *ptrs, int nitems)
225{
226 struct nilfs_direct *direct;
227 __u64 key;
228 __u64 ptr;
229 int n;
230
231 direct = (struct nilfs_direct *)bmap;
232 if (nitems > NILFS_DIRECT_NBLOCKS)
233 nitems = NILFS_DIRECT_NBLOCKS;
234 n = 0;
235 for (key = 0; key < nitems; key++) {
236 ptr = nilfs_direct_get_ptr(direct, key);
237 if (ptr != NILFS_BMAP_INVALID_PTR) {
238 keys[n] = key;
239 ptrs[n] = ptr;
240 n++;
241 }
242 }
243 return n;
244}
245
246int nilfs_direct_delete_and_convert(struct nilfs_bmap *bmap,
247 __u64 key, __u64 *keys, __u64 *ptrs,
248 int n, __u64 low, __u64 high)
249{
250 struct nilfs_direct *direct;
251 __le64 *dptrs;
252 int ret, i, j;
253
254 /* no need to allocate any resource for conversion */
255
256 /* delete */
257 ret = bmap->b_ops->bop_delete(bmap, key);
258 if (ret < 0)
259 return ret;
260
261 /* free resources */
262 if (bmap->b_ops->bop_clear != NULL)
263 bmap->b_ops->bop_clear(bmap);
264
265 /* convert */
266 direct = (struct nilfs_direct *)bmap;
267 dptrs = nilfs_direct_dptrs(direct);
268 for (i = 0, j = 0; i < NILFS_DIRECT_NBLOCKS; i++) {
269 if ((j < n) && (i == keys[j])) {
270 dptrs[i] = (i != key) ?
271 nilfs_bmap_ptr_to_dptr(ptrs[j]) :
272 NILFS_BMAP_INVALID_PTR;
273 j++;
274 } else
275 dptrs[i] = NILFS_BMAP_INVALID_PTR;
276 }
277
278 nilfs_direct_init(bmap, low, high);
279
280 return 0;
281}
282
283static int nilfs_direct_propagate_v(struct nilfs_direct *direct,
284 struct buffer_head *bh)
285{
286 union nilfs_bmap_ptr_req oldreq, newreq;
287 __u64 key;
288 __u64 ptr;
289 int ret;
290
291 key = nilfs_bmap_data_get_key(&direct->d_bmap, bh);
292 ptr = nilfs_direct_get_ptr(direct, key);
293 if (!buffer_nilfs_volatile(bh)) {
294 oldreq.bpr_ptr = ptr;
295 newreq.bpr_ptr = ptr;
296 ret = nilfs_bmap_prepare_update(&direct->d_bmap, &oldreq,
297 &newreq);
298 if (ret < 0)
299 return ret;
300 nilfs_bmap_commit_update(&direct->d_bmap, &oldreq, &newreq);
301 set_buffer_nilfs_volatile(bh);
302 nilfs_direct_set_ptr(direct, key, newreq.bpr_ptr);
303 } else
304 ret = nilfs_bmap_mark_dirty(&direct->d_bmap, ptr);
305
306 return ret;
307}
308
309static int nilfs_direct_propagate(const struct nilfs_bmap *bmap,
310 struct buffer_head *bh)
311{
312 struct nilfs_direct *direct;
313
314 direct = (struct nilfs_direct *)bmap;
315 return (direct->d_ops->dop_propagate != NULL) ?
316 direct->d_ops->dop_propagate(direct, bh) :
317 0;
318}
319
320static int nilfs_direct_assign_v(struct nilfs_direct *direct,
321 __u64 key, __u64 ptr,
322 struct buffer_head **bh,
323 sector_t blocknr,
324 union nilfs_binfo *binfo)
325{
326 union nilfs_bmap_ptr_req req;
327 int ret;
328
329 req.bpr_ptr = ptr;
330 ret = direct->d_bmap.b_pops->bpop_prepare_start_ptr(
331 &direct->d_bmap, &req);
332 if (ret < 0)
333 return ret;
334 direct->d_bmap.b_pops->bpop_commit_start_ptr(&direct->d_bmap,
335 &req, blocknr);
336
337 binfo->bi_v.bi_vblocknr = nilfs_bmap_ptr_to_dptr(ptr);
338 binfo->bi_v.bi_blkoff = nilfs_bmap_key_to_dkey(key);
339
340 return 0;
341}
342
343static int nilfs_direct_assign_p(struct nilfs_direct *direct,
344 __u64 key, __u64 ptr,
345 struct buffer_head **bh,
346 sector_t blocknr,
347 union nilfs_binfo *binfo)
348{
349 nilfs_direct_set_ptr(direct, key, blocknr);
350
351 binfo->bi_dat.bi_blkoff = nilfs_bmap_key_to_dkey(key);
352 binfo->bi_dat.bi_level = 0;
353
354 return 0;
355}
356
357static int nilfs_direct_assign(struct nilfs_bmap *bmap,
358 struct buffer_head **bh,
359 sector_t blocknr,
360 union nilfs_binfo *binfo)
361{
362 struct nilfs_direct *direct;
363 __u64 key;
364 __u64 ptr;
365
366 direct = (struct nilfs_direct *)bmap;
367 key = nilfs_bmap_data_get_key(bmap, *bh);
368 if (unlikely(key > NILFS_DIRECT_KEY_MAX)) {
369 printk(KERN_CRIT "%s: invalid key: %llu\n", __func__,
370 (unsigned long long)key);
371 return -EINVAL;
372 }
373 ptr = nilfs_direct_get_ptr(direct, key);
374 if (unlikely(ptr == NILFS_BMAP_INVALID_PTR)) {
375 printk(KERN_CRIT "%s: invalid pointer: %llu\n", __func__,
376 (unsigned long long)ptr);
377 return -EINVAL;
378 }
379
380 return direct->d_ops->dop_assign(direct, key, ptr, bh,
381 blocknr, binfo);
382}
383
384static const struct nilfs_bmap_operations nilfs_direct_ops = {
385 .bop_lookup = nilfs_direct_lookup,
386 .bop_insert = nilfs_direct_insert,
387 .bop_delete = nilfs_direct_delete,
388 .bop_clear = NULL,
389
390 .bop_propagate = nilfs_direct_propagate,
391
392 .bop_lookup_dirty_buffers = NULL,
393
394 .bop_assign = nilfs_direct_assign,
395 .bop_mark = NULL,
396
397 .bop_last_key = nilfs_direct_last_key,
398 .bop_check_insert = nilfs_direct_check_insert,
399 .bop_check_delete = NULL,
400 .bop_gather_data = nilfs_direct_gather_data,
401};
402
403
404static const struct nilfs_direct_operations nilfs_direct_ops_v = {
405 .dop_find_target = nilfs_direct_find_target_v,
406 .dop_set_target = nilfs_direct_set_target_v,
407 .dop_propagate = nilfs_direct_propagate_v,
408 .dop_assign = nilfs_direct_assign_v,
409};
410
411static const struct nilfs_direct_operations nilfs_direct_ops_p = {
412 .dop_find_target = NULL,
413 .dop_set_target = NULL,
414 .dop_propagate = NULL,
415 .dop_assign = nilfs_direct_assign_p,
416};
417
418int nilfs_direct_init(struct nilfs_bmap *bmap, __u64 low, __u64 high)
419{
420 struct nilfs_direct *direct;
421
422 direct = (struct nilfs_direct *)bmap;
423 bmap->b_ops = &nilfs_direct_ops;
424 bmap->b_low = low;
425 bmap->b_high = high;
426 switch (bmap->b_inode->i_ino) {
427 case NILFS_DAT_INO:
428 direct->d_ops = &nilfs_direct_ops_p;
429 break;
430 default:
431 direct->d_ops = &nilfs_direct_ops_v;
432 break;
433 }
434
435 return 0;
436}
diff --git a/fs/nilfs2/direct.h b/fs/nilfs2/direct.h
new file mode 100644
index 000000000000..45d2c5cda812
--- /dev/null
+++ b/fs/nilfs2/direct.h
@@ -0,0 +1,78 @@
1/*
2 * direct.h - NILFS direct block pointer.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_DIRECT_H
24#define _NILFS_DIRECT_H
25
26#include <linux/types.h>
27#include <linux/buffer_head.h>
28#include "bmap.h"
29
30
31struct nilfs_direct;
32
33/**
34 * struct nilfs_direct_operations - direct mapping operation table
35 */
36struct nilfs_direct_operations {
37 __u64 (*dop_find_target)(const struct nilfs_direct *, __u64);
38 void (*dop_set_target)(struct nilfs_direct *, __u64, __u64);
39 int (*dop_propagate)(struct nilfs_direct *, struct buffer_head *);
40 int (*dop_assign)(struct nilfs_direct *, __u64, __u64,
41 struct buffer_head **, sector_t,
42 union nilfs_binfo *);
43};
44
45/**
46 * struct nilfs_direct_node - direct node
47 * @dn_flags: flags
48 * @dn_pad: padding
49 */
50struct nilfs_direct_node {
51 __u8 dn_flags;
52 __u8 pad[7];
53};
54
55/**
56 * struct nilfs_direct - direct mapping
57 * @d_bmap: bmap structure
58 * @d_ops: direct mapping operation table
59 */
60struct nilfs_direct {
61 struct nilfs_bmap d_bmap;
62
63 /* direct-mapping-specific members */
64 const struct nilfs_direct_operations *d_ops;
65};
66
67
68#define NILFS_DIRECT_NBLOCKS (NILFS_BMAP_SIZE / sizeof(__le64) - 1)
69#define NILFS_DIRECT_KEY_MIN 0
70#define NILFS_DIRECT_KEY_MAX (NILFS_DIRECT_NBLOCKS - 1)
71
72
73int nilfs_direct_init(struct nilfs_bmap *, __u64, __u64);
74int nilfs_direct_delete_and_convert(struct nilfs_bmap *, __u64, __u64 *,
75 __u64 *, int, __u64, __u64);
76
77
78#endif /* _NILFS_DIRECT_H */
diff --git a/fs/nilfs2/file.c b/fs/nilfs2/file.c
new file mode 100644
index 000000000000..6bd84a0d8238
--- /dev/null
+++ b/fs/nilfs2/file.c
@@ -0,0 +1,160 @@
1/*
2 * file.c - NILFS regular file handling primitives including fsync().
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Amagai Yoshiji <amagai@osrg.net>,
21 * Ryusuke Konishi <ryusuke@osrg.net>
22 */
23
24#include <linux/fs.h>
25#include <linux/mm.h>
26#include <linux/writeback.h>
27#include "nilfs.h"
28#include "segment.h"
29
30int nilfs_sync_file(struct file *file, struct dentry *dentry, int datasync)
31{
32 /*
33 * Called from fsync() system call
34 * This is the only entry point that can catch write and synch
35 * timing for both data blocks and intermediate blocks.
36 *
37 * This function should be implemented when the writeback function
38 * will be implemented.
39 */
40 struct inode *inode = dentry->d_inode;
41 int err;
42
43 if (!nilfs_inode_dirty(inode))
44 return 0;
45
46 if (datasync)
47 err = nilfs_construct_dsync_segment(inode->i_sb, inode, 0,
48 LLONG_MAX);
49 else
50 err = nilfs_construct_segment(inode->i_sb);
51
52 return err;
53}
54
55static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
56{
57 struct page *page = vmf->page;
58 struct inode *inode = vma->vm_file->f_dentry->d_inode;
59 struct nilfs_transaction_info ti;
60 int ret;
61
62 if (unlikely(nilfs_near_disk_full(NILFS_SB(inode->i_sb)->s_nilfs)))
63 return VM_FAULT_SIGBUS; /* -ENOSPC */
64
65 lock_page(page);
66 if (page->mapping != inode->i_mapping ||
67 page_offset(page) >= i_size_read(inode) || !PageUptodate(page)) {
68 unlock_page(page);
69 return VM_FAULT_NOPAGE; /* make the VM retry the fault */
70 }
71
72 /*
73 * check to see if the page is mapped already (no holes)
74 */
75 if (PageMappedToDisk(page)) {
76 unlock_page(page);
77 goto mapped;
78 }
79 if (page_has_buffers(page)) {
80 struct buffer_head *bh, *head;
81 int fully_mapped = 1;
82
83 bh = head = page_buffers(page);
84 do {
85 if (!buffer_mapped(bh)) {
86 fully_mapped = 0;
87 break;
88 }
89 } while (bh = bh->b_this_page, bh != head);
90
91 if (fully_mapped) {
92 SetPageMappedToDisk(page);
93 unlock_page(page);
94 goto mapped;
95 }
96 }
97 unlock_page(page);
98
99 /*
100 * fill hole blocks
101 */
102 ret = nilfs_transaction_begin(inode->i_sb, &ti, 1);
103 /* never returns -ENOMEM, but may return -ENOSPC */
104 if (unlikely(ret))
105 return VM_FAULT_SIGBUS;
106
107 ret = block_page_mkwrite(vma, vmf, nilfs_get_block);
108 if (unlikely(ret)) {
109 nilfs_transaction_abort(inode->i_sb);
110 return ret;
111 }
112 nilfs_transaction_commit(inode->i_sb);
113
114 mapped:
115 SetPageChecked(page);
116 wait_on_page_writeback(page);
117 return 0;
118}
119
120struct vm_operations_struct nilfs_file_vm_ops = {
121 .fault = filemap_fault,
122 .page_mkwrite = nilfs_page_mkwrite,
123};
124
125static int nilfs_file_mmap(struct file *file, struct vm_area_struct *vma)
126{
127 file_accessed(file);
128 vma->vm_ops = &nilfs_file_vm_ops;
129 vma->vm_flags |= VM_CAN_NONLINEAR;
130 return 0;
131}
132
133/*
134 * We have mostly NULL's here: the current defaults are ok for
135 * the nilfs filesystem.
136 */
137struct file_operations nilfs_file_operations = {
138 .llseek = generic_file_llseek,
139 .read = do_sync_read,
140 .write = do_sync_write,
141 .aio_read = generic_file_aio_read,
142 .aio_write = generic_file_aio_write,
143 .unlocked_ioctl = nilfs_ioctl,
144#ifdef CONFIG_COMPAT
145 .compat_ioctl = nilfs_ioctl,
146#endif /* CONFIG_COMPAT */
147 .mmap = nilfs_file_mmap,
148 .open = generic_file_open,
149 /* .release = nilfs_release_file, */
150 .fsync = nilfs_sync_file,
151 .splice_read = generic_file_splice_read,
152};
153
154struct inode_operations nilfs_file_inode_operations = {
155 .truncate = nilfs_truncate,
156 .setattr = nilfs_setattr,
157 .permission = nilfs_permission,
158};
159
160/* end of file */
diff --git a/fs/nilfs2/gcdat.c b/fs/nilfs2/gcdat.c
new file mode 100644
index 000000000000..93383c5cee90
--- /dev/null
+++ b/fs/nilfs2/gcdat.c
@@ -0,0 +1,84 @@
1/*
2 * gcdat.c - NILFS shadow DAT inode for GC
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Seiji Kihara <kihara@osrg.net>, Amagai Yoshiji <amagai@osrg.net>,
21 * and Ryusuke Konishi <ryusuke@osrg.net>.
22 *
23 */
24
25#include <linux/buffer_head.h>
26#include "nilfs.h"
27#include "page.h"
28#include "mdt.h"
29
30int nilfs_init_gcdat_inode(struct the_nilfs *nilfs)
31{
32 struct inode *dat = nilfs->ns_dat, *gcdat = nilfs->ns_gc_dat;
33 struct nilfs_inode_info *dii = NILFS_I(dat), *gii = NILFS_I(gcdat);
34 int err;
35
36 gcdat->i_state = 0;
37 gcdat->i_blocks = dat->i_blocks;
38 gii->i_flags = dii->i_flags;
39 gii->i_state = dii->i_state | (1 << NILFS_I_GCDAT);
40 gii->i_cno = 0;
41 nilfs_bmap_init_gcdat(gii->i_bmap, dii->i_bmap);
42 err = nilfs_copy_dirty_pages(gcdat->i_mapping, dat->i_mapping);
43 if (unlikely(err))
44 return err;
45
46 return nilfs_copy_dirty_pages(&gii->i_btnode_cache,
47 &dii->i_btnode_cache);
48}
49
50void nilfs_commit_gcdat_inode(struct the_nilfs *nilfs)
51{
52 struct inode *dat = nilfs->ns_dat, *gcdat = nilfs->ns_gc_dat;
53 struct nilfs_inode_info *dii = NILFS_I(dat), *gii = NILFS_I(gcdat);
54 struct address_space *mapping = dat->i_mapping;
55 struct address_space *gmapping = gcdat->i_mapping;
56
57 down_write(&NILFS_MDT(dat)->mi_sem);
58 dat->i_blocks = gcdat->i_blocks;
59 dii->i_flags = gii->i_flags;
60 dii->i_state = gii->i_state & ~(1 << NILFS_I_GCDAT);
61
62 nilfs_bmap_commit_gcdat(gii->i_bmap, dii->i_bmap);
63
64 nilfs_clear_dirty_pages(mapping);
65 nilfs_copy_back_pages(mapping, gmapping);
66 /* note: mdt dirty flags should be cleared by segctor. */
67
68 nilfs_clear_dirty_pages(&dii->i_btnode_cache);
69 nilfs_copy_back_pages(&dii->i_btnode_cache, &gii->i_btnode_cache);
70
71 up_write(&NILFS_MDT(dat)->mi_sem);
72}
73
74void nilfs_clear_gcdat_inode(struct the_nilfs *nilfs)
75{
76 struct inode *gcdat = nilfs->ns_gc_dat;
77 struct nilfs_inode_info *gii = NILFS_I(gcdat);
78
79 gcdat->i_state = I_CLEAR;
80 gii->i_flags = 0;
81
82 truncate_inode_pages(gcdat->i_mapping, 0);
83 truncate_inode_pages(&gii->i_btnode_cache, 0);
84}
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c
new file mode 100644
index 000000000000..19d2102b6a69
--- /dev/null
+++ b/fs/nilfs2/gcinode.c
@@ -0,0 +1,288 @@
1/*
2 * gcinode.c - dummy inodes to buffer blocks for garbage collection
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Seiji Kihara <kihara@osrg.net>, Amagai Yoshiji <amagai@osrg.net>,
21 * and Ryusuke Konishi <ryusuke@osrg.net>.
22 * Revised by Ryusuke Konishi <ryusuke@osrg.net>.
23 *
24 */
25/*
26 * This file adds the cache of on-disk blocks to be moved in garbage
27 * collection. The disk blocks are held with dummy inodes (called
28 * gcinodes), and this file provides lookup function of the dummy
29 * inodes and their buffer read function.
30 *
31 * Since NILFS2 keeps up multiple checkpoints/snapshots accross GC, it
32 * has to treat blocks that belong to a same file but have different
33 * checkpoint numbers. To avoid interference among generations, dummy
34 * inodes are managed separatly from actual inodes, and their lookup
35 * function (nilfs_gc_iget) is designed to be specified with a
36 * checkpoint number argument as well as an inode number.
37 *
38 * Buffers and pages held by the dummy inodes will be released each
39 * time after they are copied to a new log. Dirty blocks made on the
40 * current generation and the blocks to be moved by GC never overlap
41 * because the dirty blocks make a new generation; they rather must be
42 * written individually.
43 */
44
45#include <linux/buffer_head.h>
46#include <linux/mpage.h>
47#include <linux/hash.h>
48#include <linux/swap.h>
49#include "nilfs.h"
50#include "page.h"
51#include "mdt.h"
52#include "dat.h"
53#include "ifile.h"
54
55static struct address_space_operations def_gcinode_aops = {};
56/* XXX need def_gcinode_iops/fops? */
57
58/*
59 * nilfs_gccache_submit_read_data() - add data buffer and submit read request
60 * @inode - gc inode
61 * @blkoff - dummy offset treated as the key for the page cache
62 * @pbn - physical block number of the block
63 * @vbn - virtual block number of the block, 0 for non-virtual block
64 * @out_bh - indirect pointer to a buffer_head struct to receive the results
65 *
66 * Description: nilfs_gccache_submit_read_data() registers the data buffer
67 * specified by @pbn to the GC pagecache with the key @blkoff.
68 * This function sets @vbn (@pbn if @vbn is zero) in b_blocknr of the buffer.
69 *
70 * Return Value: On success, 0 is returned. On Error, one of the following
71 * negative error code is returned.
72 *
73 * %-EIO - I/O error.
74 *
75 * %-ENOMEM - Insufficient amount of memory available.
76 *
77 * %-ENOENT - The block specified with @pbn does not exist.
78 */
79int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff,
80 sector_t pbn, __u64 vbn,
81 struct buffer_head **out_bh)
82{
83 struct buffer_head *bh;
84 int err;
85
86 bh = nilfs_grab_buffer(inode, inode->i_mapping, blkoff, 0);
87 if (unlikely(!bh))
88 return -ENOMEM;
89
90 if (buffer_uptodate(bh))
91 goto out;
92
93 if (pbn == 0) {
94 struct inode *dat_inode = NILFS_I_NILFS(inode)->ns_dat;
95 /* use original dat, not gc dat. */
96 err = nilfs_dat_translate(dat_inode, vbn, &pbn);
97 if (unlikely(err)) { /* -EIO, -ENOMEM, -ENOENT */
98 brelse(bh);
99 goto failed;
100 }
101 }
102
103 lock_buffer(bh);
104 if (buffer_uptodate(bh)) {
105 unlock_buffer(bh);
106 goto out;
107 }
108
109 if (!buffer_mapped(bh)) {
110 bh->b_bdev = NILFS_I_NILFS(inode)->ns_bdev;
111 set_buffer_mapped(bh);
112 }
113 bh->b_blocknr = pbn;
114 bh->b_end_io = end_buffer_read_sync;
115 get_bh(bh);
116 submit_bh(READ, bh);
117 if (vbn)
118 bh->b_blocknr = vbn;
119 out:
120 err = 0;
121 *out_bh = bh;
122
123 failed:
124 unlock_page(bh->b_page);
125 page_cache_release(bh->b_page);
126 return err;
127}
128
129/*
130 * nilfs_gccache_submit_read_node() - add node buffer and submit read request
131 * @inode - gc inode
132 * @pbn - physical block number for the block
133 * @vbn - virtual block number for the block
134 * @out_bh - indirect pointer to a buffer_head struct to receive the results
135 *
136 * Description: nilfs_gccache_submit_read_node() registers the node buffer
137 * specified by @vbn to the GC pagecache. @pbn can be supplied by the
138 * caller to avoid translation of the disk block address.
139 *
140 * Return Value: On success, 0 is returned. On Error, one of the following
141 * negative error code is returned.
142 *
143 * %-EIO - I/O error.
144 *
145 * %-ENOMEM - Insufficient amount of memory available.
146 */
147int nilfs_gccache_submit_read_node(struct inode *inode, sector_t pbn,
148 __u64 vbn, struct buffer_head **out_bh)
149{
150 int ret = nilfs_btnode_submit_block(&NILFS_I(inode)->i_btnode_cache,
151 vbn ? : pbn, pbn, out_bh, 0);
152 if (ret == -EEXIST) /* internal code (cache hit) */
153 ret = 0;
154 return ret;
155}
156
157int nilfs_gccache_wait_and_mark_dirty(struct buffer_head *bh)
158{
159 wait_on_buffer(bh);
160 if (!buffer_uptodate(bh))
161 return -EIO;
162 if (buffer_dirty(bh))
163 return -EEXIST;
164
165 if (buffer_nilfs_node(bh))
166 nilfs_btnode_mark_dirty(bh);
167 else
168 nilfs_mdt_mark_buffer_dirty(bh);
169 return 0;
170}
171
172/*
173 * nilfs_init_gccache() - allocate and initialize gc_inode hash table
174 * @nilfs - the_nilfs
175 *
176 * Return Value: On success, 0.
177 * On error, a negative error code is returned.
178 */
179int nilfs_init_gccache(struct the_nilfs *nilfs)
180{
181 int loop;
182
183 BUG_ON(nilfs->ns_gc_inodes_h);
184
185 INIT_LIST_HEAD(&nilfs->ns_gc_inodes);
186
187 nilfs->ns_gc_inodes_h =
188 kmalloc(sizeof(struct hlist_head) * NILFS_GCINODE_HASH_SIZE,
189 GFP_NOFS);
190 if (nilfs->ns_gc_inodes_h == NULL)
191 return -ENOMEM;
192
193 for (loop = 0; loop < NILFS_GCINODE_HASH_SIZE; loop++)
194 INIT_HLIST_HEAD(&nilfs->ns_gc_inodes_h[loop]);
195 return 0;
196}
197
198/*
199 * nilfs_destroy_gccache() - free gc_inode hash table
200 * @nilfs - the nilfs
201 */
202void nilfs_destroy_gccache(struct the_nilfs *nilfs)
203{
204 if (nilfs->ns_gc_inodes_h) {
205 nilfs_remove_all_gcinode(nilfs);
206 kfree(nilfs->ns_gc_inodes_h);
207 nilfs->ns_gc_inodes_h = NULL;
208 }
209}
210
211static struct inode *alloc_gcinode(struct the_nilfs *nilfs, ino_t ino,
212 __u64 cno)
213{
214 struct inode *inode = nilfs_mdt_new_common(nilfs, NULL, ino, GFP_NOFS);
215 struct nilfs_inode_info *ii;
216
217 if (!inode)
218 return NULL;
219
220 inode->i_op = NULL;
221 inode->i_fop = NULL;
222 inode->i_mapping->a_ops = &def_gcinode_aops;
223
224 ii = NILFS_I(inode);
225 ii->i_cno = cno;
226 ii->i_flags = 0;
227 ii->i_state = 1 << NILFS_I_GCINODE;
228 ii->i_bh = NULL;
229 nilfs_bmap_init_gc(ii->i_bmap);
230
231 return inode;
232}
233
234static unsigned long ihash(ino_t ino, __u64 cno)
235{
236 return hash_long((unsigned long)((ino << 2) + cno),
237 NILFS_GCINODE_HASH_BITS);
238}
239
240/*
241 * nilfs_gc_iget() - find or create gc inode with specified (ino,cno)
242 */
243struct inode *nilfs_gc_iget(struct the_nilfs *nilfs, ino_t ino, __u64 cno)
244{
245 struct hlist_head *head = nilfs->ns_gc_inodes_h + ihash(ino, cno);
246 struct hlist_node *node;
247 struct inode *inode;
248
249 hlist_for_each_entry(inode, node, head, i_hash) {
250 if (inode->i_ino == ino && NILFS_I(inode)->i_cno == cno)
251 return inode;
252 }
253
254 inode = alloc_gcinode(nilfs, ino, cno);
255 if (likely(inode)) {
256 hlist_add_head(&inode->i_hash, head);
257 list_add(&NILFS_I(inode)->i_dirty, &nilfs->ns_gc_inodes);
258 }
259 return inode;
260}
261
262/*
263 * nilfs_clear_gcinode() - clear and free a gc inode
264 */
265void nilfs_clear_gcinode(struct inode *inode)
266{
267 nilfs_mdt_clear(inode);
268 nilfs_mdt_destroy(inode);
269}
270
271/*
272 * nilfs_remove_all_gcinode() - remove all inodes from the_nilfs
273 */
274void nilfs_remove_all_gcinode(struct the_nilfs *nilfs)
275{
276 struct hlist_head *head = nilfs->ns_gc_inodes_h;
277 struct hlist_node *node, *n;
278 struct inode *inode;
279 int loop;
280
281 for (loop = 0; loop < NILFS_GCINODE_HASH_SIZE; loop++, head++) {
282 hlist_for_each_entry_safe(inode, node, n, head, i_hash) {
283 hlist_del_init(&inode->i_hash);
284 list_del_init(&NILFS_I(inode)->i_dirty);
285 nilfs_clear_gcinode(inode); /* might sleep */
286 }
287 }
288}
diff --git a/fs/nilfs2/ifile.c b/fs/nilfs2/ifile.c
new file mode 100644
index 000000000000..de86401f209f
--- /dev/null
+++ b/fs/nilfs2/ifile.c
@@ -0,0 +1,150 @@
1/*
2 * ifile.c - NILFS inode file
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Amagai Yoshiji <amagai@osrg.net>.
21 * Revised by Ryusuke Konishi <ryusuke@osrg.net>.
22 *
23 */
24
25#include <linux/types.h>
26#include <linux/buffer_head.h>
27#include "nilfs.h"
28#include "mdt.h"
29#include "alloc.h"
30#include "ifile.h"
31
32/**
33 * nilfs_ifile_create_inode - create a new disk inode
34 * @ifile: ifile inode
35 * @out_ino: pointer to a variable to store inode number
36 * @out_bh: buffer_head contains newly allocated disk inode
37 *
38 * Return Value: On success, 0 is returned and the newly allocated inode
39 * number is stored in the place pointed by @ino, and buffer_head pointer
40 * that contains newly allocated disk inode structure is stored in the
41 * place pointed by @out_bh
42 * On error, one of the following negative error codes is returned.
43 *
44 * %-EIO - I/O error.
45 *
46 * %-ENOMEM - Insufficient amount of memory available.
47 *
48 * %-ENOSPC - No inode left.
49 */
50int nilfs_ifile_create_inode(struct inode *ifile, ino_t *out_ino,
51 struct buffer_head **out_bh)
52{
53 struct nilfs_palloc_req req;
54 int ret;
55
56 req.pr_entry_nr = 0; /* 0 says find free inode from beginning of
57 a group. dull code!! */
58 req.pr_entry_bh = NULL;
59
60 ret = nilfs_palloc_prepare_alloc_entry(ifile, &req);
61 if (!ret) {
62 ret = nilfs_palloc_get_entry_block(ifile, req.pr_entry_nr, 1,
63 &req.pr_entry_bh);
64 if (ret < 0)
65 nilfs_palloc_abort_alloc_entry(ifile, &req);
66 }
67 if (ret < 0) {
68 brelse(req.pr_entry_bh);
69 return ret;
70 }
71 nilfs_palloc_commit_alloc_entry(ifile, &req);
72 nilfs_mdt_mark_buffer_dirty(req.pr_entry_bh);
73 nilfs_mdt_mark_dirty(ifile);
74 *out_ino = (ino_t)req.pr_entry_nr;
75 *out_bh = req.pr_entry_bh;
76 return 0;
77}
78
79/**
80 * nilfs_ifile_delete_inode - delete a disk inode
81 * @ifile: ifile inode
82 * @ino: inode number
83 *
84 * Return Value: On success, 0 is returned. On error, one of the following
85 * negative error codes is returned.
86 *
87 * %-EIO - I/O error.
88 *
89 * %-ENOMEM - Insufficient amount of memory available.
90 *
91 * %-ENOENT - The inode number @ino have not been allocated.
92 */
93int nilfs_ifile_delete_inode(struct inode *ifile, ino_t ino)
94{
95 struct nilfs_palloc_req req = {
96 .pr_entry_nr = ino, .pr_entry_bh = NULL
97 };
98 struct nilfs_inode *raw_inode;
99 void *kaddr;
100 int ret;
101
102 ret = nilfs_palloc_prepare_free_entry(ifile, &req);
103 if (!ret) {
104 ret = nilfs_palloc_get_entry_block(ifile, req.pr_entry_nr, 0,
105 &req.pr_entry_bh);
106 if (ret < 0)
107 nilfs_palloc_abort_free_entry(ifile, &req);
108 }
109 if (ret < 0) {
110 brelse(req.pr_entry_bh);
111 return ret;
112 }
113
114 kaddr = kmap_atomic(req.pr_entry_bh->b_page, KM_USER0);
115 raw_inode = nilfs_palloc_block_get_entry(ifile, req.pr_entry_nr,
116 req.pr_entry_bh, kaddr);
117 raw_inode->i_flags = 0;
118 kunmap_atomic(kaddr, KM_USER0);
119
120 nilfs_mdt_mark_buffer_dirty(req.pr_entry_bh);
121 brelse(req.pr_entry_bh);
122
123 nilfs_palloc_commit_free_entry(ifile, &req);
124
125 return 0;
126}
127
128int nilfs_ifile_get_inode_block(struct inode *ifile, ino_t ino,
129 struct buffer_head **out_bh)
130{
131 struct super_block *sb = ifile->i_sb;
132 int err;
133
134 if (unlikely(!NILFS_VALID_INODE(sb, ino))) {
135 nilfs_error(sb, __func__, "bad inode number: %lu",
136 (unsigned long) ino);
137 return -EINVAL;
138 }
139
140 err = nilfs_palloc_get_entry_block(ifile, ino, 0, out_bh);
141 if (unlikely(err)) {
142 if (err == -EINVAL)
143 nilfs_error(sb, __func__, "ifile is broken");
144 else
145 nilfs_warning(sb, __func__,
146 "unable to read inode: %lu",
147 (unsigned long) ino);
148 }
149 return err;
150}
diff --git a/fs/nilfs2/ifile.h b/fs/nilfs2/ifile.h
new file mode 100644
index 000000000000..5d30a35679b5
--- /dev/null
+++ b/fs/nilfs2/ifile.h
@@ -0,0 +1,53 @@
1/*
2 * ifile.h - NILFS inode file
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Amagai Yoshiji <amagai@osrg.net>
21 * Revised by Ryusuke Konishi <ryusuke@osrg.net>
22 *
23 */
24
25#ifndef _NILFS_IFILE_H
26#define _NILFS_IFILE_H
27
28#include <linux/fs.h>
29#include <linux/buffer_head.h>
30#include <linux/nilfs2_fs.h>
31#include "mdt.h"
32#include "alloc.h"
33
34#define NILFS_IFILE_GFP NILFS_MDT_GFP
35
36static inline struct nilfs_inode *
37nilfs_ifile_map_inode(struct inode *ifile, ino_t ino, struct buffer_head *ibh)
38{
39 void *kaddr = kmap(ibh->b_page);
40 return nilfs_palloc_block_get_entry(ifile, ino, ibh, kaddr);
41}
42
43static inline void nilfs_ifile_unmap_inode(struct inode *ifile, ino_t ino,
44 struct buffer_head *ibh)
45{
46 kunmap(ibh->b_page);
47}
48
49int nilfs_ifile_create_inode(struct inode *, ino_t *, struct buffer_head **);
50int nilfs_ifile_delete_inode(struct inode *, ino_t);
51int nilfs_ifile_get_inode_block(struct inode *, ino_t, struct buffer_head **);
52
53#endif /* _NILFS_IFILE_H */
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
new file mode 100644
index 000000000000..49ab4a49bb4f
--- /dev/null
+++ b/fs/nilfs2/inode.c
@@ -0,0 +1,785 @@
1/*
2 * inode.c - NILFS inode operations.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23
24#include <linux/buffer_head.h>
25#include <linux/mpage.h>
26#include <linux/writeback.h>
27#include <linux/uio.h>
28#include "nilfs.h"
29#include "segment.h"
30#include "page.h"
31#include "mdt.h"
32#include "cpfile.h"
33#include "ifile.h"
34
35
36/**
37 * nilfs_get_block() - get a file block on the filesystem (callback function)
38 * @inode - inode struct of the target file
39 * @blkoff - file block number
40 * @bh_result - buffer head to be mapped on
41 * @create - indicate whether allocating the block or not when it has not
42 * been allocated yet.
43 *
44 * This function does not issue actual read request of the specified data
45 * block. It is done by VFS.
46 * Bulk read for direct-io is not supported yet. (should be supported)
47 */
48int nilfs_get_block(struct inode *inode, sector_t blkoff,
49 struct buffer_head *bh_result, int create)
50{
51 struct nilfs_inode_info *ii = NILFS_I(inode);
52 unsigned long blknum = 0;
53 int err = 0, ret;
54 struct inode *dat = nilfs_dat_inode(NILFS_I_NILFS(inode));
55
56 /* This exclusion control is a workaround; should be revised */
57 down_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
58 ret = nilfs_bmap_lookup(ii->i_bmap, (unsigned long)blkoff, &blknum);
59 up_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
60 if (ret == 0) { /* found */
61 map_bh(bh_result, inode->i_sb, blknum);
62 goto out;
63 }
64 /* data block was not found */
65 if (ret == -ENOENT && create) {
66 struct nilfs_transaction_info ti;
67
68 bh_result->b_blocknr = 0;
69 err = nilfs_transaction_begin(inode->i_sb, &ti, 1);
70 if (unlikely(err))
71 goto out;
72 err = nilfs_bmap_insert(ii->i_bmap, (unsigned long)blkoff,
73 (unsigned long)bh_result);
74 if (unlikely(err != 0)) {
75 if (err == -EEXIST) {
76 /*
77 * The get_block() function could be called
78 * from multiple callers for an inode.
79 * However, the page having this block must
80 * be locked in this case.
81 */
82 printk(KERN_WARNING
83 "nilfs_get_block: a race condition "
84 "while inserting a data block. "
85 "(inode number=%lu, file block "
86 "offset=%llu)\n",
87 inode->i_ino,
88 (unsigned long long)blkoff);
89 err = 0;
90 } else if (err == -EINVAL) {
91 nilfs_error(inode->i_sb, __func__,
92 "broken bmap (inode=%lu)\n",
93 inode->i_ino);
94 err = -EIO;
95 }
96 nilfs_transaction_abort(inode->i_sb);
97 goto out;
98 }
99 nilfs_transaction_commit(inode->i_sb); /* never fails */
100 /* Error handling should be detailed */
101 set_buffer_new(bh_result);
102 map_bh(bh_result, inode->i_sb, 0); /* dbn must be changed
103 to proper value */
104 } else if (ret == -ENOENT) {
105 /* not found is not error (e.g. hole); must return without
106 the mapped state flag. */
107 ;
108 } else {
109 err = ret;
110 }
111
112 out:
113 return err;
114}
115
116/**
117 * nilfs_readpage() - implement readpage() method of nilfs_aops {}
118 * address_space_operations.
119 * @file - file struct of the file to be read
120 * @page - the page to be read
121 */
122static int nilfs_readpage(struct file *file, struct page *page)
123{
124 return mpage_readpage(page, nilfs_get_block);
125}
126
127/**
128 * nilfs_readpages() - implement readpages() method of nilfs_aops {}
129 * address_space_operations.
130 * @file - file struct of the file to be read
131 * @mapping - address_space struct used for reading multiple pages
132 * @pages - the pages to be read
133 * @nr_pages - number of pages to be read
134 */
135static int nilfs_readpages(struct file *file, struct address_space *mapping,
136 struct list_head *pages, unsigned nr_pages)
137{
138 return mpage_readpages(mapping, pages, nr_pages, nilfs_get_block);
139}
140
141static int nilfs_writepages(struct address_space *mapping,
142 struct writeback_control *wbc)
143{
144 struct inode *inode = mapping->host;
145 int err = 0;
146
147 if (wbc->sync_mode == WB_SYNC_ALL)
148 err = nilfs_construct_dsync_segment(inode->i_sb, inode,
149 wbc->range_start,
150 wbc->range_end);
151 return err;
152}
153
154static int nilfs_writepage(struct page *page, struct writeback_control *wbc)
155{
156 struct inode *inode = page->mapping->host;
157 int err;
158
159 redirty_page_for_writepage(wbc, page);
160 unlock_page(page);
161
162 if (wbc->sync_mode == WB_SYNC_ALL) {
163 err = nilfs_construct_segment(inode->i_sb);
164 if (unlikely(err))
165 return err;
166 } else if (wbc->for_reclaim)
167 nilfs_flush_segment(inode->i_sb, inode->i_ino);
168
169 return 0;
170}
171
172static int nilfs_set_page_dirty(struct page *page)
173{
174 int ret = __set_page_dirty_buffers(page);
175
176 if (ret) {
177 struct inode *inode = page->mapping->host;
178 struct nilfs_sb_info *sbi = NILFS_SB(inode->i_sb);
179 unsigned nr_dirty = 1 << (PAGE_SHIFT - inode->i_blkbits);
180
181 nilfs_set_file_dirty(sbi, inode, nr_dirty);
182 }
183 return ret;
184}
185
186static int nilfs_write_begin(struct file *file, struct address_space *mapping,
187 loff_t pos, unsigned len, unsigned flags,
188 struct page **pagep, void **fsdata)
189
190{
191 struct inode *inode = mapping->host;
192 int err = nilfs_transaction_begin(inode->i_sb, NULL, 1);
193
194 if (unlikely(err))
195 return err;
196
197 *pagep = NULL;
198 err = block_write_begin(file, mapping, pos, len, flags, pagep,
199 fsdata, nilfs_get_block);
200 if (unlikely(err))
201 nilfs_transaction_abort(inode->i_sb);
202 return err;
203}
204
205static int nilfs_write_end(struct file *file, struct address_space *mapping,
206 loff_t pos, unsigned len, unsigned copied,
207 struct page *page, void *fsdata)
208{
209 struct inode *inode = mapping->host;
210 unsigned start = pos & (PAGE_CACHE_SIZE - 1);
211 unsigned nr_dirty;
212 int err;
213
214 nr_dirty = nilfs_page_count_clean_buffers(page, start,
215 start + copied);
216 copied = generic_write_end(file, mapping, pos, len, copied, page,
217 fsdata);
218 nilfs_set_file_dirty(NILFS_SB(inode->i_sb), inode, nr_dirty);
219 err = nilfs_transaction_commit(inode->i_sb);
220 return err ? : copied;
221}
222
223static ssize_t
224nilfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
225 loff_t offset, unsigned long nr_segs)
226{
227 struct file *file = iocb->ki_filp;
228 struct inode *inode = file->f_mapping->host;
229 ssize_t size;
230
231 if (rw == WRITE)
232 return 0;
233
234 /* Needs synchronization with the cleaner */
235 size = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov,
236 offset, nr_segs, nilfs_get_block, NULL);
237 return size;
238}
239
240struct address_space_operations nilfs_aops = {
241 .writepage = nilfs_writepage,
242 .readpage = nilfs_readpage,
243 /* .sync_page = nilfs_sync_page, */
244 .writepages = nilfs_writepages,
245 .set_page_dirty = nilfs_set_page_dirty,
246 .readpages = nilfs_readpages,
247 .write_begin = nilfs_write_begin,
248 .write_end = nilfs_write_end,
249 /* .releasepage = nilfs_releasepage, */
250 .invalidatepage = block_invalidatepage,
251 .direct_IO = nilfs_direct_IO,
252};
253
254struct inode *nilfs_new_inode(struct inode *dir, int mode)
255{
256 struct super_block *sb = dir->i_sb;
257 struct nilfs_sb_info *sbi = NILFS_SB(sb);
258 struct inode *inode;
259 struct nilfs_inode_info *ii;
260 int err = -ENOMEM;
261 ino_t ino;
262
263 inode = new_inode(sb);
264 if (unlikely(!inode))
265 goto failed;
266
267 mapping_set_gfp_mask(inode->i_mapping,
268 mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
269
270 ii = NILFS_I(inode);
271 ii->i_state = 1 << NILFS_I_NEW;
272
273 err = nilfs_ifile_create_inode(sbi->s_ifile, &ino, &ii->i_bh);
274 if (unlikely(err))
275 goto failed_ifile_create_inode;
276 /* reference count of i_bh inherits from nilfs_mdt_read_block() */
277
278 atomic_inc(&sbi->s_inodes_count);
279
280 inode->i_uid = current_fsuid();
281 if (dir->i_mode & S_ISGID) {
282 inode->i_gid = dir->i_gid;
283 if (S_ISDIR(mode))
284 mode |= S_ISGID;
285 } else
286 inode->i_gid = current_fsgid();
287
288 inode->i_mode = mode;
289 inode->i_ino = ino;
290 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
291
292 if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) {
293 err = nilfs_bmap_read(ii->i_bmap, NULL);
294 if (err < 0)
295 goto failed_bmap;
296
297 set_bit(NILFS_I_BMAP, &ii->i_state);
298 /* No lock is needed; iget() ensures it. */
299 }
300
301 ii->i_flags = NILFS_I(dir)->i_flags;
302 if (S_ISLNK(mode))
303 ii->i_flags &= ~(NILFS_IMMUTABLE_FL | NILFS_APPEND_FL);
304 if (!S_ISDIR(mode))
305 ii->i_flags &= ~NILFS_DIRSYNC_FL;
306
307 /* ii->i_file_acl = 0; */
308 /* ii->i_dir_acl = 0; */
309 ii->i_dir_start_lookup = 0;
310#ifdef CONFIG_NILFS_FS_POSIX_ACL
311 ii->i_acl = NULL;
312 ii->i_default_acl = NULL;
313#endif
314 ii->i_cno = 0;
315 nilfs_set_inode_flags(inode);
316 spin_lock(&sbi->s_next_gen_lock);
317 inode->i_generation = sbi->s_next_generation++;
318 spin_unlock(&sbi->s_next_gen_lock);
319 insert_inode_hash(inode);
320
321 err = nilfs_init_acl(inode, dir);
322 if (unlikely(err))
323 goto failed_acl; /* never occur. When supporting
324 nilfs_init_acl(), proper cancellation of
325 above jobs should be considered */
326
327 mark_inode_dirty(inode);
328 return inode;
329
330 failed_acl:
331 failed_bmap:
332 inode->i_nlink = 0;
333 iput(inode); /* raw_inode will be deleted through
334 generic_delete_inode() */
335 goto failed;
336
337 failed_ifile_create_inode:
338 make_bad_inode(inode);
339 iput(inode); /* if i_nlink == 1, generic_forget_inode() will be
340 called */
341 failed:
342 return ERR_PTR(err);
343}
344
345void nilfs_free_inode(struct inode *inode)
346{
347 struct super_block *sb = inode->i_sb;
348 struct nilfs_sb_info *sbi = NILFS_SB(sb);
349
350 clear_inode(inode);
351 /* XXX: check error code? Is there any thing I can do? */
352 (void) nilfs_ifile_delete_inode(sbi->s_ifile, inode->i_ino);
353 atomic_dec(&sbi->s_inodes_count);
354}
355
356void nilfs_set_inode_flags(struct inode *inode)
357{
358 unsigned int flags = NILFS_I(inode)->i_flags;
359
360 inode->i_flags &= ~(S_SYNC | S_APPEND | S_IMMUTABLE | S_NOATIME |
361 S_DIRSYNC);
362 if (flags & NILFS_SYNC_FL)
363 inode->i_flags |= S_SYNC;
364 if (flags & NILFS_APPEND_FL)
365 inode->i_flags |= S_APPEND;
366 if (flags & NILFS_IMMUTABLE_FL)
367 inode->i_flags |= S_IMMUTABLE;
368#ifndef NILFS_ATIME_DISABLE
369 if (flags & NILFS_NOATIME_FL)
370#endif
371 inode->i_flags |= S_NOATIME;
372 if (flags & NILFS_DIRSYNC_FL)
373 inode->i_flags |= S_DIRSYNC;
374 mapping_set_gfp_mask(inode->i_mapping,
375 mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
376}
377
378int nilfs_read_inode_common(struct inode *inode,
379 struct nilfs_inode *raw_inode)
380{
381 struct nilfs_inode_info *ii = NILFS_I(inode);
382 int err;
383
384 inode->i_mode = le16_to_cpu(raw_inode->i_mode);
385 inode->i_uid = (uid_t)le32_to_cpu(raw_inode->i_uid);
386 inode->i_gid = (gid_t)le32_to_cpu(raw_inode->i_gid);
387 inode->i_nlink = le16_to_cpu(raw_inode->i_links_count);
388 inode->i_size = le64_to_cpu(raw_inode->i_size);
389 inode->i_atime.tv_sec = le64_to_cpu(raw_inode->i_mtime);
390 inode->i_ctime.tv_sec = le64_to_cpu(raw_inode->i_ctime);
391 inode->i_mtime.tv_sec = le64_to_cpu(raw_inode->i_mtime);
392 inode->i_atime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
393 inode->i_ctime.tv_nsec = le32_to_cpu(raw_inode->i_ctime_nsec);
394 inode->i_mtime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec);
395 if (inode->i_nlink == 0 && inode->i_mode == 0)
396 return -EINVAL; /* this inode is deleted */
397
398 inode->i_blocks = le64_to_cpu(raw_inode->i_blocks);
399 ii->i_flags = le32_to_cpu(raw_inode->i_flags);
400#if 0
401 ii->i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
402 ii->i_dir_acl = S_ISREG(inode->i_mode) ?
403 0 : le32_to_cpu(raw_inode->i_dir_acl);
404#endif
405 ii->i_cno = 0;
406 inode->i_generation = le32_to_cpu(raw_inode->i_generation);
407
408 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
409 S_ISLNK(inode->i_mode)) {
410 err = nilfs_bmap_read(ii->i_bmap, raw_inode);
411 if (err < 0)
412 return err;
413 set_bit(NILFS_I_BMAP, &ii->i_state);
414 /* No lock is needed; iget() ensures it. */
415 }
416 return 0;
417}
418
419static int __nilfs_read_inode(struct super_block *sb, unsigned long ino,
420 struct inode *inode)
421{
422 struct nilfs_sb_info *sbi = NILFS_SB(sb);
423 struct inode *dat = nilfs_dat_inode(sbi->s_nilfs);
424 struct buffer_head *bh;
425 struct nilfs_inode *raw_inode;
426 int err;
427
428 down_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
429 err = nilfs_ifile_get_inode_block(sbi->s_ifile, ino, &bh);
430 if (unlikely(err))
431 goto bad_inode;
432
433 raw_inode = nilfs_ifile_map_inode(sbi->s_ifile, ino, bh);
434
435#ifdef CONFIG_NILFS_FS_POSIX_ACL
436 ii->i_acl = NILFS_ACL_NOT_CACHED;
437 ii->i_default_acl = NILFS_ACL_NOT_CACHED;
438#endif
439 if (nilfs_read_inode_common(inode, raw_inode))
440 goto failed_unmap;
441
442 if (S_ISREG(inode->i_mode)) {
443 inode->i_op = &nilfs_file_inode_operations;
444 inode->i_fop = &nilfs_file_operations;
445 inode->i_mapping->a_ops = &nilfs_aops;
446 } else if (S_ISDIR(inode->i_mode)) {
447 inode->i_op = &nilfs_dir_inode_operations;
448 inode->i_fop = &nilfs_dir_operations;
449 inode->i_mapping->a_ops = &nilfs_aops;
450 } else if (S_ISLNK(inode->i_mode)) {
451 inode->i_op = &nilfs_symlink_inode_operations;
452 inode->i_mapping->a_ops = &nilfs_aops;
453 } else {
454 inode->i_op = &nilfs_special_inode_operations;
455 init_special_inode(
456 inode, inode->i_mode,
457 new_decode_dev(le64_to_cpu(raw_inode->i_device_code)));
458 }
459 nilfs_ifile_unmap_inode(sbi->s_ifile, ino, bh);
460 brelse(bh);
461 up_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
462 nilfs_set_inode_flags(inode);
463 return 0;
464
465 failed_unmap:
466 nilfs_ifile_unmap_inode(sbi->s_ifile, ino, bh);
467 brelse(bh);
468
469 bad_inode:
470 up_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
471 return err;
472}
473
474struct inode *nilfs_iget(struct super_block *sb, unsigned long ino)
475{
476 struct inode *inode;
477 int err;
478
479 inode = iget_locked(sb, ino);
480 if (unlikely(!inode))
481 return ERR_PTR(-ENOMEM);
482 if (!(inode->i_state & I_NEW))
483 return inode;
484
485 err = __nilfs_read_inode(sb, ino, inode);
486 if (unlikely(err)) {
487 iget_failed(inode);
488 return ERR_PTR(err);
489 }
490 unlock_new_inode(inode);
491 return inode;
492}
493
494void nilfs_write_inode_common(struct inode *inode,
495 struct nilfs_inode *raw_inode, int has_bmap)
496{
497 struct nilfs_inode_info *ii = NILFS_I(inode);
498
499 raw_inode->i_mode = cpu_to_le16(inode->i_mode);
500 raw_inode->i_uid = cpu_to_le32(inode->i_uid);
501 raw_inode->i_gid = cpu_to_le32(inode->i_gid);
502 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
503 raw_inode->i_size = cpu_to_le64(inode->i_size);
504 raw_inode->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
505 raw_inode->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec);
506 raw_inode->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
507 raw_inode->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
508 raw_inode->i_blocks = cpu_to_le64(inode->i_blocks);
509
510 raw_inode->i_flags = cpu_to_le32(ii->i_flags);
511 raw_inode->i_generation = cpu_to_le32(inode->i_generation);
512
513 if (has_bmap)
514 nilfs_bmap_write(ii->i_bmap, raw_inode);
515 else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
516 raw_inode->i_device_code =
517 cpu_to_le64(new_encode_dev(inode->i_rdev));
518 /* When extending inode, nilfs->ns_inode_size should be checked
519 for substitutions of appended fields */
520}
521
522void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh)
523{
524 ino_t ino = inode->i_ino;
525 struct nilfs_inode_info *ii = NILFS_I(inode);
526 struct super_block *sb = inode->i_sb;
527 struct nilfs_sb_info *sbi = NILFS_SB(sb);
528 struct nilfs_inode *raw_inode;
529
530 raw_inode = nilfs_ifile_map_inode(sbi->s_ifile, ino, ibh);
531
532 /* The buffer is guarded with lock_buffer() by the caller */
533 if (test_and_clear_bit(NILFS_I_NEW, &ii->i_state))
534 memset(raw_inode, 0, NILFS_MDT(sbi->s_ifile)->mi_entry_size);
535 set_bit(NILFS_I_INODE_DIRTY, &ii->i_state);
536
537 nilfs_write_inode_common(inode, raw_inode, 0);
538 /* XXX: call with has_bmap = 0 is a workaround to avoid
539 deadlock of bmap. This delays update of i_bmap to just
540 before writing */
541 nilfs_ifile_unmap_inode(sbi->s_ifile, ino, ibh);
542}
543
544#define NILFS_MAX_TRUNCATE_BLOCKS 16384 /* 64MB for 4KB block */
545
546static void nilfs_truncate_bmap(struct nilfs_inode_info *ii,
547 unsigned long from)
548{
549 unsigned long b;
550 int ret;
551
552 if (!test_bit(NILFS_I_BMAP, &ii->i_state))
553 return;
554 repeat:
555 ret = nilfs_bmap_last_key(ii->i_bmap, &b);
556 if (ret == -ENOENT)
557 return;
558 else if (ret < 0)
559 goto failed;
560
561 if (b < from)
562 return;
563
564 b -= min_t(unsigned long, NILFS_MAX_TRUNCATE_BLOCKS, b - from);
565 ret = nilfs_bmap_truncate(ii->i_bmap, b);
566 nilfs_relax_pressure_in_lock(ii->vfs_inode.i_sb);
567 if (!ret || (ret == -ENOMEM &&
568 nilfs_bmap_truncate(ii->i_bmap, b) == 0))
569 goto repeat;
570
571 failed:
572 if (ret == -EINVAL)
573 nilfs_error(ii->vfs_inode.i_sb, __func__,
574 "bmap is broken (ino=%lu)", ii->vfs_inode.i_ino);
575 else
576 nilfs_warning(ii->vfs_inode.i_sb, __func__,
577 "failed to truncate bmap (ino=%lu, err=%d)",
578 ii->vfs_inode.i_ino, ret);
579}
580
581void nilfs_truncate(struct inode *inode)
582{
583 unsigned long blkoff;
584 unsigned int blocksize;
585 struct nilfs_transaction_info ti;
586 struct super_block *sb = inode->i_sb;
587 struct nilfs_inode_info *ii = NILFS_I(inode);
588
589 if (!test_bit(NILFS_I_BMAP, &ii->i_state))
590 return;
591 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
592 return;
593
594 blocksize = sb->s_blocksize;
595 blkoff = (inode->i_size + blocksize - 1) >> sb->s_blocksize_bits;
596 nilfs_transaction_begin(sb, &ti, 0); /* never fails */
597
598 block_truncate_page(inode->i_mapping, inode->i_size, nilfs_get_block);
599
600 nilfs_truncate_bmap(ii, blkoff);
601
602 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
603 if (IS_SYNC(inode))
604 nilfs_set_transaction_flag(NILFS_TI_SYNC);
605
606 nilfs_set_file_dirty(NILFS_SB(sb), inode, 0);
607 nilfs_transaction_commit(sb);
608 /* May construct a logical segment and may fail in sync mode.
609 But truncate has no return value. */
610}
611
612void nilfs_delete_inode(struct inode *inode)
613{
614 struct nilfs_transaction_info ti;
615 struct super_block *sb = inode->i_sb;
616 struct nilfs_inode_info *ii = NILFS_I(inode);
617
618 if (unlikely(is_bad_inode(inode))) {
619 if (inode->i_data.nrpages)
620 truncate_inode_pages(&inode->i_data, 0);
621 clear_inode(inode);
622 return;
623 }
624 nilfs_transaction_begin(sb, &ti, 0); /* never fails */
625
626 if (inode->i_data.nrpages)
627 truncate_inode_pages(&inode->i_data, 0);
628
629 nilfs_truncate_bmap(ii, 0);
630 nilfs_free_inode(inode);
631 /* nilfs_free_inode() marks inode buffer dirty */
632 if (IS_SYNC(inode))
633 nilfs_set_transaction_flag(NILFS_TI_SYNC);
634 nilfs_transaction_commit(sb);
635 /* May construct a logical segment and may fail in sync mode.
636 But delete_inode has no return value. */
637}
638
639int nilfs_setattr(struct dentry *dentry, struct iattr *iattr)
640{
641 struct nilfs_transaction_info ti;
642 struct inode *inode = dentry->d_inode;
643 struct super_block *sb = inode->i_sb;
644 int err;
645
646 err = inode_change_ok(inode, iattr);
647 if (err)
648 return err;
649
650 err = nilfs_transaction_begin(sb, &ti, 0);
651 if (unlikely(err))
652 return err;
653 err = inode_setattr(inode, iattr);
654 if (!err && (iattr->ia_valid & ATTR_MODE))
655 err = nilfs_acl_chmod(inode);
656 if (likely(!err))
657 err = nilfs_transaction_commit(sb);
658 else
659 nilfs_transaction_abort(sb);
660
661 return err;
662}
663
664int nilfs_load_inode_block(struct nilfs_sb_info *sbi, struct inode *inode,
665 struct buffer_head **pbh)
666{
667 struct nilfs_inode_info *ii = NILFS_I(inode);
668 int err;
669
670 spin_lock(&sbi->s_inode_lock);
671 /* Caller of this function MUST lock s_inode_lock */
672 if (ii->i_bh == NULL) {
673 spin_unlock(&sbi->s_inode_lock);
674 err = nilfs_ifile_get_inode_block(sbi->s_ifile, inode->i_ino,
675 pbh);
676 if (unlikely(err))
677 return err;
678 spin_lock(&sbi->s_inode_lock);
679 if (ii->i_bh == NULL)
680 ii->i_bh = *pbh;
681 else {
682 brelse(*pbh);
683 *pbh = ii->i_bh;
684 }
685 } else
686 *pbh = ii->i_bh;
687
688 get_bh(*pbh);
689 spin_unlock(&sbi->s_inode_lock);
690 return 0;
691}
692
693int nilfs_inode_dirty(struct inode *inode)
694{
695 struct nilfs_inode_info *ii = NILFS_I(inode);
696 struct nilfs_sb_info *sbi = NILFS_SB(inode->i_sb);
697 int ret = 0;
698
699 if (!list_empty(&ii->i_dirty)) {
700 spin_lock(&sbi->s_inode_lock);
701 ret = test_bit(NILFS_I_DIRTY, &ii->i_state) ||
702 test_bit(NILFS_I_BUSY, &ii->i_state);
703 spin_unlock(&sbi->s_inode_lock);
704 }
705 return ret;
706}
707
708int nilfs_set_file_dirty(struct nilfs_sb_info *sbi, struct inode *inode,
709 unsigned nr_dirty)
710{
711 struct nilfs_inode_info *ii = NILFS_I(inode);
712
713 atomic_add(nr_dirty, &sbi->s_nilfs->ns_ndirtyblks);
714
715 if (test_and_set_bit(NILFS_I_DIRTY, &ii->i_state))
716 return 0;
717
718 spin_lock(&sbi->s_inode_lock);
719 if (!test_bit(NILFS_I_QUEUED, &ii->i_state) &&
720 !test_bit(NILFS_I_BUSY, &ii->i_state)) {
721 /* Because this routine may race with nilfs_dispose_list(),
722 we have to check NILFS_I_QUEUED here, too. */
723 if (list_empty(&ii->i_dirty) && igrab(inode) == NULL) {
724 /* This will happen when somebody is freeing
725 this inode. */
726 nilfs_warning(sbi->s_super, __func__,
727 "cannot get inode (ino=%lu)\n",
728 inode->i_ino);
729 spin_unlock(&sbi->s_inode_lock);
730 return -EINVAL; /* NILFS_I_DIRTY may remain for
731 freeing inode */
732 }
733 list_del(&ii->i_dirty);
734 list_add_tail(&ii->i_dirty, &sbi->s_dirty_files);
735 set_bit(NILFS_I_QUEUED, &ii->i_state);
736 }
737 spin_unlock(&sbi->s_inode_lock);
738 return 0;
739}
740
741int nilfs_mark_inode_dirty(struct inode *inode)
742{
743 struct nilfs_sb_info *sbi = NILFS_SB(inode->i_sb);
744 struct buffer_head *ibh;
745 int err;
746
747 err = nilfs_load_inode_block(sbi, inode, &ibh);
748 if (unlikely(err)) {
749 nilfs_warning(inode->i_sb, __func__,
750 "failed to reget inode block.\n");
751 return err;
752 }
753 lock_buffer(ibh);
754 nilfs_update_inode(inode, ibh);
755 unlock_buffer(ibh);
756 nilfs_mdt_mark_buffer_dirty(ibh);
757 nilfs_mdt_mark_dirty(sbi->s_ifile);
758 brelse(ibh);
759 return 0;
760}
761
762/**
763 * nilfs_dirty_inode - reflect changes on given inode to an inode block.
764 * @inode: inode of the file to be registered.
765 *
766 * nilfs_dirty_inode() loads a inode block containing the specified
767 * @inode and copies data from a nilfs_inode to a corresponding inode
768 * entry in the inode block. This operation is excluded from the segment
769 * construction. This function can be called both as a single operation
770 * and as a part of indivisible file operations.
771 */
772void nilfs_dirty_inode(struct inode *inode)
773{
774 struct nilfs_transaction_info ti;
775
776 if (is_bad_inode(inode)) {
777 nilfs_warning(inode->i_sb, __func__,
778 "tried to mark bad_inode dirty. ignored.\n");
779 dump_stack();
780 return;
781 }
782 nilfs_transaction_begin(inode->i_sb, &ti, 0);
783 nilfs_mark_inode_dirty(inode);
784 nilfs_transaction_commit(inode->i_sb); /* never fails */
785}
diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
new file mode 100644
index 000000000000..108d281ebca5
--- /dev/null
+++ b/fs/nilfs2/ioctl.c
@@ -0,0 +1,654 @@
1/*
2 * ioctl.c - NILFS ioctl operations.
3 *
4 * Copyright (C) 2007, 2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/fs.h>
24#include <linux/wait.h>
25#include <linux/smp_lock.h> /* lock_kernel(), unlock_kernel() */
26#include <linux/capability.h> /* capable() */
27#include <linux/uaccess.h> /* copy_from_user(), copy_to_user() */
28#include <linux/nilfs2_fs.h>
29#include "nilfs.h"
30#include "segment.h"
31#include "bmap.h"
32#include "cpfile.h"
33#include "sufile.h"
34#include "dat.h"
35
36
37static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
38 struct nilfs_argv *argv, int dir,
39 ssize_t (*dofunc)(struct the_nilfs *,
40 __u64 *, int,
41 void *, size_t, size_t))
42{
43 void *buf;
44 void __user *base = (void __user *)(unsigned long)argv->v_base;
45 size_t maxmembs, total, n;
46 ssize_t nr;
47 int ret, i;
48 __u64 pos, ppos;
49
50 if (argv->v_nmembs == 0)
51 return 0;
52
53 if (argv->v_size > PAGE_SIZE)
54 return -EINVAL;
55
56 buf = (void *)__get_free_pages(GFP_NOFS, 0);
57 if (unlikely(!buf))
58 return -ENOMEM;
59 maxmembs = PAGE_SIZE / argv->v_size;
60
61 ret = 0;
62 total = 0;
63 pos = argv->v_index;
64 for (i = 0; i < argv->v_nmembs; i += n) {
65 n = (argv->v_nmembs - i < maxmembs) ?
66 argv->v_nmembs - i : maxmembs;
67 if ((dir & _IOC_WRITE) &&
68 copy_from_user(buf, base + argv->v_size * i,
69 argv->v_size * n)) {
70 ret = -EFAULT;
71 break;
72 }
73 ppos = pos;
74 nr = dofunc(nilfs, &pos, argv->v_flags, buf, argv->v_size,
75 n);
76 if (nr < 0) {
77 ret = nr;
78 break;
79 }
80 if ((dir & _IOC_READ) &&
81 copy_to_user(base + argv->v_size * i, buf,
82 argv->v_size * nr)) {
83 ret = -EFAULT;
84 break;
85 }
86 total += nr;
87 if ((size_t)nr < n)
88 break;
89 if (pos == ppos)
90 pos += n;
91 }
92 argv->v_nmembs = total;
93
94 free_pages((unsigned long)buf, 0);
95 return ret;
96}
97
98static int nilfs_ioctl_change_cpmode(struct inode *inode, struct file *filp,
99 unsigned int cmd, void __user *argp)
100{
101 struct inode *cpfile = NILFS_SB(inode->i_sb)->s_nilfs->ns_cpfile;
102 struct nilfs_transaction_info ti;
103 struct nilfs_cpmode cpmode;
104 int ret;
105
106 if (!capable(CAP_SYS_ADMIN))
107 return -EPERM;
108 if (copy_from_user(&cpmode, argp, sizeof(cpmode)))
109 return -EFAULT;
110
111 nilfs_transaction_begin(inode->i_sb, &ti, 0);
112 ret = nilfs_cpfile_change_cpmode(
113 cpfile, cpmode.cm_cno, cpmode.cm_mode);
114 if (unlikely(ret < 0)) {
115 nilfs_transaction_abort(inode->i_sb);
116 return ret;
117 }
118 nilfs_transaction_commit(inode->i_sb); /* never fails */
119 return ret;
120}
121
122static int
123nilfs_ioctl_delete_checkpoint(struct inode *inode, struct file *filp,
124 unsigned int cmd, void __user *argp)
125{
126 struct inode *cpfile = NILFS_SB(inode->i_sb)->s_nilfs->ns_cpfile;
127 struct nilfs_transaction_info ti;
128 __u64 cno;
129 int ret;
130
131 if (!capable(CAP_SYS_ADMIN))
132 return -EPERM;
133 if (copy_from_user(&cno, argp, sizeof(cno)))
134 return -EFAULT;
135
136 nilfs_transaction_begin(inode->i_sb, &ti, 0);
137 ret = nilfs_cpfile_delete_checkpoint(cpfile, cno);
138 if (unlikely(ret < 0)) {
139 nilfs_transaction_abort(inode->i_sb);
140 return ret;
141 }
142 nilfs_transaction_commit(inode->i_sb); /* never fails */
143 return ret;
144}
145
146static ssize_t
147nilfs_ioctl_do_get_cpinfo(struct the_nilfs *nilfs, __u64 *posp, int flags,
148 void *buf, size_t size, size_t nmembs)
149{
150 return nilfs_cpfile_get_cpinfo(nilfs->ns_cpfile, posp, flags, buf,
151 nmembs);
152}
153
154static int nilfs_ioctl_get_cpinfo(struct inode *inode, struct file *filp,
155 unsigned int cmd, void __user *argp)
156{
157 struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs;
158 struct nilfs_argv argv;
159 int ret;
160
161 if (copy_from_user(&argv, argp, sizeof(argv)))
162 return -EFAULT;
163
164 down_read(&nilfs->ns_segctor_sem);
165 ret = nilfs_ioctl_wrap_copy(nilfs, &argv, _IOC_DIR(cmd),
166 nilfs_ioctl_do_get_cpinfo);
167 up_read(&nilfs->ns_segctor_sem);
168 if (ret < 0)
169 return ret;
170
171 if (copy_to_user(argp, &argv, sizeof(argv)))
172 ret = -EFAULT;
173 return ret;
174}
175
176static int nilfs_ioctl_get_cpstat(struct inode *inode, struct file *filp,
177 unsigned int cmd, void __user *argp)
178{
179 struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs;
180 struct nilfs_cpstat cpstat;
181 int ret;
182
183 down_read(&nilfs->ns_segctor_sem);
184 ret = nilfs_cpfile_get_stat(nilfs->ns_cpfile, &cpstat);
185 up_read(&nilfs->ns_segctor_sem);
186 if (ret < 0)
187 return ret;
188
189 if (copy_to_user(argp, &cpstat, sizeof(cpstat)))
190 ret = -EFAULT;
191 return ret;
192}
193
194static ssize_t
195nilfs_ioctl_do_get_suinfo(struct the_nilfs *nilfs, __u64 *posp, int flags,
196 void *buf, size_t size, size_t nmembs)
197{
198 return nilfs_sufile_get_suinfo(nilfs->ns_sufile, *posp, buf, nmembs);
199}
200
201static int nilfs_ioctl_get_suinfo(struct inode *inode, struct file *filp,
202 unsigned int cmd, void __user *argp)
203{
204 struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs;
205 struct nilfs_argv argv;
206 int ret;
207
208 if (copy_from_user(&argv, argp, sizeof(argv)))
209 return -EFAULT;
210
211 down_read(&nilfs->ns_segctor_sem);
212 ret = nilfs_ioctl_wrap_copy(nilfs, &argv, _IOC_DIR(cmd),
213 nilfs_ioctl_do_get_suinfo);
214 up_read(&nilfs->ns_segctor_sem);
215 if (ret < 0)
216 return ret;
217
218 if (copy_to_user(argp, &argv, sizeof(argv)))
219 ret = -EFAULT;
220 return ret;
221}
222
223static int nilfs_ioctl_get_sustat(struct inode *inode, struct file *filp,
224 unsigned int cmd, void __user *argp)
225{
226 struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs;
227 struct nilfs_sustat sustat;
228 int ret;
229
230 down_read(&nilfs->ns_segctor_sem);
231 ret = nilfs_sufile_get_stat(nilfs->ns_sufile, &sustat);
232 up_read(&nilfs->ns_segctor_sem);
233 if (ret < 0)
234 return ret;
235
236 if (copy_to_user(argp, &sustat, sizeof(sustat)))
237 ret = -EFAULT;
238 return ret;
239}
240
241static ssize_t
242nilfs_ioctl_do_get_vinfo(struct the_nilfs *nilfs, __u64 *posp, int flags,
243 void *buf, size_t size, size_t nmembs)
244{
245 return nilfs_dat_get_vinfo(nilfs_dat_inode(nilfs), buf, nmembs);
246}
247
248static int nilfs_ioctl_get_vinfo(struct inode *inode, struct file *filp,
249 unsigned int cmd, void __user *argp)
250{
251 struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs;
252 struct nilfs_argv argv;
253 int ret;
254
255 if (copy_from_user(&argv, argp, sizeof(argv)))
256 return -EFAULT;
257
258 down_read(&nilfs->ns_segctor_sem);
259 ret = nilfs_ioctl_wrap_copy(nilfs, &argv, _IOC_DIR(cmd),
260 nilfs_ioctl_do_get_vinfo);
261 up_read(&nilfs->ns_segctor_sem);
262 if (ret < 0)
263 return ret;
264
265 if (copy_to_user(argp, &argv, sizeof(argv)))
266 ret = -EFAULT;
267 return ret;
268}
269
270static ssize_t
271nilfs_ioctl_do_get_bdescs(struct the_nilfs *nilfs, __u64 *posp, int flags,
272 void *buf, size_t size, size_t nmembs)
273{
274 struct inode *dat = nilfs_dat_inode(nilfs);
275 struct nilfs_bmap *bmap = NILFS_I(dat)->i_bmap;
276 struct nilfs_bdesc *bdescs = buf;
277 int ret, i;
278
279 for (i = 0; i < nmembs; i++) {
280 ret = nilfs_bmap_lookup_at_level(bmap,
281 bdescs[i].bd_offset,
282 bdescs[i].bd_level + 1,
283 &bdescs[i].bd_blocknr);
284 if (ret < 0) {
285 if (ret != -ENOENT)
286 return ret;
287 bdescs[i].bd_blocknr = 0;
288 }
289 }
290 return nmembs;
291}
292
293static int nilfs_ioctl_get_bdescs(struct inode *inode, struct file *filp,
294 unsigned int cmd, void __user *argp)
295{
296 struct the_nilfs *nilfs = NILFS_SB(inode->i_sb)->s_nilfs;
297 struct nilfs_argv argv;
298 int ret;
299
300 if (copy_from_user(&argv, argp, sizeof(argv)))
301 return -EFAULT;
302
303 down_read(&nilfs->ns_segctor_sem);
304 ret = nilfs_ioctl_wrap_copy(nilfs, &argv, _IOC_DIR(cmd),
305 nilfs_ioctl_do_get_bdescs);
306 up_read(&nilfs->ns_segctor_sem);
307 if (ret < 0)
308 return ret;
309
310 if (copy_to_user(argp, &argv, sizeof(argv)))
311 ret = -EFAULT;
312 return ret;
313}
314
315static int nilfs_ioctl_move_inode_block(struct inode *inode,
316 struct nilfs_vdesc *vdesc,
317 struct list_head *buffers)
318{
319 struct buffer_head *bh;
320 int ret;
321
322 if (vdesc->vd_flags == 0)
323 ret = nilfs_gccache_submit_read_data(
324 inode, vdesc->vd_offset, vdesc->vd_blocknr,
325 vdesc->vd_vblocknr, &bh);
326 else
327 ret = nilfs_gccache_submit_read_node(
328 inode, vdesc->vd_blocknr, vdesc->vd_vblocknr, &bh);
329
330 if (unlikely(ret < 0)) {
331 if (ret == -ENOENT)
332 printk(KERN_CRIT
333 "%s: invalid virtual block address (%s): "
334 "ino=%llu, cno=%llu, offset=%llu, "
335 "blocknr=%llu, vblocknr=%llu\n",
336 __func__, vdesc->vd_flags ? "node" : "data",
337 (unsigned long long)vdesc->vd_ino,
338 (unsigned long long)vdesc->vd_cno,
339 (unsigned long long)vdesc->vd_offset,
340 (unsigned long long)vdesc->vd_blocknr,
341 (unsigned long long)vdesc->vd_vblocknr);
342 return ret;
343 }
344 bh->b_private = vdesc;
345 list_add_tail(&bh->b_assoc_buffers, buffers);
346 return 0;
347}
348
349static ssize_t
350nilfs_ioctl_do_move_blocks(struct the_nilfs *nilfs, __u64 *posp, int flags,
351 void *buf, size_t size, size_t nmembs)
352{
353 struct inode *inode;
354 struct nilfs_vdesc *vdesc;
355 struct buffer_head *bh, *n;
356 LIST_HEAD(buffers);
357 ino_t ino;
358 __u64 cno;
359 int i, ret;
360
361 for (i = 0, vdesc = buf; i < nmembs; ) {
362 ino = vdesc->vd_ino;
363 cno = vdesc->vd_cno;
364 inode = nilfs_gc_iget(nilfs, ino, cno);
365 if (unlikely(inode == NULL)) {
366 ret = -ENOMEM;
367 goto failed;
368 }
369 do {
370 ret = nilfs_ioctl_move_inode_block(inode, vdesc,
371 &buffers);
372 if (unlikely(ret < 0))
373 goto failed;
374 vdesc++;
375 } while (++i < nmembs &&
376 vdesc->vd_ino == ino && vdesc->vd_cno == cno);
377 }
378
379 list_for_each_entry_safe(bh, n, &buffers, b_assoc_buffers) {
380 ret = nilfs_gccache_wait_and_mark_dirty(bh);
381 if (unlikely(ret < 0)) {
382 if (ret == -EEXIST) {
383 vdesc = bh->b_private;
384 printk(KERN_CRIT
385 "%s: conflicting %s buffer: "
386 "ino=%llu, cno=%llu, offset=%llu, "
387 "blocknr=%llu, vblocknr=%llu\n",
388 __func__,
389 vdesc->vd_flags ? "node" : "data",
390 (unsigned long long)vdesc->vd_ino,
391 (unsigned long long)vdesc->vd_cno,
392 (unsigned long long)vdesc->vd_offset,
393 (unsigned long long)vdesc->vd_blocknr,
394 (unsigned long long)vdesc->vd_vblocknr);
395 }
396 goto failed;
397 }
398 list_del_init(&bh->b_assoc_buffers);
399 bh->b_private = NULL;
400 brelse(bh);
401 }
402 return nmembs;
403
404 failed:
405 list_for_each_entry_safe(bh, n, &buffers, b_assoc_buffers) {
406 list_del_init(&bh->b_assoc_buffers);
407 bh->b_private = NULL;
408 brelse(bh);
409 }
410 return ret;
411}
412
413static inline int nilfs_ioctl_move_blocks(struct the_nilfs *nilfs,
414 struct nilfs_argv *argv,
415 int dir)
416{
417 return nilfs_ioctl_wrap_copy(nilfs, argv, dir,
418 nilfs_ioctl_do_move_blocks);
419}
420
421static ssize_t
422nilfs_ioctl_do_delete_checkpoints(struct the_nilfs *nilfs, __u64 *posp,
423 int flags, void *buf, size_t size,
424 size_t nmembs)
425{
426 struct inode *cpfile = nilfs->ns_cpfile;
427 struct nilfs_period *periods = buf;
428 int ret, i;
429
430 for (i = 0; i < nmembs; i++) {
431 ret = nilfs_cpfile_delete_checkpoints(
432 cpfile, periods[i].p_start, periods[i].p_end);
433 if (ret < 0)
434 return ret;
435 }
436 return nmembs;
437}
438
439static inline int nilfs_ioctl_delete_checkpoints(struct the_nilfs *nilfs,
440 struct nilfs_argv *argv,
441 int dir)
442{
443 return nilfs_ioctl_wrap_copy(nilfs, argv, dir,
444 nilfs_ioctl_do_delete_checkpoints);
445}
446
447static ssize_t
448nilfs_ioctl_do_free_vblocknrs(struct the_nilfs *nilfs, __u64 *posp, int flags,
449 void *buf, size_t size, size_t nmembs)
450{
451 int ret = nilfs_dat_freev(nilfs_dat_inode(nilfs), buf, nmembs);
452
453 return (ret < 0) ? ret : nmembs;
454}
455
456static inline int nilfs_ioctl_free_vblocknrs(struct the_nilfs *nilfs,
457 struct nilfs_argv *argv,
458 int dir)
459{
460 return nilfs_ioctl_wrap_copy(nilfs, argv, dir,
461 nilfs_ioctl_do_free_vblocknrs);
462}
463
464static ssize_t
465nilfs_ioctl_do_mark_blocks_dirty(struct the_nilfs *nilfs, __u64 *posp,
466 int flags, void *buf, size_t size,
467 size_t nmembs)
468{
469 struct inode *dat = nilfs_dat_inode(nilfs);
470 struct nilfs_bmap *bmap = NILFS_I(dat)->i_bmap;
471 struct nilfs_bdesc *bdescs = buf;
472 int ret, i;
473
474 for (i = 0; i < nmembs; i++) {
475 /* XXX: use macro or inline func to check liveness */
476 ret = nilfs_bmap_lookup_at_level(bmap,
477 bdescs[i].bd_offset,
478 bdescs[i].bd_level + 1,
479 &bdescs[i].bd_blocknr);
480 if (ret < 0) {
481 if (ret != -ENOENT)
482 return ret;
483 bdescs[i].bd_blocknr = 0;
484 }
485 if (bdescs[i].bd_blocknr != bdescs[i].bd_oblocknr)
486 /* skip dead block */
487 continue;
488 if (bdescs[i].bd_level == 0) {
489 ret = nilfs_mdt_mark_block_dirty(dat,
490 bdescs[i].bd_offset);
491 if (ret < 0) {
492 WARN_ON(ret == -ENOENT);
493 return ret;
494 }
495 } else {
496 ret = nilfs_bmap_mark(bmap, bdescs[i].bd_offset,
497 bdescs[i].bd_level);
498 if (ret < 0) {
499 WARN_ON(ret == -ENOENT);
500 return ret;
501 }
502 }
503 }
504 return nmembs;
505}
506
507static inline int nilfs_ioctl_mark_blocks_dirty(struct the_nilfs *nilfs,
508 struct nilfs_argv *argv,
509 int dir)
510{
511 return nilfs_ioctl_wrap_copy(nilfs, argv, dir,
512 nilfs_ioctl_do_mark_blocks_dirty);
513}
514
515static ssize_t
516nilfs_ioctl_do_free_segments(struct the_nilfs *nilfs, __u64 *posp, int flags,
517 void *buf, size_t size, size_t nmembs)
518{
519 struct nilfs_sb_info *sbi = nilfs_get_writer(nilfs);
520 int ret;
521
522 if (unlikely(!sbi))
523 return -EROFS;
524 ret = nilfs_segctor_add_segments_to_be_freed(
525 NILFS_SC(sbi), buf, nmembs);
526 nilfs_put_writer(nilfs);
527
528 return (ret < 0) ? ret : nmembs;
529}
530
531static inline int nilfs_ioctl_free_segments(struct the_nilfs *nilfs,
532 struct nilfs_argv *argv,
533 int dir)
534{
535 return nilfs_ioctl_wrap_copy(nilfs, argv, dir,
536 nilfs_ioctl_do_free_segments);
537}
538
539int nilfs_ioctl_prepare_clean_segments(struct the_nilfs *nilfs,
540 void __user *argp)
541{
542 struct nilfs_argv argv[5];
543 const char *msg;
544 int dir, ret;
545
546 if (copy_from_user(argv, argp, sizeof(argv)))
547 return -EFAULT;
548
549 dir = _IOC_WRITE;
550 ret = nilfs_ioctl_move_blocks(nilfs, &argv[0], dir);
551 if (ret < 0) {
552 msg = "cannot read source blocks";
553 goto failed;
554 }
555 ret = nilfs_ioctl_delete_checkpoints(nilfs, &argv[1], dir);
556 if (ret < 0) {
557 /*
558 * can safely abort because checkpoints can be removed
559 * independently.
560 */
561 msg = "cannot delete checkpoints";
562 goto failed;
563 }
564 ret = nilfs_ioctl_free_vblocknrs(nilfs, &argv[2], dir);
565 if (ret < 0) {
566 /*
567 * can safely abort because DAT file is updated atomically
568 * using a copy-on-write technique.
569 */
570 msg = "cannot delete virtual blocks from DAT file";
571 goto failed;
572 }
573 ret = nilfs_ioctl_mark_blocks_dirty(nilfs, &argv[3], dir);
574 if (ret < 0) {
575 /*
576 * can safely abort because the operation is nondestructive.
577 */
578 msg = "cannot mark copying blocks dirty";
579 goto failed;
580 }
581 ret = nilfs_ioctl_free_segments(nilfs, &argv[4], dir);
582 if (ret < 0) {
583 /*
584 * can safely abort because this operation is atomic.
585 */
586 msg = "cannot set segments to be freed";
587 goto failed;
588 }
589 return 0;
590
591 failed:
592 nilfs_remove_all_gcinode(nilfs);
593 printk(KERN_ERR "NILFS: GC failed during preparation: %s: err=%d\n",
594 msg, ret);
595 return ret;
596}
597
598static int nilfs_ioctl_clean_segments(struct inode *inode, struct file *filp,
599 unsigned int cmd, void __user *argp)
600{
601 if (!capable(CAP_SYS_ADMIN))
602 return -EPERM;
603 return nilfs_clean_segments(inode->i_sb, argp);
604}
605
606static int nilfs_ioctl_sync(struct inode *inode, struct file *filp,
607 unsigned int cmd, void __user *argp)
608{
609 __u64 cno;
610 int ret;
611
612 ret = nilfs_construct_segment(inode->i_sb);
613 if (ret < 0)
614 return ret;
615
616 if (argp != NULL) {
617 cno = NILFS_SB(inode->i_sb)->s_nilfs->ns_cno - 1;
618 if (copy_to_user(argp, &cno, sizeof(cno)))
619 return -EFAULT;
620 }
621 return 0;
622}
623
624long nilfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
625{
626 struct inode *inode = filp->f_dentry->d_inode;
627 void __user *argp = (void * __user *)arg;
628
629 switch (cmd) {
630 case NILFS_IOCTL_CHANGE_CPMODE:
631 return nilfs_ioctl_change_cpmode(inode, filp, cmd, argp);
632 case NILFS_IOCTL_DELETE_CHECKPOINT:
633 return nilfs_ioctl_delete_checkpoint(inode, filp, cmd, argp);
634 case NILFS_IOCTL_GET_CPINFO:
635 return nilfs_ioctl_get_cpinfo(inode, filp, cmd, argp);
636 case NILFS_IOCTL_GET_CPSTAT:
637 return nilfs_ioctl_get_cpstat(inode, filp, cmd, argp);
638 case NILFS_IOCTL_GET_SUINFO:
639 return nilfs_ioctl_get_suinfo(inode, filp, cmd, argp);
640 case NILFS_IOCTL_GET_SUSTAT:
641 return nilfs_ioctl_get_sustat(inode, filp, cmd, argp);
642 case NILFS_IOCTL_GET_VINFO:
643 /* XXX: rename to ??? */
644 return nilfs_ioctl_get_vinfo(inode, filp, cmd, argp);
645 case NILFS_IOCTL_GET_BDESCS:
646 return nilfs_ioctl_get_bdescs(inode, filp, cmd, argp);
647 case NILFS_IOCTL_CLEAN_SEGMENTS:
648 return nilfs_ioctl_clean_segments(inode, filp, cmd, argp);
649 case NILFS_IOCTL_SYNC:
650 return nilfs_ioctl_sync(inode, filp, cmd, argp);
651 default:
652 return -ENOTTY;
653 }
654}
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c
new file mode 100644
index 000000000000..47dd815433fd
--- /dev/null
+++ b/fs/nilfs2/mdt.c
@@ -0,0 +1,563 @@
1/*
2 * mdt.c - meta data file for NILFS
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 */
22
23#include <linux/buffer_head.h>
24#include <linux/mpage.h>
25#include <linux/mm.h>
26#include <linux/writeback.h>
27#include <linux/backing-dev.h>
28#include <linux/swap.h>
29#include "nilfs.h"
30#include "segment.h"
31#include "page.h"
32#include "mdt.h"
33
34
35#define NILFS_MDT_MAX_RA_BLOCKS (16 - 1)
36
37#define INIT_UNUSED_INODE_FIELDS
38
39static int
40nilfs_mdt_insert_new_block(struct inode *inode, unsigned long block,
41 struct buffer_head *bh,
42 void (*init_block)(struct inode *,
43 struct buffer_head *, void *))
44{
45 struct nilfs_inode_info *ii = NILFS_I(inode);
46 void *kaddr;
47 int ret;
48
49 /* Caller exclude read accesses using page lock */
50
51 /* set_buffer_new(bh); */
52 bh->b_blocknr = 0;
53
54 ret = nilfs_bmap_insert(ii->i_bmap, block, (unsigned long)bh);
55 if (unlikely(ret))
56 return ret;
57
58 set_buffer_mapped(bh);
59
60 kaddr = kmap_atomic(bh->b_page, KM_USER0);
61 memset(kaddr + bh_offset(bh), 0, 1 << inode->i_blkbits);
62 if (init_block)
63 init_block(inode, bh, kaddr);
64 flush_dcache_page(bh->b_page);
65 kunmap_atomic(kaddr, KM_USER0);
66
67 set_buffer_uptodate(bh);
68 nilfs_mark_buffer_dirty(bh);
69 nilfs_mdt_mark_dirty(inode);
70 return 0;
71}
72
73static int nilfs_mdt_create_block(struct inode *inode, unsigned long block,
74 struct buffer_head **out_bh,
75 void (*init_block)(struct inode *,
76 struct buffer_head *,
77 void *))
78{
79 struct the_nilfs *nilfs = NILFS_MDT(inode)->mi_nilfs;
80 struct nilfs_sb_info *writer = NULL;
81 struct super_block *sb = inode->i_sb;
82 struct nilfs_transaction_info ti;
83 struct buffer_head *bh;
84 int err;
85
86 if (!sb) {
87 writer = nilfs_get_writer(nilfs);
88 if (!writer) {
89 err = -EROFS;
90 goto out;
91 }
92 sb = writer->s_super;
93 }
94
95 nilfs_transaction_begin(sb, &ti, 0);
96
97 err = -ENOMEM;
98 bh = nilfs_grab_buffer(inode, inode->i_mapping, block, 0);
99 if (unlikely(!bh))
100 goto failed_unlock;
101
102 err = -EEXIST;
103 if (buffer_uptodate(bh) || buffer_mapped(bh))
104 goto failed_bh;
105#if 0
106 /* The uptodate flag is not protected by the page lock, but
107 the mapped flag is. Thus, we don't have to wait the buffer. */
108 wait_on_buffer(bh);
109 if (buffer_uptodate(bh))
110 goto failed_bh;
111#endif
112
113 bh->b_bdev = nilfs->ns_bdev;
114 err = nilfs_mdt_insert_new_block(inode, block, bh, init_block);
115 if (likely(!err)) {
116 get_bh(bh);
117 *out_bh = bh;
118 }
119
120 failed_bh:
121 unlock_page(bh->b_page);
122 page_cache_release(bh->b_page);
123 brelse(bh);
124
125 failed_unlock:
126 if (likely(!err))
127 err = nilfs_transaction_commit(sb);
128 else
129 nilfs_transaction_abort(sb);
130 if (writer)
131 nilfs_put_writer(nilfs);
132 out:
133 return err;
134}
135
136static int
137nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff,
138 int mode, struct buffer_head **out_bh)
139{
140 struct buffer_head *bh;
141 unsigned long blknum = 0;
142 int ret = -ENOMEM;
143
144 bh = nilfs_grab_buffer(inode, inode->i_mapping, blkoff, 0);
145 if (unlikely(!bh))
146 goto failed;
147
148 ret = -EEXIST; /* internal code */
149 if (buffer_uptodate(bh))
150 goto out;
151
152 if (mode == READA) {
153 if (!trylock_buffer(bh)) {
154 ret = -EBUSY;
155 goto failed_bh;
156 }
157 } else /* mode == READ */
158 lock_buffer(bh);
159
160 if (buffer_uptodate(bh)) {
161 unlock_buffer(bh);
162 goto out;
163 }
164 if (!buffer_mapped(bh)) { /* unused buffer */
165 ret = nilfs_bmap_lookup(NILFS_I(inode)->i_bmap, blkoff,
166 &blknum);
167 if (unlikely(ret)) {
168 unlock_buffer(bh);
169 goto failed_bh;
170 }
171 bh->b_bdev = NILFS_MDT(inode)->mi_nilfs->ns_bdev;
172 bh->b_blocknr = blknum;
173 set_buffer_mapped(bh);
174 }
175
176 bh->b_end_io = end_buffer_read_sync;
177 get_bh(bh);
178 submit_bh(mode, bh);
179 ret = 0;
180 out:
181 get_bh(bh);
182 *out_bh = bh;
183
184 failed_bh:
185 unlock_page(bh->b_page);
186 page_cache_release(bh->b_page);
187 brelse(bh);
188 failed:
189 return ret;
190}
191
192static int nilfs_mdt_read_block(struct inode *inode, unsigned long block,
193 struct buffer_head **out_bh)
194{
195 struct buffer_head *first_bh, *bh;
196 unsigned long blkoff;
197 int i, nr_ra_blocks = NILFS_MDT_MAX_RA_BLOCKS;
198 int err;
199
200 err = nilfs_mdt_submit_block(inode, block, READ, &first_bh);
201 if (err == -EEXIST) /* internal code */
202 goto out;
203
204 if (unlikely(err))
205 goto failed;
206
207 blkoff = block + 1;
208 for (i = 0; i < nr_ra_blocks; i++, blkoff++) {
209 err = nilfs_mdt_submit_block(inode, blkoff, READA, &bh);
210 if (likely(!err || err == -EEXIST))
211 brelse(bh);
212 else if (err != -EBUSY)
213 break; /* abort readahead if bmap lookup failed */
214
215 if (!buffer_locked(first_bh))
216 goto out_no_wait;
217 }
218
219 wait_on_buffer(first_bh);
220
221 out_no_wait:
222 err = -EIO;
223 if (!buffer_uptodate(first_bh))
224 goto failed_bh;
225 out:
226 *out_bh = first_bh;
227 return 0;
228
229 failed_bh:
230 brelse(first_bh);
231 failed:
232 return err;
233}
234
235/**
236 * nilfs_mdt_get_block - read or create a buffer on meta data file.
237 * @inode: inode of the meta data file
238 * @blkoff: block offset
239 * @create: create flag
240 * @init_block: initializer used for newly allocated block
241 * @out_bh: output of a pointer to the buffer_head
242 *
243 * nilfs_mdt_get_block() looks up the specified buffer and tries to create
244 * a new buffer if @create is not zero. On success, the returned buffer is
245 * assured to be either existing or formatted using a buffer lock on success.
246 * @out_bh is substituted only when zero is returned.
247 *
248 * Return Value: On success, it returns 0. On error, the following negative
249 * error code is returned.
250 *
251 * %-ENOMEM - Insufficient memory available.
252 *
253 * %-EIO - I/O error
254 *
255 * %-ENOENT - the specified block does not exist (hole block)
256 *
257 * %-EINVAL - bmap is broken. (the caller should call nilfs_error())
258 *
259 * %-EROFS - Read only filesystem (for create mode)
260 */
261int nilfs_mdt_get_block(struct inode *inode, unsigned long blkoff, int create,
262 void (*init_block)(struct inode *,
263 struct buffer_head *, void *),
264 struct buffer_head **out_bh)
265{
266 int ret;
267
268 /* Should be rewritten with merging nilfs_mdt_read_block() */
269 retry:
270 ret = nilfs_mdt_read_block(inode, blkoff, out_bh);
271 if (!create || ret != -ENOENT)
272 return ret;
273
274 ret = nilfs_mdt_create_block(inode, blkoff, out_bh, init_block);
275 if (unlikely(ret == -EEXIST)) {
276 /* create = 0; */ /* limit read-create loop retries */
277 goto retry;
278 }
279 return ret;
280}
281
282/**
283 * nilfs_mdt_delete_block - make a hole on the meta data file.
284 * @inode: inode of the meta data file
285 * @block: block offset
286 *
287 * Return Value: On success, zero is returned.
288 * On error, one of the following negative error code is returned.
289 *
290 * %-ENOMEM - Insufficient memory available.
291 *
292 * %-EIO - I/O error
293 *
294 * %-EINVAL - bmap is broken. (the caller should call nilfs_error())
295 */
296int nilfs_mdt_delete_block(struct inode *inode, unsigned long block)
297{
298 struct nilfs_inode_info *ii = NILFS_I(inode);
299 int err;
300
301 err = nilfs_bmap_delete(ii->i_bmap, block);
302 if (likely(!err)) {
303 nilfs_mdt_mark_dirty(inode);
304 nilfs_mdt_forget_block(inode, block);
305 }
306 return err;
307}
308
309/**
310 * nilfs_mdt_forget_block - discard dirty state and try to remove the page
311 * @inode: inode of the meta data file
312 * @block: block offset
313 *
314 * nilfs_mdt_forget_block() clears a dirty flag of the specified buffer, and
315 * tries to release the page including the buffer from a page cache.
316 *
317 * Return Value: On success, 0 is returned. On error, one of the following
318 * negative error code is returned.
319 *
320 * %-EBUSY - page has an active buffer.
321 *
322 * %-ENOENT - page cache has no page addressed by the offset.
323 */
324int nilfs_mdt_forget_block(struct inode *inode, unsigned long block)
325{
326 pgoff_t index = (pgoff_t)block >>
327 (PAGE_CACHE_SHIFT - inode->i_blkbits);
328 struct page *page;
329 unsigned long first_block;
330 int ret = 0;
331 int still_dirty;
332
333 page = find_lock_page(inode->i_mapping, index);
334 if (!page)
335 return -ENOENT;
336
337 wait_on_page_writeback(page);
338
339 first_block = (unsigned long)index <<
340 (PAGE_CACHE_SHIFT - inode->i_blkbits);
341 if (page_has_buffers(page)) {
342 struct buffer_head *bh;
343
344 bh = nilfs_page_get_nth_block(page, block - first_block);
345 nilfs_forget_buffer(bh);
346 }
347 still_dirty = PageDirty(page);
348 unlock_page(page);
349 page_cache_release(page);
350
351 if (still_dirty ||
352 invalidate_inode_pages2_range(inode->i_mapping, index, index) != 0)
353 ret = -EBUSY;
354 return ret;
355}
356
357/**
358 * nilfs_mdt_mark_block_dirty - mark a block on the meta data file dirty.
359 * @inode: inode of the meta data file
360 * @block: block offset
361 *
362 * Return Value: On success, it returns 0. On error, the following negative
363 * error code is returned.
364 *
365 * %-ENOMEM - Insufficient memory available.
366 *
367 * %-EIO - I/O error
368 *
369 * %-ENOENT - the specified block does not exist (hole block)
370 *
371 * %-EINVAL - bmap is broken. (the caller should call nilfs_error())
372 */
373int nilfs_mdt_mark_block_dirty(struct inode *inode, unsigned long block)
374{
375 struct buffer_head *bh;
376 int err;
377
378 err = nilfs_mdt_read_block(inode, block, &bh);
379 if (unlikely(err))
380 return err;
381 nilfs_mark_buffer_dirty(bh);
382 nilfs_mdt_mark_dirty(inode);
383 brelse(bh);
384 return 0;
385}
386
387int nilfs_mdt_fetch_dirty(struct inode *inode)
388{
389 struct nilfs_inode_info *ii = NILFS_I(inode);
390
391 if (nilfs_bmap_test_and_clear_dirty(ii->i_bmap)) {
392 set_bit(NILFS_I_DIRTY, &ii->i_state);
393 return 1;
394 }
395 return test_bit(NILFS_I_DIRTY, &ii->i_state);
396}
397
398static int
399nilfs_mdt_write_page(struct page *page, struct writeback_control *wbc)
400{
401 struct inode *inode = container_of(page->mapping,
402 struct inode, i_data);
403 struct super_block *sb = inode->i_sb;
404 struct nilfs_sb_info *writer = NULL;
405 int err = 0;
406
407 redirty_page_for_writepage(wbc, page);
408 unlock_page(page);
409
410 if (page->mapping->assoc_mapping)
411 return 0; /* Do not request flush for shadow page cache */
412 if (!sb) {
413 writer = nilfs_get_writer(NILFS_MDT(inode)->mi_nilfs);
414 if (!writer)
415 return -EROFS;
416 sb = writer->s_super;
417 }
418
419 if (wbc->sync_mode == WB_SYNC_ALL)
420 err = nilfs_construct_segment(sb);
421 else if (wbc->for_reclaim)
422 nilfs_flush_segment(sb, inode->i_ino);
423
424 if (writer)
425 nilfs_put_writer(NILFS_MDT(inode)->mi_nilfs);
426 return err;
427}
428
429
430static struct address_space_operations def_mdt_aops = {
431 .writepage = nilfs_mdt_write_page,
432};
433
434static struct inode_operations def_mdt_iops;
435static struct file_operations def_mdt_fops;
436
437/*
438 * NILFS2 uses pseudo inodes for meta data files such as DAT, cpfile, sufile,
439 * ifile, or gcinodes. This allows the B-tree code and segment constructor
440 * to treat them like regular files, and this helps to simplify the
441 * implementation.
442 * On the other hand, some of the pseudo inodes have an irregular point:
443 * They don't have valid inode->i_sb pointer because their lifetimes are
444 * longer than those of the super block structs; they may continue for
445 * several consecutive mounts/umounts. This would need discussions.
446 */
447struct inode *
448nilfs_mdt_new_common(struct the_nilfs *nilfs, struct super_block *sb,
449 ino_t ino, gfp_t gfp_mask)
450{
451 struct inode *inode = nilfs_alloc_inode(sb);
452
453 if (!inode)
454 return NULL;
455 else {
456 struct address_space * const mapping = &inode->i_data;
457 struct nilfs_mdt_info *mi = kzalloc(sizeof(*mi), GFP_NOFS);
458
459 if (!mi) {
460 nilfs_destroy_inode(inode);
461 return NULL;
462 }
463 mi->mi_nilfs = nilfs;
464 init_rwsem(&mi->mi_sem);
465
466 inode->i_sb = sb; /* sb may be NULL for some meta data files */
467 inode->i_blkbits = nilfs->ns_blocksize_bits;
468 inode->i_flags = 0;
469 atomic_set(&inode->i_count, 1);
470 inode->i_nlink = 1;
471 inode->i_ino = ino;
472 inode->i_mode = S_IFREG;
473 inode->i_private = mi;
474
475#ifdef INIT_UNUSED_INODE_FIELDS
476 atomic_set(&inode->i_writecount, 0);
477 inode->i_size = 0;
478 inode->i_blocks = 0;
479 inode->i_bytes = 0;
480 inode->i_generation = 0;
481#ifdef CONFIG_QUOTA
482 memset(&inode->i_dquot, 0, sizeof(inode->i_dquot));
483#endif
484 inode->i_pipe = NULL;
485 inode->i_bdev = NULL;
486 inode->i_cdev = NULL;
487 inode->i_rdev = 0;
488#ifdef CONFIG_SECURITY
489 inode->i_security = NULL;
490#endif
491 inode->dirtied_when = 0;
492
493 INIT_LIST_HEAD(&inode->i_list);
494 INIT_LIST_HEAD(&inode->i_sb_list);
495 inode->i_state = 0;
496#endif
497
498 spin_lock_init(&inode->i_lock);
499 mutex_init(&inode->i_mutex);
500 init_rwsem(&inode->i_alloc_sem);
501
502 mapping->host = NULL; /* instead of inode */
503 mapping->flags = 0;
504 mapping_set_gfp_mask(mapping, gfp_mask);
505 mapping->assoc_mapping = NULL;
506 mapping->backing_dev_info = nilfs->ns_bdi;
507
508 inode->i_mapping = mapping;
509 }
510
511 return inode;
512}
513
514struct inode *nilfs_mdt_new(struct the_nilfs *nilfs, struct super_block *sb,
515 ino_t ino, gfp_t gfp_mask)
516{
517 struct inode *inode = nilfs_mdt_new_common(nilfs, sb, ino, gfp_mask);
518
519 if (!inode)
520 return NULL;
521
522 inode->i_op = &def_mdt_iops;
523 inode->i_fop = &def_mdt_fops;
524 inode->i_mapping->a_ops = &def_mdt_aops;
525 return inode;
526}
527
528void nilfs_mdt_set_entry_size(struct inode *inode, unsigned entry_size,
529 unsigned header_size)
530{
531 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
532
533 mi->mi_entry_size = entry_size;
534 mi->mi_entries_per_block = (1 << inode->i_blkbits) / entry_size;
535 mi->mi_first_entry_offset = DIV_ROUND_UP(header_size, entry_size);
536}
537
538void nilfs_mdt_set_shadow(struct inode *orig, struct inode *shadow)
539{
540 shadow->i_mapping->assoc_mapping = orig->i_mapping;
541 NILFS_I(shadow)->i_btnode_cache.assoc_mapping =
542 &NILFS_I(orig)->i_btnode_cache;
543}
544
545void nilfs_mdt_clear(struct inode *inode)
546{
547 struct nilfs_inode_info *ii = NILFS_I(inode);
548
549 invalidate_mapping_pages(inode->i_mapping, 0, -1);
550 truncate_inode_pages(inode->i_mapping, 0);
551
552 nilfs_bmap_clear(ii->i_bmap);
553 nilfs_btnode_cache_clear(&ii->i_btnode_cache);
554}
555
556void nilfs_mdt_destroy(struct inode *inode)
557{
558 struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
559
560 kfree(mdi->mi_bgl); /* kfree(NULL) is safe */
561 kfree(mdi);
562 nilfs_destroy_inode(inode);
563}
diff --git a/fs/nilfs2/mdt.h b/fs/nilfs2/mdt.h
new file mode 100644
index 000000000000..df683e0bca6a
--- /dev/null
+++ b/fs/nilfs2/mdt.h
@@ -0,0 +1,125 @@
1/*
2 * mdt.h - NILFS meta data file prototype and definitions
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 */
22
23#ifndef _NILFS_MDT_H
24#define _NILFS_MDT_H
25
26#include <linux/buffer_head.h>
27#include <linux/blockgroup_lock.h>
28#include "nilfs.h"
29#include "page.h"
30
31/**
32 * struct nilfs_mdt_info - on-memory private data of meta data files
33 * @mi_nilfs: back pointer to the_nilfs struct
34 * @mi_sem: reader/writer semaphore for meta data operations
35 * @mi_bgl: per-blockgroup locking
36 * @mi_entry_size: size of an entry
37 * @mi_first_entry_offset: offset to the first entry
38 * @mi_entries_per_block: number of entries in a block
39 * @mi_blocks_per_group: number of blocks in a group
40 * @mi_blocks_per_desc_block: number of blocks per descriptor block
41 */
42struct nilfs_mdt_info {
43 struct the_nilfs *mi_nilfs;
44 struct rw_semaphore mi_sem;
45 struct blockgroup_lock *mi_bgl;
46 unsigned mi_entry_size;
47 unsigned mi_first_entry_offset;
48 unsigned long mi_entries_per_block;
49 unsigned long mi_blocks_per_group;
50 unsigned long mi_blocks_per_desc_block;
51};
52
53static inline struct nilfs_mdt_info *NILFS_MDT(const struct inode *inode)
54{
55 return inode->i_private;
56}
57
58static inline struct the_nilfs *NILFS_I_NILFS(struct inode *inode)
59{
60 struct super_block *sb = inode->i_sb;
61
62 return sb ? NILFS_SB(sb)->s_nilfs : NILFS_MDT(inode)->mi_nilfs;
63}
64
65/* Default GFP flags using highmem */
66#define NILFS_MDT_GFP (__GFP_WAIT | __GFP_IO | __GFP_HIGHMEM)
67
68int nilfs_mdt_get_block(struct inode *, unsigned long, int,
69 void (*init_block)(struct inode *,
70 struct buffer_head *, void *),
71 struct buffer_head **);
72int nilfs_mdt_delete_block(struct inode *, unsigned long);
73int nilfs_mdt_forget_block(struct inode *, unsigned long);
74int nilfs_mdt_mark_block_dirty(struct inode *, unsigned long);
75int nilfs_mdt_fetch_dirty(struct inode *);
76
77struct inode *nilfs_mdt_new(struct the_nilfs *, struct super_block *, ino_t,
78 gfp_t);
79struct inode *nilfs_mdt_new_common(struct the_nilfs *, struct super_block *,
80 ino_t, gfp_t);
81void nilfs_mdt_destroy(struct inode *);
82void nilfs_mdt_clear(struct inode *);
83void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned);
84void nilfs_mdt_set_shadow(struct inode *, struct inode *);
85
86
87#define nilfs_mdt_mark_buffer_dirty(bh) nilfs_mark_buffer_dirty(bh)
88
89static inline void nilfs_mdt_mark_dirty(struct inode *inode)
90{
91 if (!test_bit(NILFS_I_DIRTY, &NILFS_I(inode)->i_state))
92 set_bit(NILFS_I_DIRTY, &NILFS_I(inode)->i_state);
93}
94
95static inline void nilfs_mdt_clear_dirty(struct inode *inode)
96{
97 clear_bit(NILFS_I_DIRTY, &NILFS_I(inode)->i_state);
98}
99
100static inline __u64 nilfs_mdt_cno(struct inode *inode)
101{
102 return NILFS_MDT(inode)->mi_nilfs->ns_cno;
103}
104
105#define nilfs_mdt_bgl_lock(inode, bg) \
106 (&NILFS_MDT(inode)->mi_bgl->locks[(bg) & (NR_BG_LOCKS-1)].lock)
107
108
109static inline int
110nilfs_mdt_read_inode_direct(struct inode *inode, struct buffer_head *bh,
111 unsigned n)
112{
113 return nilfs_read_inode_common(
114 inode, (struct nilfs_inode *)(bh->b_data + n));
115}
116
117static inline void
118nilfs_mdt_write_inode_direct(struct inode *inode, struct buffer_head *bh,
119 unsigned n)
120{
121 nilfs_write_inode_common(
122 inode, (struct nilfs_inode *)(bh->b_data + n), 1);
123}
124
125#endif /* _NILFS_MDT_H */
diff --git a/fs/nilfs2/namei.c b/fs/nilfs2/namei.c
new file mode 100644
index 000000000000..df70dadb336f
--- /dev/null
+++ b/fs/nilfs2/namei.c
@@ -0,0 +1,474 @@
1/*
2 * namei.c - NILFS pathname lookup operations.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Modified for NILFS by Amagai Yoshiji <amagai@osrg.net>,
21 * Ryusuke Konishi <ryusuke@osrg.net>
22 */
23/*
24 * linux/fs/ext2/namei.c
25 *
26 * Copyright (C) 1992, 1993, 1994, 1995
27 * Remy Card (card@masi.ibp.fr)
28 * Laboratoire MASI - Institut Blaise Pascal
29 * Universite Pierre et Marie Curie (Paris VI)
30 *
31 * from
32 *
33 * linux/fs/minix/namei.c
34 *
35 * Copyright (C) 1991, 1992 Linus Torvalds
36 *
37 * Big-endian to little-endian byte-swapping/bitmaps by
38 * David S. Miller (davem@caip.rutgers.edu), 1995
39 */
40
41#include <linux/pagemap.h>
42#include "nilfs.h"
43
44
45static inline int nilfs_add_nondir(struct dentry *dentry, struct inode *inode)
46{
47 int err = nilfs_add_link(dentry, inode);
48 if (!err) {
49 d_instantiate(dentry, inode);
50 return 0;
51 }
52 inode_dec_link_count(inode);
53 iput(inode);
54 return err;
55}
56
57/*
58 * Methods themselves.
59 */
60
61static struct dentry *
62nilfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
63{
64 struct inode *inode;
65 ino_t ino;
66
67 if (dentry->d_name.len > NILFS_NAME_LEN)
68 return ERR_PTR(-ENAMETOOLONG);
69
70 ino = nilfs_inode_by_name(dir, dentry);
71 inode = NULL;
72 if (ino) {
73 inode = nilfs_iget(dir->i_sb, ino);
74 if (IS_ERR(inode))
75 return ERR_CAST(inode);
76 }
77 return d_splice_alias(inode, dentry);
78}
79
80struct dentry *nilfs_get_parent(struct dentry *child)
81{
82 unsigned long ino;
83 struct inode *inode;
84 struct dentry dotdot;
85
86 dotdot.d_name.name = "..";
87 dotdot.d_name.len = 2;
88
89 ino = nilfs_inode_by_name(child->d_inode, &dotdot);
90 if (!ino)
91 return ERR_PTR(-ENOENT);
92
93 inode = nilfs_iget(child->d_inode->i_sb, ino);
94 if (IS_ERR(inode))
95 return ERR_CAST(inode);
96 return d_obtain_alias(inode);
97}
98
99/*
100 * By the time this is called, we already have created
101 * the directory cache entry for the new file, but it
102 * is so far negative - it has no inode.
103 *
104 * If the create succeeds, we fill in the inode information
105 * with d_instantiate().
106 */
107static int nilfs_create(struct inode *dir, struct dentry *dentry, int mode,
108 struct nameidata *nd)
109{
110 struct inode *inode;
111 struct nilfs_transaction_info ti;
112 int err;
113
114 err = nilfs_transaction_begin(dir->i_sb, &ti, 1);
115 if (err)
116 return err;
117 inode = nilfs_new_inode(dir, mode);
118 err = PTR_ERR(inode);
119 if (!IS_ERR(inode)) {
120 inode->i_op = &nilfs_file_inode_operations;
121 inode->i_fop = &nilfs_file_operations;
122 inode->i_mapping->a_ops = &nilfs_aops;
123 mark_inode_dirty(inode);
124 err = nilfs_add_nondir(dentry, inode);
125 }
126 if (!err)
127 err = nilfs_transaction_commit(dir->i_sb);
128 else
129 nilfs_transaction_abort(dir->i_sb);
130
131 return err;
132}
133
134static int
135nilfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
136{
137 struct inode *inode;
138 struct nilfs_transaction_info ti;
139 int err;
140
141 if (!new_valid_dev(rdev))
142 return -EINVAL;
143
144 err = nilfs_transaction_begin(dir->i_sb, &ti, 1);
145 if (err)
146 return err;
147 inode = nilfs_new_inode(dir, mode);
148 err = PTR_ERR(inode);
149 if (!IS_ERR(inode)) {
150 init_special_inode(inode, inode->i_mode, rdev);
151 mark_inode_dirty(inode);
152 err = nilfs_add_nondir(dentry, inode);
153 }
154 if (!err)
155 err = nilfs_transaction_commit(dir->i_sb);
156 else
157 nilfs_transaction_abort(dir->i_sb);
158
159 return err;
160}
161
162static int nilfs_symlink(struct inode *dir, struct dentry *dentry,
163 const char *symname)
164{
165 struct nilfs_transaction_info ti;
166 struct super_block *sb = dir->i_sb;
167 unsigned l = strlen(symname)+1;
168 struct inode *inode;
169 int err;
170
171 if (l > sb->s_blocksize)
172 return -ENAMETOOLONG;
173
174 err = nilfs_transaction_begin(dir->i_sb, &ti, 1);
175 if (err)
176 return err;
177
178 inode = nilfs_new_inode(dir, S_IFLNK | S_IRWXUGO);
179 err = PTR_ERR(inode);
180 if (IS_ERR(inode))
181 goto out;
182
183 /* slow symlink */
184 inode->i_op = &nilfs_symlink_inode_operations;
185 inode->i_mapping->a_ops = &nilfs_aops;
186 err = page_symlink(inode, symname, l);
187 if (err)
188 goto out_fail;
189
190 /* mark_inode_dirty(inode); */
191 /* nilfs_new_inode() and page_symlink() do this */
192
193 err = nilfs_add_nondir(dentry, inode);
194out:
195 if (!err)
196 err = nilfs_transaction_commit(dir->i_sb);
197 else
198 nilfs_transaction_abort(dir->i_sb);
199
200 return err;
201
202out_fail:
203 inode_dec_link_count(inode);
204 iput(inode);
205 goto out;
206}
207
208static int nilfs_link(struct dentry *old_dentry, struct inode *dir,
209 struct dentry *dentry)
210{
211 struct inode *inode = old_dentry->d_inode;
212 struct nilfs_transaction_info ti;
213 int err;
214
215 if (inode->i_nlink >= NILFS_LINK_MAX)
216 return -EMLINK;
217
218 err = nilfs_transaction_begin(dir->i_sb, &ti, 1);
219 if (err)
220 return err;
221
222 inode->i_ctime = CURRENT_TIME;
223 inode_inc_link_count(inode);
224 atomic_inc(&inode->i_count);
225
226 err = nilfs_add_nondir(dentry, inode);
227 if (!err)
228 err = nilfs_transaction_commit(dir->i_sb);
229 else
230 nilfs_transaction_abort(dir->i_sb);
231
232 return err;
233}
234
235static int nilfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
236{
237 struct inode *inode;
238 struct nilfs_transaction_info ti;
239 int err;
240
241 if (dir->i_nlink >= NILFS_LINK_MAX)
242 return -EMLINK;
243
244 err = nilfs_transaction_begin(dir->i_sb, &ti, 1);
245 if (err)
246 return err;
247
248 inode_inc_link_count(dir);
249
250 inode = nilfs_new_inode(dir, S_IFDIR | mode);
251 err = PTR_ERR(inode);
252 if (IS_ERR(inode))
253 goto out_dir;
254
255 inode->i_op = &nilfs_dir_inode_operations;
256 inode->i_fop = &nilfs_dir_operations;
257 inode->i_mapping->a_ops = &nilfs_aops;
258
259 inode_inc_link_count(inode);
260
261 err = nilfs_make_empty(inode, dir);
262 if (err)
263 goto out_fail;
264
265 err = nilfs_add_link(dentry, inode);
266 if (err)
267 goto out_fail;
268
269 d_instantiate(dentry, inode);
270out:
271 if (!err)
272 err = nilfs_transaction_commit(dir->i_sb);
273 else
274 nilfs_transaction_abort(dir->i_sb);
275
276 return err;
277
278out_fail:
279 inode_dec_link_count(inode);
280 inode_dec_link_count(inode);
281 iput(inode);
282out_dir:
283 inode_dec_link_count(dir);
284 goto out;
285}
286
287static int nilfs_unlink(struct inode *dir, struct dentry *dentry)
288{
289 struct inode *inode;
290 struct nilfs_dir_entry *de;
291 struct page *page;
292 struct nilfs_transaction_info ti;
293 int err;
294
295 err = nilfs_transaction_begin(dir->i_sb, &ti, 0);
296 if (err)
297 return err;
298
299 err = -ENOENT;
300 de = nilfs_find_entry(dir, dentry, &page);
301 if (!de)
302 goto out;
303
304 inode = dentry->d_inode;
305 err = -EIO;
306 if (le64_to_cpu(de->inode) != inode->i_ino)
307 goto out;
308
309 if (!inode->i_nlink) {
310 nilfs_warning(inode->i_sb, __func__,
311 "deleting nonexistent file (%lu), %d\n",
312 inode->i_ino, inode->i_nlink);
313 inode->i_nlink = 1;
314 }
315 err = nilfs_delete_entry(de, page);
316 if (err)
317 goto out;
318
319 inode->i_ctime = dir->i_ctime;
320 inode_dec_link_count(inode);
321 err = 0;
322out:
323 if (!err)
324 err = nilfs_transaction_commit(dir->i_sb);
325 else
326 nilfs_transaction_abort(dir->i_sb);
327
328 return err;
329}
330
331static int nilfs_rmdir(struct inode *dir, struct dentry *dentry)
332{
333 struct inode *inode = dentry->d_inode;
334 struct nilfs_transaction_info ti;
335 int err;
336
337 err = nilfs_transaction_begin(dir->i_sb, &ti, 0);
338 if (err)
339 return err;
340
341 err = -ENOTEMPTY;
342 if (nilfs_empty_dir(inode)) {
343 err = nilfs_unlink(dir, dentry);
344 if (!err) {
345 inode->i_size = 0;
346 inode_dec_link_count(inode);
347 inode_dec_link_count(dir);
348 }
349 }
350 if (!err)
351 err = nilfs_transaction_commit(dir->i_sb);
352 else
353 nilfs_transaction_abort(dir->i_sb);
354
355 return err;
356}
357
358static int nilfs_rename(struct inode *old_dir, struct dentry *old_dentry,
359 struct inode *new_dir, struct dentry *new_dentry)
360{
361 struct inode *old_inode = old_dentry->d_inode;
362 struct inode *new_inode = new_dentry->d_inode;
363 struct page *dir_page = NULL;
364 struct nilfs_dir_entry *dir_de = NULL;
365 struct page *old_page;
366 struct nilfs_dir_entry *old_de;
367 struct nilfs_transaction_info ti;
368 int err;
369
370 err = nilfs_transaction_begin(old_dir->i_sb, &ti, 1);
371 if (unlikely(err))
372 return err;
373
374 err = -ENOENT;
375 old_de = nilfs_find_entry(old_dir, old_dentry, &old_page);
376 if (!old_de)
377 goto out;
378
379 if (S_ISDIR(old_inode->i_mode)) {
380 err = -EIO;
381 dir_de = nilfs_dotdot(old_inode, &dir_page);
382 if (!dir_de)
383 goto out_old;
384 }
385
386 if (new_inode) {
387 struct page *new_page;
388 struct nilfs_dir_entry *new_de;
389
390 err = -ENOTEMPTY;
391 if (dir_de && !nilfs_empty_dir(new_inode))
392 goto out_dir;
393
394 err = -ENOENT;
395 new_de = nilfs_find_entry(new_dir, new_dentry, &new_page);
396 if (!new_de)
397 goto out_dir;
398 inode_inc_link_count(old_inode);
399 nilfs_set_link(new_dir, new_de, new_page, old_inode);
400 new_inode->i_ctime = CURRENT_TIME;
401 if (dir_de)
402 drop_nlink(new_inode);
403 inode_dec_link_count(new_inode);
404 } else {
405 if (dir_de) {
406 err = -EMLINK;
407 if (new_dir->i_nlink >= NILFS_LINK_MAX)
408 goto out_dir;
409 }
410 inode_inc_link_count(old_inode);
411 err = nilfs_add_link(new_dentry, old_inode);
412 if (err) {
413 inode_dec_link_count(old_inode);
414 goto out_dir;
415 }
416 if (dir_de)
417 inode_inc_link_count(new_dir);
418 }
419
420 /*
421 * Like most other Unix systems, set the ctime for inodes on a
422 * rename.
423 * inode_dec_link_count() will mark the inode dirty.
424 */
425 old_inode->i_ctime = CURRENT_TIME;
426
427 nilfs_delete_entry(old_de, old_page);
428 inode_dec_link_count(old_inode);
429
430 if (dir_de) {
431 nilfs_set_link(old_inode, dir_de, dir_page, new_dir);
432 inode_dec_link_count(old_dir);
433 }
434
435 err = nilfs_transaction_commit(old_dir->i_sb);
436 return err;
437
438out_dir:
439 if (dir_de) {
440 kunmap(dir_page);
441 page_cache_release(dir_page);
442 }
443out_old:
444 kunmap(old_page);
445 page_cache_release(old_page);
446out:
447 nilfs_transaction_abort(old_dir->i_sb);
448 return err;
449}
450
451struct inode_operations nilfs_dir_inode_operations = {
452 .create = nilfs_create,
453 .lookup = nilfs_lookup,
454 .link = nilfs_link,
455 .unlink = nilfs_unlink,
456 .symlink = nilfs_symlink,
457 .mkdir = nilfs_mkdir,
458 .rmdir = nilfs_rmdir,
459 .mknod = nilfs_mknod,
460 .rename = nilfs_rename,
461 .setattr = nilfs_setattr,
462 .permission = nilfs_permission,
463};
464
465struct inode_operations nilfs_special_inode_operations = {
466 .setattr = nilfs_setattr,
467 .permission = nilfs_permission,
468};
469
470struct inode_operations nilfs_symlink_inode_operations = {
471 .readlink = generic_readlink,
472 .follow_link = page_follow_link_light,
473 .put_link = page_put_link,
474};
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
new file mode 100644
index 000000000000..7558c977db02
--- /dev/null
+++ b/fs/nilfs2/nilfs.h
@@ -0,0 +1,318 @@
1/*
2 * nilfs.h - NILFS local header file.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>
21 * Ryusuke Konishi <ryusuke@osrg.net>
22 */
23
24#ifndef _NILFS_H
25#define _NILFS_H
26
27#include <linux/kernel.h>
28#include <linux/buffer_head.h>
29#include <linux/spinlock.h>
30#include <linux/blkdev.h>
31#include <linux/nilfs2_fs.h>
32#include "the_nilfs.h"
33#include "sb.h"
34#include "bmap.h"
35#include "bmap_union.h"
36
37/*
38 * NILFS filesystem version
39 */
40#define NILFS_VERSION "2.0.5"
41
42/*
43 * nilfs inode data in memory
44 */
45struct nilfs_inode_info {
46 __u32 i_flags;
47 unsigned long i_state; /* Dynamic state flags */
48 struct nilfs_bmap *i_bmap;
49 union nilfs_bmap_union i_bmap_union;
50 __u64 i_xattr; /* sector_t ??? */
51 __u32 i_dir_start_lookup;
52 __u64 i_cno; /* check point number for GC inode */
53 struct address_space i_btnode_cache;
54 struct list_head i_dirty; /* List for connecting dirty files */
55
56#ifdef CONFIG_NILFS_XATTR
57 /*
58 * Extended attributes can be read independently of the main file
59 * data. Taking i_sem even when reading would cause contention
60 * between readers of EAs and writers of regular file data, so
61 * instead we synchronize on xattr_sem when reading or changing
62 * EAs.
63 */
64 struct rw_semaphore xattr_sem;
65#endif
66#ifdef CONFIG_NILFS_POSIX_ACL
67 struct posix_acl *i_acl;
68 struct posix_acl *i_default_acl;
69#endif
70 struct buffer_head *i_bh; /* i_bh contains a new or dirty
71 disk inode */
72 struct inode vfs_inode;
73};
74
75static inline struct nilfs_inode_info *NILFS_I(const struct inode *inode)
76{
77 return container_of(inode, struct nilfs_inode_info, vfs_inode);
78}
79
80static inline struct nilfs_inode_info *
81NILFS_BMAP_I(const struct nilfs_bmap *bmap)
82{
83 return container_of((union nilfs_bmap_union *)bmap,
84 struct nilfs_inode_info,
85 i_bmap_union);
86}
87
88static inline struct inode *NILFS_BTNC_I(struct address_space *btnc)
89{
90 struct nilfs_inode_info *ii =
91 container_of(btnc, struct nilfs_inode_info, i_btnode_cache);
92 return &ii->vfs_inode;
93}
94
95static inline struct inode *NILFS_AS_I(struct address_space *mapping)
96{
97 return (mapping->host) ? :
98 container_of(mapping, struct inode, i_data);
99}
100
101/*
102 * Dynamic state flags of NILFS on-memory inode (i_state)
103 */
104enum {
105 NILFS_I_NEW = 0, /* Inode is newly created */
106 NILFS_I_DIRTY, /* The file is dirty */
107 NILFS_I_QUEUED, /* inode is in dirty_files list */
108 NILFS_I_BUSY, /* inode is grabbed by a segment
109 constructor */
110 NILFS_I_COLLECTED, /* All dirty blocks are collected */
111 NILFS_I_UPDATED, /* The file has been written back */
112 NILFS_I_INODE_DIRTY, /* write_inode is requested */
113 NILFS_I_BMAP, /* has bmap and btnode_cache */
114 NILFS_I_GCINODE, /* inode for GC, on memory only */
115 NILFS_I_GCDAT, /* shadow DAT, on memory only */
116};
117
118/*
119 * Macros to check inode numbers
120 */
121#define NILFS_MDT_INO_BITS \
122 ((unsigned int)(1 << NILFS_DAT_INO | 1 << NILFS_CPFILE_INO | \
123 1 << NILFS_SUFILE_INO | 1 << NILFS_IFILE_INO | \
124 1 << NILFS_ATIME_INO | 1 << NILFS_SKETCH_INO))
125
126#define NILFS_SYS_INO_BITS \
127 ((unsigned int)(1 << NILFS_ROOT_INO) | NILFS_MDT_INO_BITS)
128
129#define NILFS_FIRST_INO(sb) (NILFS_SB(sb)->s_nilfs->ns_first_ino)
130
131#define NILFS_MDT_INODE(sb, ino) \
132 ((ino) < NILFS_FIRST_INO(sb) && (NILFS_MDT_INO_BITS & (1 << (ino))))
133#define NILFS_VALID_INODE(sb, ino) \
134 ((ino) >= NILFS_FIRST_INO(sb) || (NILFS_SYS_INO_BITS & (1 << (ino))))
135
136/**
137 * struct nilfs_transaction_info: context information for synchronization
138 * @ti_magic: Magic number
139 * @ti_save: Backup of journal_info field of task_struct
140 * @ti_flags: Flags
141 * @ti_count: Nest level
142 * @ti_garbage: List of inode to be put when releasing semaphore
143 */
144struct nilfs_transaction_info {
145 u32 ti_magic;
146 void *ti_save;
147 /* This should never used. If this happens,
148 one of other filesystems has a bug. */
149 unsigned short ti_flags;
150 unsigned short ti_count;
151 struct list_head ti_garbage;
152};
153
154/* ti_magic */
155#define NILFS_TI_MAGIC 0xd9e392fb
156
157/* ti_flags */
158#define NILFS_TI_DYNAMIC_ALLOC 0x0001 /* Allocated from slab */
159#define NILFS_TI_SYNC 0x0002 /* Force to construct segment at the
160 end of transaction. */
161#define NILFS_TI_GC 0x0004 /* GC context */
162#define NILFS_TI_COMMIT 0x0008 /* Change happened or not */
163#define NILFS_TI_WRITER 0x0010 /* Constructor context */
164
165
166int nilfs_transaction_begin(struct super_block *,
167 struct nilfs_transaction_info *, int);
168int nilfs_transaction_commit(struct super_block *);
169void nilfs_transaction_abort(struct super_block *);
170
171static inline void nilfs_set_transaction_flag(unsigned int flag)
172{
173 struct nilfs_transaction_info *ti = current->journal_info;
174
175 ti->ti_flags |= flag;
176}
177
178static inline int nilfs_test_transaction_flag(unsigned int flag)
179{
180 struct nilfs_transaction_info *ti = current->journal_info;
181
182 if (ti == NULL || ti->ti_magic != NILFS_TI_MAGIC)
183 return 0;
184 return !!(ti->ti_flags & flag);
185}
186
187static inline int nilfs_doing_gc(void)
188{
189 return nilfs_test_transaction_flag(NILFS_TI_GC);
190}
191
192static inline int nilfs_doing_construction(void)
193{
194 return nilfs_test_transaction_flag(NILFS_TI_WRITER);
195}
196
197static inline struct inode *nilfs_dat_inode(const struct the_nilfs *nilfs)
198{
199 return nilfs_doing_gc() ? nilfs->ns_gc_dat : nilfs->ns_dat;
200}
201
202/*
203 * function prototype
204 */
205#ifdef CONFIG_NILFS_POSIX_ACL
206#error "NILFS: not yet supported POSIX ACL"
207extern int nilfs_permission(struct inode *, int, struct nameidata *);
208extern int nilfs_acl_chmod(struct inode *);
209extern int nilfs_init_acl(struct inode *, struct inode *);
210#else
211#define nilfs_permission NULL
212
213static inline int nilfs_acl_chmod(struct inode *inode)
214{
215 return 0;
216}
217
218static inline int nilfs_init_acl(struct inode *inode, struct inode *dir)
219{
220 inode->i_mode &= ~current_umask();
221 return 0;
222}
223#endif
224
225#define NILFS_ATIME_DISABLE
226
227/* dir.c */
228extern int nilfs_add_link(struct dentry *, struct inode *);
229extern ino_t nilfs_inode_by_name(struct inode *, struct dentry *);
230extern int nilfs_make_empty(struct inode *, struct inode *);
231extern struct nilfs_dir_entry *
232nilfs_find_entry(struct inode *, struct dentry *, struct page **);
233extern int nilfs_delete_entry(struct nilfs_dir_entry *, struct page *);
234extern int nilfs_empty_dir(struct inode *);
235extern struct nilfs_dir_entry *nilfs_dotdot(struct inode *, struct page **);
236extern void nilfs_set_link(struct inode *, struct nilfs_dir_entry *,
237 struct page *, struct inode *);
238
239/* file.c */
240extern int nilfs_sync_file(struct file *, struct dentry *, int);
241
242/* ioctl.c */
243long nilfs_ioctl(struct file *, unsigned int, unsigned long);
244int nilfs_ioctl_prepare_clean_segments(struct the_nilfs *, void __user *);
245
246/* inode.c */
247extern struct inode *nilfs_new_inode(struct inode *, int);
248extern void nilfs_free_inode(struct inode *);
249extern int nilfs_get_block(struct inode *, sector_t, struct buffer_head *, int);
250extern void nilfs_set_inode_flags(struct inode *);
251extern int nilfs_read_inode_common(struct inode *, struct nilfs_inode *);
252extern void nilfs_write_inode_common(struct inode *, struct nilfs_inode *, int);
253extern struct inode *nilfs_iget(struct super_block *, unsigned long);
254extern void nilfs_update_inode(struct inode *, struct buffer_head *);
255extern void nilfs_truncate(struct inode *);
256extern void nilfs_delete_inode(struct inode *);
257extern int nilfs_setattr(struct dentry *, struct iattr *);
258extern int nilfs_load_inode_block(struct nilfs_sb_info *, struct inode *,
259 struct buffer_head **);
260extern int nilfs_inode_dirty(struct inode *);
261extern int nilfs_set_file_dirty(struct nilfs_sb_info *, struct inode *,
262 unsigned);
263extern int nilfs_mark_inode_dirty(struct inode *);
264extern void nilfs_dirty_inode(struct inode *);
265
266/* namei.c */
267extern struct dentry *nilfs_get_parent(struct dentry *);
268
269/* super.c */
270extern struct inode *nilfs_alloc_inode(struct super_block *);
271extern void nilfs_destroy_inode(struct inode *);
272extern void nilfs_error(struct super_block *, const char *, const char *, ...)
273 __attribute__ ((format (printf, 3, 4)));
274extern void nilfs_warning(struct super_block *, const char *, const char *, ...)
275 __attribute__ ((format (printf, 3, 4)));
276extern struct nilfs_super_block *
277nilfs_read_super_block(struct super_block *, u64, int, struct buffer_head **);
278extern int nilfs_store_magic_and_option(struct super_block *,
279 struct nilfs_super_block *, char *);
280extern int nilfs_commit_super(struct nilfs_sb_info *, int);
281extern int nilfs_attach_checkpoint(struct nilfs_sb_info *, __u64);
282extern void nilfs_detach_checkpoint(struct nilfs_sb_info *);
283
284/* gcinode.c */
285int nilfs_gccache_submit_read_data(struct inode *, sector_t, sector_t, __u64,
286 struct buffer_head **);
287int nilfs_gccache_submit_read_node(struct inode *, sector_t, __u64,
288 struct buffer_head **);
289int nilfs_gccache_wait_and_mark_dirty(struct buffer_head *);
290int nilfs_init_gccache(struct the_nilfs *);
291void nilfs_destroy_gccache(struct the_nilfs *);
292void nilfs_clear_gcinode(struct inode *);
293struct inode *nilfs_gc_iget(struct the_nilfs *, ino_t, __u64);
294void nilfs_remove_all_gcinode(struct the_nilfs *);
295
296/* gcdat.c */
297int nilfs_init_gcdat_inode(struct the_nilfs *);
298void nilfs_commit_gcdat_inode(struct the_nilfs *);
299void nilfs_clear_gcdat_inode(struct the_nilfs *);
300
301/*
302 * Inodes and files operations
303 */
304extern struct file_operations nilfs_dir_operations;
305extern struct inode_operations nilfs_file_inode_operations;
306extern struct file_operations nilfs_file_operations;
307extern struct address_space_operations nilfs_aops;
308extern struct inode_operations nilfs_dir_inode_operations;
309extern struct inode_operations nilfs_special_inode_operations;
310extern struct inode_operations nilfs_symlink_inode_operations;
311
312/*
313 * filesystem type
314 */
315extern struct file_system_type nilfs_fs_type;
316
317
318#endif /* _NILFS_H */
diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c
new file mode 100644
index 000000000000..1bfbba9c0e9a
--- /dev/null
+++ b/fs/nilfs2/page.c
@@ -0,0 +1,540 @@
1/*
2 * page.c - buffer/page management specific to NILFS
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>,
21 * Seiji Kihara <kihara@osrg.net>.
22 */
23
24#include <linux/pagemap.h>
25#include <linux/writeback.h>
26#include <linux/swap.h>
27#include <linux/bitops.h>
28#include <linux/page-flags.h>
29#include <linux/list.h>
30#include <linux/highmem.h>
31#include <linux/pagevec.h>
32#include "nilfs.h"
33#include "page.h"
34#include "mdt.h"
35
36
37#define NILFS_BUFFER_INHERENT_BITS \
38 ((1UL << BH_Uptodate) | (1UL << BH_Mapped) | (1UL << BH_NILFS_Node) | \
39 (1UL << BH_NILFS_Volatile) | (1UL << BH_NILFS_Allocated))
40
41static struct buffer_head *
42__nilfs_get_page_block(struct page *page, unsigned long block, pgoff_t index,
43 int blkbits, unsigned long b_state)
44
45{
46 unsigned long first_block;
47 struct buffer_head *bh;
48
49 if (!page_has_buffers(page))
50 create_empty_buffers(page, 1 << blkbits, b_state);
51
52 first_block = (unsigned long)index << (PAGE_CACHE_SHIFT - blkbits);
53 bh = nilfs_page_get_nth_block(page, block - first_block);
54
55 touch_buffer(bh);
56 wait_on_buffer(bh);
57 return bh;
58}
59
60/*
61 * Since the page cache of B-tree node pages or data page cache of pseudo
62 * inodes does not have a valid mapping->host pointer, calling
63 * mark_buffer_dirty() for their buffers causes a NULL pointer dereference;
64 * it calls __mark_inode_dirty(NULL) through __set_page_dirty().
65 * To avoid this problem, the old style mark_buffer_dirty() is used instead.
66 */
67void nilfs_mark_buffer_dirty(struct buffer_head *bh)
68{
69 if (!buffer_dirty(bh) && !test_set_buffer_dirty(bh))
70 __set_page_dirty_nobuffers(bh->b_page);
71}
72
73struct buffer_head *nilfs_grab_buffer(struct inode *inode,
74 struct address_space *mapping,
75 unsigned long blkoff,
76 unsigned long b_state)
77{
78 int blkbits = inode->i_blkbits;
79 pgoff_t index = blkoff >> (PAGE_CACHE_SHIFT - blkbits);
80 struct page *page, *opage;
81 struct buffer_head *bh, *obh;
82
83 page = grab_cache_page(mapping, index);
84 if (unlikely(!page))
85 return NULL;
86
87 bh = __nilfs_get_page_block(page, blkoff, index, blkbits, b_state);
88 if (unlikely(!bh)) {
89 unlock_page(page);
90 page_cache_release(page);
91 return NULL;
92 }
93 if (!buffer_uptodate(bh) && mapping->assoc_mapping != NULL) {
94 /*
95 * Shadow page cache uses assoc_mapping to point its original
96 * page cache. The following code tries the original cache
97 * if the given cache is a shadow and it didn't hit.
98 */
99 opage = find_lock_page(mapping->assoc_mapping, index);
100 if (!opage)
101 return bh;
102
103 obh = __nilfs_get_page_block(opage, blkoff, index, blkbits,
104 b_state);
105 if (buffer_uptodate(obh)) {
106 nilfs_copy_buffer(bh, obh);
107 if (buffer_dirty(obh)) {
108 nilfs_mark_buffer_dirty(bh);
109 if (!buffer_nilfs_node(bh) && NILFS_MDT(inode))
110 nilfs_mdt_mark_dirty(inode);
111 }
112 }
113 brelse(obh);
114 unlock_page(opage);
115 page_cache_release(opage);
116 }
117 return bh;
118}
119
120/**
121 * nilfs_forget_buffer - discard dirty state
122 * @inode: owner inode of the buffer
123 * @bh: buffer head of the buffer to be discarded
124 */
125void nilfs_forget_buffer(struct buffer_head *bh)
126{
127 struct page *page = bh->b_page;
128
129 lock_buffer(bh);
130 clear_buffer_nilfs_volatile(bh);
131 if (test_clear_buffer_dirty(bh) && nilfs_page_buffers_clean(page))
132 __nilfs_clear_page_dirty(page);
133
134 clear_buffer_uptodate(bh);
135 clear_buffer_mapped(bh);
136 bh->b_blocknr = -1;
137 ClearPageUptodate(page);
138 ClearPageMappedToDisk(page);
139 unlock_buffer(bh);
140 brelse(bh);
141}
142
143/**
144 * nilfs_copy_buffer -- copy buffer data and flags
145 * @dbh: destination buffer
146 * @sbh: source buffer
147 */
148void nilfs_copy_buffer(struct buffer_head *dbh, struct buffer_head *sbh)
149{
150 void *kaddr0, *kaddr1;
151 unsigned long bits;
152 struct page *spage = sbh->b_page, *dpage = dbh->b_page;
153 struct buffer_head *bh;
154
155 kaddr0 = kmap_atomic(spage, KM_USER0);
156 kaddr1 = kmap_atomic(dpage, KM_USER1);
157 memcpy(kaddr1 + bh_offset(dbh), kaddr0 + bh_offset(sbh), sbh->b_size);
158 kunmap_atomic(kaddr1, KM_USER1);
159 kunmap_atomic(kaddr0, KM_USER0);
160
161 dbh->b_state = sbh->b_state & NILFS_BUFFER_INHERENT_BITS;
162 dbh->b_blocknr = sbh->b_blocknr;
163 dbh->b_bdev = sbh->b_bdev;
164
165 bh = dbh;
166 bits = sbh->b_state & ((1UL << BH_Uptodate) | (1UL << BH_Mapped));
167 while ((bh = bh->b_this_page) != dbh) {
168 lock_buffer(bh);
169 bits &= bh->b_state;
170 unlock_buffer(bh);
171 }
172 if (bits & (1UL << BH_Uptodate))
173 SetPageUptodate(dpage);
174 else
175 ClearPageUptodate(dpage);
176 if (bits & (1UL << BH_Mapped))
177 SetPageMappedToDisk(dpage);
178 else
179 ClearPageMappedToDisk(dpage);
180}
181
182/**
183 * nilfs_page_buffers_clean - check if a page has dirty buffers or not.
184 * @page: page to be checked
185 *
186 * nilfs_page_buffers_clean() returns zero if the page has dirty buffers.
187 * Otherwise, it returns non-zero value.
188 */
189int nilfs_page_buffers_clean(struct page *page)
190{
191 struct buffer_head *bh, *head;
192
193 bh = head = page_buffers(page);
194 do {
195 if (buffer_dirty(bh))
196 return 0;
197 bh = bh->b_this_page;
198 } while (bh != head);
199 return 1;
200}
201
202void nilfs_page_bug(struct page *page)
203{
204 struct address_space *m;
205 unsigned long ino = 0;
206
207 if (unlikely(!page)) {
208 printk(KERN_CRIT "NILFS_PAGE_BUG(NULL)\n");
209 return;
210 }
211
212 m = page->mapping;
213 if (m) {
214 struct inode *inode = NILFS_AS_I(m);
215 if (inode != NULL)
216 ino = inode->i_ino;
217 }
218 printk(KERN_CRIT "NILFS_PAGE_BUG(%p): cnt=%d index#=%llu flags=0x%lx "
219 "mapping=%p ino=%lu\n",
220 page, atomic_read(&page->_count),
221 (unsigned long long)page->index, page->flags, m, ino);
222
223 if (page_has_buffers(page)) {
224 struct buffer_head *bh, *head;
225 int i = 0;
226
227 bh = head = page_buffers(page);
228 do {
229 printk(KERN_CRIT
230 " BH[%d] %p: cnt=%d block#=%llu state=0x%lx\n",
231 i++, bh, atomic_read(&bh->b_count),
232 (unsigned long long)bh->b_blocknr, bh->b_state);
233 bh = bh->b_this_page;
234 } while (bh != head);
235 }
236}
237
238/**
239 * nilfs_alloc_private_page - allocate a private page with buffer heads
240 *
241 * Return Value: On success, a pointer to the allocated page is returned.
242 * On error, NULL is returned.
243 */
244struct page *nilfs_alloc_private_page(struct block_device *bdev, int size,
245 unsigned long state)
246{
247 struct buffer_head *bh, *head, *tail;
248 struct page *page;
249
250 page = alloc_page(GFP_NOFS); /* page_count of the returned page is 1 */
251 if (unlikely(!page))
252 return NULL;
253
254 lock_page(page);
255 head = alloc_page_buffers(page, size, 0);
256 if (unlikely(!head)) {
257 unlock_page(page);
258 __free_page(page);
259 return NULL;
260 }
261
262 bh = head;
263 do {
264 bh->b_state = (1UL << BH_NILFS_Allocated) | state;
265 tail = bh;
266 bh->b_bdev = bdev;
267 bh = bh->b_this_page;
268 } while (bh);
269
270 tail->b_this_page = head;
271 attach_page_buffers(page, head);
272
273 return page;
274}
275
276void nilfs_free_private_page(struct page *page)
277{
278 BUG_ON(!PageLocked(page));
279 BUG_ON(page->mapping);
280
281 if (page_has_buffers(page) && !try_to_free_buffers(page))
282 NILFS_PAGE_BUG(page, "failed to free page");
283
284 unlock_page(page);
285 __free_page(page);
286}
287
288/**
289 * nilfs_copy_page -- copy the page with buffers
290 * @dst: destination page
291 * @src: source page
292 * @copy_dirty: flag whether to copy dirty states on the page's buffer heads.
293 *
294 * This fuction is for both data pages and btnode pages. The dirty flag
295 * should be treated by caller. The page must not be under i/o.
296 * Both src and dst page must be locked
297 */
298static void nilfs_copy_page(struct page *dst, struct page *src, int copy_dirty)
299{
300 struct buffer_head *dbh, *dbufs, *sbh, *sbufs;
301 unsigned long mask = NILFS_BUFFER_INHERENT_BITS;
302
303 BUG_ON(PageWriteback(dst));
304
305 sbh = sbufs = page_buffers(src);
306 if (!page_has_buffers(dst))
307 create_empty_buffers(dst, sbh->b_size, 0);
308
309 if (copy_dirty)
310 mask |= (1UL << BH_Dirty);
311
312 dbh = dbufs = page_buffers(dst);
313 do {
314 lock_buffer(sbh);
315 lock_buffer(dbh);
316 dbh->b_state = sbh->b_state & mask;
317 dbh->b_blocknr = sbh->b_blocknr;
318 dbh->b_bdev = sbh->b_bdev;
319 sbh = sbh->b_this_page;
320 dbh = dbh->b_this_page;
321 } while (dbh != dbufs);
322
323 copy_highpage(dst, src);
324
325 if (PageUptodate(src) && !PageUptodate(dst))
326 SetPageUptodate(dst);
327 else if (!PageUptodate(src) && PageUptodate(dst))
328 ClearPageUptodate(dst);
329 if (PageMappedToDisk(src) && !PageMappedToDisk(dst))
330 SetPageMappedToDisk(dst);
331 else if (!PageMappedToDisk(src) && PageMappedToDisk(dst))
332 ClearPageMappedToDisk(dst);
333
334 do {
335 unlock_buffer(sbh);
336 unlock_buffer(dbh);
337 sbh = sbh->b_this_page;
338 dbh = dbh->b_this_page;
339 } while (dbh != dbufs);
340}
341
342int nilfs_copy_dirty_pages(struct address_space *dmap,
343 struct address_space *smap)
344{
345 struct pagevec pvec;
346 unsigned int i;
347 pgoff_t index = 0;
348 int err = 0;
349
350 pagevec_init(&pvec, 0);
351repeat:
352 if (!pagevec_lookup_tag(&pvec, smap, &index, PAGECACHE_TAG_DIRTY,
353 PAGEVEC_SIZE))
354 return 0;
355
356 for (i = 0; i < pagevec_count(&pvec); i++) {
357 struct page *page = pvec.pages[i], *dpage;
358
359 lock_page(page);
360 if (unlikely(!PageDirty(page)))
361 NILFS_PAGE_BUG(page, "inconsistent dirty state");
362
363 dpage = grab_cache_page(dmap, page->index);
364 if (unlikely(!dpage)) {
365 /* No empty page is added to the page cache */
366 err = -ENOMEM;
367 unlock_page(page);
368 break;
369 }
370 if (unlikely(!page_has_buffers(page)))
371 NILFS_PAGE_BUG(page,
372 "found empty page in dat page cache");
373
374 nilfs_copy_page(dpage, page, 1);
375 __set_page_dirty_nobuffers(dpage);
376
377 unlock_page(dpage);
378 page_cache_release(dpage);
379 unlock_page(page);
380 }
381 pagevec_release(&pvec);
382 cond_resched();
383
384 if (likely(!err))
385 goto repeat;
386 return err;
387}
388
389/**
390 * nilfs_copy_back_pages -- copy back pages to orignal cache from shadow cache
391 * @dmap: destination page cache
392 * @smap: source page cache
393 *
394 * No pages must no be added to the cache during this process.
395 * This must be ensured by the caller.
396 */
397void nilfs_copy_back_pages(struct address_space *dmap,
398 struct address_space *smap)
399{
400 struct pagevec pvec;
401 unsigned int i, n;
402 pgoff_t index = 0;
403 int err;
404
405 pagevec_init(&pvec, 0);
406repeat:
407 n = pagevec_lookup(&pvec, smap, index, PAGEVEC_SIZE);
408 if (!n)
409 return;
410 index = pvec.pages[n - 1]->index + 1;
411
412 for (i = 0; i < pagevec_count(&pvec); i++) {
413 struct page *page = pvec.pages[i], *dpage;
414 pgoff_t offset = page->index;
415
416 lock_page(page);
417 dpage = find_lock_page(dmap, offset);
418 if (dpage) {
419 /* override existing page on the destination cache */
420 WARN_ON(PageDirty(dpage));
421 nilfs_copy_page(dpage, page, 0);
422 unlock_page(dpage);
423 page_cache_release(dpage);
424 } else {
425 struct page *page2;
426
427 /* move the page to the destination cache */
428 spin_lock_irq(&smap->tree_lock);
429 page2 = radix_tree_delete(&smap->page_tree, offset);
430 WARN_ON(page2 != page);
431
432 smap->nrpages--;
433 spin_unlock_irq(&smap->tree_lock);
434
435 spin_lock_irq(&dmap->tree_lock);
436 err = radix_tree_insert(&dmap->page_tree, offset, page);
437 if (unlikely(err < 0)) {
438 WARN_ON(err == -EEXIST);
439 page->mapping = NULL;
440 page_cache_release(page); /* for cache */
441 } else {
442 page->mapping = dmap;
443 dmap->nrpages++;
444 if (PageDirty(page))
445 radix_tree_tag_set(&dmap->page_tree,
446 offset,
447 PAGECACHE_TAG_DIRTY);
448 }
449 spin_unlock_irq(&dmap->tree_lock);
450 }
451 unlock_page(page);
452 }
453 pagevec_release(&pvec);
454 cond_resched();
455
456 goto repeat;
457}
458
459void nilfs_clear_dirty_pages(struct address_space *mapping)
460{
461 struct pagevec pvec;
462 unsigned int i;
463 pgoff_t index = 0;
464
465 pagevec_init(&pvec, 0);
466
467 while (pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY,
468 PAGEVEC_SIZE)) {
469 for (i = 0; i < pagevec_count(&pvec); i++) {
470 struct page *page = pvec.pages[i];
471 struct buffer_head *bh, *head;
472
473 lock_page(page);
474 ClearPageUptodate(page);
475 ClearPageMappedToDisk(page);
476 bh = head = page_buffers(page);
477 do {
478 lock_buffer(bh);
479 clear_buffer_dirty(bh);
480 clear_buffer_nilfs_volatile(bh);
481 clear_buffer_uptodate(bh);
482 clear_buffer_mapped(bh);
483 unlock_buffer(bh);
484 bh = bh->b_this_page;
485 } while (bh != head);
486
487 __nilfs_clear_page_dirty(page);
488 unlock_page(page);
489 }
490 pagevec_release(&pvec);
491 cond_resched();
492 }
493}
494
495unsigned nilfs_page_count_clean_buffers(struct page *page,
496 unsigned from, unsigned to)
497{
498 unsigned block_start, block_end;
499 struct buffer_head *bh, *head;
500 unsigned nc = 0;
501
502 for (bh = head = page_buffers(page), block_start = 0;
503 bh != head || !block_start;
504 block_start = block_end, bh = bh->b_this_page) {
505 block_end = block_start + bh->b_size;
506 if (block_end > from && block_start < to && !buffer_dirty(bh))
507 nc++;
508 }
509 return nc;
510}
511
512/*
513 * NILFS2 needs clear_page_dirty() in the following two cases:
514 *
515 * 1) For B-tree node pages and data pages of the dat/gcdat, NILFS2 clears
516 * page dirty flags when it copies back pages from the shadow cache
517 * (gcdat->{i_mapping,i_btnode_cache}) to its original cache
518 * (dat->{i_mapping,i_btnode_cache}).
519 *
520 * 2) Some B-tree operations like insertion or deletion may dispose buffers
521 * in dirty state, and this needs to cancel the dirty state of their pages.
522 */
523int __nilfs_clear_page_dirty(struct page *page)
524{
525 struct address_space *mapping = page->mapping;
526
527 if (mapping) {
528 spin_lock_irq(&mapping->tree_lock);
529 if (test_bit(PG_dirty, &page->flags)) {
530 radix_tree_tag_clear(&mapping->page_tree,
531 page_index(page),
532 PAGECACHE_TAG_DIRTY);
533 spin_unlock_irq(&mapping->tree_lock);
534 return clear_page_dirty_for_io(page);
535 }
536 spin_unlock_irq(&mapping->tree_lock);
537 return 0;
538 }
539 return TestClearPageDirty(page);
540}
diff --git a/fs/nilfs2/page.h b/fs/nilfs2/page.h
new file mode 100644
index 000000000000..8abca4d1c1f8
--- /dev/null
+++ b/fs/nilfs2/page.h
@@ -0,0 +1,76 @@
1/*
2 * page.h - buffer/page management specific to NILFS
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>,
21 * Seiji Kihara <kihara@osrg.net>.
22 */
23
24#ifndef _NILFS_PAGE_H
25#define _NILFS_PAGE_H
26
27#include <linux/buffer_head.h>
28#include "nilfs.h"
29
30/*
31 * Extended buffer state bits
32 */
33enum {
34 BH_NILFS_Allocated = BH_PrivateStart,
35 BH_NILFS_Node,
36 BH_NILFS_Volatile,
37};
38
39BUFFER_FNS(NILFS_Allocated, nilfs_allocated) /* nilfs private buffers */
40BUFFER_FNS(NILFS_Node, nilfs_node) /* nilfs node buffers */
41BUFFER_FNS(NILFS_Volatile, nilfs_volatile)
42
43
44void nilfs_mark_buffer_dirty(struct buffer_head *bh);
45int __nilfs_clear_page_dirty(struct page *);
46
47struct buffer_head *nilfs_grab_buffer(struct inode *, struct address_space *,
48 unsigned long, unsigned long);
49void nilfs_forget_buffer(struct buffer_head *);
50void nilfs_copy_buffer(struct buffer_head *, struct buffer_head *);
51int nilfs_page_buffers_clean(struct page *);
52void nilfs_page_bug(struct page *);
53struct page *nilfs_alloc_private_page(struct block_device *, int,
54 unsigned long);
55void nilfs_free_private_page(struct page *);
56
57int nilfs_copy_dirty_pages(struct address_space *, struct address_space *);
58void nilfs_copy_back_pages(struct address_space *, struct address_space *);
59void nilfs_clear_dirty_pages(struct address_space *);
60unsigned nilfs_page_count_clean_buffers(struct page *, unsigned, unsigned);
61
62#define NILFS_PAGE_BUG(page, m, a...) \
63 do { nilfs_page_bug(page); BUG(); } while (0)
64
65static inline struct buffer_head *
66nilfs_page_get_nth_block(struct page *page, unsigned int count)
67{
68 struct buffer_head *bh = page_buffers(page);
69
70 while (count-- > 0)
71 bh = bh->b_this_page;
72 get_bh(bh);
73 return bh;
74}
75
76#endif /* _NILFS_PAGE_H */
diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c
new file mode 100644
index 000000000000..6ade0963fc1d
--- /dev/null
+++ b/fs/nilfs2/recovery.c
@@ -0,0 +1,929 @@
1/*
2 * recovery.c - NILFS recovery logic
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 */
22
23#include <linux/buffer_head.h>
24#include <linux/blkdev.h>
25#include <linux/swap.h>
26#include <linux/crc32.h>
27#include "nilfs.h"
28#include "segment.h"
29#include "sufile.h"
30#include "page.h"
31#include "seglist.h"
32#include "segbuf.h"
33
34/*
35 * Segment check result
36 */
37enum {
38 NILFS_SEG_VALID,
39 NILFS_SEG_NO_SUPER_ROOT,
40 NILFS_SEG_FAIL_IO,
41 NILFS_SEG_FAIL_MAGIC,
42 NILFS_SEG_FAIL_SEQ,
43 NILFS_SEG_FAIL_CHECKSUM_SEGSUM,
44 NILFS_SEG_FAIL_CHECKSUM_SUPER_ROOT,
45 NILFS_SEG_FAIL_CHECKSUM_FULL,
46 NILFS_SEG_FAIL_CONSISTENCY,
47};
48
49/* work structure for recovery */
50struct nilfs_recovery_block {
51 ino_t ino; /* Inode number of the file that this block
52 belongs to */
53 sector_t blocknr; /* block number */
54 __u64 vblocknr; /* virtual block number */
55 unsigned long blkoff; /* File offset of the data block (per block) */
56 struct list_head list;
57};
58
59
60static int nilfs_warn_segment_error(int err)
61{
62 switch (err) {
63 case NILFS_SEG_FAIL_IO:
64 printk(KERN_WARNING
65 "NILFS warning: I/O error on loading last segment\n");
66 return -EIO;
67 case NILFS_SEG_FAIL_MAGIC:
68 printk(KERN_WARNING
69 "NILFS warning: Segment magic number invalid\n");
70 break;
71 case NILFS_SEG_FAIL_SEQ:
72 printk(KERN_WARNING
73 "NILFS warning: Sequence number mismatch\n");
74 break;
75 case NILFS_SEG_FAIL_CHECKSUM_SEGSUM:
76 printk(KERN_WARNING
77 "NILFS warning: Checksum error in segment summary\n");
78 break;
79 case NILFS_SEG_FAIL_CHECKSUM_SUPER_ROOT:
80 printk(KERN_WARNING
81 "NILFS warning: Checksum error in super root\n");
82 break;
83 case NILFS_SEG_FAIL_CHECKSUM_FULL:
84 printk(KERN_WARNING
85 "NILFS warning: Checksum error in segment payload\n");
86 break;
87 case NILFS_SEG_FAIL_CONSISTENCY:
88 printk(KERN_WARNING
89 "NILFS warning: Inconsistent segment\n");
90 break;
91 case NILFS_SEG_NO_SUPER_ROOT:
92 printk(KERN_WARNING
93 "NILFS warning: No super root in the last segment\n");
94 break;
95 }
96 return -EINVAL;
97}
98
99static void store_segsum_info(struct nilfs_segsum_info *ssi,
100 struct nilfs_segment_summary *sum,
101 unsigned int blocksize)
102{
103 ssi->flags = le16_to_cpu(sum->ss_flags);
104 ssi->seg_seq = le64_to_cpu(sum->ss_seq);
105 ssi->ctime = le64_to_cpu(sum->ss_create);
106 ssi->next = le64_to_cpu(sum->ss_next);
107 ssi->nblocks = le32_to_cpu(sum->ss_nblocks);
108 ssi->nfinfo = le32_to_cpu(sum->ss_nfinfo);
109 ssi->sumbytes = le32_to_cpu(sum->ss_sumbytes);
110
111 ssi->nsumblk = DIV_ROUND_UP(ssi->sumbytes, blocksize);
112 ssi->nfileblk = ssi->nblocks - ssi->nsumblk - !!NILFS_SEG_HAS_SR(ssi);
113}
114
115/**
116 * calc_crc_cont - check CRC of blocks continuously
117 * @sbi: nilfs_sb_info
118 * @bhs: buffer head of start block
119 * @sum: place to store result
120 * @offset: offset bytes in the first block
121 * @check_bytes: number of bytes to be checked
122 * @start: DBN of start block
123 * @nblock: number of blocks to be checked
124 */
125static int calc_crc_cont(struct nilfs_sb_info *sbi, struct buffer_head *bhs,
126 u32 *sum, unsigned long offset, u64 check_bytes,
127 sector_t start, unsigned long nblock)
128{
129 unsigned long blocksize = sbi->s_super->s_blocksize;
130 unsigned long size;
131 u32 crc;
132
133 BUG_ON(offset >= blocksize);
134 check_bytes -= offset;
135 size = min_t(u64, check_bytes, blocksize - offset);
136 crc = crc32_le(sbi->s_nilfs->ns_crc_seed,
137 (unsigned char *)bhs->b_data + offset, size);
138 if (--nblock > 0) {
139 do {
140 struct buffer_head *bh
141 = sb_bread(sbi->s_super, ++start);
142 if (!bh)
143 return -EIO;
144 check_bytes -= size;
145 size = min_t(u64, check_bytes, blocksize);
146 crc = crc32_le(crc, bh->b_data, size);
147 brelse(bh);
148 } while (--nblock > 0);
149 }
150 *sum = crc;
151 return 0;
152}
153
154/**
155 * nilfs_read_super_root_block - read super root block
156 * @sb: super_block
157 * @sr_block: disk block number of the super root block
158 * @pbh: address of a buffer_head pointer to return super root buffer
159 * @check: CRC check flag
160 */
161int nilfs_read_super_root_block(struct super_block *sb, sector_t sr_block,
162 struct buffer_head **pbh, int check)
163{
164 struct buffer_head *bh_sr;
165 struct nilfs_super_root *sr;
166 u32 crc;
167 int ret;
168
169 *pbh = NULL;
170 bh_sr = sb_bread(sb, sr_block);
171 if (unlikely(!bh_sr)) {
172 ret = NILFS_SEG_FAIL_IO;
173 goto failed;
174 }
175
176 sr = (struct nilfs_super_root *)bh_sr->b_data;
177 if (check) {
178 unsigned bytes = le16_to_cpu(sr->sr_bytes);
179
180 if (bytes == 0 || bytes > sb->s_blocksize) {
181 ret = NILFS_SEG_FAIL_CHECKSUM_SUPER_ROOT;
182 goto failed_bh;
183 }
184 if (calc_crc_cont(NILFS_SB(sb), bh_sr, &crc,
185 sizeof(sr->sr_sum), bytes, sr_block, 1)) {
186 ret = NILFS_SEG_FAIL_IO;
187 goto failed_bh;
188 }
189 if (crc != le32_to_cpu(sr->sr_sum)) {
190 ret = NILFS_SEG_FAIL_CHECKSUM_SUPER_ROOT;
191 goto failed_bh;
192 }
193 }
194 *pbh = bh_sr;
195 return 0;
196
197 failed_bh:
198 brelse(bh_sr);
199
200 failed:
201 return nilfs_warn_segment_error(ret);
202}
203
204/**
205 * load_segment_summary - read segment summary of the specified partial segment
206 * @sbi: nilfs_sb_info
207 * @pseg_start: start disk block number of partial segment
208 * @seg_seq: sequence number requested
209 * @ssi: pointer to nilfs_segsum_info struct to store information
210 * @full_check: full check flag
211 * (0: only checks segment summary CRC, 1: data CRC)
212 */
213static int
214load_segment_summary(struct nilfs_sb_info *sbi, sector_t pseg_start,
215 u64 seg_seq, struct nilfs_segsum_info *ssi,
216 int full_check)
217{
218 struct buffer_head *bh_sum;
219 struct nilfs_segment_summary *sum;
220 unsigned long offset, nblock;
221 u64 check_bytes;
222 u32 crc, crc_sum;
223 int ret = NILFS_SEG_FAIL_IO;
224
225 bh_sum = sb_bread(sbi->s_super, pseg_start);
226 if (!bh_sum)
227 goto out;
228
229 sum = (struct nilfs_segment_summary *)bh_sum->b_data;
230
231 /* Check consistency of segment summary */
232 if (le32_to_cpu(sum->ss_magic) != NILFS_SEGSUM_MAGIC) {
233 ret = NILFS_SEG_FAIL_MAGIC;
234 goto failed;
235 }
236 store_segsum_info(ssi, sum, sbi->s_super->s_blocksize);
237 if (seg_seq != ssi->seg_seq) {
238 ret = NILFS_SEG_FAIL_SEQ;
239 goto failed;
240 }
241 if (full_check) {
242 offset = sizeof(sum->ss_datasum);
243 check_bytes =
244 ((u64)ssi->nblocks << sbi->s_super->s_blocksize_bits);
245 nblock = ssi->nblocks;
246 crc_sum = le32_to_cpu(sum->ss_datasum);
247 ret = NILFS_SEG_FAIL_CHECKSUM_FULL;
248 } else { /* only checks segment summary */
249 offset = sizeof(sum->ss_datasum) + sizeof(sum->ss_sumsum);
250 check_bytes = ssi->sumbytes;
251 nblock = ssi->nsumblk;
252 crc_sum = le32_to_cpu(sum->ss_sumsum);
253 ret = NILFS_SEG_FAIL_CHECKSUM_SEGSUM;
254 }
255
256 if (unlikely(nblock == 0 ||
257 nblock > sbi->s_nilfs->ns_blocks_per_segment)) {
258 /* This limits the number of blocks read in the CRC check */
259 ret = NILFS_SEG_FAIL_CONSISTENCY;
260 goto failed;
261 }
262 if (calc_crc_cont(sbi, bh_sum, &crc, offset, check_bytes,
263 pseg_start, nblock)) {
264 ret = NILFS_SEG_FAIL_IO;
265 goto failed;
266 }
267 if (crc == crc_sum)
268 ret = 0;
269 failed:
270 brelse(bh_sum);
271 out:
272 return ret;
273}
274
275static void *segsum_get(struct super_block *sb, struct buffer_head **pbh,
276 unsigned int *offset, unsigned int bytes)
277{
278 void *ptr;
279 sector_t blocknr;
280
281 BUG_ON((*pbh)->b_size < *offset);
282 if (bytes > (*pbh)->b_size - *offset) {
283 blocknr = (*pbh)->b_blocknr;
284 brelse(*pbh);
285 *pbh = sb_bread(sb, blocknr + 1);
286 if (unlikely(!*pbh))
287 return NULL;
288 *offset = 0;
289 }
290 ptr = (*pbh)->b_data + *offset;
291 *offset += bytes;
292 return ptr;
293}
294
295static void segsum_skip(struct super_block *sb, struct buffer_head **pbh,
296 unsigned int *offset, unsigned int bytes,
297 unsigned long count)
298{
299 unsigned int rest_item_in_current_block
300 = ((*pbh)->b_size - *offset) / bytes;
301
302 if (count <= rest_item_in_current_block) {
303 *offset += bytes * count;
304 } else {
305 sector_t blocknr = (*pbh)->b_blocknr;
306 unsigned int nitem_per_block = (*pbh)->b_size / bytes;
307 unsigned int bcnt;
308
309 count -= rest_item_in_current_block;
310 bcnt = DIV_ROUND_UP(count, nitem_per_block);
311 *offset = bytes * (count - (bcnt - 1) * nitem_per_block);
312
313 brelse(*pbh);
314 *pbh = sb_bread(sb, blocknr + bcnt);
315 }
316}
317
318static int
319collect_blocks_from_segsum(struct nilfs_sb_info *sbi, sector_t sum_blocknr,
320 struct nilfs_segsum_info *ssi,
321 struct list_head *head)
322{
323 struct buffer_head *bh;
324 unsigned int offset;
325 unsigned long nfinfo = ssi->nfinfo;
326 sector_t blocknr = sum_blocknr + ssi->nsumblk;
327 ino_t ino;
328 int err = -EIO;
329
330 if (!nfinfo)
331 return 0;
332
333 bh = sb_bread(sbi->s_super, sum_blocknr);
334 if (unlikely(!bh))
335 goto out;
336
337 offset = le16_to_cpu(
338 ((struct nilfs_segment_summary *)bh->b_data)->ss_bytes);
339 for (;;) {
340 unsigned long nblocks, ndatablk, nnodeblk;
341 struct nilfs_finfo *finfo;
342
343 finfo = segsum_get(sbi->s_super, &bh, &offset, sizeof(*finfo));
344 if (unlikely(!finfo))
345 goto out;
346
347 ino = le64_to_cpu(finfo->fi_ino);
348 nblocks = le32_to_cpu(finfo->fi_nblocks);
349 ndatablk = le32_to_cpu(finfo->fi_ndatablk);
350 nnodeblk = nblocks - ndatablk;
351
352 while (ndatablk-- > 0) {
353 struct nilfs_recovery_block *rb;
354 struct nilfs_binfo_v *binfo;
355
356 binfo = segsum_get(sbi->s_super, &bh, &offset,
357 sizeof(*binfo));
358 if (unlikely(!binfo))
359 goto out;
360
361 rb = kmalloc(sizeof(*rb), GFP_NOFS);
362 if (unlikely(!rb)) {
363 err = -ENOMEM;
364 goto out;
365 }
366 rb->ino = ino;
367 rb->blocknr = blocknr++;
368 rb->vblocknr = le64_to_cpu(binfo->bi_vblocknr);
369 rb->blkoff = le64_to_cpu(binfo->bi_blkoff);
370 /* INIT_LIST_HEAD(&rb->list); */
371 list_add_tail(&rb->list, head);
372 }
373 if (--nfinfo == 0)
374 break;
375 blocknr += nnodeblk; /* always 0 for the data sync segments */
376 segsum_skip(sbi->s_super, &bh, &offset, sizeof(__le64),
377 nnodeblk);
378 if (unlikely(!bh))
379 goto out;
380 }
381 err = 0;
382 out:
383 brelse(bh); /* brelse(NULL) is just ignored */
384 return err;
385}
386
387static void dispose_recovery_list(struct list_head *head)
388{
389 while (!list_empty(head)) {
390 struct nilfs_recovery_block *rb
391 = list_entry(head->next,
392 struct nilfs_recovery_block, list);
393 list_del(&rb->list);
394 kfree(rb);
395 }
396}
397
398void nilfs_dispose_segment_list(struct list_head *head)
399{
400 while (!list_empty(head)) {
401 struct nilfs_segment_entry *ent
402 = list_entry(head->next,
403 struct nilfs_segment_entry, list);
404 list_del(&ent->list);
405 nilfs_free_segment_entry(ent);
406 }
407}
408
409static int nilfs_prepare_segment_for_recovery(struct the_nilfs *nilfs,
410 struct nilfs_recovery_info *ri)
411{
412 struct list_head *head = &ri->ri_used_segments;
413 struct nilfs_segment_entry *ent, *n;
414 struct inode *sufile = nilfs->ns_sufile;
415 __u64 segnum[4];
416 time_t mtime;
417 int err;
418 int i;
419
420 segnum[0] = nilfs->ns_segnum;
421 segnum[1] = nilfs->ns_nextnum;
422 segnum[2] = ri->ri_segnum;
423 segnum[3] = ri->ri_nextnum;
424
425 /*
426 * Releasing the next segment of the latest super root.
427 * The next segment is invalidated by this recovery.
428 */
429 err = nilfs_sufile_free(sufile, segnum[1]);
430 if (unlikely(err))
431 goto failed;
432
433 err = -ENOMEM;
434 for (i = 1; i < 4; i++) {
435 ent = nilfs_alloc_segment_entry(segnum[i]);
436 if (unlikely(!ent))
437 goto failed;
438 list_add_tail(&ent->list, head);
439 }
440
441 /*
442 * Collecting segments written after the latest super root.
443 * These are marked dirty to avoid being reallocated in the next write.
444 */
445 mtime = get_seconds();
446 list_for_each_entry_safe(ent, n, head, list) {
447 if (ent->segnum == segnum[0]) {
448 list_del(&ent->list);
449 nilfs_free_segment_entry(ent);
450 continue;
451 }
452 err = nilfs_open_segment_entry(ent, sufile);
453 if (unlikely(err))
454 goto failed;
455 if (!nilfs_segment_usage_dirty(ent->raw_su)) {
456 /* make the segment garbage */
457 ent->raw_su->su_nblocks = cpu_to_le32(0);
458 ent->raw_su->su_lastmod = cpu_to_le32(mtime);
459 nilfs_segment_usage_set_dirty(ent->raw_su);
460 }
461 list_del(&ent->list);
462 nilfs_close_segment_entry(ent, sufile);
463 nilfs_free_segment_entry(ent);
464 }
465
466 /* Allocate new segments for recovery */
467 err = nilfs_sufile_alloc(sufile, &segnum[0]);
468 if (unlikely(err))
469 goto failed;
470
471 nilfs->ns_pseg_offset = 0;
472 nilfs->ns_seg_seq = ri->ri_seq + 2;
473 nilfs->ns_nextnum = nilfs->ns_segnum = segnum[0];
474 return 0;
475
476 failed:
477 /* No need to recover sufile because it will be destroyed on error */
478 return err;
479}
480
481static int nilfs_recovery_copy_block(struct nilfs_sb_info *sbi,
482 struct nilfs_recovery_block *rb,
483 struct page *page)
484{
485 struct buffer_head *bh_org;
486 void *kaddr;
487
488 bh_org = sb_bread(sbi->s_super, rb->blocknr);
489 if (unlikely(!bh_org))
490 return -EIO;
491
492 kaddr = kmap_atomic(page, KM_USER0);
493 memcpy(kaddr + bh_offset(bh_org), bh_org->b_data, bh_org->b_size);
494 kunmap_atomic(kaddr, KM_USER0);
495 brelse(bh_org);
496 return 0;
497}
498
499static int recover_dsync_blocks(struct nilfs_sb_info *sbi,
500 struct list_head *head,
501 unsigned long *nr_salvaged_blocks)
502{
503 struct inode *inode;
504 struct nilfs_recovery_block *rb, *n;
505 unsigned blocksize = sbi->s_super->s_blocksize;
506 struct page *page;
507 loff_t pos;
508 int err = 0, err2 = 0;
509
510 list_for_each_entry_safe(rb, n, head, list) {
511 inode = nilfs_iget(sbi->s_super, rb->ino);
512 if (IS_ERR(inode)) {
513 err = PTR_ERR(inode);
514 inode = NULL;
515 goto failed_inode;
516 }
517
518 pos = rb->blkoff << inode->i_blkbits;
519 page = NULL;
520 err = block_write_begin(NULL, inode->i_mapping, pos, blocksize,
521 0, &page, NULL, nilfs_get_block);
522 if (unlikely(err))
523 goto failed_inode;
524
525 err = nilfs_recovery_copy_block(sbi, rb, page);
526 if (unlikely(err))
527 goto failed_page;
528
529 err = nilfs_set_file_dirty(sbi, inode, 1);
530 if (unlikely(err))
531 goto failed_page;
532
533 block_write_end(NULL, inode->i_mapping, pos, blocksize,
534 blocksize, page, NULL);
535
536 unlock_page(page);
537 page_cache_release(page);
538
539 (*nr_salvaged_blocks)++;
540 goto next;
541
542 failed_page:
543 unlock_page(page);
544 page_cache_release(page);
545
546 failed_inode:
547 printk(KERN_WARNING
548 "NILFS warning: error recovering data block "
549 "(err=%d, ino=%lu, block-offset=%llu)\n",
550 err, rb->ino, (unsigned long long)rb->blkoff);
551 if (!err2)
552 err2 = err;
553 next:
554 iput(inode); /* iput(NULL) is just ignored */
555 list_del_init(&rb->list);
556 kfree(rb);
557 }
558 return err2;
559}
560
561/**
562 * nilfs_do_roll_forward - salvage logical segments newer than the latest
563 * checkpoint
564 * @sbi: nilfs_sb_info
565 * @nilfs: the_nilfs
566 * @ri: pointer to a nilfs_recovery_info
567 */
568static int nilfs_do_roll_forward(struct the_nilfs *nilfs,
569 struct nilfs_sb_info *sbi,
570 struct nilfs_recovery_info *ri)
571{
572 struct nilfs_segsum_info ssi;
573 sector_t pseg_start;
574 sector_t seg_start, seg_end; /* Starting/ending DBN of full segment */
575 unsigned long nsalvaged_blocks = 0;
576 u64 seg_seq;
577 __u64 segnum, nextnum = 0;
578 int empty_seg = 0;
579 int err = 0, ret;
580 LIST_HEAD(dsync_blocks); /* list of data blocks to be recovered */
581 enum {
582 RF_INIT_ST,
583 RF_DSYNC_ST, /* scanning data-sync segments */
584 };
585 int state = RF_INIT_ST;
586
587 nilfs_attach_writer(nilfs, sbi);
588 pseg_start = ri->ri_lsegs_start;
589 seg_seq = ri->ri_lsegs_start_seq;
590 segnum = nilfs_get_segnum_of_block(nilfs, pseg_start);
591 nilfs_get_segment_range(nilfs, segnum, &seg_start, &seg_end);
592
593 while (segnum != ri->ri_segnum || pseg_start <= ri->ri_pseg_start) {
594
595 ret = load_segment_summary(sbi, pseg_start, seg_seq, &ssi, 1);
596 if (ret) {
597 if (ret == NILFS_SEG_FAIL_IO) {
598 err = -EIO;
599 goto failed;
600 }
601 goto strayed;
602 }
603 if (unlikely(NILFS_SEG_HAS_SR(&ssi)))
604 goto confused;
605
606 /* Found a valid partial segment; do recovery actions */
607 nextnum = nilfs_get_segnum_of_block(nilfs, ssi.next);
608 empty_seg = 0;
609 nilfs->ns_ctime = ssi.ctime;
610 if (!(ssi.flags & NILFS_SS_GC))
611 nilfs->ns_nongc_ctime = ssi.ctime;
612
613 switch (state) {
614 case RF_INIT_ST:
615 if (!NILFS_SEG_LOGBGN(&ssi) || !NILFS_SEG_DSYNC(&ssi))
616 goto try_next_pseg;
617 state = RF_DSYNC_ST;
618 /* Fall through */
619 case RF_DSYNC_ST:
620 if (!NILFS_SEG_DSYNC(&ssi))
621 goto confused;
622
623 err = collect_blocks_from_segsum(
624 sbi, pseg_start, &ssi, &dsync_blocks);
625 if (unlikely(err))
626 goto failed;
627 if (NILFS_SEG_LOGEND(&ssi)) {
628 err = recover_dsync_blocks(
629 sbi, &dsync_blocks, &nsalvaged_blocks);
630 if (unlikely(err))
631 goto failed;
632 state = RF_INIT_ST;
633 }
634 break; /* Fall through to try_next_pseg */
635 }
636
637 try_next_pseg:
638 if (pseg_start == ri->ri_lsegs_end)
639 break;
640 pseg_start += ssi.nblocks;
641 if (pseg_start < seg_end)
642 continue;
643 goto feed_segment;
644
645 strayed:
646 if (pseg_start == ri->ri_lsegs_end)
647 break;
648
649 feed_segment:
650 /* Looking to the next full segment */
651 if (empty_seg++)
652 break;
653 seg_seq++;
654 segnum = nextnum;
655 nilfs_get_segment_range(nilfs, segnum, &seg_start, &seg_end);
656 pseg_start = seg_start;
657 }
658
659 if (nsalvaged_blocks) {
660 printk(KERN_INFO "NILFS (device %s): salvaged %lu blocks\n",
661 sbi->s_super->s_id, nsalvaged_blocks);
662 ri->ri_need_recovery = NILFS_RECOVERY_ROLLFORWARD_DONE;
663 }
664 out:
665 dispose_recovery_list(&dsync_blocks);
666 nilfs_detach_writer(sbi->s_nilfs, sbi);
667 return err;
668
669 confused:
670 err = -EINVAL;
671 failed:
672 printk(KERN_ERR
673 "NILFS (device %s): Error roll-forwarding "
674 "(err=%d, pseg block=%llu). ",
675 sbi->s_super->s_id, err, (unsigned long long)pseg_start);
676 goto out;
677}
678
679static void nilfs_finish_roll_forward(struct the_nilfs *nilfs,
680 struct nilfs_sb_info *sbi,
681 struct nilfs_recovery_info *ri)
682{
683 struct buffer_head *bh;
684 int err;
685
686 if (nilfs_get_segnum_of_block(nilfs, ri->ri_lsegs_start) !=
687 nilfs_get_segnum_of_block(nilfs, ri->ri_super_root))
688 return;
689
690 bh = sb_getblk(sbi->s_super, ri->ri_lsegs_start);
691 BUG_ON(!bh);
692 memset(bh->b_data, 0, bh->b_size);
693 set_buffer_dirty(bh);
694 err = sync_dirty_buffer(bh);
695 if (unlikely(err))
696 printk(KERN_WARNING
697 "NILFS warning: buffer sync write failed during "
698 "post-cleaning of recovery.\n");
699 brelse(bh);
700}
701
702/**
703 * nilfs_recover_logical_segments - salvage logical segments written after
704 * the latest super root
705 * @nilfs: the_nilfs
706 * @sbi: nilfs_sb_info
707 * @ri: pointer to a nilfs_recovery_info struct to store search results.
708 *
709 * Return Value: On success, 0 is returned. On error, one of the following
710 * negative error code is returned.
711 *
712 * %-EINVAL - Inconsistent filesystem state.
713 *
714 * %-EIO - I/O error
715 *
716 * %-ENOSPC - No space left on device (only in a panic state).
717 *
718 * %-ERESTARTSYS - Interrupted.
719 *
720 * %-ENOMEM - Insufficient memory available.
721 */
722int nilfs_recover_logical_segments(struct the_nilfs *nilfs,
723 struct nilfs_sb_info *sbi,
724 struct nilfs_recovery_info *ri)
725{
726 int err;
727
728 if (ri->ri_lsegs_start == 0 || ri->ri_lsegs_end == 0)
729 return 0;
730
731 err = nilfs_attach_checkpoint(sbi, ri->ri_cno);
732 if (unlikely(err)) {
733 printk(KERN_ERR
734 "NILFS: error loading the latest checkpoint.\n");
735 return err;
736 }
737
738 err = nilfs_do_roll_forward(nilfs, sbi, ri);
739 if (unlikely(err))
740 goto failed;
741
742 if (ri->ri_need_recovery == NILFS_RECOVERY_ROLLFORWARD_DONE) {
743 err = nilfs_prepare_segment_for_recovery(nilfs, ri);
744 if (unlikely(err)) {
745 printk(KERN_ERR "NILFS: Error preparing segments for "
746 "recovery.\n");
747 goto failed;
748 }
749
750 err = nilfs_attach_segment_constructor(sbi);
751 if (unlikely(err))
752 goto failed;
753
754 set_nilfs_discontinued(nilfs);
755 err = nilfs_construct_segment(sbi->s_super);
756 nilfs_detach_segment_constructor(sbi);
757
758 if (unlikely(err)) {
759 printk(KERN_ERR "NILFS: Oops! recovery failed. "
760 "(err=%d)\n", err);
761 goto failed;
762 }
763
764 nilfs_finish_roll_forward(nilfs, sbi, ri);
765 }
766
767 nilfs_detach_checkpoint(sbi);
768 return 0;
769
770 failed:
771 nilfs_detach_checkpoint(sbi);
772 nilfs_mdt_clear(nilfs->ns_cpfile);
773 nilfs_mdt_clear(nilfs->ns_sufile);
774 nilfs_mdt_clear(nilfs->ns_dat);
775 return err;
776}
777
778/**
779 * nilfs_search_super_root - search the latest valid super root
780 * @nilfs: the_nilfs
781 * @sbi: nilfs_sb_info
782 * @ri: pointer to a nilfs_recovery_info struct to store search results.
783 *
784 * nilfs_search_super_root() looks for the latest super-root from a partial
785 * segment pointed by the superblock. It sets up struct the_nilfs through
786 * this search. It fills nilfs_recovery_info (ri) required for recovery.
787 *
788 * Return Value: On success, 0 is returned. On error, one of the following
789 * negative error code is returned.
790 *
791 * %-EINVAL - No valid segment found
792 *
793 * %-EIO - I/O error
794 */
795int nilfs_search_super_root(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi,
796 struct nilfs_recovery_info *ri)
797{
798 struct nilfs_segsum_info ssi;
799 sector_t pseg_start, pseg_end, sr_pseg_start = 0;
800 sector_t seg_start, seg_end; /* range of full segment (block number) */
801 u64 seg_seq;
802 __u64 segnum, nextnum = 0;
803 __u64 cno;
804 struct nilfs_segment_entry *ent;
805 LIST_HEAD(segments);
806 int empty_seg = 0, scan_newer = 0;
807 int ret;
808
809 pseg_start = nilfs->ns_last_pseg;
810 seg_seq = nilfs->ns_last_seq;
811 cno = nilfs->ns_last_cno;
812 segnum = nilfs_get_segnum_of_block(nilfs, pseg_start);
813
814 /* Calculate range of segment */
815 nilfs_get_segment_range(nilfs, segnum, &seg_start, &seg_end);
816
817 for (;;) {
818 /* Load segment summary */
819 ret = load_segment_summary(sbi, pseg_start, seg_seq, &ssi, 1);
820 if (ret) {
821 if (ret == NILFS_SEG_FAIL_IO)
822 goto failed;
823 goto strayed;
824 }
825 pseg_end = pseg_start + ssi.nblocks - 1;
826 if (unlikely(pseg_end > seg_end)) {
827 ret = NILFS_SEG_FAIL_CONSISTENCY;
828 goto strayed;
829 }
830
831 /* A valid partial segment */
832 ri->ri_pseg_start = pseg_start;
833 ri->ri_seq = seg_seq;
834 ri->ri_segnum = segnum;
835 nextnum = nilfs_get_segnum_of_block(nilfs, ssi.next);
836 ri->ri_nextnum = nextnum;
837 empty_seg = 0;
838
839 if (!NILFS_SEG_HAS_SR(&ssi)) {
840 if (!scan_newer) {
841 /* This will never happen because a superblock
842 (last_segment) always points to a pseg
843 having a super root. */
844 ret = NILFS_SEG_FAIL_CONSISTENCY;
845 goto failed;
846 }
847 if (!ri->ri_lsegs_start && NILFS_SEG_LOGBGN(&ssi)) {
848 ri->ri_lsegs_start = pseg_start;
849 ri->ri_lsegs_start_seq = seg_seq;
850 }
851 if (NILFS_SEG_LOGEND(&ssi))
852 ri->ri_lsegs_end = pseg_start;
853 goto try_next_pseg;
854 }
855
856 /* A valid super root was found. */
857 ri->ri_cno = cno++;
858 ri->ri_super_root = pseg_end;
859 ri->ri_lsegs_start = ri->ri_lsegs_end = 0;
860
861 nilfs_dispose_segment_list(&segments);
862 nilfs->ns_pseg_offset = (sr_pseg_start = pseg_start)
863 + ssi.nblocks - seg_start;
864 nilfs->ns_seg_seq = seg_seq;
865 nilfs->ns_segnum = segnum;
866 nilfs->ns_cno = cno; /* nilfs->ns_cno = ri->ri_cno + 1 */
867 nilfs->ns_ctime = ssi.ctime;
868 nilfs->ns_nextnum = nextnum;
869
870 if (scan_newer)
871 ri->ri_need_recovery = NILFS_RECOVERY_SR_UPDATED;
872 else {
873 if (nilfs->ns_mount_state & NILFS_VALID_FS)
874 goto super_root_found;
875 scan_newer = 1;
876 }
877
878 /* reset region for roll-forward */
879 pseg_start += ssi.nblocks;
880 if (pseg_start < seg_end)
881 continue;
882 goto feed_segment;
883
884 try_next_pseg:
885 /* Standing on a course, or met an inconsistent state */
886 pseg_start += ssi.nblocks;
887 if (pseg_start < seg_end)
888 continue;
889 goto feed_segment;
890
891 strayed:
892 /* Off the trail */
893 if (!scan_newer)
894 /*
895 * This can happen if a checkpoint was written without
896 * barriers, or as a result of an I/O failure.
897 */
898 goto failed;
899
900 feed_segment:
901 /* Looking to the next full segment */
902 if (empty_seg++)
903 goto super_root_found; /* found a valid super root */
904
905 ent = nilfs_alloc_segment_entry(segnum);
906 if (unlikely(!ent)) {
907 ret = -ENOMEM;
908 goto failed;
909 }
910 list_add_tail(&ent->list, &segments);
911
912 seg_seq++;
913 segnum = nextnum;
914 nilfs_get_segment_range(nilfs, segnum, &seg_start, &seg_end);
915 pseg_start = seg_start;
916 }
917
918 super_root_found:
919 /* Updating pointers relating to the latest checkpoint */
920 list_splice(&segments, ri->ri_used_segments.prev);
921 nilfs->ns_last_pseg = sr_pseg_start;
922 nilfs->ns_last_seq = nilfs->ns_seg_seq;
923 nilfs->ns_last_cno = ri->ri_cno;
924 return 0;
925
926 failed:
927 nilfs_dispose_segment_list(&segments);
928 return (ret < 0) ? ret : nilfs_warn_segment_error(ret);
929}
diff --git a/fs/nilfs2/sb.h b/fs/nilfs2/sb.h
new file mode 100644
index 000000000000..adccd4fc654e
--- /dev/null
+++ b/fs/nilfs2/sb.h
@@ -0,0 +1,102 @@
1/*
2 * sb.h - NILFS on-memory super block structure.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23
24#ifndef _NILFS_SB
25#define _NILFS_SB
26
27#include <linux/types.h>
28#include <linux/fs.h>
29
30/*
31 * Mount options
32 */
33struct nilfs_mount_options {
34 unsigned long mount_opt;
35 __u64 snapshot_cno;
36};
37
38struct the_nilfs;
39struct nilfs_sc_info;
40
41/*
42 * NILFS super-block data in memory
43 */
44struct nilfs_sb_info {
45 /* Snapshot status */
46 __u64 s_snapshot_cno; /* Checkpoint number */
47 atomic_t s_inodes_count;
48 atomic_t s_blocks_count; /* Reserved (might be deleted) */
49
50 /* Mount options */
51 unsigned long s_mount_opt;
52 uid_t s_resuid;
53 gid_t s_resgid;
54
55 unsigned long s_interval; /* construction interval */
56 unsigned long s_watermark; /* threshold of data amount
57 for the segment construction */
58
59 /* Fundamental members */
60 struct super_block *s_super; /* reverse pointer to super_block */
61 struct the_nilfs *s_nilfs;
62 struct list_head s_list; /* list head for nilfs->ns_supers */
63
64 /* Segment constructor */
65 struct list_head s_dirty_files; /* dirty files list */
66 struct nilfs_sc_info *s_sc_info; /* segment constructor info */
67 spinlock_t s_inode_lock; /* Lock for the nilfs inode.
68 It covers s_dirty_files list */
69
70 /* Metadata files */
71 struct inode *s_ifile; /* index file inode */
72
73 /* Inode allocator */
74 spinlock_t s_next_gen_lock;
75 u32 s_next_generation;
76};
77
78static inline struct nilfs_sb_info *NILFS_SB(struct super_block *sb)
79{
80 return sb->s_fs_info;
81}
82
83static inline struct nilfs_sc_info *NILFS_SC(struct nilfs_sb_info *sbi)
84{
85 return sbi->s_sc_info;
86}
87
88/*
89 * Bit operations for the mount option
90 */
91#define nilfs_clear_opt(sbi, opt) \
92 do { (sbi)->s_mount_opt &= ~NILFS_MOUNT_##opt; } while (0)
93#define nilfs_set_opt(sbi, opt) \
94 do { (sbi)->s_mount_opt |= NILFS_MOUNT_##opt; } while (0)
95#define nilfs_test_opt(sbi, opt) ((sbi)->s_mount_opt & NILFS_MOUNT_##opt)
96#define nilfs_write_opt(sbi, mask, opt) \
97 do { (sbi)->s_mount_opt = \
98 (((sbi)->s_mount_opt & ~NILFS_MOUNT_##mask) | \
99 NILFS_MOUNT_##opt); \
100 } while (0)
101
102#endif /* _NILFS_SB */
diff --git a/fs/nilfs2/segbuf.c b/fs/nilfs2/segbuf.c
new file mode 100644
index 000000000000..1e68821b4a9b
--- /dev/null
+++ b/fs/nilfs2/segbuf.c
@@ -0,0 +1,439 @@
1/*
2 * segbuf.c - NILFS segment buffer
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23
24#include <linux/buffer_head.h>
25#include <linux/writeback.h>
26#include <linux/crc32.h>
27#include "page.h"
28#include "segbuf.h"
29#include "seglist.h"
30
31
32static struct kmem_cache *nilfs_segbuf_cachep;
33
34static void nilfs_segbuf_init_once(void *obj)
35{
36 memset(obj, 0, sizeof(struct nilfs_segment_buffer));
37}
38
39int __init nilfs_init_segbuf_cache(void)
40{
41 nilfs_segbuf_cachep =
42 kmem_cache_create("nilfs2_segbuf_cache",
43 sizeof(struct nilfs_segment_buffer),
44 0, SLAB_RECLAIM_ACCOUNT,
45 nilfs_segbuf_init_once);
46
47 return (nilfs_segbuf_cachep == NULL) ? -ENOMEM : 0;
48}
49
50void nilfs_destroy_segbuf_cache(void)
51{
52 kmem_cache_destroy(nilfs_segbuf_cachep);
53}
54
55struct nilfs_segment_buffer *nilfs_segbuf_new(struct super_block *sb)
56{
57 struct nilfs_segment_buffer *segbuf;
58
59 segbuf = kmem_cache_alloc(nilfs_segbuf_cachep, GFP_NOFS);
60 if (unlikely(!segbuf))
61 return NULL;
62
63 segbuf->sb_super = sb;
64 INIT_LIST_HEAD(&segbuf->sb_list);
65 INIT_LIST_HEAD(&segbuf->sb_segsum_buffers);
66 INIT_LIST_HEAD(&segbuf->sb_payload_buffers);
67 return segbuf;
68}
69
70void nilfs_segbuf_free(struct nilfs_segment_buffer *segbuf)
71{
72 kmem_cache_free(nilfs_segbuf_cachep, segbuf);
73}
74
75void nilfs_segbuf_map(struct nilfs_segment_buffer *segbuf, __u64 segnum,
76 unsigned long offset, struct the_nilfs *nilfs)
77{
78 segbuf->sb_segnum = segnum;
79 nilfs_get_segment_range(nilfs, segnum, &segbuf->sb_fseg_start,
80 &segbuf->sb_fseg_end);
81
82 segbuf->sb_pseg_start = segbuf->sb_fseg_start + offset;
83 segbuf->sb_rest_blocks =
84 segbuf->sb_fseg_end - segbuf->sb_pseg_start + 1;
85}
86
87void nilfs_segbuf_set_next_segnum(struct nilfs_segment_buffer *segbuf,
88 __u64 nextnum, struct the_nilfs *nilfs)
89{
90 segbuf->sb_nextnum = nextnum;
91 segbuf->sb_sum.next = nilfs_get_segment_start_blocknr(nilfs, nextnum);
92}
93
94int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *segbuf)
95{
96 struct buffer_head *bh;
97
98 bh = sb_getblk(segbuf->sb_super,
99 segbuf->sb_pseg_start + segbuf->sb_sum.nsumblk);
100 if (unlikely(!bh))
101 return -ENOMEM;
102
103 nilfs_segbuf_add_segsum_buffer(segbuf, bh);
104 return 0;
105}
106
107int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *segbuf,
108 struct buffer_head **bhp)
109{
110 struct buffer_head *bh;
111
112 bh = sb_getblk(segbuf->sb_super,
113 segbuf->sb_pseg_start + segbuf->sb_sum.nblocks);
114 if (unlikely(!bh))
115 return -ENOMEM;
116
117 nilfs_segbuf_add_payload_buffer(segbuf, bh);
118 *bhp = bh;
119 return 0;
120}
121
122int nilfs_segbuf_reset(struct nilfs_segment_buffer *segbuf, unsigned flags,
123 time_t ctime)
124{
125 int err;
126
127 segbuf->sb_sum.nblocks = segbuf->sb_sum.nsumblk = 0;
128 err = nilfs_segbuf_extend_segsum(segbuf);
129 if (unlikely(err))
130 return err;
131
132 segbuf->sb_sum.flags = flags;
133 segbuf->sb_sum.sumbytes = sizeof(struct nilfs_segment_summary);
134 segbuf->sb_sum.nfinfo = segbuf->sb_sum.nfileblk = 0;
135 segbuf->sb_sum.ctime = ctime;
136
137 segbuf->sb_io_error = 0;
138 return 0;
139}
140
141/*
142 * Setup segument summary
143 */
144void nilfs_segbuf_fill_in_segsum(struct nilfs_segment_buffer *segbuf)
145{
146 struct nilfs_segment_summary *raw_sum;
147 struct buffer_head *bh_sum;
148
149 bh_sum = list_entry(segbuf->sb_segsum_buffers.next,
150 struct buffer_head, b_assoc_buffers);
151 raw_sum = (struct nilfs_segment_summary *)bh_sum->b_data;
152
153 raw_sum->ss_magic = cpu_to_le32(NILFS_SEGSUM_MAGIC);
154 raw_sum->ss_bytes = cpu_to_le16(sizeof(*raw_sum));
155 raw_sum->ss_flags = cpu_to_le16(segbuf->sb_sum.flags);
156 raw_sum->ss_seq = cpu_to_le64(segbuf->sb_sum.seg_seq);
157 raw_sum->ss_create = cpu_to_le64(segbuf->sb_sum.ctime);
158 raw_sum->ss_next = cpu_to_le64(segbuf->sb_sum.next);
159 raw_sum->ss_nblocks = cpu_to_le32(segbuf->sb_sum.nblocks);
160 raw_sum->ss_nfinfo = cpu_to_le32(segbuf->sb_sum.nfinfo);
161 raw_sum->ss_sumbytes = cpu_to_le32(segbuf->sb_sum.sumbytes);
162 raw_sum->ss_pad = 0;
163}
164
165/*
166 * CRC calculation routines
167 */
168void nilfs_segbuf_fill_in_segsum_crc(struct nilfs_segment_buffer *segbuf,
169 u32 seed)
170{
171 struct buffer_head *bh;
172 struct nilfs_segment_summary *raw_sum;
173 unsigned long size, bytes = segbuf->sb_sum.sumbytes;
174 u32 crc;
175
176 bh = list_entry(segbuf->sb_segsum_buffers.next, struct buffer_head,
177 b_assoc_buffers);
178
179 raw_sum = (struct nilfs_segment_summary *)bh->b_data;
180 size = min_t(unsigned long, bytes, bh->b_size);
181 crc = crc32_le(seed,
182 (unsigned char *)raw_sum +
183 sizeof(raw_sum->ss_datasum) + sizeof(raw_sum->ss_sumsum),
184 size - (sizeof(raw_sum->ss_datasum) +
185 sizeof(raw_sum->ss_sumsum)));
186
187 list_for_each_entry_continue(bh, &segbuf->sb_segsum_buffers,
188 b_assoc_buffers) {
189 bytes -= size;
190 size = min_t(unsigned long, bytes, bh->b_size);
191 crc = crc32_le(crc, bh->b_data, size);
192 }
193 raw_sum->ss_sumsum = cpu_to_le32(crc);
194}
195
196void nilfs_segbuf_fill_in_data_crc(struct nilfs_segment_buffer *segbuf,
197 u32 seed)
198{
199 struct buffer_head *bh;
200 struct nilfs_segment_summary *raw_sum;
201 void *kaddr;
202 u32 crc;
203
204 bh = list_entry(segbuf->sb_segsum_buffers.next, struct buffer_head,
205 b_assoc_buffers);
206 raw_sum = (struct nilfs_segment_summary *)bh->b_data;
207 crc = crc32_le(seed,
208 (unsigned char *)raw_sum + sizeof(raw_sum->ss_datasum),
209 bh->b_size - sizeof(raw_sum->ss_datasum));
210
211 list_for_each_entry_continue(bh, &segbuf->sb_segsum_buffers,
212 b_assoc_buffers) {
213 crc = crc32_le(crc, bh->b_data, bh->b_size);
214 }
215 list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) {
216 kaddr = kmap_atomic(bh->b_page, KM_USER0);
217 crc = crc32_le(crc, kaddr + bh_offset(bh), bh->b_size);
218 kunmap_atomic(kaddr, KM_USER0);
219 }
220 raw_sum->ss_datasum = cpu_to_le32(crc);
221}
222
223void nilfs_release_buffers(struct list_head *list)
224{
225 struct buffer_head *bh, *n;
226
227 list_for_each_entry_safe(bh, n, list, b_assoc_buffers) {
228 list_del_init(&bh->b_assoc_buffers);
229 if (buffer_nilfs_allocated(bh)) {
230 struct page *clone_page = bh->b_page;
231
232 /* remove clone page */
233 brelse(bh);
234 page_cache_release(clone_page); /* for each bh */
235 if (page_count(clone_page) <= 2) {
236 lock_page(clone_page);
237 nilfs_free_private_page(clone_page);
238 }
239 continue;
240 }
241 brelse(bh);
242 }
243}
244
245/*
246 * BIO operations
247 */
248static void nilfs_end_bio_write(struct bio *bio, int err)
249{
250 const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags);
251 struct nilfs_write_info *wi = bio->bi_private;
252
253 if (err == -EOPNOTSUPP) {
254 set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
255 bio_put(bio);
256 /* to be detected by submit_seg_bio() */
257 }
258
259 if (!uptodate)
260 atomic_inc(&wi->err);
261
262 bio_put(bio);
263 complete(&wi->bio_event);
264}
265
266static int nilfs_submit_seg_bio(struct nilfs_write_info *wi, int mode)
267{
268 struct bio *bio = wi->bio;
269 int err;
270
271 if (wi->nbio > 0 && bdi_write_congested(wi->bdi)) {
272 wait_for_completion(&wi->bio_event);
273 wi->nbio--;
274 if (unlikely(atomic_read(&wi->err))) {
275 bio_put(bio);
276 err = -EIO;
277 goto failed;
278 }
279 }
280
281 bio->bi_end_io = nilfs_end_bio_write;
282 bio->bi_private = wi;
283 bio_get(bio);
284 submit_bio(mode, bio);
285 if (bio_flagged(bio, BIO_EOPNOTSUPP)) {
286 bio_put(bio);
287 err = -EOPNOTSUPP;
288 goto failed;
289 }
290 wi->nbio++;
291 bio_put(bio);
292
293 wi->bio = NULL;
294 wi->rest_blocks -= wi->end - wi->start;
295 wi->nr_vecs = min(wi->max_pages, wi->rest_blocks);
296 wi->start = wi->end;
297 return 0;
298
299 failed:
300 wi->bio = NULL;
301 return err;
302}
303
304/**
305 * nilfs_alloc_seg_bio - allocate a bio for writing segment.
306 * @sb: super block
307 * @start: beginning disk block number of this BIO.
308 * @nr_vecs: request size of page vector.
309 *
310 * alloc_seg_bio() allocates a new BIO structure and initialize it.
311 *
312 * Return Value: On success, pointer to the struct bio is returned.
313 * On error, NULL is returned.
314 */
315static struct bio *nilfs_alloc_seg_bio(struct super_block *sb, sector_t start,
316 int nr_vecs)
317{
318 struct bio *bio;
319
320 bio = bio_alloc(GFP_NOWAIT, nr_vecs);
321 if (bio == NULL) {
322 while (!bio && (nr_vecs >>= 1))
323 bio = bio_alloc(GFP_NOWAIT, nr_vecs);
324 }
325 if (likely(bio)) {
326 bio->bi_bdev = sb->s_bdev;
327 bio->bi_sector = (sector_t)start << (sb->s_blocksize_bits - 9);
328 }
329 return bio;
330}
331
332void nilfs_segbuf_prepare_write(struct nilfs_segment_buffer *segbuf,
333 struct nilfs_write_info *wi)
334{
335 wi->bio = NULL;
336 wi->rest_blocks = segbuf->sb_sum.nblocks;
337 wi->max_pages = bio_get_nr_vecs(wi->sb->s_bdev);
338 wi->nr_vecs = min(wi->max_pages, wi->rest_blocks);
339 wi->start = wi->end = 0;
340 wi->nbio = 0;
341 wi->blocknr = segbuf->sb_pseg_start;
342
343 atomic_set(&wi->err, 0);
344 init_completion(&wi->bio_event);
345}
346
347static int nilfs_submit_bh(struct nilfs_write_info *wi, struct buffer_head *bh,
348 int mode)
349{
350 int len, err;
351
352 BUG_ON(wi->nr_vecs <= 0);
353 repeat:
354 if (!wi->bio) {
355 wi->bio = nilfs_alloc_seg_bio(wi->sb, wi->blocknr + wi->end,
356 wi->nr_vecs);
357 if (unlikely(!wi->bio))
358 return -ENOMEM;
359 }
360
361 len = bio_add_page(wi->bio, bh->b_page, bh->b_size, bh_offset(bh));
362 if (len == bh->b_size) {
363 wi->end++;
364 return 0;
365 }
366 /* bio is FULL */
367 err = nilfs_submit_seg_bio(wi, mode);
368 /* never submit current bh */
369 if (likely(!err))
370 goto repeat;
371 return err;
372}
373
374int nilfs_segbuf_write(struct nilfs_segment_buffer *segbuf,
375 struct nilfs_write_info *wi)
376{
377 struct buffer_head *bh;
378 int res, rw = WRITE;
379
380 list_for_each_entry(bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) {
381 res = nilfs_submit_bh(wi, bh, rw);
382 if (unlikely(res))
383 goto failed_bio;
384 }
385
386 list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) {
387 res = nilfs_submit_bh(wi, bh, rw);
388 if (unlikely(res))
389 goto failed_bio;
390 }
391
392 if (wi->bio) {
393 /*
394 * Last BIO is always sent through the following
395 * submission.
396 */
397 rw |= (1 << BIO_RW_SYNCIO);
398 res = nilfs_submit_seg_bio(wi, rw);
399 if (unlikely(res))
400 goto failed_bio;
401 }
402
403 res = 0;
404 out:
405 return res;
406
407 failed_bio:
408 atomic_inc(&wi->err);
409 goto out;
410}
411
412/**
413 * nilfs_segbuf_wait - wait for completion of requested BIOs
414 * @wi: nilfs_write_info
415 *
416 * Return Value: On Success, 0 is returned. On Error, one of the following
417 * negative error code is returned.
418 *
419 * %-EIO - I/O error
420 */
421int nilfs_segbuf_wait(struct nilfs_segment_buffer *segbuf,
422 struct nilfs_write_info *wi)
423{
424 int err = 0;
425
426 if (!wi->nbio)
427 return 0;
428
429 do {
430 wait_for_completion(&wi->bio_event);
431 } while (--wi->nbio > 0);
432
433 if (unlikely(atomic_read(&wi->err) > 0)) {
434 printk(KERN_ERR "NILFS: IO error writing segment\n");
435 err = -EIO;
436 segbuf->sb_io_error = 1;
437 }
438 return err;
439}
diff --git a/fs/nilfs2/segbuf.h b/fs/nilfs2/segbuf.h
new file mode 100644
index 000000000000..0c3076f4e592
--- /dev/null
+++ b/fs/nilfs2/segbuf.h
@@ -0,0 +1,201 @@
1/*
2 * segbuf.h - NILFS Segment buffer prototypes and definitions
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23#ifndef _NILFS_SEGBUF_H
24#define _NILFS_SEGBUF_H
25
26#include <linux/fs.h>
27#include <linux/buffer_head.h>
28#include <linux/bio.h>
29#include <linux/completion.h>
30#include <linux/backing-dev.h>
31
32/**
33 * struct nilfs_segsum_info - On-memory segment summary
34 * @flags: Flags
35 * @nfinfo: Number of file information structures
36 * @nblocks: Number of blocks included in the partial segment
37 * @nsumblk: Number of summary blocks
38 * @sumbytes: Byte count of segment summary
39 * @nfileblk: Total number of file blocks
40 * @seg_seq: Segment sequence number
41 * @ctime: Creation time
42 * @next: Block number of the next full segment
43 */
44struct nilfs_segsum_info {
45 unsigned int flags;
46 unsigned long nfinfo;
47 unsigned long nblocks;
48 unsigned long nsumblk;
49 unsigned long sumbytes;
50 unsigned long nfileblk;
51 u64 seg_seq;
52 time_t ctime;
53 sector_t next;
54};
55
56/* macro for the flags */
57#define NILFS_SEG_HAS_SR(sum) ((sum)->flags & NILFS_SS_SR)
58#define NILFS_SEG_LOGBGN(sum) ((sum)->flags & NILFS_SS_LOGBGN)
59#define NILFS_SEG_LOGEND(sum) ((sum)->flags & NILFS_SS_LOGEND)
60#define NILFS_SEG_DSYNC(sum) ((sum)->flags & NILFS_SS_SYNDT)
61#define NILFS_SEG_SIMPLEX(sum) \
62 (((sum)->flags & (NILFS_SS_LOGBGN | NILFS_SS_LOGEND)) == \
63 (NILFS_SS_LOGBGN | NILFS_SS_LOGEND))
64
65#define NILFS_SEG_EMPTY(sum) ((sum)->nblocks == (sum)->nsumblk)
66
67/**
68 * struct nilfs_segment_buffer - Segment buffer
69 * @sb_super: back pointer to a superblock struct
70 * @sb_list: List head to chain this structure
71 * @sb_sum: On-memory segment summary
72 * @sb_segnum: Index number of the full segment
73 * @sb_nextnum: Index number of the next full segment
74 * @sb_fseg_start: Start block number of the full segment
75 * @sb_fseg_end: End block number of the full segment
76 * @sb_pseg_start: Disk block number of partial segment
77 * @sb_rest_blocks: Number of residual blocks in the current segment
78 * @sb_segsum_buffers: List of buffers for segment summaries
79 * @sb_payload_buffers: List of buffers for segment payload
80 * @sb_io_error: I/O error status
81 */
82struct nilfs_segment_buffer {
83 struct super_block *sb_super;
84 struct list_head sb_list;
85
86 /* Segment information */
87 struct nilfs_segsum_info sb_sum;
88 __u64 sb_segnum;
89 __u64 sb_nextnum;
90 sector_t sb_fseg_start, sb_fseg_end;
91 sector_t sb_pseg_start;
92 unsigned sb_rest_blocks;
93
94 /* Buffers */
95 struct list_head sb_segsum_buffers;
96 struct list_head sb_payload_buffers; /* including super root */
97
98 /* io status */
99 int sb_io_error;
100};
101
102#define NILFS_LIST_SEGBUF(head) \
103 list_entry((head), struct nilfs_segment_buffer, sb_list)
104#define NILFS_NEXT_SEGBUF(segbuf) NILFS_LIST_SEGBUF((segbuf)->sb_list.next)
105#define NILFS_PREV_SEGBUF(segbuf) NILFS_LIST_SEGBUF((segbuf)->sb_list.prev)
106#define NILFS_LAST_SEGBUF(head) NILFS_LIST_SEGBUF((head)->prev)
107#define NILFS_FIRST_SEGBUF(head) NILFS_LIST_SEGBUF((head)->next)
108#define NILFS_SEGBUF_IS_LAST(segbuf, head) ((segbuf)->sb_list.next == (head))
109
110#define nilfs_for_each_segbuf_before(s, t, h) \
111 for ((s) = NILFS_FIRST_SEGBUF(h); (s) != (t); \
112 (s) = NILFS_NEXT_SEGBUF(s))
113
114#define NILFS_SEGBUF_FIRST_BH(head) \
115 (list_entry((head)->next, struct buffer_head, b_assoc_buffers))
116#define NILFS_SEGBUF_NEXT_BH(bh) \
117 (list_entry((bh)->b_assoc_buffers.next, struct buffer_head, \
118 b_assoc_buffers))
119#define NILFS_SEGBUF_BH_IS_LAST(bh, head) ((bh)->b_assoc_buffers.next == head)
120
121
122int __init nilfs_init_segbuf_cache(void);
123void nilfs_destroy_segbuf_cache(void);
124struct nilfs_segment_buffer *nilfs_segbuf_new(struct super_block *);
125void nilfs_segbuf_free(struct nilfs_segment_buffer *);
126void nilfs_segbuf_map(struct nilfs_segment_buffer *, __u64, unsigned long,
127 struct the_nilfs *);
128void nilfs_segbuf_set_next_segnum(struct nilfs_segment_buffer *, __u64,
129 struct the_nilfs *);
130int nilfs_segbuf_reset(struct nilfs_segment_buffer *, unsigned, time_t);
131int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *);
132int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *,
133 struct buffer_head **);
134void nilfs_segbuf_fill_in_segsum(struct nilfs_segment_buffer *);
135void nilfs_segbuf_fill_in_segsum_crc(struct nilfs_segment_buffer *, u32);
136void nilfs_segbuf_fill_in_data_crc(struct nilfs_segment_buffer *, u32);
137
138static inline void
139nilfs_segbuf_add_segsum_buffer(struct nilfs_segment_buffer *segbuf,
140 struct buffer_head *bh)
141{
142 list_add_tail(&bh->b_assoc_buffers, &segbuf->sb_segsum_buffers);
143 segbuf->sb_sum.nblocks++;
144 segbuf->sb_sum.nsumblk++;
145}
146
147static inline void
148nilfs_segbuf_add_payload_buffer(struct nilfs_segment_buffer *segbuf,
149 struct buffer_head *bh)
150{
151 list_add_tail(&bh->b_assoc_buffers, &segbuf->sb_payload_buffers);
152 segbuf->sb_sum.nblocks++;
153}
154
155static inline void
156nilfs_segbuf_add_file_buffer(struct nilfs_segment_buffer *segbuf,
157 struct buffer_head *bh)
158{
159 get_bh(bh);
160 nilfs_segbuf_add_payload_buffer(segbuf, bh);
161 segbuf->sb_sum.nfileblk++;
162}
163
164void nilfs_release_buffers(struct list_head *);
165
166static inline void nilfs_segbuf_clear(struct nilfs_segment_buffer *segbuf)
167{
168 nilfs_release_buffers(&segbuf->sb_segsum_buffers);
169 nilfs_release_buffers(&segbuf->sb_payload_buffers);
170}
171
172struct nilfs_write_info {
173 struct bio *bio;
174 int start, end; /* The region to be submitted */
175 int rest_blocks;
176 int max_pages;
177 int nr_vecs;
178 sector_t blocknr;
179
180 int nbio;
181 atomic_t err;
182 struct completion bio_event;
183 /* completion event of segment write */
184
185 /*
186 * The following fields must be set explicitly
187 */
188 struct super_block *sb;
189 struct backing_dev_info *bdi; /* backing dev info */
190 struct buffer_head *bh_sr;
191};
192
193
194void nilfs_segbuf_prepare_write(struct nilfs_segment_buffer *,
195 struct nilfs_write_info *);
196int nilfs_segbuf_write(struct nilfs_segment_buffer *,
197 struct nilfs_write_info *);
198int nilfs_segbuf_wait(struct nilfs_segment_buffer *,
199 struct nilfs_write_info *);
200
201#endif /* _NILFS_SEGBUF_H */
diff --git a/fs/nilfs2/seglist.h b/fs/nilfs2/seglist.h
new file mode 100644
index 000000000000..d39df9144e99
--- /dev/null
+++ b/fs/nilfs2/seglist.h
@@ -0,0 +1,85 @@
1/*
2 * seglist.h - expediential structure and routines to handle list of segments
3 * (would be removed in a future release)
4 *
5 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 *
21 * Written by Ryusuke Konishi <ryusuke@osrg.net>
22 *
23 */
24#ifndef _NILFS_SEGLIST_H
25#define _NILFS_SEGLIST_H
26
27#include <linux/fs.h>
28#include <linux/buffer_head.h>
29#include <linux/nilfs2_fs.h>
30#include "sufile.h"
31
32struct nilfs_segment_entry {
33 __u64 segnum;
34
35#define NILFS_SLH_FREED 0x0001 /* The segment was freed provisonally.
36 It must be cancelled if
37 construction aborted */
38
39 unsigned flags;
40 struct list_head list;
41 struct buffer_head *bh_su;
42 struct nilfs_segment_usage *raw_su;
43};
44
45
46void nilfs_dispose_segment_list(struct list_head *);
47
48static inline struct nilfs_segment_entry *
49nilfs_alloc_segment_entry(__u64 segnum)
50{
51 struct nilfs_segment_entry *ent = kmalloc(sizeof(*ent), GFP_NOFS);
52
53 if (likely(ent)) {
54 ent->segnum = segnum;
55 ent->flags = 0;
56 ent->bh_su = NULL;
57 ent->raw_su = NULL;
58 INIT_LIST_HEAD(&ent->list);
59 }
60 return ent;
61}
62
63static inline int nilfs_open_segment_entry(struct nilfs_segment_entry *ent,
64 struct inode *sufile)
65{
66 return nilfs_sufile_get_segment_usage(sufile, ent->segnum,
67 &ent->raw_su, &ent->bh_su);
68}
69
70static inline void nilfs_close_segment_entry(struct nilfs_segment_entry *ent,
71 struct inode *sufile)
72{
73 if (!ent->bh_su)
74 return;
75 nilfs_sufile_put_segment_usage(sufile, ent->segnum, ent->bh_su);
76 ent->bh_su = NULL;
77 ent->raw_su = NULL;
78}
79
80static inline void nilfs_free_segment_entry(struct nilfs_segment_entry *ent)
81{
82 kfree(ent);
83}
84
85#endif /* _NILFS_SEGLIST_H */
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
new file mode 100644
index 000000000000..fb70ec3be20e
--- /dev/null
+++ b/fs/nilfs2/segment.c
@@ -0,0 +1,2977 @@
1/*
2 * segment.c - NILFS segment constructor.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23
24#include <linux/pagemap.h>
25#include <linux/buffer_head.h>
26#include <linux/writeback.h>
27#include <linux/bio.h>
28#include <linux/completion.h>
29#include <linux/blkdev.h>
30#include <linux/backing-dev.h>
31#include <linux/freezer.h>
32#include <linux/kthread.h>
33#include <linux/crc32.h>
34#include <linux/pagevec.h>
35#include "nilfs.h"
36#include "btnode.h"
37#include "page.h"
38#include "segment.h"
39#include "sufile.h"
40#include "cpfile.h"
41#include "ifile.h"
42#include "seglist.h"
43#include "segbuf.h"
44
45
46/*
47 * Segment constructor
48 */
49#define SC_N_INODEVEC 16 /* Size of locally allocated inode vector */
50
51#define SC_MAX_SEGDELTA 64 /* Upper limit of the number of segments
52 appended in collection retry loop */
53
54/* Construction mode */
55enum {
56 SC_LSEG_SR = 1, /* Make a logical segment having a super root */
57 SC_LSEG_DSYNC, /* Flush data blocks of a given file and make
58 a logical segment without a super root */
59 SC_FLUSH_FILE, /* Flush data files, leads to segment writes without
60 creating a checkpoint */
61 SC_FLUSH_DAT, /* Flush DAT file. This also creates segments without
62 a checkpoint */
63};
64
65/* Stage numbers of dirty block collection */
66enum {
67 NILFS_ST_INIT = 0,
68 NILFS_ST_GC, /* Collecting dirty blocks for GC */
69 NILFS_ST_FILE,
70 NILFS_ST_IFILE,
71 NILFS_ST_CPFILE,
72 NILFS_ST_SUFILE,
73 NILFS_ST_DAT,
74 NILFS_ST_SR, /* Super root */
75 NILFS_ST_DSYNC, /* Data sync blocks */
76 NILFS_ST_DONE,
77};
78
79/* State flags of collection */
80#define NILFS_CF_NODE 0x0001 /* Collecting node blocks */
81#define NILFS_CF_IFILE_STARTED 0x0002 /* IFILE stage has started */
82#define NILFS_CF_HISTORY_MASK (NILFS_CF_IFILE_STARTED)
83
84/* Operations depending on the construction mode and file type */
85struct nilfs_sc_operations {
86 int (*collect_data)(struct nilfs_sc_info *, struct buffer_head *,
87 struct inode *);
88 int (*collect_node)(struct nilfs_sc_info *, struct buffer_head *,
89 struct inode *);
90 int (*collect_bmap)(struct nilfs_sc_info *, struct buffer_head *,
91 struct inode *);
92 void (*write_data_binfo)(struct nilfs_sc_info *,
93 struct nilfs_segsum_pointer *,
94 union nilfs_binfo *);
95 void (*write_node_binfo)(struct nilfs_sc_info *,
96 struct nilfs_segsum_pointer *,
97 union nilfs_binfo *);
98};
99
100/*
101 * Other definitions
102 */
103static void nilfs_segctor_start_timer(struct nilfs_sc_info *);
104static void nilfs_segctor_do_flush(struct nilfs_sc_info *, int);
105static void nilfs_segctor_do_immediate_flush(struct nilfs_sc_info *);
106static void nilfs_dispose_list(struct nilfs_sb_info *, struct list_head *,
107 int);
108
109#define nilfs_cnt32_gt(a, b) \
110 (typecheck(__u32, a) && typecheck(__u32, b) && \
111 ((__s32)(b) - (__s32)(a) < 0))
112#define nilfs_cnt32_ge(a, b) \
113 (typecheck(__u32, a) && typecheck(__u32, b) && \
114 ((__s32)(a) - (__s32)(b) >= 0))
115#define nilfs_cnt32_lt(a, b) nilfs_cnt32_gt(b, a)
116#define nilfs_cnt32_le(a, b) nilfs_cnt32_ge(b, a)
117
118/*
119 * Transaction
120 */
121static struct kmem_cache *nilfs_transaction_cachep;
122
123/**
124 * nilfs_init_transaction_cache - create a cache for nilfs_transaction_info
125 *
126 * nilfs_init_transaction_cache() creates a slab cache for the struct
127 * nilfs_transaction_info.
128 *
129 * Return Value: On success, it returns 0. On error, one of the following
130 * negative error code is returned.
131 *
132 * %-ENOMEM - Insufficient memory available.
133 */
134int nilfs_init_transaction_cache(void)
135{
136 nilfs_transaction_cachep =
137 kmem_cache_create("nilfs2_transaction_cache",
138 sizeof(struct nilfs_transaction_info),
139 0, SLAB_RECLAIM_ACCOUNT, NULL);
140 return (nilfs_transaction_cachep == NULL) ? -ENOMEM : 0;
141}
142
143/**
144 * nilfs_detroy_transaction_cache - destroy the cache for transaction info
145 *
146 * nilfs_destroy_transaction_cache() frees the slab cache for the struct
147 * nilfs_transaction_info.
148 */
149void nilfs_destroy_transaction_cache(void)
150{
151 kmem_cache_destroy(nilfs_transaction_cachep);
152}
153
154static int nilfs_prepare_segment_lock(struct nilfs_transaction_info *ti)
155{
156 struct nilfs_transaction_info *cur_ti = current->journal_info;
157 void *save = NULL;
158
159 if (cur_ti) {
160 if (cur_ti->ti_magic == NILFS_TI_MAGIC)
161 return ++cur_ti->ti_count;
162 else {
163 /*
164 * If journal_info field is occupied by other FS,
165 * it is saved and will be restored on
166 * nilfs_transaction_commit().
167 */
168 printk(KERN_WARNING
169 "NILFS warning: journal info from a different "
170 "FS\n");
171 save = current->journal_info;
172 }
173 }
174 if (!ti) {
175 ti = kmem_cache_alloc(nilfs_transaction_cachep, GFP_NOFS);
176 if (!ti)
177 return -ENOMEM;
178 ti->ti_flags = NILFS_TI_DYNAMIC_ALLOC;
179 } else {
180 ti->ti_flags = 0;
181 }
182 ti->ti_count = 0;
183 ti->ti_save = save;
184 ti->ti_magic = NILFS_TI_MAGIC;
185 current->journal_info = ti;
186 return 0;
187}
188
189/**
190 * nilfs_transaction_begin - start indivisible file operations.
191 * @sb: super block
192 * @ti: nilfs_transaction_info
193 * @vacancy_check: flags for vacancy rate checks
194 *
195 * nilfs_transaction_begin() acquires a reader/writer semaphore, called
196 * the segment semaphore, to make a segment construction and write tasks
197 * exclusive. The function is used with nilfs_transaction_commit() in pairs.
198 * The region enclosed by these two functions can be nested. To avoid a
199 * deadlock, the semaphore is only acquired or released in the outermost call.
200 *
201 * This function allocates a nilfs_transaction_info struct to keep context
202 * information on it. It is initialized and hooked onto the current task in
203 * the outermost call. If a pre-allocated struct is given to @ti, it is used
204 * instead; othewise a new struct is assigned from a slab.
205 *
206 * When @vacancy_check flag is set, this function will check the amount of
207 * free space, and will wait for the GC to reclaim disk space if low capacity.
208 *
209 * Return Value: On success, 0 is returned. On error, one of the following
210 * negative error code is returned.
211 *
212 * %-ENOMEM - Insufficient memory available.
213 *
214 * %-ENOSPC - No space left on device
215 */
216int nilfs_transaction_begin(struct super_block *sb,
217 struct nilfs_transaction_info *ti,
218 int vacancy_check)
219{
220 struct nilfs_sb_info *sbi;
221 struct the_nilfs *nilfs;
222 int ret = nilfs_prepare_segment_lock(ti);
223
224 if (unlikely(ret < 0))
225 return ret;
226 if (ret > 0)
227 return 0;
228
229 sbi = NILFS_SB(sb);
230 nilfs = sbi->s_nilfs;
231 down_read(&nilfs->ns_segctor_sem);
232 if (vacancy_check && nilfs_near_disk_full(nilfs)) {
233 up_read(&nilfs->ns_segctor_sem);
234 ret = -ENOSPC;
235 goto failed;
236 }
237 return 0;
238
239 failed:
240 ti = current->journal_info;
241 current->journal_info = ti->ti_save;
242 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC)
243 kmem_cache_free(nilfs_transaction_cachep, ti);
244 return ret;
245}
246
247/**
248 * nilfs_transaction_commit - commit indivisible file operations.
249 * @sb: super block
250 *
251 * nilfs_transaction_commit() releases the read semaphore which is
252 * acquired by nilfs_transaction_begin(). This is only performed
253 * in outermost call of this function. If a commit flag is set,
254 * nilfs_transaction_commit() sets a timer to start the segment
255 * constructor. If a sync flag is set, it starts construction
256 * directly.
257 */
258int nilfs_transaction_commit(struct super_block *sb)
259{
260 struct nilfs_transaction_info *ti = current->journal_info;
261 struct nilfs_sb_info *sbi;
262 struct nilfs_sc_info *sci;
263 int err = 0;
264
265 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC);
266 ti->ti_flags |= NILFS_TI_COMMIT;
267 if (ti->ti_count > 0) {
268 ti->ti_count--;
269 return 0;
270 }
271 sbi = NILFS_SB(sb);
272 sci = NILFS_SC(sbi);
273 if (sci != NULL) {
274 if (ti->ti_flags & NILFS_TI_COMMIT)
275 nilfs_segctor_start_timer(sci);
276 if (atomic_read(&sbi->s_nilfs->ns_ndirtyblks) >
277 sci->sc_watermark)
278 nilfs_segctor_do_flush(sci, 0);
279 }
280 up_read(&sbi->s_nilfs->ns_segctor_sem);
281 current->journal_info = ti->ti_save;
282
283 if (ti->ti_flags & NILFS_TI_SYNC)
284 err = nilfs_construct_segment(sb);
285 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC)
286 kmem_cache_free(nilfs_transaction_cachep, ti);
287 return err;
288}
289
290void nilfs_transaction_abort(struct super_block *sb)
291{
292 struct nilfs_transaction_info *ti = current->journal_info;
293
294 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC);
295 if (ti->ti_count > 0) {
296 ti->ti_count--;
297 return;
298 }
299 up_read(&NILFS_SB(sb)->s_nilfs->ns_segctor_sem);
300
301 current->journal_info = ti->ti_save;
302 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC)
303 kmem_cache_free(nilfs_transaction_cachep, ti);
304}
305
306void nilfs_relax_pressure_in_lock(struct super_block *sb)
307{
308 struct nilfs_sb_info *sbi = NILFS_SB(sb);
309 struct nilfs_sc_info *sci = NILFS_SC(sbi);
310 struct the_nilfs *nilfs = sbi->s_nilfs;
311
312 if (!sci || !sci->sc_flush_request)
313 return;
314
315 set_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags);
316 up_read(&nilfs->ns_segctor_sem);
317
318 down_write(&nilfs->ns_segctor_sem);
319 if (sci->sc_flush_request &&
320 test_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags)) {
321 struct nilfs_transaction_info *ti = current->journal_info;
322
323 ti->ti_flags |= NILFS_TI_WRITER;
324 nilfs_segctor_do_immediate_flush(sci);
325 ti->ti_flags &= ~NILFS_TI_WRITER;
326 }
327 downgrade_write(&nilfs->ns_segctor_sem);
328}
329
330static void nilfs_transaction_lock(struct nilfs_sb_info *sbi,
331 struct nilfs_transaction_info *ti,
332 int gcflag)
333{
334 struct nilfs_transaction_info *cur_ti = current->journal_info;
335
336 WARN_ON(cur_ti);
337 ti->ti_flags = NILFS_TI_WRITER;
338 ti->ti_count = 0;
339 ti->ti_save = cur_ti;
340 ti->ti_magic = NILFS_TI_MAGIC;
341 INIT_LIST_HEAD(&ti->ti_garbage);
342 current->journal_info = ti;
343
344 for (;;) {
345 down_write(&sbi->s_nilfs->ns_segctor_sem);
346 if (!test_bit(NILFS_SC_PRIOR_FLUSH, &NILFS_SC(sbi)->sc_flags))
347 break;
348
349 nilfs_segctor_do_immediate_flush(NILFS_SC(sbi));
350
351 up_write(&sbi->s_nilfs->ns_segctor_sem);
352 yield();
353 }
354 if (gcflag)
355 ti->ti_flags |= NILFS_TI_GC;
356}
357
358static void nilfs_transaction_unlock(struct nilfs_sb_info *sbi)
359{
360 struct nilfs_transaction_info *ti = current->journal_info;
361
362 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC);
363 BUG_ON(ti->ti_count > 0);
364
365 up_write(&sbi->s_nilfs->ns_segctor_sem);
366 current->journal_info = ti->ti_save;
367 if (!list_empty(&ti->ti_garbage))
368 nilfs_dispose_list(sbi, &ti->ti_garbage, 0);
369}
370
371static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci,
372 struct nilfs_segsum_pointer *ssp,
373 unsigned bytes)
374{
375 struct nilfs_segment_buffer *segbuf = sci->sc_curseg;
376 unsigned blocksize = sci->sc_super->s_blocksize;
377 void *p;
378
379 if (unlikely(ssp->offset + bytes > blocksize)) {
380 ssp->offset = 0;
381 BUG_ON(NILFS_SEGBUF_BH_IS_LAST(ssp->bh,
382 &segbuf->sb_segsum_buffers));
383 ssp->bh = NILFS_SEGBUF_NEXT_BH(ssp->bh);
384 }
385 p = ssp->bh->b_data + ssp->offset;
386 ssp->offset += bytes;
387 return p;
388}
389
390/**
391 * nilfs_segctor_reset_segment_buffer - reset the current segment buffer
392 * @sci: nilfs_sc_info
393 */
394static int nilfs_segctor_reset_segment_buffer(struct nilfs_sc_info *sci)
395{
396 struct nilfs_segment_buffer *segbuf = sci->sc_curseg;
397 struct buffer_head *sumbh;
398 unsigned sumbytes;
399 unsigned flags = 0;
400 int err;
401
402 if (nilfs_doing_gc())
403 flags = NILFS_SS_GC;
404 err = nilfs_segbuf_reset(segbuf, flags, sci->sc_seg_ctime);
405 if (unlikely(err))
406 return err;
407
408 sumbh = NILFS_SEGBUF_FIRST_BH(&segbuf->sb_segsum_buffers);
409 sumbytes = segbuf->sb_sum.sumbytes;
410 sci->sc_finfo_ptr.bh = sumbh; sci->sc_finfo_ptr.offset = sumbytes;
411 sci->sc_binfo_ptr.bh = sumbh; sci->sc_binfo_ptr.offset = sumbytes;
412 sci->sc_blk_cnt = sci->sc_datablk_cnt = 0;
413 return 0;
414}
415
416static int nilfs_segctor_feed_segment(struct nilfs_sc_info *sci)
417{
418 sci->sc_nblk_this_inc += sci->sc_curseg->sb_sum.nblocks;
419 if (NILFS_SEGBUF_IS_LAST(sci->sc_curseg, &sci->sc_segbufs))
420 return -E2BIG; /* The current segment is filled up
421 (internal code) */
422 sci->sc_curseg = NILFS_NEXT_SEGBUF(sci->sc_curseg);
423 return nilfs_segctor_reset_segment_buffer(sci);
424}
425
426static int nilfs_segctor_add_super_root(struct nilfs_sc_info *sci)
427{
428 struct nilfs_segment_buffer *segbuf = sci->sc_curseg;
429 int err;
430
431 if (segbuf->sb_sum.nblocks >= segbuf->sb_rest_blocks) {
432 err = nilfs_segctor_feed_segment(sci);
433 if (err)
434 return err;
435 segbuf = sci->sc_curseg;
436 }
437 err = nilfs_segbuf_extend_payload(segbuf, &sci->sc_super_root);
438 if (likely(!err))
439 segbuf->sb_sum.flags |= NILFS_SS_SR;
440 return err;
441}
442
443/*
444 * Functions for making segment summary and payloads
445 */
446static int nilfs_segctor_segsum_block_required(
447 struct nilfs_sc_info *sci, const struct nilfs_segsum_pointer *ssp,
448 unsigned binfo_size)
449{
450 unsigned blocksize = sci->sc_super->s_blocksize;
451 /* Size of finfo and binfo is enough small against blocksize */
452
453 return ssp->offset + binfo_size +
454 (!sci->sc_blk_cnt ? sizeof(struct nilfs_finfo) : 0) >
455 blocksize;
456}
457
458static void nilfs_segctor_begin_finfo(struct nilfs_sc_info *sci,
459 struct inode *inode)
460{
461 sci->sc_curseg->sb_sum.nfinfo++;
462 sci->sc_binfo_ptr = sci->sc_finfo_ptr;
463 nilfs_segctor_map_segsum_entry(
464 sci, &sci->sc_binfo_ptr, sizeof(struct nilfs_finfo));
465
466 if (inode->i_sb && !test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags))
467 set_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags);
468 /* skip finfo */
469}
470
471static void nilfs_segctor_end_finfo(struct nilfs_sc_info *sci,
472 struct inode *inode)
473{
474 struct nilfs_finfo *finfo;
475 struct nilfs_inode_info *ii;
476 struct nilfs_segment_buffer *segbuf;
477
478 if (sci->sc_blk_cnt == 0)
479 return;
480
481 ii = NILFS_I(inode);
482 finfo = nilfs_segctor_map_segsum_entry(sci, &sci->sc_finfo_ptr,
483 sizeof(*finfo));
484 finfo->fi_ino = cpu_to_le64(inode->i_ino);
485 finfo->fi_nblocks = cpu_to_le32(sci->sc_blk_cnt);
486 finfo->fi_ndatablk = cpu_to_le32(sci->sc_datablk_cnt);
487 finfo->fi_cno = cpu_to_le64(ii->i_cno);
488
489 segbuf = sci->sc_curseg;
490 segbuf->sb_sum.sumbytes = sci->sc_binfo_ptr.offset +
491 sci->sc_super->s_blocksize * (segbuf->sb_sum.nsumblk - 1);
492 sci->sc_finfo_ptr = sci->sc_binfo_ptr;
493 sci->sc_blk_cnt = sci->sc_datablk_cnt = 0;
494}
495
496static int nilfs_segctor_add_file_block(struct nilfs_sc_info *sci,
497 struct buffer_head *bh,
498 struct inode *inode,
499 unsigned binfo_size)
500{
501 struct nilfs_segment_buffer *segbuf;
502 int required, err = 0;
503
504 retry:
505 segbuf = sci->sc_curseg;
506 required = nilfs_segctor_segsum_block_required(
507 sci, &sci->sc_binfo_ptr, binfo_size);
508 if (segbuf->sb_sum.nblocks + required + 1 > segbuf->sb_rest_blocks) {
509 nilfs_segctor_end_finfo(sci, inode);
510 err = nilfs_segctor_feed_segment(sci);
511 if (err)
512 return err;
513 goto retry;
514 }
515 if (unlikely(required)) {
516 err = nilfs_segbuf_extend_segsum(segbuf);
517 if (unlikely(err))
518 goto failed;
519 }
520 if (sci->sc_blk_cnt == 0)
521 nilfs_segctor_begin_finfo(sci, inode);
522
523 nilfs_segctor_map_segsum_entry(sci, &sci->sc_binfo_ptr, binfo_size);
524 /* Substitution to vblocknr is delayed until update_blocknr() */
525 nilfs_segbuf_add_file_buffer(segbuf, bh);
526 sci->sc_blk_cnt++;
527 failed:
528 return err;
529}
530
531static int nilfs_handle_bmap_error(int err, const char *fname,
532 struct inode *inode, struct super_block *sb)
533{
534 if (err == -EINVAL) {
535 nilfs_error(sb, fname, "broken bmap (inode=%lu)\n",
536 inode->i_ino);
537 err = -EIO;
538 }
539 return err;
540}
541
542/*
543 * Callback functions that enumerate, mark, and collect dirty blocks
544 */
545static int nilfs_collect_file_data(struct nilfs_sc_info *sci,
546 struct buffer_head *bh, struct inode *inode)
547{
548 int err;
549
550 err = nilfs_bmap_propagate(NILFS_I(inode)->i_bmap, bh);
551 if (unlikely(err < 0))
552 return nilfs_handle_bmap_error(err, __func__, inode,
553 sci->sc_super);
554
555 err = nilfs_segctor_add_file_block(sci, bh, inode,
556 sizeof(struct nilfs_binfo_v));
557 if (!err)
558 sci->sc_datablk_cnt++;
559 return err;
560}
561
562static int nilfs_collect_file_node(struct nilfs_sc_info *sci,
563 struct buffer_head *bh,
564 struct inode *inode)
565{
566 int err;
567
568 err = nilfs_bmap_propagate(NILFS_I(inode)->i_bmap, bh);
569 if (unlikely(err < 0))
570 return nilfs_handle_bmap_error(err, __func__, inode,
571 sci->sc_super);
572 return 0;
573}
574
575static int nilfs_collect_file_bmap(struct nilfs_sc_info *sci,
576 struct buffer_head *bh,
577 struct inode *inode)
578{
579 WARN_ON(!buffer_dirty(bh));
580 return nilfs_segctor_add_file_block(sci, bh, inode, sizeof(__le64));
581}
582
583static void nilfs_write_file_data_binfo(struct nilfs_sc_info *sci,
584 struct nilfs_segsum_pointer *ssp,
585 union nilfs_binfo *binfo)
586{
587 struct nilfs_binfo_v *binfo_v = nilfs_segctor_map_segsum_entry(
588 sci, ssp, sizeof(*binfo_v));
589 *binfo_v = binfo->bi_v;
590}
591
592static void nilfs_write_file_node_binfo(struct nilfs_sc_info *sci,
593 struct nilfs_segsum_pointer *ssp,
594 union nilfs_binfo *binfo)
595{
596 __le64 *vblocknr = nilfs_segctor_map_segsum_entry(
597 sci, ssp, sizeof(*vblocknr));
598 *vblocknr = binfo->bi_v.bi_vblocknr;
599}
600
601struct nilfs_sc_operations nilfs_sc_file_ops = {
602 .collect_data = nilfs_collect_file_data,
603 .collect_node = nilfs_collect_file_node,
604 .collect_bmap = nilfs_collect_file_bmap,
605 .write_data_binfo = nilfs_write_file_data_binfo,
606 .write_node_binfo = nilfs_write_file_node_binfo,
607};
608
609static int nilfs_collect_dat_data(struct nilfs_sc_info *sci,
610 struct buffer_head *bh, struct inode *inode)
611{
612 int err;
613
614 err = nilfs_bmap_propagate(NILFS_I(inode)->i_bmap, bh);
615 if (unlikely(err < 0))
616 return nilfs_handle_bmap_error(err, __func__, inode,
617 sci->sc_super);
618
619 err = nilfs_segctor_add_file_block(sci, bh, inode, sizeof(__le64));
620 if (!err)
621 sci->sc_datablk_cnt++;
622 return err;
623}
624
625static int nilfs_collect_dat_bmap(struct nilfs_sc_info *sci,
626 struct buffer_head *bh, struct inode *inode)
627{
628 WARN_ON(!buffer_dirty(bh));
629 return nilfs_segctor_add_file_block(sci, bh, inode,
630 sizeof(struct nilfs_binfo_dat));
631}
632
633static void nilfs_write_dat_data_binfo(struct nilfs_sc_info *sci,
634 struct nilfs_segsum_pointer *ssp,
635 union nilfs_binfo *binfo)
636{
637 __le64 *blkoff = nilfs_segctor_map_segsum_entry(sci, ssp,
638 sizeof(*blkoff));
639 *blkoff = binfo->bi_dat.bi_blkoff;
640}
641
642static void nilfs_write_dat_node_binfo(struct nilfs_sc_info *sci,
643 struct nilfs_segsum_pointer *ssp,
644 union nilfs_binfo *binfo)
645{
646 struct nilfs_binfo_dat *binfo_dat =
647 nilfs_segctor_map_segsum_entry(sci, ssp, sizeof(*binfo_dat));
648 *binfo_dat = binfo->bi_dat;
649}
650
651struct nilfs_sc_operations nilfs_sc_dat_ops = {
652 .collect_data = nilfs_collect_dat_data,
653 .collect_node = nilfs_collect_file_node,
654 .collect_bmap = nilfs_collect_dat_bmap,
655 .write_data_binfo = nilfs_write_dat_data_binfo,
656 .write_node_binfo = nilfs_write_dat_node_binfo,
657};
658
659struct nilfs_sc_operations nilfs_sc_dsync_ops = {
660 .collect_data = nilfs_collect_file_data,
661 .collect_node = NULL,
662 .collect_bmap = NULL,
663 .write_data_binfo = nilfs_write_file_data_binfo,
664 .write_node_binfo = NULL,
665};
666
667static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode,
668 struct list_head *listp,
669 size_t nlimit,
670 loff_t start, loff_t end)
671{
672 struct address_space *mapping = inode->i_mapping;
673 struct pagevec pvec;
674 pgoff_t index = 0, last = ULONG_MAX;
675 size_t ndirties = 0;
676 int i;
677
678 if (unlikely(start != 0 || end != LLONG_MAX)) {
679 /*
680 * A valid range is given for sync-ing data pages. The
681 * range is rounded to per-page; extra dirty buffers
682 * may be included if blocksize < pagesize.
683 */
684 index = start >> PAGE_SHIFT;
685 last = end >> PAGE_SHIFT;
686 }
687 pagevec_init(&pvec, 0);
688 repeat:
689 if (unlikely(index > last) ||
690 !pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY,
691 min_t(pgoff_t, last - index,
692 PAGEVEC_SIZE - 1) + 1))
693 return ndirties;
694
695 for (i = 0; i < pagevec_count(&pvec); i++) {
696 struct buffer_head *bh, *head;
697 struct page *page = pvec.pages[i];
698
699 if (unlikely(page->index > last))
700 break;
701
702 if (mapping->host) {
703 lock_page(page);
704 if (!page_has_buffers(page))
705 create_empty_buffers(page,
706 1 << inode->i_blkbits, 0);
707 unlock_page(page);
708 }
709
710 bh = head = page_buffers(page);
711 do {
712 if (!buffer_dirty(bh))
713 continue;
714 get_bh(bh);
715 list_add_tail(&bh->b_assoc_buffers, listp);
716 ndirties++;
717 if (unlikely(ndirties >= nlimit)) {
718 pagevec_release(&pvec);
719 cond_resched();
720 return ndirties;
721 }
722 } while (bh = bh->b_this_page, bh != head);
723 }
724 pagevec_release(&pvec);
725 cond_resched();
726 goto repeat;
727}
728
729static void nilfs_lookup_dirty_node_buffers(struct inode *inode,
730 struct list_head *listp)
731{
732 struct nilfs_inode_info *ii = NILFS_I(inode);
733 struct address_space *mapping = &ii->i_btnode_cache;
734 struct pagevec pvec;
735 struct buffer_head *bh, *head;
736 unsigned int i;
737 pgoff_t index = 0;
738
739 pagevec_init(&pvec, 0);
740
741 while (pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY,
742 PAGEVEC_SIZE)) {
743 for (i = 0; i < pagevec_count(&pvec); i++) {
744 bh = head = page_buffers(pvec.pages[i]);
745 do {
746 if (buffer_dirty(bh)) {
747 get_bh(bh);
748 list_add_tail(&bh->b_assoc_buffers,
749 listp);
750 }
751 bh = bh->b_this_page;
752 } while (bh != head);
753 }
754 pagevec_release(&pvec);
755 cond_resched();
756 }
757}
758
759static void nilfs_dispose_list(struct nilfs_sb_info *sbi,
760 struct list_head *head, int force)
761{
762 struct nilfs_inode_info *ii, *n;
763 struct nilfs_inode_info *ivec[SC_N_INODEVEC], **pii;
764 unsigned nv = 0;
765
766 while (!list_empty(head)) {
767 spin_lock(&sbi->s_inode_lock);
768 list_for_each_entry_safe(ii, n, head, i_dirty) {
769 list_del_init(&ii->i_dirty);
770 if (force) {
771 if (unlikely(ii->i_bh)) {
772 brelse(ii->i_bh);
773 ii->i_bh = NULL;
774 }
775 } else if (test_bit(NILFS_I_DIRTY, &ii->i_state)) {
776 set_bit(NILFS_I_QUEUED, &ii->i_state);
777 list_add_tail(&ii->i_dirty,
778 &sbi->s_dirty_files);
779 continue;
780 }
781 ivec[nv++] = ii;
782 if (nv == SC_N_INODEVEC)
783 break;
784 }
785 spin_unlock(&sbi->s_inode_lock);
786
787 for (pii = ivec; nv > 0; pii++, nv--)
788 iput(&(*pii)->vfs_inode);
789 }
790}
791
792static int nilfs_test_metadata_dirty(struct nilfs_sb_info *sbi)
793{
794 struct the_nilfs *nilfs = sbi->s_nilfs;
795 int ret = 0;
796
797 if (nilfs_mdt_fetch_dirty(sbi->s_ifile))
798 ret++;
799 if (nilfs_mdt_fetch_dirty(nilfs->ns_cpfile))
800 ret++;
801 if (nilfs_mdt_fetch_dirty(nilfs->ns_sufile))
802 ret++;
803 if (ret || nilfs_doing_gc())
804 if (nilfs_mdt_fetch_dirty(nilfs_dat_inode(nilfs)))
805 ret++;
806 return ret;
807}
808
809static int nilfs_segctor_clean(struct nilfs_sc_info *sci)
810{
811 return list_empty(&sci->sc_dirty_files) &&
812 !test_bit(NILFS_SC_DIRTY, &sci->sc_flags) &&
813 list_empty(&sci->sc_cleaning_segments) &&
814 (!nilfs_doing_gc() || list_empty(&sci->sc_gc_inodes));
815}
816
817static int nilfs_segctor_confirm(struct nilfs_sc_info *sci)
818{
819 struct nilfs_sb_info *sbi = sci->sc_sbi;
820 int ret = 0;
821
822 if (nilfs_test_metadata_dirty(sbi))
823 set_bit(NILFS_SC_DIRTY, &sci->sc_flags);
824
825 spin_lock(&sbi->s_inode_lock);
826 if (list_empty(&sbi->s_dirty_files) && nilfs_segctor_clean(sci))
827 ret++;
828
829 spin_unlock(&sbi->s_inode_lock);
830 return ret;
831}
832
833static void nilfs_segctor_clear_metadata_dirty(struct nilfs_sc_info *sci)
834{
835 struct nilfs_sb_info *sbi = sci->sc_sbi;
836 struct the_nilfs *nilfs = sbi->s_nilfs;
837
838 nilfs_mdt_clear_dirty(sbi->s_ifile);
839 nilfs_mdt_clear_dirty(nilfs->ns_cpfile);
840 nilfs_mdt_clear_dirty(nilfs->ns_sufile);
841 nilfs_mdt_clear_dirty(nilfs_dat_inode(nilfs));
842}
843
844static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci)
845{
846 struct the_nilfs *nilfs = sci->sc_sbi->s_nilfs;
847 struct buffer_head *bh_cp;
848 struct nilfs_checkpoint *raw_cp;
849 int err;
850
851 /* XXX: this interface will be changed */
852 err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, 1,
853 &raw_cp, &bh_cp);
854 if (likely(!err)) {
855 /* The following code is duplicated with cpfile. But, it is
856 needed to collect the checkpoint even if it was not newly
857 created */
858 nilfs_mdt_mark_buffer_dirty(bh_cp);
859 nilfs_mdt_mark_dirty(nilfs->ns_cpfile);
860 nilfs_cpfile_put_checkpoint(
861 nilfs->ns_cpfile, nilfs->ns_cno, bh_cp);
862 } else
863 WARN_ON(err == -EINVAL || err == -ENOENT);
864
865 return err;
866}
867
868static int nilfs_segctor_fill_in_checkpoint(struct nilfs_sc_info *sci)
869{
870 struct nilfs_sb_info *sbi = sci->sc_sbi;
871 struct the_nilfs *nilfs = sbi->s_nilfs;
872 struct buffer_head *bh_cp;
873 struct nilfs_checkpoint *raw_cp;
874 int err;
875
876 err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, 0,
877 &raw_cp, &bh_cp);
878 if (unlikely(err)) {
879 WARN_ON(err == -EINVAL || err == -ENOENT);
880 goto failed_ibh;
881 }
882 raw_cp->cp_snapshot_list.ssl_next = 0;
883 raw_cp->cp_snapshot_list.ssl_prev = 0;
884 raw_cp->cp_inodes_count =
885 cpu_to_le64(atomic_read(&sbi->s_inodes_count));
886 raw_cp->cp_blocks_count =
887 cpu_to_le64(atomic_read(&sbi->s_blocks_count));
888 raw_cp->cp_nblk_inc =
889 cpu_to_le64(sci->sc_nblk_inc + sci->sc_nblk_this_inc);
890 raw_cp->cp_create = cpu_to_le64(sci->sc_seg_ctime);
891 raw_cp->cp_cno = cpu_to_le64(nilfs->ns_cno);
892
893 if (test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags))
894 nilfs_checkpoint_clear_minor(raw_cp);
895 else
896 nilfs_checkpoint_set_minor(raw_cp);
897
898 nilfs_write_inode_common(sbi->s_ifile, &raw_cp->cp_ifile_inode, 1);
899 nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, bh_cp);
900 return 0;
901
902 failed_ibh:
903 return err;
904}
905
906static void nilfs_fill_in_file_bmap(struct inode *ifile,
907 struct nilfs_inode_info *ii)
908
909{
910 struct buffer_head *ibh;
911 struct nilfs_inode *raw_inode;
912
913 if (test_bit(NILFS_I_BMAP, &ii->i_state)) {
914 ibh = ii->i_bh;
915 BUG_ON(!ibh);
916 raw_inode = nilfs_ifile_map_inode(ifile, ii->vfs_inode.i_ino,
917 ibh);
918 nilfs_bmap_write(ii->i_bmap, raw_inode);
919 nilfs_ifile_unmap_inode(ifile, ii->vfs_inode.i_ino, ibh);
920 }
921}
922
923static void nilfs_segctor_fill_in_file_bmap(struct nilfs_sc_info *sci,
924 struct inode *ifile)
925{
926 struct nilfs_inode_info *ii;
927
928 list_for_each_entry(ii, &sci->sc_dirty_files, i_dirty) {
929 nilfs_fill_in_file_bmap(ifile, ii);
930 set_bit(NILFS_I_COLLECTED, &ii->i_state);
931 }
932}
933
934/*
935 * CRC calculation routines
936 */
937static void nilfs_fill_in_super_root_crc(struct buffer_head *bh_sr, u32 seed)
938{
939 struct nilfs_super_root *raw_sr =
940 (struct nilfs_super_root *)bh_sr->b_data;
941 u32 crc;
942
943 crc = crc32_le(seed,
944 (unsigned char *)raw_sr + sizeof(raw_sr->sr_sum),
945 NILFS_SR_BYTES - sizeof(raw_sr->sr_sum));
946 raw_sr->sr_sum = cpu_to_le32(crc);
947}
948
949static void nilfs_segctor_fill_in_checksums(struct nilfs_sc_info *sci,
950 u32 seed)
951{
952 struct nilfs_segment_buffer *segbuf;
953
954 if (sci->sc_super_root)
955 nilfs_fill_in_super_root_crc(sci->sc_super_root, seed);
956
957 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
958 nilfs_segbuf_fill_in_segsum_crc(segbuf, seed);
959 nilfs_segbuf_fill_in_data_crc(segbuf, seed);
960 }
961}
962
963static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci,
964 struct the_nilfs *nilfs)
965{
966 struct buffer_head *bh_sr = sci->sc_super_root;
967 struct nilfs_super_root *raw_sr =
968 (struct nilfs_super_root *)bh_sr->b_data;
969 unsigned isz = nilfs->ns_inode_size;
970
971 raw_sr->sr_bytes = cpu_to_le16(NILFS_SR_BYTES);
972 raw_sr->sr_nongc_ctime
973 = cpu_to_le64(nilfs_doing_gc() ?
974 nilfs->ns_nongc_ctime : sci->sc_seg_ctime);
975 raw_sr->sr_flags = 0;
976
977 nilfs_mdt_write_inode_direct(
978 nilfs_dat_inode(nilfs), bh_sr, NILFS_SR_DAT_OFFSET(isz));
979 nilfs_mdt_write_inode_direct(
980 nilfs->ns_cpfile, bh_sr, NILFS_SR_CPFILE_OFFSET(isz));
981 nilfs_mdt_write_inode_direct(
982 nilfs->ns_sufile, bh_sr, NILFS_SR_SUFILE_OFFSET(isz));
983}
984
985static void nilfs_redirty_inodes(struct list_head *head)
986{
987 struct nilfs_inode_info *ii;
988
989 list_for_each_entry(ii, head, i_dirty) {
990 if (test_bit(NILFS_I_COLLECTED, &ii->i_state))
991 clear_bit(NILFS_I_COLLECTED, &ii->i_state);
992 }
993}
994
995static void nilfs_drop_collected_inodes(struct list_head *head)
996{
997 struct nilfs_inode_info *ii;
998
999 list_for_each_entry(ii, head, i_dirty) {
1000 if (!test_and_clear_bit(NILFS_I_COLLECTED, &ii->i_state))
1001 continue;
1002
1003 clear_bit(NILFS_I_INODE_DIRTY, &ii->i_state);
1004 set_bit(NILFS_I_UPDATED, &ii->i_state);
1005 }
1006}
1007
1008static void nilfs_segctor_cancel_free_segments(struct nilfs_sc_info *sci,
1009 struct inode *sufile)
1010
1011{
1012 struct list_head *head = &sci->sc_cleaning_segments;
1013 struct nilfs_segment_entry *ent;
1014 int err;
1015
1016 list_for_each_entry(ent, head, list) {
1017 if (!(ent->flags & NILFS_SLH_FREED))
1018 break;
1019 err = nilfs_sufile_cancel_free(sufile, ent->segnum);
1020 WARN_ON(err); /* do not happen */
1021 ent->flags &= ~NILFS_SLH_FREED;
1022 }
1023}
1024
1025static int nilfs_segctor_prepare_free_segments(struct nilfs_sc_info *sci,
1026 struct inode *sufile)
1027{
1028 struct list_head *head = &sci->sc_cleaning_segments;
1029 struct nilfs_segment_entry *ent;
1030 int err;
1031
1032 list_for_each_entry(ent, head, list) {
1033 err = nilfs_sufile_free(sufile, ent->segnum);
1034 if (unlikely(err))
1035 return err;
1036 ent->flags |= NILFS_SLH_FREED;
1037 }
1038 return 0;
1039}
1040
1041static void nilfs_segctor_commit_free_segments(struct nilfs_sc_info *sci)
1042{
1043 nilfs_dispose_segment_list(&sci->sc_cleaning_segments);
1044}
1045
1046static int nilfs_segctor_apply_buffers(struct nilfs_sc_info *sci,
1047 struct inode *inode,
1048 struct list_head *listp,
1049 int (*collect)(struct nilfs_sc_info *,
1050 struct buffer_head *,
1051 struct inode *))
1052{
1053 struct buffer_head *bh, *n;
1054 int err = 0;
1055
1056 if (collect) {
1057 list_for_each_entry_safe(bh, n, listp, b_assoc_buffers) {
1058 list_del_init(&bh->b_assoc_buffers);
1059 err = collect(sci, bh, inode);
1060 brelse(bh);
1061 if (unlikely(err))
1062 goto dispose_buffers;
1063 }
1064 return 0;
1065 }
1066
1067 dispose_buffers:
1068 while (!list_empty(listp)) {
1069 bh = list_entry(listp->next, struct buffer_head,
1070 b_assoc_buffers);
1071 list_del_init(&bh->b_assoc_buffers);
1072 brelse(bh);
1073 }
1074 return err;
1075}
1076
1077static size_t nilfs_segctor_buffer_rest(struct nilfs_sc_info *sci)
1078{
1079 /* Remaining number of blocks within segment buffer */
1080 return sci->sc_segbuf_nblocks -
1081 (sci->sc_nblk_this_inc + sci->sc_curseg->sb_sum.nblocks);
1082}
1083
1084static int nilfs_segctor_scan_file(struct nilfs_sc_info *sci,
1085 struct inode *inode,
1086 struct nilfs_sc_operations *sc_ops)
1087{
1088 LIST_HEAD(data_buffers);
1089 LIST_HEAD(node_buffers);
1090 int err;
1091
1092 if (!(sci->sc_stage.flags & NILFS_CF_NODE)) {
1093 size_t n, rest = nilfs_segctor_buffer_rest(sci);
1094
1095 n = nilfs_lookup_dirty_data_buffers(
1096 inode, &data_buffers, rest + 1, 0, LLONG_MAX);
1097 if (n > rest) {
1098 err = nilfs_segctor_apply_buffers(
1099 sci, inode, &data_buffers,
1100 sc_ops->collect_data);
1101 BUG_ON(!err); /* always receive -E2BIG or true error */
1102 goto break_or_fail;
1103 }
1104 }
1105 nilfs_lookup_dirty_node_buffers(inode, &node_buffers);
1106
1107 if (!(sci->sc_stage.flags & NILFS_CF_NODE)) {
1108 err = nilfs_segctor_apply_buffers(
1109 sci, inode, &data_buffers, sc_ops->collect_data);
1110 if (unlikely(err)) {
1111 /* dispose node list */
1112 nilfs_segctor_apply_buffers(
1113 sci, inode, &node_buffers, NULL);
1114 goto break_or_fail;
1115 }
1116 sci->sc_stage.flags |= NILFS_CF_NODE;
1117 }
1118 /* Collect node */
1119 err = nilfs_segctor_apply_buffers(
1120 sci, inode, &node_buffers, sc_ops->collect_node);
1121 if (unlikely(err))
1122 goto break_or_fail;
1123
1124 nilfs_bmap_lookup_dirty_buffers(NILFS_I(inode)->i_bmap, &node_buffers);
1125 err = nilfs_segctor_apply_buffers(
1126 sci, inode, &node_buffers, sc_ops->collect_bmap);
1127 if (unlikely(err))
1128 goto break_or_fail;
1129
1130 nilfs_segctor_end_finfo(sci, inode);
1131 sci->sc_stage.flags &= ~NILFS_CF_NODE;
1132
1133 break_or_fail:
1134 return err;
1135}
1136
1137static int nilfs_segctor_scan_file_dsync(struct nilfs_sc_info *sci,
1138 struct inode *inode)
1139{
1140 LIST_HEAD(data_buffers);
1141 size_t n, rest = nilfs_segctor_buffer_rest(sci);
1142 int err;
1143
1144 n = nilfs_lookup_dirty_data_buffers(inode, &data_buffers, rest + 1,
1145 sci->sc_dsync_start,
1146 sci->sc_dsync_end);
1147
1148 err = nilfs_segctor_apply_buffers(sci, inode, &data_buffers,
1149 nilfs_collect_file_data);
1150 if (!err) {
1151 nilfs_segctor_end_finfo(sci, inode);
1152 BUG_ON(n > rest);
1153 /* always receive -E2BIG or true error if n > rest */
1154 }
1155 return err;
1156}
1157
1158static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mode)
1159{
1160 struct nilfs_sb_info *sbi = sci->sc_sbi;
1161 struct the_nilfs *nilfs = sbi->s_nilfs;
1162 struct list_head *head;
1163 struct nilfs_inode_info *ii;
1164 int err = 0;
1165
1166 switch (sci->sc_stage.scnt) {
1167 case NILFS_ST_INIT:
1168 /* Pre-processes */
1169 sci->sc_stage.flags = 0;
1170
1171 if (!test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags)) {
1172 sci->sc_nblk_inc = 0;
1173 sci->sc_curseg->sb_sum.flags = NILFS_SS_LOGBGN;
1174 if (mode == SC_LSEG_DSYNC) {
1175 sci->sc_stage.scnt = NILFS_ST_DSYNC;
1176 goto dsync_mode;
1177 }
1178 }
1179
1180 sci->sc_stage.dirty_file_ptr = NULL;
1181 sci->sc_stage.gc_inode_ptr = NULL;
1182 if (mode == SC_FLUSH_DAT) {
1183 sci->sc_stage.scnt = NILFS_ST_DAT;
1184 goto dat_stage;
1185 }
1186 sci->sc_stage.scnt++; /* Fall through */
1187 case NILFS_ST_GC:
1188 if (nilfs_doing_gc()) {
1189 head = &sci->sc_gc_inodes;
1190 ii = list_prepare_entry(sci->sc_stage.gc_inode_ptr,
1191 head, i_dirty);
1192 list_for_each_entry_continue(ii, head, i_dirty) {
1193 err = nilfs_segctor_scan_file(
1194 sci, &ii->vfs_inode,
1195 &nilfs_sc_file_ops);
1196 if (unlikely(err)) {
1197 sci->sc_stage.gc_inode_ptr = list_entry(
1198 ii->i_dirty.prev,
1199 struct nilfs_inode_info,
1200 i_dirty);
1201 goto break_or_fail;
1202 }
1203 set_bit(NILFS_I_COLLECTED, &ii->i_state);
1204 }
1205 sci->sc_stage.gc_inode_ptr = NULL;
1206 }
1207 sci->sc_stage.scnt++; /* Fall through */
1208 case NILFS_ST_FILE:
1209 head = &sci->sc_dirty_files;
1210 ii = list_prepare_entry(sci->sc_stage.dirty_file_ptr, head,
1211 i_dirty);
1212 list_for_each_entry_continue(ii, head, i_dirty) {
1213 clear_bit(NILFS_I_DIRTY, &ii->i_state);
1214
1215 err = nilfs_segctor_scan_file(sci, &ii->vfs_inode,
1216 &nilfs_sc_file_ops);
1217 if (unlikely(err)) {
1218 sci->sc_stage.dirty_file_ptr =
1219 list_entry(ii->i_dirty.prev,
1220 struct nilfs_inode_info,
1221 i_dirty);
1222 goto break_or_fail;
1223 }
1224 /* sci->sc_stage.dirty_file_ptr = NILFS_I(inode); */
1225 /* XXX: required ? */
1226 }
1227 sci->sc_stage.dirty_file_ptr = NULL;
1228 if (mode == SC_FLUSH_FILE) {
1229 sci->sc_stage.scnt = NILFS_ST_DONE;
1230 return 0;
1231 }
1232 sci->sc_stage.scnt++;
1233 sci->sc_stage.flags |= NILFS_CF_IFILE_STARTED;
1234 /* Fall through */
1235 case NILFS_ST_IFILE:
1236 err = nilfs_segctor_scan_file(sci, sbi->s_ifile,
1237 &nilfs_sc_file_ops);
1238 if (unlikely(err))
1239 break;
1240 sci->sc_stage.scnt++;
1241 /* Creating a checkpoint */
1242 err = nilfs_segctor_create_checkpoint(sci);
1243 if (unlikely(err))
1244 break;
1245 /* Fall through */
1246 case NILFS_ST_CPFILE:
1247 err = nilfs_segctor_scan_file(sci, nilfs->ns_cpfile,
1248 &nilfs_sc_file_ops);
1249 if (unlikely(err))
1250 break;
1251 sci->sc_stage.scnt++; /* Fall through */
1252 case NILFS_ST_SUFILE:
1253 err = nilfs_segctor_prepare_free_segments(sci,
1254 nilfs->ns_sufile);
1255 if (unlikely(err))
1256 break;
1257 err = nilfs_segctor_scan_file(sci, nilfs->ns_sufile,
1258 &nilfs_sc_file_ops);
1259 if (unlikely(err))
1260 break;
1261 sci->sc_stage.scnt++; /* Fall through */
1262 case NILFS_ST_DAT:
1263 dat_stage:
1264 err = nilfs_segctor_scan_file(sci, nilfs_dat_inode(nilfs),
1265 &nilfs_sc_dat_ops);
1266 if (unlikely(err))
1267 break;
1268 if (mode == SC_FLUSH_DAT) {
1269 sci->sc_stage.scnt = NILFS_ST_DONE;
1270 return 0;
1271 }
1272 sci->sc_stage.scnt++; /* Fall through */
1273 case NILFS_ST_SR:
1274 if (mode == SC_LSEG_SR) {
1275 /* Appending a super root */
1276 err = nilfs_segctor_add_super_root(sci);
1277 if (unlikely(err))
1278 break;
1279 }
1280 /* End of a logical segment */
1281 sci->sc_curseg->sb_sum.flags |= NILFS_SS_LOGEND;
1282 sci->sc_stage.scnt = NILFS_ST_DONE;
1283 return 0;
1284 case NILFS_ST_DSYNC:
1285 dsync_mode:
1286 sci->sc_curseg->sb_sum.flags |= NILFS_SS_SYNDT;
1287 ii = sci->sc_dsync_inode;
1288 if (!test_bit(NILFS_I_BUSY, &ii->i_state))
1289 break;
1290
1291 err = nilfs_segctor_scan_file_dsync(sci, &ii->vfs_inode);
1292 if (unlikely(err))
1293 break;
1294 sci->sc_curseg->sb_sum.flags |= NILFS_SS_LOGEND;
1295 sci->sc_stage.scnt = NILFS_ST_DONE;
1296 return 0;
1297 case NILFS_ST_DONE:
1298 return 0;
1299 default:
1300 BUG();
1301 }
1302
1303 break_or_fail:
1304 return err;
1305}
1306
1307static int nilfs_touch_segusage(struct inode *sufile, __u64 segnum)
1308{
1309 struct buffer_head *bh_su;
1310 struct nilfs_segment_usage *raw_su;
1311 int err;
1312
1313 err = nilfs_sufile_get_segment_usage(sufile, segnum, &raw_su, &bh_su);
1314 if (unlikely(err))
1315 return err;
1316 nilfs_mdt_mark_buffer_dirty(bh_su);
1317 nilfs_mdt_mark_dirty(sufile);
1318 nilfs_sufile_put_segment_usage(sufile, segnum, bh_su);
1319 return 0;
1320}
1321
1322static int nilfs_segctor_begin_construction(struct nilfs_sc_info *sci,
1323 struct the_nilfs *nilfs)
1324{
1325 struct nilfs_segment_buffer *segbuf, *n;
1326 __u64 nextnum;
1327 int err;
1328
1329 if (list_empty(&sci->sc_segbufs)) {
1330 segbuf = nilfs_segbuf_new(sci->sc_super);
1331 if (unlikely(!segbuf))
1332 return -ENOMEM;
1333 list_add(&segbuf->sb_list, &sci->sc_segbufs);
1334 } else
1335 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs);
1336
1337 nilfs_segbuf_map(segbuf, nilfs->ns_segnum, nilfs->ns_pseg_offset,
1338 nilfs);
1339
1340 if (segbuf->sb_rest_blocks < NILFS_PSEG_MIN_BLOCKS) {
1341 nilfs_shift_to_next_segment(nilfs);
1342 nilfs_segbuf_map(segbuf, nilfs->ns_segnum, 0, nilfs);
1343 }
1344 sci->sc_segbuf_nblocks = segbuf->sb_rest_blocks;
1345
1346 err = nilfs_touch_segusage(nilfs->ns_sufile, segbuf->sb_segnum);
1347 if (unlikely(err))
1348 return err;
1349
1350 if (nilfs->ns_segnum == nilfs->ns_nextnum) {
1351 /* Start from the head of a new full segment */
1352 err = nilfs_sufile_alloc(nilfs->ns_sufile, &nextnum);
1353 if (unlikely(err))
1354 return err;
1355 } else
1356 nextnum = nilfs->ns_nextnum;
1357
1358 segbuf->sb_sum.seg_seq = nilfs->ns_seg_seq;
1359 nilfs_segbuf_set_next_segnum(segbuf, nextnum, nilfs);
1360
1361 /* truncating segment buffers */
1362 list_for_each_entry_safe_continue(segbuf, n, &sci->sc_segbufs,
1363 sb_list) {
1364 list_del_init(&segbuf->sb_list);
1365 nilfs_segbuf_free(segbuf);
1366 }
1367 return 0;
1368}
1369
1370static int nilfs_segctor_extend_segments(struct nilfs_sc_info *sci,
1371 struct the_nilfs *nilfs, int nadd)
1372{
1373 struct nilfs_segment_buffer *segbuf, *prev, *n;
1374 struct inode *sufile = nilfs->ns_sufile;
1375 __u64 nextnextnum;
1376 LIST_HEAD(list);
1377 int err, ret, i;
1378
1379 prev = NILFS_LAST_SEGBUF(&sci->sc_segbufs);
1380 /*
1381 * Since the segment specified with nextnum might be allocated during
1382 * the previous construction, the buffer including its segusage may
1383 * not be dirty. The following call ensures that the buffer is dirty
1384 * and will pin the buffer on memory until the sufile is written.
1385 */
1386 err = nilfs_touch_segusage(sufile, prev->sb_nextnum);
1387 if (unlikely(err))
1388 return err;
1389
1390 for (i = 0; i < nadd; i++) {
1391 /* extend segment info */
1392 err = -ENOMEM;
1393 segbuf = nilfs_segbuf_new(sci->sc_super);
1394 if (unlikely(!segbuf))
1395 goto failed;
1396
1397 /* map this buffer to region of segment on-disk */
1398 nilfs_segbuf_map(segbuf, prev->sb_nextnum, 0, nilfs);
1399 sci->sc_segbuf_nblocks += segbuf->sb_rest_blocks;
1400
1401 /* allocate the next next full segment */
1402 err = nilfs_sufile_alloc(sufile, &nextnextnum);
1403 if (unlikely(err))
1404 goto failed_segbuf;
1405
1406 segbuf->sb_sum.seg_seq = prev->sb_sum.seg_seq + 1;
1407 nilfs_segbuf_set_next_segnum(segbuf, nextnextnum, nilfs);
1408
1409 list_add_tail(&segbuf->sb_list, &list);
1410 prev = segbuf;
1411 }
1412 list_splice(&list, sci->sc_segbufs.prev);
1413 return 0;
1414
1415 failed_segbuf:
1416 nilfs_segbuf_free(segbuf);
1417 failed:
1418 list_for_each_entry_safe(segbuf, n, &list, sb_list) {
1419 ret = nilfs_sufile_free(sufile, segbuf->sb_nextnum);
1420 WARN_ON(ret); /* never fails */
1421 list_del_init(&segbuf->sb_list);
1422 nilfs_segbuf_free(segbuf);
1423 }
1424 return err;
1425}
1426
1427static void nilfs_segctor_free_incomplete_segments(struct nilfs_sc_info *sci,
1428 struct the_nilfs *nilfs)
1429{
1430 struct nilfs_segment_buffer *segbuf;
1431 int ret, done = 0;
1432
1433 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs);
1434 if (nilfs->ns_nextnum != segbuf->sb_nextnum) {
1435 ret = nilfs_sufile_free(nilfs->ns_sufile, segbuf->sb_nextnum);
1436 WARN_ON(ret); /* never fails */
1437 }
1438 if (segbuf->sb_io_error) {
1439 /* Case 1: The first segment failed */
1440 if (segbuf->sb_pseg_start != segbuf->sb_fseg_start)
1441 /* Case 1a: Partial segment appended into an existing
1442 segment */
1443 nilfs_terminate_segment(nilfs, segbuf->sb_fseg_start,
1444 segbuf->sb_fseg_end);
1445 else /* Case 1b: New full segment */
1446 set_nilfs_discontinued(nilfs);
1447 done++;
1448 }
1449
1450 list_for_each_entry_continue(segbuf, &sci->sc_segbufs, sb_list) {
1451 ret = nilfs_sufile_free(nilfs->ns_sufile, segbuf->sb_nextnum);
1452 WARN_ON(ret); /* never fails */
1453 if (!done && segbuf->sb_io_error) {
1454 if (segbuf->sb_segnum != nilfs->ns_nextnum)
1455 /* Case 2: extended segment (!= next) failed */
1456 nilfs_sufile_set_error(nilfs->ns_sufile,
1457 segbuf->sb_segnum);
1458 done++;
1459 }
1460 }
1461}
1462
1463static void nilfs_segctor_clear_segment_buffers(struct nilfs_sc_info *sci)
1464{
1465 struct nilfs_segment_buffer *segbuf;
1466
1467 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list)
1468 nilfs_segbuf_clear(segbuf);
1469 sci->sc_super_root = NULL;
1470}
1471
1472static void nilfs_segctor_destroy_segment_buffers(struct nilfs_sc_info *sci)
1473{
1474 struct nilfs_segment_buffer *segbuf;
1475
1476 while (!list_empty(&sci->sc_segbufs)) {
1477 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs);
1478 list_del_init(&segbuf->sb_list);
1479 nilfs_segbuf_free(segbuf);
1480 }
1481 /* sci->sc_curseg = NULL; */
1482}
1483
1484static void nilfs_segctor_end_construction(struct nilfs_sc_info *sci,
1485 struct the_nilfs *nilfs, int err)
1486{
1487 if (unlikely(err)) {
1488 nilfs_segctor_free_incomplete_segments(sci, nilfs);
1489 nilfs_segctor_cancel_free_segments(sci, nilfs->ns_sufile);
1490 }
1491 nilfs_segctor_clear_segment_buffers(sci);
1492}
1493
1494static void nilfs_segctor_update_segusage(struct nilfs_sc_info *sci,
1495 struct inode *sufile)
1496{
1497 struct nilfs_segment_buffer *segbuf;
1498 struct buffer_head *bh_su;
1499 struct nilfs_segment_usage *raw_su;
1500 unsigned long live_blocks;
1501 int ret;
1502
1503 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
1504 ret = nilfs_sufile_get_segment_usage(sufile, segbuf->sb_segnum,
1505 &raw_su, &bh_su);
1506 WARN_ON(ret); /* always succeed because bh_su is dirty */
1507 live_blocks = segbuf->sb_sum.nblocks +
1508 (segbuf->sb_pseg_start - segbuf->sb_fseg_start);
1509 raw_su->su_lastmod = cpu_to_le64(sci->sc_seg_ctime);
1510 raw_su->su_nblocks = cpu_to_le32(live_blocks);
1511 nilfs_sufile_put_segment_usage(sufile, segbuf->sb_segnum,
1512 bh_su);
1513 }
1514}
1515
1516static void nilfs_segctor_cancel_segusage(struct nilfs_sc_info *sci,
1517 struct inode *sufile)
1518{
1519 struct nilfs_segment_buffer *segbuf;
1520 struct buffer_head *bh_su;
1521 struct nilfs_segment_usage *raw_su;
1522 int ret;
1523
1524 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs);
1525 ret = nilfs_sufile_get_segment_usage(sufile, segbuf->sb_segnum,
1526 &raw_su, &bh_su);
1527 WARN_ON(ret); /* always succeed because bh_su is dirty */
1528 raw_su->su_nblocks = cpu_to_le32(segbuf->sb_pseg_start -
1529 segbuf->sb_fseg_start);
1530 nilfs_sufile_put_segment_usage(sufile, segbuf->sb_segnum, bh_su);
1531
1532 list_for_each_entry_continue(segbuf, &sci->sc_segbufs, sb_list) {
1533 ret = nilfs_sufile_get_segment_usage(sufile, segbuf->sb_segnum,
1534 &raw_su, &bh_su);
1535 WARN_ON(ret); /* always succeed */
1536 raw_su->su_nblocks = 0;
1537 nilfs_sufile_put_segment_usage(sufile, segbuf->sb_segnum,
1538 bh_su);
1539 }
1540}
1541
1542static void nilfs_segctor_truncate_segments(struct nilfs_sc_info *sci,
1543 struct nilfs_segment_buffer *last,
1544 struct inode *sufile)
1545{
1546 struct nilfs_segment_buffer *segbuf = last, *n;
1547 int ret;
1548
1549 list_for_each_entry_safe_continue(segbuf, n, &sci->sc_segbufs,
1550 sb_list) {
1551 list_del_init(&segbuf->sb_list);
1552 sci->sc_segbuf_nblocks -= segbuf->sb_rest_blocks;
1553 ret = nilfs_sufile_free(sufile, segbuf->sb_nextnum);
1554 WARN_ON(ret);
1555 nilfs_segbuf_free(segbuf);
1556 }
1557}
1558
1559
1560static int nilfs_segctor_collect(struct nilfs_sc_info *sci,
1561 struct the_nilfs *nilfs, int mode)
1562{
1563 struct nilfs_cstage prev_stage = sci->sc_stage;
1564 int err, nadd = 1;
1565
1566 /* Collection retry loop */
1567 for (;;) {
1568 sci->sc_super_root = NULL;
1569 sci->sc_nblk_this_inc = 0;
1570 sci->sc_curseg = NILFS_FIRST_SEGBUF(&sci->sc_segbufs);
1571
1572 err = nilfs_segctor_reset_segment_buffer(sci);
1573 if (unlikely(err))
1574 goto failed;
1575
1576 err = nilfs_segctor_collect_blocks(sci, mode);
1577 sci->sc_nblk_this_inc += sci->sc_curseg->sb_sum.nblocks;
1578 if (!err)
1579 break;
1580
1581 if (unlikely(err != -E2BIG))
1582 goto failed;
1583
1584 /* The current segment is filled up */
1585 if (mode != SC_LSEG_SR || sci->sc_stage.scnt < NILFS_ST_CPFILE)
1586 break;
1587
1588 nilfs_segctor_cancel_free_segments(sci, nilfs->ns_sufile);
1589 nilfs_segctor_clear_segment_buffers(sci);
1590
1591 err = nilfs_segctor_extend_segments(sci, nilfs, nadd);
1592 if (unlikely(err))
1593 return err;
1594
1595 nadd = min_t(int, nadd << 1, SC_MAX_SEGDELTA);
1596 sci->sc_stage = prev_stage;
1597 }
1598 nilfs_segctor_truncate_segments(sci, sci->sc_curseg, nilfs->ns_sufile);
1599 return 0;
1600
1601 failed:
1602 return err;
1603}
1604
1605static void nilfs_list_replace_buffer(struct buffer_head *old_bh,
1606 struct buffer_head *new_bh)
1607{
1608 BUG_ON(!list_empty(&new_bh->b_assoc_buffers));
1609
1610 list_replace_init(&old_bh->b_assoc_buffers, &new_bh->b_assoc_buffers);
1611 /* The caller must release old_bh */
1612}
1613
1614static int
1615nilfs_segctor_update_payload_blocknr(struct nilfs_sc_info *sci,
1616 struct nilfs_segment_buffer *segbuf,
1617 int mode)
1618{
1619 struct inode *inode = NULL;
1620 sector_t blocknr;
1621 unsigned long nfinfo = segbuf->sb_sum.nfinfo;
1622 unsigned long nblocks = 0, ndatablk = 0;
1623 struct nilfs_sc_operations *sc_op = NULL;
1624 struct nilfs_segsum_pointer ssp;
1625 struct nilfs_finfo *finfo = NULL;
1626 union nilfs_binfo binfo;
1627 struct buffer_head *bh, *bh_org;
1628 ino_t ino = 0;
1629 int err = 0;
1630
1631 if (!nfinfo)
1632 goto out;
1633
1634 blocknr = segbuf->sb_pseg_start + segbuf->sb_sum.nsumblk;
1635 ssp.bh = NILFS_SEGBUF_FIRST_BH(&segbuf->sb_segsum_buffers);
1636 ssp.offset = sizeof(struct nilfs_segment_summary);
1637
1638 list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) {
1639 if (bh == sci->sc_super_root)
1640 break;
1641 if (!finfo) {
1642 finfo = nilfs_segctor_map_segsum_entry(
1643 sci, &ssp, sizeof(*finfo));
1644 ino = le64_to_cpu(finfo->fi_ino);
1645 nblocks = le32_to_cpu(finfo->fi_nblocks);
1646 ndatablk = le32_to_cpu(finfo->fi_ndatablk);
1647
1648 if (buffer_nilfs_node(bh))
1649 inode = NILFS_BTNC_I(bh->b_page->mapping);
1650 else
1651 inode = NILFS_AS_I(bh->b_page->mapping);
1652
1653 if (mode == SC_LSEG_DSYNC)
1654 sc_op = &nilfs_sc_dsync_ops;
1655 else if (ino == NILFS_DAT_INO)
1656 sc_op = &nilfs_sc_dat_ops;
1657 else /* file blocks */
1658 sc_op = &nilfs_sc_file_ops;
1659 }
1660 bh_org = bh;
1661 get_bh(bh_org);
1662 err = nilfs_bmap_assign(NILFS_I(inode)->i_bmap, &bh, blocknr,
1663 &binfo);
1664 if (bh != bh_org)
1665 nilfs_list_replace_buffer(bh_org, bh);
1666 brelse(bh_org);
1667 if (unlikely(err))
1668 goto failed_bmap;
1669
1670 if (ndatablk > 0)
1671 sc_op->write_data_binfo(sci, &ssp, &binfo);
1672 else
1673 sc_op->write_node_binfo(sci, &ssp, &binfo);
1674
1675 blocknr++;
1676 if (--nblocks == 0) {
1677 finfo = NULL;
1678 if (--nfinfo == 0)
1679 break;
1680 } else if (ndatablk > 0)
1681 ndatablk--;
1682 }
1683 out:
1684 return 0;
1685
1686 failed_bmap:
1687 err = nilfs_handle_bmap_error(err, __func__, inode, sci->sc_super);
1688 return err;
1689}
1690
1691static int nilfs_segctor_assign(struct nilfs_sc_info *sci, int mode)
1692{
1693 struct nilfs_segment_buffer *segbuf;
1694 int err;
1695
1696 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
1697 err = nilfs_segctor_update_payload_blocknr(sci, segbuf, mode);
1698 if (unlikely(err))
1699 return err;
1700 nilfs_segbuf_fill_in_segsum(segbuf);
1701 }
1702 return 0;
1703}
1704
1705static int
1706nilfs_copy_replace_page_buffers(struct page *page, struct list_head *out)
1707{
1708 struct page *clone_page;
1709 struct buffer_head *bh, *head, *bh2;
1710 void *kaddr;
1711
1712 bh = head = page_buffers(page);
1713
1714 clone_page = nilfs_alloc_private_page(bh->b_bdev, bh->b_size, 0);
1715 if (unlikely(!clone_page))
1716 return -ENOMEM;
1717
1718 bh2 = page_buffers(clone_page);
1719 kaddr = kmap_atomic(page, KM_USER0);
1720 do {
1721 if (list_empty(&bh->b_assoc_buffers))
1722 continue;
1723 get_bh(bh2);
1724 page_cache_get(clone_page); /* for each bh */
1725 memcpy(bh2->b_data, kaddr + bh_offset(bh), bh2->b_size);
1726 bh2->b_blocknr = bh->b_blocknr;
1727 list_replace(&bh->b_assoc_buffers, &bh2->b_assoc_buffers);
1728 list_add_tail(&bh->b_assoc_buffers, out);
1729 } while (bh = bh->b_this_page, bh2 = bh2->b_this_page, bh != head);
1730 kunmap_atomic(kaddr, KM_USER0);
1731
1732 if (!TestSetPageWriteback(clone_page))
1733 inc_zone_page_state(clone_page, NR_WRITEBACK);
1734 unlock_page(clone_page);
1735
1736 return 0;
1737}
1738
1739static int nilfs_test_page_to_be_frozen(struct page *page)
1740{
1741 struct address_space *mapping = page->mapping;
1742
1743 if (!mapping || !mapping->host || S_ISDIR(mapping->host->i_mode))
1744 return 0;
1745
1746 if (page_mapped(page)) {
1747 ClearPageChecked(page);
1748 return 1;
1749 }
1750 return PageChecked(page);
1751}
1752
1753static int nilfs_begin_page_io(struct page *page, struct list_head *out)
1754{
1755 if (!page || PageWriteback(page))
1756 /* For split b-tree node pages, this function may be called
1757 twice. We ignore the 2nd or later calls by this check. */
1758 return 0;
1759
1760 lock_page(page);
1761 clear_page_dirty_for_io(page);
1762 set_page_writeback(page);
1763 unlock_page(page);
1764
1765 if (nilfs_test_page_to_be_frozen(page)) {
1766 int err = nilfs_copy_replace_page_buffers(page, out);
1767 if (unlikely(err))
1768 return err;
1769 }
1770 return 0;
1771}
1772
1773static int nilfs_segctor_prepare_write(struct nilfs_sc_info *sci,
1774 struct page **failed_page)
1775{
1776 struct nilfs_segment_buffer *segbuf;
1777 struct page *bd_page = NULL, *fs_page = NULL;
1778 struct list_head *list = &sci->sc_copied_buffers;
1779 int err;
1780
1781 *failed_page = NULL;
1782 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
1783 struct buffer_head *bh;
1784
1785 list_for_each_entry(bh, &segbuf->sb_segsum_buffers,
1786 b_assoc_buffers) {
1787 if (bh->b_page != bd_page) {
1788 if (bd_page) {
1789 lock_page(bd_page);
1790 clear_page_dirty_for_io(bd_page);
1791 set_page_writeback(bd_page);
1792 unlock_page(bd_page);
1793 }
1794 bd_page = bh->b_page;
1795 }
1796 }
1797
1798 list_for_each_entry(bh, &segbuf->sb_payload_buffers,
1799 b_assoc_buffers) {
1800 if (bh == sci->sc_super_root) {
1801 if (bh->b_page != bd_page) {
1802 lock_page(bd_page);
1803 clear_page_dirty_for_io(bd_page);
1804 set_page_writeback(bd_page);
1805 unlock_page(bd_page);
1806 bd_page = bh->b_page;
1807 }
1808 break;
1809 }
1810 if (bh->b_page != fs_page) {
1811 err = nilfs_begin_page_io(fs_page, list);
1812 if (unlikely(err)) {
1813 *failed_page = fs_page;
1814 goto out;
1815 }
1816 fs_page = bh->b_page;
1817 }
1818 }
1819 }
1820 if (bd_page) {
1821 lock_page(bd_page);
1822 clear_page_dirty_for_io(bd_page);
1823 set_page_writeback(bd_page);
1824 unlock_page(bd_page);
1825 }
1826 err = nilfs_begin_page_io(fs_page, list);
1827 if (unlikely(err))
1828 *failed_page = fs_page;
1829 out:
1830 return err;
1831}
1832
1833static int nilfs_segctor_write(struct nilfs_sc_info *sci,
1834 struct backing_dev_info *bdi)
1835{
1836 struct nilfs_segment_buffer *segbuf;
1837 struct nilfs_write_info wi;
1838 int err, res;
1839
1840 wi.sb = sci->sc_super;
1841 wi.bh_sr = sci->sc_super_root;
1842 wi.bdi = bdi;
1843
1844 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
1845 nilfs_segbuf_prepare_write(segbuf, &wi);
1846 err = nilfs_segbuf_write(segbuf, &wi);
1847
1848 res = nilfs_segbuf_wait(segbuf, &wi);
1849 err = unlikely(err) ? : res;
1850 if (unlikely(err))
1851 return err;
1852 }
1853 return 0;
1854}
1855
1856static int nilfs_page_has_uncleared_buffer(struct page *page)
1857{
1858 struct buffer_head *head, *bh;
1859
1860 head = bh = page_buffers(page);
1861 do {
1862 if (buffer_dirty(bh) && !list_empty(&bh->b_assoc_buffers))
1863 return 1;
1864 bh = bh->b_this_page;
1865 } while (bh != head);
1866 return 0;
1867}
1868
1869static void __nilfs_end_page_io(struct page *page, int err)
1870{
1871 if (!err) {
1872 if (!nilfs_page_buffers_clean(page))
1873 __set_page_dirty_nobuffers(page);
1874 ClearPageError(page);
1875 } else {
1876 __set_page_dirty_nobuffers(page);
1877 SetPageError(page);
1878 }
1879
1880 if (buffer_nilfs_allocated(page_buffers(page))) {
1881 if (TestClearPageWriteback(page))
1882 dec_zone_page_state(page, NR_WRITEBACK);
1883 } else
1884 end_page_writeback(page);
1885}
1886
1887static void nilfs_end_page_io(struct page *page, int err)
1888{
1889 if (!page)
1890 return;
1891
1892 if (buffer_nilfs_node(page_buffers(page)) &&
1893 nilfs_page_has_uncleared_buffer(page))
1894 /* For b-tree node pages, this function may be called twice
1895 or more because they might be split in a segment.
1896 This check assures that cleanup has been done for all
1897 buffers in a split btnode page. */
1898 return;
1899
1900 __nilfs_end_page_io(page, err);
1901}
1902
1903static void nilfs_clear_copied_buffers(struct list_head *list, int err)
1904{
1905 struct buffer_head *bh, *head;
1906 struct page *page;
1907
1908 while (!list_empty(list)) {
1909 bh = list_entry(list->next, struct buffer_head,
1910 b_assoc_buffers);
1911 page = bh->b_page;
1912 page_cache_get(page);
1913 head = bh = page_buffers(page);
1914 do {
1915 if (!list_empty(&bh->b_assoc_buffers)) {
1916 list_del_init(&bh->b_assoc_buffers);
1917 if (!err) {
1918 set_buffer_uptodate(bh);
1919 clear_buffer_dirty(bh);
1920 clear_buffer_nilfs_volatile(bh);
1921 }
1922 brelse(bh); /* for b_assoc_buffers */
1923 }
1924 } while ((bh = bh->b_this_page) != head);
1925
1926 __nilfs_end_page_io(page, err);
1927 page_cache_release(page);
1928 }
1929}
1930
1931static void nilfs_segctor_abort_write(struct nilfs_sc_info *sci,
1932 struct page *failed_page, int err)
1933{
1934 struct nilfs_segment_buffer *segbuf;
1935 struct page *bd_page = NULL, *fs_page = NULL;
1936
1937 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
1938 struct buffer_head *bh;
1939
1940 list_for_each_entry(bh, &segbuf->sb_segsum_buffers,
1941 b_assoc_buffers) {
1942 if (bh->b_page != bd_page) {
1943 if (bd_page)
1944 end_page_writeback(bd_page);
1945 bd_page = bh->b_page;
1946 }
1947 }
1948
1949 list_for_each_entry(bh, &segbuf->sb_payload_buffers,
1950 b_assoc_buffers) {
1951 if (bh == sci->sc_super_root) {
1952 if (bh->b_page != bd_page) {
1953 end_page_writeback(bd_page);
1954 bd_page = bh->b_page;
1955 }
1956 break;
1957 }
1958 if (bh->b_page != fs_page) {
1959 nilfs_end_page_io(fs_page, err);
1960 if (unlikely(fs_page == failed_page))
1961 goto done;
1962 fs_page = bh->b_page;
1963 }
1964 }
1965 }
1966 if (bd_page)
1967 end_page_writeback(bd_page);
1968
1969 nilfs_end_page_io(fs_page, err);
1970 done:
1971 nilfs_clear_copied_buffers(&sci->sc_copied_buffers, err);
1972}
1973
1974static void nilfs_set_next_segment(struct the_nilfs *nilfs,
1975 struct nilfs_segment_buffer *segbuf)
1976{
1977 nilfs->ns_segnum = segbuf->sb_segnum;
1978 nilfs->ns_nextnum = segbuf->sb_nextnum;
1979 nilfs->ns_pseg_offset = segbuf->sb_pseg_start - segbuf->sb_fseg_start
1980 + segbuf->sb_sum.nblocks;
1981 nilfs->ns_seg_seq = segbuf->sb_sum.seg_seq;
1982 nilfs->ns_ctime = segbuf->sb_sum.ctime;
1983}
1984
1985static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci)
1986{
1987 struct nilfs_segment_buffer *segbuf;
1988 struct page *bd_page = NULL, *fs_page = NULL;
1989 struct nilfs_sb_info *sbi = sci->sc_sbi;
1990 struct the_nilfs *nilfs = sbi->s_nilfs;
1991 int update_sr = (sci->sc_super_root != NULL);
1992
1993 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) {
1994 struct buffer_head *bh;
1995
1996 list_for_each_entry(bh, &segbuf->sb_segsum_buffers,
1997 b_assoc_buffers) {
1998 set_buffer_uptodate(bh);
1999 clear_buffer_dirty(bh);
2000 if (bh->b_page != bd_page) {
2001 if (bd_page)
2002 end_page_writeback(bd_page);
2003 bd_page = bh->b_page;
2004 }
2005 }
2006 /*
2007 * We assume that the buffers which belong to the same page
2008 * continue over the buffer list.
2009 * Under this assumption, the last BHs of pages is
2010 * identifiable by the discontinuity of bh->b_page
2011 * (page != fs_page).
2012 *
2013 * For B-tree node blocks, however, this assumption is not
2014 * guaranteed. The cleanup code of B-tree node pages needs
2015 * special care.
2016 */
2017 list_for_each_entry(bh, &segbuf->sb_payload_buffers,
2018 b_assoc_buffers) {
2019 set_buffer_uptodate(bh);
2020 clear_buffer_dirty(bh);
2021 clear_buffer_nilfs_volatile(bh);
2022 if (bh == sci->sc_super_root) {
2023 if (bh->b_page != bd_page) {
2024 end_page_writeback(bd_page);
2025 bd_page = bh->b_page;
2026 }
2027 break;
2028 }
2029 if (bh->b_page != fs_page) {
2030 nilfs_end_page_io(fs_page, 0);
2031 fs_page = bh->b_page;
2032 }
2033 }
2034
2035 if (!NILFS_SEG_SIMPLEX(&segbuf->sb_sum)) {
2036 if (NILFS_SEG_LOGBGN(&segbuf->sb_sum)) {
2037 set_bit(NILFS_SC_UNCLOSED, &sci->sc_flags);
2038 sci->sc_lseg_stime = jiffies;
2039 }
2040 if (NILFS_SEG_LOGEND(&segbuf->sb_sum))
2041 clear_bit(NILFS_SC_UNCLOSED, &sci->sc_flags);
2042 }
2043 }
2044 /*
2045 * Since pages may continue over multiple segment buffers,
2046 * end of the last page must be checked outside of the loop.
2047 */
2048 if (bd_page)
2049 end_page_writeback(bd_page);
2050
2051 nilfs_end_page_io(fs_page, 0);
2052
2053 nilfs_clear_copied_buffers(&sci->sc_copied_buffers, 0);
2054
2055 nilfs_drop_collected_inodes(&sci->sc_dirty_files);
2056
2057 if (nilfs_doing_gc()) {
2058 nilfs_drop_collected_inodes(&sci->sc_gc_inodes);
2059 if (update_sr)
2060 nilfs_commit_gcdat_inode(nilfs);
2061 } else
2062 nilfs->ns_nongc_ctime = sci->sc_seg_ctime;
2063
2064 sci->sc_nblk_inc += sci->sc_nblk_this_inc;
2065
2066 segbuf = NILFS_LAST_SEGBUF(&sci->sc_segbufs);
2067 nilfs_set_next_segment(nilfs, segbuf);
2068
2069 if (update_sr) {
2070 nilfs_set_last_segment(nilfs, segbuf->sb_pseg_start,
2071 segbuf->sb_sum.seg_seq, nilfs->ns_cno++);
2072 sbi->s_super->s_dirt = 1;
2073
2074 clear_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags);
2075 clear_bit(NILFS_SC_DIRTY, &sci->sc_flags);
2076 set_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags);
2077 } else
2078 clear_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags);
2079}
2080
2081static int nilfs_segctor_check_in_files(struct nilfs_sc_info *sci,
2082 struct nilfs_sb_info *sbi)
2083{
2084 struct nilfs_inode_info *ii, *n;
2085 __u64 cno = sbi->s_nilfs->ns_cno;
2086
2087 spin_lock(&sbi->s_inode_lock);
2088 retry:
2089 list_for_each_entry_safe(ii, n, &sbi->s_dirty_files, i_dirty) {
2090 if (!ii->i_bh) {
2091 struct buffer_head *ibh;
2092 int err;
2093
2094 spin_unlock(&sbi->s_inode_lock);
2095 err = nilfs_ifile_get_inode_block(
2096 sbi->s_ifile, ii->vfs_inode.i_ino, &ibh);
2097 if (unlikely(err)) {
2098 nilfs_warning(sbi->s_super, __func__,
2099 "failed to get inode block.\n");
2100 return err;
2101 }
2102 nilfs_mdt_mark_buffer_dirty(ibh);
2103 nilfs_mdt_mark_dirty(sbi->s_ifile);
2104 spin_lock(&sbi->s_inode_lock);
2105 if (likely(!ii->i_bh))
2106 ii->i_bh = ibh;
2107 else
2108 brelse(ibh);
2109 goto retry;
2110 }
2111 ii->i_cno = cno;
2112
2113 clear_bit(NILFS_I_QUEUED, &ii->i_state);
2114 set_bit(NILFS_I_BUSY, &ii->i_state);
2115 list_del(&ii->i_dirty);
2116 list_add_tail(&ii->i_dirty, &sci->sc_dirty_files);
2117 }
2118 spin_unlock(&sbi->s_inode_lock);
2119
2120 NILFS_I(sbi->s_ifile)->i_cno = cno;
2121
2122 return 0;
2123}
2124
2125static void nilfs_segctor_check_out_files(struct nilfs_sc_info *sci,
2126 struct nilfs_sb_info *sbi)
2127{
2128 struct nilfs_transaction_info *ti = current->journal_info;
2129 struct nilfs_inode_info *ii, *n;
2130 __u64 cno = sbi->s_nilfs->ns_cno;
2131
2132 spin_lock(&sbi->s_inode_lock);
2133 list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) {
2134 if (!test_and_clear_bit(NILFS_I_UPDATED, &ii->i_state) ||
2135 test_bit(NILFS_I_DIRTY, &ii->i_state)) {
2136 /* The current checkpoint number (=nilfs->ns_cno) is
2137 changed between check-in and check-out only if the
2138 super root is written out. So, we can update i_cno
2139 for the inodes that remain in the dirty list. */
2140 ii->i_cno = cno;
2141 continue;
2142 }
2143 clear_bit(NILFS_I_BUSY, &ii->i_state);
2144 brelse(ii->i_bh);
2145 ii->i_bh = NULL;
2146 list_del(&ii->i_dirty);
2147 list_add_tail(&ii->i_dirty, &ti->ti_garbage);
2148 }
2149 spin_unlock(&sbi->s_inode_lock);
2150}
2151
2152/*
2153 * Main procedure of segment constructor
2154 */
2155static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode)
2156{
2157 struct nilfs_sb_info *sbi = sci->sc_sbi;
2158 struct the_nilfs *nilfs = sbi->s_nilfs;
2159 struct page *failed_page;
2160 int err, has_sr = 0;
2161
2162 sci->sc_stage.scnt = NILFS_ST_INIT;
2163
2164 err = nilfs_segctor_check_in_files(sci, sbi);
2165 if (unlikely(err))
2166 goto out;
2167
2168 if (nilfs_test_metadata_dirty(sbi))
2169 set_bit(NILFS_SC_DIRTY, &sci->sc_flags);
2170
2171 if (nilfs_segctor_clean(sci))
2172 goto out;
2173
2174 do {
2175 sci->sc_stage.flags &= ~NILFS_CF_HISTORY_MASK;
2176
2177 err = nilfs_segctor_begin_construction(sci, nilfs);
2178 if (unlikely(err))
2179 goto out;
2180
2181 /* Update time stamp */
2182 sci->sc_seg_ctime = get_seconds();
2183
2184 err = nilfs_segctor_collect(sci, nilfs, mode);
2185 if (unlikely(err))
2186 goto failed;
2187
2188 has_sr = (sci->sc_super_root != NULL);
2189
2190 /* Avoid empty segment */
2191 if (sci->sc_stage.scnt == NILFS_ST_DONE &&
2192 NILFS_SEG_EMPTY(&sci->sc_curseg->sb_sum)) {
2193 nilfs_segctor_end_construction(sci, nilfs, 1);
2194 goto out;
2195 }
2196
2197 err = nilfs_segctor_assign(sci, mode);
2198 if (unlikely(err))
2199 goto failed;
2200
2201 if (sci->sc_stage.flags & NILFS_CF_IFILE_STARTED)
2202 nilfs_segctor_fill_in_file_bmap(sci, sbi->s_ifile);
2203
2204 if (has_sr) {
2205 err = nilfs_segctor_fill_in_checkpoint(sci);
2206 if (unlikely(err))
2207 goto failed_to_make_up;
2208
2209 nilfs_segctor_fill_in_super_root(sci, nilfs);
2210 }
2211 nilfs_segctor_update_segusage(sci, nilfs->ns_sufile);
2212
2213 /* Write partial segments */
2214 err = nilfs_segctor_prepare_write(sci, &failed_page);
2215 if (unlikely(err))
2216 goto failed_to_write;
2217
2218 nilfs_segctor_fill_in_checksums(sci, nilfs->ns_crc_seed);
2219
2220 err = nilfs_segctor_write(sci, nilfs->ns_bdi);
2221 if (unlikely(err))
2222 goto failed_to_write;
2223
2224 nilfs_segctor_complete_write(sci);
2225
2226 /* Commit segments */
2227 if (has_sr) {
2228 nilfs_segctor_commit_free_segments(sci);
2229 nilfs_segctor_clear_metadata_dirty(sci);
2230 }
2231
2232 nilfs_segctor_end_construction(sci, nilfs, 0);
2233
2234 } while (sci->sc_stage.scnt != NILFS_ST_DONE);
2235
2236 out:
2237 nilfs_segctor_destroy_segment_buffers(sci);
2238 nilfs_segctor_check_out_files(sci, sbi);
2239 return err;
2240
2241 failed_to_write:
2242 nilfs_segctor_abort_write(sci, failed_page, err);
2243 nilfs_segctor_cancel_segusage(sci, nilfs->ns_sufile);
2244
2245 failed_to_make_up:
2246 if (sci->sc_stage.flags & NILFS_CF_IFILE_STARTED)
2247 nilfs_redirty_inodes(&sci->sc_dirty_files);
2248
2249 failed:
2250 if (nilfs_doing_gc())
2251 nilfs_redirty_inodes(&sci->sc_gc_inodes);
2252 nilfs_segctor_end_construction(sci, nilfs, err);
2253 goto out;
2254}
2255
2256/**
2257 * nilfs_secgtor_start_timer - set timer of background write
2258 * @sci: nilfs_sc_info
2259 *
2260 * If the timer has already been set, it ignores the new request.
2261 * This function MUST be called within a section locking the segment
2262 * semaphore.
2263 */
2264static void nilfs_segctor_start_timer(struct nilfs_sc_info *sci)
2265{
2266 spin_lock(&sci->sc_state_lock);
2267 if (sci->sc_timer && !(sci->sc_state & NILFS_SEGCTOR_COMMIT)) {
2268 sci->sc_timer->expires = jiffies + sci->sc_interval;
2269 add_timer(sci->sc_timer);
2270 sci->sc_state |= NILFS_SEGCTOR_COMMIT;
2271 }
2272 spin_unlock(&sci->sc_state_lock);
2273}
2274
2275static void nilfs_segctor_do_flush(struct nilfs_sc_info *sci, int bn)
2276{
2277 spin_lock(&sci->sc_state_lock);
2278 if (!(sci->sc_flush_request & (1 << bn))) {
2279 unsigned long prev_req = sci->sc_flush_request;
2280
2281 sci->sc_flush_request |= (1 << bn);
2282 if (!prev_req)
2283 wake_up(&sci->sc_wait_daemon);
2284 }
2285 spin_unlock(&sci->sc_state_lock);
2286}
2287
2288/**
2289 * nilfs_flush_segment - trigger a segment construction for resource control
2290 * @sb: super block
2291 * @ino: inode number of the file to be flushed out.
2292 */
2293void nilfs_flush_segment(struct super_block *sb, ino_t ino)
2294{
2295 struct nilfs_sb_info *sbi = NILFS_SB(sb);
2296 struct nilfs_sc_info *sci = NILFS_SC(sbi);
2297
2298 if (!sci || nilfs_doing_construction())
2299 return;
2300 nilfs_segctor_do_flush(sci, NILFS_MDT_INODE(sb, ino) ? ino : 0);
2301 /* assign bit 0 to data files */
2302}
2303
2304int nilfs_segctor_add_segments_to_be_freed(struct nilfs_sc_info *sci,
2305 __u64 *segnum, size_t nsegs)
2306{
2307 struct nilfs_segment_entry *ent;
2308 struct the_nilfs *nilfs = sci->sc_sbi->s_nilfs;
2309 struct inode *sufile = nilfs->ns_sufile;
2310 LIST_HEAD(list);
2311 __u64 *pnum;
2312 size_t i;
2313 int err;
2314
2315 for (pnum = segnum, i = 0; i < nsegs; pnum++, i++) {
2316 ent = nilfs_alloc_segment_entry(*pnum);
2317 if (unlikely(!ent)) {
2318 err = -ENOMEM;
2319 goto failed;
2320 }
2321 list_add_tail(&ent->list, &list);
2322
2323 err = nilfs_open_segment_entry(ent, sufile);
2324 if (unlikely(err))
2325 goto failed;
2326
2327 if (unlikely(!nilfs_segment_usage_dirty(ent->raw_su)))
2328 printk(KERN_WARNING "NILFS: unused segment is "
2329 "requested to be cleaned (segnum=%llu)\n",
2330 (unsigned long long)ent->segnum);
2331 nilfs_close_segment_entry(ent, sufile);
2332 }
2333 list_splice(&list, sci->sc_cleaning_segments.prev);
2334 return 0;
2335
2336 failed:
2337 nilfs_dispose_segment_list(&list);
2338 return err;
2339}
2340
2341void nilfs_segctor_clear_segments_to_be_freed(struct nilfs_sc_info *sci)
2342{
2343 nilfs_dispose_segment_list(&sci->sc_cleaning_segments);
2344}
2345
2346struct nilfs_segctor_wait_request {
2347 wait_queue_t wq;
2348 __u32 seq;
2349 int err;
2350 atomic_t done;
2351};
2352
2353static int nilfs_segctor_sync(struct nilfs_sc_info *sci)
2354{
2355 struct nilfs_segctor_wait_request wait_req;
2356 int err = 0;
2357
2358 spin_lock(&sci->sc_state_lock);
2359 init_wait(&wait_req.wq);
2360 wait_req.err = 0;
2361 atomic_set(&wait_req.done, 0);
2362 wait_req.seq = ++sci->sc_seq_request;
2363 spin_unlock(&sci->sc_state_lock);
2364
2365 init_waitqueue_entry(&wait_req.wq, current);
2366 add_wait_queue(&sci->sc_wait_request, &wait_req.wq);
2367 set_current_state(TASK_INTERRUPTIBLE);
2368 wake_up(&sci->sc_wait_daemon);
2369
2370 for (;;) {
2371 if (atomic_read(&wait_req.done)) {
2372 err = wait_req.err;
2373 break;
2374 }
2375 if (!signal_pending(current)) {
2376 schedule();
2377 continue;
2378 }
2379 err = -ERESTARTSYS;
2380 break;
2381 }
2382 finish_wait(&sci->sc_wait_request, &wait_req.wq);
2383 return err;
2384}
2385
2386static void nilfs_segctor_wakeup(struct nilfs_sc_info *sci, int err)
2387{
2388 struct nilfs_segctor_wait_request *wrq, *n;
2389 unsigned long flags;
2390
2391 spin_lock_irqsave(&sci->sc_wait_request.lock, flags);
2392 list_for_each_entry_safe(wrq, n, &sci->sc_wait_request.task_list,
2393 wq.task_list) {
2394 if (!atomic_read(&wrq->done) &&
2395 nilfs_cnt32_ge(sci->sc_seq_done, wrq->seq)) {
2396 wrq->err = err;
2397 atomic_set(&wrq->done, 1);
2398 }
2399 if (atomic_read(&wrq->done)) {
2400 wrq->wq.func(&wrq->wq,
2401 TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,
2402 0, NULL);
2403 }
2404 }
2405 spin_unlock_irqrestore(&sci->sc_wait_request.lock, flags);
2406}
2407
2408/**
2409 * nilfs_construct_segment - construct a logical segment
2410 * @sb: super block
2411 *
2412 * Return Value: On success, 0 is retured. On errors, one of the following
2413 * negative error code is returned.
2414 *
2415 * %-EROFS - Read only filesystem.
2416 *
2417 * %-EIO - I/O error
2418 *
2419 * %-ENOSPC - No space left on device (only in a panic state).
2420 *
2421 * %-ERESTARTSYS - Interrupted.
2422 *
2423 * %-ENOMEM - Insufficient memory available.
2424 */
2425int nilfs_construct_segment(struct super_block *sb)
2426{
2427 struct nilfs_sb_info *sbi = NILFS_SB(sb);
2428 struct nilfs_sc_info *sci = NILFS_SC(sbi);
2429 struct nilfs_transaction_info *ti;
2430 int err;
2431
2432 if (!sci)
2433 return -EROFS;
2434
2435 /* A call inside transactions causes a deadlock. */
2436 BUG_ON((ti = current->journal_info) && ti->ti_magic == NILFS_TI_MAGIC);
2437
2438 err = nilfs_segctor_sync(sci);
2439 return err;
2440}
2441
2442/**
2443 * nilfs_construct_dsync_segment - construct a data-only logical segment
2444 * @sb: super block
2445 * @inode: inode whose data blocks should be written out
2446 * @start: start byte offset
2447 * @end: end byte offset (inclusive)
2448 *
2449 * Return Value: On success, 0 is retured. On errors, one of the following
2450 * negative error code is returned.
2451 *
2452 * %-EROFS - Read only filesystem.
2453 *
2454 * %-EIO - I/O error
2455 *
2456 * %-ENOSPC - No space left on device (only in a panic state).
2457 *
2458 * %-ERESTARTSYS - Interrupted.
2459 *
2460 * %-ENOMEM - Insufficient memory available.
2461 */
2462int nilfs_construct_dsync_segment(struct super_block *sb, struct inode *inode,
2463 loff_t start, loff_t end)
2464{
2465 struct nilfs_sb_info *sbi = NILFS_SB(sb);
2466 struct nilfs_sc_info *sci = NILFS_SC(sbi);
2467 struct nilfs_inode_info *ii;
2468 struct nilfs_transaction_info ti;
2469 int err = 0;
2470
2471 if (!sci)
2472 return -EROFS;
2473
2474 nilfs_transaction_lock(sbi, &ti, 0);
2475
2476 ii = NILFS_I(inode);
2477 if (test_bit(NILFS_I_INODE_DIRTY, &ii->i_state) ||
2478 nilfs_test_opt(sbi, STRICT_ORDER) ||
2479 test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags) ||
2480 nilfs_discontinued(sbi->s_nilfs)) {
2481 nilfs_transaction_unlock(sbi);
2482 err = nilfs_segctor_sync(sci);
2483 return err;
2484 }
2485
2486 spin_lock(&sbi->s_inode_lock);
2487 if (!test_bit(NILFS_I_QUEUED, &ii->i_state) &&
2488 !test_bit(NILFS_I_BUSY, &ii->i_state)) {
2489 spin_unlock(&sbi->s_inode_lock);
2490 nilfs_transaction_unlock(sbi);
2491 return 0;
2492 }
2493 spin_unlock(&sbi->s_inode_lock);
2494 sci->sc_dsync_inode = ii;
2495 sci->sc_dsync_start = start;
2496 sci->sc_dsync_end = end;
2497
2498 err = nilfs_segctor_do_construct(sci, SC_LSEG_DSYNC);
2499
2500 nilfs_transaction_unlock(sbi);
2501 return err;
2502}
2503
2504struct nilfs_segctor_req {
2505 int mode;
2506 __u32 seq_accepted;
2507 int sc_err; /* construction failure */
2508 int sb_err; /* super block writeback failure */
2509};
2510
2511#define FLUSH_FILE_BIT (0x1) /* data file only */
2512#define FLUSH_DAT_BIT (1 << NILFS_DAT_INO) /* DAT only */
2513
2514static void nilfs_segctor_accept(struct nilfs_sc_info *sci,
2515 struct nilfs_segctor_req *req)
2516{
2517 req->sc_err = req->sb_err = 0;
2518 spin_lock(&sci->sc_state_lock);
2519 req->seq_accepted = sci->sc_seq_request;
2520 spin_unlock(&sci->sc_state_lock);
2521
2522 if (sci->sc_timer)
2523 del_timer_sync(sci->sc_timer);
2524}
2525
2526static void nilfs_segctor_notify(struct nilfs_sc_info *sci,
2527 struct nilfs_segctor_req *req)
2528{
2529 /* Clear requests (even when the construction failed) */
2530 spin_lock(&sci->sc_state_lock);
2531
2532 sci->sc_state &= ~NILFS_SEGCTOR_COMMIT;
2533
2534 if (req->mode == SC_LSEG_SR) {
2535 sci->sc_seq_done = req->seq_accepted;
2536 nilfs_segctor_wakeup(sci, req->sc_err ? : req->sb_err);
2537 sci->sc_flush_request = 0;
2538 } else if (req->mode == SC_FLUSH_FILE)
2539 sci->sc_flush_request &= ~FLUSH_FILE_BIT;
2540 else if (req->mode == SC_FLUSH_DAT)
2541 sci->sc_flush_request &= ~FLUSH_DAT_BIT;
2542
2543 spin_unlock(&sci->sc_state_lock);
2544}
2545
2546static int nilfs_segctor_construct(struct nilfs_sc_info *sci,
2547 struct nilfs_segctor_req *req)
2548{
2549 struct nilfs_sb_info *sbi = sci->sc_sbi;
2550 struct the_nilfs *nilfs = sbi->s_nilfs;
2551 int err = 0;
2552
2553 if (nilfs_discontinued(nilfs))
2554 req->mode = SC_LSEG_SR;
2555 if (!nilfs_segctor_confirm(sci)) {
2556 err = nilfs_segctor_do_construct(sci, req->mode);
2557 req->sc_err = err;
2558 }
2559 if (likely(!err)) {
2560 if (req->mode != SC_FLUSH_DAT)
2561 atomic_set(&nilfs->ns_ndirtyblks, 0);
2562 if (test_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags) &&
2563 nilfs_discontinued(nilfs)) {
2564 down_write(&nilfs->ns_sem);
2565 req->sb_err = nilfs_commit_super(sbi, 0);
2566 up_write(&nilfs->ns_sem);
2567 }
2568 }
2569 return err;
2570}
2571
2572static void nilfs_construction_timeout(unsigned long data)
2573{
2574 struct task_struct *p = (struct task_struct *)data;
2575 wake_up_process(p);
2576}
2577
2578static void
2579nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)
2580{
2581 struct nilfs_inode_info *ii, *n;
2582
2583 list_for_each_entry_safe(ii, n, head, i_dirty) {
2584 if (!test_bit(NILFS_I_UPDATED, &ii->i_state))
2585 continue;
2586 hlist_del_init(&ii->vfs_inode.i_hash);
2587 list_del_init(&ii->i_dirty);
2588 nilfs_clear_gcinode(&ii->vfs_inode);
2589 }
2590}
2591
2592int nilfs_clean_segments(struct super_block *sb, void __user *argp)
2593{
2594 struct nilfs_sb_info *sbi = NILFS_SB(sb);
2595 struct nilfs_sc_info *sci = NILFS_SC(sbi);
2596 struct the_nilfs *nilfs = sbi->s_nilfs;
2597 struct nilfs_transaction_info ti;
2598 struct nilfs_segctor_req req = { .mode = SC_LSEG_SR };
2599 int err;
2600
2601 if (unlikely(!sci))
2602 return -EROFS;
2603
2604 nilfs_transaction_lock(sbi, &ti, 1);
2605
2606 err = nilfs_init_gcdat_inode(nilfs);
2607 if (unlikely(err))
2608 goto out_unlock;
2609 err = nilfs_ioctl_prepare_clean_segments(nilfs, argp);
2610 if (unlikely(err))
2611 goto out_unlock;
2612
2613 list_splice_init(&nilfs->ns_gc_inodes, sci->sc_gc_inodes.prev);
2614
2615 for (;;) {
2616 nilfs_segctor_accept(sci, &req);
2617 err = nilfs_segctor_construct(sci, &req);
2618 nilfs_remove_written_gcinodes(nilfs, &sci->sc_gc_inodes);
2619 nilfs_segctor_notify(sci, &req);
2620
2621 if (likely(!err))
2622 break;
2623
2624 nilfs_warning(sb, __func__,
2625 "segment construction failed. (err=%d)", err);
2626 set_current_state(TASK_INTERRUPTIBLE);
2627 schedule_timeout(sci->sc_interval);
2628 }
2629
2630 out_unlock:
2631 nilfs_clear_gcdat_inode(nilfs);
2632 nilfs_transaction_unlock(sbi);
2633 return err;
2634}
2635
2636static void nilfs_segctor_thread_construct(struct nilfs_sc_info *sci, int mode)
2637{
2638 struct nilfs_sb_info *sbi = sci->sc_sbi;
2639 struct nilfs_transaction_info ti;
2640 struct nilfs_segctor_req req = { .mode = mode };
2641
2642 nilfs_transaction_lock(sbi, &ti, 0);
2643
2644 nilfs_segctor_accept(sci, &req);
2645 nilfs_segctor_construct(sci, &req);
2646 nilfs_segctor_notify(sci, &req);
2647
2648 /*
2649 * Unclosed segment should be retried. We do this using sc_timer.
2650 * Timeout of sc_timer will invoke complete construction which leads
2651 * to close the current logical segment.
2652 */
2653 if (test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags))
2654 nilfs_segctor_start_timer(sci);
2655
2656 nilfs_transaction_unlock(sbi);
2657}
2658
2659static void nilfs_segctor_do_immediate_flush(struct nilfs_sc_info *sci)
2660{
2661 int mode = 0;
2662 int err;
2663
2664 spin_lock(&sci->sc_state_lock);
2665 mode = (sci->sc_flush_request & FLUSH_DAT_BIT) ?
2666 SC_FLUSH_DAT : SC_FLUSH_FILE;
2667 spin_unlock(&sci->sc_state_lock);
2668
2669 if (mode) {
2670 err = nilfs_segctor_do_construct(sci, mode);
2671
2672 spin_lock(&sci->sc_state_lock);
2673 sci->sc_flush_request &= (mode == SC_FLUSH_FILE) ?
2674 ~FLUSH_FILE_BIT : ~FLUSH_DAT_BIT;
2675 spin_unlock(&sci->sc_state_lock);
2676 }
2677 clear_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags);
2678}
2679
2680static int nilfs_segctor_flush_mode(struct nilfs_sc_info *sci)
2681{
2682 if (!test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags) ||
2683 time_before(jiffies, sci->sc_lseg_stime + sci->sc_mjcp_freq)) {
2684 if (!(sci->sc_flush_request & ~FLUSH_FILE_BIT))
2685 return SC_FLUSH_FILE;
2686 else if (!(sci->sc_flush_request & ~FLUSH_DAT_BIT))
2687 return SC_FLUSH_DAT;
2688 }
2689 return SC_LSEG_SR;
2690}
2691
2692/**
2693 * nilfs_segctor_thread - main loop of the segment constructor thread.
2694 * @arg: pointer to a struct nilfs_sc_info.
2695 *
2696 * nilfs_segctor_thread() initializes a timer and serves as a daemon
2697 * to execute segment constructions.
2698 */
2699static int nilfs_segctor_thread(void *arg)
2700{
2701 struct nilfs_sc_info *sci = (struct nilfs_sc_info *)arg;
2702 struct timer_list timer;
2703 int timeout = 0;
2704
2705 init_timer(&timer);
2706 timer.data = (unsigned long)current;
2707 timer.function = nilfs_construction_timeout;
2708 sci->sc_timer = &timer;
2709
2710 /* start sync. */
2711 sci->sc_task = current;
2712 wake_up(&sci->sc_wait_task); /* for nilfs_segctor_start_thread() */
2713 printk(KERN_INFO
2714 "segctord starting. Construction interval = %lu seconds, "
2715 "CP frequency < %lu seconds\n",
2716 sci->sc_interval / HZ, sci->sc_mjcp_freq / HZ);
2717
2718 spin_lock(&sci->sc_state_lock);
2719 loop:
2720 for (;;) {
2721 int mode;
2722
2723 if (sci->sc_state & NILFS_SEGCTOR_QUIT)
2724 goto end_thread;
2725
2726 if (timeout || sci->sc_seq_request != sci->sc_seq_done)
2727 mode = SC_LSEG_SR;
2728 else if (!sci->sc_flush_request)
2729 break;
2730 else
2731 mode = nilfs_segctor_flush_mode(sci);
2732
2733 spin_unlock(&sci->sc_state_lock);
2734 nilfs_segctor_thread_construct(sci, mode);
2735 spin_lock(&sci->sc_state_lock);
2736 timeout = 0;
2737 }
2738
2739
2740 if (freezing(current)) {
2741 spin_unlock(&sci->sc_state_lock);
2742 refrigerator();
2743 spin_lock(&sci->sc_state_lock);
2744 } else {
2745 DEFINE_WAIT(wait);
2746 int should_sleep = 1;
2747
2748 prepare_to_wait(&sci->sc_wait_daemon, &wait,
2749 TASK_INTERRUPTIBLE);
2750
2751 if (sci->sc_seq_request != sci->sc_seq_done)
2752 should_sleep = 0;
2753 else if (sci->sc_flush_request)
2754 should_sleep = 0;
2755 else if (sci->sc_state & NILFS_SEGCTOR_COMMIT)
2756 should_sleep = time_before(jiffies,
2757 sci->sc_timer->expires);
2758
2759 if (should_sleep) {
2760 spin_unlock(&sci->sc_state_lock);
2761 schedule();
2762 spin_lock(&sci->sc_state_lock);
2763 }
2764 finish_wait(&sci->sc_wait_daemon, &wait);
2765 timeout = ((sci->sc_state & NILFS_SEGCTOR_COMMIT) &&
2766 time_after_eq(jiffies, sci->sc_timer->expires));
2767 }
2768 goto loop;
2769
2770 end_thread:
2771 spin_unlock(&sci->sc_state_lock);
2772 del_timer_sync(sci->sc_timer);
2773 sci->sc_timer = NULL;
2774
2775 /* end sync. */
2776 sci->sc_task = NULL;
2777 wake_up(&sci->sc_wait_task); /* for nilfs_segctor_kill_thread() */
2778 return 0;
2779}
2780
2781static int nilfs_segctor_start_thread(struct nilfs_sc_info *sci)
2782{
2783 struct task_struct *t;
2784
2785 t = kthread_run(nilfs_segctor_thread, sci, "segctord");
2786 if (IS_ERR(t)) {
2787 int err = PTR_ERR(t);
2788
2789 printk(KERN_ERR "NILFS: error %d creating segctord thread\n",
2790 err);
2791 return err;
2792 }
2793 wait_event(sci->sc_wait_task, sci->sc_task != NULL);
2794 return 0;
2795}
2796
2797static void nilfs_segctor_kill_thread(struct nilfs_sc_info *sci)
2798{
2799 sci->sc_state |= NILFS_SEGCTOR_QUIT;
2800
2801 while (sci->sc_task) {
2802 wake_up(&sci->sc_wait_daemon);
2803 spin_unlock(&sci->sc_state_lock);
2804 wait_event(sci->sc_wait_task, sci->sc_task == NULL);
2805 spin_lock(&sci->sc_state_lock);
2806 }
2807}
2808
2809static int nilfs_segctor_init(struct nilfs_sc_info *sci)
2810{
2811 sci->sc_seq_done = sci->sc_seq_request;
2812
2813 return nilfs_segctor_start_thread(sci);
2814}
2815
2816/*
2817 * Setup & clean-up functions
2818 */
2819static struct nilfs_sc_info *nilfs_segctor_new(struct nilfs_sb_info *sbi)
2820{
2821 struct nilfs_sc_info *sci;
2822
2823 sci = kzalloc(sizeof(*sci), GFP_KERNEL);
2824 if (!sci)
2825 return NULL;
2826
2827 sci->sc_sbi = sbi;
2828 sci->sc_super = sbi->s_super;
2829
2830 init_waitqueue_head(&sci->sc_wait_request);
2831 init_waitqueue_head(&sci->sc_wait_daemon);
2832 init_waitqueue_head(&sci->sc_wait_task);
2833 spin_lock_init(&sci->sc_state_lock);
2834 INIT_LIST_HEAD(&sci->sc_dirty_files);
2835 INIT_LIST_HEAD(&sci->sc_segbufs);
2836 INIT_LIST_HEAD(&sci->sc_gc_inodes);
2837 INIT_LIST_HEAD(&sci->sc_cleaning_segments);
2838 INIT_LIST_HEAD(&sci->sc_copied_buffers);
2839
2840 sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT;
2841 sci->sc_mjcp_freq = HZ * NILFS_SC_DEFAULT_SR_FREQ;
2842 sci->sc_watermark = NILFS_SC_DEFAULT_WATERMARK;
2843
2844 if (sbi->s_interval)
2845 sci->sc_interval = sbi->s_interval;
2846 if (sbi->s_watermark)
2847 sci->sc_watermark = sbi->s_watermark;
2848 return sci;
2849}
2850
2851static void nilfs_segctor_write_out(struct nilfs_sc_info *sci)
2852{
2853 int ret, retrycount = NILFS_SC_CLEANUP_RETRY;
2854
2855 /* The segctord thread was stopped and its timer was removed.
2856 But some tasks remain. */
2857 do {
2858 struct nilfs_sb_info *sbi = sci->sc_sbi;
2859 struct nilfs_transaction_info ti;
2860 struct nilfs_segctor_req req = { .mode = SC_LSEG_SR };
2861
2862 nilfs_transaction_lock(sbi, &ti, 0);
2863 nilfs_segctor_accept(sci, &req);
2864 ret = nilfs_segctor_construct(sci, &req);
2865 nilfs_segctor_notify(sci, &req);
2866 nilfs_transaction_unlock(sbi);
2867
2868 } while (ret && retrycount-- > 0);
2869}
2870
2871/**
2872 * nilfs_segctor_destroy - destroy the segment constructor.
2873 * @sci: nilfs_sc_info
2874 *
2875 * nilfs_segctor_destroy() kills the segctord thread and frees
2876 * the nilfs_sc_info struct.
2877 * Caller must hold the segment semaphore.
2878 */
2879static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
2880{
2881 struct nilfs_sb_info *sbi = sci->sc_sbi;
2882 int flag;
2883
2884 up_write(&sbi->s_nilfs->ns_segctor_sem);
2885
2886 spin_lock(&sci->sc_state_lock);
2887 nilfs_segctor_kill_thread(sci);
2888 flag = ((sci->sc_state & NILFS_SEGCTOR_COMMIT) || sci->sc_flush_request
2889 || sci->sc_seq_request != sci->sc_seq_done);
2890 spin_unlock(&sci->sc_state_lock);
2891
2892 if (flag || nilfs_segctor_confirm(sci))
2893 nilfs_segctor_write_out(sci);
2894
2895 WARN_ON(!list_empty(&sci->sc_copied_buffers));
2896
2897 if (!list_empty(&sci->sc_dirty_files)) {
2898 nilfs_warning(sbi->s_super, __func__,
2899 "dirty file(s) after the final construction\n");
2900 nilfs_dispose_list(sbi, &sci->sc_dirty_files, 1);
2901 }
2902
2903 if (!list_empty(&sci->sc_cleaning_segments))
2904 nilfs_dispose_segment_list(&sci->sc_cleaning_segments);
2905
2906 WARN_ON(!list_empty(&sci->sc_segbufs));
2907
2908 down_write(&sbi->s_nilfs->ns_segctor_sem);
2909
2910 kfree(sci);
2911}
2912
2913/**
2914 * nilfs_attach_segment_constructor - attach a segment constructor
2915 * @sbi: nilfs_sb_info
2916 *
2917 * nilfs_attach_segment_constructor() allocates a struct nilfs_sc_info,
2918 * initilizes it, and starts the segment constructor.
2919 *
2920 * Return Value: On success, 0 is returned. On error, one of the following
2921 * negative error code is returned.
2922 *
2923 * %-ENOMEM - Insufficient memory available.
2924 */
2925int nilfs_attach_segment_constructor(struct nilfs_sb_info *sbi)
2926{
2927 struct the_nilfs *nilfs = sbi->s_nilfs;
2928 int err;
2929
2930 /* Each field of nilfs_segctor is cleared through the initialization
2931 of super-block info */
2932 sbi->s_sc_info = nilfs_segctor_new(sbi);
2933 if (!sbi->s_sc_info)
2934 return -ENOMEM;
2935
2936 nilfs_attach_writer(nilfs, sbi);
2937 err = nilfs_segctor_init(NILFS_SC(sbi));
2938 if (err) {
2939 nilfs_detach_writer(nilfs, sbi);
2940 kfree(sbi->s_sc_info);
2941 sbi->s_sc_info = NULL;
2942 }
2943 return err;
2944}
2945
2946/**
2947 * nilfs_detach_segment_constructor - destroy the segment constructor
2948 * @sbi: nilfs_sb_info
2949 *
2950 * nilfs_detach_segment_constructor() kills the segment constructor daemon,
2951 * frees the struct nilfs_sc_info, and destroy the dirty file list.
2952 */
2953void nilfs_detach_segment_constructor(struct nilfs_sb_info *sbi)
2954{
2955 struct the_nilfs *nilfs = sbi->s_nilfs;
2956 LIST_HEAD(garbage_list);
2957
2958 down_write(&nilfs->ns_segctor_sem);
2959 if (NILFS_SC(sbi)) {
2960 nilfs_segctor_destroy(NILFS_SC(sbi));
2961 sbi->s_sc_info = NULL;
2962 }
2963
2964 /* Force to free the list of dirty files */
2965 spin_lock(&sbi->s_inode_lock);
2966 if (!list_empty(&sbi->s_dirty_files)) {
2967 list_splice_init(&sbi->s_dirty_files, &garbage_list);
2968 nilfs_warning(sbi->s_super, __func__,
2969 "Non empty dirty list after the last "
2970 "segment construction\n");
2971 }
2972 spin_unlock(&sbi->s_inode_lock);
2973 up_write(&nilfs->ns_segctor_sem);
2974
2975 nilfs_dispose_list(sbi, &garbage_list, 1);
2976 nilfs_detach_writer(nilfs, sbi);
2977}
diff --git a/fs/nilfs2/segment.h b/fs/nilfs2/segment.h
new file mode 100644
index 000000000000..a98fc1ed0bbb
--- /dev/null
+++ b/fs/nilfs2/segment.h
@@ -0,0 +1,243 @@
1/*
2 * segment.h - NILFS Segment constructor prototypes and definitions
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23#ifndef _NILFS_SEGMENT_H
24#define _NILFS_SEGMENT_H
25
26#include <linux/types.h>
27#include <linux/fs.h>
28#include <linux/buffer_head.h>
29#include <linux/nilfs2_fs.h>
30#include "sb.h"
31
32/**
33 * struct nilfs_recovery_info - Recovery infomation
34 * @ri_need_recovery: Recovery status
35 * @ri_super_root: Block number of the last super root
36 * @ri_ri_cno: Number of the last checkpoint
37 * @ri_lsegs_start: Region for roll-forwarding (start block number)
38 * @ri_lsegs_end: Region for roll-forwarding (end block number)
39 * @ri_lseg_start_seq: Sequence value of the segment at ri_lsegs_start
40 * @ri_used_segments: List of segments to be mark active
41 * @ri_pseg_start: Block number of the last partial segment
42 * @ri_seq: Sequence number on the last partial segment
43 * @ri_segnum: Segment number on the last partial segment
44 * @ri_nextnum: Next segment number on the last partial segment
45 */
46struct nilfs_recovery_info {
47 int ri_need_recovery;
48 sector_t ri_super_root;
49 __u64 ri_cno;
50
51 sector_t ri_lsegs_start;
52 sector_t ri_lsegs_end;
53 u64 ri_lsegs_start_seq;
54 struct list_head ri_used_segments;
55 sector_t ri_pseg_start;
56 u64 ri_seq;
57 __u64 ri_segnum;
58 __u64 ri_nextnum;
59};
60
61/* ri_need_recovery */
62#define NILFS_RECOVERY_SR_UPDATED 1 /* The super root was updated */
63#define NILFS_RECOVERY_ROLLFORWARD_DONE 2 /* Rollforward was carried out */
64
65/**
66 * struct nilfs_cstage - Context of collection stage
67 * @scnt: Stage count
68 * @flags: State flags
69 * @dirty_file_ptr: Pointer on dirty_files list, or inode of a target file
70 * @gc_inode_ptr: Pointer on the list of gc-inodes
71 */
72struct nilfs_cstage {
73 int scnt;
74 unsigned flags;
75 struct nilfs_inode_info *dirty_file_ptr;
76 struct nilfs_inode_info *gc_inode_ptr;
77};
78
79struct nilfs_segment_buffer;
80
81struct nilfs_segsum_pointer {
82 struct buffer_head *bh;
83 unsigned offset; /* offset in bytes */
84};
85
86/**
87 * struct nilfs_sc_info - Segment constructor information
88 * @sc_super: Back pointer to super_block struct
89 * @sc_sbi: Back pointer to nilfs_sb_info struct
90 * @sc_nblk_inc: Block count of current generation
91 * @sc_dirty_files: List of files to be written
92 * @sc_gc_inodes: List of GC inodes having blocks to be written
93 * @sc_cleaning_segments: List of segments to be freed through construction
94 * @sc_copied_buffers: List of copied buffers (buffer heads) to freeze data
95 * @sc_dsync_inode: inode whose data pages are written for a sync operation
96 * @sc_dsync_start: start byte offset of data pages
97 * @sc_dsync_end: end byte offset of data pages (inclusive)
98 * @sc_segbufs: List of segment buffers
99 * @sc_segbuf_nblocks: Number of available blocks in segment buffers.
100 * @sc_curseg: Current segment buffer
101 * @sc_super_root: Pointer to the super root buffer
102 * @sc_stage: Collection stage
103 * @sc_finfo_ptr: pointer to the current finfo struct in the segment summary
104 * @sc_binfo_ptr: pointer to the current binfo struct in the segment summary
105 * @sc_blk_cnt: Block count of a file
106 * @sc_datablk_cnt: Data block count of a file
107 * @sc_nblk_this_inc: Number of blocks included in the current logical segment
108 * @sc_seg_ctime: Creation time
109 * @sc_flags: Internal flags
110 * @sc_state_lock: spinlock for sc_state and so on
111 * @sc_state: Segctord state flags
112 * @sc_flush_request: inode bitmap of metadata files to be flushed
113 * @sc_wait_request: Client request queue
114 * @sc_wait_daemon: Daemon wait queue
115 * @sc_wait_task: Start/end wait queue to control segctord task
116 * @sc_seq_request: Request counter
117 * @sc_seq_done: Completion counter
118 * @sc_sync: Request of explicit sync operation
119 * @sc_interval: Timeout value of background construction
120 * @sc_mjcp_freq: Frequency of creating checkpoints
121 * @sc_lseg_stime: Start time of the latest logical segment
122 * @sc_watermark: Watermark for the number of dirty buffers
123 * @sc_timer: Timer for segctord
124 * @sc_task: current thread of segctord
125 */
126struct nilfs_sc_info {
127 struct super_block *sc_super;
128 struct nilfs_sb_info *sc_sbi;
129
130 unsigned long sc_nblk_inc;
131
132 struct list_head sc_dirty_files;
133 struct list_head sc_gc_inodes;
134 struct list_head sc_cleaning_segments;
135 struct list_head sc_copied_buffers;
136
137 struct nilfs_inode_info *sc_dsync_inode;
138 loff_t sc_dsync_start;
139 loff_t sc_dsync_end;
140
141 /* Segment buffers */
142 struct list_head sc_segbufs;
143 unsigned long sc_segbuf_nblocks;
144 struct nilfs_segment_buffer *sc_curseg;
145 struct buffer_head *sc_super_root;
146
147 struct nilfs_cstage sc_stage;
148
149 struct nilfs_segsum_pointer sc_finfo_ptr;
150 struct nilfs_segsum_pointer sc_binfo_ptr;
151 unsigned long sc_blk_cnt;
152 unsigned long sc_datablk_cnt;
153 unsigned long sc_nblk_this_inc;
154 time_t sc_seg_ctime;
155
156 unsigned long sc_flags;
157
158 spinlock_t sc_state_lock;
159 unsigned long sc_state;
160 unsigned long sc_flush_request;
161
162 wait_queue_head_t sc_wait_request;
163 wait_queue_head_t sc_wait_daemon;
164 wait_queue_head_t sc_wait_task;
165
166 __u32 sc_seq_request;
167 __u32 sc_seq_done;
168
169 int sc_sync;
170 unsigned long sc_interval;
171 unsigned long sc_mjcp_freq;
172 unsigned long sc_lseg_stime; /* in 1/HZ seconds */
173 unsigned long sc_watermark;
174
175 struct timer_list *sc_timer;
176 struct task_struct *sc_task;
177};
178
179/* sc_flags */
180enum {
181 NILFS_SC_DIRTY, /* One or more dirty meta-data blocks exist */
182 NILFS_SC_UNCLOSED, /* Logical segment is not closed */
183 NILFS_SC_SUPER_ROOT, /* The latest segment has a super root */
184 NILFS_SC_PRIOR_FLUSH, /* Requesting immediate flush without making a
185 checkpoint */
186 NILFS_SC_HAVE_DELTA, /* Next checkpoint will have update of files
187 other than DAT, cpfile, sufile, or files
188 moved by GC */
189};
190
191/* sc_state */
192#define NILFS_SEGCTOR_QUIT 0x0001 /* segctord is being destroyed */
193#define NILFS_SEGCTOR_COMMIT 0x0004 /* committed transaction exists */
194
195/*
196 * Constant parameters
197 */
198#define NILFS_SC_CLEANUP_RETRY 3 /* Retry count of construction when
199 destroying segctord */
200
201/*
202 * Default values of timeout, in seconds.
203 */
204#define NILFS_SC_DEFAULT_TIMEOUT 5 /* Timeout value of dirty blocks.
205 It triggers construction of a
206 logical segment with a super root */
207#define NILFS_SC_DEFAULT_SR_FREQ 30 /* Maximum frequency of super root
208 creation */
209
210/*
211 * The default threshold amount of data, in block counts.
212 */
213#define NILFS_SC_DEFAULT_WATERMARK 3600
214
215
216/* segment.c */
217extern int nilfs_init_transaction_cache(void);
218extern void nilfs_destroy_transaction_cache(void);
219extern void nilfs_relax_pressure_in_lock(struct super_block *);
220
221extern int nilfs_construct_segment(struct super_block *);
222extern int nilfs_construct_dsync_segment(struct super_block *, struct inode *,
223 loff_t, loff_t);
224extern void nilfs_flush_segment(struct super_block *, ino_t);
225extern int nilfs_clean_segments(struct super_block *, void __user *);
226
227extern int nilfs_segctor_add_segments_to_be_freed(struct nilfs_sc_info *,
228 __u64 *, size_t);
229extern void nilfs_segctor_clear_segments_to_be_freed(struct nilfs_sc_info *);
230
231extern int nilfs_attach_segment_constructor(struct nilfs_sb_info *);
232extern void nilfs_detach_segment_constructor(struct nilfs_sb_info *);
233
234/* recovery.c */
235extern int nilfs_read_super_root_block(struct super_block *, sector_t,
236 struct buffer_head **, int);
237extern int nilfs_search_super_root(struct the_nilfs *, struct nilfs_sb_info *,
238 struct nilfs_recovery_info *);
239extern int nilfs_recover_logical_segments(struct the_nilfs *,
240 struct nilfs_sb_info *,
241 struct nilfs_recovery_info *);
242
243#endif /* _NILFS_SEGMENT_H */
diff --git a/fs/nilfs2/sufile.c b/fs/nilfs2/sufile.c
new file mode 100644
index 000000000000..c774cf397e2f
--- /dev/null
+++ b/fs/nilfs2/sufile.c
@@ -0,0 +1,640 @@
1/*
2 * sufile.c - NILFS segment usage file.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#include <linux/kernel.h>
24#include <linux/fs.h>
25#include <linux/string.h>
26#include <linux/buffer_head.h>
27#include <linux/errno.h>
28#include <linux/nilfs2_fs.h>
29#include "mdt.h"
30#include "sufile.h"
31
32
33static inline unsigned long
34nilfs_sufile_segment_usages_per_block(const struct inode *sufile)
35{
36 return NILFS_MDT(sufile)->mi_entries_per_block;
37}
38
39static unsigned long
40nilfs_sufile_get_blkoff(const struct inode *sufile, __u64 segnum)
41{
42 __u64 t = segnum + NILFS_MDT(sufile)->mi_first_entry_offset;
43 do_div(t, nilfs_sufile_segment_usages_per_block(sufile));
44 return (unsigned long)t;
45}
46
47static unsigned long
48nilfs_sufile_get_offset(const struct inode *sufile, __u64 segnum)
49{
50 __u64 t = segnum + NILFS_MDT(sufile)->mi_first_entry_offset;
51 return do_div(t, nilfs_sufile_segment_usages_per_block(sufile));
52}
53
54static unsigned long
55nilfs_sufile_segment_usages_in_block(const struct inode *sufile, __u64 curr,
56 __u64 max)
57{
58 return min_t(unsigned long,
59 nilfs_sufile_segment_usages_per_block(sufile) -
60 nilfs_sufile_get_offset(sufile, curr),
61 max - curr + 1);
62}
63
64static inline struct nilfs_sufile_header *
65nilfs_sufile_block_get_header(const struct inode *sufile,
66 struct buffer_head *bh,
67 void *kaddr)
68{
69 return kaddr + bh_offset(bh);
70}
71
72static struct nilfs_segment_usage *
73nilfs_sufile_block_get_segment_usage(const struct inode *sufile, __u64 segnum,
74 struct buffer_head *bh, void *kaddr)
75{
76 return kaddr + bh_offset(bh) +
77 nilfs_sufile_get_offset(sufile, segnum) *
78 NILFS_MDT(sufile)->mi_entry_size;
79}
80
81static inline int nilfs_sufile_get_header_block(struct inode *sufile,
82 struct buffer_head **bhp)
83{
84 return nilfs_mdt_get_block(sufile, 0, 0, NULL, bhp);
85}
86
87static inline int
88nilfs_sufile_get_segment_usage_block(struct inode *sufile, __u64 segnum,
89 int create, struct buffer_head **bhp)
90{
91 return nilfs_mdt_get_block(sufile,
92 nilfs_sufile_get_blkoff(sufile, segnum),
93 create, NULL, bhp);
94}
95
96/**
97 * nilfs_sufile_alloc - allocate a segment
98 * @sufile: inode of segment usage file
99 * @segnump: pointer to segment number
100 *
101 * Description: nilfs_sufile_alloc() allocates a clean segment.
102 *
103 * Return Value: On success, 0 is returned and the segment number of the
104 * allocated segment is stored in the place pointed by @segnump. On error, one
105 * of the following negative error codes is returned.
106 *
107 * %-EIO - I/O error.
108 *
109 * %-ENOMEM - Insufficient amount of memory available.
110 *
111 * %-ENOSPC - No clean segment left.
112 */
113int nilfs_sufile_alloc(struct inode *sufile, __u64 *segnump)
114{
115 struct buffer_head *header_bh, *su_bh;
116 struct the_nilfs *nilfs;
117 struct nilfs_sufile_header *header;
118 struct nilfs_segment_usage *su;
119 size_t susz = NILFS_MDT(sufile)->mi_entry_size;
120 __u64 segnum, maxsegnum, last_alloc;
121 void *kaddr;
122 unsigned long nsegments, ncleansegs, nsus;
123 int ret, i, j;
124
125 down_write(&NILFS_MDT(sufile)->mi_sem);
126
127 nilfs = NILFS_MDT(sufile)->mi_nilfs;
128
129 ret = nilfs_sufile_get_header_block(sufile, &header_bh);
130 if (ret < 0)
131 goto out_sem;
132 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
133 header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr);
134 ncleansegs = le64_to_cpu(header->sh_ncleansegs);
135 last_alloc = le64_to_cpu(header->sh_last_alloc);
136 kunmap_atomic(kaddr, KM_USER0);
137
138 nsegments = nilfs_sufile_get_nsegments(sufile);
139 segnum = last_alloc + 1;
140 maxsegnum = nsegments - 1;
141 for (i = 0; i < nsegments; i += nsus) {
142 if (segnum >= nsegments) {
143 /* wrap around */
144 segnum = 0;
145 maxsegnum = last_alloc;
146 }
147 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 1,
148 &su_bh);
149 if (ret < 0)
150 goto out_header;
151 kaddr = kmap_atomic(su_bh->b_page, KM_USER0);
152 su = nilfs_sufile_block_get_segment_usage(
153 sufile, segnum, su_bh, kaddr);
154
155 nsus = nilfs_sufile_segment_usages_in_block(
156 sufile, segnum, maxsegnum);
157 for (j = 0; j < nsus; j++, su = (void *)su + susz, segnum++) {
158 if (!nilfs_segment_usage_clean(su))
159 continue;
160 /* found a clean segment */
161 nilfs_segment_usage_set_dirty(su);
162 kunmap_atomic(kaddr, KM_USER0);
163
164 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
165 header = nilfs_sufile_block_get_header(
166 sufile, header_bh, kaddr);
167 le64_add_cpu(&header->sh_ncleansegs, -1);
168 le64_add_cpu(&header->sh_ndirtysegs, 1);
169 header->sh_last_alloc = cpu_to_le64(segnum);
170 kunmap_atomic(kaddr, KM_USER0);
171
172 nilfs_mdt_mark_buffer_dirty(header_bh);
173 nilfs_mdt_mark_buffer_dirty(su_bh);
174 nilfs_mdt_mark_dirty(sufile);
175 brelse(su_bh);
176 *segnump = segnum;
177 goto out_header;
178 }
179
180 kunmap_atomic(kaddr, KM_USER0);
181 brelse(su_bh);
182 }
183
184 /* no segments left */
185 ret = -ENOSPC;
186
187 out_header:
188 brelse(header_bh);
189
190 out_sem:
191 up_write(&NILFS_MDT(sufile)->mi_sem);
192 return ret;
193}
194
195/**
196 * nilfs_sufile_cancel_free -
197 * @sufile: inode of segment usage file
198 * @segnum: segment number
199 *
200 * Description:
201 *
202 * Return Value: On success, 0 is returned. On error, one of the following
203 * negative error codes is returned.
204 *
205 * %-EIO - I/O error.
206 *
207 * %-ENOMEM - Insufficient amount of memory available.
208 */
209int nilfs_sufile_cancel_free(struct inode *sufile, __u64 segnum)
210{
211 struct buffer_head *header_bh, *su_bh;
212 struct the_nilfs *nilfs;
213 struct nilfs_sufile_header *header;
214 struct nilfs_segment_usage *su;
215 void *kaddr;
216 int ret;
217
218 down_write(&NILFS_MDT(sufile)->mi_sem);
219
220 nilfs = NILFS_MDT(sufile)->mi_nilfs;
221
222 ret = nilfs_sufile_get_header_block(sufile, &header_bh);
223 if (ret < 0)
224 goto out_sem;
225
226 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &su_bh);
227 if (ret < 0)
228 goto out_header;
229
230 kaddr = kmap_atomic(su_bh->b_page, KM_USER0);
231 su = nilfs_sufile_block_get_segment_usage(
232 sufile, segnum, su_bh, kaddr);
233 if (unlikely(!nilfs_segment_usage_clean(su))) {
234 printk(KERN_WARNING "%s: segment %llu must be clean\n",
235 __func__, (unsigned long long)segnum);
236 kunmap_atomic(kaddr, KM_USER0);
237 goto out_su_bh;
238 }
239 nilfs_segment_usage_set_dirty(su);
240 kunmap_atomic(kaddr, KM_USER0);
241
242 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
243 header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr);
244 le64_add_cpu(&header->sh_ncleansegs, -1);
245 le64_add_cpu(&header->sh_ndirtysegs, 1);
246 kunmap_atomic(kaddr, KM_USER0);
247
248 nilfs_mdt_mark_buffer_dirty(header_bh);
249 nilfs_mdt_mark_buffer_dirty(su_bh);
250 nilfs_mdt_mark_dirty(sufile);
251
252 out_su_bh:
253 brelse(su_bh);
254 out_header:
255 brelse(header_bh);
256 out_sem:
257 up_write(&NILFS_MDT(sufile)->mi_sem);
258 return ret;
259}
260
261/**
262 * nilfs_sufile_freev - free segments
263 * @sufile: inode of segment usage file
264 * @segnum: array of segment numbers
265 * @nsegs: number of segments
266 *
267 * Description: nilfs_sufile_freev() frees segments specified by @segnum and
268 * @nsegs, which must have been returned by a previous call to
269 * nilfs_sufile_alloc().
270 *
271 * Return Value: On success, 0 is returned. On error, one of the following
272 * negative error codes is returned.
273 *
274 * %-EIO - I/O error.
275 *
276 * %-ENOMEM - Insufficient amount of memory available.
277 */
278#define NILFS_SUFILE_FREEV_PREALLOC 16
279int nilfs_sufile_freev(struct inode *sufile, __u64 *segnum, size_t nsegs)
280{
281 struct buffer_head *header_bh, **su_bh,
282 *su_bh_prealloc[NILFS_SUFILE_FREEV_PREALLOC];
283 struct the_nilfs *nilfs;
284 struct nilfs_sufile_header *header;
285 struct nilfs_segment_usage *su;
286 void *kaddr;
287 int ret, i;
288
289 down_write(&NILFS_MDT(sufile)->mi_sem);
290
291 nilfs = NILFS_MDT(sufile)->mi_nilfs;
292
293 /* prepare resources */
294 if (nsegs <= NILFS_SUFILE_FREEV_PREALLOC)
295 su_bh = su_bh_prealloc;
296 else {
297 su_bh = kmalloc(sizeof(*su_bh) * nsegs, GFP_NOFS);
298 if (su_bh == NULL) {
299 ret = -ENOMEM;
300 goto out_sem;
301 }
302 }
303
304 ret = nilfs_sufile_get_header_block(sufile, &header_bh);
305 if (ret < 0)
306 goto out_su_bh;
307 for (i = 0; i < nsegs; i++) {
308 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum[i],
309 0, &su_bh[i]);
310 if (ret < 0)
311 goto out_bh;
312 }
313
314 /* free segments */
315 for (i = 0; i < nsegs; i++) {
316 kaddr = kmap_atomic(su_bh[i]->b_page, KM_USER0);
317 su = nilfs_sufile_block_get_segment_usage(
318 sufile, segnum[i], su_bh[i], kaddr);
319 WARN_ON(nilfs_segment_usage_error(su));
320 nilfs_segment_usage_set_clean(su);
321 kunmap_atomic(kaddr, KM_USER0);
322 nilfs_mdt_mark_buffer_dirty(su_bh[i]);
323 }
324 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
325 header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr);
326 le64_add_cpu(&header->sh_ncleansegs, nsegs);
327 le64_add_cpu(&header->sh_ndirtysegs, -(u64)nsegs);
328 kunmap_atomic(kaddr, KM_USER0);
329 nilfs_mdt_mark_buffer_dirty(header_bh);
330 nilfs_mdt_mark_dirty(sufile);
331
332 out_bh:
333 for (i--; i >= 0; i--)
334 brelse(su_bh[i]);
335 brelse(header_bh);
336
337 out_su_bh:
338 if (su_bh != su_bh_prealloc)
339 kfree(su_bh);
340
341 out_sem:
342 up_write(&NILFS_MDT(sufile)->mi_sem);
343 return ret;
344}
345
346/**
347 * nilfs_sufile_free -
348 * @sufile:
349 * @segnum:
350 */
351int nilfs_sufile_free(struct inode *sufile, __u64 segnum)
352{
353 return nilfs_sufile_freev(sufile, &segnum, 1);
354}
355
356/**
357 * nilfs_sufile_get_segment_usage - get a segment usage
358 * @sufile: inode of segment usage file
359 * @segnum: segment number
360 * @sup: pointer to segment usage
361 * @bhp: pointer to buffer head
362 *
363 * Description: nilfs_sufile_get_segment_usage() acquires the segment usage
364 * specified by @segnum.
365 *
366 * Return Value: On success, 0 is returned, and the segment usage and the
367 * buffer head of the buffer on which the segment usage is located are stored
368 * in the place pointed by @sup and @bhp, respectively. On error, one of the
369 * following negative error codes is returned.
370 *
371 * %-EIO - I/O error.
372 *
373 * %-ENOMEM - Insufficient amount of memory available.
374 *
375 * %-EINVAL - Invalid segment usage number.
376 */
377int nilfs_sufile_get_segment_usage(struct inode *sufile, __u64 segnum,
378 struct nilfs_segment_usage **sup,
379 struct buffer_head **bhp)
380{
381 struct buffer_head *bh;
382 struct nilfs_segment_usage *su;
383 void *kaddr;
384 int ret;
385
386 /* segnum is 0 origin */
387 if (segnum >= nilfs_sufile_get_nsegments(sufile))
388 return -EINVAL;
389 down_write(&NILFS_MDT(sufile)->mi_sem);
390 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 1, &bh);
391 if (ret < 0)
392 goto out_sem;
393 kaddr = kmap(bh->b_page);
394 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr);
395 if (nilfs_segment_usage_error(su)) {
396 kunmap(bh->b_page);
397 brelse(bh);
398 ret = -EINVAL;
399 goto out_sem;
400 }
401
402 if (sup != NULL)
403 *sup = su;
404 *bhp = bh;
405
406 out_sem:
407 up_write(&NILFS_MDT(sufile)->mi_sem);
408 return ret;
409}
410
411/**
412 * nilfs_sufile_put_segment_usage - put a segment usage
413 * @sufile: inode of segment usage file
414 * @segnum: segment number
415 * @bh: buffer head
416 *
417 * Description: nilfs_sufile_put_segment_usage() releases the segment usage
418 * specified by @segnum. @bh must be the buffer head which have been returned
419 * by a previous call to nilfs_sufile_get_segment_usage() with @segnum.
420 */
421void nilfs_sufile_put_segment_usage(struct inode *sufile, __u64 segnum,
422 struct buffer_head *bh)
423{
424 kunmap(bh->b_page);
425 brelse(bh);
426}
427
428/**
429 * nilfs_sufile_get_stat - get segment usage statistics
430 * @sufile: inode of segment usage file
431 * @stat: pointer to a structure of segment usage statistics
432 *
433 * Description: nilfs_sufile_get_stat() returns information about segment
434 * usage.
435 *
436 * Return Value: On success, 0 is returned, and segment usage information is
437 * stored in the place pointed by @stat. On error, one of the following
438 * negative error codes is returned.
439 *
440 * %-EIO - I/O error.
441 *
442 * %-ENOMEM - Insufficient amount of memory available.
443 */
444int nilfs_sufile_get_stat(struct inode *sufile, struct nilfs_sustat *sustat)
445{
446 struct buffer_head *header_bh;
447 struct nilfs_sufile_header *header;
448 struct the_nilfs *nilfs = NILFS_MDT(sufile)->mi_nilfs;
449 void *kaddr;
450 int ret;
451
452 down_read(&NILFS_MDT(sufile)->mi_sem);
453
454 ret = nilfs_sufile_get_header_block(sufile, &header_bh);
455 if (ret < 0)
456 goto out_sem;
457
458 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
459 header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr);
460 sustat->ss_nsegs = nilfs_sufile_get_nsegments(sufile);
461 sustat->ss_ncleansegs = le64_to_cpu(header->sh_ncleansegs);
462 sustat->ss_ndirtysegs = le64_to_cpu(header->sh_ndirtysegs);
463 sustat->ss_ctime = nilfs->ns_ctime;
464 sustat->ss_nongc_ctime = nilfs->ns_nongc_ctime;
465 spin_lock(&nilfs->ns_last_segment_lock);
466 sustat->ss_prot_seq = nilfs->ns_prot_seq;
467 spin_unlock(&nilfs->ns_last_segment_lock);
468 kunmap_atomic(kaddr, KM_USER0);
469 brelse(header_bh);
470
471 out_sem:
472 up_read(&NILFS_MDT(sufile)->mi_sem);
473 return ret;
474}
475
476/**
477 * nilfs_sufile_get_ncleansegs - get the number of clean segments
478 * @sufile: inode of segment usage file
479 * @nsegsp: pointer to the number of clean segments
480 *
481 * Description: nilfs_sufile_get_ncleansegs() acquires the number of clean
482 * segments.
483 *
484 * Return Value: On success, 0 is returned and the number of clean segments is
485 * stored in the place pointed by @nsegsp. On error, one of the following
486 * negative error codes is returned.
487 *
488 * %-EIO - I/O error.
489 *
490 * %-ENOMEM - Insufficient amount of memory available.
491 */
492int nilfs_sufile_get_ncleansegs(struct inode *sufile, unsigned long *nsegsp)
493{
494 struct nilfs_sustat sustat;
495 int ret;
496
497 ret = nilfs_sufile_get_stat(sufile, &sustat);
498 if (ret == 0)
499 *nsegsp = sustat.ss_ncleansegs;
500 return ret;
501}
502
503/**
504 * nilfs_sufile_set_error - mark a segment as erroneous
505 * @sufile: inode of segment usage file
506 * @segnum: segment number
507 *
508 * Description: nilfs_sufile_set_error() marks the segment specified by
509 * @segnum as erroneous. The error segment will never be used again.
510 *
511 * Return Value: On success, 0 is returned. On error, one of the following
512 * negative error codes is returned.
513 *
514 * %-EIO - I/O error.
515 *
516 * %-ENOMEM - Insufficient amount of memory available.
517 *
518 * %-EINVAL - Invalid segment usage number.
519 */
520int nilfs_sufile_set_error(struct inode *sufile, __u64 segnum)
521{
522 struct buffer_head *header_bh, *su_bh;
523 struct nilfs_segment_usage *su;
524 struct nilfs_sufile_header *header;
525 void *kaddr;
526 int ret;
527
528 if (unlikely(segnum >= nilfs_sufile_get_nsegments(sufile))) {
529 printk(KERN_WARNING "%s: invalid segment number: %llu\n",
530 __func__, (unsigned long long)segnum);
531 return -EINVAL;
532 }
533 down_write(&NILFS_MDT(sufile)->mi_sem);
534
535 ret = nilfs_sufile_get_header_block(sufile, &header_bh);
536 if (ret < 0)
537 goto out_sem;
538 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &su_bh);
539 if (ret < 0)
540 goto out_header;
541
542 kaddr = kmap_atomic(su_bh->b_page, KM_USER0);
543 su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr);
544 if (nilfs_segment_usage_error(su)) {
545 kunmap_atomic(kaddr, KM_USER0);
546 brelse(su_bh);
547 goto out_header;
548 }
549
550 nilfs_segment_usage_set_error(su);
551 kunmap_atomic(kaddr, KM_USER0);
552 brelse(su_bh);
553
554 kaddr = kmap_atomic(header_bh->b_page, KM_USER0);
555 header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr);
556 le64_add_cpu(&header->sh_ndirtysegs, -1);
557 kunmap_atomic(kaddr, KM_USER0);
558 nilfs_mdt_mark_buffer_dirty(header_bh);
559 nilfs_mdt_mark_buffer_dirty(su_bh);
560 nilfs_mdt_mark_dirty(sufile);
561 brelse(su_bh);
562
563 out_header:
564 brelse(header_bh);
565
566 out_sem:
567 up_write(&NILFS_MDT(sufile)->mi_sem);
568 return ret;
569}
570
571/**
572 * nilfs_sufile_get_suinfo -
573 * @sufile: inode of segment usage file
574 * @segnum: segment number to start looking
575 * @si: array of suinfo
576 * @nsi: size of suinfo array
577 *
578 * Description:
579 *
580 * Return Value: On success, 0 is returned and .... On error, one of the
581 * following negative error codes is returned.
582 *
583 * %-EIO - I/O error.
584 *
585 * %-ENOMEM - Insufficient amount of memory available.
586 */
587ssize_t nilfs_sufile_get_suinfo(struct inode *sufile, __u64 segnum,
588 struct nilfs_suinfo *si, size_t nsi)
589{
590 struct buffer_head *su_bh;
591 struct nilfs_segment_usage *su;
592 size_t susz = NILFS_MDT(sufile)->mi_entry_size;
593 struct the_nilfs *nilfs = NILFS_MDT(sufile)->mi_nilfs;
594 void *kaddr;
595 unsigned long nsegs, segusages_per_block;
596 ssize_t n;
597 int ret, i, j;
598
599 down_read(&NILFS_MDT(sufile)->mi_sem);
600
601 segusages_per_block = nilfs_sufile_segment_usages_per_block(sufile);
602 nsegs = min_t(unsigned long,
603 nilfs_sufile_get_nsegments(sufile) - segnum,
604 nsi);
605 for (i = 0; i < nsegs; i += n, segnum += n) {
606 n = min_t(unsigned long,
607 segusages_per_block -
608 nilfs_sufile_get_offset(sufile, segnum),
609 nsegs - i);
610 ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0,
611 &su_bh);
612 if (ret < 0) {
613 if (ret != -ENOENT)
614 goto out;
615 /* hole */
616 memset(&si[i], 0, sizeof(struct nilfs_suinfo) * n);
617 continue;
618 }
619
620 kaddr = kmap_atomic(su_bh->b_page, KM_USER0);
621 su = nilfs_sufile_block_get_segment_usage(
622 sufile, segnum, su_bh, kaddr);
623 for (j = 0; j < n; j++, su = (void *)su + susz) {
624 si[i + j].sui_lastmod = le64_to_cpu(su->su_lastmod);
625 si[i + j].sui_nblocks = le32_to_cpu(su->su_nblocks);
626 si[i + j].sui_flags = le32_to_cpu(su->su_flags) &
627 ~(1UL << NILFS_SEGMENT_USAGE_ACTIVE);
628 if (nilfs_segment_is_active(nilfs, segnum + i + j))
629 si[i + j].sui_flags |=
630 (1UL << NILFS_SEGMENT_USAGE_ACTIVE);
631 }
632 kunmap_atomic(kaddr, KM_USER0);
633 brelse(su_bh);
634 }
635 ret = nsegs;
636
637 out:
638 up_read(&NILFS_MDT(sufile)->mi_sem);
639 return ret;
640}
diff --git a/fs/nilfs2/sufile.h b/fs/nilfs2/sufile.h
new file mode 100644
index 000000000000..d595f33a768d
--- /dev/null
+++ b/fs/nilfs2/sufile.h
@@ -0,0 +1,54 @@
1/*
2 * sufile.h - NILFS segment usage file.
3 *
4 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>.
21 */
22
23#ifndef _NILFS_SUFILE_H
24#define _NILFS_SUFILE_H
25
26#include <linux/fs.h>
27#include <linux/buffer_head.h>
28#include <linux/nilfs2_fs.h>
29#include "mdt.h"
30
31#define NILFS_SUFILE_GFP NILFS_MDT_GFP
32
33static inline unsigned long nilfs_sufile_get_nsegments(struct inode *sufile)
34{
35 return NILFS_MDT(sufile)->mi_nilfs->ns_nsegments;
36}
37
38int nilfs_sufile_alloc(struct inode *, __u64 *);
39int nilfs_sufile_cancel_free(struct inode *, __u64);
40int nilfs_sufile_freev(struct inode *, __u64 *, size_t);
41int nilfs_sufile_free(struct inode *, __u64);
42int nilfs_sufile_get_segment_usage(struct inode *, __u64,
43 struct nilfs_segment_usage **,
44 struct buffer_head **);
45void nilfs_sufile_put_segment_usage(struct inode *, __u64,
46 struct buffer_head *);
47int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
48int nilfs_sufile_get_ncleansegs(struct inode *, unsigned long *);
49int nilfs_sufile_set_error(struct inode *, __u64);
50ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, struct nilfs_suinfo *,
51 size_t);
52
53
54#endif /* _NILFS_SUFILE_H */
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
new file mode 100644
index 000000000000..e117e1ea9bff
--- /dev/null
+++ b/fs/nilfs2/super.c
@@ -0,0 +1,1323 @@
1/*
2 * super.c - NILFS module and super block management.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 */
22/*
23 * linux/fs/ext2/super.c
24 *
25 * Copyright (C) 1992, 1993, 1994, 1995
26 * Remy Card (card@masi.ibp.fr)
27 * Laboratoire MASI - Institut Blaise Pascal
28 * Universite Pierre et Marie Curie (Paris VI)
29 *
30 * from
31 *
32 * linux/fs/minix/inode.c
33 *
34 * Copyright (C) 1991, 1992 Linus Torvalds
35 *
36 * Big-endian to little-endian byte-swapping/bitmaps by
37 * David S. Miller (davem@caip.rutgers.edu), 1995
38 */
39
40#include <linux/module.h>
41#include <linux/string.h>
42#include <linux/slab.h>
43#include <linux/init.h>
44#include <linux/blkdev.h>
45#include <linux/parser.h>
46#include <linux/random.h>
47#include <linux/crc32.h>
48#include <linux/smp_lock.h>
49#include <linux/vfs.h>
50#include <linux/writeback.h>
51#include <linux/kobject.h>
52#include <linux/exportfs.h>
53#include "nilfs.h"
54#include "mdt.h"
55#include "alloc.h"
56#include "page.h"
57#include "cpfile.h"
58#include "ifile.h"
59#include "dat.h"
60#include "segment.h"
61#include "segbuf.h"
62
63MODULE_AUTHOR("NTT Corp.");
64MODULE_DESCRIPTION("A New Implementation of the Log-structured Filesystem "
65 "(NILFS)");
66MODULE_VERSION(NILFS_VERSION);
67MODULE_LICENSE("GPL");
68
69static int nilfs_remount(struct super_block *sb, int *flags, char *data);
70static int test_exclusive_mount(struct file_system_type *fs_type,
71 struct block_device *bdev, int flags);
72
73/**
74 * nilfs_error() - report failure condition on a filesystem
75 *
76 * nilfs_error() sets an ERROR_FS flag on the superblock as well as
77 * reporting an error message. It should be called when NILFS detects
78 * incoherences or defects of meta data on disk. As for sustainable
79 * errors such as a single-shot I/O error, nilfs_warning() or the printk()
80 * function should be used instead.
81 *
82 * The segment constructor must not call this function because it can
83 * kill itself.
84 */
85void nilfs_error(struct super_block *sb, const char *function,
86 const char *fmt, ...)
87{
88 struct nilfs_sb_info *sbi = NILFS_SB(sb);
89 va_list args;
90
91 va_start(args, fmt);
92 printk(KERN_CRIT "NILFS error (device %s): %s: ", sb->s_id, function);
93 vprintk(fmt, args);
94 printk("\n");
95 va_end(args);
96
97 if (!(sb->s_flags & MS_RDONLY)) {
98 struct the_nilfs *nilfs = sbi->s_nilfs;
99
100 if (!nilfs_test_opt(sbi, ERRORS_CONT))
101 nilfs_detach_segment_constructor(sbi);
102
103 down_write(&nilfs->ns_sem);
104 if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) {
105 nilfs->ns_mount_state |= NILFS_ERROR_FS;
106 nilfs->ns_sbp[0]->s_state |=
107 cpu_to_le16(NILFS_ERROR_FS);
108 nilfs_commit_super(sbi, 1);
109 }
110 up_write(&nilfs->ns_sem);
111
112 if (nilfs_test_opt(sbi, ERRORS_RO)) {
113 printk(KERN_CRIT "Remounting filesystem read-only\n");
114 sb->s_flags |= MS_RDONLY;
115 }
116 }
117
118 if (nilfs_test_opt(sbi, ERRORS_PANIC))
119 panic("NILFS (device %s): panic forced after error\n",
120 sb->s_id);
121}
122
123void nilfs_warning(struct super_block *sb, const char *function,
124 const char *fmt, ...)
125{
126 va_list args;
127
128 va_start(args, fmt);
129 printk(KERN_WARNING "NILFS warning (device %s): %s: ",
130 sb->s_id, function);
131 vprintk(fmt, args);
132 printk("\n");
133 va_end(args);
134}
135
136static struct kmem_cache *nilfs_inode_cachep;
137
138struct inode *nilfs_alloc_inode(struct super_block *sb)
139{
140 struct nilfs_inode_info *ii;
141
142 ii = kmem_cache_alloc(nilfs_inode_cachep, GFP_NOFS);
143 if (!ii)
144 return NULL;
145 ii->i_bh = NULL;
146 ii->i_state = 0;
147 ii->vfs_inode.i_version = 1;
148 nilfs_btnode_cache_init(&ii->i_btnode_cache);
149 return &ii->vfs_inode;
150}
151
152void nilfs_destroy_inode(struct inode *inode)
153{
154 kmem_cache_free(nilfs_inode_cachep, NILFS_I(inode));
155}
156
157static void init_once(void *obj)
158{
159 struct nilfs_inode_info *ii = obj;
160
161 INIT_LIST_HEAD(&ii->i_dirty);
162#ifdef CONFIG_NILFS_XATTR
163 init_rwsem(&ii->xattr_sem);
164#endif
165 nilfs_btnode_cache_init_once(&ii->i_btnode_cache);
166 ii->i_bmap = (struct nilfs_bmap *)&ii->i_bmap_union;
167 inode_init_once(&ii->vfs_inode);
168}
169
170static int nilfs_init_inode_cache(void)
171{
172 nilfs_inode_cachep = kmem_cache_create("nilfs2_inode_cache",
173 sizeof(struct nilfs_inode_info),
174 0, SLAB_RECLAIM_ACCOUNT,
175 init_once);
176
177 return (nilfs_inode_cachep == NULL) ? -ENOMEM : 0;
178}
179
180static inline void nilfs_destroy_inode_cache(void)
181{
182 kmem_cache_destroy(nilfs_inode_cachep);
183}
184
185static void nilfs_clear_inode(struct inode *inode)
186{
187 struct nilfs_inode_info *ii = NILFS_I(inode);
188
189#ifdef CONFIG_NILFS_POSIX_ACL
190 if (ii->i_acl && ii->i_acl != NILFS_ACL_NOT_CACHED) {
191 posix_acl_release(ii->i_acl);
192 ii->i_acl = NILFS_ACL_NOT_CACHED;
193 }
194 if (ii->i_default_acl && ii->i_default_acl != NILFS_ACL_NOT_CACHED) {
195 posix_acl_release(ii->i_default_acl);
196 ii->i_default_acl = NILFS_ACL_NOT_CACHED;
197 }
198#endif
199 /*
200 * Free resources allocated in nilfs_read_inode(), here.
201 */
202 BUG_ON(!list_empty(&ii->i_dirty));
203 brelse(ii->i_bh);
204 ii->i_bh = NULL;
205
206 if (test_bit(NILFS_I_BMAP, &ii->i_state))
207 nilfs_bmap_clear(ii->i_bmap);
208
209 nilfs_btnode_cache_clear(&ii->i_btnode_cache);
210}
211
212static int nilfs_sync_super(struct nilfs_sb_info *sbi, int dupsb)
213{
214 struct the_nilfs *nilfs = sbi->s_nilfs;
215 int err;
216 int barrier_done = 0;
217
218 if (nilfs_test_opt(sbi, BARRIER)) {
219 set_buffer_ordered(nilfs->ns_sbh[0]);
220 barrier_done = 1;
221 }
222 retry:
223 set_buffer_dirty(nilfs->ns_sbh[0]);
224 err = sync_dirty_buffer(nilfs->ns_sbh[0]);
225 if (err == -EOPNOTSUPP && barrier_done) {
226 nilfs_warning(sbi->s_super, __func__,
227 "barrier-based sync failed. "
228 "disabling barriers\n");
229 nilfs_clear_opt(sbi, BARRIER);
230 barrier_done = 0;
231 clear_buffer_ordered(nilfs->ns_sbh[0]);
232 goto retry;
233 }
234 if (unlikely(err)) {
235 printk(KERN_ERR
236 "NILFS: unable to write superblock (err=%d)\n", err);
237 if (err == -EIO && nilfs->ns_sbh[1]) {
238 nilfs_fall_back_super_block(nilfs);
239 goto retry;
240 }
241 } else {
242 struct nilfs_super_block *sbp = nilfs->ns_sbp[0];
243
244 /*
245 * The latest segment becomes trailable from the position
246 * written in superblock.
247 */
248 clear_nilfs_discontinued(nilfs);
249
250 /* update GC protection for recent segments */
251 if (nilfs->ns_sbh[1]) {
252 sbp = NULL;
253 if (dupsb) {
254 set_buffer_dirty(nilfs->ns_sbh[1]);
255 if (!sync_dirty_buffer(nilfs->ns_sbh[1]))
256 sbp = nilfs->ns_sbp[1];
257 }
258 }
259 if (sbp) {
260 spin_lock(&nilfs->ns_last_segment_lock);
261 nilfs->ns_prot_seq = le64_to_cpu(sbp->s_last_seq);
262 spin_unlock(&nilfs->ns_last_segment_lock);
263 }
264 }
265
266 return err;
267}
268
269int nilfs_commit_super(struct nilfs_sb_info *sbi, int dupsb)
270{
271 struct the_nilfs *nilfs = sbi->s_nilfs;
272 struct nilfs_super_block **sbp = nilfs->ns_sbp;
273 sector_t nfreeblocks;
274 time_t t;
275 int err;
276
277 /* nilfs->sem must be locked by the caller. */
278 if (sbp[0]->s_magic != NILFS_SUPER_MAGIC) {
279 if (sbp[1] && sbp[1]->s_magic == NILFS_SUPER_MAGIC)
280 nilfs_swap_super_block(nilfs);
281 else {
282 printk(KERN_CRIT "NILFS: superblock broke on dev %s\n",
283 sbi->s_super->s_id);
284 return -EIO;
285 }
286 }
287 err = nilfs_count_free_blocks(nilfs, &nfreeblocks);
288 if (unlikely(err)) {
289 printk(KERN_ERR "NILFS: failed to count free blocks\n");
290 return err;
291 }
292 spin_lock(&nilfs->ns_last_segment_lock);
293 sbp[0]->s_last_seq = cpu_to_le64(nilfs->ns_last_seq);
294 sbp[0]->s_last_pseg = cpu_to_le64(nilfs->ns_last_pseg);
295 sbp[0]->s_last_cno = cpu_to_le64(nilfs->ns_last_cno);
296 spin_unlock(&nilfs->ns_last_segment_lock);
297
298 t = get_seconds();
299 nilfs->ns_sbwtime[0] = t;
300 sbp[0]->s_free_blocks_count = cpu_to_le64(nfreeblocks);
301 sbp[0]->s_wtime = cpu_to_le64(t);
302 sbp[0]->s_sum = 0;
303 sbp[0]->s_sum = cpu_to_le32(crc32_le(nilfs->ns_crc_seed,
304 (unsigned char *)sbp[0],
305 nilfs->ns_sbsize));
306 if (dupsb && sbp[1]) {
307 memcpy(sbp[1], sbp[0], nilfs->ns_sbsize);
308 nilfs->ns_sbwtime[1] = t;
309 }
310 sbi->s_super->s_dirt = 0;
311 return nilfs_sync_super(sbi, dupsb);
312}
313
314static void nilfs_put_super(struct super_block *sb)
315{
316 struct nilfs_sb_info *sbi = NILFS_SB(sb);
317 struct the_nilfs *nilfs = sbi->s_nilfs;
318
319 nilfs_detach_segment_constructor(sbi);
320
321 if (!(sb->s_flags & MS_RDONLY)) {
322 down_write(&nilfs->ns_sem);
323 nilfs->ns_sbp[0]->s_state = cpu_to_le16(nilfs->ns_mount_state);
324 nilfs_commit_super(sbi, 1);
325 up_write(&nilfs->ns_sem);
326 }
327
328 nilfs_detach_checkpoint(sbi);
329 put_nilfs(sbi->s_nilfs);
330 sbi->s_super = NULL;
331 sb->s_fs_info = NULL;
332 kfree(sbi);
333}
334
335/**
336 * nilfs_write_super - write super block(s) of NILFS
337 * @sb: super_block
338 *
339 * nilfs_write_super() gets a fs-dependent lock, writes super block(s), and
340 * clears s_dirt. This function is called in the section protected by
341 * lock_super().
342 *
343 * The s_dirt flag is managed by each filesystem and we protect it by ns_sem
344 * of the struct the_nilfs. Lock order must be as follows:
345 *
346 * 1. lock_super()
347 * 2. down_write(&nilfs->ns_sem)
348 *
349 * Inside NILFS, locking ns_sem is enough to protect s_dirt and the buffer
350 * of the super block (nilfs->ns_sbp[]).
351 *
352 * In most cases, VFS functions call lock_super() before calling these
353 * methods. So we must be careful not to bring on deadlocks when using
354 * lock_super(); see generic_shutdown_super(), write_super(), and so on.
355 *
356 * Note that order of lock_kernel() and lock_super() depends on contexts
357 * of VFS. We should also note that lock_kernel() can be used in its
358 * protective section and only the outermost one has an effect.
359 */
360static void nilfs_write_super(struct super_block *sb)
361{
362 struct nilfs_sb_info *sbi = NILFS_SB(sb);
363 struct the_nilfs *nilfs = sbi->s_nilfs;
364
365 down_write(&nilfs->ns_sem);
366 if (!(sb->s_flags & MS_RDONLY)) {
367 struct nilfs_super_block **sbp = nilfs->ns_sbp;
368 u64 t = get_seconds();
369 int dupsb;
370
371 if (!nilfs_discontinued(nilfs) && t >= nilfs->ns_sbwtime[0] &&
372 t < nilfs->ns_sbwtime[0] + NILFS_SB_FREQ) {
373 up_write(&nilfs->ns_sem);
374 return;
375 }
376 dupsb = sbp[1] && t > nilfs->ns_sbwtime[1] + NILFS_ALTSB_FREQ;
377 nilfs_commit_super(sbi, dupsb);
378 }
379 sb->s_dirt = 0;
380 up_write(&nilfs->ns_sem);
381}
382
383static int nilfs_sync_fs(struct super_block *sb, int wait)
384{
385 int err = 0;
386
387 /* This function is called when super block should be written back */
388 if (wait)
389 err = nilfs_construct_segment(sb);
390 return err;
391}
392
393int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno)
394{
395 struct the_nilfs *nilfs = sbi->s_nilfs;
396 struct nilfs_checkpoint *raw_cp;
397 struct buffer_head *bh_cp;
398 int err;
399
400 down_write(&nilfs->ns_sem);
401 list_add(&sbi->s_list, &nilfs->ns_supers);
402 up_write(&nilfs->ns_sem);
403
404 sbi->s_ifile = nilfs_mdt_new(
405 nilfs, sbi->s_super, NILFS_IFILE_INO, NILFS_IFILE_GFP);
406 if (!sbi->s_ifile)
407 return -ENOMEM;
408
409 err = nilfs_palloc_init_blockgroup(sbi->s_ifile, nilfs->ns_inode_size);
410 if (unlikely(err))
411 goto failed;
412
413 err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp,
414 &bh_cp);
415 if (unlikely(err)) {
416 if (err == -ENOENT || err == -EINVAL) {
417 printk(KERN_ERR
418 "NILFS: Invalid checkpoint "
419 "(checkpoint number=%llu)\n",
420 (unsigned long long)cno);
421 err = -EINVAL;
422 }
423 goto failed;
424 }
425 err = nilfs_read_inode_common(sbi->s_ifile, &raw_cp->cp_ifile_inode);
426 if (unlikely(err))
427 goto failed_bh;
428 atomic_set(&sbi->s_inodes_count, le64_to_cpu(raw_cp->cp_inodes_count));
429 atomic_set(&sbi->s_blocks_count, le64_to_cpu(raw_cp->cp_blocks_count));
430
431 nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, cno, bh_cp);
432 return 0;
433
434 failed_bh:
435 nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, cno, bh_cp);
436 failed:
437 nilfs_mdt_destroy(sbi->s_ifile);
438 sbi->s_ifile = NULL;
439
440 down_write(&nilfs->ns_sem);
441 list_del_init(&sbi->s_list);
442 up_write(&nilfs->ns_sem);
443
444 return err;
445}
446
447void nilfs_detach_checkpoint(struct nilfs_sb_info *sbi)
448{
449 struct the_nilfs *nilfs = sbi->s_nilfs;
450
451 nilfs_mdt_clear(sbi->s_ifile);
452 nilfs_mdt_destroy(sbi->s_ifile);
453 sbi->s_ifile = NULL;
454 down_write(&nilfs->ns_sem);
455 list_del_init(&sbi->s_list);
456 up_write(&nilfs->ns_sem);
457}
458
459static int nilfs_mark_recovery_complete(struct nilfs_sb_info *sbi)
460{
461 struct the_nilfs *nilfs = sbi->s_nilfs;
462 int err = 0;
463
464 down_write(&nilfs->ns_sem);
465 if (!(nilfs->ns_mount_state & NILFS_VALID_FS)) {
466 nilfs->ns_mount_state |= NILFS_VALID_FS;
467 err = nilfs_commit_super(sbi, 1);
468 if (likely(!err))
469 printk(KERN_INFO "NILFS: recovery complete.\n");
470 }
471 up_write(&nilfs->ns_sem);
472 return err;
473}
474
475static int nilfs_statfs(struct dentry *dentry, struct kstatfs *buf)
476{
477 struct super_block *sb = dentry->d_sb;
478 struct nilfs_sb_info *sbi = NILFS_SB(sb);
479 unsigned long long blocks;
480 unsigned long overhead;
481 unsigned long nrsvblocks;
482 sector_t nfreeblocks;
483 struct the_nilfs *nilfs = sbi->s_nilfs;
484 int err;
485
486 /*
487 * Compute all of the segment blocks
488 *
489 * The blocks before first segment and after last segment
490 * are excluded.
491 */
492 blocks = nilfs->ns_blocks_per_segment * nilfs->ns_nsegments
493 - nilfs->ns_first_data_block;
494 nrsvblocks = nilfs->ns_nrsvsegs * nilfs->ns_blocks_per_segment;
495
496 /*
497 * Compute the overhead
498 *
499 * When distributing meta data blocks outside semgent structure,
500 * We must count them as the overhead.
501 */
502 overhead = 0;
503
504 err = nilfs_count_free_blocks(nilfs, &nfreeblocks);
505 if (unlikely(err))
506 return err;
507
508 buf->f_type = NILFS_SUPER_MAGIC;
509 buf->f_bsize = sb->s_blocksize;
510 buf->f_blocks = blocks - overhead;
511 buf->f_bfree = nfreeblocks;
512 buf->f_bavail = (buf->f_bfree >= nrsvblocks) ?
513 (buf->f_bfree - nrsvblocks) : 0;
514 buf->f_files = atomic_read(&sbi->s_inodes_count);
515 buf->f_ffree = 0; /* nilfs_count_free_inodes(sb); */
516 buf->f_namelen = NILFS_NAME_LEN;
517 return 0;
518}
519
520static struct super_operations nilfs_sops = {
521 .alloc_inode = nilfs_alloc_inode,
522 .destroy_inode = nilfs_destroy_inode,
523 .dirty_inode = nilfs_dirty_inode,
524 /* .write_inode = nilfs_write_inode, */
525 /* .put_inode = nilfs_put_inode, */
526 /* .drop_inode = nilfs_drop_inode, */
527 .delete_inode = nilfs_delete_inode,
528 .put_super = nilfs_put_super,
529 .write_super = nilfs_write_super,
530 .sync_fs = nilfs_sync_fs,
531 /* .write_super_lockfs */
532 /* .unlockfs */
533 .statfs = nilfs_statfs,
534 .remount_fs = nilfs_remount,
535 .clear_inode = nilfs_clear_inode,
536 /* .umount_begin */
537 /* .show_options */
538};
539
540static struct inode *
541nilfs_nfs_get_inode(struct super_block *sb, u64 ino, u32 generation)
542{
543 struct inode *inode;
544
545 if (ino < NILFS_FIRST_INO(sb) && ino != NILFS_ROOT_INO &&
546 ino != NILFS_SKETCH_INO)
547 return ERR_PTR(-ESTALE);
548
549 inode = nilfs_iget(sb, ino);
550 if (IS_ERR(inode))
551 return ERR_CAST(inode);
552 if (generation && inode->i_generation != generation) {
553 iput(inode);
554 return ERR_PTR(-ESTALE);
555 }
556
557 return inode;
558}
559
560static struct dentry *
561nilfs_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len,
562 int fh_type)
563{
564 return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
565 nilfs_nfs_get_inode);
566}
567
568static struct dentry *
569nilfs_fh_to_parent(struct super_block *sb, struct fid *fid, int fh_len,
570 int fh_type)
571{
572 return generic_fh_to_parent(sb, fid, fh_len, fh_type,
573 nilfs_nfs_get_inode);
574}
575
576static struct export_operations nilfs_export_ops = {
577 .fh_to_dentry = nilfs_fh_to_dentry,
578 .fh_to_parent = nilfs_fh_to_parent,
579 .get_parent = nilfs_get_parent,
580};
581
582enum {
583 Opt_err_cont, Opt_err_panic, Opt_err_ro,
584 Opt_barrier, Opt_snapshot, Opt_order,
585 Opt_err,
586};
587
588static match_table_t tokens = {
589 {Opt_err_cont, "errors=continue"},
590 {Opt_err_panic, "errors=panic"},
591 {Opt_err_ro, "errors=remount-ro"},
592 {Opt_barrier, "barrier=%s"},
593 {Opt_snapshot, "cp=%u"},
594 {Opt_order, "order=%s"},
595 {Opt_err, NULL}
596};
597
598static int match_bool(substring_t *s, int *result)
599{
600 int len = s->to - s->from;
601
602 if (strncmp(s->from, "on", len) == 0)
603 *result = 1;
604 else if (strncmp(s->from, "off", len) == 0)
605 *result = 0;
606 else
607 return 1;
608 return 0;
609}
610
611static int parse_options(char *options, struct super_block *sb)
612{
613 struct nilfs_sb_info *sbi = NILFS_SB(sb);
614 char *p;
615 substring_t args[MAX_OPT_ARGS];
616 int option;
617
618 if (!options)
619 return 1;
620
621 while ((p = strsep(&options, ",")) != NULL) {
622 int token;
623 if (!*p)
624 continue;
625
626 token = match_token(p, tokens, args);
627 switch (token) {
628 case Opt_barrier:
629 if (match_bool(&args[0], &option))
630 return 0;
631 if (option)
632 nilfs_set_opt(sbi, BARRIER);
633 else
634 nilfs_clear_opt(sbi, BARRIER);
635 break;
636 case Opt_order:
637 if (strcmp(args[0].from, "relaxed") == 0)
638 /* Ordered data semantics */
639 nilfs_clear_opt(sbi, STRICT_ORDER);
640 else if (strcmp(args[0].from, "strict") == 0)
641 /* Strict in-order semantics */
642 nilfs_set_opt(sbi, STRICT_ORDER);
643 else
644 return 0;
645 break;
646 case Opt_err_panic:
647 nilfs_write_opt(sbi, ERROR_MODE, ERRORS_PANIC);
648 break;
649 case Opt_err_ro:
650 nilfs_write_opt(sbi, ERROR_MODE, ERRORS_RO);
651 break;
652 case Opt_err_cont:
653 nilfs_write_opt(sbi, ERROR_MODE, ERRORS_CONT);
654 break;
655 case Opt_snapshot:
656 if (match_int(&args[0], &option) || option <= 0)
657 return 0;
658 if (!(sb->s_flags & MS_RDONLY))
659 return 0;
660 sbi->s_snapshot_cno = option;
661 nilfs_set_opt(sbi, SNAPSHOT);
662 break;
663 default:
664 printk(KERN_ERR
665 "NILFS: Unrecognized mount option \"%s\"\n", p);
666 return 0;
667 }
668 }
669 return 1;
670}
671
672static inline void
673nilfs_set_default_options(struct nilfs_sb_info *sbi,
674 struct nilfs_super_block *sbp)
675{
676 sbi->s_mount_opt =
677 NILFS_MOUNT_ERRORS_CONT | NILFS_MOUNT_BARRIER;
678}
679
680static int nilfs_setup_super(struct nilfs_sb_info *sbi)
681{
682 struct the_nilfs *nilfs = sbi->s_nilfs;
683 struct nilfs_super_block *sbp = nilfs->ns_sbp[0];
684 int max_mnt_count = le16_to_cpu(sbp->s_max_mnt_count);
685 int mnt_count = le16_to_cpu(sbp->s_mnt_count);
686
687 /* nilfs->sem must be locked by the caller. */
688 if (!(nilfs->ns_mount_state & NILFS_VALID_FS)) {
689 printk(KERN_WARNING "NILFS warning: mounting unchecked fs\n");
690 } else if (nilfs->ns_mount_state & NILFS_ERROR_FS) {
691 printk(KERN_WARNING
692 "NILFS warning: mounting fs with errors\n");
693#if 0
694 } else if (max_mnt_count >= 0 && mnt_count >= max_mnt_count) {
695 printk(KERN_WARNING
696 "NILFS warning: maximal mount count reached\n");
697#endif
698 }
699 if (!max_mnt_count)
700 sbp->s_max_mnt_count = cpu_to_le16(NILFS_DFL_MAX_MNT_COUNT);
701
702 sbp->s_mnt_count = cpu_to_le16(mnt_count + 1);
703 sbp->s_state = cpu_to_le16(le16_to_cpu(sbp->s_state) & ~NILFS_VALID_FS);
704 sbp->s_mtime = cpu_to_le64(get_seconds());
705 return nilfs_commit_super(sbi, 1);
706}
707
708struct nilfs_super_block *nilfs_read_super_block(struct super_block *sb,
709 u64 pos, int blocksize,
710 struct buffer_head **pbh)
711{
712 unsigned long long sb_index = pos;
713 unsigned long offset;
714
715 offset = do_div(sb_index, blocksize);
716 *pbh = sb_bread(sb, sb_index);
717 if (!*pbh)
718 return NULL;
719 return (struct nilfs_super_block *)((char *)(*pbh)->b_data + offset);
720}
721
722int nilfs_store_magic_and_option(struct super_block *sb,
723 struct nilfs_super_block *sbp,
724 char *data)
725{
726 struct nilfs_sb_info *sbi = NILFS_SB(sb);
727
728 sb->s_magic = le16_to_cpu(sbp->s_magic);
729
730 /* FS independent flags */
731#ifdef NILFS_ATIME_DISABLE
732 sb->s_flags |= MS_NOATIME;
733#endif
734
735 nilfs_set_default_options(sbi, sbp);
736
737 sbi->s_resuid = le16_to_cpu(sbp->s_def_resuid);
738 sbi->s_resgid = le16_to_cpu(sbp->s_def_resgid);
739 sbi->s_interval = le32_to_cpu(sbp->s_c_interval);
740 sbi->s_watermark = le32_to_cpu(sbp->s_c_block_max);
741
742 return !parse_options(data, sb) ? -EINVAL : 0 ;
743}
744
745/**
746 * nilfs_fill_super() - initialize a super block instance
747 * @sb: super_block
748 * @data: mount options
749 * @silent: silent mode flag
750 * @nilfs: the_nilfs struct
751 *
752 * This function is called exclusively by bd_mount_mutex.
753 * So, the recovery process is protected from other simultaneous mounts.
754 */
755static int
756nilfs_fill_super(struct super_block *sb, void *data, int silent,
757 struct the_nilfs *nilfs)
758{
759 struct nilfs_sb_info *sbi;
760 struct inode *root;
761 __u64 cno;
762 int err;
763
764 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
765 if (!sbi)
766 return -ENOMEM;
767
768 sb->s_fs_info = sbi;
769
770 get_nilfs(nilfs);
771 sbi->s_nilfs = nilfs;
772 sbi->s_super = sb;
773
774 err = init_nilfs(nilfs, sbi, (char *)data);
775 if (err)
776 goto failed_sbi;
777
778 spin_lock_init(&sbi->s_inode_lock);
779 INIT_LIST_HEAD(&sbi->s_dirty_files);
780 INIT_LIST_HEAD(&sbi->s_list);
781
782 /*
783 * Following initialization is overlapped because
784 * nilfs_sb_info structure has been cleared at the beginning.
785 * But we reserve them to keep our interest and make ready
786 * for the future change.
787 */
788 get_random_bytes(&sbi->s_next_generation,
789 sizeof(sbi->s_next_generation));
790 spin_lock_init(&sbi->s_next_gen_lock);
791
792 sb->s_op = &nilfs_sops;
793 sb->s_export_op = &nilfs_export_ops;
794 sb->s_root = NULL;
795 sb->s_time_gran = 1;
796
797 if (!nilfs_loaded(nilfs)) {
798 err = load_nilfs(nilfs, sbi);
799 if (err)
800 goto failed_sbi;
801 }
802 cno = nilfs_last_cno(nilfs);
803
804 if (sb->s_flags & MS_RDONLY) {
805 if (nilfs_test_opt(sbi, SNAPSHOT)) {
806 err = nilfs_cpfile_is_snapshot(nilfs->ns_cpfile,
807 sbi->s_snapshot_cno);
808 if (err < 0)
809 goto failed_sbi;
810 if (!err) {
811 printk(KERN_ERR
812 "NILFS: The specified checkpoint is "
813 "not a snapshot "
814 "(checkpoint number=%llu).\n",
815 (unsigned long long)sbi->s_snapshot_cno);
816 err = -EINVAL;
817 goto failed_sbi;
818 }
819 cno = sbi->s_snapshot_cno;
820 } else
821 /* Read-only mount */
822 sbi->s_snapshot_cno = cno;
823 }
824
825 err = nilfs_attach_checkpoint(sbi, cno);
826 if (err) {
827 printk(KERN_ERR "NILFS: error loading a checkpoint"
828 " (checkpoint number=%llu).\n", (unsigned long long)cno);
829 goto failed_sbi;
830 }
831
832 if (!(sb->s_flags & MS_RDONLY)) {
833 err = nilfs_attach_segment_constructor(sbi);
834 if (err)
835 goto failed_checkpoint;
836 }
837
838 root = nilfs_iget(sb, NILFS_ROOT_INO);
839 if (IS_ERR(root)) {
840 printk(KERN_ERR "NILFS: get root inode failed\n");
841 err = PTR_ERR(root);
842 goto failed_segctor;
843 }
844 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
845 iput(root);
846 printk(KERN_ERR "NILFS: corrupt root inode.\n");
847 err = -EINVAL;
848 goto failed_segctor;
849 }
850 sb->s_root = d_alloc_root(root);
851 if (!sb->s_root) {
852 iput(root);
853 printk(KERN_ERR "NILFS: get root dentry failed\n");
854 err = -ENOMEM;
855 goto failed_segctor;
856 }
857
858 if (!(sb->s_flags & MS_RDONLY)) {
859 down_write(&nilfs->ns_sem);
860 nilfs_setup_super(sbi);
861 up_write(&nilfs->ns_sem);
862 }
863
864 err = nilfs_mark_recovery_complete(sbi);
865 if (unlikely(err)) {
866 printk(KERN_ERR "NILFS: recovery failed.\n");
867 goto failed_root;
868 }
869
870 return 0;
871
872 failed_root:
873 dput(sb->s_root);
874 sb->s_root = NULL;
875
876 failed_segctor:
877 nilfs_detach_segment_constructor(sbi);
878
879 failed_checkpoint:
880 nilfs_detach_checkpoint(sbi);
881
882 failed_sbi:
883 put_nilfs(nilfs);
884 sb->s_fs_info = NULL;
885 kfree(sbi);
886 return err;
887}
888
889static int nilfs_remount(struct super_block *sb, int *flags, char *data)
890{
891 struct nilfs_sb_info *sbi = NILFS_SB(sb);
892 struct nilfs_super_block *sbp;
893 struct the_nilfs *nilfs = sbi->s_nilfs;
894 unsigned long old_sb_flags;
895 struct nilfs_mount_options old_opts;
896 int err;
897
898 old_sb_flags = sb->s_flags;
899 old_opts.mount_opt = sbi->s_mount_opt;
900 old_opts.snapshot_cno = sbi->s_snapshot_cno;
901
902 if (!parse_options(data, sb)) {
903 err = -EINVAL;
904 goto restore_opts;
905 }
906 sb->s_flags = (sb->s_flags & ~MS_POSIXACL);
907
908 if ((*flags & MS_RDONLY) &&
909 sbi->s_snapshot_cno != old_opts.snapshot_cno) {
910 printk(KERN_WARNING "NILFS (device %s): couldn't "
911 "remount to a different snapshot. \n",
912 sb->s_id);
913 err = -EINVAL;
914 goto restore_opts;
915 }
916
917 if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
918 goto out;
919 if (*flags & MS_RDONLY) {
920 /* Shutting down the segment constructor */
921 nilfs_detach_segment_constructor(sbi);
922 sb->s_flags |= MS_RDONLY;
923
924 sbi->s_snapshot_cno = nilfs_last_cno(nilfs);
925 /* nilfs_set_opt(sbi, SNAPSHOT); */
926
927 /*
928 * Remounting a valid RW partition RDONLY, so set
929 * the RDONLY flag and then mark the partition as valid again.
930 */
931 down_write(&nilfs->ns_sem);
932 sbp = nilfs->ns_sbp[0];
933 if (!(sbp->s_state & le16_to_cpu(NILFS_VALID_FS)) &&
934 (nilfs->ns_mount_state & NILFS_VALID_FS))
935 sbp->s_state = cpu_to_le16(nilfs->ns_mount_state);
936 sbp->s_mtime = cpu_to_le64(get_seconds());
937 nilfs_commit_super(sbi, 1);
938 up_write(&nilfs->ns_sem);
939 } else {
940 /*
941 * Mounting a RDONLY partition read-write, so reread and
942 * store the current valid flag. (It may have been changed
943 * by fsck since we originally mounted the partition.)
944 */
945 down(&sb->s_bdev->bd_mount_sem);
946 /* Check existing RW-mount */
947 if (test_exclusive_mount(sb->s_type, sb->s_bdev, 0)) {
948 printk(KERN_WARNING "NILFS (device %s): couldn't "
949 "remount because a RW-mount exists.\n",
950 sb->s_id);
951 err = -EBUSY;
952 goto rw_remount_failed;
953 }
954 if (sbi->s_snapshot_cno != nilfs_last_cno(nilfs)) {
955 printk(KERN_WARNING "NILFS (device %s): couldn't "
956 "remount because the current RO-mount is not "
957 "the latest one.\n",
958 sb->s_id);
959 err = -EINVAL;
960 goto rw_remount_failed;
961 }
962 sb->s_flags &= ~MS_RDONLY;
963 nilfs_clear_opt(sbi, SNAPSHOT);
964 sbi->s_snapshot_cno = 0;
965
966 err = nilfs_attach_segment_constructor(sbi);
967 if (err)
968 goto rw_remount_failed;
969
970 down_write(&nilfs->ns_sem);
971 nilfs_setup_super(sbi);
972 up_write(&nilfs->ns_sem);
973
974 up(&sb->s_bdev->bd_mount_sem);
975 }
976 out:
977 return 0;
978
979 rw_remount_failed:
980 up(&sb->s_bdev->bd_mount_sem);
981 restore_opts:
982 sb->s_flags = old_sb_flags;
983 sbi->s_mount_opt = old_opts.mount_opt;
984 sbi->s_snapshot_cno = old_opts.snapshot_cno;
985 return err;
986}
987
988struct nilfs_super_data {
989 struct block_device *bdev;
990 __u64 cno;
991 int flags;
992};
993
994/**
995 * nilfs_identify - pre-read mount options needed to identify mount instance
996 * @data: mount options
997 * @sd: nilfs_super_data
998 */
999static int nilfs_identify(char *data, struct nilfs_super_data *sd)
1000{
1001 char *p, *options = data;
1002 substring_t args[MAX_OPT_ARGS];
1003 int option, token;
1004 int ret = 0;
1005
1006 do {
1007 p = strsep(&options, ",");
1008 if (p != NULL && *p) {
1009 token = match_token(p, tokens, args);
1010 if (token == Opt_snapshot) {
1011 if (!(sd->flags & MS_RDONLY))
1012 ret++;
1013 else {
1014 ret = match_int(&args[0], &option);
1015 if (!ret) {
1016 if (option > 0)
1017 sd->cno = option;
1018 else
1019 ret++;
1020 }
1021 }
1022 }
1023 if (ret)
1024 printk(KERN_ERR
1025 "NILFS: invalid mount option: %s\n", p);
1026 }
1027 if (!options)
1028 break;
1029 BUG_ON(options == data);
1030 *(options - 1) = ',';
1031 } while (!ret);
1032 return ret;
1033}
1034
1035static int nilfs_set_bdev_super(struct super_block *s, void *data)
1036{
1037 struct nilfs_super_data *sd = data;
1038
1039 s->s_bdev = sd->bdev;
1040 s->s_dev = s->s_bdev->bd_dev;
1041 return 0;
1042}
1043
1044static int nilfs_test_bdev_super(struct super_block *s, void *data)
1045{
1046 struct nilfs_super_data *sd = data;
1047
1048 return s->s_bdev == sd->bdev;
1049}
1050
1051static int nilfs_test_bdev_super2(struct super_block *s, void *data)
1052{
1053 struct nilfs_super_data *sd = data;
1054 int ret;
1055
1056 if (s->s_bdev != sd->bdev)
1057 return 0;
1058
1059 if (!((s->s_flags | sd->flags) & MS_RDONLY))
1060 return 1; /* Reuse an old R/W-mode super_block */
1061
1062 if (s->s_flags & sd->flags & MS_RDONLY) {
1063 if (down_read_trylock(&s->s_umount)) {
1064 ret = s->s_root &&
1065 (sd->cno == NILFS_SB(s)->s_snapshot_cno);
1066 up_read(&s->s_umount);
1067 /*
1068 * This path is locked with sb_lock by sget().
1069 * So, drop_super() causes deadlock.
1070 */
1071 return ret;
1072 }
1073 }
1074 return 0;
1075}
1076
1077static int
1078nilfs_get_sb(struct file_system_type *fs_type, int flags,
1079 const char *dev_name, void *data, struct vfsmount *mnt)
1080{
1081 struct nilfs_super_data sd;
1082 struct super_block *s, *s2;
1083 struct the_nilfs *nilfs = NULL;
1084 int err, need_to_close = 1;
1085
1086 sd.bdev = open_bdev_exclusive(dev_name, flags, fs_type);
1087 if (IS_ERR(sd.bdev))
1088 return PTR_ERR(sd.bdev);
1089
1090 /*
1091 * To get mount instance using sget() vfs-routine, NILFS needs
1092 * much more information than normal filesystems to identify mount
1093 * instance. For snapshot mounts, not only a mount type (ro-mount
1094 * or rw-mount) but also a checkpoint number is required.
1095 * The results are passed in sget() using nilfs_super_data.
1096 */
1097 sd.cno = 0;
1098 sd.flags = flags;
1099 if (nilfs_identify((char *)data, &sd)) {
1100 err = -EINVAL;
1101 goto failed;
1102 }
1103
1104 /*
1105 * once the super is inserted into the list by sget, s_umount
1106 * will protect the lockfs code from trying to start a snapshot
1107 * while we are mounting
1108 */
1109 down(&sd.bdev->bd_mount_sem);
1110 if (!sd.cno &&
1111 (err = test_exclusive_mount(fs_type, sd.bdev, flags ^ MS_RDONLY))) {
1112 err = (err < 0) ? : -EBUSY;
1113 goto failed_unlock;
1114 }
1115
1116 /*
1117 * Phase-1: search any existent instance and get the_nilfs
1118 */
1119 s = sget(fs_type, nilfs_test_bdev_super, nilfs_set_bdev_super, &sd);
1120 if (IS_ERR(s))
1121 goto error_s;
1122
1123 if (!s->s_root) {
1124 err = -ENOMEM;
1125 nilfs = alloc_nilfs(sd.bdev);
1126 if (!nilfs)
1127 goto cancel_new;
1128 } else {
1129 struct nilfs_sb_info *sbi = NILFS_SB(s);
1130
1131 /*
1132 * s_umount protects super_block from unmount process;
1133 * It covers pointers of nilfs_sb_info and the_nilfs.
1134 */
1135 nilfs = sbi->s_nilfs;
1136 get_nilfs(nilfs);
1137 up_write(&s->s_umount);
1138
1139 /*
1140 * Phase-2: search specified snapshot or R/W mode super_block
1141 */
1142 if (!sd.cno)
1143 /* trying to get the latest checkpoint. */
1144 sd.cno = nilfs_last_cno(nilfs);
1145
1146 s2 = sget(fs_type, nilfs_test_bdev_super2,
1147 nilfs_set_bdev_super, &sd);
1148 deactivate_super(s);
1149 /*
1150 * Although deactivate_super() invokes close_bdev_exclusive() at
1151 * kill_block_super(). Here, s is an existent mount; we need
1152 * one more close_bdev_exclusive() call.
1153 */
1154 s = s2;
1155 if (IS_ERR(s))
1156 goto error_s;
1157 }
1158
1159 if (!s->s_root) {
1160 char b[BDEVNAME_SIZE];
1161
1162 s->s_flags = flags;
1163 strlcpy(s->s_id, bdevname(sd.bdev, b), sizeof(s->s_id));
1164 sb_set_blocksize(s, block_size(sd.bdev));
1165
1166 err = nilfs_fill_super(s, data, flags & MS_VERBOSE, nilfs);
1167 if (err)
1168 goto cancel_new;
1169
1170 s->s_flags |= MS_ACTIVE;
1171 need_to_close = 0;
1172 } else if (!(s->s_flags & MS_RDONLY)) {
1173 err = -EBUSY;
1174 }
1175
1176 up(&sd.bdev->bd_mount_sem);
1177 put_nilfs(nilfs);
1178 if (need_to_close)
1179 close_bdev_exclusive(sd.bdev, flags);
1180 simple_set_mnt(mnt, s);
1181 return 0;
1182
1183 error_s:
1184 up(&sd.bdev->bd_mount_sem);
1185 if (nilfs)
1186 put_nilfs(nilfs);
1187 close_bdev_exclusive(sd.bdev, flags);
1188 return PTR_ERR(s);
1189
1190 failed_unlock:
1191 up(&sd.bdev->bd_mount_sem);
1192 failed:
1193 close_bdev_exclusive(sd.bdev, flags);
1194
1195 return err;
1196
1197 cancel_new:
1198 /* Abandoning the newly allocated superblock */
1199 up(&sd.bdev->bd_mount_sem);
1200 if (nilfs)
1201 put_nilfs(nilfs);
1202 up_write(&s->s_umount);
1203 deactivate_super(s);
1204 /*
1205 * deactivate_super() invokes close_bdev_exclusive().
1206 * We must finish all post-cleaning before this call;
1207 * put_nilfs() and unlocking bd_mount_sem need the block device.
1208 */
1209 return err;
1210}
1211
1212static int nilfs_test_bdev_super3(struct super_block *s, void *data)
1213{
1214 struct nilfs_super_data *sd = data;
1215 int ret;
1216
1217 if (s->s_bdev != sd->bdev)
1218 return 0;
1219 if (down_read_trylock(&s->s_umount)) {
1220 ret = (s->s_flags & MS_RDONLY) && s->s_root &&
1221 nilfs_test_opt(NILFS_SB(s), SNAPSHOT);
1222 up_read(&s->s_umount);
1223 if (ret)
1224 return 0; /* ignore snapshot mounts */
1225 }
1226 return !((sd->flags ^ s->s_flags) & MS_RDONLY);
1227}
1228
1229static int __false_bdev_super(struct super_block *s, void *data)
1230{
1231#if 0 /* XXX: workaround for lock debug. This is not good idea */
1232 up_write(&s->s_umount);
1233#endif
1234 return -EFAULT;
1235}
1236
1237/**
1238 * test_exclusive_mount - check whether an exclusive RW/RO mount exists or not.
1239 * fs_type: filesystem type
1240 * bdev: block device
1241 * flag: 0 (check rw-mount) or MS_RDONLY (check ro-mount)
1242 * res: pointer to an integer to store result
1243 *
1244 * This function must be called within a section protected by bd_mount_mutex.
1245 */
1246static int test_exclusive_mount(struct file_system_type *fs_type,
1247 struct block_device *bdev, int flags)
1248{
1249 struct super_block *s;
1250 struct nilfs_super_data sd = { .flags = flags, .bdev = bdev };
1251
1252 s = sget(fs_type, nilfs_test_bdev_super3, __false_bdev_super, &sd);
1253 if (IS_ERR(s)) {
1254 if (PTR_ERR(s) != -EFAULT)
1255 return PTR_ERR(s);
1256 return 0; /* Not found */
1257 }
1258 up_write(&s->s_umount);
1259 deactivate_super(s);
1260 return 1; /* Found */
1261}
1262
1263struct file_system_type nilfs_fs_type = {
1264 .owner = THIS_MODULE,
1265 .name = "nilfs2",
1266 .get_sb = nilfs_get_sb,
1267 .kill_sb = kill_block_super,
1268 .fs_flags = FS_REQUIRES_DEV,
1269};
1270
1271static int __init init_nilfs_fs(void)
1272{
1273 int err;
1274
1275 err = nilfs_init_inode_cache();
1276 if (err)
1277 goto failed;
1278
1279 err = nilfs_init_transaction_cache();
1280 if (err)
1281 goto failed_inode_cache;
1282
1283 err = nilfs_init_segbuf_cache();
1284 if (err)
1285 goto failed_transaction_cache;
1286
1287 err = nilfs_btree_path_cache_init();
1288 if (err)
1289 goto failed_segbuf_cache;
1290
1291 err = register_filesystem(&nilfs_fs_type);
1292 if (err)
1293 goto failed_btree_path_cache;
1294
1295 return 0;
1296
1297 failed_btree_path_cache:
1298 nilfs_btree_path_cache_destroy();
1299
1300 failed_segbuf_cache:
1301 nilfs_destroy_segbuf_cache();
1302
1303 failed_transaction_cache:
1304 nilfs_destroy_transaction_cache();
1305
1306 failed_inode_cache:
1307 nilfs_destroy_inode_cache();
1308
1309 failed:
1310 return err;
1311}
1312
1313static void __exit exit_nilfs_fs(void)
1314{
1315 nilfs_destroy_segbuf_cache();
1316 nilfs_destroy_transaction_cache();
1317 nilfs_destroy_inode_cache();
1318 nilfs_btree_path_cache_destroy();
1319 unregister_filesystem(&nilfs_fs_type);
1320}
1321
1322module_init(init_nilfs_fs)
1323module_exit(exit_nilfs_fs)
diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
new file mode 100644
index 000000000000..33400cf0bbe2
--- /dev/null
+++ b/fs/nilfs2/the_nilfs.c
@@ -0,0 +1,637 @@
1/*
2 * the_nilfs.c - the_nilfs shared structure.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23
24#include <linux/buffer_head.h>
25#include <linux/slab.h>
26#include <linux/blkdev.h>
27#include <linux/backing-dev.h>
28#include <linux/crc32.h>
29#include "nilfs.h"
30#include "segment.h"
31#include "alloc.h"
32#include "cpfile.h"
33#include "sufile.h"
34#include "dat.h"
35#include "seglist.h"
36#include "segbuf.h"
37
38void nilfs_set_last_segment(struct the_nilfs *nilfs,
39 sector_t start_blocknr, u64 seq, __u64 cno)
40{
41 spin_lock(&nilfs->ns_last_segment_lock);
42 nilfs->ns_last_pseg = start_blocknr;
43 nilfs->ns_last_seq = seq;
44 nilfs->ns_last_cno = cno;
45 spin_unlock(&nilfs->ns_last_segment_lock);
46}
47
48/**
49 * alloc_nilfs - allocate the_nilfs structure
50 * @bdev: block device to which the_nilfs is related
51 *
52 * alloc_nilfs() allocates memory for the_nilfs and
53 * initializes its reference count and locks.
54 *
55 * Return Value: On success, pointer to the_nilfs is returned.
56 * On error, NULL is returned.
57 */
58struct the_nilfs *alloc_nilfs(struct block_device *bdev)
59{
60 struct the_nilfs *nilfs;
61
62 nilfs = kzalloc(sizeof(*nilfs), GFP_KERNEL);
63 if (!nilfs)
64 return NULL;
65
66 nilfs->ns_bdev = bdev;
67 atomic_set(&nilfs->ns_count, 1);
68 atomic_set(&nilfs->ns_writer_refcount, -1);
69 atomic_set(&nilfs->ns_ndirtyblks, 0);
70 init_rwsem(&nilfs->ns_sem);
71 mutex_init(&nilfs->ns_writer_mutex);
72 INIT_LIST_HEAD(&nilfs->ns_supers);
73 spin_lock_init(&nilfs->ns_last_segment_lock);
74 nilfs->ns_gc_inodes_h = NULL;
75 init_rwsem(&nilfs->ns_segctor_sem);
76
77 return nilfs;
78}
79
80/**
81 * put_nilfs - release a reference to the_nilfs
82 * @nilfs: the_nilfs structure to be released
83 *
84 * put_nilfs() decrements a reference counter of the_nilfs.
85 * If the reference count reaches zero, the_nilfs is freed.
86 */
87void put_nilfs(struct the_nilfs *nilfs)
88{
89 if (!atomic_dec_and_test(&nilfs->ns_count))
90 return;
91 /*
92 * Increment of ns_count never occur below because the caller
93 * of get_nilfs() holds at least one reference to the_nilfs.
94 * Thus its exclusion control is not required here.
95 */
96 might_sleep();
97 if (nilfs_loaded(nilfs)) {
98 nilfs_mdt_clear(nilfs->ns_sufile);
99 nilfs_mdt_destroy(nilfs->ns_sufile);
100 nilfs_mdt_clear(nilfs->ns_cpfile);
101 nilfs_mdt_destroy(nilfs->ns_cpfile);
102 nilfs_mdt_clear(nilfs->ns_dat);
103 nilfs_mdt_destroy(nilfs->ns_dat);
104 /* XXX: how and when to clear nilfs->ns_gc_dat? */
105 nilfs_mdt_destroy(nilfs->ns_gc_dat);
106 }
107 if (nilfs_init(nilfs)) {
108 nilfs_destroy_gccache(nilfs);
109 brelse(nilfs->ns_sbh[0]);
110 brelse(nilfs->ns_sbh[1]);
111 }
112 kfree(nilfs);
113}
114
115static int nilfs_load_super_root(struct the_nilfs *nilfs,
116 struct nilfs_sb_info *sbi, sector_t sr_block)
117{
118 struct buffer_head *bh_sr;
119 struct nilfs_super_root *raw_sr;
120 struct nilfs_super_block **sbp = nilfs->ns_sbp;
121 unsigned dat_entry_size, segment_usage_size, checkpoint_size;
122 unsigned inode_size;
123 int err;
124
125 err = nilfs_read_super_root_block(sbi->s_super, sr_block, &bh_sr, 1);
126 if (unlikely(err))
127 return err;
128
129 down_read(&nilfs->ns_sem);
130 dat_entry_size = le16_to_cpu(sbp[0]->s_dat_entry_size);
131 checkpoint_size = le16_to_cpu(sbp[0]->s_checkpoint_size);
132 segment_usage_size = le16_to_cpu(sbp[0]->s_segment_usage_size);
133 up_read(&nilfs->ns_sem);
134
135 inode_size = nilfs->ns_inode_size;
136
137 err = -ENOMEM;
138 nilfs->ns_dat = nilfs_mdt_new(
139 nilfs, NULL, NILFS_DAT_INO, NILFS_DAT_GFP);
140 if (unlikely(!nilfs->ns_dat))
141 goto failed;
142
143 nilfs->ns_gc_dat = nilfs_mdt_new(
144 nilfs, NULL, NILFS_DAT_INO, NILFS_DAT_GFP);
145 if (unlikely(!nilfs->ns_gc_dat))
146 goto failed_dat;
147
148 nilfs->ns_cpfile = nilfs_mdt_new(
149 nilfs, NULL, NILFS_CPFILE_INO, NILFS_CPFILE_GFP);
150 if (unlikely(!nilfs->ns_cpfile))
151 goto failed_gc_dat;
152
153 nilfs->ns_sufile = nilfs_mdt_new(
154 nilfs, NULL, NILFS_SUFILE_INO, NILFS_SUFILE_GFP);
155 if (unlikely(!nilfs->ns_sufile))
156 goto failed_cpfile;
157
158 err = nilfs_palloc_init_blockgroup(nilfs->ns_dat, dat_entry_size);
159 if (unlikely(err))
160 goto failed_sufile;
161
162 err = nilfs_palloc_init_blockgroup(nilfs->ns_gc_dat, dat_entry_size);
163 if (unlikely(err))
164 goto failed_sufile;
165
166 nilfs_mdt_set_shadow(nilfs->ns_dat, nilfs->ns_gc_dat);
167 nilfs_mdt_set_entry_size(nilfs->ns_cpfile, checkpoint_size,
168 sizeof(struct nilfs_cpfile_header));
169 nilfs_mdt_set_entry_size(nilfs->ns_sufile, segment_usage_size,
170 sizeof(struct nilfs_sufile_header));
171
172 err = nilfs_mdt_read_inode_direct(
173 nilfs->ns_dat, bh_sr, NILFS_SR_DAT_OFFSET(inode_size));
174 if (unlikely(err))
175 goto failed_sufile;
176
177 err = nilfs_mdt_read_inode_direct(
178 nilfs->ns_cpfile, bh_sr, NILFS_SR_CPFILE_OFFSET(inode_size));
179 if (unlikely(err))
180 goto failed_sufile;
181
182 err = nilfs_mdt_read_inode_direct(
183 nilfs->ns_sufile, bh_sr, NILFS_SR_SUFILE_OFFSET(inode_size));
184 if (unlikely(err))
185 goto failed_sufile;
186
187 raw_sr = (struct nilfs_super_root *)bh_sr->b_data;
188 nilfs->ns_nongc_ctime = le64_to_cpu(raw_sr->sr_nongc_ctime);
189
190 failed:
191 brelse(bh_sr);
192 return err;
193
194 failed_sufile:
195 nilfs_mdt_destroy(nilfs->ns_sufile);
196
197 failed_cpfile:
198 nilfs_mdt_destroy(nilfs->ns_cpfile);
199
200 failed_gc_dat:
201 nilfs_mdt_destroy(nilfs->ns_gc_dat);
202
203 failed_dat:
204 nilfs_mdt_destroy(nilfs->ns_dat);
205 goto failed;
206}
207
208static void nilfs_init_recovery_info(struct nilfs_recovery_info *ri)
209{
210 memset(ri, 0, sizeof(*ri));
211 INIT_LIST_HEAD(&ri->ri_used_segments);
212}
213
214static void nilfs_clear_recovery_info(struct nilfs_recovery_info *ri)
215{
216 nilfs_dispose_segment_list(&ri->ri_used_segments);
217}
218
219/**
220 * load_nilfs - load and recover the nilfs
221 * @nilfs: the_nilfs structure to be released
222 * @sbi: nilfs_sb_info used to recover past segment
223 *
224 * load_nilfs() searches and load the latest super root,
225 * attaches the last segment, and does recovery if needed.
226 * The caller must call this exclusively for simultaneous mounts.
227 */
228int load_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi)
229{
230 struct nilfs_recovery_info ri;
231 unsigned int s_flags = sbi->s_super->s_flags;
232 int really_read_only = bdev_read_only(nilfs->ns_bdev);
233 unsigned valid_fs;
234 int err = 0;
235
236 nilfs_init_recovery_info(&ri);
237
238 down_write(&nilfs->ns_sem);
239 valid_fs = (nilfs->ns_mount_state & NILFS_VALID_FS);
240 up_write(&nilfs->ns_sem);
241
242 if (!valid_fs && (s_flags & MS_RDONLY)) {
243 printk(KERN_INFO "NILFS: INFO: recovery "
244 "required for readonly filesystem.\n");
245 if (really_read_only) {
246 printk(KERN_ERR "NILFS: write access "
247 "unavailable, cannot proceed.\n");
248 err = -EROFS;
249 goto failed;
250 }
251 printk(KERN_INFO "NILFS: write access will "
252 "be enabled during recovery.\n");
253 sbi->s_super->s_flags &= ~MS_RDONLY;
254 }
255
256 err = nilfs_search_super_root(nilfs, sbi, &ri);
257 if (unlikely(err)) {
258 printk(KERN_ERR "NILFS: error searching super root.\n");
259 goto failed;
260 }
261
262 err = nilfs_load_super_root(nilfs, sbi, ri.ri_super_root);
263 if (unlikely(err)) {
264 printk(KERN_ERR "NILFS: error loading super root.\n");
265 goto failed;
266 }
267
268 if (!valid_fs) {
269 err = nilfs_recover_logical_segments(nilfs, sbi, &ri);
270 if (unlikely(err)) {
271 nilfs_mdt_destroy(nilfs->ns_cpfile);
272 nilfs_mdt_destroy(nilfs->ns_sufile);
273 nilfs_mdt_destroy(nilfs->ns_dat);
274 goto failed;
275 }
276 if (ri.ri_need_recovery == NILFS_RECOVERY_SR_UPDATED)
277 sbi->s_super->s_dirt = 1;
278 }
279
280 set_nilfs_loaded(nilfs);
281
282 failed:
283 nilfs_clear_recovery_info(&ri);
284 sbi->s_super->s_flags = s_flags;
285 return err;
286}
287
288static unsigned long long nilfs_max_size(unsigned int blkbits)
289{
290 unsigned int max_bits;
291 unsigned long long res = MAX_LFS_FILESIZE; /* page cache limit */
292
293 max_bits = blkbits + NILFS_BMAP_KEY_BIT; /* bmap size limit */
294 if (max_bits < 64)
295 res = min_t(unsigned long long, res, (1ULL << max_bits) - 1);
296 return res;
297}
298
299static int nilfs_store_disk_layout(struct the_nilfs *nilfs,
300 struct nilfs_super_block *sbp)
301{
302 if (le32_to_cpu(sbp->s_rev_level) != NILFS_CURRENT_REV) {
303 printk(KERN_ERR "NILFS: revision mismatch "
304 "(superblock rev.=%d.%d, current rev.=%d.%d). "
305 "Please check the version of mkfs.nilfs.\n",
306 le32_to_cpu(sbp->s_rev_level),
307 le16_to_cpu(sbp->s_minor_rev_level),
308 NILFS_CURRENT_REV, NILFS_MINOR_REV);
309 return -EINVAL;
310 }
311 nilfs->ns_sbsize = le16_to_cpu(sbp->s_bytes);
312 if (nilfs->ns_sbsize > BLOCK_SIZE)
313 return -EINVAL;
314
315 nilfs->ns_inode_size = le16_to_cpu(sbp->s_inode_size);
316 nilfs->ns_first_ino = le32_to_cpu(sbp->s_first_ino);
317
318 nilfs->ns_blocks_per_segment = le32_to_cpu(sbp->s_blocks_per_segment);
319 if (nilfs->ns_blocks_per_segment < NILFS_SEG_MIN_BLOCKS) {
320 printk(KERN_ERR "NILFS: too short segment. \n");
321 return -EINVAL;
322 }
323
324 nilfs->ns_first_data_block = le64_to_cpu(sbp->s_first_data_block);
325 nilfs->ns_nsegments = le64_to_cpu(sbp->s_nsegments);
326 nilfs->ns_r_segments_percentage =
327 le32_to_cpu(sbp->s_r_segments_percentage);
328 nilfs->ns_nrsvsegs =
329 max_t(unsigned long, NILFS_MIN_NRSVSEGS,
330 DIV_ROUND_UP(nilfs->ns_nsegments *
331 nilfs->ns_r_segments_percentage, 100));
332 nilfs->ns_crc_seed = le32_to_cpu(sbp->s_crc_seed);
333 return 0;
334}
335
336static int nilfs_valid_sb(struct nilfs_super_block *sbp)
337{
338 static unsigned char sum[4];
339 const int sumoff = offsetof(struct nilfs_super_block, s_sum);
340 size_t bytes;
341 u32 crc;
342
343 if (!sbp || le16_to_cpu(sbp->s_magic) != NILFS_SUPER_MAGIC)
344 return 0;
345 bytes = le16_to_cpu(sbp->s_bytes);
346 if (bytes > BLOCK_SIZE)
347 return 0;
348 crc = crc32_le(le32_to_cpu(sbp->s_crc_seed), (unsigned char *)sbp,
349 sumoff);
350 crc = crc32_le(crc, sum, 4);
351 crc = crc32_le(crc, (unsigned char *)sbp + sumoff + 4,
352 bytes - sumoff - 4);
353 return crc == le32_to_cpu(sbp->s_sum);
354}
355
356static int nilfs_sb2_bad_offset(struct nilfs_super_block *sbp, u64 offset)
357{
358 return offset < ((le64_to_cpu(sbp->s_nsegments) *
359 le32_to_cpu(sbp->s_blocks_per_segment)) <<
360 (le32_to_cpu(sbp->s_log_block_size) + 10));
361}
362
363static void nilfs_release_super_block(struct the_nilfs *nilfs)
364{
365 int i;
366
367 for (i = 0; i < 2; i++) {
368 if (nilfs->ns_sbp[i]) {
369 brelse(nilfs->ns_sbh[i]);
370 nilfs->ns_sbh[i] = NULL;
371 nilfs->ns_sbp[i] = NULL;
372 }
373 }
374}
375
376void nilfs_fall_back_super_block(struct the_nilfs *nilfs)
377{
378 brelse(nilfs->ns_sbh[0]);
379 nilfs->ns_sbh[0] = nilfs->ns_sbh[1];
380 nilfs->ns_sbp[0] = nilfs->ns_sbp[1];
381 nilfs->ns_sbh[1] = NULL;
382 nilfs->ns_sbp[1] = NULL;
383}
384
385void nilfs_swap_super_block(struct the_nilfs *nilfs)
386{
387 struct buffer_head *tsbh = nilfs->ns_sbh[0];
388 struct nilfs_super_block *tsbp = nilfs->ns_sbp[0];
389
390 nilfs->ns_sbh[0] = nilfs->ns_sbh[1];
391 nilfs->ns_sbp[0] = nilfs->ns_sbp[1];
392 nilfs->ns_sbh[1] = tsbh;
393 nilfs->ns_sbp[1] = tsbp;
394}
395
396static int nilfs_load_super_block(struct the_nilfs *nilfs,
397 struct super_block *sb, int blocksize,
398 struct nilfs_super_block **sbpp)
399{
400 struct nilfs_super_block **sbp = nilfs->ns_sbp;
401 struct buffer_head **sbh = nilfs->ns_sbh;
402 u64 sb2off = NILFS_SB2_OFFSET_BYTES(nilfs->ns_bdev->bd_inode->i_size);
403 int valid[2], swp = 0;
404
405 sbp[0] = nilfs_read_super_block(sb, NILFS_SB_OFFSET_BYTES, blocksize,
406 &sbh[0]);
407 sbp[1] = nilfs_read_super_block(sb, sb2off, blocksize, &sbh[1]);
408
409 if (!sbp[0]) {
410 if (!sbp[1]) {
411 printk(KERN_ERR "NILFS: unable to read superblock\n");
412 return -EIO;
413 }
414 printk(KERN_WARNING
415 "NILFS warning: unable to read primary superblock\n");
416 } else if (!sbp[1])
417 printk(KERN_WARNING
418 "NILFS warning: unable to read secondary superblock\n");
419
420 valid[0] = nilfs_valid_sb(sbp[0]);
421 valid[1] = nilfs_valid_sb(sbp[1]);
422 swp = valid[1] &&
423 (!valid[0] ||
424 le64_to_cpu(sbp[1]->s_wtime) > le64_to_cpu(sbp[0]->s_wtime));
425
426 if (valid[swp] && nilfs_sb2_bad_offset(sbp[swp], sb2off)) {
427 brelse(sbh[1]);
428 sbh[1] = NULL;
429 sbp[1] = NULL;
430 swp = 0;
431 }
432 if (!valid[swp]) {
433 nilfs_release_super_block(nilfs);
434 printk(KERN_ERR "NILFS: Can't find nilfs on dev %s.\n",
435 sb->s_id);
436 return -EINVAL;
437 }
438
439 if (swp) {
440 printk(KERN_WARNING "NILFS warning: broken superblock. "
441 "using spare superblock.\n");
442 nilfs_swap_super_block(nilfs);
443 }
444
445 nilfs->ns_sbwtime[0] = le64_to_cpu(sbp[0]->s_wtime);
446 nilfs->ns_sbwtime[1] = valid[!swp] ? le64_to_cpu(sbp[1]->s_wtime) : 0;
447 nilfs->ns_prot_seq = le64_to_cpu(sbp[valid[1] & !swp]->s_last_seq);
448 *sbpp = sbp[0];
449 return 0;
450}
451
452/**
453 * init_nilfs - initialize a NILFS instance.
454 * @nilfs: the_nilfs structure
455 * @sbi: nilfs_sb_info
456 * @sb: super block
457 * @data: mount options
458 *
459 * init_nilfs() performs common initialization per block device (e.g.
460 * reading the super block, getting disk layout information, initializing
461 * shared fields in the_nilfs). It takes on some portion of the jobs
462 * typically done by a fill_super() routine. This division arises from
463 * the nature that multiple NILFS instances may be simultaneously
464 * mounted on a device.
465 * For multiple mounts on the same device, only the first mount
466 * invokes these tasks.
467 *
468 * Return Value: On success, 0 is returned. On error, a negative error
469 * code is returned.
470 */
471int init_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi, char *data)
472{
473 struct super_block *sb = sbi->s_super;
474 struct nilfs_super_block *sbp;
475 struct backing_dev_info *bdi;
476 int blocksize;
477 int err;
478
479 down_write(&nilfs->ns_sem);
480 if (nilfs_init(nilfs)) {
481 /* Load values from existing the_nilfs */
482 sbp = nilfs->ns_sbp[0];
483 err = nilfs_store_magic_and_option(sb, sbp, data);
484 if (err)
485 goto out;
486
487 blocksize = BLOCK_SIZE << le32_to_cpu(sbp->s_log_block_size);
488 if (sb->s_blocksize != blocksize &&
489 !sb_set_blocksize(sb, blocksize)) {
490 printk(KERN_ERR "NILFS: blocksize %d unfit to device\n",
491 blocksize);
492 err = -EINVAL;
493 }
494 sb->s_maxbytes = nilfs_max_size(sb->s_blocksize_bits);
495 goto out;
496 }
497
498 blocksize = sb_min_blocksize(sb, BLOCK_SIZE);
499 if (!blocksize) {
500 printk(KERN_ERR "NILFS: unable to set blocksize\n");
501 err = -EINVAL;
502 goto out;
503 }
504 err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp);
505 if (err)
506 goto out;
507
508 err = nilfs_store_magic_and_option(sb, sbp, data);
509 if (err)
510 goto failed_sbh;
511
512 blocksize = BLOCK_SIZE << le32_to_cpu(sbp->s_log_block_size);
513 if (sb->s_blocksize != blocksize) {
514 int hw_blocksize = bdev_hardsect_size(sb->s_bdev);
515
516 if (blocksize < hw_blocksize) {
517 printk(KERN_ERR
518 "NILFS: blocksize %d too small for device "
519 "(sector-size = %d).\n",
520 blocksize, hw_blocksize);
521 err = -EINVAL;
522 goto failed_sbh;
523 }
524 nilfs_release_super_block(nilfs);
525 sb_set_blocksize(sb, blocksize);
526
527 err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp);
528 if (err)
529 goto out;
530 /* not failed_sbh; sbh is released automatically
531 when reloading fails. */
532 }
533 nilfs->ns_blocksize_bits = sb->s_blocksize_bits;
534
535 err = nilfs_store_disk_layout(nilfs, sbp);
536 if (err)
537 goto failed_sbh;
538
539 sb->s_maxbytes = nilfs_max_size(sb->s_blocksize_bits);
540
541 nilfs->ns_mount_state = le16_to_cpu(sbp->s_state);
542
543 bdi = nilfs->ns_bdev->bd_inode_backing_dev_info;
544 if (!bdi)
545 bdi = nilfs->ns_bdev->bd_inode->i_mapping->backing_dev_info;
546 nilfs->ns_bdi = bdi ? : &default_backing_dev_info;
547
548 /* Finding last segment */
549 nilfs->ns_last_pseg = le64_to_cpu(sbp->s_last_pseg);
550 nilfs->ns_last_cno = le64_to_cpu(sbp->s_last_cno);
551 nilfs->ns_last_seq = le64_to_cpu(sbp->s_last_seq);
552
553 nilfs->ns_seg_seq = nilfs->ns_last_seq;
554 nilfs->ns_segnum =
555 nilfs_get_segnum_of_block(nilfs, nilfs->ns_last_pseg);
556 nilfs->ns_cno = nilfs->ns_last_cno + 1;
557 if (nilfs->ns_segnum >= nilfs->ns_nsegments) {
558 printk(KERN_ERR "NILFS invalid last segment number.\n");
559 err = -EINVAL;
560 goto failed_sbh;
561 }
562 /* Dummy values */
563 nilfs->ns_free_segments_count =
564 nilfs->ns_nsegments - (nilfs->ns_segnum + 1);
565
566 /* Initialize gcinode cache */
567 err = nilfs_init_gccache(nilfs);
568 if (err)
569 goto failed_sbh;
570
571 set_nilfs_init(nilfs);
572 err = 0;
573 out:
574 up_write(&nilfs->ns_sem);
575 return err;
576
577 failed_sbh:
578 nilfs_release_super_block(nilfs);
579 goto out;
580}
581
582int nilfs_count_free_blocks(struct the_nilfs *nilfs, sector_t *nblocks)
583{
584 struct inode *dat = nilfs_dat_inode(nilfs);
585 unsigned long ncleansegs;
586 int err;
587
588 down_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
589 err = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile, &ncleansegs);
590 up_read(&NILFS_MDT(dat)->mi_sem); /* XXX */
591 if (likely(!err))
592 *nblocks = (sector_t)ncleansegs * nilfs->ns_blocks_per_segment;
593 return err;
594}
595
596int nilfs_near_disk_full(struct the_nilfs *nilfs)
597{
598 struct inode *sufile = nilfs->ns_sufile;
599 unsigned long ncleansegs, nincsegs;
600 int ret;
601
602 ret = nilfs_sufile_get_ncleansegs(sufile, &ncleansegs);
603 if (likely(!ret)) {
604 nincsegs = atomic_read(&nilfs->ns_ndirtyblks) /
605 nilfs->ns_blocks_per_segment + 1;
606 if (ncleansegs <= nilfs->ns_nrsvsegs + nincsegs)
607 ret++;
608 }
609 return ret;
610}
611
612int nilfs_checkpoint_is_mounted(struct the_nilfs *nilfs, __u64 cno,
613 int snapshot_mount)
614{
615 struct nilfs_sb_info *sbi;
616 int ret = 0;
617
618 down_read(&nilfs->ns_sem);
619 if (cno == 0 || cno > nilfs->ns_cno)
620 goto out_unlock;
621
622 list_for_each_entry(sbi, &nilfs->ns_supers, s_list) {
623 if (sbi->s_snapshot_cno == cno &&
624 (!snapshot_mount || nilfs_test_opt(sbi, SNAPSHOT))) {
625 /* exclude read-only mounts */
626 ret++;
627 break;
628 }
629 }
630 /* for protecting recent checkpoints */
631 if (cno >= nilfs_last_cno(nilfs))
632 ret++;
633
634 out_unlock:
635 up_read(&nilfs->ns_sem);
636 return ret;
637}
diff --git a/fs/nilfs2/the_nilfs.h b/fs/nilfs2/the_nilfs.h
new file mode 100644
index 000000000000..30fe58778d05
--- /dev/null
+++ b/fs/nilfs2/the_nilfs.h
@@ -0,0 +1,298 @@
1/*
2 * the_nilfs.h - the_nilfs shared structure.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Ryusuke Konishi <ryusuke@osrg.net>
21 *
22 */
23
24#ifndef _THE_NILFS_H
25#define _THE_NILFS_H
26
27#include <linux/types.h>
28#include <linux/buffer_head.h>
29#include <linux/fs.h>
30#include <linux/blkdev.h>
31#include <linux/backing-dev.h>
32#include "sb.h"
33
34/* the_nilfs struct */
35enum {
36 THE_NILFS_INIT = 0, /* Information from super_block is set */
37 THE_NILFS_LOADED, /* Roll-back/roll-forward has done and
38 the latest checkpoint was loaded */
39 THE_NILFS_DISCONTINUED, /* 'next' pointer chain has broken */
40};
41
42/**
43 * struct the_nilfs - struct to supervise multiple nilfs mount points
44 * @ns_flags: flags
45 * @ns_count: reference count
46 * @ns_bdev: block device
47 * @ns_bdi: backing dev info
48 * @ns_writer: back pointer to writable nilfs_sb_info
49 * @ns_sem: semaphore for shared states
50 * @ns_writer_mutex: mutex protecting ns_writer attach/detach
51 * @ns_writer_refcount: number of referrers on ns_writer
52 * @ns_sbh: buffer heads of on-disk super blocks
53 * @ns_sbp: pointers to super block data
54 * @ns_sbwtime: previous write time of super blocks
55 * @ns_sbsize: size of valid data in super block
56 * @ns_supers: list of nilfs super block structs
57 * @ns_seg_seq: segment sequence counter
58 * @ns_segnum: index number of the latest full segment.
59 * @ns_nextnum: index number of the full segment index to be used next
60 * @ns_pseg_offset: offset of next partial segment in the current full segment
61 * @ns_cno: next checkpoint number
62 * @ns_ctime: write time of the last segment
63 * @ns_nongc_ctime: write time of the last segment not for cleaner operation
64 * @ns_ndirtyblks: Number of dirty data blocks
65 * @ns_last_segment_lock: lock protecting fields for the latest segment
66 * @ns_last_pseg: start block number of the latest segment
67 * @ns_last_seq: sequence value of the latest segment
68 * @ns_last_cno: checkpoint number of the latest segment
69 * @ns_prot_seq: least sequence number of segments which must not be reclaimed
70 * @ns_free_segments_count: counter of free segments
71 * @ns_segctor_sem: segment constructor semaphore
72 * @ns_dat: DAT file inode
73 * @ns_cpfile: checkpoint file inode
74 * @ns_sufile: segusage file inode
75 * @ns_gc_dat: shadow inode of the DAT file inode for GC
76 * @ns_gc_inodes: dummy inodes to keep live blocks
77 * @ns_gc_inodes_h: hash list to keep dummy inode holding live blocks
78 * @ns_blocksize_bits: bit length of block size
79 * @ns_nsegments: number of segments in filesystem
80 * @ns_blocks_per_segment: number of blocks per segment
81 * @ns_r_segments_percentage: reserved segments percentage
82 * @ns_nrsvsegs: number of reserved segments
83 * @ns_first_data_block: block number of first data block
84 * @ns_inode_size: size of on-disk inode
85 * @ns_first_ino: first not-special inode number
86 * @ns_crc_seed: seed value of CRC32 calculation
87 */
88struct the_nilfs {
89 unsigned long ns_flags;
90 atomic_t ns_count;
91
92 struct block_device *ns_bdev;
93 struct backing_dev_info *ns_bdi;
94 struct nilfs_sb_info *ns_writer;
95 struct rw_semaphore ns_sem;
96 struct mutex ns_writer_mutex;
97 atomic_t ns_writer_refcount;
98
99 /*
100 * used for
101 * - loading the latest checkpoint exclusively.
102 * - allocating a new full segment.
103 * - protecting s_dirt in the super_block struct
104 * (see nilfs_write_super) and the following fields.
105 */
106 struct buffer_head *ns_sbh[2];
107 struct nilfs_super_block *ns_sbp[2];
108 time_t ns_sbwtime[2];
109 unsigned ns_sbsize;
110 unsigned ns_mount_state;
111 struct list_head ns_supers;
112
113 /*
114 * Following fields are dedicated to a writable FS-instance.
115 * Except for the period seeking checkpoint, code outside the segment
116 * constructor must lock a segment semaphore while accessing these
117 * fields.
118 * The writable FS-instance is sole during a lifetime of the_nilfs.
119 */
120 u64 ns_seg_seq;
121 __u64 ns_segnum;
122 __u64 ns_nextnum;
123 unsigned long ns_pseg_offset;
124 __u64 ns_cno;
125 time_t ns_ctime;
126 time_t ns_nongc_ctime;
127 atomic_t ns_ndirtyblks;
128
129 /*
130 * The following fields hold information on the latest partial segment
131 * written to disk with a super root. These fields are protected by
132 * ns_last_segment_lock.
133 */
134 spinlock_t ns_last_segment_lock;
135 sector_t ns_last_pseg;
136 u64 ns_last_seq;
137 __u64 ns_last_cno;
138 u64 ns_prot_seq;
139 unsigned long ns_free_segments_count;
140
141 struct rw_semaphore ns_segctor_sem;
142
143 /*
144 * Following fields are lock free except for the period before
145 * the_nilfs is initialized.
146 */
147 struct inode *ns_dat;
148 struct inode *ns_cpfile;
149 struct inode *ns_sufile;
150 struct inode *ns_gc_dat;
151
152 /* GC inode list and hash table head */
153 struct list_head ns_gc_inodes;
154 struct hlist_head *ns_gc_inodes_h;
155
156 /* Disk layout information (static) */
157 unsigned int ns_blocksize_bits;
158 unsigned long ns_nsegments;
159 unsigned long ns_blocks_per_segment;
160 unsigned long ns_r_segments_percentage;
161 unsigned long ns_nrsvsegs;
162 unsigned long ns_first_data_block;
163 int ns_inode_size;
164 int ns_first_ino;
165 u32 ns_crc_seed;
166};
167
168#define NILFS_GCINODE_HASH_BITS 8
169#define NILFS_GCINODE_HASH_SIZE (1<<NILFS_GCINODE_HASH_BITS)
170
171#define THE_NILFS_FNS(bit, name) \
172static inline void set_nilfs_##name(struct the_nilfs *nilfs) \
173{ \
174 set_bit(THE_NILFS_##bit, &(nilfs)->ns_flags); \
175} \
176static inline void clear_nilfs_##name(struct the_nilfs *nilfs) \
177{ \
178 clear_bit(THE_NILFS_##bit, &(nilfs)->ns_flags); \
179} \
180static inline int nilfs_##name(struct the_nilfs *nilfs) \
181{ \
182 return test_bit(THE_NILFS_##bit, &(nilfs)->ns_flags); \
183}
184
185THE_NILFS_FNS(INIT, init)
186THE_NILFS_FNS(LOADED, loaded)
187THE_NILFS_FNS(DISCONTINUED, discontinued)
188
189/* Minimum interval of periodical update of superblocks (in seconds) */
190#define NILFS_SB_FREQ 10
191#define NILFS_ALTSB_FREQ 60 /* spare superblock */
192
193void nilfs_set_last_segment(struct the_nilfs *, sector_t, u64, __u64);
194struct the_nilfs *alloc_nilfs(struct block_device *);
195void put_nilfs(struct the_nilfs *);
196int init_nilfs(struct the_nilfs *, struct nilfs_sb_info *, char *);
197int load_nilfs(struct the_nilfs *, struct nilfs_sb_info *);
198int nilfs_count_free_blocks(struct the_nilfs *, sector_t *);
199int nilfs_checkpoint_is_mounted(struct the_nilfs *, __u64, int);
200int nilfs_near_disk_full(struct the_nilfs *);
201void nilfs_fall_back_super_block(struct the_nilfs *);
202void nilfs_swap_super_block(struct the_nilfs *);
203
204
205static inline void get_nilfs(struct the_nilfs *nilfs)
206{
207 /* Caller must have at least one reference of the_nilfs. */
208 atomic_inc(&nilfs->ns_count);
209}
210
211static inline struct nilfs_sb_info *nilfs_get_writer(struct the_nilfs *nilfs)
212{
213 if (atomic_inc_and_test(&nilfs->ns_writer_refcount))
214 mutex_lock(&nilfs->ns_writer_mutex);
215 return nilfs->ns_writer;
216}
217
218static inline void nilfs_put_writer(struct the_nilfs *nilfs)
219{
220 if (atomic_add_negative(-1, &nilfs->ns_writer_refcount))
221 mutex_unlock(&nilfs->ns_writer_mutex);
222}
223
224static inline void
225nilfs_attach_writer(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi)
226{
227 mutex_lock(&nilfs->ns_writer_mutex);
228 nilfs->ns_writer = sbi;
229 mutex_unlock(&nilfs->ns_writer_mutex);
230}
231
232static inline void
233nilfs_detach_writer(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi)
234{
235 mutex_lock(&nilfs->ns_writer_mutex);
236 if (sbi == nilfs->ns_writer)
237 nilfs->ns_writer = NULL;
238 mutex_unlock(&nilfs->ns_writer_mutex);
239}
240
241static inline void
242nilfs_get_segment_range(struct the_nilfs *nilfs, __u64 segnum,
243 sector_t *seg_start, sector_t *seg_end)
244{
245 *seg_start = (sector_t)nilfs->ns_blocks_per_segment * segnum;
246 *seg_end = *seg_start + nilfs->ns_blocks_per_segment - 1;
247 if (segnum == 0)
248 *seg_start = nilfs->ns_first_data_block;
249}
250
251static inline sector_t
252nilfs_get_segment_start_blocknr(struct the_nilfs *nilfs, __u64 segnum)
253{
254 return (segnum == 0) ? nilfs->ns_first_data_block :
255 (sector_t)nilfs->ns_blocks_per_segment * segnum;
256}
257
258static inline __u64
259nilfs_get_segnum_of_block(struct the_nilfs *nilfs, sector_t blocknr)
260{
261 sector_t segnum = blocknr;
262
263 sector_div(segnum, nilfs->ns_blocks_per_segment);
264 return segnum;
265}
266
267static inline void
268nilfs_terminate_segment(struct the_nilfs *nilfs, sector_t seg_start,
269 sector_t seg_end)
270{
271 /* terminate the current full segment (used in case of I/O-error) */
272 nilfs->ns_pseg_offset = seg_end - seg_start + 1;
273}
274
275static inline void nilfs_shift_to_next_segment(struct the_nilfs *nilfs)
276{
277 /* move forward with a full segment */
278 nilfs->ns_segnum = nilfs->ns_nextnum;
279 nilfs->ns_pseg_offset = 0;
280 nilfs->ns_seg_seq++;
281}
282
283static inline __u64 nilfs_last_cno(struct the_nilfs *nilfs)
284{
285 __u64 cno;
286
287 spin_lock(&nilfs->ns_last_segment_lock);
288 cno = nilfs->ns_last_cno;
289 spin_unlock(&nilfs->ns_last_segment_lock);
290 return cno;
291}
292
293static inline int nilfs_segment_is_active(struct the_nilfs *nilfs, __u64 n)
294{
295 return n == nilfs->ns_segnum || n == nilfs->ns_nextnum;
296}
297
298#endif /* _THE_NILFS_H */
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index a5887df2cd8a..8672b9536039 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -1926,7 +1926,7 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe,
1926 out->f_path.dentry->d_name.len, 1926 out->f_path.dentry->d_name.len,
1927 out->f_path.dentry->d_name.name); 1927 out->f_path.dentry->d_name.name);
1928 1928
1929 inode_double_lock(inode, pipe->inode); 1929 mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT);
1930 1930
1931 ret = ocfs2_rw_lock(inode, 1); 1931 ret = ocfs2_rw_lock(inode, 1);
1932 if (ret < 0) { 1932 if (ret < 0) {
@@ -1941,12 +1941,16 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe,
1941 goto out_unlock; 1941 goto out_unlock;
1942 } 1942 }
1943 1943
1944 if (pipe->inode)
1945 mutex_lock_nested(&pipe->inode->i_mutex, I_MUTEX_CHILD);
1944 ret = generic_file_splice_write_nolock(pipe, out, ppos, len, flags); 1946 ret = generic_file_splice_write_nolock(pipe, out, ppos, len, flags);
1947 if (pipe->inode)
1948 mutex_unlock(&pipe->inode->i_mutex);
1945 1949
1946out_unlock: 1950out_unlock:
1947 ocfs2_rw_unlock(inode, 1); 1951 ocfs2_rw_unlock(inode, 1);
1948out: 1952out:
1949 inode_double_unlock(inode, pipe->inode); 1953 mutex_unlock(&inode->i_mutex);
1950 1954
1951 mlog_exit(ret); 1955 mlog_exit(ret);
1952 return ret; 1956 return ret;
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index b0ae0be4801f..39e4ad4f59f4 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -204,6 +204,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
204 struct file *file = vma->vm_file; 204 struct file *file = vma->vm_file;
205 int flags = vma->vm_flags; 205 int flags = vma->vm_flags;
206 unsigned long ino = 0; 206 unsigned long ino = 0;
207 unsigned long long pgoff = 0;
207 dev_t dev = 0; 208 dev_t dev = 0;
208 int len; 209 int len;
209 210
@@ -211,6 +212,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
211 struct inode *inode = vma->vm_file->f_path.dentry->d_inode; 212 struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
212 dev = inode->i_sb->s_dev; 213 dev = inode->i_sb->s_dev;
213 ino = inode->i_ino; 214 ino = inode->i_ino;
215 pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
214 } 216 }
215 217
216 seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", 218 seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
@@ -220,7 +222,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
220 flags & VM_WRITE ? 'w' : '-', 222 flags & VM_WRITE ? 'w' : '-',
221 flags & VM_EXEC ? 'x' : '-', 223 flags & VM_EXEC ? 'x' : '-',
222 flags & VM_MAYSHARE ? 's' : 'p', 224 flags & VM_MAYSHARE ? 's' : 'p',
223 ((loff_t)vma->vm_pgoff) << PAGE_SHIFT, 225 pgoff,
224 MAJOR(dev), MINOR(dev), ino, &len); 226 MAJOR(dev), MINOR(dev), ino, &len);
225 227
226 /* 228 /*
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
index 863464d5519c..12c20377772d 100644
--- a/fs/proc/task_nommu.c
+++ b/fs/proc/task_nommu.c
@@ -126,6 +126,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
126 struct file *file; 126 struct file *file;
127 dev_t dev = 0; 127 dev_t dev = 0;
128 int flags, len; 128 int flags, len;
129 unsigned long long pgoff = 0;
129 130
130 flags = vma->vm_flags; 131 flags = vma->vm_flags;
131 file = vma->vm_file; 132 file = vma->vm_file;
@@ -134,6 +135,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
134 struct inode *inode = vma->vm_file->f_path.dentry->d_inode; 135 struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
135 dev = inode->i_sb->s_dev; 136 dev = inode->i_sb->s_dev;
136 ino = inode->i_ino; 137 ino = inode->i_ino;
138 pgoff = (loff_t)vma->pg_off << PAGE_SHIFT;
137 } 139 }
138 140
139 seq_printf(m, 141 seq_printf(m,
@@ -144,7 +146,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
144 flags & VM_WRITE ? 'w' : '-', 146 flags & VM_WRITE ? 'w' : '-',
145 flags & VM_EXEC ? 'x' : '-', 147 flags & VM_EXEC ? 'x' : '-',
146 flags & VM_MAYSHARE ? flags & VM_SHARED ? 'S' : 's' : 'p', 148 flags & VM_MAYSHARE ? flags & VM_SHARED ? 'S' : 's' : 'p',
147 (unsigned long long) vma->vm_pgoff << PAGE_SHIFT, 149 pgoff,
148 MAJOR(dev), MINOR(dev), ino, &len); 150 MAJOR(dev), MINOR(dev), ino, &len);
149 151
150 if (file) { 152 if (file) {
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c
index a404fb88e456..3a6b193d8444 100644
--- a/fs/ramfs/inode.c
+++ b/fs/ramfs/inode.c
@@ -221,22 +221,23 @@ static int ramfs_fill_super(struct super_block * sb, void * data, int silent)
221 save_mount_options(sb, data); 221 save_mount_options(sb, data);
222 222
223 fsi = kzalloc(sizeof(struct ramfs_fs_info), GFP_KERNEL); 223 fsi = kzalloc(sizeof(struct ramfs_fs_info), GFP_KERNEL);
224 sb->s_fs_info = fsi;
224 if (!fsi) { 225 if (!fsi) {
225 err = -ENOMEM; 226 err = -ENOMEM;
226 goto fail; 227 goto fail;
227 } 228 }
228 sb->s_fs_info = fsi;
229 229
230 err = ramfs_parse_options(data, &fsi->mount_opts); 230 err = ramfs_parse_options(data, &fsi->mount_opts);
231 if (err) 231 if (err)
232 goto fail; 232 goto fail;
233 233
234 sb->s_maxbytes = MAX_LFS_FILESIZE; 234 sb->s_maxbytes = MAX_LFS_FILESIZE;
235 sb->s_blocksize = PAGE_CACHE_SIZE; 235 sb->s_blocksize = PAGE_CACHE_SIZE;
236 sb->s_blocksize_bits = PAGE_CACHE_SHIFT; 236 sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
237 sb->s_magic = RAMFS_MAGIC; 237 sb->s_magic = RAMFS_MAGIC;
238 sb->s_op = &ramfs_ops; 238 sb->s_op = &ramfs_ops;
239 sb->s_time_gran = 1; 239 sb->s_time_gran = 1;
240
240 inode = ramfs_get_inode(sb, S_IFDIR | fsi->mount_opts.mode, 0); 241 inode = ramfs_get_inode(sb, S_IFDIR | fsi->mount_opts.mode, 0);
241 if (!inode) { 242 if (!inode) {
242 err = -ENOMEM; 243 err = -ENOMEM;
@@ -244,14 +245,16 @@ static int ramfs_fill_super(struct super_block * sb, void * data, int silent)
244 } 245 }
245 246
246 root = d_alloc_root(inode); 247 root = d_alloc_root(inode);
248 sb->s_root = root;
247 if (!root) { 249 if (!root) {
248 err = -ENOMEM; 250 err = -ENOMEM;
249 goto fail; 251 goto fail;
250 } 252 }
251 sb->s_root = root; 253
252 return 0; 254 return 0;
253fail: 255fail:
254 kfree(fsi); 256 kfree(fsi);
257 sb->s_fs_info = NULL;
255 iput(inode); 258 iput(inode);
256 return err; 259 return err;
257} 260}
diff --git a/fs/romfs/Kconfig b/fs/romfs/Kconfig
index 1a17020f9faf..ce2d6bcc6266 100644
--- a/fs/romfs/Kconfig
+++ b/fs/romfs/Kconfig
@@ -1,6 +1,6 @@
1config ROMFS_FS 1config ROMFS_FS
2 tristate "ROM file system support" 2 tristate "ROM file system support"
3 depends on BLOCK 3 depends on BLOCK || MTD
4 ---help--- 4 ---help---
5 This is a very small read-only file system mainly intended for 5 This is a very small read-only file system mainly intended for
6 initial ram disks of installation disks, but it could be used for 6 initial ram disks of installation disks, but it could be used for
@@ -14,3 +14,49 @@ config ROMFS_FS
14 14
15 If you don't know whether you need it, then you don't need it: 15 If you don't know whether you need it, then you don't need it:
16 answer N. 16 answer N.
17
18#
19# Select the backing stores to be supported
20#
21choice
22 prompt "RomFS backing stores"
23 depends on ROMFS_FS
24 default ROMFS_BACKED_BY_BLOCK
25 help
26 Select the backing stores to be supported.
27
28config ROMFS_BACKED_BY_BLOCK
29 bool "Block device-backed ROM file system support"
30 depends on BLOCK
31 help
32 This permits ROMFS to use block devices buffered through the page
33 cache as the medium from which to retrieve data. It does not allow
34 direct mapping of the medium.
35
36 If unsure, answer Y.
37
38config ROMFS_BACKED_BY_MTD
39 bool "MTD-backed ROM file system support"
40 depends on MTD=y || (ROMFS_FS=m && MTD)
41 help
42 This permits ROMFS to use MTD based devices directly, without the
43 intercession of the block layer (which may have been disabled). It
44 also allows direct mapping of MTD devices through romfs files under
45 NOMMU conditions if the underlying device is directly addressable by
46 the CPU.
47
48 If unsure, answer Y.
49
50config ROMFS_BACKED_BY_BOTH
51 bool "Both the above"
52 depends on BLOCK && (MTD=y || (ROMFS_FS=m && MTD))
53endchoice
54
55
56config ROMFS_ON_BLOCK
57 bool
58 default y if ROMFS_BACKED_BY_BLOCK || ROMFS_BACKED_BY_BOTH
59
60config ROMFS_ON_MTD
61 bool
62 default y if ROMFS_BACKED_BY_MTD || ROMFS_BACKED_BY_BOTH
diff --git a/fs/romfs/Makefile b/fs/romfs/Makefile
index c95b21cf49a3..420beb7d495c 100644
--- a/fs/romfs/Makefile
+++ b/fs/romfs/Makefile
@@ -1,7 +1,12 @@
1# 1#
2# Makefile for the linux romfs filesystem routines. 2# Makefile for the linux RomFS filesystem routines.
3# 3#
4 4
5obj-$(CONFIG_ROMFS_FS) += romfs.o 5obj-$(CONFIG_ROMFS_FS) += romfs.o
6 6
7romfs-objs := inode.o 7romfs-y := storage.o super.o
8
9ifneq ($(CONFIG_MMU),y)
10romfs-$(CONFIG_ROMFS_ON_MTD) += mmap-nommu.o
11endif
12
diff --git a/fs/romfs/inode.c b/fs/romfs/inode.c
deleted file mode 100644
index 98a232f7196b..000000000000
--- a/fs/romfs/inode.c
+++ /dev/null
@@ -1,665 +0,0 @@
1/*
2 * ROMFS file system, Linux implementation
3 *
4 * Copyright (C) 1997-1999 Janos Farkas <chexum@shadow.banki.hu>
5 *
6 * Using parts of the minix filesystem
7 * Copyright (C) 1991, 1992 Linus Torvalds
8 *
9 * and parts of the affs filesystem additionally
10 * Copyright (C) 1993 Ray Burr
11 * Copyright (C) 1996 Hans-Joachim Widmaier
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version
16 * 2 of the License, or (at your option) any later version.
17 *
18 * Changes
19 * Changed for 2.1.19 modules
20 * Jan 1997 Initial release
21 * Jun 1997 2.1.43+ changes
22 * Proper page locking in readpage
23 * Changed to work with 2.1.45+ fs
24 * Jul 1997 Fixed follow_link
25 * 2.1.47
26 * lookup shouldn't return -ENOENT
27 * from Horst von Brand:
28 * fail on wrong checksum
29 * double unlock_super was possible
30 * correct namelen for statfs
31 * spotted by Bill Hawes:
32 * readlink shouldn't iput()
33 * Jun 1998 2.1.106 from Avery Pennarun: glibc scandir()
34 * exposed a problem in readdir
35 * 2.1.107 code-freeze spellchecker run
36 * Aug 1998 2.1.118+ VFS changes
37 * Sep 1998 2.1.122 another VFS change (follow_link)
38 * Apr 1999 2.2.7 no more EBADF checking in
39 * lookup/readdir, use ERR_PTR
40 * Jun 1999 2.3.6 d_alloc_root use changed
41 * 2.3.9 clean up usage of ENOENT/negative
42 * dentries in lookup
43 * clean up page flags setting
44 * (error, uptodate, locking) in
45 * in readpage
46 * use init_special_inode for
47 * fifos/sockets (and streamline) in
48 * read_inode, fix _ops table order
49 * Aug 1999 2.3.16 __initfunc() => __init change
50 * Oct 1999 2.3.24 page->owner hack obsoleted
51 * Nov 1999 2.3.27 2.3.25+ page->offset => index change
52 */
53
54/* todo:
55 * - see Documentation/filesystems/romfs.txt
56 * - use allocated, not stack memory for file names?
57 * - considering write access...
58 * - network (tftp) files?
59 * - merge back some _op tables
60 */
61
62/*
63 * Sorry about some optimizations and for some goto's. I just wanted
64 * to squeeze some more bytes out of this code.. :)
65 */
66
67#include <linux/module.h>
68#include <linux/types.h>
69#include <linux/errno.h>
70#include <linux/slab.h>
71#include <linux/romfs_fs.h>
72#include <linux/fs.h>
73#include <linux/init.h>
74#include <linux/pagemap.h>
75#include <linux/smp_lock.h>
76#include <linux/buffer_head.h>
77#include <linux/vfs.h>
78
79#include <asm/uaccess.h>
80
81struct romfs_inode_info {
82 unsigned long i_metasize; /* size of non-data area */
83 unsigned long i_dataoffset; /* from the start of fs */
84 struct inode vfs_inode;
85};
86
87static struct inode *romfs_iget(struct super_block *, unsigned long);
88
89/* instead of private superblock data */
90static inline unsigned long romfs_maxsize(struct super_block *sb)
91{
92 return (unsigned long)sb->s_fs_info;
93}
94
95static inline struct romfs_inode_info *ROMFS_I(struct inode *inode)
96{
97 return container_of(inode, struct romfs_inode_info, vfs_inode);
98}
99
100static __u32
101romfs_checksum(void *data, int size)
102{
103 __u32 sum;
104 __be32 *ptr;
105
106 sum = 0; ptr = data;
107 size>>=2;
108 while (size>0) {
109 sum += be32_to_cpu(*ptr++);
110 size--;
111 }
112 return sum;
113}
114
115static const struct super_operations romfs_ops;
116
117static int romfs_fill_super(struct super_block *s, void *data, int silent)
118{
119 struct buffer_head *bh;
120 struct romfs_super_block *rsb;
121 struct inode *root;
122 int sz, ret = -EINVAL;
123
124 /* I would parse the options here, but there are none.. :) */
125
126 sb_set_blocksize(s, ROMBSIZE);
127 s->s_maxbytes = 0xFFFFFFFF;
128
129 bh = sb_bread(s, 0);
130 if (!bh) {
131 /* XXX merge with other printk? */
132 printk ("romfs: unable to read superblock\n");
133 goto outnobh;
134 }
135
136 rsb = (struct romfs_super_block *)bh->b_data;
137 sz = be32_to_cpu(rsb->size);
138 if (rsb->word0 != ROMSB_WORD0 || rsb->word1 != ROMSB_WORD1
139 || sz < ROMFH_SIZE) {
140 if (!silent)
141 printk ("VFS: Can't find a romfs filesystem on dev "
142 "%s.\n", s->s_id);
143 goto out;
144 }
145 if (romfs_checksum(rsb, min_t(int, sz, 512))) {
146 printk ("romfs: bad initial checksum on dev "
147 "%s.\n", s->s_id);
148 goto out;
149 }
150
151 s->s_magic = ROMFS_MAGIC;
152 s->s_fs_info = (void *)(long)sz;
153
154 s->s_flags |= MS_RDONLY;
155
156 /* Find the start of the fs */
157 sz = (ROMFH_SIZE +
158 strnlen(rsb->name, ROMFS_MAXFN) + 1 + ROMFH_PAD)
159 & ROMFH_MASK;
160
161 s->s_op = &romfs_ops;
162 root = romfs_iget(s, sz);
163 if (IS_ERR(root)) {
164 ret = PTR_ERR(root);
165 goto out;
166 }
167
168 ret = -ENOMEM;
169 s->s_root = d_alloc_root(root);
170 if (!s->s_root)
171 goto outiput;
172
173 brelse(bh);
174 return 0;
175
176outiput:
177 iput(root);
178out:
179 brelse(bh);
180outnobh:
181 return ret;
182}
183
184/* That's simple too. */
185
186static int
187romfs_statfs(struct dentry *dentry, struct kstatfs *buf)
188{
189 buf->f_type = ROMFS_MAGIC;
190 buf->f_bsize = ROMBSIZE;
191 buf->f_bfree = buf->f_bavail = buf->f_ffree;
192 buf->f_blocks = (romfs_maxsize(dentry->d_sb)+ROMBSIZE-1)>>ROMBSBITS;
193 buf->f_namelen = ROMFS_MAXFN;
194 return 0;
195}
196
197/* some helper routines */
198
199static int
200romfs_strnlen(struct inode *i, unsigned long offset, unsigned long count)
201{
202 struct buffer_head *bh;
203 unsigned long avail, maxsize, res;
204
205 maxsize = romfs_maxsize(i->i_sb);
206 if (offset >= maxsize)
207 return -1;
208
209 /* strnlen is almost always valid */
210 if (count > maxsize || offset+count > maxsize)
211 count = maxsize-offset;
212
213 bh = sb_bread(i->i_sb, offset>>ROMBSBITS);
214 if (!bh)
215 return -1; /* error */
216
217 avail = ROMBSIZE - (offset & ROMBMASK);
218 maxsize = min_t(unsigned long, count, avail);
219 res = strnlen(((char *)bh->b_data)+(offset&ROMBMASK), maxsize);
220 brelse(bh);
221
222 if (res < maxsize)
223 return res; /* found all of it */
224
225 while (res < count) {
226 offset += maxsize;
227
228 bh = sb_bread(i->i_sb, offset>>ROMBSBITS);
229 if (!bh)
230 return -1;
231 maxsize = min_t(unsigned long, count - res, ROMBSIZE);
232 avail = strnlen(bh->b_data, maxsize);
233 res += avail;
234 brelse(bh);
235 if (avail < maxsize)
236 return res;
237 }
238 return res;
239}
240
241static int
242romfs_copyfrom(struct inode *i, void *dest, unsigned long offset, unsigned long count)
243{
244 struct buffer_head *bh;
245 unsigned long avail, maxsize, res;
246
247 maxsize = romfs_maxsize(i->i_sb);
248 if (offset >= maxsize || count > maxsize || offset+count>maxsize)
249 return -1;
250
251 bh = sb_bread(i->i_sb, offset>>ROMBSBITS);
252 if (!bh)
253 return -1; /* error */
254
255 avail = ROMBSIZE - (offset & ROMBMASK);
256 maxsize = min_t(unsigned long, count, avail);
257 memcpy(dest, ((char *)bh->b_data) + (offset & ROMBMASK), maxsize);
258 brelse(bh);
259
260 res = maxsize; /* all of it */
261
262 while (res < count) {
263 offset += maxsize;
264 dest += maxsize;
265
266 bh = sb_bread(i->i_sb, offset>>ROMBSBITS);
267 if (!bh)
268 return -1;
269 maxsize = min_t(unsigned long, count - res, ROMBSIZE);
270 memcpy(dest, bh->b_data, maxsize);
271 brelse(bh);
272 res += maxsize;
273 }
274 return res;
275}
276
277static unsigned char romfs_dtype_table[] = {
278 DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_SOCK, DT_FIFO
279};
280
281static int
282romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
283{
284 struct inode *i = filp->f_path.dentry->d_inode;
285 struct romfs_inode ri;
286 unsigned long offset, maxoff;
287 int j, ino, nextfh;
288 int stored = 0;
289 char fsname[ROMFS_MAXFN]; /* XXX dynamic? */
290
291 lock_kernel();
292
293 maxoff = romfs_maxsize(i->i_sb);
294
295 offset = filp->f_pos;
296 if (!offset) {
297 offset = i->i_ino & ROMFH_MASK;
298 if (romfs_copyfrom(i, &ri, offset, ROMFH_SIZE) <= 0)
299 goto out;
300 offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
301 }
302
303 /* Not really failsafe, but we are read-only... */
304 for(;;) {
305 if (!offset || offset >= maxoff) {
306 offset = maxoff;
307 filp->f_pos = offset;
308 goto out;
309 }
310 filp->f_pos = offset;
311
312 /* Fetch inode info */
313 if (romfs_copyfrom(i, &ri, offset, ROMFH_SIZE) <= 0)
314 goto out;
315
316 j = romfs_strnlen(i, offset+ROMFH_SIZE, sizeof(fsname)-1);
317 if (j < 0)
318 goto out;
319
320 fsname[j]=0;
321 romfs_copyfrom(i, fsname, offset+ROMFH_SIZE, j);
322
323 ino = offset;
324 nextfh = be32_to_cpu(ri.next);
325 if ((nextfh & ROMFH_TYPE) == ROMFH_HRD)
326 ino = be32_to_cpu(ri.spec);
327 if (filldir(dirent, fsname, j, offset, ino,
328 romfs_dtype_table[nextfh & ROMFH_TYPE]) < 0) {
329 goto out;
330 }
331 stored++;
332 offset = nextfh & ROMFH_MASK;
333 }
334out:
335 unlock_kernel();
336 return stored;
337}
338
339static struct dentry *
340romfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
341{
342 unsigned long offset, maxoff;
343 long res;
344 int fslen;
345 struct inode *inode = NULL;
346 char fsname[ROMFS_MAXFN]; /* XXX dynamic? */
347 struct romfs_inode ri;
348 const char *name; /* got from dentry */
349 int len;
350
351 res = -EACCES; /* placeholder for "no data here" */
352 offset = dir->i_ino & ROMFH_MASK;
353 lock_kernel();
354 if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0)
355 goto error;
356
357 maxoff = romfs_maxsize(dir->i_sb);
358 offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
359
360 /* OK, now find the file whose name is in "dentry" in the
361 * directory specified by "dir". */
362
363 name = dentry->d_name.name;
364 len = dentry->d_name.len;
365
366 for(;;) {
367 if (!offset || offset >= maxoff)
368 goto success; /* negative success */
369 if (romfs_copyfrom(dir, &ri, offset, ROMFH_SIZE) <= 0)
370 goto error;
371
372 /* try to match the first 16 bytes of name */
373 fslen = romfs_strnlen(dir, offset+ROMFH_SIZE, ROMFH_SIZE);
374 if (len < ROMFH_SIZE) {
375 if (len == fslen) {
376 /* both are shorter, and same size */
377 romfs_copyfrom(dir, fsname, offset+ROMFH_SIZE, len+1);
378 if (strncmp (name, fsname, len) == 0)
379 break;
380 }
381 } else if (fslen >= ROMFH_SIZE) {
382 /* both are longer; XXX optimize max size */
383 fslen = romfs_strnlen(dir, offset+ROMFH_SIZE, sizeof(fsname)-1);
384 if (len == fslen) {
385 romfs_copyfrom(dir, fsname, offset+ROMFH_SIZE, len+1);
386 if (strncmp(name, fsname, len) == 0)
387 break;
388 }
389 }
390 /* next entry */
391 offset = be32_to_cpu(ri.next) & ROMFH_MASK;
392 }
393
394 /* Hard link handling */
395 if ((be32_to_cpu(ri.next) & ROMFH_TYPE) == ROMFH_HRD)
396 offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
397
398 inode = romfs_iget(dir->i_sb, offset);
399 if (IS_ERR(inode)) {
400 res = PTR_ERR(inode);
401 goto error;
402 }
403
404success:
405 d_add(dentry, inode);
406 res = 0;
407error:
408 unlock_kernel();
409 return ERR_PTR(res);
410}
411
412/*
413 * Ok, we do readpage, to be able to execute programs. Unfortunately,
414 * we can't use bmap, since we may have looser alignments.
415 */
416
417static int
418romfs_readpage(struct file *file, struct page * page)
419{
420 struct inode *inode = page->mapping->host;
421 loff_t offset, size;
422 unsigned long filled;
423 void *buf;
424 int result = -EIO;
425
426 page_cache_get(page);
427 lock_kernel();
428 buf = kmap(page);
429 if (!buf)
430 goto err_out;
431
432 /* 32 bit warning -- but not for us :) */
433 offset = page_offset(page);
434 size = i_size_read(inode);
435 filled = 0;
436 result = 0;
437 if (offset < size) {
438 unsigned long readlen;
439
440 size -= offset;
441 readlen = size > PAGE_SIZE ? PAGE_SIZE : size;
442
443 filled = romfs_copyfrom(inode, buf, ROMFS_I(inode)->i_dataoffset+offset, readlen);
444
445 if (filled != readlen) {
446 SetPageError(page);
447 filled = 0;
448 result = -EIO;
449 }
450 }
451
452 if (filled < PAGE_SIZE)
453 memset(buf + filled, 0, PAGE_SIZE-filled);
454
455 if (!result)
456 SetPageUptodate(page);
457 flush_dcache_page(page);
458
459 unlock_page(page);
460
461 kunmap(page);
462err_out:
463 page_cache_release(page);
464 unlock_kernel();
465
466 return result;
467}
468
469/* Mapping from our types to the kernel */
470
471static const struct address_space_operations romfs_aops = {
472 .readpage = romfs_readpage
473};
474
475static const struct file_operations romfs_dir_operations = {
476 .read = generic_read_dir,
477 .readdir = romfs_readdir,
478};
479
480static const struct inode_operations romfs_dir_inode_operations = {
481 .lookup = romfs_lookup,
482};
483
484static mode_t romfs_modemap[] =
485{
486 0, S_IFDIR+0644, S_IFREG+0644, S_IFLNK+0777,
487 S_IFBLK+0600, S_IFCHR+0600, S_IFSOCK+0644, S_IFIFO+0644
488};
489
490static struct inode *
491romfs_iget(struct super_block *sb, unsigned long ino)
492{
493 int nextfh, ret;
494 struct romfs_inode ri;
495 struct inode *i;
496
497 ino &= ROMFH_MASK;
498 i = iget_locked(sb, ino);
499 if (!i)
500 return ERR_PTR(-ENOMEM);
501 if (!(i->i_state & I_NEW))
502 return i;
503
504 i->i_mode = 0;
505
506 /* Loop for finding the real hard link */
507 for(;;) {
508 if (romfs_copyfrom(i, &ri, ino, ROMFH_SIZE) <= 0) {
509 printk(KERN_ERR "romfs: read error for inode 0x%lx\n",
510 ino);
511 iget_failed(i);
512 return ERR_PTR(-EIO);
513 }
514 /* XXX: do romfs_checksum here too (with name) */
515
516 nextfh = be32_to_cpu(ri.next);
517 if ((nextfh & ROMFH_TYPE) != ROMFH_HRD)
518 break;
519
520 ino = be32_to_cpu(ri.spec) & ROMFH_MASK;
521 }
522
523 i->i_nlink = 1; /* Hard to decide.. */
524 i->i_size = be32_to_cpu(ri.size);
525 i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0;
526 i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0;
527
528 /* Precalculate the data offset */
529 ret = romfs_strnlen(i, ino + ROMFH_SIZE, ROMFS_MAXFN);
530 if (ret >= 0)
531 ino = (ROMFH_SIZE + ret + 1 + ROMFH_PAD) & ROMFH_MASK;
532 else
533 ino = 0;
534
535 ROMFS_I(i)->i_metasize = ino;
536 ROMFS_I(i)->i_dataoffset = ino+(i->i_ino&ROMFH_MASK);
537
538 /* Compute permissions */
539 ino = romfs_modemap[nextfh & ROMFH_TYPE];
540 /* only "normal" files have ops */
541 switch (nextfh & ROMFH_TYPE) {
542 case 1:
543 i->i_size = ROMFS_I(i)->i_metasize;
544 i->i_op = &romfs_dir_inode_operations;
545 i->i_fop = &romfs_dir_operations;
546 if (nextfh & ROMFH_EXEC)
547 ino |= S_IXUGO;
548 i->i_mode = ino;
549 break;
550 case 2:
551 i->i_fop = &generic_ro_fops;
552 i->i_data.a_ops = &romfs_aops;
553 if (nextfh & ROMFH_EXEC)
554 ino |= S_IXUGO;
555 i->i_mode = ino;
556 break;
557 case 3:
558 i->i_op = &page_symlink_inode_operations;
559 i->i_data.a_ops = &romfs_aops;
560 i->i_mode = ino | S_IRWXUGO;
561 break;
562 default:
563 /* depending on MBZ for sock/fifos */
564 nextfh = be32_to_cpu(ri.spec);
565 init_special_inode(i, ino,
566 MKDEV(nextfh>>16,nextfh&0xffff));
567 }
568 unlock_new_inode(i);
569 return i;
570}
571
572static struct kmem_cache * romfs_inode_cachep;
573
574static struct inode *romfs_alloc_inode(struct super_block *sb)
575{
576 struct romfs_inode_info *ei;
577 ei = kmem_cache_alloc(romfs_inode_cachep, GFP_KERNEL);
578 if (!ei)
579 return NULL;
580 return &ei->vfs_inode;
581}
582
583static void romfs_destroy_inode(struct inode *inode)
584{
585 kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode));
586}
587
588static void init_once(void *foo)
589{
590 struct romfs_inode_info *ei = foo;
591
592 inode_init_once(&ei->vfs_inode);
593}
594
595static int init_inodecache(void)
596{
597 romfs_inode_cachep = kmem_cache_create("romfs_inode_cache",
598 sizeof(struct romfs_inode_info),
599 0, (SLAB_RECLAIM_ACCOUNT|
600 SLAB_MEM_SPREAD),
601 init_once);
602 if (romfs_inode_cachep == NULL)
603 return -ENOMEM;
604 return 0;
605}
606
607static void destroy_inodecache(void)
608{
609 kmem_cache_destroy(romfs_inode_cachep);
610}
611
612static int romfs_remount(struct super_block *sb, int *flags, char *data)
613{
614 *flags |= MS_RDONLY;
615 return 0;
616}
617
618static const struct super_operations romfs_ops = {
619 .alloc_inode = romfs_alloc_inode,
620 .destroy_inode = romfs_destroy_inode,
621 .statfs = romfs_statfs,
622 .remount_fs = romfs_remount,
623};
624
625static int romfs_get_sb(struct file_system_type *fs_type,
626 int flags, const char *dev_name, void *data, struct vfsmount *mnt)
627{
628 return get_sb_bdev(fs_type, flags, dev_name, data, romfs_fill_super,
629 mnt);
630}
631
632static struct file_system_type romfs_fs_type = {
633 .owner = THIS_MODULE,
634 .name = "romfs",
635 .get_sb = romfs_get_sb,
636 .kill_sb = kill_block_super,
637 .fs_flags = FS_REQUIRES_DEV,
638};
639
640static int __init init_romfs_fs(void)
641{
642 int err = init_inodecache();
643 if (err)
644 goto out1;
645 err = register_filesystem(&romfs_fs_type);
646 if (err)
647 goto out;
648 return 0;
649out:
650 destroy_inodecache();
651out1:
652 return err;
653}
654
655static void __exit exit_romfs_fs(void)
656{
657 unregister_filesystem(&romfs_fs_type);
658 destroy_inodecache();
659}
660
661/* Yes, works even as a module... :) */
662
663module_init(init_romfs_fs)
664module_exit(exit_romfs_fs)
665MODULE_LICENSE("GPL");
diff --git a/fs/romfs/internal.h b/fs/romfs/internal.h
new file mode 100644
index 000000000000..06044a9dc62d
--- /dev/null
+++ b/fs/romfs/internal.h
@@ -0,0 +1,47 @@
1/* RomFS internal definitions
2 *
3 * Copyright © 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12#include <linux/romfs_fs.h>
13
14struct romfs_inode_info {
15 struct inode vfs_inode;
16 unsigned long i_metasize; /* size of non-data area */
17 unsigned long i_dataoffset; /* from the start of fs */
18};
19
20static inline size_t romfs_maxsize(struct super_block *sb)
21{
22 return (size_t) (unsigned long) sb->s_fs_info;
23}
24
25static inline struct romfs_inode_info *ROMFS_I(struct inode *inode)
26{
27 return container_of(inode, struct romfs_inode_info, vfs_inode);
28}
29
30/*
31 * mmap-nommu.c
32 */
33#if !defined(CONFIG_MMU) && defined(CONFIG_ROMFS_ON_MTD)
34extern const struct file_operations romfs_ro_fops;
35#else
36#define romfs_ro_fops generic_ro_fops
37#endif
38
39/*
40 * storage.c
41 */
42extern int romfs_dev_read(struct super_block *sb, unsigned long pos,
43 void *buf, size_t buflen);
44extern ssize_t romfs_dev_strnlen(struct super_block *sb,
45 unsigned long pos, size_t maxlen);
46extern int romfs_dev_strncmp(struct super_block *sb, unsigned long pos,
47 const char *str, size_t size);
diff --git a/fs/romfs/mmap-nommu.c b/fs/romfs/mmap-nommu.c
new file mode 100644
index 000000000000..f0511e816967
--- /dev/null
+++ b/fs/romfs/mmap-nommu.c
@@ -0,0 +1,75 @@
1/* NOMMU mmap support for RomFS on MTD devices
2 *
3 * Copyright © 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12#include <linux/mm.h>
13#include <linux/mtd/super.h>
14#include "internal.h"
15
16/*
17 * try to determine where a shared mapping can be made
18 * - only supported for NOMMU at the moment (MMU can't doesn't copy private
19 * mappings)
20 * - attempts to map through to the underlying MTD device
21 */
22static unsigned long romfs_get_unmapped_area(struct file *file,
23 unsigned long addr,
24 unsigned long len,
25 unsigned long pgoff,
26 unsigned long flags)
27{
28 struct inode *inode = file->f_mapping->host;
29 struct mtd_info *mtd = inode->i_sb->s_mtd;
30 unsigned long isize, offset;
31
32 if (!mtd)
33 goto cant_map_directly;
34
35 isize = i_size_read(inode);
36 offset = pgoff << PAGE_SHIFT;
37 if (offset > isize || len > isize || offset > isize - len)
38 return (unsigned long) -EINVAL;
39
40 /* we need to call down to the MTD layer to do the actual mapping */
41 if (mtd->get_unmapped_area) {
42 if (addr != 0)
43 return (unsigned long) -EINVAL;
44
45 if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT))
46 return (unsigned long) -EINVAL;
47
48 offset += ROMFS_I(inode)->i_dataoffset;
49 if (offset > mtd->size - len)
50 return (unsigned long) -EINVAL;
51
52 return mtd->get_unmapped_area(mtd, len, offset, flags);
53 }
54
55cant_map_directly:
56 return (unsigned long) -ENOSYS;
57}
58
59/*
60 * permit a R/O mapping to be made directly through onto an MTD device if
61 * possible
62 */
63static int romfs_mmap(struct file *file, struct vm_area_struct *vma)
64{
65 return vma->vm_flags & (VM_SHARED | VM_MAYSHARE) ? 0 : -ENOSYS;
66}
67
68const struct file_operations romfs_ro_fops = {
69 .llseek = generic_file_llseek,
70 .read = do_sync_read,
71 .aio_read = generic_file_aio_read,
72 .splice_read = generic_file_splice_read,
73 .mmap = romfs_mmap,
74 .get_unmapped_area = romfs_get_unmapped_area,
75};
diff --git a/fs/romfs/storage.c b/fs/romfs/storage.c
new file mode 100644
index 000000000000..7e3e1e12a081
--- /dev/null
+++ b/fs/romfs/storage.c
@@ -0,0 +1,261 @@
1/* RomFS storage access routines
2 *
3 * Copyright © 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12#include <linux/fs.h>
13#include <linux/mtd/super.h>
14#include <linux/buffer_head.h>
15#include "internal.h"
16
17#if !defined(CONFIG_ROMFS_ON_MTD) && !defined(CONFIG_ROMFS_ON_BLOCK)
18#error no ROMFS backing store interface configured
19#endif
20
21#ifdef CONFIG_ROMFS_ON_MTD
22#define ROMFS_MTD_READ(sb, ...) ((sb)->s_mtd->read((sb)->s_mtd, ##__VA_ARGS__))
23
24/*
25 * read data from an romfs image on an MTD device
26 */
27static int romfs_mtd_read(struct super_block *sb, unsigned long pos,
28 void *buf, size_t buflen)
29{
30 size_t rlen;
31 int ret;
32
33 ret = ROMFS_MTD_READ(sb, pos, buflen, &rlen, buf);
34 return (ret < 0 || rlen != buflen) ? -EIO : 0;
35}
36
37/*
38 * determine the length of a string in a romfs image on an MTD device
39 */
40static ssize_t romfs_mtd_strnlen(struct super_block *sb,
41 unsigned long pos, size_t maxlen)
42{
43 ssize_t n = 0;
44 size_t segment;
45 u_char buf[16], *p;
46 size_t len;
47 int ret;
48
49 /* scan the string up to 16 bytes at a time */
50 while (maxlen > 0) {
51 segment = min_t(size_t, maxlen, 16);
52 ret = ROMFS_MTD_READ(sb, pos, segment, &len, buf);
53 if (ret < 0)
54 return ret;
55 p = memchr(buf, 0, len);
56 if (p)
57 return n + (p - buf);
58 maxlen -= len;
59 pos += len;
60 n += len;
61 }
62
63 return n;
64}
65
66/*
67 * compare a string to one in a romfs image on MTD
68 * - return 1 if matched, 0 if differ, -ve if error
69 */
70static int romfs_mtd_strncmp(struct super_block *sb, unsigned long pos,
71 const char *str, size_t size)
72{
73 u_char buf[16];
74 size_t len, segment;
75 int ret;
76
77 /* scan the string up to 16 bytes at a time */
78 while (size > 0) {
79 segment = min_t(size_t, size, 16);
80 ret = ROMFS_MTD_READ(sb, pos, segment, &len, buf);
81 if (ret < 0)
82 return ret;
83 if (memcmp(buf, str, len) != 0)
84 return 0;
85 size -= len;
86 pos += len;
87 str += len;
88 }
89
90 return 1;
91}
92#endif /* CONFIG_ROMFS_ON_MTD */
93
94#ifdef CONFIG_ROMFS_ON_BLOCK
95/*
96 * read data from an romfs image on a block device
97 */
98static int romfs_blk_read(struct super_block *sb, unsigned long pos,
99 void *buf, size_t buflen)
100{
101 struct buffer_head *bh;
102 unsigned long offset;
103 size_t segment;
104
105 /* copy the string up to blocksize bytes at a time */
106 while (buflen > 0) {
107 offset = pos & (ROMBSIZE - 1);
108 segment = min_t(size_t, buflen, ROMBSIZE - offset);
109 bh = sb_bread(sb, pos >> ROMBSBITS);
110 if (!bh)
111 return -EIO;
112 memcpy(buf, bh->b_data + offset, segment);
113 brelse(bh);
114 buflen -= segment;
115 pos += segment;
116 }
117
118 return 0;
119}
120
121/*
122 * determine the length of a string in romfs on a block device
123 */
124static ssize_t romfs_blk_strnlen(struct super_block *sb,
125 unsigned long pos, size_t limit)
126{
127 struct buffer_head *bh;
128 unsigned long offset;
129 ssize_t n = 0;
130 size_t segment;
131 u_char *buf, *p;
132
133 /* scan the string up to blocksize bytes at a time */
134 while (limit > 0) {
135 offset = pos & (ROMBSIZE - 1);
136 segment = min_t(size_t, limit, ROMBSIZE - offset);
137 bh = sb_bread(sb, pos >> ROMBSBITS);
138 if (!bh)
139 return -EIO;
140 buf = bh->b_data + offset;
141 p = memchr(buf, 0, segment);
142 brelse(bh);
143 if (p)
144 return n + (p - buf);
145 limit -= segment;
146 pos += segment;
147 n += segment;
148 }
149
150 return n;
151}
152
153/*
154 * compare a string to one in a romfs image on a block device
155 * - return 1 if matched, 0 if differ, -ve if error
156 */
157static int romfs_blk_strncmp(struct super_block *sb, unsigned long pos,
158 const char *str, size_t size)
159{
160 struct buffer_head *bh;
161 unsigned long offset;
162 size_t segment;
163 bool x;
164
165 /* scan the string up to 16 bytes at a time */
166 while (size > 0) {
167 offset = pos & (ROMBSIZE - 1);
168 segment = min_t(size_t, size, ROMBSIZE - offset);
169 bh = sb_bread(sb, pos >> ROMBSBITS);
170 if (!bh)
171 return -EIO;
172 x = (memcmp(bh->b_data + offset, str, segment) != 0);
173 brelse(bh);
174 if (x)
175 return 0;
176 size -= segment;
177 pos += segment;
178 str += segment;
179 }
180
181 return 1;
182}
183#endif /* CONFIG_ROMFS_ON_BLOCK */
184
185/*
186 * read data from the romfs image
187 */
188int romfs_dev_read(struct super_block *sb, unsigned long pos,
189 void *buf, size_t buflen)
190{
191 size_t limit;
192
193 limit = romfs_maxsize(sb);
194 if (pos >= limit)
195 return -EIO;
196 if (buflen > limit - pos)
197 buflen = limit - pos;
198
199#ifdef CONFIG_ROMFS_ON_MTD
200 if (sb->s_mtd)
201 return romfs_mtd_read(sb, pos, buf, buflen);
202#endif
203#ifdef CONFIG_ROMFS_ON_BLOCK
204 if (sb->s_bdev)
205 return romfs_blk_read(sb, pos, buf, buflen);
206#endif
207 return -EIO;
208}
209
210/*
211 * determine the length of a string in romfs
212 */
213ssize_t romfs_dev_strnlen(struct super_block *sb,
214 unsigned long pos, size_t maxlen)
215{
216 size_t limit;
217
218 limit = romfs_maxsize(sb);
219 if (pos >= limit)
220 return -EIO;
221 if (maxlen > limit - pos)
222 maxlen = limit - pos;
223
224#ifdef CONFIG_ROMFS_ON_MTD
225 if (sb->s_mtd)
226 return romfs_mtd_strnlen(sb, pos, limit);
227#endif
228#ifdef CONFIG_ROMFS_ON_BLOCK
229 if (sb->s_bdev)
230 return romfs_blk_strnlen(sb, pos, limit);
231#endif
232 return -EIO;
233}
234
235/*
236 * compare a string to one in romfs
237 * - return 1 if matched, 0 if differ, -ve if error
238 */
239int romfs_dev_strncmp(struct super_block *sb, unsigned long pos,
240 const char *str, size_t size)
241{
242 size_t limit;
243
244 limit = romfs_maxsize(sb);
245 if (pos >= limit)
246 return -EIO;
247 if (size > ROMFS_MAXFN)
248 return -ENAMETOOLONG;
249 if (size > limit - pos)
250 return -EIO;
251
252#ifdef CONFIG_ROMFS_ON_MTD
253 if (sb->s_mtd)
254 return romfs_mtd_strncmp(sb, pos, str, size);
255#endif
256#ifdef CONFIG_ROMFS_ON_BLOCK
257 if (sb->s_bdev)
258 return romfs_blk_strncmp(sb, pos, str, size);
259#endif
260 return -EIO;
261}
diff --git a/fs/romfs/super.c b/fs/romfs/super.c
new file mode 100644
index 000000000000..10ca7d984a8b
--- /dev/null
+++ b/fs/romfs/super.c
@@ -0,0 +1,653 @@
1/* Block- or MTD-based romfs
2 *
3 * Copyright © 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * Derived from: ROMFS file system, Linux implementation
7 *
8 * Copyright © 1997-1999 Janos Farkas <chexum@shadow.banki.hu>
9 *
10 * Using parts of the minix filesystem
11 * Copyright © 1991, 1992 Linus Torvalds
12 *
13 * and parts of the affs filesystem additionally
14 * Copyright © 1993 Ray Burr
15 * Copyright © 1996 Hans-Joachim Widmaier
16 *
17 * Changes
18 * Changed for 2.1.19 modules
19 * Jan 1997 Initial release
20 * Jun 1997 2.1.43+ changes
21 * Proper page locking in readpage
22 * Changed to work with 2.1.45+ fs
23 * Jul 1997 Fixed follow_link
24 * 2.1.47
25 * lookup shouldn't return -ENOENT
26 * from Horst von Brand:
27 * fail on wrong checksum
28 * double unlock_super was possible
29 * correct namelen for statfs
30 * spotted by Bill Hawes:
31 * readlink shouldn't iput()
32 * Jun 1998 2.1.106 from Avery Pennarun: glibc scandir()
33 * exposed a problem in readdir
34 * 2.1.107 code-freeze spellchecker run
35 * Aug 1998 2.1.118+ VFS changes
36 * Sep 1998 2.1.122 another VFS change (follow_link)
37 * Apr 1999 2.2.7 no more EBADF checking in
38 * lookup/readdir, use ERR_PTR
39 * Jun 1999 2.3.6 d_alloc_root use changed
40 * 2.3.9 clean up usage of ENOENT/negative
41 * dentries in lookup
42 * clean up page flags setting
43 * (error, uptodate, locking) in
44 * in readpage
45 * use init_special_inode for
46 * fifos/sockets (and streamline) in
47 * read_inode, fix _ops table order
48 * Aug 1999 2.3.16 __initfunc() => __init change
49 * Oct 1999 2.3.24 page->owner hack obsoleted
50 * Nov 1999 2.3.27 2.3.25+ page->offset => index change
51 *
52 *
53 * This program is free software; you can redistribute it and/or
54 * modify it under the terms of the GNU General Public Licence
55 * as published by the Free Software Foundation; either version
56 * 2 of the Licence, or (at your option) any later version.
57 */
58
59#include <linux/module.h>
60#include <linux/string.h>
61#include <linux/fs.h>
62#include <linux/time.h>
63#include <linux/slab.h>
64#include <linux/init.h>
65#include <linux/blkdev.h>
66#include <linux/parser.h>
67#include <linux/mount.h>
68#include <linux/namei.h>
69#include <linux/statfs.h>
70#include <linux/mtd/super.h>
71#include <linux/ctype.h>
72#include <linux/highmem.h>
73#include <linux/pagemap.h>
74#include <linux/uaccess.h>
75#include "internal.h"
76
77static struct kmem_cache *romfs_inode_cachep;
78
79static const umode_t romfs_modemap[8] = {
80 0, /* hard link */
81 S_IFDIR | 0644, /* directory */
82 S_IFREG | 0644, /* regular file */
83 S_IFLNK | 0777, /* symlink */
84 S_IFBLK | 0600, /* blockdev */
85 S_IFCHR | 0600, /* chardev */
86 S_IFSOCK | 0644, /* socket */
87 S_IFIFO | 0644 /* FIFO */
88};
89
90static const unsigned char romfs_dtype_table[] = {
91 DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_SOCK, DT_FIFO
92};
93
94static struct inode *romfs_iget(struct super_block *sb, unsigned long pos);
95
96/*
97 * read a page worth of data from the image
98 */
99static int romfs_readpage(struct file *file, struct page *page)
100{
101 struct inode *inode = page->mapping->host;
102 loff_t offset, size;
103 unsigned long fillsize, pos;
104 void *buf;
105 int ret;
106
107 buf = kmap(page);
108 if (!buf)
109 return -ENOMEM;
110
111 /* 32 bit warning -- but not for us :) */
112 offset = page_offset(page);
113 size = i_size_read(inode);
114 fillsize = 0;
115 ret = 0;
116 if (offset < size) {
117 size -= offset;
118 fillsize = size > PAGE_SIZE ? PAGE_SIZE : size;
119
120 pos = ROMFS_I(inode)->i_dataoffset + offset;
121
122 ret = romfs_dev_read(inode->i_sb, pos, buf, fillsize);
123 if (ret < 0) {
124 SetPageError(page);
125 fillsize = 0;
126 ret = -EIO;
127 }
128 }
129
130 if (fillsize < PAGE_SIZE)
131 memset(buf + fillsize, 0, PAGE_SIZE - fillsize);
132 if (ret == 0)
133 SetPageUptodate(page);
134
135 flush_dcache_page(page);
136 kunmap(page);
137 unlock_page(page);
138 return ret;
139}
140
141static const struct address_space_operations romfs_aops = {
142 .readpage = romfs_readpage
143};
144
145/*
146 * read the entries from a directory
147 */
148static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
149{
150 struct inode *i = filp->f_dentry->d_inode;
151 struct romfs_inode ri;
152 unsigned long offset, maxoff;
153 int j, ino, nextfh;
154 int stored = 0;
155 char fsname[ROMFS_MAXFN]; /* XXX dynamic? */
156 int ret;
157
158 maxoff = romfs_maxsize(i->i_sb);
159
160 offset = filp->f_pos;
161 if (!offset) {
162 offset = i->i_ino & ROMFH_MASK;
163 ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE);
164 if (ret < 0)
165 goto out;
166 offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
167 }
168
169 /* Not really failsafe, but we are read-only... */
170 for (;;) {
171 if (!offset || offset >= maxoff) {
172 offset = maxoff;
173 filp->f_pos = offset;
174 goto out;
175 }
176 filp->f_pos = offset;
177
178 /* Fetch inode info */
179 ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE);
180 if (ret < 0)
181 goto out;
182
183 j = romfs_dev_strnlen(i->i_sb, offset + ROMFH_SIZE,
184 sizeof(fsname) - 1);
185 if (j < 0)
186 goto out;
187
188 ret = romfs_dev_read(i->i_sb, offset + ROMFH_SIZE, fsname, j);
189 if (ret < 0)
190 goto out;
191 fsname[j] = '\0';
192
193 ino = offset;
194 nextfh = be32_to_cpu(ri.next);
195 if ((nextfh & ROMFH_TYPE) == ROMFH_HRD)
196 ino = be32_to_cpu(ri.spec);
197 if (filldir(dirent, fsname, j, offset, ino,
198 romfs_dtype_table[nextfh & ROMFH_TYPE]) < 0)
199 goto out;
200
201 stored++;
202 offset = nextfh & ROMFH_MASK;
203 }
204
205out:
206 return stored;
207}
208
209/*
210 * look up an entry in a directory
211 */
212static struct dentry *romfs_lookup(struct inode *dir, struct dentry *dentry,
213 struct nameidata *nd)
214{
215 unsigned long offset, maxoff;
216 struct inode *inode;
217 struct romfs_inode ri;
218 const char *name; /* got from dentry */
219 int len, ret;
220
221 offset = dir->i_ino & ROMFH_MASK;
222 ret = romfs_dev_read(dir->i_sb, offset, &ri, ROMFH_SIZE);
223 if (ret < 0)
224 goto error;
225
226 /* search all the file entries in the list starting from the one
227 * pointed to by the directory's special data */
228 maxoff = romfs_maxsize(dir->i_sb);
229 offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
230
231 name = dentry->d_name.name;
232 len = dentry->d_name.len;
233
234 for (;;) {
235 if (!offset || offset >= maxoff)
236 goto out0;
237
238 ret = romfs_dev_read(dir->i_sb, offset, &ri, sizeof(ri));
239 if (ret < 0)
240 goto error;
241
242 /* try to match the first 16 bytes of name */
243 ret = romfs_dev_strncmp(dir->i_sb, offset + ROMFH_SIZE, name,
244 len);
245 if (ret < 0)
246 goto error;
247 if (ret == 1)
248 break;
249
250 /* next entry */
251 offset = be32_to_cpu(ri.next) & ROMFH_MASK;
252 }
253
254 /* Hard link handling */
255 if ((be32_to_cpu(ri.next) & ROMFH_TYPE) == ROMFH_HRD)
256 offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
257
258 inode = romfs_iget(dir->i_sb, offset);
259 if (IS_ERR(inode)) {
260 ret = PTR_ERR(inode);
261 goto error;
262 }
263 goto outi;
264
265 /*
266 * it's a bit funky, _lookup needs to return an error code
267 * (negative) or a NULL, both as a dentry. ENOENT should not
268 * be returned, instead we need to create a negative dentry by
269 * d_add(dentry, NULL); and return 0 as no error.
270 * (Although as I see, it only matters on writable file
271 * systems).
272 */
273out0:
274 inode = NULL;
275outi:
276 d_add(dentry, inode);
277 ret = 0;
278error:
279 return ERR_PTR(ret);
280}
281
282static const struct file_operations romfs_dir_operations = {
283 .read = generic_read_dir,
284 .readdir = romfs_readdir,
285};
286
287static struct inode_operations romfs_dir_inode_operations = {
288 .lookup = romfs_lookup,
289};
290
291/*
292 * get a romfs inode based on its position in the image (which doubles as the
293 * inode number)
294 */
295static struct inode *romfs_iget(struct super_block *sb, unsigned long pos)
296{
297 struct romfs_inode_info *inode;
298 struct romfs_inode ri;
299 struct inode *i;
300 unsigned long nlen;
301 unsigned nextfh, ret;
302 umode_t mode;
303
304 /* we might have to traverse a chain of "hard link" file entries to get
305 * to the actual file */
306 for (;;) {
307 ret = romfs_dev_read(sb, pos, &ri, sizeof(ri));
308 if (ret < 0)
309 goto error;
310
311 /* XXX: do romfs_checksum here too (with name) */
312
313 nextfh = be32_to_cpu(ri.next);
314 if ((nextfh & ROMFH_TYPE) != ROMFH_HRD)
315 break;
316
317 pos = be32_to_cpu(ri.spec) & ROMFH_MASK;
318 }
319
320 /* determine the length of the filename */
321 nlen = romfs_dev_strnlen(sb, pos + ROMFH_SIZE, ROMFS_MAXFN);
322 if (IS_ERR_VALUE(nlen))
323 goto eio;
324
325 /* get an inode for this image position */
326 i = iget_locked(sb, pos);
327 if (!i)
328 return ERR_PTR(-ENOMEM);
329
330 if (!(i->i_state & I_NEW))
331 return i;
332
333 /* precalculate the data offset */
334 inode = ROMFS_I(i);
335 inode->i_metasize = (ROMFH_SIZE + nlen + 1 + ROMFH_PAD) & ROMFH_MASK;
336 inode->i_dataoffset = pos + inode->i_metasize;
337
338 i->i_nlink = 1; /* Hard to decide.. */
339 i->i_size = be32_to_cpu(ri.size);
340 i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0;
341 i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0;
342
343 /* set up mode and ops */
344 mode = romfs_modemap[nextfh & ROMFH_TYPE];
345
346 switch (nextfh & ROMFH_TYPE) {
347 case ROMFH_DIR:
348 i->i_size = ROMFS_I(i)->i_metasize;
349 i->i_op = &romfs_dir_inode_operations;
350 i->i_fop = &romfs_dir_operations;
351 if (nextfh & ROMFH_EXEC)
352 mode |= S_IXUGO;
353 break;
354 case ROMFH_REG:
355 i->i_fop = &romfs_ro_fops;
356 i->i_data.a_ops = &romfs_aops;
357 if (i->i_sb->s_mtd)
358 i->i_data.backing_dev_info =
359 i->i_sb->s_mtd->backing_dev_info;
360 if (nextfh & ROMFH_EXEC)
361 mode |= S_IXUGO;
362 break;
363 case ROMFH_SYM:
364 i->i_op = &page_symlink_inode_operations;
365 i->i_data.a_ops = &romfs_aops;
366 mode |= S_IRWXUGO;
367 break;
368 default:
369 /* depending on MBZ for sock/fifos */
370 nextfh = be32_to_cpu(ri.spec);
371 init_special_inode(i, mode, MKDEV(nextfh >> 16,
372 nextfh & 0xffff));
373 break;
374 }
375
376 i->i_mode = mode;
377
378 unlock_new_inode(i);
379 return i;
380
381eio:
382 ret = -EIO;
383error:
384 printk(KERN_ERR "ROMFS: read error for inode 0x%lx\n", pos);
385 return ERR_PTR(ret);
386}
387
388/*
389 * allocate a new inode
390 */
391static struct inode *romfs_alloc_inode(struct super_block *sb)
392{
393 struct romfs_inode_info *inode;
394 inode = kmem_cache_alloc(romfs_inode_cachep, GFP_KERNEL);
395 return inode ? &inode->vfs_inode : NULL;
396}
397
398/*
399 * return a spent inode to the slab cache
400 */
401static void romfs_destroy_inode(struct inode *inode)
402{
403 kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode));
404}
405
406/*
407 * get filesystem statistics
408 */
409static int romfs_statfs(struct dentry *dentry, struct kstatfs *buf)
410{
411 struct super_block *sb = dentry->d_sb;
412 u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
413
414 buf->f_type = ROMFS_MAGIC;
415 buf->f_namelen = ROMFS_MAXFN;
416 buf->f_bsize = ROMBSIZE;
417 buf->f_bfree = buf->f_bavail = buf->f_ffree;
418 buf->f_blocks =
419 (romfs_maxsize(dentry->d_sb) + ROMBSIZE - 1) >> ROMBSBITS;
420 buf->f_fsid.val[0] = (u32)id;
421 buf->f_fsid.val[1] = (u32)(id >> 32);
422 return 0;
423}
424
425/*
426 * remounting must involve read-only
427 */
428static int romfs_remount(struct super_block *sb, int *flags, char *data)
429{
430 *flags |= MS_RDONLY;
431 return 0;
432}
433
434static const struct super_operations romfs_super_ops = {
435 .alloc_inode = romfs_alloc_inode,
436 .destroy_inode = romfs_destroy_inode,
437 .statfs = romfs_statfs,
438 .remount_fs = romfs_remount,
439};
440
441/*
442 * checksum check on part of a romfs filesystem
443 */
444static __u32 romfs_checksum(const void *data, int size)
445{
446 const __be32 *ptr = data;
447 __u32 sum;
448
449 sum = 0;
450 size >>= 2;
451 while (size > 0) {
452 sum += be32_to_cpu(*ptr++);
453 size--;
454 }
455 return sum;
456}
457
458/*
459 * fill in the superblock
460 */
461static int romfs_fill_super(struct super_block *sb, void *data, int silent)
462{
463 struct romfs_super_block *rsb;
464 struct inode *root;
465 unsigned long pos, img_size;
466 const char *storage;
467 size_t len;
468 int ret;
469
470#ifdef CONFIG_BLOCK
471 if (!sb->s_mtd) {
472 sb_set_blocksize(sb, ROMBSIZE);
473 } else {
474 sb->s_blocksize = ROMBSIZE;
475 sb->s_blocksize_bits = blksize_bits(ROMBSIZE);
476 }
477#endif
478
479 sb->s_maxbytes = 0xFFFFFFFF;
480 sb->s_magic = ROMFS_MAGIC;
481 sb->s_flags |= MS_RDONLY | MS_NOATIME;
482 sb->s_op = &romfs_super_ops;
483
484 /* read the image superblock and check it */
485 rsb = kmalloc(512, GFP_KERNEL);
486 if (!rsb)
487 return -ENOMEM;
488
489 sb->s_fs_info = (void *) 512;
490 ret = romfs_dev_read(sb, 0, rsb, 512);
491 if (ret < 0)
492 goto error_rsb;
493
494 img_size = be32_to_cpu(rsb->size);
495
496 if (sb->s_mtd && img_size > sb->s_mtd->size)
497 goto error_rsb_inval;
498
499 sb->s_fs_info = (void *) img_size;
500
501 if (rsb->word0 != ROMSB_WORD0 || rsb->word1 != ROMSB_WORD1 ||
502 img_size < ROMFH_SIZE) {
503 if (!silent)
504 printk(KERN_WARNING "VFS:"
505 " Can't find a romfs filesystem on dev %s.\n",
506 sb->s_id);
507 goto error_rsb_inval;
508 }
509
510 if (romfs_checksum(rsb, min_t(size_t, img_size, 512))) {
511 printk(KERN_ERR "ROMFS: bad initial checksum on dev %s.\n",
512 sb->s_id);
513 goto error_rsb_inval;
514 }
515
516 storage = sb->s_mtd ? "MTD" : "the block layer";
517
518 len = strnlen(rsb->name, ROMFS_MAXFN);
519 if (!silent)
520 printk(KERN_NOTICE "ROMFS: Mounting image '%*.*s' through %s\n",
521 (unsigned) len, (unsigned) len, rsb->name, storage);
522
523 kfree(rsb);
524 rsb = NULL;
525
526 /* find the root directory */
527 pos = (ROMFH_SIZE + len + 1 + ROMFH_PAD) & ROMFH_MASK;
528
529 root = romfs_iget(sb, pos);
530 if (!root)
531 goto error;
532
533 sb->s_root = d_alloc_root(root);
534 if (!sb->s_root)
535 goto error_i;
536
537 return 0;
538
539error_i:
540 iput(root);
541error:
542 return -EINVAL;
543error_rsb_inval:
544 ret = -EINVAL;
545error_rsb:
546 return ret;
547}
548
549/*
550 * get a superblock for mounting
551 */
552static int romfs_get_sb(struct file_system_type *fs_type,
553 int flags, const char *dev_name,
554 void *data, struct vfsmount *mnt)
555{
556 int ret = -EINVAL;
557
558#ifdef CONFIG_ROMFS_ON_MTD
559 ret = get_sb_mtd(fs_type, flags, dev_name, data, romfs_fill_super,
560 mnt);
561#endif
562#ifdef CONFIG_ROMFS_ON_BLOCK
563 if (ret == -EINVAL)
564 ret = get_sb_bdev(fs_type, flags, dev_name, data,
565 romfs_fill_super, mnt);
566#endif
567 return ret;
568}
569
570/*
571 * destroy a romfs superblock in the appropriate manner
572 */
573static void romfs_kill_sb(struct super_block *sb)
574{
575#ifdef CONFIG_ROMFS_ON_MTD
576 if (sb->s_mtd) {
577 kill_mtd_super(sb);
578 return;
579 }
580#endif
581#ifdef CONFIG_ROMFS_ON_BLOCK
582 if (sb->s_bdev) {
583 kill_block_super(sb);
584 return;
585 }
586#endif
587}
588
589static struct file_system_type romfs_fs_type = {
590 .owner = THIS_MODULE,
591 .name = "romfs",
592 .get_sb = romfs_get_sb,
593 .kill_sb = romfs_kill_sb,
594 .fs_flags = FS_REQUIRES_DEV,
595};
596
597/*
598 * inode storage initialiser
599 */
600static void romfs_i_init_once(void *_inode)
601{
602 struct romfs_inode_info *inode = _inode;
603
604 inode_init_once(&inode->vfs_inode);
605}
606
607/*
608 * romfs module initialisation
609 */
610static int __init init_romfs_fs(void)
611{
612 int ret;
613
614 printk(KERN_INFO "ROMFS MTD (C) 2007 Red Hat, Inc.\n");
615
616 romfs_inode_cachep =
617 kmem_cache_create("romfs_i",
618 sizeof(struct romfs_inode_info), 0,
619 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD,
620 romfs_i_init_once);
621
622 if (!romfs_inode_cachep) {
623 printk(KERN_ERR
624 "ROMFS error: Failed to initialise inode cache\n");
625 return -ENOMEM;
626 }
627 ret = register_filesystem(&romfs_fs_type);
628 if (ret) {
629 printk(KERN_ERR "ROMFS error: Failed to register filesystem\n");
630 goto error_register;
631 }
632 return 0;
633
634error_register:
635 kmem_cache_destroy(romfs_inode_cachep);
636 return ret;
637}
638
639/*
640 * romfs module removal
641 */
642static void __exit exit_romfs_fs(void)
643{
644 unregister_filesystem(&romfs_fs_type);
645 kmem_cache_destroy(romfs_inode_cachep);
646}
647
648module_init(init_romfs_fs);
649module_exit(exit_romfs_fs);
650
651MODULE_DESCRIPTION("Direct-MTD Capable RomFS");
652MODULE_AUTHOR("Red Hat, Inc.");
653MODULE_LICENSE("GPL"); /* Actually dual-licensed, but it doesn't matter for */
diff --git a/fs/splice.c b/fs/splice.c
index dd727d43e5b7..c18aa7e03e2b 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -737,10 +737,19 @@ ssize_t splice_from_pipe(struct pipe_inode_info *pipe, struct file *out,
737 * ->write_end. Most of the time, these expect i_mutex to 737 * ->write_end. Most of the time, these expect i_mutex to
738 * be held. Since this may result in an ABBA deadlock with 738 * be held. Since this may result in an ABBA deadlock with
739 * pipe->inode, we have to order lock acquiry here. 739 * pipe->inode, we have to order lock acquiry here.
740 *
741 * Outer lock must be inode->i_mutex, as pipe_wait() will
742 * release and reacquire pipe->inode->i_mutex, AND inode must
743 * never be a pipe.
740 */ 744 */
741 inode_double_lock(inode, pipe->inode); 745 WARN_ON(S_ISFIFO(inode->i_mode));
746 mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT);
747 if (pipe->inode)
748 mutex_lock_nested(&pipe->inode->i_mutex, I_MUTEX_CHILD);
742 ret = __splice_from_pipe(pipe, &sd, actor); 749 ret = __splice_from_pipe(pipe, &sd, actor);
743 inode_double_unlock(inode, pipe->inode); 750 if (pipe->inode)
751 mutex_unlock(&pipe->inode->i_mutex);
752 mutex_unlock(&inode->i_mutex);
744 753
745 return ret; 754 return ret;
746} 755}
@@ -831,11 +840,17 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
831 }; 840 };
832 ssize_t ret; 841 ssize_t ret;
833 842
834 inode_double_lock(inode, pipe->inode); 843 WARN_ON(S_ISFIFO(inode->i_mode));
844 mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT);
835 ret = file_remove_suid(out); 845 ret = file_remove_suid(out);
836 if (likely(!ret)) 846 if (likely(!ret)) {
847 if (pipe->inode)
848 mutex_lock_nested(&pipe->inode->i_mutex, I_MUTEX_CHILD);
837 ret = __splice_from_pipe(pipe, &sd, pipe_to_file); 849 ret = __splice_from_pipe(pipe, &sd, pipe_to_file);
838 inode_double_unlock(inode, pipe->inode); 850 if (pipe->inode)
851 mutex_unlock(&pipe->inode->i_mutex);
852 }
853 mutex_unlock(&inode->i_mutex);
839 if (ret > 0) { 854 if (ret > 0) {
840 unsigned long nr_pages; 855 unsigned long nr_pages;
841 856
diff --git a/fs/squashfs/export.c b/fs/squashfs/export.c
index 69e971d5ddc1..2b1b8fe5e037 100644
--- a/fs/squashfs/export.c
+++ b/fs/squashfs/export.c
@@ -40,6 +40,7 @@
40#include <linux/dcache.h> 40#include <linux/dcache.h>
41#include <linux/exportfs.h> 41#include <linux/exportfs.h>
42#include <linux/zlib.h> 42#include <linux/zlib.h>
43#include <linux/slab.h>
43 44
44#include "squashfs_fs.h" 45#include "squashfs_fs.h"
45#include "squashfs_fs_sb.h" 46#include "squashfs_fs_sb.h"
diff --git a/fs/super.c b/fs/super.c
index 77cb4ec919b9..786fe7d72790 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -771,6 +771,46 @@ void kill_litter_super(struct super_block *sb)
771 771
772EXPORT_SYMBOL(kill_litter_super); 772EXPORT_SYMBOL(kill_litter_super);
773 773
774static int ns_test_super(struct super_block *sb, void *data)
775{
776 return sb->s_fs_info == data;
777}
778
779static int ns_set_super(struct super_block *sb, void *data)
780{
781 sb->s_fs_info = data;
782 return set_anon_super(sb, NULL);
783}
784
785int get_sb_ns(struct file_system_type *fs_type, int flags, void *data,
786 int (*fill_super)(struct super_block *, void *, int),
787 struct vfsmount *mnt)
788{
789 struct super_block *sb;
790
791 sb = sget(fs_type, ns_test_super, ns_set_super, data);
792 if (IS_ERR(sb))
793 return PTR_ERR(sb);
794
795 if (!sb->s_root) {
796 int err;
797 sb->s_flags = flags;
798 err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
799 if (err) {
800 up_write(&sb->s_umount);
801 deactivate_super(sb);
802 return err;
803 }
804
805 sb->s_flags |= MS_ACTIVE;
806 }
807
808 simple_set_mnt(mnt, sb);
809 return 0;
810}
811
812EXPORT_SYMBOL(get_sb_ns);
813
774#ifdef CONFIG_BLOCK 814#ifdef CONFIG_BLOCK
775static int set_bdev_super(struct super_block *s, void *data) 815static int set_bdev_super(struct super_block *s, void *data)
776{ 816{
diff --git a/fs/ubifs/budget.c b/fs/ubifs/budget.c
index f393620890ee..af1914462f02 100644
--- a/fs/ubifs/budget.c
+++ b/fs/ubifs/budget.c
@@ -194,29 +194,26 @@ static int make_free_space(struct ubifs_info *c)
194} 194}
195 195
196/** 196/**
197 * ubifs_calc_min_idx_lebs - calculate amount of eraseblocks for the index. 197 * ubifs_calc_min_idx_lebs - calculate amount of LEBs for the index.
198 * @c: UBIFS file-system description object 198 * @c: UBIFS file-system description object
199 * 199 *
200 * This function calculates and returns the number of eraseblocks which should 200 * This function calculates and returns the number of LEBs which should be kept
201 * be kept for index usage. 201 * for index usage.
202 */ 202 */
203int ubifs_calc_min_idx_lebs(struct ubifs_info *c) 203int ubifs_calc_min_idx_lebs(struct ubifs_info *c)
204{ 204{
205 int idx_lebs, eff_leb_size = c->leb_size - c->max_idx_node_sz; 205 int idx_lebs;
206 long long idx_size; 206 long long idx_size;
207 207
208 idx_size = c->old_idx_sz + c->budg_idx_growth + c->budg_uncommitted_idx; 208 idx_size = c->old_idx_sz + c->budg_idx_growth + c->budg_uncommitted_idx;
209
210 /* And make sure we have thrice the index size of space reserved */ 209 /* And make sure we have thrice the index size of space reserved */
211 idx_size = idx_size + (idx_size << 1); 210 idx_size += idx_size << 1;
212
213 /* 211 /*
214 * We do not maintain 'old_idx_size' as 'old_idx_lebs'/'old_idx_bytes' 212 * We do not maintain 'old_idx_size' as 'old_idx_lebs'/'old_idx_bytes'
215 * pair, nor similarly the two variables for the new index size, so we 213 * pair, nor similarly the two variables for the new index size, so we
216 * have to do this costly 64-bit division on fast-path. 214 * have to do this costly 64-bit division on fast-path.
217 */ 215 */
218 idx_size += eff_leb_size - 1; 216 idx_lebs = div_u64(idx_size + c->idx_leb_size - 1, c->idx_leb_size);
219 idx_lebs = div_u64(idx_size, eff_leb_size);
220 /* 217 /*
221 * The index head is not available for the in-the-gaps method, so add an 218 * The index head is not available for the in-the-gaps method, so add an
222 * extra LEB to compensate. 219 * extra LEB to compensate.
@@ -310,23 +307,23 @@ static int can_use_rp(struct ubifs_info *c)
310 * do_budget_space - reserve flash space for index and data growth. 307 * do_budget_space - reserve flash space for index and data growth.
311 * @c: UBIFS file-system description object 308 * @c: UBIFS file-system description object
312 * 309 *
313 * This function makes sure UBIFS has enough free eraseblocks for index growth 310 * This function makes sure UBIFS has enough free LEBs for index growth and
314 * and data. 311 * data.
315 * 312 *
316 * When budgeting index space, UBIFS reserves thrice as many LEBs as the index 313 * When budgeting index space, UBIFS reserves thrice as many LEBs as the index
317 * would take if it was consolidated and written to the flash. This guarantees 314 * would take if it was consolidated and written to the flash. This guarantees
318 * that the "in-the-gaps" commit method always succeeds and UBIFS will always 315 * that the "in-the-gaps" commit method always succeeds and UBIFS will always
319 * be able to commit dirty index. So this function basically adds amount of 316 * be able to commit dirty index. So this function basically adds amount of
320 * budgeted index space to the size of the current index, multiplies this by 3, 317 * budgeted index space to the size of the current index, multiplies this by 3,
321 * and makes sure this does not exceed the amount of free eraseblocks. 318 * and makes sure this does not exceed the amount of free LEBs.
322 * 319 *
323 * Notes about @c->min_idx_lebs and @c->lst.idx_lebs variables: 320 * Notes about @c->min_idx_lebs and @c->lst.idx_lebs variables:
324 * o @c->lst.idx_lebs is the number of LEBs the index currently uses. It might 321 * o @c->lst.idx_lebs is the number of LEBs the index currently uses. It might
325 * be large, because UBIFS does not do any index consolidation as long as 322 * be large, because UBIFS does not do any index consolidation as long as
326 * there is free space. IOW, the index may take a lot of LEBs, but the LEBs 323 * there is free space. IOW, the index may take a lot of LEBs, but the LEBs
327 * will contain a lot of dirt. 324 * will contain a lot of dirt.
328 * o @c->min_idx_lebs is the the index presumably takes. IOW, the index may be 325 * o @c->min_idx_lebs is the number of LEBS the index presumably takes. IOW,
329 * consolidated to take up to @c->min_idx_lebs LEBs. 326 * the index may be consolidated to take up to @c->min_idx_lebs LEBs.
330 * 327 *
331 * This function returns zero in case of success, and %-ENOSPC in case of 328 * This function returns zero in case of success, and %-ENOSPC in case of
332 * failure. 329 * failure.
@@ -695,12 +692,12 @@ long long ubifs_reported_space(const struct ubifs_info *c, long long free)
695 * This function calculates amount of free space to report to user-space. 692 * This function calculates amount of free space to report to user-space.
696 * 693 *
697 * Because UBIFS may introduce substantial overhead (the index, node headers, 694 * Because UBIFS may introduce substantial overhead (the index, node headers,
698 * alignment, wastage at the end of eraseblocks, etc), it cannot report real 695 * alignment, wastage at the end of LEBs, etc), it cannot report real amount of
699 * amount of free flash space it has (well, because not all dirty space is 696 * free flash space it has (well, because not all dirty space is reclaimable,
700 * reclaimable, UBIFS does not actually know the real amount). If UBIFS did so, 697 * UBIFS does not actually know the real amount). If UBIFS did so, it would
701 * it would bread user expectations about what free space is. Users seem to 698 * bread user expectations about what free space is. Users seem to accustomed
702 * accustomed to assume that if the file-system reports N bytes of free space, 699 * to assume that if the file-system reports N bytes of free space, they would
703 * they would be able to fit a file of N bytes to the FS. This almost works for 700 * be able to fit a file of N bytes to the FS. This almost works for
704 * traditional file-systems, because they have way less overhead than UBIFS. 701 * traditional file-systems, because they have way less overhead than UBIFS.
705 * So, to keep users happy, UBIFS tries to take the overhead into account. 702 * So, to keep users happy, UBIFS tries to take the overhead into account.
706 */ 703 */
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c
index e975bd82f38b..ce2cd8343618 100644
--- a/fs/ubifs/debug.c
+++ b/fs/ubifs/debug.c
@@ -479,9 +479,9 @@ void dbg_dump_node(const struct ubifs_info *c, const void *node)
479 "bad or corrupted node)"); 479 "bad or corrupted node)");
480 else { 480 else {
481 for (i = 0; i < nlen && dent->name[i]; i++) 481 for (i = 0; i < nlen && dent->name[i]; i++)
482 printk("%c", dent->name[i]); 482 printk(KERN_CONT "%c", dent->name[i]);
483 } 483 }
484 printk("\n"); 484 printk(KERN_CONT "\n");
485 485
486 break; 486 break;
487 } 487 }
@@ -1214,7 +1214,7 @@ static int dbg_check_znode(struct ubifs_info *c, struct ubifs_zbranch *zbr)
1214 1214
1215 /* 1215 /*
1216 * Make sure the last key in our znode is less or 1216 * Make sure the last key in our znode is less or
1217 * equivalent than the the key in zbranch which goes 1217 * equivalent than the key in the zbranch which goes
1218 * after our pointing zbranch. 1218 * after our pointing zbranch.
1219 */ 1219 */
1220 cmp = keys_cmp(c, max, 1220 cmp = keys_cmp(c, max,
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
index 0ff89fe71e51..6d34dc7e33e1 100644
--- a/fs/ubifs/file.c
+++ b/fs/ubifs/file.c
@@ -430,6 +430,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
430 struct ubifs_inode *ui = ubifs_inode(inode); 430 struct ubifs_inode *ui = ubifs_inode(inode);
431 pgoff_t index = pos >> PAGE_CACHE_SHIFT; 431 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
432 int uninitialized_var(err), appending = !!(pos + len > inode->i_size); 432 int uninitialized_var(err), appending = !!(pos + len > inode->i_size);
433 int skipped_read = 0;
433 struct page *page; 434 struct page *page;
434 435
435 ubifs_assert(ubifs_inode(inode)->ui_size == inode->i_size); 436 ubifs_assert(ubifs_inode(inode)->ui_size == inode->i_size);
@@ -444,7 +445,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
444 445
445 if (!PageUptodate(page)) { 446 if (!PageUptodate(page)) {
446 /* The page is not loaded from the flash */ 447 /* The page is not loaded from the flash */
447 if (!(pos & ~PAGE_CACHE_MASK) && len == PAGE_CACHE_SIZE) 448 if (!(pos & ~PAGE_CACHE_MASK) && len == PAGE_CACHE_SIZE) {
448 /* 449 /*
449 * We change whole page so no need to load it. But we 450 * We change whole page so no need to load it. But we
450 * have to set the @PG_checked flag to make the further 451 * have to set the @PG_checked flag to make the further
@@ -453,7 +454,8 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
453 * the media. 454 * the media.
454 */ 455 */
455 SetPageChecked(page); 456 SetPageChecked(page);
456 else { 457 skipped_read = 1;
458 } else {
457 err = do_readpage(page); 459 err = do_readpage(page);
458 if (err) { 460 if (err) {
459 unlock_page(page); 461 unlock_page(page);
@@ -470,6 +472,14 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
470 if (unlikely(err)) { 472 if (unlikely(err)) {
471 ubifs_assert(err == -ENOSPC); 473 ubifs_assert(err == -ENOSPC);
472 /* 474 /*
475 * If we skipped reading the page because we were going to
476 * write all of it, then it is not up to date.
477 */
478 if (skipped_read) {
479 ClearPageChecked(page);
480 ClearPageUptodate(page);
481 }
482 /*
473 * Budgeting failed which means it would have to force 483 * Budgeting failed which means it would have to force
474 * write-back but didn't, because we set the @fast flag in the 484 * write-back but didn't, because we set the @fast flag in the
475 * request. Write-back cannot be done now, while we have the 485 * request. Write-back cannot be done now, while we have the
@@ -949,7 +959,7 @@ static int do_writepage(struct page *page, int len)
949 * whole index and correct all inode sizes, which is long an unacceptable. 959 * whole index and correct all inode sizes, which is long an unacceptable.
950 * 960 *
951 * To prevent situations like this, UBIFS writes pages back only if they are 961 * To prevent situations like this, UBIFS writes pages back only if they are
952 * within last synchronized inode size, i.e. the the size which has been 962 * within the last synchronized inode size, i.e. the size which has been
953 * written to the flash media last time. Otherwise, UBIFS forces inode 963 * written to the flash media last time. Otherwise, UBIFS forces inode
954 * write-back, thus making sure the on-flash inode contains current inode size, 964 * write-back, thus making sure the on-flash inode contains current inode size,
955 * and then keeps writing pages back. 965 * and then keeps writing pages back.
diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c
index 717d79c97c5e..1d54383d1269 100644
--- a/fs/ubifs/find.c
+++ b/fs/ubifs/find.c
@@ -478,7 +478,7 @@ const struct ubifs_lprops *do_find_free_space(struct ubifs_info *c,
478 * ubifs_find_free_space - find a data LEB with free space. 478 * ubifs_find_free_space - find a data LEB with free space.
479 * @c: the UBIFS file-system description object 479 * @c: the UBIFS file-system description object
480 * @min_space: minimum amount of required free space 480 * @min_space: minimum amount of required free space
481 * @free: contains amount of free space in the LEB on exit 481 * @offs: contains offset of where free space starts on exit
482 * @squeeze: whether to try to find space in a non-empty LEB first 482 * @squeeze: whether to try to find space in a non-empty LEB first
483 * 483 *
484 * This function looks for an LEB with at least @min_space bytes of free space. 484 * This function looks for an LEB with at least @min_space bytes of free space.
@@ -490,7 +490,7 @@ const struct ubifs_lprops *do_find_free_space(struct ubifs_info *c,
490 * failed to find a LEB with @min_space bytes of free space and other a negative 490 * failed to find a LEB with @min_space bytes of free space and other a negative
491 * error codes in case of failure. 491 * error codes in case of failure.
492 */ 492 */
493int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, 493int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs,
494 int squeeze) 494 int squeeze)
495{ 495{
496 const struct ubifs_lprops *lprops; 496 const struct ubifs_lprops *lprops;
@@ -558,10 +558,10 @@ int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free,
558 spin_unlock(&c->space_lock); 558 spin_unlock(&c->space_lock);
559 } 559 }
560 560
561 *free = lprops->free; 561 *offs = c->leb_size - lprops->free;
562 ubifs_release_lprops(c); 562 ubifs_release_lprops(c);
563 563
564 if (*free == c->leb_size) { 564 if (*offs == 0) {
565 /* 565 /*
566 * Ensure that empty LEBs have been unmapped. They may not have 566 * Ensure that empty LEBs have been unmapped. They may not have
567 * been, for example, because of an unclean unmount. Also 567 * been, for example, because of an unclean unmount. Also
@@ -573,8 +573,8 @@ int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free,
573 return err; 573 return err;
574 } 574 }
575 575
576 dbg_find("found LEB %d, free %d", lnum, *free); 576 dbg_find("found LEB %d, free %d", lnum, c->leb_size - *offs);
577 ubifs_assert(*free >= min_space); 577 ubifs_assert(*offs <= c->leb_size - min_space);
578 return lnum; 578 return lnum;
579 579
580out: 580out:
diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
index a711d33b3d3e..f0f5f15d384e 100644
--- a/fs/ubifs/gc.c
+++ b/fs/ubifs/gc.c
@@ -47,7 +47,7 @@
47 * have to waste large pieces of free space at the end of LEB B, because nodes 47 * have to waste large pieces of free space at the end of LEB B, because nodes
48 * from LEB A would not fit. And the worst situation is when all nodes are of 48 * from LEB A would not fit. And the worst situation is when all nodes are of
49 * maximum size. So dark watermark is the amount of free + dirty space in LEB 49 * maximum size. So dark watermark is the amount of free + dirty space in LEB
50 * which are guaranteed to be reclaimable. If LEB has less space, the GC migh 50 * which are guaranteed to be reclaimable. If LEB has less space, the GC might
51 * be unable to reclaim it. So, LEBs with free + dirty greater than dark 51 * be unable to reclaim it. So, LEBs with free + dirty greater than dark
52 * watermark are "good" LEBs from GC's point of few. The other LEBs are not so 52 * watermark are "good" LEBs from GC's point of few. The other LEBs are not so
53 * good, and GC takes extra care when moving them. 53 * good, and GC takes extra care when moving them.
@@ -57,14 +57,6 @@
57#include "ubifs.h" 57#include "ubifs.h"
58 58
59/* 59/*
60 * GC tries to optimize the way it fit nodes to available space, and it sorts
61 * nodes a little. The below constants are watermarks which define "large",
62 * "medium", and "small" nodes.
63 */
64#define MEDIUM_NODE_WM (UBIFS_BLOCK_SIZE / 4)
65#define SMALL_NODE_WM UBIFS_MAX_DENT_NODE_SZ
66
67/*
68 * GC may need to move more than one LEB to make progress. The below constants 60 * GC may need to move more than one LEB to make progress. The below constants
69 * define "soft" and "hard" limits on the number of LEBs the garbage collector 61 * define "soft" and "hard" limits on the number of LEBs the garbage collector
70 * may move. 62 * may move.
@@ -116,83 +108,222 @@ static int switch_gc_head(struct ubifs_info *c)
116} 108}
117 109
118/** 110/**
119 * joinup - bring data nodes for an inode together. 111 * list_sort - sort a list.
120 * @c: UBIFS file-system description object 112 * @priv: private data, passed to @cmp
121 * @sleb: describes scanned LEB 113 * @head: the list to sort
122 * @inum: inode number 114 * @cmp: the elements comparison function
123 * @blk: block number
124 * @data: list to which to add data nodes
125 * 115 *
126 * This function looks at the first few nodes in the scanned LEB @sleb and adds 116 * This function has been implemented by Mark J Roberts <mjr@znex.org>. It
127 * them to @data if they are data nodes from @inum and have a larger block 117 * implements "merge sort" which has O(nlog(n)) complexity. The list is sorted
128 * number than @blk. This function returns %0 on success and a negative error 118 * in ascending order.
129 * code on failure. 119 *
120 * The comparison function @cmp is supposed to return a negative value if @a is
121 * than @b, and a positive value if @a is greater than @b. If @a and @b are
122 * equivalent, then it does not matter what this function returns.
130 */ 123 */
131static int joinup(struct ubifs_info *c, struct ubifs_scan_leb *sleb, ino_t inum, 124static void list_sort(void *priv, struct list_head *head,
132 unsigned int blk, struct list_head *data) 125 int (*cmp)(void *priv, struct list_head *a,
126 struct list_head *b))
133{ 127{
134 int err, cnt = 6, lnum = sleb->lnum, offs; 128 struct list_head *p, *q, *e, *list, *tail, *oldhead;
135 struct ubifs_scan_node *snod, *tmp; 129 int insize, nmerges, psize, qsize, i;
136 union ubifs_key *key; 130
131 if (list_empty(head))
132 return;
133
134 list = head->next;
135 list_del(head);
136 insize = 1;
137 for (;;) {
138 p = oldhead = list;
139 list = tail = NULL;
140 nmerges = 0;
141
142 while (p) {
143 nmerges++;
144 q = p;
145 psize = 0;
146 for (i = 0; i < insize; i++) {
147 psize++;
148 q = q->next == oldhead ? NULL : q->next;
149 if (!q)
150 break;
151 }
137 152
138 list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) { 153 qsize = insize;
139 key = &snod->key; 154 while (psize > 0 || (qsize > 0 && q)) {
140 if (key_inum(c, key) == inum && 155 if (!psize) {
141 key_type(c, key) == UBIFS_DATA_KEY && 156 e = q;
142 key_block(c, key) > blk) { 157 q = q->next;
143 offs = snod->offs; 158 qsize--;
144 err = ubifs_tnc_has_node(c, key, 0, lnum, offs, 0); 159 if (q == oldhead)
145 if (err < 0) 160 q = NULL;
146 return err; 161 } else if (!qsize || !q) {
147 list_del(&snod->list); 162 e = p;
148 if (err) { 163 p = p->next;
149 list_add_tail(&snod->list, data); 164 psize--;
150 blk = key_block(c, key); 165 if (p == oldhead)
151 } else 166 p = NULL;
152 kfree(snod); 167 } else if (cmp(priv, p, q) <= 0) {
153 cnt = 6; 168 e = p;
154 } else if (--cnt == 0) 169 p = p->next;
170 psize--;
171 if (p == oldhead)
172 p = NULL;
173 } else {
174 e = q;
175 q = q->next;
176 qsize--;
177 if (q == oldhead)
178 q = NULL;
179 }
180 if (tail)
181 tail->next = e;
182 else
183 list = e;
184 e->prev = tail;
185 tail = e;
186 }
187 p = q;
188 }
189
190 tail->next = list;
191 list->prev = tail;
192
193 if (nmerges <= 1)
155 break; 194 break;
195
196 insize *= 2;
156 } 197 }
157 return 0; 198
199 head->next = list;
200 head->prev = list->prev;
201 list->prev->next = head;
202 list->prev = head;
158} 203}
159 204
160/** 205/**
161 * move_nodes - move nodes. 206 * data_nodes_cmp - compare 2 data nodes.
207 * @priv: UBIFS file-system description object
208 * @a: first data node
209 * @a: second data node
210 *
211 * This function compares data nodes @a and @b. Returns %1 if @a has greater
212 * inode or block number, and %-1 otherwise.
213 */
214int data_nodes_cmp(void *priv, struct list_head *a, struct list_head *b)
215{
216 ino_t inuma, inumb;
217 struct ubifs_info *c = priv;
218 struct ubifs_scan_node *sa, *sb;
219
220 cond_resched();
221 sa = list_entry(a, struct ubifs_scan_node, list);
222 sb = list_entry(b, struct ubifs_scan_node, list);
223 ubifs_assert(key_type(c, &sa->key) == UBIFS_DATA_KEY);
224 ubifs_assert(key_type(c, &sb->key) == UBIFS_DATA_KEY);
225
226 inuma = key_inum(c, &sa->key);
227 inumb = key_inum(c, &sb->key);
228
229 if (inuma == inumb) {
230 unsigned int blka = key_block(c, &sa->key);
231 unsigned int blkb = key_block(c, &sb->key);
232
233 if (blka <= blkb)
234 return -1;
235 } else if (inuma <= inumb)
236 return -1;
237
238 return 1;
239}
240
241/*
242 * nondata_nodes_cmp - compare 2 non-data nodes.
243 * @priv: UBIFS file-system description object
244 * @a: first node
245 * @a: second node
246 *
247 * This function compares nodes @a and @b. It makes sure that inode nodes go
248 * first and sorted by length in descending order. Directory entry nodes go
249 * after inode nodes and are sorted in ascending hash valuer order.
250 */
251int nondata_nodes_cmp(void *priv, struct list_head *a, struct list_head *b)
252{
253 int typea, typeb;
254 ino_t inuma, inumb;
255 struct ubifs_info *c = priv;
256 struct ubifs_scan_node *sa, *sb;
257
258 cond_resched();
259 sa = list_entry(a, struct ubifs_scan_node, list);
260 sb = list_entry(b, struct ubifs_scan_node, list);
261 typea = key_type(c, &sa->key);
262 typeb = key_type(c, &sb->key);
263 ubifs_assert(typea != UBIFS_DATA_KEY && typeb != UBIFS_DATA_KEY);
264
265 /* Inodes go before directory entries */
266 if (typea == UBIFS_INO_KEY) {
267 if (typeb == UBIFS_INO_KEY)
268 return sb->len - sa->len;
269 return -1;
270 }
271 if (typeb == UBIFS_INO_KEY)
272 return 1;
273
274 ubifs_assert(typea == UBIFS_DENT_KEY && typeb == UBIFS_DENT_KEY);
275 inuma = key_inum(c, &sa->key);
276 inumb = key_inum(c, &sb->key);
277
278 if (inuma == inumb) {
279 uint32_t hasha = key_hash(c, &sa->key);
280 uint32_t hashb = key_hash(c, &sb->key);
281
282 if (hasha <= hashb)
283 return -1;
284 } else if (inuma <= inumb)
285 return -1;
286
287 return 1;
288}
289
290/**
291 * sort_nodes - sort nodes for GC.
162 * @c: UBIFS file-system description object 292 * @c: UBIFS file-system description object
163 * @sleb: describes nodes to move 293 * @sleb: describes nodes to sort and contains the result on exit
294 * @nondata: contains non-data nodes on exit
295 * @min: minimum node size is returned here
164 * 296 *
165 * This function moves valid nodes from data LEB described by @sleb to the GC 297 * This function sorts the list of inodes to garbage collect. First of all, it
166 * journal head. The obsolete nodes are dropped. 298 * kills obsolete nodes and separates data and non-data nodes to the
299 * @sleb->nodes and @nondata lists correspondingly.
300 *
301 * Data nodes are then sorted in block number order - this is important for
302 * bulk-read; data nodes with lower inode number go before data nodes with
303 * higher inode number, and data nodes with lower block number go before data
304 * nodes with higher block number;
167 * 305 *
168 * When moving nodes we have to deal with classical bin-packing problem: the 306 * Non-data nodes are sorted as follows.
169 * space in the current GC journal head LEB and in @c->gc_lnum are the "bins", 307 * o First go inode nodes - they are sorted in descending length order.
170 * where the nodes in the @sleb->nodes list are the elements which should be 308 * o Then go directory entry nodes - they are sorted in hash order, which
171 * fit optimally to the bins. This function uses the "first fit decreasing" 309 * should supposedly optimize 'readdir()'. Direntry nodes with lower parent
172 * strategy, although it does not really sort the nodes but just split them on 310 * inode number go before direntry nodes with higher parent inode number,
173 * 3 classes - large, medium, and small, so they are roughly sorted. 311 * and direntry nodes with lower name hash values go before direntry nodes
312 * with higher name hash values.
174 * 313 *
175 * This function returns zero in case of success, %-EAGAIN if commit is 314 * This function returns zero in case of success and a negative error code in
176 * required, and other negative error codes in case of other failures. 315 * case of failure.
177 */ 316 */
178static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb) 317static int sort_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb,
318 struct list_head *nondata, int *min)
179{ 319{
180 struct ubifs_scan_node *snod, *tmp; 320 struct ubifs_scan_node *snod, *tmp;
181 struct list_head data, large, medium, small;
182 struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf;
183 int avail, err, min = INT_MAX;
184 unsigned int blk = 0;
185 ino_t inum = 0;
186 321
187 INIT_LIST_HEAD(&data); 322 *min = INT_MAX;
188 INIT_LIST_HEAD(&large);
189 INIT_LIST_HEAD(&medium);
190 INIT_LIST_HEAD(&small);
191 323
192 while (!list_empty(&sleb->nodes)) { 324 /* Separate data nodes and non-data nodes */
193 struct list_head *lst = sleb->nodes.next; 325 list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) {
194 326 int err;
195 snod = list_entry(lst, struct ubifs_scan_node, list);
196 327
197 ubifs_assert(snod->type != UBIFS_IDX_NODE); 328 ubifs_assert(snod->type != UBIFS_IDX_NODE);
198 ubifs_assert(snod->type != UBIFS_REF_NODE); 329 ubifs_assert(snod->type != UBIFS_REF_NODE);
@@ -201,53 +332,72 @@ static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb)
201 err = ubifs_tnc_has_node(c, &snod->key, 0, sleb->lnum, 332 err = ubifs_tnc_has_node(c, &snod->key, 0, sleb->lnum,
202 snod->offs, 0); 333 snod->offs, 0);
203 if (err < 0) 334 if (err < 0)
204 goto out; 335 return err;
205 336
206 list_del(lst);
207 if (!err) { 337 if (!err) {
208 /* The node is obsolete, remove it from the list */ 338 /* The node is obsolete, remove it from the list */
339 list_del(&snod->list);
209 kfree(snod); 340 kfree(snod);
210 continue; 341 continue;
211 } 342 }
212 343
213 /* 344 if (snod->len < *min)
214 * Sort the list of nodes so that data nodes go first, large 345 *min = snod->len;
215 * nodes go second, and small nodes go last. 346
216 */ 347 if (key_type(c, &snod->key) != UBIFS_DATA_KEY)
217 if (key_type(c, &snod->key) == UBIFS_DATA_KEY) { 348 list_move_tail(&snod->list, nondata);
218 if (inum != key_inum(c, &snod->key)) {
219 if (inum) {
220 /*
221 * Try to move data nodes from the same
222 * inode together.
223 */
224 err = joinup(c, sleb, inum, blk, &data);
225 if (err)
226 goto out;
227 }
228 inum = key_inum(c, &snod->key);
229 blk = key_block(c, &snod->key);
230 }
231 list_add_tail(lst, &data);
232 } else if (snod->len > MEDIUM_NODE_WM)
233 list_add_tail(lst, &large);
234 else if (snod->len > SMALL_NODE_WM)
235 list_add_tail(lst, &medium);
236 else
237 list_add_tail(lst, &small);
238
239 /* And find the smallest node */
240 if (snod->len < min)
241 min = snod->len;
242 } 349 }
243 350
244 /* 351 /* Sort data and non-data nodes */
245 * Join the tree lists so that we'd have one roughly sorted list 352 list_sort(c, &sleb->nodes, &data_nodes_cmp);
246 * ('large' will be the head of the joined list). 353 list_sort(c, nondata, &nondata_nodes_cmp);
247 */ 354 return 0;
248 list_splice(&data, &large); 355}
249 list_splice(&medium, large.prev); 356
250 list_splice(&small, large.prev); 357/**
358 * move_node - move a node.
359 * @c: UBIFS file-system description object
360 * @sleb: describes the LEB to move nodes from
361 * @snod: the mode to move
362 * @wbuf: write-buffer to move node to
363 *
364 * This function moves node @snod to @wbuf, changes TNC correspondingly, and
365 * destroys @snod. Returns zero in case of success and a negative error code in
366 * case of failure.
367 */
368static int move_node(struct ubifs_info *c, struct ubifs_scan_leb *sleb,
369 struct ubifs_scan_node *snod, struct ubifs_wbuf *wbuf)
370{
371 int err, new_lnum = wbuf->lnum, new_offs = wbuf->offs + wbuf->used;
372
373 cond_resched();
374 err = ubifs_wbuf_write_nolock(wbuf, snod->node, snod->len);
375 if (err)
376 return err;
377
378 err = ubifs_tnc_replace(c, &snod->key, sleb->lnum,
379 snod->offs, new_lnum, new_offs,
380 snod->len);
381 list_del(&snod->list);
382 kfree(snod);
383 return err;
384}
385
386/**
387 * move_nodes - move nodes.
388 * @c: UBIFS file-system description object
389 * @sleb: describes the LEB to move nodes from
390 *
391 * This function moves valid nodes from data LEB described by @sleb to the GC
392 * journal head. This function returns zero in case of success, %-EAGAIN if
393 * commit is required, and other negative error codes in case of other
394 * failures.
395 */
396static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb)
397{
398 int err, min;
399 LIST_HEAD(nondata);
400 struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf;
251 401
252 if (wbuf->lnum == -1) { 402 if (wbuf->lnum == -1) {
253 /* 403 /*
@@ -256,42 +406,59 @@ static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb)
256 */ 406 */
257 err = switch_gc_head(c); 407 err = switch_gc_head(c);
258 if (err) 408 if (err)
259 goto out; 409 return err;
260 } 410 }
261 411
412 err = sort_nodes(c, sleb, &nondata, &min);
413 if (err)
414 goto out;
415
262 /* Write nodes to their new location. Use the first-fit strategy */ 416 /* Write nodes to their new location. Use the first-fit strategy */
263 while (1) { 417 while (1) {
264 avail = c->leb_size - wbuf->offs - wbuf->used; 418 int avail;
265 list_for_each_entry_safe(snod, tmp, &large, list) { 419 struct ubifs_scan_node *snod, *tmp;
266 int new_lnum, new_offs; 420
421 /* Move data nodes */
422 list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) {
423 avail = c->leb_size - wbuf->offs - wbuf->used;
424 if (snod->len > avail)
425 /*
426 * Do not skip data nodes in order to optimize
427 * bulk-read.
428 */
429 break;
430
431 err = move_node(c, sleb, snod, wbuf);
432 if (err)
433 goto out;
434 }
267 435
436 /* Move non-data nodes */
437 list_for_each_entry_safe(snod, tmp, &nondata, list) {
438 avail = c->leb_size - wbuf->offs - wbuf->used;
268 if (avail < min) 439 if (avail < min)
269 break; 440 break;
270 441
271 if (snod->len > avail) 442 if (snod->len > avail) {
272 /* This node does not fit */ 443 /*
444 * Keep going only if this is an inode with
445 * some data. Otherwise stop and switch the GC
446 * head. IOW, we assume that data-less inode
447 * nodes and direntry nodes are roughly of the
448 * same size.
449 */
450 if (key_type(c, &snod->key) == UBIFS_DENT_KEY ||
451 snod->len == UBIFS_INO_NODE_SZ)
452 break;
273 continue; 453 continue;
454 }
274 455
275 cond_resched(); 456 err = move_node(c, sleb, snod, wbuf);
276
277 new_lnum = wbuf->lnum;
278 new_offs = wbuf->offs + wbuf->used;
279 err = ubifs_wbuf_write_nolock(wbuf, snod->node,
280 snod->len);
281 if (err) 457 if (err)
282 goto out; 458 goto out;
283 err = ubifs_tnc_replace(c, &snod->key, sleb->lnum,
284 snod->offs, new_lnum, new_offs,
285 snod->len);
286 if (err)
287 goto out;
288
289 avail = c->leb_size - wbuf->offs - wbuf->used;
290 list_del(&snod->list);
291 kfree(snod);
292 } 459 }
293 460
294 if (list_empty(&large)) 461 if (list_empty(&sleb->nodes) && list_empty(&nondata))
295 break; 462 break;
296 463
297 /* 464 /*
@@ -306,10 +473,7 @@ static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb)
306 return 0; 473 return 0;
307 474
308out: 475out:
309 list_for_each_entry_safe(snod, tmp, &large, list) { 476 list_splice_tail(&nondata, &sleb->nodes);
310 list_del(&snod->list);
311 kfree(snod);
312 }
313 return err; 477 return err;
314} 478}
315 479
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c
index a11ca0958a23..64b5f3a309f5 100644
--- a/fs/ubifs/journal.c
+++ b/fs/ubifs/journal.c
@@ -114,7 +114,7 @@ static inline void zero_trun_node_unused(struct ubifs_trun_node *trun)
114 */ 114 */
115static int reserve_space(struct ubifs_info *c, int jhead, int len) 115static int reserve_space(struct ubifs_info *c, int jhead, int len)
116{ 116{
117 int err = 0, err1, retries = 0, avail, lnum, offs, free, squeeze; 117 int err = 0, err1, retries = 0, avail, lnum, offs, squeeze;
118 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; 118 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf;
119 119
120 /* 120 /*
@@ -139,10 +139,9 @@ again:
139 * Write buffer wasn't seek'ed or there is no enough space - look for an 139 * Write buffer wasn't seek'ed or there is no enough space - look for an
140 * LEB with some empty space. 140 * LEB with some empty space.
141 */ 141 */
142 lnum = ubifs_find_free_space(c, len, &free, squeeze); 142 lnum = ubifs_find_free_space(c, len, &offs, squeeze);
143 if (lnum >= 0) { 143 if (lnum >= 0) {
144 /* Found an LEB, add it to the journal head */ 144 /* Found an LEB, add it to the journal head */
145 offs = c->leb_size - free;
146 err = ubifs_add_bud_to_log(c, jhead, lnum, offs); 145 err = ubifs_add_bud_to_log(c, jhead, lnum, offs);
147 if (err) 146 if (err)
148 goto out_return; 147 goto out_return;
@@ -1366,7 +1365,7 @@ out_ro:
1366 * @host: host inode 1365 * @host: host inode
1367 * 1366 *
1368 * This function writes the updated version of an extended attribute inode and 1367 * This function writes the updated version of an extended attribute inode and
1369 * the host inode tho the journal (to the base head). The host inode is written 1368 * the host inode to the journal (to the base head). The host inode is written
1370 * after the extended attribute inode in order to guarantee that the extended 1369 * after the extended attribute inode in order to guarantee that the extended
1371 * attribute will be flushed when the inode is synchronized by 'fsync()' and 1370 * attribute will be flushed when the inode is synchronized by 'fsync()' and
1372 * consequently, the write-buffer is synchronized. This function returns zero 1371 * consequently, the write-buffer is synchronized. This function returns zero
diff --git a/fs/ubifs/key.h b/fs/ubifs/key.h
index efb3430a2581..5fa27ea031ba 100644
--- a/fs/ubifs/key.h
+++ b/fs/ubifs/key.h
@@ -381,8 +381,8 @@ static inline ino_t key_inum_flash(const struct ubifs_info *c, const void *k)
381 * @c: UBIFS file-system description object 381 * @c: UBIFS file-system description object
382 * @key: the key to get hash from 382 * @key: the key to get hash from
383 */ 383 */
384static inline int key_hash(const struct ubifs_info *c, 384static inline uint32_t key_hash(const struct ubifs_info *c,
385 const union ubifs_key *key) 385 const union ubifs_key *key)
386{ 386{
387 return key->u32[1] & UBIFS_S_KEY_HASH_MASK; 387 return key->u32[1] & UBIFS_S_KEY_HASH_MASK;
388} 388}
@@ -392,7 +392,7 @@ static inline int key_hash(const struct ubifs_info *c,
392 * @c: UBIFS file-system description object 392 * @c: UBIFS file-system description object
393 * @k: the key to get hash from 393 * @k: the key to get hash from
394 */ 394 */
395static inline int key_hash_flash(const struct ubifs_info *c, const void *k) 395static inline uint32_t key_hash_flash(const struct ubifs_info *c, const void *k)
396{ 396{
397 const union ubifs_key *key = k; 397 const union ubifs_key *key = k;
398 398
diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c
index 3e0aa7367556..56e33772a1ee 100644
--- a/fs/ubifs/log.c
+++ b/fs/ubifs/log.c
@@ -239,7 +239,7 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)
239 } 239 }
240 240
241 /* 241 /*
242 * Make sure the the amount of space in buds will not exceed 242 * Make sure the amount of space in buds will not exceed the
243 * 'c->max_bud_bytes' limit, because we want to guarantee mount time 243 * 'c->max_bud_bytes' limit, because we want to guarantee mount time
244 * limits. 244 * limits.
245 * 245 *
@@ -367,7 +367,6 @@ static void remove_buds(struct ubifs_info *c)
367 bud->jhead, c->leb_size - bud->start, 367 bud->jhead, c->leb_size - bud->start,
368 c->cmt_bud_bytes); 368 c->cmt_bud_bytes);
369 rb_erase(p1, &c->buds); 369 rb_erase(p1, &c->buds);
370 list_del(&bud->list);
371 /* 370 /*
372 * If the commit does not finish, the recovery will need 371 * If the commit does not finish, the recovery will need
373 * to replay the journal, in which case the old buds 372 * to replay the journal, in which case the old buds
@@ -375,7 +374,7 @@ static void remove_buds(struct ubifs_info *c)
375 * commit i.e. do not allow them to be garbage 374 * commit i.e. do not allow them to be garbage
376 * collected. 375 * collected.
377 */ 376 */
378 list_add(&bud->list, &c->old_buds); 377 list_move(&bud->list, &c->old_buds);
379 } 378 }
380 } 379 }
381 spin_unlock(&c->buds_lock); 380 spin_unlock(&c->buds_lock);
diff --git a/fs/ubifs/lpt_commit.c b/fs/ubifs/lpt_commit.c
index 3216a1f277f8..8cbfb8248025 100644
--- a/fs/ubifs/lpt_commit.c
+++ b/fs/ubifs/lpt_commit.c
@@ -229,7 +229,7 @@ static int layout_cnodes(struct ubifs_info *c)
229 while (offs + len > c->leb_size) { 229 while (offs + len > c->leb_size) {
230 alen = ALIGN(offs, c->min_io_size); 230 alen = ALIGN(offs, c->min_io_size);
231 upd_ltab(c, lnum, c->leb_size - alen, alen - offs); 231 upd_ltab(c, lnum, c->leb_size - alen, alen - offs);
232 dbg_chk_lpt_sz(c, 2, alen - offs); 232 dbg_chk_lpt_sz(c, 2, c->leb_size - offs);
233 err = alloc_lpt_leb(c, &lnum); 233 err = alloc_lpt_leb(c, &lnum);
234 if (err) 234 if (err)
235 goto no_space; 235 goto no_space;
@@ -272,7 +272,7 @@ static int layout_cnodes(struct ubifs_info *c)
272 if (offs + c->lsave_sz > c->leb_size) { 272 if (offs + c->lsave_sz > c->leb_size) {
273 alen = ALIGN(offs, c->min_io_size); 273 alen = ALIGN(offs, c->min_io_size);
274 upd_ltab(c, lnum, c->leb_size - alen, alen - offs); 274 upd_ltab(c, lnum, c->leb_size - alen, alen - offs);
275 dbg_chk_lpt_sz(c, 2, alen - offs); 275 dbg_chk_lpt_sz(c, 2, c->leb_size - offs);
276 err = alloc_lpt_leb(c, &lnum); 276 err = alloc_lpt_leb(c, &lnum);
277 if (err) 277 if (err)
278 goto no_space; 278 goto no_space;
@@ -292,7 +292,7 @@ static int layout_cnodes(struct ubifs_info *c)
292 if (offs + c->ltab_sz > c->leb_size) { 292 if (offs + c->ltab_sz > c->leb_size) {
293 alen = ALIGN(offs, c->min_io_size); 293 alen = ALIGN(offs, c->min_io_size);
294 upd_ltab(c, lnum, c->leb_size - alen, alen - offs); 294 upd_ltab(c, lnum, c->leb_size - alen, alen - offs);
295 dbg_chk_lpt_sz(c, 2, alen - offs); 295 dbg_chk_lpt_sz(c, 2, c->leb_size - offs);
296 err = alloc_lpt_leb(c, &lnum); 296 err = alloc_lpt_leb(c, &lnum);
297 if (err) 297 if (err)
298 goto no_space; 298 goto no_space;
@@ -416,14 +416,12 @@ static int write_cnodes(struct ubifs_info *c)
416 alen, UBI_SHORTTERM); 416 alen, UBI_SHORTTERM);
417 if (err) 417 if (err)
418 return err; 418 return err;
419 dbg_chk_lpt_sz(c, 4, alen - wlen);
420 } 419 }
421 dbg_chk_lpt_sz(c, 2, 0); 420 dbg_chk_lpt_sz(c, 2, c->leb_size - offs);
422 err = realloc_lpt_leb(c, &lnum); 421 err = realloc_lpt_leb(c, &lnum);
423 if (err) 422 if (err)
424 goto no_space; 423 goto no_space;
425 offs = 0; 424 offs = from = 0;
426 from = 0;
427 ubifs_assert(lnum >= c->lpt_first && 425 ubifs_assert(lnum >= c->lpt_first &&
428 lnum <= c->lpt_last); 426 lnum <= c->lpt_last);
429 err = ubifs_leb_unmap(c, lnum); 427 err = ubifs_leb_unmap(c, lnum);
@@ -477,11 +475,11 @@ static int write_cnodes(struct ubifs_info *c)
477 UBI_SHORTTERM); 475 UBI_SHORTTERM);
478 if (err) 476 if (err)
479 return err; 477 return err;
480 dbg_chk_lpt_sz(c, 2, alen - wlen); 478 dbg_chk_lpt_sz(c, 2, c->leb_size - offs);
481 err = realloc_lpt_leb(c, &lnum); 479 err = realloc_lpt_leb(c, &lnum);
482 if (err) 480 if (err)
483 goto no_space; 481 goto no_space;
484 offs = 0; 482 offs = from = 0;
485 ubifs_assert(lnum >= c->lpt_first && 483 ubifs_assert(lnum >= c->lpt_first &&
486 lnum <= c->lpt_last); 484 lnum <= c->lpt_last);
487 err = ubifs_leb_unmap(c, lnum); 485 err = ubifs_leb_unmap(c, lnum);
@@ -504,11 +502,11 @@ static int write_cnodes(struct ubifs_info *c)
504 UBI_SHORTTERM); 502 UBI_SHORTTERM);
505 if (err) 503 if (err)
506 return err; 504 return err;
507 dbg_chk_lpt_sz(c, 2, alen - wlen); 505 dbg_chk_lpt_sz(c, 2, c->leb_size - offs);
508 err = realloc_lpt_leb(c, &lnum); 506 err = realloc_lpt_leb(c, &lnum);
509 if (err) 507 if (err)
510 goto no_space; 508 goto no_space;
511 offs = 0; 509 offs = from = 0;
512 ubifs_assert(lnum >= c->lpt_first && 510 ubifs_assert(lnum >= c->lpt_first &&
513 lnum <= c->lpt_last); 511 lnum <= c->lpt_last);
514 err = ubifs_leb_unmap(c, lnum); 512 err = ubifs_leb_unmap(c, lnum);
@@ -1756,10 +1754,16 @@ int dbg_chk_lpt_free_spc(struct ubifs_info *c)
1756/** 1754/**
1757 * dbg_chk_lpt_sz - check LPT does not write more than LPT size. 1755 * dbg_chk_lpt_sz - check LPT does not write more than LPT size.
1758 * @c: the UBIFS file-system description object 1756 * @c: the UBIFS file-system description object
1759 * @action: action 1757 * @action: what to do
1760 * @len: length written 1758 * @len: length written
1761 * 1759 *
1762 * This function returns %0 on success and a negative error code on failure. 1760 * This function returns %0 on success and a negative error code on failure.
1761 * The @action argument may be one of:
1762 * o %0 - LPT debugging checking starts, initialize debugging variables;
1763 * o %1 - wrote an LPT node, increase LPT size by @len bytes;
1764 * o %2 - switched to a different LEB and wasted @len bytes;
1765 * o %3 - check that we've written the right number of bytes.
1766 * o %4 - wasted @len bytes;
1763 */ 1767 */
1764int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len) 1768int dbg_chk_lpt_sz(struct ubifs_info *c, int action, int len)
1765{ 1769{
@@ -1917,12 +1921,12 @@ static void dump_lpt_leb(const struct ubifs_info *c, int lnum)
1917 lnum, offs); 1921 lnum, offs);
1918 err = ubifs_unpack_nnode(c, buf, &nnode); 1922 err = ubifs_unpack_nnode(c, buf, &nnode);
1919 for (i = 0; i < UBIFS_LPT_FANOUT; i++) { 1923 for (i = 0; i < UBIFS_LPT_FANOUT; i++) {
1920 printk("%d:%d", nnode.nbranch[i].lnum, 1924 printk(KERN_CONT "%d:%d", nnode.nbranch[i].lnum,
1921 nnode.nbranch[i].offs); 1925 nnode.nbranch[i].offs);
1922 if (i != UBIFS_LPT_FANOUT - 1) 1926 if (i != UBIFS_LPT_FANOUT - 1)
1923 printk(", "); 1927 printk(KERN_CONT ", ");
1924 } 1928 }
1925 printk("\n"); 1929 printk(KERN_CONT "\n");
1926 break; 1930 break;
1927 } 1931 }
1928 case UBIFS_LPT_LTAB: 1932 case UBIFS_LPT_LTAB:
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c
index 90acac603e63..10662975d2ef 100644
--- a/fs/ubifs/recovery.c
+++ b/fs/ubifs/recovery.c
@@ -425,59 +425,35 @@ static void clean_buf(const struct ubifs_info *c, void **buf, int lnum,
425 * @lnum: LEB number of the LEB from which @buf was read 425 * @lnum: LEB number of the LEB from which @buf was read
426 * @offs: offset from which @buf was read 426 * @offs: offset from which @buf was read
427 * 427 *
428 * This function scans @buf for more nodes and returns %0 is a node is found and 428 * This function ensures that the corrupted node at @offs is the last thing
429 * %1 if no more nodes are found. 429 * written to a LEB. This function returns %1 if more data is not found and
430 * %0 if more data is found.
430 */ 431 */
431static int no_more_nodes(const struct ubifs_info *c, void *buf, int len, 432static int no_more_nodes(const struct ubifs_info *c, void *buf, int len,
432 int lnum, int offs) 433 int lnum, int offs)
433{ 434{
434 int skip, next_offs = 0; 435 struct ubifs_ch *ch = buf;
436 int skip, dlen = le32_to_cpu(ch->len);
435 437
436 if (len > UBIFS_DATA_NODE_SZ) { 438 /* Check for empty space after the corrupt node's common header */
437 struct ubifs_ch *ch = buf; 439 skip = ALIGN(offs + UBIFS_CH_SZ, c->min_io_size) - offs;
438 int dlen = le32_to_cpu(ch->len); 440 if (is_empty(buf + skip, len - skip))
439 441 return 1;
440 if (ch->node_type == UBIFS_DATA_NODE && dlen >= UBIFS_CH_SZ && 442 /*
441 dlen <= UBIFS_MAX_DATA_NODE_SZ) 443 * The area after the common header size is not empty, so the common
442 /* The corrupt node looks like a data node */ 444 * header must be intact. Check it.
443 next_offs = ALIGN(offs + dlen, 8); 445 */
444 } 446 if (ubifs_check_node(c, buf, lnum, offs, 1, 0) != -EUCLEAN) {
445 447 dbg_rcvry("unexpected bad common header at %d:%d", lnum, offs);
446 if (c->min_io_size == 1) 448 return 0;
447 skip = 8;
448 else
449 skip = ALIGN(offs + 1, c->min_io_size) - offs;
450
451 offs += skip;
452 buf += skip;
453 len -= skip;
454 while (len > 8) {
455 struct ubifs_ch *ch = buf;
456 uint32_t magic = le32_to_cpu(ch->magic);
457 int ret;
458
459 if (magic == UBIFS_NODE_MAGIC) {
460 ret = ubifs_scan_a_node(c, buf, len, lnum, offs, 1);
461 if (ret == SCANNED_A_NODE || ret > 0) {
462 /*
463 * There is a small chance this is just data in
464 * a data node, so check that possibility. e.g.
465 * this is part of a file that itself contains
466 * a UBIFS image.
467 */
468 if (next_offs && offs + le32_to_cpu(ch->len) <=
469 next_offs)
470 continue;
471 dbg_rcvry("unexpected node at %d:%d", lnum,
472 offs);
473 return 0;
474 }
475 }
476 offs += 8;
477 buf += 8;
478 len -= 8;
479 } 449 }
480 return 1; 450 /* Now we know the corrupt node's length we can skip over it */
451 skip = ALIGN(offs + dlen, c->min_io_size) - offs;
452 /* After which there should be empty space */
453 if (is_empty(buf + skip, len - skip))
454 return 1;
455 dbg_rcvry("unexpected data at %d:%d", lnum, offs + skip);
456 return 0;
481} 457}
482 458
483/** 459/**
diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c
index ce42a7b0ca5a..11cc80125a49 100644
--- a/fs/ubifs/replay.c
+++ b/fs/ubifs/replay.c
@@ -143,7 +143,7 @@ static int set_bud_lprops(struct ubifs_info *c, struct replay_entry *r)
143 dirty -= c->leb_size - lp->free; 143 dirty -= c->leb_size - lp->free;
144 /* 144 /*
145 * If the replay order was perfect the dirty space would now be 145 * If the replay order was perfect the dirty space would now be
146 * zero. The order is not perfect because the the journal heads 146 * zero. The order is not perfect because the journal heads
147 * race with each other. This is not a problem but is does mean 147 * race with each other. This is not a problem but is does mean
148 * that the dirty space may temporarily exceed c->leb_size 148 * that the dirty space may temporarily exceed c->leb_size
149 * during the replay. 149 * during the replay.
diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c
index e070c643d1bb..57085e43320f 100644
--- a/fs/ubifs/sb.c
+++ b/fs/ubifs/sb.c
@@ -193,6 +193,7 @@ static int create_default_filesystem(struct ubifs_info *c)
193 if (tmp64 > DEFAULT_MAX_RP_SIZE) 193 if (tmp64 > DEFAULT_MAX_RP_SIZE)
194 tmp64 = DEFAULT_MAX_RP_SIZE; 194 tmp64 = DEFAULT_MAX_RP_SIZE;
195 sup->rp_size = cpu_to_le64(tmp64); 195 sup->rp_size = cpu_to_le64(tmp64);
196 sup->ro_compat_version = cpu_to_le32(UBIFS_RO_COMPAT_VERSION);
196 197
197 err = ubifs_write_node(c, sup, UBIFS_SB_NODE_SZ, 0, 0, UBI_LONGTERM); 198 err = ubifs_write_node(c, sup, UBIFS_SB_NODE_SZ, 0, 0, UBI_LONGTERM);
198 kfree(sup); 199 kfree(sup);
@@ -532,17 +533,39 @@ int ubifs_read_superblock(struct ubifs_info *c)
532 if (IS_ERR(sup)) 533 if (IS_ERR(sup))
533 return PTR_ERR(sup); 534 return PTR_ERR(sup);
534 535
536 c->fmt_version = le32_to_cpu(sup->fmt_version);
537 c->ro_compat_version = le32_to_cpu(sup->ro_compat_version);
538
535 /* 539 /*
536 * The software supports all previous versions but not future versions, 540 * The software supports all previous versions but not future versions,
537 * due to the unavailability of time-travelling equipment. 541 * due to the unavailability of time-travelling equipment.
538 */ 542 */
539 c->fmt_version = le32_to_cpu(sup->fmt_version);
540 if (c->fmt_version > UBIFS_FORMAT_VERSION) { 543 if (c->fmt_version > UBIFS_FORMAT_VERSION) {
541 ubifs_err("on-flash format version is %d, but software only " 544 struct super_block *sb = c->vfs_sb;
542 "supports up to version %d", c->fmt_version, 545 int mounting_ro = sb->s_flags & MS_RDONLY;
543 UBIFS_FORMAT_VERSION); 546
544 err = -EINVAL; 547 ubifs_assert(!c->ro_media || mounting_ro);
545 goto out; 548 if (!mounting_ro ||
549 c->ro_compat_version > UBIFS_RO_COMPAT_VERSION) {
550 ubifs_err("on-flash format version is w%d/r%d, but "
551 "software only supports up to version "
552 "w%d/r%d", c->fmt_version,
553 c->ro_compat_version, UBIFS_FORMAT_VERSION,
554 UBIFS_RO_COMPAT_VERSION);
555 if (c->ro_compat_version <= UBIFS_RO_COMPAT_VERSION) {
556 ubifs_msg("only R/O mounting is possible");
557 err = -EROFS;
558 } else
559 err = -EINVAL;
560 goto out;
561 }
562
563 /*
564 * The FS is mounted R/O, and the media format is
565 * R/O-compatible with the UBIFS implementation, so we can
566 * mount.
567 */
568 c->rw_incompat = 1;
546 } 569 }
547 570
548 if (c->fmt_version < 3) { 571 if (c->fmt_version < 3) {
@@ -623,7 +646,6 @@ int ubifs_read_superblock(struct ubifs_info *c)
623 c->main_lebs = c->leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS; 646 c->main_lebs = c->leb_cnt - UBIFS_SB_LEBS - UBIFS_MST_LEBS;
624 c->main_lebs -= c->log_lebs + c->lpt_lebs + c->orph_lebs; 647 c->main_lebs -= c->log_lebs + c->lpt_lebs + c->orph_lebs;
625 c->main_first = c->leb_cnt - c->main_lebs; 648 c->main_first = c->leb_cnt - c->main_lebs;
626 c->report_rp_size = ubifs_reported_space(c, c->rp_size);
627 649
628 err = validate_sb(c, sup); 650 err = validate_sb(c, sup);
629out: 651out:
diff --git a/fs/ubifs/shrinker.c b/fs/ubifs/shrinker.c
index e7bab52a1410..02feb59cefca 100644
--- a/fs/ubifs/shrinker.c
+++ b/fs/ubifs/shrinker.c
@@ -206,8 +206,7 @@ static int shrink_tnc_trees(int nr, int age, int *contention)
206 * Move this one to the end of the list to provide some 206 * Move this one to the end of the list to provide some
207 * fairness. 207 * fairness.
208 */ 208 */
209 list_del(&c->infos_list); 209 list_move_tail(&c->infos_list, &ubifs_infos);
210 list_add_tail(&c->infos_list, &ubifs_infos);
211 mutex_unlock(&c->umount_mutex); 210 mutex_unlock(&c->umount_mutex);
212 if (freed >= nr) 211 if (freed >= nr)
213 break; 212 break;
@@ -263,8 +262,7 @@ static int kick_a_thread(void)
263 } 262 }
264 263
265 if (i == 1) { 264 if (i == 1) {
266 list_del(&c->infos_list); 265 list_move_tail(&c->infos_list, &ubifs_infos);
267 list_add_tail(&c->infos_list, &ubifs_infos);
268 spin_unlock(&ubifs_infos_lock); 266 spin_unlock(&ubifs_infos_lock);
269 267
270 ubifs_request_bg_commit(c); 268 ubifs_request_bg_commit(c);
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index c5c98355459a..faa44f90608a 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -421,8 +421,8 @@ static int ubifs_show_options(struct seq_file *s, struct vfsmount *mnt)
421 seq_printf(s, ",no_chk_data_crc"); 421 seq_printf(s, ",no_chk_data_crc");
422 422
423 if (c->mount_opts.override_compr) { 423 if (c->mount_opts.override_compr) {
424 seq_printf(s, ",compr="); 424 seq_printf(s, ",compr=%s",
425 seq_printf(s, ubifs_compr_name(c->mount_opts.compr_type)); 425 ubifs_compr_name(c->mount_opts.compr_type));
426 } 426 }
427 427
428 return 0; 428 return 0;
@@ -700,6 +700,8 @@ static int init_constants_sb(struct ubifs_info *c)
700 if (err) 700 if (err)
701 return err; 701 return err;
702 702
703 /* Initialize effective LEB size used in budgeting calculations */
704 c->idx_leb_size = c->leb_size - c->max_idx_node_sz;
703 return 0; 705 return 0;
704} 706}
705 707
@@ -716,6 +718,7 @@ static void init_constants_master(struct ubifs_info *c)
716 long long tmp64; 718 long long tmp64;
717 719
718 c->min_idx_lebs = ubifs_calc_min_idx_lebs(c); 720 c->min_idx_lebs = ubifs_calc_min_idx_lebs(c);
721 c->report_rp_size = ubifs_reported_space(c, c->rp_size);
719 722
720 /* 723 /*
721 * Calculate total amount of FS blocks. This number is not used 724 * Calculate total amount of FS blocks. This number is not used
@@ -1201,7 +1204,7 @@ static int mount_ubifs(struct ubifs_info *c)
1201 goto out_cbuf; 1204 goto out_cbuf;
1202 1205
1203 /* Create background thread */ 1206 /* Create background thread */
1204 c->bgt = kthread_create(ubifs_bg_thread, c, c->bgt_name); 1207 c->bgt = kthread_create(ubifs_bg_thread, c, "%s", c->bgt_name);
1205 if (IS_ERR(c->bgt)) { 1208 if (IS_ERR(c->bgt)) {
1206 err = PTR_ERR(c->bgt); 1209 err = PTR_ERR(c->bgt);
1207 c->bgt = NULL; 1210 c->bgt = NULL;
@@ -1318,11 +1321,15 @@ static int mount_ubifs(struct ubifs_info *c)
1318 else { 1321 else {
1319 c->need_recovery = 0; 1322 c->need_recovery = 0;
1320 ubifs_msg("recovery completed"); 1323 ubifs_msg("recovery completed");
1321 /* GC LEB has to be empty and taken at this point */ 1324 /*
1322 ubifs_assert(c->lst.taken_empty_lebs == 1); 1325 * GC LEB has to be empty and taken at this point. But
1326 * the journal head LEBs may also be accounted as
1327 * "empty taken" if they are empty.
1328 */
1329 ubifs_assert(c->lst.taken_empty_lebs > 0);
1323 } 1330 }
1324 } else 1331 } else
1325 ubifs_assert(c->lst.taken_empty_lebs == 1); 1332 ubifs_assert(c->lst.taken_empty_lebs > 0);
1326 1333
1327 err = dbg_check_filesystem(c); 1334 err = dbg_check_filesystem(c);
1328 if (err) 1335 if (err)
@@ -1344,8 +1351,9 @@ static int mount_ubifs(struct ubifs_info *c)
1344 x = (long long)c->log_lebs * c->leb_size + c->max_bud_bytes; 1351 x = (long long)c->log_lebs * c->leb_size + c->max_bud_bytes;
1345 ubifs_msg("journal size: %lld bytes (%lld KiB, %lld MiB, %d " 1352 ubifs_msg("journal size: %lld bytes (%lld KiB, %lld MiB, %d "
1346 "LEBs)", x, x >> 10, x >> 20, c->log_lebs + c->max_bud_cnt); 1353 "LEBs)", x, x >> 10, x >> 20, c->log_lebs + c->max_bud_cnt);
1347 ubifs_msg("media format: %d (latest is %d)", 1354 ubifs_msg("media format: w%d/r%d (latest is w%d/r%d)",
1348 c->fmt_version, UBIFS_FORMAT_VERSION); 1355 c->fmt_version, c->ro_compat_version,
1356 UBIFS_FORMAT_VERSION, UBIFS_RO_COMPAT_VERSION);
1349 ubifs_msg("default compressor: %s", ubifs_compr_name(c->default_compr)); 1357 ubifs_msg("default compressor: %s", ubifs_compr_name(c->default_compr));
1350 ubifs_msg("reserved for root: %llu bytes (%llu KiB)", 1358 ubifs_msg("reserved for root: %llu bytes (%llu KiB)",
1351 c->report_rp_size, c->report_rp_size >> 10); 1359 c->report_rp_size, c->report_rp_size >> 10);
@@ -1485,6 +1493,15 @@ static int ubifs_remount_rw(struct ubifs_info *c)
1485{ 1493{
1486 int err, lnum; 1494 int err, lnum;
1487 1495
1496 if (c->rw_incompat) {
1497 ubifs_err("the file-system is not R/W-compatible");
1498 ubifs_msg("on-flash format version is w%d/r%d, but software "
1499 "only supports up to version w%d/r%d", c->fmt_version,
1500 c->ro_compat_version, UBIFS_FORMAT_VERSION,
1501 UBIFS_RO_COMPAT_VERSION);
1502 return -EROFS;
1503 }
1504
1488 mutex_lock(&c->umount_mutex); 1505 mutex_lock(&c->umount_mutex);
1489 dbg_save_space_info(c); 1506 dbg_save_space_info(c);
1490 c->remounting_rw = 1; 1507 c->remounting_rw = 1;
@@ -1554,7 +1571,7 @@ static int ubifs_remount_rw(struct ubifs_info *c)
1554 ubifs_create_buds_lists(c); 1571 ubifs_create_buds_lists(c);
1555 1572
1556 /* Create background thread */ 1573 /* Create background thread */
1557 c->bgt = kthread_create(ubifs_bg_thread, c, c->bgt_name); 1574 c->bgt = kthread_create(ubifs_bg_thread, c, "%s", c->bgt_name);
1558 if (IS_ERR(c->bgt)) { 1575 if (IS_ERR(c->bgt)) {
1559 err = PTR_ERR(c->bgt); 1576 err = PTR_ERR(c->bgt);
1560 c->bgt = NULL; 1577 c->bgt = NULL;
@@ -1775,7 +1792,7 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data)
1775 c->bu.buf = NULL; 1792 c->bu.buf = NULL;
1776 } 1793 }
1777 1794
1778 ubifs_assert(c->lst.taken_empty_lebs == 1); 1795 ubifs_assert(c->lst.taken_empty_lebs > 0);
1779 return 0; 1796 return 0;
1780} 1797}
1781 1798
diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c
index fa28a84c6a1b..f249f7b0d656 100644
--- a/fs/ubifs/tnc.c
+++ b/fs/ubifs/tnc.c
@@ -1252,7 +1252,7 @@ int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
1252 * splitting in the middle of the colliding sequence. Also, when 1252 * splitting in the middle of the colliding sequence. Also, when
1253 * removing the leftmost key, we would have to correct the key of the 1253 * removing the leftmost key, we would have to correct the key of the
1254 * parent node, which would introduce additional complications. Namely, 1254 * parent node, which would introduce additional complications. Namely,
1255 * if we changed the the leftmost key of the parent znode, the garbage 1255 * if we changed the leftmost key of the parent znode, the garbage
1256 * collector would be unable to find it (GC is doing this when GC'ing 1256 * collector would be unable to find it (GC is doing this when GC'ing
1257 * indexing LEBs). Although we already have an additional RB-tree where 1257 * indexing LEBs). Although we already have an additional RB-tree where
1258 * we save such changed znodes (see 'ins_clr_old_idx_znode()') until 1258 * we save such changed znodes (see 'ins_clr_old_idx_znode()') until
diff --git a/fs/ubifs/ubifs-media.h b/fs/ubifs/ubifs-media.h
index b25fc36cf72f..3eee07e0c495 100644
--- a/fs/ubifs/ubifs-media.h
+++ b/fs/ubifs/ubifs-media.h
@@ -36,9 +36,31 @@
36/* UBIFS node magic number (must not have the padding byte first or last) */ 36/* UBIFS node magic number (must not have the padding byte first or last) */
37#define UBIFS_NODE_MAGIC 0x06101831 37#define UBIFS_NODE_MAGIC 0x06101831
38 38
39/* UBIFS on-flash format version */ 39/*
40 * UBIFS on-flash format version. This version is increased when the on-flash
41 * format is changing. If this happens, UBIFS is will support older versions as
42 * well. But older UBIFS code will not support newer formats. Format changes
43 * will be rare and only when absolutely necessary, e.g. to fix a bug or to add
44 * a new feature.
45 *
46 * UBIFS went into mainline kernel with format version 4. The older formats
47 * were development formats.
48 */
40#define UBIFS_FORMAT_VERSION 4 49#define UBIFS_FORMAT_VERSION 4
41 50
51/*
52 * Read-only compatibility version. If the UBIFS format is changed, older UBIFS
53 * implementations will not be able to mount newer formats in read-write mode.
54 * However, depending on the change, it may be possible to mount newer formats
55 * in R/O mode. This is indicated by the R/O compatibility version which is
56 * stored in the super-block.
57 *
58 * This is needed to support boot-loaders which only need R/O mounting. With
59 * this flag it is possible to do UBIFS format changes without a need to update
60 * boot-loaders.
61 */
62#define UBIFS_RO_COMPAT_VERSION 0
63
42/* Minimum logical eraseblock size in bytes */ 64/* Minimum logical eraseblock size in bytes */
43#define UBIFS_MIN_LEB_SZ (15*1024) 65#define UBIFS_MIN_LEB_SZ (15*1024)
44 66
@@ -53,7 +75,7 @@
53 75
54/* 76/*
55 * If compressed data length is less than %UBIFS_MIN_COMPRESS_DIFF bytes 77 * If compressed data length is less than %UBIFS_MIN_COMPRESS_DIFF bytes
56 * shorter than uncompressed data length, UBIFS preferes to leave this data 78 * shorter than uncompressed data length, UBIFS prefers to leave this data
57 * node uncompress, because it'll be read faster. 79 * node uncompress, because it'll be read faster.
58 */ 80 */
59#define UBIFS_MIN_COMPRESS_DIFF 64 81#define UBIFS_MIN_COMPRESS_DIFF 64
@@ -586,6 +608,7 @@ struct ubifs_pad_node {
586 * @padding2: reserved for future, zeroes 608 * @padding2: reserved for future, zeroes
587 * @time_gran: time granularity in nanoseconds 609 * @time_gran: time granularity in nanoseconds
588 * @uuid: UUID generated when the file system image was created 610 * @uuid: UUID generated when the file system image was created
611 * @ro_compat_version: UBIFS R/O compatibility version
589 */ 612 */
590struct ubifs_sb_node { 613struct ubifs_sb_node {
591 struct ubifs_ch ch; 614 struct ubifs_ch ch;
@@ -612,7 +635,8 @@ struct ubifs_sb_node {
612 __le64 rp_size; 635 __le64 rp_size;
613 __le32 time_gran; 636 __le32 time_gran;
614 __u8 uuid[16]; 637 __u8 uuid[16];
615 __u8 padding2[3972]; 638 __le32 ro_compat_version;
639 __u8 padding2[3968];
616} __attribute__ ((packed)); 640} __attribute__ ((packed));
617 641
618/** 642/**
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index 039a68bee29a..0a8341e14088 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -934,6 +934,7 @@ struct ubifs_debug_info;
934 * by @commit_sem 934 * by @commit_sem
935 * @cnt_lock: protects @highest_inum and @max_sqnum counters 935 * @cnt_lock: protects @highest_inum and @max_sqnum counters
936 * @fmt_version: UBIFS on-flash format version 936 * @fmt_version: UBIFS on-flash format version
937 * @ro_compat_version: R/O compatibility version
937 * @uuid: UUID from super block 938 * @uuid: UUID from super block
938 * 939 *
939 * @lhead_lnum: log head logical eraseblock number 940 * @lhead_lnum: log head logical eraseblock number
@@ -966,6 +967,7 @@ struct ubifs_debug_info;
966 * recovery) 967 * recovery)
967 * @bulk_read: enable bulk-reads 968 * @bulk_read: enable bulk-reads
968 * @default_compr: default compression algorithm (%UBIFS_COMPR_LZO, etc) 969 * @default_compr: default compression algorithm (%UBIFS_COMPR_LZO, etc)
970 * @rw_incompat: the media is not R/W compatible
969 * 971 *
970 * @tnc_mutex: protects the Tree Node Cache (TNC), @zroot, @cnext, @enext, and 972 * @tnc_mutex: protects the Tree Node Cache (TNC), @zroot, @cnext, @enext, and
971 * @calc_idx_sz 973 * @calc_idx_sz
@@ -1015,6 +1017,8 @@ struct ubifs_debug_info;
1015 * @min_io_shift: number of bits in @min_io_size minus one 1017 * @min_io_shift: number of bits in @min_io_size minus one
1016 * @leb_size: logical eraseblock size in bytes 1018 * @leb_size: logical eraseblock size in bytes
1017 * @half_leb_size: half LEB size 1019 * @half_leb_size: half LEB size
1020 * @idx_leb_size: how many bytes of an LEB are effectively available when it is
1021 * used to store indexing nodes (@leb_size - @max_idx_node_sz)
1018 * @leb_cnt: count of logical eraseblocks 1022 * @leb_cnt: count of logical eraseblocks
1019 * @max_leb_cnt: maximum count of logical eraseblocks 1023 * @max_leb_cnt: maximum count of logical eraseblocks
1020 * @old_leb_cnt: count of logical eraseblocks before re-size 1024 * @old_leb_cnt: count of logical eraseblocks before re-size
@@ -1132,8 +1136,8 @@ struct ubifs_debug_info;
1132 * previous commit start 1136 * previous commit start
1133 * @uncat_list: list of un-categorized LEBs 1137 * @uncat_list: list of un-categorized LEBs
1134 * @empty_list: list of empty LEBs 1138 * @empty_list: list of empty LEBs
1135 * @freeable_list: list of freeable non-index LEBs (free + dirty == leb_size) 1139 * @freeable_list: list of freeable non-index LEBs (free + dirty == @leb_size)
1136 * @frdi_idx_list: list of freeable index LEBs (free + dirty == leb_size) 1140 * @frdi_idx_list: list of freeable index LEBs (free + dirty == @leb_size)
1137 * @freeable_cnt: number of freeable LEBs in @freeable_list 1141 * @freeable_cnt: number of freeable LEBs in @freeable_list
1138 * 1142 *
1139 * @ltab_lnum: LEB number of LPT's own lprops table 1143 * @ltab_lnum: LEB number of LPT's own lprops table
@@ -1177,6 +1181,7 @@ struct ubifs_info {
1177 unsigned long long cmt_no; 1181 unsigned long long cmt_no;
1178 spinlock_t cnt_lock; 1182 spinlock_t cnt_lock;
1179 int fmt_version; 1183 int fmt_version;
1184 int ro_compat_version;
1180 unsigned char uuid[16]; 1185 unsigned char uuid[16];
1181 1186
1182 int lhead_lnum; 1187 int lhead_lnum;
@@ -1205,6 +1210,7 @@ struct ubifs_info {
1205 unsigned int no_chk_data_crc:1; 1210 unsigned int no_chk_data_crc:1;
1206 unsigned int bulk_read:1; 1211 unsigned int bulk_read:1;
1207 unsigned int default_compr:2; 1212 unsigned int default_compr:2;
1213 unsigned int rw_incompat:1;
1208 1214
1209 struct mutex tnc_mutex; 1215 struct mutex tnc_mutex;
1210 struct ubifs_zbranch zroot; 1216 struct ubifs_zbranch zroot;
@@ -1253,6 +1259,7 @@ struct ubifs_info {
1253 int min_io_shift; 1259 int min_io_shift;
1254 int leb_size; 1260 int leb_size;
1255 int half_leb_size; 1261 int half_leb_size;
1262 int idx_leb_size;
1256 int leb_cnt; 1263 int leb_cnt;
1257 int max_leb_cnt; 1264 int max_leb_cnt;
1258 int old_leb_cnt; 1265 int old_leb_cnt;
@@ -1500,7 +1507,7 @@ long long ubifs_reported_space(const struct ubifs_info *c, long long free);
1500long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs); 1507long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs);
1501 1508
1502/* find.c */ 1509/* find.c */
1503int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free, 1510int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs,
1504 int squeeze); 1511 int squeeze);
1505int ubifs_find_free_leb_for_idx(struct ubifs_info *c); 1512int ubifs_find_free_leb_for_idx(struct ubifs_info *c);
1506int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp, 1513int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp,
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index aeaf7cd41dc7..4db89e98535d 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -191,14 +191,12 @@ acpi_evaluate_object(acpi_handle object,
191 struct acpi_object_list *parameter_objects, 191 struct acpi_object_list *parameter_objects,
192 struct acpi_buffer *return_object_buffer); 192 struct acpi_buffer *return_object_buffer);
193 193
194#ifdef ACPI_FUTURE_USAGE
195acpi_status 194acpi_status
196acpi_evaluate_object_typed(acpi_handle object, 195acpi_evaluate_object_typed(acpi_handle object,
197 acpi_string pathname, 196 acpi_string pathname,
198 struct acpi_object_list *external_params, 197 struct acpi_object_list *external_params,
199 struct acpi_buffer *return_buffer, 198 struct acpi_buffer *return_buffer,
200 acpi_object_type return_type); 199 acpi_object_type return_type);
201#endif
202 200
203acpi_status 201acpi_status
204acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer); 202acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer);
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 6617c9f8f2ca..cb79b7a208e1 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -29,6 +29,8 @@
29#ifndef __LINUX_ATA_H__ 29#ifndef __LINUX_ATA_H__
30#define __LINUX_ATA_H__ 30#define __LINUX_ATA_H__
31 31
32#include <linux/kernel.h>
33#include <linux/string.h>
32#include <linux/types.h> 34#include <linux/types.h>
33#include <asm/byteorder.h> 35#include <asm/byteorder.h>
34 36
@@ -91,6 +93,7 @@ enum {
91 ATA_ID_CFA_POWER = 160, 93 ATA_ID_CFA_POWER = 160,
92 ATA_ID_CFA_KEY_MGMT = 162, 94 ATA_ID_CFA_KEY_MGMT = 162,
93 ATA_ID_CFA_MODES = 163, 95 ATA_ID_CFA_MODES = 163,
96 ATA_ID_DATA_SET_MGMT = 169,
94 ATA_ID_ROT_SPEED = 217, 97 ATA_ID_ROT_SPEED = 217,
95 ATA_ID_PIO4 = (1 << 1), 98 ATA_ID_PIO4 = (1 << 1),
96 99
@@ -248,6 +251,7 @@ enum {
248 ATA_CMD_SMART = 0xB0, 251 ATA_CMD_SMART = 0xB0,
249 ATA_CMD_MEDIA_LOCK = 0xDE, 252 ATA_CMD_MEDIA_LOCK = 0xDE,
250 ATA_CMD_MEDIA_UNLOCK = 0xDF, 253 ATA_CMD_MEDIA_UNLOCK = 0xDF,
254 ATA_CMD_DSM = 0x06,
251 /* marked obsolete in the ATA/ATAPI-7 spec */ 255 /* marked obsolete in the ATA/ATAPI-7 spec */
252 ATA_CMD_RESTORE = 0x10, 256 ATA_CMD_RESTORE = 0x10,
253 257
@@ -321,6 +325,9 @@ enum {
321 ATA_SMART_READ_VALUES = 0xD0, 325 ATA_SMART_READ_VALUES = 0xD0,
322 ATA_SMART_READ_THRESHOLDS = 0xD1, 326 ATA_SMART_READ_THRESHOLDS = 0xD1,
323 327
328 /* feature values for Data Set Management */
329 ATA_DSM_TRIM = 0x01,
330
324 /* password used in LBA Mid / LBA High for executing SMART commands */ 331 /* password used in LBA Mid / LBA High for executing SMART commands */
325 ATA_SMART_LBAM_PASS = 0x4F, 332 ATA_SMART_LBAM_PASS = 0x4F,
326 ATA_SMART_LBAH_PASS = 0xC2, 333 ATA_SMART_LBAH_PASS = 0xC2,
@@ -723,6 +730,14 @@ static inline int ata_id_has_unload(const u16 *id)
723 return 0; 730 return 0;
724} 731}
725 732
733static inline int ata_id_has_trim(const u16 *id)
734{
735 if (ata_id_major_version(id) >= 7 &&
736 (id[ATA_ID_DATA_SET_MGMT] & 1))
737 return 1;
738 return 0;
739}
740
726static inline int ata_id_current_chs_valid(const u16 *id) 741static inline int ata_id_current_chs_valid(const u16 *id)
727{ 742{
728 /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command 743 /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
@@ -863,6 +878,32 @@ static inline void ata_id_to_hd_driveid(u16 *id)
863#endif 878#endif
864} 879}
865 880
881/*
882 * Write up to 'max' LBA Range Entries to the buffer that will cover the
883 * extent from sector to sector + count. This is used for TRIM and for
884 * ADD LBA(S) TO NV CACHE PINNED SET.
885 */
886static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max,
887 u64 sector, unsigned long count)
888{
889 __le64 *buffer = _buffer;
890 unsigned i = 0;
891
892 while (i < max) {
893 u64 entry = sector |
894 ((u64)(count > 0xffff ? 0xffff : count) << 48);
895 buffer[i++] = __cpu_to_le64(entry);
896 if (count <= 0xffff)
897 break;
898 count -= 0xffff;
899 sector += 0xffff;
900 }
901
902 max = ALIGN(i * 8, 512);
903 memset(buffer + i, 0, max - i * 8);
904 return max;
905}
906
866static inline int is_multi_taskfile(struct ata_taskfile *tf) 907static inline int is_multi_taskfile(struct ata_taskfile *tf)
867{ 908{
868 return (tf->command == ATA_CMD_READ_MULTI) || 909 return (tf->command == ATA_CMD_READ_MULTI) ||
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
index bee52abb8a4d..0ec2c594868e 100644
--- a/include/linux/backing-dev.h
+++ b/include/linux/backing-dev.h
@@ -24,8 +24,8 @@ struct dentry;
24 */ 24 */
25enum bdi_state { 25enum bdi_state {
26 BDI_pdflush, /* A pdflush thread is working this device */ 26 BDI_pdflush, /* A pdflush thread is working this device */
27 BDI_write_congested, /* The write queue is getting full */ 27 BDI_async_congested, /* The async (write) queue is getting full */
28 BDI_read_congested, /* The read queue is getting full */ 28 BDI_sync_congested, /* The sync queue is getting full */
29 BDI_unused, /* Available bits start here */ 29 BDI_unused, /* Available bits start here */
30}; 30};
31 31
@@ -215,18 +215,18 @@ static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits)
215 215
216static inline int bdi_read_congested(struct backing_dev_info *bdi) 216static inline int bdi_read_congested(struct backing_dev_info *bdi)
217{ 217{
218 return bdi_congested(bdi, 1 << BDI_read_congested); 218 return bdi_congested(bdi, 1 << BDI_sync_congested);
219} 219}
220 220
221static inline int bdi_write_congested(struct backing_dev_info *bdi) 221static inline int bdi_write_congested(struct backing_dev_info *bdi)
222{ 222{
223 return bdi_congested(bdi, 1 << BDI_write_congested); 223 return bdi_congested(bdi, 1 << BDI_async_congested);
224} 224}
225 225
226static inline int bdi_rw_congested(struct backing_dev_info *bdi) 226static inline int bdi_rw_congested(struct backing_dev_info *bdi)
227{ 227{
228 return bdi_congested(bdi, (1 << BDI_read_congested)| 228 return bdi_congested(bdi, (1 << BDI_sync_congested) |
229 (1 << BDI_write_congested)); 229 (1 << BDI_async_congested));
230} 230}
231 231
232void clear_bdi_congested(struct backing_dev_info *bdi, int rw); 232void clear_bdi_congested(struct backing_dev_info *bdi, int rw);
diff --git a/include/linux/bio.h b/include/linux/bio.h
index b05b1d4d17d2..b900d2c67d29 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -145,20 +145,21 @@ struct bio {
145 * bit 2 -- barrier 145 * bit 2 -- barrier
146 * Insert a serialization point in the IO queue, forcing previously 146 * Insert a serialization point in the IO queue, forcing previously
147 * submitted IO to be completed before this one is issued. 147 * submitted IO to be completed before this one is issued.
148 * bit 3 -- synchronous I/O hint: the block layer will unplug immediately 148 * bit 3 -- synchronous I/O hint.
149 * Note that this does NOT indicate that the IO itself is sync, just 149 * bit 4 -- Unplug the device immediately after submitting this bio.
150 * that the block layer will not postpone issue of this IO by plugging. 150 * bit 5 -- metadata request
151 * bit 4 -- metadata request
152 * Used for tracing to differentiate metadata and data IO. May also 151 * Used for tracing to differentiate metadata and data IO. May also
153 * get some preferential treatment in the IO scheduler 152 * get some preferential treatment in the IO scheduler
154 * bit 5 -- discard sectors 153 * bit 6 -- discard sectors
155 * Informs the lower level device that this range of sectors is no longer 154 * Informs the lower level device that this range of sectors is no longer
156 * used by the file system and may thus be freed by the device. Used 155 * used by the file system and may thus be freed by the device. Used
157 * for flash based storage. 156 * for flash based storage.
158 * bit 6 -- fail fast device errors 157 * bit 7 -- fail fast device errors
159 * bit 7 -- fail fast transport errors 158 * bit 8 -- fail fast transport errors
160 * bit 8 -- fail fast driver errors 159 * bit 9 -- fail fast driver errors
161 * Don't want driver retries for any fast fail whatever the reason. 160 * Don't want driver retries for any fast fail whatever the reason.
161 * bit 10 -- Tell the IO scheduler not to wait for more requests after this
162 one has been submitted, even if it is a SYNC request.
162 */ 163 */
163#define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */ 164#define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */
164#define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */ 165#define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */
@@ -170,6 +171,7 @@ struct bio {
170#define BIO_RW_FAILFAST_DEV 7 171#define BIO_RW_FAILFAST_DEV 7
171#define BIO_RW_FAILFAST_TRANSPORT 8 172#define BIO_RW_FAILFAST_TRANSPORT 8
172#define BIO_RW_FAILFAST_DRIVER 9 173#define BIO_RW_FAILFAST_DRIVER 9
174#define BIO_RW_NOIDLE 10
173 175
174#define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) 176#define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag)))
175 177
@@ -188,6 +190,7 @@ struct bio {
188#define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD) 190#define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD)
189#define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META) 191#define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META)
190#define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD) 192#define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD)
193#define bio_noidle(bio) bio_rw_flagged(bio, BIO_RW_NOIDLE)
191 194
192/* 195/*
193 * upper 16 bits of bi_rw define the io priority of this bio 196 * upper 16 bits of bi_rw define the io priority of this bio
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 465d6babc847..ba54c834a590 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -38,6 +38,10 @@ struct request;
38typedef void (rq_end_io_fn)(struct request *, int); 38typedef void (rq_end_io_fn)(struct request *, int);
39 39
40struct request_list { 40struct request_list {
41 /*
42 * count[], starved[], and wait[] are indexed by
43 * BLK_RW_SYNC/BLK_RW_ASYNC
44 */
41 int count[2]; 45 int count[2];
42 int starved[2]; 46 int starved[2];
43 int elvpriv; 47 int elvpriv;
@@ -66,6 +70,11 @@ enum rq_cmd_type_bits {
66 REQ_TYPE_ATA_PC, 70 REQ_TYPE_ATA_PC,
67}; 71};
68 72
73enum {
74 BLK_RW_ASYNC = 0,
75 BLK_RW_SYNC = 1,
76};
77
69/* 78/*
70 * For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being 79 * For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being
71 * sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a 80 * sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a
@@ -103,12 +112,12 @@ enum rq_flag_bits {
103 __REQ_QUIET, /* don't worry about errors */ 112 __REQ_QUIET, /* don't worry about errors */
104 __REQ_PREEMPT, /* set for "ide_preempt" requests */ 113 __REQ_PREEMPT, /* set for "ide_preempt" requests */
105 __REQ_ORDERED_COLOR, /* is before or after barrier */ 114 __REQ_ORDERED_COLOR, /* is before or after barrier */
106 __REQ_RW_SYNC, /* request is sync (O_DIRECT) */ 115 __REQ_RW_SYNC, /* request is sync (sync write or read) */
107 __REQ_ALLOCED, /* request came from our alloc pool */ 116 __REQ_ALLOCED, /* request came from our alloc pool */
108 __REQ_RW_META, /* metadata io request */ 117 __REQ_RW_META, /* metadata io request */
109 __REQ_COPY_USER, /* contains copies of user pages */ 118 __REQ_COPY_USER, /* contains copies of user pages */
110 __REQ_INTEGRITY, /* integrity metadata has been remapped */ 119 __REQ_INTEGRITY, /* integrity metadata has been remapped */
111 __REQ_UNPLUG, /* unplug queue on submission */ 120 __REQ_NOIDLE, /* Don't anticipate more IO after this one */
112 __REQ_NR_BITS, /* stops here */ 121 __REQ_NR_BITS, /* stops here */
113}; 122};
114 123
@@ -135,7 +144,7 @@ enum rq_flag_bits {
135#define REQ_RW_META (1 << __REQ_RW_META) 144#define REQ_RW_META (1 << __REQ_RW_META)
136#define REQ_COPY_USER (1 << __REQ_COPY_USER) 145#define REQ_COPY_USER (1 << __REQ_COPY_USER)
137#define REQ_INTEGRITY (1 << __REQ_INTEGRITY) 146#define REQ_INTEGRITY (1 << __REQ_INTEGRITY)
138#define REQ_UNPLUG (1 << __REQ_UNPLUG) 147#define REQ_NOIDLE (1 << __REQ_NOIDLE)
139 148
140#define BLK_MAX_CDB 16 149#define BLK_MAX_CDB 16
141 150
@@ -438,8 +447,8 @@ struct request_queue
438#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ 447#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */
439#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ 448#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
440#define QUEUE_FLAG_STOPPED 2 /* queue is stopped */ 449#define QUEUE_FLAG_STOPPED 2 /* queue is stopped */
441#define QUEUE_FLAG_READFULL 3 /* read queue has been filled */ 450#define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */
442#define QUEUE_FLAG_WRITEFULL 4 /* write queue has been filled */ 451#define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */
443#define QUEUE_FLAG_DEAD 5 /* queue being torn down */ 452#define QUEUE_FLAG_DEAD 5 /* queue being torn down */
444#define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ 453#define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */
445#define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ 454#define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */
@@ -611,32 +620,42 @@ enum {
611#define rq_data_dir(rq) ((rq)->cmd_flags & 1) 620#define rq_data_dir(rq) ((rq)->cmd_flags & 1)
612 621
613/* 622/*
614 * We regard a request as sync, if it's a READ or a SYNC write. 623 * We regard a request as sync, if either a read or a sync write
615 */ 624 */
616#define rq_is_sync(rq) (rq_data_dir((rq)) == READ || (rq)->cmd_flags & REQ_RW_SYNC) 625static inline bool rw_is_sync(unsigned int rw_flags)
626{
627 return !(rw_flags & REQ_RW) || (rw_flags & REQ_RW_SYNC);
628}
629
630static inline bool rq_is_sync(struct request *rq)
631{
632 return rw_is_sync(rq->cmd_flags);
633}
634
617#define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META) 635#define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META)
636#define rq_noidle(rq) ((rq)->cmd_flags & REQ_NOIDLE)
618 637
619static inline int blk_queue_full(struct request_queue *q, int rw) 638static inline int blk_queue_full(struct request_queue *q, int sync)
620{ 639{
621 if (rw == READ) 640 if (sync)
622 return test_bit(QUEUE_FLAG_READFULL, &q->queue_flags); 641 return test_bit(QUEUE_FLAG_SYNCFULL, &q->queue_flags);
623 return test_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); 642 return test_bit(QUEUE_FLAG_ASYNCFULL, &q->queue_flags);
624} 643}
625 644
626static inline void blk_set_queue_full(struct request_queue *q, int rw) 645static inline void blk_set_queue_full(struct request_queue *q, int sync)
627{ 646{
628 if (rw == READ) 647 if (sync)
629 queue_flag_set(QUEUE_FLAG_READFULL, q); 648 queue_flag_set(QUEUE_FLAG_SYNCFULL, q);
630 else 649 else
631 queue_flag_set(QUEUE_FLAG_WRITEFULL, q); 650 queue_flag_set(QUEUE_FLAG_ASYNCFULL, q);
632} 651}
633 652
634static inline void blk_clear_queue_full(struct request_queue *q, int rw) 653static inline void blk_clear_queue_full(struct request_queue *q, int sync)
635{ 654{
636 if (rw == READ) 655 if (sync)
637 queue_flag_clear(QUEUE_FLAG_READFULL, q); 656 queue_flag_clear(QUEUE_FLAG_SYNCFULL, q);
638 else 657 else
639 queue_flag_clear(QUEUE_FLAG_WRITEFULL, q); 658 queue_flag_clear(QUEUE_FLAG_ASYNCFULL, q);
640} 659}
641 660
642 661
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 6faa7e549de4..cebfdcd3dbdd 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -114,7 +114,9 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
114 * "Define 'is'", Bill Clinton 114 * "Define 'is'", Bill Clinton
115 * "Define 'if'", Steven Rostedt 115 * "Define 'if'", Steven Rostedt
116 */ 116 */
117#define if(cond) if (__builtin_constant_p((cond)) ? !!(cond) : \ 117#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
118#define __trace_if(cond) \
119 if (__builtin_constant_p((cond)) ? !!(cond) : \
118 ({ \ 120 ({ \
119 int ______r; \ 121 int ______r; \
120 static struct ftrace_branch_data \ 122 static struct ftrace_branch_data \
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index d7d090d21031..8083b6a36a38 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -115,7 +115,7 @@ static inline u64 dma_get_mask(struct device *dev)
115{ 115{
116 if (dev && dev->dma_mask && *dev->dma_mask) 116 if (dev && dev->dma_mask && *dev->dma_mask)
117 return *dev->dma_mask; 117 return *dev->dma_mask;
118 return DMA_32BIT_MASK; 118 return DMA_BIT_MASK(32);
119} 119}
120 120
121extern u64 dma_get_required_mask(struct device *dev); 121extern u64 dma_get_required_mask(struct device *dev);
diff --git a/include/linux/dmar.h b/include/linux/dmar.h
index 2f3427468956..e397dc342cda 100644
--- a/include/linux/dmar.h
+++ b/include/linux/dmar.h
@@ -34,6 +34,7 @@ struct dmar_drhd_unit {
34 u64 reg_base_addr; /* register base address*/ 34 u64 reg_base_addr; /* register base address*/
35 struct pci_dev **devices; /* target device array */ 35 struct pci_dev **devices; /* target device array */
36 int devices_cnt; /* target device count */ 36 int devices_cnt; /* target device count */
37 u16 segment; /* PCI domain */
37 u8 ignored:1; /* ignore drhd */ 38 u8 ignored:1; /* ignore drhd */
38 u8 include_all:1; 39 u8 include_all:1;
39 struct intel_iommu *iommu; 40 struct intel_iommu *iommu;
@@ -44,6 +45,14 @@ extern struct list_head dmar_drhd_units;
44#define for_each_drhd_unit(drhd) \ 45#define for_each_drhd_unit(drhd) \
45 list_for_each_entry(drhd, &dmar_drhd_units, list) 46 list_for_each_entry(drhd, &dmar_drhd_units, list)
46 47
48#define for_each_active_iommu(i, drhd) \
49 list_for_each_entry(drhd, &dmar_drhd_units, list) \
50 if (i=drhd->iommu, drhd->ignored) {} else
51
52#define for_each_iommu(i, drhd) \
53 list_for_each_entry(drhd, &dmar_drhd_units, list) \
54 if (i=drhd->iommu, 0) {} else
55
47extern int dmar_table_init(void); 56extern int dmar_table_init(void);
48extern int dmar_dev_scope_init(void); 57extern int dmar_dev_scope_init(void);
49 58
@@ -100,6 +109,8 @@ struct irte {
100#ifdef CONFIG_INTR_REMAP 109#ifdef CONFIG_INTR_REMAP
101extern int intr_remapping_enabled; 110extern int intr_remapping_enabled;
102extern int enable_intr_remapping(int); 111extern int enable_intr_remapping(int);
112extern void disable_intr_remapping(void);
113extern int reenable_intr_remapping(int);
103 114
104extern int get_irte(int irq, struct irte *entry); 115extern int get_irte(int irq, struct irte *entry);
105extern int modify_irte(int irq, struct irte *irte_modified); 116extern int modify_irte(int irq, struct irte *irte_modified);
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 7a204256b155..c59b769f62b0 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -116,6 +116,7 @@ extern void elv_abort_queue(struct request_queue *);
116extern void elv_completed_request(struct request_queue *, struct request *); 116extern void elv_completed_request(struct request_queue *, struct request *);
117extern int elv_set_request(struct request_queue *, struct request *, gfp_t); 117extern int elv_set_request(struct request_queue *, struct request *, gfp_t);
118extern void elv_put_request(struct request_queue *, struct request *); 118extern void elv_put_request(struct request_queue *, struct request *);
119extern void elv_drain_elevator(struct request_queue *);
119 120
120/* 121/*
121 * io scheduler registration 122 * io scheduler registration
diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h
index 09d6c5bbdddd..a2ec74bc4812 100644
--- a/include/linux/fdtable.h
+++ b/include/linux/fdtable.h
@@ -5,12 +5,14 @@
5#ifndef __LINUX_FDTABLE_H 5#ifndef __LINUX_FDTABLE_H
6#define __LINUX_FDTABLE_H 6#define __LINUX_FDTABLE_H
7 7
8#include <asm/atomic.h>
9#include <linux/posix_types.h> 8#include <linux/posix_types.h>
10#include <linux/compiler.h> 9#include <linux/compiler.h>
11#include <linux/spinlock.h> 10#include <linux/spinlock.h>
12#include <linux/rcupdate.h> 11#include <linux/rcupdate.h>
13#include <linux/types.h> 12#include <linux/types.h>
13#include <linux/init.h>
14
15#include <asm/atomic.h>
14 16
15/* 17/*
16 * The default fd array needs to be at least BITS_PER_LONG, 18 * The default fd array needs to be at least BITS_PER_LONG,
diff --git a/include/linux/fs.h b/include/linux/fs.h
index a09e17c8f5fd..562d2855cf30 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -95,8 +95,12 @@ struct inodes_stat_t {
95#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ 95#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
96#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) 96#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
97#define READ_META (READ | (1 << BIO_RW_META)) 97#define READ_META (READ | (1 << BIO_RW_META))
98#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) 98#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
99#define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) 99#define WRITE_SYNC (WRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
100#define WRITE_ODIRECT (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
101#define SWRITE_SYNC_PLUG \
102 (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
103#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
100#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) 104#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER))
101#define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) 105#define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD)
102#define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) 106#define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER))
@@ -1695,6 +1699,9 @@ struct file_system_type {
1695 struct lock_class_key i_alloc_sem_key; 1699 struct lock_class_key i_alloc_sem_key;
1696}; 1700};
1697 1701
1702extern int get_sb_ns(struct file_system_type *fs_type, int flags, void *data,
1703 int (*fill_super)(struct super_block *, void *, int),
1704 struct vfsmount *mnt);
1698extern int get_sb_bdev(struct file_system_type *fs_type, 1705extern int get_sb_bdev(struct file_system_type *fs_type,
1699 int flags, const char *dev_name, void *data, 1706 int flags, const char *dev_name, void *data,
1700 int (*fill_super)(struct super_block *, void *, int), 1707 int (*fill_super)(struct super_block *, void *, int),
@@ -2337,19 +2344,7 @@ ssize_t simple_transaction_read(struct file *file, char __user *buf,
2337 size_t size, loff_t *pos); 2344 size_t size, loff_t *pos);
2338int simple_transaction_release(struct inode *inode, struct file *file); 2345int simple_transaction_release(struct inode *inode, struct file *file);
2339 2346
2340static inline void simple_transaction_set(struct file *file, size_t n) 2347void simple_transaction_set(struct file *file, size_t n);
2341{
2342 struct simple_transaction_argresp *ar = file->private_data;
2343
2344 BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
2345
2346 /*
2347 * The barrier ensures that ar->size will really remain zero until
2348 * ar->data is ready for reading.
2349 */
2350 smp_mb();
2351 ar->size = n;
2352}
2353 2348
2354/* 2349/*
2355 * simple attribute files 2350 * simple attribute files
@@ -2396,27 +2391,6 @@ ssize_t simple_attr_read(struct file *file, char __user *buf,
2396ssize_t simple_attr_write(struct file *file, const char __user *buf, 2391ssize_t simple_attr_write(struct file *file, const char __user *buf,
2397 size_t len, loff_t *ppos); 2392 size_t len, loff_t *ppos);
2398 2393
2399
2400#ifdef CONFIG_SECURITY
2401static inline char *alloc_secdata(void)
2402{
2403 return (char *)get_zeroed_page(GFP_KERNEL);
2404}
2405
2406static inline void free_secdata(void *secdata)
2407{
2408 free_page((unsigned long)secdata);
2409}
2410#else
2411static inline char *alloc_secdata(void)
2412{
2413 return (char *)1;
2414}
2415
2416static inline void free_secdata(void *secdata)
2417{ }
2418#endif /* CONFIG_SECURITY */
2419
2420struct ctl_table; 2394struct ctl_table;
2421int proc_nr_files(struct ctl_table *table, int write, struct file *filp, 2395int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
2422 void __user *buffer, size_t *lenp, loff_t *ppos); 2396 void __user *buffer, size_t *lenp, loff_t *ppos);
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h
index 7ef1caf50269..f2a78b5e8b55 100644
--- a/include/linux/fsl_devices.h
+++ b/include/linux/fsl_devices.h
@@ -18,7 +18,6 @@
18#define _FSL_DEVICE_H_ 18#define _FSL_DEVICE_H_
19 19
20#include <linux/types.h> 20#include <linux/types.h>
21#include <linux/phy.h>
22 21
23/* 22/*
24 * Some conventions on how we handle peripherals on Freescale chips 23 * Some conventions on how we handle peripherals on Freescale chips
@@ -44,27 +43,6 @@
44 * 43 *
45 */ 44 */
46 45
47struct gianfar_platform_data {
48 /* device specific information */
49 u32 device_flags;
50 char bus_id[BUS_ID_SIZE];
51 phy_interface_t interface;
52};
53
54struct gianfar_mdio_data {
55 /* board specific information */
56 int irq[32];
57};
58
59/* Flags in gianfar_platform_data */
60#define FSL_GIANFAR_BRD_HAS_PHY_INTR 0x00000001 /* set or use a timer */
61#define FSL_GIANFAR_BRD_IS_REDUCED 0x00000002 /* Set if RGMII, RMII */
62
63struct fsl_i2c_platform_data {
64 /* device specific information */
65 u32 device_flags;
66};
67
68/* Flags related to I2C device features */ 46/* Flags related to I2C device features */
69#define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001 47#define FSL_I2C_DEV_SEPARATE_DFSRR 0x00000001
70#define FSL_I2C_DEV_CLOCK_5200 0x00000002 48#define FSL_I2C_DEV_CLOCK_5200 0x00000002
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index bd37078c2d7d..0d2f7c8a33d6 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -336,6 +336,11 @@ extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
336 const enum hrtimer_mode mode); 336 const enum hrtimer_mode mode);
337extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, 337extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
338 unsigned long range_ns, const enum hrtimer_mode mode); 338 unsigned long range_ns, const enum hrtimer_mode mode);
339extern int
340__hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
341 unsigned long delta_ns,
342 const enum hrtimer_mode mode, int wakeup);
343
339extern int hrtimer_cancel(struct hrtimer *timer); 344extern int hrtimer_cancel(struct hrtimer *timer);
340extern int hrtimer_try_to_cancel(struct hrtimer *timer); 345extern int hrtimer_try_to_cancel(struct hrtimer *timer);
341 346
diff --git a/include/linux/i2c-algo-sgi.h b/include/linux/i2c-algo-sgi.h
deleted file mode 100644
index 3b7715024e69..000000000000
--- a/include/linux/i2c-algo-sgi.h
+++ /dev/null
@@ -1,26 +0,0 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License version 2 as published by the Free Software Foundation.
4 *
5 * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
6 */
7
8#ifndef I2C_ALGO_SGI_H
9#define I2C_ALGO_SGI_H 1
10
11#include <linux/i2c.h>
12
13struct i2c_algo_sgi_data {
14 void *data; /* private data for lowlevel routines */
15 unsigned (*getctrl)(void *data);
16 void (*setctrl)(void *data, unsigned val);
17 unsigned (*rdata)(void *data);
18 void (*wdata)(void *data, unsigned val);
19
20 int xfer_timeout;
21 int ack_timeout;
22};
23
24int i2c_sgi_add_bus(struct i2c_adapter *);
25
26#endif /* I2C_ALGO_SGI_H */
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h
index f27604af8378..c9087de5c6c6 100644
--- a/include/linux/i2c-id.h
+++ b/include/linux/i2c-id.h
@@ -33,47 +33,10 @@
33 33
34#define I2C_DRIVERID_MSP3400 1 34#define I2C_DRIVERID_MSP3400 1
35#define I2C_DRIVERID_TUNER 2 35#define I2C_DRIVERID_TUNER 2
36#define I2C_DRIVERID_TEA6420 5 /* audio matrix switch */
37#define I2C_DRIVERID_TEA6415C 6 /* video matrix switch */
38#define I2C_DRIVERID_TDA9840 7 /* stereo sound processor */
39#define I2C_DRIVERID_SAA7111A 8 /* video input processor */
40#define I2C_DRIVERID_SAA7185B 13 /* video encoder */
41#define I2C_DRIVERID_SAA7110 22 /* video decoder */
42#define I2C_DRIVERID_SAA5249 24 /* SAA5249 and compatibles */
43#define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */ 36#define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */
44#define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */ 37#define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */
45#define I2C_DRIVERID_TDA9875 32 /* TV sound decoder chip */
46#define I2C_DRIVERID_BT819 40 /* video decoder */
47#define I2C_DRIVERID_BT856 41 /* video encoder */
48#define I2C_DRIVERID_VPX3220 42 /* video decoder+vbi/vtxt */
49#define I2C_DRIVERID_ADV7175 48 /* ADV 7175/7176 video encoder */
50#define I2C_DRIVERID_SAA7114 49 /* video decoder */
51#define I2C_DRIVERID_ADV7170 54 /* video encoder */
52#define I2C_DRIVERID_SAA7191 57 /* video decoder */
53#define I2C_DRIVERID_INDYCAM 58 /* SGI IndyCam */
54#define I2C_DRIVERID_OVCAMCHIP 61 /* OmniVision CMOS image sens. */
55#define I2C_DRIVERID_SAA6752HS 67 /* MPEG2 encoder */
56#define I2C_DRIVERID_TVEEPROM 68 /* TV EEPROM */
57#define I2C_DRIVERID_WM8775 69 /* wm8775 audio processor */
58#define I2C_DRIVERID_CS53L32A 70 /* cs53l32a audio processor */
59#define I2C_DRIVERID_CX25840 71 /* cx2584x video encoder */
60#define I2C_DRIVERID_SAA7127 72 /* saa7127 video encoder */
61#define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */ 38#define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */
62#define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ 39#define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */
63#define I2C_DRIVERID_TVP5150 76 /* TVP5150 video decoder */
64#define I2C_DRIVERID_WM8739 77 /* wm8739 audio processor */
65#define I2C_DRIVERID_UPD64083 78 /* upd64083 video processor */
66#define I2C_DRIVERID_UPD64031A 79 /* upd64031a video processor */
67#define I2C_DRIVERID_SAA717X 80 /* saa717x video encoder */
68#define I2C_DRIVERID_BT866 85 /* Conexant bt866 video encoder */
69#define I2C_DRIVERID_KS0127 86 /* Samsung ks0127 video decoder */
70#define I2C_DRIVERID_TLV320AIC23B 87 /* TI TLV320AIC23B audio codec */
71#define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */
72#define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */
73#define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */
74#define I2C_DRIVERID_AU8522 97 /* Auvitek au8522 */
75
76#define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */
77 40
78/* 41/*
79 * ---- Adapter types ---------------------------------------------------- 42 * ---- Adapter types ----------------------------------------------------
@@ -88,6 +51,7 @@
88#define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */ 51#define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */
89#define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */ 52#define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */
90#define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */ 53#define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */
54#define I2C_HW_B_CX231XX 0x010024 /* Conexant CX231XX USB based cards */
91#define I2C_HW_B_HDPVR 0x010025 /* Hauppauge HD PVR */ 55#define I2C_HW_B_HDPVR 0x010025 /* Hauppauge HD PVR */
92 56
93/* --- SGI adapters */ 57/* --- SGI adapters */
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index c86c3b07604c..00ee11eb9092 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -353,8 +353,8 @@ struct i2c_adapter {
353 void *algo_data; 353 void *algo_data;
354 354
355 /* --- administration stuff. */ 355 /* --- administration stuff. */
356 int (*client_register)(struct i2c_client *); 356 int (*client_register)(struct i2c_client *) __deprecated;
357 int (*client_unregister)(struct i2c_client *); 357 int (*client_unregister)(struct i2c_client *) __deprecated;
358 358
359 /* data fields that are valid for all devices */ 359 /* data fields that are valid for all devices */
360 u8 level; /* nesting level for lockdep */ 360 u8 level; /* nesting level for lockdep */
diff --git a/include/linux/i2c/s6000.h b/include/linux/i2c/s6000.h
new file mode 100644
index 000000000000..d9b34bfdae76
--- /dev/null
+++ b/include/linux/i2c/s6000.h
@@ -0,0 +1,10 @@
1#ifndef __LINUX_I2C_S6000_H
2#define __LINUX_I2C_S6000_H
3
4struct s6_i2c_platform_data {
5 const char *clock; /* the clock to use */
6 int bus_num; /* the bus number to register */
7};
8
9#endif
10
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index 77214ead1a36..aa8c53171233 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -164,6 +164,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
164#define DMA_GCMD_QIE (((u32)1) << 26) 164#define DMA_GCMD_QIE (((u32)1) << 26)
165#define DMA_GCMD_SIRTP (((u32)1) << 24) 165#define DMA_GCMD_SIRTP (((u32)1) << 24)
166#define DMA_GCMD_IRE (((u32) 1) << 25) 166#define DMA_GCMD_IRE (((u32) 1) << 25)
167#define DMA_GCMD_CFI (((u32) 1) << 23)
167 168
168/* GSTS_REG */ 169/* GSTS_REG */
169#define DMA_GSTS_TES (((u32)1) << 31) 170#define DMA_GSTS_TES (((u32)1) << 31)
@@ -174,6 +175,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
174#define DMA_GSTS_QIES (((u32)1) << 26) 175#define DMA_GSTS_QIES (((u32)1) << 26)
175#define DMA_GSTS_IRTPS (((u32)1) << 24) 176#define DMA_GSTS_IRTPS (((u32)1) << 24)
176#define DMA_GSTS_IRES (((u32)1) << 25) 177#define DMA_GSTS_IRES (((u32)1) << 25)
178#define DMA_GSTS_CFIS (((u32)1) << 23)
177 179
178/* CCMD_REG */ 180/* CCMD_REG */
179#define DMA_CCMD_ICC (((u64)1) << 63) 181#define DMA_CCMD_ICC (((u64)1) << 63)
@@ -284,6 +286,14 @@ struct iommu_flush {
284 unsigned int size_order, u64 type, int non_present_entry_flush); 286 unsigned int size_order, u64 type, int non_present_entry_flush);
285}; 287};
286 288
289enum {
290 SR_DMAR_FECTL_REG,
291 SR_DMAR_FEDATA_REG,
292 SR_DMAR_FEADDR_REG,
293 SR_DMAR_FEUADDR_REG,
294 MAX_SR_DMAR_REGS
295};
296
287struct intel_iommu { 297struct intel_iommu {
288 void __iomem *reg; /* Pointer to hardware regs, virtual addr */ 298 void __iomem *reg; /* Pointer to hardware regs, virtual addr */
289 u64 cap; 299 u64 cap;
@@ -304,6 +314,8 @@ struct intel_iommu {
304 struct iommu_flush flush; 314 struct iommu_flush flush;
305#endif 315#endif
306 struct q_inval *qi; /* Queued invalidation info */ 316 struct q_inval *qi; /* Queued invalidation info */
317 u32 *iommu_state; /* Store iommu states between suspend and resume.*/
318
307#ifdef CONFIG_INTR_REMAP 319#ifdef CONFIG_INTR_REMAP
308 struct ir_table *ir_table; /* Interrupt remapping info */ 320 struct ir_table *ir_table; /* Interrupt remapping info */
309#endif 321#endif
@@ -322,6 +334,7 @@ extern int alloc_iommu(struct dmar_drhd_unit *drhd);
322extern void free_iommu(struct intel_iommu *iommu); 334extern void free_iommu(struct intel_iommu *iommu);
323extern int dmar_enable_qi(struct intel_iommu *iommu); 335extern int dmar_enable_qi(struct intel_iommu *iommu);
324extern void dmar_disable_qi(struct intel_iommu *iommu); 336extern void dmar_disable_qi(struct intel_iommu *iommu);
337extern int dmar_reenable_qi(struct intel_iommu *iommu);
325extern void qi_global_iec(struct intel_iommu *iommu); 338extern void qi_global_iec(struct intel_iommu *iommu);
326 339
327extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, 340extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid,
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index ce2c07d99fc3..8a9613d0c674 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -299,6 +299,7 @@ extern void softirq_init(void);
299#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) 299#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
300extern void raise_softirq_irqoff(unsigned int nr); 300extern void raise_softirq_irqoff(unsigned int nr);
301extern void raise_softirq(unsigned int nr); 301extern void raise_softirq(unsigned int nr);
302extern void wakeup_softirqd(void);
302 303
303/* This is the worklist that queues up per-cpu softirq work. 304/* This is the worklist that queues up per-cpu softirq work.
304 * 305 *
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h
index ea330f9e7100..3bf40e246a80 100644
--- a/include/linux/ipc_namespace.h
+++ b/include/linux/ipc_namespace.h
@@ -25,7 +25,7 @@ struct ipc_ids {
25}; 25};
26 26
27struct ipc_namespace { 27struct ipc_namespace {
28 struct kref kref; 28 atomic_t count;
29 struct ipc_ids ids[3]; 29 struct ipc_ids ids[3];
30 30
31 int sem_ctls[4]; 31 int sem_ctls[4];
@@ -44,25 +44,57 @@ struct ipc_namespace {
44 int shm_tot; 44 int shm_tot;
45 45
46 struct notifier_block ipcns_nb; 46 struct notifier_block ipcns_nb;
47
48 /* The kern_mount of the mqueuefs sb. We take a ref on it */
49 struct vfsmount *mq_mnt;
50
51 /* # queues in this ns, protected by mq_lock */
52 unsigned int mq_queues_count;
53
54 /* next fields are set through sysctl */
55 unsigned int mq_queues_max; /* initialized to DFLT_QUEUESMAX */
56 unsigned int mq_msg_max; /* initialized to DFLT_MSGMAX */
57 unsigned int mq_msgsize_max; /* initialized to DFLT_MSGSIZEMAX */
58
47}; 59};
48 60
49extern struct ipc_namespace init_ipc_ns; 61extern struct ipc_namespace init_ipc_ns;
50extern atomic_t nr_ipc_ns; 62extern atomic_t nr_ipc_ns;
51 63
52#ifdef CONFIG_SYSVIPC 64extern spinlock_t mq_lock;
65#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC)
53#define INIT_IPC_NS(ns) .ns = &init_ipc_ns, 66#define INIT_IPC_NS(ns) .ns = &init_ipc_ns,
67#else
68#define INIT_IPC_NS(ns)
69#endif
54 70
71#ifdef CONFIG_SYSVIPC
55extern int register_ipcns_notifier(struct ipc_namespace *); 72extern int register_ipcns_notifier(struct ipc_namespace *);
56extern int cond_register_ipcns_notifier(struct ipc_namespace *); 73extern int cond_register_ipcns_notifier(struct ipc_namespace *);
57extern void unregister_ipcns_notifier(struct ipc_namespace *); 74extern void unregister_ipcns_notifier(struct ipc_namespace *);
58extern int ipcns_notify(unsigned long); 75extern int ipcns_notify(unsigned long);
59
60#else /* CONFIG_SYSVIPC */ 76#else /* CONFIG_SYSVIPC */
61#define INIT_IPC_NS(ns) 77static inline int register_ipcns_notifier(struct ipc_namespace *ns)
78{ return 0; }
79static inline int cond_register_ipcns_notifier(struct ipc_namespace *ns)
80{ return 0; }
81static inline void unregister_ipcns_notifier(struct ipc_namespace *ns) { }
82static inline int ipcns_notify(unsigned long l) { return 0; }
62#endif /* CONFIG_SYSVIPC */ 83#endif /* CONFIG_SYSVIPC */
63 84
64#if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS) 85#ifdef CONFIG_POSIX_MQUEUE
65extern void free_ipc_ns(struct kref *kref); 86extern int mq_init_ns(struct ipc_namespace *ns);
87/* default values */
88#define DFLT_QUEUESMAX 256 /* max number of message queues */
89#define DFLT_MSGMAX 10 /* max number of messages in each queue */
90#define HARD_MSGMAX (131072/sizeof(void *))
91#define DFLT_MSGSIZEMAX 8192 /* max message size */
92#else
93static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; }
94#endif
95
96#if defined(CONFIG_IPC_NS)
97extern void free_ipc_ns(struct ipc_namespace *ns);
66extern struct ipc_namespace *copy_ipcs(unsigned long flags, 98extern struct ipc_namespace *copy_ipcs(unsigned long flags,
67 struct ipc_namespace *ns); 99 struct ipc_namespace *ns);
68extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, 100extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
@@ -72,14 +104,11 @@ extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
72static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) 104static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
73{ 105{
74 if (ns) 106 if (ns)
75 kref_get(&ns->kref); 107 atomic_inc(&ns->count);
76 return ns; 108 return ns;
77} 109}
78 110
79static inline void put_ipc_ns(struct ipc_namespace *ns) 111extern void put_ipc_ns(struct ipc_namespace *ns);
80{
81 kref_put(&ns->kref, free_ipc_ns);
82}
83#else 112#else
84static inline struct ipc_namespace *copy_ipcs(unsigned long flags, 113static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
85 struct ipc_namespace *ns) 114 struct ipc_namespace *ns)
@@ -99,4 +128,18 @@ static inline void put_ipc_ns(struct ipc_namespace *ns)
99{ 128{
100} 129}
101#endif 130#endif
131
132#ifdef CONFIG_POSIX_MQUEUE_SYSCTL
133
134struct ctl_table_header;
135extern struct ctl_table_header *mq_register_sysctl_table(void);
136
137#else /* CONFIG_POSIX_MQUEUE_SYSCTL */
138
139static inline struct ctl_table_header *mq_register_sysctl_table(void)
140{
141 return NULL;
142}
143
144#endif /* CONFIG_POSIX_MQUEUE_SYSCTL */
102#endif 145#endif
diff --git a/include/linux/key.h b/include/linux/key.h
index 21d32a142c00..e544f466d69a 100644
--- a/include/linux/key.h
+++ b/include/linux/key.h
@@ -20,6 +20,7 @@
20#include <linux/rbtree.h> 20#include <linux/rbtree.h>
21#include <linux/rcupdate.h> 21#include <linux/rcupdate.h>
22#include <linux/sysctl.h> 22#include <linux/sysctl.h>
23#include <linux/rwsem.h>
23#include <asm/atomic.h> 24#include <asm/atomic.h>
24 25
25#ifdef __KERNEL__ 26#ifdef __KERNEL__
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
index 2ec6cc14a114..bcd9c07848be 100644
--- a/include/linux/kprobes.h
+++ b/include/linux/kprobes.h
@@ -94,12 +94,16 @@ struct kprobe {
94 /* Called after addr is executed, unless... */ 94 /* Called after addr is executed, unless... */
95 kprobe_post_handler_t post_handler; 95 kprobe_post_handler_t post_handler;
96 96
97 /* ... called if executing addr causes a fault (eg. page fault). 97 /*
98 * Return 1 if it handled fault, otherwise kernel will see it. */ 98 * ... called if executing addr causes a fault (eg. page fault).
99 * Return 1 if it handled fault, otherwise kernel will see it.
100 */
99 kprobe_fault_handler_t fault_handler; 101 kprobe_fault_handler_t fault_handler;
100 102
101 /* ... called if breakpoint trap occurs in probe handler. 103 /*
102 * Return 1 if it handled break, otherwise kernel will see it. */ 104 * ... called if breakpoint trap occurs in probe handler.
105 * Return 1 if it handled break, otherwise kernel will see it.
106 */
103 kprobe_break_handler_t break_handler; 107 kprobe_break_handler_t break_handler;
104 108
105 /* Saved opcode (which has been replaced with breakpoint) */ 109 /* Saved opcode (which has been replaced with breakpoint) */
@@ -108,18 +112,28 @@ struct kprobe {
108 /* copy of the original instruction */ 112 /* copy of the original instruction */
109 struct arch_specific_insn ainsn; 113 struct arch_specific_insn ainsn;
110 114
111 /* Indicates various status flags. Protected by kprobe_mutex. */ 115 /*
116 * Indicates various status flags.
117 * Protected by kprobe_mutex after this kprobe is registered.
118 */
112 u32 flags; 119 u32 flags;
113}; 120};
114 121
115/* Kprobe status flags */ 122/* Kprobe status flags */
116#define KPROBE_FLAG_GONE 1 /* breakpoint has already gone */ 123#define KPROBE_FLAG_GONE 1 /* breakpoint has already gone */
124#define KPROBE_FLAG_DISABLED 2 /* probe is temporarily disabled */
117 125
126/* Has this kprobe gone ? */
118static inline int kprobe_gone(struct kprobe *p) 127static inline int kprobe_gone(struct kprobe *p)
119{ 128{
120 return p->flags & KPROBE_FLAG_GONE; 129 return p->flags & KPROBE_FLAG_GONE;
121} 130}
122 131
132/* Is this kprobe disabled ? */
133static inline int kprobe_disabled(struct kprobe *p)
134{
135 return p->flags & (KPROBE_FLAG_DISABLED | KPROBE_FLAG_GONE);
136}
123/* 137/*
124 * Special probe type that uses setjmp-longjmp type tricks to resume 138 * Special probe type that uses setjmp-longjmp type tricks to resume
125 * execution at a specified entry with a matching prototype corresponding 139 * execution at a specified entry with a matching prototype corresponding
@@ -279,6 +293,9 @@ void unregister_kretprobes(struct kretprobe **rps, int num);
279void kprobe_flush_task(struct task_struct *tk); 293void kprobe_flush_task(struct task_struct *tk);
280void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); 294void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head);
281 295
296int disable_kprobe(struct kprobe *kp);
297int enable_kprobe(struct kprobe *kp);
298
282#else /* !CONFIG_KPROBES: */ 299#else /* !CONFIG_KPROBES: */
283 300
284static inline int kprobes_built_in(void) 301static inline int kprobes_built_in(void)
@@ -345,5 +362,30 @@ static inline void unregister_kretprobes(struct kretprobe **rps, int num)
345static inline void kprobe_flush_task(struct task_struct *tk) 362static inline void kprobe_flush_task(struct task_struct *tk)
346{ 363{
347} 364}
365static inline int disable_kprobe(struct kprobe *kp)
366{
367 return -ENOSYS;
368}
369static inline int enable_kprobe(struct kprobe *kp)
370{
371 return -ENOSYS;
372}
348#endif /* CONFIG_KPROBES */ 373#endif /* CONFIG_KPROBES */
374static inline int disable_kretprobe(struct kretprobe *rp)
375{
376 return disable_kprobe(&rp->kp);
377}
378static inline int enable_kretprobe(struct kretprobe *rp)
379{
380 return enable_kprobe(&rp->kp);
381}
382static inline int disable_jprobe(struct jprobe *jp)
383{
384 return disable_kprobe(&jp->kp);
385}
386static inline int enable_jprobe(struct jprobe *jp)
387{
388 return enable_kprobe(&jp->kp);
389}
390
349#endif /* _LINUX_KPROBES_H */ 391#endif /* _LINUX_KPROBES_H */
diff --git a/include/linux/leds-bd2802.h b/include/linux/leds-bd2802.h
new file mode 100644
index 000000000000..42f854a1a199
--- /dev/null
+++ b/include/linux/leds-bd2802.h
@@ -0,0 +1,26 @@
1/*
2 * leds-bd2802.h - RGB LED Driver
3 *
4 * Copyright (C) 2009 Samsung Electronics
5 * Kim Kyuwon <q1.kim@samsung.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * Datasheet: http://www.rohm.com/products/databook/driver/pdf/bd2802gu-e.pdf
12 *
13 */
14#ifndef _LEDS_BD2802_H_
15#define _LEDS_BD2802_H_
16
17struct bd2802_led_platform_data{
18 int reset_gpio;
19 u8 rgb_time;
20};
21
22#define RGB_TIME(slopedown, slopeup, waveform) \
23 ((slopedown) << 6 | (slopeup) << 4 | (waveform))
24
25#endif /* _LEDS_BD2802_H_ */
26
diff --git a/include/linux/leds.h b/include/linux/leds.h
index 24489da701e3..376fe07732ea 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -30,6 +30,7 @@ enum led_brightness {
30struct led_classdev { 30struct led_classdev {
31 const char *name; 31 const char *name;
32 int brightness; 32 int brightness;
33 int max_brightness;
33 int flags; 34 int flags;
34 35
35 /* Lower 16 bits reflect status */ 36 /* Lower 16 bits reflect status */
@@ -140,7 +141,8 @@ struct gpio_led {
140 const char *name; 141 const char *name;
141 const char *default_trigger; 142 const char *default_trigger;
142 unsigned gpio; 143 unsigned gpio;
143 u8 active_low; 144 u8 active_low : 1;
145 u8 retain_state_suspended : 1;
144}; 146};
145 147
146struct gpio_led_platform_data { 148struct gpio_led_platform_data {
diff --git a/include/linux/leds_pwm.h b/include/linux/leds_pwm.h
new file mode 100644
index 000000000000..33a071167489
--- /dev/null
+++ b/include/linux/leds_pwm.h
@@ -0,0 +1,21 @@
1/*
2 * PWM LED driver data - see drivers/leds/leds-pwm.c
3 */
4#ifndef __LINUX_LEDS_PWM_H
5#define __LINUX_LEDS_PWM_H
6
7struct led_pwm {
8 const char *name;
9 const char *default_trigger;
10 unsigned pwm_id;
11 u8 active_low;
12 unsigned max_brightness;
13 unsigned pwm_period_ns;
14};
15
16struct led_pwm_platform_data {
17 int num_leds;
18 struct led_pwm *leds;
19};
20
21#endif
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h
index 7dc5b6cb44cd..d39ed1cc5fbf 100644
--- a/include/linux/lockd/xdr.h
+++ b/include/linux/lockd/xdr.h
@@ -25,13 +25,13 @@ struct svc_rqst;
25#define NLM_MAXCOOKIELEN 32 25#define NLM_MAXCOOKIELEN 32
26#define NLM_MAXSTRLEN 1024 26#define NLM_MAXSTRLEN 1024
27 27
28#define nlm_granted __constant_htonl(NLM_LCK_GRANTED) 28#define nlm_granted cpu_to_be32(NLM_LCK_GRANTED)
29#define nlm_lck_denied __constant_htonl(NLM_LCK_DENIED) 29#define nlm_lck_denied cpu_to_be32(NLM_LCK_DENIED)
30#define nlm_lck_denied_nolocks __constant_htonl(NLM_LCK_DENIED_NOLOCKS) 30#define nlm_lck_denied_nolocks cpu_to_be32(NLM_LCK_DENIED_NOLOCKS)
31#define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED) 31#define nlm_lck_blocked cpu_to_be32(NLM_LCK_BLOCKED)
32#define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD) 32#define nlm_lck_denied_grace_period cpu_to_be32(NLM_LCK_DENIED_GRACE_PERIOD)
33 33
34#define nlm_drop_reply __constant_htonl(30000) 34#define nlm_drop_reply cpu_to_be32(30000)
35 35
36/* Lock info passed via NLM */ 36/* Lock info passed via NLM */
37struct nlm_lock { 37struct nlm_lock {
diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h
index 12bfe09de2b1..7353821341ed 100644
--- a/include/linux/lockd/xdr4.h
+++ b/include/linux/lockd/xdr4.h
@@ -15,11 +15,11 @@
15#include <linux/lockd/xdr.h> 15#include <linux/lockd/xdr.h>
16 16
17/* error codes new to NLMv4 */ 17/* error codes new to NLMv4 */
18#define nlm4_deadlock __constant_htonl(NLM_DEADLCK) 18#define nlm4_deadlock cpu_to_be32(NLM_DEADLCK)
19#define nlm4_rofs __constant_htonl(NLM_ROFS) 19#define nlm4_rofs cpu_to_be32(NLM_ROFS)
20#define nlm4_stale_fh __constant_htonl(NLM_STALE_FH) 20#define nlm4_stale_fh cpu_to_be32(NLM_STALE_FH)
21#define nlm4_fbig __constant_htonl(NLM_FBIG) 21#define nlm4_fbig cpu_to_be32(NLM_FBIG)
22#define nlm4_failed __constant_htonl(NLM_FAILED) 22#define nlm4_failed cpu_to_be32(NLM_FAILED)
23 23
24 24
25 25
diff --git a/include/linux/mg_disk.h b/include/linux/mg_disk.h
new file mode 100644
index 000000000000..1f76b1ebf627
--- /dev/null
+++ b/include/linux/mg_disk.h
@@ -0,0 +1,206 @@
1/*
2 * include/linux/mg_disk.c
3 *
4 * Support for the mGine m[g]flash IO mode.
5 * Based on legacy hd.c
6 *
7 * (c) 2008 mGine Co.,LTD
8 * (c) 2008 unsik Kim <donari75@gmail.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#ifndef __MG_DISK_H__
16#define __MG_DISK_H__
17
18#include <linux/blkdev.h>
19#include <linux/ata.h>
20
21/* name for block device */
22#define MG_DISK_NAME "mgd"
23/* name for platform device */
24#define MG_DEV_NAME "mg_disk"
25
26#define MG_DISK_MAJ 0
27#define MG_DISK_MAX_PART 16
28#define MG_SECTOR_SIZE 512
29#define MG_MAX_SECTS 256
30
31/* Register offsets */
32#define MG_BUFF_OFFSET 0x8000
33#define MG_STORAGE_BUFFER_SIZE 0x200
34#define MG_REG_OFFSET 0xC000
35#define MG_REG_FEATURE (MG_REG_OFFSET + 2) /* write case */
36#define MG_REG_ERROR (MG_REG_OFFSET + 2) /* read case */
37#define MG_REG_SECT_CNT (MG_REG_OFFSET + 4)
38#define MG_REG_SECT_NUM (MG_REG_OFFSET + 6)
39#define MG_REG_CYL_LOW (MG_REG_OFFSET + 8)
40#define MG_REG_CYL_HIGH (MG_REG_OFFSET + 0xA)
41#define MG_REG_DRV_HEAD (MG_REG_OFFSET + 0xC)
42#define MG_REG_COMMAND (MG_REG_OFFSET + 0xE) /* write case */
43#define MG_REG_STATUS (MG_REG_OFFSET + 0xE) /* read case */
44#define MG_REG_DRV_CTRL (MG_REG_OFFSET + 0x10)
45#define MG_REG_BURST_CTRL (MG_REG_OFFSET + 0x12)
46
47/* "Drive Select/Head Register" bit values */
48#define MG_REG_HEAD_MUST_BE_ON 0xA0 /* These 2 bits are always on */
49#define MG_REG_HEAD_DRIVE_MASTER (0x00 | MG_REG_HEAD_MUST_BE_ON)
50#define MG_REG_HEAD_DRIVE_SLAVE (0x10 | MG_REG_HEAD_MUST_BE_ON)
51#define MG_REG_HEAD_LBA_MODE (0x40 | MG_REG_HEAD_MUST_BE_ON)
52
53
54/* "Device Control Register" bit values */
55#define MG_REG_CTRL_INTR_ENABLE 0x0
56#define MG_REG_CTRL_INTR_DISABLE (0x1<<1)
57#define MG_REG_CTRL_RESET (0x1<<2)
58#define MG_REG_CTRL_INTR_POLA_ACTIVE_HIGH 0x0
59#define MG_REG_CTRL_INTR_POLA_ACTIVE_LOW (0x1<<4)
60#define MG_REG_CTRL_DPD_POLA_ACTIVE_LOW 0x0
61#define MG_REG_CTRL_DPD_POLA_ACTIVE_HIGH (0x1<<5)
62#define MG_REG_CTRL_DPD_DISABLE 0x0
63#define MG_REG_CTRL_DPD_ENABLE (0x1<<6)
64
65/* Status register bit */
66/* error bit in status register */
67#define MG_REG_STATUS_BIT_ERROR 0x01
68/* corrected error in status register */
69#define MG_REG_STATUS_BIT_CORRECTED_ERROR 0x04
70/* data request bit in status register */
71#define MG_REG_STATUS_BIT_DATA_REQ 0x08
72/* DSC - Drive Seek Complete */
73#define MG_REG_STATUS_BIT_SEEK_DONE 0x10
74/* DWF - Drive Write Fault */
75#define MG_REG_STATUS_BIT_WRITE_FAULT 0x20
76#define MG_REG_STATUS_BIT_READY 0x40
77#define MG_REG_STATUS_BIT_BUSY 0x80
78
79/* handy status */
80#define MG_STAT_READY (MG_REG_STATUS_BIT_READY | MG_REG_STATUS_BIT_SEEK_DONE)
81#define MG_READY_OK(s) (((s) & (MG_STAT_READY | \
82 (MG_REG_STATUS_BIT_BUSY | \
83 MG_REG_STATUS_BIT_WRITE_FAULT | \
84 MG_REG_STATUS_BIT_ERROR))) == MG_STAT_READY)
85
86/* Error register */
87#define MG_REG_ERR_AMNF 0x01
88#define MG_REG_ERR_ABRT 0x04
89#define MG_REG_ERR_IDNF 0x10
90#define MG_REG_ERR_UNC 0x40
91#define MG_REG_ERR_BBK 0x80
92
93/* error code for others */
94#define MG_ERR_NONE 0
95#define MG_ERR_TIMEOUT 0x100
96#define MG_ERR_INIT_STAT 0x101
97#define MG_ERR_TRANSLATION 0x102
98#define MG_ERR_CTRL_RST 0x103
99#define MG_ERR_INV_STAT 0x104
100#define MG_ERR_RSTOUT 0x105
101
102#define MG_MAX_ERRORS 6 /* Max read/write errors */
103
104/* command */
105#define MG_CMD_RD 0x20
106#define MG_CMD_WR 0x30
107#define MG_CMD_SLEEP 0x99
108#define MG_CMD_WAKEUP 0xC3
109#define MG_CMD_ID 0xEC
110#define MG_CMD_WR_CONF 0x3C
111#define MG_CMD_RD_CONF 0x40
112
113/* operation mode */
114#define MG_OP_CASCADE (1 << 0)
115#define MG_OP_CASCADE_SYNC_RD (1 << 1)
116#define MG_OP_CASCADE_SYNC_WR (1 << 2)
117#define MG_OP_INTERLEAVE (1 << 3)
118
119/* synchronous */
120#define MG_BURST_LAT_4 (3 << 4)
121#define MG_BURST_LAT_5 (4 << 4)
122#define MG_BURST_LAT_6 (5 << 4)
123#define MG_BURST_LAT_7 (6 << 4)
124#define MG_BURST_LAT_8 (7 << 4)
125#define MG_BURST_LEN_4 (1 << 1)
126#define MG_BURST_LEN_8 (2 << 1)
127#define MG_BURST_LEN_16 (3 << 1)
128#define MG_BURST_LEN_32 (4 << 1)
129#define MG_BURST_LEN_CONT (0 << 1)
130
131/* timeout value (unit: ms) */
132#define MG_TMAX_CONF_TO_CMD 1
133#define MG_TMAX_WAIT_RD_DRQ 10
134#define MG_TMAX_WAIT_WR_DRQ 500
135#define MG_TMAX_RST_TO_BUSY 10
136#define MG_TMAX_HDRST_TO_RDY 500
137#define MG_TMAX_SWRST_TO_RDY 500
138#define MG_TMAX_RSTOUT 3000
139
140/* device attribution */
141/* use mflash as boot device */
142#define MG_BOOT_DEV (1 << 0)
143/* use mflash as storage device */
144#define MG_STORAGE_DEV (1 << 1)
145/* same as MG_STORAGE_DEV, but bootloader already done reset sequence */
146#define MG_STORAGE_DEV_SKIP_RST (1 << 2)
147
148#define MG_DEV_MASK (MG_BOOT_DEV | MG_STORAGE_DEV | MG_STORAGE_DEV_SKIP_RST)
149
150/* names of GPIO resource */
151#define MG_RST_PIN "mg_rst"
152/* except MG_BOOT_DEV, reset-out pin should be assigned */
153#define MG_RSTOUT_PIN "mg_rstout"
154
155/* private driver data */
156struct mg_drv_data {
157 /* disk resource */
158 u32 use_polling;
159
160 /* device attribution */
161 u32 dev_attr;
162
163 /* internally used */
164 struct mg_host *host;
165};
166
167/* main structure for mflash driver */
168struct mg_host {
169 struct device *dev;
170
171 struct request_queue *breq;
172 spinlock_t lock;
173 struct gendisk *gd;
174
175 struct timer_list timer;
176 void (*mg_do_intr) (struct mg_host *);
177
178 u16 id[ATA_ID_WORDS];
179
180 u16 cyls;
181 u16 heads;
182 u16 sectors;
183 u32 n_sectors;
184 u32 nres_sectors;
185
186 void __iomem *dev_base;
187 unsigned int irq;
188 unsigned int rst;
189 unsigned int rstout;
190
191 u32 major;
192 u32 error;
193};
194
195/*
196 * Debugging macro and defines
197 */
198#undef DO_MG_DEBUG
199#ifdef DO_MG_DEBUG
200# define MG_DBG(fmt, args...) \
201 printk(KERN_DEBUG "%s:%d "fmt, __func__, __LINE__, ##args)
202#else /* CONFIG_MG_DEBUG */
203# define MG_DBG(fmt, args...) do { } while (0)
204#endif /* CONFIG_MG_DEBUG */
205
206#endif
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 3aa5d77c2cdb..5675b63a0631 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -11,6 +11,7 @@
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/uio.h> 12#include <linux/uio.h>
13#include <linux/notifier.h> 13#include <linux/notifier.h>
14#include <linux/device.h>
14 15
15#include <linux/mtd/compatmac.h> 16#include <linux/mtd/compatmac.h>
16#include <mtd/mtd-abi.h> 17#include <mtd/mtd-abi.h>
@@ -162,6 +163,20 @@ struct mtd_info {
162 /* We probably shouldn't allow XIP if the unpoint isn't a NULL */ 163 /* We probably shouldn't allow XIP if the unpoint isn't a NULL */
163 void (*unpoint) (struct mtd_info *mtd, loff_t from, size_t len); 164 void (*unpoint) (struct mtd_info *mtd, loff_t from, size_t len);
164 165
166 /* Allow NOMMU mmap() to directly map the device (if not NULL)
167 * - return the address to which the offset maps
168 * - return -ENOSYS to indicate refusal to do the mapping
169 */
170 unsigned long (*get_unmapped_area) (struct mtd_info *mtd,
171 unsigned long len,
172 unsigned long offset,
173 unsigned long flags);
174
175 /* Backing device capabilities for this device
176 * - provides mmap capabilities
177 */
178 struct backing_dev_info *backing_dev_info;
179
165 180
166 int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 181 int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
167 int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); 182 int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
@@ -223,6 +238,7 @@ struct mtd_info {
223 void *priv; 238 void *priv;
224 239
225 struct module *owner; 240 struct module *owner;
241 struct device dev;
226 int usecount; 242 int usecount;
227 243
228 /* If the driver is something smart, like UBI, it may need to maintain 244 /* If the driver is something smart, like UBI, it may need to maintain
@@ -233,6 +249,11 @@ struct mtd_info {
233 void (*put_device) (struct mtd_info *mtd); 249 void (*put_device) (struct mtd_info *mtd);
234}; 250};
235 251
252static inline struct mtd_info *dev_to_mtd(struct device *dev)
253{
254 return dev ? container_of(dev, struct mtd_info, dev) : NULL;
255}
256
236static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) 257static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd)
237{ 258{
238 if (mtd->erasesize_shift) 259 if (mtd->erasesize_shift)
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index db5b63da2a7e..7efb9be34662 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -43,8 +43,8 @@ extern void nand_wait_ready(struct mtd_info *mtd);
43 * is supported now. If you add a chip with bigger oobsize/page 43 * is supported now. If you add a chip with bigger oobsize/page
44 * adjust this accordingly. 44 * adjust this accordingly.
45 */ 45 */
46#define NAND_MAX_OOBSIZE 64 46#define NAND_MAX_OOBSIZE 128
47#define NAND_MAX_PAGESIZE 2048 47#define NAND_MAX_PAGESIZE 4096
48 48
49/* 49/*
50 * Constants for hardware specific CLE/ALE/NCE function 50 * Constants for hardware specific CLE/ALE/NCE function
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h
index a45dd831b3f8..7535a74083b9 100644
--- a/include/linux/mtd/partitions.h
+++ b/include/linux/mtd/partitions.h
@@ -76,4 +76,16 @@ int __devinit of_mtd_parse_partitions(struct device *dev,
76 struct device_node *node, 76 struct device_node *node,
77 struct mtd_partition **pparts); 77 struct mtd_partition **pparts);
78 78
79#ifdef CONFIG_MTD_PARTITIONS
80static inline int mtd_has_partitions(void) { return 1; }
81#else
82static inline int mtd_has_partitions(void) { return 0; }
83#endif
84
85#ifdef CONFIG_MTD_CMDLINE_PARTS
86static inline int mtd_has_cmdlinepart(void) { return 1; }
87#else
88static inline int mtd_has_cmdlinepart(void) { return 0; }
89#endif
90
79#endif 91#endif
diff --git a/include/linux/nfs.h b/include/linux/nfs.h
index 54af92c1c70b..214d499718f7 100644
--- a/include/linux/nfs.h
+++ b/include/linux/nfs.h
@@ -109,7 +109,6 @@
109 NFSERR_FILE_OPEN = 10046, /* v4 */ 109 NFSERR_FILE_OPEN = 10046, /* v4 */
110 NFSERR_ADMIN_REVOKED = 10047, /* v4 */ 110 NFSERR_ADMIN_REVOKED = 10047, /* v4 */
111 NFSERR_CB_PATH_DOWN = 10048, /* v4 */ 111 NFSERR_CB_PATH_DOWN = 10048, /* v4 */
112 NFSERR_REPLAY_ME = 10049 /* v4 */
113}; 112};
114 113
115/* NFSv2 file types - beware, these are not the same in NFSv3 */ 114/* NFSv2 file types - beware, these are not the same in NFSv3 */
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
index b912311a56b1..e3f0cbcbd0db 100644
--- a/include/linux/nfs4.h
+++ b/include/linux/nfs4.h
@@ -21,6 +21,7 @@
21#define NFS4_FHSIZE 128 21#define NFS4_FHSIZE 128
22#define NFS4_MAXPATHLEN PATH_MAX 22#define NFS4_MAXPATHLEN PATH_MAX
23#define NFS4_MAXNAMLEN NAME_MAX 23#define NFS4_MAXNAMLEN NAME_MAX
24#define NFS4_MAX_SESSIONID_LEN 16
24 25
25#define NFS4_ACCESS_READ 0x0001 26#define NFS4_ACCESS_READ 0x0001
26#define NFS4_ACCESS_LOOKUP 0x0002 27#define NFS4_ACCESS_LOOKUP 0x0002
@@ -38,6 +39,7 @@
38#define NFS4_OPEN_RESULT_CONFIRM 0x0002 39#define NFS4_OPEN_RESULT_CONFIRM 0x0002
39#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004 40#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
40 41
42#define NFS4_SHARE_ACCESS_MASK 0x000F
41#define NFS4_SHARE_ACCESS_READ 0x0001 43#define NFS4_SHARE_ACCESS_READ 0x0001
42#define NFS4_SHARE_ACCESS_WRITE 0x0002 44#define NFS4_SHARE_ACCESS_WRITE 0x0002
43#define NFS4_SHARE_ACCESS_BOTH 0x0003 45#define NFS4_SHARE_ACCESS_BOTH 0x0003
@@ -45,6 +47,19 @@
45#define NFS4_SHARE_DENY_WRITE 0x0002 47#define NFS4_SHARE_DENY_WRITE 0x0002
46#define NFS4_SHARE_DENY_BOTH 0x0003 48#define NFS4_SHARE_DENY_BOTH 0x0003
47 49
50/* nfs41 */
51#define NFS4_SHARE_WANT_MASK 0xFF00
52#define NFS4_SHARE_WANT_NO_PREFERENCE 0x0000
53#define NFS4_SHARE_WANT_READ_DELEG 0x0100
54#define NFS4_SHARE_WANT_WRITE_DELEG 0x0200
55#define NFS4_SHARE_WANT_ANY_DELEG 0x0300
56#define NFS4_SHARE_WANT_NO_DELEG 0x0400
57#define NFS4_SHARE_WANT_CANCEL 0x0500
58
59#define NFS4_SHARE_WHEN_MASK 0xF0000
60#define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL 0x10000
61#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED 0x20000
62
48#define NFS4_SET_TO_SERVER_TIME 0 63#define NFS4_SET_TO_SERVER_TIME 0
49#define NFS4_SET_TO_CLIENT_TIME 1 64#define NFS4_SET_TO_CLIENT_TIME 1
50 65
@@ -88,6 +103,31 @@
88#define NFS4_ACE_GENERIC_EXECUTE 0x001200A0 103#define NFS4_ACE_GENERIC_EXECUTE 0x001200A0
89#define NFS4_ACE_MASK_ALL 0x001F01FF 104#define NFS4_ACE_MASK_ALL 0x001F01FF
90 105
106#define EXCHGID4_FLAG_SUPP_MOVED_REFER 0x00000001
107#define EXCHGID4_FLAG_SUPP_MOVED_MIGR 0x00000002
108#define EXCHGID4_FLAG_USE_NON_PNFS 0x00010000
109#define EXCHGID4_FLAG_USE_PNFS_MDS 0x00020000
110#define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000
111#define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A 0x40000000
112#define EXCHGID4_FLAG_CONFIRMED_R 0x80000000
113/*
114 * Since the validity of these bits depends on whether
115 * they're set in the argument or response, have separate
116 * invalid flag masks for arg (_A) and resp (_R).
117 */
118#define EXCHGID4_FLAG_MASK_A 0x40070003
119#define EXCHGID4_FLAG_MASK_R 0x80070003
120
121#define SEQ4_STATUS_CB_PATH_DOWN 0x00000001
122#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING 0x00000002
123#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED 0x00000004
124#define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED 0x00000008
125#define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED 0x00000010
126#define SEQ4_STATUS_ADMIN_STATE_REVOKED 0x00000020
127#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED 0x00000040
128#define SEQ4_STATUS_LEASE_MOVED 0x00000080
129#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED 0x00000100
130
91#define NFS4_MAX_UINT64 (~(u64)0) 131#define NFS4_MAX_UINT64 (~(u64)0)
92 132
93enum nfs4_acl_whotype { 133enum nfs4_acl_whotype {
@@ -154,6 +194,28 @@ enum nfs_opnum4 {
154 OP_VERIFY = 37, 194 OP_VERIFY = 37,
155 OP_WRITE = 38, 195 OP_WRITE = 38,
156 OP_RELEASE_LOCKOWNER = 39, 196 OP_RELEASE_LOCKOWNER = 39,
197
198 /* nfs41 */
199 OP_BACKCHANNEL_CTL = 40,
200 OP_BIND_CONN_TO_SESSION = 41,
201 OP_EXCHANGE_ID = 42,
202 OP_CREATE_SESSION = 43,
203 OP_DESTROY_SESSION = 44,
204 OP_FREE_STATEID = 45,
205 OP_GET_DIR_DELEGATION = 46,
206 OP_GETDEVICEINFO = 47,
207 OP_GETDEVICELIST = 48,
208 OP_LAYOUTCOMMIT = 49,
209 OP_LAYOUTGET = 50,
210 OP_LAYOUTRETURN = 51,
211 OP_SECINFO_NO_NAME = 52,
212 OP_SEQUENCE = 53,
213 OP_SET_SSV = 54,
214 OP_TEST_STATEID = 55,
215 OP_WANT_DELEGATION = 56,
216 OP_DESTROY_CLIENTID = 57,
217 OP_RECLAIM_COMPLETE = 58,
218
157 OP_ILLEGAL = 10044, 219 OP_ILLEGAL = 10044,
158}; 220};
159 221
@@ -230,7 +292,48 @@ enum nfsstat4 {
230 NFS4ERR_DEADLOCK = 10045, 292 NFS4ERR_DEADLOCK = 10045,
231 NFS4ERR_FILE_OPEN = 10046, 293 NFS4ERR_FILE_OPEN = 10046,
232 NFS4ERR_ADMIN_REVOKED = 10047, 294 NFS4ERR_ADMIN_REVOKED = 10047,
233 NFS4ERR_CB_PATH_DOWN = 10048 295 NFS4ERR_CB_PATH_DOWN = 10048,
296
297 /* nfs41 */
298 NFS4ERR_BADIOMODE = 10049,
299 NFS4ERR_BADLAYOUT = 10050,
300 NFS4ERR_BAD_SESSION_DIGEST = 10051,
301 NFS4ERR_BADSESSION = 10052,
302 NFS4ERR_BADSLOT = 10053,
303 NFS4ERR_COMPLETE_ALREADY = 10054,
304 NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
305 NFS4ERR_DELEG_ALREADY_WANTED = 10056,
306 NFS4ERR_BACK_CHAN_BUSY = 10057, /* backchan reqs outstanding */
307 NFS4ERR_LAYOUTTRYLATER = 10058,
308 NFS4ERR_LAYOUTUNAVAILABLE = 10059,
309 NFS4ERR_NOMATCHING_LAYOUT = 10060,
310 NFS4ERR_RECALLCONFLICT = 10061,
311 NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
312 NFS4ERR_SEQ_MISORDERED = 10063, /* unexpected seq.id in req */
313 NFS4ERR_SEQUENCE_POS = 10064, /* [CB_]SEQ. op not 1st op */
314 NFS4ERR_REQ_TOO_BIG = 10065, /* request too big */
315 NFS4ERR_REP_TOO_BIG = 10066, /* reply too big */
316 NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067, /* rep. not all cached */
317 NFS4ERR_RETRY_UNCACHED_REP = 10068, /* retry & rep. uncached */
318 NFS4ERR_UNSAFE_COMPOUND = 10069, /* retry/recovery too hard */
319 NFS4ERR_TOO_MANY_OPS = 10070, /* too many ops in [CB_]COMP */
320 NFS4ERR_OP_NOT_IN_SESSION = 10071, /* op needs [CB_]SEQ. op */
321 NFS4ERR_HASH_ALG_UNSUPP = 10072, /* hash alg. not supp. */
322 /* Error 10073 is unused. */
323 NFS4ERR_CLIENTID_BUSY = 10074, /* clientid has state */
324 NFS4ERR_PNFS_IO_HOLE = 10075, /* IO to _SPARSE file hole */
325 NFS4ERR_SEQ_FALSE_RETRY = 10076, /* retry not origional */
326 NFS4ERR_BAD_HIGH_SLOT = 10077, /* sequence arg bad */
327 NFS4ERR_DEADSESSION = 10078, /* persistent session dead */
328 NFS4ERR_ENCR_ALG_UNSUPP = 10079, /* SSV alg mismatch */
329 NFS4ERR_PNFS_NO_LAYOUT = 10080, /* direct I/O with no layout */
330 NFS4ERR_NOT_ONLY_OP = 10081, /* bad compound */
331 NFS4ERR_WRONG_CRED = 10082, /* permissions:state change */
332 NFS4ERR_WRONG_TYPE = 10083, /* current operation mismatch */
333 NFS4ERR_DIRDELEG_UNAVAIL = 10084, /* no directory delegation */
334 NFS4ERR_REJECT_DELEG = 10085, /* on callback */
335 NFS4ERR_RETURNCONFLICT = 10086, /* outstanding layoutreturn */
336 NFS4ERR_DELEG_REVOKED = 10087, /* deleg./layout revoked */
234}; 337};
235 338
236/* 339/*
@@ -265,7 +368,13 @@ enum opentype4 {
265enum createmode4 { 368enum createmode4 {
266 NFS4_CREATE_UNCHECKED = 0, 369 NFS4_CREATE_UNCHECKED = 0,
267 NFS4_CREATE_GUARDED = 1, 370 NFS4_CREATE_GUARDED = 1,
268 NFS4_CREATE_EXCLUSIVE = 2 371 NFS4_CREATE_EXCLUSIVE = 2,
372 /*
373 * New to NFSv4.1. If session is persistent,
374 * GUARDED4 MUST be used. Otherwise, use
375 * EXCLUSIVE4_1 instead of EXCLUSIVE4.
376 */
377 NFS4_CREATE_EXCLUSIVE4_1 = 3
269}; 378};
270 379
271enum limit_by4 { 380enum limit_by4 {
@@ -301,6 +410,8 @@ enum lock_type4 {
301#define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9) 410#define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9)
302#define FATTR4_WORD0_LEASE_TIME (1UL << 10) 411#define FATTR4_WORD0_LEASE_TIME (1UL << 10)
303#define FATTR4_WORD0_RDATTR_ERROR (1UL << 11) 412#define FATTR4_WORD0_RDATTR_ERROR (1UL << 11)
413/* Mandatory in NFSv4.1 */
414#define FATTR4_WORD2_SUPPATTR_EXCLCREAT (1UL << 11)
304 415
305/* Recommended Attributes */ 416/* Recommended Attributes */
306#define FATTR4_WORD0_ACL (1UL << 12) 417#define FATTR4_WORD0_ACL (1UL << 12)
@@ -391,6 +502,29 @@ enum {
391 NFSPROC4_CLNT_GETACL, 502 NFSPROC4_CLNT_GETACL,
392 NFSPROC4_CLNT_SETACL, 503 NFSPROC4_CLNT_SETACL,
393 NFSPROC4_CLNT_FS_LOCATIONS, 504 NFSPROC4_CLNT_FS_LOCATIONS,
505
506 /* nfs41 */
507 NFSPROC4_CLNT_EXCHANGE_ID,
508 NFSPROC4_CLNT_CREATE_SESSION,
509 NFSPROC4_CLNT_DESTROY_SESSION,
510 NFSPROC4_CLNT_SEQUENCE,
511 NFSPROC4_CLNT_GET_LEASE_TIME,
512};
513
514/* nfs41 types */
515struct nfs4_sessionid {
516 unsigned char data[NFS4_MAX_SESSIONID_LEN];
517};
518
519/* Create Session Flags */
520#define SESSION4_PERSIST 0x001
521#define SESSION4_BACK_CHAN 0x002
522#define SESSION4_RDMA 0x004
523
524enum state_protect_how4 {
525 SP4_NONE = 0,
526 SP4_MACH_CRED = 1,
527 SP4_SSV = 2
394}; 528};
395 529
396#endif 530#endif
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h
index 04b355c801d8..5bccaab81056 100644
--- a/include/linux/nfsd/cache.h
+++ b/include/linux/nfsd/cache.h
@@ -76,4 +76,12 @@ void nfsd_reply_cache_shutdown(void);
76int nfsd_cache_lookup(struct svc_rqst *, int); 76int nfsd_cache_lookup(struct svc_rqst *, int);
77void nfsd_cache_update(struct svc_rqst *, int, __be32 *); 77void nfsd_cache_update(struct svc_rqst *, int, __be32 *);
78 78
79#ifdef CONFIG_NFSD_V4
80void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp);
81#else /* CONFIG_NFSD_V4 */
82static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
83{
84}
85#endif /* CONFIG_NFSD_V4 */
86
79#endif /* NFSCACHE_H */ 87#endif /* NFSCACHE_H */
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
index e19f45991b2e..2b49d676d0c9 100644
--- a/include/linux/nfsd/nfsd.h
+++ b/include/linux/nfsd/nfsd.h
@@ -23,7 +23,7 @@
23/* 23/*
24 * nfsd version 24 * nfsd version
25 */ 25 */
26#define NFSD_SUPPORTED_MINOR_VERSION 0 26#define NFSD_SUPPORTED_MINOR_VERSION 1
27 27
28/* 28/*
29 * Flags for nfsd_permission 29 * Flags for nfsd_permission
@@ -53,6 +53,7 @@ typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
53extern struct svc_program nfsd_program; 53extern struct svc_program nfsd_program;
54extern struct svc_version nfsd_version2, nfsd_version3, 54extern struct svc_version nfsd_version2, nfsd_version3,
55 nfsd_version4; 55 nfsd_version4;
56extern u32 nfsd_supported_minorversion;
56extern struct mutex nfsd_mutex; 57extern struct mutex nfsd_mutex;
57extern struct svc_serv *nfsd_serv; 58extern struct svc_serv *nfsd_serv;
58 59
@@ -105,7 +106,7 @@ void nfsd_close(struct file *);
105__be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *, 106__be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *,
106 loff_t, struct kvec *, int, unsigned long *); 107 loff_t, struct kvec *, int, unsigned long *);
107__be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *, 108__be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *,
108 loff_t, struct kvec *,int, unsigned long, int *); 109 loff_t, struct kvec *,int, unsigned long *, int *);
109__be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *, 110__be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *,
110 char *, int *); 111 char *, int *);
111__be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *, 112__be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *,
@@ -149,6 +150,7 @@ int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
149 150
150enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL }; 151enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
151int nfsd_vers(int vers, enum vers_op change); 152int nfsd_vers(int vers, enum vers_op change);
153int nfsd_minorversion(u32 minorversion, enum vers_op change);
152void nfsd_reset_versions(void); 154void nfsd_reset_versions(void);
153int nfsd_create_serv(void); 155int nfsd_create_serv(void);
154 156
@@ -186,78 +188,119 @@ void nfsd_lockd_shutdown(void);
186/* 188/*
187 * These macros provide pre-xdr'ed values for faster operation. 189 * These macros provide pre-xdr'ed values for faster operation.
188 */ 190 */
189#define nfs_ok __constant_htonl(NFS_OK) 191#define nfs_ok cpu_to_be32(NFS_OK)
190#define nfserr_perm __constant_htonl(NFSERR_PERM) 192#define nfserr_perm cpu_to_be32(NFSERR_PERM)
191#define nfserr_noent __constant_htonl(NFSERR_NOENT) 193#define nfserr_noent cpu_to_be32(NFSERR_NOENT)
192#define nfserr_io __constant_htonl(NFSERR_IO) 194#define nfserr_io cpu_to_be32(NFSERR_IO)
193#define nfserr_nxio __constant_htonl(NFSERR_NXIO) 195#define nfserr_nxio cpu_to_be32(NFSERR_NXIO)
194#define nfserr_eagain __constant_htonl(NFSERR_EAGAIN) 196#define nfserr_eagain cpu_to_be32(NFSERR_EAGAIN)
195#define nfserr_acces __constant_htonl(NFSERR_ACCES) 197#define nfserr_acces cpu_to_be32(NFSERR_ACCES)
196#define nfserr_exist __constant_htonl(NFSERR_EXIST) 198#define nfserr_exist cpu_to_be32(NFSERR_EXIST)
197#define nfserr_xdev __constant_htonl(NFSERR_XDEV) 199#define nfserr_xdev cpu_to_be32(NFSERR_XDEV)
198#define nfserr_nodev __constant_htonl(NFSERR_NODEV) 200#define nfserr_nodev cpu_to_be32(NFSERR_NODEV)
199#define nfserr_notdir __constant_htonl(NFSERR_NOTDIR) 201#define nfserr_notdir cpu_to_be32(NFSERR_NOTDIR)
200#define nfserr_isdir __constant_htonl(NFSERR_ISDIR) 202#define nfserr_isdir cpu_to_be32(NFSERR_ISDIR)
201#define nfserr_inval __constant_htonl(NFSERR_INVAL) 203#define nfserr_inval cpu_to_be32(NFSERR_INVAL)
202#define nfserr_fbig __constant_htonl(NFSERR_FBIG) 204#define nfserr_fbig cpu_to_be32(NFSERR_FBIG)
203#define nfserr_nospc __constant_htonl(NFSERR_NOSPC) 205#define nfserr_nospc cpu_to_be32(NFSERR_NOSPC)
204#define nfserr_rofs __constant_htonl(NFSERR_ROFS) 206#define nfserr_rofs cpu_to_be32(NFSERR_ROFS)
205#define nfserr_mlink __constant_htonl(NFSERR_MLINK) 207#define nfserr_mlink cpu_to_be32(NFSERR_MLINK)
206#define nfserr_opnotsupp __constant_htonl(NFSERR_OPNOTSUPP) 208#define nfserr_opnotsupp cpu_to_be32(NFSERR_OPNOTSUPP)
207#define nfserr_nametoolong __constant_htonl(NFSERR_NAMETOOLONG) 209#define nfserr_nametoolong cpu_to_be32(NFSERR_NAMETOOLONG)
208#define nfserr_notempty __constant_htonl(NFSERR_NOTEMPTY) 210#define nfserr_notempty cpu_to_be32(NFSERR_NOTEMPTY)
209#define nfserr_dquot __constant_htonl(NFSERR_DQUOT) 211#define nfserr_dquot cpu_to_be32(NFSERR_DQUOT)
210#define nfserr_stale __constant_htonl(NFSERR_STALE) 212#define nfserr_stale cpu_to_be32(NFSERR_STALE)
211#define nfserr_remote __constant_htonl(NFSERR_REMOTE) 213#define nfserr_remote cpu_to_be32(NFSERR_REMOTE)
212#define nfserr_wflush __constant_htonl(NFSERR_WFLUSH) 214#define nfserr_wflush cpu_to_be32(NFSERR_WFLUSH)
213#define nfserr_badhandle __constant_htonl(NFSERR_BADHANDLE) 215#define nfserr_badhandle cpu_to_be32(NFSERR_BADHANDLE)
214#define nfserr_notsync __constant_htonl(NFSERR_NOT_SYNC) 216#define nfserr_notsync cpu_to_be32(NFSERR_NOT_SYNC)
215#define nfserr_badcookie __constant_htonl(NFSERR_BAD_COOKIE) 217#define nfserr_badcookie cpu_to_be32(NFSERR_BAD_COOKIE)
216#define nfserr_notsupp __constant_htonl(NFSERR_NOTSUPP) 218#define nfserr_notsupp cpu_to_be32(NFSERR_NOTSUPP)
217#define nfserr_toosmall __constant_htonl(NFSERR_TOOSMALL) 219#define nfserr_toosmall cpu_to_be32(NFSERR_TOOSMALL)
218#define nfserr_serverfault __constant_htonl(NFSERR_SERVERFAULT) 220#define nfserr_serverfault cpu_to_be32(NFSERR_SERVERFAULT)
219#define nfserr_badtype __constant_htonl(NFSERR_BADTYPE) 221#define nfserr_badtype cpu_to_be32(NFSERR_BADTYPE)
220#define nfserr_jukebox __constant_htonl(NFSERR_JUKEBOX) 222#define nfserr_jukebox cpu_to_be32(NFSERR_JUKEBOX)
221#define nfserr_denied __constant_htonl(NFSERR_DENIED) 223#define nfserr_denied cpu_to_be32(NFSERR_DENIED)
222#define nfserr_deadlock __constant_htonl(NFSERR_DEADLOCK) 224#define nfserr_deadlock cpu_to_be32(NFSERR_DEADLOCK)
223#define nfserr_expired __constant_htonl(NFSERR_EXPIRED) 225#define nfserr_expired cpu_to_be32(NFSERR_EXPIRED)
224#define nfserr_bad_cookie __constant_htonl(NFSERR_BAD_COOKIE) 226#define nfserr_bad_cookie cpu_to_be32(NFSERR_BAD_COOKIE)
225#define nfserr_same __constant_htonl(NFSERR_SAME) 227#define nfserr_same cpu_to_be32(NFSERR_SAME)
226#define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE) 228#define nfserr_clid_inuse cpu_to_be32(NFSERR_CLID_INUSE)
227#define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID) 229#define nfserr_stale_clientid cpu_to_be32(NFSERR_STALE_CLIENTID)
228#define nfserr_resource __constant_htonl(NFSERR_RESOURCE) 230#define nfserr_resource cpu_to_be32(NFSERR_RESOURCE)
229#define nfserr_moved __constant_htonl(NFSERR_MOVED) 231#define nfserr_moved cpu_to_be32(NFSERR_MOVED)
230#define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE) 232#define nfserr_nofilehandle cpu_to_be32(NFSERR_NOFILEHANDLE)
231#define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH) 233#define nfserr_minor_vers_mismatch cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
232#define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED) 234#define nfserr_share_denied cpu_to_be32(NFSERR_SHARE_DENIED)
233#define nfserr_stale_stateid __constant_htonl(NFSERR_STALE_STATEID) 235#define nfserr_stale_stateid cpu_to_be32(NFSERR_STALE_STATEID)
234#define nfserr_old_stateid __constant_htonl(NFSERR_OLD_STATEID) 236#define nfserr_old_stateid cpu_to_be32(NFSERR_OLD_STATEID)
235#define nfserr_bad_stateid __constant_htonl(NFSERR_BAD_STATEID) 237#define nfserr_bad_stateid cpu_to_be32(NFSERR_BAD_STATEID)
236#define nfserr_bad_seqid __constant_htonl(NFSERR_BAD_SEQID) 238#define nfserr_bad_seqid cpu_to_be32(NFSERR_BAD_SEQID)
237#define nfserr_symlink __constant_htonl(NFSERR_SYMLINK) 239#define nfserr_symlink cpu_to_be32(NFSERR_SYMLINK)
238#define nfserr_not_same __constant_htonl(NFSERR_NOT_SAME) 240#define nfserr_not_same cpu_to_be32(NFSERR_NOT_SAME)
239#define nfserr_restorefh __constant_htonl(NFSERR_RESTOREFH) 241#define nfserr_restorefh cpu_to_be32(NFSERR_RESTOREFH)
240#define nfserr_attrnotsupp __constant_htonl(NFSERR_ATTRNOTSUPP) 242#define nfserr_attrnotsupp cpu_to_be32(NFSERR_ATTRNOTSUPP)
241#define nfserr_bad_xdr __constant_htonl(NFSERR_BAD_XDR) 243#define nfserr_bad_xdr cpu_to_be32(NFSERR_BAD_XDR)
242#define nfserr_openmode __constant_htonl(NFSERR_OPENMODE) 244#define nfserr_openmode cpu_to_be32(NFSERR_OPENMODE)
243#define nfserr_locks_held __constant_htonl(NFSERR_LOCKS_HELD) 245#define nfserr_locks_held cpu_to_be32(NFSERR_LOCKS_HELD)
244#define nfserr_op_illegal __constant_htonl(NFSERR_OP_ILLEGAL) 246#define nfserr_op_illegal cpu_to_be32(NFSERR_OP_ILLEGAL)
245#define nfserr_grace __constant_htonl(NFSERR_GRACE) 247#define nfserr_grace cpu_to_be32(NFSERR_GRACE)
246#define nfserr_no_grace __constant_htonl(NFSERR_NO_GRACE) 248#define nfserr_no_grace cpu_to_be32(NFSERR_NO_GRACE)
247#define nfserr_reclaim_bad __constant_htonl(NFSERR_RECLAIM_BAD) 249#define nfserr_reclaim_bad cpu_to_be32(NFSERR_RECLAIM_BAD)
248#define nfserr_badname __constant_htonl(NFSERR_BADNAME) 250#define nfserr_badname cpu_to_be32(NFSERR_BADNAME)
249#define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) 251#define nfserr_cb_path_down cpu_to_be32(NFSERR_CB_PATH_DOWN)
250#define nfserr_locked __constant_htonl(NFSERR_LOCKED) 252#define nfserr_locked cpu_to_be32(NFSERR_LOCKED)
251#define nfserr_wrongsec __constant_htonl(NFSERR_WRONGSEC) 253#define nfserr_wrongsec cpu_to_be32(NFSERR_WRONGSEC)
252#define nfserr_replay_me __constant_htonl(NFSERR_REPLAY_ME) 254#define nfserr_badiomode cpu_to_be32(NFS4ERR_BADIOMODE)
255#define nfserr_badlayout cpu_to_be32(NFS4ERR_BADLAYOUT)
256#define nfserr_bad_session_digest cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
257#define nfserr_badsession cpu_to_be32(NFS4ERR_BADSESSION)
258#define nfserr_badslot cpu_to_be32(NFS4ERR_BADSLOT)
259#define nfserr_complete_already cpu_to_be32(NFS4ERR_COMPLETE_ALREADY)
260#define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
261#define nfserr_deleg_already_wanted cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED)
262#define nfserr_back_chan_busy cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY)
263#define nfserr_layouttrylater cpu_to_be32(NFS4ERR_LAYOUTTRYLATER)
264#define nfserr_layoutunavailable cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE)
265#define nfserr_nomatching_layout cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT)
266#define nfserr_recallconflict cpu_to_be32(NFS4ERR_RECALLCONFLICT)
267#define nfserr_unknown_layouttype cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE)
268#define nfserr_seq_misordered cpu_to_be32(NFS4ERR_SEQ_MISORDERED)
269#define nfserr_sequence_pos cpu_to_be32(NFS4ERR_SEQUENCE_POS)
270#define nfserr_req_too_big cpu_to_be32(NFS4ERR_REQ_TOO_BIG)
271#define nfserr_rep_too_big cpu_to_be32(NFS4ERR_REP_TOO_BIG)
272#define nfserr_rep_too_big_to_cache cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE)
273#define nfserr_retry_uncached_rep cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP)
274#define nfserr_unsafe_compound cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND)
275#define nfserr_too_many_ops cpu_to_be32(NFS4ERR_TOO_MANY_OPS)
276#define nfserr_op_not_in_session cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION)
277#define nfserr_hash_alg_unsupp cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP)
278#define nfserr_clientid_busy cpu_to_be32(NFS4ERR_CLIENTID_BUSY)
279#define nfserr_pnfs_io_hole cpu_to_be32(NFS4ERR_PNFS_IO_HOLE)
280#define nfserr_seq_false_retry cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY)
281#define nfserr_bad_high_slot cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT)
282#define nfserr_deadsession cpu_to_be32(NFS4ERR_DEADSESSION)
283#define nfserr_encr_alg_unsupp cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP)
284#define nfserr_pnfs_no_layout cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT)
285#define nfserr_not_only_op cpu_to_be32(NFS4ERR_NOT_ONLY_OP)
286#define nfserr_wrong_cred cpu_to_be32(NFS4ERR_WRONG_CRED)
287#define nfserr_wrong_type cpu_to_be32(NFS4ERR_WRONG_TYPE)
288#define nfserr_dirdeleg_unavail cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL)
289#define nfserr_reject_deleg cpu_to_be32(NFS4ERR_REJECT_DELEG)
290#define nfserr_returnconflict cpu_to_be32(NFS4ERR_RETURNCONFLICT)
291#define nfserr_deleg_revoked cpu_to_be32(NFS4ERR_DELEG_REVOKED)
253 292
254/* error codes for internal use */ 293/* error codes for internal use */
255/* if a request fails due to kmalloc failure, it gets dropped. 294/* if a request fails due to kmalloc failure, it gets dropped.
256 * Client should resend eventually 295 * Client should resend eventually
257 */ 296 */
258#define nfserr_dropit __constant_htonl(30000) 297#define nfserr_dropit cpu_to_be32(30000)
259/* end-of-file indicator in readdir */ 298/* end-of-file indicator in readdir */
260#define nfserr_eof __constant_htonl(30001) 299#define nfserr_eof cpu_to_be32(30001)
300/* replay detected */
301#define nfserr_replay_me cpu_to_be32(11001)
302/* nfs41 replay detected */
303#define nfserr_replay_cache cpu_to_be32(11002)
261 304
262/* Check for dir entries '.' and '..' */ 305/* Check for dir entries '.' and '..' */
263#define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.')) 306#define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
@@ -300,7 +343,7 @@ extern struct timeval nfssvc_boot;
300 * TIME_BACKUP (unlikely to be supported any time soon) 343 * TIME_BACKUP (unlikely to be supported any time soon)
301 * TIME_CREATE (unlikely to be supported any time soon) 344 * TIME_CREATE (unlikely to be supported any time soon)
302 */ 345 */
303#define NFSD_SUPPORTED_ATTRS_WORD0 \ 346#define NFSD4_SUPPORTED_ATTRS_WORD0 \
304(FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_TYPE | FATTR4_WORD0_FH_EXPIRE_TYPE \ 347(FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_TYPE | FATTR4_WORD0_FH_EXPIRE_TYPE \
305 | FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_LINK_SUPPORT \ 348 | FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_LINK_SUPPORT \
306 | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR | FATTR4_WORD0_FSID \ 349 | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR | FATTR4_WORD0_FSID \
@@ -312,7 +355,7 @@ extern struct timeval nfssvc_boot;
312 | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \ 355 | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \
313 | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL) 356 | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL)
314 357
315#define NFSD_SUPPORTED_ATTRS_WORD1 \ 358#define NFSD4_SUPPORTED_ATTRS_WORD1 \
316(FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \ 359(FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \
317 | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \ 360 | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \
318 | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \ 361 | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \
@@ -320,6 +363,35 @@ extern struct timeval nfssvc_boot;
320 | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \ 363 | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \
321 | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID) 364 | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
322 365
366#define NFSD4_SUPPORTED_ATTRS_WORD2 0
367
368#define NFSD4_1_SUPPORTED_ATTRS_WORD0 \
369 NFSD4_SUPPORTED_ATTRS_WORD0
370
371#define NFSD4_1_SUPPORTED_ATTRS_WORD1 \
372 NFSD4_SUPPORTED_ATTRS_WORD1
373
374#define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
375 (NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
376
377static inline u32 nfsd_suppattrs0(u32 minorversion)
378{
379 return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0
380 : NFSD4_SUPPORTED_ATTRS_WORD0;
381}
382
383static inline u32 nfsd_suppattrs1(u32 minorversion)
384{
385 return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1
386 : NFSD4_SUPPORTED_ATTRS_WORD1;
387}
388
389static inline u32 nfsd_suppattrs2(u32 minorversion)
390{
391 return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
392 : NFSD4_SUPPORTED_ATTRS_WORD2;
393}
394
323/* These will return ERR_INVAL if specified in GETATTR or READDIR. */ 395/* These will return ERR_INVAL if specified in GETATTR or READDIR. */
324#define NFSD_WRITEONLY_ATTRS_WORD1 \ 396#define NFSD_WRITEONLY_ATTRS_WORD1 \
325(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) 397(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
@@ -330,6 +402,19 @@ extern struct timeval nfssvc_boot;
330#define NFSD_WRITEABLE_ATTRS_WORD1 \ 402#define NFSD_WRITEABLE_ATTRS_WORD1 \
331(FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \ 403(FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \
332 | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) 404 | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
405#define NFSD_WRITEABLE_ATTRS_WORD2 0
406
407#define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
408 NFSD_WRITEABLE_ATTRS_WORD0
409/*
410 * we currently store the exclusive create verifier in the v_{a,m}time
411 * attributes so the client can't set these at create time using EXCLUSIVE4_1
412 */
413#define NFSD_SUPPATTR_EXCLCREAT_WORD1 \
414 (NFSD_WRITEABLE_ATTRS_WORD1 & \
415 ~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET))
416#define NFSD_SUPPATTR_EXCLCREAT_WORD2 \
417 NFSD_WRITEABLE_ATTRS_WORD2
333 418
334#endif /* CONFIG_NFSD_V4 */ 419#endif /* CONFIG_NFSD_V4 */
335 420
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h
index fa317f6c154b..afa19016c4a8 100644
--- a/include/linux/nfsd/nfsfh.h
+++ b/include/linux/nfsd/nfsfh.h
@@ -269,6 +269,13 @@ fh_copy(struct svc_fh *dst, struct svc_fh *src)
269 return dst; 269 return dst;
270} 270}
271 271
272static inline void
273fh_copy_shallow(struct knfsd_fh *dst, struct knfsd_fh *src)
274{
275 dst->fh_size = src->fh_size;
276 memcpy(&dst->fh_base, &src->fh_base, src->fh_size);
277}
278
272static __inline__ struct svc_fh * 279static __inline__ struct svc_fh *
273fh_init(struct svc_fh *fhp, int maxsize) 280fh_init(struct svc_fh *fhp, int maxsize)
274{ 281{
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index 128298c0362d..4d61c873feed 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -66,8 +66,7 @@ struct nfs4_cb_recall {
66 u32 cbr_ident; 66 u32 cbr_ident;
67 int cbr_trunc; 67 int cbr_trunc;
68 stateid_t cbr_stateid; 68 stateid_t cbr_stateid;
69 u32 cbr_fhlen; 69 struct knfsd_fh cbr_fh;
70 char cbr_fhval[NFS4_FHSIZE];
71 struct nfs4_delegation *cbr_dp; 70 struct nfs4_delegation *cbr_dp;
72}; 71};
73 72
@@ -86,8 +85,7 @@ struct nfs4_delegation {
86}; 85};
87 86
88#define dl_stateid dl_recall.cbr_stateid 87#define dl_stateid dl_recall.cbr_stateid
89#define dl_fhlen dl_recall.cbr_fhlen 88#define dl_fh dl_recall.cbr_fh
90#define dl_fhval dl_recall.cbr_fhval
91 89
92/* client delegation callback info */ 90/* client delegation callback info */
93struct nfs4_callback { 91struct nfs4_callback {
@@ -101,6 +99,64 @@ struct nfs4_callback {
101 struct rpc_clnt * cb_client; 99 struct rpc_clnt * cb_client;
102}; 100};
103 101
102/* Maximum number of slots per session. 128 is useful for long haul TCP */
103#define NFSD_MAX_SLOTS_PER_SESSION 128
104/* Maximum number of pages per slot cache entry */
105#define NFSD_PAGES_PER_SLOT 1
106/* Maximum number of operations per session compound */
107#define NFSD_MAX_OPS_PER_COMPOUND 16
108
109struct nfsd4_cache_entry {
110 __be32 ce_status;
111 struct kvec ce_datav; /* encoded NFSv4.1 data in rq_res.head[0] */
112 struct page *ce_respages[NFSD_PAGES_PER_SLOT + 1];
113 int ce_cachethis;
114 short ce_resused;
115 int ce_opcnt;
116 int ce_rpchdrlen;
117};
118
119struct nfsd4_slot {
120 bool sl_inuse;
121 u32 sl_seqid;
122 struct nfsd4_cache_entry sl_cache_entry;
123};
124
125struct nfsd4_session {
126 struct kref se_ref;
127 struct list_head se_hash; /* hash by sessionid */
128 struct list_head se_perclnt;
129 u32 se_flags;
130 struct nfs4_client *se_client; /* for expire_client */
131 struct nfs4_sessionid se_sessionid;
132 u32 se_fmaxreq_sz;
133 u32 se_fmaxresp_sz;
134 u32 se_fmaxresp_cached;
135 u32 se_fmaxops;
136 u32 se_fnumslots;
137 struct nfsd4_slot se_slots[]; /* forward channel slots */
138};
139
140static inline void
141nfsd4_put_session(struct nfsd4_session *ses)
142{
143 extern void free_session(struct kref *kref);
144 kref_put(&ses->se_ref, free_session);
145}
146
147static inline void
148nfsd4_get_session(struct nfsd4_session *ses)
149{
150 kref_get(&ses->se_ref);
151}
152
153/* formatted contents of nfs4_sessionid */
154struct nfsd4_sessionid {
155 clientid_t clientid;
156 u32 sequence;
157 u32 reserved;
158};
159
104#define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */ 160#define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */
105 161
106/* 162/*
@@ -132,6 +188,12 @@ struct nfs4_client {
132 struct nfs4_callback cl_callback; /* callback info */ 188 struct nfs4_callback cl_callback; /* callback info */
133 atomic_t cl_count; /* ref count */ 189 atomic_t cl_count; /* ref count */
134 u32 cl_firststate; /* recovery dir creation */ 190 u32 cl_firststate; /* recovery dir creation */
191
192 /* for nfs41 */
193 struct list_head cl_sessions;
194 struct nfsd4_slot cl_slot; /* create_session slot */
195 u32 cl_exchange_flags;
196 struct nfs4_sessionid cl_sessionid;
135}; 197};
136 198
137/* struct nfs4_client_reset 199/* struct nfs4_client_reset
@@ -168,8 +230,7 @@ struct nfs4_replay {
168 unsigned int rp_buflen; 230 unsigned int rp_buflen;
169 char *rp_buf; 231 char *rp_buf;
170 unsigned intrp_allocated; 232 unsigned intrp_allocated;
171 int rp_openfh_len; 233 struct knfsd_fh rp_openfh;
172 char rp_openfh[NFS4_FHSIZE];
173 char rp_ibuf[NFSD4_REPLAY_ISIZE]; 234 char rp_ibuf[NFSD4_REPLAY_ISIZE];
174}; 235};
175 236
@@ -217,7 +278,7 @@ struct nfs4_stateowner {
217* share_acces, share_deny on the file. 278* share_acces, share_deny on the file.
218*/ 279*/
219struct nfs4_file { 280struct nfs4_file {
220 struct kref fi_ref; 281 atomic_t fi_ref;
221 struct list_head fi_hash; /* hash by "struct inode *" */ 282 struct list_head fi_hash; /* hash by "struct inode *" */
222 struct list_head fi_stateids; 283 struct list_head fi_stateids;
223 struct list_head fi_delegations; 284 struct list_head fi_delegations;
@@ -259,14 +320,13 @@ struct nfs4_stateid {
259}; 320};
260 321
261/* flags for preprocess_seqid_op() */ 322/* flags for preprocess_seqid_op() */
262#define CHECK_FH 0x00000001 323#define HAS_SESSION 0x00000001
263#define CONFIRM 0x00000002 324#define CONFIRM 0x00000002
264#define OPEN_STATE 0x00000004 325#define OPEN_STATE 0x00000004
265#define LOCK_STATE 0x00000008 326#define LOCK_STATE 0x00000008
266#define RD_STATE 0x00000010 327#define RD_STATE 0x00000010
267#define WR_STATE 0x00000020 328#define WR_STATE 0x00000020
268#define CLOSE_STATE 0x00000040 329#define CLOSE_STATE 0x00000040
269#define DELEG_RET 0x00000080
270 330
271#define seqid_mutating_err(err) \ 331#define seqid_mutating_err(err) \
272 (((err) != nfserr_stale_clientid) && \ 332 (((err) != nfserr_stale_clientid) && \
@@ -274,7 +334,9 @@ struct nfs4_stateid {
274 ((err) != nfserr_stale_stateid) && \ 334 ((err) != nfserr_stale_stateid) && \
275 ((err) != nfserr_bad_stateid)) 335 ((err) != nfserr_bad_stateid))
276 336
277extern __be32 nfs4_preprocess_stateid_op(struct svc_fh *current_fh, 337struct nfsd4_compound_state;
338
339extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
278 stateid_t *stateid, int flags, struct file **filp); 340 stateid_t *stateid, int flags, struct file **filp);
279extern void nfs4_lock_state(void); 341extern void nfs4_lock_state(void);
280extern void nfs4_unlock_state(void); 342extern void nfs4_unlock_state(void);
@@ -290,7 +352,7 @@ extern void nfsd4_init_recdir(char *recdir_name);
290extern int nfsd4_recdir_load(void); 352extern int nfsd4_recdir_load(void);
291extern void nfsd4_shutdown_recdir(void); 353extern void nfsd4_shutdown_recdir(void);
292extern int nfs4_client_to_reclaim(const char *name); 354extern int nfs4_client_to_reclaim(const char *name);
293extern int nfs4_has_reclaimed_state(const char *name); 355extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id);
294extern void nfsd4_recdir_purge_old(void); 356extern void nfsd4_recdir_purge_old(void);
295extern int nfsd4_create_clid_dir(struct nfs4_client *clp); 357extern int nfsd4_create_clid_dir(struct nfs4_client *clp);
296extern void nfsd4_remove_clid_dir(struct nfs4_client *clp); 358extern void nfsd4_remove_clid_dir(struct nfs4_client *clp);
diff --git a/include/linux/nfsd/stats.h b/include/linux/nfsd/stats.h
index 7678cfbe9960..2693ef647df6 100644
--- a/include/linux/nfsd/stats.h
+++ b/include/linux/nfsd/stats.h
@@ -11,6 +11,11 @@
11 11
12#include <linux/nfs4.h> 12#include <linux/nfs4.h>
13 13
14/* thread usage wraps very million seconds (approx one fortnight) */
15#define NFSD_USAGE_WRAP (HZ*1000000)
16
17#ifdef __KERNEL__
18
14struct nfsd_stats { 19struct nfsd_stats {
15 unsigned int rchits; /* repcache hits */ 20 unsigned int rchits; /* repcache hits */
16 unsigned int rcmisses; /* repcache hits */ 21 unsigned int rcmisses; /* repcache hits */
@@ -35,10 +40,6 @@ struct nfsd_stats {
35 40
36}; 41};
37 42
38/* thread usage wraps very million seconds (approx one fortnight) */
39#define NFSD_USAGE_WRAP (HZ*1000000)
40
41#ifdef __KERNEL__
42 43
43extern struct nfsd_stats nfsdstats; 44extern struct nfsd_stats nfsdstats;
44extern struct svc_stat nfsd_svcstats; 45extern struct svc_stat nfsd_svcstats;
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index 27bd3e38ec5a..f80d6013fdc3 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -45,10 +45,22 @@
45#define XDR_LEN(n) (((n) + 3) & ~3) 45#define XDR_LEN(n) (((n) + 3) & ~3)
46 46
47struct nfsd4_compound_state { 47struct nfsd4_compound_state {
48 struct svc_fh current_fh; 48 struct svc_fh current_fh;
49 struct svc_fh save_fh; 49 struct svc_fh save_fh;
50 struct nfs4_stateowner *replay_owner; 50 struct nfs4_stateowner *replay_owner;
51}; 51 /* For sessions DRC */
52 struct nfsd4_session *session;
53 struct nfsd4_slot *slot;
54 __be32 *statp;
55 size_t iovlen;
56 u32 minorversion;
57 u32 status;
58};
59
60static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
61{
62 return cs->slot != NULL;
63}
52 64
53struct nfsd4_change_info { 65struct nfsd4_change_info {
54 u32 atomic; 66 u32 atomic;
@@ -90,7 +102,7 @@ struct nfsd4_create {
90 u32 specdata2; 102 u32 specdata2;
91 } dev; /* NF4BLK, NF4CHR */ 103 } dev; /* NF4BLK, NF4CHR */
92 } u; 104 } u;
93 u32 cr_bmval[2]; /* request */ 105 u32 cr_bmval[3]; /* request */
94 struct iattr cr_iattr; /* request */ 106 struct iattr cr_iattr; /* request */
95 struct nfsd4_change_info cr_cinfo; /* response */ 107 struct nfsd4_change_info cr_cinfo; /* response */
96 struct nfs4_acl *cr_acl; 108 struct nfs4_acl *cr_acl;
@@ -105,7 +117,7 @@ struct nfsd4_delegreturn {
105}; 117};
106 118
107struct nfsd4_getattr { 119struct nfsd4_getattr {
108 u32 ga_bmval[2]; /* request */ 120 u32 ga_bmval[3]; /* request */
109 struct svc_fh *ga_fhp; /* response */ 121 struct svc_fh *ga_fhp; /* response */
110}; 122};
111 123
@@ -206,11 +218,9 @@ struct nfsd4_open {
206 stateid_t op_delegate_stateid; /* request - response */ 218 stateid_t op_delegate_stateid; /* request - response */
207 u32 op_create; /* request */ 219 u32 op_create; /* request */
208 u32 op_createmode; /* request */ 220 u32 op_createmode; /* request */
209 u32 op_bmval[2]; /* request */ 221 u32 op_bmval[3]; /* request */
210 union { /* request */ 222 struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */
211 struct iattr iattr; /* UNCHECKED4,GUARDED4 */ 223 nfs4_verifier verf; /* EXCLUSIVE4 */
212 nfs4_verifier verf; /* EXCLUSIVE4 */
213 } u;
214 clientid_t op_clientid; /* request */ 224 clientid_t op_clientid; /* request */
215 struct xdr_netobj op_owner; /* request */ 225 struct xdr_netobj op_owner; /* request */
216 u32 op_seqid; /* request */ 226 u32 op_seqid; /* request */
@@ -224,8 +234,8 @@ struct nfsd4_open {
224 struct nfs4_stateowner *op_stateowner; /* used during processing */ 234 struct nfs4_stateowner *op_stateowner; /* used during processing */
225 struct nfs4_acl *op_acl; 235 struct nfs4_acl *op_acl;
226}; 236};
227#define op_iattr u.iattr 237#define op_iattr iattr
228#define op_verf u.verf 238#define op_verf verf
229 239
230struct nfsd4_open_confirm { 240struct nfsd4_open_confirm {
231 stateid_t oc_req_stateid /* request */; 241 stateid_t oc_req_stateid /* request */;
@@ -259,7 +269,7 @@ struct nfsd4_readdir {
259 nfs4_verifier rd_verf; /* request */ 269 nfs4_verifier rd_verf; /* request */
260 u32 rd_dircount; /* request */ 270 u32 rd_dircount; /* request */
261 u32 rd_maxcount; /* request */ 271 u32 rd_maxcount; /* request */
262 u32 rd_bmval[2]; /* request */ 272 u32 rd_bmval[3]; /* request */
263 struct svc_rqst *rd_rqstp; /* response */ 273 struct svc_rqst *rd_rqstp; /* response */
264 struct svc_fh * rd_fhp; /* response */ 274 struct svc_fh * rd_fhp; /* response */
265 275
@@ -301,7 +311,7 @@ struct nfsd4_secinfo {
301 311
302struct nfsd4_setattr { 312struct nfsd4_setattr {
303 stateid_t sa_stateid; /* request */ 313 stateid_t sa_stateid; /* request */
304 u32 sa_bmval[2]; /* request */ 314 u32 sa_bmval[3]; /* request */
305 struct iattr sa_iattr; /* request */ 315 struct iattr sa_iattr; /* request */
306 struct nfs4_acl *sa_acl; 316 struct nfs4_acl *sa_acl;
307}; 317};
@@ -327,7 +337,7 @@ struct nfsd4_setclientid_confirm {
327 337
328/* also used for NVERIFY */ 338/* also used for NVERIFY */
329struct nfsd4_verify { 339struct nfsd4_verify {
330 u32 ve_bmval[2]; /* request */ 340 u32 ve_bmval[3]; /* request */
331 u32 ve_attrlen; /* request */ 341 u32 ve_attrlen; /* request */
332 char * ve_attrval; /* request */ 342 char * ve_attrval; /* request */
333}; 343};
@@ -344,6 +354,54 @@ struct nfsd4_write {
344 nfs4_verifier wr_verifier; /* response */ 354 nfs4_verifier wr_verifier; /* response */
345}; 355};
346 356
357struct nfsd4_exchange_id {
358 nfs4_verifier verifier;
359 struct xdr_netobj clname;
360 u32 flags;
361 clientid_t clientid;
362 u32 seqid;
363 int spa_how;
364};
365
366struct nfsd4_channel_attrs {
367 u32 headerpadsz;
368 u32 maxreq_sz;
369 u32 maxresp_sz;
370 u32 maxresp_cached;
371 u32 maxops;
372 u32 maxreqs;
373 u32 nr_rdma_attrs;
374 u32 rdma_attrs;
375};
376
377struct nfsd4_create_session {
378 clientid_t clientid;
379 struct nfs4_sessionid sessionid;
380 u32 seqid;
381 u32 flags;
382 struct nfsd4_channel_attrs fore_channel;
383 struct nfsd4_channel_attrs back_channel;
384 u32 callback_prog;
385 u32 uid;
386 u32 gid;
387};
388
389struct nfsd4_sequence {
390 struct nfs4_sessionid sessionid; /* request/response */
391 u32 seqid; /* request/response */
392 u32 slotid; /* request/response */
393 u32 maxslots; /* request/response */
394 u32 cachethis; /* request */
395#if 0
396 u32 target_maxslots; /* response */
397 u32 status_flags; /* response */
398#endif /* not yet */
399};
400
401struct nfsd4_destroy_session {
402 struct nfs4_sessionid sessionid;
403};
404
347struct nfsd4_op { 405struct nfsd4_op {
348 int opnum; 406 int opnum;
349 __be32 status; 407 __be32 status;
@@ -378,6 +436,12 @@ struct nfsd4_op {
378 struct nfsd4_verify verify; 436 struct nfsd4_verify verify;
379 struct nfsd4_write write; 437 struct nfsd4_write write;
380 struct nfsd4_release_lockowner release_lockowner; 438 struct nfsd4_release_lockowner release_lockowner;
439
440 /* NFSv4.1 */
441 struct nfsd4_exchange_id exchange_id;
442 struct nfsd4_create_session create_session;
443 struct nfsd4_destroy_session destroy_session;
444 struct nfsd4_sequence sequence;
381 } u; 445 } u;
382 struct nfs4_replay * replay; 446 struct nfs4_replay * replay;
383}; 447};
@@ -416,9 +480,22 @@ struct nfsd4_compoundres {
416 u32 taglen; 480 u32 taglen;
417 char * tag; 481 char * tag;
418 u32 opcnt; 482 u32 opcnt;
419 __be32 * tagp; /* where to encode tag and opcount */ 483 __be32 * tagp; /* tag, opcount encode location */
484 struct nfsd4_compound_state cstate;
420}; 485};
421 486
487static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
488{
489 struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
490 return args->opcnt == 1;
491}
492
493static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
494{
495 return !resp->cstate.slot->sl_cache_entry.ce_cachethis ||
496 nfsd4_is_solo_sequence(resp);
497}
498
422#define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) 499#define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs)
423 500
424static inline void 501static inline void
@@ -448,7 +525,23 @@ extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
448extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, 525extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
449 struct nfsd4_compound_state *, 526 struct nfsd4_compound_state *,
450 struct nfsd4_setclientid_confirm *setclientid_confirm); 527 struct nfsd4_setclientid_confirm *setclientid_confirm);
451extern __be32 nfsd4_process_open1(struct nfsd4_open *open); 528extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
529extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
530 struct nfsd4_sequence *seq);
531extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
532 struct nfsd4_compound_state *,
533struct nfsd4_exchange_id *);
534 extern __be32 nfsd4_create_session(struct svc_rqst *,
535 struct nfsd4_compound_state *,
536 struct nfsd4_create_session *);
537extern __be32 nfsd4_sequence(struct svc_rqst *,
538 struct nfsd4_compound_state *,
539 struct nfsd4_sequence *);
540extern __be32 nfsd4_destroy_session(struct svc_rqst *,
541 struct nfsd4_compound_state *,
542 struct nfsd4_destroy_session *);
543extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
544 struct nfsd4_open *open);
452extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, 545extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
453 struct svc_fh *current_fh, struct nfsd4_open *open); 546 struct svc_fh *current_fh, struct nfsd4_open *open);
454extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, 547extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
new file mode 100644
index 000000000000..79fec6af3f9f
--- /dev/null
+++ b/include/linux/nilfs2_fs.h
@@ -0,0 +1,801 @@
1/*
2 * nilfs2_fs.h - NILFS2 on-disk structures and common declarations.
3 *
4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Written by Koji Sato <koji@osrg.net>
21 * Ryusuke Konishi <ryusuke@osrg.net>
22 */
23/*
24 * linux/include/linux/ext2_fs.h
25 *
26 * Copyright (C) 1992, 1993, 1994, 1995
27 * Remy Card (card@masi.ibp.fr)
28 * Laboratoire MASI - Institut Blaise Pascal
29 * Universite Pierre et Marie Curie (Paris VI)
30 *
31 * from
32 *
33 * linux/include/linux/minix_fs.h
34 *
35 * Copyright (C) 1991, 1992 Linus Torvalds
36 */
37
38#ifndef _LINUX_NILFS_FS_H
39#define _LINUX_NILFS_FS_H
40
41#include <linux/types.h>
42#include <linux/ioctl.h>
43
44/*
45 * Inode flags stored in nilfs_inode and on-memory nilfs inode
46 *
47 * We define these flags based on ext2-fs because of the
48 * compatibility reason; to avoid problems in chattr(1)
49 */
50#define NILFS_SECRM_FL 0x00000001 /* Secure deletion */
51#define NILFS_UNRM_FL 0x00000002 /* Undelete */
52#define NILFS_SYNC_FL 0x00000008 /* Synchronous updates */
53#define NILFS_IMMUTABLE_FL 0x00000010 /* Immutable file */
54#define NILFS_APPEND_FL 0x00000020 /* writes to file may only append */
55#define NILFS_NODUMP_FL 0x00000040 /* do not dump file */
56#define NILFS_NOATIME_FL 0x00000080 /* do not update atime */
57/* Reserved for compression usage... */
58#define NILFS_NOTAIL_FL 0x00008000 /* file tail should not be merged */
59#define NILFS_DIRSYNC_FL 0x00010000 /* dirsync behaviour */
60
61#define NILFS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
62#define NILFS_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
63
64
65#define NILFS_INODE_BMAP_SIZE 7
66/**
67 * struct nilfs_inode - structure of an inode on disk
68 * @i_blocks: blocks count
69 * @i_size: size in bytes
70 * @i_ctime: creation time (seconds)
71 * @i_mtime: modification time (seconds)
72 * @i_ctime_nsec: creation time (nano seconds)
73 * @i_mtime_nsec: modification time (nano seconds)
74 * @i_uid: user id
75 * @i_gid: group id
76 * @i_mode: file mode
77 * @i_links_count: links count
78 * @i_flags: file flags
79 * @i_bmap: block mapping
80 * @i_xattr: extended attributes
81 * @i_generation: file generation (for NFS)
82 * @i_pad: padding
83 */
84struct nilfs_inode {
85 __le64 i_blocks;
86 __le64 i_size;
87 __le64 i_ctime;
88 __le64 i_mtime;
89 __le32 i_ctime_nsec;
90 __le32 i_mtime_nsec;
91 __le32 i_uid;
92 __le32 i_gid;
93 __le16 i_mode;
94 __le16 i_links_count;
95 __le32 i_flags;
96 __le64 i_bmap[NILFS_INODE_BMAP_SIZE];
97#define i_device_code i_bmap[0]
98 __le64 i_xattr;
99 __le32 i_generation;
100 __le32 i_pad;
101};
102
103/**
104 * struct nilfs_super_root - structure of super root
105 * @sr_sum: check sum
106 * @sr_bytes: byte count of the structure
107 * @sr_flags: flags (reserved)
108 * @sr_nongc_ctime: write time of the last segment not for cleaner operation
109 * @sr_dat: DAT file inode
110 * @sr_cpfile: checkpoint file inode
111 * @sr_sufile: segment usage file inode
112 */
113struct nilfs_super_root {
114 __le32 sr_sum;
115 __le16 sr_bytes;
116 __le16 sr_flags;
117 __le64 sr_nongc_ctime;
118 struct nilfs_inode sr_dat;
119 struct nilfs_inode sr_cpfile;
120 struct nilfs_inode sr_sufile;
121};
122
123#define NILFS_SR_MDT_OFFSET(inode_size, i) \
124 ((unsigned long)&((struct nilfs_super_root *)0)->sr_dat + \
125 (inode_size) * (i))
126#define NILFS_SR_DAT_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 0)
127#define NILFS_SR_CPFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 1)
128#define NILFS_SR_SUFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 2)
129#define NILFS_SR_BYTES (sizeof(struct nilfs_super_root))
130
131/*
132 * Maximal mount counts
133 */
134#define NILFS_DFL_MAX_MNT_COUNT 50 /* 50 mounts */
135
136/*
137 * File system states (sbp->s_state, nilfs->ns_mount_state)
138 */
139#define NILFS_VALID_FS 0x0001 /* Unmounted cleanly */
140#define NILFS_ERROR_FS 0x0002 /* Errors detected */
141#define NILFS_RESIZE_FS 0x0004 /* Resize required */
142
143/*
144 * Mount flags (sbi->s_mount_opt)
145 */
146#define NILFS_MOUNT_ERROR_MODE 0x0070 /* Error mode mask */
147#define NILFS_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
148#define NILFS_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
149#define NILFS_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
150#define NILFS_MOUNT_SNAPSHOT 0x0080 /* Snapshot flag */
151#define NILFS_MOUNT_BARRIER 0x1000 /* Use block barriers */
152#define NILFS_MOUNT_STRICT_ORDER 0x2000 /* Apply strict in-order
153 semantics also for data */
154
155
156/**
157 * struct nilfs_super_block - structure of super block on disk
158 */
159struct nilfs_super_block {
160 __le32 s_rev_level; /* Revision level */
161 __le16 s_minor_rev_level; /* minor revision level */
162 __le16 s_magic; /* Magic signature */
163
164 __le16 s_bytes; /* Bytes count of CRC calculation
165 for this structure. s_reserved
166 is excluded. */
167 __le16 s_flags; /* flags */
168 __le32 s_crc_seed; /* Seed value of CRC calculation */
169 __le32 s_sum; /* Check sum of super block */
170
171 __le32 s_log_block_size; /* Block size represented as follows
172 blocksize =
173 1 << (s_log_block_size + 10) */
174 __le64 s_nsegments; /* Number of segments in filesystem */
175 __le64 s_dev_size; /* block device size in bytes */
176 __le64 s_first_data_block; /* 1st seg disk block number */
177 __le32 s_blocks_per_segment; /* number of blocks per full segment */
178 __le32 s_r_segments_percentage; /* Reserved segments percentage */
179
180 __le64 s_last_cno; /* Last checkpoint number */
181 __le64 s_last_pseg; /* disk block addr pseg written last */
182 __le64 s_last_seq; /* seq. number of seg written last */
183 __le64 s_free_blocks_count; /* Free blocks count */
184
185 __le64 s_ctime; /* Creation time (execution time of
186 newfs) */
187 __le64 s_mtime; /* Mount time */
188 __le64 s_wtime; /* Write time */
189 __le16 s_mnt_count; /* Mount count */
190 __le16 s_max_mnt_count; /* Maximal mount count */
191 __le16 s_state; /* File system state */
192 __le16 s_errors; /* Behaviour when detecting errors */
193 __le64 s_lastcheck; /* time of last check */
194
195 __le32 s_checkinterval; /* max. time between checks */
196 __le32 s_creator_os; /* OS */
197 __le16 s_def_resuid; /* Default uid for reserved blocks */
198 __le16 s_def_resgid; /* Default gid for reserved blocks */
199 __le32 s_first_ino; /* First non-reserved inode */
200
201 __le16 s_inode_size; /* Size of an inode */
202 __le16 s_dat_entry_size; /* Size of a dat entry */
203 __le16 s_checkpoint_size; /* Size of a checkpoint */
204 __le16 s_segment_usage_size; /* Size of a segment usage */
205
206 __u8 s_uuid[16]; /* 128-bit uuid for volume */
207 char s_volume_name[16]; /* volume name */
208 char s_last_mounted[64]; /* directory where last mounted */
209
210 __le32 s_c_interval; /* Commit interval of segment */
211 __le32 s_c_block_max; /* Threshold of data amount for
212 the segment construction */
213 __u32 s_reserved[192]; /* padding to the end of the block */
214};
215
216/*
217 * Codes for operating systems
218 */
219#define NILFS_OS_LINUX 0
220/* Codes from 1 to 4 are reserved to keep compatibility with ext2 creator-OS */
221
222/*
223 * Revision levels
224 */
225#define NILFS_CURRENT_REV 2 /* current major revision */
226#define NILFS_MINOR_REV 0 /* minor revision */
227
228/*
229 * Bytes count of super_block for CRC-calculation
230 */
231#define NILFS_SB_BYTES \
232 ((long)&((struct nilfs_super_block *)0)->s_reserved)
233
234/*
235 * Special inode number
236 */
237#define NILFS_ROOT_INO 2 /* Root file inode */
238#define NILFS_DAT_INO 3 /* DAT file */
239#define NILFS_CPFILE_INO 4 /* checkpoint file */
240#define NILFS_SUFILE_INO 5 /* segment usage file */
241#define NILFS_IFILE_INO 6 /* ifile */
242#define NILFS_ATIME_INO 7 /* Atime file (reserved) */
243#define NILFS_XATTR_INO 8 /* Xattribute file (reserved) */
244#define NILFS_SKETCH_INO 10 /* Sketch file */
245#define NILFS_USER_INO 11 /* Fisrt user's file inode number */
246
247#define NILFS_SB_OFFSET_BYTES 1024 /* byte offset of nilfs superblock */
248#define NILFS_SUPER_MAGIC 0x3434 /* NILFS filesystem magic number */
249
250#define NILFS_SEG_MIN_BLOCKS 16 /* Minimum number of blocks in
251 a full segment */
252#define NILFS_PSEG_MIN_BLOCKS 2 /* Minimum number of blocks in
253 a partial segment */
254#define NILFS_MIN_NRSVSEGS 8 /* Minimum number of reserved
255 segments */
256
257/*
258 * bytes offset of secondary super block
259 */
260#define NILFS_SB2_OFFSET_BYTES(devsize) ((((devsize) >> 12) - 1) << 12)
261
262/*
263 * Maximal count of links to a file
264 */
265#define NILFS_LINK_MAX 32000
266
267/*
268 * Structure of a directory entry
269 * (Same as ext2)
270 */
271
272#define NILFS_NAME_LEN 255
273
274/*
275 * The new version of the directory entry. Since V0 structures are
276 * stored in intel byte order, and the name_len field could never be
277 * bigger than 255 chars, it's safe to reclaim the extra byte for the
278 * file_type field.
279 */
280struct nilfs_dir_entry {
281 __le64 inode; /* Inode number */
282 __le16 rec_len; /* Directory entry length */
283 __u8 name_len; /* Name length */
284 __u8 file_type;
285 char name[NILFS_NAME_LEN]; /* File name */
286 char pad;
287};
288
289/*
290 * NILFS directory file types. Only the low 3 bits are used. The
291 * other bits are reserved for now.
292 */
293enum {
294 NILFS_FT_UNKNOWN,
295 NILFS_FT_REG_FILE,
296 NILFS_FT_DIR,
297 NILFS_FT_CHRDEV,
298 NILFS_FT_BLKDEV,
299 NILFS_FT_FIFO,
300 NILFS_FT_SOCK,
301 NILFS_FT_SYMLINK,
302 NILFS_FT_MAX
303};
304
305/*
306 * NILFS_DIR_PAD defines the directory entries boundaries
307 *
308 * NOTE: It must be a multiple of 8
309 */
310#define NILFS_DIR_PAD 8
311#define NILFS_DIR_ROUND (NILFS_DIR_PAD - 1)
312#define NILFS_DIR_REC_LEN(name_len) (((name_len) + 12 + NILFS_DIR_ROUND) & \
313 ~NILFS_DIR_ROUND)
314
315
316/**
317 * struct nilfs_finfo - file information
318 * @fi_ino: inode number
319 * @fi_cno: checkpoint number
320 * @fi_nblocks: number of blocks (including intermediate blocks)
321 * @fi_ndatablk: number of file data blocks
322 */
323struct nilfs_finfo {
324 __le64 fi_ino;
325 __le64 fi_cno;
326 __le32 fi_nblocks;
327 __le32 fi_ndatablk;
328 /* array of virtual block numbers */
329};
330
331/**
332 * struct nilfs_binfo_v - information for the block to which a virtual block number is assigned
333 * @bi_vblocknr: virtual block number
334 * @bi_blkoff: block offset
335 */
336struct nilfs_binfo_v {
337 __le64 bi_vblocknr;
338 __le64 bi_blkoff;
339};
340
341/**
342 * struct nilfs_binfo_dat - information for the block which belongs to the DAT file
343 * @bi_blkoff: block offset
344 * @bi_level: level
345 * @bi_pad: padding
346 */
347struct nilfs_binfo_dat {
348 __le64 bi_blkoff;
349 __u8 bi_level;
350 __u8 bi_pad[7];
351};
352
353/**
354 * union nilfs_binfo: block information
355 * @bi_v: nilfs_binfo_v structure
356 * @bi_dat: nilfs_binfo_dat structure
357 */
358union nilfs_binfo {
359 struct nilfs_binfo_v bi_v;
360 struct nilfs_binfo_dat bi_dat;
361};
362
363/**
364 * struct nilfs_segment_summary - segment summary
365 * @ss_datasum: checksum of data
366 * @ss_sumsum: checksum of segment summary
367 * @ss_magic: magic number
368 * @ss_bytes: size of this structure in bytes
369 * @ss_flags: flags
370 * @ss_seq: sequence number
371 * @ss_create: creation timestamp
372 * @ss_next: next segment
373 * @ss_nblocks: number of blocks
374 * @ss_nfinfo: number of finfo structures
375 * @ss_sumbytes: total size of segment summary in bytes
376 * @ss_pad: padding
377 */
378struct nilfs_segment_summary {
379 __le32 ss_datasum;
380 __le32 ss_sumsum;
381 __le32 ss_magic;
382 __le16 ss_bytes;
383 __le16 ss_flags;
384 __le64 ss_seq;
385 __le64 ss_create;
386 __le64 ss_next;
387 __le32 ss_nblocks;
388 __le32 ss_nfinfo;
389 __le32 ss_sumbytes;
390 __le32 ss_pad;
391 /* array of finfo structures */
392};
393
394#define NILFS_SEGSUM_MAGIC 0x1eaffa11 /* segment summary magic number */
395
396/*
397 * Segment summary flags
398 */
399#define NILFS_SS_LOGBGN 0x0001 /* begins a logical segment */
400#define NILFS_SS_LOGEND 0x0002 /* ends a logical segment */
401#define NILFS_SS_SR 0x0004 /* has super root */
402#define NILFS_SS_SYNDT 0x0008 /* includes data only updates */
403#define NILFS_SS_GC 0x0010 /* segment written for cleaner operation */
404
405/**
406 * struct nilfs_palloc_group_desc - block group descriptor
407 * @pg_nfrees: number of free entries in block group
408 */
409struct nilfs_palloc_group_desc {
410 __le32 pg_nfrees;
411};
412
413/**
414 * struct nilfs_dat_entry - disk address translation entry
415 * @dt_blocknr: block number
416 * @dt_start: start checkpoint number
417 * @dt_end: end checkpoint number
418 * @dt_rsv: reserved for future use
419 */
420struct nilfs_dat_entry {
421 __le64 de_blocknr;
422 __le64 de_start;
423 __le64 de_end;
424 __le64 de_rsv;
425};
426
427/**
428 * struct nilfs_dat_group_desc - block group descriptor
429 * @dg_nfrees: number of free virtual block numbers in block group
430 */
431struct nilfs_dat_group_desc {
432 __le32 dg_nfrees;
433};
434
435
436/**
437 * struct nilfs_snapshot_list - snapshot list
438 * @ssl_next: next checkpoint number on snapshot list
439 * @ssl_prev: previous checkpoint number on snapshot list
440 */
441struct nilfs_snapshot_list {
442 __le64 ssl_next;
443 __le64 ssl_prev;
444};
445
446/**
447 * struct nilfs_checkpoint - checkpoint structure
448 * @cp_flags: flags
449 * @cp_checkpoints_count: checkpoints count in a block
450 * @cp_snapshot_list: snapshot list
451 * @cp_cno: checkpoint number
452 * @cp_create: creation timestamp
453 * @cp_nblk_inc: number of blocks incremented by this checkpoint
454 * @cp_inodes_count: inodes count
455 * @cp_blocks_count: blocks count
456 * @cp_ifile_inode: inode of ifile
457 */
458struct nilfs_checkpoint {
459 __le32 cp_flags;
460 __le32 cp_checkpoints_count;
461 struct nilfs_snapshot_list cp_snapshot_list;
462 __le64 cp_cno;
463 __le64 cp_create;
464 __le64 cp_nblk_inc;
465 __le64 cp_inodes_count;
466 __le64 cp_blocks_count; /* Reserved (might be deleted) */
467
468 /* Do not change the byte offset of ifile inode.
469 To keep the compatibility of the disk format,
470 additional fields should be added behind cp_ifile_inode. */
471 struct nilfs_inode cp_ifile_inode;
472};
473
474/* checkpoint flags */
475enum {
476 NILFS_CHECKPOINT_SNAPSHOT,
477 NILFS_CHECKPOINT_INVALID,
478 NILFS_CHECKPOINT_SKETCH,
479 NILFS_CHECKPOINT_MINOR,
480};
481
482#define NILFS_CHECKPOINT_FNS(flag, name) \
483static inline void \
484nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
485{ \
486 cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
487 (1UL << NILFS_CHECKPOINT_##flag)); \
488} \
489static inline void \
490nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
491{ \
492 cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
493 ~(1UL << NILFS_CHECKPOINT_##flag)); \
494} \
495static inline int \
496nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
497{ \
498 return !!(le32_to_cpu(cp->cp_flags) & \
499 (1UL << NILFS_CHECKPOINT_##flag)); \
500}
501
502NILFS_CHECKPOINT_FNS(SNAPSHOT, snapshot)
503NILFS_CHECKPOINT_FNS(INVALID, invalid)
504NILFS_CHECKPOINT_FNS(MINOR, minor)
505
506/**
507 * struct nilfs_cpinfo - checkpoint information
508 * @ci_flags: flags
509 * @ci_pad: padding
510 * @ci_cno: checkpoint number
511 * @ci_create: creation timestamp
512 * @ci_nblk_inc: number of blocks incremented by this checkpoint
513 * @ci_inodes_count: inodes count
514 * @ci_blocks_count: blocks count
515 * @ci_next: next checkpoint number in snapshot list
516 */
517struct nilfs_cpinfo {
518 __u32 ci_flags;
519 __u32 ci_pad;
520 __u64 ci_cno;
521 __u64 ci_create;
522 __u64 ci_nblk_inc;
523 __u64 ci_inodes_count;
524 __u64 ci_blocks_count;
525 __u64 ci_next;
526};
527
528#define NILFS_CPINFO_FNS(flag, name) \
529static inline int \
530nilfs_cpinfo_##name(const struct nilfs_cpinfo *cpinfo) \
531{ \
532 return !!(cpinfo->ci_flags & (1UL << NILFS_CHECKPOINT_##flag)); \
533}
534
535NILFS_CPINFO_FNS(SNAPSHOT, snapshot)
536NILFS_CPINFO_FNS(INVALID, invalid)
537NILFS_CPINFO_FNS(MINOR, minor)
538
539
540/**
541 * struct nilfs_cpfile_header - checkpoint file header
542 * @ch_ncheckpoints: number of checkpoints
543 * @ch_nsnapshots: number of snapshots
544 * @ch_snapshot_list: snapshot list
545 */
546struct nilfs_cpfile_header {
547 __le64 ch_ncheckpoints;
548 __le64 ch_nsnapshots;
549 struct nilfs_snapshot_list ch_snapshot_list;
550};
551
552#define NILFS_CPFILE_FIRST_CHECKPOINT_OFFSET \
553 ((sizeof(struct nilfs_cpfile_header) + \
554 sizeof(struct nilfs_checkpoint) - 1) / \
555 sizeof(struct nilfs_checkpoint))
556
557/**
558 * struct nilfs_segment_usage - segment usage
559 * @su_lastmod: last modified timestamp
560 * @su_nblocks: number of blocks in segment
561 * @su_flags: flags
562 */
563struct nilfs_segment_usage {
564 __le64 su_lastmod;
565 __le32 su_nblocks;
566 __le32 su_flags;
567};
568
569/* segment usage flag */
570enum {
571 NILFS_SEGMENT_USAGE_ACTIVE,
572 NILFS_SEGMENT_USAGE_DIRTY,
573 NILFS_SEGMENT_USAGE_ERROR,
574
575 /* ... */
576};
577
578#define NILFS_SEGMENT_USAGE_FNS(flag, name) \
579static inline void \
580nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
581{ \
582 su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
583 (1UL << NILFS_SEGMENT_USAGE_##flag));\
584} \
585static inline void \
586nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
587{ \
588 su->su_flags = \
589 cpu_to_le32(le32_to_cpu(su->su_flags) & \
590 ~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
591} \
592static inline int \
593nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
594{ \
595 return !!(le32_to_cpu(su->su_flags) & \
596 (1UL << NILFS_SEGMENT_USAGE_##flag)); \
597}
598
599NILFS_SEGMENT_USAGE_FNS(ACTIVE, active)
600NILFS_SEGMENT_USAGE_FNS(DIRTY, dirty)
601NILFS_SEGMENT_USAGE_FNS(ERROR, error)
602
603static inline void
604nilfs_segment_usage_set_clean(struct nilfs_segment_usage *su)
605{
606 su->su_lastmod = cpu_to_le64(0);
607 su->su_nblocks = cpu_to_le32(0);
608 su->su_flags = cpu_to_le32(0);
609}
610
611static inline int
612nilfs_segment_usage_clean(const struct nilfs_segment_usage *su)
613{
614 return !le32_to_cpu(su->su_flags);
615}
616
617/**
618 * struct nilfs_sufile_header - segment usage file header
619 * @sh_ncleansegs: number of clean segments
620 * @sh_ndirtysegs: number of dirty segments
621 * @sh_last_alloc: last allocated segment number
622 */
623struct nilfs_sufile_header {
624 __le64 sh_ncleansegs;
625 __le64 sh_ndirtysegs;
626 __le64 sh_last_alloc;
627 /* ... */
628};
629
630#define NILFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET \
631 ((sizeof(struct nilfs_sufile_header) + \
632 sizeof(struct nilfs_segment_usage) - 1) / \
633 sizeof(struct nilfs_segment_usage))
634
635/**
636 * nilfs_suinfo - segment usage information
637 * @sui_lastmod:
638 * @sui_nblocks:
639 * @sui_flags:
640 */
641struct nilfs_suinfo {
642 __u64 sui_lastmod;
643 __u32 sui_nblocks;
644 __u32 sui_flags;
645};
646
647#define NILFS_SUINFO_FNS(flag, name) \
648static inline int \
649nilfs_suinfo_##name(const struct nilfs_suinfo *si) \
650{ \
651 return si->sui_flags & (1UL << NILFS_SEGMENT_USAGE_##flag); \
652}
653
654NILFS_SUINFO_FNS(ACTIVE, active)
655NILFS_SUINFO_FNS(DIRTY, dirty)
656NILFS_SUINFO_FNS(ERROR, error)
657
658static inline int nilfs_suinfo_clean(const struct nilfs_suinfo *si)
659{
660 return !si->sui_flags;
661}
662
663/* ioctl */
664enum {
665 NILFS_CHECKPOINT,
666 NILFS_SNAPSHOT,
667};
668
669/**
670 * struct nilfs_cpmode -
671 * @cc_cno:
672 * @cc_mode:
673 */
674struct nilfs_cpmode {
675 __u64 cm_cno;
676 __u32 cm_mode;
677 __u32 cm_pad;
678};
679
680/**
681 * struct nilfs_argv - argument vector
682 * @v_base:
683 * @v_nmembs:
684 * @v_size:
685 * @v_flags:
686 * @v_index:
687 */
688struct nilfs_argv {
689 __u64 v_base;
690 __u32 v_nmembs; /* number of members */
691 __u16 v_size; /* size of members */
692 __u16 v_flags;
693 __u64 v_index;
694};
695
696/**
697 * struct nilfs_period -
698 * @p_start:
699 * @p_end:
700 */
701struct nilfs_period {
702 __u64 p_start;
703 __u64 p_end;
704};
705
706/**
707 * struct nilfs_cpstat -
708 * @cs_cno: checkpoint number
709 * @cs_ncps: number of checkpoints
710 * @cs_nsss: number of snapshots
711 */
712struct nilfs_cpstat {
713 __u64 cs_cno;
714 __u64 cs_ncps;
715 __u64 cs_nsss;
716};
717
718/**
719 * struct nilfs_sustat -
720 * @ss_nsegs: number of segments
721 * @ss_ncleansegs: number of clean segments
722 * @ss_ndirtysegs: number of dirty segments
723 * @ss_ctime: creation time of the last segment
724 * @ss_nongc_ctime: creation time of the last segment not for GC
725 * @ss_prot_seq: least sequence number of segments which must not be reclaimed
726 */
727struct nilfs_sustat {
728 __u64 ss_nsegs;
729 __u64 ss_ncleansegs;
730 __u64 ss_ndirtysegs;
731 __u64 ss_ctime;
732 __u64 ss_nongc_ctime;
733 __u64 ss_prot_seq;
734};
735
736/**
737 * struct nilfs_vinfo - virtual block number information
738 * @vi_vblocknr:
739 * @vi_start:
740 * @vi_end:
741 * @vi_blocknr:
742 */
743struct nilfs_vinfo {
744 __u64 vi_vblocknr;
745 __u64 vi_start;
746 __u64 vi_end;
747 __u64 vi_blocknr;
748};
749
750/**
751 * struct nilfs_vdesc -
752 */
753struct nilfs_vdesc {
754 __u64 vd_ino;
755 __u64 vd_cno;
756 __u64 vd_vblocknr;
757 struct nilfs_period vd_period;
758 __u64 vd_blocknr;
759 __u64 vd_offset;
760 __u32 vd_flags;
761 __u32 vd_pad;
762};
763
764/**
765 * struct nilfs_bdesc -
766 */
767struct nilfs_bdesc {
768 __u64 bd_ino;
769 __u64 bd_oblocknr;
770 __u64 bd_blocknr;
771 __u64 bd_offset;
772 __u32 bd_level;
773 __u32 bd_pad;
774};
775
776#define NILFS_IOCTL_IDENT 'n'
777
778#define NILFS_IOCTL_CHANGE_CPMODE \
779 _IOW(NILFS_IOCTL_IDENT, 0x80, struct nilfs_cpmode)
780#define NILFS_IOCTL_DELETE_CHECKPOINT \
781 _IOW(NILFS_IOCTL_IDENT, 0x81, __u64)
782#define NILFS_IOCTL_GET_CPINFO \
783 _IOR(NILFS_IOCTL_IDENT, 0x82, struct nilfs_argv)
784#define NILFS_IOCTL_GET_CPSTAT \
785 _IOR(NILFS_IOCTL_IDENT, 0x83, struct nilfs_cpstat)
786#define NILFS_IOCTL_GET_SUINFO \
787 _IOR(NILFS_IOCTL_IDENT, 0x84, struct nilfs_argv)
788#define NILFS_IOCTL_GET_SUSTAT \
789 _IOR(NILFS_IOCTL_IDENT, 0x85, struct nilfs_sustat)
790#define NILFS_IOCTL_GET_VINFO \
791 _IOWR(NILFS_IOCTL_IDENT, 0x86, struct nilfs_argv)
792#define NILFS_IOCTL_GET_BDESCS \
793 _IOWR(NILFS_IOCTL_IDENT, 0x87, struct nilfs_argv)
794#define NILFS_IOCTL_CLEAN_SEGMENTS \
795 _IOW(NILFS_IOCTL_IDENT, 0x88, struct nilfs_argv[5])
796#define NILFS_IOCTL_SYNC \
797 _IOR(NILFS_IOCTL_IDENT, 0x8A, __u64)
798#define NILFS_IOCTL_RESIZE \
799 _IOW(NILFS_IOCTL_IDENT, 0x8B, __u64)
800
801#endif /* _LINUX_NILFS_FS_H */
diff --git a/include/linux/parport_pc.h b/include/linux/parport_pc.h
index ea8c6d84996d..cc1767f5cca8 100644
--- a/include/linux/parport_pc.h
+++ b/include/linux/parport_pc.h
@@ -228,10 +228,11 @@ extern void parport_pc_release_resources(struct parport *p);
228extern int parport_pc_claim_resources(struct parport *p); 228extern int parport_pc_claim_resources(struct parport *p);
229 229
230/* PCMCIA code will want to get us to look at a port. Provide a mechanism. */ 230/* PCMCIA code will want to get us to look at a port. Provide a mechanism. */
231extern struct parport *parport_pc_probe_port (unsigned long base, 231extern struct parport *parport_pc_probe_port(unsigned long base,
232 unsigned long base_hi, 232 unsigned long base_hi,
233 int irq, int dma, 233 int irq, int dma,
234 struct device *dev); 234 struct device *dev,
235extern void parport_pc_unregister_port (struct parport *p); 235 int irqflags);
236extern void parport_pc_unregister_port(struct parport *p);
236 237
237#endif 238#endif
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 170f8b1f22db..ee98cd570885 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -944,6 +944,32 @@
944#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801 944#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801
945#define PCI_DEVICE_ID_SUN_CASSINI 0xabba 945#define PCI_DEVICE_ID_SUN_CASSINI 0xabba
946 946
947#define PCI_VENDOR_ID_NI 0x1093
948#define PCI_DEVICE_ID_NI_PCI2322 0xd130
949#define PCI_DEVICE_ID_NI_PCI2324 0xd140
950#define PCI_DEVICE_ID_NI_PCI2328 0xd150
951#define PCI_DEVICE_ID_NI_PXI8422_2322 0xd190
952#define PCI_DEVICE_ID_NI_PXI8422_2324 0xd1a0
953#define PCI_DEVICE_ID_NI_PXI8420_2322 0xd1d0
954#define PCI_DEVICE_ID_NI_PXI8420_2324 0xd1e0
955#define PCI_DEVICE_ID_NI_PXI8420_2328 0xd1f0
956#define PCI_DEVICE_ID_NI_PXI8420_23216 0xd1f1
957#define PCI_DEVICE_ID_NI_PCI2322I 0xd250
958#define PCI_DEVICE_ID_NI_PCI2324I 0xd270
959#define PCI_DEVICE_ID_NI_PCI23216 0xd2b0
960#define PCI_DEVICE_ID_NI_PXI8430_2322 0x7080
961#define PCI_DEVICE_ID_NI_PCI8430_2322 0x70db
962#define PCI_DEVICE_ID_NI_PXI8430_2324 0x70dd
963#define PCI_DEVICE_ID_NI_PCI8430_2324 0x70df
964#define PCI_DEVICE_ID_NI_PXI8430_2328 0x70e2
965#define PCI_DEVICE_ID_NI_PCI8430_2328 0x70e4
966#define PCI_DEVICE_ID_NI_PXI8430_23216 0x70e6
967#define PCI_DEVICE_ID_NI_PCI8430_23216 0x70e7
968#define PCI_DEVICE_ID_NI_PXI8432_2322 0x70e8
969#define PCI_DEVICE_ID_NI_PCI8432_2322 0x70ea
970#define PCI_DEVICE_ID_NI_PXI8432_2324 0x70ec
971#define PCI_DEVICE_ID_NI_PCI8432_2324 0x70ee
972
947#define PCI_VENDOR_ID_CMD 0x1095 973#define PCI_VENDOR_ID_CMD 0x1095
948#define PCI_DEVICE_ID_CMD_643 0x0643 974#define PCI_DEVICE_ID_CMD_643 0x0643
949#define PCI_DEVICE_ID_CMD_646 0x0646 975#define PCI_DEVICE_ID_CMD_646 0x0646
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h
index 80044a4f3ab9..bfd92e1e5d2c 100644
--- a/include/linux/rcuclassic.h
+++ b/include/linux/rcuclassic.h
@@ -36,7 +36,6 @@
36#include <linux/cache.h> 36#include <linux/cache.h>
37#include <linux/spinlock.h> 37#include <linux/spinlock.h>
38#include <linux/threads.h> 38#include <linux/threads.h>
39#include <linux/percpu.h>
40#include <linux/cpumask.h> 39#include <linux/cpumask.h>
41#include <linux/seqlock.h> 40#include <linux/seqlock.h>
42 41
@@ -108,25 +107,14 @@ struct rcu_data {
108 struct rcu_head barrier; 107 struct rcu_head barrier;
109}; 108};
110 109
111DECLARE_PER_CPU(struct rcu_data, rcu_data);
112DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
113
114/* 110/*
115 * Increment the quiescent state counter. 111 * Increment the quiescent state counter.
116 * The counter is a bit degenerated: We do not need to know 112 * The counter is a bit degenerated: We do not need to know
117 * how many quiescent states passed, just if there was at least 113 * how many quiescent states passed, just if there was at least
118 * one since the start of the grace period. Thus just a flag. 114 * one since the start of the grace period. Thus just a flag.
119 */ 115 */
120static inline void rcu_qsctr_inc(int cpu) 116extern void rcu_qsctr_inc(int cpu);
121{ 117extern void rcu_bh_qsctr_inc(int cpu);
122 struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
123 rdp->passed_quiesc = 1;
124}
125static inline void rcu_bh_qsctr_inc(int cpu)
126{
127 struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
128 rdp->passed_quiesc = 1;
129}
130 118
131extern int rcu_pending(int cpu); 119extern int rcu_pending(int cpu);
132extern int rcu_needs_cpu(int cpu); 120extern int rcu_needs_cpu(int cpu);
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 528343e6da51..15fbb3ca634d 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -36,7 +36,6 @@
36#include <linux/cache.h> 36#include <linux/cache.h>
37#include <linux/spinlock.h> 37#include <linux/spinlock.h>
38#include <linux/threads.h> 38#include <linux/threads.h>
39#include <linux/percpu.h>
40#include <linux/cpumask.h> 39#include <linux/cpumask.h>
41#include <linux/seqlock.h> 40#include <linux/seqlock.h>
42#include <linux/lockdep.h> 41#include <linux/lockdep.h>
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h
index 74304b4538d8..fce522782ffa 100644
--- a/include/linux/rcupreempt.h
+++ b/include/linux/rcupreempt.h
@@ -36,34 +36,19 @@
36#include <linux/cache.h> 36#include <linux/cache.h>
37#include <linux/spinlock.h> 37#include <linux/spinlock.h>
38#include <linux/threads.h> 38#include <linux/threads.h>
39#include <linux/percpu.h> 39#include <linux/smp.h>
40#include <linux/cpumask.h> 40#include <linux/cpumask.h>
41#include <linux/seqlock.h> 41#include <linux/seqlock.h>
42 42
43struct rcu_dyntick_sched { 43extern void rcu_qsctr_inc(int cpu);
44 int dynticks; 44static inline void rcu_bh_qsctr_inc(int cpu) { }
45 int dynticks_snap;
46 int sched_qs;
47 int sched_qs_snap;
48 int sched_dynticks_snap;
49};
50
51DECLARE_PER_CPU(struct rcu_dyntick_sched, rcu_dyntick_sched);
52
53static inline void rcu_qsctr_inc(int cpu)
54{
55 struct rcu_dyntick_sched *rdssp = &per_cpu(rcu_dyntick_sched, cpu);
56
57 rdssp->sched_qs++;
58}
59#define rcu_bh_qsctr_inc(cpu)
60 45
61/* 46/*
62 * Someone might want to pass call_rcu_bh as a function pointer. 47 * Someone might want to pass call_rcu_bh as a function pointer.
63 * So this needs to just be a rename and not a macro function. 48 * So this needs to just be a rename and not a macro function.
64 * (no parentheses) 49 * (no parentheses)
65 */ 50 */
66#define call_rcu_bh call_rcu 51#define call_rcu_bh call_rcu
67 52
68/** 53/**
69 * call_rcu_sched - Queue RCU callback for invocation after sched grace period. 54 * call_rcu_sched - Queue RCU callback for invocation after sched grace period.
@@ -117,30 +102,12 @@ extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu);
117struct softirq_action; 102struct softirq_action;
118 103
119#ifdef CONFIG_NO_HZ 104#ifdef CONFIG_NO_HZ
120 105extern void rcu_enter_nohz(void);
121static inline void rcu_enter_nohz(void) 106extern void rcu_exit_nohz(void);
122{ 107#else
123 static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1); 108# define rcu_enter_nohz() do { } while (0)
124 109# define rcu_exit_nohz() do { } while (0)
125 smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */ 110#endif
126 __get_cpu_var(rcu_dyntick_sched).dynticks++;
127 WARN_ON_RATELIMIT(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1, &rs);
128}
129
130static inline void rcu_exit_nohz(void)
131{
132 static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1);
133
134 __get_cpu_var(rcu_dyntick_sched).dynticks++;
135 smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */
136 WARN_ON_RATELIMIT(!(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1),
137 &rs);
138}
139
140#else /* CONFIG_NO_HZ */
141#define rcu_enter_nohz() do { } while (0)
142#define rcu_exit_nohz() do { } while (0)
143#endif /* CONFIG_NO_HZ */
144 111
145/* 112/*
146 * A context switch is a grace period for rcupreempt synchronize_rcu() 113 * A context switch is a grace period for rcupreempt synchronize_rcu()
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
index a722fb67bb2d..0cdda00f2b2a 100644
--- a/include/linux/rcutree.h
+++ b/include/linux/rcutree.h
@@ -33,7 +33,6 @@
33#include <linux/cache.h> 33#include <linux/cache.h>
34#include <linux/spinlock.h> 34#include <linux/spinlock.h>
35#include <linux/threads.h> 35#include <linux/threads.h>
36#include <linux/percpu.h>
37#include <linux/cpumask.h> 36#include <linux/cpumask.h>
38#include <linux/seqlock.h> 37#include <linux/seqlock.h>
39 38
@@ -236,30 +235,8 @@ struct rcu_state {
236#endif /* #ifdef CONFIG_NO_HZ */ 235#endif /* #ifdef CONFIG_NO_HZ */
237}; 236};
238 237
239extern struct rcu_state rcu_state; 238extern void rcu_qsctr_inc(int cpu);
240DECLARE_PER_CPU(struct rcu_data, rcu_data); 239extern void rcu_bh_qsctr_inc(int cpu);
241
242extern struct rcu_state rcu_bh_state;
243DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
244
245/*
246 * Increment the quiescent state counter.
247 * The counter is a bit degenerated: We do not need to know
248 * how many quiescent states passed, just if there was at least
249 * one since the start of the grace period. Thus just a flag.
250 */
251static inline void rcu_qsctr_inc(int cpu)
252{
253 struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
254 rdp->passed_quiesc = 1;
255 rdp->passed_quiesc_completed = rdp->completed;
256}
257static inline void rcu_bh_qsctr_inc(int cpu)
258{
259 struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
260 rdp->passed_quiesc = 1;
261 rdp->passed_quiesc_completed = rdp->completed;
262}
263 240
264extern int rcu_pending(int cpu); 241extern int rcu_pending(int cpu);
265extern int rcu_needs_cpu(int cpu); 242extern int rcu_needs_cpu(int cpu);
diff --git a/include/linux/security.h b/include/linux/security.h
index 54ed15799a83..d5fd6163606f 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -32,6 +32,7 @@
32#include <linux/sched.h> 32#include <linux/sched.h>
33#include <linux/key.h> 33#include <linux/key.h>
34#include <linux/xfrm.h> 34#include <linux/xfrm.h>
35#include <linux/gfp.h>
35#include <net/flow.h> 36#include <net/flow.h>
36 37
37/* Maximum number of letters for an LSM name string */ 38/* Maximum number of letters for an LSM name string */
@@ -2953,5 +2954,28 @@ static inline void securityfs_remove(struct dentry *dentry)
2953 2954
2954#endif 2955#endif
2955 2956
2957#ifdef CONFIG_SECURITY
2958
2959static inline char *alloc_secdata(void)
2960{
2961 return (char *)get_zeroed_page(GFP_KERNEL);
2962}
2963
2964static inline void free_secdata(void *secdata)
2965{
2966 free_page((unsigned long)secdata);
2967}
2968
2969#else
2970
2971static inline char *alloc_secdata(void)
2972{
2973 return (char *)1;
2974}
2975
2976static inline void free_secdata(void *secdata)
2977{ }
2978#endif /* CONFIG_SECURITY */
2979
2956#endif /* ! __LINUX_SECURITY_H */ 2980#endif /* ! __LINUX_SECURITY_H */
2957 2981
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index df9245c7bd3b..57a97e52e58d 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -164,6 +164,9 @@
164/* NWPSERIAL */ 164/* NWPSERIAL */
165#define PORT_NWPSERIAL 85 165#define PORT_NWPSERIAL 85
166 166
167/* MAX3100 */
168#define PORT_MAX3100 86
169
167#ifdef __KERNEL__ 170#ifdef __KERNEL__
168 171
169#include <linux/compiler.h> 172#include <linux/compiler.h>
@@ -277,7 +280,7 @@ struct uart_port {
277 struct uart_icount icount; /* statistics */ 280 struct uart_icount icount; /* statistics */
278 281
279 struct console *cons; /* struct console, if any */ 282 struct console *cons; /* struct console, if any */
280#ifdef CONFIG_SERIAL_CORE_CONSOLE 283#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(SUPPORT_SYSRQ)
281 unsigned long sysrq; /* sysrq timeout */ 284 unsigned long sysrq; /* sysrq timeout */
282#endif 285#endif
283 286
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index f4523651fa42..5ac9b0bcaf9a 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -73,8 +73,8 @@ found:
73 73
74 ret = kmem_cache_alloc_notrace(cachep, flags); 74 ret = kmem_cache_alloc_notrace(cachep, flags);
75 75
76 kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, ret, 76 trace_kmalloc(_THIS_IP_, ret,
77 size, slab_buffer_size(cachep), flags); 77 size, slab_buffer_size(cachep), flags);
78 78
79 return ret; 79 return ret;
80 } 80 }
@@ -128,9 +128,9 @@ found:
128 128
129 ret = kmem_cache_alloc_node_notrace(cachep, flags, node); 129 ret = kmem_cache_alloc_node_notrace(cachep, flags, node);
130 130
131 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, 131 trace_kmalloc_node(_THIS_IP_, ret,
132 ret, size, slab_buffer_size(cachep), 132 size, slab_buffer_size(cachep),
133 flags, node); 133 flags, node);
134 134
135 return ret; 135 return ret;
136 } 136 }
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
index a1f90528e70b..5046f90c1171 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -233,8 +233,7 @@ static __always_inline void *kmalloc_large(size_t size, gfp_t flags)
233 unsigned int order = get_order(size); 233 unsigned int order = get_order(size);
234 void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order); 234 void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order);
235 235
236 kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, ret, 236 trace_kmalloc(_THIS_IP_, ret, size, PAGE_SIZE << order, flags);
237 size, PAGE_SIZE << order, flags);
238 237
239 return ret; 238 return ret;
240} 239}
@@ -255,9 +254,7 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags)
255 254
256 ret = kmem_cache_alloc_notrace(s, flags); 255 ret = kmem_cache_alloc_notrace(s, flags);
257 256
258 kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, 257 trace_kmalloc(_THIS_IP_, ret, size, s->size, flags);
259 _THIS_IP_, ret,
260 size, s->size, flags);
261 258
262 return ret; 259 return ret;
263 } 260 }
@@ -296,9 +293,8 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node)
296 293
297 ret = kmem_cache_alloc_node_notrace(s, flags, node); 294 ret = kmem_cache_alloc_node_notrace(s, flags, node);
298 295
299 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, 296 trace_kmalloc_node(_THIS_IP_, ret,
300 _THIS_IP_, ret, 297 size, s->size, flags, node);
301 size, s->size, flags, node);
302 298
303 return ret; 299 return ret;
304 } 300 }
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 68bb1c501d0d..2cc43fa380cb 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -204,6 +204,7 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
204 * SPI slaves, and are numbered from zero to num_chipselects. 204 * SPI slaves, and are numbered from zero to num_chipselects.
205 * each slave has a chipselect signal, but it's common that not 205 * each slave has a chipselect signal, but it's common that not
206 * every chipselect is connected to a slave. 206 * every chipselect is connected to a slave.
207 * @dma_alignment: SPI controller constraint on DMA buffers alignment.
207 * @setup: updates the device mode and clocking records used by a 208 * @setup: updates the device mode and clocking records used by a
208 * device's SPI controller; protocol code may call this. This 209 * device's SPI controller; protocol code may call this. This
209 * must fail if an unrecognized or unsupported mode is requested. 210 * must fail if an unrecognized or unsupported mode is requested.
@@ -239,6 +240,11 @@ struct spi_master {
239 */ 240 */
240 u16 num_chipselect; 241 u16 num_chipselect;
241 242
243 /* some SPI controllers pose alignment requirements on DMAable
244 * buffers; let protocol drivers know about these requirements.
245 */
246 u16 dma_alignment;
247
242 /* setup mode and clock, etc (spi driver may call many times) */ 248 /* setup mode and clock, etc (spi driver may call many times) */
243 int (*setup)(struct spi_device *spi); 249 int (*setup)(struct spi_device *spi);
244 250
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index d3a4c0231933..2a30775959e9 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -24,6 +24,15 @@
24 */ 24 */
25typedef int (*svc_thread_fn)(void *); 25typedef int (*svc_thread_fn)(void *);
26 26
27/* statistics for svc_pool structures */
28struct svc_pool_stats {
29 unsigned long packets;
30 unsigned long sockets_queued;
31 unsigned long threads_woken;
32 unsigned long overloads_avoided;
33 unsigned long threads_timedout;
34};
35
27/* 36/*
28 * 37 *
29 * RPC service thread pool. 38 * RPC service thread pool.
@@ -41,6 +50,8 @@ struct svc_pool {
41 struct list_head sp_sockets; /* pending sockets */ 50 struct list_head sp_sockets; /* pending sockets */
42 unsigned int sp_nrthreads; /* # of threads in pool */ 51 unsigned int sp_nrthreads; /* # of threads in pool */
43 struct list_head sp_all_threads; /* all server threads */ 52 struct list_head sp_all_threads; /* all server threads */
53 int sp_nwaking; /* number of threads woken but not yet active */
54 struct svc_pool_stats sp_stats; /* statistics on pool operation */
44} ____cacheline_aligned_in_smp; 55} ____cacheline_aligned_in_smp;
45 56
46/* 57/*
@@ -83,6 +94,8 @@ struct svc_serv {
83 struct module * sv_module; /* optional module to count when 94 struct module * sv_module; /* optional module to count when
84 * adding threads */ 95 * adding threads */
85 svc_thread_fn sv_function; /* main function for threads */ 96 svc_thread_fn sv_function; /* main function for threads */
97 unsigned int sv_drc_max_pages; /* Total pages for DRC */
98 unsigned int sv_drc_pages_used;/* DRC pages used */
86}; 99};
87 100
88/* 101/*
@@ -218,6 +231,7 @@ struct svc_rqst {
218 struct svc_cred rq_cred; /* auth info */ 231 struct svc_cred rq_cred; /* auth info */
219 void * rq_xprt_ctxt; /* transport specific context ptr */ 232 void * rq_xprt_ctxt; /* transport specific context ptr */
220 struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */ 233 struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */
234 int rq_usedeferral; /* use deferral */
221 235
222 size_t rq_xprt_hlen; /* xprt header len */ 236 size_t rq_xprt_hlen; /* xprt header len */
223 struct xdr_buf rq_arg; 237 struct xdr_buf rq_arg;
@@ -263,6 +277,7 @@ struct svc_rqst {
263 * cache pages */ 277 * cache pages */
264 wait_queue_head_t rq_wait; /* synchronization */ 278 wait_queue_head_t rq_wait; /* synchronization */
265 struct task_struct *rq_task; /* service thread */ 279 struct task_struct *rq_task; /* service thread */
280 int rq_waking; /* 1 if thread is being woken */
266}; 281};
267 282
268/* 283/*
@@ -393,6 +408,7 @@ struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int,
393 void (*shutdown)(struct svc_serv *), 408 void (*shutdown)(struct svc_serv *),
394 svc_thread_fn, struct module *); 409 svc_thread_fn, struct module *);
395int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int); 410int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int);
411int svc_pool_stats_open(struct svc_serv *serv, struct file *file);
396void svc_destroy(struct svc_serv *); 412void svc_destroy(struct svc_serv *);
397int svc_process(struct svc_rqst *); 413int svc_process(struct svc_rqst *);
398int svc_register(const struct svc_serv *, const int, 414int svc_register(const struct svc_serv *, const int,
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
index 49e1eb454465..d8910b68e1bd 100644
--- a/include/linux/sunrpc/xdr.h
+++ b/include/linux/sunrpc/xdr.h
@@ -69,27 +69,27 @@ struct xdr_buf {
69 * pre-xdr'ed macros. 69 * pre-xdr'ed macros.
70 */ 70 */
71 71
72#define xdr_zero __constant_htonl(0) 72#define xdr_zero cpu_to_be32(0)
73#define xdr_one __constant_htonl(1) 73#define xdr_one cpu_to_be32(1)
74#define xdr_two __constant_htonl(2) 74#define xdr_two cpu_to_be32(2)
75 75
76#define rpc_success __constant_htonl(RPC_SUCCESS) 76#define rpc_success cpu_to_be32(RPC_SUCCESS)
77#define rpc_prog_unavail __constant_htonl(RPC_PROG_UNAVAIL) 77#define rpc_prog_unavail cpu_to_be32(RPC_PROG_UNAVAIL)
78#define rpc_prog_mismatch __constant_htonl(RPC_PROG_MISMATCH) 78#define rpc_prog_mismatch cpu_to_be32(RPC_PROG_MISMATCH)
79#define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL) 79#define rpc_proc_unavail cpu_to_be32(RPC_PROC_UNAVAIL)
80#define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS) 80#define rpc_garbage_args cpu_to_be32(RPC_GARBAGE_ARGS)
81#define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR) 81#define rpc_system_err cpu_to_be32(RPC_SYSTEM_ERR)
82#define rpc_drop_reply __constant_htonl(RPC_DROP_REPLY) 82#define rpc_drop_reply cpu_to_be32(RPC_DROP_REPLY)
83 83
84#define rpc_auth_ok __constant_htonl(RPC_AUTH_OK) 84#define rpc_auth_ok cpu_to_be32(RPC_AUTH_OK)
85#define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED) 85#define rpc_autherr_badcred cpu_to_be32(RPC_AUTH_BADCRED)
86#define rpc_autherr_rejectedcred __constant_htonl(RPC_AUTH_REJECTEDCRED) 86#define rpc_autherr_rejectedcred cpu_to_be32(RPC_AUTH_REJECTEDCRED)
87#define rpc_autherr_badverf __constant_htonl(RPC_AUTH_BADVERF) 87#define rpc_autherr_badverf cpu_to_be32(RPC_AUTH_BADVERF)
88#define rpc_autherr_rejectedverf __constant_htonl(RPC_AUTH_REJECTEDVERF) 88#define rpc_autherr_rejectedverf cpu_to_be32(RPC_AUTH_REJECTEDVERF)
89#define rpc_autherr_tooweak __constant_htonl(RPC_AUTH_TOOWEAK) 89#define rpc_autherr_tooweak cpu_to_be32(RPC_AUTH_TOOWEAK)
90#define rpcsec_gsserr_credproblem __constant_htonl(RPCSEC_GSS_CREDPROBLEM) 90#define rpcsec_gsserr_credproblem cpu_to_be32(RPCSEC_GSS_CREDPROBLEM)
91#define rpcsec_gsserr_ctxproblem __constant_htonl(RPCSEC_GSS_CTXPROBLEM) 91#define rpcsec_gsserr_ctxproblem cpu_to_be32(RPCSEC_GSS_CTXPROBLEM)
92#define rpc_autherr_oldseqnum __constant_htonl(101) 92#define rpc_autherr_oldseqnum cpu_to_be32(101)
93 93
94/* 94/*
95 * Miscellaneous XDR helper functions 95 * Miscellaneous XDR helper functions
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
index 8615d661ab60..bcba84ea2d86 100644
--- a/include/linux/tty_driver.h
+++ b/include/linux/tty_driver.h
@@ -309,7 +309,8 @@ extern void tty_set_operations(struct tty_driver *driver,
309extern struct tty_driver *tty_find_polling_driver(char *name, int *line); 309extern struct tty_driver *tty_find_polling_driver(char *name, int *line);
310 310
311extern void tty_driver_kref_put(struct tty_driver *driver); 311extern void tty_driver_kref_put(struct tty_driver *driver);
312extern inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d) 312
313static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)
313{ 314{
314 kref_get(&d->kref); 315 kref_get(&d->kref);
315 return d; 316 return d;
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 139d234923cd..ebb2ea6b4995 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -737,6 +737,11 @@ struct v4l2_input {
737#define V4L2_IN_ST_NO_SIGNAL 0x00000002 737#define V4L2_IN_ST_NO_SIGNAL 0x00000002
738#define V4L2_IN_ST_NO_COLOR 0x00000004 738#define V4L2_IN_ST_NO_COLOR 0x00000004
739 739
740/* field 'status' - sensor orientation */
741/* If sensor is mounted upside down set both bits */
742#define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */
743#define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */
744
740/* field 'status' - analog */ 745/* field 'status' - analog */
741#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */ 746#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
742#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */ 747#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
diff --git a/include/linux/writeback.h b/include/linux/writeback.h
index 93445477f86a..9c1ed1fb6ddb 100644
--- a/include/linux/writeback.h
+++ b/include/linux/writeback.h
@@ -168,6 +168,8 @@ void writeback_set_ratelimit(void);
168/* pdflush.c */ 168/* pdflush.c */
169extern int nr_pdflush_threads; /* Global so it can be exported to sysctl 169extern int nr_pdflush_threads; /* Global so it can be exported to sysctl
170 read-only. */ 170 read-only. */
171extern int nr_pdflush_threads_max; /* Global so it can be exported to sysctl */
172extern int nr_pdflush_threads_min; /* Global so it can be exported to sysctl */
171 173
172 174
173#endif /* WRITEBACK_H */ 175#endif /* WRITEBACK_H */
diff --git a/include/media/msp3400.h b/include/media/msp3400.h
index 6ab854931c05..90cf22ada8b4 100644
--- a/include/media/msp3400.h
+++ b/include/media/msp3400.h
@@ -54,13 +54,13 @@
54 ======= 54 =======
55 55
56 So to specify a complete routing scheme for the msp3400 you will have to 56 So to specify a complete routing scheme for the msp3400 you will have to
57 specify in the 'input' field of the v4l2_routing struct: 57 specify in the 'input' arg of the s_routing function:
58 58
59 1) which tuner input to use 59 1) which tuner input to use
60 2) which SCART input to use 60 2) which SCART input to use
61 3) which DSP input to use for each DSP output 61 3) which DSP input to use for each DSP output
62 62
63 And in the 'output' field of the v4l2_routing struct you specify: 63 And in the 'output' arg of the s_routing function you specify:
64 64
65 1) which SCART input to use for each SCART output 65 1) which SCART input to use for each SCART output
66 66
diff --git a/include/media/ov772x.h b/include/media/ov772x.h
index 57db48dd85b8..30d9629198ef 100644
--- a/include/media/ov772x.h
+++ b/include/media/ov772x.h
@@ -17,10 +17,45 @@
17#define OV772X_FLAG_VFLIP 0x00000001 /* Vertical flip image */ 17#define OV772X_FLAG_VFLIP 0x00000001 /* Vertical flip image */
18#define OV772X_FLAG_HFLIP 0x00000002 /* Horizontal flip image */ 18#define OV772X_FLAG_HFLIP 0x00000002 /* Horizontal flip image */
19 19
20/*
21 * for Edge ctrl
22 *
23 * strength also control Auto or Manual Edge Control Mode
24 * see also OV772X_MANUAL_EDGE_CTRL
25 */
26struct ov772x_edge_ctrl {
27 unsigned char strength;
28 unsigned char threshold;
29 unsigned char upper;
30 unsigned char lower;
31};
32
33#define OV772X_MANUAL_EDGE_CTRL 0x80 /* un-used bit of strength */
34#define EDGE_STRENGTH_MASK 0x1F
35#define EDGE_THRESHOLD_MASK 0x0F
36#define EDGE_UPPER_MASK 0xFF
37#define EDGE_LOWER_MASK 0xFF
38
39#define OV772X_AUTO_EDGECTRL(u, l) \
40{ \
41 .upper = (u & EDGE_UPPER_MASK), \
42 .lower = (l & EDGE_LOWER_MASK), \
43}
44
45#define OV772X_MANUAL_EDGECTRL(s, t) \
46{ \
47 .strength = (s & EDGE_STRENGTH_MASK) | OV772X_MANUAL_EDGE_CTRL,\
48 .threshold = (t & EDGE_THRESHOLD_MASK), \
49}
50
51/*
52 * ov772x camera info
53 */
20struct ov772x_camera_info { 54struct ov772x_camera_info {
21 unsigned long buswidth; 55 unsigned long buswidth;
22 unsigned long flags; 56 unsigned long flags;
23 struct soc_camera_link link; 57 struct soc_camera_link link;
58 struct ov772x_edge_ctrl edgectrl;
24}; 59};
25 60
26#endif /* __OV772X_H__ */ 61#endif /* __OV772X_H__ */
diff --git a/include/media/saa7146.h b/include/media/saa7146.h
index fff4235adae5..7a9f76ecbbbd 100644
--- a/include/media/saa7146.h
+++ b/include/media/saa7146.h
@@ -18,7 +18,7 @@
18#include <linux/vmalloc.h> /* for vmalloc() */ 18#include <linux/vmalloc.h> /* for vmalloc() */
19#include <linux/mm.h> /* for vmalloc_to_page() */ 19#include <linux/mm.h> /* for vmalloc_to_page() */
20 20
21#define SAA7146_VERSION_CODE 0x000500 /* 0.5.0 */ 21#define SAA7146_VERSION_CODE 0x000600 /* 0.6.0 */
22 22
23#define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr))) 23#define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr)))
24#define saa7146_read(sxy,adr) readl(sxy->mem+(adr)) 24#define saa7146_read(sxy,adr) readl(sxy->mem+(adr))
diff --git a/include/media/tvaudio.h b/include/media/tvaudio.h
index 6915aafc875a..1ac8184693f8 100644
--- a/include/media/tvaudio.h
+++ b/include/media/tvaudio.h
@@ -21,10 +21,29 @@
21#ifndef _TVAUDIO_H 21#ifndef _TVAUDIO_H
22#define _TVAUDIO_H 22#define _TVAUDIO_H
23 23
24#include <media/i2c-addr.h>
25
24/* The tvaudio module accepts the following inputs: */ 26/* The tvaudio module accepts the following inputs: */
25#define TVAUDIO_INPUT_TUNER 0 27#define TVAUDIO_INPUT_TUNER 0
26#define TVAUDIO_INPUT_RADIO 1 28#define TVAUDIO_INPUT_RADIO 1
27#define TVAUDIO_INPUT_EXTERN 2 29#define TVAUDIO_INPUT_EXTERN 2
28#define TVAUDIO_INPUT_INTERN 3 30#define TVAUDIO_INPUT_INTERN 3
29 31
32static inline const unsigned short *tvaudio_addrs(void)
33{
34 static const unsigned short addrs[] = {
35 I2C_ADDR_TDA8425 >> 1,
36 I2C_ADDR_TEA6300 >> 1,
37 I2C_ADDR_TEA6420 >> 1,
38 I2C_ADDR_TDA9840 >> 1,
39 I2C_ADDR_TDA985x_L >> 1,
40 I2C_ADDR_TDA985x_H >> 1,
41 I2C_ADDR_TDA9874 >> 1,
42 I2C_ADDR_PIC16C54 >> 1,
43 I2C_CLIENT_END
44 };
45
46 return addrs;
47}
48
30#endif 49#endif
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index 3a6905615d68..c48c24e4d0fa 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -125,7 +125,7 @@ int v4l2_chip_match_host(const struct v4l2_dbg_match *match);
125 125
126/* ------------------------------------------------------------------------- */ 126/* ------------------------------------------------------------------------- */
127 127
128/* Helper function for I2C legacy drivers */ 128/* I2C Helper functions */
129 129
130struct i2c_driver; 130struct i2c_driver;
131struct i2c_adapter; 131struct i2c_adapter;
@@ -135,21 +135,24 @@ struct v4l2_device;
135struct v4l2_subdev; 135struct v4l2_subdev;
136struct v4l2_subdev_ops; 136struct v4l2_subdev_ops;
137 137
138int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver,
139 const char *name,
140 int (*probe)(struct i2c_client *, const struct i2c_device_id *));
141 138
142/* Load an i2c module and return an initialized v4l2_subdev struct. 139/* Load an i2c module and return an initialized v4l2_subdev struct.
143 Only call request_module if module_name != NULL. 140 Only call request_module if module_name != NULL.
144 The client_type argument is the name of the chip that's on the adapter. */ 141 The client_type argument is the name of the chip that's on the adapter. */
145struct v4l2_subdev *v4l2_i2c_new_subdev(struct i2c_adapter *adapter, 142struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
143 struct i2c_adapter *adapter,
146 const char *module_name, const char *client_type, u8 addr); 144 const char *module_name, const char *client_type, u8 addr);
147/* Probe and load an i2c module and return an initialized v4l2_subdev struct. 145/* Probe and load an i2c module and return an initialized v4l2_subdev struct.
148 Only call request_module if module_name != NULL. 146 Only call request_module if module_name != NULL.
149 The client_type argument is the name of the chip that's on the adapter. */ 147 The client_type argument is the name of the chip that's on the adapter. */
150struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter, 148struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device *v4l2_dev,
149 struct i2c_adapter *adapter,
151 const char *module_name, const char *client_type, 150 const char *module_name, const char *client_type,
152 const unsigned short *addrs); 151 const unsigned short *addrs);
152/* Like v4l2_i2c_new_probed_subdev, except probe for a single address. */
153struct v4l2_subdev *v4l2_i2c_new_probed_subdev_addr(struct v4l2_device *v4l2_dev,
154 struct i2c_adapter *adapter,
155 const char *module_name, const char *client_type, u8 addr);
153/* Initialize an v4l2_subdev with data from an i2c_client struct */ 156/* Initialize an v4l2_subdev with data from an i2c_client struct */
154void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, 157void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
155 const struct v4l2_subdev_ops *ops); 158 const struct v4l2_subdev_ops *ops);
@@ -171,139 +174,23 @@ const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type);
171 174
172/* ------------------------------------------------------------------------- */ 175/* ------------------------------------------------------------------------- */
173 176
174/* Internal ioctls */ 177/* Note: these remaining ioctls/structs should be removed as well, but they are
175 178 still used in tuner-simple.c (TUNER_SET_CONFIG), cx18/ivtv (RESET) and
176/* VIDIOC_INT_DECODE_VBI_LINE */ 179 v4l2-int-device.h (v4l2_routing). To remove these ioctls some more cleanup
177struct v4l2_decode_vbi_line { 180 is needed in those modules. */
178 u32 is_second_field; /* Set to 0 for the first (odd) field,
179 set to 1 for the second (even) field. */
180 u8 *p; /* Pointer to the sliced VBI data from the decoder.
181 On exit points to the start of the payload. */
182 u32 line; /* Line number of the sliced VBI data (1-23) */
183 u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */
184};
185 181
182/* s_config */
186struct v4l2_priv_tun_config { 183struct v4l2_priv_tun_config {
187 int tuner; 184 int tuner;
188 void *priv; 185 void *priv;
189}; 186};
190
191/* audio ioctls */
192
193/* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */
194#define AUDC_SET_RADIO _IO('d',88)
195
196/* tuner ioctls */
197
198/* Sets tuner type and its I2C addr */
199#define TUNER_SET_TYPE_ADDR _IOW('d', 90, int)
200
201/* Puts tuner on powersaving state, disabling it, except for i2c. To be replaced
202 by VIDIOC_INT_S_STANDBY. */
203#define TUNER_SET_STANDBY _IOW('d', 91, int)
204
205/* Sets tda9887 specific stuff, like port1, port2 and qss */
206#define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config) 187#define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config)
207 188
208/* Switch the tuner to a specific tuner mode. Replacement of AUDC_SET_RADIO */
209#define VIDIOC_INT_S_TUNER_MODE _IOW('d', 93, enum v4l2_tuner_type)
210
211/* Generic standby command. Passing -1 (all bits set to 1) will put the whole
212 chip into standby mode, value 0 will make the chip fully active. Specific
213 bits can be used by certain chips to enable/disable specific subsystems.
214 Replacement of TUNER_SET_STANDBY. */
215#define VIDIOC_INT_S_STANDBY _IOW('d', 94, u32)
216
217/* 100, 101 used by VIDIOC_DBG_[SG]_REGISTER */
218
219/* Generic reset command. The argument selects which subsystems to reset.
220 Passing 0 will always reset the whole chip. */
221#define VIDIOC_INT_RESET _IOW ('d', 102, u32) 189#define VIDIOC_INT_RESET _IOW ('d', 102, u32)
222 190
223/* Set the frequency (in Hz) of the audio clock output.
224 Used to slave an audio processor to the video decoder, ensuring that audio
225 and video remain synchronized.
226 Usual values for the frequency are 48000, 44100 or 32000 Hz.
227 If the frequency is not supported, then -EINVAL is returned. */
228#define VIDIOC_INT_AUDIO_CLOCK_FREQ _IOW ('d', 103, u32)
229
230/* Video decoders that support sliced VBI need to implement this ioctl.
231 Field p of the v4l2_sliced_vbi_line struct is set to the start of the VBI
232 data that was generated by the decoder. The driver then parses the sliced
233 VBI data and sets the other fields in the struct accordingly. The pointer p
234 is updated to point to the start of the payload which can be copied
235 verbatim into the data field of the v4l2_sliced_vbi_data struct. If no
236 valid VBI data was found, then the type field is set to 0 on return. */
237#define VIDIOC_INT_DECODE_VBI_LINE _IOWR('d', 104, struct v4l2_decode_vbi_line)
238
239/* Used to generate VBI signals on a video signal. v4l2_sliced_vbi_data is
240 filled with the data packets that should be output. Note that if you set
241 the line field to 0, then that VBI signal is disabled. If no
242 valid VBI data was found, then the type field is set to 0 on return. */
243#define VIDIOC_INT_S_VBI_DATA _IOW ('d', 105, struct v4l2_sliced_vbi_data)
244
245/* Used to obtain the sliced VBI packet from a readback register. Not all
246 video decoders support this. If no data is available because the readback
247 register contains invalid or erroneous data -EIO is returned. Note that
248 you must fill in the 'id' member and the 'field' member (to determine
249 whether CC data from the first or second field should be obtained). */
250#define VIDIOC_INT_G_VBI_DATA _IOWR('d', 106, struct v4l2_sliced_vbi_data)
251
252/* Sets I2S speed in bps. This is used to provide a standard way to select I2S
253 clock used by driving digital audio streams at some board designs.
254 Usual values for the frequency are 1024000 and 2048000.
255 If the frequency is not supported, then -EINVAL is returned. */
256#define VIDIOC_INT_I2S_CLOCK_FREQ _IOW ('d', 108, u32)
257
258/* Routing definition, device dependent. It specifies which inputs (if any)
259 should be routed to which outputs (if any). */
260struct v4l2_routing { 191struct v4l2_routing {
261 u32 input; 192 u32 input;
262 u32 output; 193 u32 output;
263}; 194};
264 195
265/* These internal commands should be used to define the inputs and outputs
266 of an audio/video chip. They will replace the v4l2 API commands
267 VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT
268 that are meant to be used by the user.
269 The internal commands should be used to switch inputs/outputs
270 because only the driver knows how to map a 'Television' input to the precise
271 input/output routing of an A/D converter, or a DSP, or a video digitizer.
272 These four commands should only be sent directly to an i2c device, they
273 should not be broadcast as the routing is very device specific. */
274#define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing)
275#define VIDIOC_INT_G_AUDIO_ROUTING _IOR ('d', 110, struct v4l2_routing)
276#define VIDIOC_INT_S_VIDEO_ROUTING _IOW ('d', 111, struct v4l2_routing)
277#define VIDIOC_INT_G_VIDEO_ROUTING _IOR ('d', 112, struct v4l2_routing)
278
279struct v4l2_crystal_freq {
280 u32 freq; /* frequency in Hz of the crystal */
281 u32 flags; /* device specific flags */
282};
283
284/* Sets the frequency of the crystal used to generate the clocks.
285 An extra flags field allows device specific configuration regarding
286 clock frequency dividers, etc. If not used, then set flags to 0.
287 If the frequency is not supported, then -EINVAL is returned. */
288#define VIDIOC_INT_S_CRYSTAL_FREQ _IOW('d', 113, struct v4l2_crystal_freq)
289
290/* Initialize the sensor registors to some sort of reasonable
291 default values. */
292#define VIDIOC_INT_INIT _IOW('d', 114, u32)
293
294/* Set v4l2_std_id for video OUTPUT devices. This is ignored by
295 video input devices. */
296#define VIDIOC_INT_S_STD_OUTPUT _IOW('d', 115, v4l2_std_id)
297
298/* Get v4l2_std_id for video OUTPUT devices. This is ignored by
299 video input devices. */
300#define VIDIOC_INT_G_STD_OUTPUT _IOW('d', 116, v4l2_std_id)
301
302/* Set GPIO pins. Very simple right now, might need to be extended with
303 a v4l2_gpio struct if a direction is also needed. */
304#define VIDIOC_INT_S_GPIO _IOW('d', 117, u32)
305
306/* Get input status. Same as the status field in the v4l2_input struct. */
307#define VIDIOC_INT_G_INPUT_STATUS _IOR('d', 118, u32)
308
309#endif /* V4L2_COMMON_H_ */ 196#endif /* V4L2_COMMON_H_ */
diff --git a/include/media/v4l2-i2c-drv-legacy.h b/include/media/v4l2-i2c-drv-legacy.h
deleted file mode 100644
index e65dd9d84e8b..000000000000
--- a/include/media/v4l2-i2c-drv-legacy.h
+++ /dev/null
@@ -1,152 +0,0 @@
1/*
2 * v4l2-i2c-drv-legacy.h - contains I2C handling code that's identical
3 * for all V4L2 I2C drivers. Use this header if the
4 * I2C driver is used by both legacy drivers and
5 * drivers converted to the bus-based I2C API.
6 *
7 * Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24/* NOTE: the full version of this header is in the v4l-dvb repository
25 * and allows v4l i2c drivers to be compiled on older kernels as well.
26 * The version of this header as it appears in the kernel is a stripped
27 * version (without all the backwards compatibility stuff) and so it
28 * looks a bit odd.
29 *
30 * If you look at the full version then you will understand the reason
31 * for introducing this header since you really don't want to have all
32 * the tricky backwards compatibility code in each and every i2c driver.
33 */
34
35struct v4l2_i2c_driver_data {
36 const char * const name;
37 int driverid;
38 int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
39 int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);
40 int (*remove)(struct i2c_client *client);
41 int (*suspend)(struct i2c_client *client, pm_message_t state);
42 int (*resume)(struct i2c_client *client);
43 int (*legacy_probe)(struct i2c_adapter *adapter);
44 int legacy_class;
45 const struct i2c_device_id *id_table;
46};
47
48static struct v4l2_i2c_driver_data v4l2_i2c_data;
49static const struct i2c_client_address_data addr_data;
50static struct i2c_driver v4l2_i2c_driver_legacy;
51static char v4l2_i2c_drv_name_legacy[32];
52
53static int v4l2_i2c_drv_attach_legacy(struct i2c_adapter *adapter, int address, int kind)
54{
55 return v4l2_i2c_attach(adapter, address, &v4l2_i2c_driver_legacy,
56 v4l2_i2c_drv_name_legacy, v4l2_i2c_data.probe);
57}
58
59static int v4l2_i2c_drv_probe_legacy(struct i2c_adapter *adapter)
60{
61 if (v4l2_i2c_data.legacy_probe) {
62 if (v4l2_i2c_data.legacy_probe(adapter))
63 return i2c_probe(adapter, &addr_data, v4l2_i2c_drv_attach_legacy);
64 return 0;
65 }
66 if (adapter->class & v4l2_i2c_data.legacy_class)
67 return i2c_probe(adapter, &addr_data, v4l2_i2c_drv_attach_legacy);
68 return 0;
69}
70
71static int v4l2_i2c_drv_detach_legacy(struct i2c_client *client)
72{
73 int err;
74
75 if (v4l2_i2c_data.remove)
76 v4l2_i2c_data.remove(client);
77
78 err = i2c_detach_client(client);
79 if (err)
80 return err;
81 kfree(client);
82 return 0;
83}
84
85static int v4l2_i2c_drv_suspend_helper(struct i2c_client *client, pm_message_t state)
86{
87 return v4l2_i2c_data.suspend ? v4l2_i2c_data.suspend(client, state) : 0;
88}
89
90static int v4l2_i2c_drv_resume_helper(struct i2c_client *client)
91{
92 return v4l2_i2c_data.resume ? v4l2_i2c_data.resume(client) : 0;
93}
94
95/* ----------------------------------------------------------------------- */
96
97/* i2c implementation */
98static struct i2c_driver v4l2_i2c_driver_legacy = {
99 .driver = {
100 .owner = THIS_MODULE,
101 },
102 .attach_adapter = v4l2_i2c_drv_probe_legacy,
103 .detach_client = v4l2_i2c_drv_detach_legacy,
104 .suspend = v4l2_i2c_drv_suspend_helper,
105 .resume = v4l2_i2c_drv_resume_helper,
106};
107
108/* ----------------------------------------------------------------------- */
109
110/* i2c implementation */
111static struct i2c_driver v4l2_i2c_driver = {
112 .suspend = v4l2_i2c_drv_suspend_helper,
113 .resume = v4l2_i2c_drv_resume_helper,
114};
115
116static int __init v4l2_i2c_drv_init(void)
117{
118 int err;
119
120 strlcpy(v4l2_i2c_drv_name_legacy, v4l2_i2c_data.name, sizeof(v4l2_i2c_drv_name_legacy));
121 strlcat(v4l2_i2c_drv_name_legacy, "'", sizeof(v4l2_i2c_drv_name_legacy));
122
123 if (v4l2_i2c_data.legacy_class == 0)
124 v4l2_i2c_data.legacy_class = I2C_CLASS_TV_ANALOG;
125
126 v4l2_i2c_driver_legacy.driver.name = v4l2_i2c_drv_name_legacy;
127 v4l2_i2c_driver_legacy.id = v4l2_i2c_data.driverid;
128 v4l2_i2c_driver_legacy.command = v4l2_i2c_data.command;
129 err = i2c_add_driver(&v4l2_i2c_driver_legacy);
130
131 if (err)
132 return err;
133 v4l2_i2c_driver.driver.name = v4l2_i2c_data.name;
134 v4l2_i2c_driver.id = v4l2_i2c_data.driverid;
135 v4l2_i2c_driver.command = v4l2_i2c_data.command;
136 v4l2_i2c_driver.probe = v4l2_i2c_data.probe;
137 v4l2_i2c_driver.remove = v4l2_i2c_data.remove;
138 v4l2_i2c_driver.id_table = v4l2_i2c_data.id_table;
139 err = i2c_add_driver(&v4l2_i2c_driver);
140 if (err)
141 i2c_del_driver(&v4l2_i2c_driver_legacy);
142 return err;
143}
144
145static void __exit v4l2_i2c_drv_cleanup(void)
146{
147 i2c_del_driver(&v4l2_i2c_driver_legacy);
148 i2c_del_driver(&v4l2_i2c_driver);
149}
150
151module_init(v4l2_i2c_drv_init);
152module_exit(v4l2_i2c_drv_cleanup);
diff --git a/include/media/v4l2-i2c-drv.h b/include/media/v4l2-i2c-drv.h
index efdc8bf27f87..10a2882c3cbf 100644
--- a/include/media/v4l2-i2c-drv.h
+++ b/include/media/v4l2-i2c-drv.h
@@ -39,14 +39,11 @@
39 39
40struct v4l2_i2c_driver_data { 40struct v4l2_i2c_driver_data {
41 const char * const name; 41 const char * const name;
42 int driverid;
43 int (*command)(struct i2c_client *client, unsigned int cmd, void *arg); 42 int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
44 int (*probe)(struct i2c_client *client, const struct i2c_device_id *id); 43 int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);
45 int (*remove)(struct i2c_client *client); 44 int (*remove)(struct i2c_client *client);
46 int (*suspend)(struct i2c_client *client, pm_message_t state); 45 int (*suspend)(struct i2c_client *client, pm_message_t state);
47 int (*resume)(struct i2c_client *client); 46 int (*resume)(struct i2c_client *client);
48 int (*legacy_probe)(struct i2c_adapter *adapter);
49 int legacy_class;
50 const struct i2c_device_id *id_table; 47 const struct i2c_device_id *id_table;
51}; 48};
52 49
@@ -54,12 +51,11 @@ static struct v4l2_i2c_driver_data v4l2_i2c_data;
54static struct i2c_driver v4l2_i2c_driver; 51static struct i2c_driver v4l2_i2c_driver;
55 52
56 53
57/* Bus-based I2C implementation for kernels >= 2.6.22 */ 54/* Bus-based I2C implementation for kernels >= 2.6.26 */
58 55
59static int __init v4l2_i2c_drv_init(void) 56static int __init v4l2_i2c_drv_init(void)
60{ 57{
61 v4l2_i2c_driver.driver.name = v4l2_i2c_data.name; 58 v4l2_i2c_driver.driver.name = v4l2_i2c_data.name;
62 v4l2_i2c_driver.id = v4l2_i2c_data.driverid;
63 v4l2_i2c_driver.command = v4l2_i2c_data.command; 59 v4l2_i2c_driver.command = v4l2_i2c_data.command;
64 v4l2_i2c_driver.probe = v4l2_i2c_data.probe; 60 v4l2_i2c_driver.probe = v4l2_i2c_data.probe;
65 v4l2_i2c_driver.remove = v4l2_i2c_data.remove; 61 v4l2_i2c_driver.remove = v4l2_i2c_data.remove;
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 1d181b4ccb01..17856081c809 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -27,6 +27,16 @@ struct v4l2_device;
27struct v4l2_subdev; 27struct v4l2_subdev;
28struct tuner_setup; 28struct tuner_setup;
29 29
30/* decode_vbi_line */
31struct v4l2_decode_vbi_line {
32 u32 is_second_field; /* Set to 0 for the first (odd) field,
33 set to 1 for the second (even) field. */
34 u8 *p; /* Pointer to the sliced VBI data from the decoder.
35 On exit points to the start of the payload. */
36 u32 line; /* Line number of the sliced VBI data (1-23) */
37 u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */
38};
39
30/* Sub-devices are devices that are connected somehow to the main bridge 40/* Sub-devices are devices that are connected somehow to the main bridge
31 device. These devices are usually audio/video muxers/encoders/decoders or 41 device. These devices are usually audio/video muxers/encoders/decoders or
32 sensors and webcam controllers. 42 sensors and webcam controllers.
@@ -68,11 +78,26 @@ struct tuner_setup;
68 the use-case it might be better to use subdev-specific ops (currently 78 the use-case it might be better to use subdev-specific ops (currently
69 not yet implemented) since ops provide proper type-checking. 79 not yet implemented) since ops provide proper type-checking.
70 */ 80 */
81
82/* init: initialize the sensor registors to some sort of reasonable default
83 values. Do not use for new drivers and should be removed in existing
84 drivers.
85
86 load_fw: load firmware.
87
88 reset: generic reset command. The argument selects which subsystems to
89 reset. Passing 0 will always reset the whole chip. Do not use for new
90 drivers without discussing this first on the linux-media mailinglist.
91 There should be no reason normally to reset a device.
92
93 s_gpio: set GPIO pins. Very simple right now, might need to be extended with
94 a direction argument if needed.
95 */
71struct v4l2_subdev_core_ops { 96struct v4l2_subdev_core_ops {
72 int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); 97 int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip);
73 int (*log_status)(struct v4l2_subdev *sd); 98 int (*log_status)(struct v4l2_subdev *sd);
74 int (*init)(struct v4l2_subdev *sd, u32 val); 99 int (*init)(struct v4l2_subdev *sd, u32 val);
75 int (*s_standby)(struct v4l2_subdev *sd, u32 standby); 100 int (*load_fw)(struct v4l2_subdev *sd);
76 int (*reset)(struct v4l2_subdev *sd, u32 val); 101 int (*reset)(struct v4l2_subdev *sd, u32 val);
77 int (*s_gpio)(struct v4l2_subdev *sd, u32 val); 102 int (*s_gpio)(struct v4l2_subdev *sd, u32 val);
78 int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); 103 int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
@@ -82,6 +107,7 @@ struct v4l2_subdev_core_ops {
82 int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); 107 int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
83 int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); 108 int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
84 int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); 109 int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
110 int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
85 long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); 111 long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
86#ifdef CONFIG_VIDEO_ADV_DEBUG 112#ifdef CONFIG_VIDEO_ADV_DEBUG
87 int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); 113 int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg);
@@ -89,6 +115,16 @@ struct v4l2_subdev_core_ops {
89#endif 115#endif
90}; 116};
91 117
118/* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio.
119
120 s_radio: v4l device was opened in Radio mode, to be replaced by s_mode.
121
122 s_type_addr: sets tuner type and its I2C addr.
123
124 s_config: sets tda9887 specific stuff, like port1, port2 and qss
125
126 s_standby: puts tuner on powersaving state, disabling it, except for i2c.
127 */
92struct v4l2_subdev_tuner_ops { 128struct v4l2_subdev_tuner_ops {
93 int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); 129 int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type);
94 int (*s_radio)(struct v4l2_subdev *sd); 130 int (*s_radio)(struct v4l2_subdev *sd);
@@ -96,20 +132,77 @@ struct v4l2_subdev_tuner_ops {
96 int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); 132 int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq);
97 int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); 133 int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
98 int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); 134 int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
99 int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
100 int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); 135 int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type);
101 int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); 136 int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config);
137 int (*s_standby)(struct v4l2_subdev *sd);
102}; 138};
103 139
140/* s_clock_freq: set the frequency (in Hz) of the audio clock output.
141 Used to slave an audio processor to the video decoder, ensuring that
142 audio and video remain synchronized. Usual values for the frequency
143 are 48000, 44100 or 32000 Hz. If the frequency is not supported, then
144 -EINVAL is returned.
145
146 s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard
147 way to select I2S clock used by driving digital audio streams at some
148 board designs. Usual values for the frequency are 1024000 and 2048000.
149 If the frequency is not supported, then -EINVAL is returned.
150
151 s_routing: used to define the input and/or output pins of an audio chip,
152 and any additional configuration data.
153 Never attempt to use user-level input IDs (e.g. Composite, S-Video,
154 Tuner) at this level. An i2c device shouldn't know about whether an
155 input pin is connected to a Composite connector, become on another
156 board or platform it might be connected to something else entirely.
157 The calling driver is responsible for mapping a user-level input to
158 the right pins on the i2c device.
159 */
104struct v4l2_subdev_audio_ops { 160struct v4l2_subdev_audio_ops {
105 int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); 161 int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
106 int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); 162 int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
107 int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route); 163 int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
108}; 164};
109 165
166/*
167 decode_vbi_line: video decoders that support sliced VBI need to implement
168 this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the
169 start of the VBI data that was generated by the decoder. The driver
170 then parses the sliced VBI data and sets the other fields in the
171 struct accordingly. The pointer p is updated to point to the start of
172 the payload which can be copied verbatim into the data field of the
173 v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the
174 type field is set to 0 on return.
175
176 s_vbi_data: used to generate VBI signals on a video signal.
177 v4l2_sliced_vbi_data is filled with the data packets that should be
178 output. Note that if you set the line field to 0, then that VBI signal
179 is disabled. If no valid VBI data was found, then the type field is
180 set to 0 on return.
181
182 g_vbi_data: used to obtain the sliced VBI packet from a readback register.
183 Not all video decoders support this. If no data is available because
184 the readback register contains invalid or erroneous data -EIO is
185 returned. Note that you must fill in the 'id' member and the 'field'
186 member (to determine whether CC data from the first or second field
187 should be obtained).
188
189 s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by
190 video input devices.
191
192 s_crystal_freq: sets the frequency of the crystal used to generate the
193 clocks in Hz. An extra flags field allows device specific configuration
194 regarding clock frequency dividers, etc. If not used, then set flags
195 to 0. If the frequency is not supported, then -EINVAL is returned.
196
197 g_input_status: get input status. Same as the status field in the v4l2_input
198 struct.
199
200 s_routing: see s_routing in audio_ops, except this version is for video
201 devices.
202 */
110struct v4l2_subdev_video_ops { 203struct v4l2_subdev_video_ops {
111 int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route); 204 int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
112 int (*s_crystal_freq)(struct v4l2_subdev *sd, struct v4l2_crystal_freq *freq); 205 int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
113 int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); 206 int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line);
114 int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); 207 int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data);
115 int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); 208 int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
@@ -163,18 +256,6 @@ static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)
163 return sd->priv; 256 return sd->priv;
164} 257}
165 258
166/* Convert an ioctl-type command to the proper v4l2_subdev_ops function call.
167 This is used by subdev modules that can be called by both old-style ioctl
168 commands and through the v4l2_subdev_ops.
169
170 The ioctl API of the subdev driver can call this function to call the
171 right ops based on the ioctl cmd and arg.
172
173 Once all subdev drivers have been converted and all drivers no longer
174 use the ioctl interface, then this function can be removed.
175 */
176int v4l2_subdev_command(struct v4l2_subdev *sd, unsigned cmd, void *arg);
177
178static inline void v4l2_subdev_init(struct v4l2_subdev *sd, 259static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
179 const struct v4l2_subdev_ops *ops) 260 const struct v4l2_subdev_ops *ops)
180{ 261{
diff --git a/include/scsi/fc/fc_fip.h b/include/scsi/fc/fc_fip.h
new file mode 100644
index 000000000000..0627a9ae6347
--- /dev/null
+++ b/include/scsi/fc/fc_fip.h
@@ -0,0 +1,237 @@
1/*
2 * Copyright 2008 Cisco Systems, Inc. All rights reserved.
3 *
4 * This program is free software; you may redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
9 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
11 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
12 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
13 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
15 * SOFTWARE.
16 */
17#ifndef _FC_FIP_H_
18#define _FC_FIP_H_
19
20/*
21 * This version is based on:
22 * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
23 */
24
25/*
26 * The FIP ethertype eventually goes in net/if_ether.h.
27 */
28#ifndef ETH_P_FIP
29#define ETH_P_FIP 0x8914 /* FIP Ethertype */
30#endif
31
32#define FIP_DEF_PRI 128 /* default selection priority */
33#define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */
34#define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */
35#define FIP_VN_KA_PERIOD 90000 /* required VN_port keep-alive period (mS) */
36#define FIP_FCF_FUZZ 100 /* random time added by FCF (mS) */
37
38/*
39 * Multicast MAC addresses. T11-adopted.
40 */
41#define FIP_ALL_FCOE_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
42#define FIP_ALL_ENODE_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
43#define FIP_ALL_FCF_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
44
45#define FIP_VER 1 /* version for fip_header */
46
47struct fip_header {
48 __u8 fip_ver; /* upper 4 bits are the version */
49 __u8 fip_resv1; /* reserved */
50 __be16 fip_op; /* operation code */
51 __u8 fip_resv2; /* reserved */
52 __u8 fip_subcode; /* lower 4 bits are sub-code */
53 __be16 fip_dl_len; /* length of descriptors in words */
54 __be16 fip_flags; /* header flags */
55} __attribute__((packed));
56
57#define FIP_VER_SHIFT 4
58#define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
59#define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
60#define FIP_BPW 4 /* bytes per word for lengths */
61
62/*
63 * fip_op.
64 */
65enum fip_opcode {
66 FIP_OP_DISC = 1, /* discovery, advertisement, etc. */
67 FIP_OP_LS = 2, /* Link Service request or reply */
68 FIP_OP_CTRL = 3, /* Keep Alive / Link Reset */
69 FIP_OP_VLAN = 4, /* VLAN discovery */
70 FIP_OP_VENDOR_MIN = 0xfff8, /* min vendor-specific opcode */
71 FIP_OP_VENDOR_MAX = 0xfffe, /* max vendor-specific opcode */
72};
73
74/*
75 * Subcodes for FIP_OP_DISC.
76 */
77enum fip_disc_subcode {
78 FIP_SC_SOL = 1, /* solicitation */
79 FIP_SC_ADV = 2, /* advertisement */
80};
81
82/*
83 * Subcodes for FIP_OP_LS.
84 */
85enum fip_trans_subcode {
86 FIP_SC_REQ = 1, /* request */
87 FIP_SC_REP = 2, /* reply */
88};
89
90/*
91 * Subcodes for FIP_OP_RESET.
92 */
93enum fip_reset_subcode {
94 FIP_SC_KEEP_ALIVE = 1, /* keep-alive from VN_Port */
95 FIP_SC_CLR_VLINK = 2, /* clear virtual link from VF_Port */
96};
97
98/*
99 * Subcodes for FIP_OP_VLAN.
100 */
101enum fip_vlan_subcode {
102 FIP_SC_VL_REQ = 1, /* request */
103 FIP_SC_VL_REP = 2, /* reply */
104};
105
106/*
107 * flags in header fip_flags.
108 */
109enum fip_flag {
110 FIP_FL_FPMA = 0x8000, /* supports FPMA fabric-provided MACs */
111 FIP_FL_SPMA = 0x4000, /* supports SPMA server-provided MACs */
112 FIP_FL_AVAIL = 0x0004, /* available for FLOGI/ELP */
113 FIP_FL_SOL = 0x0002, /* this is a solicited message */
114 FIP_FL_FPORT = 0x0001, /* sent from an F port */
115};
116
117/*
118 * Common descriptor header format.
119 */
120struct fip_desc {
121 __u8 fip_dtype; /* type - see below */
122 __u8 fip_dlen; /* length - in 32-bit words */
123};
124
125enum fip_desc_type {
126 FIP_DT_PRI = 1, /* priority for forwarder selection */
127 FIP_DT_MAC = 2, /* MAC address */
128 FIP_DT_MAP_OUI = 3, /* FC-MAP OUI */
129 FIP_DT_NAME = 4, /* switch name or node name */
130 FIP_DT_FAB = 5, /* fabric descriptor */
131 FIP_DT_FCOE_SIZE = 6, /* max FCoE frame size */
132 FIP_DT_FLOGI = 7, /* FLOGI request or response */
133 FIP_DT_FDISC = 8, /* FDISC request or response */
134 FIP_DT_LOGO = 9, /* LOGO request or response */
135 FIP_DT_ELP = 10, /* ELP request or response */
136 FIP_DT_VN_ID = 11, /* VN_Node Identifier */
137 FIP_DT_FKA = 12, /* advertisement keep-alive period */
138 FIP_DT_VENDOR = 13, /* vendor ID */
139 FIP_DT_VLAN = 14, /* vlan number */
140 FIP_DT_LIMIT, /* max defined desc_type + 1 */
141 FIP_DT_VENDOR_BASE = 128, /* first vendor-specific desc_type */
142};
143
144/*
145 * FIP_DT_PRI - priority descriptor.
146 */
147struct fip_pri_desc {
148 struct fip_desc fd_desc;
149 __u8 fd_resvd;
150 __u8 fd_pri; /* FCF priority: higher is better */
151} __attribute__((packed));
152
153/*
154 * FIP_DT_MAC - MAC address descriptor.
155 */
156struct fip_mac_desc {
157 struct fip_desc fd_desc;
158 __u8 fd_mac[ETH_ALEN];
159} __attribute__((packed));
160
161/*
162 * FIP_DT_MAP - descriptor.
163 */
164struct fip_map_desc {
165 struct fip_desc fd_desc;
166 __u8 fd_resvd[3];
167 __u8 fd_map[3];
168} __attribute__((packed));
169
170/*
171 * FIP_DT_NAME descriptor.
172 */
173struct fip_wwn_desc {
174 struct fip_desc fd_desc;
175 __u8 fd_resvd[2];
176 __be64 fd_wwn; /* 64-bit WWN, unaligned */
177} __attribute__((packed));
178
179/*
180 * FIP_DT_FAB descriptor.
181 */
182struct fip_fab_desc {
183 struct fip_desc fd_desc;
184 __be16 fd_vfid; /* virtual fabric ID */
185 __u8 fd_resvd;
186 __u8 fd_map[3]; /* FC-MAP value */
187 __be64 fd_wwn; /* fabric name, unaligned */
188} __attribute__((packed));
189
190/*
191 * FIP_DT_FCOE_SIZE descriptor.
192 */
193struct fip_size_desc {
194 struct fip_desc fd_desc;
195 __be16 fd_size;
196} __attribute__((packed));
197
198/*
199 * Descriptor that encapsulates an ELS or ILS frame.
200 * The encapsulated frame immediately follows this header, without
201 * SOF, EOF, or CRC.
202 */
203struct fip_encaps {
204 struct fip_desc fd_desc;
205 __u8 fd_resvd[2];
206} __attribute__((packed));
207
208/*
209 * FIP_DT_VN_ID - VN_Node Identifier descriptor.
210 */
211struct fip_vn_desc {
212 struct fip_desc fd_desc;
213 __u8 fd_mac[ETH_ALEN];
214 __u8 fd_resvd;
215 __u8 fd_fc_id[3];
216 __be64 fd_wwpn; /* port name, unaligned */
217} __attribute__((packed));
218
219/*
220 * FIP_DT_FKA - Advertisement keep-alive period.
221 */
222struct fip_fka_desc {
223 struct fip_desc fd_desc;
224 __u8 fd_resvd[2];
225 __be32 fd_fka_period; /* adv./keep-alive period in mS */
226} __attribute__((packed));
227
228/*
229 * FIP_DT_VENDOR descriptor.
230 */
231struct fip_vendor_desc {
232 struct fip_desc fd_desc;
233 __u8 fd_resvd[2];
234 __u8 fd_vendor_id[8];
235} __attribute__((packed));
236
237#endif /* _FC_FIP_H_ */
diff --git a/include/scsi/fc_transport_fcoe.h b/include/scsi/fc_transport_fcoe.h
deleted file mode 100644
index 8dca2af14ffc..000000000000
--- a/include/scsi/fc_transport_fcoe.h
+++ /dev/null
@@ -1,54 +0,0 @@
1#ifndef FC_TRANSPORT_FCOE_H
2#define FC_TRANSPORT_FCOE_H
3
4#include <linux/device.h>
5#include <linux/netdevice.h>
6#include <scsi/scsi_host.h>
7#include <scsi/libfc.h>
8
9/**
10 * struct fcoe_transport - FCoE transport struct for generic transport
11 * for Ethernet devices as well as pure HBAs
12 *
13 * @name: name for thsi transport
14 * @bus: physical bus type (pci_bus_type)
15 * @driver: physical bus driver for network device
16 * @create: entry create function
17 * @destroy: exit destroy function
18 * @list: list of transports
19 */
20struct fcoe_transport {
21 char *name;
22 unsigned short vendor;
23 unsigned short device;
24 struct bus_type *bus;
25 struct device_driver *driver;
26 int (*create)(struct net_device *device);
27 int (*destroy)(struct net_device *device);
28 bool (*match)(struct net_device *device);
29 struct list_head list;
30 struct list_head devlist;
31 struct mutex devlock;
32};
33
34/**
35 * MODULE_ALIAS_FCOE_PCI
36 *
37 * some care must be taken with this, vendor and device MUST be a hex value
38 * preceded with 0x and with letters in lower case (0x12ab, not 0x12AB or 12AB)
39 */
40#define MODULE_ALIAS_FCOE_PCI(vendor, device) \
41 MODULE_ALIAS("fcoe-pci-" __stringify(vendor) "-" __stringify(device))
42
43/* exported funcs */
44int fcoe_transport_attach(struct net_device *netdev);
45int fcoe_transport_release(struct net_device *netdev);
46int fcoe_transport_register(struct fcoe_transport *t);
47int fcoe_transport_unregister(struct fcoe_transport *t);
48int fcoe_load_transport_driver(struct net_device *netdev);
49int __init fcoe_transport_init(void);
50int __exit fcoe_transport_exit(void);
51
52/* fcow_sw is the default transport */
53extern struct fcoe_transport fcoe_sw_transport;
54#endif /* FC_TRANSPORT_FCOE_H */
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index a70eafaad084..0303a6a098cc 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -22,6 +22,7 @@
22 22
23#include <linux/timer.h> 23#include <linux/timer.h>
24#include <linux/if.h> 24#include <linux/if.h>
25#include <linux/percpu.h>
25 26
26#include <scsi/scsi_transport.h> 27#include <scsi/scsi_transport.h>
27#include <scsi/scsi_transport_fc.h> 28#include <scsi/scsi_transport_fc.h>
@@ -661,7 +662,8 @@ struct fc_lport {
661 unsigned long boot_time; 662 unsigned long boot_time;
662 663
663 struct fc_host_statistics host_stats; 664 struct fc_host_statistics host_stats;
664 struct fcoe_dev_stats *dev_stats[NR_CPUS]; 665 struct fcoe_dev_stats *dev_stats;
666
665 u64 wwpn; 667 u64 wwpn;
666 u64 wwnn; 668 u64 wwnn;
667 u8 retry_count; 669 u8 retry_count;
@@ -694,11 +696,6 @@ struct fc_lport {
694/* 696/*
695 * FC_LPORT HELPER FUNCTIONS 697 * FC_LPORT HELPER FUNCTIONS
696 *****************************/ 698 *****************************/
697static inline void *lport_priv(const struct fc_lport *lp)
698{
699 return (void *)(lp + 1);
700}
701
702static inline int fc_lport_test_ready(struct fc_lport *lp) 699static inline int fc_lport_test_ready(struct fc_lport *lp)
703{ 700{
704 return lp->state == LPORT_ST_READY; 701 return lp->state == LPORT_ST_READY;
@@ -722,6 +719,42 @@ static inline void fc_lport_state_enter(struct fc_lport *lp,
722 lp->state = state; 719 lp->state = state;
723} 720}
724 721
722static inline int fc_lport_init_stats(struct fc_lport *lp)
723{
724 /* allocate per cpu stats block */
725 lp->dev_stats = alloc_percpu(struct fcoe_dev_stats);
726 if (!lp->dev_stats)
727 return -ENOMEM;
728 return 0;
729}
730
731static inline void fc_lport_free_stats(struct fc_lport *lp)
732{
733 free_percpu(lp->dev_stats);
734}
735
736static inline struct fcoe_dev_stats *fc_lport_get_stats(struct fc_lport *lp)
737{
738 return per_cpu_ptr(lp->dev_stats, smp_processor_id());
739}
740
741static inline void *lport_priv(const struct fc_lport *lp)
742{
743 return (void *)(lp + 1);
744}
745
746/**
747 * libfc_host_alloc() - Allocate a Scsi_Host with room for the fc_lport
748 * @sht: ptr to the scsi host templ
749 * @priv_size: size of private data after fc_lport
750 *
751 * Returns: ptr to Scsi_Host
752 */
753static inline struct Scsi_Host *
754libfc_host_alloc(struct scsi_host_template *sht, int priv_size)
755{
756 return scsi_host_alloc(sht, sizeof(struct fc_lport) + priv_size);
757}
725 758
726/* 759/*
727 * LOCAL PORT LAYER 760 * LOCAL PORT LAYER
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index c41f7d0c6efc..666cc131732e 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
@@ -1,5 +1,6 @@
1/* 1/*
2 * Copyright(c) 2007 - 2008 Intel Corporation. All rights reserved. 2 * Copyright (c) 2008-2009 Cisco Systems, Inc. All rights reserved.
3 * Copyright (c) 2007-2008 Intel Corporation. All rights reserved.
3 * 4 *
4 * This program is free software; you can redistribute it and/or modify it 5 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License, 6 * under the terms and conditions of the GNU General Public License,
@@ -20,134 +21,144 @@
20#ifndef _LIBFCOE_H 21#ifndef _LIBFCOE_H
21#define _LIBFCOE_H 22#define _LIBFCOE_H
22 23
24#include <linux/etherdevice.h>
25#include <linux/if_ether.h>
23#include <linux/netdevice.h> 26#include <linux/netdevice.h>
24#include <linux/skbuff.h> 27#include <linux/skbuff.h>
28#include <linux/workqueue.h>
25#include <scsi/fc/fc_fcoe.h> 29#include <scsi/fc/fc_fcoe.h>
26#include <scsi/libfc.h> 30#include <scsi/libfc.h>
27 31
28/* 32/*
29 * this percpu struct for fcoe 33 * FIP tunable parameters.
30 */ 34 */
31struct fcoe_percpu_s { 35#define FCOE_CTLR_START_DELAY 2000 /* mS after first adv. to choose FCF */
32 int cpu; 36#define FCOE_CTRL_SOL_TOV 2000 /* min. solicitation interval (mS) */
33 struct task_struct *thread; 37#define FCOE_CTLR_FCF_LIMIT 20 /* max. number of FCF entries */
34 struct sk_buff_head fcoe_rx_list; 38
35 struct page *crc_eof_page; 39/**
36 int crc_eof_offset; 40 * enum fip_state - internal state of FCoE controller.
41 * @FIP_ST_DISABLED: controller has been disabled or not yet enabled.
42 * @FIP_ST_LINK_WAIT: the physical link is down or unusable.
43 * @FIP_ST_AUTO: determining whether to use FIP or non-FIP mode.
44 * @FIP_ST_NON_FIP: non-FIP mode selected.
45 * @FIP_ST_ENABLED: FIP mode selected.
46 */
47enum fip_state {
48 FIP_ST_DISABLED,
49 FIP_ST_LINK_WAIT,
50 FIP_ST_AUTO,
51 FIP_ST_NON_FIP,
52 FIP_ST_ENABLED,
37}; 53};
38 54
39/* 55/**
40 * the fcoe sw transport private data 56 * struct fcoe_ctlr - FCoE Controller and FIP state.
57 * @state: internal FIP state for network link and FIP or non-FIP mode.
58 * @lp: &fc_lport: libfc local port.
59 * @sel_fcf: currently selected FCF, or NULL.
60 * @fcfs: list of discovered FCFs.
61 * @fcf_count: number of discovered FCF entries.
62 * @sol_time: time when a multicast solicitation was last sent.
63 * @sel_time: time after which to select an FCF.
64 * @port_ka_time: time of next port keep-alive.
65 * @ctlr_ka_time: time of next controller keep-alive.
66 * @timer: timer struct used for all delayed events.
67 * @link_work: &work_struct for doing FCF selection.
68 * @recv_work: &work_struct for receiving FIP frames.
69 * @fip_recv_list: list of received FIP frames.
70 * @user_mfs: configured maximum FC frame size, including FC header.
71 * @flogi_oxid: exchange ID of most recent fabric login.
72 * @flogi_count: number of FLOGI attempts in AUTO mode.
73 * @link: current link status for libfc.
74 * @last_link: last link state reported to libfc.
75 * @map_dest: use the FC_MAP mode for destination MAC addresses.
76 * @dest_addr: MAC address of the selected FC forwarder.
77 * @ctl_src_addr: the native MAC address of our local port.
78 * @data_src_addr: the assigned MAC address for the local port after FLOGI.
79 * @send: LLD-supplied function to handle sending of FIP Ethernet frames.
80 * @update_mac: LLD-supplied function to handle changes to MAC addresses.
81 * @lock: lock protecting this structure.
82 *
83 * This structure is used by all FCoE drivers. It contains information
84 * needed by all FCoE low-level drivers (LLDs) as well as internal state
85 * for FIP, and fields shared with the LLDS.
41 */ 86 */
42struct fcoe_softc { 87struct fcoe_ctlr {
43 struct list_head list; 88 enum fip_state state;
44 struct fc_lport *lp; 89 struct fc_lport *lp;
45 struct net_device *real_dev; 90 struct fcoe_fcf *sel_fcf;
46 struct net_device *phys_dev; /* device with ethtool_ops */ 91 struct list_head fcfs;
47 struct packet_type fcoe_packet_type; 92 u16 fcf_count;
48 struct sk_buff_head fcoe_pending_queue; 93 unsigned long sol_time;
49 u8 fcoe_pending_queue_active; 94 unsigned long sel_time;
50 95 unsigned long port_ka_time;
96 unsigned long ctlr_ka_time;
97 struct timer_list timer;
98 struct work_struct link_work;
99 struct work_struct recv_work;
100 struct sk_buff_head fip_recv_list;
101 u16 user_mfs;
102 u16 flogi_oxid;
103 u8 flogi_count;
104 u8 link;
105 u8 last_link;
106 u8 map_dest;
51 u8 dest_addr[ETH_ALEN]; 107 u8 dest_addr[ETH_ALEN];
52 u8 ctl_src_addr[ETH_ALEN]; 108 u8 ctl_src_addr[ETH_ALEN];
53 u8 data_src_addr[ETH_ALEN]; 109 u8 data_src_addr[ETH_ALEN];
54 /*
55 * fcoe protocol address learning related stuff
56 */
57 u16 flogi_oxid;
58 u8 flogi_progress;
59 u8 address_mode;
60};
61
62static inline struct net_device *fcoe_netdev(
63 const struct fc_lport *lp)
64{
65 return ((struct fcoe_softc *)lport_priv(lp))->real_dev;
66}
67
68static inline struct fcoe_hdr *skb_fcoe_header(const struct sk_buff *skb)
69{
70 return (struct fcoe_hdr *)skb_network_header(skb);
71}
72
73static inline int skb_fcoe_offset(const struct sk_buff *skb)
74{
75 return skb_network_offset(skb);
76}
77
78static inline struct fc_frame_header *skb_fc_header(const struct sk_buff *skb)
79{
80 return (struct fc_frame_header *)skb_transport_header(skb);
81}
82
83static inline int skb_fc_offset(const struct sk_buff *skb)
84{
85 return skb_transport_offset(skb);
86}
87 110
88static inline void skb_reset_fc_header(struct sk_buff *skb) 111 void (*send)(struct fcoe_ctlr *, struct sk_buff *);
89{ 112 void (*update_mac)(struct fcoe_ctlr *, u8 *old, u8 *new);
90 skb_reset_network_header(skb); 113 spinlock_t lock;
91 skb_set_transport_header(skb, skb_network_offset(skb) + 114};
92 sizeof(struct fcoe_hdr));
93}
94
95static inline bool skb_fc_is_data(const struct sk_buff *skb)
96{
97 return skb_fc_header(skb)->fh_r_ctl == FC_RCTL_DD_SOL_DATA;
98}
99
100static inline bool skb_fc_is_cmd(const struct sk_buff *skb)
101{
102 return skb_fc_header(skb)->fh_r_ctl == FC_RCTL_DD_UNSOL_CMD;
103}
104 115
105static inline bool skb_fc_has_exthdr(const struct sk_buff *skb) 116/*
106{ 117 * struct fcoe_fcf - Fibre-Channel Forwarder.
107 return (skb_fc_header(skb)->fh_r_ctl == FC_RCTL_VFTH) || 118 * @list: list linkage.
108 (skb_fc_header(skb)->fh_r_ctl == FC_RCTL_IFRH) || 119 * @time: system time (jiffies) when an advertisement was last received.
109 (skb_fc_header(skb)->fh_r_ctl == FC_RCTL_ENCH); 120 * @switch_name: WWN of switch from advertisement.
110} 121 * @fabric_name: WWN of fabric from advertisement.
122 * @fc_map: FC_MAP value from advertisement.
123 * @fcf_mac: Ethernet address of the FCF.
124 * @vfid: virtual fabric ID.
125 * @pri: seletion priority, smaller values are better.
126 * @flags: flags received from advertisement.
127 * @fka_period: keep-alive period, in jiffies.
128 *
129 * A Fibre-Channel Forwarder (FCF) is the entity on the Ethernet that
130 * passes FCoE frames on to an FC fabric. This structure represents
131 * one FCF from which advertisements have been received.
132 *
133 * When looking up an FCF, @switch_name, @fabric_name, @fc_map, @vfid, and
134 * @fcf_mac together form the lookup key.
135 */
136struct fcoe_fcf {
137 struct list_head list;
138 unsigned long time;
111 139
112static inline bool skb_fc_is_roff(const struct sk_buff *skb) 140 u64 switch_name;
113{ 141 u64 fabric_name;
114 return skb_fc_header(skb)->fh_f_ctl[2] & FC_FC_REL_OFF; 142 u32 fc_map;
115} 143 u16 vfid;
144 u8 fcf_mac[ETH_ALEN];
116 145
117static inline u16 skb_fc_oxid(const struct sk_buff *skb) 146 u8 pri;
118{ 147 u16 flags;
119 return be16_to_cpu(skb_fc_header(skb)->fh_ox_id); 148 u32 fka_period;
120} 149};
121 150
122static inline u16 skb_fc_rxid(const struct sk_buff *skb) 151/* FIP API functions */
123{ 152void fcoe_ctlr_init(struct fcoe_ctlr *);
124 return be16_to_cpu(skb_fc_header(skb)->fh_rx_id); 153void fcoe_ctlr_destroy(struct fcoe_ctlr *);
125} 154void fcoe_ctlr_link_up(struct fcoe_ctlr *);
155int fcoe_ctlr_link_down(struct fcoe_ctlr *);
156int fcoe_ctlr_els_send(struct fcoe_ctlr *, struct sk_buff *);
157void fcoe_ctlr_recv(struct fcoe_ctlr *, struct sk_buff *);
158int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *, struct fc_frame *fp, u8 *sa);
126 159
127/* libfcoe funcs */ 160/* libfcoe funcs */
128int fcoe_reset(struct Scsi_Host *shost); 161u64 fcoe_wwn_from_mac(unsigned char mac[], unsigned int, unsigned int);
129u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN],
130 unsigned int scheme, unsigned int port);
131
132u32 fcoe_fc_crc(struct fc_frame *fp);
133int fcoe_xmit(struct fc_lport *, struct fc_frame *);
134int fcoe_rcv(struct sk_buff *, struct net_device *,
135 struct packet_type *, struct net_device *);
136
137int fcoe_percpu_receive_thread(void *arg);
138void fcoe_clean_pending_queue(struct fc_lport *lp);
139void fcoe_percpu_clean(struct fc_lport *lp);
140void fcoe_watchdog(ulong vp);
141int fcoe_link_ok(struct fc_lport *lp);
142
143struct fc_lport *fcoe_hostlist_lookup(const struct net_device *);
144int fcoe_hostlist_add(const struct fc_lport *);
145int fcoe_hostlist_remove(const struct fc_lport *);
146
147struct Scsi_Host *fcoe_host_alloc(struct scsi_host_template *, int);
148int fcoe_libfc_config(struct fc_lport *, struct libfc_function_template *); 162int fcoe_libfc_config(struct fc_lport *, struct libfc_function_template *);
149 163
150/* fcoe sw hba */
151int __init fcoe_sw_init(void);
152int __exit fcoe_sw_exit(void);
153#endif /* _LIBFCOE_H */ 164#endif /* _LIBFCOE_H */
diff --git a/include/trace/kmemtrace.h b/include/trace/kmemtrace.h
index ad8b7857855a..28ee69f9cd46 100644
--- a/include/trace/kmemtrace.h
+++ b/include/trace/kmemtrace.h
@@ -9,65 +9,53 @@
9 9
10#ifdef __KERNEL__ 10#ifdef __KERNEL__
11 11
12#include <linux/tracepoint.h>
12#include <linux/types.h> 13#include <linux/types.h>
13#include <linux/marker.h>
14
15enum kmemtrace_type_id {
16 KMEMTRACE_TYPE_KMALLOC = 0, /* kmalloc() or kfree(). */
17 KMEMTRACE_TYPE_CACHE, /* kmem_cache_*(). */
18 KMEMTRACE_TYPE_PAGES, /* __get_free_pages() and friends. */
19};
20 14
21#ifdef CONFIG_KMEMTRACE 15#ifdef CONFIG_KMEMTRACE
22
23extern void kmemtrace_init(void); 16extern void kmemtrace_init(void);
24 17#else
25extern void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id,
26 unsigned long call_site,
27 const void *ptr,
28 size_t bytes_req,
29 size_t bytes_alloc,
30 gfp_t gfp_flags,
31 int node);
32
33extern void kmemtrace_mark_free(enum kmemtrace_type_id type_id,
34 unsigned long call_site,
35 const void *ptr);
36
37#else /* CONFIG_KMEMTRACE */
38
39static inline void kmemtrace_init(void) 18static inline void kmemtrace_init(void)
40{ 19{
41} 20}
42 21#endif
43static inline void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id, 22
44 unsigned long call_site, 23DECLARE_TRACE(kmalloc,
45 const void *ptr, 24 TP_PROTO(unsigned long call_site,
46 size_t bytes_req, 25 const void *ptr,
47 size_t bytes_alloc, 26 size_t bytes_req,
48 gfp_t gfp_flags, 27 size_t bytes_alloc,
49 int node) 28 gfp_t gfp_flags),
50{ 29 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags));
51} 30DECLARE_TRACE(kmem_cache_alloc,
52 31 TP_PROTO(unsigned long call_site,
53static inline void kmemtrace_mark_free(enum kmemtrace_type_id type_id, 32 const void *ptr,
54 unsigned long call_site, 33 size_t bytes_req,
55 const void *ptr) 34 size_t bytes_alloc,
56{ 35 gfp_t gfp_flags),
57} 36 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags));
58 37DECLARE_TRACE(kmalloc_node,
59#endif /* CONFIG_KMEMTRACE */ 38 TP_PROTO(unsigned long call_site,
60 39 const void *ptr,
61static inline void kmemtrace_mark_alloc(enum kmemtrace_type_id type_id, 40 size_t bytes_req,
62 unsigned long call_site, 41 size_t bytes_alloc,
63 const void *ptr, 42 gfp_t gfp_flags,
64 size_t bytes_req, 43 int node),
65 size_t bytes_alloc, 44 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node));
66 gfp_t gfp_flags) 45DECLARE_TRACE(kmem_cache_alloc_node,
67{ 46 TP_PROTO(unsigned long call_site,
68 kmemtrace_mark_alloc_node(type_id, call_site, ptr, 47 const void *ptr,
69 bytes_req, bytes_alloc, gfp_flags, -1); 48 size_t bytes_req,
70} 49 size_t bytes_alloc,
50 gfp_t gfp_flags,
51 int node),
52 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node));
53DECLARE_TRACE(kfree,
54 TP_PROTO(unsigned long call_site, const void *ptr),
55 TP_ARGS(call_site, ptr));
56DECLARE_TRACE(kmem_cache_free,
57 TP_PROTO(unsigned long call_site, const void *ptr),
58 TP_ARGS(call_site, ptr));
71 59
72#endif /* __KERNEL__ */ 60#endif /* __KERNEL__ */
73 61
diff --git a/include/video/tdfx.h b/include/video/tdfx.h
index 7431d9681e57..befbaf0a92d8 100644
--- a/include/video/tdfx.h
+++ b/include/video/tdfx.h
@@ -1,6 +1,9 @@
1#ifndef _TDFX_H 1#ifndef _TDFX_H
2#define _TDFX_H 2#define _TDFX_H
3 3
4#include <linux/i2c.h>
5#include <linux/i2c-algo-bit.h>
6
4/* membase0 register offsets */ 7/* membase0 register offsets */
5#define STATUS 0x00 8#define STATUS 0x00
6#define PCIINIT0 0x04 9#define PCIINIT0 0x04
@@ -123,6 +126,18 @@
123#define VIDCFG_PIXFMT_SHIFT 18 126#define VIDCFG_PIXFMT_SHIFT 18
124#define DACMODE_2X BIT(0) 127#define DACMODE_2X BIT(0)
125 128
129/* I2C bit locations in the VIDSERPARPORT register */
130#define DDC_ENAB 0x00040000
131#define DDC_SCL_OUT 0x00080000
132#define DDC_SDA_OUT 0x00100000
133#define DDC_SCL_IN 0x00200000
134#define DDC_SDA_IN 0x00400000
135#define I2C_ENAB 0x00800000
136#define I2C_SCL_OUT 0x01000000
137#define I2C_SDA_OUT 0x02000000
138#define I2C_SCL_IN 0x04000000
139#define I2C_SDA_IN 0x08000000
140
126/* VGA rubbish, need to change this for multihead support */ 141/* VGA rubbish, need to change this for multihead support */
127#define MISC_W 0x3c2 142#define MISC_W 0x3c2
128#define MISC_R 0x3cc 143#define MISC_R 0x3cc
@@ -168,12 +183,23 @@ struct banshee_reg {
168 unsigned long miscinit0; 183 unsigned long miscinit0;
169}; 184};
170 185
186struct tdfx_par;
187
188struct tdfxfb_i2c_chan {
189 struct tdfx_par *par;
190 struct i2c_adapter adapter;
191 struct i2c_algo_bit_data algo;
192};
193
171struct tdfx_par { 194struct tdfx_par {
172 u32 max_pixclock; 195 u32 max_pixclock;
173 u32 palette[16]; 196 u32 palette[16];
174 void __iomem *regbase_virt; 197 void __iomem *regbase_virt;
175 unsigned long iobase; 198 unsigned long iobase;
176 int mtrr_handle; 199 int mtrr_handle;
200#ifdef CONFIG_FB_3DFX_I2C
201 struct tdfxfb_i2c_chan chan[2];
202#endif
177}; 203};
178 204
179#endif /* __KERNEL__ */ 205#endif /* __KERNEL__ */
diff --git a/init/Kconfig b/init/Kconfig
index 09c79537ae09..f2f9b5362b48 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -208,6 +208,12 @@ config POSIX_MQUEUE
208 208
209 If unsure, say Y. 209 If unsure, say Y.
210 210
211config POSIX_MQUEUE_SYSCTL
212 bool
213 depends on POSIX_MQUEUE
214 depends on SYSCTL
215 default y
216
211config BSD_PROCESS_ACCT 217config BSD_PROCESS_ACCT
212 bool "BSD Process Accounting" 218 bool "BSD Process Accounting"
213 help 219 help
@@ -670,10 +676,10 @@ config UTS_NS
670 676
671config IPC_NS 677config IPC_NS
672 bool "IPC namespace" 678 bool "IPC namespace"
673 depends on NAMESPACES && SYSVIPC 679 depends on NAMESPACES && (SYSVIPC || POSIX_MQUEUE)
674 help 680 help
675 In this namespace tasks work with IPC ids which correspond to 681 In this namespace tasks work with IPC ids which correspond to
676 different IPC objects in different namespaces 682 different IPC objects in different namespaces.
677 683
678config USER_NS 684config USER_NS
679 bool "User namespace (EXPERIMENTAL)" 685 bool "User namespace (EXPERIMENTAL)"
@@ -1016,7 +1022,7 @@ source "arch/Kconfig"
1016 1022
1017config SLOW_WORK 1023config SLOW_WORK
1018 default n 1024 default n
1019 bool "Enable slow work thread pool" 1025 bool
1020 help 1026 help
1021 The slow work thread pool provides a number of dynamically allocated 1027 The slow work thread pool provides a number of dynamically allocated
1022 threads that can be used by the kernel to perform operations that 1028 threads that can be used by the kernel to perform operations that
@@ -1026,6 +1032,8 @@ config SLOW_WORK
1026 by a series of mkdirs and a create call, all of which have to touch 1032 by a series of mkdirs and a create call, all of which have to touch
1027 disk. 1033 disk.
1028 1034
1035 See Documentation/slow-work.txt.
1036
1029endmenu # General setup 1037endmenu # General setup
1030 1038
1031config HAVE_GENERIC_DMA_COHERENT 1039config HAVE_GENERIC_DMA_COHERENT
diff --git a/ipc/Makefile b/ipc/Makefile
index 65c384395801..4e1955ea815d 100644
--- a/ipc/Makefile
+++ b/ipc/Makefile
@@ -8,4 +8,5 @@ obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o
8obj_mq-$(CONFIG_COMPAT) += compat_mq.o 8obj_mq-$(CONFIG_COMPAT) += compat_mq.o
9obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y) 9obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y)
10obj-$(CONFIG_IPC_NS) += namespace.o 10obj-$(CONFIG_IPC_NS) += namespace.o
11obj-$(CONFIG_POSIX_MQUEUE_SYSCTL) += mq_sysctl.o
11 12
diff --git a/ipc/mq_sysctl.c b/ipc/mq_sysctl.c
new file mode 100644
index 000000000000..89f60ec8ee54
--- /dev/null
+++ b/ipc/mq_sysctl.c
@@ -0,0 +1,116 @@
1/*
2 * Copyright (C) 2007 IBM Corporation
3 *
4 * Author: Cedric Le Goater <clg@fr.ibm.com>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation, version 2 of the
9 * License.
10 */
11
12#include <linux/nsproxy.h>
13#include <linux/ipc_namespace.h>
14#include <linux/sysctl.h>
15
16/*
17 * Define the ranges various user-specified maximum values can
18 * be set to.
19 */
20#define MIN_MSGMAX 1 /* min value for msg_max */
21#define MAX_MSGMAX HARD_MSGMAX /* max value for msg_max */
22#define MIN_MSGSIZEMAX 128 /* min value for msgsize_max */
23#define MAX_MSGSIZEMAX (8192*128) /* max value for msgsize_max */
24
25static void *get_mq(ctl_table *table)
26{
27 char *which = table->data;
28 struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
29 which = (which - (char *)&init_ipc_ns) + (char *)ipc_ns;
30 return which;
31}
32
33#ifdef CONFIG_PROC_SYSCTL
34static int proc_mq_dointvec(ctl_table *table, int write, struct file *filp,
35 void __user *buffer, size_t *lenp, loff_t *ppos)
36{
37 struct ctl_table mq_table;
38 memcpy(&mq_table, table, sizeof(mq_table));
39 mq_table.data = get_mq(table);
40
41 return proc_dointvec(&mq_table, write, filp, buffer, lenp, ppos);
42}
43
44static int proc_mq_dointvec_minmax(ctl_table *table, int write,
45 struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos)
46{
47 struct ctl_table mq_table;
48 memcpy(&mq_table, table, sizeof(mq_table));
49 mq_table.data = get_mq(table);
50
51 return proc_dointvec_minmax(&mq_table, write, filp, buffer,
52 lenp, ppos);
53}
54#else
55#define proc_mq_dointvec NULL
56#define proc_mq_dointvec_minmax NULL
57#endif
58
59static int msg_max_limit_min = MIN_MSGMAX;
60static int msg_max_limit_max = MAX_MSGMAX;
61
62static int msg_maxsize_limit_min = MIN_MSGSIZEMAX;
63static int msg_maxsize_limit_max = MAX_MSGSIZEMAX;
64
65static ctl_table mq_sysctls[] = {
66 {
67 .procname = "queues_max",
68 .data = &init_ipc_ns.mq_queues_max,
69 .maxlen = sizeof(int),
70 .mode = 0644,
71 .proc_handler = proc_mq_dointvec,
72 },
73 {
74 .procname = "msg_max",
75 .data = &init_ipc_ns.mq_msg_max,
76 .maxlen = sizeof(int),
77 .mode = 0644,
78 .proc_handler = proc_mq_dointvec_minmax,
79 .extra1 = &msg_max_limit_min,
80 .extra2 = &msg_max_limit_max,
81 },
82 {
83 .procname = "msgsize_max",
84 .data = &init_ipc_ns.mq_msgsize_max,
85 .maxlen = sizeof(int),
86 .mode = 0644,
87 .proc_handler = proc_mq_dointvec_minmax,
88 .extra1 = &msg_maxsize_limit_min,
89 .extra2 = &msg_maxsize_limit_max,
90 },
91 { .ctl_name = 0 }
92};
93
94static ctl_table mq_sysctl_dir[] = {
95 {
96 .procname = "mqueue",
97 .mode = 0555,
98 .child = mq_sysctls,
99 },
100 { .ctl_name = 0 }
101};
102
103static ctl_table mq_sysctl_root[] = {
104 {
105 .ctl_name = CTL_FS,
106 .procname = "fs",
107 .mode = 0555,
108 .child = mq_sysctl_dir,
109 },
110 { .ctl_name = 0 }
111};
112
113struct ctl_table_header *mq_register_sysctl_table(void)
114{
115 return register_sysctl_table(mq_sysctl_root);
116}
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index 916785363f0f..e35ba2c3a8d7 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -31,6 +31,7 @@
31#include <linux/mutex.h> 31#include <linux/mutex.h>
32#include <linux/nsproxy.h> 32#include <linux/nsproxy.h>
33#include <linux/pid.h> 33#include <linux/pid.h>
34#include <linux/ipc_namespace.h>
34 35
35#include <net/sock.h> 36#include <net/sock.h>
36#include "util.h" 37#include "util.h"
@@ -46,21 +47,6 @@
46#define STATE_PENDING 1 47#define STATE_PENDING 1
47#define STATE_READY 2 48#define STATE_READY 2
48 49
49/* default values */
50#define DFLT_QUEUESMAX 256 /* max number of message queues */
51#define DFLT_MSGMAX 10 /* max number of messages in each queue */
52#define HARD_MSGMAX (131072/sizeof(void*))
53#define DFLT_MSGSIZEMAX 8192 /* max message size */
54
55/*
56 * Define the ranges various user-specified maximum values can
57 * be set to.
58 */
59#define MIN_MSGMAX 1 /* min value for msg_max */
60#define MAX_MSGMAX HARD_MSGMAX /* max value for msg_max */
61#define MIN_MSGSIZEMAX 128 /* min value for msgsize_max */
62#define MAX_MSGSIZEMAX (8192*128) /* max value for msgsize_max */
63
64struct ext_wait_queue { /* queue of sleeping tasks */ 50struct ext_wait_queue { /* queue of sleeping tasks */
65 struct task_struct *task; 51 struct task_struct *task;
66 struct list_head list; 52 struct list_head list;
@@ -93,14 +79,7 @@ static const struct file_operations mqueue_file_operations;
93static struct super_operations mqueue_super_ops; 79static struct super_operations mqueue_super_ops;
94static void remove_notification(struct mqueue_inode_info *info); 80static void remove_notification(struct mqueue_inode_info *info);
95 81
96static spinlock_t mq_lock;
97static struct kmem_cache *mqueue_inode_cachep; 82static struct kmem_cache *mqueue_inode_cachep;
98static struct vfsmount *mqueue_mnt;
99
100static unsigned int queues_count;
101static unsigned int queues_max = DFLT_QUEUESMAX;
102static unsigned int msg_max = DFLT_MSGMAX;
103static unsigned int msgsize_max = DFLT_MSGSIZEMAX;
104 83
105static struct ctl_table_header * mq_sysctl_table; 84static struct ctl_table_header * mq_sysctl_table;
106 85
@@ -109,8 +88,27 @@ static inline struct mqueue_inode_info *MQUEUE_I(struct inode *inode)
109 return container_of(inode, struct mqueue_inode_info, vfs_inode); 88 return container_of(inode, struct mqueue_inode_info, vfs_inode);
110} 89}
111 90
112static struct inode *mqueue_get_inode(struct super_block *sb, int mode, 91/*
113 struct mq_attr *attr) 92 * This routine should be called with the mq_lock held.
93 */
94static inline struct ipc_namespace *__get_ns_from_inode(struct inode *inode)
95{
96 return get_ipc_ns(inode->i_sb->s_fs_info);
97}
98
99static struct ipc_namespace *get_ns_from_inode(struct inode *inode)
100{
101 struct ipc_namespace *ns;
102
103 spin_lock(&mq_lock);
104 ns = __get_ns_from_inode(inode);
105 spin_unlock(&mq_lock);
106 return ns;
107}
108
109static struct inode *mqueue_get_inode(struct super_block *sb,
110 struct ipc_namespace *ipc_ns, int mode,
111 struct mq_attr *attr)
114{ 112{
115 struct user_struct *u = current_user(); 113 struct user_struct *u = current_user();
116 struct inode *inode; 114 struct inode *inode;
@@ -141,8 +139,8 @@ static struct inode *mqueue_get_inode(struct super_block *sb, int mode,
141 info->qsize = 0; 139 info->qsize = 0;
142 info->user = NULL; /* set when all is ok */ 140 info->user = NULL; /* set when all is ok */
143 memset(&info->attr, 0, sizeof(info->attr)); 141 memset(&info->attr, 0, sizeof(info->attr));
144 info->attr.mq_maxmsg = msg_max; 142 info->attr.mq_maxmsg = ipc_ns->mq_msg_max;
145 info->attr.mq_msgsize = msgsize_max; 143 info->attr.mq_msgsize = ipc_ns->mq_msgsize_max;
146 if (attr) { 144 if (attr) {
147 info->attr.mq_maxmsg = attr->mq_maxmsg; 145 info->attr.mq_maxmsg = attr->mq_maxmsg;
148 info->attr.mq_msgsize = attr->mq_msgsize; 146 info->attr.mq_msgsize = attr->mq_msgsize;
@@ -188,30 +186,38 @@ out_inode:
188static int mqueue_fill_super(struct super_block *sb, void *data, int silent) 186static int mqueue_fill_super(struct super_block *sb, void *data, int silent)
189{ 187{
190 struct inode *inode; 188 struct inode *inode;
189 struct ipc_namespace *ns = data;
190 int error = 0;
191 191
192 sb->s_blocksize = PAGE_CACHE_SIZE; 192 sb->s_blocksize = PAGE_CACHE_SIZE;
193 sb->s_blocksize_bits = PAGE_CACHE_SHIFT; 193 sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
194 sb->s_magic = MQUEUE_MAGIC; 194 sb->s_magic = MQUEUE_MAGIC;
195 sb->s_op = &mqueue_super_ops; 195 sb->s_op = &mqueue_super_ops;
196 196
197 inode = mqueue_get_inode(sb, S_IFDIR | S_ISVTX | S_IRWXUGO, NULL); 197 inode = mqueue_get_inode(sb, ns, S_IFDIR | S_ISVTX | S_IRWXUGO,
198 if (!inode) 198 NULL);
199 return -ENOMEM; 199 if (!inode) {
200 error = -ENOMEM;
201 goto out;
202 }
200 203
201 sb->s_root = d_alloc_root(inode); 204 sb->s_root = d_alloc_root(inode);
202 if (!sb->s_root) { 205 if (!sb->s_root) {
203 iput(inode); 206 iput(inode);
204 return -ENOMEM; 207 error = -ENOMEM;
205 } 208 }
206 209
207 return 0; 210out:
211 return error;
208} 212}
209 213
210static int mqueue_get_sb(struct file_system_type *fs_type, 214static int mqueue_get_sb(struct file_system_type *fs_type,
211 int flags, const char *dev_name, 215 int flags, const char *dev_name,
212 void *data, struct vfsmount *mnt) 216 void *data, struct vfsmount *mnt)
213{ 217{
214 return get_sb_single(fs_type, flags, data, mqueue_fill_super, mnt); 218 if (!(flags & MS_KERNMOUNT))
219 data = current->nsproxy->ipc_ns;
220 return get_sb_ns(fs_type, flags, data, mqueue_fill_super, mnt);
215} 221}
216 222
217static void init_once(void *foo) 223static void init_once(void *foo)
@@ -242,11 +248,13 @@ static void mqueue_delete_inode(struct inode *inode)
242 struct user_struct *user; 248 struct user_struct *user;
243 unsigned long mq_bytes; 249 unsigned long mq_bytes;
244 int i; 250 int i;
251 struct ipc_namespace *ipc_ns;
245 252
246 if (S_ISDIR(inode->i_mode)) { 253 if (S_ISDIR(inode->i_mode)) {
247 clear_inode(inode); 254 clear_inode(inode);
248 return; 255 return;
249 } 256 }
257 ipc_ns = get_ns_from_inode(inode);
250 info = MQUEUE_I(inode); 258 info = MQUEUE_I(inode);
251 spin_lock(&info->lock); 259 spin_lock(&info->lock);
252 for (i = 0; i < info->attr.mq_curmsgs; i++) 260 for (i = 0; i < info->attr.mq_curmsgs; i++)
@@ -262,10 +270,19 @@ static void mqueue_delete_inode(struct inode *inode)
262 if (user) { 270 if (user) {
263 spin_lock(&mq_lock); 271 spin_lock(&mq_lock);
264 user->mq_bytes -= mq_bytes; 272 user->mq_bytes -= mq_bytes;
265 queues_count--; 273 /*
274 * get_ns_from_inode() ensures that the
275 * (ipc_ns = sb->s_fs_info) is either a valid ipc_ns
276 * to which we now hold a reference, or it is NULL.
277 * We can't put it here under mq_lock, though.
278 */
279 if (ipc_ns)
280 ipc_ns->mq_queues_count--;
266 spin_unlock(&mq_lock); 281 spin_unlock(&mq_lock);
267 free_uid(user); 282 free_uid(user);
268 } 283 }
284 if (ipc_ns)
285 put_ipc_ns(ipc_ns);
269} 286}
270 287
271static int mqueue_create(struct inode *dir, struct dentry *dentry, 288static int mqueue_create(struct inode *dir, struct dentry *dentry,
@@ -274,31 +291,41 @@ static int mqueue_create(struct inode *dir, struct dentry *dentry,
274 struct inode *inode; 291 struct inode *inode;
275 struct mq_attr *attr = dentry->d_fsdata; 292 struct mq_attr *attr = dentry->d_fsdata;
276 int error; 293 int error;
294 struct ipc_namespace *ipc_ns;
277 295
278 spin_lock(&mq_lock); 296 spin_lock(&mq_lock);
279 if (queues_count >= queues_max && !capable(CAP_SYS_RESOURCE)) { 297 ipc_ns = __get_ns_from_inode(dir);
298 if (!ipc_ns) {
299 error = -EACCES;
300 goto out_unlock;
301 }
302 if (ipc_ns->mq_queues_count >= ipc_ns->mq_queues_max &&
303 !capable(CAP_SYS_RESOURCE)) {
280 error = -ENOSPC; 304 error = -ENOSPC;
281 goto out_lock; 305 goto out_unlock;
282 } 306 }
283 queues_count++; 307 ipc_ns->mq_queues_count++;
284 spin_unlock(&mq_lock); 308 spin_unlock(&mq_lock);
285 309
286 inode = mqueue_get_inode(dir->i_sb, mode, attr); 310 inode = mqueue_get_inode(dir->i_sb, ipc_ns, mode, attr);
287 if (!inode) { 311 if (!inode) {
288 error = -ENOMEM; 312 error = -ENOMEM;
289 spin_lock(&mq_lock); 313 spin_lock(&mq_lock);
290 queues_count--; 314 ipc_ns->mq_queues_count--;
291 goto out_lock; 315 goto out_unlock;
292 } 316 }
293 317
318 put_ipc_ns(ipc_ns);
294 dir->i_size += DIRENT_SIZE; 319 dir->i_size += DIRENT_SIZE;
295 dir->i_ctime = dir->i_mtime = dir->i_atime = CURRENT_TIME; 320 dir->i_ctime = dir->i_mtime = dir->i_atime = CURRENT_TIME;
296 321
297 d_instantiate(dentry, inode); 322 d_instantiate(dentry, inode);
298 dget(dentry); 323 dget(dentry);
299 return 0; 324 return 0;
300out_lock: 325out_unlock:
301 spin_unlock(&mq_lock); 326 spin_unlock(&mq_lock);
327 if (ipc_ns)
328 put_ipc_ns(ipc_ns);
302 return error; 329 return error;
303} 330}
304 331
@@ -562,7 +589,7 @@ static void remove_notification(struct mqueue_inode_info *info)
562 info->notify_owner = NULL; 589 info->notify_owner = NULL;
563} 590}
564 591
565static int mq_attr_ok(struct mq_attr *attr) 592static int mq_attr_ok(struct ipc_namespace *ipc_ns, struct mq_attr *attr)
566{ 593{
567 if (attr->mq_maxmsg <= 0 || attr->mq_msgsize <= 0) 594 if (attr->mq_maxmsg <= 0 || attr->mq_msgsize <= 0)
568 return 0; 595 return 0;
@@ -570,8 +597,8 @@ static int mq_attr_ok(struct mq_attr *attr)
570 if (attr->mq_maxmsg > HARD_MSGMAX) 597 if (attr->mq_maxmsg > HARD_MSGMAX)
571 return 0; 598 return 0;
572 } else { 599 } else {
573 if (attr->mq_maxmsg > msg_max || 600 if (attr->mq_maxmsg > ipc_ns->mq_msg_max ||
574 attr->mq_msgsize > msgsize_max) 601 attr->mq_msgsize > ipc_ns->mq_msgsize_max)
575 return 0; 602 return 0;
576 } 603 }
577 /* check for overflow */ 604 /* check for overflow */
@@ -587,8 +614,9 @@ static int mq_attr_ok(struct mq_attr *attr)
587/* 614/*
588 * Invoked when creating a new queue via sys_mq_open 615 * Invoked when creating a new queue via sys_mq_open
589 */ 616 */
590static struct file *do_create(struct dentry *dir, struct dentry *dentry, 617static struct file *do_create(struct ipc_namespace *ipc_ns, struct dentry *dir,
591 int oflag, mode_t mode, struct mq_attr *attr) 618 struct dentry *dentry, int oflag, mode_t mode,
619 struct mq_attr *attr)
592{ 620{
593 const struct cred *cred = current_cred(); 621 const struct cred *cred = current_cred();
594 struct file *result; 622 struct file *result;
@@ -596,14 +624,14 @@ static struct file *do_create(struct dentry *dir, struct dentry *dentry,
596 624
597 if (attr) { 625 if (attr) {
598 ret = -EINVAL; 626 ret = -EINVAL;
599 if (!mq_attr_ok(attr)) 627 if (!mq_attr_ok(ipc_ns, attr))
600 goto out; 628 goto out;
601 /* store for use during create */ 629 /* store for use during create */
602 dentry->d_fsdata = attr; 630 dentry->d_fsdata = attr;
603 } 631 }
604 632
605 mode &= ~current_umask(); 633 mode &= ~current_umask();
606 ret = mnt_want_write(mqueue_mnt); 634 ret = mnt_want_write(ipc_ns->mq_mnt);
607 if (ret) 635 if (ret)
608 goto out; 636 goto out;
609 ret = vfs_create(dir->d_inode, dentry, mode, NULL); 637 ret = vfs_create(dir->d_inode, dentry, mode, NULL);
@@ -611,24 +639,25 @@ static struct file *do_create(struct dentry *dir, struct dentry *dentry,
611 if (ret) 639 if (ret)
612 goto out_drop_write; 640 goto out_drop_write;
613 641
614 result = dentry_open(dentry, mqueue_mnt, oflag, cred); 642 result = dentry_open(dentry, ipc_ns->mq_mnt, oflag, cred);
615 /* 643 /*
616 * dentry_open() took a persistent mnt_want_write(), 644 * dentry_open() took a persistent mnt_want_write(),
617 * so we can now drop this one. 645 * so we can now drop this one.
618 */ 646 */
619 mnt_drop_write(mqueue_mnt); 647 mnt_drop_write(ipc_ns->mq_mnt);
620 return result; 648 return result;
621 649
622out_drop_write: 650out_drop_write:
623 mnt_drop_write(mqueue_mnt); 651 mnt_drop_write(ipc_ns->mq_mnt);
624out: 652out:
625 dput(dentry); 653 dput(dentry);
626 mntput(mqueue_mnt); 654 mntput(ipc_ns->mq_mnt);
627 return ERR_PTR(ret); 655 return ERR_PTR(ret);
628} 656}
629 657
630/* Opens existing queue */ 658/* Opens existing queue */
631static struct file *do_open(struct dentry *dentry, int oflag) 659static struct file *do_open(struct ipc_namespace *ipc_ns,
660 struct dentry *dentry, int oflag)
632{ 661{
633 const struct cred *cred = current_cred(); 662 const struct cred *cred = current_cred();
634 663
@@ -637,17 +666,17 @@ static struct file *do_open(struct dentry *dentry, int oflag)
637 666
638 if ((oflag & O_ACCMODE) == (O_RDWR | O_WRONLY)) { 667 if ((oflag & O_ACCMODE) == (O_RDWR | O_WRONLY)) {
639 dput(dentry); 668 dput(dentry);
640 mntput(mqueue_mnt); 669 mntput(ipc_ns->mq_mnt);
641 return ERR_PTR(-EINVAL); 670 return ERR_PTR(-EINVAL);
642 } 671 }
643 672
644 if (inode_permission(dentry->d_inode, oflag2acc[oflag & O_ACCMODE])) { 673 if (inode_permission(dentry->d_inode, oflag2acc[oflag & O_ACCMODE])) {
645 dput(dentry); 674 dput(dentry);
646 mntput(mqueue_mnt); 675 mntput(ipc_ns->mq_mnt);
647 return ERR_PTR(-EACCES); 676 return ERR_PTR(-EACCES);
648 } 677 }
649 678
650 return dentry_open(dentry, mqueue_mnt, oflag, cred); 679 return dentry_open(dentry, ipc_ns->mq_mnt, oflag, cred);
651} 680}
652 681
653SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode, 682SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
@@ -658,6 +687,7 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
658 char *name; 687 char *name;
659 struct mq_attr attr; 688 struct mq_attr attr;
660 int fd, error; 689 int fd, error;
690 struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
661 691
662 if (u_attr && copy_from_user(&attr, u_attr, sizeof(struct mq_attr))) 692 if (u_attr && copy_from_user(&attr, u_attr, sizeof(struct mq_attr)))
663 return -EFAULT; 693 return -EFAULT;
@@ -671,13 +701,13 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
671 if (fd < 0) 701 if (fd < 0)
672 goto out_putname; 702 goto out_putname;
673 703
674 mutex_lock(&mqueue_mnt->mnt_root->d_inode->i_mutex); 704 mutex_lock(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex);
675 dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name)); 705 dentry = lookup_one_len(name, ipc_ns->mq_mnt->mnt_root, strlen(name));
676 if (IS_ERR(dentry)) { 706 if (IS_ERR(dentry)) {
677 error = PTR_ERR(dentry); 707 error = PTR_ERR(dentry);
678 goto out_err; 708 goto out_err;
679 } 709 }
680 mntget(mqueue_mnt); 710 mntget(ipc_ns->mq_mnt);
681 711
682 if (oflag & O_CREAT) { 712 if (oflag & O_CREAT) {
683 if (dentry->d_inode) { /* entry already exists */ 713 if (dentry->d_inode) { /* entry already exists */
@@ -685,10 +715,10 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
685 error = -EEXIST; 715 error = -EEXIST;
686 if (oflag & O_EXCL) 716 if (oflag & O_EXCL)
687 goto out; 717 goto out;
688 filp = do_open(dentry, oflag); 718 filp = do_open(ipc_ns, dentry, oflag);
689 } else { 719 } else {
690 filp = do_create(mqueue_mnt->mnt_root, dentry, 720 filp = do_create(ipc_ns, ipc_ns->mq_mnt->mnt_root,
691 oflag, mode, 721 dentry, oflag, mode,
692 u_attr ? &attr : NULL); 722 u_attr ? &attr : NULL);
693 } 723 }
694 } else { 724 } else {
@@ -696,7 +726,7 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
696 if (!dentry->d_inode) 726 if (!dentry->d_inode)
697 goto out; 727 goto out;
698 audit_inode(name, dentry); 728 audit_inode(name, dentry);
699 filp = do_open(dentry, oflag); 729 filp = do_open(ipc_ns, dentry, oflag);
700 } 730 }
701 731
702 if (IS_ERR(filp)) { 732 if (IS_ERR(filp)) {
@@ -709,13 +739,13 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
709 739
710out: 740out:
711 dput(dentry); 741 dput(dentry);
712 mntput(mqueue_mnt); 742 mntput(ipc_ns->mq_mnt);
713out_putfd: 743out_putfd:
714 put_unused_fd(fd); 744 put_unused_fd(fd);
715out_err: 745out_err:
716 fd = error; 746 fd = error;
717out_upsem: 747out_upsem:
718 mutex_unlock(&mqueue_mnt->mnt_root->d_inode->i_mutex); 748 mutex_unlock(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex);
719out_putname: 749out_putname:
720 putname(name); 750 putname(name);
721 return fd; 751 return fd;
@@ -727,14 +757,15 @@ SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name)
727 char *name; 757 char *name;
728 struct dentry *dentry; 758 struct dentry *dentry;
729 struct inode *inode = NULL; 759 struct inode *inode = NULL;
760 struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
730 761
731 name = getname(u_name); 762 name = getname(u_name);
732 if (IS_ERR(name)) 763 if (IS_ERR(name))
733 return PTR_ERR(name); 764 return PTR_ERR(name);
734 765
735 mutex_lock_nested(&mqueue_mnt->mnt_root->d_inode->i_mutex, 766 mutex_lock_nested(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex,
736 I_MUTEX_PARENT); 767 I_MUTEX_PARENT);
737 dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name)); 768 dentry = lookup_one_len(name, ipc_ns->mq_mnt->mnt_root, strlen(name));
738 if (IS_ERR(dentry)) { 769 if (IS_ERR(dentry)) {
739 err = PTR_ERR(dentry); 770 err = PTR_ERR(dentry);
740 goto out_unlock; 771 goto out_unlock;
@@ -748,16 +779,16 @@ SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name)
748 inode = dentry->d_inode; 779 inode = dentry->d_inode;
749 if (inode) 780 if (inode)
750 atomic_inc(&inode->i_count); 781 atomic_inc(&inode->i_count);
751 err = mnt_want_write(mqueue_mnt); 782 err = mnt_want_write(ipc_ns->mq_mnt);
752 if (err) 783 if (err)
753 goto out_err; 784 goto out_err;
754 err = vfs_unlink(dentry->d_parent->d_inode, dentry); 785 err = vfs_unlink(dentry->d_parent->d_inode, dentry);
755 mnt_drop_write(mqueue_mnt); 786 mnt_drop_write(ipc_ns->mq_mnt);
756out_err: 787out_err:
757 dput(dentry); 788 dput(dentry);
758 789
759out_unlock: 790out_unlock:
760 mutex_unlock(&mqueue_mnt->mnt_root->d_inode->i_mutex); 791 mutex_unlock(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex);
761 putname(name); 792 putname(name);
762 if (inode) 793 if (inode)
763 iput(inode); 794 iput(inode);
@@ -1205,59 +1236,31 @@ static struct file_system_type mqueue_fs_type = {
1205 .kill_sb = kill_litter_super, 1236 .kill_sb = kill_litter_super,
1206}; 1237};
1207 1238
1208static int msg_max_limit_min = MIN_MSGMAX; 1239int mq_init_ns(struct ipc_namespace *ns)
1209static int msg_max_limit_max = MAX_MSGMAX; 1240{
1210 1241 ns->mq_queues_count = 0;
1211static int msg_maxsize_limit_min = MIN_MSGSIZEMAX; 1242 ns->mq_queues_max = DFLT_QUEUESMAX;
1212static int msg_maxsize_limit_max = MAX_MSGSIZEMAX; 1243 ns->mq_msg_max = DFLT_MSGMAX;
1213 1244 ns->mq_msgsize_max = DFLT_MSGSIZEMAX;
1214static ctl_table mq_sysctls[] = { 1245
1215 { 1246 ns->mq_mnt = kern_mount_data(&mqueue_fs_type, ns);
1216 .procname = "queues_max", 1247 if (IS_ERR(ns->mq_mnt)) {
1217 .data = &queues_max, 1248 int err = PTR_ERR(ns->mq_mnt);
1218 .maxlen = sizeof(int), 1249 ns->mq_mnt = NULL;
1219 .mode = 0644, 1250 return err;
1220 .proc_handler = &proc_dointvec, 1251 }
1221 }, 1252 return 0;
1222 { 1253}
1223 .procname = "msg_max",
1224 .data = &msg_max,
1225 .maxlen = sizeof(int),
1226 .mode = 0644,
1227 .proc_handler = &proc_dointvec_minmax,
1228 .extra1 = &msg_max_limit_min,
1229 .extra2 = &msg_max_limit_max,
1230 },
1231 {
1232 .procname = "msgsize_max",
1233 .data = &msgsize_max,
1234 .maxlen = sizeof(int),
1235 .mode = 0644,
1236 .proc_handler = &proc_dointvec_minmax,
1237 .extra1 = &msg_maxsize_limit_min,
1238 .extra2 = &msg_maxsize_limit_max,
1239 },
1240 { .ctl_name = 0 }
1241};
1242 1254
1243static ctl_table mq_sysctl_dir[] = { 1255void mq_clear_sbinfo(struct ipc_namespace *ns)
1244 { 1256{
1245 .procname = "mqueue", 1257 ns->mq_mnt->mnt_sb->s_fs_info = NULL;
1246 .mode = 0555, 1258}
1247 .child = mq_sysctls,
1248 },
1249 { .ctl_name = 0 }
1250};
1251 1259
1252static ctl_table mq_sysctl_root[] = { 1260void mq_put_mnt(struct ipc_namespace *ns)
1253 { 1261{
1254 .ctl_name = CTL_FS, 1262 mntput(ns->mq_mnt);
1255 .procname = "fs", 1263}
1256 .mode = 0555,
1257 .child = mq_sysctl_dir,
1258 },
1259 { .ctl_name = 0 }
1260};
1261 1264
1262static int __init init_mqueue_fs(void) 1265static int __init init_mqueue_fs(void)
1263{ 1266{
@@ -1270,21 +1273,20 @@ static int __init init_mqueue_fs(void)
1270 return -ENOMEM; 1273 return -ENOMEM;
1271 1274
1272 /* ignore failues - they are not fatal */ 1275 /* ignore failues - they are not fatal */
1273 mq_sysctl_table = register_sysctl_table(mq_sysctl_root); 1276 mq_sysctl_table = mq_register_sysctl_table();
1274 1277
1275 error = register_filesystem(&mqueue_fs_type); 1278 error = register_filesystem(&mqueue_fs_type);
1276 if (error) 1279 if (error)
1277 goto out_sysctl; 1280 goto out_sysctl;
1278 1281
1279 if (IS_ERR(mqueue_mnt = kern_mount(&mqueue_fs_type))) { 1282 spin_lock_init(&mq_lock);
1280 error = PTR_ERR(mqueue_mnt); 1283
1284 init_ipc_ns.mq_mnt = kern_mount_data(&mqueue_fs_type, &init_ipc_ns);
1285 if (IS_ERR(init_ipc_ns.mq_mnt)) {
1286 error = PTR_ERR(init_ipc_ns.mq_mnt);
1281 goto out_filesystem; 1287 goto out_filesystem;
1282 } 1288 }
1283 1289
1284 /* internal initialization - not common for vfs */
1285 queues_count = 0;
1286 spin_lock_init(&mq_lock);
1287
1288 return 0; 1290 return 0;
1289 1291
1290out_filesystem: 1292out_filesystem:
diff --git a/ipc/msgutil.c b/ipc/msgutil.c
index c82c215693d7..f095ee268833 100644
--- a/ipc/msgutil.c
+++ b/ipc/msgutil.c
@@ -13,10 +13,29 @@
13#include <linux/security.h> 13#include <linux/security.h>
14#include <linux/slab.h> 14#include <linux/slab.h>
15#include <linux/ipc.h> 15#include <linux/ipc.h>
16#include <linux/ipc_namespace.h>
16#include <asm/uaccess.h> 17#include <asm/uaccess.h>
17 18
18#include "util.h" 19#include "util.h"
19 20
21DEFINE_SPINLOCK(mq_lock);
22
23/*
24 * The next 2 defines are here bc this is the only file
25 * compiled when either CONFIG_SYSVIPC and CONFIG_POSIX_MQUEUE
26 * and not CONFIG_IPC_NS.
27 */
28struct ipc_namespace init_ipc_ns = {
29 .count = ATOMIC_INIT(1),
30#ifdef CONFIG_POSIX_MQUEUE
31 .mq_queues_max = DFLT_QUEUESMAX,
32 .mq_msg_max = DFLT_MSGMAX,
33 .mq_msgsize_max = DFLT_MSGSIZEMAX,
34#endif
35};
36
37atomic_t nr_ipc_ns = ATOMIC_INIT(1);
38
20struct msg_msgseg { 39struct msg_msgseg {
21 struct msg_msgseg* next; 40 struct msg_msgseg* next;
22 /* the next part of the message follows immediately */ 41 /* the next part of the message follows immediately */
diff --git a/ipc/namespace.c b/ipc/namespace.c
index 9171d948751e..4a5e752a9276 100644
--- a/ipc/namespace.c
+++ b/ipc/namespace.c
@@ -9,17 +9,26 @@
9#include <linux/rcupdate.h> 9#include <linux/rcupdate.h>
10#include <linux/nsproxy.h> 10#include <linux/nsproxy.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/fs.h>
13#include <linux/mount.h>
12 14
13#include "util.h" 15#include "util.h"
14 16
15static struct ipc_namespace *clone_ipc_ns(struct ipc_namespace *old_ns) 17static struct ipc_namespace *clone_ipc_ns(struct ipc_namespace *old_ns)
16{ 18{
17 struct ipc_namespace *ns; 19 struct ipc_namespace *ns;
20 int err;
18 21
19 ns = kmalloc(sizeof(struct ipc_namespace), GFP_KERNEL); 22 ns = kmalloc(sizeof(struct ipc_namespace), GFP_KERNEL);
20 if (ns == NULL) 23 if (ns == NULL)
21 return ERR_PTR(-ENOMEM); 24 return ERR_PTR(-ENOMEM);
22 25
26 atomic_set(&ns->count, 1);
27 err = mq_init_ns(ns);
28 if (err) {
29 kfree(ns);
30 return ERR_PTR(err);
31 }
23 atomic_inc(&nr_ipc_ns); 32 atomic_inc(&nr_ipc_ns);
24 33
25 sem_init_ns(ns); 34 sem_init_ns(ns);
@@ -34,7 +43,6 @@ static struct ipc_namespace *clone_ipc_ns(struct ipc_namespace *old_ns)
34 ipcns_notify(IPCNS_CREATED); 43 ipcns_notify(IPCNS_CREATED);
35 register_ipcns_notifier(ns); 44 register_ipcns_notifier(ns);
36 45
37 kref_init(&ns->kref);
38 return ns; 46 return ns;
39} 47}
40 48
@@ -84,11 +92,34 @@ void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
84 up_write(&ids->rw_mutex); 92 up_write(&ids->rw_mutex);
85} 93}
86 94
87void free_ipc_ns(struct kref *kref) 95/*
96 * put_ipc_ns - drop a reference to an ipc namespace.
97 * @ns: the namespace to put
98 *
99 * If this is the last task in the namespace exiting, and
100 * it is dropping the refcount to 0, then it can race with
101 * a task in another ipc namespace but in a mounts namespace
102 * which has this ipcns's mqueuefs mounted, doing some action
103 * with one of the mqueuefs files. That can raise the refcount.
104 * So dropping the refcount, and raising the refcount when
105 * accessing it through the VFS, are protected with mq_lock.
106 *
107 * (Clearly, a task raising the refcount on its own ipc_ns
108 * needn't take mq_lock since it can't race with the last task
109 * in the ipcns exiting).
110 */
111void put_ipc_ns(struct ipc_namespace *ns)
88{ 112{
89 struct ipc_namespace *ns; 113 if (atomic_dec_and_lock(&ns->count, &mq_lock)) {
114 mq_clear_sbinfo(ns);
115 spin_unlock(&mq_lock);
116 mq_put_mnt(ns);
117 free_ipc_ns(ns);
118 }
119}
90 120
91 ns = container_of(kref, struct ipc_namespace, kref); 121void free_ipc_ns(struct ipc_namespace *ns)
122{
92 /* 123 /*
93 * Unregistering the hotplug notifier at the beginning guarantees 124 * Unregistering the hotplug notifier at the beginning guarantees
94 * that the ipc namespace won't be freed while we are inside the 125 * that the ipc namespace won't be freed while we are inside the
diff --git a/ipc/util.c b/ipc/util.c
index 7585a72e259b..b8e4ba92f6d1 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -47,15 +47,6 @@ struct ipc_proc_iface {
47 int (*show)(struct seq_file *, void *); 47 int (*show)(struct seq_file *, void *);
48}; 48};
49 49
50struct ipc_namespace init_ipc_ns = {
51 .kref = {
52 .refcount = ATOMIC_INIT(2),
53 },
54};
55
56atomic_t nr_ipc_ns = ATOMIC_INIT(1);
57
58
59#ifdef CONFIG_MEMORY_HOTPLUG 50#ifdef CONFIG_MEMORY_HOTPLUG
60 51
61static void ipc_memory_notifier(struct work_struct *work) 52static void ipc_memory_notifier(struct work_struct *work)
diff --git a/ipc/util.h b/ipc/util.h
index 3646b45a03c9..1187332a89d2 100644
--- a/ipc/util.h
+++ b/ipc/util.h
@@ -20,6 +20,15 @@ void shm_init (void);
20 20
21struct ipc_namespace; 21struct ipc_namespace;
22 22
23#ifdef CONFIG_POSIX_MQUEUE
24extern void mq_clear_sbinfo(struct ipc_namespace *ns);
25extern void mq_put_mnt(struct ipc_namespace *ns);
26#else
27static inline void mq_clear_sbinfo(struct ipc_namespace *ns) { }
28static inline void mq_put_mnt(struct ipc_namespace *ns) { }
29#endif
30
31#ifdef CONFIG_SYSVIPC
23void sem_init_ns(struct ipc_namespace *ns); 32void sem_init_ns(struct ipc_namespace *ns);
24void msg_init_ns(struct ipc_namespace *ns); 33void msg_init_ns(struct ipc_namespace *ns);
25void shm_init_ns(struct ipc_namespace *ns); 34void shm_init_ns(struct ipc_namespace *ns);
@@ -27,6 +36,15 @@ void shm_init_ns(struct ipc_namespace *ns);
27void sem_exit_ns(struct ipc_namespace *ns); 36void sem_exit_ns(struct ipc_namespace *ns);
28void msg_exit_ns(struct ipc_namespace *ns); 37void msg_exit_ns(struct ipc_namespace *ns);
29void shm_exit_ns(struct ipc_namespace *ns); 38void shm_exit_ns(struct ipc_namespace *ns);
39#else
40static inline void sem_init_ns(struct ipc_namespace *ns) { }
41static inline void msg_init_ns(struct ipc_namespace *ns) { }
42static inline void shm_init_ns(struct ipc_namespace *ns) { }
43
44static inline void sem_exit_ns(struct ipc_namespace *ns) { }
45static inline void msg_exit_ns(struct ipc_namespace *ns) { }
46static inline void shm_exit_ns(struct ipc_namespace *ns) { }
47#endif
30 48
31/* 49/*
32 * Structure that holds the parameters needed by the ipc operations 50 * Structure that holds the parameters needed by the ipc operations
diff --git a/kernel/exit.c b/kernel/exit.c
index 6686ed1e4aa3..32cbf2607cb0 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -837,8 +837,7 @@ static void exit_notify(struct task_struct *tsk, int group_dead)
837 */ 837 */
838 if (tsk->exit_signal != SIGCHLD && !task_detached(tsk) && 838 if (tsk->exit_signal != SIGCHLD && !task_detached(tsk) &&
839 (tsk->parent_exec_id != tsk->real_parent->self_exec_id || 839 (tsk->parent_exec_id != tsk->real_parent->self_exec_id ||
840 tsk->self_exec_id != tsk->parent_exec_id) && 840 tsk->self_exec_id != tsk->parent_exec_id))
841 !capable(CAP_KILL))
842 tsk->exit_signal = SIGCHLD; 841 tsk->exit_signal = SIGCHLD;
843 842
844 signal = tracehook_notify_death(tsk, &cookie, group_dead); 843 signal = tracehook_notify_death(tsk, &cookie, group_dead);
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index f394d2a42ca3..cb8a15c19583 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -651,14 +651,20 @@ static inline void hrtimer_init_timer_hres(struct hrtimer *timer)
651 * and expiry check is done in the hrtimer_interrupt or in the softirq. 651 * and expiry check is done in the hrtimer_interrupt or in the softirq.
652 */ 652 */
653static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, 653static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
654 struct hrtimer_clock_base *base) 654 struct hrtimer_clock_base *base,
655 int wakeup)
655{ 656{
656 if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) { 657 if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
657 spin_unlock(&base->cpu_base->lock); 658 if (wakeup) {
658 raise_softirq_irqoff(HRTIMER_SOFTIRQ); 659 spin_unlock(&base->cpu_base->lock);
659 spin_lock(&base->cpu_base->lock); 660 raise_softirq_irqoff(HRTIMER_SOFTIRQ);
661 spin_lock(&base->cpu_base->lock);
662 } else
663 __raise_softirq_irqoff(HRTIMER_SOFTIRQ);
664
660 return 1; 665 return 1;
661 } 666 }
667
662 return 0; 668 return 0;
663} 669}
664 670
@@ -703,7 +709,8 @@ static inline int hrtimer_is_hres_enabled(void) { return 0; }
703static inline int hrtimer_switch_to_hres(void) { return 0; } 709static inline int hrtimer_switch_to_hres(void) { return 0; }
704static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { } 710static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { }
705static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, 711static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
706 struct hrtimer_clock_base *base) 712 struct hrtimer_clock_base *base,
713 int wakeup)
707{ 714{
708 return 0; 715 return 0;
709} 716}
@@ -886,20 +893,9 @@ remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base)
886 return 0; 893 return 0;
887} 894}
888 895
889/** 896int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
890 * hrtimer_start_range_ns - (re)start an hrtimer on the current CPU 897 unsigned long delta_ns, const enum hrtimer_mode mode,
891 * @timer: the timer to be added 898 int wakeup)
892 * @tim: expiry time
893 * @delta_ns: "slack" range for the timer
894 * @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
895 *
896 * Returns:
897 * 0 on success
898 * 1 when the timer was active
899 */
900int
901hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, unsigned long delta_ns,
902 const enum hrtimer_mode mode)
903{ 899{
904 struct hrtimer_clock_base *base, *new_base; 900 struct hrtimer_clock_base *base, *new_base;
905 unsigned long flags; 901 unsigned long flags;
@@ -940,12 +936,29 @@ hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, unsigned long delta_n
940 * XXX send_remote_softirq() ? 936 * XXX send_remote_softirq() ?
941 */ 937 */
942 if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases)) 938 if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases))
943 hrtimer_enqueue_reprogram(timer, new_base); 939 hrtimer_enqueue_reprogram(timer, new_base, wakeup);
944 940
945 unlock_hrtimer_base(timer, &flags); 941 unlock_hrtimer_base(timer, &flags);
946 942
947 return ret; 943 return ret;
948} 944}
945
946/**
947 * hrtimer_start_range_ns - (re)start an hrtimer on the current CPU
948 * @timer: the timer to be added
949 * @tim: expiry time
950 * @delta_ns: "slack" range for the timer
951 * @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
952 *
953 * Returns:
954 * 0 on success
955 * 1 when the timer was active
956 */
957int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
958 unsigned long delta_ns, const enum hrtimer_mode mode)
959{
960 return __hrtimer_start_range_ns(timer, tim, delta_ns, mode, 1);
961}
949EXPORT_SYMBOL_GPL(hrtimer_start_range_ns); 962EXPORT_SYMBOL_GPL(hrtimer_start_range_ns);
950 963
951/** 964/**
@@ -961,7 +974,7 @@ EXPORT_SYMBOL_GPL(hrtimer_start_range_ns);
961int 974int
962hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) 975hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
963{ 976{
964 return hrtimer_start_range_ns(timer, tim, 0, mode); 977 return __hrtimer_start_range_ns(timer, tim, 0, mode, 1);
965} 978}
966EXPORT_SYMBOL_GPL(hrtimer_start); 979EXPORT_SYMBOL_GPL(hrtimer_start);
967 980
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index 5016bfb682b9..a5e74ddee0e2 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -68,7 +68,7 @@ static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
68static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE]; 68static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
69 69
70/* NOTE: change this value only with kprobe_mutex held */ 70/* NOTE: change this value only with kprobe_mutex held */
71static bool kprobe_enabled; 71static bool kprobes_all_disarmed;
72 72
73static DEFINE_MUTEX(kprobe_mutex); /* Protects kprobe_table */ 73static DEFINE_MUTEX(kprobe_mutex); /* Protects kprobe_table */
74static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL; 74static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL;
@@ -328,7 +328,7 @@ static int __kprobes aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
328 struct kprobe *kp; 328 struct kprobe *kp;
329 329
330 list_for_each_entry_rcu(kp, &p->list, list) { 330 list_for_each_entry_rcu(kp, &p->list, list) {
331 if (kp->pre_handler && !kprobe_gone(kp)) { 331 if (kp->pre_handler && likely(!kprobe_disabled(kp))) {
332 set_kprobe_instance(kp); 332 set_kprobe_instance(kp);
333 if (kp->pre_handler(kp, regs)) 333 if (kp->pre_handler(kp, regs))
334 return 1; 334 return 1;
@@ -344,7 +344,7 @@ static void __kprobes aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
344 struct kprobe *kp; 344 struct kprobe *kp;
345 345
346 list_for_each_entry_rcu(kp, &p->list, list) { 346 list_for_each_entry_rcu(kp, &p->list, list) {
347 if (kp->post_handler && !kprobe_gone(kp)) { 347 if (kp->post_handler && likely(!kprobe_disabled(kp))) {
348 set_kprobe_instance(kp); 348 set_kprobe_instance(kp);
349 kp->post_handler(kp, regs, flags); 349 kp->post_handler(kp, regs, flags);
350 reset_kprobe_instance(); 350 reset_kprobe_instance();
@@ -518,20 +518,28 @@ static inline void copy_kprobe(struct kprobe *old_p, struct kprobe *p)
518} 518}
519 519
520/* 520/*
521* Add the new probe to old_p->list. Fail if this is the 521* Add the new probe to ap->list. Fail if this is the
522* second jprobe at the address - two jprobes can't coexist 522* second jprobe at the address - two jprobes can't coexist
523*/ 523*/
524static int __kprobes add_new_kprobe(struct kprobe *old_p, struct kprobe *p) 524static int __kprobes add_new_kprobe(struct kprobe *ap, struct kprobe *p)
525{ 525{
526 BUG_ON(kprobe_gone(ap) || kprobe_gone(p));
526 if (p->break_handler) { 527 if (p->break_handler) {
527 if (old_p->break_handler) 528 if (ap->break_handler)
528 return -EEXIST; 529 return -EEXIST;
529 list_add_tail_rcu(&p->list, &old_p->list); 530 list_add_tail_rcu(&p->list, &ap->list);
530 old_p->break_handler = aggr_break_handler; 531 ap->break_handler = aggr_break_handler;
531 } else 532 } else
532 list_add_rcu(&p->list, &old_p->list); 533 list_add_rcu(&p->list, &ap->list);
533 if (p->post_handler && !old_p->post_handler) 534 if (p->post_handler && !ap->post_handler)
534 old_p->post_handler = aggr_post_handler; 535 ap->post_handler = aggr_post_handler;
536
537 if (kprobe_disabled(ap) && !kprobe_disabled(p)) {
538 ap->flags &= ~KPROBE_FLAG_DISABLED;
539 if (!kprobes_all_disarmed)
540 /* Arm the breakpoint again. */
541 arch_arm_kprobe(ap);
542 }
535 return 0; 543 return 0;
536} 544}
537 545
@@ -544,6 +552,7 @@ static inline void add_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
544 copy_kprobe(p, ap); 552 copy_kprobe(p, ap);
545 flush_insn_slot(ap); 553 flush_insn_slot(ap);
546 ap->addr = p->addr; 554 ap->addr = p->addr;
555 ap->flags = p->flags;
547 ap->pre_handler = aggr_pre_handler; 556 ap->pre_handler = aggr_pre_handler;
548 ap->fault_handler = aggr_fault_handler; 557 ap->fault_handler = aggr_fault_handler;
549 /* We don't care the kprobe which has gone. */ 558 /* We don't care the kprobe which has gone. */
@@ -566,44 +575,59 @@ static int __kprobes register_aggr_kprobe(struct kprobe *old_p,
566 struct kprobe *p) 575 struct kprobe *p)
567{ 576{
568 int ret = 0; 577 int ret = 0;
569 struct kprobe *ap; 578 struct kprobe *ap = old_p;
570 579
571 if (kprobe_gone(old_p)) { 580 if (old_p->pre_handler != aggr_pre_handler) {
581 /* If old_p is not an aggr_probe, create new aggr_kprobe. */
582 ap = kzalloc(sizeof(struct kprobe), GFP_KERNEL);
583 if (!ap)
584 return -ENOMEM;
585 add_aggr_kprobe(ap, old_p);
586 }
587
588 if (kprobe_gone(ap)) {
572 /* 589 /*
573 * Attempting to insert new probe at the same location that 590 * Attempting to insert new probe at the same location that
574 * had a probe in the module vaddr area which already 591 * had a probe in the module vaddr area which already
575 * freed. So, the instruction slot has already been 592 * freed. So, the instruction slot has already been
576 * released. We need a new slot for the new probe. 593 * released. We need a new slot for the new probe.
577 */ 594 */
578 ret = arch_prepare_kprobe(old_p); 595 ret = arch_prepare_kprobe(ap);
579 if (ret) 596 if (ret)
597 /*
598 * Even if fail to allocate new slot, don't need to
599 * free aggr_probe. It will be used next time, or
600 * freed by unregister_kprobe.
601 */
580 return ret; 602 return ret;
581 } 603
582 if (old_p->pre_handler == aggr_pre_handler) {
583 copy_kprobe(old_p, p);
584 ret = add_new_kprobe(old_p, p);
585 ap = old_p;
586 } else {
587 ap = kzalloc(sizeof(struct kprobe), GFP_KERNEL);
588 if (!ap) {
589 if (kprobe_gone(old_p))
590 arch_remove_kprobe(old_p);
591 return -ENOMEM;
592 }
593 add_aggr_kprobe(ap, old_p);
594 copy_kprobe(ap, p);
595 ret = add_new_kprobe(ap, p);
596 }
597 if (kprobe_gone(old_p)) {
598 /* 604 /*
599 * If the old_p has gone, its breakpoint has been disarmed. 605 * Clear gone flag to prevent allocating new slot again, and
600 * We have to arm it again after preparing real kprobes. 606 * set disabled flag because it is not armed yet.
601 */ 607 */
602 ap->flags &= ~KPROBE_FLAG_GONE; 608 ap->flags = (ap->flags & ~KPROBE_FLAG_GONE)
603 if (kprobe_enabled) 609 | KPROBE_FLAG_DISABLED;
604 arch_arm_kprobe(ap);
605 } 610 }
606 return ret; 611
612 copy_kprobe(ap, p);
613 return add_new_kprobe(ap, p);
614}
615
616/* Try to disable aggr_kprobe, and return 1 if succeeded.*/
617static int __kprobes try_to_disable_aggr_kprobe(struct kprobe *p)
618{
619 struct kprobe *kp;
620
621 list_for_each_entry_rcu(kp, &p->list, list) {
622 if (!kprobe_disabled(kp))
623 /*
624 * There is an active probe on the list.
625 * We can't disable aggr_kprobe.
626 */
627 return 0;
628 }
629 p->flags |= KPROBE_FLAG_DISABLED;
630 return 1;
607} 631}
608 632
609static int __kprobes in_kprobes_functions(unsigned long addr) 633static int __kprobes in_kprobes_functions(unsigned long addr)
@@ -664,7 +688,9 @@ int __kprobes register_kprobe(struct kprobe *p)
664 return -EINVAL; 688 return -EINVAL;
665 } 689 }
666 690
667 p->flags = 0; 691 /* User can pass only KPROBE_FLAG_DISABLED to register_kprobe */
692 p->flags &= KPROBE_FLAG_DISABLED;
693
668 /* 694 /*
669 * Check if are we probing a module. 695 * Check if are we probing a module.
670 */ 696 */
@@ -709,7 +735,7 @@ int __kprobes register_kprobe(struct kprobe *p)
709 hlist_add_head_rcu(&p->hlist, 735 hlist_add_head_rcu(&p->hlist,
710 &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]); 736 &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
711 737
712 if (kprobe_enabled) 738 if (!kprobes_all_disarmed && !kprobe_disabled(p))
713 arch_arm_kprobe(p); 739 arch_arm_kprobe(p);
714 740
715out_unlock_text: 741out_unlock_text:
@@ -722,26 +748,39 @@ out:
722 748
723 return ret; 749 return ret;
724} 750}
751EXPORT_SYMBOL_GPL(register_kprobe);
725 752
726/* 753/* Check passed kprobe is valid and return kprobe in kprobe_table. */
727 * Unregister a kprobe without a scheduler synchronization. 754static struct kprobe * __kprobes __get_valid_kprobe(struct kprobe *p)
728 */
729static int __kprobes __unregister_kprobe_top(struct kprobe *p)
730{ 755{
731 struct kprobe *old_p, *list_p; 756 struct kprobe *old_p, *list_p;
732 757
733 old_p = get_kprobe(p->addr); 758 old_p = get_kprobe(p->addr);
734 if (unlikely(!old_p)) 759 if (unlikely(!old_p))
735 return -EINVAL; 760 return NULL;
736 761
737 if (p != old_p) { 762 if (p != old_p) {
738 list_for_each_entry_rcu(list_p, &old_p->list, list) 763 list_for_each_entry_rcu(list_p, &old_p->list, list)
739 if (list_p == p) 764 if (list_p == p)
740 /* kprobe p is a valid probe */ 765 /* kprobe p is a valid probe */
741 goto valid_p; 766 goto valid;
742 return -EINVAL; 767 return NULL;
743 } 768 }
744valid_p: 769valid:
770 return old_p;
771}
772
773/*
774 * Unregister a kprobe without a scheduler synchronization.
775 */
776static int __kprobes __unregister_kprobe_top(struct kprobe *p)
777{
778 struct kprobe *old_p, *list_p;
779
780 old_p = __get_valid_kprobe(p);
781 if (old_p == NULL)
782 return -EINVAL;
783
745 if (old_p == p || 784 if (old_p == p ||
746 (old_p->pre_handler == aggr_pre_handler && 785 (old_p->pre_handler == aggr_pre_handler &&
747 list_is_singular(&old_p->list))) { 786 list_is_singular(&old_p->list))) {
@@ -750,7 +789,7 @@ valid_p:
750 * enabled and not gone - otherwise, the breakpoint would 789 * enabled and not gone - otherwise, the breakpoint would
751 * already have been removed. We save on flushing icache. 790 * already have been removed. We save on flushing icache.
752 */ 791 */
753 if (kprobe_enabled && !kprobe_gone(old_p)) { 792 if (!kprobes_all_disarmed && !kprobe_disabled(old_p)) {
754 mutex_lock(&text_mutex); 793 mutex_lock(&text_mutex);
755 arch_disarm_kprobe(p); 794 arch_disarm_kprobe(p);
756 mutex_unlock(&text_mutex); 795 mutex_unlock(&text_mutex);
@@ -768,6 +807,11 @@ valid_p:
768 } 807 }
769noclean: 808noclean:
770 list_del_rcu(&p->list); 809 list_del_rcu(&p->list);
810 if (!kprobe_disabled(old_p)) {
811 try_to_disable_aggr_kprobe(old_p);
812 if (!kprobes_all_disarmed && kprobe_disabled(old_p))
813 arch_disarm_kprobe(old_p);
814 }
771 } 815 }
772 return 0; 816 return 0;
773} 817}
@@ -803,11 +847,13 @@ int __kprobes register_kprobes(struct kprobe **kps, int num)
803 } 847 }
804 return ret; 848 return ret;
805} 849}
850EXPORT_SYMBOL_GPL(register_kprobes);
806 851
807void __kprobes unregister_kprobe(struct kprobe *p) 852void __kprobes unregister_kprobe(struct kprobe *p)
808{ 853{
809 unregister_kprobes(&p, 1); 854 unregister_kprobes(&p, 1);
810} 855}
856EXPORT_SYMBOL_GPL(unregister_kprobe);
811 857
812void __kprobes unregister_kprobes(struct kprobe **kps, int num) 858void __kprobes unregister_kprobes(struct kprobe **kps, int num)
813{ 859{
@@ -826,6 +872,7 @@ void __kprobes unregister_kprobes(struct kprobe **kps, int num)
826 if (kps[i]->addr) 872 if (kps[i]->addr)
827 __unregister_kprobe_bottom(kps[i]); 873 __unregister_kprobe_bottom(kps[i]);
828} 874}
875EXPORT_SYMBOL_GPL(unregister_kprobes);
829 876
830static struct notifier_block kprobe_exceptions_nb = { 877static struct notifier_block kprobe_exceptions_nb = {
831 .notifier_call = kprobe_exceptions_notify, 878 .notifier_call = kprobe_exceptions_notify,
@@ -865,16 +912,19 @@ int __kprobes register_jprobes(struct jprobe **jps, int num)
865 } 912 }
866 return ret; 913 return ret;
867} 914}
915EXPORT_SYMBOL_GPL(register_jprobes);
868 916
869int __kprobes register_jprobe(struct jprobe *jp) 917int __kprobes register_jprobe(struct jprobe *jp)
870{ 918{
871 return register_jprobes(&jp, 1); 919 return register_jprobes(&jp, 1);
872} 920}
921EXPORT_SYMBOL_GPL(register_jprobe);
873 922
874void __kprobes unregister_jprobe(struct jprobe *jp) 923void __kprobes unregister_jprobe(struct jprobe *jp)
875{ 924{
876 unregister_jprobes(&jp, 1); 925 unregister_jprobes(&jp, 1);
877} 926}
927EXPORT_SYMBOL_GPL(unregister_jprobe);
878 928
879void __kprobes unregister_jprobes(struct jprobe **jps, int num) 929void __kprobes unregister_jprobes(struct jprobe **jps, int num)
880{ 930{
@@ -894,6 +944,7 @@ void __kprobes unregister_jprobes(struct jprobe **jps, int num)
894 __unregister_kprobe_bottom(&jps[i]->kp); 944 __unregister_kprobe_bottom(&jps[i]->kp);
895 } 945 }
896} 946}
947EXPORT_SYMBOL_GPL(unregister_jprobes);
897 948
898#ifdef CONFIG_KRETPROBES 949#ifdef CONFIG_KRETPROBES
899/* 950/*
@@ -987,6 +1038,7 @@ int __kprobes register_kretprobe(struct kretprobe *rp)
987 free_rp_inst(rp); 1038 free_rp_inst(rp);
988 return ret; 1039 return ret;
989} 1040}
1041EXPORT_SYMBOL_GPL(register_kretprobe);
990 1042
991int __kprobes register_kretprobes(struct kretprobe **rps, int num) 1043int __kprobes register_kretprobes(struct kretprobe **rps, int num)
992{ 1044{
@@ -1004,11 +1056,13 @@ int __kprobes register_kretprobes(struct kretprobe **rps, int num)
1004 } 1056 }
1005 return ret; 1057 return ret;
1006} 1058}
1059EXPORT_SYMBOL_GPL(register_kretprobes);
1007 1060
1008void __kprobes unregister_kretprobe(struct kretprobe *rp) 1061void __kprobes unregister_kretprobe(struct kretprobe *rp)
1009{ 1062{
1010 unregister_kretprobes(&rp, 1); 1063 unregister_kretprobes(&rp, 1);
1011} 1064}
1065EXPORT_SYMBOL_GPL(unregister_kretprobe);
1012 1066
1013void __kprobes unregister_kretprobes(struct kretprobe **rps, int num) 1067void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1014{ 1068{
@@ -1030,24 +1084,30 @@ void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1030 } 1084 }
1031 } 1085 }
1032} 1086}
1087EXPORT_SYMBOL_GPL(unregister_kretprobes);
1033 1088
1034#else /* CONFIG_KRETPROBES */ 1089#else /* CONFIG_KRETPROBES */
1035int __kprobes register_kretprobe(struct kretprobe *rp) 1090int __kprobes register_kretprobe(struct kretprobe *rp)
1036{ 1091{
1037 return -ENOSYS; 1092 return -ENOSYS;
1038} 1093}
1094EXPORT_SYMBOL_GPL(register_kretprobe);
1039 1095
1040int __kprobes register_kretprobes(struct kretprobe **rps, int num) 1096int __kprobes register_kretprobes(struct kretprobe **rps, int num)
1041{ 1097{
1042 return -ENOSYS; 1098 return -ENOSYS;
1043} 1099}
1100EXPORT_SYMBOL_GPL(register_kretprobes);
1101
1044void __kprobes unregister_kretprobe(struct kretprobe *rp) 1102void __kprobes unregister_kretprobe(struct kretprobe *rp)
1045{ 1103{
1046} 1104}
1105EXPORT_SYMBOL_GPL(unregister_kretprobe);
1047 1106
1048void __kprobes unregister_kretprobes(struct kretprobe **rps, int num) 1107void __kprobes unregister_kretprobes(struct kretprobe **rps, int num)
1049{ 1108{
1050} 1109}
1110EXPORT_SYMBOL_GPL(unregister_kretprobes);
1051 1111
1052static int __kprobes pre_handler_kretprobe(struct kprobe *p, 1112static int __kprobes pre_handler_kretprobe(struct kprobe *p,
1053 struct pt_regs *regs) 1113 struct pt_regs *regs)
@@ -1061,6 +1121,7 @@ static int __kprobes pre_handler_kretprobe(struct kprobe *p,
1061static void __kprobes kill_kprobe(struct kprobe *p) 1121static void __kprobes kill_kprobe(struct kprobe *p)
1062{ 1122{
1063 struct kprobe *kp; 1123 struct kprobe *kp;
1124
1064 p->flags |= KPROBE_FLAG_GONE; 1125 p->flags |= KPROBE_FLAG_GONE;
1065 if (p->pre_handler == aggr_pre_handler) { 1126 if (p->pre_handler == aggr_pre_handler) {
1066 /* 1127 /*
@@ -1173,8 +1234,8 @@ static int __init init_kprobes(void)
1173 } 1234 }
1174 } 1235 }
1175 1236
1176 /* By default, kprobes are enabled */ 1237 /* By default, kprobes are armed */
1177 kprobe_enabled = true; 1238 kprobes_all_disarmed = false;
1178 1239
1179 err = arch_init_kprobes(); 1240 err = arch_init_kprobes();
1180 if (!err) 1241 if (!err)
@@ -1202,12 +1263,18 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p,
1202 else 1263 else
1203 kprobe_type = "k"; 1264 kprobe_type = "k";
1204 if (sym) 1265 if (sym)
1205 seq_printf(pi, "%p %s %s+0x%x %s %s\n", p->addr, kprobe_type, 1266 seq_printf(pi, "%p %s %s+0x%x %s %s%s\n",
1206 sym, offset, (modname ? modname : " "), 1267 p->addr, kprobe_type, sym, offset,
1207 (kprobe_gone(p) ? "[GONE]" : "")); 1268 (modname ? modname : " "),
1269 (kprobe_gone(p) ? "[GONE]" : ""),
1270 ((kprobe_disabled(p) && !kprobe_gone(p)) ?
1271 "[DISABLED]" : ""));
1208 else 1272 else
1209 seq_printf(pi, "%p %s %p %s\n", p->addr, kprobe_type, p->addr, 1273 seq_printf(pi, "%p %s %p %s%s\n",
1210 (kprobe_gone(p) ? "[GONE]" : "")); 1274 p->addr, kprobe_type, p->addr,
1275 (kprobe_gone(p) ? "[GONE]" : ""),
1276 ((kprobe_disabled(p) && !kprobe_gone(p)) ?
1277 "[DISABLED]" : ""));
1211} 1278}
1212 1279
1213static void __kprobes *kprobe_seq_start(struct seq_file *f, loff_t *pos) 1280static void __kprobes *kprobe_seq_start(struct seq_file *f, loff_t *pos)
@@ -1272,7 +1339,72 @@ static struct file_operations debugfs_kprobes_operations = {
1272 .release = seq_release, 1339 .release = seq_release,
1273}; 1340};
1274 1341
1275static void __kprobes enable_all_kprobes(void) 1342/* Disable one kprobe */
1343int __kprobes disable_kprobe(struct kprobe *kp)
1344{
1345 int ret = 0;
1346 struct kprobe *p;
1347
1348 mutex_lock(&kprobe_mutex);
1349
1350 /* Check whether specified probe is valid. */
1351 p = __get_valid_kprobe(kp);
1352 if (unlikely(p == NULL)) {
1353 ret = -EINVAL;
1354 goto out;
1355 }
1356
1357 /* If the probe is already disabled (or gone), just return */
1358 if (kprobe_disabled(kp))
1359 goto out;
1360
1361 kp->flags |= KPROBE_FLAG_DISABLED;
1362 if (p != kp)
1363 /* When kp != p, p is always enabled. */
1364 try_to_disable_aggr_kprobe(p);
1365
1366 if (!kprobes_all_disarmed && kprobe_disabled(p))
1367 arch_disarm_kprobe(p);
1368out:
1369 mutex_unlock(&kprobe_mutex);
1370 return ret;
1371}
1372EXPORT_SYMBOL_GPL(disable_kprobe);
1373
1374/* Enable one kprobe */
1375int __kprobes enable_kprobe(struct kprobe *kp)
1376{
1377 int ret = 0;
1378 struct kprobe *p;
1379
1380 mutex_lock(&kprobe_mutex);
1381
1382 /* Check whether specified probe is valid. */
1383 p = __get_valid_kprobe(kp);
1384 if (unlikely(p == NULL)) {
1385 ret = -EINVAL;
1386 goto out;
1387 }
1388
1389 if (kprobe_gone(kp)) {
1390 /* This kprobe has gone, we couldn't enable it. */
1391 ret = -EINVAL;
1392 goto out;
1393 }
1394
1395 if (!kprobes_all_disarmed && kprobe_disabled(p))
1396 arch_arm_kprobe(p);
1397
1398 p->flags &= ~KPROBE_FLAG_DISABLED;
1399 if (p != kp)
1400 kp->flags &= ~KPROBE_FLAG_DISABLED;
1401out:
1402 mutex_unlock(&kprobe_mutex);
1403 return ret;
1404}
1405EXPORT_SYMBOL_GPL(enable_kprobe);
1406
1407static void __kprobes arm_all_kprobes(void)
1276{ 1408{
1277 struct hlist_head *head; 1409 struct hlist_head *head;
1278 struct hlist_node *node; 1410 struct hlist_node *node;
@@ -1281,20 +1413,20 @@ static void __kprobes enable_all_kprobes(void)
1281 1413
1282 mutex_lock(&kprobe_mutex); 1414 mutex_lock(&kprobe_mutex);
1283 1415
1284 /* If kprobes are already enabled, just return */ 1416 /* If kprobes are armed, just return */
1285 if (kprobe_enabled) 1417 if (!kprobes_all_disarmed)
1286 goto already_enabled; 1418 goto already_enabled;
1287 1419
1288 mutex_lock(&text_mutex); 1420 mutex_lock(&text_mutex);
1289 for (i = 0; i < KPROBE_TABLE_SIZE; i++) { 1421 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1290 head = &kprobe_table[i]; 1422 head = &kprobe_table[i];
1291 hlist_for_each_entry_rcu(p, node, head, hlist) 1423 hlist_for_each_entry_rcu(p, node, head, hlist)
1292 if (!kprobe_gone(p)) 1424 if (!kprobe_disabled(p))
1293 arch_arm_kprobe(p); 1425 arch_arm_kprobe(p);
1294 } 1426 }
1295 mutex_unlock(&text_mutex); 1427 mutex_unlock(&text_mutex);
1296 1428
1297 kprobe_enabled = true; 1429 kprobes_all_disarmed = false;
1298 printk(KERN_INFO "Kprobes globally enabled\n"); 1430 printk(KERN_INFO "Kprobes globally enabled\n");
1299 1431
1300already_enabled: 1432already_enabled:
@@ -1302,7 +1434,7 @@ already_enabled:
1302 return; 1434 return;
1303} 1435}
1304 1436
1305static void __kprobes disable_all_kprobes(void) 1437static void __kprobes disarm_all_kprobes(void)
1306{ 1438{
1307 struct hlist_head *head; 1439 struct hlist_head *head;
1308 struct hlist_node *node; 1440 struct hlist_node *node;
@@ -1311,17 +1443,17 @@ static void __kprobes disable_all_kprobes(void)
1311 1443
1312 mutex_lock(&kprobe_mutex); 1444 mutex_lock(&kprobe_mutex);
1313 1445
1314 /* If kprobes are already disabled, just return */ 1446 /* If kprobes are already disarmed, just return */
1315 if (!kprobe_enabled) 1447 if (kprobes_all_disarmed)
1316 goto already_disabled; 1448 goto already_disabled;
1317 1449
1318 kprobe_enabled = false; 1450 kprobes_all_disarmed = true;
1319 printk(KERN_INFO "Kprobes globally disabled\n"); 1451 printk(KERN_INFO "Kprobes globally disabled\n");
1320 mutex_lock(&text_mutex); 1452 mutex_lock(&text_mutex);
1321 for (i = 0; i < KPROBE_TABLE_SIZE; i++) { 1453 for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
1322 head = &kprobe_table[i]; 1454 head = &kprobe_table[i];
1323 hlist_for_each_entry_rcu(p, node, head, hlist) { 1455 hlist_for_each_entry_rcu(p, node, head, hlist) {
1324 if (!arch_trampoline_kprobe(p) && !kprobe_gone(p)) 1456 if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p))
1325 arch_disarm_kprobe(p); 1457 arch_disarm_kprobe(p);
1326 } 1458 }
1327 } 1459 }
@@ -1347,7 +1479,7 @@ static ssize_t read_enabled_file_bool(struct file *file,
1347{ 1479{
1348 char buf[3]; 1480 char buf[3];
1349 1481
1350 if (kprobe_enabled) 1482 if (!kprobes_all_disarmed)
1351 buf[0] = '1'; 1483 buf[0] = '1';
1352 else 1484 else
1353 buf[0] = '0'; 1485 buf[0] = '0';
@@ -1370,12 +1502,12 @@ static ssize_t write_enabled_file_bool(struct file *file,
1370 case 'y': 1502 case 'y':
1371 case 'Y': 1503 case 'Y':
1372 case '1': 1504 case '1':
1373 enable_all_kprobes(); 1505 arm_all_kprobes();
1374 break; 1506 break;
1375 case 'n': 1507 case 'n':
1376 case 'N': 1508 case 'N':
1377 case '0': 1509 case '0':
1378 disable_all_kprobes(); 1510 disarm_all_kprobes();
1379 break; 1511 break;
1380 } 1512 }
1381 1513
@@ -1418,16 +1550,5 @@ late_initcall(debugfs_kprobe_init);
1418 1550
1419module_init(init_kprobes); 1551module_init(init_kprobes);
1420 1552
1421EXPORT_SYMBOL_GPL(register_kprobe); 1553/* defined in arch/.../kernel/kprobes.c */
1422EXPORT_SYMBOL_GPL(unregister_kprobe);
1423EXPORT_SYMBOL_GPL(register_kprobes);
1424EXPORT_SYMBOL_GPL(unregister_kprobes);
1425EXPORT_SYMBOL_GPL(register_jprobe);
1426EXPORT_SYMBOL_GPL(unregister_jprobe);
1427EXPORT_SYMBOL_GPL(register_jprobes);
1428EXPORT_SYMBOL_GPL(unregister_jprobes);
1429EXPORT_SYMBOL_GPL(jprobe_return); 1554EXPORT_SYMBOL_GPL(jprobe_return);
1430EXPORT_SYMBOL_GPL(register_kretprobe);
1431EXPORT_SYMBOL_GPL(unregister_kretprobe);
1432EXPORT_SYMBOL_GPL(register_kretprobes);
1433EXPORT_SYMBOL_GPL(unregister_kretprobes);
diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index 81b5f33970b8..b0f011866969 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -793,6 +793,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
793 793
794 printk("BUG: MAX_LOCKDEP_KEYS too low!\n"); 794 printk("BUG: MAX_LOCKDEP_KEYS too low!\n");
795 printk("turning off the locking correctness validator.\n"); 795 printk("turning off the locking correctness validator.\n");
796 dump_stack();
796 return NULL; 797 return NULL;
797 } 798 }
798 class = lock_classes + nr_lock_classes++; 799 class = lock_classes + nr_lock_classes++;
@@ -856,6 +857,7 @@ static struct lock_list *alloc_list_entry(void)
856 857
857 printk("BUG: MAX_LOCKDEP_ENTRIES too low!\n"); 858 printk("BUG: MAX_LOCKDEP_ENTRIES too low!\n");
858 printk("turning off the locking correctness validator.\n"); 859 printk("turning off the locking correctness validator.\n");
860 dump_stack();
859 return NULL; 861 return NULL;
860 } 862 }
861 return list_entries + nr_list_entries++; 863 return list_entries + nr_list_entries++;
@@ -1682,6 +1684,7 @@ cache_hit:
1682 1684
1683 printk("BUG: MAX_LOCKDEP_CHAINS too low!\n"); 1685 printk("BUG: MAX_LOCKDEP_CHAINS too low!\n");
1684 printk("turning off the locking correctness validator.\n"); 1686 printk("turning off the locking correctness validator.\n");
1687 dump_stack();
1685 return 0; 1688 return 0;
1686 } 1689 }
1687 chain = lock_chains + nr_lock_chains++; 1690 chain = lock_chains + nr_lock_chains++;
@@ -2541,6 +2544,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
2541 debug_locks_off(); 2544 debug_locks_off();
2542 printk("BUG: MAX_LOCKDEP_SUBCLASSES too low!\n"); 2545 printk("BUG: MAX_LOCKDEP_SUBCLASSES too low!\n");
2543 printk("turning off the locking correctness validator.\n"); 2546 printk("turning off the locking correctness validator.\n");
2547 dump_stack();
2544 return 0; 2548 return 0;
2545 } 2549 }
2546 2550
@@ -2637,6 +2641,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
2637 debug_locks_off(); 2641 debug_locks_off();
2638 printk("BUG: MAX_LOCK_DEPTH too low!\n"); 2642 printk("BUG: MAX_LOCK_DEPTH too low!\n");
2639 printk("turning off the locking correctness validator.\n"); 2643 printk("turning off the locking correctness validator.\n");
2644 dump_stack();
2640 return 0; 2645 return 0;
2641 } 2646 }
2642 2647
diff --git a/kernel/module.c b/kernel/module.c
index c268a771595c..05f014efa32c 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1952,9 +1952,6 @@ static noinline struct module *load_module(void __user *umod,
1952 if (strstarts(secstrings+sechdrs[i].sh_name, ".exit")) 1952 if (strstarts(secstrings+sechdrs[i].sh_name, ".exit"))
1953 sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC; 1953 sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC;
1954#endif 1954#endif
1955 /* Don't keep __versions around; it's just for loading. */
1956 if (strcmp(secstrings + sechdrs[i].sh_name, "__versions") == 0)
1957 sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC;
1958 } 1955 }
1959 1956
1960 modindex = find_sec(hdr, sechdrs, secstrings, 1957 modindex = find_sec(hdr, sechdrs, secstrings,
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
index 654c640a6b9c..0f2b0b311304 100644
--- a/kernel/rcuclassic.c
+++ b/kernel/rcuclassic.c
@@ -65,6 +65,7 @@ static struct rcu_ctrlblk rcu_ctrlblk = {
65 .lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock), 65 .lock = __SPIN_LOCK_UNLOCKED(&rcu_ctrlblk.lock),
66 .cpumask = CPU_BITS_NONE, 66 .cpumask = CPU_BITS_NONE,
67}; 67};
68
68static struct rcu_ctrlblk rcu_bh_ctrlblk = { 69static struct rcu_ctrlblk rcu_bh_ctrlblk = {
69 .cur = -300, 70 .cur = -300,
70 .completed = -300, 71 .completed = -300,
@@ -73,8 +74,26 @@ static struct rcu_ctrlblk rcu_bh_ctrlblk = {
73 .cpumask = CPU_BITS_NONE, 74 .cpumask = CPU_BITS_NONE,
74}; 75};
75 76
76DEFINE_PER_CPU(struct rcu_data, rcu_data) = { 0L }; 77static DEFINE_PER_CPU(struct rcu_data, rcu_data);
77DEFINE_PER_CPU(struct rcu_data, rcu_bh_data) = { 0L }; 78static DEFINE_PER_CPU(struct rcu_data, rcu_bh_data);
79
80/*
81 * Increment the quiescent state counter.
82 * The counter is a bit degenerated: We do not need to know
83 * how many quiescent states passed, just if there was at least
84 * one since the start of the grace period. Thus just a flag.
85 */
86void rcu_qsctr_inc(int cpu)
87{
88 struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
89 rdp->passed_quiesc = 1;
90}
91
92void rcu_bh_qsctr_inc(int cpu)
93{
94 struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
95 rdp->passed_quiesc = 1;
96}
78 97
79static int blimit = 10; 98static int blimit = 10;
80static int qhimark = 10000; 99static int qhimark = 10000;
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c
index 5d59e850fb71..ce97a4df64d3 100644
--- a/kernel/rcupreempt.c
+++ b/kernel/rcupreempt.c
@@ -147,7 +147,51 @@ struct rcu_ctrlblk {
147 wait_queue_head_t sched_wq; /* Place for rcu_sched to sleep. */ 147 wait_queue_head_t sched_wq; /* Place for rcu_sched to sleep. */
148}; 148};
149 149
150struct rcu_dyntick_sched {
151 int dynticks;
152 int dynticks_snap;
153 int sched_qs;
154 int sched_qs_snap;
155 int sched_dynticks_snap;
156};
157
158static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched) = {
159 .dynticks = 1,
160};
161
162void rcu_qsctr_inc(int cpu)
163{
164 struct rcu_dyntick_sched *rdssp = &per_cpu(rcu_dyntick_sched, cpu);
165
166 rdssp->sched_qs++;
167}
168
169#ifdef CONFIG_NO_HZ
170
171void rcu_enter_nohz(void)
172{
173 static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1);
174
175 smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */
176 __get_cpu_var(rcu_dyntick_sched).dynticks++;
177 WARN_ON_RATELIMIT(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1, &rs);
178}
179
180void rcu_exit_nohz(void)
181{
182 static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1);
183
184 __get_cpu_var(rcu_dyntick_sched).dynticks++;
185 smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */
186 WARN_ON_RATELIMIT(!(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1),
187 &rs);
188}
189
190#endif /* CONFIG_NO_HZ */
191
192
150static DEFINE_PER_CPU(struct rcu_data, rcu_data); 193static DEFINE_PER_CPU(struct rcu_data, rcu_data);
194
151static struct rcu_ctrlblk rcu_ctrlblk = { 195static struct rcu_ctrlblk rcu_ctrlblk = {
152 .fliplock = __SPIN_LOCK_UNLOCKED(rcu_ctrlblk.fliplock), 196 .fliplock = __SPIN_LOCK_UNLOCKED(rcu_ctrlblk.fliplock),
153 .completed = 0, 197 .completed = 0,
@@ -427,10 +471,6 @@ static void __rcu_advance_callbacks(struct rcu_data *rdp)
427 } 471 }
428} 472}
429 473
430DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched) = {
431 .dynticks = 1,
432};
433
434#ifdef CONFIG_NO_HZ 474#ifdef CONFIG_NO_HZ
435static DEFINE_PER_CPU(int, rcu_update_flag); 475static DEFINE_PER_CPU(int, rcu_update_flag);
436 476
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 97ce31579ec0..7f3266922572 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -78,6 +78,26 @@ DEFINE_PER_CPU(struct rcu_data, rcu_data);
78struct rcu_state rcu_bh_state = RCU_STATE_INITIALIZER(rcu_bh_state); 78struct rcu_state rcu_bh_state = RCU_STATE_INITIALIZER(rcu_bh_state);
79DEFINE_PER_CPU(struct rcu_data, rcu_bh_data); 79DEFINE_PER_CPU(struct rcu_data, rcu_bh_data);
80 80
81/*
82 * Increment the quiescent state counter.
83 * The counter is a bit degenerated: We do not need to know
84 * how many quiescent states passed, just if there was at least
85 * one since the start of the grace period. Thus just a flag.
86 */
87void rcu_qsctr_inc(int cpu)
88{
89 struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
90 rdp->passed_quiesc = 1;
91 rdp->passed_quiesc_completed = rdp->completed;
92}
93
94void rcu_bh_qsctr_inc(int cpu)
95{
96 struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
97 rdp->passed_quiesc = 1;
98 rdp->passed_quiesc_completed = rdp->completed;
99}
100
81#ifdef CONFIG_NO_HZ 101#ifdef CONFIG_NO_HZ
82DEFINE_PER_CPU(struct rcu_dynticks, rcu_dynticks) = { 102DEFINE_PER_CPU(struct rcu_dynticks, rcu_dynticks) = {
83 .dynticks_nesting = 1, 103 .dynticks_nesting = 1,
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
new file mode 100644
index 000000000000..5e872bbf07f5
--- /dev/null
+++ b/kernel/rcutree.h
@@ -0,0 +1,10 @@
1
2/*
3 * RCU implementation internal declarations:
4 */
5extern struct rcu_state rcu_state;
6DECLARE_PER_CPU(struct rcu_data, rcu_data);
7
8extern struct rcu_state rcu_bh_state;
9DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
10
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c
index d6db3e837826..4ee954f6a8d5 100644
--- a/kernel/rcutree_trace.c
+++ b/kernel/rcutree_trace.c
@@ -43,6 +43,8 @@
43#include <linux/debugfs.h> 43#include <linux/debugfs.h>
44#include <linux/seq_file.h> 44#include <linux/seq_file.h>
45 45
46#include "rcutree.h"
47
46static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp) 48static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
47{ 49{
48 if (!rdp->beenonline) 50 if (!rdp->beenonline)
diff --git a/kernel/sched.c b/kernel/sched.c
index bec249885e17..6cc1fd5d5072 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -231,13 +231,20 @@ static void start_rt_bandwidth(struct rt_bandwidth *rt_b)
231 231
232 spin_lock(&rt_b->rt_runtime_lock); 232 spin_lock(&rt_b->rt_runtime_lock);
233 for (;;) { 233 for (;;) {
234 unsigned long delta;
235 ktime_t soft, hard;
236
234 if (hrtimer_active(&rt_b->rt_period_timer)) 237 if (hrtimer_active(&rt_b->rt_period_timer))
235 break; 238 break;
236 239
237 now = hrtimer_cb_get_time(&rt_b->rt_period_timer); 240 now = hrtimer_cb_get_time(&rt_b->rt_period_timer);
238 hrtimer_forward(&rt_b->rt_period_timer, now, rt_b->rt_period); 241 hrtimer_forward(&rt_b->rt_period_timer, now, rt_b->rt_period);
239 hrtimer_start_expires(&rt_b->rt_period_timer, 242
240 HRTIMER_MODE_ABS); 243 soft = hrtimer_get_softexpires(&rt_b->rt_period_timer);
244 hard = hrtimer_get_expires(&rt_b->rt_period_timer);
245 delta = ktime_to_ns(ktime_sub(hard, soft));
246 __hrtimer_start_range_ns(&rt_b->rt_period_timer, soft, delta,
247 HRTIMER_MODE_ABS, 0);
241 } 248 }
242 spin_unlock(&rt_b->rt_runtime_lock); 249 spin_unlock(&rt_b->rt_runtime_lock);
243} 250}
@@ -1146,7 +1153,8 @@ static __init void init_hrtick(void)
1146 */ 1153 */
1147static void hrtick_start(struct rq *rq, u64 delay) 1154static void hrtick_start(struct rq *rq, u64 delay)
1148{ 1155{
1149 hrtimer_start(&rq->hrtick_timer, ns_to_ktime(delay), HRTIMER_MODE_REL); 1156 __hrtimer_start_range_ns(&rq->hrtick_timer, ns_to_ktime(delay), 0,
1157 HRTIMER_MODE_REL, 0);
1150} 1158}
1151 1159
1152static inline void init_hrtick(void) 1160static inline void init_hrtick(void)
diff --git a/kernel/softirq.c b/kernel/softirq.c
index d105a82543d0..2fecefacdc5b 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -65,7 +65,7 @@ char *softirq_to_name[NR_SOFTIRQS] = {
65 * to the pending events, so lets the scheduler to balance 65 * to the pending events, so lets the scheduler to balance
66 * the softirq load for us. 66 * the softirq load for us.
67 */ 67 */
68static inline void wakeup_softirqd(void) 68void wakeup_softirqd(void)
69{ 69{
70 /* Interrupts are disabled: no need to stop preemption */ 70 /* Interrupts are disabled: no need to stop preemption */
71 struct task_struct *tsk = __get_cpu_var(ksoftirqd); 71 struct task_struct *tsk = __get_cpu_var(ksoftirqd);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 82350f8f04f6..72eb1a41dcab 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -97,10 +97,11 @@ static int neg_one = -1;
97#endif 97#endif
98 98
99static int zero; 99static int zero;
100static int one = 1; 100static int __maybe_unused one = 1;
101static int two = 2; 101static int __maybe_unused two = 2;
102static unsigned long one_ul = 1; 102static unsigned long one_ul = 1;
103static int one_hundred = 100; 103static int one_hundred = 100;
104static int one_thousand = 1000;
104 105
105/* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ 106/* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
106static int maxolduid = 65535; 107static int maxolduid = 65535;
@@ -1027,6 +1028,28 @@ static struct ctl_table vm_table[] = {
1027 .proc_handler = &proc_dointvec, 1028 .proc_handler = &proc_dointvec,
1028 }, 1029 },
1029 { 1030 {
1031 .ctl_name = CTL_UNNUMBERED,
1032 .procname = "nr_pdflush_threads_min",
1033 .data = &nr_pdflush_threads_min,
1034 .maxlen = sizeof nr_pdflush_threads_min,
1035 .mode = 0644 /* read-write */,
1036 .proc_handler = &proc_dointvec_minmax,
1037 .strategy = &sysctl_intvec,
1038 .extra1 = &one,
1039 .extra2 = &nr_pdflush_threads_max,
1040 },
1041 {
1042 .ctl_name = CTL_UNNUMBERED,
1043 .procname = "nr_pdflush_threads_max",
1044 .data = &nr_pdflush_threads_max,
1045 .maxlen = sizeof nr_pdflush_threads_max,
1046 .mode = 0644 /* read-write */,
1047 .proc_handler = &proc_dointvec_minmax,
1048 .strategy = &sysctl_intvec,
1049 .extra1 = &nr_pdflush_threads_min,
1050 .extra2 = &one_thousand,
1051 },
1052 {
1030 .ctl_name = VM_SWAPPINESS, 1053 .ctl_name = VM_SWAPPINESS,
1031 .procname = "swappiness", 1054 .procname = "swappiness",
1032 .data = &vm_swappiness, 1055 .data = &vm_swappiness,
diff --git a/kernel/trace/kmemtrace.c b/kernel/trace/kmemtrace.c
index ae201b3eda89..5011f4d91e37 100644
--- a/kernel/trace/kmemtrace.c
+++ b/kernel/trace/kmemtrace.c
@@ -6,14 +6,16 @@
6 * Copyright (C) 2008 Frederic Weisbecker <fweisbec@gmail.com> 6 * Copyright (C) 2008 Frederic Weisbecker <fweisbec@gmail.com>
7 */ 7 */
8 8
9#include <linux/dcache.h> 9#include <linux/tracepoint.h>
10#include <linux/seq_file.h>
10#include <linux/debugfs.h> 11#include <linux/debugfs.h>
12#include <linux/dcache.h>
11#include <linux/fs.h> 13#include <linux/fs.h>
12#include <linux/seq_file.h> 14
13#include <trace/kmemtrace.h> 15#include <trace/kmemtrace.h>
14 16
15#include "trace.h"
16#include "trace_output.h" 17#include "trace_output.h"
18#include "trace.h"
17 19
18/* Select an alternative, minimalistic output than the original one */ 20/* Select an alternative, minimalistic output than the original one */
19#define TRACE_KMEM_OPT_MINIMAL 0x1 21#define TRACE_KMEM_OPT_MINIMAL 0x1
@@ -25,14 +27,156 @@ static struct tracer_opt kmem_opts[] = {
25}; 27};
26 28
27static struct tracer_flags kmem_tracer_flags = { 29static struct tracer_flags kmem_tracer_flags = {
28 .val = 0, 30 .val = 0,
29 .opts = kmem_opts 31 .opts = kmem_opts
30}; 32};
31 33
32
33static bool kmem_tracing_enabled __read_mostly;
34static struct trace_array *kmemtrace_array; 34static struct trace_array *kmemtrace_array;
35 35
36/* Trace allocations */
37static inline void kmemtrace_alloc(enum kmemtrace_type_id type_id,
38 unsigned long call_site,
39 const void *ptr,
40 size_t bytes_req,
41 size_t bytes_alloc,
42 gfp_t gfp_flags,
43 int node)
44{
45 struct trace_array *tr = kmemtrace_array;
46 struct kmemtrace_alloc_entry *entry;
47 struct ring_buffer_event *event;
48
49 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry));
50 if (!event)
51 return;
52
53 entry = ring_buffer_event_data(event);
54 tracing_generic_entry_update(&entry->ent, 0, 0);
55
56 entry->ent.type = TRACE_KMEM_ALLOC;
57 entry->type_id = type_id;
58 entry->call_site = call_site;
59 entry->ptr = ptr;
60 entry->bytes_req = bytes_req;
61 entry->bytes_alloc = bytes_alloc;
62 entry->gfp_flags = gfp_flags;
63 entry->node = node;
64
65 ring_buffer_unlock_commit(tr->buffer, event);
66
67 trace_wake_up();
68}
69
70static inline void kmemtrace_free(enum kmemtrace_type_id type_id,
71 unsigned long call_site,
72 const void *ptr)
73{
74 struct trace_array *tr = kmemtrace_array;
75 struct kmemtrace_free_entry *entry;
76 struct ring_buffer_event *event;
77
78 event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry));
79 if (!event)
80 return;
81 entry = ring_buffer_event_data(event);
82 tracing_generic_entry_update(&entry->ent, 0, 0);
83
84 entry->ent.type = TRACE_KMEM_FREE;
85 entry->type_id = type_id;
86 entry->call_site = call_site;
87 entry->ptr = ptr;
88
89 ring_buffer_unlock_commit(tr->buffer, event);
90
91 trace_wake_up();
92}
93
94static void kmemtrace_kmalloc(unsigned long call_site,
95 const void *ptr,
96 size_t bytes_req,
97 size_t bytes_alloc,
98 gfp_t gfp_flags)
99{
100 kmemtrace_alloc(KMEMTRACE_TYPE_KMALLOC, call_site, ptr,
101 bytes_req, bytes_alloc, gfp_flags, -1);
102}
103
104static void kmemtrace_kmem_cache_alloc(unsigned long call_site,
105 const void *ptr,
106 size_t bytes_req,
107 size_t bytes_alloc,
108 gfp_t gfp_flags)
109{
110 kmemtrace_alloc(KMEMTRACE_TYPE_CACHE, call_site, ptr,
111 bytes_req, bytes_alloc, gfp_flags, -1);
112}
113
114static void kmemtrace_kmalloc_node(unsigned long call_site,
115 const void *ptr,
116 size_t bytes_req,
117 size_t bytes_alloc,
118 gfp_t gfp_flags,
119 int node)
120{
121 kmemtrace_alloc(KMEMTRACE_TYPE_KMALLOC, call_site, ptr,
122 bytes_req, bytes_alloc, gfp_flags, node);
123}
124
125static void kmemtrace_kmem_cache_alloc_node(unsigned long call_site,
126 const void *ptr,
127 size_t bytes_req,
128 size_t bytes_alloc,
129 gfp_t gfp_flags,
130 int node)
131{
132 kmemtrace_alloc(KMEMTRACE_TYPE_CACHE, call_site, ptr,
133 bytes_req, bytes_alloc, gfp_flags, node);
134}
135
136static void kmemtrace_kfree(unsigned long call_site, const void *ptr)
137{
138 kmemtrace_free(KMEMTRACE_TYPE_KMALLOC, call_site, ptr);
139}
140
141static void kmemtrace_kmem_cache_free(unsigned long call_site, const void *ptr)
142{
143 kmemtrace_free(KMEMTRACE_TYPE_CACHE, call_site, ptr);
144}
145
146static int kmemtrace_start_probes(void)
147{
148 int err;
149
150 err = register_trace_kmalloc(kmemtrace_kmalloc);
151 if (err)
152 return err;
153 err = register_trace_kmem_cache_alloc(kmemtrace_kmem_cache_alloc);
154 if (err)
155 return err;
156 err = register_trace_kmalloc_node(kmemtrace_kmalloc_node);
157 if (err)
158 return err;
159 err = register_trace_kmem_cache_alloc_node(kmemtrace_kmem_cache_alloc_node);
160 if (err)
161 return err;
162 err = register_trace_kfree(kmemtrace_kfree);
163 if (err)
164 return err;
165 err = register_trace_kmem_cache_free(kmemtrace_kmem_cache_free);
166
167 return err;
168}
169
170static void kmemtrace_stop_probes(void)
171{
172 unregister_trace_kmalloc(kmemtrace_kmalloc);
173 unregister_trace_kmem_cache_alloc(kmemtrace_kmem_cache_alloc);
174 unregister_trace_kmalloc_node(kmemtrace_kmalloc_node);
175 unregister_trace_kmem_cache_alloc_node(kmemtrace_kmem_cache_alloc_node);
176 unregister_trace_kfree(kmemtrace_kfree);
177 unregister_trace_kmem_cache_free(kmemtrace_kmem_cache_free);
178}
179
36static int kmem_trace_init(struct trace_array *tr) 180static int kmem_trace_init(struct trace_array *tr)
37{ 181{
38 int cpu; 182 int cpu;
@@ -41,14 +185,14 @@ static int kmem_trace_init(struct trace_array *tr)
41 for_each_cpu_mask(cpu, cpu_possible_map) 185 for_each_cpu_mask(cpu, cpu_possible_map)
42 tracing_reset(tr, cpu); 186 tracing_reset(tr, cpu);
43 187
44 kmem_tracing_enabled = true; 188 kmemtrace_start_probes();
45 189
46 return 0; 190 return 0;
47} 191}
48 192
49static void kmem_trace_reset(struct trace_array *tr) 193static void kmem_trace_reset(struct trace_array *tr)
50{ 194{
51 kmem_tracing_enabled = false; 195 kmemtrace_stop_probes();
52} 196}
53 197
54static void kmemtrace_headers(struct seq_file *s) 198static void kmemtrace_headers(struct seq_file *s)
@@ -66,47 +210,84 @@ static void kmemtrace_headers(struct seq_file *s)
66} 210}
67 211
68/* 212/*
69 * The two following functions give the original output from kmemtrace, 213 * The following functions give the original output from kmemtrace,
70 * or something close to....perhaps they need some missing things 214 * plus the origin CPU, since reordering occurs in-kernel now.
71 */ 215 */
216
217#define KMEMTRACE_USER_ALLOC 0
218#define KMEMTRACE_USER_FREE 1
219
220struct kmemtrace_user_event {
221 u8 event_id;
222 u8 type_id;
223 u16 event_size;
224 u32 cpu;
225 u64 timestamp;
226 unsigned long call_site;
227 unsigned long ptr;
228};
229
230struct kmemtrace_user_event_alloc {
231 size_t bytes_req;
232 size_t bytes_alloc;
233 unsigned gfp_flags;
234 int node;
235};
236
72static enum print_line_t 237static enum print_line_t
73kmemtrace_print_alloc_original(struct trace_iterator *iter, 238kmemtrace_print_alloc_user(struct trace_iterator *iter,
74 struct kmemtrace_alloc_entry *entry) 239 struct kmemtrace_alloc_entry *entry)
75{ 240{
241 struct kmemtrace_user_event_alloc *ev_alloc;
76 struct trace_seq *s = &iter->seq; 242 struct trace_seq *s = &iter->seq;
77 int ret; 243 struct kmemtrace_user_event *ev;
244
245 ev = trace_seq_reserve(s, sizeof(*ev));
246 if (!ev)
247 return TRACE_TYPE_PARTIAL_LINE;
78 248
79 /* Taken from the old linux/kmemtrace.h */ 249 ev->event_id = KMEMTRACE_USER_ALLOC;
80 ret = trace_seq_printf(s, "type_id %d call_site %lu ptr %lu " 250 ev->type_id = entry->type_id;
81 "bytes_req %lu bytes_alloc %lu gfp_flags %lu node %d\n", 251 ev->event_size = sizeof(*ev) + sizeof(*ev_alloc);
82 entry->type_id, entry->call_site, (unsigned long) entry->ptr, 252 ev->cpu = iter->cpu;
83 (unsigned long) entry->bytes_req, (unsigned long) entry->bytes_alloc, 253 ev->timestamp = iter->ts;
84 (unsigned long) entry->gfp_flags, entry->node); 254 ev->call_site = entry->call_site;
255 ev->ptr = (unsigned long)entry->ptr;
85 256
86 if (!ret) 257 ev_alloc = trace_seq_reserve(s, sizeof(*ev_alloc));
258 if (!ev_alloc)
87 return TRACE_TYPE_PARTIAL_LINE; 259 return TRACE_TYPE_PARTIAL_LINE;
88 260
261 ev_alloc->bytes_req = entry->bytes_req;
262 ev_alloc->bytes_alloc = entry->bytes_alloc;
263 ev_alloc->gfp_flags = entry->gfp_flags;
264 ev_alloc->node = entry->node;
265
89 return TRACE_TYPE_HANDLED; 266 return TRACE_TYPE_HANDLED;
90} 267}
91 268
92static enum print_line_t 269static enum print_line_t
93kmemtrace_print_free_original(struct trace_iterator *iter, 270kmemtrace_print_free_user(struct trace_iterator *iter,
94 struct kmemtrace_free_entry *entry) 271 struct kmemtrace_free_entry *entry)
95{ 272{
96 struct trace_seq *s = &iter->seq; 273 struct trace_seq *s = &iter->seq;
97 int ret; 274 struct kmemtrace_user_event *ev;
98 275
99 /* Taken from the old linux/kmemtrace.h */ 276 ev = trace_seq_reserve(s, sizeof(*ev));
100 ret = trace_seq_printf(s, "type_id %d call_site %lu ptr %lu\n", 277 if (!ev)
101 entry->type_id, entry->call_site, (unsigned long) entry->ptr);
102
103 if (!ret)
104 return TRACE_TYPE_PARTIAL_LINE; 278 return TRACE_TYPE_PARTIAL_LINE;
105 279
280 ev->event_id = KMEMTRACE_USER_FREE;
281 ev->type_id = entry->type_id;
282 ev->event_size = sizeof(*ev);
283 ev->cpu = iter->cpu;
284 ev->timestamp = iter->ts;
285 ev->call_site = entry->call_site;
286 ev->ptr = (unsigned long)entry->ptr;
287
106 return TRACE_TYPE_HANDLED; 288 return TRACE_TYPE_HANDLED;
107} 289}
108 290
109
110/* The two other following provide a more minimalistic output */ 291/* The two other following provide a more minimalistic output */
111static enum print_line_t 292static enum print_line_t
112kmemtrace_print_alloc_compress(struct trace_iterator *iter, 293kmemtrace_print_alloc_compress(struct trace_iterator *iter,
@@ -178,7 +359,7 @@ kmemtrace_print_alloc_compress(struct trace_iterator *iter,
178 359
179static enum print_line_t 360static enum print_line_t
180kmemtrace_print_free_compress(struct trace_iterator *iter, 361kmemtrace_print_free_compress(struct trace_iterator *iter,
181 struct kmemtrace_free_entry *entry) 362 struct kmemtrace_free_entry *entry)
182{ 363{
183 struct trace_seq *s = &iter->seq; 364 struct trace_seq *s = &iter->seq;
184 int ret; 365 int ret;
@@ -239,20 +420,22 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter)
239 switch (entry->type) { 420 switch (entry->type) {
240 case TRACE_KMEM_ALLOC: { 421 case TRACE_KMEM_ALLOC: {
241 struct kmemtrace_alloc_entry *field; 422 struct kmemtrace_alloc_entry *field;
423
242 trace_assign_type(field, entry); 424 trace_assign_type(field, entry);
243 if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL) 425 if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL)
244 return kmemtrace_print_alloc_compress(iter, field); 426 return kmemtrace_print_alloc_compress(iter, field);
245 else 427 else
246 return kmemtrace_print_alloc_original(iter, field); 428 return kmemtrace_print_alloc_user(iter, field);
247 } 429 }
248 430
249 case TRACE_KMEM_FREE: { 431 case TRACE_KMEM_FREE: {
250 struct kmemtrace_free_entry *field; 432 struct kmemtrace_free_entry *field;
433
251 trace_assign_type(field, entry); 434 trace_assign_type(field, entry);
252 if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL) 435 if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL)
253 return kmemtrace_print_free_compress(iter, field); 436 return kmemtrace_print_free_compress(iter, field);
254 else 437 else
255 return kmemtrace_print_free_original(iter, field); 438 return kmemtrace_print_free_user(iter, field);
256 } 439 }
257 440
258 default: 441 default:
@@ -260,70 +443,13 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter)
260 } 443 }
261} 444}
262 445
263/* Trace allocations */
264void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id,
265 unsigned long call_site,
266 const void *ptr,
267 size_t bytes_req,
268 size_t bytes_alloc,
269 gfp_t gfp_flags,
270 int node)
271{
272 struct ring_buffer_event *event;
273 struct kmemtrace_alloc_entry *entry;
274 struct trace_array *tr = kmemtrace_array;
275
276 if (!kmem_tracing_enabled)
277 return;
278
279 event = trace_buffer_lock_reserve(tr, TRACE_KMEM_ALLOC,
280 sizeof(*entry), 0, 0);
281 if (!event)
282 return;
283 entry = ring_buffer_event_data(event);
284
285 entry->call_site = call_site;
286 entry->ptr = ptr;
287 entry->bytes_req = bytes_req;
288 entry->bytes_alloc = bytes_alloc;
289 entry->gfp_flags = gfp_flags;
290 entry->node = node;
291
292 trace_buffer_unlock_commit(tr, event, 0, 0);
293}
294EXPORT_SYMBOL(kmemtrace_mark_alloc_node);
295
296void kmemtrace_mark_free(enum kmemtrace_type_id type_id,
297 unsigned long call_site,
298 const void *ptr)
299{
300 struct ring_buffer_event *event;
301 struct kmemtrace_free_entry *entry;
302 struct trace_array *tr = kmemtrace_array;
303
304 if (!kmem_tracing_enabled)
305 return;
306
307 event = trace_buffer_lock_reserve(tr, TRACE_KMEM_FREE,
308 sizeof(*entry), 0, 0);
309 if (!event)
310 return;
311 entry = ring_buffer_event_data(event);
312 entry->type_id = type_id;
313 entry->call_site = call_site;
314 entry->ptr = ptr;
315
316 trace_buffer_unlock_commit(tr, event, 0, 0);
317}
318EXPORT_SYMBOL(kmemtrace_mark_free);
319
320static struct tracer kmem_tracer __read_mostly = { 446static struct tracer kmem_tracer __read_mostly = {
321 .name = "kmemtrace", 447 .name = "kmemtrace",
322 .init = kmem_trace_init, 448 .init = kmem_trace_init,
323 .reset = kmem_trace_reset, 449 .reset = kmem_trace_reset,
324 .print_line = kmemtrace_print_line, 450 .print_line = kmemtrace_print_line,
325 .print_header = kmemtrace_headers, 451 .print_header = kmemtrace_headers,
326 .flags = &kmem_tracer_flags 452 .flags = &kmem_tracer_flags
327}; 453};
328 454
329void kmemtrace_init(void) 455void kmemtrace_init(void)
@@ -335,5 +461,4 @@ static int __init init_kmem_tracer(void)
335{ 461{
336 return register_tracer(&kmem_tracer); 462 return register_tracer(&kmem_tracer);
337} 463}
338
339device_initcall(init_kmem_tracer); 464device_initcall(init_kmem_tracer);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index cb0ce3fc36d3..cbc168f1e43d 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -182,6 +182,12 @@ struct trace_power {
182 struct power_trace state_data; 182 struct power_trace state_data;
183}; 183};
184 184
185enum kmemtrace_type_id {
186 KMEMTRACE_TYPE_KMALLOC = 0, /* kmalloc() or kfree(). */
187 KMEMTRACE_TYPE_CACHE, /* kmem_cache_*(). */
188 KMEMTRACE_TYPE_PAGES, /* __get_free_pages() and friends. */
189};
190
185struct kmemtrace_alloc_entry { 191struct kmemtrace_alloc_entry {
186 struct trace_entry ent; 192 struct trace_entry ent;
187 enum kmemtrace_type_id type_id; 193 enum kmemtrace_type_id type_id;
diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c
index 5d3ddb5fcfd9..708e2a86d87b 100644
--- a/lib/decompress_bunzip2.c
+++ b/lib/decompress_bunzip2.c
@@ -50,6 +50,7 @@
50#endif /* !STATIC */ 50#endif /* !STATIC */
51 51
52#include <linux/decompress/mm.h> 52#include <linux/decompress/mm.h>
53#include <linux/slab.h>
53 54
54#ifndef INT_MAX 55#ifndef INT_MAX
55#define INT_MAX 0x7fffffff 56#define INT_MAX 0x7fffffff
diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c
index 839a329b4fc4..e36b296fc9f8 100644
--- a/lib/decompress_inflate.c
+++ b/lib/decompress_inflate.c
@@ -23,6 +23,7 @@
23#endif /* STATIC */ 23#endif /* STATIC */
24 24
25#include <linux/decompress/mm.h> 25#include <linux/decompress/mm.h>
26#include <linux/slab.h>
26 27
27#define INBUF_LEN (16*1024) 28#define INBUF_LEN (16*1024)
28 29
diff --git a/lib/decompress_unlzma.c b/lib/decompress_unlzma.c
index 546f2f4c157e..32123a1340e6 100644
--- a/lib/decompress_unlzma.c
+++ b/lib/decompress_unlzma.c
@@ -34,6 +34,7 @@
34#endif /* STATIC */ 34#endif /* STATIC */
35 35
36#include <linux/decompress/mm.h> 36#include <linux/decompress/mm.h>
37#include <linux/slab.h>
37 38
38#define MIN(a, b) (((a) < (b)) ? (a) : (b)) 39#define MIN(a, b) (((a) < (b)) ? (a) : (b))
39 40
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 32e2bd3b1142..2b0b5a7d2ced 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -549,7 +549,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
549 dma_addr_t dev_addr; 549 dma_addr_t dev_addr;
550 void *ret; 550 void *ret;
551 int order = get_order(size); 551 int order = get_order(size);
552 u64 dma_mask = DMA_32BIT_MASK; 552 u64 dma_mask = DMA_BIT_MASK(32);
553 553
554 if (hwdev && hwdev->coherent_dma_mask) 554 if (hwdev && hwdev->coherent_dma_mask)
555 dma_mask = hwdev->coherent_dma_mask; 555 dma_mask = hwdev->coherent_dma_mask;
diff --git a/mm/allocpercpu.c b/mm/allocpercpu.c
index 139d5b7b6621..dfdee6a47359 100644
--- a/mm/allocpercpu.c
+++ b/mm/allocpercpu.c
@@ -31,7 +31,7 @@ static void percpu_depopulate(void *__pdata, int cpu)
31 * @__pdata: per-cpu data to depopulate 31 * @__pdata: per-cpu data to depopulate
32 * @mask: depopulate per-cpu data for cpu's selected through mask bits 32 * @mask: depopulate per-cpu data for cpu's selected through mask bits
33 */ 33 */
34static void __percpu_depopulate_mask(void *__pdata, cpumask_t *mask) 34static void __percpu_depopulate_mask(void *__pdata, const cpumask_t *mask)
35{ 35{
36 int cpu; 36 int cpu;
37 for_each_cpu_mask_nr(cpu, *mask) 37 for_each_cpu_mask_nr(cpu, *mask)
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index be68c956a660..493b468a5035 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -284,12 +284,12 @@ static wait_queue_head_t congestion_wqh[2] = {
284 }; 284 };
285 285
286 286
287void clear_bdi_congested(struct backing_dev_info *bdi, int rw) 287void clear_bdi_congested(struct backing_dev_info *bdi, int sync)
288{ 288{
289 enum bdi_state bit; 289 enum bdi_state bit;
290 wait_queue_head_t *wqh = &congestion_wqh[rw]; 290 wait_queue_head_t *wqh = &congestion_wqh[sync];
291 291
292 bit = (rw == WRITE) ? BDI_write_congested : BDI_read_congested; 292 bit = sync ? BDI_sync_congested : BDI_async_congested;
293 clear_bit(bit, &bdi->state); 293 clear_bit(bit, &bdi->state);
294 smp_mb__after_clear_bit(); 294 smp_mb__after_clear_bit();
295 if (waitqueue_active(wqh)) 295 if (waitqueue_active(wqh))
@@ -297,11 +297,11 @@ void clear_bdi_congested(struct backing_dev_info *bdi, int rw)
297} 297}
298EXPORT_SYMBOL(clear_bdi_congested); 298EXPORT_SYMBOL(clear_bdi_congested);
299 299
300void set_bdi_congested(struct backing_dev_info *bdi, int rw) 300void set_bdi_congested(struct backing_dev_info *bdi, int sync)
301{ 301{
302 enum bdi_state bit; 302 enum bdi_state bit;
303 303
304 bit = (rw == WRITE) ? BDI_write_congested : BDI_read_congested; 304 bit = sync ? BDI_sync_congested : BDI_async_congested;
305 set_bit(bit, &bdi->state); 305 set_bit(bit, &bdi->state);
306} 306}
307EXPORT_SYMBOL(set_bdi_congested); 307EXPORT_SYMBOL(set_bdi_congested);
diff --git a/mm/failslab.c b/mm/failslab.c
index 7c6ea6493f80..9339de5f0a91 100644
--- a/mm/failslab.c
+++ b/mm/failslab.c
@@ -1,4 +1,5 @@
1#include <linux/fault-inject.h> 1#include <linux/fault-inject.h>
2#include <linux/gfp.h>
2 3
3static struct { 4static struct {
4 struct fault_attr attr; 5 struct fault_attr attr;
diff --git a/mm/pdflush.c b/mm/pdflush.c
index 118905e3d788..f2caf96993f8 100644
--- a/mm/pdflush.c
+++ b/mm/pdflush.c
@@ -58,6 +58,14 @@ static DEFINE_SPINLOCK(pdflush_lock);
58int nr_pdflush_threads = 0; 58int nr_pdflush_threads = 0;
59 59
60/* 60/*
61 * The max/min number of pdflush threads. R/W by sysctl at
62 * /proc/sys/vm/nr_pdflush_threads_max/min
63 */
64int nr_pdflush_threads_max __read_mostly = MAX_PDFLUSH_THREADS;
65int nr_pdflush_threads_min __read_mostly = MIN_PDFLUSH_THREADS;
66
67
68/*
61 * The time at which the pdflush thread pool last went empty 69 * The time at which the pdflush thread pool last went empty
62 */ 70 */
63static unsigned long last_empty_jifs; 71static unsigned long last_empty_jifs;
@@ -68,7 +76,7 @@ static unsigned long last_empty_jifs;
68 * Thread pool management algorithm: 76 * Thread pool management algorithm:
69 * 77 *
70 * - The minimum and maximum number of pdflush instances are bound 78 * - The minimum and maximum number of pdflush instances are bound
71 * by MIN_PDFLUSH_THREADS and MAX_PDFLUSH_THREADS. 79 * by nr_pdflush_threads_min and nr_pdflush_threads_max.
72 * 80 *
73 * - If there have been no idle pdflush instances for 1 second, create 81 * - If there have been no idle pdflush instances for 1 second, create
74 * a new one. 82 * a new one.
@@ -98,7 +106,6 @@ static int __pdflush(struct pdflush_work *my_work)
98 INIT_LIST_HEAD(&my_work->list); 106 INIT_LIST_HEAD(&my_work->list);
99 107
100 spin_lock_irq(&pdflush_lock); 108 spin_lock_irq(&pdflush_lock);
101 nr_pdflush_threads++;
102 for ( ; ; ) { 109 for ( ; ; ) {
103 struct pdflush_work *pdf; 110 struct pdflush_work *pdf;
104 111
@@ -126,20 +133,25 @@ static int __pdflush(struct pdflush_work *my_work)
126 133
127 (*my_work->fn)(my_work->arg0); 134 (*my_work->fn)(my_work->arg0);
128 135
136 spin_lock_irq(&pdflush_lock);
137
129 /* 138 /*
130 * Thread creation: For how long have there been zero 139 * Thread creation: For how long have there been zero
131 * available threads? 140 * available threads?
141 *
142 * To throttle creation, we reset last_empty_jifs.
132 */ 143 */
133 if (time_after(jiffies, last_empty_jifs + 1 * HZ)) { 144 if (time_after(jiffies, last_empty_jifs + 1 * HZ)) {
134 /* unlocked list_empty() test is OK here */ 145 if (list_empty(&pdflush_list) &&
135 if (list_empty(&pdflush_list)) { 146 nr_pdflush_threads < nr_pdflush_threads_max) {
136 /* unlocked test is OK here */ 147 last_empty_jifs = jiffies;
137 if (nr_pdflush_threads < MAX_PDFLUSH_THREADS) 148 nr_pdflush_threads++;
138 start_one_pdflush_thread(); 149 spin_unlock_irq(&pdflush_lock);
150 start_one_pdflush_thread();
151 spin_lock_irq(&pdflush_lock);
139 } 152 }
140 } 153 }
141 154
142 spin_lock_irq(&pdflush_lock);
143 my_work->fn = NULL; 155 my_work->fn = NULL;
144 156
145 /* 157 /*
@@ -148,7 +160,7 @@ static int __pdflush(struct pdflush_work *my_work)
148 */ 160 */
149 if (list_empty(&pdflush_list)) 161 if (list_empty(&pdflush_list))
150 continue; 162 continue;
151 if (nr_pdflush_threads <= MIN_PDFLUSH_THREADS) 163 if (nr_pdflush_threads <= nr_pdflush_threads_min)
152 continue; 164 continue;
153 pdf = list_entry(pdflush_list.prev, struct pdflush_work, list); 165 pdf = list_entry(pdflush_list.prev, struct pdflush_work, list);
154 if (time_after(jiffies, pdf->when_i_went_to_sleep + 1 * HZ)) { 166 if (time_after(jiffies, pdf->when_i_went_to_sleep + 1 * HZ)) {
@@ -236,14 +248,27 @@ int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0)
236 248
237static void start_one_pdflush_thread(void) 249static void start_one_pdflush_thread(void)
238{ 250{
239 kthread_run(pdflush, NULL, "pdflush"); 251 struct task_struct *k;
252
253 k = kthread_run(pdflush, NULL, "pdflush");
254 if (unlikely(IS_ERR(k))) {
255 spin_lock_irq(&pdflush_lock);
256 nr_pdflush_threads--;
257 spin_unlock_irq(&pdflush_lock);
258 }
240} 259}
241 260
242static int __init pdflush_init(void) 261static int __init pdflush_init(void)
243{ 262{
244 int i; 263 int i;
245 264
246 for (i = 0; i < MIN_PDFLUSH_THREADS; i++) 265 /*
266 * Pre-set nr_pdflush_threads... If we fail to create,
267 * the count will be decremented.
268 */
269 nr_pdflush_threads = nr_pdflush_threads_min;
270
271 for (i = 0; i < nr_pdflush_threads_min; i++)
247 start_one_pdflush_thread(); 272 start_one_pdflush_thread();
248 return 0; 273 return 0;
249} 274}
diff --git a/mm/slab.c b/mm/slab.c
index 4fc1761c6dc8..9a90b00d2f91 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3565,8 +3565,8 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
3565{ 3565{
3566 void *ret = __cache_alloc(cachep, flags, __builtin_return_address(0)); 3566 void *ret = __cache_alloc(cachep, flags, __builtin_return_address(0));
3567 3567
3568 kmemtrace_mark_alloc(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, 3568 trace_kmem_cache_alloc(_RET_IP_, ret,
3569 obj_size(cachep), cachep->buffer_size, flags); 3569 obj_size(cachep), cachep->buffer_size, flags);
3570 3570
3571 return ret; 3571 return ret;
3572} 3572}
@@ -3627,9 +3627,9 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid)
3627 void *ret = __cache_alloc_node(cachep, flags, nodeid, 3627 void *ret = __cache_alloc_node(cachep, flags, nodeid,
3628 __builtin_return_address(0)); 3628 __builtin_return_address(0));
3629 3629
3630 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, 3630 trace_kmem_cache_alloc_node(_RET_IP_, ret,
3631 obj_size(cachep), cachep->buffer_size, 3631 obj_size(cachep), cachep->buffer_size,
3632 flags, nodeid); 3632 flags, nodeid);
3633 3633
3634 return ret; 3634 return ret;
3635} 3635}
@@ -3657,9 +3657,8 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, void *caller)
3657 return cachep; 3657 return cachep;
3658 ret = kmem_cache_alloc_node_notrace(cachep, flags, node); 3658 ret = kmem_cache_alloc_node_notrace(cachep, flags, node);
3659 3659
3660 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, 3660 trace_kmalloc_node((unsigned long) caller, ret,
3661 (unsigned long) caller, ret, 3661 size, cachep->buffer_size, flags, node);
3662 size, cachep->buffer_size, flags, node);
3663 3662
3664 return ret; 3663 return ret;
3665} 3664}
@@ -3709,9 +3708,8 @@ static __always_inline void *__do_kmalloc(size_t size, gfp_t flags,
3709 return cachep; 3708 return cachep;
3710 ret = __cache_alloc(cachep, flags, caller); 3709 ret = __cache_alloc(cachep, flags, caller);
3711 3710
3712 kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, 3711 trace_kmalloc((unsigned long) caller, ret,
3713 (unsigned long) caller, ret, 3712 size, cachep->buffer_size, flags);
3714 size, cachep->buffer_size, flags);
3715 3713
3716 return ret; 3714 return ret;
3717} 3715}
@@ -3757,7 +3755,7 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
3757 __cache_free(cachep, objp); 3755 __cache_free(cachep, objp);
3758 local_irq_restore(flags); 3756 local_irq_restore(flags);
3759 3757
3760 kmemtrace_mark_free(KMEMTRACE_TYPE_CACHE, _RET_IP_, objp); 3758 trace_kmem_cache_free(_RET_IP_, objp);
3761} 3759}
3762EXPORT_SYMBOL(kmem_cache_free); 3760EXPORT_SYMBOL(kmem_cache_free);
3763 3761
@@ -3775,6 +3773,8 @@ void kfree(const void *objp)
3775 struct kmem_cache *c; 3773 struct kmem_cache *c;
3776 unsigned long flags; 3774 unsigned long flags;
3777 3775
3776 trace_kfree(_RET_IP_, objp);
3777
3778 if (unlikely(ZERO_OR_NULL_PTR(objp))) 3778 if (unlikely(ZERO_OR_NULL_PTR(objp)))
3779 return; 3779 return;
3780 local_irq_save(flags); 3780 local_irq_save(flags);
@@ -3784,8 +3784,6 @@ void kfree(const void *objp)
3784 debug_check_no_obj_freed(objp, obj_size(c)); 3784 debug_check_no_obj_freed(objp, obj_size(c));
3785 __cache_free(c, (void *)objp); 3785 __cache_free(c, (void *)objp);
3786 local_irq_restore(flags); 3786 local_irq_restore(flags);
3787
3788 kmemtrace_mark_free(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, objp);
3789} 3787}
3790EXPORT_SYMBOL(kfree); 3788EXPORT_SYMBOL(kfree);
3791 3789
diff --git a/mm/slob.c b/mm/slob.c
index 4dd6516447f2..a2d4ab32198d 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -490,9 +490,8 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node)
490 *m = size; 490 *m = size;
491 ret = (void *)m + align; 491 ret = (void *)m + align;
492 492
493 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, 493 trace_kmalloc_node(_RET_IP_, ret,
494 _RET_IP_, ret, 494 size, size + align, gfp, node);
495 size, size + align, gfp, node);
496 } else { 495 } else {
497 unsigned int order = get_order(size); 496 unsigned int order = get_order(size);
498 497
@@ -503,9 +502,8 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node)
503 page->private = size; 502 page->private = size;
504 } 503 }
505 504
506 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, 505 trace_kmalloc_node(_RET_IP_, ret,
507 _RET_IP_, ret, 506 size, PAGE_SIZE << order, gfp, node);
508 size, PAGE_SIZE << order, gfp, node);
509 } 507 }
510 508
511 return ret; 509 return ret;
@@ -516,6 +514,8 @@ void kfree(const void *block)
516{ 514{
517 struct slob_page *sp; 515 struct slob_page *sp;
518 516
517 trace_kfree(_RET_IP_, block);
518
519 if (unlikely(ZERO_OR_NULL_PTR(block))) 519 if (unlikely(ZERO_OR_NULL_PTR(block)))
520 return; 520 return;
521 521
@@ -526,8 +526,6 @@ void kfree(const void *block)
526 slob_free(m, *m + align); 526 slob_free(m, *m + align);
527 } else 527 } else
528 put_page(&sp->page); 528 put_page(&sp->page);
529
530 kmemtrace_mark_free(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, block);
531} 529}
532EXPORT_SYMBOL(kfree); 530EXPORT_SYMBOL(kfree);
533 531
@@ -599,16 +597,14 @@ void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
599 597
600 if (c->size < PAGE_SIZE) { 598 if (c->size < PAGE_SIZE) {
601 b = slob_alloc(c->size, flags, c->align, node); 599 b = slob_alloc(c->size, flags, c->align, node);
602 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, 600 trace_kmem_cache_alloc_node(_RET_IP_, b, c->size,
603 _RET_IP_, b, c->size, 601 SLOB_UNITS(c->size) * SLOB_UNIT,
604 SLOB_UNITS(c->size) * SLOB_UNIT, 602 flags, node);
605 flags, node);
606 } else { 603 } else {
607 b = slob_new_pages(flags, get_order(c->size), node); 604 b = slob_new_pages(flags, get_order(c->size), node);
608 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, 605 trace_kmem_cache_alloc_node(_RET_IP_, b, c->size,
609 _RET_IP_, b, c->size, 606 PAGE_SIZE << get_order(c->size),
610 PAGE_SIZE << get_order(c->size), 607 flags, node);
611 flags, node);
612 } 608 }
613 609
614 if (c->ctor) 610 if (c->ctor)
@@ -646,7 +642,7 @@ void kmem_cache_free(struct kmem_cache *c, void *b)
646 __kmem_cache_free(b, c->size); 642 __kmem_cache_free(b, c->size);
647 } 643 }
648 644
649 kmemtrace_mark_free(KMEMTRACE_TYPE_CACHE, _RET_IP_, b); 645 trace_kmem_cache_free(_RET_IP_, b);
650} 646}
651EXPORT_SYMBOL(kmem_cache_free); 647EXPORT_SYMBOL(kmem_cache_free);
652 648
diff --git a/mm/slub.c b/mm/slub.c
index 7aaa121d0ea9..7ab54ecbd3f3 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1621,8 +1621,7 @@ void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags)
1621{ 1621{
1622 void *ret = slab_alloc(s, gfpflags, -1, _RET_IP_); 1622 void *ret = slab_alloc(s, gfpflags, -1, _RET_IP_);
1623 1623
1624 kmemtrace_mark_alloc(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, 1624 trace_kmem_cache_alloc(_RET_IP_, ret, s->objsize, s->size, gfpflags);
1625 s->objsize, s->size, gfpflags);
1626 1625
1627 return ret; 1626 return ret;
1628} 1627}
@@ -1641,8 +1640,8 @@ void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node)
1641{ 1640{
1642 void *ret = slab_alloc(s, gfpflags, node, _RET_IP_); 1641 void *ret = slab_alloc(s, gfpflags, node, _RET_IP_);
1643 1642
1644 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_CACHE, _RET_IP_, ret, 1643 trace_kmem_cache_alloc_node(_RET_IP_, ret,
1645 s->objsize, s->size, gfpflags, node); 1644 s->objsize, s->size, gfpflags, node);
1646 1645
1647 return ret; 1646 return ret;
1648} 1647}
@@ -1767,7 +1766,7 @@ void kmem_cache_free(struct kmem_cache *s, void *x)
1767 1766
1768 slab_free(s, page, x, _RET_IP_); 1767 slab_free(s, page, x, _RET_IP_);
1769 1768
1770 kmemtrace_mark_free(KMEMTRACE_TYPE_CACHE, _RET_IP_, x); 1769 trace_kmem_cache_free(_RET_IP_, x);
1771} 1770}
1772EXPORT_SYMBOL(kmem_cache_free); 1771EXPORT_SYMBOL(kmem_cache_free);
1773 1772
@@ -2702,8 +2701,7 @@ void *__kmalloc(size_t size, gfp_t flags)
2702 2701
2703 ret = slab_alloc(s, flags, -1, _RET_IP_); 2702 ret = slab_alloc(s, flags, -1, _RET_IP_);
2704 2703
2705 kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, ret, 2704 trace_kmalloc(_RET_IP_, ret, size, s->size, flags);
2706 size, s->size, flags);
2707 2705
2708 return ret; 2706 return ret;
2709} 2707}
@@ -2729,10 +2727,9 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node)
2729 if (unlikely(size > SLUB_MAX_SIZE)) { 2727 if (unlikely(size > SLUB_MAX_SIZE)) {
2730 ret = kmalloc_large_node(size, flags, node); 2728 ret = kmalloc_large_node(size, flags, node);
2731 2729
2732 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, 2730 trace_kmalloc_node(_RET_IP_, ret,
2733 _RET_IP_, ret, 2731 size, PAGE_SIZE << get_order(size),
2734 size, PAGE_SIZE << get_order(size), 2732 flags, node);
2735 flags, node);
2736 2733
2737 return ret; 2734 return ret;
2738 } 2735 }
@@ -2744,8 +2741,7 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node)
2744 2741
2745 ret = slab_alloc(s, flags, node, _RET_IP_); 2742 ret = slab_alloc(s, flags, node, _RET_IP_);
2746 2743
2747 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, ret, 2744 trace_kmalloc_node(_RET_IP_, ret, size, s->size, flags, node);
2748 size, s->size, flags, node);
2749 2745
2750 return ret; 2746 return ret;
2751} 2747}
@@ -2796,6 +2792,8 @@ void kfree(const void *x)
2796 struct page *page; 2792 struct page *page;
2797 void *object = (void *)x; 2793 void *object = (void *)x;
2798 2794
2795 trace_kfree(_RET_IP_, x);
2796
2799 if (unlikely(ZERO_OR_NULL_PTR(x))) 2797 if (unlikely(ZERO_OR_NULL_PTR(x)))
2800 return; 2798 return;
2801 2799
@@ -2806,8 +2804,6 @@ void kfree(const void *x)
2806 return; 2804 return;
2807 } 2805 }
2808 slab_free(page->slab, page, object, _RET_IP_); 2806 slab_free(page->slab, page, object, _RET_IP_);
2809
2810 kmemtrace_mark_free(KMEMTRACE_TYPE_KMALLOC, _RET_IP_, x);
2811} 2807}
2812EXPORT_SYMBOL(kfree); 2808EXPORT_SYMBOL(kfree);
2813 2809
@@ -3290,8 +3286,7 @@ void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller)
3290 ret = slab_alloc(s, gfpflags, -1, caller); 3286 ret = slab_alloc(s, gfpflags, -1, caller);
3291 3287
3292 /* Honor the call site pointer we recieved. */ 3288 /* Honor the call site pointer we recieved. */
3293 kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, caller, ret, size, 3289 trace_kmalloc(caller, ret, size, s->size, gfpflags);
3294 s->size, gfpflags);
3295 3290
3296 return ret; 3291 return ret;
3297} 3292}
@@ -3313,8 +3308,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
3313 ret = slab_alloc(s, gfpflags, node, caller); 3308 ret = slab_alloc(s, gfpflags, node, caller);
3314 3309
3315 /* Honor the call site pointer we recieved. */ 3310 /* Honor the call site pointer we recieved. */
3316 kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, caller, ret, 3311 trace_kmalloc_node(caller, ret, size, s->size, gfpflags, node);
3317 size, s->size, gfpflags, node);
3318 3312
3319 return ret; 3313 return ret;
3320} 3314}
diff --git a/mm/util.c b/mm/util.c
index 7c122e49f769..2599e83eea17 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -4,6 +4,7 @@
4#include <linux/module.h> 4#include <linux/module.h>
5#include <linux/err.h> 5#include <linux/err.h>
6#include <linux/sched.h> 6#include <linux/sched.h>
7#include <linux/tracepoint.h>
7#include <asm/uaccess.h> 8#include <asm/uaccess.h>
8 9
9/** 10/**
@@ -236,3 +237,18 @@ int __attribute__((weak)) get_user_pages_fast(unsigned long start,
236 return ret; 237 return ret;
237} 238}
238EXPORT_SYMBOL_GPL(get_user_pages_fast); 239EXPORT_SYMBOL_GPL(get_user_pages_fast);
240
241/* Tracepoints definitions. */
242DEFINE_TRACE(kmalloc);
243DEFINE_TRACE(kmem_cache_alloc);
244DEFINE_TRACE(kmalloc_node);
245DEFINE_TRACE(kmem_cache_alloc_node);
246DEFINE_TRACE(kfree);
247DEFINE_TRACE(kmem_cache_free);
248
249EXPORT_TRACEPOINT_SYMBOL(kmalloc);
250EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);
251EXPORT_TRACEPOINT_SYMBOL(kmalloc_node);
252EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node);
253EXPORT_TRACEPOINT_SYMBOL(kfree);
254EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free);
diff --git a/net/802/fddi.c b/net/802/fddi.c
index f1611a1e06a7..539e6064e6d4 100644
--- a/net/802/fddi.c
+++ b/net/802/fddi.c
@@ -215,3 +215,5 @@ struct net_device *alloc_fddidev(int sizeof_priv)
215 return alloc_netdev(sizeof_priv, "fddi%d", fddi_setup); 215 return alloc_netdev(sizeof_priv, "fddi%d", fddi_setup);
216} 216}
217EXPORT_SYMBOL(alloc_fddidev); 217EXPORT_SYMBOL(alloc_fddidev);
218
219MODULE_LICENSE("GPL");
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
index 0af823cf7f1f..5ee5a031bc93 100644
--- a/net/ipv6/xfrm6_output.c
+++ b/net/ipv6/xfrm6_output.c
@@ -72,6 +72,7 @@ int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
72#endif 72#endif
73 73
74 skb->protocol = htons(ETH_P_IPV6); 74 skb->protocol = htons(ETH_P_IPV6);
75 skb->local_df = 1;
75 76
76 return x->outer_mode->output2(x, skb); 77 return x->outer_mode->output2(x, skb);
77} 78}
diff --git a/net/socket.c b/net/socket.c
index 91d0c0254ffe..791d71a36a93 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -493,8 +493,7 @@ static struct socket *sock_alloc(void)
493 inode->i_uid = current_fsuid(); 493 inode->i_uid = current_fsuid();
494 inode->i_gid = current_fsgid(); 494 inode->i_gid = current_fsgid();
495 495
496 get_cpu_var(sockets_in_use)++; 496 percpu_add(sockets_in_use, 1);
497 put_cpu_var(sockets_in_use);
498 return sock; 497 return sock;
499} 498}
500 499
@@ -536,8 +535,7 @@ void sock_release(struct socket *sock)
536 if (sock->fasync_list) 535 if (sock->fasync_list)
537 printk(KERN_ERR "sock_release: fasync list not empty!\n"); 536 printk(KERN_ERR "sock_release: fasync list not empty!\n");
538 537
539 get_cpu_var(sockets_in_use)--; 538 percpu_sub(sockets_in_use, 1);
540 put_cpu_var(sockets_in_use);
541 if (!sock->file) { 539 if (!sock->file) {
542 iput(SOCK_INODE(sock)); 540 iput(SOCK_INODE(sock));
543 return; 541 return;
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
index 9b49a6ab8ded..8847add6ca16 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -1008,6 +1008,8 @@ svc_process(struct svc_rqst *rqstp)
1008 rqstp->rq_res.tail[0].iov_len = 0; 1008 rqstp->rq_res.tail[0].iov_len = 0;
1009 /* Will be turned off only in gss privacy case: */ 1009 /* Will be turned off only in gss privacy case: */
1010 rqstp->rq_splice_ok = 1; 1010 rqstp->rq_splice_ok = 1;
1011 /* Will be turned off only when NFSv4 Sessions are used */
1012 rqstp->rq_usedeferral = 1;
1011 1013
1012 /* Setup reply header */ 1014 /* Setup reply header */
1013 rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); 1015 rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp);
@@ -1078,7 +1080,6 @@ svc_process(struct svc_rqst *rqstp)
1078 procp = versp->vs_proc + proc; 1080 procp = versp->vs_proc + proc;
1079 if (proc >= versp->vs_nproc || !procp->pc_func) 1081 if (proc >= versp->vs_nproc || !procp->pc_func)
1080 goto err_bad_proc; 1082 goto err_bad_proc;
1081 rqstp->rq_server = serv;
1082 rqstp->rq_procinfo = procp; 1083 rqstp->rq_procinfo = procp;
1083 1084
1084 /* Syntactic check complete */ 1085 /* Syntactic check complete */
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
index 2819ee093f36..c200d92e57e4 100644
--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -14,6 +14,8 @@
14 14
15#define RPCDBG_FACILITY RPCDBG_SVCXPRT 15#define RPCDBG_FACILITY RPCDBG_SVCXPRT
16 16
17#define SVC_MAX_WAKING 5
18
17static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt); 19static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt);
18static int svc_deferred_recv(struct svc_rqst *rqstp); 20static int svc_deferred_recv(struct svc_rqst *rqstp);
19static struct cache_deferred_req *svc_defer(struct cache_req *req); 21static struct cache_deferred_req *svc_defer(struct cache_req *req);
@@ -301,6 +303,7 @@ void svc_xprt_enqueue(struct svc_xprt *xprt)
301 struct svc_pool *pool; 303 struct svc_pool *pool;
302 struct svc_rqst *rqstp; 304 struct svc_rqst *rqstp;
303 int cpu; 305 int cpu;
306 int thread_avail;
304 307
305 if (!(xprt->xpt_flags & 308 if (!(xprt->xpt_flags &
306 ((1<<XPT_CONN)|(1<<XPT_DATA)|(1<<XPT_CLOSE)|(1<<XPT_DEFERRED)))) 309 ((1<<XPT_CONN)|(1<<XPT_DATA)|(1<<XPT_CLOSE)|(1<<XPT_DEFERRED))))
@@ -312,18 +315,14 @@ void svc_xprt_enqueue(struct svc_xprt *xprt)
312 315
313 spin_lock_bh(&pool->sp_lock); 316 spin_lock_bh(&pool->sp_lock);
314 317
315 if (!list_empty(&pool->sp_threads) &&
316 !list_empty(&pool->sp_sockets))
317 printk(KERN_ERR
318 "svc_xprt_enqueue: "
319 "threads and transports both waiting??\n");
320
321 if (test_bit(XPT_DEAD, &xprt->xpt_flags)) { 318 if (test_bit(XPT_DEAD, &xprt->xpt_flags)) {
322 /* Don't enqueue dead transports */ 319 /* Don't enqueue dead transports */
323 dprintk("svc: transport %p is dead, not enqueued\n", xprt); 320 dprintk("svc: transport %p is dead, not enqueued\n", xprt);
324 goto out_unlock; 321 goto out_unlock;
325 } 322 }
326 323
324 pool->sp_stats.packets++;
325
327 /* Mark transport as busy. It will remain in this state until 326 /* Mark transport as busy. It will remain in this state until
328 * the provider calls svc_xprt_received. We update XPT_BUSY 327 * the provider calls svc_xprt_received. We update XPT_BUSY
329 * atomically because it also guards against trying to enqueue 328 * atomically because it also guards against trying to enqueue
@@ -356,7 +355,15 @@ void svc_xprt_enqueue(struct svc_xprt *xprt)
356 } 355 }
357 356
358 process: 357 process:
359 if (!list_empty(&pool->sp_threads)) { 358 /* Work out whether threads are available */
359 thread_avail = !list_empty(&pool->sp_threads); /* threads are asleep */
360 if (pool->sp_nwaking >= SVC_MAX_WAKING) {
361 /* too many threads are runnable and trying to wake up */
362 thread_avail = 0;
363 pool->sp_stats.overloads_avoided++;
364 }
365
366 if (thread_avail) {
360 rqstp = list_entry(pool->sp_threads.next, 367 rqstp = list_entry(pool->sp_threads.next,
361 struct svc_rqst, 368 struct svc_rqst,
362 rq_list); 369 rq_list);
@@ -371,11 +378,15 @@ void svc_xprt_enqueue(struct svc_xprt *xprt)
371 svc_xprt_get(xprt); 378 svc_xprt_get(xprt);
372 rqstp->rq_reserved = serv->sv_max_mesg; 379 rqstp->rq_reserved = serv->sv_max_mesg;
373 atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved); 380 atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
381 rqstp->rq_waking = 1;
382 pool->sp_nwaking++;
383 pool->sp_stats.threads_woken++;
374 BUG_ON(xprt->xpt_pool != pool); 384 BUG_ON(xprt->xpt_pool != pool);
375 wake_up(&rqstp->rq_wait); 385 wake_up(&rqstp->rq_wait);
376 } else { 386 } else {
377 dprintk("svc: transport %p put into queue\n", xprt); 387 dprintk("svc: transport %p put into queue\n", xprt);
378 list_add_tail(&xprt->xpt_ready, &pool->sp_sockets); 388 list_add_tail(&xprt->xpt_ready, &pool->sp_sockets);
389 pool->sp_stats.sockets_queued++;
379 BUG_ON(xprt->xpt_pool != pool); 390 BUG_ON(xprt->xpt_pool != pool);
380 } 391 }
381 392
@@ -588,6 +599,7 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
588 int pages; 599 int pages;
589 struct xdr_buf *arg; 600 struct xdr_buf *arg;
590 DECLARE_WAITQUEUE(wait, current); 601 DECLARE_WAITQUEUE(wait, current);
602 long time_left;
591 603
592 dprintk("svc: server %p waiting for data (to = %ld)\n", 604 dprintk("svc: server %p waiting for data (to = %ld)\n",
593 rqstp, timeout); 605 rqstp, timeout);
@@ -636,6 +648,11 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
636 return -EINTR; 648 return -EINTR;
637 649
638 spin_lock_bh(&pool->sp_lock); 650 spin_lock_bh(&pool->sp_lock);
651 if (rqstp->rq_waking) {
652 rqstp->rq_waking = 0;
653 pool->sp_nwaking--;
654 BUG_ON(pool->sp_nwaking < 0);
655 }
639 xprt = svc_xprt_dequeue(pool); 656 xprt = svc_xprt_dequeue(pool);
640 if (xprt) { 657 if (xprt) {
641 rqstp->rq_xprt = xprt; 658 rqstp->rq_xprt = xprt;
@@ -668,12 +685,14 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
668 add_wait_queue(&rqstp->rq_wait, &wait); 685 add_wait_queue(&rqstp->rq_wait, &wait);
669 spin_unlock_bh(&pool->sp_lock); 686 spin_unlock_bh(&pool->sp_lock);
670 687
671 schedule_timeout(timeout); 688 time_left = schedule_timeout(timeout);
672 689
673 try_to_freeze(); 690 try_to_freeze();
674 691
675 spin_lock_bh(&pool->sp_lock); 692 spin_lock_bh(&pool->sp_lock);
676 remove_wait_queue(&rqstp->rq_wait, &wait); 693 remove_wait_queue(&rqstp->rq_wait, &wait);
694 if (!time_left)
695 pool->sp_stats.threads_timedout++;
677 696
678 xprt = rqstp->rq_xprt; 697 xprt = rqstp->rq_xprt;
679 if (!xprt) { 698 if (!xprt) {
@@ -958,7 +977,7 @@ static struct cache_deferred_req *svc_defer(struct cache_req *req)
958 struct svc_rqst *rqstp = container_of(req, struct svc_rqst, rq_chandle); 977 struct svc_rqst *rqstp = container_of(req, struct svc_rqst, rq_chandle);
959 struct svc_deferred_req *dr; 978 struct svc_deferred_req *dr;
960 979
961 if (rqstp->rq_arg.page_len) 980 if (rqstp->rq_arg.page_len || !rqstp->rq_usedeferral)
962 return NULL; /* if more than a page, give up FIXME */ 981 return NULL; /* if more than a page, give up FIXME */
963 if (rqstp->rq_deferred) { 982 if (rqstp->rq_deferred) {
964 dr = rqstp->rq_deferred; 983 dr = rqstp->rq_deferred;
@@ -1112,3 +1131,93 @@ int svc_xprt_names(struct svc_serv *serv, char *buf, int buflen)
1112 return totlen; 1131 return totlen;
1113} 1132}
1114EXPORT_SYMBOL_GPL(svc_xprt_names); 1133EXPORT_SYMBOL_GPL(svc_xprt_names);
1134
1135
1136/*----------------------------------------------------------------------------*/
1137
1138static void *svc_pool_stats_start(struct seq_file *m, loff_t *pos)
1139{
1140 unsigned int pidx = (unsigned int)*pos;
1141 struct svc_serv *serv = m->private;
1142
1143 dprintk("svc_pool_stats_start, *pidx=%u\n", pidx);
1144
1145 lock_kernel();
1146 /* bump up the pseudo refcount while traversing */
1147 svc_get(serv);
1148 unlock_kernel();
1149
1150 if (!pidx)
1151 return SEQ_START_TOKEN;
1152 return (pidx > serv->sv_nrpools ? NULL : &serv->sv_pools[pidx-1]);
1153}
1154
1155static void *svc_pool_stats_next(struct seq_file *m, void *p, loff_t *pos)
1156{
1157 struct svc_pool *pool = p;
1158 struct svc_serv *serv = m->private;
1159
1160 dprintk("svc_pool_stats_next, *pos=%llu\n", *pos);
1161
1162 if (p == SEQ_START_TOKEN) {
1163 pool = &serv->sv_pools[0];
1164 } else {
1165 unsigned int pidx = (pool - &serv->sv_pools[0]);
1166 if (pidx < serv->sv_nrpools-1)
1167 pool = &serv->sv_pools[pidx+1];
1168 else
1169 pool = NULL;
1170 }
1171 ++*pos;
1172 return pool;
1173}
1174
1175static void svc_pool_stats_stop(struct seq_file *m, void *p)
1176{
1177 struct svc_serv *serv = m->private;
1178
1179 lock_kernel();
1180 /* this function really, really should have been called svc_put() */
1181 svc_destroy(serv);
1182 unlock_kernel();
1183}
1184
1185static int svc_pool_stats_show(struct seq_file *m, void *p)
1186{
1187 struct svc_pool *pool = p;
1188
1189 if (p == SEQ_START_TOKEN) {
1190 seq_puts(m, "# pool packets-arrived sockets-enqueued threads-woken overloads-avoided threads-timedout\n");
1191 return 0;
1192 }
1193
1194 seq_printf(m, "%u %lu %lu %lu %lu %lu\n",
1195 pool->sp_id,
1196 pool->sp_stats.packets,
1197 pool->sp_stats.sockets_queued,
1198 pool->sp_stats.threads_woken,
1199 pool->sp_stats.overloads_avoided,
1200 pool->sp_stats.threads_timedout);
1201
1202 return 0;
1203}
1204
1205static const struct seq_operations svc_pool_stats_seq_ops = {
1206 .start = svc_pool_stats_start,
1207 .next = svc_pool_stats_next,
1208 .stop = svc_pool_stats_stop,
1209 .show = svc_pool_stats_show,
1210};
1211
1212int svc_pool_stats_open(struct svc_serv *serv, struct file *file)
1213{
1214 int err;
1215
1216 err = seq_open(file, &svc_pool_stats_seq_ops);
1217 if (!err)
1218 ((struct seq_file *) file->private_data)->private = serv;
1219 return err;
1220}
1221EXPORT_SYMBOL(svc_pool_stats_open);
1222
1223/*----------------------------------------------------------------------------*/
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 9d504234af4a..af3198814c15 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -345,7 +345,6 @@ static void svc_sock_setbufsize(struct socket *sock, unsigned int snd,
345 lock_sock(sock->sk); 345 lock_sock(sock->sk);
346 sock->sk->sk_sndbuf = snd * 2; 346 sock->sk->sk_sndbuf = snd * 2;
347 sock->sk->sk_rcvbuf = rcv * 2; 347 sock->sk->sk_rcvbuf = rcv * 2;
348 sock->sk->sk_userlocks |= SOCK_SNDBUF_LOCK|SOCK_RCVBUF_LOCK;
349 release_sock(sock->sk); 348 release_sock(sock->sk);
350#endif 349#endif
351} 350}
@@ -797,23 +796,6 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
797 test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags), 796 test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags),
798 test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags)); 797 test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags));
799 798
800 if (test_and_clear_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags))
801 /* sndbuf needs to have room for one request
802 * per thread, otherwise we can stall even when the
803 * network isn't a bottleneck.
804 *
805 * We count all threads rather than threads in a
806 * particular pool, which provides an upper bound
807 * on the number of threads which will access the socket.
808 *
809 * rcvbuf just needs to be able to hold a few requests.
810 * Normally they will be removed from the queue
811 * as soon a a complete request arrives.
812 */
813 svc_sock_setbufsize(svsk->sk_sock,
814 (serv->sv_nrthreads+3) * serv->sv_max_mesg,
815 3 * serv->sv_max_mesg);
816
817 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); 799 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
818 800
819 /* Receive data. If we haven't got the record length yet, get 801 /* Receive data. If we haven't got the record length yet, get
@@ -1061,15 +1043,6 @@ static void svc_tcp_init(struct svc_sock *svsk, struct svc_serv *serv)
1061 1043
1062 tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF; 1044 tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF;
1063 1045
1064 /* initialise setting must have enough space to
1065 * receive and respond to one request.
1066 * svc_tcp_recvfrom will re-adjust if necessary
1067 */
1068 svc_sock_setbufsize(svsk->sk_sock,
1069 3 * svsk->sk_xprt.xpt_server->sv_max_mesg,
1070 3 * svsk->sk_xprt.xpt_server->sv_max_mesg);
1071
1072 set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags);
1073 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); 1046 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
1074 if (sk->sk_state != TCP_ESTABLISHED) 1047 if (sk->sk_state != TCP_ESTABLISHED)
1075 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); 1048 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);
@@ -1139,8 +1112,14 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
1139 /* Initialize the socket */ 1112 /* Initialize the socket */
1140 if (sock->type == SOCK_DGRAM) 1113 if (sock->type == SOCK_DGRAM)
1141 svc_udp_init(svsk, serv); 1114 svc_udp_init(svsk, serv);
1142 else 1115 else {
1116 /* initialise setting must have enough space to
1117 * receive and respond to one request.
1118 */
1119 svc_sock_setbufsize(svsk->sk_sock, 4 * serv->sv_max_mesg,
1120 4 * serv->sv_max_mesg);
1143 svc_tcp_init(svsk, serv); 1121 svc_tcp_init(svsk, serv);
1122 }
1144 1123
1145 dprintk("svc: svc_setup_socket created %p (inet %p)\n", 1124 dprintk("svc: svc_setup_socket created %p (inet %p)\n",
1146 svsk, svsk->sk_sk); 1125 svsk, svsk->sk_sk);
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c
index 92cea656ad21..a0affd9cfca8 100644
--- a/security/tomoyo/common.c
+++ b/security/tomoyo/common.c
@@ -1252,15 +1252,12 @@ static int tomoyo_write_domain_policy(struct tomoyo_io_buffer *head)
1252 struct tomoyo_domain_info *domain = head->write_var1; 1252 struct tomoyo_domain_info *domain = head->write_var1;
1253 bool is_delete = false; 1253 bool is_delete = false;
1254 bool is_select = false; 1254 bool is_select = false;
1255 bool is_undelete = false;
1256 unsigned int profile; 1255 unsigned int profile;
1257 1256
1258 if (tomoyo_str_starts(&data, TOMOYO_KEYWORD_DELETE)) 1257 if (tomoyo_str_starts(&data, TOMOYO_KEYWORD_DELETE))
1259 is_delete = true; 1258 is_delete = true;
1260 else if (tomoyo_str_starts(&data, TOMOYO_KEYWORD_SELECT)) 1259 else if (tomoyo_str_starts(&data, TOMOYO_KEYWORD_SELECT))
1261 is_select = true; 1260 is_select = true;
1262 else if (tomoyo_str_starts(&data, TOMOYO_KEYWORD_UNDELETE))
1263 is_undelete = true;
1264 if (is_select && tomoyo_is_select_one(head, data)) 1261 if (is_select && tomoyo_is_select_one(head, data))
1265 return 0; 1262 return 0;
1266 /* Don't allow updating policies by non manager programs. */ 1263 /* Don't allow updating policies by non manager programs. */
@@ -1274,9 +1271,7 @@ static int tomoyo_write_domain_policy(struct tomoyo_io_buffer *head)
1274 down_read(&tomoyo_domain_list_lock); 1271 down_read(&tomoyo_domain_list_lock);
1275 domain = tomoyo_find_domain(data); 1272 domain = tomoyo_find_domain(data);
1276 up_read(&tomoyo_domain_list_lock); 1273 up_read(&tomoyo_domain_list_lock);
1277 } else if (is_undelete) 1274 } else
1278 domain = tomoyo_undelete_domain(data);
1279 else
1280 domain = tomoyo_find_or_assign_new_domain(data, 0); 1275 domain = tomoyo_find_or_assign_new_domain(data, 0);
1281 head->write_var1 = domain; 1276 head->write_var1 = domain;
1282 return 0; 1277 return 0;
diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h
index 26a76d67aa1c..e77e6a6de0f2 100644
--- a/security/tomoyo/common.h
+++ b/security/tomoyo/common.h
@@ -88,10 +88,7 @@ struct tomoyo_domain_info {
88 /* Name of this domain. Never NULL. */ 88 /* Name of this domain. Never NULL. */
89 const struct tomoyo_path_info *domainname; 89 const struct tomoyo_path_info *domainname;
90 u8 profile; /* Profile number to use. */ 90 u8 profile; /* Profile number to use. */
91 u8 is_deleted; /* Delete flag. 91 bool is_deleted; /* Delete flag. */
92 0 = active.
93 1 = deleted but undeletable.
94 255 = deleted and no longer undeletable. */
95 bool quota_warned; /* Quota warnning flag. */ 92 bool quota_warned; /* Quota warnning flag. */
96 /* DOMAIN_FLAGS_*. Use tomoyo_set_domain_flag() to modify. */ 93 /* DOMAIN_FLAGS_*. Use tomoyo_set_domain_flag() to modify. */
97 u8 flags; 94 u8 flags;
@@ -144,7 +141,6 @@ struct tomoyo_double_path_acl_record {
144#define TOMOYO_KEYWORD_NO_INITIALIZE_DOMAIN "no_initialize_domain " 141#define TOMOYO_KEYWORD_NO_INITIALIZE_DOMAIN "no_initialize_domain "
145#define TOMOYO_KEYWORD_NO_KEEP_DOMAIN "no_keep_domain " 142#define TOMOYO_KEYWORD_NO_KEEP_DOMAIN "no_keep_domain "
146#define TOMOYO_KEYWORD_SELECT "select " 143#define TOMOYO_KEYWORD_SELECT "select "
147#define TOMOYO_KEYWORD_UNDELETE "undelete "
148#define TOMOYO_KEYWORD_USE_PROFILE "use_profile " 144#define TOMOYO_KEYWORD_USE_PROFILE "use_profile "
149#define TOMOYO_KEYWORD_IGNORE_GLOBAL_ALLOW_READ "ignore_global_allow_read" 145#define TOMOYO_KEYWORD_IGNORE_GLOBAL_ALLOW_READ "ignore_global_allow_read"
150/* A domain definition starts with <kernel>. */ 146/* A domain definition starts with <kernel>. */
@@ -267,8 +263,6 @@ struct tomoyo_domain_info *tomoyo_find_domain(const char *domainname);
267struct tomoyo_domain_info *tomoyo_find_or_assign_new_domain(const char * 263struct tomoyo_domain_info *tomoyo_find_or_assign_new_domain(const char *
268 domainname, 264 domainname,
269 const u8 profile); 265 const u8 profile);
270/* Undelete a domain. */
271struct tomoyo_domain_info *tomoyo_undelete_domain(const char *domainname);
272/* Check mode for specified functionality. */ 266/* Check mode for specified functionality. */
273unsigned int tomoyo_check_flags(const struct tomoyo_domain_info *domain, 267unsigned int tomoyo_check_flags(const struct tomoyo_domain_info *domain,
274 const u8 index); 268 const u8 index);
diff --git a/security/tomoyo/domain.c b/security/tomoyo/domain.c
index 093a756030bd..2f2b449ffd2d 100644
--- a/security/tomoyo/domain.c
+++ b/security/tomoyo/domain.c
@@ -551,9 +551,7 @@ int tomoyo_write_alias_policy(char *data, const bool is_delete)
551 return tomoyo_update_alias_entry(data, cp, is_delete); 551 return tomoyo_update_alias_entry(data, cp, is_delete);
552} 552}
553 553
554/* Domain create/delete/undelete handler. */ 554/* Domain create/delete handler. */
555
556/* #define TOMOYO_DEBUG_DOMAIN_UNDELETE */
557 555
558/** 556/**
559 * tomoyo_delete_domain - Delete a domain. 557 * tomoyo_delete_domain - Delete a domain.
@@ -571,41 +569,15 @@ int tomoyo_delete_domain(char *domainname)
571 tomoyo_fill_path_info(&name); 569 tomoyo_fill_path_info(&name);
572 /***** EXCLUSIVE SECTION START *****/ 570 /***** EXCLUSIVE SECTION START *****/
573 down_write(&tomoyo_domain_list_lock); 571 down_write(&tomoyo_domain_list_lock);
574#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
575 printk(KERN_DEBUG "tomoyo_delete_domain %s\n", domainname);
576 list_for_each_entry(domain, &tomoyo_domain_list, list) {
577 if (tomoyo_pathcmp(domain->domainname, &name))
578 continue;
579 printk(KERN_DEBUG "List: %p %u\n", domain, domain->is_deleted);
580 }
581#endif
582 /* Is there an active domain? */ 572 /* Is there an active domain? */
583 list_for_each_entry(domain, &tomoyo_domain_list, list) { 573 list_for_each_entry(domain, &tomoyo_domain_list, list) {
584 struct tomoyo_domain_info *domain2;
585 /* Never delete tomoyo_kernel_domain */ 574 /* Never delete tomoyo_kernel_domain */
586 if (domain == &tomoyo_kernel_domain) 575 if (domain == &tomoyo_kernel_domain)
587 continue; 576 continue;
588 if (domain->is_deleted || 577 if (domain->is_deleted ||
589 tomoyo_pathcmp(domain->domainname, &name)) 578 tomoyo_pathcmp(domain->domainname, &name))
590 continue; 579 continue;
591 /* Mark already deleted domains as non undeletable. */ 580 domain->is_deleted = true;
592 list_for_each_entry(domain2, &tomoyo_domain_list, list) {
593 if (!domain2->is_deleted ||
594 tomoyo_pathcmp(domain2->domainname, &name))
595 continue;
596#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
597 if (domain2->is_deleted != 255)
598 printk(KERN_DEBUG
599 "Marked %p as non undeletable\n",
600 domain2);
601#endif
602 domain2->is_deleted = 255;
603 }
604 /* Delete and mark active domain as undeletable. */
605 domain->is_deleted = 1;
606#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
607 printk(KERN_DEBUG "Marked %p as undeletable\n", domain);
608#endif
609 break; 581 break;
610 } 582 }
611 up_write(&tomoyo_domain_list_lock); 583 up_write(&tomoyo_domain_list_lock);
@@ -614,58 +586,6 @@ int tomoyo_delete_domain(char *domainname)
614} 586}
615 587
616/** 588/**
617 * tomoyo_undelete_domain - Undelete a domain.
618 *
619 * @domainname: The name of domain.
620 *
621 * Returns pointer to "struct tomoyo_domain_info" on success, NULL otherwise.
622 */
623struct tomoyo_domain_info *tomoyo_undelete_domain(const char *domainname)
624{
625 struct tomoyo_domain_info *domain;
626 struct tomoyo_domain_info *candidate_domain = NULL;
627 struct tomoyo_path_info name;
628
629 name.name = domainname;
630 tomoyo_fill_path_info(&name);
631 /***** EXCLUSIVE SECTION START *****/
632 down_write(&tomoyo_domain_list_lock);
633#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
634 printk(KERN_DEBUG "tomoyo_undelete_domain %s\n", domainname);
635 list_for_each_entry(domain, &tomoyo_domain_list, list) {
636 if (tomoyo_pathcmp(domain->domainname, &name))
637 continue;
638 printk(KERN_DEBUG "List: %p %u\n", domain, domain->is_deleted);
639 }
640#endif
641 list_for_each_entry(domain, &tomoyo_domain_list, list) {
642 if (tomoyo_pathcmp(&name, domain->domainname))
643 continue;
644 if (!domain->is_deleted) {
645 /* This domain is active. I can't undelete. */
646 candidate_domain = NULL;
647#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
648 printk(KERN_DEBUG "%p is active. I can't undelete.\n",
649 domain);
650#endif
651 break;
652 }
653 /* Is this domain undeletable? */
654 if (domain->is_deleted == 1)
655 candidate_domain = domain;
656 }
657 if (candidate_domain) {
658 candidate_domain->is_deleted = 0;
659#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
660 printk(KERN_DEBUG "%p was undeleted.\n", candidate_domain);
661#endif
662 }
663 up_write(&tomoyo_domain_list_lock);
664 /***** EXCLUSIVE SECTION END *****/
665 return candidate_domain;
666}
667
668/**
669 * tomoyo_find_or_assign_new_domain - Create a domain. 589 * tomoyo_find_or_assign_new_domain - Create a domain.
670 * 590 *
671 * @domainname: The name of domain. 591 * @domainname: The name of domain.
@@ -711,10 +631,6 @@ struct tomoyo_domain_info *tomoyo_find_or_assign_new_domain(const char *
711 /***** CRITICAL SECTION END *****/ 631 /***** CRITICAL SECTION END *****/
712 if (flag) 632 if (flag)
713 continue; 633 continue;
714#ifdef TOMOYO_DEBUG_DOMAIN_UNDELETE
715 printk(KERN_DEBUG "Reusing %p %s\n", domain,
716 domain->domainname->name);
717#endif
718 list_for_each_entry(ptr, &domain->acl_info_list, list) { 634 list_for_each_entry(ptr, &domain->acl_info_list, list) {
719 ptr->type |= TOMOYO_ACL_DELETED; 635 ptr->type |= TOMOYO_ACL_DELETED;
720 } 636 }
@@ -722,7 +638,7 @@ struct tomoyo_domain_info *tomoyo_find_or_assign_new_domain(const char *
722 domain->profile = profile; 638 domain->profile = profile;
723 domain->quota_warned = false; 639 domain->quota_warned = false;
724 mb(); /* Avoid out-of-order execution. */ 640 mb(); /* Avoid out-of-order execution. */
725 domain->is_deleted = 0; 641 domain->is_deleted = false;
726 goto out; 642 goto out;
727 } 643 }
728 /* No memory reusable. Create using new memory. */ 644 /* No memory reusable. Create using new memory. */
diff --git a/sound/arm/pxa2xx-ac97-lib.c b/sound/arm/pxa2xx-ac97-lib.c
index 7793d2a511ce..0afd1a8226fb 100644
--- a/sound/arm/pxa2xx-ac97-lib.c
+++ b/sound/arm/pxa2xx-ac97-lib.c
@@ -238,6 +238,8 @@ static inline void pxa_ac97_cold_pxa3xx(void)
238 238
239bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97) 239bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97)
240{ 240{
241 unsigned long gsr;
242
241#ifdef CONFIG_PXA25x 243#ifdef CONFIG_PXA25x
242 if (cpu_is_pxa25x()) 244 if (cpu_is_pxa25x())
243 pxa_ac97_warm_pxa25x(); 245 pxa_ac97_warm_pxa25x();
@@ -254,10 +256,10 @@ bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97)
254 else 256 else
255#endif 257#endif
256 BUG(); 258 BUG();
257 259 gsr = GSR | gsr_bits;
258 if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR))) { 260 if (!(gsr & (GSR_PCR | GSR_SCR))) {
259 printk(KERN_INFO "%s: warm reset timeout (GSR=%#lx)\n", 261 printk(KERN_INFO "%s: warm reset timeout (GSR=%#lx)\n",
260 __func__, gsr_bits); 262 __func__, gsr);
261 263
262 return false; 264 return false;
263 } 265 }
@@ -268,6 +270,8 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_try_warm_reset);
268 270
269bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97) 271bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97)
270{ 272{
273 unsigned long gsr;
274
271#ifdef CONFIG_PXA25x 275#ifdef CONFIG_PXA25x
272 if (cpu_is_pxa25x()) 276 if (cpu_is_pxa25x())
273 pxa_ac97_cold_pxa25x(); 277 pxa_ac97_cold_pxa25x();
@@ -285,9 +289,10 @@ bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97)
285#endif 289#endif
286 BUG(); 290 BUG();
287 291
288 if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR))) { 292 gsr = GSR | gsr_bits;
293 if (!(gsr & (GSR_PCR | GSR_SCR))) {
289 printk(KERN_INFO "%s: cold reset timeout (GSR=%#lx)\n", 294 printk(KERN_INFO "%s: cold reset timeout (GSR=%#lx)\n",
290 __func__, gsr_bits); 295 __func__, gsr);
291 296
292 return false; 297 return false;
293 } 298 }
diff --git a/sound/atmel/abdac.c b/sound/atmel/abdac.c
index 28b3c7f7cfe6..f2f41c854221 100644
--- a/sound/atmel/abdac.c
+++ b/sound/atmel/abdac.c
@@ -165,7 +165,7 @@ static struct snd_pcm_hardware atmel_abdac_hw = {
165 .buffer_bytes_max = 64 * 4096, 165 .buffer_bytes_max = 64 * 4096,
166 .period_bytes_min = 4096, 166 .period_bytes_min = 4096,
167 .period_bytes_max = 4096, 167 .period_bytes_max = 4096,
168 .periods_min = 4, 168 .periods_min = 6,
169 .periods_max = 64, 169 .periods_max = 64,
170}; 170};
171 171
@@ -502,7 +502,7 @@ static int __devinit atmel_abdac_probe(struct platform_device *pdev)
502 platform_set_drvdata(pdev, card); 502 platform_set_drvdata(pdev, card);
503 503
504 dev_info(&pdev->dev, "Atmel ABDAC at 0x%p using %s\n", 504 dev_info(&pdev->dev, "Atmel ABDAC at 0x%p using %s\n",
505 dac->regs, dac->dma.chan->dev->device.bus_id); 505 dac->regs, dev_name(&dac->dma.chan->dev->device));
506 506
507 return retval; 507 return retval;
508 508
diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c
index dd72e00e5ae1..0c0f8771656a 100644
--- a/sound/atmel/ac97c.c
+++ b/sound/atmel/ac97c.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Driver for the Atmel AC97C controller 2 * Driver for Atmel AC97C
3 * 3 *
4 * Copyright (C) 2005-2009 Atmel Corporation 4 * Copyright (C) 2005-2009 Atmel Corporation
5 * 5 *
@@ -10,6 +10,7 @@
10#include <linux/clk.h> 10#include <linux/clk.h>
11#include <linux/delay.h> 11#include <linux/delay.h>
12#include <linux/bitmap.h> 12#include <linux/bitmap.h>
13#include <linux/device.h>
13#include <linux/dmaengine.h> 14#include <linux/dmaengine.h>
14#include <linux/dma-mapping.h> 15#include <linux/dma-mapping.h>
15#include <linux/init.h> 16#include <linux/init.h>
@@ -65,6 +66,7 @@ struct atmel_ac97c {
65 /* Serialize access to opened variable */ 66 /* Serialize access to opened variable */
66 spinlock_t lock; 67 spinlock_t lock;
67 void __iomem *regs; 68 void __iomem *regs;
69 int irq;
68 int opened; 70 int opened;
69 int reset_pin; 71 int reset_pin;
70}; 72};
@@ -150,10 +152,10 @@ static struct snd_pcm_hardware atmel_ac97c_hw = {
150 .rate_max = 48000, 152 .rate_max = 48000,
151 .channels_min = 1, 153 .channels_min = 1,
152 .channels_max = 2, 154 .channels_max = 2,
153 .buffer_bytes_max = 64 * 4096, 155 .buffer_bytes_max = 2 * 2 * 64 * 2048,
154 .period_bytes_min = 4096, 156 .period_bytes_min = 4096,
155 .period_bytes_max = 4096, 157 .period_bytes_max = 4096,
156 .periods_min = 4, 158 .periods_min = 6,
157 .periods_max = 64, 159 .periods_max = 64,
158}; 160};
159 161
@@ -297,9 +299,11 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
297{ 299{
298 struct atmel_ac97c *chip = snd_pcm_substream_chip(substream); 300 struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
299 struct snd_pcm_runtime *runtime = substream->runtime; 301 struct snd_pcm_runtime *runtime = substream->runtime;
300 unsigned long word = 0; 302 unsigned long word = ac97c_readl(chip, OCA);
301 int retval; 303 int retval;
302 304
305 word &= ~(AC97C_CH_MASK(PCM_LEFT) | AC97C_CH_MASK(PCM_RIGHT));
306
303 /* assign channels to AC97C channel A */ 307 /* assign channels to AC97C channel A */
304 switch (runtime->channels) { 308 switch (runtime->channels) {
305 case 1: 309 case 1:
@@ -312,7 +316,6 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
312 default: 316 default:
313 /* TODO: support more than two channels */ 317 /* TODO: support more than two channels */
314 return -EINVAL; 318 return -EINVAL;
315 break;
316 } 319 }
317 ac97c_writel(chip, OCA, word); 320 ac97c_writel(chip, OCA, word);
318 321
@@ -324,13 +327,25 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
324 word |= AC97C_CMR_CEM_LITTLE; 327 word |= AC97C_CMR_CEM_LITTLE;
325 break; 328 break;
326 case SNDRV_PCM_FORMAT_S16_BE: /* fall through */ 329 case SNDRV_PCM_FORMAT_S16_BE: /* fall through */
327 default:
328 word &= ~(AC97C_CMR_CEM_LITTLE); 330 word &= ~(AC97C_CMR_CEM_LITTLE);
329 break; 331 break;
332 default:
333 word = ac97c_readl(chip, OCA);
334 word &= ~(AC97C_CH_MASK(PCM_LEFT) | AC97C_CH_MASK(PCM_RIGHT));
335 ac97c_writel(chip, OCA, word);
336 return -EINVAL;
330 } 337 }
331 338
339 /* Enable underrun interrupt on channel A */
340 word |= AC97C_CSR_UNRUN;
341
332 ac97c_writel(chip, CAMR, word); 342 ac97c_writel(chip, CAMR, word);
333 343
344 /* Enable channel A event interrupt */
345 word = ac97c_readl(chip, IMR);
346 word |= AC97C_SR_CAEVT;
347 ac97c_writel(chip, IER, word);
348
334 /* set variable rate if needed */ 349 /* set variable rate if needed */
335 if (runtime->rate != 48000) { 350 if (runtime->rate != 48000) {
336 word = ac97c_readl(chip, MR); 351 word = ac97c_readl(chip, MR);
@@ -359,9 +374,11 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
359{ 374{
360 struct atmel_ac97c *chip = snd_pcm_substream_chip(substream); 375 struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
361 struct snd_pcm_runtime *runtime = substream->runtime; 376 struct snd_pcm_runtime *runtime = substream->runtime;
362 unsigned long word = 0; 377 unsigned long word = ac97c_readl(chip, ICA);
363 int retval; 378 int retval;
364 379
380 word &= ~(AC97C_CH_MASK(PCM_LEFT) | AC97C_CH_MASK(PCM_RIGHT));
381
365 /* assign channels to AC97C channel A */ 382 /* assign channels to AC97C channel A */
366 switch (runtime->channels) { 383 switch (runtime->channels) {
367 case 1: 384 case 1:
@@ -374,7 +391,6 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
374 default: 391 default:
375 /* TODO: support more than two channels */ 392 /* TODO: support more than two channels */
376 return -EINVAL; 393 return -EINVAL;
377 break;
378 } 394 }
379 ac97c_writel(chip, ICA, word); 395 ac97c_writel(chip, ICA, word);
380 396
@@ -386,13 +402,25 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
386 word |= AC97C_CMR_CEM_LITTLE; 402 word |= AC97C_CMR_CEM_LITTLE;
387 break; 403 break;
388 case SNDRV_PCM_FORMAT_S16_BE: /* fall through */ 404 case SNDRV_PCM_FORMAT_S16_BE: /* fall through */
389 default:
390 word &= ~(AC97C_CMR_CEM_LITTLE); 405 word &= ~(AC97C_CMR_CEM_LITTLE);
391 break; 406 break;
407 default:
408 word = ac97c_readl(chip, ICA);
409 word &= ~(AC97C_CH_MASK(PCM_LEFT) | AC97C_CH_MASK(PCM_RIGHT));
410 ac97c_writel(chip, ICA, word);
411 return -EINVAL;
392 } 412 }
393 413
414 /* Enable overrun interrupt on channel A */
415 word |= AC97C_CSR_OVRUN;
416
394 ac97c_writel(chip, CAMR, word); 417 ac97c_writel(chip, CAMR, word);
395 418
419 /* Enable channel A event interrupt */
420 word = ac97c_readl(chip, IMR);
421 word |= AC97C_SR_CAEVT;
422 ac97c_writel(chip, IER, word);
423
396 /* set variable rate if needed */ 424 /* set variable rate if needed */
397 if (runtime->rate != 48000) { 425 if (runtime->rate != 48000) {
398 word = ac97c_readl(chip, MR); 426 word = ac97c_readl(chip, MR);
@@ -543,6 +571,43 @@ static struct snd_pcm_ops atmel_ac97_capture_ops = {
543 .pointer = atmel_ac97c_capture_pointer, 571 .pointer = atmel_ac97c_capture_pointer,
544}; 572};
545 573
574static irqreturn_t atmel_ac97c_interrupt(int irq, void *dev)
575{
576 struct atmel_ac97c *chip = (struct atmel_ac97c *)dev;
577 irqreturn_t retval = IRQ_NONE;
578 u32 sr = ac97c_readl(chip, SR);
579 u32 casr = ac97c_readl(chip, CASR);
580 u32 cosr = ac97c_readl(chip, COSR);
581
582 if (sr & AC97C_SR_CAEVT) {
583 dev_info(&chip->pdev->dev, "channel A event%s%s%s%s%s%s\n",
584 casr & AC97C_CSR_OVRUN ? " OVRUN" : "",
585 casr & AC97C_CSR_RXRDY ? " RXRDY" : "",
586 casr & AC97C_CSR_UNRUN ? " UNRUN" : "",
587 casr & AC97C_CSR_TXEMPTY ? " TXEMPTY" : "",
588 casr & AC97C_CSR_TXRDY ? " TXRDY" : "",
589 !casr ? " NONE" : "");
590 retval = IRQ_HANDLED;
591 }
592
593 if (sr & AC97C_SR_COEVT) {
594 dev_info(&chip->pdev->dev, "codec channel event%s%s%s%s%s\n",
595 cosr & AC97C_CSR_OVRUN ? " OVRUN" : "",
596 cosr & AC97C_CSR_RXRDY ? " RXRDY" : "",
597 cosr & AC97C_CSR_TXEMPTY ? " TXEMPTY" : "",
598 cosr & AC97C_CSR_TXRDY ? " TXRDY" : "",
599 !cosr ? " NONE" : "");
600 retval = IRQ_HANDLED;
601 }
602
603 if (retval == IRQ_NONE) {
604 dev_err(&chip->pdev->dev, "spurious interrupt sr 0x%08x "
605 "casr 0x%08x cosr 0x%08x\n", sr, casr, cosr);
606 }
607
608 return retval;
609}
610
546static int __devinit atmel_ac97c_pcm_new(struct atmel_ac97c *chip) 611static int __devinit atmel_ac97c_pcm_new(struct atmel_ac97c *chip)
547{ 612{
548 struct snd_pcm *pcm; 613 struct snd_pcm *pcm;
@@ -665,17 +730,17 @@ static bool filter(struct dma_chan *chan, void *slave)
665 730
666static void atmel_ac97c_reset(struct atmel_ac97c *chip) 731static void atmel_ac97c_reset(struct atmel_ac97c *chip)
667{ 732{
668 ac97c_writel(chip, MR, AC97C_MR_WRST); 733 ac97c_writel(chip, MR, 0);
734 ac97c_writel(chip, MR, AC97C_MR_ENA);
735 ac97c_writel(chip, CAMR, 0);
736 ac97c_writel(chip, COMR, 0);
669 737
670 if (gpio_is_valid(chip->reset_pin)) { 738 if (gpio_is_valid(chip->reset_pin)) {
671 gpio_set_value(chip->reset_pin, 0); 739 gpio_set_value(chip->reset_pin, 0);
672 /* AC97 v2.2 specifications says minimum 1 us. */ 740 /* AC97 v2.2 specifications says minimum 1 us. */
673 udelay(10); 741 udelay(2);
674 gpio_set_value(chip->reset_pin, 1); 742 gpio_set_value(chip->reset_pin, 1);
675 } 743 }
676
677 udelay(1);
678 ac97c_writel(chip, MR, AC97C_MR_ENA);
679} 744}
680 745
681static int __devinit atmel_ac97c_probe(struct platform_device *pdev) 746static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
@@ -690,6 +755,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
690 .read = atmel_ac97c_read, 755 .read = atmel_ac97c_read,
691 }; 756 };
692 int retval; 757 int retval;
758 int irq;
693 759
694 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); 760 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
695 if (!regs) { 761 if (!regs) {
@@ -703,6 +769,12 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
703 return -ENXIO; 769 return -ENXIO;
704 } 770 }
705 771
772 irq = platform_get_irq(pdev, 0);
773 if (irq < 0) {
774 dev_dbg(&pdev->dev, "could not get irq\n");
775 return -ENXIO;
776 }
777
706 pclk = clk_get(&pdev->dev, "pclk"); 778 pclk = clk_get(&pdev->dev, "pclk");
707 if (IS_ERR(pclk)) { 779 if (IS_ERR(pclk)) {
708 dev_dbg(&pdev->dev, "no peripheral clock\n"); 780 dev_dbg(&pdev->dev, "no peripheral clock\n");
@@ -719,6 +791,13 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
719 791
720 chip = get_chip(card); 792 chip = get_chip(card);
721 793
794 retval = request_irq(irq, atmel_ac97c_interrupt, 0, "AC97C", chip);
795 if (retval) {
796 dev_dbg(&pdev->dev, "unable to request irq %d\n", irq);
797 goto err_request_irq;
798 }
799 chip->irq = irq;
800
722 spin_lock_init(&chip->lock); 801 spin_lock_init(&chip->lock);
723 802
724 strcpy(card->driver, "Atmel AC97C"); 803 strcpy(card->driver, "Atmel AC97C");
@@ -747,14 +826,18 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
747 826
748 snd_card_set_dev(card, &pdev->dev); 827 snd_card_set_dev(card, &pdev->dev);
749 828
829 atmel_ac97c_reset(chip);
830
831 /* Enable overrun interrupt from codec channel */
832 ac97c_writel(chip, COMR, AC97C_CSR_OVRUN);
833 ac97c_writel(chip, IER, ac97c_readl(chip, IMR) | AC97C_SR_COEVT);
834
750 retval = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus); 835 retval = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus);
751 if (retval) { 836 if (retval) {
752 dev_dbg(&pdev->dev, "could not register on ac97 bus\n"); 837 dev_dbg(&pdev->dev, "could not register on ac97 bus\n");
753 goto err_ac97_bus; 838 goto err_ac97_bus;
754 } 839 }
755 840
756 atmel_ac97c_reset(chip);
757
758 retval = atmel_ac97c_mixer_new(chip); 841 retval = atmel_ac97c_mixer_new(chip);
759 if (retval) { 842 if (retval) {
760 dev_dbg(&pdev->dev, "could not register ac97 mixer\n"); 843 dev_dbg(&pdev->dev, "could not register ac97 mixer\n");
@@ -773,7 +856,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
773 chip->dma.rx_chan = dma_request_channel(mask, filter, dws); 856 chip->dma.rx_chan = dma_request_channel(mask, filter, dws);
774 857
775 dev_info(&chip->pdev->dev, "using %s for DMA RX\n", 858 dev_info(&chip->pdev->dev, "using %s for DMA RX\n",
776 chip->dma.rx_chan->dev->device.bus_id); 859 dev_name(&chip->dma.rx_chan->dev->device));
777 set_bit(DMA_RX_CHAN_PRESENT, &chip->flags); 860 set_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
778 } 861 }
779 862
@@ -789,7 +872,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
789 chip->dma.tx_chan = dma_request_channel(mask, filter, dws); 872 chip->dma.tx_chan = dma_request_channel(mask, filter, dws);
790 873
791 dev_info(&chip->pdev->dev, "using %s for DMA TX\n", 874 dev_info(&chip->pdev->dev, "using %s for DMA TX\n",
792 chip->dma.tx_chan->dev->device.bus_id); 875 dev_name(&chip->dma.tx_chan->dev->device));
793 set_bit(DMA_TX_CHAN_PRESENT, &chip->flags); 876 set_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
794 } 877 }
795 878
@@ -809,7 +892,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
809 retval = snd_card_register(card); 892 retval = snd_card_register(card);
810 if (retval) { 893 if (retval) {
811 dev_dbg(&pdev->dev, "could not register sound card\n"); 894 dev_dbg(&pdev->dev, "could not register sound card\n");
812 goto err_ac97_bus; 895 goto err_dma;
813 } 896 }
814 897
815 platform_set_drvdata(pdev, card); 898 platform_set_drvdata(pdev, card);
@@ -836,6 +919,8 @@ err_ac97_bus:
836 919
837 iounmap(chip->regs); 920 iounmap(chip->regs);
838err_ioremap: 921err_ioremap:
922 free_irq(irq, chip);
923err_request_irq:
839 snd_card_free(card); 924 snd_card_free(card);
840err_snd_card_new: 925err_snd_card_new:
841 clk_disable(pclk); 926 clk_disable(pclk);
@@ -884,9 +969,14 @@ static int __devexit atmel_ac97c_remove(struct platform_device *pdev)
884 if (gpio_is_valid(chip->reset_pin)) 969 if (gpio_is_valid(chip->reset_pin))
885 gpio_free(chip->reset_pin); 970 gpio_free(chip->reset_pin);
886 971
972 ac97c_writel(chip, CAMR, 0);
973 ac97c_writel(chip, COMR, 0);
974 ac97c_writel(chip, MR, 0);
975
887 clk_disable(chip->pclk); 976 clk_disable(chip->pclk);
888 clk_put(chip->pclk); 977 clk_put(chip->pclk);
889 iounmap(chip->regs); 978 iounmap(chip->regs);
979 free_irq(chip->irq, chip);
890 980
891 if (test_bit(DMA_RX_CHAN_PRESENT, &chip->flags)) 981 if (test_bit(DMA_RX_CHAN_PRESENT, &chip->flags))
892 dma_release_channel(chip->dma.rx_chan); 982 dma_release_channel(chip->dma.rx_chan);
diff --git a/sound/atmel/ac97c.h b/sound/atmel/ac97c.h
index c17bd5825980..ecbba5021c80 100644
--- a/sound/atmel/ac97c.h
+++ b/sound/atmel/ac97c.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Register definitions for the Atmel AC97C controller 2 * Register definitions for Atmel AC97C
3 * 3 *
4 * Copyright (C) 2005-2009 Atmel Corporation 4 * Copyright (C) 2005-2009 Atmel Corporation
5 * 5 *
@@ -17,10 +17,6 @@
17#define AC97C_CATHR 0x24 17#define AC97C_CATHR 0x24
18#define AC97C_CASR 0x28 18#define AC97C_CASR 0x28
19#define AC97C_CAMR 0x2c 19#define AC97C_CAMR 0x2c
20#define AC97C_CBRHR 0x30
21#define AC97C_CBTHR 0x34
22#define AC97C_CBSR 0x38
23#define AC97C_CBMR 0x3c
24#define AC97C_CORHR 0x40 20#define AC97C_CORHR 0x40
25#define AC97C_COTHR 0x44 21#define AC97C_COTHR 0x44
26#define AC97C_COSR 0x48 22#define AC97C_COSR 0x48
@@ -46,8 +42,10 @@
46#define AC97C_MR_VRA (1 << 2) 42#define AC97C_MR_VRA (1 << 2)
47 43
48#define AC97C_CSR_TXRDY (1 << 0) 44#define AC97C_CSR_TXRDY (1 << 0)
45#define AC97C_CSR_TXEMPTY (1 << 1)
49#define AC97C_CSR_UNRUN (1 << 2) 46#define AC97C_CSR_UNRUN (1 << 2)
50#define AC97C_CSR_RXRDY (1 << 4) 47#define AC97C_CSR_RXRDY (1 << 4)
48#define AC97C_CSR_OVRUN (1 << 5)
51#define AC97C_CSR_ENDTX (1 << 10) 49#define AC97C_CSR_ENDTX (1 << 10)
52#define AC97C_CSR_ENDRX (1 << 14) 50#define AC97C_CSR_ENDRX (1 << 14)
53 51
@@ -61,11 +59,15 @@
61#define AC97C_CMR_DMAEN (1 << 22) 59#define AC97C_CMR_DMAEN (1 << 22)
62 60
63#define AC97C_SR_CAEVT (1 << 3) 61#define AC97C_SR_CAEVT (1 << 3)
62#define AC97C_SR_COEVT (1 << 2)
63#define AC97C_SR_WKUP (1 << 1)
64#define AC97C_SR_SOF (1 << 0)
64 65
66#define AC97C_CH_MASK(slot) \
67 (0x7 << (3 * (AC97_SLOT_##slot - 3)))
65#define AC97C_CH_ASSIGN(slot, channel) \ 68#define AC97C_CH_ASSIGN(slot, channel) \
66 (AC97C_CHANNEL_##channel << (3 * (AC97_SLOT_##slot - 3))) 69 (AC97C_CHANNEL_##channel << (3 * (AC97_SLOT_##slot - 3)))
67#define AC97C_CHANNEL_NONE 0x0 70#define AC97C_CHANNEL_NONE 0x0
68#define AC97C_CHANNEL_A 0x1 71#define AC97C_CHANNEL_A 0x1
69#define AC97C_CHANNEL_B 0x2
70 72
71#endif /* __SOUND_ATMEL_AC97C_H */ 73#endif /* __SOUND_ATMEL_AC97C_H */
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index e570649184e2..5dcd8a526970 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -703,19 +703,27 @@ static int snd_mixer_oss_put_volume1(struct snd_mixer_oss_file *fmixer,
703 if (left || right) { 703 if (left || right) {
704 if (slot->present & SNDRV_MIXER_OSS_PRESENT_PSWITCH) 704 if (slot->present & SNDRV_MIXER_OSS_PRESENT_PSWITCH)
705 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PSWITCH], left, right, 0); 705 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PSWITCH], left, right, 0);
706 if (slot->present & SNDRV_MIXER_OSS_PRESENT_CSWITCH)
707 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CSWITCH], left, right, 0);
706 if (slot->present & SNDRV_MIXER_OSS_PRESENT_GSWITCH) 708 if (slot->present & SNDRV_MIXER_OSS_PRESENT_GSWITCH)
707 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GSWITCH], left, right, 0); 709 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GSWITCH], left, right, 0);
708 if (slot->present & SNDRV_MIXER_OSS_PRESENT_PROUTE) 710 if (slot->present & SNDRV_MIXER_OSS_PRESENT_PROUTE)
709 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PROUTE], left, right, 1); 711 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PROUTE], left, right, 1);
712 if (slot->present & SNDRV_MIXER_OSS_PRESENT_CROUTE)
713 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CROUTE], left, right, 1);
710 if (slot->present & SNDRV_MIXER_OSS_PRESENT_GROUTE) 714 if (slot->present & SNDRV_MIXER_OSS_PRESENT_GROUTE)
711 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GROUTE], left, right, 1); 715 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GROUTE], left, right, 1);
712 } else { 716 } else {
713 if (slot->present & SNDRV_MIXER_OSS_PRESENT_PSWITCH) { 717 if (slot->present & SNDRV_MIXER_OSS_PRESENT_PSWITCH) {
714 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PSWITCH], left, right, 0); 718 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PSWITCH], left, right, 0);
719 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_CSWITCH) {
720 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CSWITCH], left, right, 0);
715 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GSWITCH) { 721 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GSWITCH) {
716 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GSWITCH], left, right, 0); 722 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GSWITCH], left, right, 0);
717 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_PROUTE) { 723 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_PROUTE) {
718 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PROUTE], left, right, 1); 724 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PROUTE], left, right, 1);
725 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_CROUTE) {
726 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CROUTE], left, right, 1);
719 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GROUTE) { 727 } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GROUTE) {
720 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GROUTE], left, right, 1); 728 snd_mixer_oss_put_volume1_sw(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GROUTE], left, right, 1);
721 } 729 }
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index ef95279da7a3..0481a55334b9 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -481,6 +481,7 @@ OPL3SA2_DOUBLE_TLV("Master Playback Volume", 0, 0x07, 0x08, 0, 0, 15, 1,
481OPL3SA2_SINGLE("Mic Playback Switch", 0, 0x09, 7, 1, 1), 481OPL3SA2_SINGLE("Mic Playback Switch", 0, 0x09, 7, 1, 1),
482OPL3SA2_SINGLE_TLV("Mic Playback Volume", 0, 0x09, 0, 31, 1, 482OPL3SA2_SINGLE_TLV("Mic Playback Volume", 0, 0x09, 0, 31, 1,
483 db_scale_5bit_12db_max), 483 db_scale_5bit_12db_max),
484OPL3SA2_SINGLE("ZV Port Switch", 0, 0x02, 0, 1, 0),
484}; 485};
485 486
486static struct snd_kcontrol_new snd_opl3sa2_tone_controls[] = { 487static struct snd_kcontrol_new snd_opl3sa2_tone_controls[] = {
diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c
index d1f242bd0ac5..8f5098f92c37 100644
--- a/sound/pci/ad1889.c
+++ b/sound/pci/ad1889.c
@@ -909,8 +909,8 @@ snd_ad1889_create(struct snd_card *card,
909 return err; 909 return err;
910 910
911 /* check PCI availability (32bit DMA) */ 911 /* check PCI availability (32bit DMA) */
912 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0 || 912 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0 ||
913 pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK) < 0) { 913 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
914 printk(KERN_ERR PFX "error setting 32-bit DMA mask.\n"); 914 printk(KERN_ERR PFX "error setting 32-bit DMA mask.\n");
915 pci_disable_device(pci); 915 pci_disable_device(pci);
916 return -ENXIO; 916 return -ENXIO;
diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c
index 4edf270a7809..c551006e2920 100644
--- a/sound/pci/ali5451/ali5451.c
+++ b/sound/pci/ali5451/ali5451.c
@@ -2186,8 +2186,8 @@ static int __devinit snd_ali_create(struct snd_card *card,
2186 if (err < 0) 2186 if (err < 0)
2187 return err; 2187 return err;
2188 /* check, if we can restrict PCI DMA transfers to 31 bits */ 2188 /* check, if we can restrict PCI DMA transfers to 31 bits */
2189 if (pci_set_dma_mask(pci, DMA_31BIT_MASK) < 0 || 2189 if (pci_set_dma_mask(pci, DMA_BIT_MASK(31)) < 0 ||
2190 pci_set_consistent_dma_mask(pci, DMA_31BIT_MASK) < 0) { 2190 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(31)) < 0) {
2191 snd_printk(KERN_ERR "architecture does not support " 2191 snd_printk(KERN_ERR "architecture does not support "
2192 "31bit PCI busmaster DMA\n"); 2192 "31bit PCI busmaster DMA\n");
2193 pci_disable_device(pci); 2193 pci_disable_device(pci);
diff --git a/sound/pci/als300.c b/sound/pci/als300.c
index 009b4c8225a5..3aa35af7ca91 100644
--- a/sound/pci/als300.c
+++ b/sound/pci/als300.c
@@ -689,8 +689,8 @@ static int __devinit snd_als300_create(struct snd_card *card,
689 if ((err = pci_enable_device(pci)) < 0) 689 if ((err = pci_enable_device(pci)) < 0)
690 return err; 690 return err;
691 691
692 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 692 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
693 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 693 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
694 printk(KERN_ERR "error setting 28bit DMA mask\n"); 694 printk(KERN_ERR "error setting 28bit DMA mask\n");
695 pci_disable_device(pci); 695 pci_disable_device(pci);
696 return -ENXIO; 696 return -ENXIO;
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index 542a0c65a92c..3dbacde1a5af 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -872,8 +872,8 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
872 return err; 872 return err;
873 } 873 }
874 /* check, if we can restrict PCI DMA transfers to 24 bits */ 874 /* check, if we can restrict PCI DMA transfers to 24 bits */
875 if (pci_set_dma_mask(pci, DMA_24BIT_MASK) < 0 || 875 if (pci_set_dma_mask(pci, DMA_BIT_MASK(24)) < 0 ||
876 pci_set_consistent_dma_mask(pci, DMA_24BIT_MASK) < 0) { 876 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(24)) < 0) {
877 snd_printk(KERN_ERR "architecture does not support 24bit PCI busmaster DMA\n"); 877 snd_printk(KERN_ERR "architecture does not support 24bit PCI busmaster DMA\n");
878 pci_disable_device(pci); 878 pci_disable_device(pci);
879 return -ENXIO; 879 return -ENXIO;
diff --git a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c
index 9ec122383eef..7b72c88e449d 100644
--- a/sound/pci/au88x0/au88x0.c
+++ b/sound/pci/au88x0/au88x0.c
@@ -151,8 +151,8 @@ snd_vortex_create(struct snd_card *card, struct pci_dev *pci, vortex_t ** rchip)
151 // check PCI availability (DMA). 151 // check PCI availability (DMA).
152 if ((err = pci_enable_device(pci)) < 0) 152 if ((err = pci_enable_device(pci)) < 0)
153 return err; 153 return err;
154 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0 || 154 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0 ||
155 pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK) < 0) { 155 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
156 printk(KERN_ERR "error to set DMA mask\n"); 156 printk(KERN_ERR "error to set DMA mask\n");
157 pci_disable_device(pci); 157 pci_disable_device(pci);
158 return -ENXIO; 158 return -ENXIO;
diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c
index 8eea29fc42fe..4d34bb0d99d3 100644
--- a/sound/pci/aw2/aw2-alsa.c
+++ b/sound/pci/aw2/aw2-alsa.c
@@ -279,8 +279,8 @@ static int __devinit snd_aw2_create(struct snd_card *card,
279 pci_set_master(pci); 279 pci_set_master(pci);
280 280
281 /* check PCI availability (32bit DMA) */ 281 /* check PCI availability (32bit DMA) */
282 if ((pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0) || 282 if ((pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0) ||
283 (pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK) < 0)) { 283 (pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0)) {
284 printk(KERN_ERR "aw2: Impossible to set 32bit mask DMA\n"); 284 printk(KERN_ERR "aw2: Impossible to set 32bit mask DMA\n");
285 pci_disable_device(pci); 285 pci_disable_device(pci);
286 return -ENXIO; 286 return -ENXIO;
diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c
index e9e9b5821d41..f290bc56178f 100644
--- a/sound/pci/azt3328.c
+++ b/sound/pci/azt3328.c
@@ -2125,8 +2125,8 @@ snd_azf3328_create(struct snd_card *card,
2125 chip->irq = -1; 2125 chip->irq = -1;
2126 2126
2127 /* check if we can restrict PCI DMA transfers to 24 bits */ 2127 /* check if we can restrict PCI DMA transfers to 24 bits */
2128 if (pci_set_dma_mask(pci, DMA_24BIT_MASK) < 0 || 2128 if (pci_set_dma_mask(pci, DMA_BIT_MASK(24)) < 0 ||
2129 pci_set_consistent_dma_mask(pci, DMA_24BIT_MASK) < 0) { 2129 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(24)) < 0) {
2130 snd_printk(KERN_ERR "architecture does not support " 2130 snd_printk(KERN_ERR "architecture does not support "
2131 "24bit PCI busmaster DMA\n" 2131 "24bit PCI busmaster DMA\n"
2132 ); 2132 );
diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c
index df757575798a..bfac30f7929f 100644
--- a/sound/pci/ca0106/ca0106_main.c
+++ b/sound/pci/ca0106/ca0106_main.c
@@ -1589,8 +1589,8 @@ static int __devinit snd_ca0106_create(int dev, struct snd_card *card,
1589 err = pci_enable_device(pci); 1589 err = pci_enable_device(pci);
1590 if (err < 0) 1590 if (err < 0)
1591 return err; 1591 return err;
1592 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0 || 1592 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0 ||
1593 pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK) < 0) { 1593 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
1594 printk(KERN_ERR "error to set 32bit mask DMA\n"); 1594 printk(KERN_ERR "error to set 32bit mask DMA\n");
1595 pci_disable_device(pci); 1595 pci_disable_device(pci);
1596 return -ENXIO; 1596 return -ENXIO;
diff --git a/sound/pci/cs5535audio/cs5535audio.c b/sound/pci/cs5535audio/cs5535audio.c
index c89ed1f5bc2b..05f56e04849b 100644
--- a/sound/pci/cs5535audio/cs5535audio.c
+++ b/sound/pci/cs5535audio/cs5535audio.c
@@ -285,8 +285,8 @@ static int __devinit snd_cs5535audio_create(struct snd_card *card,
285 if ((err = pci_enable_device(pci)) < 0) 285 if ((err = pci_enable_device(pci)) < 0)
286 return err; 286 return err;
287 287
288 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0 || 288 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0 ||
289 pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK) < 0) { 289 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
290 printk(KERN_WARNING "unable to get 32bit dma\n"); 290 printk(KERN_WARNING "unable to get 32bit dma\n");
291 err = -ENXIO; 291 err = -ENXIO;
292 goto pcifail; 292 goto pcifail;
diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c
index 31542adc6b7e..1970f0e70f37 100644
--- a/sound/pci/emu10k1/emu10k1x.c
+++ b/sound/pci/emu10k1/emu10k1x.c
@@ -897,8 +897,8 @@ static int __devinit snd_emu10k1x_create(struct snd_card *card,
897 897
898 if ((err = pci_enable_device(pci)) < 0) 898 if ((err = pci_enable_device(pci)) < 0)
899 return err; 899 return err;
900 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 900 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
901 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 901 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
902 snd_printk(KERN_ERR "error to set 28bit mask DMA\n"); 902 snd_printk(KERN_ERR "error to set 28bit mask DMA\n");
903 pci_disable_device(pci); 903 pci_disable_device(pci);
904 return -ENXIO; 904 return -ENXIO;
diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
index dd63b132fb8e..fbd2ac09aa34 100644
--- a/sound/pci/es1938.c
+++ b/sound/pci/es1938.c
@@ -1608,8 +1608,8 @@ static int __devinit snd_es1938_create(struct snd_card *card,
1608 if ((err = pci_enable_device(pci)) < 0) 1608 if ((err = pci_enable_device(pci)) < 0)
1609 return err; 1609 return err;
1610 /* check, if we can restrict PCI DMA transfers to 24 bits */ 1610 /* check, if we can restrict PCI DMA transfers to 24 bits */
1611 if (pci_set_dma_mask(pci, DMA_24BIT_MASK) < 0 || 1611 if (pci_set_dma_mask(pci, DMA_BIT_MASK(24)) < 0 ||
1612 pci_set_consistent_dma_mask(pci, DMA_24BIT_MASK) < 0) { 1612 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(24)) < 0) {
1613 snd_printk(KERN_ERR "architecture does not support 24bit PCI busmaster DMA\n"); 1613 snd_printk(KERN_ERR "architecture does not support 24bit PCI busmaster DMA\n");
1614 pci_disable_device(pci); 1614 pci_disable_device(pci);
1615 return -ENXIO; 1615 return -ENXIO;
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index dc97e8116141..a11f453a6b6d 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -2539,8 +2539,8 @@ static int __devinit snd_es1968_create(struct snd_card *card,
2539 if ((err = pci_enable_device(pci)) < 0) 2539 if ((err = pci_enable_device(pci)) < 0)
2540 return err; 2540 return err;
2541 /* check, if we can restrict PCI DMA transfers to 28 bits */ 2541 /* check, if we can restrict PCI DMA transfers to 28 bits */
2542 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 2542 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
2543 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 2543 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
2544 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n"); 2544 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n");
2545 pci_disable_device(pci); 2545 pci_disable_device(pci);
2546 return -ENXIO; 2546 return -ENXIO;
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 5bb48ee8b6c6..38ad3f7b040f 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -3256,7 +3256,7 @@ static const char *ad1884_slave_vols[] = {
3256 "Mic Playback Volume", 3256 "Mic Playback Volume",
3257 "CD Playback Volume", 3257 "CD Playback Volume",
3258 "Internal Mic Playback Volume", 3258 "Internal Mic Playback Volume",
3259 "Docking Mic Playback Volume" 3259 "Docking Mic Playback Volume",
3260 /* "Beep Playback Volume", */ 3260 /* "Beep Playback Volume", */
3261 "IEC958 Playback Volume", 3261 "IEC958 Playback Volume",
3262 NULL 3262 NULL
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 82097790f6f3..f35e58a2d921 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -8764,6 +8764,10 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
8764 {} 8764 {}
8765}; 8765};
8766 8766
8767static hda_nid_t alc883_slave_dig_outs[] = {
8768 ALC1200_DIGOUT_NID, 0,
8769};
8770
8767static hda_nid_t alc1200_slave_dig_outs[] = { 8771static hda_nid_t alc1200_slave_dig_outs[] = {
8768 ALC883_DIGOUT_NID, 0, 8772 ALC883_DIGOUT_NID, 0,
8769}; 8773};
@@ -8809,6 +8813,7 @@ static struct alc_config_preset alc883_presets[] = {
8809 .dac_nids = alc883_dac_nids, 8813 .dac_nids = alc883_dac_nids,
8810 .dig_out_nid = ALC883_DIGOUT_NID, 8814 .dig_out_nid = ALC883_DIGOUT_NID,
8811 .dig_in_nid = ALC883_DIGIN_NID, 8815 .dig_in_nid = ALC883_DIGIN_NID,
8816 .slave_dig_outs = alc883_slave_dig_outs,
8812 .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_intel_modes), 8817 .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_intel_modes),
8813 .channel_mode = alc883_3ST_6ch_intel_modes, 8818 .channel_mode = alc883_3ST_6ch_intel_modes,
8814 .need_dac_fix = 1, 8819 .need_dac_fix = 1,
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index b5e108aa8f63..61996a2f45df 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -4413,6 +4413,24 @@ static void stac92xx_unsol_event(struct hda_codec *codec, unsigned int res)
4413 if (spec->num_pwrs > 0) 4413 if (spec->num_pwrs > 0)
4414 stac92xx_pin_sense(codec, event->nid); 4414 stac92xx_pin_sense(codec, event->nid);
4415 stac92xx_report_jack(codec, event->nid); 4415 stac92xx_report_jack(codec, event->nid);
4416
4417 switch (codec->subsystem_id) {
4418 case 0x103c308f:
4419 if (event->nid == 0xb) {
4420 int pin = AC_PINCTL_IN_EN;
4421
4422 if (get_pin_presence(codec, 0xa)
4423 && get_pin_presence(codec, 0xb))
4424 pin |= AC_PINCTL_VREF_80;
4425 if (!get_pin_presence(codec, 0xb))
4426 pin |= AC_PINCTL_VREF_80;
4427
4428 /* toggle VREF state based on mic + hp pin
4429 * status
4430 */
4431 stac92xx_auto_set_pinctl(codec, 0x0a, pin);
4432 }
4433 }
4416 break; 4434 break;
4417 case STAC_VREF_EVENT: 4435 case STAC_VREF_EVENT:
4418 data = snd_hda_codec_read(codec, codec->afg, 0, 4436 data = snd_hda_codec_read(codec, codec->afg, 0,
@@ -4895,6 +4913,7 @@ again:
4895 switch (codec->vendor_id) { 4913 switch (codec->vendor_id) {
4896 case 0x111d7604: 4914 case 0x111d7604:
4897 case 0x111d7605: 4915 case 0x111d7605:
4916 case 0x111d76d5:
4898 if (spec->board_config == STAC_92HD83XXX_PWR_REF) 4917 if (spec->board_config == STAC_92HD83XXX_PWR_REF)
4899 break; 4918 break;
4900 spec->num_pwrs = 0; 4919 spec->num_pwrs = 0;
@@ -5707,6 +5726,7 @@ static struct hda_codec_preset snd_hda_preset_sigmatel[] = {
5707 { .id = 0x111d7603, .name = "92HD75B3X5", .patch = patch_stac92hd71bxx}, 5726 { .id = 0x111d7603, .name = "92HD75B3X5", .patch = patch_stac92hd71bxx},
5708 { .id = 0x111d7604, .name = "92HD83C1X5", .patch = patch_stac92hd83xxx}, 5727 { .id = 0x111d7604, .name = "92HD83C1X5", .patch = patch_stac92hd83xxx},
5709 { .id = 0x111d7605, .name = "92HD81B1X5", .patch = patch_stac92hd83xxx}, 5728 { .id = 0x111d7605, .name = "92HD81B1X5", .patch = patch_stac92hd83xxx},
5729 { .id = 0x111d76d5, .name = "92HD81B1C5", .patch = patch_stac92hd83xxx},
5710 { .id = 0x111d7608, .name = "92HD75B2X5", .patch = patch_stac92hd71bxx}, 5730 { .id = 0x111d7608, .name = "92HD75B2X5", .patch = patch_stac92hd71bxx},
5711 { .id = 0x111d7674, .name = "92HD73D1X5", .patch = patch_stac92hd73xx }, 5731 { .id = 0x111d7674, .name = "92HD73D1X5", .patch = patch_stac92hd73xx },
5712 { .id = 0x111d7675, .name = "92HD73C1X5", .patch = patch_stac92hd73xx }, 5732 { .id = 0x111d7675, .name = "92HD73C1X5", .patch = patch_stac92hd73xx },
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
index 3dd63f1cda53..0d0cdbdb4486 100644
--- a/sound/pci/ice1712/ice1712.c
+++ b/sound/pci/ice1712/ice1712.c
@@ -2533,8 +2533,8 @@ static int __devinit snd_ice1712_create(struct snd_card *card,
2533 if (err < 0) 2533 if (err < 0)
2534 return err; 2534 return err;
2535 /* check, if we can restrict PCI DMA transfers to 28 bits */ 2535 /* check, if we can restrict PCI DMA transfers to 28 bits */
2536 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 2536 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
2537 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 2537 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
2538 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n"); 2538 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n");
2539 pci_disable_device(pci); 2539 pci_disable_device(pci);
2540 return -ENXIO; 2540 return -ENXIO;
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 70141548f251..75283fbb4b3f 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2530,8 +2530,8 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
2530 return -EIO; 2530 return -EIO;
2531 2531
2532 /* check, if we can restrict PCI DMA transfers to 28 bits */ 2532 /* check, if we can restrict PCI DMA transfers to 28 bits */
2533 if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 || 2533 if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
2534 pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) { 2534 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
2535 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n"); 2535 snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n");
2536 pci_disable_device(pci); 2536 pci_disable_device(pci);
2537 return -ENXIO; 2537 return -ENXIO;
diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c
index c1eb84a14c42..82bc5b9e7629 100644
--- a/sound/pci/mixart/mixart.c
+++ b/sound/pci/mixart/mixart.c
@@ -1291,7 +1291,7 @@ static int __devinit snd_mixart_probe(struct pci_dev *pci,
1291 pci_set_master(pci); 1291 pci_set_master(pci);
1292 1292
1293 /* check if we can restrict PCI DMA transfers to 32 bits */ 1293 /* check if we can restrict PCI DMA transfers to 32 bits */
1294 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0) { 1294 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
1295 snd_printk(KERN_ERR "architecture does not support 32bit PCI busmaster DMA\n"); 1295 snd_printk(KERN_ERR "architecture does not support 32bit PCI busmaster DMA\n");
1296 pci_disable_device(pci); 1296 pci_disable_device(pci);
1297 return -ENXIO; 1297 return -ENXIO;
diff --git a/sound/pci/pcxhr/pcxhr.c b/sound/pci/pcxhr/pcxhr.c
index 80e064a3efff..833e9c7b27c7 100644
--- a/sound/pci/pcxhr/pcxhr.c
+++ b/sound/pci/pcxhr/pcxhr.c
@@ -1449,7 +1449,7 @@ static int __devinit pcxhr_probe(struct pci_dev *pci,
1449 pci_set_master(pci); 1449 pci_set_master(pci);
1450 1450
1451 /* check if we can restrict PCI DMA transfers to 32 bits */ 1451 /* check if we can restrict PCI DMA transfers to 32 bits */
1452 if (pci_set_dma_mask(pci, DMA_32BIT_MASK) < 0) { 1452 if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
1453 snd_printk(KERN_ERR "architecture does not support " 1453 snd_printk(KERN_ERR "architecture does not support "
1454 "32bit PCI busmaster DMA\n"); 1454 "32bit PCI busmaster DMA\n");
1455 pci_disable_device(pci); 1455 pci_disable_device(pci);
diff --git a/sound/pci/sis7019.c b/sound/pci/sis7019.c
index baf6d8e3dabc..1a5ff0611072 100644
--- a/sound/pci/sis7019.c
+++ b/sound/pci/sis7019.c
@@ -1300,7 +1300,7 @@ static int __devinit sis_chip_create(struct snd_card *card,
1300 if (rc) 1300 if (rc)
1301 goto error_out; 1301 goto error_out;
1302 1302
1303 if (pci_set_dma_mask(pci, DMA_30BIT_MASK) < 0) { 1303 if (pci_set_dma_mask(pci, DMA_BIT_MASK(30)) < 0) {
1304 printk(KERN_ERR "sis7019: architecture does not support " 1304 printk(KERN_ERR "sis7019: architecture does not support "
1305 "30-bit PCI busmaster DMA"); 1305 "30-bit PCI busmaster DMA");
1306 goto error_out_enabled; 1306 goto error_out_enabled;
diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
index d989215f3556..7dc60ad4772e 100644
--- a/sound/pci/sonicvibes.c
+++ b/sound/pci/sonicvibes.c
@@ -1264,8 +1264,8 @@ static int __devinit snd_sonicvibes_create(struct snd_card *card,
1264 if ((err = pci_enable_device(pci)) < 0) 1264 if ((err = pci_enable_device(pci)) < 0)
1265 return err; 1265 return err;
1266 /* check, if we can restrict PCI DMA transfers to 24 bits */ 1266 /* check, if we can restrict PCI DMA transfers to 24 bits */
1267 if (pci_set_dma_mask(pci, DMA_24BIT_MASK) < 0 || 1267 if (pci_set_dma_mask(pci, DMA_BIT_MASK(24)) < 0 ||
1268 pci_set_consistent_dma_mask(pci, DMA_24BIT_MASK) < 0) { 1268 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(24)) < 0) {
1269 snd_printk(KERN_ERR "architecture does not support 24bit PCI busmaster DMA\n"); 1269 snd_printk(KERN_ERR "architecture does not support 24bit PCI busmaster DMA\n");
1270 pci_disable_device(pci); 1270 pci_disable_device(pci);
1271 return -ENXIO; 1271 return -ENXIO;
diff --git a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c
index a9da9c184660..6d943f6f6b70 100644
--- a/sound/pci/trident/trident_main.c
+++ b/sound/pci/trident/trident_main.c
@@ -3559,8 +3559,8 @@ int __devinit snd_trident_create(struct snd_card *card,
3559 if ((err = pci_enable_device(pci)) < 0) 3559 if ((err = pci_enable_device(pci)) < 0)
3560 return err; 3560 return err;
3561 /* check, if we can restrict PCI DMA transfers to 30 bits */ 3561 /* check, if we can restrict PCI DMA transfers to 30 bits */
3562 if (pci_set_dma_mask(pci, DMA_30BIT_MASK) < 0 || 3562 if (pci_set_dma_mask(pci, DMA_BIT_MASK(30)) < 0 ||
3563 pci_set_consistent_dma_mask(pci, DMA_30BIT_MASK) < 0) { 3563 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(30)) < 0) {
3564 snd_printk(KERN_ERR "architecture does not support 30bit PCI busmaster DMA\n"); 3564 snd_printk(KERN_ERR "architecture does not support 30bit PCI busmaster DMA\n");
3565 pci_disable_device(pci); 3565 pci_disable_device(pci);
3566 return -ENXIO; 3566 return -ENXIO;
diff --git a/sound/ppc/powermac.c b/sound/ppc/powermac.c
index 5a929069dce9..a2b69b8cff43 100644
--- a/sound/ppc/powermac.c
+++ b/sound/ppc/powermac.c
@@ -51,7 +51,7 @@ static struct platform_device *device;
51/* 51/*
52 */ 52 */
53 53
54static int __init snd_pmac_probe(struct platform_device *devptr) 54static int __devinit snd_pmac_probe(struct platform_device *devptr)
55{ 55{
56 struct snd_card *card; 56 struct snd_card *card;
57 struct snd_pmac *chip; 57 struct snd_pmac *chip;
diff --git a/sound/soc/blackfin/bf5xx-ac97-pcm.c b/sound/soc/blackfin/bf5xx-ac97-pcm.c
index 8cfed1a5dcbe..cf0dfb7ca221 100644
--- a/sound/soc/blackfin/bf5xx-ac97-pcm.c
+++ b/sound/soc/blackfin/bf5xx-ac97-pcm.c
@@ -413,7 +413,7 @@ static void bf5xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
413 sport_done(sport_handle); 413 sport_done(sport_handle);
414} 414}
415 415
416static u64 bf5xx_pcm_dmamask = DMA_32BIT_MASK; 416static u64 bf5xx_pcm_dmamask = DMA_BIT_MASK(32);
417 417
418int bf5xx_pcm_ac97_new(struct snd_card *card, struct snd_soc_dai *dai, 418int bf5xx_pcm_ac97_new(struct snd_card *card, struct snd_soc_dai *dai,
419 struct snd_pcm *pcm) 419 struct snd_pcm *pcm)
@@ -424,7 +424,7 @@ int bf5xx_pcm_ac97_new(struct snd_card *card, struct snd_soc_dai *dai,
424 if (!card->dev->dma_mask) 424 if (!card->dev->dma_mask)
425 card->dev->dma_mask = &bf5xx_pcm_dmamask; 425 card->dev->dma_mask = &bf5xx_pcm_dmamask;
426 if (!card->dev->coherent_dma_mask) 426 if (!card->dev->coherent_dma_mask)
427 card->dev->coherent_dma_mask = DMA_32BIT_MASK; 427 card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
428 428
429 if (dai->playback.channels_min) { 429 if (dai->playback.channels_min) {
430 ret = bf5xx_pcm_preallocate_dma_buffer(pcm, 430 ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
diff --git a/sound/soc/blackfin/bf5xx-i2s-pcm.c b/sound/soc/blackfin/bf5xx-i2s-pcm.c
index 1318c4f627b7..62fbb8459569 100644
--- a/sound/soc/blackfin/bf5xx-i2s-pcm.c
+++ b/sound/soc/blackfin/bf5xx-i2s-pcm.c
@@ -245,7 +245,7 @@ static void bf5xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
245 sport_done(sport_handle); 245 sport_done(sport_handle);
246} 246}
247 247
248static u64 bf5xx_pcm_dmamask = DMA_32BIT_MASK; 248static u64 bf5xx_pcm_dmamask = DMA_BIT_MASK(32);
249 249
250int bf5xx_pcm_i2s_new(struct snd_card *card, struct snd_soc_dai *dai, 250int bf5xx_pcm_i2s_new(struct snd_card *card, struct snd_soc_dai *dai,
251 struct snd_pcm *pcm) 251 struct snd_pcm *pcm)
@@ -256,7 +256,7 @@ int bf5xx_pcm_i2s_new(struct snd_card *card, struct snd_soc_dai *dai,
256 if (!card->dev->dma_mask) 256 if (!card->dev->dma_mask)
257 card->dev->dma_mask = &bf5xx_pcm_dmamask; 257 card->dev->dma_mask = &bf5xx_pcm_dmamask;
258 if (!card->dev->coherent_dma_mask) 258 if (!card->dev->coherent_dma_mask)
259 card->dev->coherent_dma_mask = DMA_32BIT_MASK; 259 card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
260 260
261 if (dai->playback.channels_min) { 261 if (dai->playback.channels_min) {
262 ret = bf5xx_pcm_preallocate_dma_buffer(pcm, 262 ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
diff --git a/sound/soc/codecs/ak4535.c b/sound/soc/codecs/ak4535.c
index 1f63d387a2f4..dd3380202766 100644
--- a/sound/soc/codecs/ak4535.c
+++ b/sound/soc/codecs/ak4535.c
@@ -659,7 +659,8 @@ static int ak4535_remove(struct platform_device *pdev)
659 snd_soc_free_pcms(socdev); 659 snd_soc_free_pcms(socdev);
660 snd_soc_dapm_free(socdev); 660 snd_soc_dapm_free(socdev);
661#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) 661#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
662 i2c_unregister_device(codec->control_data); 662 if (codec->control_data)
663 i2c_unregister_device(codec->control_data);
663 i2c_del_driver(&ak4535_i2c_driver); 664 i2c_del_driver(&ak4535_i2c_driver);
664#endif 665#endif
665 kfree(codec->private_data); 666 kfree(codec->private_data);
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index 97738e2ece04..921b205de28a 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -122,6 +122,9 @@ struct twl4030_priv {
122 unsigned int bypass_state; 122 unsigned int bypass_state;
123 unsigned int codec_powered; 123 unsigned int codec_powered;
124 unsigned int codec_muted; 124 unsigned int codec_muted;
125
126 struct snd_pcm_substream *master_substream;
127 struct snd_pcm_substream *slave_substream;
125}; 128};
126 129
127/* 130/*
@@ -1217,6 +1220,52 @@ static int twl4030_set_bias_level(struct snd_soc_codec *codec,
1217 return 0; 1220 return 0;
1218} 1221}
1219 1222
1223static int twl4030_startup(struct snd_pcm_substream *substream,
1224 struct snd_soc_dai *dai)
1225{
1226 struct snd_soc_pcm_runtime *rtd = substream->private_data;
1227 struct snd_soc_device *socdev = rtd->socdev;
1228 struct snd_soc_codec *codec = socdev->card->codec;
1229 struct twl4030_priv *twl4030 = codec->private_data;
1230
1231 /* If we already have a playback or capture going then constrain
1232 * this substream to match it.
1233 */
1234 if (twl4030->master_substream) {
1235 struct snd_pcm_runtime *master_runtime;
1236 master_runtime = twl4030->master_substream->runtime;
1237
1238 snd_pcm_hw_constraint_minmax(substream->runtime,
1239 SNDRV_PCM_HW_PARAM_RATE,
1240 master_runtime->rate,
1241 master_runtime->rate);
1242
1243 snd_pcm_hw_constraint_minmax(substream->runtime,
1244 SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
1245 master_runtime->sample_bits,
1246 master_runtime->sample_bits);
1247
1248 twl4030->slave_substream = substream;
1249 } else
1250 twl4030->master_substream = substream;
1251
1252 return 0;
1253}
1254
1255static void twl4030_shutdown(struct snd_pcm_substream *substream,
1256 struct snd_soc_dai *dai)
1257{
1258 struct snd_soc_pcm_runtime *rtd = substream->private_data;
1259 struct snd_soc_device *socdev = rtd->socdev;
1260 struct snd_soc_codec *codec = socdev->card->codec;
1261 struct twl4030_priv *twl4030 = codec->private_data;
1262
1263 if (twl4030->master_substream == substream)
1264 twl4030->master_substream = twl4030->slave_substream;
1265
1266 twl4030->slave_substream = NULL;
1267}
1268
1220static int twl4030_hw_params(struct snd_pcm_substream *substream, 1269static int twl4030_hw_params(struct snd_pcm_substream *substream,
1221 struct snd_pcm_hw_params *params, 1270 struct snd_pcm_hw_params *params,
1222 struct snd_soc_dai *dai) 1271 struct snd_soc_dai *dai)
@@ -1224,8 +1273,13 @@ static int twl4030_hw_params(struct snd_pcm_substream *substream,
1224 struct snd_soc_pcm_runtime *rtd = substream->private_data; 1273 struct snd_soc_pcm_runtime *rtd = substream->private_data;
1225 struct snd_soc_device *socdev = rtd->socdev; 1274 struct snd_soc_device *socdev = rtd->socdev;
1226 struct snd_soc_codec *codec = socdev->card->codec; 1275 struct snd_soc_codec *codec = socdev->card->codec;
1276 struct twl4030_priv *twl4030 = codec->private_data;
1227 u8 mode, old_mode, format, old_format; 1277 u8 mode, old_mode, format, old_format;
1228 1278
1279 if (substream == twl4030->slave_substream)
1280 /* Ignoring hw_params for slave substream */
1281 return 0;
1282
1229 /* bit rate */ 1283 /* bit rate */
1230 old_mode = twl4030_read_reg_cache(codec, 1284 old_mode = twl4030_read_reg_cache(codec,
1231 TWL4030_REG_CODEC_MODE) & ~TWL4030_CODECPDZ; 1285 TWL4030_REG_CODEC_MODE) & ~TWL4030_CODECPDZ;
@@ -1259,6 +1313,9 @@ static int twl4030_hw_params(struct snd_pcm_substream *substream,
1259 case 48000: 1313 case 48000:
1260 mode |= TWL4030_APLL_RATE_48000; 1314 mode |= TWL4030_APLL_RATE_48000;
1261 break; 1315 break;
1316 case 96000:
1317 mode |= TWL4030_APLL_RATE_96000;
1318 break;
1262 default: 1319 default:
1263 printk(KERN_ERR "TWL4030 hw params: unknown rate %d\n", 1320 printk(KERN_ERR "TWL4030 hw params: unknown rate %d\n",
1264 params_rate(params)); 1321 params_rate(params));
@@ -1384,6 +1441,8 @@ static int twl4030_set_dai_fmt(struct snd_soc_dai *codec_dai,
1384#define TWL4030_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FORMAT_S24_LE) 1441#define TWL4030_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FORMAT_S24_LE)
1385 1442
1386static struct snd_soc_dai_ops twl4030_dai_ops = { 1443static struct snd_soc_dai_ops twl4030_dai_ops = {
1444 .startup = twl4030_startup,
1445 .shutdown = twl4030_shutdown,
1387 .hw_params = twl4030_hw_params, 1446 .hw_params = twl4030_hw_params,
1388 .set_sysclk = twl4030_set_dai_sysclk, 1447 .set_sysclk = twl4030_set_dai_sysclk,
1389 .set_fmt = twl4030_set_dai_fmt, 1448 .set_fmt = twl4030_set_dai_fmt,
@@ -1395,7 +1454,7 @@ struct snd_soc_dai twl4030_dai = {
1395 .stream_name = "Playback", 1454 .stream_name = "Playback",
1396 .channels_min = 2, 1455 .channels_min = 2,
1397 .channels_max = 2, 1456 .channels_max = 2,
1398 .rates = TWL4030_RATES, 1457 .rates = TWL4030_RATES | SNDRV_PCM_RATE_96000,
1399 .formats = TWL4030_FORMATS,}, 1458 .formats = TWL4030_FORMATS,},
1400 .capture = { 1459 .capture = {
1401 .stream_name = "Capture", 1460 .stream_name = "Capture",
diff --git a/sound/soc/codecs/twl4030.h b/sound/soc/codecs/twl4030.h
index 33dbb144dad1..cb63765db1df 100644
--- a/sound/soc/codecs/twl4030.h
+++ b/sound/soc/codecs/twl4030.h
@@ -109,6 +109,7 @@
109#define TWL4030_APLL_RATE_32000 0x80 109#define TWL4030_APLL_RATE_32000 0x80
110#define TWL4030_APLL_RATE_44100 0x90 110#define TWL4030_APLL_RATE_44100 0x90
111#define TWL4030_APLL_RATE_48000 0xA0 111#define TWL4030_APLL_RATE_48000 0xA0
112#define TWL4030_APLL_RATE_96000 0xE0
112#define TWL4030_SEL_16K 0x04 113#define TWL4030_SEL_16K 0x04
113#define TWL4030_CODECPDZ 0x02 114#define TWL4030_CODECPDZ 0x02
114#define TWL4030_OPT_MODE 0x01 115#define TWL4030_OPT_MODE 0x01
diff --git a/sound/soc/codecs/wm9705.c b/sound/soc/codecs/wm9705.c
index 3265817c5c26..6e23a81dba78 100644
--- a/sound/soc/codecs/wm9705.c
+++ b/sound/soc/codecs/wm9705.c
@@ -317,6 +317,41 @@ static int wm9705_reset(struct snd_soc_codec *codec)
317 return -EIO; 317 return -EIO;
318} 318}
319 319
320#ifdef CONFIG_PM
321static int wm9705_soc_suspend(struct platform_device *pdev)
322{
323 struct snd_soc_device *socdev = platform_get_drvdata(pdev);
324 struct snd_soc_codec *codec = socdev->card->codec;
325
326 soc_ac97_ops.write(codec->ac97, AC97_POWERDOWN, 0xffff);
327
328 return 0;
329}
330
331static int wm9705_soc_resume(struct platform_device *pdev)
332{
333 struct snd_soc_device *socdev = platform_get_drvdata(pdev);
334 struct snd_soc_codec *codec = socdev->card->codec;
335 int i, ret;
336 u16 *cache = codec->reg_cache;
337
338 ret = wm9705_reset(codec);
339 if (ret < 0) {
340 printk(KERN_ERR "could not reset AC97 codec\n");
341 return ret;
342 }
343
344 for (i = 2; i < ARRAY_SIZE(wm9705_reg) << 1; i += 2) {
345 soc_ac97_ops.write(codec->ac97, i, cache[i>>1]);
346 }
347
348 return 0;
349}
350#else
351#define wm9705_soc_suspend NULL
352#define wm9705_soc_resume NULL
353#endif
354
320static int wm9705_soc_probe(struct platform_device *pdev) 355static int wm9705_soc_probe(struct platform_device *pdev)
321{ 356{
322 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 357 struct snd_soc_device *socdev = platform_get_drvdata(pdev);
@@ -407,6 +442,8 @@ static int wm9705_soc_remove(struct platform_device *pdev)
407struct snd_soc_codec_device soc_codec_dev_wm9705 = { 442struct snd_soc_codec_device soc_codec_dev_wm9705 = {
408 .probe = wm9705_soc_probe, 443 .probe = wm9705_soc_probe,
409 .remove = wm9705_soc_remove, 444 .remove = wm9705_soc_remove,
445 .suspend = wm9705_soc_suspend,
446 .resume = wm9705_soc_resume,
410}; 447};
411EXPORT_SYMBOL_GPL(soc_codec_dev_wm9705); 448EXPORT_SYMBOL_GPL(soc_codec_dev_wm9705);
412 449
diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
index b3eb8570cd7b..b1a3a278819f 100644
--- a/sound/soc/fsl/fsl_dma.c
+++ b/sound/soc/fsl/fsl_dma.c
@@ -300,7 +300,7 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
300 if (!card->dev->coherent_dma_mask) 300 if (!card->dev->coherent_dma_mask)
301 card->dev->coherent_dma_mask = fsl_dma_dmamask; 301 card->dev->coherent_dma_mask = fsl_dma_dmamask;
302 302
303 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, pcm->dev, 303 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
304 fsl_dma_hardware.buffer_bytes_max, 304 fsl_dma_hardware.buffer_bytes_max,
305 &pcm->streams[0].substream->dma_buffer); 305 &pcm->streams[0].substream->dma_buffer);
306 if (ret) { 306 if (ret) {
@@ -310,7 +310,7 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
310 return -ENOMEM; 310 return -ENOMEM;
311 } 311 }
312 312
313 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, pcm->dev, 313 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
314 fsl_dma_hardware.buffer_bytes_max, 314 fsl_dma_hardware.buffer_bytes_max,
315 &pcm->streams[1].substream->dma_buffer); 315 &pcm->streams[1].substream->dma_buffer);
316 if (ret) { 316 if (ret) {
@@ -418,7 +418,7 @@ static int fsl_dma_open(struct snd_pcm_substream *substream)
418 return -EBUSY; 418 return -EBUSY;
419 } 419 }
420 420
421 dma_private = dma_alloc_coherent(substream->pcm->dev, 421 dma_private = dma_alloc_coherent(substream->pcm->card->dev,
422 sizeof(struct fsl_dma_private), &ld_buf_phys, GFP_KERNEL); 422 sizeof(struct fsl_dma_private), &ld_buf_phys, GFP_KERNEL);
423 if (!dma_private) { 423 if (!dma_private) {
424 dev_err(substream->pcm->card->dev, 424 dev_err(substream->pcm->card->dev,
@@ -445,7 +445,7 @@ static int fsl_dma_open(struct snd_pcm_substream *substream)
445 dev_err(substream->pcm->card->dev, 445 dev_err(substream->pcm->card->dev,
446 "can't register ISR for IRQ %u (ret=%i)\n", 446 "can't register ISR for IRQ %u (ret=%i)\n",
447 dma_private->irq, ret); 447 dma_private->irq, ret);
448 dma_free_coherent(substream->pcm->dev, 448 dma_free_coherent(substream->pcm->card->dev,
449 sizeof(struct fsl_dma_private), 449 sizeof(struct fsl_dma_private),
450 dma_private, dma_private->ld_buf_phys); 450 dma_private, dma_private->ld_buf_phys);
451 return ret; 451 return ret;
@@ -697,6 +697,23 @@ static snd_pcm_uframes_t fsl_dma_pointer(struct snd_pcm_substream *substream)
697 else 697 else
698 position = in_be32(&dma_channel->dar); 698 position = in_be32(&dma_channel->dar);
699 699
700 /*
701 * When capture is started, the SSI immediately starts to fill its FIFO.
702 * This means that the DMA controller is not started until the FIFO is
703 * full. However, ALSA calls this function before that happens, when
704 * MR.DAR is still zero. In this case, just return zero to indicate
705 * that nothing has been received yet.
706 */
707 if (!position)
708 return 0;
709
710 if ((position < dma_private->dma_buf_phys) ||
711 (position > dma_private->dma_buf_end)) {
712 dev_err(substream->pcm->card->dev,
713 "dma pointer is out of range, halting stream\n");
714 return SNDRV_PCM_POS_XRUN;
715 }
716
700 frames = bytes_to_frames(runtime, position - dma_private->dma_buf_phys); 717 frames = bytes_to_frames(runtime, position - dma_private->dma_buf_phys);
701 718
702 /* 719 /*
@@ -761,13 +778,13 @@ static int fsl_dma_close(struct snd_pcm_substream *substream)
761 free_irq(dma_private->irq, dma_private); 778 free_irq(dma_private->irq, dma_private);
762 779
763 if (dma_private->ld_buf_phys) { 780 if (dma_private->ld_buf_phys) {
764 dma_unmap_single(substream->pcm->dev, 781 dma_unmap_single(substream->pcm->card->dev,
765 dma_private->ld_buf_phys, 782 dma_private->ld_buf_phys,
766 sizeof(dma_private->link), DMA_TO_DEVICE); 783 sizeof(dma_private->link), DMA_TO_DEVICE);
767 } 784 }
768 785
769 /* Deallocate the fsl_dma_private structure */ 786 /* Deallocate the fsl_dma_private structure */
770 dma_free_coherent(substream->pcm->dev, 787 dma_free_coherent(substream->pcm->card->dev,
771 sizeof(struct fsl_dma_private), 788 sizeof(struct fsl_dma_private),
772 dma_private, dma_private->ld_buf_phys); 789 dma_private, dma_private->ld_buf_phys);
773 substream->runtime->private_data = NULL; 790 substream->runtime->private_data = NULL;
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index 169bca295b78..3711d8454d96 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -60,6 +60,13 @@
60 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_LE) 60 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_LE)
61#endif 61#endif
62 62
63/* SIER bitflag of interrupts to enable */
64#define SIER_FLAGS (CCSR_SSI_SIER_TFRC_EN | CCSR_SSI_SIER_TDMAE | \
65 CCSR_SSI_SIER_TIE | CCSR_SSI_SIER_TUE0_EN | \
66 CCSR_SSI_SIER_TUE1_EN | CCSR_SSI_SIER_RFRC_EN | \
67 CCSR_SSI_SIER_RDMAE | CCSR_SSI_SIER_RIE | \
68 CCSR_SSI_SIER_ROE0_EN | CCSR_SSI_SIER_ROE1_EN)
69
63/** 70/**
64 * fsl_ssi_private: per-SSI private data 71 * fsl_ssi_private: per-SSI private data
65 * 72 *
@@ -140,7 +147,7 @@ static irqreturn_t fsl_ssi_isr(int irq, void *dev_id)
140 were interrupted for. We mask it with the Interrupt Enable register 147 were interrupted for. We mask it with the Interrupt Enable register
141 so that we only check for events that we're interested in. 148 so that we only check for events that we're interested in.
142 */ 149 */
143 sisr = in_be32(&ssi->sisr) & in_be32(&ssi->sier); 150 sisr = in_be32(&ssi->sisr) & SIER_FLAGS;
144 151
145 if (sisr & CCSR_SSI_SISR_RFRC) { 152 if (sisr & CCSR_SSI_SISR_RFRC) {
146 ssi_private->stats.rfrc++; 153 ssi_private->stats.rfrc++;
@@ -324,12 +331,7 @@ static int fsl_ssi_startup(struct snd_pcm_substream *substream,
324 */ 331 */
325 332
326 /* 4. Enable the interrupts and DMA requests */ 333 /* 4. Enable the interrupts and DMA requests */
327 out_be32(&ssi->sier, 334 out_be32(&ssi->sier, SIER_FLAGS);
328 CCSR_SSI_SIER_TFRC_EN | CCSR_SSI_SIER_TDMAE |
329 CCSR_SSI_SIER_TIE | CCSR_SSI_SIER_TUE0_EN |
330 CCSR_SSI_SIER_TUE1_EN | CCSR_SSI_SIER_RFRC_EN |
331 CCSR_SSI_SIER_RDMAE | CCSR_SSI_SIER_RIE |
332 CCSR_SSI_SIER_ROE0_EN | CCSR_SSI_SIER_ROE1_EN);
333 335
334 /* 336 /*
335 * Set the watermark for transmit FIFI 0 and receive FIFO 0. We 337 * Set the watermark for transmit FIFI 0 and receive FIFO 0. We
@@ -466,28 +468,12 @@ static int fsl_ssi_trigger(struct snd_pcm_substream *substream, int cmd,
466 case SNDRV_PCM_TRIGGER_START: 468 case SNDRV_PCM_TRIGGER_START:
467 clrbits32(&ssi->scr, CCSR_SSI_SCR_SSIEN); 469 clrbits32(&ssi->scr, CCSR_SSI_SCR_SSIEN);
468 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 470 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
469 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 471 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
470 setbits32(&ssi->scr, 472 setbits32(&ssi->scr,
471 CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE); 473 CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE);
472 } else { 474 else
473 long timeout = jiffies + 10;
474
475 setbits32(&ssi->scr, 475 setbits32(&ssi->scr,
476 CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_RE); 476 CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_RE);
477
478 /* Wait until the SSI has filled its FIFO. Without this
479 * delay, ALSA complains about overruns. When the FIFO
480 * is full, the DMA controller initiates its first
481 * transfer. Until then, however, the DMA's DAR
482 * register is zero, which translates to an
483 * out-of-bounds pointer. This makes ALSA think an
484 * overrun has occurred.
485 */
486 while (!(in_be32(&ssi->sisr) & CCSR_SSI_SISR_RFF0) &&
487 (jiffies < timeout));
488 if (!(in_be32(&ssi->sisr) & CCSR_SSI_SISR_RFF0))
489 return -EIO;
490 }
491 break; 477 break;
492 478
493 case SNDRV_PCM_TRIGGER_STOP: 479 case SNDRV_PCM_TRIGGER_STOP:
@@ -606,39 +592,52 @@ static struct snd_soc_dai fsl_ssi_dai_template = {
606 .ops = &fsl_ssi_dai_ops, 592 .ops = &fsl_ssi_dai_ops,
607}; 593};
608 594
595/* Show the statistics of a flag only if its interrupt is enabled. The
596 * compiler will optimze this code to a no-op if the interrupt is not
597 * enabled.
598 */
599#define SIER_SHOW(flag, name) \
600 do { \
601 if (SIER_FLAGS & CCSR_SSI_SIER_##flag) \
602 length += sprintf(buf + length, #name "=%u\n", \
603 ssi_private->stats.name); \
604 } while (0)
605
606
609/** 607/**
610 * fsl_sysfs_ssi_show: display SSI statistics 608 * fsl_sysfs_ssi_show: display SSI statistics
611 * 609 *
612 * Display the statistics for the current SSI device. 610 * Display the statistics for the current SSI device. To avoid confusion,
611 * we only show those counts that are enabled.
613 */ 612 */
614static ssize_t fsl_sysfs_ssi_show(struct device *dev, 613static ssize_t fsl_sysfs_ssi_show(struct device *dev,
615 struct device_attribute *attr, char *buf) 614 struct device_attribute *attr, char *buf)
616{ 615{
617 struct fsl_ssi_private *ssi_private = 616 struct fsl_ssi_private *ssi_private =
618 container_of(attr, struct fsl_ssi_private, dev_attr); 617 container_of(attr, struct fsl_ssi_private, dev_attr);
619 ssize_t length; 618 ssize_t length = 0;
620 619
621 length = sprintf(buf, "rfrc=%u", ssi_private->stats.rfrc); 620 SIER_SHOW(RFRC_EN, rfrc);
622 length += sprintf(buf + length, "\ttfrc=%u", ssi_private->stats.tfrc); 621 SIER_SHOW(TFRC_EN, tfrc);
623 length += sprintf(buf + length, "\tcmdau=%u", ssi_private->stats.cmdau); 622 SIER_SHOW(CMDAU_EN, cmdau);
624 length += sprintf(buf + length, "\tcmddu=%u", ssi_private->stats.cmddu); 623 SIER_SHOW(CMDDU_EN, cmddu);
625 length += sprintf(buf + length, "\trxt=%u", ssi_private->stats.rxt); 624 SIER_SHOW(RXT_EN, rxt);
626 length += sprintf(buf + length, "\trdr1=%u", ssi_private->stats.rdr1); 625 SIER_SHOW(RDR1_EN, rdr1);
627 length += sprintf(buf + length, "\trdr0=%u", ssi_private->stats.rdr0); 626 SIER_SHOW(RDR0_EN, rdr0);
628 length += sprintf(buf + length, "\ttde1=%u", ssi_private->stats.tde1); 627 SIER_SHOW(TDE1_EN, tde1);
629 length += sprintf(buf + length, "\ttde0=%u", ssi_private->stats.tde0); 628 SIER_SHOW(TDE0_EN, tde0);
630 length += sprintf(buf + length, "\troe1=%u", ssi_private->stats.roe1); 629 SIER_SHOW(ROE1_EN, roe1);
631 length += sprintf(buf + length, "\troe0=%u", ssi_private->stats.roe0); 630 SIER_SHOW(ROE0_EN, roe0);
632 length += sprintf(buf + length, "\ttue1=%u", ssi_private->stats.tue1); 631 SIER_SHOW(TUE1_EN, tue1);
633 length += sprintf(buf + length, "\ttue0=%u", ssi_private->stats.tue0); 632 SIER_SHOW(TUE0_EN, tue0);
634 length += sprintf(buf + length, "\ttfs=%u", ssi_private->stats.tfs); 633 SIER_SHOW(TFS_EN, tfs);
635 length += sprintf(buf + length, "\trfs=%u", ssi_private->stats.rfs); 634 SIER_SHOW(RFS_EN, rfs);
636 length += sprintf(buf + length, "\ttls=%u", ssi_private->stats.tls); 635 SIER_SHOW(TLS_EN, tls);
637 length += sprintf(buf + length, "\trls=%u", ssi_private->stats.rls); 636 SIER_SHOW(RLS_EN, rls);
638 length += sprintf(buf + length, "\trff1=%u", ssi_private->stats.rff1); 637 SIER_SHOW(RFF1_EN, rff1);
639 length += sprintf(buf + length, "\trff0=%u", ssi_private->stats.rff0); 638 SIER_SHOW(RFF0_EN, rff0);
640 length += sprintf(buf + length, "\ttfe1=%u", ssi_private->stats.tfe1); 639 SIER_SHOW(TFE1_EN, tfe1);
641 length += sprintf(buf + length, "\ttfe0=%u\n", ssi_private->stats.tfe0); 640 SIER_SHOW(TFE0_EN, tfe0);
642 641
643 return length; 642 return length;
644} 643}
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index d6882be33452..9c09b94f0cf8 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -146,6 +146,17 @@ static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream,
146 struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data); 146 struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
147 int err = 0; 147 int err = 0;
148 148
149 if (cpu_is_omap343x() && mcbsp_data->bus_id == 1) {
150 /*
151 * McBSP2 in OMAP3 has 1024 * 32-bit internal audio buffer.
152 * Set constraint for minimum buffer size to the same than FIFO
153 * size in order to avoid underruns in playback startup because
154 * HW is keeping the DMA request active until FIFO is filled.
155 */
156 snd_pcm_hw_constraint_minmax(substream->runtime,
157 SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 4096, UINT_MAX);
158 }
159
149 if (!cpu_dai->active) 160 if (!cpu_dai->active)
150 err = omap_mcbsp_request(mcbsp_data->bus_id); 161 err = omap_mcbsp_request(mcbsp_data->bus_id);
151 162
diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c
index 8e1431cb46bb..1bdbb0427183 100644
--- a/sound/soc/omap/omap-pcm.c
+++ b/sound/soc/omap/omap-pcm.c
@@ -327,7 +327,7 @@ int omap_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
327 if (!card->dev->dma_mask) 327 if (!card->dev->dma_mask)
328 card->dev->dma_mask = &omap_pcm_dmamask; 328 card->dev->dma_mask = &omap_pcm_dmamask;
329 if (!card->dev->coherent_dma_mask) 329 if (!card->dev->coherent_dma_mask)
330 card->dev->coherent_dma_mask = DMA_32BIT_MASK; 330 card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
331 331
332 if (dai->playback.channels_min) { 332 if (dai->playback.channels_min) {
333 ret = omap_pcm_preallocate_dma_buffer(pcm, 333 ret = omap_pcm_preallocate_dma_buffer(pcm,
diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig
index 5998ab366e83..ad8a10fe6298 100644
--- a/sound/soc/pxa/Kconfig
+++ b/sound/soc/pxa/Kconfig
@@ -116,6 +116,16 @@ config SND_SOC_ZYLONITE
116 Say Y if you want to add support for SoC audio on the 116 Say Y if you want to add support for SoC audio on the
117 Marvell Zylonite reference platform. 117 Marvell Zylonite reference platform.
118 118
119config SND_PXA2XX_SOC_MAGICIAN
120 tristate "SoC Audio support for HTC Magician"
121 depends on SND_PXA2XX_SOC && MACH_MAGICIAN
122 select SND_PXA2XX_SOC_I2S
123 select SND_PXA_SOC_SSP
124 select SND_SOC_UDA1380
125 help
126 Say Y if you want to add support for SoC audio on the
127 HTC Magician.
128
119config SND_PXA2XX_SOC_MIOA701 129config SND_PXA2XX_SOC_MIOA701
120 tristate "SoC Audio support for MIO A701" 130 tristate "SoC Audio support for MIO A701"
121 depends on SND_PXA2XX_SOC && MACH_MIOA701 131 depends on SND_PXA2XX_SOC && MACH_MIOA701
diff --git a/sound/soc/pxa/Makefile b/sound/soc/pxa/Makefile
index 8ed881c5e5cc..4b90c3ccae45 100644
--- a/sound/soc/pxa/Makefile
+++ b/sound/soc/pxa/Makefile
@@ -20,6 +20,7 @@ snd-soc-spitz-objs := spitz.o
20snd-soc-em-x270-objs := em-x270.o 20snd-soc-em-x270-objs := em-x270.o
21snd-soc-palm27x-objs := palm27x.o 21snd-soc-palm27x-objs := palm27x.o
22snd-soc-zylonite-objs := zylonite.o 22snd-soc-zylonite-objs := zylonite.o
23snd-soc-magician-objs := magician.o
23snd-soc-mioa701-objs := mioa701_wm9713.o 24snd-soc-mioa701-objs := mioa701_wm9713.o
24 25
25obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o 26obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o
@@ -31,5 +32,6 @@ obj-$(CONFIG_SND_PXA2XX_SOC_E800) += snd-soc-e800.o
31obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o 32obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o
32obj-$(CONFIG_SND_PXA2XX_SOC_EM_X270) += snd-soc-em-x270.o 33obj-$(CONFIG_SND_PXA2XX_SOC_EM_X270) += snd-soc-em-x270.o
33obj-$(CONFIG_SND_PXA2XX_SOC_PALM27X) += snd-soc-palm27x.o 34obj-$(CONFIG_SND_PXA2XX_SOC_PALM27X) += snd-soc-palm27x.o
35obj-$(CONFIG_SND_PXA2XX_SOC_MAGICIAN) += snd-soc-magician.o
34obj-$(CONFIG_SND_PXA2XX_SOC_MIOA701) += snd-soc-mioa701.o 36obj-$(CONFIG_SND_PXA2XX_SOC_MIOA701) += snd-soc-mioa701.o
35obj-$(CONFIG_SND_SOC_ZYLONITE) += snd-soc-zylonite.o 37obj-$(CONFIG_SND_SOC_ZYLONITE) += snd-soc-zylonite.o
diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c
new file mode 100644
index 000000000000..f7c4544f7859
--- /dev/null
+++ b/sound/soc/pxa/magician.c
@@ -0,0 +1,560 @@
1/*
2 * SoC audio for HTC Magician
3 *
4 * Copyright (c) 2006 Philipp Zabel <philipp.zabel@gmail.com>
5 *
6 * based on spitz.c,
7 * Authors: Liam Girdwood <lrg@slimlogic.co.uk>
8 * Richard Purdie <richard@openedhand.com>
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 *
15 */
16
17#include <linux/module.h>
18#include <linux/timer.h>
19#include <linux/interrupt.h>
20#include <linux/platform_device.h>
21#include <linux/delay.h>
22#include <linux/gpio.h>
23
24#include <sound/core.h>
25#include <sound/pcm.h>
26#include <sound/pcm_params.h>
27#include <sound/soc.h>
28#include <sound/soc-dapm.h>
29
30#include <mach/pxa-regs.h>
31#include <mach/hardware.h>
32#include <mach/magician.h>
33#include <asm/mach-types.h>
34#include "../codecs/uda1380.h"
35#include "pxa2xx-pcm.h"
36#include "pxa2xx-i2s.h"
37#include "pxa-ssp.h"
38
39#define MAGICIAN_MIC 0
40#define MAGICIAN_MIC_EXT 1
41
42static int magician_hp_switch;
43static int magician_spk_switch = 1;
44static int magician_in_sel = MAGICIAN_MIC;
45
46static void magician_ext_control(struct snd_soc_codec *codec)
47{
48 if (magician_spk_switch)
49 snd_soc_dapm_enable_pin(codec, "Speaker");
50 else
51 snd_soc_dapm_disable_pin(codec, "Speaker");
52 if (magician_hp_switch)
53 snd_soc_dapm_enable_pin(codec, "Headphone Jack");
54 else
55 snd_soc_dapm_disable_pin(codec, "Headphone Jack");
56
57 switch (magician_in_sel) {
58 case MAGICIAN_MIC:
59 snd_soc_dapm_disable_pin(codec, "Headset Mic");
60 snd_soc_dapm_enable_pin(codec, "Call Mic");
61 break;
62 case MAGICIAN_MIC_EXT:
63 snd_soc_dapm_disable_pin(codec, "Call Mic");
64 snd_soc_dapm_enable_pin(codec, "Headset Mic");
65 break;
66 }
67
68 snd_soc_dapm_sync(codec);
69}
70
71static int magician_startup(struct snd_pcm_substream *substream)
72{
73 struct snd_soc_pcm_runtime *rtd = substream->private_data;
74 struct snd_soc_codec *codec = rtd->socdev->card->codec;
75
76 /* check the jack status at stream startup */
77 magician_ext_control(codec);
78
79 return 0;
80}
81
82/*
83 * Magician uses SSP port for playback.
84 */
85static int magician_playback_hw_params(struct snd_pcm_substream *substream,
86 struct snd_pcm_hw_params *params)
87{
88 struct snd_soc_pcm_runtime *rtd = substream->private_data;
89 struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
90 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
91 unsigned int acps, acds, width, rate;
92 unsigned int div4 = PXA_SSP_CLK_SCDB_4;
93 int ret = 0;
94
95 rate = params_rate(params);
96 width = snd_pcm_format_physical_width(params_format(params));
97
98 /*
99 * rate = SSPSCLK / (2 * width(16 or 32))
100 * SSPSCLK = (ACPS / ACDS) / SSPSCLKDIV(div4 or div1)
101 */
102 switch (params_rate(params)) {
103 case 8000:
104 /* off by a factor of 2: bug in the PXA27x audio clock? */
105 acps = 32842000;
106 switch (width) {
107 case 16:
108 /* 513156 Hz ~= _2_ * 8000 Hz * 32 (+0.23%) */
109 acds = PXA_SSP_CLK_AUDIO_DIV_16;
110 break;
111 case 32:
112 /* 1026312 Hz ~= _2_ * 8000 Hz * 64 (+0.23%) */
113 acds = PXA_SSP_CLK_AUDIO_DIV_8;
114 }
115 break;
116 case 11025:
117 acps = 5622000;
118 switch (width) {
119 case 16:
120 /* 351375 Hz ~= 11025 Hz * 32 (-0.41%) */
121 acds = PXA_SSP_CLK_AUDIO_DIV_4;
122 break;
123 case 32:
124 /* 702750 Hz ~= 11025 Hz * 64 (-0.41%) */
125 acds = PXA_SSP_CLK_AUDIO_DIV_2;
126 }
127 break;
128 case 22050:
129 acps = 5622000;
130 switch (width) {
131 case 16:
132 /* 702750 Hz ~= 22050 Hz * 32 (-0.41%) */
133 acds = PXA_SSP_CLK_AUDIO_DIV_2;
134 break;
135 case 32:
136 /* 1405500 Hz ~= 22050 Hz * 64 (-0.41%) */
137 acds = PXA_SSP_CLK_AUDIO_DIV_1;
138 }
139 break;
140 case 44100:
141 acps = 5622000;
142 switch (width) {
143 case 16:
144 /* 1405500 Hz ~= 44100 Hz * 32 (-0.41%) */
145 acds = PXA_SSP_CLK_AUDIO_DIV_2;
146 break;
147 case 32:
148 /* 2811000 Hz ~= 44100 Hz * 64 (-0.41%) */
149 acds = PXA_SSP_CLK_AUDIO_DIV_1;
150 }
151 break;
152 case 48000:
153 acps = 12235000;
154 switch (width) {
155 case 16:
156 /* 1529375 Hz ~= 48000 Hz * 32 (-0.44%) */
157 acds = PXA_SSP_CLK_AUDIO_DIV_2;
158 break;
159 case 32:
160 /* 3058750 Hz ~= 48000 Hz * 64 (-0.44%) */
161 acds = PXA_SSP_CLK_AUDIO_DIV_1;
162 }
163 break;
164 case 96000:
165 acps = 12235000;
166 switch (width) {
167 case 16:
168 /* 3058750 Hz ~= 96000 Hz * 32 (-0.44%) */
169 acds = PXA_SSP_CLK_AUDIO_DIV_1;
170 break;
171 case 32:
172 /* 6117500 Hz ~= 96000 Hz * 64 (-0.44%) */
173 acds = PXA_SSP_CLK_AUDIO_DIV_2;
174 div4 = PXA_SSP_CLK_SCDB_1;
175 break;
176 }
177 break;
178 }
179
180 /* set codec DAI configuration */
181 ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_MSB |
182 SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
183 if (ret < 0)
184 return ret;
185
186 /* set cpu DAI configuration */
187 ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_A |
188 SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBS_CFS);
189 if (ret < 0)
190 return ret;
191
192 ret = snd_soc_dai_set_tdm_slot(cpu_dai, 1, 1);
193 if (ret < 0)
194 return ret;
195
196 /* set audio clock as clock source */
197 ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_AUDIO, 0,
198 SND_SOC_CLOCK_OUT);
199 if (ret < 0)
200 return ret;
201
202 /* set the SSP audio system clock ACDS divider */
203 ret = snd_soc_dai_set_clkdiv(cpu_dai,
204 PXA_SSP_AUDIO_DIV_ACDS, acds);
205 if (ret < 0)
206 return ret;
207
208 /* set the SSP audio system clock SCDB divider4 */
209 ret = snd_soc_dai_set_clkdiv(cpu_dai,
210 PXA_SSP_AUDIO_DIV_SCDB, div4);
211 if (ret < 0)
212 return ret;
213
214 /* set SSP audio pll clock */
215 ret = snd_soc_dai_set_pll(cpu_dai, 0, 0, acps);
216 if (ret < 0)
217 return ret;
218
219 return 0;
220}
221
222/*
223 * Magician uses I2S for capture.
224 */
225static int magician_capture_hw_params(struct snd_pcm_substream *substream,
226 struct snd_pcm_hw_params *params)
227{
228 struct snd_soc_pcm_runtime *rtd = substream->private_data;
229 struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
230 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
231 int ret = 0;
232
233 /* set codec DAI configuration */
234 ret = snd_soc_dai_set_fmt(codec_dai,
235 SND_SOC_DAIFMT_MSB | SND_SOC_DAIFMT_NB_NF |
236 SND_SOC_DAIFMT_CBS_CFS);
237 if (ret < 0)
238 return ret;
239
240 /* set cpu DAI configuration */
241 ret = snd_soc_dai_set_fmt(cpu_dai,
242 SND_SOC_DAIFMT_MSB | SND_SOC_DAIFMT_NB_NF |
243 SND_SOC_DAIFMT_CBS_CFS);
244 if (ret < 0)
245 return ret;
246
247 /* set the I2S system clock as output */
248 ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
249 SND_SOC_CLOCK_OUT);
250 if (ret < 0)
251 return ret;
252
253 return 0;
254}
255
256static struct snd_soc_ops magician_capture_ops = {
257 .startup = magician_startup,
258 .hw_params = magician_capture_hw_params,
259};
260
261static struct snd_soc_ops magician_playback_ops = {
262 .startup = magician_startup,
263 .hw_params = magician_playback_hw_params,
264};
265
266static int magician_get_hp(struct snd_kcontrol *kcontrol,
267 struct snd_ctl_elem_value *ucontrol)
268{
269 ucontrol->value.integer.value[0] = magician_hp_switch;
270 return 0;
271}
272
273static int magician_set_hp(struct snd_kcontrol *kcontrol,
274 struct snd_ctl_elem_value *ucontrol)
275{
276 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
277
278 if (magician_hp_switch == ucontrol->value.integer.value[0])
279 return 0;
280
281 magician_hp_switch = ucontrol->value.integer.value[0];
282 magician_ext_control(codec);
283 return 1;
284}
285
286static int magician_get_spk(struct snd_kcontrol *kcontrol,
287 struct snd_ctl_elem_value *ucontrol)
288{
289 ucontrol->value.integer.value[0] = magician_spk_switch;
290 return 0;
291}
292
293static int magician_set_spk(struct snd_kcontrol *kcontrol,
294 struct snd_ctl_elem_value *ucontrol)
295{
296 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
297
298 if (magician_spk_switch == ucontrol->value.integer.value[0])
299 return 0;
300
301 magician_spk_switch = ucontrol->value.integer.value[0];
302 magician_ext_control(codec);
303 return 1;
304}
305
306static int magician_get_input(struct snd_kcontrol *kcontrol,
307 struct snd_ctl_elem_value *ucontrol)
308{
309 ucontrol->value.integer.value[0] = magician_in_sel;
310 return 0;
311}
312
313static int magician_set_input(struct snd_kcontrol *kcontrol,
314 struct snd_ctl_elem_value *ucontrol)
315{
316 if (magician_in_sel == ucontrol->value.integer.value[0])
317 return 0;
318
319 magician_in_sel = ucontrol->value.integer.value[0];
320
321 switch (magician_in_sel) {
322 case MAGICIAN_MIC:
323 gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 1);
324 break;
325 case MAGICIAN_MIC_EXT:
326 gpio_set_value(EGPIO_MAGICIAN_IN_SEL1, 0);
327 }
328
329 return 1;
330}
331
332static int magician_spk_power(struct snd_soc_dapm_widget *w,
333 struct snd_kcontrol *k, int event)
334{
335 gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, SND_SOC_DAPM_EVENT_ON(event));
336 return 0;
337}
338
339static int magician_hp_power(struct snd_soc_dapm_widget *w,
340 struct snd_kcontrol *k, int event)
341{
342 gpio_set_value(EGPIO_MAGICIAN_EP_POWER, SND_SOC_DAPM_EVENT_ON(event));
343 return 0;
344}
345
346static int magician_mic_bias(struct snd_soc_dapm_widget *w,
347 struct snd_kcontrol *k, int event)
348{
349 gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, SND_SOC_DAPM_EVENT_ON(event));
350 return 0;
351}
352
353/* magician machine dapm widgets */
354static const struct snd_soc_dapm_widget uda1380_dapm_widgets[] = {
355 SND_SOC_DAPM_HP("Headphone Jack", magician_hp_power),
356 SND_SOC_DAPM_SPK("Speaker", magician_spk_power),
357 SND_SOC_DAPM_MIC("Call Mic", magician_mic_bias),
358 SND_SOC_DAPM_MIC("Headset Mic", magician_mic_bias),
359};
360
361/* magician machine audio_map */
362static const struct snd_soc_dapm_route audio_map[] = {
363
364 /* Headphone connected to VOUTL, VOUTR */
365 {"Headphone Jack", NULL, "VOUTL"},
366 {"Headphone Jack", NULL, "VOUTR"},
367
368 /* Speaker connected to VOUTL, VOUTR */
369 {"Speaker", NULL, "VOUTL"},
370 {"Speaker", NULL, "VOUTR"},
371
372 /* Mics are connected to VINM */
373 {"VINM", NULL, "Headset Mic"},
374 {"VINM", NULL, "Call Mic"},
375};
376
377static const char *input_select[] = {"Call Mic", "Headset Mic"};
378static const struct soc_enum magician_in_sel_enum =
379 SOC_ENUM_SINGLE_EXT(2, input_select);
380
381static const struct snd_kcontrol_new uda1380_magician_controls[] = {
382 SOC_SINGLE_BOOL_EXT("Headphone Switch",
383 (unsigned long)&magician_hp_switch,
384 magician_get_hp, magician_set_hp),
385 SOC_SINGLE_BOOL_EXT("Speaker Switch",
386 (unsigned long)&magician_spk_switch,
387 magician_get_spk, magician_set_spk),
388 SOC_ENUM_EXT("Input Select", magician_in_sel_enum,
389 magician_get_input, magician_set_input),
390};
391
392/*
393 * Logic for a uda1380 as connected on a HTC Magician
394 */
395static int magician_uda1380_init(struct snd_soc_codec *codec)
396{
397 int err;
398
399 /* NC codec pins */
400 snd_soc_dapm_nc_pin(codec, "VOUTLHP");
401 snd_soc_dapm_nc_pin(codec, "VOUTRHP");
402
403 /* FIXME: is anything connected here? */
404 snd_soc_dapm_nc_pin(codec, "VINL");
405 snd_soc_dapm_nc_pin(codec, "VINR");
406
407 /* Add magician specific controls */
408 err = snd_soc_add_controls(codec, uda1380_magician_controls,
409 ARRAY_SIZE(uda1380_magician_controls));
410 if (err < 0)
411 return err;
412
413 /* Add magician specific widgets */
414 snd_soc_dapm_new_controls(codec, uda1380_dapm_widgets,
415 ARRAY_SIZE(uda1380_dapm_widgets));
416
417 /* Set up magician specific audio path interconnects */
418 snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
419
420 snd_soc_dapm_sync(codec);
421 return 0;
422}
423
424/* magician digital audio interface glue - connects codec <--> CPU */
425static struct snd_soc_dai_link magician_dai[] = {
426{
427 .name = "uda1380",
428 .stream_name = "UDA1380 Playback",
429 .cpu_dai = &pxa_ssp_dai[PXA_DAI_SSP1],
430 .codec_dai = &uda1380_dai[UDA1380_DAI_PLAYBACK],
431 .init = magician_uda1380_init,
432 .ops = &magician_playback_ops,
433},
434{
435 .name = "uda1380",
436 .stream_name = "UDA1380 Capture",
437 .cpu_dai = &pxa_i2s_dai,
438 .codec_dai = &uda1380_dai[UDA1380_DAI_CAPTURE],
439 .ops = &magician_capture_ops,
440}
441};
442
443/* magician audio machine driver */
444static struct snd_soc_card snd_soc_card_magician = {
445 .name = "Magician",
446 .dai_link = magician_dai,
447 .num_links = ARRAY_SIZE(magician_dai),
448 .platform = &pxa2xx_soc_platform,
449};
450
451/* magician audio private data */
452static struct uda1380_setup_data magician_uda1380_setup = {
453 .i2c_address = 0x18,
454 .dac_clk = UDA1380_DAC_CLK_WSPLL,
455};
456
457/* magician audio subsystem */
458static struct snd_soc_device magician_snd_devdata = {
459 .card = &snd_soc_card_magician,
460 .codec_dev = &soc_codec_dev_uda1380,
461 .codec_data = &magician_uda1380_setup,
462};
463
464static struct platform_device *magician_snd_device;
465
466static int __init magician_init(void)
467{
468 int ret;
469
470 if (!machine_is_magician())
471 return -ENODEV;
472
473 ret = gpio_request(EGPIO_MAGICIAN_CODEC_POWER, "CODEC_POWER");
474 if (ret)
475 goto err_request_power;
476 ret = gpio_request(EGPIO_MAGICIAN_CODEC_RESET, "CODEC_RESET");
477 if (ret)
478 goto err_request_reset;
479 ret = gpio_request(EGPIO_MAGICIAN_SPK_POWER, "SPK_POWER");
480 if (ret)
481 goto err_request_spk;
482 ret = gpio_request(EGPIO_MAGICIAN_EP_POWER, "EP_POWER");
483 if (ret)
484 goto err_request_ep;
485 ret = gpio_request(EGPIO_MAGICIAN_MIC_POWER, "MIC_POWER");
486 if (ret)
487 goto err_request_mic;
488 ret = gpio_request(EGPIO_MAGICIAN_IN_SEL0, "IN_SEL0");
489 if (ret)
490 goto err_request_in_sel0;
491 ret = gpio_request(EGPIO_MAGICIAN_IN_SEL1, "IN_SEL1");
492 if (ret)
493 goto err_request_in_sel1;
494
495 gpio_set_value(EGPIO_MAGICIAN_CODEC_POWER, 1);
496 gpio_set_value(EGPIO_MAGICIAN_IN_SEL0, 0);
497
498 /* we may need to have the clock running here - pH5 */
499 gpio_set_value(EGPIO_MAGICIAN_CODEC_RESET, 1);
500 udelay(5);
501 gpio_set_value(EGPIO_MAGICIAN_CODEC_RESET, 0);
502
503 magician_snd_device = platform_device_alloc("soc-audio", -1);
504 if (!magician_snd_device) {
505 ret = -ENOMEM;
506 goto err_pdev;
507 }
508
509 platform_set_drvdata(magician_snd_device, &magician_snd_devdata);
510 magician_snd_devdata.dev = &magician_snd_device->dev;
511 ret = platform_device_add(magician_snd_device);
512 if (ret) {
513 platform_device_put(magician_snd_device);
514 goto err_pdev;
515 }
516
517 return 0;
518
519err_pdev:
520 gpio_free(EGPIO_MAGICIAN_IN_SEL1);
521err_request_in_sel1:
522 gpio_free(EGPIO_MAGICIAN_IN_SEL0);
523err_request_in_sel0:
524 gpio_free(EGPIO_MAGICIAN_MIC_POWER);
525err_request_mic:
526 gpio_free(EGPIO_MAGICIAN_EP_POWER);
527err_request_ep:
528 gpio_free(EGPIO_MAGICIAN_SPK_POWER);
529err_request_spk:
530 gpio_free(EGPIO_MAGICIAN_CODEC_RESET);
531err_request_reset:
532 gpio_free(EGPIO_MAGICIAN_CODEC_POWER);
533err_request_power:
534 return ret;
535}
536
537static void __exit magician_exit(void)
538{
539 platform_device_unregister(magician_snd_device);
540
541 gpio_set_value(EGPIO_MAGICIAN_SPK_POWER, 0);
542 gpio_set_value(EGPIO_MAGICIAN_EP_POWER, 0);
543 gpio_set_value(EGPIO_MAGICIAN_MIC_POWER, 0);
544 gpio_set_value(EGPIO_MAGICIAN_CODEC_POWER, 0);
545
546 gpio_free(EGPIO_MAGICIAN_IN_SEL1);
547 gpio_free(EGPIO_MAGICIAN_IN_SEL0);
548 gpio_free(EGPIO_MAGICIAN_MIC_POWER);
549 gpio_free(EGPIO_MAGICIAN_EP_POWER);
550 gpio_free(EGPIO_MAGICIAN_SPK_POWER);
551 gpio_free(EGPIO_MAGICIAN_CODEC_RESET);
552 gpio_free(EGPIO_MAGICIAN_CODEC_POWER);
553}
554
555module_init(magician_init);
556module_exit(magician_exit);
557
558MODULE_AUTHOR("Philipp Zabel");
559MODULE_DESCRIPTION("ALSA SoC Magician");
560MODULE_LICENSE("GPL");
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 7acd3febf8b0..308a657928d2 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -627,12 +627,18 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
627 u32 sscr0; 627 u32 sscr0;
628 u32 sspsp; 628 u32 sspsp;
629 int width = snd_pcm_format_physical_width(params_format(params)); 629 int width = snd_pcm_format_physical_width(params_format(params));
630 int ttsa = ssp_read_reg(ssp, SSTSA) & 0xf;
630 631
631 /* select correct DMA params */ 632 /* select correct DMA params */
632 if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK) 633 if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)
633 dma = 1; /* capture DMA offset is 1,3 */ 634 dma = 1; /* capture DMA offset is 1,3 */
634 if (chn == 2) 635 /* Network mode with one active slot (ttsa == 1) can be used
635 dma += 2; /* stereo DMA offset is 2, mono is 0 */ 636 * to force 16-bit frame width on the wire (for S16_LE), even
637 * with two channels. Use 16-bit DMA transfers for this case.
638 */
639 if (((chn == 2) && (ttsa != 1)) || (width == 32))
640 dma += 2; /* 32-bit DMA offset is 2, 16-bit is 0 */
641
636 cpu_dai->dma_data = ssp_dma_params[cpu_dai->id][dma]; 642 cpu_dai->dma_data = ssp_dma_params[cpu_dai->id][dma];
637 643
638 dev_dbg(&ssp->pdev->dev, "pxa_ssp_hw_params: dma %d\n", dma); 644 dev_dbg(&ssp->pdev->dev, "pxa_ssp_hw_params: dma %d\n", dma);
@@ -712,7 +718,7 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
712 /* When we use a network mode, we always require TDM slots 718 /* When we use a network mode, we always require TDM slots
713 * - complain loudly and fail if they've not been set up yet. 719 * - complain loudly and fail if they've not been set up yet.
714 */ 720 */
715 if ((sscr0 & SSCR0_MOD) && !(ssp_read_reg(ssp, SSTSA) & 0xf)) { 721 if ((sscr0 & SSCR0_MOD) && !ttsa) {
716 dev_err(&ssp->pdev->dev, "No TDM timeslot configured\n"); 722 dev_err(&ssp->pdev->dev, "No TDM timeslot configured\n");
717 return -EINVAL; 723 return -EINVAL;
718 } 724 }
diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c
index 53b9fb127a6d..d38e39575f51 100644
--- a/sound/soc/pxa/pxa2xx-pcm.c
+++ b/sound/soc/pxa/pxa2xx-pcm.c
@@ -81,7 +81,7 @@ static struct snd_pcm_ops pxa2xx_pcm_ops = {
81 .mmap = pxa2xx_pcm_mmap, 81 .mmap = pxa2xx_pcm_mmap,
82}; 82};
83 83
84static u64 pxa2xx_pcm_dmamask = DMA_32BIT_MASK; 84static u64 pxa2xx_pcm_dmamask = DMA_BIT_MASK(32);
85 85
86static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai, 86static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
87 struct snd_pcm *pcm) 87 struct snd_pcm *pcm)
@@ -91,7 +91,7 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
91 if (!card->dev->dma_mask) 91 if (!card->dev->dma_mask)
92 card->dev->dma_mask = &pxa2xx_pcm_dmamask; 92 card->dev->dma_mask = &pxa2xx_pcm_dmamask;
93 if (!card->dev->coherent_dma_mask) 93 if (!card->dev->coherent_dma_mask)
94 card->dev->coherent_dma_mask = DMA_32BIT_MASK; 94 card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
95 95
96 if (dai->playback.channels_min) { 96 if (dai->playback.channels_min) {
97 ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, 97 ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c
index a9d68fa2b34a..169ddad31575 100644
--- a/sound/soc/s3c24xx/s3c24xx-pcm.c
+++ b/sound/soc/s3c24xx/s3c24xx-pcm.c
@@ -419,7 +419,7 @@ static void s3c24xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
419 } 419 }
420} 420}
421 421
422static u64 s3c24xx_pcm_dmamask = DMA_32BIT_MASK; 422static u64 s3c24xx_pcm_dmamask = DMA_BIT_MASK(32);
423 423
424static int s3c24xx_pcm_new(struct snd_card *card, 424static int s3c24xx_pcm_new(struct snd_card *card,
425 struct snd_soc_dai *dai, struct snd_pcm *pcm) 425 struct snd_soc_dai *dai, struct snd_pcm *pcm)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 6e710f705a74..99712f652d0d 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -98,7 +98,7 @@ static int soc_ac97_dev_register(struct snd_soc_codec *codec)
98 int err; 98 int err;
99 99
100 codec->ac97->dev.bus = &ac97_bus_type; 100 codec->ac97->dev.bus = &ac97_bus_type;
101 codec->ac97->dev.parent = NULL; 101 codec->ac97->dev.parent = codec->card->dev;
102 codec->ac97->dev.release = soc_ac97_device_release; 102 codec->ac97->dev.release = soc_ac97_device_release;
103 103
104 dev_set_name(&codec->ac97->dev, "%d-%d:%s", 104 dev_set_name(&codec->ac97->dev, "%d-%d:%s",
@@ -767,11 +767,21 @@ static int soc_resume(struct platform_device *pdev)
767{ 767{
768 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 768 struct snd_soc_device *socdev = platform_get_drvdata(pdev);
769 struct snd_soc_card *card = socdev->card; 769 struct snd_soc_card *card = socdev->card;
770 struct snd_soc_dai *cpu_dai = card->dai_link[0].cpu_dai;
770 771
771 dev_dbg(socdev->dev, "scheduling resume work\n"); 772 /* AC97 devices might have other drivers hanging off them so
772 773 * need to resume immediately. Other drivers don't have that
773 if (!schedule_work(&card->deferred_resume_work)) 774 * problem and may take a substantial amount of time to resume
774 dev_err(socdev->dev, "resume work item may be lost\n"); 775 * due to I/O costs and anti-pop so handle them out of line.
776 */
777 if (cpu_dai->ac97_control) {
778 dev_dbg(socdev->dev, "Resuming AC97 immediately\n");
779 soc_resume_deferred(&card->deferred_resume_work);
780 } else {
781 dev_dbg(socdev->dev, "Scheduling resume work\n");
782 if (!schedule_work(&card->deferred_resume_work))
783 dev_err(socdev->dev, "resume work item may be lost\n");
784 }
775 785
776 return 0; 786 return 0;
777} 787}
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index c2db0f959681..823296d7d578 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -121,6 +121,7 @@ struct audioformat {
121 unsigned char attributes; /* corresponding attributes of cs endpoint */ 121 unsigned char attributes; /* corresponding attributes of cs endpoint */
122 unsigned char endpoint; /* endpoint */ 122 unsigned char endpoint; /* endpoint */
123 unsigned char ep_attr; /* endpoint attributes */ 123 unsigned char ep_attr; /* endpoint attributes */
124 unsigned char datainterval; /* log_2 of data packet interval */
124 unsigned int maxpacksize; /* max. packet size */ 125 unsigned int maxpacksize; /* max. packet size */
125 unsigned int rates; /* rate bitmasks */ 126 unsigned int rates; /* rate bitmasks */
126 unsigned int rate_min, rate_max; /* min/max rates */ 127 unsigned int rate_min, rate_max; /* min/max rates */
@@ -170,7 +171,6 @@ struct snd_usb_substream {
170 unsigned int curframesize; /* current packet size in frames (for capture) */ 171 unsigned int curframesize; /* current packet size in frames (for capture) */
171 unsigned int fill_max: 1; /* fill max packet size always */ 172 unsigned int fill_max: 1; /* fill max packet size always */
172 unsigned int fmt_type; /* USB audio format type (1-3) */ 173 unsigned int fmt_type; /* USB audio format type (1-3) */
173 unsigned int packs_per_ms; /* packets per millisecond (for playback) */
174 174
175 unsigned int running: 1; /* running status */ 175 unsigned int running: 1; /* running status */
176 176
@@ -607,9 +607,7 @@ static int prepare_playback_urb(struct snd_usb_substream *subs,
607 break; 607 break;
608 } 608 }
609 } 609 }
610 /* finish at the frame boundary at/after the period boundary */ 610 if (period_elapsed) /* finish at the period boundary */
611 if (period_elapsed &&
612 (i & (subs->packs_per_ms - 1)) == subs->packs_per_ms - 1)
613 break; 611 break;
614 } 612 }
615 if (subs->hwptr_done + offs > runtime->buffer_size) { 613 if (subs->hwptr_done + offs > runtime->buffer_size) {
@@ -1067,7 +1065,6 @@ static int init_substream_urbs(struct snd_usb_substream *subs, unsigned int peri
1067 packs_per_ms = 8 >> subs->datainterval; 1065 packs_per_ms = 8 >> subs->datainterval;
1068 else 1066 else
1069 packs_per_ms = 1; 1067 packs_per_ms = 1;
1070 subs->packs_per_ms = packs_per_ms;
1071 1068
1072 if (is_playback) { 1069 if (is_playback) {
1073 urb_packs = max(nrpacks, 1); 1070 urb_packs = max(nrpacks, 1);
@@ -1087,18 +1084,17 @@ static int init_substream_urbs(struct snd_usb_substream *subs, unsigned int peri
1087 minsize -= minsize >> 3; 1084 minsize -= minsize >> 3;
1088 minsize = max(minsize, 1u); 1085 minsize = max(minsize, 1u);
1089 total_packs = (period_bytes + minsize - 1) / minsize; 1086 total_packs = (period_bytes + minsize - 1) / minsize;
1090 /* round up to multiple of packs_per_ms */
1091 total_packs = (total_packs + packs_per_ms - 1)
1092 & ~(packs_per_ms - 1);
1093 /* we need at least two URBs for queueing */ 1087 /* we need at least two URBs for queueing */
1094 if (total_packs < 2 * packs_per_ms) { 1088 if (total_packs < 2) {
1095 total_packs = 2 * packs_per_ms; 1089 total_packs = 2;
1096 } else { 1090 } else {
1097 /* and we don't want too long a queue either */ 1091 /* and we don't want too long a queue either */
1098 maxpacks = max(MAX_QUEUE * packs_per_ms, urb_packs * 2); 1092 maxpacks = max(MAX_QUEUE * packs_per_ms, urb_packs * 2);
1099 total_packs = min(total_packs, maxpacks); 1093 total_packs = min(total_packs, maxpacks);
1100 } 1094 }
1101 } else { 1095 } else {
1096 while (urb_packs > 1 && urb_packs * maxsize >= period_bytes)
1097 urb_packs >>= 1;
1102 total_packs = MAX_URBS * urb_packs; 1098 total_packs = MAX_URBS * urb_packs;
1103 } 1099 }
1104 subs->nurbs = (total_packs + urb_packs - 1) / urb_packs; 1100 subs->nurbs = (total_packs + urb_packs - 1) / urb_packs;
@@ -1350,12 +1346,7 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
1350 subs->datapipe = usb_sndisocpipe(dev, ep); 1346 subs->datapipe = usb_sndisocpipe(dev, ep);
1351 else 1347 else
1352 subs->datapipe = usb_rcvisocpipe(dev, ep); 1348 subs->datapipe = usb_rcvisocpipe(dev, ep);
1353 if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH && 1349 subs->datainterval = fmt->datainterval;
1354 get_endpoint(alts, 0)->bInterval >= 1 &&
1355 get_endpoint(alts, 0)->bInterval <= 4)
1356 subs->datainterval = get_endpoint(alts, 0)->bInterval - 1;
1357 else
1358 subs->datainterval = 0;
1359 subs->syncpipe = subs->syncinterval = 0; 1350 subs->syncpipe = subs->syncinterval = 0;
1360 subs->maxpacksize = fmt->maxpacksize; 1351 subs->maxpacksize = fmt->maxpacksize;
1361 subs->fill_max = 0; 1352 subs->fill_max = 0;
@@ -1568,11 +1559,15 @@ static struct snd_pcm_hardware snd_usb_hardware =
1568#define hwc_debug(fmt, args...) /**/ 1559#define hwc_debug(fmt, args...) /**/
1569#endif 1560#endif
1570 1561
1571static int hw_check_valid_format(struct snd_pcm_hw_params *params, struct audioformat *fp) 1562static int hw_check_valid_format(struct snd_usb_substream *subs,
1563 struct snd_pcm_hw_params *params,
1564 struct audioformat *fp)
1572{ 1565{
1573 struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 1566 struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1574 struct snd_interval *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 1567 struct snd_interval *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
1575 struct snd_mask *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); 1568 struct snd_mask *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1569 struct snd_interval *pt = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
1570 unsigned int ptime;
1576 1571
1577 /* check the format */ 1572 /* check the format */
1578 if (!snd_mask_test(fmts, fp->format)) { 1573 if (!snd_mask_test(fmts, fp->format)) {
@@ -1593,6 +1588,14 @@ static int hw_check_valid_format(struct snd_pcm_hw_params *params, struct audiof
1593 hwc_debug(" > check: rate_max %d < min %d\n", fp->rate_max, it->min); 1588 hwc_debug(" > check: rate_max %d < min %d\n", fp->rate_max, it->min);
1594 return 0; 1589 return 0;
1595 } 1590 }
1591 /* check whether the period time is >= the data packet interval */
1592 if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH) {
1593 ptime = 125 * (1 << fp->datainterval);
1594 if (ptime > pt->max || (ptime == pt->max && pt->openmax)) {
1595 hwc_debug(" > check: ptime %u > max %u\n", ptime, pt->max);
1596 return 0;
1597 }
1598 }
1596 return 1; 1599 return 1;
1597} 1600}
1598 1601
@@ -1611,7 +1614,7 @@ static int hw_rule_rate(struct snd_pcm_hw_params *params,
1611 list_for_each(p, &subs->fmt_list) { 1614 list_for_each(p, &subs->fmt_list) {
1612 struct audioformat *fp; 1615 struct audioformat *fp;
1613 fp = list_entry(p, struct audioformat, list); 1616 fp = list_entry(p, struct audioformat, list);
1614 if (!hw_check_valid_format(params, fp)) 1617 if (!hw_check_valid_format(subs, params, fp))
1615 continue; 1618 continue;
1616 if (changed++) { 1619 if (changed++) {
1617 if (rmin > fp->rate_min) 1620 if (rmin > fp->rate_min)
@@ -1665,7 +1668,7 @@ static int hw_rule_channels(struct snd_pcm_hw_params *params,
1665 list_for_each(p, &subs->fmt_list) { 1668 list_for_each(p, &subs->fmt_list) {
1666 struct audioformat *fp; 1669 struct audioformat *fp;
1667 fp = list_entry(p, struct audioformat, list); 1670 fp = list_entry(p, struct audioformat, list);
1668 if (!hw_check_valid_format(params, fp)) 1671 if (!hw_check_valid_format(subs, params, fp))
1669 continue; 1672 continue;
1670 if (changed++) { 1673 if (changed++) {
1671 if (rmin > fp->channels) 1674 if (rmin > fp->channels)
@@ -1718,7 +1721,7 @@ static int hw_rule_format(struct snd_pcm_hw_params *params,
1718 list_for_each(p, &subs->fmt_list) { 1721 list_for_each(p, &subs->fmt_list) {
1719 struct audioformat *fp; 1722 struct audioformat *fp;
1720 fp = list_entry(p, struct audioformat, list); 1723 fp = list_entry(p, struct audioformat, list);
1721 if (!hw_check_valid_format(params, fp)) 1724 if (!hw_check_valid_format(subs, params, fp))
1722 continue; 1725 continue;
1723 fbits |= (1ULL << fp->format); 1726 fbits |= (1ULL << fp->format);
1724 } 1727 }
@@ -1736,95 +1739,42 @@ static int hw_rule_format(struct snd_pcm_hw_params *params,
1736 return changed; 1739 return changed;
1737} 1740}
1738 1741
1739#define MAX_MASK 64 1742static int hw_rule_period_time(struct snd_pcm_hw_params *params,
1740 1743 struct snd_pcm_hw_rule *rule)
1741/*
1742 * check whether the registered audio formats need special hw-constraints
1743 */
1744static int check_hw_params_convention(struct snd_usb_substream *subs)
1745{ 1744{
1746 int i; 1745 struct snd_usb_substream *subs = rule->private;
1747 u32 *channels; 1746 struct audioformat *fp;
1748 u32 *rates; 1747 struct snd_interval *it;
1749 u32 cmaster, rmaster; 1748 unsigned char min_datainterval;
1750 u32 rate_min = 0, rate_max = 0; 1749 unsigned int pmin;
1751 struct list_head *p; 1750 int changed;
1752 int err = 1;
1753
1754 channels = kcalloc(MAX_MASK, sizeof(u32), GFP_KERNEL);
1755 rates = kcalloc(MAX_MASK, sizeof(u32), GFP_KERNEL);
1756 if (!channels || !rates) {
1757 err = -ENOMEM;
1758 goto __out;
1759 }
1760 1751
1761 list_for_each(p, &subs->fmt_list) { 1752 it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
1762 struct audioformat *f; 1753 hwc_debug("hw_rule_period_time: (%u,%u)\n", it->min, it->max);
1763 f = list_entry(p, struct audioformat, list); 1754 min_datainterval = 0xff;
1764 /* unconventional channels? */ 1755 list_for_each_entry(fp, &subs->fmt_list, list) {
1765 if (f->channels > 32) 1756 if (!hw_check_valid_format(subs, params, fp))
1766 goto __out;
1767 /* continuous rate min/max matches? */
1768 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1769 if (rate_min && f->rate_min != rate_min)
1770 goto __out;
1771 if (rate_max && f->rate_max != rate_max)
1772 goto __out;
1773 rate_min = f->rate_min;
1774 rate_max = f->rate_max;
1775 }
1776 /* combination of continuous rates and fixed rates? */
1777 if (rates[f->format] & SNDRV_PCM_RATE_CONTINUOUS) {
1778 if (f->rates != rates[f->format])
1779 goto __out;
1780 }
1781 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1782 if (rates[f->format] && rates[f->format] != f->rates)
1783 goto __out;
1784 }
1785 channels[f->format] |= 1 << (f->channels - 1);
1786 rates[f->format] |= f->rates;
1787 /* needs knot? */
1788 if (f->rates & SNDRV_PCM_RATE_KNOT)
1789 goto __out;
1790 }
1791 /* check whether channels and rates match for all formats */
1792 cmaster = rmaster = 0;
1793 for (i = 0; i < MAX_MASK; i++) {
1794 if (cmaster != channels[i] && cmaster && channels[i])
1795 goto __out;
1796 if (rmaster != rates[i] && rmaster && rates[i])
1797 goto __out;
1798 if (channels[i])
1799 cmaster = channels[i];
1800 if (rates[i])
1801 rmaster = rates[i];
1802 }
1803 /* check whether channels match for all distinct rates */
1804 memset(channels, 0, MAX_MASK * sizeof(u32));
1805 list_for_each(p, &subs->fmt_list) {
1806 struct audioformat *f;
1807 f = list_entry(p, struct audioformat, list);
1808 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS)
1809 continue; 1757 continue;
1810 for (i = 0; i < 32; i++) { 1758 min_datainterval = min(min_datainterval, fp->datainterval);
1811 if (f->rates & (1 << i))
1812 channels[i] |= 1 << (f->channels - 1);
1813 }
1814 } 1759 }
1815 cmaster = 0; 1760 if (min_datainterval == 0xff) {
1816 for (i = 0; i < 32; i++) { 1761 hwc_debug(" --> get emtpy\n");
1817 if (cmaster != channels[i] && cmaster && channels[i]) 1762 it->empty = 1;
1818 goto __out; 1763 return -EINVAL;
1819 if (channels[i])
1820 cmaster = channels[i];
1821 } 1764 }
1822 err = 0; 1765 pmin = 125 * (1 << min_datainterval);
1823 1766 changed = 0;
1824 __out: 1767 if (it->min < pmin) {
1825 kfree(channels); 1768 it->min = pmin;
1826 kfree(rates); 1769 it->openmin = 0;
1827 return err; 1770 changed = 1;
1771 }
1772 if (snd_interval_checkempty(it)) {
1773 it->empty = 1;
1774 return -EINVAL;
1775 }
1776 hwc_debug(" --> (%u,%u) (changed = %d)\n", it->min, it->max, changed);
1777 return changed;
1828} 1778}
1829 1779
1830/* 1780/*
@@ -1872,6 +1822,8 @@ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
1872static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs) 1822static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs)
1873{ 1823{
1874 struct list_head *p; 1824 struct list_head *p;
1825 unsigned int pt, ptmin;
1826 int param_period_time_if_needed;
1875 int err; 1827 int err;
1876 1828
1877 runtime->hw.formats = subs->formats; 1829 runtime->hw.formats = subs->formats;
@@ -1881,6 +1833,7 @@ static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substre
1881 runtime->hw.channels_min = 256; 1833 runtime->hw.channels_min = 256;
1882 runtime->hw.channels_max = 0; 1834 runtime->hw.channels_max = 0;
1883 runtime->hw.rates = 0; 1835 runtime->hw.rates = 0;
1836 ptmin = UINT_MAX;
1884 /* check min/max rates and channels */ 1837 /* check min/max rates and channels */
1885 list_for_each(p, &subs->fmt_list) { 1838 list_for_each(p, &subs->fmt_list) {
1886 struct audioformat *fp; 1839 struct audioformat *fp;
@@ -1899,42 +1852,54 @@ static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substre
1899 runtime->hw.period_bytes_min = runtime->hw.period_bytes_max = 1852 runtime->hw.period_bytes_min = runtime->hw.period_bytes_max =
1900 fp->frame_size; 1853 fp->frame_size;
1901 } 1854 }
1855 pt = 125 * (1 << fp->datainterval);
1856 ptmin = min(ptmin, pt);
1902 } 1857 }
1903 1858
1904 /* set the period time minimum 1ms */ 1859 param_period_time_if_needed = SNDRV_PCM_HW_PARAM_PERIOD_TIME;
1905 /* FIXME: high-speed mode allows 125us minimum period, but many parts 1860 if (snd_usb_get_speed(subs->dev) != USB_SPEED_HIGH)
1906 * in the current code assume the 1ms period. 1861 /* full speed devices have fixed data packet interval */
1907 */ 1862 ptmin = 1000;
1863 if (ptmin == 1000)
1864 /* if period time doesn't go below 1 ms, no rules needed */
1865 param_period_time_if_needed = -1;
1908 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME, 1866 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME,
1909 1000, 1867 ptmin, UINT_MAX);
1910 /*(nrpacks * MAX_URBS) * 1000*/ UINT_MAX); 1868
1911 1869 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
1912 err = check_hw_params_convention(subs); 1870 hw_rule_rate, subs,
1913 if (err < 0) 1871 SNDRV_PCM_HW_PARAM_FORMAT,
1872 SNDRV_PCM_HW_PARAM_CHANNELS,
1873 param_period_time_if_needed,
1874 -1)) < 0)
1914 return err; 1875 return err;
1915 else if (err) { 1876 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
1916 hwc_debug("setting extra hw constraints...\n"); 1877 hw_rule_channels, subs,
1917 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 1878 SNDRV_PCM_HW_PARAM_FORMAT,
1918 hw_rule_rate, subs, 1879 SNDRV_PCM_HW_PARAM_RATE,
1919 SNDRV_PCM_HW_PARAM_FORMAT, 1880 param_period_time_if_needed,
1920 SNDRV_PCM_HW_PARAM_CHANNELS, 1881 -1)) < 0)
1921 -1)) < 0) 1882 return err;
1922 return err; 1883 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
1923 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 1884 hw_rule_format, subs,
1924 hw_rule_channels, subs, 1885 SNDRV_PCM_HW_PARAM_RATE,
1925 SNDRV_PCM_HW_PARAM_FORMAT, 1886 SNDRV_PCM_HW_PARAM_CHANNELS,
1926 SNDRV_PCM_HW_PARAM_RATE, 1887 param_period_time_if_needed,
1927 -1)) < 0) 1888 -1)) < 0)
1928 return err; 1889 return err;
1929 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT, 1890 if (param_period_time_if_needed >= 0) {
1930 hw_rule_format, subs, 1891 err = snd_pcm_hw_rule_add(runtime, 0,
1931 SNDRV_PCM_HW_PARAM_RATE, 1892 SNDRV_PCM_HW_PARAM_PERIOD_TIME,
1932 SNDRV_PCM_HW_PARAM_CHANNELS, 1893 hw_rule_period_time, subs,
1933 -1)) < 0) 1894 SNDRV_PCM_HW_PARAM_FORMAT,
1934 return err; 1895 SNDRV_PCM_HW_PARAM_CHANNELS,
1935 if ((err = snd_usb_pcm_check_knot(runtime, subs)) < 0) 1896 SNDRV_PCM_HW_PARAM_RATE,
1897 -1);
1898 if (err < 0)
1936 return err; 1899 return err;
1937 } 1900 }
1901 if ((err = snd_usb_pcm_check_knot(runtime, subs)) < 0)
1902 return err;
1938 return 0; 1903 return 0;
1939} 1904}
1940 1905
@@ -2147,7 +2112,8 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s
2147 fp = list_entry(p, struct audioformat, list); 2112 fp = list_entry(p, struct audioformat, list);
2148 snd_iprintf(buffer, " Interface %d\n", fp->iface); 2113 snd_iprintf(buffer, " Interface %d\n", fp->iface);
2149 snd_iprintf(buffer, " Altset %d\n", fp->altsetting); 2114 snd_iprintf(buffer, " Altset %d\n", fp->altsetting);
2150 snd_iprintf(buffer, " Format: %#x\n", fp->format); 2115 snd_iprintf(buffer, " Format: %#x (%d bits)\n",
2116 fp->format, snd_pcm_format_width(fp->format));
2151 snd_iprintf(buffer, " Channels: %d\n", fp->channels); 2117 snd_iprintf(buffer, " Channels: %d\n", fp->channels);
2152 snd_iprintf(buffer, " Endpoint: %d %s (%s)\n", 2118 snd_iprintf(buffer, " Endpoint: %d %s (%s)\n",
2153 fp->endpoint & USB_ENDPOINT_NUMBER_MASK, 2119 fp->endpoint & USB_ENDPOINT_NUMBER_MASK,
@@ -2166,6 +2132,9 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s
2166 } 2132 }
2167 snd_iprintf(buffer, "\n"); 2133 snd_iprintf(buffer, "\n");
2168 } 2134 }
2135 if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH)
2136 snd_iprintf(buffer, " Data packet interval: %d us\n",
2137 125 * (1 << fp->datainterval));
2169 // snd_iprintf(buffer, " Max Packet Size = %d\n", fp->maxpacksize); 2138 // snd_iprintf(buffer, " Max Packet Size = %d\n", fp->maxpacksize);
2170 // snd_iprintf(buffer, " EP Attribute = %#x\n", fp->attributes); 2139 // snd_iprintf(buffer, " EP Attribute = %#x\n", fp->attributes);
2171 } 2140 }
@@ -2659,6 +2628,17 @@ static int parse_audio_format(struct snd_usb_audio *chip, struct audioformat *fp
2659 return 0; 2628 return 0;
2660} 2629}
2661 2630
2631static unsigned char parse_datainterval(struct snd_usb_audio *chip,
2632 struct usb_host_interface *alts)
2633{
2634 if (snd_usb_get_speed(chip->dev) == USB_SPEED_HIGH &&
2635 get_endpoint(alts, 0)->bInterval >= 1 &&
2636 get_endpoint(alts, 0)->bInterval <= 4)
2637 return get_endpoint(alts, 0)->bInterval - 1;
2638 else
2639 return 0;
2640}
2641
2662static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip, 2642static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip,
2663 int iface, int altno); 2643 int iface, int altno);
2664static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) 2644static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
@@ -2764,6 +2744,7 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
2764 fp->altset_idx = i; 2744 fp->altset_idx = i;
2765 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; 2745 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2766 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; 2746 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2747 fp->datainterval = parse_datainterval(chip, alts);
2767 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); 2748 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2768 if (snd_usb_get_speed(dev) == USB_SPEED_HIGH) 2749 if (snd_usb_get_speed(dev) == USB_SPEED_HIGH)
2769 fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1) 2750 fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
@@ -2955,6 +2936,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
2955 return -EINVAL; 2936 return -EINVAL;
2956 } 2937 }
2957 alts = &iface->altsetting[fp->altset_idx]; 2938 alts = &iface->altsetting[fp->altset_idx];
2939 fp->datainterval = parse_datainterval(chip, alts);
2958 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); 2940 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2959 usb_set_interface(chip->dev, fp->iface, 0); 2941 usb_set_interface(chip->dev, fp->iface, 0);
2960 init_usb_pitch(chip->dev, fp->iface, alts, fp); 2942 init_usb_pitch(chip->dev, fp->iface, alts, fp);
@@ -3049,6 +3031,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip,
3049 fp->iface = altsd->bInterfaceNumber; 3031 fp->iface = altsd->bInterfaceNumber;
3050 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; 3032 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
3051 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; 3033 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
3034 fp->datainterval = 0;
3052 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); 3035 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
3053 3036
3054 switch (fp->maxpacksize) { 3037 switch (fp->maxpacksize) {
@@ -3116,6 +3099,7 @@ static int create_ua1000_quirk(struct snd_usb_audio *chip,
3116 fp->iface = altsd->bInterfaceNumber; 3099 fp->iface = altsd->bInterfaceNumber;
3117 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; 3100 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
3118 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; 3101 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
3102 fp->datainterval = parse_datainterval(chip, alts);
3119 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); 3103 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
3120 fp->rate_max = fp->rate_min = combine_triple(&alts->extra[8]); 3104 fp->rate_max = fp->rate_min = combine_triple(&alts->extra[8]);
3121 3105
@@ -3168,6 +3152,7 @@ static int create_ua101_quirk(struct snd_usb_audio *chip,
3168 fp->iface = altsd->bInterfaceNumber; 3152 fp->iface = altsd->bInterfaceNumber;
3169 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; 3153 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
3170 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; 3154 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
3155 fp->datainterval = parse_datainterval(chip, alts);
3171 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); 3156 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
3172 fp->rate_max = fp->rate_min = combine_triple(&alts->extra[15]); 3157 fp->rate_max = fp->rate_min = combine_triple(&alts->extra[15]);
3173 3158